recutils-1.9/0000755000000000000000000000000014226577416010202 500000000000000recutils-1.9/Makefile.am0000644000000000000000000000161214226563465012155 00000000000000# Top-level Makefile.am # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 # Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . ACLOCAL_AMFLAGS = -I m4 SUBDIRS = lib libcsv src utils bash doc po man torture etc perf: $(MAKE) -C torture/utils perf .PHONY: perf # End of Makefile.am recutils-1.9/doc/0000755000000000000000000000000014226577414010745 500000000000000recutils-1.9/doc/Makefile.am0000644000000000000000000000154514226563465012727 00000000000000# doc/Makefile.am # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, # 2018, 2019, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . info_TEXINFOS = recutils.texi recutils_TEXINFOS = parse-datetime.texi fdl.texi # End of Makefile.am recutils-1.9/doc/fdl.texi0000644000000000000000000005562214226563465012340 00000000000000@c The GNU Free Documentation License. @center Version 1.3, 3 November 2008 @c This file is intended to be included within another document, @c hence no sectioning command or @node. @display Copyright @copyright{} 2000, 2001, 2002, 2007, 2008, 2020, 2022 Free Software Foundation, Inc. @uref{http://fsf.org/} Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. @end display @enumerate 0 @item PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document @dfn{free} in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of ``copyleft'', which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. @item APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The ``Document'', below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as ``you''. You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A ``Modified Version'' of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A ``Secondary Section'' is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The ``Invariant Sections'' are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The ``Cover Texts'' are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A ``Transparent'' copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not ``Transparent'' is called ``Opaque''. Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, La@TeX{} input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The ``Title Page'' means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, ``Title Page'' means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The ``publisher'' means any person or entity that distributes copies of the Document to the public. A section ``Entitled XYZ'' means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as ``Acknowledgements'', ``Dedications'', ``Endorsements'', or ``History''.) To ``Preserve the Title'' of such a section when you modify the Document means that it remains a section ``Entitled XYZ'' according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. @item VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. @item COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. @item MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: @enumerate A @item Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. @item List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. @item State on the Title page the name of the publisher of the Modified Version, as the publisher. @item Preserve all the copyright notices of the Document. @item Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. @item Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. @item Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. @item Include an unaltered copy of this License. @item Preserve the section Entitled ``History'', Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled ``History'' in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. @item Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the ``History'' section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. @item For any section Entitled ``Acknowledgements'' or ``Dedications'', Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. @item Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. @item Delete any section Entitled ``Endorsements''. Such a section may not be included in the Modified Version. @item Do not retitle any existing section to be Entitled ``Endorsements'' or to conflict in title with any Invariant Section. @item Preserve any Warranty Disclaimers. @end enumerate If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled ``Endorsements'', provided it contains nothing but endorsements of your Modified Version by various parties---for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. @item COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled ``History'' in the various original documents, forming one section Entitled ``History''; likewise combine any sections Entitled ``Acknowledgements'', and any sections Entitled ``Dedications''. You must delete all sections Entitled ``Endorsements.'' @item COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. @item AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an ``aggregate'' if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. @item TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled ``Acknowledgements'', ``Dedications'', or ``History'', the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. @item TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. 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, receipt of a copy of some or all of the same material does not give you any rights to use it. @item FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See @uref{http://www.gnu.org/copyleft/}. Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License ``or any later version'' applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. @item RELICENSING ``Massive Multiauthor Collaboration Site'' (or ``MMC Site'') means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A ``Massive Multiauthor Collaboration'' (or ``MMC'') contained in the site means any set of copyrightable works thus published on the MMC site. ``CC-BY-SA'' means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. ``Incorporate'' means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is ``eligible for relicensing'' if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. @end enumerate @page @heading ADDENDUM: How to use this License for your documents To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: @smallexample @group Copyright (C) @var{year} @var{your name}. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end group @end smallexample If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the ``with@dots{}Texts.'' line with this: @smallexample @group with the Invariant Sections being @var{list their titles}, with the Front-Cover Texts being @var{list}, and with the Back-Cover Texts being @var{list}. @end group @end smallexample If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software. @c Local Variables: @c ispell-local-pdict: "ispell-dict" @c End: recutils-1.9/doc/recutils.info0000644000000000000000000071665314226577017013415 00000000000000This is recutils.info, produced by makeinfo version 6.3 from recutils.texi. This manual is for GNU recutils (version 1.9, 16 April 2022). Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2022 Jose E. Marchesi Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2020, 2022 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". INFO-DIR-SECTION Database START-INFO-DIR-ENTRY * recutils: (recutils). The GNU Recutils manual. END-INFO-DIR-ENTRY INFO-DIR-SECTION Individual utilities START-INFO-DIR-ENTRY * recinf: (recutils)Invoking recinf. Get info about recfiles. * recsel: (recutils)Invoking recsel. Read records. * recins: (recutils)Invoking recins. Insert records. * recdel: (recutils)Invoking recdel. Delete records. * recset: (recutils)Invoking recset. Manage fields. * recfix: (recutils)Invoking recfix. Fix recfiles. * csv2rec: (recutils)Invoking csv2rec. CSV to recfiles. * rec2csv: (recutils)Invoking rec2csv. Recfiles to CSV. * mdb2rec: (recutils)Invoking mdb2rec. MDB to recfiles. END-INFO-DIR-ENTRY  File: recutils.info, Node: Top, Next: Introduction, Up: (dir) GNU Recutils ************ This manual documents version 1.9 of the GNU recutils. This manual is for GNU recutils (version 1.9, 16 April 2022). Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2022 Jose E. Marchesi Copyright (C) 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2020, 2022 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled "GNU Free Documentation License". * Menu: The Basics * Introduction:: Introducing recutils. * The Rec Format:: Writing recfiles. Using the Recutils * Querying Recfiles:: Extracting data from recfiles. * Editing Records:: Inserting and deleting records. * Editing Fields:: Inserting, modifying and deleting fields. Data Integrity * Field Types:: Restrictions on the values of fields. * Constraints on Record Sets:: Requiring or forbidding specific fields. * Checking Recfiles:: Making sure the data is ok. Advanced Topics * Remote Descriptors:: Implementing distributed databases. * Grouping and Aggregates:: Statistics. * Queries which Join Records:: Crossing record of different types. * Auto-Generated Fields:: Counters and time-stamps. * Encryption:: Storing sensitive information. * Generating Reports:: Formatted output with templates. * Interoperability:: Importing and exporting to other formats. * Bash Builtins:: Boosting the recutils in the shell. Reference Material * Invoking the Utilities:: Exhaustive list of command line arguments. * Using ob-rec.el:: Invoking Recutils from Emacs Org-mode source blocks. * Regular Expressions:: Flavor of regexps supported in recutils. * Date input formats:: Specifying dates and times. * GNU Free Documentation License:: Distribution terms for this document. Indexes * Concept Index:: -- The Detailed Node Listing -- ---------------------- Here are some other nodes which are really subnodes of the ones already listed, mentioned here so you can get to them in one step: Introduction * Purpose:: Why recutils. * A Little Example:: Recutils in action. The Rec Format * Fields:: The key-value pairs which comprise the data. * Records:: The main entities of a recfile. * Comments:: Information for humans' benefit only. * Record Descriptors:: Describing different types of records. Querying Recfiles * Simple Selections:: Introducing 'recsel'. * Selecting by Type:: Get the records of some given type. * Selecting by Position:: Get the record occupying some position. * Random Records:: Get a set of random records. * Selection Expressions:: Get the records satisfying some expression. * Field Expressions:: Selecting a subset of fields. * Sorted Output:: Get the records in a given order. Editing Records * Inserting Records:: Inserting data into recfiles. * Deleting Records:: Removing entries. * Sorting Records:: Physical reordering of records. Editing Fields * Setting Fields:: Editing field values. * Adding Fields:: Adding new fields to records. * Deleting Fields:: Removing or commenting-out fields. Field Types * Declaring Types:: Declaration of types in record descriptors. * Types and Fields:: Associating fields with types. * Scalar Field Types:: Numbers and ranges. * String Field Types:: Lines, limited strings and regular expressions. * Enumerated Field Types:: Enumerations and boolean values. * Date and Time Types:: Dates and times. * Other Field Types:: Emails, fields, UUIDs, ... Constraints on Record Sets * Mandatory Fields:: Requiring the presence of fields. * Prohibited Fields:: Forbidding the presence of fields. * Allowed Fields:: Restricting the presence of fields. * Keys and Unique Fields:: Fields characterizing records. * Size Constraints:: Limiting the size of a record set. * Arbitrary Constraints:: Constraints records must comply with. Checking Recfiles * Syntactical Errors:: Fixing structure errors in recfiles. * Semantic Errors:: Fixing semantic errors in recfiles. Grouping and Aggregates * Grouping Records:: Combining records by fields. * Aggregate Functions:: Statistics and more. Joins * Foreign Keys:: Referring records from another records. * Joining Records:: Performing cross-joins. Auto-Generated Fields * Counters:: Generating incremental Ids. * Unique Identifiers:: Generating universally unique Ids. * Time-Stamps:: Tracking the creation of records. Encryption * Confidential Fields:: Declaring fields as sensitive data. * Encrypting Files:: Encrypt confidential fields. * Decrypting Data:: Reading encrypted fields. Generating Reports * Templates:: Formatted output. Interoperability * CSV Files:: Converting recfiles to/from csv files. * Importing MDB Files:: Importing MS Access Databases. Bash Builtins * readrec:: Exporting the contents of records to the shell. Invoking the Utilities * Invoking recinf:: Printing information about rec files. * Invoking recsel:: Selecting records. * Invoking recins:: Inserting records. * Invoking recdel:: Deleting records. * Invoking recset:: Managing fields. * Invoking recfix:: Fixing broken rec files, and diagnostics. * Invoking recfmt:: Formatting records using templates. * Invoking csv2rec:: Converting csv data into rec data. * Invoking rec2csv:: Converting rec data into csv data. * Invoking mdb2rec:: Converting mdb files into rec files.  File: recutils.info, Node: Introduction, Next: The Rec Format, Prev: Top, Up: Top 1 Introduction ************** * Menu: * Purpose:: Why recutils. * A Little Example:: Recutils in action.  File: recutils.info, Node: Purpose, Next: A Little Example, Up: Introduction 1.1 Purpose =========== GNU recutils is a set of tools and libraries to access human-editable, text-based databases called _recfiles_. The data is stored as a sequence of records, each record containing an arbitrary number of named fields. Advanced capabilities usually found in other data storage systems are supported: data types, data integrity (keys, mandatory fields, etc.) as well as the ability of records to refer to other records (sort of foreign keys). Despite its simplicity, recfiles can be used to store medium-sized databases. So, yet another data storage system? The mere existence of this package deserves an explanation. There is a rich set of already available free data storage systems, covering a broad range of requirements. Big systems having complex data storage requirements will probably make use of some full-fledged relational system such as MySQL or PostgreSQL. Less demanding applications, or applications with special deployment requirements, may find it more convenient to use a simpler system such as SQLite, where the data is stored in a single binary file. XML files are often used to store configuration settings for programs, and to encode data for transmission through networks. So it looks like all the needs are covered by the existing solutions ... but consider the following characteristics of the data storage systems mentioned in the previous paragraph: - The stored data is not directly human readable. - The stored data is definitely not directly writable by humans. - They are program dependent. - They are not easily managed by version control systems. Regarding the first point (human readability), while it is clearly true for the binary files, some may argue XML files are indeed human readable... well... 'try to r&iamp;ead

this

'. YAML (1) is an example of a hierarchical data storage format which is much more readable than XML. The problem with YAML is that it was designed as a "data serialization language" and thus to map the data constructs usually found in programming languages. That makes it too complex for the simple task of storing plain lists of items. Recfiles are human-readable, human-writable and still easy to parse and to manipulate automatically. Obviously they are not suitable for any task (for example, it can be difficult to manage hierarchies in recfiles) and performance is somewhat sacrificed in favor of readability. But they are quite handy to store small to medium simple databases. The GNU recutils suite comprises: - This Texinfo manual, describing the Rec format and the accompanying software. - A C library (librec) that provides a rich set of functions to manipulate rec data. - A set utilities that can be used in shell scripts and in the command line to operate on rec files. - An emacs mode, 'rec-mode'. ---------- Footnotes ---------- (1) Yet Another Markup Language  File: recutils.info, Node: A Little Example, Prev: Purpose, Up: Introduction 1.2 A Little Example ==================== Everyone loves to grow a nice book collection at home. Unfortunately, in most cases the management of our private books gets uncontrolled: some books get lost, some of them may be loaned to some friend, there are some duplicated (or even triplicated!) titles because we forgot about the existence of the previous copy, and many more details. In order to improve the management of our little book collection we could make use of a complex data storage system such as a relational database. The problem with that approach, as explained in the previous section, is that the tool is too complicated for the simple task: we do not need the full power of a relational database system to maintain a simple collection of books. With GNU recutils it is possible to maintain such a little database in a text file. Let's call it 'books.rec'. The following table resumes the information items that we want to store for each title, along with some common-sense restrictions. - Every book has a title, even if it is "No Title". - A book can have several titles. - A book can have more than one author. - For some books the author is not known. - Sometimes we don't care about who the author of a book is. - We usually store our books at home. - Sometimes we loan books to friends. - On occasions we lose track of the physical location of a book. Did we loan it to anyone? Was it lost in the last move? Is it in some hidden place at home? The contents of the rec file follows: # -*- mode: rec -*- %rec: Book %mandatory: Title %type: Location enum loaned home unknown %doc: + A book in my personal collection. Title: GNU Emacs Manual Author: Richard M. Stallman Publisher: FSF Location: home Title: The Colour of Magic Author: Terry Pratchett Location: loaned Title: Mio Cid Author: Anonymous Location: home Title: chapters.gnu.org administration guide Author: Nacho Gonzalez Author: Jose E. Marchesi Location: unknown Title: Yeelong User Manual Location: home # End of books.rec Simple. The file contains a set of records separated by blank lines. Each record comprises a set of fields with a name and a value. The GNU recutils can then be used to access the contents of the file. For example, we could get a list of the names of loaned books by invoking 'recsel' in the following way: $ recsel -e "Location = 'loaned'" -P Title books.rec The Colour of Magic  File: recutils.info, Node: The Rec Format, Next: Querying Recfiles, Prev: Introduction, Up: Top 2 The Rec Format **************** A recfile is nothing but a text file which conforms to a few simple rules. This chapter shows you how, by observing these rules, recfiles of arbitrary complexity can be written. * Menu: * Fields:: The key-value pairs which comprise the data. * Records:: The main entities of a recfile. * Comments:: Information for humans' benefit only. * Record Descriptors:: Describing different types of records.  File: recutils.info, Node: Fields, Next: Records, Up: The Rec Format 2.1 Fields ========== A "field" is the written form of an association between a label and a value. For example, if we wanted to associate the label 'Name' with the value 'Ada Lovelace' we would write: Name: Ada Lovelace The separator between the field name and the field value is a colon followed by a blank character (space and tabs, but not newlines). The name of the field shall begin in the first column of the line. A "field name" is a sequence of alphanumeric characters plus underscores ('_'), starting with a letter or the character '%'. The regular expression denoting a field name is: [a-zA-Z%][a-zA-Z0-9_]* Field names are case-sensitive. 'Foo' and 'foo' are different field names. The following list contains valid field names (the final colon is not part of the names): Foo: foo: A23: ab1: A_Field: The "value of a field" is a sequence of characters terminated by a single newline character ('\n'). Sometimes a value is too long to fit in the usual width of terminals and screens. In that case, depending on the specific tool used to access the file, the readability of the data would not be that good. It is therefore possible to physically split a logical line by escaping a newline with a backslash character, as in: LongLine: This is a quite long value \ comprising a single unique logical line \ split in several physical lines. The sequence '\n' (newline) '+' (PLUS) and an optional '_' (SPACE) is interpreted as a newline when found in a field value. For example, the C string '"bar1\nbar2\n bar3"' would be encoded in the following way in a field value: Foo: bar1 + bar2 + bar3  File: recutils.info, Node: Records, Next: Comments, Prev: Fields, Up: The Rec Format 2.2 Records =========== A "record" is a group of one or more fields written one after the other: Name1: Value1 Name2: Value2 Name2: Value3 It is possible for several fields in a record to share the same name or/and the field value. The following is a valid record containing three fields: Name: John Smith Email: john.smith@foomail.com Email: john@smith.name The "size of a record" is defined as the number of fields that it contains. A record cannot be empty, so the minimum size for a record is 1. The maximum number of fields for a record is only limited by the available physical resources. The size of the previous record is 3. Records are separated by one or more blank lines. For instance, the following example shows a file named 'personalities.rec' featuring three records: Name: Ada Lovelace Age: 36 Name: Peter the Great Age: 53 Name: Matusalem Age: 969  File: recutils.info, Node: Comments, Next: Record Descriptors, Prev: Records, Up: The Rec Format 2.3 Comments ============ Any line having an '#' (ASCII 0x23) character in the first column is a comment line. Comments may be used to insert information that is not part of the database but useful in other ways. They are completely ignored by processing tools and can only be seen by looking at the recfile itself. It is also quite convenient to comment-out information from the recfile without having to remove it in a definitive way: you may want to recover the data into the database later! Comment lines can be used to comment-out both full registers and single fields: Name: Jose E. Marchesi # Occupation: Software Engineer # Severe lack of brain capacity # Fired on 02/01/2009 (without compensation) Occupation: Unoccupied Comments are also useful for headers, footers, comment blocks and all kind of markers: # -*- mode: rec -*- # # TODO # # This file contains the Bugs database of GNU recutils. # # Blah blah... ... # End of TODO Unlike some file formats, comments in recfiles must be complete lines. You cannot start a comment in the middle of a line. For example, in the following record, the '#' does _not_ start a comment: Name: Peter the Great # Russian Tsar Age: 53  File: recutils.info, Node: Record Descriptors, Prev: Comments, Up: The Rec Format 2.4 Record Descriptors ====================== Certain properties of a set of records can be specified by preceding them with a "record descriptor". A record descriptor is itself a record, and uses fields with some predefined names to store properties. * Menu: * Record Sets:: Defining different types of records. * Naming Record Types:: Some conventions on naming record sets. * Documenting Records:: Documenting your record sets. * Record Sets Properties:: Introducing the special fields.  File: recutils.info, Node: Record Sets, Next: Naming Record Types, Up: Record Descriptors 2.4.1 Record Sets ----------------- The most basic property that can be specified for a set of records is their "type". The special field name '%rec' is used for that purpose: %rec: Entry Id: 1 Name: Entry 1 Id: 2 Name: Entry 2 The records following the descriptors are then identified as having its type. So in the example above we would say there are two records of type "Entry". Or in a more colloquial way we would say there are two "Entries" in the database. The effect of a record descriptor ends when another descriptor is found in the stream of records. This allows you to store different kinds of records in the same database. For example, suppose you are maintaining a depot. You will need to keep track of both what items are available and when they are sold or restocked. The following example shows the usage of two record descriptors to store both kind of records: articles and stock. %rec: Article Id: 1 Title: Article 1 Id: 2 Title: Article 2 %rec: Stock Id: 1 Type: sell Date: 20 April 2011 Id: 2 Type: stock Date: 21 April 2011 The collection of records having same types in recfiles are known as "record sets" in recutils jargon. In the example above two record sets are defined: one containing articles and the other containing stock movements. Nothing prevents having empty record sets in databases. This is in fact usually the case when a new recfile is written but no data exists yet. In our depot example we could write a first version of the database containing just the record descriptors: %rec: Article %rec: Stock Special records are not required, and many recfiles do not have them. This is because all the records contained in the file are of the same type, and their nature can usually be inferred from both the file name and their contents. For example, 'contacts.rec' could simply contain records representing contacts without an explicit '%rec: Contact' record descriptor. In this case we say that the type of the anonymous records stored in the file is the "default record type". Another possible situation, although not usual, is to have a recfile containing both non-typed (default) and typed record types: Id: 1 Title: Blah Id: 2 Title: Bleh %rec: Movement Date: 13-Aug-2012 Concept: 20 Date: 24-Sept-2012 Concept: 12 In this case the records preceding the movements are of the "default" type, whereas the records following the record descriptor are of type 'Movement'. Even though it is supported by the format and the utilities, it is generally not recommended to mix non-typed and typed records in a recfile.  File: recutils.info, Node: Naming Record Types, Next: Documenting Records, Prev: Record Sets, Up: Record Descriptors 2.4.2 Naming Record Types ------------------------- It is up to you how to name your record sets. Any string comprising only alphanumeric characters or underscores, and that starts with a letter will be a legal name. However, it is recommended to use the singular form of a noun in order to describe the "type" of the records in the records set. Examples are 'Article', 'Contributor', 'Employee' and 'Movement'. The used noun should be specific enough in order to characterize the property of the records which matters. For example, in a contributor's database it would be better to have a record set named 'Contributor' than 'Person'. The reason of using singular nouns instead of their plural forms is that it works better with the utilities: it is more natural to read 'recsel -t Contributor' ('-t' is for "type") than 'recsel -t Contributors'.  File: recutils.info, Node: Documenting Records, Next: Record Sets Properties, Prev: Naming Record Types, Up: Record Descriptors 2.4.3 Documenting Records ------------------------- As well as a name, it is a good idea to provide a description of the record set. This is sometimes called the record set's "documentation" and is specified using the '%doc' field. Whereas the name is usually short and can contain only alphanumeric characters and underscores, no such restriction applies to the documentation. The documentation is typically more verbose than the name provided by the '%rec' field and may contain arbitrary characters such as punctuation and parentheses. It is somewhat similar to a comment (*note Comments::), but it can be managed more easily in a programmatic way. Unlike a comment, the '%doc' field is recognized by tools such as 'recinf' (*note Invoking recinf::) which processes record descriptors. For example, you might have two record sets with '%rec' and '%doc' fields as follows: %rec: Contact %doc: Family, friends and acquaintances (other than business). Name: Granny Phone: +12 23456677 Name: Edwina Phone: +55 0923 8765 %rec: Associate %doc: Colleagues and other business contacts Name: Karl Schmidt Phone: +49 88234566 Name: Genevieve Curie Phone: +33 34 87 65  File: recutils.info, Node: Record Sets Properties, Prev: Documenting Records, Up: Record Descriptors 2.4.4 Record Sets Properties ---------------------------- Besides determining the type of record that follows in the stream, record descriptors can be used to describe other properties of those records. This can be done by using "special fields", which have special names from a predefined set. Consider for example the following database, where record descriptors are used to specify a (optional) numeric 'Id' and a mandatory 'Title' field: %rec: Item %type: Id int %mandatory: Title Id: 10 Title: Notebook (big) Id: 11 Title: Fountain Pen Note that the names of special fields always start with the character '%'. Also note that it is also possible to use non-special fields in a record descriptor, but such fields will have no effect on the described record set. Every record set must contain one, and only one, field named '%rec'. It is not mandated that that field must occupy the first position in the record. However, it is considered a good style to place it as the first field in the record set, in order for the casual reader to easily identify the type of the records. The following list briefly describes the special fields defined in the recutils format, along with references to the sections of this manual describing their usage in depth. '%rec' Naming record types. Also, they allow using external and remote descriptors. *Note Remote Descriptors::. '%mandatory, %allowed and %prohibit' Requiring or forbidding specific fields. *Note Mandatory Fields::. *Note Prohibited Fields::. *Note Allowed Fields::. '%unique and %key' Working with keys. *Note Keys and Unique Fields::. '%doc' Documenting your database. *Note Documenting Records::. '%typedef and %type' Field types. *Note Field Types::. '%auto' Auto-counters and time-stamps. *Note Auto-Generated Fields::. '%sort' Keeping your record sets sorted. *Note Sorted Output::. '%size' Restricting the size of your database. *Note Size Constraints::. '%constraint' Enforcing arbitrary constraints. *Note Arbitrary Constraints::. '%confidential' Storing confidential information. *Note Encryption::. '%singular' Fields without repeating values.  File: recutils.info, Node: Querying Recfiles, Next: Editing Records, Prev: The Rec Format, Up: Top 3 Querying Recfiles ******************* Since recfiles are always human readable, you could lookup data simply by opening an editor and searching for the desired information. Or you could use a standard tool such as 'grep' to extract strings matching a pattern. However, recutils provides a more powerful and flexible way to lookup data. The following sections explore how the recutils can be used in order to extract data from recfiles, from very basic and simple queries to quite complex examples. * Menu: * Simple Selections:: Introducing 'recsel'. * Selecting by Type:: Get the records of some given type. * Selecting by Position:: Get the record occupying some position. * Random Records:: Get a set of random records. * Selection Expressions:: Get the records satisfying some expression. * Field Expressions:: Selecting a subset of fields. * Sorted Output:: Get the records in a given order.  File: recutils.info, Node: Simple Selections, Next: Selecting by Type, Up: Querying Recfiles 3.1 Simple Selections ===================== 'recsel' is an utility whose primary purpose is to select records from a recfile and print them on standard output. Consider the following example record set, which we shall assume is saved in a recfile called 'acquaintances.rec': # This database contains a list of both real and fictional people # along with their age. Name: Ada Lovelace Age: 36 Name: Peter the Great Age: 53 # Name: Matusalem # Age: 969 Name: Bart Simpson Age: 10 Name: Adrian Mole Age: 13.75 If we invoke 'recsel acquaintances.rec' we will get a list of all the records stored in the file in the terminal: $ recsel acquaintances.rec Name: Ada Lovelace Age: 36 Name: Peter the Great Age: 53 Name: Bart Simpson Age: 10 Name: Adrian Mole Age: 13.75 Note that the commented out parts of the file, in this case the explanatory header and the record corresponding to Matusalem, are not part of the output produced by 'recsel'. This is because 'recsel' is concerned only with the data. 'recsel' will also "pack" the records so any extra empty lines that may be between records are not echoed in the output: *acquaintances.rec:* $ recsel acquaintances.rec Name: Peter the Great Name: Peter the Great Age: 53 Age: 53 Name: Bart Simpson # Note the extra empty lines. Age: 10 Name: Bart Simpson Age: 10 It is common to store data gathered in several recfiles. For example, we could have a 'contacts.rec' file containing general contact records, and also a 'work-contacts.rec' file containing business contacts: *contacts.rec:* *work-contacts.rec:* Name: Granny Name: Yoyodyne Corp. Phone: +12 23456677 Email: sales@yoyod.com Phone: +98 43434433 Name: Doctor Phone: +12 58999222 Name: Robert Harris Email: robert.harris@yoyod.com Note: Sales Department. Both files can be passed to 'recsel' in the command line. In that case 'recsel' will simply process them and output their records in the same order they were specified: $ recsel contacts.rec work-contacts.rec Name: Granny Phone: +12 23456677 Name: Doctor Phone: +12 58999222 Name: Yoyodyne Corp. Email: sales@yoyod.com Phone: +98 43434433 Name: Robert Harris Email: robert.harris@yoyod.com Note: Sales Department. As mentioned above, the output follows the ordering on the command line, so 'recsel work-contacts.rec contacts.rec' would output the records of 'work-contacts.rec' first and then the ones from 'contacts.rec'. Note however that 'recsel' will merge records from several files specified in the command line only if they are anonymous. If the contacts in our files were typed: *contacts.rec:* *work-contacts.rec:* %rec: Contact %rec: Contact Name: Granny Name: Yoyodyne Corp. Phone: +12 23456677 Email: sales@yoyod.com Phone: +98 43434433 Name: Doctor Phone: +12 58999222 Name: Robert Harris Email: robert.harris@yoyod.com Note: Sales Department. Then we would get the following error message: $ recsel contacts.rec work-contacts.rec recsel: error: duplicated record set 'Contact' from work-contacts.rec.  File: recutils.info, Node: Selecting by Type, Next: Selecting by Position, Prev: Simple Selections, Up: Querying Recfiles 3.2 Selecting by Type ===================== As we saw in the section discussing record descriptors, it is possible to have several different types of records in a single recfile. Consider for example a 'gnu.rec' file containing information about maintainers and packages in the GNU Project: %rec: Maintainer Name: Jose E. Marchesi Email: jemarch@gnu.org Name: Luca Saiu Email: positron@gnu.org %rec: Package Name: GNU recutils LastRelease: 12 February 2014 Name: GNU epsilon LastRelease: 10 March 2013 If 'recsel' is invoked in that file it will complain: $ recsel gnu.rec recsel: error: several record types found. Please use -t to specify one. This is because 'recsel' does not know which records to output: the maintainers or the packages. This can be resolved by using the '-t' command line option: $ recsel -t Package gnu.rec Name: GNU recutils LastRelease: 12 February 2014 Name: GNU epsilon LastRelease: 10 March 2013 By default 'recsel' never outputs record descriptors. This is because most of the time the user is only interested in the data. However, with the '-d' command line option, the record descriptor of the selected type is printed preceding the data records: $ recsel -d -t Maintainer gnu.rec %rec: Maintainer Name: Jose E. Marchesi Email: jemarch@gnu.org Name: Luca Saiu Email: positron@gnu.org Note that at the moment it is not possible to select non-typed (default) records when other record sets are stored in the same file. This is one of the reasons why mixing non-typed records and typed records in a single recfile is not recommended. Note also that if a nonexistent record type is specified in '-t' then 'recsel' does nothing.  File: recutils.info, Node: Selecting by Position, Next: Random Records, Prev: Selecting by Type, Up: Querying Recfiles 3.3 Selecting by Position ========================= As was explained in the previous sections, 'recsel' outputs all the records of some record set. The records are echoed in the same order they are written in the recfile. However, often it is desirable to select a subset of the records, determined by the position they occupy in their record set. The '-n' command line option to 'recsel' supports doing this in a natural way. This is how we would retrieve the first contact listed in a contacts database using 'recsel': $ recsel -n 0 contacts.rec Name: Granny Phone: +12 23456677 Note that the index is zero-based. If we want to retrieve more records we can specify several indexes to '-n' separated by commas. If a given index is too big, it is simply ignored: $ recsel -n 0,1,999 contacts.rec Name: Granny Phone: +12 23456677 Name: Doctor Phone: +12 58999222 With '-n', the order in which the records are echoed does not depend on the order of the indexes passed to '-n'. For example, the output of 'recsel -n 0,1' will be identical to the output of 'recsel -n 1,0'. Ranges of indexes can also be used to select a subset of the records. For example, the following call would also select the first three contacts of the database: $ recsel -n 0-2 contacts.rec Name: Granny Phone: +12 23456677 Name: Doctor Phone: +12 58999222 Name: Dad Phone: +12 88229900 It is possible to mix single indexes and index ranges in the same call. For example, 'recsel -n 0,5-6' would select the first, sixth and seventh records.  File: recutils.info, Node: Random Records, Next: Selection Expressions, Prev: Selecting by Position, Up: Querying Recfiles 3.4 Random Records ================== Consider a database in which each record is a cooking recipe. It is always difficult to decide what to cook each day, so it would be nice if we could ask 'recsel' to pick up a random recipe. This can be achieved using the '-m' ('--random') command line option of 'recsel': $ recsel -m 1 recipes.rec Title: Curry chicken Ingredient: A whole chicken Ingredient: Curry Preparation: ... If we need two recipes, because we will be cooking at both lunch and dinner, we can pass a different number to '-m': $ recsel -m 2 recipes.rec Title: Fabada Asturiana Ingredient: 300 gr of fabes. Ingredient: Chorizo Ingredient: Morcilla Preparation: ... Title: Pasta with ragu Ingredient: 500 gr of spaghetti. Ingredient: 2 tomatoes. Ingredient: Minced meat. Preparation: ... The algorithm used to implement '-m' guarantees that you will never get multiple instances of the same record. This means that if a record set has N records and you ask for N random records, you will get all the records in a random order.  File: recutils.info, Node: Selection Expressions, Next: Field Expressions, Prev: Random Records, Up: Querying Recfiles 3.5 Selection Expressions ========================= "Selection expressions", also known as "sexes" in recutils jargon, are infix expressions that can be applied to a record. A "sex" is a predicate which selects a subset of records within a recfile. They can be simple expressions involving just one operator and a pair of operands, or complex compound expressions with parenthetical sub-expressions and many operators and operands. One of their most common uses is to examine records matching a particular set of conditions. * Menu: * Selecting by predicate:: Selecting records which satisfy conditions. * SEX Operands:: Literal values, fields and sub-expressions. * SEX Operators:: Arithmetic, logical and other operators. * SEX Evaluation:: Selection expressions are like generators.  File: recutils.info, Node: Selecting by predicate, Next: SEX Operands, Up: Selection Expressions 3.5.1 Selecting by predicate ---------------------------- Consider the example recfile 'acquaintances.rec' introduced earlier. It contains names of people along with their respective ages. Suppose we want to get a list of the names of all the children. It would not be easy to do this using 'grep'. Neither would it, for any reasonably large recfile, be feasible to search manually for the children. Fortunately the 'recsel' command provides an easy way to do such a lookup: $ recsel -e "Age < 18" -P Name acquaintances.rec Bart Simpson Adrian Mole Let us look at each of the arguments to 'recsel' in turn. Firstly we have '-e' which tells 'recsel' to lookup records matching the expression 'Age < 18' -- in other words all those people whose ages are less than 18. This is an example of a "selection expression". In this case it is a simple test, but it can be as complex as needed. Next, there is '-P' which tells 'recsel' to print out the value of the 'Name' field -- because we want just the name, not the entire record. The final argument is the name of the file from whence the records are to come: 'acquaintances.rec'. Rather than explicitly storing ages in the recfile, a more realistic example might have the date of birth instead (otherwise it would be necessary to update the people's ages in the recfile on every birthday). # Date of Birth %type: Dob date Name: Alfred Nebel Dob: 20 April 2010 Email: alf@example.com Name: Bertram Worcester Dob: 3 January 1966 Email: bert@example.com Name: Charles Spencer Dob: 4 July 1997 Email: charlie@example.com Name: Dirk Hogart Dob: 29 June 1945 Email: dirk@example.com Name: Ernest Wright Dob: 26 April 1978 Email: ernie@example.com Now we can achieve a similar result as before, by looking up the names of all those people who were born after a particular date: $ recfix acquaintances.rec $ recsel -e "Dob >> '31 July 1994'" -p Name acquaintances.rec Name: Alfred Nebel Name: Charles Spencer The '>>' operator means "later than", and is used here to select a date of birth after 31st July 1994. Note also that this example uses a lower case '-p' whereas the preceding example used the upper case '-P'. The difference is that '-p' prints the field name and field value, whereas '-P' prints just the value. 'recsel' accepts more than one '-e' argument, each introducing a selection expression, in which case the records which satisfy all expressions are selected. You can provide more than one field label to '-P' or '-p' in order to select additional fields to be displayed. For example, if you wanted to send an email to all children 14 to 18 years of age, and today's date were 1st August 2012, then you could use the following command to get the name and email address of all such children: $ recfix acquaintances.rec $ recsel -e "Dob >> '31 July 1994' && Dob << '01 August 1998'" \ -p Name,Email acquaintances.rec Name: Charles Spencer Email: charlie@example.com As you can see, there is only one such child in our record set. Note that the example command shown above contains both double quotes '"' and single quotes '''. The double quotes are interpreted by the shell (e.g. 'bash') and the single quotes are interpreted by 'recsel', defining a string. (And the backslash is interpreted by the shell, the usual continuation character so that this manual doesn't have a too-long line.)  File: recutils.info, Node: SEX Operands, Next: SEX Operators, Prev: Selecting by predicate, Up: Selection Expressions 3.5.2 SEX Operands ------------------ The supported operands are: numbers, strings, field names and parenthesized expressions. 3.5.2.1 Numeric Literals ........................ The supported numeric literals are integer numbers and real numbers. The usual sign character '-' is used to denote negative values. Integer values can be denoted in base 10, base 16 using the '0x' prefix, and base 8 using the '0' prefix. Examples are: 10000 0 0xFF -0xa 012 -07 -1342 .12 -3.14 3.5.2.2 String Literals ....................... String values are delimited by either the ''' character or the '"' character. Whichever delimiter is used, the delimiter closing the literal must be the same as the delimiter used to open it. Newlines and tabs can be part of a string literal. Examples are: 'Hello.' 'The following example is the empty string.' '' The ''' and '"' characters can be part of a string if they are escaped with a backslash, as in: 'This string contains an apostrophe: \'.' "This one a double quote: \"." 3.5.2.3 Field Values .................... The value of a field value can be included in a selection expression by writing its name. The field name is replaced by a string containing the field value, to handle the possibility of records with more than one field by that name. Examples: Name Email long_field_name It is possible to use the role part of a field if it is not empty. So, for example, if we are searching for the issues opened by 'John Smith' in a database of issues we could write: $ recsel -e "OpenedBy = 'John Smith'" instead of using a full field name: $ recsel -e "Hacker:Name:OpenedBy = 'John Smith'" When the name of a field appears in an expression, the expression is applied to all the fields in the record featuring that name. So, for example, the expression: Email ~ "\\.org" matches any record in which there is a field named 'Email' whose value terminates in (the literal string) '.org'. If we are interested in the value of some specific email, we can specify its relative position in the containing record by using "subscripts". Consider, for example: Email[0] ~ "\\.org" Will match for: Name: Mr. Foo Email: foo@foo.org Email: mr.foo@foo.com But not for: Name: Mr. Foo Email: mr.foo@foo.com Email: foo@foo.org The regexp syntax supported in selection expressions is POSIX EREs, with several GNU extensions. *Note Regular Expressions::. 3.5.2.4 Parenthesized Expressions ................................. Parenthesis characters ('(' and ')') can be used to group sub expressions in the usual way.  File: recutils.info, Node: SEX Operators, Next: SEX Evaluation, Prev: SEX Operands, Up: Selection Expressions 3.5.3 Operators --------------- The supported operators are arithmetic operators (addition, subtraction, multiplication, division and modulus), logical operators, string operators and field operators. 3.5.3.1 Arithmetic Operators ............................ Arithmetic operators for addition ('+'), subtraction ('-'), multiplication ('*'), integer division ('/') and modulus ('%') are supported with their usual meanings. These operators require either numeric operands or string operands whose value can be interpreted as numbers (integer or real). 3.5.3.2 Boolean Operators ......................... The boolean operators *and* ('&&'), *or* ('||') and *not* ('!') are supported with the same semantics as their C counterparts. A compound boolean operator '=>' is also supported in order to ease the elaboration of constraints in records: 'A => B', which can be read as "A implies B", translates into '!A || (A && B)'. The boolean operators expect integer operands, and will try to convert any string operand to an integer value. 3.5.3.3 Comparison Operators ............................ The compare operators *less than* ('<'), *greater than* ('>'), *less than or equal* ('<='), *greater than or equal* ('>='), *equal* ('=') and *unequal* ('!=') are supported with their usual meaning. Strings can be compared with the equality operator ('='). The match operator ('~') can be used to match a string with a given regular expression (*note Regular Expressions::). 3.5.3.4 Date Comparison Operators ................................. The compare operators *before* ('<<'), *after* ('>>') and *same time* ('==') can be used with fields and strings containing parseable dates. *Note Date input formats::. 3.5.3.5 Field Operators ....................... Field counters are replaced by the number of occurrences of a field with the given name in the record. For example: #Email The previous expression is replaced with the number of fields named 'Email' in the record. It can be zero if the record does not have a field with that name. 3.5.3.6 String Operators ........................ The string concatenation operator ('&') can be used to concatenate any number of strings and field values. 'foo' & Name & 'bar' 3.5.3.7 Conditional Operator ............................ The ternary conditional operator can be used to select alternatives based on the value of some expression: expr1 ? expr2 : expr3 If 'expr1' evaluates to true (i.e. it is an integer or the string representation of an integer and its value is not zero) then the operator yields 'expr2'. Otherwise it yields 'expr3'.  File: recutils.info, Node: SEX Evaluation, Prev: SEX Operators, Up: Selection Expressions 3.5.4 Evaluation of Selection Expressions ----------------------------------------- Given that: - It is possible to refer to fields by name in selection expressions. - Records can have several fields with the same name. It is clear that some backtracking mechanism is needed in the evaluation of the selection expressions. For example, consider the following expression that is deciding whether a "registration" in a webpage should be rejected: ((Email ~ "foomail\.com") || (Age <= 18)) && !#Fixed The previous expression will be evaluated for every possible permutation of the fields "Email", "Age" and "Fixed" present in the record, until one of the combinations succeeds. At that point the computation is interrupted. When used to decide whether a record matches some criteria, the goal of a selection expression is to act as a boolean expression. In that case the final value of the expression depends on both the type and the value of the result launched by the top-most subexpression: - If the result is an integer, the expression is true if its value is not zero. - If the result is a real, or a string, the expression evaluates to false. Sometimes a selection expression is used to compute a result instead of a boolean. In that case the returned value is converted to a string. This is used when replacing the slots in templates (*note Templates::).  File: recutils.info, Node: Field Expressions, Next: Sorted Output, Prev: Selection Expressions, Up: Querying Recfiles 3.6 Field Expressions ===================== "Field expressions" (also known as "fexes") are a way to select fields of a record. They also allow you to do certain transformations on the selected fields, such as changing their names. A FEX comprises a sequence of "elements" separated by commas: ELEM_1,ELEM_2,...,ELEM_N Each element makes a reference to one or more fields in a record identified by a given name and an optional subscript: FIELD_NAME[MIN-MAX] MIN and MAX are zero-based indexes. It is possible to refer to a field occupying a given position. For example, consider the following record: Name: Mr. Foo Email: foo@foo.com Email: foo@foo.org Email: mr.foo@foo.org We would select all the emails of the record with: Email The first email with: Email[0] The third email with: Email[2] The second and the third email with: Email[1-2] And so on. It is possible to select the same field (or range of fields) more than once just by repeating them in a field expression. Thus, the field expression: Email[0],Name,Email will print the first email, the name, and then all the email fields including the first one. It is possible to include a "rewrite rule" in an element of a field expression, which specifies an alias for the selected fields: FIELD_NAME[MIN-MAX]:ALIAS For example, the following field expression specifies an alias for the fields named 'Email' in a record: Name,Email:ElectronicMail Since the rewrite rules only affect the fields selected in a single element of the field expression, it is possible to define different aliases to several fields having the same name but occupying different positions: Name,Email[0]:PrimaryEmail,Email[1]:SecondaryEmail When that field expression is applied to the following record: Name: Mr. Foo Email: primary@email.com Email: secondary@email.com Email: other@email.com the result will be: Name: Mr. Foo PrimaryEmail: primary@email.com SecondaryEmail: secondary@email.com Email: other@email.com It is possible to use the dot notation in order to refer to field and sub-fields. This is mainly used in the context of joins, where new fields are created having compound names such as 'Foo_Bar'. A reference to such a field can be done in the fex using dot notation as follows: Foo.Bar  File: recutils.info, Node: Sorted Output, Prev: Field Expressions, Up: Querying Recfiles 3.7 Sorted Output ================= This special field sets sorting criteria for the records contained in a record set. Its usage is: %sort: FIELD1 FIELD2 ... Meaning that the desired order for the records will be determined by the contents of the fields named in the '%sort' value. The sorting is always done in ascending order, and there may be records that lack the involved fields, i.e. the sorting fields need not be mandatory. It is an error to have more than one '%sort' field in the same record descriptor, as only one field list can be used as sorting criteria. Consider for example that we want to keep the records in our inventory system ordered by entry date. We could achieve that by using the following record descriptor in the database: %rec: Item %type: Date date %sort: Date Id: 1 Title: Staplers Date: 10 February 2011 Id: 2 Title: Ruler Pack 20 Date: 2 March 2009 ... As you can see in the example above, the fact we use '%sort' in a database does not mean that the database will be always physically ordered. Unsorted record sets are not a data integrity problem, and thus the diagnosis tools must not declare a recfile as +invalid because of this. The utility 'recfix' provides a way +to physically order the fields in the file (*note Invoking recfix::). On the other hand any program listing, presenting or processing data extracted from the recfile must honor the '%sort' entry. For example, when using the following 'recsel' program in the database above we would get the output sorted by date: $ recsel inventory.rec Id: 2 Title: Ruler Pack 20 Date: 2 March 2009 Id: 1 Title: Staplers Date: 10 February 2011 The sorting of the selected field depends on its type: - Numeric fields (integers, ranges, reals) are numerically ordered. - Boolean fields are ordered considering that "false" values come first. - Dates are ordered chronologically. - Any other kind of field is ordered using a lexicographic order. It is possible to specify several fields as the sorting criteria. In that case the records are sorted using a lexicographic order. Consider for example the following unsorted database containing marks for several students: %rec: Marks %type: Class enum A B C %type: Score real Name: Mr. One Class: C Score: 6.8 Name: Mr. Two Class: A Score: 6.8 Name: Mr. Three Class: B Score: 9.2 Name: Mr. Four Class: A Score: 2.1 Name: Mr. Five Class: C Score: 4 If we wanted to sort it by 'Class' and by 'Score' we would insert a '%sort' special field in the descriptor, having: %rec: Marks %type: Class enum A B C %type: Score real %sort: Class Score Name: Mr. Four Class: A Score: 2.1 Name: Mr. Two Class: A Score: 6.8 Name: Mr. Three Class: B Score: 9.2 Name: Mr. Five Class: C Score: 4 Name: Mr. One Class: C Score: 6.8 The order of the fields in the '%sort' field is significant. If we reverse the order in the example above then we get a different sorted set: %rec: Marks %type: Class enum A B C %type: Score real %sort: Score Class Name: Mr. Four Class: A Score: 2.1 Name: Mr. Five Class: C Score: 4 Name: Mr. Two Class: A Score: 6.8 Name: Mr. One Class: C Score: 6.8 Name: Mr. Three Class: B Score: 9.2 In this last case, 'Mr. One' comes after 'Mr. Two' because the class 'A' comes before the class 'B' even though the score is the same ('6.8').  File: recutils.info, Node: Editing Records, Next: Editing Fields, Prev: Querying Recfiles, Up: Top 4 Editing Records ***************** The simplest way of editing a recfile is to start your favourite text editor and hack the contents of the file as desired. However, the rec format is structured enough so recfiles can be updated automatically by programs. This is useful for writing shell scripts or when there are complex data integrity rules stored in the file that we want to be sure to preserve. The following sections discuss the usage of the recutils for altering recfiles in the level of record: adding new records, deleting or commenting them out, sorting them, etc. * Menu: * Inserting Records:: Inserting data into recfiles. * Deleting Records:: Removing data. * Sorting Records:: Physical reordering of records.  File: recutils.info, Node: Inserting Records, Next: Deleting Records, Up: Editing Records 4.1 Inserting Records ===================== Adding new records to a recfile is pretty trivial: open it with your text editor and just write down the fields comprising the records. This is really the best way to add contents to a recfile containing simple data. However, complex databases may introduce some difficulties: _Multi-line values._ It can be tedious to manually encode the several lines. _Data integrity._ It is difficult to manually maintain the integrity of data stored in the data base. _Counters and timestamps._ Some record sets feature auto-generated fields, which are commonly used to implement counters and time-stamps. *Note Auto-Generated Fields::. Thus, to facilitate the insertion of new data a command line utility called 'recins' is included in the recutils. The usage of 'recins' is very simple, and can be used both in the command line or called from another program. The following subsections discuss several aspects of using this utility. * Menu: * Adding Records With recins:: Basics of the 'recins' utility. * Replacing Records With recins:: Substituting records in a file. * Adding Anonymous Records:: Inserting or replacing records with no type.  File: recutils.info, Node: Adding Records With recins, Next: Replacing Records With recins, Up: Inserting Records 4.1.1 Adding Records With recins -------------------------------- Each invocation of 'recins' adds one record to the targeted database. The fields comprising the records are specified using pairs of '-f' and '-v' command line arguments. For example, this is how we would add the first entry to a previously empty contacts database: $ recins -f Name -v "Mr Foo" -f Email -v foo@bar.baz contacts.rec $ cat contacts.rec Name: Mr. Foo Email: foo@bar.baz If we invoke 'recins' again on the same database we will be adding a second record: $ recins -f Name -v "Mr Bar" -f Email -v bar@gnu.org contacts.rec $ cat contacts.rec Name: Mr. Foo Email: foo@bar.baz name: Mr. Bar Email: bar@gnu.org There is no limit on the number of '-f' '-v' pairs that can be specified to 'recins', other than any limit on command line arguments which may be imposed by the shell. The field values provided using '-v' are encoded to follow the rec format conventions, including multi-line field values. Consider the following example: $ recins -f Name -v "Mr. Foo" -f Address -v ' Foostrs. 19 Frankfurt am Oder Germany' contacts.rec $ cat contacts.rec Name: Mr. Foo Address: + Foostrs. 19 + Frankfurt am Oder + Germany It is also possible to provide fields already encoded as rec data for their addition, using the '-r' command line argument. This argument can be intermixed with '-f' '-v'. $ recins -f Name -v "Mr. Foo" -r "Email: foo@bar.baz" contacts.rec $ cat contacts.rec Name: Mr. Foo Email: foo@bar.baz If the string passed to '-r' is not valid rec data then 'recins' will complain with an error and the operation will be aborted. At this time, it is not possible to add new records containing comments.  File: recutils.info, Node: Replacing Records With recins, Next: Adding Anonymous Records, Prev: Adding Records With recins, Up: Inserting Records 4.1.2 Replacing Records With recins ----------------------------------- 'recins' can also be used to replace existing records in a database with a provided record. This is done by specifying some criteria selecting the record (or records) to be replaced. Consider for example the following command applied to our contacts database: $ recins -e "Email = 'foo@bar.baz'" -f Name -v "Mr. Foo" \ -f Email -v "new@bar.baz" contacts.rec The contact featuring an email 'foo@bar.baz' gets replaced with the following record: Name: Mr. Foo Email: new@bar.baz The records to be replaced can also be specified by index, or a range of indexes. For example, the following command replaces the first, second and third records in a database with dummy records: $ recins -n 0,1-2 -f Dummy -v XXX foo.rec $ cat foo.rec Dummy: XXX Dummy: XXX Dummy: XXX ... Other records ...  File: recutils.info, Node: Adding Anonymous Records, Prev: Replacing Records With recins, Up: Inserting Records 4.1.3 Adding Anonymous Records ------------------------------ In a previous chapter we noted that 'recsel' interprets the absence of a '-t' argument depending on the actual contents of the file. If the recfile contains records of just one type the command assumes that the user is referring to these records. 'recins' does not follow this convention, and the absence of an explicit type always means to insert (or replace) an anonymous record. Consider for example the following database: %rec: Marks %type: Class enum A B C Name: Alfred Class: A Name: Bertram Class: B If we want to insert a new mark we have to specify the type explicitly using '-t': $ cat marks.rec | recins -t Marks -f Name -v Xavier -f Class -v C %rec: Marks %type: Class enum A B C Name: Alfred Class: A Name: Bertram Class: B Name: Xavier Class: C If we forget to specify the type then an anonymous record is created instead: $ cat marks.rec | recins -f Name -v Xavier -f Class -v C Name: Xavier Class: C %rec: Marks %type: Class enum A B C Name: Alfred Class: A Name: Bertram Class: B  File: recutils.info, Node: Deleting Records, Next: Sorting Records, Prev: Inserting Records, Up: Editing Records 4.2 Deleting Records ==================== Just as 'recins' inserts records, the utility 'recdel' deletes them. Consider the following recfile 'stock.rec': %rec: Item %type: Expiry date %sort: Title Title: First Aid Kit Expiry: 2 May 2009 Title: Emergency Rations Expiry: 10 August 2009 Title: Life raft Expiry: 2 March 2009 Suppose we wanted to delete all items with an 'Expiry' value before a certain date, we could do this with the following command: $ recdel -t Item -e 'Expiry << "5/12/2009"' stock.rec After running this command, only one record will remain in the file (viz: the one titled 'Emergency Rations') because all the others have expiry dates prior to 12 May 2009. (1) The '-t' option can be omitted if, and only if, there is no '%rec' field in the recfile. 'recdel' tries to warn you if you attempt to perform a delete operation which it deems to be too pervasive. In such cases, it will refuse to run, unless you give the '--force' flag. However, you should not rely upon 'recdel' to protect you, because it cannot always correctly guess that you might be deleting more records than intended. For this reason, it may be wise to use the '-c' flag, which causes the relevant records to be commented out, rather than deleted. (And of course backups are always wise.) The complete options available to the 'recdel' command are explained later. *Note Invoking recdel::. ---------- Footnotes ---------- (1) '5/12/2009' means the 12th day of May 2009, _not_ the fifth day of December, even if your 'LC_TIME' environment variable has been set to suggest otherwise.  File: recutils.info, Node: Sorting Records, Prev: Deleting Records, Up: Editing Records 4.3 Sorting Records =================== In the example above, note the existence of the '%sort: Title' line. This field was discussed previously (*note Sorted Output::) and, as mentioned, does not imply that the records need to be stored in the recfile in any particular order. However, if desired, you can automatically arrange the recfile in that order using 'recfix' with the '--sort' flag. After running the command $ recfix --sort stock.rec the file 'stock.rec' will have its records sorted in alphabetical order of the 'Title' fields, thus: %rec: Item %type: Expiry date %sort: Title Title: Emergency Rations Expiry: 10 August 2009 Title: First Aid Kit Expiry: 2 May 2009 Title: Liferaft Expiry: 2 March 2009  File: recutils.info, Node: Editing Fields, Next: Field Types, Prev: Editing Records, Up: Top 5 Editing Fields **************** Fields of a recfile can, of course, be edited manually using an editor and this is often the easiest way when only a few fields need to be changed or when the nature of the changes do not follow any particular pattern. If, however, a large number of similar changes to several records are required,the 'recset' command can make the job easier. The formal description of 'recset' is presented later (*note Invoking recset::). In this chapter some typical usage examples are discussed. As with 'recdel', 'recset' if used erroneously has the potential to make very pervasive changes, which could result in a large loss of data. It is prudent therefore to take a copy of a recfile before running such commands. * Menu: * Adding Fields:: Adding new fields to records. * Setting Fields:: Editing field values. * Deleting Fields:: Removing or commenting-out fields. * Renaming Fields:: Changing the name of a field.  File: recutils.info, Node: Adding Fields, Next: Setting Fields, Up: Editing Fields 5.1 Adding Fields ================= As mentioned above, the command 'recins' adds new records to a recfile, but it cannot add fields to an existing record. This task can be achieved automatically using 'recset' with its '-a' flag. Suppose that (after a stock inspection) you wanted to add an 'Inspected' field to all the items in the recfile. The following command could be used. $ recset -t Item -f Inspected -a 'Yes' stock.rec Here, because no record selection flag was provided, the command affected _all_ the records of type 'Item'. We could limit the effect of the command using the '-e', '-q', '-n' or '-m' flags. For example to add the 'Inspected' field to only the first item the following command would work: $ recset -t Item -n 0 -f Inspected -a 'Yes' stock.rec Similarly, a selection expression could have been used with the '-e' flag in order to add the field only to records which satisfy the expression. If you use 'recset' with the '-a' flag on a field that already exists, a new field (in addition to those already present) will be appended with the given value.  File: recutils.info, Node: Setting Fields, Next: Deleting Fields, Prev: Adding Fields, Up: Editing Fields 5.2 Setting Fields ================== It is also possible to update the value of a field. This is done using 'recset' with its '-s' flag. In the previous example, an 'Inspected' flag was added to certain records, with the value 'yes'. After reflection, one might want to record the date of inspection, rather than a simple yes/no flag. Records which have no such field will remain unchanged. $ recset -t Item -f Inspected -s '30 October 2006' stock.rec Although the above command does not have any selection criteria, it will only affect those records for which a 'Inspected' field exists. This is because the '-s' flag only sets values of existing fields. It will not create any fields. If instead the '-S' flag is used, this will create the field (if it does not already exist) _and_ set its value. $ recset -t Item -f Inspected -S '30 October 2006' stock.rec  File: recutils.info, Node: Deleting Fields, Next: Renaming Fields, Prev: Setting Fields, Up: Editing Fields 5.3 Deleting Fields =================== You can delete fields using 'recset''s '-d' flag. For example, if we wanted to delete the 'Inspected' field which we introduced above, we could do so as follows: $ recset -t Item -f Inspected -d stock.rec This would delete _all_ fields named 'Inspected' from _all_ records of type 'Item'. It may be that, we only wanted to delete the 'Inspected' fields from records which satisfy a certain condition. The following would delete the fields only from items whose 'Expiry' date was before 2 January 2010: $ recset -t Item -e 'Expiry << "2 January 2010"' -f Inspected -d stock.rec  File: recutils.info, Node: Renaming Fields, Prev: Deleting Fields, Up: Editing Fields 5.4 Renaming Fields =================== Another use of 'recset' is to rename existing fields. This is achieved using the '-r' flag. To rename all instances of the 'Expiry' field occurring in any record of type 'Item' to 'UseBy', the following command suffices: $ recset -t Item -f Expiry -r 'UseBy' stock.rec As with most operations, this could be done selectively, using the '-e' flag and a selection expression.  File: recutils.info, Node: Field Types, Next: Constraints on Record Sets, Prev: Editing Fields, Up: Top 6 Field Types ************* Field values are, by default, unrestricted text strings. However, it is often useful to impose some restrictions on the values of certain fields. For example, consider the following record: Id: 111 Name: Jose E. Marchesi Age: 30 MaritalStatus: single Phone: +49 666 666 66 The values of the fields must clearly follow some structure in order to make sense. 'Id' is a numeric identifier for a person. 'Name' will never use several lines. 'Age' will typically be in the range '0..120', and there are only a few valid values for 'MaritalStatus': single, married, divorced, and widow(er). Phones may be restricted to some standard format as well to be valid. All these restrictions (and many others) can be enforced by using "field types". There are two kind of field types: "anonymous" and "named". Those are described in the following subsections. * Menu: * Declaring Types:: Declaration of types in record descriptors. * Types and Fields:: Associating fields with types. * Scalar Field Types:: Numbers and ranges. * String Field Types:: Lines, limited strings and regular expressions. * Enumerated Field Types:: Enumerations and boolean values. * Date and Time Types:: Dates and times. * Other Field Types:: Emails, fields, UUIDs, ...  File: recutils.info, Node: Declaring Types, Next: Types and Fields, Up: Field Types 6.1 Declaring Types =================== A type can be declared in a record descriptor by using the '%typedef' special field. The syntax is: %typedef: TYPE_NAME TYPE_DESCRIPTION Where TYPE_NAME is the name of the new type, and TYPE_DESCRIPTION a description which varies depending of the kind of type. For example, this is how a type 'Age_t' could be defined as numbers in the range '0..120': %typedef: Age_t range 0 120 Type names are identifiers having the following syntax: [a-zA-Z][a-zA-Z0-9_]* Even though any identifier with that syntax could be used for types, it is a good idea to consistently follow some convention to help distinguishing type names from field names. For example, the '_t' suffix could be used for types. A type can be declared to be an alias for another type. The syntax is: %typedef: TYPE_NAME OTHER_TYPE_NAME Where TYPE_NAME is declared to be a synonym of OTHER_TYPE_NAME. This is useful to avoid duplicated type descriptions. For example, consider the following example: %typedef: Id_t int %typedef: Item_t Id_t %typedef: Transaction_t Id_t Both 'Item_t' and 'Transaction_t' are aliases for the type 'Id_t'. Which is in turn an alias for the type 'int'. So, they are both numeric identifiers. The order of the '%typedef' fields is not relevant. In particular, a type definition can forward-reference another type that is defined subsequently. The previous example could have been written as: %typedef: Item_t Id_t %typedef: Transaction_t Id_t %typedef: Id_t int Integrity check will complain if undefined types are referenced. As well as when any aliases up referencing back (looping back directly or indirectly) in type declarations. For example, the following set of declarations contains a loop. Thus, it's invalid: %typedef: A_t B_t %typedef: B_t C_t %typedef: C_t A_t The scope of a type is the record descriptor where it is defined.  File: recutils.info, Node: Types and Fields, Next: Scalar Field Types, Prev: Declaring Types, Up: Field Types 6.2 Types and Fields ==================== Fields can be declared to have a given type by using the '%type' special field in a record descriptor. The synopsis is: %type: FIELD_LIST TYPE_NAME_OR_DESCRIPTION Where FIELD_LIST is a list of field names separated by commas. TYPE_NAME_OR_DESCRIPTION can be either a type name which has been previously declared using '%typedef', or a type description. Type names are useful when several fields are declared to be of the same type: %typedef: Id_t int %type: Id Id_t %type: Product Id_t Anonymous types can be specified by writing a type description instead of a type name. They help to avoid superfluous type declarations in the common case where a type is used by just one field. A record containing a single 'Id' field, for example, can be defined without having to use a '%typedef' in the following way: %rec: Task %type: Id int  File: recutils.info, Node: Scalar Field Types, Next: String Field Types, Prev: Types and Fields, Up: Field Types 6.3 Scalar Field Types ====================== The rec format supports the declaration of fields of the following scalar types: integer numbers, ranges and real numbers. Signed "integers" are supported by using the 'int' declaration: %typedef: Id_t int Given the declaration above, fields of type 'Id_t' must contain integers, and they may be negative. Hexadecimal values can be written using the '0x' prefix, and octal values using an extra '0'. Valid examples are: %type: Id Id_t Id: 100 Id: -23 Id: -0xFF Id: 020 Sometimes it is desirable to reduce the "range" of integers allowed in a field. This can be achieved by using a range type declaration: %typedef: Interrupt_t range 0 15 Note that it is possible to omit the minimum index in ranges. In that case it is implicitly zero: %typedef: Interrupt_t range 15 It is possible to use the keywords 'MIN' and 'MAX' instead of a numeral literal in one or both of the points conforming the range. They mean the minimum and the maximum integer value supported by the implementation respectively. See the following examples: %typedef: Negative range MIN -1 %typedef: Positive range 0 MAX %typedef: AnyInt range MIN MAX %typedef: Impossible range MAX MIN Hexadecimal and octal numbers can be used to specify the limits in a range. This helps to define scalar types whose natural base is not ten, like for example: %typedef: Address_t range 0x0000 0xFFFF %typedef: Perms_t range 755 "Real" number fields can be declared with the 'real' type specifier. A wide range of real numbers can be represented this way, only limited by the underlying floating point representation. The decimal separator is always the dot ('.') character regardless of the locale setting. For example: %typedef: Longitude_t real Examples of fields of type real: %rec: Rectangle %typedef: Longitude_t real %type: Width Longitude_t %type: Height Longitude_t Width: 25.01 Height: 10  File: recutils.info, Node: String Field Types, Next: Enumerated Field Types, Prev: Scalar Field Types, Up: Field Types 6.4 String Field Types ====================== The 'line' field type specifier can be used to restrict the value of a field to a single line, i.e. no newline characters are allowed. For example, a type for proper names could be declared as: %typedef: Name_t line Examples of fields of type line: Name: Mr. Foo Bar Name: Mrs. Bar Baz Name: This is + invalid Sometimes it is the maximum size of the field value that shall be restricted. The 'size' field type specifier can be used to define the maximum number of characters a field value can have. For example, if we were collecting input that will get written in a paper-based forms system allowing up to 25 characters width entries, we could declare the entries as: %typedef: Address_t size 25 Note that hexadecimal and octal integer constants can also be used to specify field sizes: %typedef: Address_t size 0x18 Arbitrary restrictions can be defined by using regular expressions. The "regexp" field type specifier introduces an ERE (extended regular expression) that will be matched against fields having that name. The synopsis is: %typedef: TYPE_NAME regexp /RE/ where RE is the regular expression to match. For example, consider the 'Id_t' type designed to represent the encoding of the identifier of ID cards in some country: %typedef: Id_t regexp /[0-9]{9}[a-zA-Z]/ Examples of fields of type 'Id_t' are: IDCard: 123456789Z IDCard: invalid id card Note that the slashes delimiting the RE can be replaced with any other character that is not itself used as part of the regexp. That is useful in some cases such as: %typedef: Path_t regexp |(/[^/]/?)+| The regexp flavor supported in recfiles are the POSIX EREs plus several GNU extensions. *Note Regular Expressions::.  File: recutils.info, Node: Enumerated Field Types, Next: Date and Time Types, Prev: String Field Types, Up: Field Types 6.5 Enumerated Field Types ========================== Fields of this type contain symbols taken from an enumeration. The type is described by writing the sequence of symbols comprising the enumeration. Enumeration symbols are strings described by the following regexp: [a-zA-Z0-9][a-zA-Z0-9_-]* The symbols are separated by blank characters (including newlines). For example: %typedef: Status_t enum NEW STARTED DONE CLOSED %typedef: Day_t enum Monday Tuesday Wednesday Thursday Friday + Saturday Sunday It is possible to insert comments when describing an enum type. The comments are delimited by parenthesis pairs. The contents of the comments can be any character but parentheses. For example: %typedef: TaskStatus_t enum + NEW (The task was just created) + IN_PROGRESS (Task started) + CLOSED (Task closed) "Boolean" fields, declared with the type specifier 'bool', can be seen as special enumerations holding the binary values true and false. %typedef: Yesno_t bool The literals allowed in boolean fields are 'yes/no', '0/1' and 'true/false'. Examples are: SwitchedOn: 1 SwitchedOn: yes SwitchedOn: false  File: recutils.info, Node: Date and Time Types, Next: Other Field Types, Prev: Enumerated Field Types, Up: Field Types 6.6 Date and Time Types ======================= The "date" field type specifier can be used to declare dates and times. The synopsis is: %typedef: TYPE_NAME date There are many permitted date formats, described in detail later in this manual (*note Date input formats::). Of particular note are the following: - Dates and times read from recfiles are not affected by the locale or the timezone. This means that the 'LC_TIME' and the 'TZ' environment variables are ignored. If you wish, for example, to specify a time which must be interpreted as UTC, you must explicitly append the time zone correction: e.g. '2001-1-10 12:09Z'. - The field value '1/10/2001' means January 10, 2001, *not* October 1, 2001. - Relative times and dates (such as '1 day ago') are permitted but are not particularly useful.  File: recutils.info, Node: Other Field Types, Prev: Date and Time Types, Up: Field Types 6.7 Other Field Types ===================== The "Email" field type specifier is used to declare electronic addresses. The synopsis is: %typedef: Email_t email Sometimes it is useful to make fields to store field names. For that purpose the "Field" field type specifier is supported. The synopsis is: %typedef: Field_t field Universally Unique Identifiers (also known as UUIDs) are a way to assign a globally unique label to some object. The "uuid" field type specifier serves that purpose. The synopsis is: %typedef: Id_t uuid The format of the uuids is specified as 32 hexadecimal digits, displayed in five groups separated by hyphens. For example: 550e8400-e29b-41d4-a716-446655440000 There is one other possible field type, viz: a foreign key. The following example defines the type 'Maintainer_t' to be of type "record 'Hacker'"; in other words, a foreign key referring to a record in the 'Hacker' record set. %typedef: Maintainer_t rec Hacker This essentially means that the values to be stored in fields of type 'Maintainer_t' are of whatever type is defined for the primary key of the 'Hacker' record set. Why this is useful is discussed later. *Note Queries which Join Records::.  File: recutils.info, Node: Constraints on Record Sets, Next: Checking Recfiles, Prev: Field Types, Up: Top 7 Constraints on Record Sets **************************** The records in a recfile are by default not restricted to any particular structure except that they must contain one or more fields and optional comments. This provides the format with huge expressive power; but in many cases, it is also desirable to impose some restrictions in order to reflect some of the properties of the data stored in the database. It is also useful in order to preserve data integrity and thus avoid data corruption. The following sections describe the usage of some predefined special fields whose purpose is to impose this kind of restriction in the structure of the records. * Menu: * Mandatory Fields:: Requiring the presence of fields. * Prohibited Fields:: Forbidding the presence of fields. * Allowed Fields:: Restricting the presence of fields. * Keys and Unique Fields:: Fields characterizing records. * Singular Fields:: Fields with unique contents. * Size Constraints:: Constraints on the number of records in a set. * Arbitrary Constraints:: Constraints records must comply with.  File: recutils.info, Node: Mandatory Fields, Next: Prohibited Fields, Up: Constraints on Record Sets 7.1 Mandatory Fields ==================== Sometimes, you want to make sure that _every_ record of a particular type contains certain fields. To do this, use the special field '%mandatory'. The usage is: %mandatory: FIELD1 FIELD2 ... FIELDN The field names are separated by one or more blank characters. The fields listed in a '%mandatory' entry are non-optional; i.e. at least one field with this name shall be present in any record of this kind. Records violating this restriction are invalid and a checking tool will report the situation as a data integrity failure. Consider for example an "address book" database where each record stores the information associated with a contact. The records will be heterogeneous, in the sense they won't all contain exactly the same fields: the contact of an Internet shop will probably have a 'URL' field, while the entry for our grandmother probably won't. We still want to make sure that every entry has a field with the name of the contact. In this case, we could use '%mandatory' as follows: %rec: Contact %mandatory: Name Name: Granny Phone: +12 23456677 Name: Yoyodyne Corp. Email: sales@yoyod.com Phone: +98 43434433 A word of caution, however: In many situations, especially in day to day social interaction, it is common to find that certain information is simply unavailable. For example, although every person has a date of birth, some people will refuse to provide that information. It is probably wise therefore to avoid stipulating a field as mandatory, unless it is essential to the enterprise. Otherwise, a data entry clerk faced with this situation will have to make the choice between dropping the entry entirely or entering some fake data to keep the system happy.  File: recutils.info, Node: Prohibited Fields, Next: Allowed Fields, Prev: Mandatory Fields, Up: Constraints on Record Sets 7.2 Prohibited Fields ===================== The inverse of '%mandatory' is '%prohibit'. Prohibited fields may not occur in _any_ record of the given type. The usage is: %prohibit: FIELD1 FIELD2 ... FIELDN The field names are separated by one or more blank characters. Fields listed in a '%prohibit' entry are forbidden; i.e. no field with this name should be present in any record of this kind. Again, records violating this restriction are invalid. Several '%prohibit' fields can appear in the same record descriptor. The set of prohibited fields is the union of all the entries. For example, in the following database both 'Id' and 'id' are prohibited: %rec: Entry %prohibit: Id %prohibit: id One possible use case for prohibited fields arises when some field name is reserved for some future use. For example, if we were organizing a sports competition, we would want competitors to register before the event. However a competitor's 'result' should not and cannot be entered before the competition takes place. Initially then, we would change the record descriptor as follows: %rec: Contact %mandatory: Name %prohibit: result At the start of the event, the '%prohibit' line can be deleted, to allow results to be entered.  File: recutils.info, Node: Allowed Fields, Next: Keys and Unique Fields, Prev: Prohibited Fields, Up: Constraints on Record Sets 7.3 Allowed Fields ================== In some cases we know the set of fields that may appear in the records of a given type, even if they are not mandatory. The '%allowed' special field is used to specify this restriction. The usage is: %allowed: FIELD1 FIELD2 ... FIELDN The field names are separated by one or more blank chracters. If there are more or one '%allowed' fields in a record descriptor, all fields of all the records in the record set must be in the union of '%allowed', '%mandatory' and '%key'. Otherwise an integrity error is raised. Several '%allowed' fields can appear in the same record descriptor. The set of allowed fields is the union of all the entries.  File: recutils.info, Node: Keys and Unique Fields, Next: Singular Fields, Prev: Allowed Fields, Up: Constraints on Record Sets 7.4 Keys and Unique Fields ========================== The '%unique' and '%key' special fields are used to avoid several instances of the same field in a record, and to implement keys in record sets. Their usage is: %unique: FIELD1 FIELD2 ... FIELDN %key: FIELD The field names are separated by one or more blank characters. Normally it is permitted for a record to contain two or more fields of the same name. The '%unique' special field revokes this permissiveness. A field declared "unique" cannot appear more than once in a single record. For example, an entry in an address book database could contain an 'Age' field. It does not make sense for a single person to be of several ages. So, a field could be declared as "unique" in the corresponding record descriptor as follows: %rec: Contact %mandatory: Name %unique: Age Several '%unique' fields can appear in the same record descriptor. The set of unique fields is the union of all the entries. '%key' makes the referenced field the primary key of the record set. The primary key behaves as if both '%unique' and '%mandatory' had been specified for that field. Additionally, there is further restriction, viz: a given value of a primary key field may appear no more than once within a record set. Consider for example a database of items in stock. Each item is identified by a numerical 'Id' field. No item may have more than one 'Id', and no items may exist without an associated 'Id'. Additionally, no two items may share the same 'Id'. This common situation can be implementing by declaring 'Id' as the key in the record descriptor: %rec: Item %key: Id %mandatory: Title Id: 1 Title: Box Id: 2 Title: Sticker big It would not make sense to have several primary keys in a record set. Thus, it is not allowed to have several '%key' fields in the same record descriptor. It is also forbidden for two items to share the same 'Id' value. Both of these situations would be data integrity violations, and will be reported by a checking tool. Elsewhere, we discuss how primary keys can be used to link one record set to another using primary keys together with foreign keys. *Note Queries which Join Records::.  File: recutils.info, Node: Singular Fields, Next: Size Constraints, Prev: Keys and Unique Fields, Up: Constraints on Record Sets 7.5 Singular Fields =================== Sometimes we require certain fields with a given name to not appear in a record set featuring the same contents, but we don't want (or we can't) declare such fields as the key of the record set. In these circumstances we can use "singular fields", which are declared as such in the record descriptor using the '%singular' special field: %singular: FIELD  File: recutils.info, Node: Size Constraints, Next: Arbitrary Constraints, Prev: Singular Fields, Up: Constraints on Record Sets 7.6 Size Constraints ==================== Sometimes it is desirable to place constraints on entire records. This can be done with the '%size' special field which is used to limit the number of records in a record set. Its usage is: %size: [RELATIONAL_OPERATOR] NUMBER If no operator is specified then NUMBER is interpreted as the exact number of records of this type. The number can be any integer literal, including hexadecimal and octal constants. For example: %rec: Day %size: 7 %type: Name enum + Monday Tuesday Wednesday Thursday Friday + Saturday Sunday %doc: There should be exactly 7 days. The optional RELATIONAL_OPERATOR shall be one of '<', '<=', '>' and '>='. For example: %rec: Item %key: Id %size: <= 100 %doc: We have at most 100 different articles. It is valid to specify a size of '0', meaning that no records of this type shall exist in the file. Only one '%size' field shall appear in a record descriptor.  File: recutils.info, Node: Arbitrary Constraints, Prev: Size Constraints, Up: Constraints on Record Sets 7.7 Arbitrary Constraints ========================= Occasionally, '%mandatory', '%prohibit' and '%size' are just not flexible enough. We might, for instance, want to ensure that _if_ a field is present, then it must have a certain relationship to other fields. Or we might want to stipulate that under certain conditions only, a record contains a particular field. To this end, recutils provides a way for arbitrary field constraints to be defined. These permit restrictions on the presence and/or value of fields, based upon the value or presence of other fields within that record. This is done using the '%constraint' special field. Its usage is: %constraint: EXPR where EXPR is a selection expression (*note Selection Expressions::). When a constraint is present in a record set it means that all the records of that type must satisfy the selection expression, i.e. the evaluation of the expression with the record returns 1. Otherwise an integrity error is raised. Consider for example a record type 'Task' featuring two fields of type date called 'Start' and 'End'. We can use a constraint in the record set to specify that the task cannot start after it finishes: %rec: Task %type: Start,End date %constraint: Start << End The "implies" operator '=>' is especially useful when defining constraints, since it can be used to specify conditional constraints, i.e. constraints applying only in certain records. For example, we could specify that if a task is closed then it must have an 'End' date in the following way: %rec: Task %type: Start,End date %constraint: Start << End %constraint: Status = 'CLOSED' => #End It is acceptable to declare several constraints in the same record set.  File: recutils.info, Node: Checking Recfiles, Next: Remote Descriptors, Prev: Constraints on Record Sets, Up: Top 8 Checking Recfiles ******************* Sometimes, when creating a recfile by hand, typographical errors or other mistakes will occur. If a recfile contains such mistakes, then one cannot rely upon the results of queries or other operations. Fortunately there is a tool called 'recfix' which can find these errors. It is a good idea to get into the habit of running 'recfix' on a file after editing it, and before trying other commands. * Menu: * Syntactical Errors:: Fixing structure errors in recfiles. * Semantic Errors:: Fixing semantic errors in recfiles.  File: recutils.info, Node: Syntactical Errors, Next: Semantic Errors, Up: Checking Recfiles 8.1 Syntactical Errors ====================== One easy mistake is to forget the colon separating the field name from its value. %rec: Article %key Id Name: Thing Id: 0 Running 'recfix' on this file will immediately tell us that there is a problem: $ recfix --check inventory.rec inventory.rec: 2: error: expected a record Here, 'recfix' has diagnosed a problem in the file 'inventory.rec' and the problem lies at line 2. If, as in this case, 'recfix' shows there is a problem with the recfile, you should attend to that problem before trying to use any other recutils program on that file, otherwise strange things could happen. The '--check' flag is optional but in normal execution not required because that is the default operation.  File: recutils.info, Node: Semantic Errors, Prev: Syntactical Errors, Up: Checking Recfiles 8.2 Semantic Errors =================== However 'recfix' checks more than the syntactical integrity of the recfile. It also checks certain semantics and that the data is self-consistent. To do this, it uses the special fields of the record, some of which were introduced above (*note Constraints on Record Sets::). It is a good idea to use the special fields to stipulate the "enterprise rules" of the data. Errors will be reported if any of the following special keywords are present and the data does not match the stipulated conditions '%mandatory' The mandated fields are missing from a record. '%prohibit' The prohibited fields are present in a record. '%unique' There is more than one field in a single record of the given name. '%key' Two or more records share the same value of the field which is the key field. '%typedef and %type' A field has a value which does not conform to the specified type. '%size' The number of records does not conform to the specified restriction. '%constraint' A field does not conform to the specified constraint. '%confidential' An unencrypted value exists for a confidential field.  File: recutils.info, Node: Remote Descriptors, Next: Grouping and Aggregates, Prev: Checking Recfiles, Up: Top 9 Remote Descriptors ******************** The '%rec' special field is used for two main purposes: to identify a record as a record descriptor, and to provide a name for the described record set. The synopsis of the usage of the field is the following: %rec: TYPE [URL_OR_FILE] TYPE is the name of the kind of records described by the descriptor. It is mandatory to specify it, and it follows the same lexical conventions used by field names. *Note Fields::. There is a non-enforced convention to use singular nouns, because the name makes reference to the type of a single entity, even if it applies to all the records contained in the record set. For example, the following record set contains transactions, and the type specified in the record descriptor is 'Transaction'. %rec: Transaction Id: 10 Title: House rent Id: 11 Title: Loan Only one '%rec' field should be in a record descriptor. If there are more it is an integrity violation. It is highly recommended (but not enforced) to place this field in the first position of the record descriptor. Sometimes it is convenient to store records of the same type in different files. The duplication of record descriptors in this case would surely lead to consistency problems. A possible solution would be to keep the record descriptor in a separated file and then include it in any operation by using pipes. For example: $ cat descriptor.rec data.rec | recsel ... For those cases it is more convenient to use a "external descriptor". External descriptors can be built appending a file path to the '%rec' field value, like: %rec: FSD_Entry /path/to/file.rec The previous example indicates that a record descriptor describing the 'FSD_Entry' records shall be read from the file '/path/to/file.rec'. A record descriptor for 'FSD_Entry' may not exist in the external file. Both relative and absolute paths can be specified there. URLs can be used as sources for external descriptors as well. In that case we talk about "remote descriptors". For example: %rec: Department http://www.myorg.com/Org.rec The URL shall point to a text file containing rec data. If there is a record descriptor in the remote file documenting the 'Department' type, it will be used. Note that the local record descriptor can provide additional fields to "expand" the record type. For example: %rec: FSD_Entry http://www.jemarch.net/downloads/FSD.rec %mandatory: Rating The record descriptor above is including the contents of the 'FSD_Entry' record descriptor from the URL, and adding them to the local record descriptor, that in this case contains just the '%mandatory' field. If you are using GNU recutils (*note Invoking the Utilities::) to process your recfiles, any URL schema supported by 'libcurl' will work.  File: recutils.info, Node: Grouping and Aggregates, Next: Queries which Join Records, Prev: Remote Descriptors, Up: Top 10 Grouping and Aggregates ************************** Grouping and aggregate functions are two related features which are useful to extract statistics from a record set, or a subset of that record set. * Menu: * Grouping Records:: Combining records by fields. * Aggregate Functions:: Statistics and more.  File: recutils.info, Node: Grouping Records, Next: Aggregate Functions, Up: Grouping and Aggregates 10.1 Grouping Records ===================== Consider a recfile containing a list of items in a shop inventory. For each item it is stored its type, its category, its price, the date of the last selling operation of an item of that type, and the amount of items currently available in stock. A sample of such a database could be: Type: EC Car Category: Toy Price: 12.2 LastSell: 20-April-2012 Available: 623 Type: Terria Category: Food Price: 0.60 LastSell: 22-April-2012 Available: 8239 Type: Typex Category: Office Price: 1.20 LastSell: 22-April-2012 Available: 10878 Type: Notebook Category: Office Price: 1.00 LastSell: 21-April-2012 Available: 77455 Type: Sexy Puzzle Category: Toy Price: 6.20 LastSell: 6.20 Available: 12 Now imagine we are interested in grouping the contents of the 'Items' record set in groups of items of the same category. We can do it using the '-G' command line argument for 'recsel'. This argument accepts a list of fields separated by commas. The argument can be read as "group by". In this case we want to group by 'Category', so we would do: $ recsel -G Category Type: Terria Category: Food Price: 0.60 LastSell: 22-April-2012 Available: 8239 Type: Typex Category: Office Price: 1.20 LastSell: 22-April-2012 Available: 10878 Type: Notebook Price: 1.00 LastSell: 21-April-2012 Available: 77455 Type: EC Car Category: Toy Price: 12.2 LastSell: 20-April-2012 Available: 623 Type: Sexy Puzzle Price: 6.20 LastSell: 6.20 Available: 12 We can see that the output is three records, corresponding to the three different categories of items present in the database. However, we are only interested in the types of products in each category, so we can remove unwanted information using '-p': $ recsel -G Category -p Category,Type items.rec Category: Food Type: Terria Category: Office Type: Typex Type: Notebook Category: Toy Type: EC Car Type: Sexy Puzzle It is also possible to group by several fields. We could group by both 'Category' and 'LastSell': $ recsel -G Category,LastSell -p Category,LastSell,Type items.rec Category: Food LastSell: 22-April-2012 Type: Terria Category: Office LastSell: 21-April-2012 Type: Notebook Category: Office LastSell: 22-April-2012 Type: Typex Category: Toy LastSell: 20-April-2012 Type: EC Car Category: Toy LastSell: 6.20 Type: Sexy Puzzle  File: recutils.info, Node: Aggregate Functions, Prev: Grouping Records, Up: Grouping and Aggregates 10.2 Aggregate Functions ======================== recutils supports "aggregate functions". These are so called because they accept a record set and a field name as inputs and generate a single result. Usually this result is numerical. The supported aggregate functions are the following: 'Count(FIELD)' Counts the number of occurrences of a field. 'Avg(FIELD)' Calculates the average (mean) of the numerical values of a field. 'Sum(FIELD)' Calculates the sum of the numerical values of a field. 'Min(FIELD)' Calculates the minimum numerical value of a field. 'Max(FIELD)' Calculates the maximum numerical value of a field. The aggregate functions are to be invoked in the field expressions in 'recsel'. By default they are applied to the totality of the records in a record set. For example, using the items database from the previous section, we can do calculations as in the following examples. The SQL aggregate functions can be applied to the totality of the tuples in the relation. For example, using the 'Count' aggregate function we can calculate the number of fields named 'Category' present in the record set as follows: $ recsel -p "Count(Category)" items.rec Count_Category: 5 The result is a field whose name is derived from the function name and the field passed as its parameter, separated by an underline. This name scheme probably suffices for most purposes, but it is always possible to use a rewrite rule to obtain something different: $ recsel -p "Count(Category):NumCategories" items.rec NumCategories: 5 You can use different letter case in writing the name of the aggregate, and this will be reflected in the field name: $ recsel -p "CoUnT(Category)" items.rec CoUnT_Category: 5 It is possible to use more than one aggregate function in the field expression. Suppose we are also interested in the average price of the items we sell. We can use the 'Avg' aggregate: $ recsel -p "Count(Category),Avg(Price)" items.rec Count_Category: 5 Avg_Price: 4.240000 Now let's add a field along with an aggregate function to the field expression and see what we get: $ recsel -p "Type,Avg(Price)" items.rec Type: EC Car Avg_Price: 12.200000 Type: Terria Avg_Price: 0.600000 Type: Typex Avg_Price: 1.200000 Type: Notebook Avg_Price: 1 Type: Sexy Puzzle Avg_Price: 6.200000 We get five records! The reason is that when _only_ aggregate functions are part of the field expression, they are applied to the single record that would result from concatenating all the records in the record set together. However, when a regular field appears in the field expression the aggregate functions are applied to the individual records. This is still useful in some cases, such as a database of maintainers: Name: Jose E. Marchesi Email: jemarch@gnu.org Email: jemarch@es.gnu.org Name: Luca Saiu Email: positron@gnu.org Lets see how many emails each maintainer has: $ recsel -p "Name,Count(Email)" maintainers.rec Name: Jose E. Marchesi Count_Email: 2 Name: Luca Saiu Count_Email: 1 Aggregate functions are most useful when we combine them with grouping. This is when we are interested in some property of a subset of the records in the database. For example, the average prices of each item category stored in the database can be obtained by executing: $ recsel -p "Category,Avg(Price)" -G Category items.rec Category: Food Avg_Price: 0.600000 Category: Office Avg_Price: 1.100000 Category: Toy Avg_Price: 9.200000 If we were interested in the actual prices that result in each average we can do: $ recsel -p "Category,Price,Avg(Price)" -G Category items.rec Category: Food Price: 0.60 Avg_Price: 0.600000 Category: Office Price: 1.20 Price: 1.00 Avg_Price: 1.100000 Category: Toy Price: 12.2 Price: 6.20 Avg_Price: 9.200000  File: recutils.info, Node: Queries which Join Records, Next: Auto-Generated Fields, Prev: Grouping and Aggregates, Up: Top 11 Queries which Join Records ***************************** Suppose you wanted to add the residential address of the people in the 'acquaintances.rec' file from *note Simple Selections::. One way to do this is as follows: %type: Dob date Name: Alfred Nebel Dob: 20 April 2010 Email: alf@example.com Address: 42 Abbeter Way, Inprooving, WORCS Telephone: 01234 5676789 Name: Mandy Nebel Dob: 21 February 1972 Email: mandy@example.com Address: 42 Abbeter Way, Inprooving, WORCS Telephone: 01234 5676789 Name: Bertram Nebel Dob: 3 January 1966 Email: bert@example.com Address: 42 Abbeter Way, Inprooving, WORCS Telephone: 01234 5676789 Name: Charles Spencer Dob: 4 July 1997 Email: charlie@example.com Address: 2 Serpe Rise, Little Worning, SURREY Telephone: 09876 5432109 Name: Dirk Spencer Dob: 29 June 1945 Email: dirk@example.com Address: 2 Serpe Rise, Little Worning, SURREY Telephone: 09876 5432109 Name: Ernest Wright Dob: 26 April 1978 Email: ernie@example.com Address: 1 Wanter Rise, Greater Inncombe, BUCKS This will work fine. However you will notice that there are two addresses where more than one person live (presumably they are members of the same family). This has a number of disadvantages: - You have to type (or copy) the same information several times. - Should a family move house, then you would have to update the addresses (and telephone number) of all the family members. - A typing error in one of the addresses would lead an automatic query to erroneously suggest that the people lived at different addresses. - It unnecessarily increases the size of the recfile. * Menu: * Foreign Keys:: Referring to records from another records. * Joining Records:: Performing cross-joins.  File: recutils.info, Node: Foreign Keys, Next: Joining Records, Up: Queries which Join Records 11.1 Foreign Keys ================= A better way would be to separate the addresses and people into different record sets. The first record set might look like this: %rec: Person %type: Dob date %type: Abode rec Residence Name: Alfred Nebel Dob: 20 April 2010 Email: alf@example.com Abode: 42AbbeterWay Name: Mandy Nebel Dob: 21 February 1972 Email: mandy@example.com Mobile: 0555 342123 Abode: 42AbbeterWay Name: Bertram Nebel Dob: 3 January 1966 Email: bert@example.com Abode: 42AbbeterWay Name: Charles Spencer Dob: 4 July 1997 Email: charlie@example.com Abode: 2SerpeRise Name: Dirk Spencer Dob: 29 June 1945 Email: dirk@example.com Mobile: 0555 342123 Abode: 2SerpeRise Name: Ernest Wright Dob: 26 April 1978 Abode: ChezGrampa and the second (following in the same file), like this: %rec: Residence %key: Id Address: 42 Abbeter Way, Inprooving, WORCS Telephone: 01234 5676789 Id: 42AbbeterWay Address: 2 Serpe Rise, Little Worning, SURREY Telephone: 09876 5432109 Id: 2SerpeRise Address: 1 Wanter Rise, Greater Inncombe, BUCKS Id: ChezGrampa Here you can see that there are two record sets viz: 'Person' and 'Residence'. There are six people, but only three residences, because some residences accommodate more than one person. Note also that the 'Residence' descriptor has the entry '%key: Id' whilst the 'Person' descriptor has '%type: Abode rec Residence'. This is because 'Abode' is the foreign key which identifies the residence where a person lives. We could have declared the 'Id' field as '%auto'. This would have had the advantage that we need not manually update it. However, we decided that the 'Abode' field values in the 'Person' records are better as alphanumeric fields, so that they can contain human readable values. In this way, it is self-evident by reading a 'Person' record where that person lives. Yet since the 'Id' field is declared using the '%key' special field name, you can be sure that you don't accidentally reuse an existing key.  File: recutils.info, Node: Joining Records, Prev: Foreign Keys, Up: Queries which Join Records 11.2 Joining Records ==================== The above example has also added a new field to the 'Person' record set to contain that person's mobile phone number. Note that the 'Telephone' field belongs to the 'Residence' record set because that contains the telephone number of the home, whereas 'Mobile' belongs to 'Person' since mobile telephones are normally used exclusively by one individual. If we want to look up the name and address of a person in our recfile, we can use 'recsel' as before. Because we now have more than one record set in the 'acquaintances.rec' file, we have to tell 'recsel' in which record set we want to look up records. We do this with the '-t' flag as follows: $ recsel -t Person -P Name,Abode acquaintances.rec Alfred Nebel 42AbbeterWay Mandy Nebel 42AbbeterWay Bertram Nebel 42AbbeterWay Charles Spencer 2SerpeRise Dirk Spencer 2SerpeRise Ernest Wright ChezGrampa This result tells us the names of all the people in the recfile, as well as giving a concise and hopefully effective reminder telling us where they live. However these results would not be useful to someone unacquainted with the individuals. They need a list of names and full addresses. We can use 'recsel' to produce such a list: $ recsel -t Person -j Abode acquaintances.rec Name: Charles Spencer Dob: 4 July 1997 Email: charlie@example.com Abode_Address: 2 Serpe Rise, Little Worning, SURREY Abode_Telephone: 09876 5432109 Abode_Id: 2SerpeRise Name: Dirk Spencer Dob: 29 June 1945 Email: dirk@example.com Mobile: 0555 342123 Abode_Address: 2 Serpe Rise, Little Worning, SURREY Abode_Telephone: 09876 5432109 Abode_Id: 2SerpeRise Name: Ernest Wright Dob: 26 April 1978 Abode_Address: 1 Wanter Rise, Greater Inncombe, BUCKS Abode_Id: ChezGrampa The '-t' flag we have seen before. It tells 'recsel' that we want to extract records of type 'Person'. The '-j' flag is new. It says that we want to perform a "join". Specifically we want to join the 'Person' records according to their 'Abode' field. In the above example, 'recsel' displays several field names which do not appear anywhere in the input e.g. 'Abode_Address'. This is the 'Address' field in the record joined by the foreign key 'Abode'. In this example probably only the name and address are of interest. The other information such as date of birth is incidental. The foreign key 'Abode_Id' is certainly not wanted in the output since it is redundant. As usual, you can use the '-P' or '-p' options to limit the fields which will be displayed. However the full joined field name, if appropriate, must be specified. So the names and addresses without the other information can be retrieved thus: $ recsel -t Person -j Abode -p Name,Abode_Address acquaintances.rec Name: Charles Spencer Abode_Address: 2 Serpe Rise, Little Worning, SURREY Name: Dirk Spencer Abode_Address: 2 Serpe Rise, Little Worning, SURREY Name: Ernest Wright Abode_Address: 1 Wanter Rise, Greater Inncombe, BUCKS  File: recutils.info, Node: Auto-Generated Fields, Next: Encryption, Prev: Queries which Join Records, Up: Top 12 Auto-Generated Fields ************************ Consider for example a list of articles in stock in a toy store: %rec: Item %key: Description Description: 2cm metal soldier WWII Amount: 2111 Description: Flying Helicopter Indoor Maxi Amount: 8 ... It would be natural to identify the items by their descriptions, but it is also error prone: was it "Flying Helicopter Indoor Maxi" or "Flying Helicopter Maxi Indoor"? Was "Helicopter" in lower case or upper case? Thus it is quite common in databases to use some kind of numeric "Id" to uniquely identify items like those ones, because numbers are easy to increment and manipulate. So we could add a new numeric 'Id' field and use it as the primary key: %rec: Item %key: Id %mandatory: Description Id: 0 Description: 2cm metal soldier WWII Amount: 2111 Id: 1 Description: Flying Helicopter Indoor Maxi Amount: 8 ... A problem with this approach is that we must be careful to not assign already used ids when we introduce more articles in the database. Other than its uniqueness, it is not important which number is associated with which article. To ease the management of those Ids database systems use to provide a facility called "auto-counters". Auto-counters can be implemented in recfiles using the '%auto' directive in the record descriptor. Its usage is: %auto: FIELD1 FIELD2 ... FIELDN The list of field names are separated by one or more blank characters. There can be several '%auto' fields in the same record descriptor, the effective list of auto-generated fields being the union of all the entries. When 'recins' inserts a new record in the recfile, it looks for any declared auto field. If any of these fields are not provided explicitly in the command line then 'recins' generates them along with the user-provided fields. Such auto fields are generated at the beginning of the new records, in the same order they are found in the '%auto' directives. For example, consider a 'items.rec' database with an empty record set: %rec: Item %key: Id %auto: Id %mandatory: Description If we insert a new record and we do not specify an 'Id' then it will be generated automatically by 'recins': $ recins -t Item -f Description -v 'recutils t-shirts' \ -f Amount -v 200 \ items.rec $ cat items.rec %rec: Item %key: Id %auto: Id %mandatory: Description Id: 0 Description: recutils t-shirts Amount: 200 The concrete effect of the '%auto' directive depends on the type of the affected field. The following sections document how. * Menu: * Counters:: Generating incremental Ids. * Unique Identifiers:: Generating universally unique Ids. * Time-Stamps:: Tracking the creation of records.  File: recutils.info, Node: Counters, Next: Unique Identifiers, Up: Auto-Generated Fields 12.1 Counters ============= If an auto field is of type 'integer' or 'range' then any newly generated field will use the "next biggest" unused number in the record set. Consider the toy inventory database introduced above. We could declare the 'Id' field to be generated automatically: %rec: Item %key: Id %type: Id int %mandatory: Description %auto: Id Id: 0 Description: 2cm metal soldier WWII Amount: 2111 When the next new item is introduced in the database, 'recins' will note the '%auto', and create a new 'Id' field for the new record with the next-biggest unused integer, since 'Id' is declared to be of type 'int'. In this example, the new record would have an Id of '1'. The database can still provide an explicit Id for the new record. In that case the field is not generated automatically. Note that if no explicit type is defined for an auto generated field then it is assumed to be an integer.  File: recutils.info, Node: Unique Identifiers, Next: Time-Stamps, Prev: Counters, Up: Auto-Generated Fields 12.2 Unique Identifiers ======================= Universally Unique Identifiers, often abbreviated as UUIDs, can also be auto-generated using recutils. Suppose you maintain a database with events featuring the following record descriptor: %rec: Event %key: Id %mandatory: Title Date What would be appropriate to identify each event? We could use an integer and declare it as auto-generated. After adding two events the database would look like this: %rec: Event %key: Id %mandatory: Title Date Id: 0 Title: Team meeting Date: 12-08-2013 Id: 1 Title: Dave's birthday Date: 20-12-2013 However, suppose that we want to share our events with other people, i.e. to send them event records and to incorporate their records into our own database. In this case the 'Id's would collide. A good solution is to use 'uuids' and declare them as 'auto': %rec: Event %key: Id %type: Id uuid %mandatory: Title Date Id: f81d4fae-7dec-11d0-a765-00a0c91e6bf6 Title: Team meeting Date: 12-08-2013 Id: f81d4fae-dc18-11d0-a765-a01328400a0c Title: Dave's birthday Date: 20-12-2013  File: recutils.info, Node: Time-Stamps, Prev: Unique Identifiers, Up: Auto-Generated Fields 12.3 Time-Stamps ================ Auto generated dates can be used to implement automatic timestamps. Consider for example a "Transfer" record set registering bank transfers. We want to save a timestamp every time a transfer is done, so we include an '%auto' for the date: %rec: Transfer %key: Id %type: Id int %type: Date date %auto: Id Date  File: recutils.info, Node: Encryption, Next: Generating Reports, Prev: Auto-Generated Fields, Up: Top 13 Encryption ************* For ethical or security reasons it is sometimes necessary that information in a recfile should not be readable by unauthorized people. One way to prevent a recfile from being read is to use the security features of the operating system. A more secure way would be to encrypt the entire recfile using a free strong encryption program such as GnuPG (http://gnu.org/software/gnupg). The disadvantage of both these methods is that the entire recfile has to be secured when it may well be the case that only certain data need to be protected. Recutils offers a way to encrypt specified fields in a record, whilst leaving the rest in clear text. * Menu: * Confidential Fields:: Declaring fields as sensitive data. * Encrypting Files:: Encrypt confidential fields. * Decrypting Data:: Reading encrypted fields.  File: recutils.info, Node: Confidential Fields, Next: Encrypting Files, Up: Encryption 13.1 Confidential Fields ======================== To specify that a field should be encrypted, use the '%confidential' special field. This special field declares a set of fields as "confidential", meaning they contain secret data such as passwords or personal information. Its usage is: %confidential: FIELD1 FIELD2 ... FIELDN The field names are separated by one or more blank characters. There can be several '%confidential' fields in the same record descriptor, the effective list of confidential fields being the union of all the entries. Declaring a field as confidential indicates that its contents must not be stored in plain text, but encrypted with a password-based mechanism. When the information is retrieved from the database the confidential fields are unencrypted if the correct password is provided. Likewise, when information is inserted in the database the confidential fields are encrypted with some given password. For example, consider a database of users of some service. For each user we want to store a name, a login name, an email address and a password. All this information is public with the obvious exception of the password. Thus we declare the 'Password' field as confidential in the corresponding record descriptor: %rec: Account %type: Name line %type: Login line %type: Email email %confidential: Password The rec format does not impose the usage of a specific encryption algorithm, but requires that: - The algorithm must be password-based. - The value of any encrypted field shall begin with the string 'encrypted-' followed by the encrypted data. - The encrypted data must be encoded in some ASCII encoding such as base64. The above rules assure that it is possible to determine whether a given field is encrypted. For example, the following is an excerpt from the account database described above. It contains an entry with the password encrypted and another with the password unencrypted: Name: Mr. Foo Login: foo Email: foo@foo.com Password: encrypted-AAABBBCCDDDEEEFFF Name: Mr. Bar Login: bar Email: bar@bar.com Password: secret Unencrypted confidential fields are a data integrity error, and utilities like 'recfix' will report it. The same utility can be used to "fix" the database by massively encrypting any unencrypted field. Nothing prevents the usage of several passwords in the same database. This allows the establishment of several level of securities or security profiles. For example, we may want to store different passwords for different online services: %rec: Account %confidential: WebPassword ShellPassword We could then encrypt WebPassword entries using a password shared among all the webmasters, and the ShellPassword entries with a more restricted password available only to the administrator of the machine. Note that since the utilities only accept to specify one password at a time different passwords cannot be specified at decryption time. This means that in the example above the administrator would need to run 'recsel' twice in order to decrypt all the encrypted data in the recfile. The GNU recutils fully support encrypted fields. See the documentation for 'recsel', 'recins' and 'recfix' for details on how to operate on files containing confidential fields.  File: recutils.info, Node: Encrypting Files, Next: Decrypting Data, Prev: Confidential Fields, Up: Encryption 13.2 Encrypting Files ===================== 'recins' allows the insertion of encrypted fields in a database. When the '-s' ('--password') command line option is specified in the command line any field declared as confidential in the record descriptor will get encrypted using the given passphrase. If the command is executed interactively and '-s' is not used then the user is asked to provide a password using the terminal. For example, the invocation: $ recins -t Account -s mypassword -f Login -v foo -f Password \ -v secret accounts.rec will encrypt the value of the 'Password' field with 'mypassword' as long as the field is declared as confidential. (*note Confidential Fields:: for details on confidential fields). 'recins' will issue a warning if a confidential field is inserted in the database but no password was provided to encrypt it. This is to avoid having unencrypted sensitive data in the recfiles.  File: recutils.info, Node: Decrypting Data, Prev: Encrypting Files, Up: Encryption 13.3 Decrypting Data ==================== The contents of confidential fields can be read using the '-s' ('--password') command line option to 'recsel'. When used, any selected record containing encrypted fields will try to decrypt them with the given password. If the operation succeeds then the output will include the unencrypted data. Otherwise the ASCII-encoded encrypted data will be emitted. If 'recsel' is invoked interactively and no password is specified with '-s', the user will be asked for a password in case one is needed. No echo of the password will appear in the screen. The provided password will be used to decrypt all confidential fields as if it was specified with '-s'. For example, consider the following database storing information about the user accounts of some online service. Each entry stores a login, a full name, email and a password. The password is declared as confidential: %rec: Account %key: Login %confidential: Password Login: foo Name: Mr. Foo Email: foo@foo.com Password: encrypted-AAABBBCCCDDD Login: bar Name: Ms. Bar Email: bar@bar.org Password: encrypted-XXXYYYZZZUUU If we use 'recsel' to get a list of records of type 'Account' without specifying a password, or if the wrong password was specified in interactive mode, then we would get the following output with the encrypted values: $ cat accounts.rec | recsel -t Account -p Login,Password Login: foo Password: encrypted-AAABBBCCCDDD Login: bar Password: encrypted-XXXYYYZZZUUU If we specify a password and both entries were encrypted using that password, we would get the unencrypted values: $ recsel -t Account -s secret -p Login,Password accounts.rec Login: foo Password: foosecret Login: bar Password: barsecret As mentioned above, a confidential field may be encrypted with different passwords in different records (*note Confidential Fields::). For example, we may have an entry in our database with data about the account of the administrator of the online service. In that case we might want to store the password associated with that account using a different password than that for users. In that case the output of the last command would have been: $ recsel -t Account -s secret -p Login,Password accounts.rec Login: foo Password: foosecret Login: bar Password: barsecret Login: admin Password: encrypted-TTTVVVBBBNNN We would need to invoke 'recsel' with the password used to encrypt the admin entry in order to read it back unencrypted.  File: recutils.info, Node: Generating Reports, Next: Interoperability, Prev: Encryption, Up: Top 14 Generating Reports ********************* Having a list of names and addresses, one might want to use this list to address envelopes (say, to send annual greeting cards). Since addresses are normally written on several lines, it would be appropriate then to split the 'Address' field values across multiple lines as described in *note Fields::. Suitable text can now be obtained thus: $ recsel -t Person -j Abode -P Name,Abode_Address acquaintances.rec Charles Spencer 2 Serpe Rise, Little Worning, SURREY Dirk Spencer 2 Serpe Rise, Little Worning, SURREY Ernest Wright 1 Wanter Rise, Greater Inncombe, BUCKS A business enterprise might want to go one step further and generate letters (such as an advertisement or a recall notice) to customers. Since 'recsel' merely selects records and fields from record sets, on its own it cannot do this; so there is another command designed for this purpose, called 'recfmt'. This command uses a "template" which defines the general form of the desired output. A letter template might look as follows: {{Name}} {{Abode_Address}} Dear {{Name}}, Re: Special offer for January We are delighted to be able to offer you a 95% discount on all car and truck hire contracts between 1 January and 2 February. Please call us to take advantage of this offer. Yours sincerely, Karen van Rental (CEO) ^L It is best to place such a template into a file, so that you can edit it as you wish. Notice the instances of double braces enclosing a field name, e.g. '{{Name}}'. These are called "slots" and indicate places where the respective field's value should be placed. Let's assume this template is in a file called 'offer.templ'. We can then pipe the output from 'recsel' into 'recfmt' in order as follows: $ recsel -t Person -j Abode acquaintances.rec | recfmt -f offer.templ Charles Spencer 2 Serpe Rise, Little Worning, SURREY Dear Charles Spencer, Re: Special offer for January We are delighted to be able to offer you a 95% discount on all car and . . . For each record that 'recsel' selects, one copy of 'offer.templ' will be generated. Each slot will be replaced with the field value corresponding to the field name in the slot. * Menu: * Templates:: Formatted output.  File: recutils.info, Node: Templates, Up: Generating Reports 14.1 Templates ============== A recfmt template is a text string that may contain "template slots". Those slots are substituted in the template using the information of a given record. Any text that is not within a slot is copied literally to the output. Slots are written surrounded by double curly braces, like: {{...}} Slots contain selection expressions, that are executed every time the template is applied to a record. The slot is then replaced by the string representation of the value returned by the expression. For example, consider the following template: Task {{Id}}: {{Summary}} ------------------------ {{Description}} -- Created at {{CreatedAt}} When applied to the following record: Id: 123 Summary: Fix recfmt. CreatedAt: 12 December 2010 Description: + The recfmt tool shall be fixed, because right + now it is leaking 200 megabytes per processed record. The result is: Task 123: Fix recfmt. ------------------------ The recfmt tool shall be fixed, because right now it is leaking 200 megabytes per processed record. -- Created at 12 December 2010 You can use any selection expression in the slots, including conditionals and string concatenation.  File: recutils.info, Node: Interoperability, Next: Bash Builtins, Prev: Generating Reports, Up: Top 15 Interoperability ******************* Included in the recutils package are a number of utilities to assist in the creation of recfiles using data which already exists in other formats, and for exporting data from recfiles so that it can be used in other applications. * Menu: * CSV Files:: Converting recfiles to/from csv files. * Importing MDB Files:: Importing MS Access Databases.  File: recutils.info, Node: CSV Files, Next: Importing MDB Files, Up: Interoperability 15.1 CSV Files ============== Many applications are able to read and write files containing so-called "comma separated values". Such files generally contain tabular data where the columns are separated by commas and the rows by line feed and/or carriage return characters. Although record sets are not tables, tables can be easily emulated using records having the same fields in the same order. For example: a: value b: value c: value a: value b: value c: value ... In several respects records are more flexible than tables: - Fields can appear in a different order in several records. - There can be several fields with the same name in a single record. - Records can differ in the number of fields. It is evident that records, such as those in recfiles, are a more general structure than comma separated values. This means that when converting from csv files to recfiles, certain decisions need to be made. The 'rec2csv' utility (*note Invoking rec2csv::) implements an algorithm to deal with this problem and generate a table that the user expects. The algorithm works as follows: 1. The utility first scans the specified record set, building a list with the names that will become the table header. 2. For each field, a header is added with the form: FIELDNAME[_N] where N is a number in the range '2..inf' and is the "index" of the field in its containing record plus one. For example, consider the following record set: a: a1 b: b11 b: b12 c: c1 a: a2 b: b2 d: d2 The corresponding list of headers being: a b b_2 c a b d 3. Then duplicates are removed: a b b_2 c d 4. The resulting list of headers is then used to build the table in the generated csv file. In the above example the result would be "a","b","b_2","c","d" "a1","b11","b12","c1", "a2","b2",,,"d2" As shown, missing fields are implemented as empty columns in the generated csv.  File: recutils.info, Node: Importing MDB Files, Prev: CSV Files, Up: Interoperability 15.2 Importing MDB Files ======================== Access files ("mdb files") are collections of several relations, also known as tables. Tables can be either "user tables" storing user data, or "system tables" storing information such as forms, queries or the relationships between the tables. It is possible to get a listing with the names of all tables stored in a mdb file by calling 'mdb2rec' in the following way: $ mdb2rec -l sales.mdb Customers Products Orders So 'sales.mdb' stores user information in the tables Customers, Products and Orders. If we want to include system tables in the listing we can use the '-s' command line option: $ mdb2rec -s -l sales.mdb MSysObjects MSysACEs MSysQueries MSysRelationships Customers Products Orders The tables with names starting with 'MSys' are system tables. The data stored in those tables is either not relevant to the recutils user (used by the Access program to create forms and the like) or is used in an indirect way by 'mdb2rec' (such as the information from MSysRelationships). Let's read some data from the 'mdb' file. We can get the relation of Products in rec format: $ mdb2rec sales.mdb Products %rec: Products %type: ProductID int %type: ProductName size 80 %type: Discontinued bool ProductID: 1 ProductName: GNU generation T-shirt Discontinued: 0 ... A "record descriptor" is created for the record set containing the generated records, called Products. As seen in the example, 'mdb2rec' is able to generate type information for the fields. The list of customers is similar: $ mdb2rec sales.mdb Customers %rec: Customers %type: CustomerID size 4 %type: CompanyName size 80 %type: ContactName size 60 CustomerID: GSOFT CompanyName: GNU Soft ContactName: Jose E. Marchesi ... If no table is specified in the invocation to 'mdb2rec' all the tables in the file are processed, with the exception of the system tables, which requires '-s' to be used: $ mdb2rec sales.mdb %rec: Products ... %rec: Customers ... %rec: Orders ...  File: recutils.info, Node: Bash Builtins, Next: Invoking the Utilities, Prev: Interoperability, Up: Top 16 Bash Builtins **************** The command-line utilities described in *note Invoking the Utilities:: are designed to be used interactively in the shell. Together, and often combined with the standard shell utilities, they provide a quite complete user interface. However, the user's experience can be greatly improved by a closer integration between the recutils and the shell. The following sections describe several extensions for 'bash', the GNU shell (*note (bash)Top::). These extensions make the shell "aware" of the recutils. As with any bash built-in, help is available in the command line using the 'help' command. For example: $ help readrec If you installed recutils using a binary package in a GNU/Linux distribution, odds are that the built-in commands described in this chapter are already available to you. Otherwise (you get a "command not found" or similar error) you may have to register the built-in commands with your bash. This is very easy using the 'enable' bash command. The registering command for readrec would be: $ enable -f readrec.so readrec Note however that some systems require the full path to 'readrec.so' in order for this command to work. * Menu: * readrec:: Exporting the contents of records to the shell.  File: recutils.info, Node: readrec, Up: Bash Builtins 16.1 readrec ============ The bash built-in 'read', when invoked with no options, consumes one line from standard input and makes it available in the predefined 'REPLY' environment variable, or any other variable whose name is passed as an argument. This allows processing data structured in lines in a quite natural way. For example, the following program prints the third field of each line, with fields separated by commas, until standard input is exhausted: # Process one line at a time. while read do echo "The third field is " `echo $REPLY | cut -d, -f 2` done However, 'read' is not very useful when it comes to processing recutils records in the shell. Even though it is possible to customize the character used by 'read' to split the input into records, we would need to ignore the empty records in the likely case of more than one empty line separating records. Also, we would need to use 'recsel' to access to the record fields. Too complicated! Thus, the 'readrec' bash built-in is similar to 'read' with the difference that it reads records instead of lines. It also "exports" the contents of the record to the user as the values of several environment variables: - 'REPLY_REC' is set to the record read from standard input. - A set of variables 'FIELD' named after each field found in the record are set to the (decoded) value of the fields found in the input record. When several fields with the same name are found in the input record then a bash array is created. Consider for example the following simple database containing contacts information: Name: Mr. Foo Email: foo@bar.com Email: bar@baz.net Checked: no Name: Mr. Bar Email: bar@foo.com Telephone: 999666000 Checked: yes We would like to write some shell code to send an email to all the contacts, but only if the contact has not been checked before, i.e. the 'Checked' field contains 'no'. The following code snippet would do the job nicely using 'readrec': recsel contacts.rec | while readrec do if [ $Checked = "no" ] then mail -s "You are being checked." ${Email[0]} < email.txt recset -e "Email = '$Email'" -f Checked -S yes contacts.rec sleep 1 fi done Note the usage of the bash array when accessing the primary email address of each contact. Note also that we update each contact to figure as "checked", using 'recset', so she won't get pestered again the next time the script is run.  File: recutils.info, Node: Invoking the Utilities, Next: Using ob-rec.el, Prev: Bash Builtins, Up: Top 17 Invoking the Utilities ************************* Certain options are available in all of these programs. Rather than writing identical descriptions for each of the programs, they are listed here. '--version' Print the version number, then exit successfully. '--help' Print a help message, then exit successfully. '--' Delimit the option list. Later arguments, if any, are treated as operands even if they begin with '-'. For example, 'recsel -- -p' reads from the file named '-p'. * Menu: * Invoking recinf:: Printing information about rec files. * Invoking recsel:: Selecting records. * Invoking recins:: Inserting records. * Invoking recdel:: Deleting records. * Invoking recset:: Managing fields. * Invoking recfix:: Fixing broken rec files, and diagnostics. * Invoking recfmt:: Formatting records using templates. * Invoking csv2rec:: Converting csv data into rec data. * Invoking rec2csv:: Converting rec data into csv data. * Invoking mdb2rec:: Converting mdb files into rec files.  File: recutils.info, Node: Invoking recinf, Next: Invoking recsel, Up: Invoking the Utilities 17.1 Invoking recinf ==================== 'recinf' reads the given rec files (or the data from standard input if no file is specified) and prints a summary of the record types contained in the input. Synopsis: recinf [OPTION]... [FILE]... The default behavior is to emit a line per record type in the input containing its name and the number of records of that type: $ recinf hackers.rec tasks.rec 25 Hacker 102 Task If the input contains anonymous records, i.e. records that are before the first record descriptor, the corresponding output line won't have a type name: $ recinf data.rec 10 In addition to the common options described earlier the program accepts the following options. '-t TYPE' '--type=TYPE' Select records of a given type only. '-d' '--descriptor' Print all the record descriptors present in the file. '-n' '--names-only' Output just the names of the record types found in the input. If the input contains only anonymous records then output nothing. '-S' '--print-sexps' Print the data in the form of sexps (Lisp expressions) instead of rec format. This option can be useful for, of course, Lisp programs.  File: recutils.info, Node: Invoking recsel, Next: Invoking recins, Prev: Invoking recinf, Up: Invoking the Utilities 17.2 Invoking recsel ==================== 'recsel' reads the given rec files (or the data in the standard input if no file is specified) and prints out records (or part of records) based upon some criteria specified by the user. 'recsel' searches rec files for records satisfying certain criteria. Synopsis: recsel [OPTION]... \ [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] \ [-c | (-p|-P|-R) FIELD_EXPR] \ [FILE]... If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. In addition to the common options described earlier (*note Common Options::) the program accepts the following options. The following "global options" are available. '-i' '--case-insensitive' Make string matching case-insensitive in selection expressions. '-C' '--collapse' Do not section the result in records with newlines. '-d' '--include-descriptors' Print record descriptors along with the matched records. '-s SECRET' '--password=SECRET' Try to decrypt confidential fields with the given password. '-S' '--sort=FIELDS' Sort the output by the comma-separated list of field names, FIELDS. This option takes precedence over any sorting criteria specified in the corresponding record descriptor with '%sort'. '-U' '--uniq' Remove duplicated fields in the output records. Fields are duplicated if they have the same field name and the same value. '-G' '--group-by=FIELDS' Group the output records by the provided comma-separated list of FIELDS. Grouping is performed before sorting. The "selection options" are used to select a subset of the records in the input. '-n INDEXES' '--number=INDEXES' Match the records occupying the given positions in its record set. INDEXES must be a comma-separated list of numbers or ranges, with ranges being two numbers separated with dashes. For example, the following list denotes the first, the third, the fourth and all records up to the tenth: '-n 0,2,4-9'. '-e EXPR' '--expression=EXPR' A record selection expression (*note Selection Expressions::). Only the records matched by the expression will be taken into account to compute the output. '-q STR' '--quick=STR' Select records having a field whose value contains the substring STR. '-m NUM' '--random=NUM' Select NUM random records. If NUM is zero then select all the records. '-t TYPE' '--type=TYPE' Select records of a given type only. '-j FIELD' '--join=FIELD' Perform an inner join of the record set selected by '-t' and the record set for which FIELD is a foreign key. FIELD must be a field declared with type 'rec' and thus must be a foreign key. If a join is performed then any selection expression and field expression operate on the joined record sets. The "output options" are used to determine what information about the selected records to display to the user, and how to display it. '-p NAME_LIST' '--print=NAME_LIST' List of fields to print for each record. NAME_LIST is a list of field names separated by commas. For example: -p Name,Email means to print the Name and the Email of every matching record, both the field names and values. If this option is not specified then all the fields of the matching records are printed to standard output. '-P NAME_LIST' '--print-values=NAME_LIST' Same as '-p', but print only the values of the selected fields. '-R NAME_LIST' '--print-row=NAME_LIST' Same as '-P', but print the values separated by single spaces instead of newlines. '-c' '--count' If this option is specified then 'recsel' will print the number of matching records instead of the records themselves. This option is incompatible with '-p', '-P' and '-R'. This "special option" is available to ease the communication between the recutils and other programs, namely Lisp interpreters. This option is not intended to be used by human operators. '--print-sexps' Print the data using sexps instead of rec format.  File: recutils.info, Node: Invoking recins, Next: Invoking recdel, Prev: Invoking recsel, Up: Invoking the Utilities 17.3 Invoking recins ==================== 'recins' adds new records to a rec file or to rec data read from standard input. Synopsis: recins [OPTION]... [-t TYPE] \ [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] \ [( -f STR -v STR]|[-r RECDATA )]... \ [FILE] The new record to be inserted by the command is constructed by using pairs of '-f' and '-v' options, or '-r'. Each pair defines a field. The order of the parameters is significant. If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. In addition to the common options described earlier (*note Common Options::) the program accepts the following options. '-t' '--type=EXPR' The type of the new record. If there is a record set in the input data matching this type then the new record is added there. Otherwise a new record set is created. If this parameter is not specified then the new record is anonymous. '-f' '--field=NAME' Declares the name of a field. This option must be followed by a '-v'. '-v' '--value=VALUE' The value of the field being defined. '-r' '--record=VALUE' Add the fields of the record in VALUE. This option can be intermixed with '-f ... -v' pairs. '-s' '--password' Encrypt confidential fields with the given password. '--no-external' Don't use external record descriptors. '--verbose' Be verbose when reporting integrity problems. '--no-auto' Don't generate "auto" fields. *Note Auto-Generated Fields::. Record selection arguments are supported too. If they are used then 'recins' uses "replacement mode": instead of appending the new record, matched records are replaced by copies of the provided record. The selection arguments are the same as in 'recsel': '-n INDEXES' '--number=INDEXES' Match the records occupying the given positions in its record set. INDEXES must be a comma-separated list of numbers or ranges, the ranges being two numbers separated with dashes. For example, the following list denotes the first, the third, the fourth and all records up to the tenth: '-n 0,2,4-9'. '-e RECORD_EXPR' '--expression=EXPR' A record selection expression (*note Selection Expressions::). Matching records will get replaced. '-q STR' '--quick=STR' Remove records having a field whose value contains the substring STR. '-m NUM' '--random=NUM' Select NUM random records. If NUM is zero then all records are selected, i.e. no replace mode is activated. '-i' '--case-insensitive' Make strings case-insensitive in selection expressions. '--force' Insert the requested record even in potentially dangerous situations, such as when the data integrity of the database is compromised.  File: recutils.info, Node: Invoking recdel, Next: Invoking recset, Prev: Invoking recins, Up: Invoking the Utilities 17.4 Invoking recdel ==================== 'recdel' removes records from a rec file, or from rec data read from standard input. Synopsis: recdel [OPTIONS]... [-t TYPE] \ [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] \ [FILE] If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. In addition to the common options described earlier (*note Common Options::) the program accepts the following options. '-t' '--type=EXPR' Remove records of the given type. If this parameter is not specified then records of any type will be removed. '-n INDEXES' '--number=INDEXES' Match the records occupying the given positions in its record set. INDEXES must be a comma-separated list of numbers or ranges, the ranges being two numbers separated with dashes. For example, the following list denotes the first, the third, the fourth and all records up to the tenth: '-n 0,2,4-9'. '-e RECORD_EXPR' '--expression=EXPR' A record selection expression (*note Selection Expressions::). Only the records matched by the expression will be removed from the file. '-q STR' '--quick=STR' Remove records having a field whose value contains the substring STR. '-m NUM' '--random=NUM' Remove NUM random records. If NUM is zero then remove all the records. '-c' '--comment' Comment the matching records out instead of removing them. '--force' Delete even in potentially dangerous situations, such as a request to delete all the records of some type. '--no-external' Don't use external record descriptors. '-i' '--case-insensitive' Make strings case-insensitive in selection expressions. '--verbose' Be verbose when reporting integrity problems.  File: recutils.info, Node: Invoking recset, Next: Invoking recfix, Prev: Invoking recdel, Up: Invoking the Utilities 17.5 Invoking recset ==================== 'recset' manipulates the fields of records in a rec file, or rec data read from standard input. Synopsis: recset [OPTION]... [FILE]... If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. In addition to the common options described earlier (*note Common Options::) the program accepts the following options. Record selection options: '-i' '--case-insensitive' Make strings case-insensitive in selection expressions. '-t' '--type=EXPR' Operate on the records of the given type. If this parameter is not specified then records of any type will be affected. '-n INDEXES' '--number=INDEXES' Operate on the records occupying the given positions in its record set. INDEXES must be a comma-separated list of numbers or ranges, the ranges being two numbers separated with dashes. For example, the following list denotes the first, the third, the fourth and all records up to the tenth: '-n 0,2,4-9'. '-e EXPR' '--expression=EXPR' A record selection expression (*note Selection Expressions::). Only the records matched by the expression will be processed. '-q STR' '--quick=STR' Operate on records having a field whose value contains the substring STR. '-m NUM' '--random=NUM' Operate on NUM random records. If NUM is zero then operate on all the records. Field selection options: '-f' '--fields=FEX' Field selection expression (*note Field Expressions::) to select the fields to operate. Actions: '-s' '--set=VALUE' Set the value of the selected fields to VALUE. '-a' '--add=VALUE' Add a new field to the selected record with value VALUE. '-S' '--set-add=VALUE' Set the value of the selected fields to VALUE. If some of the fields don't exist in a record, append it with the specified value. '-r' '--rename=VALUE' Rename a field; VALUE must be a valid field name. The field expression associated with this action must contain a single field name and an optional subscript. If an entire record set is selected then the field is renamed in the record descriptor as well. '-d' '--delete' Delete the selected fields in the selected records. '-c' '--comment' Comment out the selected fields in the selected records. '--no-external' Don't use external record descriptors. '--verbose' Be verbose when reporting integrity problems. '--force' Perform the requested operation even in potentially dangerous situations, or when the integrity of the data stored in the file is affected.  File: recutils.info, Node: Invoking recfix, Next: Invoking recfmt, Prev: Invoking recset, Up: Invoking the Utilities 17.6 Invoking recfix ==================== 'recfix' checks and fixes rec files. Synopsis: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE] If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. In addition to the common options described earlier (*note Common Options::) the program accepts the following global options. '--no-external' Don't use external record descriptors. The effect of running 'recfix' depends on the operation it performs. The operation mode is selected by using one of the following options. '--check' Check the integrity of the database contained in the file, printing diagnostics messages in case something is not right. This is the default operation. '--sort' Perform a physical sort of all the records contained in the file (or standard input) after checking for its integrity. The sorting criteria are provided by the '%sort' special field, if any. If there is an integrity failure the sorting is not performed. This is a destructive operation. '--decrypt' '--encrypt' Decrypt (encrypt) all the (non-)encrypted fields in the database which are marked as confidential. This operation requires a password. If no password is specified with '-s' and the program is run in a terminal, a prompt is given to get the password from the user. If encryption is performed on a file having encrypted fields, the operation will fail unless '--force' is used. These are destructive operations. '--auto' Insert auto-generated fields as appropriate in the records which are missing them. This is a destructive operation. As described above, some operations make use of these additional options: '-s SECRET' '--password=SECRET' Password used to encrypt or decrypt fields. '--force' Force potentially dangerous operations.  File: recutils.info, Node: Invoking recfmt, Next: Invoking csv2rec, Prev: Invoking recfix, Up: Invoking the Utilities 17.7 Invoking recfmt ==================== 'recfmt' formats records using templates. Synopsis: recfmt [OPTION]... [TEMPLATE] This program always works as a filter, getting the data from the standard input and writing the result to standard output. In addition to the common options described earlier (*note Common Options::) the program accepts the following options. '-f' '--filename=PATH' Read the template from the file in PATH instead of the command line.  File: recutils.info, Node: Invoking csv2rec, Next: Invoking rec2csv, Prev: Invoking recfmt, Up: Invoking the Utilities 17.8 Invoking csv2rec ===================== 'csv2rec' reads the given comma-separated-values file (or the data from standard input if no file is specified) and prints out the converted rec data, if possible. Synopsis: csv2rec [OPTION]... [CSV_FILE] In addition to the common options described earlier (*note Common Options::) the program accepts the following options. '-t TYPE' '--type=TYPE' Type of the converted records. If no type is specified then no type is used. '-s' '--strict' Be strict parsing the csv file. '-e' '--omit-empty' Omit empty fields.  File: recutils.info, Node: Invoking rec2csv, Next: Invoking mdb2rec, Prev: Invoking csv2rec, Up: Invoking the Utilities 17.9 Invoking rec2csv ===================== 'rec2csv' reads the given rec files (or the data in the standard input if no file is specified) and prints out the converted comma-separated-values. Synopsis: rec2csv [OPTION]... [REC_FILE]... The rec data can be read from files specified in the command line, or from standard input. The program writes the converted data to standard output. In addition to the common options described earlier (*note Common Options::) the program accepts the following options. '-t TYPE' '--type=TYPE' Type of the records to convert. If no type is specified then the default records (with no name) are converted. '-S' '--sort=FIELDS' Sort the output by the comma-separated list of field names FIELDS. This option has precedence to whatever sorting criteria are specified in the corresponding record descriptor with '%sort'. '-d' '--delim=CHAR' Use CHAR as the delimiter character separating fields in the output. Defaults to ','.  File: recutils.info, Node: Invoking mdb2rec, Prev: Invoking rec2csv, Up: Invoking the Utilities 17.10 Invoking mdb2rec ====================== 'mdb2rec' reads the given mdb file and prints out the converted rec data, if possible. Synopsis: mdb2rec [OPTION]... MDB_FILE [TABLE] All the tables contained in the mdb file are exported unless a table is specified in the command line. In addition to the common options described earlier (*note Common Options::) the program accepts the following options. '-s' '--system-tables' Include system tables in the output. '-l' '--list-tables' Dump a list of the table names contained in the mdb file, one per line. '-e' '--keep-empty-fields' Don't prune empty fields in the rec output.  File: recutils.info, Node: Using ob-rec.el, Next: Regular Expressions, Prev: Invoking the Utilities, Up: Top 18 Using ob-rec.el ****************** ob-rec.el allows you to use Recutils as a language in org-mode source blocks. 18.1 Setup ========== Recutils should install the necessary files where emacs can see them. In your .emacs you may need to add: (require 'ob-rec) You will need to add "rec" to your list of 'org-babel-load-languages' like below: (org-babel-do-load-languages 'org-babel-load-languages '((rec . t))) 18.2 Usage ========== To your org file, add a src code block like: #+BEGIN_SRC rec :data books.rec Location = 'loaned' #+END_SRC This performs the equivalent of the command: $ recsel -e "Location = 'loaned'" books.rec It will produce a result like: #+RESULTS: | Title | Author | Date | Location | |---------------------+-----------------+-----------------+----------| | The Colour of Magic | Terry Pratchett | 4/20/01 11:15pm | loaned | 18.3 Header Arguments ===================== ':data' The recfile you would like to query. Can be a relative path. Spaces in the filename or path need to be escaped with a backslash (for example, file\ name.rec). This is the only required header argument. ':results' If this list contains "scalar", "html", "code" or "verbatim" then the output will look the same as if called from the command line and it will not be put into an org table. ':type' Only returns this type of record. Corresponds to the -t argument. Accepts only one argument. ':fields' Comma-separated list of fields to print. Corresponds to the -p argument. ':sort' Comma-separated list of fields by which to sort records. Corresponds to the -S argument. ':groupby' Comma-separated list of fields by which to group records. If the records grouped together share fields in common, these will be in separate columns with a "_N" appended. Corresponds to the -G argument. ':join' Field on which to join records from one record set to another. Please see blah for more on how joins work. Corresponds to the -j argument. 18.4 Warnings ============= 1. Output may be unpredictable if fields contain newlines, as would be the case for a multi-line field. This appears to be a limitation in org-mode's 'org-table-convert-region' function.  File: recutils.info, Node: Regular Expressions, Next: Date input formats, Prev: Using ob-rec.el, Up: Top 19 Regular Expressions ********************** The character '.' matches any single character except the null character. '+' match one or more occurrences of the previous atom or regexp. '?' match zero or one occurrences of the previous atom or regexp. '\+' matches a '+' '\?' matches a '?'. Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example '[z-a]', are invalid. Within square brackets, '\' is taken literally. Character classes are supported; for example '[[:digit:]]' matches a single decimal digit. GNU extensions are supported: '\w' matches a character within a word '\W' matches a character which is not within a word '\<' matches the beginning of a word '\>' matches the end of a word '\b' matches a word boundary '\B' matches characters which are not a word boundary '\`' matches the beginning of the whole input '\'' matches the end of the whole input Grouping is performed with parentheses '()'. An unmatched ')' matches just itself. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example, '\2' matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis '('. The alternation operator is '|'. The characters '^' and '$' always represent the beginning and end of a string respectively, except within square brackets. Within brackets, an initial '^' inverts the character class being matched. '*', '+' and '?' are special at any point in a regular expression except the following places, where they are not allowed: 1. At the beginning of a regular expression 2. After an open-group, '(' 3. After the alternation operator, '|' Intervals are specified by '{' and '}'. Invalid intervals such as 'a{1z' are not accepted. The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to sub-expressions within groups.  File: recutils.info, Node: Date input formats, Next: GNU Free Documentation License, Prev: Regular Expressions, Up: Top 20 Date input formats ********************* First, a quote: Our units of temporal measurement, from seconds on up to months, are so complicated, asymmetrical and disjunctive so as to make coherent mental reckoning in time all but impossible. Indeed, had some tyrannical god contrived to enslave our minds to time, to make it all but impossible for us to escape subjection to sodden routines and unpleasant surprises, he could hardly have done better than handing down our present system. It is like a set of trapezoidal building blocks, with no vertical or horizontal surfaces, like a language in which the simplest thought demands ornate constructions, useless particles and lengthy circumlocutions. Unlike the more successful patterns of language and science, which enable us to face experience boldly or at least level-headedly, our system of temporal calculation silently and persistently encourages our terror of time. ... It is as though architects had to measure length in feet, width in meters and height in ells; as though basic instruction manuals demanded a knowledge of five different languages. It is no wonder then that we often look into our own immediate past or future, last Tuesday or a week from Sunday, with feelings of helpless confusion. ... --Robert Grudin, 'Time and the Art of Living'. This section describes the textual date representations that GNU programs accept. These are the strings you, as a user, can supply as arguments to the various programs. The C interface (via the 'parse_datetime' function) is not described here. * Menu: * General date syntax:: Common rules * Calendar date items:: 21 Jul 2020 * Time of day items:: 9:20pm * Time zone items:: UTC, -0700, +0900, ... * Combined date and time of day items:: 2020-07-21T20:02:00,000000-0400 * Day of week items:: Monday and others * Relative items in date strings:: next tuesday, 2 years ago * Pure numbers in date strings:: 20200721, 1440 * Seconds since the Epoch:: @1595289600 * Specifying time zone rules:: TZ="America/New_York", TZ="UTC0" * Authors of parse_datetime:: Bellovin, Eggert, Salz, Berets, et al.  File: recutils.info, Node: General date syntax, Next: Calendar date items, Up: Date input formats 20.1 General date syntax ======================== A "date" is a string, possibly empty, containing many items separated by whitespace. The whitespace may be omitted when no ambiguity arises. The empty string means the beginning of today (i.e., midnight). Order of the items is immaterial. A date string may contain many flavors of items: * calendar date items * time of day items * time zone items * combined date and time of day items * day of the week items * relative items * pure numbers. We describe each of these item types in turn, below. A few ordinal numbers may be written out in words in some contexts. This is most useful for specifying day of the week items or relative items (see below). Among the most commonly used ordinal numbers, the word 'last' stands for -1, 'this' stands for 0, and 'first' and 'next' both stand for 1. Because the word 'second' stands for the unit of time there is no way to write the ordinal number 2, but for convenience 'third' stands for 3, 'fourth' for 4, 'fifth' for 5, 'sixth' for 6, 'seventh' for 7, 'eighth' for 8, 'ninth' for 9, 'tenth' for 10, 'eleventh' for 11 and 'twelfth' for 12. When a month is written this way, it is still considered to be written numerically, instead of being "spelled in full"; this changes the allowed strings. In the current implementation, only English is supported for words and abbreviations like 'AM', 'DST', 'EST', 'first', 'January', 'Sunday', 'tomorrow', and 'year'. The output of the 'date' command is not always acceptable as a date string, not only because of the language problem, but also because there is no standard meaning for time zone items like 'IST'. When using 'date' to generate a date string intended to be parsed later, specify a date format that is independent of language and that does not use time zone items other than 'UTC' and 'Z'. Here are some ways to do this: $ LC_ALL=C TZ=UTC0 date Tue Jul 21 23:00:37 UTC 2020 $ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ' 2020-07-21 23:00:37Z $ date --rfc-3339=ns # --rfc-3339 is a GNU extension. 2020-07-21 19:00:37.692722128-04:00 $ date --rfc-2822 # a GNU extension Tue, 21 Jul 2020 19:00:37 -0400 $ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension. 2020-07-21 19:00:37 -0400 $ date +'@%s.%N' # %s and %N are GNU extensions. @1595372437.692722128 Alphabetic case is completely ignored in dates. Comments may be introduced between round parentheses, as long as included parentheses are properly nested. Hyphens not followed by a digit are currently ignored. Leading zeros on numbers are ignored. Invalid dates like '2019-02-29' or times like '24:00' are rejected. In the typical case of a host that does not support leap seconds, a time like '23:59:60' is rejected even if it corresponds to a valid leap second.  File: recutils.info, Node: Calendar date items, Next: Time of day items, Prev: General date syntax, Up: Date input formats 20.2 Calendar date items ======================== A "calendar date item" specifies a day of the year. It is specified differently, depending on whether the month is specified numerically or literally. All these strings specify the same calendar date: 2020-07-20 # ISO 8601. 20-7-20 # Assume 19xx for 69 through 99, # 20xx for 00 through 68 (not recommended). 7/20/2020 # Common U.S. writing. 20 July 2020 20 Jul 2020 # Three-letter abbreviations always allowed. Jul 20, 2020 20-jul-2020 20jul2020 The year can also be omitted. In this case, the last specified year is used, or the current year if none. For example: 7/20 jul 20 Here are the rules. For numeric months, the ISO 8601 format 'YEAR-MONTH-DAY' is allowed, where YEAR is any positive number, MONTH is a number between 01 and 12, and DAY is a number between 01 and 31. A leading zero must be present if a number is less than ten. If YEAR is 68 or smaller, then 2000 is added to it; otherwise, if YEAR is less than 100, then 1900 is added to it. The construct 'MONTH/DAY/YEAR', popular in the United States, is accepted. Also 'MONTH/DAY', omitting the year. Literal months may be spelled out in full: 'January', 'February', 'March', 'April', 'May', 'June', 'July', 'August', 'September', 'October', 'November' or 'December'. Literal months may be abbreviated to their first three letters, possibly followed by an abbreviating dot. It is also permitted to write 'Sept' instead of 'September'. When months are written literally, the calendar date may be given as any of the following: DAY MONTH YEAR DAY MONTH MONTH DAY YEAR DAY-MONTH-YEAR Or, omitting the year: MONTH DAY  File: recutils.info, Node: Time of day items, Next: Time zone items, Prev: Calendar date items, Up: Date input formats 20.3 Time of day items ====================== A "time of day item" in date strings specifies the time on a given day. Here are some examples, all of which represent the same time: 20:02:00.000000 20:02 8:02pm 20:02-0500 # In EST (U.S. Eastern Standard Time). More generally, the time of day may be given as 'HOUR:MINUTE:SECOND', where HOUR is a number between 0 and 23, MINUTE is a number between 0 and 59, and SECOND is a number between 0 and 59 possibly followed by '.' or ',' and a fraction containing one or more digits. Alternatively, ':SECOND' can be omitted, in which case it is taken to be zero. On the rare hosts that support leap seconds, SECOND may be 60. If the time is followed by 'am' or 'pm' (or 'a.m.' or 'p.m.'), HOUR is restricted to run from 1 to 12, and ':MINUTE' may be omitted (taken to be zero). 'am' indicates the first half of the day, 'pm' indicates the second half of the day. In this notation, 12 is the predecessor of 1: midnight is '12am' while noon is '12pm'. (This is the zero-oriented interpretation of '12am' and '12pm', as opposed to the old tradition derived from Latin which uses '12m' for noon and '12pm' for midnight.) The time may alternatively be followed by a time zone correction, expressed as 'SHHMM', where S is '+' or '-', HH is a number of zone hours and MM is a number of zone minutes. The zone minutes term, MM, may be omitted, in which case the one- or two-digit correction is interpreted as a number of hours. You can also separate HH from MM with a colon. When a time zone correction is given this way, it forces interpretation of the time relative to Coordinated Universal Time (UTC), overriding any previous specification for the time zone or the local time zone. For example, '+0530' and '+05:30' both stand for the time zone 5.5 hours ahead of UTC (e.g., India). This is the best way to specify a time zone correction by fractional parts of an hour. The maximum zone correction is 24 hours. Either 'am'/'pm' or a time zone correction may be specified, but not both.  File: recutils.info, Node: Time zone items, Next: Combined date and time of day items, Prev: Time of day items, Up: Date input formats 20.4 Time zone items ==================== A "time zone item" specifies an international time zone, indicated by a small set of letters, e.g., 'UTC' or 'Z' for Coordinated Universal Time. Any included periods are ignored. By following a non-daylight-saving time zone by the string 'DST' in a separate word (that is, separated by some white space), the corresponding daylight saving time zone may be specified. Alternatively, a non-daylight-saving time zone can be followed by a time zone correction, to add the two values. This is normally done only for 'UTC'; for example, 'UTC+05:30' is equivalent to '+05:30'. Time zone items other than 'UTC' and 'Z' are obsolescent and are not recommended, because they are ambiguous; for example, 'EST' has a different meaning in Australia than in the United States, and 'A' has different meaning as a military time zone than as an obsolescent RFC 822 time zone. Instead, it's better to use unambiguous numeric time zone corrections like '-0500', as described in the previous section. If neither a time zone item nor a time zone correction is supplied, timestamps are interpreted using the rules of the default time zone (*note Specifying time zone rules::).  File: recutils.info, Node: Combined date and time of day items, Next: Day of week items, Prev: Time zone items, Up: Date input formats 20.5 Combined date and time of day items ======================================== The ISO 8601 date and time of day extended format consists of an ISO 8601 date, a 'T' character separator, and an ISO 8601 time of day. This format is also recognized if the 'T' is replaced by a space. In this format, the time of day should use 24-hour notation. Fractional seconds are allowed, with either comma or period preceding the fraction. ISO 8601 fractional minutes and hours are not supported. Typically, hosts support nanosecond timestamp resolution; excess precision is silently discarded. Here are some examples: 2012-09-24T20:02:00.052-05:00 2012-12-31T23:59:59,999999999+11:00 1970-01-01 00:00Z  File: recutils.info, Node: Day of week items, Next: Relative items in date strings, Prev: Combined date and time of day items, Up: Date input formats 20.6 Day of week items ====================== The explicit mention of a day of the week will forward the date (only if necessary) to reach that day of the week in the future. Days of the week may be spelled out in full: 'Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday' or 'Saturday'. Days may be abbreviated to their first three letters, optionally followed by a period. The special abbreviations 'Tues' for 'Tuesday', 'Wednes' for 'Wednesday' and 'Thur' or 'Thurs' for 'Thursday' are also allowed. A number may precede a day of the week item to move forward supplementary weeks. It is best used in expression like 'third monday'. In this context, 'last DAY' or 'next DAY' is also acceptable; they move one week before or after the day that DAY by itself would represent. A comma following a day of the week item is ignored.  File: recutils.info, Node: Relative items in date strings, Next: Pure numbers in date strings, Prev: Day of week items, Up: Date input formats 20.7 Relative items in date strings =================================== "Relative items" adjust a date (or the current date if none) forward or backward. The effects of relative items accumulate. Here are some examples: 1 year 1 year ago 3 years 2 days The unit of time displacement may be selected by the string 'year' or 'month' for moving by whole years or months. These are fuzzy units, as years and months are not all of equal duration. More precise units are 'fortnight' which is worth 14 days, 'week' worth 7 days, 'day' worth 24 hours, 'hour' worth 60 minutes, 'minute' or 'min' worth 60 seconds, and 'second' or 'sec' worth one second. An 's' suffix on these units is accepted and ignored. The unit of time may be preceded by a multiplier, given as an optionally signed number. Unsigned numbers are taken as positively signed. No number at all implies 1 for a multiplier. Following a relative item by the string 'ago' is equivalent to preceding the unit by a multiplier with value -1. The string 'tomorrow' is worth one day in the future (equivalent to 'day'), the string 'yesterday' is worth one day in the past (equivalent to 'day ago'). The strings 'now' or 'today' are relative items corresponding to zero-valued time displacement, these strings come from the fact a zero-valued time displacement represents the current time when not otherwise changed by previous items. They may be used to stress other items, like in '12:00 today'. The string 'this' also has the meaning of a zero-valued time displacement, but is preferred in date strings like 'this thursday'. When a relative item causes the resulting date to cross a boundary where the clocks were adjusted, typically for daylight saving time, the resulting date and time are adjusted accordingly. The fuzz in units can cause problems with relative items. For example, '2020-07-31 -1 month' might evaluate to 2020-07-01, because 2020-06-31 is an invalid date. To determine the previous month more reliably, you can ask for the month before the 15th of the current month. For example: $ date -R Thu, 31 Jul 2020 13:02:39 -0400 $ date --date='-1 month' +'Last month was %B?' Last month was July? $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!' Last month was June! Also, take care when manipulating dates around clock changes such as daylight saving leaps. In a few cases these have added or subtracted as much as 24 hours from the clock, so it is often wise to adopt universal time by setting the 'TZ' environment variable to 'UTC0' before embarking on calendrical calculations.  File: recutils.info, Node: Pure numbers in date strings, Next: Seconds since the Epoch, Prev: Relative items in date strings, Up: Date input formats 20.8 Pure numbers in date strings ================================= The precise interpretation of a pure decimal number depends on the context in the date string. If the decimal number is of the form YYYYMMDD and no other calendar date item (*note Calendar date items::) appears before it in the date string, then YYYY is read as the year, MM as the month number and DD as the day of the month, for the specified calendar date. If the decimal number is of the form HHMM and no other time of day item appears before it in the date string, then HH is read as the hour of the day and MM as the minute of the hour, for the specified time of day. MM can also be omitted. If both a calendar date and a time of day appear to the left of a number in the date string, but no relative item, then the number overrides the year.  File: recutils.info, Node: Seconds since the Epoch, Next: Specifying time zone rules, Prev: Pure numbers in date strings, Up: Date input formats 20.9 Seconds since the Epoch ============================ If you precede a number with '@', it represents an internal timestamp as a count of seconds. The number can contain an internal decimal point (either '.' or ','); any excess precision not supported by the internal representation is truncated toward minus infinity. Such a number cannot be combined with any other date item, as it specifies a complete timestamp. Internally, computer times are represented as a count of seconds since an Epoch--a well-defined point of time. On GNU and POSIX systems, the Epoch is 1970-01-01 00:00:00 UTC, so '@0' represents this time, '@1' represents 1970-01-01 00:00:01 UTC, and so forth. GNU and most other POSIX-compliant systems support such times as an extension to POSIX, using negative counts, so that '@-1' represents 1969-12-31 23:59:59 UTC. Most modern systems count seconds with 64-bit two's-complement integers of seconds with nanosecond subcounts, which is a range that includes the known lifetime of the universe with nanosecond resolution. Some obsolescent systems count seconds with 32-bit two's-complement integers and can represent times from 1901-12-13 20:45:52 through 2038-01-19 03:14:07 UTC. A few systems sport other time ranges. On most hosts, these counts ignore the presence of leap seconds. For example, on most hosts '@1483228799' represents 2016-12-31 23:59:59 UTC, '@1483228800' represents 2017-01-01 00:00:00 UTC, and there is no way to represent the intervening leap second 2016-12-31 23:59:60 UTC.  File: recutils.info, Node: Specifying time zone rules, Next: Authors of parse_datetime, Prev: Seconds since the Epoch, Up: Date input formats 20.10 Specifying time zone rules ================================ Normally, dates are interpreted using the rules of the current time zone, which in turn are specified by the 'TZ' environment variable, or by a system default if 'TZ' is not set. To specify a different set of default time zone rules that apply just to one date, start the date with a string of the form 'TZ="RULE"'. The two quote characters ('"') must be present in the date, and any quotes or backslashes within RULE must be escaped by a backslash. For example, with the GNU 'date' command you can answer the question "What time is it in New York when a Paris clock shows 6:30am on October 31, 2019?" by using a date beginning with 'TZ="Europe/Paris"' as shown in the following shell transcript: $ export TZ="America/New_York" $ date --date='TZ="Europe/Paris" 2019-10-31 06:30' Sun Oct 31 01:30:00 EDT 2019 In this example, the '--date' operand begins with its own 'TZ' setting, so the rest of that operand is processed according to 'Europe/Paris' rules, treating the string '2019-10-31 06:30' as if it were in Paris. However, since the output of the 'date' command is processed according to the overall time zone rules, it uses New York time. (Paris was normally six hours ahead of New York in 2019, but this example refers to a brief Halloween period when the gap was five hours.) A 'TZ' value is a rule that typically names a location in the 'tz' database (https://www.iana.org/time-zones). A recent catalog of location names appears in the TWiki Date and Time Gateway (https://twiki.org/cgi-bin/xtra/tzdatepick.html). A few non-GNU hosts require a colon before a location name in a 'TZ' setting, e.g., 'TZ=":America/New_York"'. The 'tz' database includes a wide variety of locations ranging from 'Arctic/Longyearbyen' to 'Antarctica/South_Pole', but if you are at sea and have your own private time zone, or if you are using a non-GNU host that does not support the 'tz' database, you may need to use a POSIX rule instead. Simple POSIX rules like 'UTC0' specify a time zone without daylight saving time; other rules can specify simple daylight saving regimes. *Note Specifying the Time Zone with 'TZ': (libc)TZ Variable.  File: recutils.info, Node: Authors of parse_datetime, Prev: Specifying time zone rules, Up: Date input formats 20.11 Authors of 'parse_datetime' ================================= 'parse_datetime' started life as 'getdate', as originally implemented by Steven M. Bellovin () while at the University of North Carolina at Chapel Hill. The code was later tweaked by a couple of people on Usenet, then completely overhauled by Rich $alz () and Jim Berets () in August, 1990. Various revisions for the GNU system were made by David MacKenzie, Jim Meyering, Paul Eggert and others, including renaming it to 'get_date' to avoid a conflict with the alternative Posix function 'getdate', and a later rename to 'parse_datetime'. The Posix function 'getdate' can parse more locale-specific dates using 'strptime', but relies on an environment variable and external file, and lacks the thread-safety of 'parse_datetime'. This chapter was originally produced by Franc,ois Pinard () from the 'parse_datetime.y' source code, and then edited by K. Berry ().  File: recutils.info, Node: GNU Free Documentation License, Next: Concept Index, Prev: Date input formats, Up: Top Appendix A GNU Free Documentation License ***************************************** Version 1.3, 3 November 2008 Copyright (C) 2000, 2001, 2002, 2007, 2008, 2020, 2022 Free Software Foundation, Inc. Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. 0. PREAMBLE The purpose of this License is to make a manual, textbook, or other functional and useful document "free" in the sense of freedom: to assure everyone the effective freedom to copy and redistribute it, with or without modifying it, either commercially or noncommercially. Secondarily, this License preserves for the author and publisher a way to get credit for their work, while not being considered responsible for modifications made by others. This License is a kind of "copyleft", which means that derivative works of the document must themselves be free in the same sense. It complements the GNU General Public License, which is a copyleft license designed for free software. We have designed this License in order to use it for manuals for free software, because free software needs free documentation: a free program should come with manuals providing the same freedoms that the software does. But this License is not limited to software manuals; it can be used for any textual work, regardless of subject matter or whether it is published as a printed book. We recommend this License principally for works whose purpose is instruction or reference. 1. APPLICABILITY AND DEFINITIONS This License applies to any manual or other work, in any medium, that contains a notice placed by the copyright holder saying it can be distributed under the terms of this License. Such a notice grants a world-wide, royalty-free license, unlimited in duration, to use that work under the conditions stated herein. The "Document", below, refers to any such manual or work. Any member of the public is a licensee, and is addressed as "you". You accept the license if you copy, modify or distribute the work in a way requiring permission under copyright law. A "Modified Version" of the Document means any work containing the Document or a portion of it, either copied verbatim, or with modifications and/or translated into another language. A "Secondary Section" is a named appendix or a front-matter section of the Document that deals exclusively with the relationship of the publishers or authors of the Document to the Document's overall subject (or to related matters) and contains nothing that could fall directly within that overall subject. (Thus, if the Document is in part a textbook of mathematics, a Secondary Section may not explain any mathematics.) The relationship could be a matter of historical connection with the subject or with related matters, or of legal, commercial, philosophical, ethical or political position regarding them. The "Invariant Sections" are certain Secondary Sections whose titles are designated, as being those of Invariant Sections, in the notice that says that the Document is released under this License. If a section does not fit the above definition of Secondary then it is not allowed to be designated as Invariant. The Document may contain zero Invariant Sections. If the Document does not identify any Invariant Sections then there are none. The "Cover Texts" are certain short passages of text that are listed, as Front-Cover Texts or Back-Cover Texts, in the notice that says that the Document is released under this License. A Front-Cover Text may be at most 5 words, and a Back-Cover Text may be at most 25 words. A "Transparent" copy of the Document means a machine-readable copy, represented in a format whose specification is available to the general public, that is suitable for revising the document straightforwardly with generic text editors or (for images composed of pixels) generic paint programs or (for drawings) some widely available drawing editor, and that is suitable for input to text formatters or for automatic translation to a variety of formats suitable for input to text formatters. A copy made in an otherwise Transparent file format whose markup, or absence of markup, has been arranged to thwart or discourage subsequent modification by readers is not Transparent. An image format is not Transparent if used for any substantial amount of text. A copy that is not "Transparent" is called "Opaque". Examples of suitable formats for Transparent copies include plain ASCII without markup, Texinfo input format, LaTeX input format, SGML or XML using a publicly available DTD, and standard-conforming simple HTML, PostScript or PDF designed for human modification. Examples of transparent image formats include PNG, XCF and JPG. Opaque formats include proprietary formats that can be read and edited only by proprietary word processors, SGML or XML for which the DTD and/or processing tools are not generally available, and the machine-generated HTML, PostScript or PDF produced by some word processors for output purposes only. The "Title Page" means, for a printed book, the title page itself, plus such following pages as are needed to hold, legibly, the material this License requires to appear in the title page. For works in formats which do not have any title page as such, "Title Page" means the text near the most prominent appearance of the work's title, preceding the beginning of the body of the text. The "publisher" means any person or entity that distributes copies of the Document to the public. A section "Entitled XYZ" means a named subunit of the Document whose title either is precisely XYZ or contains XYZ in parentheses following text that translates XYZ in another language. (Here XYZ stands for a specific section name mentioned below, such as "Acknowledgements", "Dedications", "Endorsements", or "History".) To "Preserve the Title" of such a section when you modify the Document means that it remains a section "Entitled XYZ" according to this definition. The Document may include Warranty Disclaimers next to the notice which states that this License applies to the Document. These Warranty Disclaimers are considered to be included by reference in this License, but only as regards disclaiming warranties: any other implication that these Warranty Disclaimers may have is void and has no effect on the meaning of this License. 2. VERBATIM COPYING You may copy and distribute the Document in any medium, either commercially or noncommercially, provided that this License, the copyright notices, and the license notice saying this License applies to the Document are reproduced in all copies, and that you add no other conditions whatsoever to those of this License. You may not use technical measures to obstruct or control the reading or further copying of the copies you make or distribute. However, you may accept compensation in exchange for copies. If you distribute a large enough number of copies you must also follow the conditions in section 3. You may also lend copies, under the same conditions stated above, and you may publicly display copies. 3. COPYING IN QUANTITY If you publish printed copies (or copies in media that commonly have printed covers) of the Document, numbering more than 100, and the Document's license notice requires Cover Texts, you must enclose the copies in covers that carry, clearly and legibly, all these Cover Texts: Front-Cover Texts on the front cover, and Back-Cover Texts on the back cover. Both covers must also clearly and legibly identify you as the publisher of these copies. The front cover must present the full title with all words of the title equally prominent and visible. You may add other material on the covers in addition. Copying with changes limited to the covers, as long as they preserve the title of the Document and satisfy these conditions, can be treated as verbatim copying in other respects. If the required texts for either cover are too voluminous to fit legibly, you should put the first ones listed (as many as fit reasonably) on the actual cover, and continue the rest onto adjacent pages. If you publish or distribute Opaque copies of the Document numbering more than 100, you must either include a machine-readable Transparent copy along with each Opaque copy, or state in or with each Opaque copy a computer-network location from which the general network-using public has access to download using public-standard network protocols a complete Transparent copy of the Document, free of added material. If you use the latter option, you must take reasonably prudent steps, when you begin distribution of Opaque copies in quantity, to ensure that this Transparent copy will remain thus accessible at the stated location until at least one year after the last time you distribute an Opaque copy (directly or through your agents or retailers) of that edition to the public. It is requested, but not required, that you contact the authors of the Document well before redistributing any large number of copies, to give them a chance to provide you with an updated version of the Document. 4. MODIFICATIONS You may copy and distribute a Modified Version of the Document under the conditions of sections 2 and 3 above, provided that you release the Modified Version under precisely this License, with the Modified Version filling the role of the Document, thus licensing distribution and modification of the Modified Version to whoever possesses a copy of it. In addition, you must do these things in the Modified Version: A. Use in the Title Page (and on the covers, if any) a title distinct from that of the Document, and from those of previous versions (which should, if there were any, be listed in the History section of the Document). You may use the same title as a previous version if the original publisher of that version gives permission. B. List on the Title Page, as authors, one or more persons or entities responsible for authorship of the modifications in the Modified Version, together with at least five of the principal authors of the Document (all of its principal authors, if it has fewer than five), unless they release you from this requirement. C. State on the Title page the name of the publisher of the Modified Version, as the publisher. D. Preserve all the copyright notices of the Document. E. Add an appropriate copyright notice for your modifications adjacent to the other copyright notices. F. Include, immediately after the copyright notices, a license notice giving the public permission to use the Modified Version under the terms of this License, in the form shown in the Addendum below. G. Preserve in that license notice the full lists of Invariant Sections and required Cover Texts given in the Document's license notice. H. Include an unaltered copy of this License. I. Preserve the section Entitled "History", Preserve its Title, and add to it an item stating at least the title, year, new authors, and publisher of the Modified Version as given on the Title Page. If there is no section Entitled "History" in the Document, create one stating the title, year, authors, and publisher of the Document as given on its Title Page, then add an item describing the Modified Version as stated in the previous sentence. J. Preserve the network location, if any, given in the Document for public access to a Transparent copy of the Document, and likewise the network locations given in the Document for previous versions it was based on. These may be placed in the "History" section. You may omit a network location for a work that was published at least four years before the Document itself, or if the original publisher of the version it refers to gives permission. K. For any section Entitled "Acknowledgements" or "Dedications", Preserve the Title of the section, and preserve in the section all the substance and tone of each of the contributor acknowledgements and/or dedications given therein. L. Preserve all the Invariant Sections of the Document, unaltered in their text and in their titles. Section numbers or the equivalent are not considered part of the section titles. M. Delete any section Entitled "Endorsements". Such a section may not be included in the Modified Version. N. Do not retitle any existing section to be Entitled "Endorsements" or to conflict in title with any Invariant Section. O. Preserve any Warranty Disclaimers. If the Modified Version includes new front-matter sections or appendices that qualify as Secondary Sections and contain no material copied from the Document, you may at your option designate some or all of these sections as invariant. To do this, add their titles to the list of Invariant Sections in the Modified Version's license notice. These titles must be distinct from any other section titles. You may add a section Entitled "Endorsements", provided it contains nothing but endorsements of your Modified Version by various parties--for example, statements of peer review or that the text has been approved by an organization as the authoritative definition of a standard. You may add a passage of up to five words as a Front-Cover Text, and a passage of up to 25 words as a Back-Cover Text, to the end of the list of Cover Texts in the Modified Version. Only one passage of Front-Cover Text and one of Back-Cover Text may be added by (or through arrangements made by) any one entity. If the Document already includes a cover text for the same cover, previously added by you or by arrangement made by the same entity you are acting on behalf of, you may not add another; but you may replace the old one, on explicit permission from the previous publisher that added the old one. The author(s) and publisher(s) of the Document do not by this License give permission to use their names for publicity for or to assert or imply endorsement of any Modified Version. 5. COMBINING DOCUMENTS You may combine the Document with other documents released under this License, under the terms defined in section 4 above for modified versions, provided that you include in the combination all of the Invariant Sections of all of the original documents, unmodified, and list them all as Invariant Sections of your combined work in its license notice, and that you preserve all their Warranty Disclaimers. The combined work need only contain one copy of this License, and multiple identical Invariant Sections may be replaced with a single copy. If there are multiple Invariant Sections with the same name but different contents, make the title of each such section unique by adding at the end of it, in parentheses, the name of the original author or publisher of that section if known, or else a unique number. Make the same adjustment to the section titles in the list of Invariant Sections in the license notice of the combined work. In the combination, you must combine any sections Entitled "History" in the various original documents, forming one section Entitled "History"; likewise combine any sections Entitled "Acknowledgements", and any sections Entitled "Dedications". You must delete all sections Entitled "Endorsements." 6. COLLECTIONS OF DOCUMENTS You may make a collection consisting of the Document and other documents released under this License, and replace the individual copies of this License in the various documents with a single copy that is included in the collection, provided that you follow the rules of this License for verbatim copying of each of the documents in all other respects. You may extract a single document from such a collection, and distribute it individually under this License, provided you insert a copy of this License into the extracted document, and follow this License in all other respects regarding verbatim copying of that document. 7. AGGREGATION WITH INDEPENDENT WORKS A compilation of the Document or its derivatives with other separate and independent documents or works, in or on a volume of a storage or distribution medium, is called an "aggregate" if the copyright resulting from the compilation is not used to limit the legal rights of the compilation's users beyond what the individual works permit. When the Document is included in an aggregate, this License does not apply to the other works in the aggregate which are not themselves derivative works of the Document. If the Cover Text requirement of section 3 is applicable to these copies of the Document, then if the Document is less than one half of the entire aggregate, the Document's Cover Texts may be placed on covers that bracket the Document within the aggregate, or the electronic equivalent of covers if the Document is in electronic form. Otherwise they must appear on printed covers that bracket the whole aggregate. 8. TRANSLATION Translation is considered a kind of modification, so you may distribute translations of the Document under the terms of section 4. Replacing Invariant Sections with translations requires special permission from their copyright holders, but you may include translations of some or all Invariant Sections in addition to the original versions of these Invariant Sections. You may include a translation of this License, and all the license notices in the Document, and any Warranty Disclaimers, provided that you also include the original English version of this License and the original versions of those notices and disclaimers. In case of a disagreement between the translation and the original version of this License or a notice or disclaimer, the original version will prevail. If a section in the Document is Entitled "Acknowledgements", "Dedications", or "History", the requirement (section 4) to Preserve its Title (section 1) will typically require changing the actual title. 9. TERMINATION You may not copy, modify, sublicense, or distribute the Document except as expressly provided under this License. Any attempt otherwise to copy, modify, sublicense, or distribute it is void, and will automatically terminate your rights under this License. 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, receipt of a copy of some or all of the same material does not give you any rights to use it. 10. FUTURE REVISIONS OF THIS LICENSE The Free Software Foundation may publish new, revised versions of the GNU Free Documentation 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. See . Each version of the License is given a distinguishing version number. If the Document specifies that a particular numbered version of this License "or any later version" applies to it, you have the option of following the terms and conditions either of that specified version or of any later version that has been published (not as a draft) by the Free Software Foundation. If the Document does not specify a version number of this License, you may choose any version ever published (not as a draft) by the Free Software Foundation. If the Document specifies that a proxy can decide which future versions of this License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Document. 11. RELICENSING "Massive Multiauthor Collaboration Site" (or "MMC Site") means any World Wide Web server that publishes copyrightable works and also provides prominent facilities for anybody to edit those works. A public wiki that anybody can edit is an example of such a server. A "Massive Multiauthor Collaboration" (or "MMC") contained in the site means any set of copyrightable works thus published on the MMC site. "CC-BY-SA" means the Creative Commons Attribution-Share Alike 3.0 license published by Creative Commons Corporation, a not-for-profit corporation with a principal place of business in San Francisco, California, as well as future copyleft versions of that license published by that same organization. "Incorporate" means to publish or republish a Document, in whole or in part, as part of another Document. An MMC is "eligible for relicensing" if it is licensed under this License, and if all works that were first published under this License somewhere other than this MMC, and subsequently incorporated in whole or in part into the MMC, (1) had no cover texts or invariant sections, and (2) were thus incorporated prior to November 1, 2008. The operator of an MMC Site may republish an MMC contained in the site under CC-BY-SA on the same site at any time before August 1, 2009, provided the MMC is eligible for relicensing. ADDENDUM: How to use this License for your documents ==================================================== To use this License in a document you have written, include a copy of the License in the document and put the following copyright and license notices just after the title page: Copyright (C) YEAR YOUR NAME. Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. If you have Invariant Sections, Front-Cover Texts and Back-Cover Texts, replace the "with...Texts." line with this: with the Invariant Sections being LIST THEIR TITLES, with the Front-Cover Texts being LIST, and with the Back-Cover Texts being LIST. If you have Invariant Sections without Cover Texts, or some other combination of the three, merge those two alternatives to suit the situation. If your document contains nontrivial examples of program code, we recommend releasing these examples in parallel under your choice of free software license, such as the GNU General Public License, to permit their use in free software.  File: recutils.info, Node: Concept Index, Prev: GNU Free Documentation License, Up: Top Concept Index ************* [index] * Menu: * %allowed: Allowed Fields. (line 6) * %auto: Auto-Generated Fields. (line 6) * %confidential: Confidential Fields. (line 6) * %constraint: Arbitrary Constraints. (line 6) * %doc: Documenting Records. (line 6) * %key: Keys and Unique Fields. (line 6) * %key <1>: Foreign Keys. (line 65) * %key <2>: Auto-Generated Fields. (line 24) * %mandatory: Record Sets Properties. (line 13) * %mandatory <1>: Mandatory Fields. (line 6) * %prohibit: Prohibited Fields. (line 6) * %rec: Record Sets. (line 9) * %rec <1>: Remote Descriptors. (line 6) * %size: Size Constraints. (line 6) * %sort: Sorted Output. (line 6) * %type: Types and Fields. (line 6) * %typedef: Types and Fields. (line 6) * %unique: Keys and Unique Fields. (line 6) * abbreviations for months: Calendar date items. (line 36) * adding fields: Adding Fields. (line 6) * aggregate function: Aggregate Functions. (line 6) * aliasing, field name aliasing: Field Expressions. (line 52) * allowed fields: Allowed Fields. (line 6) * anonymous types: Types and Fields. (line 20) * arithmetic operators: SEX Operators. (line 13) * authors of parse_datetime: Authors of parse_datetime. (line 6) * automatically generated values: Auto-Generated Fields. (line 6) * bash: Bash Builtins. (line 6) * beginning of time, for POSIX: Seconds since the Epoch. (line 13) * Bellovin, Steven M.: Authors of parse_datetime. (line 6) * Berets, Jim: Authors of parse_datetime. (line 6) * Berry, K.: Authors of parse_datetime. (line 19) * books: A Little Example. (line 6) * boolean operators: SEX Operators. (line 23) * boolean types: Enumerated Field Types. (line 30) * calendar date item: Calendar date items. (line 6) * case, ignored in dates: General date syntax. (line 60) * case, in field names: Fields. (line 22) * case, in selection expressions: Invoking recsel. (line 28) * case, in selection expressions <1>: Invoking recins. (line 77) * checking recfiles: Invoking recfix. (line 6) * combined date and time of day item: Combined date and time of day items. (line 6) * comma separated values: CSV Files. (line 6) * comma separated values <1>: Invoking csv2rec. (line 6) * comma separated values <2>: Invoking rec2csv. (line 6) * comments: Comments. (line 6) * comments, in dates: General date syntax. (line 60) * comments, in enumerated types: Enumerated Field Types. (line 21) * comparison: SEX Operators. (line 36) * compulsory fields: Mandatory Fields. (line 6) * conditional operator: SEX Operators. (line 76) * confidential data: Confidential Fields. (line 6) * constraints: Arbitrary Constraints. (line 34) * counters: Counters. (line 6) * counting occurrences of a field: SEX Operators. (line 56) * csv: CSV Files. (line 6) * csv <1>: Invoking csv2rec. (line 6) * csv <2>: Invoking rec2csv. (line 6) * csv2rec: Invoking csv2rec. (line 6) * date and time of day format, ISO 8601: Combined date and time of day items. (line 6) * date comparison: Selecting by predicate. (line 62) * date comparison <1>: Selecting by predicate. (line 86) * date comparison <2>: SEX Operators. (line 48) * date format, ISO 8601: Calendar date items. (line 28) * date input formats: Date input formats. (line 6) * date, fields containing dates: Date and Time Types. (line 6) * day of week: Enumerated Field Types. (line 17) * day of week item: Day of week items. (line 6) * decimal separator: Scalar Field Types. (line 54) * default record types: Record Sets. (line 63) * deleting fields: Deleting Fields. (line 6) * deleting records: Deleting Records. (line 6) * deleting records <1>: Invoking recdel. (line 6) * description of record sets: Documenting Records. (line 6) * descriptor: Record Descriptors. (line 6) * descriptor, external descriptor: Remote Descriptors. (line 42) * displacement of dates: Relative items in date strings. (line 6) * documentation fields: Documenting Records. (line 6) * duplication, avoiding: Foreign Keys. (line 7) * editing fields: Invoking recset. (line 6) * Eggert, Paul: Authors of parse_datetime. (line 6) * email: Other Field Types. (line 6) * encrypted fields: Confidential Fields. (line 18) * encryption: Encryption. (line 6) * enumerated types: Enumerated Field Types. (line 6) * Epoch, for POSIX: Seconds since the Epoch. (line 13) * evaluation, of selection expressions: SEX Evaluation. (line 6) * external descriptor: Remote Descriptors. (line 42) * FEX: Field Expressions. (line 6) * field: Fields. (line 6) * field expressions: Field Expressions. (line 6) * field name: Fields. (line 16) * field operators: SEX Operators. (line 56) * field size: String Field Types. (line 19) * field types,: Types and Fields. (line 6) * field values: Fields. (line 34) * field values, in selection expressions: SEX Operands. (line 51) * field, allowed fields: Allowed Fields. (line 6) * field, compulsory fields: Mandatory Fields. (line 13) * field, forbidden fields: Prohibited Fields. (line 6) * field, mandatory fields: Mandatory Fields. (line 13) * field, special fields: Record Sets Properties. (line 6) * floating point numbers: Scalar Field Types. (line 52) * foreign key: Other Field Types. (line 27) * foreign key <1>: Foreign Keys. (line 67) * formatted output: Invoking recfmt. (line 6) * fractions: Scalar Field Types. (line 52) * general date syntax: General date syntax. (line 6) * grouping: Grouping Records. (line 6) * grouping, within regular expressions: Regular Expressions. (line 42) * hexadecimal: Scalar Field Types. (line 13) * ID numbers: Auto-Generated Fields. (line 24) * implies, logical implication: Arbitrary Constraints. (line 34) * inserting new records: Invoking recins. (line 6) * integers: Scalar Field Types. (line 9) * integrity problems: Declaring Types. (line 52) * integrity problems <1>: Mandatory Fields. (line 15) * integrity problems <2>: Keys and Unique Fields. (line 57) * integrity problems <3>: Arbitrary Constraints. (line 24) * integrity problems <4>: Remote Descriptors. (line 35) * integrity problems <5>: Confidential Fields. (line 62) * integrity, checking: Checking Recfiles. (line 6) * integrity, checking <1>: Invoking recfix. (line 6) * interactive use: Bash Builtins. (line 6) * ISO 8601 date and time of day format: Combined date and time of day items. (line 6) * ISO 8601 date format: Calendar date items. (line 28) * items in date strings: General date syntax. (line 6) * join: Joining Records. (line 65) * key, foreign key: Foreign Keys. (line 67) * key, primary key: Auto-Generated Fields. (line 24) * language, in dates: General date syntax. (line 36) * language, in dates <1>: General date syntax. (line 40) * leap seconds: General date syntax. (line 65) * leap seconds <1>: Time of day items. (line 14) * leap seconds <2>: Seconds since the Epoch. (line 27) * license, GNU Free Documentation License: GNU Free Documentation License. (line 6) * literals, numeric literals: SEX Operands. (line 12) * literals, string literals: SEX Operands. (line 30) * locale: Scalar Field Types. (line 54) * locale <1>: Date and Time Types. (line 11) * looking up data: Selecting by predicate. (line 6) * MacKenzie, David: Authors of parse_datetime. (line 6) * mandatory fields: Record Sets Properties. (line 13) * mandatory fields <1>: Mandatory Fields. (line 6) * mdb: Invoking mdb2rec. (line 6) * mdb2rec: Invoking mdb2rec. (line 6) * Meyering, Jim: Authors of parse_datetime. (line 6) * minutes, time zone correction by: Time of day items. (line 29) * month names in date strings: Calendar date items. (line 36) * months, written-out: General date syntax. (line 32) * MS Access: Invoking mdb2rec. (line 6) * multiline field values: Fields. (line 37) * multiline field values <1>: String Field Types. (line 14) * mutating field values: Setting Fields. (line 6) * numbers, written-out: General date syntax. (line 22) * octal: Scalar Field Types. (line 13) * operands, SEX operands: SEX Operands. (line 6) * operators: Size Constraints. (line 23) * operators, arithmetic operators: SEX Operators. (line 13) * operators, boolean operators: SEX Operators. (line 23) * operators, comparison operators: SEX Operators. (line 36) * operators, conditional operator: SEX Operators. (line 76) * operators, in selection expressions: SEX Operators. (line 6) * operators, string operators: SEX Operators. (line 68) * order of fields: Sorted Output. (line 58) * ordinal numbers: General date syntax. (line 22) * parentheses, in selection expressions.: SEX Operands. (line 101) * passwords: Confidential Fields. (line 6) * Pinard, F.: Authors of parse_datetime. (line 19) * primary key: Keys and Unique Fields. (line 32) * primary key <1>: Auto-Generated Fields. (line 24) * prohibited fields: Prohibited Fields. (line 6) * pure numbers in date strings: Pure numbers in date strings. (line 6) * quotation marks: Selecting by predicate. (line 85) * quotation marks <1>: SEX Operands. (line 42) * range, type description: Declaring Types. (line 12) * ranges: Scalar Field Types. (line 25) * readability: Purpose. (line 35) * readability <1>: Foreign Keys. (line 70) * reals: Scalar Field Types. (line 52) * rec, type description: Foreign Keys. (line 67) * rec2csv: Invoking rec2csv. (line 6) * recdel: Invoking recdel. (line 6) * recfix: Syntactical Errors. (line 14) * recfix <1>: Invoking recfix. (line 6) * recfmt: Generating Reports. (line 32) * recfmt <1>: Invoking recfmt. (line 6) * recinf: Invoking recinf. (line 6) * recins: Invoking recins. (line 6) * record: Records. (line 6) * record sets: Record Sets. (line 6) * record sets <1>: Foreign Keys. (line 6) * record size: Records. (line 20) * record size <1>: Size Constraints. (line 6) * recsel: Selecting by predicate. (line 12) * recsel <1>: Invoking recsel. (line 6) * recset: Invoking recset. (line 6) * regexp, type description: String Field Types. (line 33) * regular expressions: Regular Expressions. (line 6) * relative items in date strings: Relative items in date strings. (line 6) * remote descriptors: Remote Descriptors. (line 53) * renaming fields: Renaming Fields. (line 6) * reports: Generating Reports. (line 6) * requiring certain fields in records: Mandatory Fields. (line 6) * restricting fields from records: Prohibited Fields. (line 6) * restricting fields from records <1>: Allowed Fields. (line 6) * restricting values of fields: String Field Types. (line 33) * restricting values of fields <1>: Arbitrary Constraints. (line 6) * retrieving data: Selecting by predicate. (line 6) * Salz, Rich: Authors of parse_datetime. (line 6) * selecting records: Selecting by predicate. (line 6) * selecting records <1>: Invoking recsel. (line 6) * selection expressions: Selection Expressions. (line 6) * selection expressions <1>: Selecting by predicate. (line 20) * shell: Bash Builtins. (line 6) * size, field size: String Field Types. (line 19) * size, record size: Records. (line 20) * size, record size <1>: Size Constraints. (line 6) * size, type description: String Field Types. (line 19) * slots: Generating Reports. (line 55) * sorting: Sorted Output. (line 6) * sorting <1>: Sorting Records. (line 6) * sorting <2>: Invoking recsel. (line 40) * sorting <3>: Invoking recfix. (line 30) * sorting, physically: Sorting Records. (line 6) * special fields: Record Sets Properties. (line 6) * special fields <1>: Semantic Errors. (line 6) * special fields, list of: Record Sets Properties. (line 38) * string operators: SEX Operators. (line 68) * strings: String Field Types. (line 6) * subscripts, in selection expressions: SEX Operands. (line 79) * templates: Generating Reports. (line 32) * templates <1>: Templates. (line 6) * time of day item: Time of day items. (line 6) * time zone correction: Date and Time Types. (line 11) * time zone correction <1>: Time of day items. (line 29) * time zone item: General date syntax. (line 40) * time zone item <1>: Time zone items. (line 6) * time, fields containing time values: Date and Time Types. (line 6) * timestamps: Time-Stamps. (line 6) * types: Types and Fields. (line 6) * unique fields: Keys and Unique Fields. (line 15) * unique identifiers: Unique Identifiers. (line 6) * URL: Remote Descriptors. (line 53) * UUID: Other Field Types. (line 16) * uuid: Unique Identifiers. (line 6)  Tag Table: Node: Top1606 Node: Introduction8019 Node: Purpose8243 Ref: Purpose-Footnote-111270 Node: A Little Example11306 Node: The Rec Format13972 Node: Fields14574 Node: Records16356 Node: Comments17397 Node: Record Descriptors18788 Node: Record Sets19400 Node: Naming Record Types22245 Node: Documenting Records23231 Node: Record Sets Properties24605 Node: Querying Recfiles26955 Node: Simple Selections28021 Node: Selecting by Type32122 Node: Selecting by Position34046 Node: Random Records35783 Node: Selection Expressions37039 Node: Selecting by predicate37976 Node: SEX Operands41614 Node: SEX Operators44457 Node: SEX Evaluation47224 Node: Field Expressions48728 Node: Sorted Output51259 Node: Editing Records55073 Node: Inserting Records55938 Node: Adding Records With recins57289 Node: Replacing Records With recins59243 Node: Adding Anonymous Records60325 Node: Deleting Records61643 Ref: Deleting Records-Footnote-163254 Node: Sorting Records63418 Node: Editing Fields64287 Node: Adding Fields65380 Node: Setting Fields66572 Node: Deleting Fields67571 Node: Renaming Fields68318 Node: Field Types68833 Node: Declaring Types70295 Node: Types and Fields72386 Node: Scalar Field Types73432 Node: String Field Types75587 Node: Enumerated Field Types77527 Node: Date and Time Types78877 Node: Other Field Types79861 Node: Constraints on Record Sets81188 Node: Mandatory Fields82433 Node: Prohibited Fields84335 Node: Allowed Fields85743 Node: Keys and Unique Fields86571 Node: Singular Fields88970 Node: Size Constraints89512 Node: Arbitrary Constraints90650 Node: Checking Recfiles92524 Node: Syntactical Errors93216 Node: Semantic Errors94090 Node: Remote Descriptors95369 Node: Grouping and Aggregates98331 Node: Grouping Records98780 Node: Aggregate Functions101590 Node: Queries which Join Records105740 Node: Foreign Keys107789 Node: Joining Records110078 Node: Auto-Generated Fields113355 Node: Counters116378 Node: Unique Identifiers117437 Node: Time-Stamps118735 Node: Encryption119204 Node: Confidential Fields120177 Node: Encrypting Files123656 Node: Decrypting Data124715 Node: Generating Reports127428 Node: Templates129966 Node: Interoperability131314 Node: CSV Files131831 Node: Importing MDB Files134011 Node: Bash Builtins136317 Node: readrec137728 Node: Invoking the Utilities140345 Ref: Common Options140657 Node: Invoking recinf141566 Node: Invoking recsel142880 Node: Invoking recins147194 Node: Invoking recdel150180 Node: Invoking recset152148 Node: Invoking recfix154967 Node: Invoking recfmt157059 Node: Invoking csv2rec157671 Node: Invoking rec2csv158389 Node: Invoking mdb2rec159530 Node: Using ob-rec.el160297 Node: Regular Expressions162810 Node: Date input formats165054 Node: General date syntax167468 Node: Calendar date items170452 Node: Time of day items172364 Node: Time zone items174567 Node: Combined date and time of day items175920 Node: Day of week items176782 Node: Relative items in date strings177797 Node: Pure numbers in date strings180606 Node: Seconds since the Epoch181594 Node: Specifying time zone rules183287 Node: Authors of parse_datetime185671 Ref: Authors of get_date185857 Node: GNU Free Documentation License186820 Node: Concept Index212000  End Tag Table recutils-1.9/doc/texinfo.tex0000644000000000000000000107012514226563465013072 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2008-11-17.21} % % Copyright (C) 1985, 1986, 1988, 1990, 1991, 1992, 1993, 1994, 1995, % 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, % 2007, 2008, 2020, 2022 Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. (This has been our intent since Texinfo was invented.) % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % http://www.gnu.org/software/texinfo/ (the Texinfo home page), or % ftp://tug.org/tex/texinfo.tex % (and all CTAN mirrors, see http://www.ctan.org). % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include including a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is http://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexstar=\* \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% Math-mode def from plain.tex. % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Since the category of space is not known, we have to be careful. \chardef\spacecat = 10 \def\spaceisspace{\catcode`\ =\spacecat} % sometimes characters are active, so we need control sequences. \chardef\colonChar = `\: \chardef\commaChar = `\, \chardef\dashChar = `\- \chardef\dotChar = `\. \chardef\exclamChar= `\! \chardef\lquoteChar= `\` \chardef\questChar = `\? \chardef\rquoteChar= `\' \chardef\semiChar = `\; \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\pagewidth \newdimen\pageheight % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt} % @| inserts a changebar to the left of the current line. It should % surround any changed text. This approach does *not* work if the % change spans more than two lines of output. To handle that, we would % have adopt a much more difficult approach (putting marks into the main % vertical list for the beginning and end of each change). % \def\|{% % \vadjust can only be used in horizontal mode. \leavevmode % % Append this vertical mode material after the current line in the output. \vadjust{% % We want to insert a rule with the height and depth of the current % leading; that is exactly what \strutbox is supposed to record. \vskip-\baselineskip % % \vadjust-items are inserted at the left edge of the type. So % the \llap here moves out into the left-hand margin. \llap{% % % For a thicker or thinner bar, change the `1pt'. \vrule height\baselineskip width1pt % % This is the space between the bar and the text. \hskip 12pt }% }% } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\undefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % For @cropmarks command. % Do @cropmarks to get crop marks. % \newif\ifcropmarks \let\cropmarks = \cropmarkstrue % % Dimensions to add cropmarks at corners. % Added by P. A. MacKay, 12 Nov. 1986 % \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\cornerlong \cornerlong=1pc \newdimen\cornerthick \cornerthick=.3pt \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. The solution is % described on page 260 of The TeXbook. It involves outputting two % marks for the sectioning macros, one before the section break, and % one after. I won't pretend I can describe this better than DEK... \def\domark{% \toks0=\expandafter{\lastchapterdefs}% \toks2=\expandafter{\lastsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\lastcolordefs}% \mark{% \the\toks0 \the\toks2 \noexpand\or \the\toks4 \the\toks6 \noexpand\else \the\toks8 }% } % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\topmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\topmark\fi} % Avoid "undefined control sequence" errors. \def\lastchapterdefs{} \def\lastsectiondefs{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\lastcolordefs{} % Main output routine. \chardef\PAGE = 255 \output = {\onepageout{\pagecontents\PAGE}} \newbox\headlinebox \newbox\footlinebox % \onepageout takes a vbox as an argument. Note that \pagecontents % does insertions, but you have to call it yourself. \def\onepageout#1{% \ifcropmarks \hoffset=0pt \else \hoffset=\normaloffset \fi % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \setbox\headlinebox = \vbox{\let\hsize=\pagewidth \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \setbox\footlinebox = \vbox{\let\hsize=\pagewidth \makefootline}% % {% % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \indexdummies % don't expand commands in the output. \normalturnoffactive % \ in index entries must not stay \, e.g., if % the page break happens to be in the middle of an example. % We don't want .vr (or whatever) entries like this: % \entry{{\tt \indexbackslash }acronym}{32}{\code {\acronym}} % "\acronym" won't work when it's read back in; % it needs to be % {\code {{\tt \backslashcurfont }acronym} \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \ifcropmarks \vbox to \outervsize\bgroup \hsize = \outerhsize \vskip-\topandbottommargin \vtop to0pt{% \line{\ewtop\hfil\ewtop}% \nointerlineskip \line{% \vbox{\moveleft\cornerthick\nstop}% \hfill \vbox{\moveright\cornerthick\nstop}% }% \vss}% \vskip\topandbottommargin \line\bgroup \hfil % center the page within the outer (page) hsize. \ifodd\pageno\hskip\bindingoffset\fi \vbox\bgroup \fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % \ifcropmarks \egroup % end of \vbox\bgroup \hfil\egroup % end of (centering) \line\bgroup \vskip\topandbottommargin plus1fill minus1fill \boxmaxdepth = \cornerthick \vbox to0pt{\vss \line{% \vbox{\moveleft\cornerthick\nsbot}% \hfill \vbox{\moveright\cornerthick\nsbot}% }% \nointerlineskip \line{\ewbot\hfil\ewbot}% }% \egroup % \vbox from first cropmarks clause \fi }% end of \shipout\vbox }% end of group with \indexdummies \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen \def\pagebody#1{\vbox to\pageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Here are the rules for the cropmarks. Note that they are % offset so that the space between them is truly \outerhsize or \outervsize % (P. A. MacKay, 12 November, 1986) % \def\ewtop{\vrule height\cornerthick depth0pt width\cornerlong} \def\nstop{\vbox {\hrule height\cornerthick depth\cornerlong width\cornerthick}} \def\ewbot{\vrule height0pt depth\cornerthick width\cornerlong} \def\nsbot{\vbox {\hrule height\cornerlong depth\cornerthick width\cornerthick}} % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} % % Actually, I use \csname\string\foo\endcsname, ie. \\foo, as it is my % favourite TeX trick. --kasal, 16nov03 \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty out of any environment% \else in environment \expandafter\string#1% \fi } % @end foo executes the definition of \Efoo. % But first, it executes a specialized version of \checkenv % \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal, but... --kasal, 06nov03 \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} %% Simple single-character @ commands % @@ prints an @ % Kludge this until the fonts are right (grr). \def\@{{\tt\char64}} % This is turned off because it was never documented % and you can use @w{...} around a quote to suppress ligatures. %% Define @` and @' to be the same as ` and ' %% but suppressing ligatures. %\def\`{{`}} %\def\'{{'}} % Used to generate quoted braces. \def\mylbrace {{\tt\char123}} \def\myrbrace {{\tt\char125}} \let\{=\mylbrace \let\}=\myrbrace \begingroup % Definitions to produce \{ and \} commands for indices, % and @{ and @} for the aux/toc files. \catcode`\{ = \other \catcode`\} = \other \catcode`\[ = 1 \catcode`\] = 2 \catcode`\! = 0 \catcode`\\ = \other !gdef!lbracecmd[\{]% !gdef!rbracecmd[\}]% !gdef!lbraceatcmd[@{]% !gdef!rbraceatcmd[@}]% !endgroup % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \c \let\dotaccent = \. \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \t \let\ubaraccent = \b \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\selectfonts\lllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{\selectfonts\lllsize A}\vss}}% \kern-.15em \TeX } % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on/off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \pageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\pageheight \page \fi \fi \box\groupbox \prevdepth = \dimen1 \checkinserts } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in % Old definition--didn't work. %\parseargdef\need{\par % %% This method tries to make TeX break the page naturally %% if the depth of the box does not fit. %{\baselineskip=0pt% %\vtop to #1\mil{\vfil}\kern -#1\mil\nobreak %\prevdepth=-1000pt %}} \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\next\centerH \else \let\next\centerV \fi \next{\hfil \ignorespaces#1\unskip \hfil}% } \def\centerH#1{% {% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }% } \def\centerV#1{\line{\kern\leftskip #1\kern\rightskip}} % @sp n outputs n lines of vertical space \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\comment{\begingroup \catcode`\^^M=\other% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \commentxxx} {\catcode`\^^M=\other \gdef\commentxxx#1^^M{\endgroup}} \let\c=\comment % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent{% \restorefirstparagraphindent \indent }% \gdef\noindent{% \restorefirstparagraphindent \noindent }% \global\everypar = {% \kern -\parindent \restorefirstparagraphindent }% } \gdef\restorefirstparagraphindent{% \global \let \indent = \ptexindent \global \let \noindent = \ptexnoindent \global \everypar = {}% } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a \ character. % FYI, plain.tex uses \\ as a temporary control sequence (why?), but % this is not advertised and we don't care. Texinfo does not % otherwise define @\. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot $\finishmath } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % Some math mode symbols. \def\bullet{$\ptexbullet$} \def\geq{\ifmmode \ge\else $\ge$\fi} \def\leq{\ifmmode \le\else $\le$\fi} \def\minus{\ifmmode -\else $-$\fi} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @comma{} is so commas can be inserted into text without messing up % Texinfo's parsing. % \let\comma = , % @refill is a no-op. \let\refill=\relax % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate (before @setfilename). % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % @setfilename is done at the beginning of every texinfo file. % So open here the files we need to have open while reading the input. % This makes it possible to make a .fmt file for texinfo. \def\setfilename{% \fixbackslash % Turn off hack to swallow `\input texinfo'. \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi % \openindices needs to do some work in any case. \openindices \let\setfilename=\comment % Ignore extra @setfilename cmds. % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. \openin 1 texinfo.cnf \ifeof 1 \else \input texinfo.cnf \fi \closein 1 % \comment % Ignore the actual filename. } % Called from \setfilename. % \def\openindices{% \newindex{cp}% \newcodeindex{fn}% \newcodeindex{vr}% \newcodeindex{tp}% \newcodeindex{ky}% \newcodeindex{pg}% } % @bye. \outer\def\bye{\pagealignmacro\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as \undefined, % borrowed from ifpdf.sty. \ifx\pdfoutput\undefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html % (and related messages, the final outcome is that it is up to the TeX % user to double the backslashes and otherwise make the string valid, so % that's what we do). % double active backslashes. % {\catcode`\@=0 \catcode`\\=\active @gdef@activebackslashdouble{% @catcode`@\=@active @let\=@doublebackslash} } % To handle parens, we must adopt a different approach, since parens are % not active characters. hyperref.dtx (which has the same problem as % us) handles it with this amazing macro to replace tokens, with minor % changes for Texinfo. It is included here under the GPL by permission % from the author, Heiko Oberdiek. % % #1 is the tokens to replace. % #2 is the replacement. % #3 is the control sequence with the string. % \def\HyPsdSubst#1#2#3{% \def\HyPsdReplace##1#1##2\END{% ##1% \ifx\\##2\\% \else #2% \HyReturnAfterFi{% \HyPsdReplace##2\END }% \fi }% \xdef#3{\expandafter\HyPsdReplace#3#1\END}% } \long\def\HyReturnAfterFi#1\fi{\fi#1} % #1 is a control sequence in which to do the replacements. \def\backslashparens#1{% \xdef#1{#1}% redefine it as its expansion; the definition is simply % \lastnode when called from \setref -> \pdfmkdest. \HyPsdSubst{(}{\realbackslash(}{#1}% \HyPsdSubst{)}{\realbackslash)}{#1}% } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros based on pdfcolor.tex. \def\cmykDarkRed{0.28 1 1 0.35} \def\cmykBlack{0 0 0 1} % \def\pdfsetcolor#1{\pdfliteral{#1 k}} % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\lastcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\cmykBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\lastcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\imagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\imageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .png, .jpg, .pdf (among % others). Let's try in that order. \let\pdfimgext=\empty \begingroup \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \imagewidth \fi \ifdim \wd2 >0pt height \imageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\pdfmkdest#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \turnoffactive \activebackslashdouble \makevalueexpandable \def\pdfdestname{#1}% \backslashparens\pdfdestname \safewhatsit{\pdfdest name{\pdfdestname} xyz}% }} % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use a color that is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. \def\urlcolor{\cmykDarkRed} \def\linkcolor{\cmykDarkRed} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \def\pdfoutlinedest{#3}% \ifx\pdfoutlinedest\empty \def\pdfoutlinedest{#4}% \else % Doubled backslashes in the name. {\activebackslashdouble \xdef\pdfoutlinedest{#3}% \backslashparens\pdfoutlinedest}% \fi % % Also double the backslashes in the display string. {\activebackslashdouble \xdef\pdfoutlinetext{#1}% \backslashparens\pdfoutlinetext}% % \pdfoutline goto name{\pdfmkpgn{\pdfoutlinedest}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Thanh's hack / proper braces in bookmarks \edef\mylbrace{\iftrue \string{\else}\fi}\let\{=\mylbrace \edef\myrbrace{\iffalse{\else\string}\fi}\let\}=\myrbrace % % Read toc silently, to get counts of subentries for \pdfoutline. \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. \def\numchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % xx to do this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Right % now, I guess we'll just let the pdf reader have its way. \indexnofonts \setupdatafile \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \ifx\p\space\else\addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \fi \nextsp} \def\getfilename#1{\filenamelength=0\expandafter\skipspaces#1|\relax} \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput \message{fonts,} % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname ten#1\endcsname % change the current font } % Select #1 fonts with the current style. % \def\selectfonts#1{\csname #1fonts\endcsname \csname\curfontstyle\endcsname} \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}} % Unfortunately, we have to override this for titles and the like, since % in those cases "rm" is bold. Sigh. \def\rmisbold{\rm\def\curfontstyle{bf}} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} \let\li = \sf % Sometimes we call it \li, not \sf. % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % Default leading. \newdimen\textleading \textleading = 13.2pt % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\undefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named #2, adding on the % specified font prefix (normally `cm'). % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (currently only OT1, OT1IT and OT1TT are allowed, pass % empty to omit). \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % emacs-page end of cmaps % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\undefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} %where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. This is the default in % Texinfo. % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acro in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} % reset the current fonts \textfonts \rm } % end of 11pt text font size definitions % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\tentt=\deftt \let\tenbf = \defbf \let\tenttsl=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acro in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} % reduce space between paragraphs \divide\parskip by 2 % reset the current fonts \textfonts \rm } % end of 10pt text font size definitions % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xword{10} \def\xiword{11} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% \wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. Since % texinfo doesn't allow for producing subscripts and superscripts except % in the main text, we don't bother to reset \scriptfont and % \scriptscriptfont (which would also require loading a lot more fonts). % \def\resetmathfonts{% \textfont0=\tenrm \textfont1=\teni \textfont2=\tensy \textfont\itfam=\tenit \textfont\slfam=\tensl \textfont\bffam=\tenbf \textfont\ttfam=\tentt \textfont\sffam=\tensf } % The font-changing commands redefine the meanings of \tenSTYLE, instead % of just \STYLE. We do this because \STYLE needs to also set the % current \fam for math mode. Our \STYLE (e.g., \rm) commands hardwire % \tenSTYLE to set the current font. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used in % the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\textfonts{% \let\tenrm=\textrm \let\tenit=\textit \let\tensl=\textsl \let\tenbf=\textbf \let\tentt=\texttt \let\smallcaps=\textsc \let\tensf=\textsf \let\teni=\texti \let\tensy=\textsy \let\tenttsl=\textttsl \def\curfontsize{text}% \def\lsize{reduced}\def\lllsize{smaller}% \resetmathfonts \setleading{\textleading}} \def\titlefonts{% \let\tenrm=\titlerm \let\tenit=\titleit \let\tensl=\titlesl \let\tenbf=\titlebf \let\tentt=\titlett \let\smallcaps=\titlesc \let\tensf=\titlesf \let\teni=\titlei \let\tensy=\titlesy \let\tenttsl=\titlettsl \def\curfontsize{title}% \def\lsize{chap}\def\lllsize{subsec}% \resetmathfonts \setleading{25pt}} \def\titlefont#1{{\titlefonts\rmisbold #1}} \def\chapfonts{% \let\tenrm=\chaprm \let\tenit=\chapit \let\tensl=\chapsl \let\tenbf=\chapbf \let\tentt=\chaptt \let\smallcaps=\chapsc \let\tensf=\chapsf \let\teni=\chapi \let\tensy=\chapsy \let\tenttsl=\chapttsl \def\curfontsize{chap}% \def\lsize{sec}\def\lllsize{text}% \resetmathfonts \setleading{19pt}} \def\secfonts{% \let\tenrm=\secrm \let\tenit=\secit \let\tensl=\secsl \let\tenbf=\secbf \let\tentt=\sectt \let\smallcaps=\secsc \let\tensf=\secsf \let\teni=\seci \let\tensy=\secsy \let\tenttsl=\secttsl \def\curfontsize{sec}% \def\lsize{subsec}\def\lllsize{reduced}% \resetmathfonts \setleading{16pt}} \def\subsecfonts{% \let\tenrm=\ssecrm \let\tenit=\ssecit \let\tensl=\ssecsl \let\tenbf=\ssecbf \let\tentt=\ssectt \let\smallcaps=\ssecsc \let\tensf=\ssecsf \let\teni=\sseci \let\tensy=\ssecsy \let\tenttsl=\ssecttsl \def\curfontsize{ssec}% \def\lsize{text}\def\lllsize{small}% \resetmathfonts \setleading{15pt}} \let\subsubsecfonts = \subsecfonts \def\reducedfonts{% \let\tenrm=\reducedrm \let\tenit=\reducedit \let\tensl=\reducedsl \let\tenbf=\reducedbf \let\tentt=\reducedtt \let\reducedcaps=\reducedsc \let\tensf=\reducedsf \let\teni=\reducedi \let\tensy=\reducedsy \let\tenttsl=\reducedttsl \def\curfontsize{reduced}% \def\lsize{small}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallfonts{% \let\tenrm=\smallrm \let\tenit=\smallit \let\tensl=\smallsl \let\tenbf=\smallbf \let\tentt=\smalltt \let\smallcaps=\smallsc \let\tensf=\smallsf \let\teni=\smalli \let\tensy=\smallsy \let\tenttsl=\smallttsl \def\curfontsize{small}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{10.5pt}} \def\smallerfonts{% \let\tenrm=\smallerrm \let\tenit=\smallerit \let\tensl=\smallersl \let\tenbf=\smallerbf \let\tentt=\smallertt \let\smallcaps=\smallersc \let\tensf=\smallersf \let\teni=\smalleri \let\tensy=\smallersy \let\tenttsl=\smallerttsl \def\curfontsize{smaller}% \def\lsize{smaller}\def\lllsize{smaller}% \resetmathfonts \setleading{9.5pt}} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % % I wish the USA used A4 paper. % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi % Define these so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} %% Add scribe-like font environments, plus @l for inline lisp (usually sans %% serif) and @ii for TeX italic % \smartitalic{ARG} outputs arg in italics, followed by an italic correction % unless the following character is such as not to need one. \def\smartitalicx{\ifx\next,\else\ifx\next-\else\ifx\next.\else \ptexslash\fi\fi\fi} \def\smartslanted#1{{\ifusingtt\ttsl\sl #1}\futurelet\next\smartitalicx} \def\smartitalic#1{{\ifusingtt\ttsl\it #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally uses \ttsl. % @var is set to this for defun arguments. \def\ttslanted#1{{\ttsl #1}\futurelet\next\smartitalicx} % like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitalicx} \let\i=\smartitalic \let\slanted=\smartslanted \def\var#1{{\setupmarkupstyle{var}\smartslanted{#1}}} \let\dfn=\smartslanted \let\emph=\smartitalic % @b, explicit bold. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode\dotChar =\@m \sfcode\questChar=\@m \sfcode\exclamChar=\@m \sfcode\colonChar=\@m \sfcode\semiChar =\@m \sfcode\commaChar =\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default \def\t#1{% {\tt \rawbackslash \plainfrenchspacing #1}% \null } \def\samp#1{{\setupmarkupstyle{samp}\lq\tclose{#1}\rq\null}} \setfont\keyrm\rmshape{8}{1000}{OT1} \font\keysy=cmsy9 \def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% \vbox{\hrule\kern-0.4pt \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% \kern-0.4pt\hrule}% \kern-.06em\raise0.4pt\hbox{\angleright}}}} \def\key #1{{\setupmarkupstyle{key}\nohyphenation \uppercase{#1}}\null} % The old definition, with no lozenge: %\def\key #1{{\ttsl \nohyphenation \uppercase{#1}}\null} \def\ctrl #1{{\tt \rawbackslash \hat}#1} % @file, @option are the same as @samp. \let\file=\samp \let\option=\samp % @code is a modification of @t, % which makes spaces the same size as normal in the surrounding text. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \rawbackslash \plainfrenchspacing #1% }% \null } % We *must* turn on hyphenation at `-' and `_' in @code. % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. % -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setupmarkupstyle{code}% % The following should really be moved into \setupmarkupstyle handlers. \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\realdash \let_\realunder \fi \codex } } \def\realdash{-} \def\codedash{-\discretionary{}{}{}} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } \def\codex #1{\tclose{#1}\endgroup} % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is undesirable in % some manuals, especially if they don't have long identifiers in % general. @allowcodebreaks provides a way to control this. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg'}% \fi\fi } % @kbd is like @code, except that if the argument is just one @key command, % then @kbd has no effect. % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle option `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct.' \kbdinputstyle distinct \def\xkey{\key} \def\kbdfoo#1#2#3\par{\def\one{#1}\def\three{#3}\def\threex{??}% \ifx\one\xkey\ifx\threex\three \key{#2}% \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi \else{\tclose{\kbdfont\setupmarkupstyle{kbd}\look}}\fi} % For @indicateurl, @env, @command quotes seem unnecessary, so use \code. \let\indicateurl=\code \let\env=\code \let\command=\code % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % @uref (abbreviation for `urlref') takes an optional (comma-separated) % second argument specifying the text to display and an optional third % arg as text to display instead of (rather than in addition to) the url % itself. First (mandatory) arg is the url. Perhaps eventually put in % a hypertex \special here. % \def\uref#1{\douref #1,,,\finish} \def\douref#1,#2,#3,#4\finish{\begingroup \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \ifpdf \unhbox0 % PDF: 2nd arg given, show only it \else \unhbox0\ (\code{#1})% DVI: 2nd arg given, show both it and url \fi \else \code{#1}% only url given, so show it \fi \fi \endlink \endgroup} % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdf \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} \def\kbd#1{{\setupmarkupstyle{kbd}\def\look{#1}\expandafter\kbdfoo\look??\par}} % @l was never documented to mean ``switch to the Lisp font'', % and it is not used as such in any manual I can find. We need it for % Polish suppressed-l. --karl, 22sep96. %\def\l#1{{\li #1}\null} % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\selectfonts\lsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi } % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{{\it\$}} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Hacks for glyphs from the EC fonts similar to \euro. We don't % use \let for the aliases, because sometimes we redefine the original % macro, and the alias should reflect the redefinition. \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % \def\ecfont{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = ecb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = ec\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\selectfonts\lllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\undefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quotedblleft="5C \chardef\quotedblright=`\" \chardef\quoteleft=`\` \chardef\quoteright=`\' \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % Do an implicit @contents or @shortcontents after @end titlepage if the % user says @setcontentsaftertitlepage or @setshortcontentsaftertitlepage. % \newif\ifsetcontentsaftertitlepage \let\setcontentsaftertitlepage = \setcontentsaftertitlepagetrue \newif\ifsetshortcontentsaftertitlepage \let\setshortcontentsaftertitlepage = \setshortcontentsaftertitlepagetrue \parseargdef\shorttitlepage{\begingroup\hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon % % If they want short, they certainly want long too. \ifsetshortcontentsaftertitlepage \shortcontents \contents \global\let\shortcontents = \relax \global\let\contents = \relax \fi % \ifsetcontentsaftertitlepage \contents \global\let\contents = \relax \global\let\shortcontents = \relax \fi } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } %%% Macros to be used within @titlepage: \let\subtitlerm=\tenrm \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \leftline{\titlefonts\rmisbold #1} % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rmisbold \leftline{#1}}% \fi } %%% Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make TeX use those variables \headline={{\textfonts\rm \ifodd\pageno \the\oddheadline \else \the\evenheadline \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\pageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \def\everyheadingmarks#1 {\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \def\everyfootingmarks#1 {\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \def\headings #1 {\csname HEADINGS#1\endcsname} \def\HEADINGSoff{% \global\evenheadline={\hfil} \global\evenfootline={\hfil} \global\oddheadline={\hfil} \global\oddfootline={\hfil}} \HEADINGSoff % When we turn headings on, set the page number to 1. % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \global\pageno=1 \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\undefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi \def\itemcontents{#1}% % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% \vadjust{\penalty 1200}}% not good to break after first line of item. \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @alphaenumerate and @capsenumerate are abbreviations for giving an arg % to @enumerate. % \def\alphaenumerate{\enumerate{a}} \def\capsenumerate{\enumerate{A}} \def\Ealphaenumerate{\Eenumerate} \def\Ecapsenumerate{\Eenumerate} % @multitable macros % Amy Hendrickson, 8/18/94, 3/6/96 % % @multitable ... @end multitable will make as many columns as desired. % Contents of each column will wrap at width given in preamble. Width % can be specified either with sample text given in a template line, % or in percent of \hsize, the current width of text on page. % Table can continue over pages but will only break between lines. % To make preamble: % % Either define widths of columns in terms of percent of \hsize: % @multitable @columnfractions .25 .3 .45 % @item ... % % Numbers following @columnfractions are the percent of the total % current hsize to be used for each column. You may use as many % columns as desired. % Or use a template: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item ... % using the widest term desired in each column. % Each new table line starts with @item, each subsequent new column % starts with @tab. Empty columns may be produced by supplying @tab's % with nothing between them for as many times as empty columns are needed, % ie, @tab@tab@tab will produce two empty columns. % @item, @tab do not need to be on their own lines, but it will not hurt % if they are. % Sample multitable: % @multitable {Column 1 template} {Column 2 template} {Column 3 template} % @item first col stuff @tab second col stuff @tab third col % @item % first col stuff % @tab % second col stuff % @tab % third col % @item first col stuff @tab second col stuff % @tab Many paragraphs of text may be used in any column. % % They will wrap at the width determined by the template. % @item@tab@tab This will be in third column. % @end multitable % Default dimensions may be reset by user. % @multitableparskip is vertical space between paragraphs in table. % @multitableparindent is paragraph indent in table. % @multitablecolmargin is horizontal space to be left between columns. % @multitablelinespace is space to leave between table items, baseline % to baseline. % 0pt means it depends on current normal line spacing. % \newskip\multitableparskip \newskip\multitableparindent \newdimen\multitablecolspace \newskip\multitablelinespace \multitableparskip=0pt \multitableparindent=6pt \multitablecolspace=12pt \multitablelinespace=0pt % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % multitable-only commands. % % @headitem starts a heading row, which we typeset in bold. % Assignments have to be global since we are inside the implicit group % of an alignment entry. Note that \everycr resets \everytab. \def\headitem{\checkenv\multitable \crcr \global\everytab={\bf}\the\everytab}% % % A \tab used to include \hskip1sp. But then the space in a template % line is not enough. That is bad. So let's go back to just `&' until % we encounter the problem it was intended to solve again. % --karl, nathan@acm.org, 20apr99. \def\tab{\checkenv\multitable &\the\everytab}% % @multitable ... @end multitable definitions: % \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \setmultitablespacing \parskip=\multitableparskip \parindent=\multitableparindent \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% \global\colcount=0 % Reset the column counter. % Check for saved footnotes, etc. \checkinserts % Keeps underfull box messages off when table breaks over pages. %\filbreak % Maybe so, but it also creates really weird page breaks when the % table breaks over pages. Wouldn't \vfil be better? Wait until the % problem manifests itself, so it can be fixed for real --karl. }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \multistrut \vtop{% % Use the current \colcount to find the correct column width: \hsize=\expandafter\csname col\the\colcount\endcsname % % In order to keep entries from bumping into each other % we will add a \leftskip of \multitablecolspace to all columns after % the first one. % % If a template has been used, we will add \multitablecolspace % to the width of each template entry. % % If the user has set preamble in terms of percent of \hsize we will % use that dimension as the width of the column, and the \leftskip % will keep entries from bumping into each other. Table will start at % left margin and final column will justify at right margin. % % Make sure we don't inherit \rightskip from the outer environment. \rightskip=0pt \ifnum\colcount=1 % The first column will be indented with the surrounding text. \advance\hsize by\leftskip \else \ifsetpercent \else % If user has not set preamble in terms of percent of \hsize % we will advance \hsize by \multitablecolspace. \advance\hsize by \multitablecolspace \fi % In either case we will make \leftskip=\multitablecolspace: \leftskip=\multitablecolspace \fi % Ignoring space at the beginning and end avoids an occasional spurious % blank line, when TeX decides to break the line at the space before the % box from the multistrut, so the strut ends up on a line by itself. % For example: % @multitable @columnfractions .11 .89 % @item @code{#} % @tab Legal holiday which is valid in major parts of the whole country. % Is automatically provided with highlighting sequences respectively % marking characters. \noindent\ignorespaces##\unskip\multistrut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \def\setmultitablespacing{% \def\multistrut{\strut}% just use the standard line spacing % % Compute \multitablelinespace (if not defined by user) for use in % \multitableparskip calculation. We used define \multistrut based on % this, but (ironically) that caused the spacing to be off. % See bug-texinfo report from Werner Lemberg, 31 Oct 2004 12:52:20 +0100. \ifdim\multitablelinespace=0pt \setbox0=\vbox{X}\global\multitablelinespace=\the\baselineskip \global\advance\multitablelinespace by-\ht0 \fi %% Test to see if parskip is larger than space between lines of %% table. If not, do nothing. %% If so, set to same dimension as multitablelinespace. \ifdim\multitableparskip>\multitablelinespace \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi% \ifdim\multitableparskip=0pt \global\multitableparskip=\multitablelinespace \global\advance\multitableparskip-7pt %% to keep parskip somewhat smaller %% than skip between lines in the table. \fi} \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\- = \active \catcode`\_ = \active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\realdash \let_\normalunderscore } } % We have this subroutine so that we can handle at least some @value's % properly in indexes (we call \makevalueexpandable in \indexdummies). % The command has to be fully expandable (if the variable is set), since % the result winds up in the index file. This means that if the % variable's value contains other Texinfo commands, it's almost certain % it will fail (although perhaps we could fix that with sufficient work % to do a one-level expansion on the result, instead of complete). % \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get special treatment of `@end ifset,' call \makeond and the redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end ifclear reads the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named foo. % It automatically defines \fooindex such that % \fooindex ...rest of line... puts an entry in the index foo. % It also defines \fooindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is foo. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 % Open the file \fi \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \iflinks \expandafter\newwrite \csname#1indfile\endcsname \openout \csname#1indfile\endcsname \jobname.#1 \fi \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% % Only do \closeout if we haven't already done it, else we'll end up % closing the target index. \expandafter \ifx\csname donesynindex#2\endcsname \relax % The \closeout helps reduce unnecessary open files; the limit on the % Acorn RISC OS is a mere 16 files. \expandafter\closeout\csname#2indfile\endcsname \expandafter\let\csname donesynindex#2\endcsname = 1 \fi % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all \fooindex macros. % Argument #1 is generated by the calling \fooindex macro, % and it is "foo", the name of the index. % \doindex just uses \parsearg; it calls \doind for the actual work. % This is because \doind is more useful to call from other macros. % There is also \dosubind {index}{topic}{subtopic} % which makes an entry in a two-level index such as the operation index. \def\doindex#1{\edef\indexname{#1}\parsearg\singleindexer} \def\singleindexer #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\singlecodeindexer} \def\singlecodeindexer #1{\doind{\indexname}{\code{#1}}} % Take care of Texinfo commands that can appear in an index entry. % Since there are some commands we want to expand, and others we don't, % we have to laboriously prevent expansion for those that we don't. % \def\indexdummies{% \escapechar = `\\ % use backslash in output files. \def\@{@}% change to @@ when we switch to @ as escape char in index files. \def\ {\realbackslash\space }% % % Need these in case \tex is in effect and \{ is a \delimiter again. % But can't use \lbracecmd and \rbracecmd because texindex assumes % braces and backslashes are used only as delimiters. \let\{ = \mylbrace \let\} = \myrbrace % % I don't entirely understand this, but when an index entry is % generated from a macro call, the \endinput which \scanmacro inserts % causes processing to be prematurely terminated. This is, % apparently, because \indexsorttmp is fully expanded, and \endinput % is an expandable command. The redefinition below makes \endinput % disappear altogether for that purpose -- although logging shows that % processing continues to some further point. On the other hand, it % seems \endinput does not hurt in the printed index arg, since that % is still getting written without apparent harm. % % Sample source (mac-idx3.tex, reported by Graham Percival to % help-texinfo, 22may06): % @macro funindex {WORD} % @findex xyz % @end macro % ... % @funindex commtest % % The above is not enough to reproduce the bug, but it gives the flavor. % % Sample whatsit resulting: % .@write3{\entry{xyz}{@folio }{@code {xyz@endinput }}} % % So: \let\endinput = \empty % % Do the redefinitions. \commondummies } % For the aux and toc files, @ is the escape character. So we want to % redefine everything using @ as the escape character (instead of % \realbackslash, still used for index files). When everything uses @, % this will be simpler. % \def\atdummies{% \def\@{@@}% \def\ {@ }% \let\{ = \lbraceatcmd \let\} = \rbraceatcmd % % Do the redefinitions. \commondummies \otherbackslash } % Called from \indexdummies and \atdummies. % \def\commondummies{% % % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control% words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % For control letters, we have \definedummyletter, which omits the % space. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % \def\definedummyword ##1{\def##1{\string##1\space}}% \def\definedummyletter##1{\def##1{\string##1}}% \let\definedummyaccent\definedummyletter % \commondummiesnofonts % \definedummyletter\_% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\L \definedummyword\OE \definedummyword\O \definedummyword\aa \definedummyword\ae \definedummyword\l \definedummyword\oe \definedummyword\o \definedummyword\ss \definedummyword\exclamdown \definedummyword\questiondown \definedummyword\ordf \definedummyword\ordm % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\expansion \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\result \definedummyword\textdegree % % We want to disable all macros so that they are not expanded by \write. \macrolist % \normalturnoffactive % % Handle some cases of @value -- where it does not contain any % (non-fully-expandable) commands. \makevalueexpandable } % \commondummiesnofonts: common to \commondummies and \indexnofonts. % \def\commondummiesnofonts{% % Control letters and accents. \definedummyletter\!% \definedummyaccent\"% \definedummyaccent\'% \definedummyletter\*% \definedummyaccent\,% \definedummyletter\.% \definedummyletter\/% \definedummyletter\:% \definedummyaccent\=% \definedummyletter\?% \definedummyaccent\^% \definedummyaccent\`% \definedummyaccent\~% \definedummyword\u \definedummyword\v \definedummyword\H \definedummyword\dotaccent \definedummyword\ogonek \definedummyword\ringaccent \definedummyword\tieaccent \definedummyword\ubaraccent \definedummyword\udotaccent \definedummyword\dotless % % Texinfo font commands. \definedummyword\b \definedummyword\i \definedummyword\r \definedummyword\sc \definedummyword\t % % Commands that take arguments. \definedummyword\acronym \definedummyword\cite \definedummyword\code \definedummyword\command \definedummyword\dfn \definedummyword\emph \definedummyword\env \definedummyword\file \definedummyword\kbd \definedummyword\key \definedummyword\math \definedummyword\option \definedummyword\pxref \definedummyword\ref \definedummyword\samp \definedummyword\strong \definedummyword\tie \definedummyword\uref \definedummyword\url \definedummyword\var \definedummyword\verb \definedummyword\w \definedummyword\xref } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\definedummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\definedummyletter##1{\let##1\empty}% % Hopefully, all control words can become @asis. \let\definedummyword\definedummyaccent % \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% % how to handle braces? \def\_{\normalunderscore}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\aa{aa}% \def\ae{ae}% \def\l{l}% \def\oe{oe}% \def\o{o}% \def\ss{ss}% \def\exclamdown{!}% \def\questiondown{?}% \def\ordf{a}% \def\ordm{o}% % \def\LaTeX{LaTeX}% \def\TeX{TeX}% % % Assorted special characters. % (The following {} will end up in the sort string, but that's ok.) \def\bullet{bullet}% \def\comma{,}% \def\copyright{copyright}% \def\registeredsymbol{R}% \def\dots{...}% \def\enddots{...}% \def\equiv{==}% \def\error{error}% \def\euro{euro}% \def\guillemetleft{<<}% \def\guillemetright{>>}% \def\guilsinglleft{<}% \def\guilsinglright{>}% \def\expansion{==>}% \def\minus{-}% \def\pounds{pounds}% \def\point{.}% \def\print{-|}% \def\quotedblbase{"}% \def\quotedblleft{"}% \def\quotedblright{"}% \def\quoteleft{`}% \def\quoteright{'}% \def\quotesinglbase{,}% \def\result{=>}% \def\textdegree{degrees}% % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist } \let\indexbackslash=0 %overridden during \printindex. \let\SETmarginindex=\relax % put index entries in margin (undocumented)? % Most index entries go through here, but \dosubind is the general case. % #1 is the index name, #2 is the entry text. \def\doind#1#2{\dosubind{#1}{#2}{}} % Workhorse for all \fooindexes. % #1 is name of index, #2 is stuff to put there, #3 is subentry -- % empty if called from \doind, as we usually are (the main exception % is with most defuns, which call us directly). % \def\dosubind#1#2#3{% \iflinks {% % Store the main index entry text (including the third arg). \toks0 = {#2}% % If third arg is present, precede it with a space. \def\thirdarg{#3}% \ifx\thirdarg\empty \else \toks0 = \expandafter{\the\toks0 \space #3}% \fi % \edef\writeto{\csname#1indfile\endcsname}% % \safewhatsit\dosubindwrite }% \fi } % Write the entry in \toks0 to the index file: % \def\dosubindwrite{% % Put the index entry in the margin if desired. \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \the\toks0}}% \fi % % Remember, we are within a group. \indexdummies % Must do this here, since \bf, etc expand at this stage \def\backslashcurfont{\indexbackslash}% \indexbackslash isn't defined now % so it will be output as is; and it will print as backslash. % % Process the index entry with all font commands turned off, to % get the string to sort by. {\indexnofonts \edef\temp{\the\toks0}% need full expansion \xdef\indexsorttmp{\temp}% }% % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. \edef\temp{% \write\writeto{% \string\entry{\indexsorttmp}{\noexpand\folio}{\the\toks0}}% }% \temp } % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{% \ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi } % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} \def\cindexsub {\begingroup\obeylines\cindexsub} {\obeylines % \gdef\cindexsub "#1" #2^^M{\endgroup % \dosubind{cp}{#2}{#1}}} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See if the index file exists and is nonempty. % Change catcode of @ here so that if the index file contains % \initial {@} % as its first line, TeX doesn't complain about mismatched braces % (because it thinks @} is a control sequence). \catcode`\@ = 11 \openin 1 \jobname.#1s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \else % % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \temp \ifeof 1 \putwordIndexIsEmpty \else % Index files are almost Texinfo source, but we use \ as the escape % character. It would be better to use @, but that's too big a change % to make right now. \def\indexbackslash{\backslashcurfont}% \catcode`\\ = 0 \escapechar = `\\ \begindoublecolumns \input \jobname.#1s \enddoublecolumns \fi \fi \closein 1 \endgroup} % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. \def\initial#1{{% % Some minor font changes for the special characters. \let\tentt=\sectt \let\tt=\sectt \let\sf=\sectt % % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. \nobreak \vskip 0pt plus 3\baselineskip \penalty 0 \vskip 0pt plus -3\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus .5\baselineskip \leftline{\secbf #1}% % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip }} % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % % A straightforward implementation would start like this: % \def\entry#1#2{... % But this freezes the catcodes in the argument, and can cause problems to % @code, which sets - active. This problem was fixed by a kludge--- % ``-'' was active throughout whole index, but this isn't really right. % % The right solution is to prevent \entry from swallowing the whole text. % --kasal, 21nov03 \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % Do not fill out the last line with white space. \parfillskip = 0in % % No extra space above this paragraph. \parskip = 0in % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % \hangindent is only relevant when the entry text and page number % don't both fit on one line. In that case, bob suggests starting the % dots pretty far over on the line. Unfortunately, a large % indentation looks wrong when the entry text itself is broken across % lines. So we use a small indentation and put up with long leaders. % % \hangafter is reset to 1 (which is the value we want) at the start % of each paragraph, so we need not do anything with that. \hangindent = 2em % % When the entry text needs to be broken, just fill out the first line % with blank space. \rightskip = 0pt plus1fil % % A bit of stretch before each entry for the benefit of balancing % columns. \vskip 0pt plus1pt % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\doentry{% \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. } \def\finishentry#1{% % #1 is the page number. % % The following is kludged to not output a line of dots in the index if % there are no page numbers. The next person who breaks this will be % cursed by a Unix daemon. \setbox\boxA = \hbox{#1}% \ifdim\wd\boxA = 0pt \ % \else % % If we must, put the page number on a line of its own, and fill out % this line with blank space. (The \hfil is overwhelmed with the % fill leaders glue in \indexdotfill if the page number does fit.) \hfil\penalty50 \null\nobreak\indexdotfill % Have leaders before the page number. % % The `\ ' here is removed by the implicit \unskip that TeX does as % part of (the primitive) \par. Without it, a spurious underfull % \hbox ensues. \ifpdf \pdfgettoks#1.% \ \the\toksA \else \ #1% \fi \fi \par \endgroup } % Like plain.tex's \dotfill, except uses up at least 1 em. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1fill} \def\primary #1{\line{#1\hfil}} \newskip\secondaryindent \secondaryindent=0.5cm \def\secondary#1#2{{% \parfillskip=0in \parskip=0in \hangindent=1in \hangafter=1 \noindent\hskip\secondaryindent\hbox{#1}\indexdotfill \ifpdf \pdfgettoks#2.\ \the\toksA % The page number ends the paragraph. \else #2 \fi \par }} % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % Grab any single-column material above us. \output = {% % % Here is a possibility not foreseen in manmac: if we accumulate a % whole lot of material, we might end up calling this \output % routine twice in a row (see the doublecol-lose test, which is % essentially a couple of indexes with @setchapternewpage off). In % that case we just ship out what is in \partialpage with the normal % output routine. Generally, \partialpage will be empty when this % runs and this will be a no-op. See the indexspread.tex test case. \ifvoid\partialpage \else \onepageout{\pagecontents\partialpage}% \fi % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Double the \vsize as well. (We don't need a separate register here, % since nobody clobbers \vsize.) \vsize = 2\vsize } % The double-column output routine for all double-column pages except % the last. % \def\doublecolumnout{% \splittopskip=\topskip \splitmaxdepth=\maxdepth % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \dimen@ = \vsize \divide\dimen@ by 2 \advance\dimen@ by -\ht\partialpage % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit255 to\dimen@ \setbox2=\vsplit255 to\dimen@ \onepageout\pagesofar \unvbox255 \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\pagewidth{\box0\hfil\box2}% } % % All done with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \pageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. Leave it on the % current page, no automatic page break. \balancecolumns % % If we end up splitting too much material for the current page, % though, there will be another page break right after this \output % invocation ends. Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. (We hope \balancecolumns will never be % called on to balance too much material, but if it is, this makes % the output somewhat more palatable.) \global\output = {\onepageout{\pagecontents\PAGE}}% }% \eject \endgroup % started in \begindoublecolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize (after the % \endgroup where \vsize got restored). \pagegoal = \vsize } % % Called at the end of the double column material. \def\balancecolumns{% \setbox0 = \vbox{\unvbox255}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to %debug\message{final 2-column material height=\the\ht0, target=\the\dimen@.}% \splittopskip = \topskip % Loop until we get a decent breakpoint. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht3>\dimen@ \global\advance\dimen@ by 1pt \repeat }% %debug\message{split to \the\dimen@, column heights: \the\ht1, \the\ht3.}% \setbox0=\vbox to\dimen@{\unvbox1}% \setbox2=\vbox to\dimen@{\unvbox3}% % \pagesofar } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % \unnumberedno is an oxymoron, of course. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} \let\up=\raisesections % original BFox name % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} \let\down=\lowersections % original BFox name % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achive this, remember the "biggest" unnum. sec. we are currently in: \chardef\unmlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unmlevel \chardef\unmlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unmlevel \def\headtype{U}% \else \chardef\unmlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % \message{\putwordChapter\space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally apphead0 calls appendixzzz \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % \def\appendixnum{\putwordAppendix\space \appendixletter}% \message{\appendixnum}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } \outer\parseargdef\unnumbered{\unnmhead0{#1}} % normally unnmhead0 calls unnumberedzzz \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% % Well, we could do the following in a group, but that would break % an assumption that \chapmacro is called at the outermost level. % Thus we are safer this way: --kasal, 24feb04 \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } \outer\parseargdef\appendixsection{\apphead1{#1}} % normally calls appendixsectionzzz \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} % normally calls unnumberedseczzz \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. \outer\parseargdef\numberedsubsec{\numhead2{#1}} % normally calls numberedsubseczzz \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } \outer\parseargdef\appendixsubsec{\apphead2{#1}} % normally calls appendixsubseczzz \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} %normally calls unnumberedsubseczzz \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} % normally numberedsubsubseczzz \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} % normally appendixsubsubseczzz \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} %normally unnumberedsubsubseczzz \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading % NOTE on use of \vbox for chapter headings, section headings, and such: % 1) We use \vbox rather than the earlier \line to permit % overlong headings to fold. % 2) \hyphenpenalty is set to 10000 because hyphenation in a % heading is obnoxious; this forbids it. % 3) Likewise, headings look best if no \parindent is used, and % if justification is not attempted. Hence \raggedright. \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rmisbold #1\hfill}}% \bigskip \par\penalty 200\relax \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. %%% Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} %%% Define plain chapter starts, and page on/off switching for it % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip \def\chapbreak{\dobreak \chapheadingskip {-4000}} \def\chappager{\par\vfill\supereject} % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \evenheadline={\hfil}\evenfootline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}% \hbox to 0pt{}% \chappager \endgroup \fi } \def\setchapternewpage #1 {\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\let\pagealignmacro=\chappager} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\let\pagealignmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\let\pagealignmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yomitfromtockeyword{Yomitfromtoc} \def\Yappendixkeyword{Yappendix} % \def\chapmacro#1#2#3{% % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \gdef\lastsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\lastchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% \gdef\noexpand\thischapter{\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\lastchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% \gdef\noexpand\thischapter{\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\lastchapterdefs \let\prevsectiondefs=\lastsectiondefs \domark % {% \chapfonts \rmisbold % % Have to define \lastsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\lastsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % I don't think this chapter style is supported any more, so I'm not % updating it with the new noderef stuff. We'll see. --karl, 11aug03. % \def\setchapterstyle #1 {\csname CHAPF#1\endcsname} % \def\unnchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt\raggedright \rmisbold #1\hfill}}\bigskip \par\nobreak } \def\chfopen #1#2{\chapoddpage {\chapfonts \vbox to 3in{\vfil \hbox to\hsize{\hfil #2} \hbox to\hsize{\hfil #1} \vfil}}% \par\penalty 5000 % } \def\centerchfopen #1{% \chapoddpage {\chapfonts \vbox{\hyphenpenalty=10000\tolerance=5000 \parindent=0pt \hfill {\rmisbold #1}\hfill}}\bigskip \par\nobreak } \def\CHAPFopen{% \global\let\chapmacro=\chfopen \global\let\centerchapmacro=\centerchfopen} % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text, #2 is the section level (sec/subsec/subsubsec), #3 is % the section type for xrefs (Ynumbered, Ynothing, Yappendix), #4 is the % section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% % Switch to the right set of fonts. \csname #2fonts\endcsname \rmisbold % \def\sectionlevel{#2}% \def\temptype{#3}% % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\lastsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\lastsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\lastsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% \gdef\noexpand\thissection{\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevsectiondefs=\lastsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\lastsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \lastsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\lastsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\lastsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \raggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) \vskip-\parskip % % This is purely so the last item on the list is a known \penalty > % 10000. This is so \startdefun can avoid allowing breakpoints after % section headings. Otherwise, it would insert a valid breakpoint between: % % @section sec-whatever % @deffn def-whatever \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdf \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. Thus, we maintain % \contentsalignmacro in parallel with \pagealignmacro. % From: Torbjorn Granlund \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \advance\hsize by -\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \lastnegativepageno = \pageno \global\pageno = \savepageno } \let\shortcontents = \summarycontents % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\labelspace#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % Markup style infrastructure. \defmarkupstylesetup\INITMACRO will % define and register \INITMACRO to be called on markup style changes. % \INITMACRO can check \currentmarkupstyle for the innermost % style and the set of \ifmarkupSTYLE switches for all styles % currently in effect. \newif\ifmarkupvar \newif\ifmarkupsamp \newif\ifmarkupkey %\newif\ifmarkupfile % @file == @samp. %\newif\ifmarkupoption % @option == @samp. \newif\ifmarkupcode \newif\ifmarkupkbd %\newif\ifmarkupenv % @env == @code. %\newif\ifmarkupcommand % @command == @code. \newif\ifmarkuptex % @tex (and part of @math, for now). \newif\ifmarkupexample \newif\ifmarkupverb \newif\ifmarkupverbatim \let\currentmarkupstyle\empty \def\setupmarkupstyle#1{% \csname markup#1true\endcsname \def\currentmarkupstyle{#1}% \markupstylesetup } \let\markupstylesetup\empty \def\defmarkupstylesetup#1{% \expandafter\def\expandafter\markupstylesetup \expandafter{\markupstylesetup #1}% \def#1% } % Markup style setup for left and right quotes. \defmarkupstylesetup\markupsetuplq{% \expandafter\let\expandafter \temp \csname markupsetuplq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuplqdefault \else \temp \fi } \defmarkupstylesetup\markupsetuprq{% \expandafter\let\expandafter \temp \csname markupsetuprq\currentmarkupstyle\endcsname \ifx\temp\relax \markupsetuprqdefault \else \temp \fi } { \catcode`\'=\active \catcode`\`=\active \gdef\markupsetuplqdefault{\let`\lq} \gdef\markupsetuprqdefault{\let'\rq} \gdef\markupsetcodequoteleft{\let`\codequoteleft} \gdef\markupsetcodequoteright{\let'\codequoteright} \gdef\markupsetnoligaturesquoteleft{\let`\noligaturesquoteleft} } \let\markupsetuplqcode \markupsetcodequoteleft \let\markupsetuprqcode \markupsetcodequoteright \let\markupsetuplqexample \markupsetcodequoteleft \let\markupsetuprqexample \markupsetcodequoteright \let\markupsetuplqverb \markupsetcodequoteleft \let\markupsetuprqverb \markupsetcodequoteright \let\markupsetuplqverbatim \markupsetcodequoteleft \let\markupsetuprqverbatim \markupsetcodequoteright \let\markupsetuplqsamp \markupsetnoligaturesquoteleft \let\markupsetuplqkbd \markupsetnoligaturesquoteleft % Allow an option to not replace quotes with a regular directed right % quote/apostrophe (char 0x27), but instead use the undirected quote % from cmtt (char 0x0d). The undirected quote is ugly, so don't make it % the default, but it works for pasting with more pdf viewers (at least % evince), the lilypond developers report. xpdf does work with the % regular 0x27. % \def\codequoteright{% \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\tentt \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf error\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @tex ... @end tex escapes into raw Tex temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain tex @ character. \envdef\tex{% \setupmarkupstyle{tex}% \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode`\`=\other \catcode`\'=\other \escapechar=`\\ % \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\*=\ptexstar \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} \let\afterenvbreak = \aboveenvbreak % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. \font\circle=lcircle10 \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \circthick=\fontdimen8\circle % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip \envdef\cartouche{% \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % Flag to tell @lisp, etc., not to narrow margin. \let\nonarrowing = t% \vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of \def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \def\nonfillstart{% \aboveenvbreak \hfuzz = 12pt % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt \parindent = 0pt \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it by one command: \def\makedispenv #1#2{ \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2} \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2} \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two synonyms: \def\maketwodispenvs #1#2#3{ \makedispenv{#1}{#3} \makedispenv{#2}{#3} } % @lisp: indented, narrowed, typewriter font; @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvs {lisp}{example}{% \nonfillstart \tt\setupmarkupstyle{example}% \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \gobble % eat return } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenv {display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenv{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill \gobble } \let\Eflushright = \afterenvbreak % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \def\quotationstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \advance\rightskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi \parsearg\quotationlabel } \envdef\quotation{% \setnormaldispenv \quotationstart } \envdef\smallquotation{% \setsmalldispenv \quotationstart } \let\Esmallquotation = \Equotation % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\undefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setupmarkupstyle{verb}% \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % \def\starttabbox{\setbox0=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen0=\wd0 % the width so far, or since the previous tab \divide\dimen0 by\tabw \multiply\dimen0 by\tabw % compute previous multiple of \tabw \advance\dimen0 by\tabw % advance to next multiple of \tabw \wd0=\dimen0 \box0 \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart % Easiest (and conventionally used) font for verbatim \tt \def\par{\leavevmode\egroup\box0\endgraf}% \tabexpand \setupmarkupstyle{verbatim}% % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces \everypar{\starttabbox}% } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{#2\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. \endgroup % \envdef\verbatim{% \setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim \indexnofonts % Allow `@@' and other weird things in file names. \input #1 \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is very desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a minor refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } %%% Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% % Remember that \dosubind{fn}{foo}{} is equivalent to \doind{fn}{foo}. \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } %%% Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } %%% Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } %%% Type: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % How we'll format the type name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % (plain.tex says that \dimen1 should be used only as global.) \parshape 2 0in \dimen0 \defargsindent \dimen2 % % Put the type name to the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% return value type \ifx\temp\empty\else \tclose{\temp} \fi #3% output function name }% {\rm\enskip}% hskip 0.5 em of \tenrm % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. Let's try @var for that. \def\var##1{{\setupmarkupstyle{var}\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\undefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \def\scanmacro#1{% \begingroup \newlinechar`\^^M \let\xeatspaces\eatspaces % Undo catcode changes of \startcontents and \doprintindex % When called from @insertcopying or (short)caption, we need active % backslash to get it printed correctly. Previously, we had % \catcode`\\=\other instead. We'll see whether a problem appears % with macro expansion. --kasal, 19aug04 \catcode`\@=0 \catcode`\\=\active \escapechar=`\@ % ... and \example \spaceisspace % % Append \endinput to make sure that TeX does not see the ending newline. % I've verified that it is necessary both for e-TeX and for ordinary TeX % --kasal, 29nov03 \scantokens{#1\endinput}% \endgroup } \def\scanexp#1{% \edef\temp{\noexpand\scanmacro{#1}}% \temp } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \definedummyword\macro1\definedummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\definedummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \. % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. \def\scanctxt{% \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\@=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \ifx\declaredencoding\ascii \else \setnonasciicharscatcodenonglobal\other \fi } \def\scanargctxt{% \scanctxt \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% \scanctxt \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } \def\macroargctxt{% \scanctxt \catcode`\\=\other } % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0% \else \expandafter\parsemargdef \argl;% \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\definedummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\definedummyword \noexpand#1% \fi } % This makes use of the obscure feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname #1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % Parse the optional {params} list. Set up \paramno and \paramlist % so \defmacro knows what to do. Define \macarg.blah for each blah % in the params list, to be ##N where N is the position in that list. % That gets used by \mbodybackslash (above). % We need to get `macro parameter char #' into several definitions. % The technique used is stolen from LaTeX: let \hash be something % unexpandable, insert that wherever you need a #, and then redefine % it to # just before using the token list produced. % % The same technique is used to protect \eatspaces till just before % the macro is used. \def\parsemargdef#1;{\paramno=0\def\paramlist{}% \let\hash\relax\let\xeatspaces\relax\parsemargdefxxx#1,;,} \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1% \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % These two commands read recursive and nonrecursive macro bodies. % (They're different since rec and nonrec macros end differently.) \long\def\parsemacbody#1@end macro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% \long\def\parsermacbody#1@end rmacro% {\xdef\temp{\eatcr{#1}}\endgroup\defmacro}% % This defines the macro itself. There are six cases: recursive and % nonrecursive macros of zero, one, and many arguments. % Much magic with \expandafter here. % \xdef is used so that macro definitions will survive the file % they're defined in; @include reads the file inside a group. \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifrecursive \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\scanmacro{\temp}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup\noexpand\scanmacro{\temp}}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{\egroup\noexpand\scanmacro{\temp}}% \fi \else \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \noexpand\braceorline \expandafter\noexpand\csname\the\macname xxx\endcsname}% \expandafter\xdef\csname\the\macname xxx\endcsname##1{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \else % many \expandafter\xdef\csname\the\macname\endcsname{% \bgroup\noexpand\macroargctxt \expandafter\noexpand\csname\the\macname xx\endcsname}% \expandafter\xdef\csname\the\macname xx\endcsname##1{% \expandafter\noexpand\csname\the\macname xxx\endcsname ##1,}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname xxx\endcsname \paramlist{% \egroup \noexpand\norecurse{\the\macname}% \noexpand\scanmacro{\temp}\egroup}% \fi \fi} \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} % \braceorline decides whether the next nonwhitespace character is a % {. If so it reads up to the closing }, if not, it reads the whole % line. Whatever was read is then fed to the next control sequence % as an argument (by \parsebrace or \parsearg) \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup\else \expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Just make them active and then expand them all to nothing. \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{\putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}} \let\nwnode=\node \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \lastsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \atdummies % preserve commands, but don't expand them \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\lastsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, during \shipout }% \fi } % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref#1{\putwordsee{} \xrefX[#1,,,,,,,]} \def\xref#1{\putwordSee{} \xrefX[#1,,,,,,,]} \def\ref#1{\xrefX[#1,,,,,,,]} \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces \def\printedmanual{\ignorespaces #5}% \def\printedrefname{\ignorespaces #3}% \setbox1=\hbox{\printedmanual\unskip}% \setbox0=\hbox{\printedrefname\unskip}% \ifdim \wd0 = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname\relax % Use the node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Use the actual chapter/section title appear inside % the square brackets. Use the real section title if we have it. \ifdim \wd1 > 0pt % It is in another manual, so we don't have it. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}{}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf {\indexnofonts \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. \getfilename{#4}% % % See comments at \activebackslashdouble. {\activebackslashdouble \xdef\pdfxrefdest{#1}% \backslashparens\pdfxrefdest}% % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfxrefdest}% \else goto name{\pdfmkpgn{\pdfxrefdest}}% \fi }% \setcolor{\linkcolor}% \fi % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". We distinguish them by the % LABEL-title being set to a magic string. {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd0 = 0pt \refx{#1-snt}{}% \else \printedrefname \fi % % if the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd1 > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox0 and \unhbox1 to print the node names, TeX does not % insert empty discretionaries after hyphens, which means that it will % not find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, this % is a loss. Therefore, we give the text of the node name again, so it % is as if TeX is seeing it for the first time. \ifdim \wd1 > 0pt \putwordSection{} ``\printedrefname'' \putwordin{} \cite{\printedmanual}% \else % _ (for example) has to be the character _ for the purposes of the % control sequence corresponding to the node, but it has to expand % into the usual \leavevmode...\vrule stuff for purposes of % printing. So we \turnoffactive for the \refx-snt, back on for the % printing, back off for the \refx-pg. {\turnoffactive % Only output a following space if the -snt ref is nonempty; for % @unnumbered and @anchor, it won't be. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}{}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi }% % output the `[mynode]' via a macro so it can be overridden. \xrefprintnodename\printedrefname % % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}{}% \fi \fi \endlink \endgroup} % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % Define \refx{NAME}{SUFFIX} to reference a cross-reference string named NAME. % If its value is nonempty, SUFFIX is output afterward. % \def\refx#1#2{% {% \indexnofonts \otherbackslash \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs \message{\linenumber Undefined cross reference `#1'.}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi #2% Output the suffix in any case. } % This is the macro invoked by entries in the aux file. Usually it's % just a \def (we prepend XR to the control sequence name to avoid % collisions). But if this is a float type, we have more work to do. % \def\xrdef#1#2{% {% The node name might contain 8-bit characters, which in our current % implementation are changed to commands like @'e. Don't let these % mess up the control sequence name. \indexnofonts \turnoffactive \xdef\safexrefname{#1}% }% % \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% remember this xref % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other % It was suggested to set the catcode of ^ to 7, which would allow ^^e4 etc. % in xref tags, i.e., node names. But since ^^e4 notation isn't % supported in the main text, it doesn't seem desirable. Furthermore, % that is not enough: for node names that actually contain a ^ % character, we would end up writing a line like this: 'xrdef {'hat % b-title}{'hat b} and \xrdef does a \csname...\endcsname on the first % argument, and \hat is not an expandable control sequence. It could % all be worked out, but why? Either we support ^^ or we don't. % % The other change necessary for this was to define \auxhat: % \def\auxhat{\def^{'hat }}% extra space so ok if followed by letter % and then to call \auxhat in \setq. % \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % % This is to support \ in node names and titles, since the \ % characters end up in a \csname. It's easier than % leaving it active and making its active definition an actual \ % character. What I don't understand is why it works in the *value* % of the xrdef. Seems like it should be a catcode12 \, and that % should not typeset properly. But it works, so I'm moving on for % now. --karl, 15jan04. \catcode`\\=\other % % Make the characters 128-255 be printing characters. {% \count1=128 \def\loop{% \catcode\count1=\other \advance\count1 by 1 \ifnum \count1<256 \loop \fi }% }% % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \let\indent=\ptexindent \let\noindent=\ptexnoindent \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\pagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut \futurelet\next\fo@t } }%end \catcode `\@=11 % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from ftp://tug.org/tex/epsf.tex.} % \def\image#1{% \ifx\epsfbox\undefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing this stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names % If the image is by itself, center it. \ifvmode \imagevmodetrue \nobreak\medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \nobreak\vskip\parskip \nobreak \fi % % Leave vertical mode so that indentation from an enclosing % environment such as @quotation is respected. On the other hand, if % it's at the top level, we don't want the normal paragraph indentation. \noindent % % Output the image. \ifpdf \dopdfimage{#1}{#2}{#3}% \else % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}\ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \fi % \ifimagevmode \medskip \fi % space after the standalone image \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \lastsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\lastsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \atdummies % % since we read the caption text in the macro world, where ^^M % is turned into a normal character, we have to scan it back, so % we don't write the literal three characters "^^M" into the aux file. \scanexp{% \xdef\noexpand\gtemp{% \ifx\thisshortcaption\empty \thiscaption \else \thisshortcaption \fi }% }% \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % % place the captured inserts % % BEWARE: when the floats start floating, we have to issue warning % whenever an insert appears inside a float which could possibly % float. --kasal, 26may04 % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \lastsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{\begingroup \let_=\normalunderscore % normal _ character for filenames \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore{#1_\finish}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX \endgroup} } % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \def\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \input txi-#1.tex \fi \closein 1 } % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \parseargdef\documentencoding{% % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \setnonasciicharscatcode\active \utfeightchardefs % \else \message{Unknown document encoding #1, ignoring.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii } % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing in OT1 encoding: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdef^^a0{~} \gdef^^a1{\exclamdown} \gdef^^a2{\missingcharmsg{CENT SIGN}} \gdef^^a3{{\pounds}} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\missingcharmsg{YEN SIGN}} \gdef^^a6{\missingcharmsg{BROKEN BAR}} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\copyright} \gdef^^aa{\ordf} \gdef^^ab{\guillemetleft} \gdef^^ac{$\lnot$} \gdef^^ad{\-} \gdef^^ae{\registeredsymbol} \gdef^^af{\={}} % \gdef^^b0{\textdegree} \gdef^^b1{$\pm$} \gdef^^b2{$^2$} \gdef^^b3{$^3$} \gdef^^b4{\'{}} \gdef^^b5{$\mu$} \gdef^^b6{\P} % \gdef^^b7{$^.$} \gdef^^b8{\cedilla\ } \gdef^^b9{$^1$} \gdef^^ba{\ordm} % \gdef^^bb{\guilletright} \gdef^^bc{$1\over4$} \gdef^^bd{$1\over2$} \gdef^^be{$3\over4$} \gdef^^bf{\questiondown} % \gdef^^c0{\`A} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\~A} \gdef^^c4{\"A} \gdef^^c5{\ringaccent A} \gdef^^c6{\AE} \gdef^^c7{\cedilla C} \gdef^^c8{\`E} \gdef^^c9{\'E} \gdef^^ca{\^E} \gdef^^cb{\"E} \gdef^^cc{\`I} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\"I} % \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER ETH}} \gdef^^d1{\~N} \gdef^^d2{\`O} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\~O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\O} \gdef^^d9{\`U} \gdef^^da{\'U} \gdef^^db{\^U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\missingcharmsg{LATIN CAPITAL LETTER THORN}} \gdef^^df{\ss} % \gdef^^e0{\`a} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\~a} \gdef^^e4{\"a} \gdef^^e5{\ringaccent a} \gdef^^e6{\ae} \gdef^^e7{\cedilla c} \gdef^^e8{\`e} \gdef^^e9{\'e} \gdef^^ea{\^e} \gdef^^eb{\"e} \gdef^^ec{\`{\dotless i}} \gdef^^ed{\'{\dotless i}} \gdef^^ee{\^{\dotless i}} \gdef^^ef{\"{\dotless i}} % \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER ETH}} \gdef^^f1{\~n} \gdef^^f2{\`o} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\~o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\o} \gdef^^f9{\`u} \gdef^^fa{\'u} \gdef^^fb{\^u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\missingcharmsg{LATIN SMALL LETTER THORN}} \gdef^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdef^^a4{\euro} \gdef^^a6{\v S} \gdef^^a8{\v s} \gdef^^b4{\v Z} \gdef^^b8{\v z} \gdef^^bc{\OE} \gdef^^bd{\oe} \gdef^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdef^^a0{~} \gdef^^a1{\ogonek{A}} \gdef^^a2{\u{}} \gdef^^a3{\L} \gdef^^a4{\missingcharmsg{CURRENCY SIGN}} \gdef^^a5{\v L} \gdef^^a6{\'S} \gdef^^a7{\S} \gdef^^a8{\"{}} \gdef^^a9{\v S} \gdef^^aa{\cedilla S} \gdef^^ab{\v T} \gdef^^ac{\'Z} \gdef^^ad{\-} \gdef^^ae{\v Z} \gdef^^af{\dotaccent Z} % \gdef^^b0{\textdegree} \gdef^^b1{\ogonek{a}} \gdef^^b2{\ogonek{ }} \gdef^^b3{\l} \gdef^^b4{\'{}} \gdef^^b5{\v l} \gdef^^b6{\'s} \gdef^^b7{\v{}} \gdef^^b8{\cedilla\ } \gdef^^b9{\v s} \gdef^^ba{\cedilla s} \gdef^^bb{\v t} \gdef^^bc{\'z} \gdef^^bd{\H{}} \gdef^^be{\v z} \gdef^^bf{\dotaccent z} % \gdef^^c0{\'R} \gdef^^c1{\'A} \gdef^^c2{\^A} \gdef^^c3{\u A} \gdef^^c4{\"A} \gdef^^c5{\'L} \gdef^^c6{\'C} \gdef^^c7{\cedilla C} \gdef^^c8{\v C} \gdef^^c9{\'E} \gdef^^ca{\ogonek{E}} \gdef^^cb{\"E} \gdef^^cc{\v E} \gdef^^cd{\'I} \gdef^^ce{\^I} \gdef^^cf{\v D} % \gdef^^d0{\missingcharmsg{LATIN CAPITAL LETTER D WITH STROKE}} \gdef^^d1{\'N} \gdef^^d2{\v N} \gdef^^d3{\'O} \gdef^^d4{\^O} \gdef^^d5{\H O} \gdef^^d6{\"O} \gdef^^d7{$\times$} \gdef^^d8{\v R} \gdef^^d9{\ringaccent U} \gdef^^da{\'U} \gdef^^db{\H U} \gdef^^dc{\"U} \gdef^^dd{\'Y} \gdef^^de{\cedilla T} \gdef^^df{\ss} % \gdef^^e0{\'r} \gdef^^e1{\'a} \gdef^^e2{\^a} \gdef^^e3{\u a} \gdef^^e4{\"a} \gdef^^e5{\'l} \gdef^^e6{\'c} \gdef^^e7{\cedilla c} \gdef^^e8{\v c} \gdef^^e9{\'e} \gdef^^ea{\ogonek{e}} \gdef^^eb{\"e} \gdef^^ec{\v e} \gdef^^ed{\'\i} \gdef^^ee{\^\i} \gdef^^ef{\v d} % \gdef^^f0{\missingcharmsg{LATIN SMALL LETTER D WITH STROKE}} \gdef^^f1{\'n} \gdef^^f2{\v n} \gdef^^f3{\'o} \gdef^^f4{\^o} \gdef^^f5{\H o} \gdef^^f6{\"o} \gdef^^f7{$\div$} \gdef^^f8{\v r} \gdef^^f9{\ringaccent u} \gdef^^fa{\'u} \gdef^^fb{\H u} \gdef^^fc{\"u} \gdef^^fd{\'y} \gdef^^fe{\cedilla t} \gdef^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } \begingroup \catcode`\~13 \catcode`\"12 \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiTwoOctets\string~}} \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiThreeOctets\string~}} \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \xdef~{\noexpand\UTFviiiFourOctets\string~}} \UTFviiiLoop \endgroup \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacter#1#2{% \countUTFz = "#1\relax \wlog{\space\space defining Unicode char U+#1 (decimal \the\countUTFz)}% \begingroup \parseXMLCharref \def\UTFviiiTwoOctets##1##2{% \csname u8:##1\string ##2\endcsname}% \def\UTFviiiThreeOctets##1##2##3{% \csname u8:##1\string ##2\string ##3\endcsname}% \def\UTFviiiFourOctets##1##2##3##4{% \csname u8:##1\string ##2\string ##3\string ##4\endcsname}% \expandafter\expandafter\expandafter\expandafter \expandafter\expandafter\expandafter \gdef\UTFviiiTmp{#2}% \endgroup} \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctets.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctets.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctets.{!,;}% \fi\fi\fi } \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz \multiply\countUTFz by 64 \advance\countUTFx by -\countUTFz \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup \def\utfeightchardefs{% \DeclareUnicodeCharacter{00A0}{\tie} \DeclareUnicodeCharacter{00A1}{\exclamdown} \DeclareUnicodeCharacter{00A3}{\pounds} \DeclareUnicodeCharacter{00A8}{\"{ }} \DeclareUnicodeCharacter{00A9}{\copyright} \DeclareUnicodeCharacter{00AA}{\ordf} \DeclareUnicodeCharacter{00AB}{\guillemetleft} \DeclareUnicodeCharacter{00AD}{\-} \DeclareUnicodeCharacter{00AE}{\registeredsymbol} \DeclareUnicodeCharacter{00AF}{\={ }} \DeclareUnicodeCharacter{00B0}{\ringaccent{ }} \DeclareUnicodeCharacter{00B4}{\'{ }} \DeclareUnicodeCharacter{00B8}{\cedilla{ }} \DeclareUnicodeCharacter{00BA}{\ordm} \DeclareUnicodeCharacter{00BB}{\guillemetright} \DeclareUnicodeCharacter{00BF}{\questiondown} \DeclareUnicodeCharacter{00C0}{\`A} \DeclareUnicodeCharacter{00C1}{\'A} \DeclareUnicodeCharacter{00C2}{\^A} \DeclareUnicodeCharacter{00C3}{\~A} \DeclareUnicodeCharacter{00C4}{\"A} \DeclareUnicodeCharacter{00C5}{\AA} \DeclareUnicodeCharacter{00C6}{\AE} \DeclareUnicodeCharacter{00C7}{\cedilla{C}} \DeclareUnicodeCharacter{00C8}{\`E} \DeclareUnicodeCharacter{00C9}{\'E} \DeclareUnicodeCharacter{00CA}{\^E} \DeclareUnicodeCharacter{00CB}{\"E} \DeclareUnicodeCharacter{00CC}{\`I} \DeclareUnicodeCharacter{00CD}{\'I} \DeclareUnicodeCharacter{00CE}{\^I} \DeclareUnicodeCharacter{00CF}{\"I} \DeclareUnicodeCharacter{00D1}{\~N} \DeclareUnicodeCharacter{00D2}{\`O} \DeclareUnicodeCharacter{00D3}{\'O} \DeclareUnicodeCharacter{00D4}{\^O} \DeclareUnicodeCharacter{00D5}{\~O} \DeclareUnicodeCharacter{00D6}{\"O} \DeclareUnicodeCharacter{00D8}{\O} \DeclareUnicodeCharacter{00D9}{\`U} \DeclareUnicodeCharacter{00DA}{\'U} \DeclareUnicodeCharacter{00DB}{\^U} \DeclareUnicodeCharacter{00DC}{\"U} \DeclareUnicodeCharacter{00DD}{\'Y} \DeclareUnicodeCharacter{00DF}{\ss} \DeclareUnicodeCharacter{00E0}{\`a} \DeclareUnicodeCharacter{00E1}{\'a} \DeclareUnicodeCharacter{00E2}{\^a} \DeclareUnicodeCharacter{00E3}{\~a} \DeclareUnicodeCharacter{00E4}{\"a} \DeclareUnicodeCharacter{00E5}{\aa} \DeclareUnicodeCharacter{00E6}{\ae} \DeclareUnicodeCharacter{00E7}{\cedilla{c}} \DeclareUnicodeCharacter{00E8}{\`e} \DeclareUnicodeCharacter{00E9}{\'e} \DeclareUnicodeCharacter{00EA}{\^e} \DeclareUnicodeCharacter{00EB}{\"e} \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}} \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}} \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}} \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}} \DeclareUnicodeCharacter{00F1}{\~n} \DeclareUnicodeCharacter{00F2}{\`o} \DeclareUnicodeCharacter{00F3}{\'o} \DeclareUnicodeCharacter{00F4}{\^o} \DeclareUnicodeCharacter{00F5}{\~o} \DeclareUnicodeCharacter{00F6}{\"o} \DeclareUnicodeCharacter{00F8}{\o} \DeclareUnicodeCharacter{00F9}{\`u} \DeclareUnicodeCharacter{00FA}{\'u} \DeclareUnicodeCharacter{00FB}{\^u} \DeclareUnicodeCharacter{00FC}{\"u} \DeclareUnicodeCharacter{00FD}{\'y} \DeclareUnicodeCharacter{00FF}{\"y} \DeclareUnicodeCharacter{0100}{\=A} \DeclareUnicodeCharacter{0101}{\=a} \DeclareUnicodeCharacter{0102}{\u{A}} \DeclareUnicodeCharacter{0103}{\u{a}} \DeclareUnicodeCharacter{0104}{\ogonek{A}} \DeclareUnicodeCharacter{0105}{\ogonek{a}} \DeclareUnicodeCharacter{0106}{\'C} \DeclareUnicodeCharacter{0107}{\'c} \DeclareUnicodeCharacter{0108}{\^C} \DeclareUnicodeCharacter{0109}{\^c} \DeclareUnicodeCharacter{0118}{\ogonek{E}} \DeclareUnicodeCharacter{0119}{\ogonek{e}} \DeclareUnicodeCharacter{010A}{\dotaccent{C}} \DeclareUnicodeCharacter{010B}{\dotaccent{c}} \DeclareUnicodeCharacter{010C}{\v{C}} \DeclareUnicodeCharacter{010D}{\v{c}} \DeclareUnicodeCharacter{010E}{\v{D}} \DeclareUnicodeCharacter{0112}{\=E} \DeclareUnicodeCharacter{0113}{\=e} \DeclareUnicodeCharacter{0114}{\u{E}} \DeclareUnicodeCharacter{0115}{\u{e}} \DeclareUnicodeCharacter{0116}{\dotaccent{E}} \DeclareUnicodeCharacter{0117}{\dotaccent{e}} \DeclareUnicodeCharacter{011A}{\v{E}} \DeclareUnicodeCharacter{011B}{\v{e}} \DeclareUnicodeCharacter{011C}{\^G} \DeclareUnicodeCharacter{011D}{\^g} \DeclareUnicodeCharacter{011E}{\u{G}} \DeclareUnicodeCharacter{011F}{\u{g}} \DeclareUnicodeCharacter{0120}{\dotaccent{G}} \DeclareUnicodeCharacter{0121}{\dotaccent{g}} \DeclareUnicodeCharacter{0124}{\^H} \DeclareUnicodeCharacter{0125}{\^h} \DeclareUnicodeCharacter{0128}{\~I} \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}} \DeclareUnicodeCharacter{012A}{\=I} \DeclareUnicodeCharacter{012B}{\={\dotless{i}}} \DeclareUnicodeCharacter{012C}{\u{I}} \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}} \DeclareUnicodeCharacter{0130}{\dotaccent{I}} \DeclareUnicodeCharacter{0131}{\dotless{i}} \DeclareUnicodeCharacter{0132}{IJ} \DeclareUnicodeCharacter{0133}{ij} \DeclareUnicodeCharacter{0134}{\^J} \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}} \DeclareUnicodeCharacter{0139}{\'L} \DeclareUnicodeCharacter{013A}{\'l} \DeclareUnicodeCharacter{0141}{\L} \DeclareUnicodeCharacter{0142}{\l} \DeclareUnicodeCharacter{0143}{\'N} \DeclareUnicodeCharacter{0144}{\'n} \DeclareUnicodeCharacter{0147}{\v{N}} \DeclareUnicodeCharacter{0148}{\v{n}} \DeclareUnicodeCharacter{014C}{\=O} \DeclareUnicodeCharacter{014D}{\=o} \DeclareUnicodeCharacter{014E}{\u{O}} \DeclareUnicodeCharacter{014F}{\u{o}} \DeclareUnicodeCharacter{0150}{\H{O}} \DeclareUnicodeCharacter{0151}{\H{o}} \DeclareUnicodeCharacter{0152}{\OE} \DeclareUnicodeCharacter{0153}{\oe} \DeclareUnicodeCharacter{0154}{\'R} \DeclareUnicodeCharacter{0155}{\'r} \DeclareUnicodeCharacter{0158}{\v{R}} \DeclareUnicodeCharacter{0159}{\v{r}} \DeclareUnicodeCharacter{015A}{\'S} \DeclareUnicodeCharacter{015B}{\'s} \DeclareUnicodeCharacter{015C}{\^S} \DeclareUnicodeCharacter{015D}{\^s} \DeclareUnicodeCharacter{015E}{\cedilla{S}} \DeclareUnicodeCharacter{015F}{\cedilla{s}} \DeclareUnicodeCharacter{0160}{\v{S}} \DeclareUnicodeCharacter{0161}{\v{s}} \DeclareUnicodeCharacter{0162}{\cedilla{t}} \DeclareUnicodeCharacter{0163}{\cedilla{T}} \DeclareUnicodeCharacter{0164}{\v{T}} \DeclareUnicodeCharacter{0168}{\~U} \DeclareUnicodeCharacter{0169}{\~u} \DeclareUnicodeCharacter{016A}{\=U} \DeclareUnicodeCharacter{016B}{\=u} \DeclareUnicodeCharacter{016C}{\u{U}} \DeclareUnicodeCharacter{016D}{\u{u}} \DeclareUnicodeCharacter{016E}{\ringaccent{U}} \DeclareUnicodeCharacter{016F}{\ringaccent{u}} \DeclareUnicodeCharacter{0170}{\H{U}} \DeclareUnicodeCharacter{0171}{\H{u}} \DeclareUnicodeCharacter{0174}{\^W} \DeclareUnicodeCharacter{0175}{\^w} \DeclareUnicodeCharacter{0176}{\^Y} \DeclareUnicodeCharacter{0177}{\^y} \DeclareUnicodeCharacter{0178}{\"Y} \DeclareUnicodeCharacter{0179}{\'Z} \DeclareUnicodeCharacter{017A}{\'z} \DeclareUnicodeCharacter{017B}{\dotaccent{Z}} \DeclareUnicodeCharacter{017C}{\dotaccent{z}} \DeclareUnicodeCharacter{017D}{\v{Z}} \DeclareUnicodeCharacter{017E}{\v{z}} \DeclareUnicodeCharacter{01C4}{D\v{Z}} \DeclareUnicodeCharacter{01C5}{D\v{z}} \DeclareUnicodeCharacter{01C6}{d\v{z}} \DeclareUnicodeCharacter{01C7}{LJ} \DeclareUnicodeCharacter{01C8}{Lj} \DeclareUnicodeCharacter{01C9}{lj} \DeclareUnicodeCharacter{01CA}{NJ} \DeclareUnicodeCharacter{01CB}{Nj} \DeclareUnicodeCharacter{01CC}{nj} \DeclareUnicodeCharacter{01CD}{\v{A}} \DeclareUnicodeCharacter{01CE}{\v{a}} \DeclareUnicodeCharacter{01CF}{\v{I}} \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}} \DeclareUnicodeCharacter{01D1}{\v{O}} \DeclareUnicodeCharacter{01D2}{\v{o}} \DeclareUnicodeCharacter{01D3}{\v{U}} \DeclareUnicodeCharacter{01D4}{\v{u}} \DeclareUnicodeCharacter{01E2}{\={\AE}} \DeclareUnicodeCharacter{01E3}{\={\ae}} \DeclareUnicodeCharacter{01E6}{\v{G}} \DeclareUnicodeCharacter{01E7}{\v{g}} \DeclareUnicodeCharacter{01E8}{\v{K}} \DeclareUnicodeCharacter{01E9}{\v{k}} \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}} \DeclareUnicodeCharacter{01F1}{DZ} \DeclareUnicodeCharacter{01F2}{Dz} \DeclareUnicodeCharacter{01F3}{dz} \DeclareUnicodeCharacter{01F4}{\'G} \DeclareUnicodeCharacter{01F5}{\'g} \DeclareUnicodeCharacter{01F8}{\`N} \DeclareUnicodeCharacter{01F9}{\`n} \DeclareUnicodeCharacter{01FC}{\'{\AE}} \DeclareUnicodeCharacter{01FD}{\'{\ae}} \DeclareUnicodeCharacter{01FE}{\'{\O}} \DeclareUnicodeCharacter{01FF}{\'{\o}} \DeclareUnicodeCharacter{021E}{\v{H}} \DeclareUnicodeCharacter{021F}{\v{h}} \DeclareUnicodeCharacter{0226}{\dotaccent{A}} \DeclareUnicodeCharacter{0227}{\dotaccent{a}} \DeclareUnicodeCharacter{0228}{\cedilla{E}} \DeclareUnicodeCharacter{0229}{\cedilla{e}} \DeclareUnicodeCharacter{022E}{\dotaccent{O}} \DeclareUnicodeCharacter{022F}{\dotaccent{o}} \DeclareUnicodeCharacter{0232}{\=Y} \DeclareUnicodeCharacter{0233}{\=y} \DeclareUnicodeCharacter{0237}{\dotless{j}} \DeclareUnicodeCharacter{02DB}{\ogonek{ }} \DeclareUnicodeCharacter{1E02}{\dotaccent{B}} \DeclareUnicodeCharacter{1E03}{\dotaccent{b}} \DeclareUnicodeCharacter{1E04}{\udotaccent{B}} \DeclareUnicodeCharacter{1E05}{\udotaccent{b}} \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}} \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}} \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}} \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}} \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}} \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}} \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}} \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}} \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}} \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}} \DeclareUnicodeCharacter{1E20}{\=G} \DeclareUnicodeCharacter{1E21}{\=g} \DeclareUnicodeCharacter{1E22}{\dotaccent{H}} \DeclareUnicodeCharacter{1E23}{\dotaccent{h}} \DeclareUnicodeCharacter{1E24}{\udotaccent{H}} \DeclareUnicodeCharacter{1E25}{\udotaccent{h}} \DeclareUnicodeCharacter{1E26}{\"H} \DeclareUnicodeCharacter{1E27}{\"h} \DeclareUnicodeCharacter{1E30}{\'K} \DeclareUnicodeCharacter{1E31}{\'k} \DeclareUnicodeCharacter{1E32}{\udotaccent{K}} \DeclareUnicodeCharacter{1E33}{\udotaccent{k}} \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}} \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}} \DeclareUnicodeCharacter{1E36}{\udotaccent{L}} \DeclareUnicodeCharacter{1E37}{\udotaccent{l}} \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}} \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}} \DeclareUnicodeCharacter{1E3E}{\'M} \DeclareUnicodeCharacter{1E3F}{\'m} \DeclareUnicodeCharacter{1E40}{\dotaccent{M}} \DeclareUnicodeCharacter{1E41}{\dotaccent{m}} \DeclareUnicodeCharacter{1E42}{\udotaccent{M}} \DeclareUnicodeCharacter{1E43}{\udotaccent{m}} \DeclareUnicodeCharacter{1E44}{\dotaccent{N}} \DeclareUnicodeCharacter{1E45}{\dotaccent{n}} \DeclareUnicodeCharacter{1E46}{\udotaccent{N}} \DeclareUnicodeCharacter{1E47}{\udotaccent{n}} \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}} \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}} \DeclareUnicodeCharacter{1E54}{\'P} \DeclareUnicodeCharacter{1E55}{\'p} \DeclareUnicodeCharacter{1E56}{\dotaccent{P}} \DeclareUnicodeCharacter{1E57}{\dotaccent{p}} \DeclareUnicodeCharacter{1E58}{\dotaccent{R}} \DeclareUnicodeCharacter{1E59}{\dotaccent{r}} \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}} \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}} \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}} \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}} \DeclareUnicodeCharacter{1E60}{\dotaccent{S}} \DeclareUnicodeCharacter{1E61}{\dotaccent{s}} \DeclareUnicodeCharacter{1E62}{\udotaccent{S}} \DeclareUnicodeCharacter{1E63}{\udotaccent{s}} \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}} \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}} \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}} \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}} \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}} \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}} \DeclareUnicodeCharacter{1E7C}{\~V} \DeclareUnicodeCharacter{1E7D}{\~v} \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}} \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}} \DeclareUnicodeCharacter{1E80}{\`W} \DeclareUnicodeCharacter{1E81}{\`w} \DeclareUnicodeCharacter{1E82}{\'W} \DeclareUnicodeCharacter{1E83}{\'w} \DeclareUnicodeCharacter{1E84}{\"W} \DeclareUnicodeCharacter{1E85}{\"w} \DeclareUnicodeCharacter{1E86}{\dotaccent{W}} \DeclareUnicodeCharacter{1E87}{\dotaccent{w}} \DeclareUnicodeCharacter{1E88}{\udotaccent{W}} \DeclareUnicodeCharacter{1E89}{\udotaccent{w}} \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}} \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}} \DeclareUnicodeCharacter{1E8C}{\"X} \DeclareUnicodeCharacter{1E8D}{\"x} \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}} \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}} \DeclareUnicodeCharacter{1E90}{\^Z} \DeclareUnicodeCharacter{1E91}{\^z} \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}} \DeclareUnicodeCharacter{1E93}{\udotaccent{z}} \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}} \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}} \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}} \DeclareUnicodeCharacter{1E97}{\"t} \DeclareUnicodeCharacter{1E98}{\ringaccent{w}} \DeclareUnicodeCharacter{1E99}{\ringaccent{y}} \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}} \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}} \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}} \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}} \DeclareUnicodeCharacter{1EBC}{\~E} \DeclareUnicodeCharacter{1EBD}{\~e} \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}} \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}} \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}} \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}} \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}} \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}} \DeclareUnicodeCharacter{1EF2}{\`Y} \DeclareUnicodeCharacter{1EF3}{\`y} \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}} \DeclareUnicodeCharacter{1EF8}{\~Y} \DeclareUnicodeCharacter{1EF9}{\~y} \DeclareUnicodeCharacter{2013}{--} \DeclareUnicodeCharacter{2014}{---} \DeclareUnicodeCharacter{2018}{\quoteleft} \DeclareUnicodeCharacter{2019}{\quoteright} \DeclareUnicodeCharacter{201A}{\quotesinglbase} \DeclareUnicodeCharacter{201C}{\quotedblleft} \DeclareUnicodeCharacter{201D}{\quotedblright} \DeclareUnicodeCharacter{201E}{\quotedblbase} \DeclareUnicodeCharacter{2022}{\bullet} \DeclareUnicodeCharacter{2026}{\dots} \DeclareUnicodeCharacter{2039}{\guilsinglleft} \DeclareUnicodeCharacter{203A}{\guilsinglright} \DeclareUnicodeCharacter{20AC}{\euro} \DeclareUnicodeCharacter{2192}{\expansion} \DeclareUnicodeCharacter{21D2}{\result} \DeclareUnicodeCharacter{2212}{\minus} \DeclareUnicodeCharacter{2217}{\point} \DeclareUnicodeCharacter{2261}{\equiv} }% end of \utfeightchardefs % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Make non-ASCII characters printable again for compatibility with % existing Texinfo documents that may use them, even without declaring a % document encoding. % \setnonasciicharscatcode \other \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be so finicky about underfull hboxes, either. \hbadness = 2000 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \pageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \pagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @smallerbook to reset parameters for 6x9 trim size. % (Just testing, parameters still in flux.) \def\smallerbook{{\globaldefs = 1 \parskip = 1.5pt plus 1pt \textleading = 12pt % \internalpagesizes{7.4in}{4.8in}% {-.2in}{-.4in}% {0pt}{14pt}% {9in}{6in}% % \lispnarrowing = 0.25in \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = .4cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \hfuzz = 1pt \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \hfuzz = 1.2pt \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by \voffset % \dimen2 = \hsize \advance\dimen2 by \normaloffset % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper \message{and turning on texinfo input format.} % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \catcode`\~=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\<=\other \catcode`\>=\other \catcode`\+=\other \catcode`\$=\other \def\normaldoublequote{"} \def\normaltilde{~} \def\normalcaret{^} \def\normalunderscore{_} \def\normalverticalbar{|} \def\normalless{<} \def\normalgreater{>} \def\normalplus{+} \def\normaldollar{$}%$ font-lock fix % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Turn off all special characters except @ % (and those which the user can use as if they were ordinary). % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def~{{\tt\char126}} \chardef\hat=`\^ \catcode`\^=\active \def^{{\tt \hat}} \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \let\realunder=_ % Subroutine for the previous macro. \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def<{{\tt \less}} \chardef \gtr=`\> \catcode`\>=\active \def>{{\tt \gtr}} \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have \everyjob (or @setfilename) turn them on. % \otherifyactive is called near the end of this file. \def\otherifyactive{\catcode`+=\other \catcode`\_=\other} % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ \global\let\rawbackslashxx=\backslashcurfont % let existing .??s files work % \realbackslash is an actual character `\' with catcode other, and % \doublebackslash is two of them (for the pdf outlines). {\catcode`\\=\other @gdef@realbackslash{\} @gdef@doublebackslash{\\}} % In texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active @def@normalbackslash{{@tt@backslashcurfont}} % On startup, @fixbackslash assigns: % @let \ = @normalbackslash % \rawbackslash defines an active \ to do \backslashcurfont. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. @gdef@rawbackslash{@let\=@backslashcurfont} @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % @def@normalturnoffactive{% @let\=@normalbackslash @let"=@normaldoublequote @let~=@normaltilde @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let<=@normalless @let>=@normalgreater @let+=@normalplus @let$=@normaldollar %$ font-lock fix @markupsetuplqdefault @markupsetuprqdefault @unsepspaces } % Make _ and + \other characters, temporarily. % This is canceled by @fixbackslash. @otherifyactive % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % @gdef@eatinput input texinfo{@fixbackslash} @global@let\ = @eatinput % On the other hand, perhaps the file did not have a `\input texinfo'. Then % the first `\' in the file would cause an error. This macro tries to fix % that, assuming it is called before the first `\' could plausibly occur. % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. % @gdef@fixbackslash{% @ifx\@eatinput @let\ = @normalbackslash @fi @catcode`+=@active @catcode`@_=@active } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These look ok in all fonts, so just make them not special. @catcode`@& = @other @catcode`@# = @other @catcode`@% = @other @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @markupsetuplqdefault @markupsetuprqdefault @c Local variables: @c eval: (add-hook 'write-file-hooks 'time-stamp) @c page-delimiter: "^\\\\message" @c time-stamp-start: "def\\\\texinfoversion{" @c time-stamp-format: "%:y-%02m-%02d.%02H" @c time-stamp-end: "}" @c End: @c vim:sw=2: @ignore arch-tag: e1b36e32-c96e-4135-a41a-0b2efa2ea115 @end ignore recutils-1.9/doc/Makefile.in0000644000000000000000000025015214226573146012735 00000000000000# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # doc/Makefile.am # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, # 2018, 2019, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = doc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 \ $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/calloc.m4 \ $(top_srcdir)/m4/canonicalize.m4 \ $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/clock_time.m4 \ $(top_srcdir)/m4/close.m4 $(top_srcdir)/m4/closedir.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/copy-file-range.m4 \ $(top_srcdir)/m4/copy-file.m4 $(top_srcdir)/m4/d-ino.m4 \ $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup.m4 \ $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eaccess.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ $(top_srcdir)/m4/explicit_bzero.m4 \ $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 \ $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fchdir.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \ $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \ $(top_srcdir)/m4/filenamecat.m4 \ $(top_srcdir)/m4/findprog-in.m4 $(top_srcdir)/m4/flexmember.m4 \ $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/flock.m4 \ $(top_srcdir)/m4/floor.m4 $(top_srcdir)/m4/fopen.m4 \ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ $(top_srcdir)/m4/fseek.m4 $(top_srcdir)/m4/fseeko.m4 \ $(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \ $(top_srcdir)/m4/fstatat.m4 $(top_srcdir)/m4/ftell.m4 \ $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ $(top_srcdir)/m4/getcwd-abort-bug.m4 \ $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \ $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \ $(top_srcdir)/m4/getpass.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/getrandom.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/group-member.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexpl.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrlen.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/minmax.m4 \ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkostemp.m4 \ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \ $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/opendir.m4 \ $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ $(top_srcdir)/m4/posix_spawn_faction_addchdir.m4 \ $(top_srcdir)/m4/printf-frexp.m4 \ $(top_srcdir)/m4/printf-frexpl.m4 \ $(top_srcdir)/m4/printf-posix-rpl.m4 \ $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readdir.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/remove.m4 \ $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rewinddir.m4 \ $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/safe-read.m4 \ $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/save-cwd.m4 \ $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ $(top_srcdir)/m4/selinux-context-h.m4 \ $(top_srcdir)/m4/selinux-label-h.m4 \ $(top_srcdir)/m4/selinux-selinux-h.m4 \ $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/setlocale_null.m4 \ $(top_srcdir)/m4/sh-filename.m4 \ $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ $(top_srcdir)/m4/signal_h.m4 \ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/stdio_h.m4 \ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/stpcpy.m4 \ $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ $(top_srcdir)/m4/sys_random_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink.m4 \ $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utime.m4 \ $(top_srcdir)/m4/utime_h.m4 $(top_srcdir)/m4/utimens.m4 \ $(top_srcdir)/m4/utimes.m4 \ $(top_srcdir)/m4/vasnprintf-posix.m4 \ $(top_srcdir)/m4/vasnprintf.m4 \ $(top_srcdir)/m4/vasprintf-posix.m4 \ $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ $(top_srcdir)/m4/vfprintf-posix.m4 \ $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/write.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/year2038.m4 \ $(top_srcdir)/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(srcdir)/version.texi \ $(srcdir)/stamp-vti $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = AM_V_DVIPS = $(am__v_DVIPS_@AM_V@) am__v_DVIPS_ = $(am__v_DVIPS_@AM_DEFAULT_V@) am__v_DVIPS_0 = @echo " DVIPS " $@; am__v_DVIPS_1 = AM_V_MAKEINFO = $(am__v_MAKEINFO_@AM_V@) am__v_MAKEINFO_ = $(am__v_MAKEINFO_@AM_DEFAULT_V@) am__v_MAKEINFO_0 = @echo " MAKEINFO" $@; am__v_MAKEINFO_1 = AM_V_INFOHTML = $(am__v_INFOHTML_@AM_V@) am__v_INFOHTML_ = $(am__v_INFOHTML_@AM_DEFAULT_V@) am__v_INFOHTML_0 = @echo " INFOHTML" $@; am__v_INFOHTML_1 = AM_V_TEXI2DVI = $(am__v_TEXI2DVI_@AM_V@) am__v_TEXI2DVI_ = $(am__v_TEXI2DVI_@AM_DEFAULT_V@) am__v_TEXI2DVI_0 = @echo " TEXI2DVI" $@; am__v_TEXI2DVI_1 = AM_V_TEXI2PDF = $(am__v_TEXI2PDF_@AM_V@) am__v_TEXI2PDF_ = $(am__v_TEXI2PDF_@AM_DEFAULT_V@) am__v_TEXI2PDF_0 = @echo " TEXI2PDF" $@; am__v_TEXI2PDF_1 = AM_V_texinfo = $(am__v_texinfo_@AM_V@) am__v_texinfo_ = $(am__v_texinfo_@AM_DEFAULT_V@) am__v_texinfo_0 = -q am__v_texinfo_1 = AM_V_texidevnull = $(am__v_texidevnull_@AM_V@) am__v_texidevnull_ = $(am__v_texidevnull_@AM_DEFAULT_V@) am__v_texidevnull_0 = > /dev/null am__v_texidevnull_1 = INFO_DEPS = $(srcdir)/recutils.info TEXINFO_TEX = $(top_srcdir)/build-aux/texinfo.tex am__TEXINFO_TEX_DIR = $(top_srcdir)/build-aux DVIS = recutils.dvi PDFS = recutils.pdf PSS = recutils.ps HTMLS = recutils.html TEXINFOS = recutils.texi TEXI2DVI = texi2dvi TEXI2PDF = $(TEXI2DVI) --pdf --batch MAKEINFOHTML = $(MAKEINFO) --html AM_MAKEINFOHTMLFLAGS = $(AM_MAKEINFOFLAGS) DVIPS = dvips am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__installdirs = "$(DESTDIR)$(infodir)" am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(recutils_TEXINFOS) $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/mdate-sh \ $(top_srcdir)/build-aux/texinfo.tex texinfo.tex DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_HEADERS = @BASH_HEADERS@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CURLLIBS = @CURLLIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ FLOOR_LIBM = @FLOOR_LIBM@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POSIX_SPAWN = @GL_GNULIB_POSIX_SPAWN@ GL_GNULIB_POSIX_SPAWNATTR_DESTROY = @GL_GNULIB_POSIX_SPAWNATTR_DESTROY@ GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ GL_GNULIB_POSIX_SPAWNATTR_INIT = @GL_GNULIB_POSIX_SPAWNATTR_INIT@ GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ GL_GNULIB_POSIX_SPAWNP = @GL_GNULIB_POSIX_SPAWNP@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIME = @GL_GNULIB_UTIME@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FLOCK = @HAVE_FLOCK@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SPAWN_H = @HAVE_SPAWN_H@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIME = @HAVE_UTIME@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_UTIME_H = @HAVE_UTIME_H@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGCRYPT = @LIBGCRYPT@ LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIB_ACL = @LIB_ACL@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ LIB_EACCESS = @LIB_EACCESS@ LIB_GETRANDOM = @LIB_GETRANDOM@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELINUX = @LIB_SELINUX@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBGCRYPT = @LTLIBGCRYPT@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBREADLINE = @LTLIBREADLINE@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MDBLIBS = @MDBLIBS@ MDB_DATETIME = @MDB_DATETIME@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_UTIME_H = @NEXT_AS_FIRST_DIRECTIVE_UTIME_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_SPAWN_H = @NEXT_SPAWN_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_UTIME_H = @NEXT_UTIME_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PARSE_DATETIME_BISON = @PARSE_DATETIME_BISON@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIME = @REPLACE_UTIME@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ SELINUX_LABEL_H = @SELINUX_LABEL_H@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_ACL = @USE_ACL@ USE_NLS = @USE_NLS@ UUIDLIBS = @UUIDLIBS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ crypt_support = @crypt_support@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ have_uuid = @have_uuid@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ info_TEXINFOS = recutils.texi recutils_TEXINFOS = parse-datetime.texi fdl.texi all: all-am .SUFFIXES: .SUFFIXES: .dvi .html .info .pdf .ps .texi $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu doc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu doc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs .texi.info: $(AM_V_MAKEINFO)restore=: && backupdir="$(am__leading_dot)am$$$$" && \ am__cwd=`pwd` && $(am__cd) $(srcdir) && \ rm -rf $$backupdir && mkdir $$backupdir && \ if ($(MAKEINFO) --version) >/dev/null 2>&1; then \ for f in $@ $@-[0-9] $@-[0-9][0-9] $(@:.info=).i[0-9] $(@:.info=).i[0-9][0-9]; do \ if test -f $$f; then mv $$f $$backupdir; restore=mv; else :; fi; \ done; \ else :; fi && \ cd "$$am__cwd"; \ if $(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $@ $<; \ then \ rc=0; \ $(am__cd) $(srcdir); \ else \ rc=$$?; \ $(am__cd) $(srcdir) && \ $$restore $$backupdir/* `echo "./$@" | sed 's|[^/]*$$||'`; \ fi; \ rm -rf $$backupdir; exit $$rc .texi.dvi: $(AM_V_TEXI2DVI)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2DVI) $(AM_V_texinfo) --build-dir=$(@:.dvi=.t2d) -o $@ $(AM_V_texidevnull) \ $< .texi.pdf: $(AM_V_TEXI2PDF)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ MAKEINFO='$(MAKEINFO) $(AM_MAKEINFOFLAGS) $(MAKEINFOFLAGS) -I $(srcdir)' \ $(TEXI2PDF) $(AM_V_texinfo) --build-dir=$(@:.pdf=.t2p) -o $@ $(AM_V_texidevnull) \ $< .texi.html: $(AM_V_MAKEINFO)rm -rf $(@:.html=.htp) $(AM_V_at)if $(MAKEINFOHTML) $(AM_MAKEINFOHTMLFLAGS) $(MAKEINFOFLAGS) -I $(srcdir) \ -o $(@:.html=.htp) $<; \ then \ rm -rf $@ && mv $(@:.html=.htp) $@; \ else \ rm -rf $(@:.html=.htp); exit 1; \ fi $(srcdir)/recutils.info: recutils.texi $(srcdir)/version.texi $(recutils_TEXINFOS) recutils.dvi: recutils.texi $(srcdir)/version.texi $(recutils_TEXINFOS) recutils.pdf: recutils.texi $(srcdir)/version.texi $(recutils_TEXINFOS) recutils.html: recutils.texi $(srcdir)/version.texi $(recutils_TEXINFOS) $(srcdir)/version.texi: $(srcdir)/stamp-vti $(srcdir)/stamp-vti: recutils.texi $(top_srcdir)/configure @(dir=.; test -f ./recutils.texi || dir=$(srcdir); \ set `$(SHELL) $(top_srcdir)/build-aux/mdate-sh $$dir/recutils.texi`; \ echo "@set UPDATED $$1 $$2 $$3"; \ echo "@set UPDATED-MONTH $$2 $$3"; \ echo "@set EDITION $(VERSION)"; \ echo "@set VERSION $(VERSION)") > vti.tmp$$$$ && \ (cmp -s vti.tmp$$$$ $(srcdir)/version.texi \ || (echo "Updating $(srcdir)/version.texi" && \ cp vti.tmp$$$$ $(srcdir)/version.texi.tmp$$$$ && \ mv $(srcdir)/version.texi.tmp$$$$ $(srcdir)/version.texi)) && \ rm -f vti.tmp$$$$ $(srcdir)/version.texi.$$$$ @cp $(srcdir)/version.texi $@ mostlyclean-vti: -rm -f vti.tmp* $(srcdir)/version.texi.tmp* maintainer-clean-vti: -rm -f $(srcdir)/stamp-vti $(srcdir)/version.texi .dvi.ps: $(AM_V_DVIPS)TEXINPUTS="$(am__TEXINFO_TEX_DIR)$(PATH_SEPARATOR)$$TEXINPUTS" \ $(DVIPS) $(AM_V_texinfo) -o $@ $< uninstall-dvi-am: @$(NORMAL_UNINSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(dvidir)/$$f'"; \ rm -f "$(DESTDIR)$(dvidir)/$$f"; \ done uninstall-html-am: @$(NORMAL_UNINSTALL) @list='$(HTMLS)'; test -n "$(htmldir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -rf '$(DESTDIR)$(htmldir)/$$f'"; \ rm -rf "$(DESTDIR)$(htmldir)/$$f"; \ done uninstall-info-am: @$(PRE_UNINSTALL) @if test -d '$(DESTDIR)$(infodir)' && $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' --remove '$(DESTDIR)$(infodir)/$$relfile'"; \ if install-info --info-dir="$(DESTDIR)$(infodir)" --remove "$(DESTDIR)$(infodir)/$$relfile"; \ then :; else test ! -f "$(DESTDIR)$(infodir)/$$relfile" || exit 1; fi; \ done; \ else :; fi @$(NORMAL_UNINSTALL) @list='$(INFO_DEPS)'; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ relfile_i=`echo "$$relfile" | sed 's|\.info$$||;s|$$|.i|'`; \ (if test -d "$(DESTDIR)$(infodir)" && cd "$(DESTDIR)$(infodir)"; then \ echo " cd '$(DESTDIR)$(infodir)' && rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]"; \ rm -f $$relfile $$relfile-[0-9] $$relfile-[0-9][0-9] $$relfile_i[0-9] $$relfile_i[0-9][0-9]; \ else :; fi); \ done uninstall-pdf-am: @$(NORMAL_UNINSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(pdfdir)/$$f'"; \ rm -f "$(DESTDIR)$(pdfdir)/$$f"; \ done uninstall-ps-am: @$(NORMAL_UNINSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " rm -f '$(DESTDIR)$(psdir)/$$f'"; \ rm -f "$(DESTDIR)$(psdir)/$$f"; \ done dist-info: $(INFO_DEPS) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; \ for base in $$list; do \ case $$base in \ $(srcdir)/*) base=`echo "$$base" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$base; then d=.; else d=$(srcdir); fi; \ base_i=`echo "$$base" | sed 's|\.info$$||;s|$$|.i|'`; \ for file in $$d/$$base $$d/$$base-[0-9] $$d/$$base-[0-9][0-9] $$d/$$base_i[0-9] $$d/$$base_i[0-9][0-9]; do \ if test -f $$file; then \ relfile=`expr "$$file" : "$$d/\(.*\)"`; \ test -f "$(distdir)/$$relfile" || \ cp -p $$file "$(distdir)/$$relfile"; \ else :; fi; \ done; \ done mostlyclean-aminfo: -rm -rf recutils.t2d recutils.t2p clean-aminfo: -test -z "recutils.dvi recutils.pdf recutils.ps recutils.html" \ || rm -rf recutils.dvi recutils.pdf recutils.ps recutils.html maintainer-clean-aminfo: @list='$(INFO_DEPS)'; for i in $$list; do \ i_i=`echo "$$i" | sed 's|\.info$$||;s|$$|.i|'`; \ echo " rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]"; \ rm -f $$i $$i-[0-9] $$i-[0-9][0-9] $$i_i[0-9] $$i_i[0-9][0-9]; \ done tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$(top_distdir)" distdir="$(distdir)" \ dist-info check-am: all-am check: check-am all-am: Makefile $(INFO_DEPS) installdirs: for dir in "$(DESTDIR)$(infodir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-aminfo clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: $(DVIS) html: html-am html-am: $(HTMLS) info: info-am info-am: $(INFO_DEPS) install-data-am: install-info-am install-dvi: install-dvi-am install-dvi-am: $(DVIS) @$(NORMAL_INSTALL) @list='$(DVIS)'; test -n "$(dvidir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(dvidir)'"; \ $(MKDIR_P) "$(DESTDIR)$(dvidir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(dvidir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(dvidir)" || exit $$?; \ done install-exec-am: install-html: install-html-am install-html-am: $(HTMLS) @$(NORMAL_INSTALL) @list='$(HTMLS)'; list2=; test -n "$(htmldir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p" || test -d "$$p"; then d=; else d="$(srcdir)/"; fi; \ $(am__strip_dir) \ d2=$$d$$p; \ if test -d "$$d2"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(htmldir)/$$f'"; \ $(MKDIR_P) "$(DESTDIR)$(htmldir)/$$f" || exit 1; \ echo " $(INSTALL_DATA) '$$d2'/* '$(DESTDIR)$(htmldir)/$$f'"; \ $(INSTALL_DATA) "$$d2"/* "$(DESTDIR)$(htmldir)/$$f" || exit $$?; \ else \ list2="$$list2 $$d2"; \ fi; \ done; \ test -z "$$list2" || { echo "$$list2" | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(htmldir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(htmldir)" || exit $$?; \ done; } install-info: install-info-am install-info-am: $(INFO_DEPS) @$(NORMAL_INSTALL) @srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(infodir)'"; \ $(MKDIR_P) "$(DESTDIR)$(infodir)" || exit 1; \ fi; \ for file in $$list; do \ case $$file in \ $(srcdir)/*) file=`echo "$$file" | sed "s|^$$srcdirstrip/||"`;; \ esac; \ if test -f $$file; then d=.; else d=$(srcdir); fi; \ file_i=`echo "$$file" | sed 's|\.info$$||;s|$$|.i|'`; \ for ifile in $$d/$$file $$d/$$file-[0-9] $$d/$$file-[0-9][0-9] \ $$d/$$file_i[0-9] $$d/$$file_i[0-9][0-9] ; do \ if test -f $$ifile; then \ echo "$$ifile"; \ else : ; fi; \ done; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(infodir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(infodir)" || exit $$?; done @$(POST_INSTALL) @if $(am__can_run_installinfo); then \ list='$(INFO_DEPS)'; test -n "$(infodir)" || list=; \ for file in $$list; do \ relfile=`echo "$$file" | sed 's|^.*/||'`; \ echo " install-info --info-dir='$(DESTDIR)$(infodir)' '$(DESTDIR)$(infodir)/$$relfile'";\ install-info --info-dir="$(DESTDIR)$(infodir)" "$(DESTDIR)$(infodir)/$$relfile" || :;\ done; \ else : ; fi install-man: install-pdf: install-pdf-am install-pdf-am: $(PDFS) @$(NORMAL_INSTALL) @list='$(PDFS)'; test -n "$(pdfdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(pdfdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(pdfdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(pdfdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(pdfdir)" || exit $$?; done install-ps: install-ps-am install-ps-am: $(PSS) @$(NORMAL_INSTALL) @list='$(PSS)'; test -n "$(psdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(psdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(psdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(psdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(psdir)" || exit $$?; done installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-aminfo \ maintainer-clean-generic maintainer-clean-vti mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-aminfo mostlyclean-generic \ mostlyclean-libtool mostlyclean-vti pdf: pdf-am pdf-am: $(PDFS) ps: ps-am ps-am: $(PSS) uninstall-am: uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-pdf-am uninstall-ps-am .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-aminfo clean-generic \ clean-libtool cscopelist-am ctags-am dist-info distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-aminfo maintainer-clean-generic \ maintainer-clean-vti mostlyclean mostlyclean-aminfo \ mostlyclean-generic mostlyclean-libtool mostlyclean-vti pdf \ pdf-am ps ps-am tags-am uninstall uninstall-am \ uninstall-dvi-am uninstall-html-am uninstall-info-am \ uninstall-pdf-am uninstall-ps-am .PRECIOUS: Makefile # End of Makefile.am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: recutils-1.9/doc/version.texi0000644000000000000000000000013314226576631013242 00000000000000@set UPDATED 16 April 2022 @set UPDATED-MONTH April 2022 @set EDITION 1.9 @set VERSION 1.9 recutils-1.9/doc/stamp-vti0000644000000000000000000000013314226576631012531 00000000000000@set UPDATED 16 April 2022 @set UPDATED-MONTH April 2022 @set EDITION 1.9 @set VERSION 1.9 recutils-1.9/doc/recutils.texi0000644000000000000000000050473714226563465013433 00000000000000\input texinfo @comment %**start of header @setfilename recutils.info @include version.texi @settitle GNU Recutils @afourpaper @comment %**end of header @comment Latin: videre licet, @macro viz @i{viz:@:} @end macro @comment Latin: id est @macro ie @i{i.e.@:} @end macro @comment Latin: exempli gratia @macro eg @i{e.g.@:} @end macro @comment Latin: et cetera @macro etc @i{etc.@:} @end macro @copying This manual is for GNU recutils (version @value{VERSION}, @value{UPDATED}). Copyright @copyright{} 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2022 Jose E. Marchesi Copyright @copyright{} 1994, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013, 2014, 2020, 2022 Free Software Foundation, Inc. @quotation Permission is granted to copy, distribute and/or modify this document under the terms of the GNU Free Documentation License, Version 1.3 or any later version published by the Free Software Foundation; with no Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A copy of the license is included in the section entitled ``GNU Free Documentation License''. @end quotation @end copying @dircategory Database @direntry * recutils: (recutils). The GNU Recutils manual. @end direntry @dircategory Individual utilities @direntry * recinf: (recutils)Invoking recinf. Get info about recfiles. * recsel: (recutils)Invoking recsel. Read records. * recins: (recutils)Invoking recins. Insert records. * recdel: (recutils)Invoking recdel. Delete records. * recset: (recutils)Invoking recset. Manage fields. * recfix: (recutils)Invoking recfix. Fix recfiles. * csv2rec: (recutils)Invoking csv2rec. CSV to recfiles. * rec2csv: (recutils)Invoking rec2csv. Recfiles to CSV. * mdb2rec: (recutils)Invoking mdb2rec. MDB to recfiles. @end direntry @titlepage @title GNU recutils @subtitle for version @value{VERSION}, @value{UPDATED} @author by Jose E. Marchesi and John Darrington @page @vskip 0pt plus 1filll @insertcopying @end titlepage @contents @ifnottex @node Top @top GNU Recutils This manual documents version @value{VERSION} of the GNU recutils. @insertcopying @end ifnottex @menu The Basics * Introduction:: Introducing recutils. * The Rec Format:: Writing recfiles. Using the Recutils * Querying Recfiles:: Extracting data from recfiles. * Editing Records:: Inserting and deleting records. * Editing Fields:: Inserting, modifying and deleting fields. Data Integrity * Field Types:: Restrictions on the values of fields. * Constraints on Record Sets:: Requiring or forbidding specific fields. * Checking Recfiles:: Making sure the data is ok. Advanced Topics * Remote Descriptors:: Implementing distributed databases. * Grouping and Aggregates:: Statistics. * Queries which Join Records:: Crossing record of different types. * Auto-Generated Fields:: Counters and time-stamps. * Encryption:: Storing sensitive information. * Generating Reports:: Formatted output with templates. * Interoperability:: Importing and exporting to other formats. * Bash Builtins:: Boosting the recutils in the shell. Reference Material * Invoking the Utilities:: Exhaustive list of command line arguments. * Using ob-rec.el:: Invoking Recutils from Emacs Org-mode source blocks. * Regular Expressions:: Flavor of regexps supported in recutils. * Date input formats:: Specifying dates and times. * GNU Free Documentation License:: Distribution terms for this document. Indexes * Concept Index:: @detailmenu --- The Detailed Node Listing --- --------------------------------- Here are some other nodes which are really subnodes of the ones already listed, mentioned here so you can get to them in one step: Introduction * Purpose:: Why recutils. * A Little Example:: Recutils in action. The Rec Format * Fields:: The key--value pairs which comprise the data. * Records:: The main entities of a recfile. * Comments:: Information for humans' benefit only. * Record Descriptors:: Describing different types of records. Querying Recfiles * Simple Selections:: Introducing @command{recsel}. * Selecting by Type:: Get the records of some given type. * Selecting by Position:: Get the record occupying some position. * Random Records:: Get a set of random records. * Selection Expressions:: Get the records satisfying some expression. * Field Expressions:: Selecting a subset of fields. * Sorted Output:: Get the records in a given order. Editing Records * Inserting Records:: Inserting data into recfiles. * Deleting Records:: Removing entries. * Sorting Records:: Physical reordering of records. Editing Fields * Setting Fields:: Editing field values. * Adding Fields:: Adding new fields to records. * Deleting Fields:: Removing or commenting-out fields. Field Types * Declaring Types:: Declaration of types in record descriptors. * Types and Fields:: Associating fields with types. * Scalar Field Types:: Numbers and ranges. * String Field Types:: Lines, limited strings and regular expressions. * Enumerated Field Types:: Enumerations and boolean values. * Date and Time Types:: Dates and times. * Other Field Types:: Emails, fields, UUIDs, @dots{} Constraints on Record Sets * Mandatory Fields:: Requiring the presence of fields. * Prohibited Fields:: Forbidding the presence of fields. * Allowed Fields:: Restricting the presence of fields. * Keys and Unique Fields:: Fields characterizing records. * Size Constraints:: Limiting the size of a record set. * Arbitrary Constraints:: Constraints records must comply with. Checking Recfiles * Syntactical Errors:: Fixing structure errors in recfiles. * Semantic Errors:: Fixing semantic errors in recfiles. Grouping and Aggregates * Grouping Records:: Combining records by fields. * Aggregate Functions:: Statistics and more. Joins * Foreign Keys:: Referring records from another records. * Joining Records:: Performing cross-joins. Auto-Generated Fields * Counters:: Generating incremental Ids. * Unique Identifiers:: Generating universally unique Ids. * Time-Stamps:: Tracking the creation of records. Encryption * Confidential Fields:: Declaring fields as sensitive data. * Encrypting Files:: Encrypt confidential fields. * Decrypting Data:: Reading encrypted fields. Generating Reports * Templates:: Formatted output. Interoperability * CSV Files:: Converting recfiles to/from csv files. * Importing MDB Files:: Importing MS Access Databases. Bash Builtins * readrec:: Exporting the contents of records to the shell. Invoking the Utilities * Invoking recinf:: Printing information about rec files. * Invoking recsel:: Selecting records. * Invoking recins:: Inserting records. * Invoking recdel:: Deleting records. * Invoking recset:: Managing fields. * Invoking recfix:: Fixing broken rec files, and diagnostics. * Invoking recfmt:: Formatting records using templates. * Invoking csv2rec:: Converting csv data into rec data. * Invoking rec2csv:: Converting rec data into csv data. * Invoking mdb2rec:: Converting mdb files into rec files. @end detailmenu @end menu @node Introduction @chapter Introduction @menu * Purpose:: Why recutils. * A Little Example:: Recutils in action. @end menu @node Purpose @section Purpose GNU recutils is a set of tools and libraries to access human-editable, text-based databases called @emph{recfiles}. The data is stored as a sequence of records, each record containing an arbitrary number of named fields. Advanced capabilities usually found in other data storage systems are supported: data types, data integrity (keys, mandatory fields, @etc{}) as well as the ability of records to refer to other records (sort of foreign keys). Despite its simplicity, recfiles can be used to store medium-sized databases. So, yet another data storage system? The mere existence of this package deserves an explanation. There is a rich set of already available free data storage systems, covering a broad range of requirements. Big systems having complex data storage requirements will probably make use of some full-fledged relational system such as MySQL or PostgreSQL@. Less demanding applications, or applications with special deployment requirements, may find it more convenient to use a simpler system such as SQLite, where the data is stored in a single binary file. XML files are often used to store configuration settings for programs, and to encode data for transmission through networks. So it looks like all the needs are covered by the existing solutions @dots{} but consider the following characteristics of the data storage systems mentioned in the previous paragraph: @itemize @minus @item The stored data is not directly human readable. @item The stored data is definitely not directly writable by humans. @item They are program dependent. @item They are not easily managed by version control systems. @end itemize @cindex readability Regarding the first point (human readability), while it is clearly true for the binary files, some may argue XML files are indeed human readable@dots{} well@dots{} @code{try to r&iamp;ead

this

}. YAML @footnote{Yet Another Markup Language} is an example of a hierarchical data storage format which is much more readable than XML@. The problem with YAML is that it was designed as a ``data serialization language'' and thus to map the data constructs usually found in programming languages. That makes it too complex for the simple task of storing plain lists of items. Recfiles are human-readable, human-writable and still easy to parse and to manipulate automatically. Obviously they are not suitable for any task (for example, it can be difficult to manage hierarchies in recfiles) and performance is somewhat sacrificed in favor of readability. But they are quite handy to store small to medium simple databases. The GNU recutils suite comprises: @itemize @minus @item This Texinfo manual, describing the Rec format and the accompanying software. @item A C library (librec) that provides a rich set of functions to manipulate rec data. @item A set utilities that can be used in shell scripts and in the command line to operate on rec files. @item An emacs mode, @code{rec-mode}. @end itemize @node A Little Example @section A Little Example @cindex books Everyone loves to grow a nice book collection at home. Unfortunately, in most cases the management of our private books gets uncontrolled: some books get lost, some of them may be loaned to some friend, there are some duplicated (or even triplicated!) titles because we forgot about the existence of the previous copy, and many more details. In order to improve the management of our little book collection we could make use of a complex data storage system such as a relational database. The problem with that approach, as explained in the previous section, is that the tool is too complicated for the simple task: we do not need the full power of a relational database system to maintain a simple collection of books. With GNU recutils it is possible to maintain such a little database in a text file. Let's call it @file{books.rec}. The following table resumes the information items that we want to store for each title, along with some common-sense restrictions. @itemize @minus @item Every book has a title, even if it is ``No Title''. @item A book can have several titles. @item A book can have more than one author. @item For some books the author is not known. @item Sometimes we don't care about who the author of a book is. @item We usually store our books at home. @item Sometimes we loan books to friends. @item On occasions we lose track of the physical location of a book. Did we loan it to anyone? Was it lost in the last move? Is it in some hidden place at home? @end itemize @noindent The contents of the rec file follows: @example # -*- mode: rec -*- %rec: Book %mandatory: Title %type: Location enum loaned home unknown %doc: + A book in my personal collection. Title: GNU Emacs Manual Author: Richard M. Stallman Publisher: FSF Location: home Title: The Colour of Magic Author: Terry Pratchett Location: loaned Title: Mio Cid Author: Anonymous Location: home Title: chapters.gnu.org administration guide Author: Nacho Gonzalez Author: Jose E. Marchesi Location: unknown Title: Yeelong User Manual Location: home # End of books.rec @end example Simple. The file contains a set of records separated by blank lines. Each record comprises a set of fields with a name and a value. The GNU recutils can then be used to access the contents of the file. For example, we could get a list of the names of loaned books by invoking @command{recsel} in the following way: @example $ recsel -e "Location = 'loaned'" -P Title books.rec The Colour of Magic @end example @node The Rec Format @chapter The Rec Format A recfile is nothing but a text file which conforms to a few simple rules. This chapter shows you how, by observing these rules, recfiles of arbitrary complexity can be written. @menu * Fields:: The key--value pairs which comprise the data. * Records:: The main entities of a recfile. * Comments:: Information for humans' benefit only. * Record Descriptors:: Describing different types of records. @end menu @node Fields @section Fields @cindex field A @dfn{field} is the written form of an association between a label and a value. For example, if we wanted to associate the label @code{Name} with the value @code{Ada Lovelace} we would write: @example Name: Ada Lovelace @end example The separator between the field name and the field value is a colon followed by a blank character (space and tabs, but not newlines). The name of the field shall begin in the first column of the line. @cindex field name A @dfn{field name} is a sequence of alphanumeric characters plus underscores (@code{_}), starting with a letter or the character @code{%}. The regular expression denoting a field name is: @example [a-zA-Z%][a-zA-Z0-9_]* @end example @cindex case, in field names Field names are case-sensitive. @code{Foo} and @code{foo} are different field names. The following list contains valid field names (the final colon is not part of the names): @example Foo: foo: A23: ab1: A_Field: @end example @cindex field values The @dfn{value of a field} is a sequence of characters terminated by a single newline character (@code{\n}). @cindex multiline field values Sometimes a value is too long to fit in the usual width of terminals and screens. In that case, depending on the specific tool used to access the file, the readability of the data would not be that good. It is therefore possible to physically split a logical line by escaping a newline with a backslash character, as in: @example LongLine: This is a quite long value \ comprising a single unique logical line \ split in several physical lines. @end example The sequence @code{\n} (newline) @code{+} (PLUS) and an optional @code{_} (SPACE) is interpreted as a newline when found in a field value. For example, the C string @code{"bar1\nbar2\n bar3"} would be encoded in the following way in a field value: @example Foo: bar1 + bar2 + bar3 @end example @node Records @section Records @cindex record A @dfn{record} is a group of one or more fields written one after the other: @example Name1: Value1 Name2: Value2 Name2: Value3 @end example It is possible for several fields in a record to share the same name or/and the field value. The following is a valid record containing three fields: @example Name: John Smith Email: john.smith@@foomail.com Email: john@@smith.name @end example @cindex record size @cindex size, record size The @dfn{size of a record} is defined as the number of fields that it contains. A record cannot be empty, so the minimum size for a record is 1. The maximum number of fields for a record is only limited by the available physical resources. The size of the previous record is 3. Records are separated by one or more blank lines. For instance, the following example shows a file named @file{personalities.rec} featuring three records: @example Name: Ada Lovelace Age: 36 Name: Peter the Great Age: 53 Name: Matusalem Age: 969 @end example @node Comments @section Comments @cindex comments Any line having an @code{#} (ASCII 0x23) character in the first column is a comment line. Comments may be used to insert information that is not part of the database but useful in other ways. They are completely ignored by processing tools and can only be seen by looking at the recfile itself. It is also quite convenient to comment-out information from the recfile without having to remove it in a definitive way: you may want to recover the data into the database later! Comment lines can be used to comment-out both full registers and single fields: @example Name: Jose E. Marchesi # Occupation: Software Engineer # Severe lack of brain capacity # Fired on 02/01/2009 (without compensation) Occupation: Unoccupied @end example Comments are also useful for headers, footers, comment blocks and all kind of markers: @example # -*- mode: rec -*- # # TODO # # This file contains the Bugs database of GNU recutils. # # Blah blah@dots{} @dots{} # End of TODO @end example Unlike some file formats, comments in recfiles must be complete lines. You cannot start a comment in the middle of a line. For example, in the following record, the @code{#} does @emph{not} start a comment: @example Name: Peter the Great # Russian Tsar Age: 53 @end example @node Record Descriptors @section Record Descriptors @cindex descriptor Certain properties of a set of records can be specified by preceding them with a @dfn{record descriptor}. A record descriptor is itself a record, and uses fields with some predefined names to store properties. @menu * Record Sets:: Defining different types of records. * Naming Record Types:: Some conventions on naming record sets. * Documenting Records:: Documenting your record sets. * Record Sets Properties:: Introducing the special fields. @end menu @node Record Sets @subsection Record Sets @cindex record sets The most basic property that can be specified for a set of records is their @dfn{type}. The special field name @code{%rec} is used for that purpose: @cindex @code{%rec} @example %rec: Entry Id: 1 Name: Entry 1 Id: 2 Name: Entry 2 @end example The records following the descriptors are then identified as having its type. So in the example above we would say there are two records of type ``Entry''. Or in a more colloquial way we would say there are two ``Entries'' in the database. The effect of a record descriptor ends when another descriptor is found in the stream of records. This allows you to store different kinds of records in the same database. For example, suppose you are maintaining a depot. You will need to keep track of both what items are available and when they are sold or restocked. The following example shows the usage of two record descriptors to store both kind of records: articles and stock. @example %rec: Article Id: 1 Title: Article 1 Id: 2 Title: Article 2 %rec: Stock Id: 1 Type: sell Date: 20 April 2011 Id: 2 Type: stock Date: 21 April 2011 @end example The collection of records having same types in recfiles are known as @dfn{record sets} in recutils jargon. In the example above two record sets are defined: one containing articles and the other containing stock movements. Nothing prevents having empty record sets in databases. This is in fact usually the case when a new recfile is written but no data exists yet. In our depot example we could write a first version of the database containing just the record descriptors: @example %rec: Article %rec: Stock @end example @cindex default record types Special records are not required, and many recfiles do not have them. This is because all the records contained in the file are of the same type, and their nature can usually be inferred from both the file name and their contents. For example, @file{contacts.rec} could simply contain records representing contacts without an explicit @code{%rec: Contact} record descriptor. In this case we say that the type of the anonymous records stored in the file is the @dfn{default record type}. Another possible situation, although not usual, is to have a recfile containing both non-typed (default) and typed record types: @example Id: 1 Title: Blah Id: 2 Title: Bleh %rec: Movement Date: 13-Aug-2012 Concept: 20 Date: 24-Sept-2012 Concept: 12 @end example @noindent In this case the records preceding the movements are of the ``default'' type, whereas the records following the record descriptor are of type @code{Movement}. Even though it is supported by the format and the utilities, it is generally not recommended to mix non-typed and typed records in a recfile. @node Naming Record Types @subsection Naming Record Types It is up to you how to name your record sets. Any string comprising only alphanumeric characters or underscores, and that starts with a letter will be a legal name. However, it is recommended to use the singular form of a noun in order to describe the ``type'' of the records in the records set. Examples are @code{Article}, @code{Contributor}, @code{Employee} and @code{Movement}. The used noun should be specific enough in order to characterize the property of the records which matters. For example, in a contributor's database it would be better to have a record set named @code{Contributor} than @code{Person}. The reason of using singular nouns instead of their plural forms is that it works better with the utilities: it is more natural to read @command{recsel -t Contributor} (@command{-t} is for ``type'') than @command{recsel -t Contributors}. @node Documenting Records @subsection Documenting Records @cindex @code{%doc} @cindex documentation fields @cindex description of record sets As well as a name, it is a good idea to provide a description of the record set. This is sometimes called the record set's @dfn{documentation} and is specified using the @code{%doc} field. Whereas the name is usually short and can contain only alphanumeric characters and underscores, no such restriction applies to the documentation. The documentation is typically more verbose than the name provided by the @code{%rec} field and may contain arbitrary characters such as punctuation and parentheses. It is somewhat similar to a comment (@pxref{Comments}), but it can be managed more easily in a programmatic way. Unlike a comment, the @code{%doc} field is recognized by tools such as @command{recinf} (@pxref{Invoking recinf}) which processes record descriptors. For example, you might have two record sets with @code{%rec} and @code{%doc} fields as follows: @example %rec: Contact %doc: Family, friends and acquaintances (other than business). Name: Granny Phone: +12 23456677 Name: Edwina Phone: +55 0923 8765 %rec: Associate %doc: Colleagues and other business contacts Name: Karl Schmidt Phone: +49 88234566 Name: Genevieve Curie Phone: +33 34 87 65 @end example @node Record Sets Properties @subsection Record Sets Properties @cindex field, special fields @cindex special fields Besides determining the type of record that follows in the stream, record descriptors can be used to describe other properties of those records. This can be done by using @dfn{special fields}, which have special names from a predefined set. Consider for example the following database, where record descriptors are used to specify a (optional) numeric `Id' and a mandatory `Title' field: @cindex @code{%mandatory} @cindex mandatory fields @example %rec: Item %type: Id int %mandatory: Title Id: 10 Title: Notebook (big) Id: 11 Title: Fountain Pen @end example Note that the names of special fields always start with the character @code{%}. Also note that it is also possible to use non-special fields in a record descriptor, but such fields will have no effect on the described record set. Every record set must contain one, and only one, field named @code{%rec}. It is not mandated that that field must occupy the first position in the record. However, it is considered a good style to place it as the first field in the record set, in order for the casual reader to easily identify the type of the records. The following list briefly describes the special fields defined in the recutils format, along with references to the sections of this manual describing their usage in depth. @cindex special fields, list of @table @code @item %rec Naming record types. Also, they allow using external and remote descriptors. @xref{Remote Descriptors}. @item %mandatory, %allowed and %prohibit Requiring or forbidding specific fields. @xref{Mandatory Fields}. @xref{Prohibited Fields}. @xref{Allowed Fields}. @item %unique and %key Working with keys. @xref{Keys and Unique Fields}. @item %doc Documenting your database. @xref{Documenting Records}. @item %typedef and %type Field types. @xref{Field Types}. @item %auto Auto-counters and time-stamps. @xref{Auto-Generated Fields}. @item %sort Keeping your record sets sorted. @xref{Sorted Output}. @item %size Restricting the size of your database. @xref{Size Constraints}. @item %constraint Enforcing arbitrary constraints. @xref{Arbitrary Constraints}. @item %confidential Storing confidential information. @xref{Encryption}. @item %singular Fields without repeating values. @end table @node Querying Recfiles @chapter Querying Recfiles Since recfiles are always human readable, you could lookup data simply by opening an editor and searching for the desired information. Or you could use a standard tool such as @command{grep} to extract strings matching a pattern. However, recutils provides a more powerful and flexible way to lookup data. The following sections explore how the recutils can be used in order to extract data from recfiles, from very basic and simple queries to quite complex examples. @menu * Simple Selections:: Introducing @command{recsel}. * Selecting by Type:: Get the records of some given type. * Selecting by Position:: Get the record occupying some position. * Random Records:: Get a set of random records. * Selection Expressions:: Get the records satisfying some expression. * Field Expressions:: Selecting a subset of fields. * Sorted Output:: Get the records in a given order. @end menu @node Simple Selections @section Simple Selections @command{recsel} is an utility whose primary purpose is to select records from a recfile and print them on standard output. Consider the following example record set, which we shall assume is saved in a recfile called @file{acquaintances.rec}: @example # This database contains a list of both real and fictional people # along with their age. Name: Ada Lovelace Age: 36 Name: Peter the Great Age: 53 # Name: Matusalem # Age: 969 Name: Bart Simpson Age: 10 Name: Adrian Mole Age: 13.75 @end example @noindent If we invoke @command{recsel acquaintances.rec} we will get a list of all the records stored in the file in the terminal: @example $ recsel acquaintances.rec Name: Ada Lovelace Age: 36 Name: Peter the Great Age: 53 Name: Bart Simpson Age: 10 Name: Adrian Mole Age: 13.75 @end example @noindent Note that the commented out parts of the file, in this case the explanatory header and the record corresponding to Matusalem, are not part of the output produced by @command{recsel}. This is because @command{recsel} is concerned only with the data. @command{recsel} will also ``pack'' the records so any extra empty lines that may be between records are not echoed in the output: @multitable @columnfractions .5 .5 @item @example @strong{acquaintances.rec:} Name: Peter the Great Age: 53 # Note the extra empty lines. Name: Bart Simpson Age: 10 @end example @tab @example $ recsel acquaintances.rec Name: Peter the Great Age: 53 Name: Bart Simpson Age: 10 @end example @end multitable @noindent It is common to store data gathered in several recfiles. For example, we could have a @file{contacts.rec} file containing general contact records, and also a @file{work-contacts.rec} file containing business contacts: @multitable @columnfractions .5 .5 @item @example @strong{contacts.rec:} Name: Granny Phone: +12 23456677 Name: Doctor Phone: +12 58999222 @end example @tab @example @strong{work-contacts.rec:} Name: Yoyodyne Corp. Email: sales@@yoyod.com Phone: +98 43434433 Name: Robert Harris Email: robert.harris@@yoyod.com Note: Sales Department. @end example @end multitable Both files can be passed to @command{recsel} in the command line. In that case @command{recsel} will simply process them and output their records in the same order they were specified: @example $ recsel contacts.rec work-contacts.rec Name: Granny Phone: +12 23456677 Name: Doctor Phone: +12 58999222 Name: Yoyodyne Corp. Email: sales@@yoyod.com Phone: +98 43434433 Name: Robert Harris Email: robert.harris@@yoyod.com Note: Sales Department. @end example @noindent As mentioned above, the output follows the ordering on the command line, so @command{recsel work-contacts.rec contacts.rec} would output the records of @file{work-contacts.rec} first and then the ones from @file{contacts.rec}. @noindent Note however that @command{recsel} will merge records from several files specified in the command line only if they are anonymous. If the contacts in our files were typed: @multitable @columnfractions .5 .5 @item @example @strong{contacts.rec:} %rec: Contact Name: Granny Phone: +12 23456677 Name: Doctor Phone: +12 58999222 @end example @tab @example @strong{work-contacts.rec:} %rec: Contact Name: Yoyodyne Corp. Email: sales@@yoyod.com Phone: +98 43434433 Name: Robert Harris Email: robert.harris@@yoyod.com Note: Sales Department. @end example @end multitable @noindent Then we would get the following error message: @example $ recsel contacts.rec work-contacts.rec recsel: error: duplicated record set 'Contact' from work-contacts.rec. @end example @node Selecting by Type @section Selecting by Type As we saw in the section discussing record descriptors, it is possible to have several different types of records in a single recfile. Consider for example a @file{gnu.rec} file containing information about maintainers and packages in the GNU Project: @example %rec: Maintainer Name: Jose E. Marchesi Email: jemarch@@gnu.org Name: Luca Saiu Email: positron@@gnu.org %rec: Package Name: GNU recutils LastRelease: 12 February 2014 Name: GNU epsilon LastRelease: 10 March 2013 @end example @noindent If @command{recsel} is invoked in that file it will complain: @example $ recsel gnu.rec recsel: error: several record types found. Please use -t to specify one. @end example @noindent This is because @command{recsel} does not know which records to output: the maintainers or the packages. This can be resolved by using the @code{-t} command line option: @example $ recsel -t Package gnu.rec Name: GNU recutils LastRelease: 12 February 2014 Name: GNU epsilon LastRelease: 10 March 2013 @end example @noindent By default @command{recsel} never outputs record descriptors. This is because most of the time the user is only interested in the data. However, with the @code{-d} command line option, the record descriptor of the selected type is printed preceding the data records: @example $ recsel -d -t Maintainer gnu.rec %rec: Maintainer Name: Jose E. Marchesi Email: jemarch@@gnu.org Name: Luca Saiu Email: positron@@gnu.org @end example @noindent Note that at the moment it is not possible to select non-typed (default) records when other record sets are stored in the same file. This is one of the reasons why mixing non-typed records and typed records in a single recfile is not recommended. @noindent Note also that if a nonexistent record type is specified in @code{-t} then @command{recsel} does nothing. @node Selecting by Position @section Selecting by Position As was explained in the previous sections, @command{recsel} outputs all the records of some record set. The records are echoed in the same order they are written in the recfile. However, often it is desirable to select a subset of the records, determined by the position they occupy in their record set. The @code{-n} command line option to @command{recsel} supports doing this in a natural way. This is how we would retrieve the first contact listed in a contacts database using @command{recsel}: @example $ recsel -n 0 contacts.rec Name: Granny Phone: +12 23456677 @end example @noindent Note that the index is zero-based. If we want to retrieve more records we can specify several indexes to @code{-n} separated by commas. If a given index is too big, it is simply ignored: @example $ recsel -n 0,1,999 contacts.rec Name: Granny Phone: +12 23456677 Name: Doctor Phone: +12 58999222 @end example @noindent With @code{-n}, the order in which the records are echoed does not depend on the order of the indexes passed to @code{-n}. For example, the output of @command{recsel -n 0,1} will be identical to the output of @command{recsel -n 1,0}. Ranges of indexes can also be used to select a subset of the records. For example, the following call would also select the first three contacts of the database: @example $ recsel -n 0-2 contacts.rec Name: Granny Phone: +12 23456677 Name: Doctor Phone: +12 58999222 Name: Dad Phone: +12 88229900 @end example @noindent It is possible to mix single indexes and index ranges in the same call. For example, @command{recsel -n 0,5-6} would select the first, sixth and seventh records. @node Random Records @section Random Records Consider a database in which each record is a cooking recipe. It is always difficult to decide what to cook each day, so it would be nice if we could ask @command{recsel} to pick up a random recipe. This can be achieved using the @code{-m} (@code{--random}) command line option of @command{recsel}: @example $ recsel -m 1 recipes.rec Title: Curry chicken Ingredient: A whole chicken Ingredient: Curry Preparation: ... @end example @noindent If we need two recipes, because we will be cooking at both lunch and dinner, we can pass a different number to @code{-m}: @example $ recsel -m 2 recipes.rec Title: Fabada Asturiana Ingredient: 300 gr of fabes. Ingredient: Chorizo Ingredient: Morcilla Preparation: ... Title: Pasta with ragu Ingredient: 500 gr of spaghetti. Ingredient: 2 tomatoes. Ingredient: Minced meat. Preparation: ... @end example @noindent The algorithm used to implement @code{-m} guarantees that you will never get multiple instances of the same record. This means that if a record set has @var{n} records and you ask for @var{n} random records, you will get all the records in a random order. @node Selection Expressions @section Selection Expressions @cindex selection expressions @dfn{Selection expressions}, also known as ``sexes'' in recutils jargon, are infix expressions that can be applied to a record. A ``sex'' is a predicate which selects a subset of records within a recfile. They can be simple expressions involving just one operator and a pair of operands, or complex compound expressions with parenthetical sub-expressions and many operators and operands. One of their most common uses is to examine records matching a particular set of conditions. @menu * Selecting by predicate:: Selecting records which satisfy conditions. * SEX Operands:: Literal values, fields and sub-expressions. * SEX Operators:: Arithmetic, logical and other operators. * SEX Evaluation:: Selection expressions are like generators. @end menu @node Selecting by predicate @subsection Selecting by predicate @cindex selecting records @cindex looking up data @cindex retrieving data Consider the example recfile @file{acquaintances.rec} introduced earlier. It contains names of people along with their respective ages. Suppose we want to get a list of the names of all the children. It would not be easy to do this using @command{grep}. Neither would it, for any reasonably large recfile, be feasible to search manually for the children. Fortunately the @command{recsel} command provides an easy way to do such a lookup: @cindex @command{recsel} @example $ recsel -e "Age < 18" -P Name acquaintances.rec Bart Simpson Adrian Mole @end example @noindent Let us look at each of the arguments to @command{recsel} in turn. Firstly we have @code{-e} which tells @command{recsel} to lookup records matching the expression @code{Age < 18} --- in other words all those people whose ages are less than 18. @cindex selection expressions This is an example of a @dfn{selection expression}. In this case it is a simple test, but it can be as complex as needed. Next, there is @code{-P} which tells @command{recsel} to print out the value of the @code{Name} field --- because we want just the name, not the entire record. The final argument is the name of the file from whence the records are to come: @file{acquaintances.rec}. Rather than explicitly storing ages in the recfile, a more realistic example might have the date of birth instead (otherwise it would be necessary to update the people's ages in the recfile on every birthday). @example # Date of Birth %type: Dob date Name: Alfred Nebel Dob: 20 April 2010 Email: alf@@example.com Name: Bertram Worcester Dob: 3 January 1966 Email: bert@@example.com Name: Charles Spencer Dob: 4 July 1997 Email: charlie@@example.com Name: Dirk Hogart Dob: 29 June 1945 Email: dirk@@example.com Name: Ernest Wright Dob: 26 April 1978 Email: ernie@@example.com @end example @noindent Now we can achieve a similar result as before, by looking up the names of all those people who were born after a particular date: @example $ recfix acquaintances.rec $ recsel -e "Dob >> '31 July 1994'" -p Name acquaintances.rec Name: Alfred Nebel Name: Charles Spencer @end example @cindex date comparison @noindent The @code{>>} operator means ``later than'', and is used here to select a date of birth after 31st July 1994. Note also that this example uses a lower case @code{-p} whereas the preceding example used the upper case @code{-P}. The difference is that @code{-p} prints the field name and field value, whereas @code{-P} prints just the value. @command{recsel} accepts more than one @code{-e} argument, each introducing a selection expression, in which case the records which satisfy all expressions are selected. You can provide more than one field label to @code{-P} or @code{-p} in order to select additional fields to be displayed. For example, if you wanted to send an email to all children 14 to 18 years of age, and today's date were @w{1st August} 2012, then you could use the following command to get the name and email address of all such children: @example $ recfix acquaintances.rec $ recsel -e "Dob >> '31 July 1994' && Dob << '01 August 1998'" \ -p Name,Email acquaintances.rec Name: Charles Spencer Email: charlie@@example.com @end example @noindent As you can see, there is only one such child in our record set. @cindex quotation marks Note that the example command shown above contains both double quotes @code{"} and single quotes @code{'}. @cindex date comparison The double quotes are interpreted by the shell (@eg{} @command{bash}) and the single quotes are interpreted by @command{recsel}, defining a string. (And the backslash is interpreted by the shell, the usual continuation character so that this manual doesn't have a too-long line.) @node SEX Operands @subsection SEX Operands @cindex operands, SEX operands The supported operands are: numbers, strings, field names and parenthesized expressions. @subsubsection Numeric Literals @cindex literals, numeric literals The supported numeric literals are integer numbers and real numbers. The usual sign character @samp{-} is used to denote negative values. Integer values can be denoted in base 10, base 16 using the @code{0x} prefix, and base 8 using the @code{0} prefix. Examples are: @example 10000 0 0xFF -0xa 012 -07 -1342 .12 -3.14 @end example @subsubsection String Literals @cindex literals, string literals String values are delimited by either the @code{'} character or the @code{"} character. Whichever delimiter is used, the delimiter closing the literal must be the same as the delimiter used to open it. Newlines and tabs can be part of a string literal. Examples are: @example 'Hello.' 'The following example is the empty string.' '' @end example @cindex quotation marks The @code{'} and @code{"} characters can be part of a string if they are escaped with a backslash, as in: @example 'This string contains an apostrophe: \'.' "This one a double quote: \"." @end example @subsubsection Field Values @cindex field values, in selection expressions The value of a field value can be included in a selection expression by writing its name. The field name is replaced by a string containing the field value, to handle the possibility of records with more than one field by that name. Examples: @example Name Email long_field_name @end example It is possible to use the role part of a field if it is not empty. So, for example, if we are searching for the issues opened by @samp{John Smith} in a database of issues we could write: @example $ recsel -e "OpenedBy = 'John Smith'" @end example @noindent instead of using a full field name: @example $ recsel -e "Hacker:Name:OpenedBy = 'John Smith'" @end example When the name of a field appears in an expression, the expression is applied to all the fields in the record featuring that name. So, for example, the expression: @example Email ~ "\\.org" @end example @noindent matches any record in which there is a field named @samp{Email} whose value terminates in (the literal string) @samp{.org}. If we are interested in the value of some specific email, we can specify its relative position in the containing record by using @dfn{subscripts}. @cindex subscripts, in selection expressions Consider, for example: @example Email[0] ~ "\\.org" @end example @noindent Will match for: @example Name: Mr. Foo Email: foo@@foo.org Email: mr.foo@@foo.com @end example @noindent But not for: @example Name: Mr. Foo Email: mr.foo@@foo.com Email: foo@@foo.org @end example The regexp syntax supported in selection expressions is POSIX EREs, with several GNU extensions. @xref{Regular Expressions}. @subsubsection Parenthesized Expressions @cindex parentheses, in selection expressions. Parenthesis characters (@code{(} and @code{)}) can be used to group sub expressions in the usual way. @node SEX Operators @subsection Operators @cindex operators, in selection expressions The supported operators are arithmetic operators (addition, subtraction, multiplication, division and modulus), logical operators, string operators and field operators. @subsubsection Arithmetic Operators @cindex arithmetic operators @cindex operators, arithmetic operators Arithmetic operators for addition (@code{+}), subtraction (@code{-}), multiplication (@code{*}), integer division (@code{/}) and modulus (@code{%}) are supported with their usual meanings. These operators require either numeric operands or string operands whose value can be interpreted as numbers (integer or real). @subsubsection Boolean Operators @cindex boolean operators @cindex operators, boolean operators The boolean operators @strong{and} (@code{&&}), @strong{or} (@code{||}) and @strong{not} (@code{!})@: are supported with the same semantics as their C counterparts. A compound boolean operator @code{=>} is also supported in order to ease the elaboration of constraints in records: @code{A => B}, which can be read as ``A implies B'', translates into @code{!A || (A && B)}. The boolean operators expect integer operands, and will try to convert any string operand to an integer value. @subsubsection Comparison Operators @cindex operators, comparison operators @cindex comparison The compare operators @strong{less than} (@code{<}), @strong{greater than} (@code{>}), @strong{less than or equal} (@code{<=}), @strong{greater than or equal} (@code{>=}), @strong{equal} (@code{=}) and @strong{unequal} (@code{!=}) are supported with their usual meaning. Strings can be compared with the equality operator (@code{=}). The match operator (@code{~}) can be used to match a string with a given regular expression (@pxref{Regular Expressions}). @subsubsection Date Comparison Operators @cindex date comparison The compare operators @strong{before} (@code{<<}), @strong{after} (@code{>>}) and @strong{same time} (@code{==}) can be used with fields and strings containing parseable dates. @xref{Date input formats}. @subsubsection Field Operators @cindex field operators @cindex counting occurrences of a field Field counters are replaced by the number of occurrences of a field with the given name in the record. For example: @example #Email @end example The previous expression is replaced with the number of fields named @code{Email} in the record. It can be zero if the record does not have a field with that name. @subsubsection String Operators @cindex string operators @cindex operators, string operators The string concatenation operator (@code{&}) can be used to concatenate any number of strings and field values. @example 'foo' & Name & 'bar' @end example @subsubsection Conditional Operator @cindex conditional operator @cindex operators, conditional operator The ternary conditional operator can be used to select alternatives based on the value of some expression: @example expr1 ? expr2 : expr3 @end example If @code{expr1} evaluates to true (@ie{} it is an integer or the string representation of an integer and its value is not zero) then the operator yields @code{expr2}. Otherwise it yields @code{expr3}. @node SEX Evaluation @subsection Evaluation of Selection Expressions @cindex evaluation, of selection expressions Given that: @itemize @minus @item It is possible to refer to fields by name in selection expressions. @item Records can have several fields with the same name. @end itemize @noindent It is clear that some backtracking mechanism is needed in the evaluation of the selection expressions. For example, consider the following expression that is deciding whether a ``registration'' in a webpage should be rejected: @example ((Email ~ "foomail\.com") || (Age <= 18)) && !#Fixed @end example The previous expression will be evaluated for every possible permutation of the fields ``Email'', ``Age'' and ``Fixed'' present in the record, until one of the combinations succeeds. At that point the computation is interrupted. When used to decide whether a record matches some criteria, the goal of a selection expression is to act as a boolean expression. In that case the final value of the expression depends on both the type and the value of the result launched by the top-most subexpression: @itemize @minus @item If the result is an @b{integer}, the expression is true if its value is not zero. @item If the result is a @b{real}, or a @b{string}, the expression evaluates to false. @end itemize Sometimes a selection expression is used to compute a result instead of a boolean. In that case the returned value is converted to a string. This is used when replacing the slots in templates (@pxref{Templates}). @node Field Expressions @section Field Expressions @cindex field expressions @cindex FEX @dfn{Field expressions} (also known as ``fexes'') are a way to select fields of a record. They also allow you to do certain transformations on the selected fields, such as changing their names. A FEX comprises a sequence of @dfn{elements} separated by commas: @example ELEM_1,ELEM_2,@dots{},ELEM_N @end example Each element makes a reference to one or more fields in a record identified by a given name and an optional subscript: @example @var{Field_Name}[@var{min}-@var{max}] @end example @noindent @var{min} and @var{max} are zero-based indexes. It is possible to refer to a field occupying a given position. For example, consider the following record: @example Name: Mr. Foo Email: foo@@foo.com Email: foo@@foo.org Email: mr.foo@@foo.org @end example @noindent We would select all the emails of the record with: @example Email @end example @noindent The first email with: @example Email[0] @end example @noindent The third email with: @example Email[2] @end example @noindent The second and the third email with: @example Email[1-2] @end example And so on. It is possible to select the same field (or range of fields) more than once just by repeating them in a field expression. Thus, the field expression: @example Email[0],Name,Email @end example @noindent will print the first email, the name, and then all the email fields including the first one. @cindex aliasing, field name aliasing It is possible to include a @dfn{rewrite rule} in an element of a field expression, which specifies an alias for the selected fields: @example @var{Field_Name}[@var{min}-@var{max}]:@var{Alias} @end example @noindent For example, the following field expression specifies an alias for the fields named @code{Email} in a record: @example Name,Email:ElectronicMail @end example Since the rewrite rules only affect the fields selected in a single element of the field expression, it is possible to define different aliases to several fields having the same name but occupying different positions: @example Name,Email[0]:PrimaryEmail,Email[1]:SecondaryEmail @end example @noindent When that field expression is applied to the following record: @example Name: Mr. Foo Email: primary@@email.com Email: secondary@@email.com Email: other@@email.com @end example @noindent the result will be: @example Name: Mr. Foo PrimaryEmail: primary@@email.com SecondaryEmail: secondary@@email.com Email: other@@email.com @end example It is possible to use the dot notation in order to refer to field and sub-fields. This is mainly used in the context of joins, where new fields are created having compound names such as @code{Foo_Bar}. A reference to such a field can be done in the fex using dot notation as follows: @example Foo.Bar @end example @node Sorted Output @section Sorted Output @cindex @code{%sort} @cindex sorting This special field sets sorting criteria for the records contained in a record set. Its usage is: @example %sort: @var{field1} @var{field2} ... @end example @noindent Meaning that the desired order for the records will be determined by the contents of the fields named in the @code{%sort} value. The sorting is always done in ascending order, and there may be records that lack the involved fields, @ie{} the sorting fields need not be mandatory. It is an error to have more than one @code{%sort} field in the same record descriptor, as only one field list can be used as sorting criteria. Consider for example that we want to keep the records in our inventory system ordered by entry date. We could achieve that by using the following record descriptor in the database: @example %rec: Item %type: Date date %sort: Date Id: 1 Title: Staplers Date: 10 February 2011 Id: 2 Title: Ruler Pack 20 Date: 2 March 2009 @dots{} @end example @noindent As you can see in the example above, the fact we use @code{%sort} in a database does not mean that the database will be always physically ordered. Unsorted record sets are not a data integrity problem, and thus the diagnosis tools must not declare a recfile as +invalid because of this. The utility @command{recfix} provides a way +to physically order the fields in the file (@pxref{Invoking recfix}). On the other hand any program listing, presenting or processing data extracted from the recfile must honor the @code{%sort} entry. For example, when using the following @command{recsel} program in the database above we would get the output sorted by date: @example $ recsel inventory.rec Id: 2 Title: Ruler Pack 20 Date: 2 March 2009 Id: 1 Title: Staplers Date: 10 February 2011 @end example @cindex order of fields @noindent The sorting of the selected field depends on its type: @itemize @minus @item Numeric fields (integers, ranges, reals) are numerically ordered. @item Boolean fields are ordered considering that ``false'' values come first. @item Dates are ordered chronologically. @item Any other kind of field is ordered using a lexicographic order. @end itemize It is possible to specify several fields as the sorting criteria. In that case the records are sorted using a lexicographic order. Consider for example the following unsorted database containing marks for several students: @example %rec: Marks %type: Class enum A B C %type: Score real Name: Mr. One Class: C Score: 6.8 Name: Mr. Two Class: A Score: 6.8 Name: Mr. Three Class: B Score: 9.2 Name: Mr. Four Class: A Score: 2.1 Name: Mr. Five Class: C Score: 4 @end example @noindent If we wanted to sort it by @code{Class} and by @code{Score} we would insert a @code{%sort} special field in the descriptor, having: @example %rec: Marks %type: Class enum A B C %type: Score real %sort: Class Score Name: Mr. Four Class: A Score: 2.1 Name: Mr. Two Class: A Score: 6.8 Name: Mr. Three Class: B Score: 9.2 Name: Mr. Five Class: C Score: 4 Name: Mr. One Class: C Score: 6.8 @end example @noindent The order of the fields in the @code{%sort} field is significant. If we reverse the order in the example above then we get a different sorted set: @example %rec: Marks %type: Class enum A B C %type: Score real %sort: Score Class Name: Mr. Four Class: A Score: 2.1 Name: Mr. Five Class: C Score: 4 Name: Mr. Two Class: A Score: 6.8 Name: Mr. One Class: C Score: 6.8 Name: Mr. Three Class: B Score: 9.2 @end example @noindent In this last case, @code{Mr. One} comes after @code{Mr. Two} because the class @code{A} comes before the class @code{B} even though the score is the same (@code{6.8}). @node Editing Records @chapter Editing Records The simplest way of editing a recfile is to start your favourite text editor and hack the contents of the file as desired. However, the rec format is structured enough so recfiles can be updated automatically by programs. This is useful for writing shell scripts or when there are complex data integrity rules stored in the file that we want to be sure to preserve. The following sections discuss the usage of the recutils for altering recfiles in the level of record: adding new records, deleting or commenting them out, sorting them, @etc{} @menu * Inserting Records:: Inserting data into recfiles. * Deleting Records:: Removing data. * Sorting Records:: Physical reordering of records. @end menu @node Inserting Records @section Inserting Records Adding new records to a recfile is pretty trivial: open it with your text editor and just write down the fields comprising the records. This is really the best way to add contents to a recfile containing simple data. However, complex databases may introduce some difficulties: @table @emph @item Multi-line values. It can be tedious to manually encode the several lines. @item Data integrity. It is difficult to manually maintain the integrity of data stored in the data base. @item Counters and timestamps. Some record sets feature auto-generated fields, which are commonly used to implement counters and time-stamps. @xref{Auto-Generated Fields}. @end table Thus, to facilitate the insertion of new data a command line utility called @command{recins} is included in the recutils. The usage of @command{recins} is very simple, and can be used both in the command line or called from another program. The following subsections discuss several aspects of using this utility. @menu * Adding Records With recins:: Basics of the @command{recins} utility. * Replacing Records With recins:: Substituting records in a file. * Adding Anonymous Records:: Inserting or replacing records with no type. @end menu @node Adding Records With recins @subsection Adding Records With recins Each invocation of @command{recins} adds one record to the targeted database. The fields comprising the records are specified using pairs of @code{-f} and @code{-v} command line arguments. For example, this is how we would add the first entry to a previously empty contacts database: @example $ recins -f Name -v "Mr Foo" -f Email -v foo@@bar.baz contacts.rec $ cat contacts.rec Name: Mr. Foo Email: foo@@bar.baz @end example @noindent If we invoke @command{recins} again on the same database we will be adding a second record: @example $ recins -f Name -v "Mr Bar" -f Email -v bar@@gnu.org contacts.rec $ cat contacts.rec Name: Mr. Foo Email: foo@@bar.baz name: Mr. Bar Email: bar@@gnu.org @end example There is no limit on the number of @code{-f} @code{-v} pairs that can be specified to @command{recins}, other than any limit on command line arguments which may be imposed by the shell. The field values provided using @code{-v} are encoded to follow the rec format conventions, including multi-line field values. Consider the following example: @example $ recins -f Name -v "Mr. Foo" -f Address -v ' Foostrs. 19 Frankfurt am Oder Germany' contacts.rec $ cat contacts.rec Name: Mr. Foo Address: + Foostrs. 19 + Frankfurt am Oder + Germany @end example It is also possible to provide fields already encoded as rec data for their addition, using the @code{-r} command line argument. This argument can be intermixed with @code{-f} @code{-v}. @example $ recins -f Name -v "Mr. Foo" -r "Email: foo@@bar.baz" contacts.rec $ cat contacts.rec Name: Mr. Foo Email: foo@@bar.baz @end example If the string passed to @code{-r} is not valid rec data then @command{recins} will complain with an error and the operation will be aborted. At this time, it is not possible to add new records containing comments. @node Replacing Records With recins @subsection Replacing Records With recins @command{recins} can also be used to replace existing records in a database with a provided record. This is done by specifying some criteria selecting the record (or records) to be replaced. Consider for example the following command applied to our contacts database: @example $ recins -e "Email = 'foo@@bar.baz'" -f Name -v "Mr. Foo" \ -f Email -v "new@@bar.baz" contacts.rec @end example @noindent The contact featuring an email @code{foo@@bar.baz} gets replaced with the following record: @example Name: Mr. Foo Email: new@@bar.baz @end example The records to be replaced can also be specified by index, or a range of indexes. For example, the following command replaces the first, second and third records in a database with dummy records: @example $ recins -n 0,1-2 -f Dummy -v XXX foo.rec $ cat foo.rec Dummy: XXX Dummy: XXX Dummy: XXX ... Other records ... @end example @node Adding Anonymous Records @subsection Adding Anonymous Records In a previous chapter we noted that @command{recsel} interprets the absence of a @command{-t} argument depending on the actual contents of the file. If the recfile contains records of just one type the command assumes that the user is referring to these records. @command{recins} does not follow this convention, and the absence of an explicit type always means to insert (or replace) an anonymous record. Consider for example the following database: @example %rec: Marks %type: Class enum A B C Name: Alfred Class: A Name: Bertram Class: B @end example @noindent If we want to insert a new mark we have to specify the type explicitly using @command{-t}: @example $ cat marks.rec | recins -t Marks -f Name -v Xavier -f Class -v C %rec: Marks %type: Class enum A B C Name: Alfred Class: A Name: Bertram Class: B Name: Xavier Class: C @end example @noindent If we forget to specify the type then an anonymous record is created instead: @example $ cat marks.rec | recins -f Name -v Xavier -f Class -v C Name: Xavier Class: C %rec: Marks %type: Class enum A B C Name: Alfred Class: A Name: Bertram Class: B @end example @node Deleting Records @section Deleting Records @cindex deleting records Just as @code{recins} inserts records, the utility @code{recdel} deletes them. Consider the following recfile @file{stock.rec}: @example %rec: Item %type: Expiry date %sort: Title Title: First Aid Kit Expiry: 2 May 2009 Title: Emergency Rations Expiry: 10 August 2009 Title: Life raft Expiry: 2 March 2009 @end example Suppose we wanted to delete all items with an @code{Expiry} value before a certain date, we could do this with the following command: @example $ recdel -t Item -e 'Expiry << "5/12/2009"' stock.rec @end example @noindent After running this command, only one record will remain in the file (@viz{} the one titled `Emergency Rations') because all the others have expiry dates prior to 12 May 2009. @footnote{`5/12/2009' means the 12th day of May 2009, @emph{not} the fifth day of December, even if your @env{LC_TIME} environment variable has been set to suggest otherwise.} The @command{-t} option can be omitted if, and only if, there is no @code{%rec} field in the recfile. @command{recdel} tries to warn you if you attempt to perform a delete operation which it deems to be too pervasive. In such cases, it will refuse to run, unless you give the @command{--force} flag. However, you should not rely upon @command{recdel} to protect you, because it cannot always correctly guess that you might be deleting more records than intended. For this reason, it may be wise to use the @command{-c} flag, which causes the relevant records to be commented out, rather than deleted. (And of course backups are always wise.) The complete options available to the @command{recdel} command are explained later. @xref{Invoking recdel}. @node Sorting Records @section Sorting Records @cindex sorting @cindex sorting, physically In the example above, note the existence of the @code{%sort: Title} line. This field was discussed previously (@pxref{Sorted Output}) and, as mentioned, does not imply that the records need to be stored in the recfile in any particular order. However, if desired, you can automatically arrange the recfile in that order using @command{recfix} with the @command{--sort} flag. After running the command @example $ recfix --sort stock.rec @end example @noindent the file @file{stock.rec} will have its records sorted in alphabetical order of the @code{Title} fields, thus: @example %rec: Item %type: Expiry date %sort: Title Title: Emergency Rations Expiry: 10 August 2009 Title: First Aid Kit Expiry: 2 May 2009 Title: Liferaft Expiry: 2 March 2009 @end example @node Editing Fields @chapter Editing Fields Fields of a recfile can, of course, be edited manually using an editor and this is often the easiest way when only a few fields need to be changed or when the nature of the changes do not follow any particular pattern. If, however, a large number of similar changes to several records are required,the @command{recset} command can make the job easier. The formal description of @command{recset} is presented later (@pxref{Invoking recset}). In this chapter some typical usage examples are discussed. As with @command{recdel}, @command{recset} if used erroneously has the potential to make very pervasive changes, which could result in a large loss of data. It is prudent therefore to take a copy of a recfile before running such commands. @menu * Adding Fields:: Adding new fields to records. * Setting Fields:: Editing field values. * Deleting Fields:: Removing or commenting-out fields. * Renaming Fields:: Changing the name of a field. @end menu @node Adding Fields @section Adding Fields @cindex adding fields As mentioned above, the command @command{recins} adds new records to a recfile, but it cannot add fields to an existing record. This task can be achieved automatically using @command{recset} with its @command{-a} flag. Suppose that (after a stock inspection) you wanted to add an `Inspected' field to all the items in the recfile. The following command could be used. @example $ recset -t Item -f Inspected -a 'Yes' stock.rec @end example @noindent Here, because no record selection flag was provided, the command affected @emph{all} the records of type `Item'. We could limit the effect of the command using the @command{-e}, @command{-q}, @command{-n} or @command{-m} flags. For example to add the `Inspected' field to only the first item the following command would work: @example $ recset -t Item -n 0 -f Inspected -a 'Yes' stock.rec @end example @noindent Similarly, a selection expression could have been used with the @command{-e} flag in order to add the field only to records which satisfy the expression. If you use @command{recset} with the @command{-a} flag on a field that already exists, a new field (in addition to those already present) will be appended with the given value. @node Setting Fields @section Setting Fields @cindex mutating field values It is also possible to update the value of a field. This is done using @command{recset} with its @command{-s} flag. In the previous example, an `Inspected' flag was added to certain records, with the value `yes'. After reflection, one might want to record the date of inspection, rather than a simple yes/no flag. Records which have no such field will remain unchanged. @example $ recset -t Item -f Inspected -s '30 October 2006' stock.rec @end example Although the above command does not have any selection criteria, it will only affect those records for which a `Inspected' field exists. This is because the @command{-s} flag only sets values of existing fields. It will not create any fields. If instead the @command{-S} flag is used, this will create the field (if it does not already exist) @emph{and} set its value. @example $ recset -t Item -f Inspected -S '30 October 2006' stock.rec @end example @node Deleting Fields @section Deleting Fields @cindex deleting fields You can delete fields using @command{recset}'s @command{-d} flag. For example, if we wanted to delete the @code{Inspected} field which we introduced above, we could do so as follows: @example $ recset -t Item -f Inspected -d stock.rec @end example @noindent This would delete @emph{all} fields named @code{Inspected} from @emph{all} records of type @code{Item}. It may be that, we only wanted to delete the @code{Inspected} fields from records which satisfy a certain condition. The following would delete the fields only from items whose @code{Expiry} date was before 2 January 2010: @example $ recset -t Item -e 'Expiry << "2 January 2010"' -f Inspected -d stock.rec @end example @node Renaming Fields @section Renaming Fields @cindex renaming fields Another use of @command{recset} is to rename existing fields. This is achieved using the @command{-r} flag. To rename all instances of the @code{Expiry} field occurring in any record of type @code{Item} to @code{UseBy}, the following command suffices: @example $ recset -t Item -f Expiry -r 'UseBy' stock.rec @end example @noindent As with most operations, this could be done selectively, using the @command{-e} flag and a selection expression. @node Field Types @chapter Field Types Field values are, by default, unrestricted text strings. However, it is often useful to impose some restrictions on the values of certain fields. For example, consider the following record: @example Id: 111 Name: Jose E. Marchesi Age: 30 MaritalStatus: single Phone: +49 666 666 66 @end example The values of the fields must clearly follow some structure in order to make sense. @code{Id} is a numeric identifier for a person. @code{Name} will never use several lines. @code{Age} will typically be in the range @code{0..120}, and there are only a few valid values for @code{MaritalStatus}: single, married, divorced, and widow(er). Phones may be restricted to some standard format as well to be valid. All these restrictions (and many others) can be enforced by using @dfn{field types}. There are two kind of field types: @dfn{anonymous} and @dfn{named}. Those are described in the following subsections. @menu * Declaring Types:: Declaration of types in record descriptors. * Types and Fields:: Associating fields with types. * Scalar Field Types:: Numbers and ranges. * String Field Types:: Lines, limited strings and regular expressions. * Enumerated Field Types:: Enumerations and boolean values. * Date and Time Types:: Dates and times. * Other Field Types:: Emails, fields, UUIDs, @dots{} @end menu @node Declaring Types @section Declaring Types A type can be declared in a record descriptor by using the @code{%typedef} special field. The syntax is: @example %typedef: @var{type_name} @var{type_description} @end example @noindent Where @var{type_name} is the name of the new type, and @var{type_description} a description which varies depending of the kind of type. @cindex @code{range}, type description For example, this is how a type @code{Age_t} could be defined as numbers in the range @code{0..120}: @example %typedef: Age_t range 0 120 @end example @noindent Type names are identifiers having the following syntax: @example [a-zA-Z][a-zA-Z0-9_]* @end example @noindent Even though any identifier with that syntax could be used for types, it is a good idea to consistently follow some convention to help distinguishing type names from field names. For example, the @code{_t} suffix could be used for types. A type can be declared to be an alias for another type. The syntax is: @example %typedef: @var{type_name} @var{other_type_name} @end example @noindent Where @var{type_name} is declared to be a synonym of @var{other_type_name}. This is useful to avoid duplicated type descriptions. For example, consider the following example: @example %typedef: Id_t int %typedef: Item_t Id_t %typedef: Transaction_t Id_t @end example @noindent Both @code{Item_t} and @code{Transaction_t} are aliases for the type @code{Id_t}. Which is in turn an alias for the type @code{int}. So, they are both numeric identifiers. The order of the @code{%typedef} fields is not relevant. In particular, a type definition can forward-reference another type that is defined subsequently. The previous example could have been written as: @example %typedef: Item_t Id_t %typedef: Transaction_t Id_t %typedef: Id_t int @end example @noindent @cindex integrity problems Integrity check will complain if undefined types are referenced. As well as when any aliases up referencing back (looping back directly or indirectly) in type declarations. For example, the following set of declarations contains a loop. Thus, it's invalid: @example %typedef: A_t B_t %typedef: B_t C_t %typedef: C_t A_t @end example @noindent The scope of a type is the record descriptor where it is defined. @node Types and Fields @section Types and Fields @cindex @code{%type} @cindex @code{%typedef} @cindex types @cindex field types, Fields can be declared to have a given type by using the @code{%type} special field in a record descriptor. The synopsis is: @example %type: @var{field_list} @var{type_name_or_description} @end example @noindent Where @var{field_list} is a list of field names separated by commas. @var{type_name_or_description} can be either a type name which has been previously declared using @code{%typedef}, or a type description. Type names are useful when several fields are declared to be of the same type: @example %typedef: Id_t int %type: Id Id_t %type: Product Id_t @end example @cindex anonymous types @noindent Anonymous types can be specified by writing a type description instead of a type name. They help to avoid superfluous type declarations in the common case where a type is used by just one field. A record containing a single @code{Id} field, for example, can be defined without having to use a @code{%typedef} in the following way: @example %rec: Task %type: Id int @end example @node Scalar Field Types @section Scalar Field Types The rec format supports the declaration of fields of the following scalar types: integer numbers, ranges and real numbers. @cindex integers Signed @dfn{integers} are supported by using the @code{int} declaration: @example %typedef: Id_t int @end example @cindex hexadecimal @cindex octal @noindent Given the declaration above, fields of type @code{Id_t} must contain integers, and they may be negative. Hexadecimal values can be written using the @code{0x} prefix, and octal values using an extra @code{0}. Valid examples are: @example %type: Id Id_t Id: 100 Id: -23 Id: -0xFF Id: 020 @end example @cindex ranges @noindent Sometimes it is desirable to reduce the @dfn{range} of integers allowed in a field. This can be achieved by using a range type declaration: @example %typedef: Interrupt_t range 0 15 @end example @noindent Note that it is possible to omit the minimum index in ranges. In that case it is implicitly zero: @example %typedef: Interrupt_t range 15 @end example @noindent It is possible to use the keywords @code{MIN} and @code{MAX} instead of a numeral literal in one or both of the points conforming the range. They mean the minimum and the maximum integer value supported by the implementation respectively. See the following examples: @example %typedef: Negative range MIN -1 %typedef: Positive range 0 MAX %typedef: AnyInt range MIN MAX %typedef: Impossible range MAX MIN @end example @noindent Hexadecimal and octal numbers can be used to specify the limits in a range. This helps to define scalar types whose natural base is not ten, like for example: @example %typedef: Address_t range 0x0000 0xFFFF %typedef: Perms_t range 755 @end example @cindex reals @cindex fractions @cindex floating point numbers @noindent @dfn{Real} number fields can be declared with the @code{real} type specifier. A wide range of real numbers can be represented this way, only limited by the underlying floating point representation. @cindex decimal separator @cindex locale The decimal separator is always the dot (@code{.}) character regardless of the locale setting. For example: @example %typedef: Longitude_t real @end example @noindent Examples of fields of type real: @example %rec: Rectangle %typedef: Longitude_t real %type: Width Longitude_t %type: Height Longitude_t Width: 25.01 Height: 10 @end example @node String Field Types @section String Field Types @cindex strings The @code{line} field type specifier can be used to restrict the value of a field to a single line, @ie{} no newline characters are allowed. For example, a type for proper names could be declared as: @example %typedef: Name_t line @end example @noindent Examples of fields of type line: @cindex multiline field values @example Name: Mr. Foo Bar Name: Mrs. Bar Baz Name: This is + invalid @end example @cindex field size @cindex size, field size @cindex @code{size}, type description @noindent Sometimes it is the maximum size of the field value that shall be restricted. The @code{size} field type specifier can be used to define the maximum number of characters a field value can have. For example, if we were collecting input that will get written in a paper-based forms system allowing up to 25 characters width entries, we could declare the entries as: @example %typedef: Address_t size 25 @end example @noindent Note that hexadecimal and octal integer constants can also be used to specify field sizes: @example %typedef: Address_t size 0x18 @end example @cindex restricting values of fields @noindent Arbitrary restrictions can be defined by using regular expressions. @cindex @code{regexp}, type description The @dfn{regexp} field type specifier introduces an ERE (extended regular expression) that will be matched against fields having that name. The synopsis is: @example %typedef: @var{type_name} regexp /@var{re}/ @end example @noindent where @var{re} is the regular expression to match. For example, consider the @code{Id_t} type designed to represent the encoding of the identifier of ID cards in some country: @example %typedef: Id_t regexp /[0-9]@{9@}[a-zA-Z]/ @end example @noindent Examples of fields of type @code{Id_t} are: @example IDCard: 123456789Z IDCard: invalid id card @end example @noindent Note that the slashes delimiting the @var{re} can be replaced with any other character that is not itself used as part of the regexp. That is useful in some cases such as: @example %typedef: Path_t regexp |(/[^/]/?)+| @end example @noindent The regexp flavor supported in recfiles are the POSIX EREs plus several GNU extensions. @xref{Regular Expressions}. @node Enumerated Field Types @section Enumerated Field Types @cindex enumerated types Fields of this type contain symbols taken from an enumeration. The type is described by writing the sequence of symbols comprising the enumeration. Enumeration symbols are strings described by the following regexp: @example [a-zA-Z0-9][a-zA-Z0-9_-]* @end example @noindent The symbols are separated by blank characters (including newlines). For example: @cindex day of week @example %typedef: Status_t enum NEW STARTED DONE CLOSED %typedef: Day_t enum Monday Tuesday Wednesday Thursday Friday + Saturday Sunday @end example @noindent @cindex comments, in enumerated types It is possible to insert comments when describing an enum type. The comments are delimited by parenthesis pairs. The contents of the comments can be any character but parentheses. For example: @example %typedef: TaskStatus_t enum + NEW (The task was just created) + IN_PROGRESS (Task started) + CLOSED (Task closed) @end example @noindent @cindex boolean types @dfn{Boolean} fields, declared with the type specifier @code{bool}, can be seen as special enumerations holding the binary values true and false. @example %typedef: Yesno_t bool @end example @noindent The literals allowed in boolean fields are @code{yes/no}, @code{0/1} and @code{true/false}. Examples are: @example SwitchedOn: 1 SwitchedOn: yes SwitchedOn: false @end example @node Date and Time Types @section Date and Time Types @cindex date, fields containing dates @cindex time, fields containing time values The @dfn{date} field type specifier can be used to declare dates and times. The synopsis is: @example %typedef: @var{type_name} date @end example @cindex locale @cindex time zone correction @noindent There are many permitted date formats, described in detail later in this manual (@pxref{Date input formats}). Of particular note are the following: @itemize @minus @item Dates and times read from recfiles are not affected by the locale or the timezone. This means that the @env{LC_TIME} and the @env{TZ} environment variables are ignored. If you wish, for example, to specify a time which must be interpreted as UTC, you must explicitly append the time zone correction: @eg{} @samp{2001-1-10 12:09Z}. @item The field value `1/10/2001' means January 10, 2001, @strong{not} October 1, 2001. @item Relative times and dates (such as `1 day ago') are permitted but are not particularly useful. @end itemize @node Other Field Types @section Other Field Types @cindex email The @dfn{Email} field type specifier is used to declare electronic addresses. The synopsis is: @example %typedef: Email_t email @end example @noindent Sometimes it is useful to make fields to store field names. For that purpose the @dfn{Field} field type specifier is supported. The synopsis is: @example %typedef: Field_t field @end example @noindent @cindex UUID Universally Unique Identifiers (also known as UUIDs) are a way to assign a globally unique label to some object. The @dfn{uuid} field type specifier serves that purpose. The synopsis is: @example %typedef: Id_t uuid @end example @noindent The format of the uuids is specified as 32 hexadecimal digits, displayed in five groups separated by hyphens. For example: @example 550e8400-e29b-41d4-a716-446655440000 @end example @noindent @cindex foreign key There is one other possible field type, @viz{} a foreign key. The following example defines the type @code{Maintainer_t} to be of type ``record @code{Hacker}''; in other words, a foreign key referring to a record in the @code{Hacker} record set. @example %typedef: Maintainer_t rec Hacker @end example @noindent This essentially means that the values to be stored in fields of type @code{Maintainer_t} are of whatever type is defined for the primary key of the @code{Hacker} record set. Why this is useful is discussed later. @xref{Queries which Join Records}. @node Constraints on Record Sets @chapter Constraints on Record Sets The records in a recfile are by default not restricted to any particular structure except that they must contain one or more fields and optional comments. This provides the format with huge expressive power; but in many cases, it is also desirable to impose some restrictions in order to reflect some of the properties of the data stored in the database. It is also useful in order to preserve data integrity and thus avoid data corruption. The following sections describe the usage of some predefined special fields whose purpose is to impose this kind of restriction in the structure of the records. @menu * Mandatory Fields:: Requiring the presence of fields. * Prohibited Fields:: Forbidding the presence of fields. * Allowed Fields:: Restricting the presence of fields. * Keys and Unique Fields:: Fields characterizing records. * Singular Fields:: Fields with unique contents. * Size Constraints:: Constraints on the number of records in a set. * Arbitrary Constraints:: Constraints records must comply with. @end menu @node Mandatory Fields @section Mandatory Fields @cindex @code{%mandatory} @cindex mandatory fields @cindex requiring certain fields in records @cindex compulsory fields Sometimes, you want to make sure that @emph{every} record of a particular type contains certain fields. To do this, use the special field @code{%mandatory}. The usage is: @example %mandatory: @var{field1} @var{field2} @dots{} @var{fieldN} @end example @noindent The field names are separated by one or more blank characters. @cindex field, compulsory fields @cindex field, mandatory fields The fields listed in a @code{%mandatory} entry are non-optional; @ie{} at least one field with this name shall be present in any record of this kind. @cindex integrity problems Records violating this restriction are invalid and a checking tool will report the situation as a data integrity failure. Consider for example an ``address book'' database where each record stores the information associated with a contact. The records will be heterogeneous, in the sense they won't all contain exactly the same fields: the contact of an Internet shop will probably have a @code{URL} field, while the entry for our grandmother probably won't. We still want to make sure that every entry has a field with the name of the contact. In this case, we could use @code{%mandatory} as follows: @example %rec: Contact %mandatory: Name Name: Granny Phone: +12 23456677 Name: Yoyodyne Corp. Email: sales@@yoyod.com Phone: +98 43434433 @end example A word of caution, however: In many situations, especially in day to day social interaction, it is common to find that certain information is simply unavailable. For example, although every person has a date of birth, some people will refuse to provide that information. It is probably wise therefore to avoid stipulating a field as mandatory, unless it is essential to the enterprise. Otherwise, a data entry clerk faced with this situation will have to make the choice between dropping the entry entirely or entering some fake data to keep the system happy. @node Prohibited Fields @section Prohibited Fields @cindex @code{%prohibit} @cindex restricting fields from records @cindex field, forbidden fields @cindex prohibited fields The inverse of @code{%mandatory} is @code{%prohibit}. Prohibited fields may not occur in @emph{any} record of the given type. The usage is: @example %prohibit: @var{field1} @var{field2} @dots{} @var{fieldN} @end example @noindent The field names are separated by one or more blank characters. @noindent Fields listed in a @code{%prohibit} entry are forbidden; @ie{} no field with this name should be present in any record of this kind. Again, records violating this restriction are invalid. @noindent Several @code{%prohibit} fields can appear in the same record descriptor. The set of prohibited fields is the union of all the entries. For example, in the following database both @code{Id} and @code{id} are prohibited: @example %rec: Entry %prohibit: Id %prohibit: id @end example One possible use case for prohibited fields arises when some field name is reserved for some future use. For example, if we were organizing a sports competition, we would want competitors to register before the event. However a competitor's @code{result} should not and cannot be entered before the competition takes place. Initially then, we would change the record descriptor as follows: @example %rec: Contact %mandatory: Name %prohibit: result @end example @noindent At the start of the event, the @code{%prohibit} line can be deleted, to allow results to be entered. @node Allowed Fields @section Allowed Fields @cindex @code{%allowed} @cindex restricting fields from records @cindex field, allowed fields @cindex allowed fields In some cases we know the set of fields that may appear in the records of a given type, even if they are not mandatory. The @code{%allowed} special field is used to specify this restriction. The usage is: @example %allowed: @var{field1} @var{field2} @dots{} @var{fieldN} @end example @noindent The field names are separated by one or more blank chracters. @noindent If there are more or one @code{%allowed} fields in a record descriptor, all fields of all the records in the record set must be in the union of @code{%allowed}, @code{%mandatory} and @code{%key}. Otherwise an integrity error is raised. @noindent Several @code{%allowed} fields can appear in the same record descriptor. The set of allowed fields is the union of all the entries. @node Keys and Unique Fields @section Keys and Unique Fields @cindex @code{%unique} @cindex @code{%key} The @code{%unique} and @code{%key} special fields are used to avoid several instances of the same field in a record, and to implement keys in record sets. Their usage is: @example %unique: @var{field1} @var{field2} @dots{} @var{fieldN} %key: @var{field} @end example @noindent The field names are separated by one or more blank characters. @cindex unique fields Normally it is permitted for a record to contain two or more fields of the same name. The @code{%unique} special field revokes this permissiveness. A field declared ``unique'' cannot appear more than once in a single record. For example, an entry in an address book database could contain an @code{Age} field. It does not make sense for a single person to be of several ages. So, a field could be declared as ``unique'' in the corresponding record descriptor as follows: @example %rec: Contact %mandatory: Name %unique: Age @end example @noindent Several @code{%unique} fields can appear in the same record descriptor. The set of unique fields is the union of all the entries. @cindex primary key @code{%key} makes the referenced field the primary key of the record set. The primary key behaves as if both @code{%unique} and @code{%mandatory} had been specified for that field. Additionally, there is further restriction, @viz{} a given value of a primary key field may appear no more than once within a record set. Consider for example a database of items in stock. Each item is identified by a numerical @code{Id} field. No item may have more than one @code{Id}, and no items may exist without an associated @code{Id}. Additionally, no two items may share the same @code{Id}. This common situation can be implementing by declaring @code{Id} as the key in the record descriptor: @example %rec: Item %key: Id %mandatory: Title Id: 1 Title: Box Id: 2 Title: Sticker big @end example @noindent It would not make sense to have several primary keys in a record set. Thus, it is not allowed to have several @code{%key} fields in the same record descriptor. It is also forbidden for two items to share the same `Id' value. @cindex integrity problems Both of these situations would be data integrity violations, and will be reported by a checking tool. Elsewhere, we discuss how primary keys can be used to link one record set to another using primary keys together with foreign keys. @xref{Queries which Join Records}. @node Singular Fields @section Singular Fields Sometimes we require certain fields with a given name to not appear in a record set featuring the same contents, but we don't want (or we can't) declare such fields as the key of the record set. In these circumstances we can use @dfn{singular fields}, which are declared as such in the record descriptor using the @code{%singular} special field: @example %singular: @var{field} @end example @node Size Constraints @section Size Constraints @cindex @code{%size} @cindex size, record size @cindex record size Sometimes it is desirable to place constraints on entire records. This can be done with the @code{%size} special field which is used to limit the number of records in a record set. Its usage is: @example %size: [@var{relational_operator}] @var{number} @end example @noindent If no operator is specified then @var{number} is interpreted as the exact number of records of this type. The number can be any integer literal, including hexadecimal and octal constants. For example: @example %rec: Day %size: 7 %type: Name enum + Monday Tuesday Wednesday Thursday Friday + Saturday Sunday %doc: There should be exactly 7 days. @end example @cindex operators The optional @var{relational_operator} shall be one of @code{<}, @code{<=}, @code{>} and @code{>=}@. For example: @example %rec: Item %key: Id %size: <= 100 %doc: We have at most 100 different articles. @end example It is valid to specify a size of @code{0}, meaning that no records of this type shall exist in the file. Only one @code{%size} field shall appear in a record descriptor. @node Arbitrary Constraints @section Arbitrary Constraints @cindex @code{%constraint} @cindex restricting values of fields Occasionally, @code{%mandatory}, @code{%prohibit} and @code{%size} are just not flexible enough. We might, for instance, want to ensure that @emph{if} a field is present, then it must have a certain relationship to other fields. Or we might want to stipulate that under certain conditions only, a record contains a particular field. To this end, recutils provides a way for arbitrary field constraints to be defined. These permit restrictions on the presence and/or value of fields, based upon the value or presence of other fields within that record. This is done using the @code{%constraint} special field. Its usage is: @example %constraint: @var{expr} @end example @noindent where @var{expr} is a selection expression (@pxref{Selection Expressions}). When a constraint is present in a record set it means that all the records of that type must satisfy the selection expression, @ie{} the evaluation of the expression with the record returns 1. Otherwise an integrity error is raised. @cindex integrity problems Consider for example a record type @code{Task} featuring two fields of type date called @code{Start} and @code{End}. We can use a constraint in the record set to specify that the task cannot start after it finishes: @example %rec: Task %type: Start,End date %constraint: Start << End @end example @cindex implies, logical implication @cindex constraints The ``implies'' operator @code{=>} is especially useful when defining constraints, since it can be used to specify conditional constraints, @ie{} constraints applying only in certain records. For example, we could specify that if a task is closed then it must have an @code{End} date in the following way: @example %rec: Task %type: Start,End date %constraint: Start << End %constraint: Status = 'CLOSED' => #End @end example It is acceptable to declare several constraints in the same record set. @node Checking Recfiles @chapter Checking Recfiles @cindex integrity, checking Sometimes, when creating a recfile by hand, typographical errors or other mistakes will occur. If a recfile contains such mistakes, then one cannot rely upon the results of queries or other operations. Fortunately there is a tool called @command{recfix} which can find these errors. It is a good idea to get into the habit of running @command{recfix} on a file after editing it, and before trying other commands. @menu * Syntactical Errors:: Fixing structure errors in recfiles. * Semantic Errors:: Fixing semantic errors in recfiles. @end menu @node Syntactical Errors @section Syntactical Errors One easy mistake is to forget the colon separating the field name from its value. @example %rec: Article %key Id Name: Thing Id: 0 @end example @cindex @command{recfix} @noindent Running @command{recfix} on this file will immediately tell us that there is a problem: @example $ recfix --check inventory.rec inventory.rec: 2: error: expected a record @end example @noindent Here, @command{recfix} has diagnosed a problem in the file @file{inventory.rec} and the problem lies at line 2. If, as in this case, @command{recfix} shows there is a problem with the recfile, you should attend to that problem before trying to use any other recutils program on that file, otherwise strange things could happen. The @code{--check} flag is optional but in normal execution not required because that is the default operation. @node Semantic Errors @section Semantic Errors @cindex special fields However @command{recfix} checks more than the syntactical integrity of the recfile. It also checks certain semantics and that the data is self-consistent. To do this, it uses the special fields of the record, some of which were introduced above (@pxref{Constraints on Record Sets}). It is a good idea to use the special fields to stipulate the ``enterprise rules'' of the data. Errors will be reported if any of the following special keywords are present and the data does not match the stipulated conditions @table @code @item %mandatory The mandated fields are missing from a record. @item %prohibit The prohibited fields are present in a record. @item %unique There is more than one field in a single record of the given name. @item %key Two or more records share the same value of the field which is the key field. @item %typedef and %type A field has a value which does not conform to the specified type. @item %size The number of records does not conform to the specified restriction. @item %constraint A field does not conform to the specified constraint. @item %confidential An unencrypted value exists for a confidential field. @end table @node Remote Descriptors @chapter Remote Descriptors @cindex @code{%rec} The @code{%rec} special field is used for two main purposes: to identify a record as a record descriptor, and to provide a name for the described record set. The synopsis of the usage of the field is the following: @example %rec: @var{type} [@var{url_or_file}] @end example @noindent @var{type} is the name of the kind of records described by the descriptor. It is mandatory to specify it, and it follows the same lexical conventions used by field names. @xref{Fields}. There is a non-enforced convention to use singular nouns, because the name makes reference to the type of a single entity, even if it applies to all the records contained in the record set. For example, the following record set contains transactions, and the type specified in the record descriptor is @code{Transaction}. @example %rec: Transaction Id: 10 Title: House rent Id: 11 Title: Loan @end example @noindent Only one @code{%rec} field should be in a record descriptor. If there are more it is an integrity violation. It is highly recommended (but not enforced) to place this field in the first position of the record descriptor. Sometimes it is convenient to store records of the same type in different files. @cindex integrity problems The duplication of record descriptors in this case would surely lead to consistency problems. A possible solution would be to keep the record descriptor in a separated file and then include it in any operation by using pipes. For example: @example $ cat descriptor.rec data.rec | recsel @dots{} @end example @cindex external descriptor @cindex descriptor, external descriptor @noindent For those cases it is more convenient to use a @dfn{external descriptor}. External descriptors can be built appending a file path to the @code{%rec} field value, like: @example %rec: FSD_Entry /path/to/file.rec @end example The previous example indicates that a record descriptor describing the @code{FSD_Entry} records shall be read from the file @file{/path/to/file.rec}. A record descriptor for @code{FSD_Entry} may not exist in the external file. Both relative and absolute paths can be specified there. @cindex URL @cindex remote descriptors URLs can be used as sources for external descriptors as well. In that case we talk about @dfn{remote descriptors}. For example: @example %rec: Department http://www.myorg.com/Org.rec @end example @noindent The URL shall point to a text file containing rec data. If there is a record descriptor in the remote file documenting the @code{Department} type, it will be used. Note that the local record descriptor can provide additional fields to ``expand'' the record type. For example: @example %rec: FSD_Entry http://www.jemarch.net/downloads/FSD.rec %mandatory: Rating @end example @noindent The record descriptor above is including the contents of the @code{FSD_Entry} record descriptor from the URL, and adding them to the local record descriptor, that in this case contains just the @code{%mandatory} field. If you are using GNU recutils (@pxref{Invoking the Utilities}) to process your recfiles, any URL schema supported by @code{libcurl} will work. @node Grouping and Aggregates @chapter Grouping and Aggregates Grouping and aggregate functions are two related features which are useful to extract statistics from a record set, or a subset of that record set. @menu * Grouping Records:: Combining records by fields. * Aggregate Functions:: Statistics and more. @end menu @node Grouping Records @section Grouping Records @cindex grouping Consider a recfile containing a list of items in a shop inventory. For each item it is stored its type, its category, its price, the date of the last selling operation of an item of that type, and the amount of items currently available in stock. A sample of such a database could be: @example Type: EC Car Category: Toy Price: 12.2 LastSell: 20-April-2012 Available: 623 Type: Terria Category: Food Price: 0.60 LastSell: 22-April-2012 Available: 8239 Type: Typex Category: Office Price: 1.20 LastSell: 22-April-2012 Available: 10878 Type: Notebook Category: Office Price: 1.00 LastSell: 21-April-2012 Available: 77455 Type: Sexy Puzzle Category: Toy Price: 6.20 LastSell: 6.20 Available: 12 @end example @noindent Now imagine we are interested in grouping the contents of the @code{Items} record set in groups of items of the same category. We can do it using the @command{-G} command line argument for @command{recsel}. This argument accepts a list of fields separated by commas. The argument can be read as ``group by''. In this case we want to group by @code{Category}, so we would do: @example $ recsel -G Category Type: Terria Category: Food Price: 0.60 LastSell: 22-April-2012 Available: 8239 Type: Typex Category: Office Price: 1.20 LastSell: 22-April-2012 Available: 10878 Type: Notebook Price: 1.00 LastSell: 21-April-2012 Available: 77455 Type: EC Car Category: Toy Price: 12.2 LastSell: 20-April-2012 Available: 623 Type: Sexy Puzzle Price: 6.20 LastSell: 6.20 Available: 12 @end example @noindent We can see that the output is three records, corresponding to the three different categories of items present in the database. However, we are only interested in the types of products in each category, so we can remove unwanted information using @code{-p}: @example $ recsel -G Category -p Category,Type items.rec Category: Food Type: Terria Category: Office Type: Typex Type: Notebook Category: Toy Type: EC Car Type: Sexy Puzzle @end example @noindent It is also possible to group by several fields. We could group by both @code{Category} and @code{LastSell}: @example $ recsel -G Category,LastSell -p Category,LastSell,Type items.rec Category: Food LastSell: 22-April-2012 Type: Terria Category: Office LastSell: 21-April-2012 Type: Notebook Category: Office LastSell: 22-April-2012 Type: Typex Category: Toy LastSell: 20-April-2012 Type: EC Car Category: Toy LastSell: 6.20 Type: Sexy Puzzle @end example @node Aggregate Functions @section Aggregate Functions @cindex aggregate function recutils supports @dfn{aggregate functions}. These are so called because they accept a record set and a field name as inputs and generate a single result. Usually this result is numerical. The supported aggregate functions are the following: @table @code @item Count(FIELD) Counts the number of occurrences of a field. @item Avg(FIELD) Calculates the average (mean) of the numerical values of a field. @item Sum(FIELD) Calculates the sum of the numerical values of a field. @item Min(FIELD) Calculates the minimum numerical value of a field. @item Max(FIELD) Calculates the maximum numerical value of a field. @end table The aggregate functions are to be invoked in the field expressions in @command{recsel}. By default they are applied to the totality of the records in a record set. For example, using the items database from the previous section, we can do calculations as in the following examples. The SQL aggregate functions can be applied to the totality of the tuples in the relation. For example, using the @code{Count} aggregate function we can calculate the number of fields named @code{Category} present in the record set as follows: @example $ recsel -p "Count(Category)" items.rec Count_Category: 5 @end example @noindent The result is a field whose name is derived from the function name and the field passed as its parameter, separated by an underline. This name scheme probably suffices for most purposes, but it is always possible to use a rewrite rule to obtain something different: @example $ recsel -p "Count(Category):NumCategories" items.rec NumCategories: 5 @end example @noindent You can use different letter case in writing the name of the aggregate, and this will be reflected in the field name: @example $ recsel -p "CoUnT(Category)" items.rec CoUnT_Category: 5 @end example @noindent It is possible to use more than one aggregate function in the field expression. Suppose we are also interested in the average price of the items we sell. We can use the @code{Avg} aggregate: @example $ recsel -p "Count(Category),Avg(Price)" items.rec Count_Category: 5 Avg_Price: 4.240000 @end example @noindent Now let's add a field along with an aggregate function to the field expression and see what we get: @example $ recsel -p "Type,Avg(Price)" items.rec Type: EC Car Avg_Price: 12.200000 Type: Terria Avg_Price: 0.600000 Type: Typex Avg_Price: 1.200000 Type: Notebook Avg_Price: 1 Type: Sexy Puzzle Avg_Price: 6.200000 @end example @noindent We get five records! The reason is that when @emph{only} aggregate functions are part of the field expression, they are applied to the single record that would result from concatenating all the records in the record set together. However, when a regular field appears in the field expression the aggregate functions are applied to the individual records. This is still useful in some cases, such as a database of maintainers: @example Name: Jose E. Marchesi Email: jemarch@@gnu.org Email: jemarch@@es.gnu.org Name: Luca Saiu Email: positron@@gnu.org @end example @noindent Lets see how many emails each maintainer has: @example $ recsel -p "Name,Count(Email)" maintainers.rec Name: Jose E. Marchesi Count_Email: 2 Name: Luca Saiu Count_Email: 1 @end example @noindent Aggregate functions are most useful when we combine them with grouping. This is when we are interested in some property of a subset of the records in the database. For example, the average prices of each item category stored in the database can be obtained by executing: @example $ recsel -p "Category,Avg(Price)" -G Category items.rec Category: Food Avg_Price: 0.600000 Category: Office Avg_Price: 1.100000 Category: Toy Avg_Price: 9.200000 @end example @noindent If we were interested in the actual prices that result in each average we can do: @example $ recsel -p "Category,Price,Avg(Price)" -G Category items.rec Category: Food Price: 0.60 Avg_Price: 0.600000 Category: Office Price: 1.20 Price: 1.00 Avg_Price: 1.100000 Category: Toy Price: 12.2 Price: 6.20 Avg_Price: 9.200000 @end example @node Queries which Join Records @chapter Queries which Join Records Suppose you wanted to add the residential address of the people in the @file{acquaintances.rec} file from @ref{Simple Selections}. One way to do this is as follows: @example %type: Dob date Name: Alfred Nebel Dob: 20 April 2010 Email: alf@@example.com Address: 42 Abbeter Way, Inprooving, WORCS Telephone: 01234 5676789 Name: Mandy Nebel Dob: 21 February 1972 Email: mandy@@example.com Address: 42 Abbeter Way, Inprooving, WORCS Telephone: 01234 5676789 Name: Bertram Nebel Dob: 3 January 1966 Email: bert@@example.com Address: 42 Abbeter Way, Inprooving, WORCS Telephone: 01234 5676789 Name: Charles Spencer Dob: 4 July 1997 Email: charlie@@example.com Address: 2 Serpe Rise, Little Worning, SURREY Telephone: 09876 5432109 Name: Dirk Spencer Dob: 29 June 1945 Email: dirk@@example.com Address: 2 Serpe Rise, Little Worning, SURREY Telephone: 09876 5432109 Name: Ernest Wright Dob: 26 April 1978 Email: ernie@@example.com Address: 1 Wanter Rise, Greater Inncombe, BUCKS @end example This will work fine. However you will notice that there are two addresses where more than one person live (presumably they are members of the same family). This has a number of disadvantages: @itemize @minus @item You have to type (or copy) the same information several times. @item Should a family move house, then you would have to update the addresses (and telephone number) of all the family members. @item A typing error in one of the addresses would lead an automatic query to erroneously suggest that the people lived at different addresses. @item It unnecessarily increases the size of the recfile. @end itemize @menu * Foreign Keys:: Referring to records from another records. * Joining Records:: Performing cross-joins. @end menu @node Foreign Keys @section Foreign Keys @cindex record sets A better way would be to separate the addresses and people into different record sets. @cindex duplication, avoiding The first record set might look like this: @example %rec: Person %type: Dob date %type: Abode rec Residence Name: Alfred Nebel Dob: 20 April 2010 Email: alf@@example.com Abode: 42AbbeterWay Name: Mandy Nebel Dob: 21 February 1972 Email: mandy@@example.com Mobile: 0555 342123 Abode: 42AbbeterWay Name: Bertram Nebel Dob: 3 January 1966 Email: bert@@example.com Abode: 42AbbeterWay Name: Charles Spencer Dob: 4 July 1997 Email: charlie@@example.com Abode: 2SerpeRise Name: Dirk Spencer Dob: 29 June 1945 Email: dirk@@example.com Mobile: 0555 342123 Abode: 2SerpeRise Name: Ernest Wright Dob: 26 April 1978 Abode: ChezGrampa @end example @noindent and the second (following in the same file), like this: @example %rec: Residence %key: Id Address: 42 Abbeter Way, Inprooving, WORCS Telephone: 01234 5676789 Id: 42AbbeterWay Address: 2 Serpe Rise, Little Worning, SURREY Telephone: 09876 5432109 Id: 2SerpeRise Address: 1 Wanter Rise, Greater Inncombe, BUCKS Id: ChezGrampa @end example Here you can see that there are two record sets @viz{} @code{Person} and @code{Residence}. There are six people, but only three residences, because some residences accommodate more than one person. @cindex @code{%key} Note also that the @code{Residence} descriptor has the entry @code{%key: Id} whilst the @code{Person} descriptor has @code{%type: Abode rec Residence}. @cindex foreign key @cindex key, foreign key @cindex @code{rec}, type description This is because @code{Abode} is the foreign key which identifies the residence where a person lives. @cindex readability We could have declared the @code{Id} field as @code{%auto}. This would have had the advantage that we need not manually update it. However, we decided that the @code{Abode} field values in the @code{Person} records are better as alphanumeric fields, so that they can contain human readable values. In this way, it is self-evident by reading a @code{Person} record where that person lives. Yet since the @code{Id} field is declared using the @code{%key} special field name, you can be sure that you don't accidentally reuse an existing key. @node Joining Records @section Joining Records The above example has also added a new field to the @code{Person} record set to contain that person's mobile phone number. Note that the @code{Telephone} field belongs to the @code{Residence} record set because that contains the telephone number of the home, whereas @code{Mobile} belongs to @code{Person} since mobile telephones are normally used exclusively by one individual. If we want to look up the name and address of a person in our recfile, we can use @command{recsel} as before. Because we now have more than one record set in the @file{acquaintances.rec} file, we have to tell @command{recsel} in which record set we want to look up records. We do this with the @code{-t} flag as follows: @example $ recsel -t Person -P Name,Abode acquaintances.rec Alfred Nebel 42AbbeterWay Mandy Nebel 42AbbeterWay Bertram Nebel 42AbbeterWay Charles Spencer 2SerpeRise Dirk Spencer 2SerpeRise Ernest Wright ChezGrampa @end example This result tells us the names of all the people in the recfile, as well as giving a concise and hopefully effective reminder telling us where they live. However these results would not be useful to someone unacquainted with the individuals. They need a list of names and full addresses. We can use @command{recsel} to produce such a list: @example $ recsel -t Person -j Abode acquaintances.rec Name: Charles Spencer Dob: 4 July 1997 Email: charlie@@example.com Abode_Address: 2 Serpe Rise, Little Worning, SURREY Abode_Telephone: 09876 5432109 Abode_Id: 2SerpeRise Name: Dirk Spencer Dob: 29 June 1945 Email: dirk@@example.com Mobile: 0555 342123 Abode_Address: 2 Serpe Rise, Little Worning, SURREY Abode_Telephone: 09876 5432109 Abode_Id: 2SerpeRise Name: Ernest Wright Dob: 26 April 1978 Abode_Address: 1 Wanter Rise, Greater Inncombe, BUCKS Abode_Id: ChezGrampa @end example The @code{-t} flag we have seen before. It tells @command{recsel} that we want to extract records of type @code{Person}. @cindex join The @code{-j} flag is new. It says that we want to perform a @dfn{join}. Specifically we want to join the @code{Person} records according to their @code{Abode} field. In the above example, @command{recsel} displays several field names which do not appear anywhere in the input @eg{} @code{Abode_Address}. This is the @code{Address} field in the record joined by the foreign key @code{Abode}. In this example probably only the name and address are of interest. The other information such as date of birth is incidental. The foreign key @code{Abode_Id} is certainly not wanted in the output since it is redundant. As usual, you can use the @code{-P} or @code{-p} options to limit the fields which will be displayed. However the full joined field name, if appropriate, must be specified. So the names and addresses without the other information can be retrieved thus: @example $ recsel -t Person -j Abode -p Name,Abode_Address acquaintances.rec Name: Charles Spencer Abode_Address: 2 Serpe Rise, Little Worning, SURREY Name: Dirk Spencer Abode_Address: 2 Serpe Rise, Little Worning, SURREY Name: Ernest Wright Abode_Address: 1 Wanter Rise, Greater Inncombe, BUCKS @end example @node Auto-Generated Fields @chapter Auto-Generated Fields @cindex @code{%auto} @cindex automatically generated values Consider for example a list of articles in stock in a toy store: @example %rec: Item %key: Description Description: 2cm metal soldier WWII Amount: 2111 Description: Flying Helicopter Indoor Maxi Amount: 8 @dots{} @end example It would be natural to identify the items by their descriptions, but it is also error prone: was it ``Flying Helicopter Indoor Maxi'' or ``Flying Helicopter Maxi Indoor''? Was ``Helicopter'' in lower case or upper case? @cindex primary key @cindex key, primary key @cindex @code{%key} @cindex ID numbers Thus it is quite common in databases to use some kind of numeric ``Id'' to uniquely identify items like those ones, because numbers are easy to increment and manipulate. So we could add a new numeric @code{Id} field and use it as the primary key: @example %rec: Item %key: Id %mandatory: Description Id: 0 Description: 2cm metal soldier WWII Amount: 2111 Id: 1 Description: Flying Helicopter Indoor Maxi Amount: 8 @dots{} @end example A problem with this approach is that we must be careful to not assign already used ids when we introduce more articles in the database. Other than its uniqueness, it is not important which number is associated with which article. To ease the management of those Ids database systems use to provide a facility called ``auto-counters''. Auto-counters can be implemented in recfiles using the @code{%auto} directive in the record descriptor. Its usage is: @example %auto: @var{field1} @var{field2} @dots{} @var{fieldN} @end example @noindent The list of field names are separated by one or more blank characters. There can be several @code{%auto} fields in the same record descriptor, the effective list of auto-generated fields being the union of all the entries. When @command{recins} inserts a new record in the recfile, it looks for any declared auto field. If any of these fields are not provided explicitly in the command line then @command{recins} generates them along with the user-provided fields. Such auto fields are generated at the beginning of the new records, in the same order they are found in the @code{%auto} directives. For example, consider a @file{items.rec} database with an empty record set: @example %rec: Item %key: Id %auto: Id %mandatory: Description @end example @noindent If we insert a new record and we do not specify an @code{Id} then it will be generated automatically by @command{recins}: @example $ recins -t Item -f Description -v 'recutils t-shirts' \ -f Amount -v 200 \ items.rec $ cat items.rec %rec: Item %key: Id %auto: Id %mandatory: Description Id: 0 Description: recutils t-shirts Amount: 200 @end example @noindent The concrete effect of the @code{%auto} directive depends on the type of the affected field. The following sections document how. @menu * Counters:: Generating incremental Ids. * Unique Identifiers:: Generating universally unique Ids. * Time-Stamps:: Tracking the creation of records. @end menu @node Counters @section Counters @cindex counters If an auto field is of type @code{integer} or @code{range} then any newly generated field will use the ``next biggest'' unused number in the record set. Consider the toy inventory database introduced above. We could declare the @code{Id} field to be generated automatically: @example %rec: Item %key: Id %type: Id int %mandatory: Description %auto: Id Id: 0 Description: 2cm metal soldier WWII Amount: 2111 @end example @noindent When the next new item is introduced in the database, @command{recins} will note the @code{%auto}, and create a new @code{Id} field for the new record with the next-biggest unused integer, since @code{Id} is declared to be of type @code{int}. In this example, the new record would have an Id of @code{1}. The database can still provide an explicit Id for the new record. In that case the field is not generated automatically. Note that if no explicit type is defined for an auto generated field then it is assumed to be an integer. @node Unique Identifiers @section Unique Identifiers @cindex unique identifiers @cindex uuid Universally Unique Identifiers, often abbreviated as UUIDs, can also be auto-generated using recutils. Suppose you maintain a database with events featuring the following record descriptor: @example %rec: Event %key: Id %mandatory: Title Date @end example @noindent What would be appropriate to identify each event? We could use an integer and declare it as auto-generated. After adding two events the database would look like this: @example %rec: Event %key: Id %mandatory: Title Date Id: 0 Title: Team meeting Date: 12-08-2013 Id: 1 Title: Dave's birthday Date: 20-12-2013 @end example @noindent However, suppose that we want to share our events with other people, @ie{} to send them event records and to incorporate their records into our own database. In this case the @code{Id}s would collide. A good solution is to use @code{uuids} and declare them as @code{auto}: @example %rec: Event %key: Id %type: Id uuid %mandatory: Title Date Id: f81d4fae-7dec-11d0-a765-00a0c91e6bf6 Title: Team meeting Date: 12-08-2013 Id: f81d4fae-dc18-11d0-a765-a01328400a0c Title: Dave's birthday Date: 20-12-2013 @end example @node Time-Stamps @section Time-Stamps @cindex timestamps Auto generated dates can be used to implement automatic timestamps. Consider for example a ``Transfer'' record set registering bank transfers. We want to save a timestamp every time a transfer is done, so we include an @code{%auto} for the date: @example %rec: Transfer %key: Id %type: Id int %type: Date date %auto: Id Date @end example @node Encryption @chapter Encryption @cindex encryption For ethical or security reasons it is sometimes necessary that information in a recfile should not be readable by unauthorized people. One way to prevent a recfile from being read is to use the security features of the operating system. A more secure way would be to encrypt the entire recfile using a free strong encryption program such as @uref{http://gnu.org/software/gnupg,GnuPG}. The disadvantage of both these methods is that the entire recfile has to be secured when it may well be the case that only certain data need to be protected. Recutils offers a way to encrypt specified fields in a record, whilst leaving the rest in clear text. @menu * Confidential Fields:: Declaring fields as sensitive data. * Encrypting Files:: Encrypt confidential fields. * Decrypting Data:: Reading encrypted fields. @end menu @node Confidential Fields @section Confidential Fields @cindex @code{%confidential} @cindex passwords @cindex confidential data To specify that a field should be encrypted, use the @code{%confidential} special field. This special field declares a set of fields as @dfn{confidential}, meaning they contain secret data such as passwords or personal information. Its usage is: @example %confidential: @var{field1} @var{field2} @dots{} @var{fieldN} @end example @noindent The field names are separated by one or more blank characters. There can be several @code{%confidential} fields in the same record descriptor, the effective list of confidential fields being the union of all the entries. @cindex encrypted fields Declaring a field as confidential indicates that its contents must not be stored in plain text, but encrypted with a password-based mechanism. When the information is retrieved from the database the confidential fields are unencrypted if the correct password is provided. Likewise, when information is inserted in the database the confidential fields are encrypted with some given password. For example, consider a database of users of some service. For each user we want to store a name, a login name, an email address and a password. All this information is public with the obvious exception of the password. Thus we declare the @code{Password} field as confidential in the corresponding record descriptor: @example %rec: Account %type: Name line %type: Login line %type: Email email %confidential: Password @end example The rec format does not impose the usage of a specific encryption algorithm, but requires that: @itemize @minus @item The algorithm must be password-based. @item The value of any encrypted field shall begin with the string @samp{encrypted-} followed by the encrypted data. @item The encrypted data must be encoded in some ASCII encoding such as base64. @end itemize The above rules assure that it is possible to determine whether a given field is encrypted. For example, the following is an excerpt from the account database described above. It contains an entry with the password encrypted and another with the password unencrypted: @example Name: Mr. Foo Login: foo Email: foo@@foo.com Password: encrypted-AAABBBCCDDDEEEFFF Name: Mr. Bar Login: bar Email: bar@@bar.com Password: secret @end example Unencrypted confidential fields are a data integrity error, and utilities like @code{recfix} will report it. @cindex integrity problems The same utility can be used to ``fix'' the database by massively encrypting any unencrypted field. Nothing prevents the usage of several passwords in the same database. This allows the establishment of several level of securities or security profiles. For example, we may want to store different passwords for different online services: @example %rec: Account %confidential: WebPassword ShellPassword @end example @noindent We could then encrypt WebPassword entries using a password shared among all the webmasters, and the ShellPassword entries with a more restricted password available only to the administrator of the machine. Note that since the utilities only accept to specify one password at a time different passwords cannot be specified at decryption time. This means that in the example above the administrator would need to run @command{recsel} twice in order to decrypt all the encrypted data in the recfile. The GNU recutils fully support encrypted fields. See the documentation for @command{recsel}, @command{recins} and @command{recfix} for details on how to operate on files containing confidential fields. @node Encrypting Files @section Encrypting Files @command{recins} allows the insertion of encrypted fields in a database. When the @option{-s} (@option{--password}) command line option is specified in the command line any field declared as confidential in the record descriptor will get encrypted using the given passphrase. If the command is executed interactively and @option{-s} is not used then the user is asked to provide a password using the terminal. For example, the invocation: @example $ recins -t Account -s mypassword -f Login -v foo -f Password \ -v secret accounts.rec @end example @noindent will encrypt the value of the @code{Password} field with @code{mypassword} as long as the field is declared as confidential. (@pxref{Confidential Fields} for details on confidential fields). @command{recins} will issue a warning if a confidential field is inserted in the database but no password was provided to encrypt it. This is to avoid having unencrypted sensitive data in the recfiles. @node Decrypting Data @section Decrypting Data The contents of confidential fields can be read using the @option{-s} (@option{--password}) command line option to @command{recsel}. When used, any selected record containing encrypted fields will try to decrypt them with the given password. If the operation succeeds then the output will include the unencrypted data. Otherwise the ASCII-encoded encrypted data will be emitted. If @command{recsel} is invoked interactively and no password is specified with @option{-s}, the user will be asked for a password in case one is needed. No echo of the password will appear in the screen. The provided password will be used to decrypt all confidential fields as if it was specified with @option{-s}. For example, consider the following database storing information about the user accounts of some online service. Each entry stores a login, a full name, email and a password. The password is declared as confidential: @example %rec: Account %key: Login %confidential: Password Login: foo Name: Mr. Foo Email: foo@@foo.com Password: encrypted-AAABBBCCCDDD Login: bar Name: Ms. Bar Email: bar@@bar.org Password: encrypted-XXXYYYZZZUUU @end example @noindent If we use @command{recsel} to get a list of records of type @code{Account} without specifying a password, or if the wrong password was specified in interactive mode, then we would get the following output with the encrypted values: @example $ cat accounts.rec | recsel -t Account -p Login,Password Login: foo Password: encrypted-AAABBBCCCDDD Login: bar Password: encrypted-XXXYYYZZZUUU @end example @noindent If we specify a password and both entries were encrypted using that password, we would get the unencrypted values: @example $ recsel -t Account -s secret -p Login,Password accounts.rec Login: foo Password: foosecret Login: bar Password: barsecret @end example As mentioned above, a confidential field may be encrypted with different passwords in different records (@pxref{Confidential Fields}). For example, we may have an entry in our database with data about the account of the administrator of the online service. In that case we might want to store the password associated with that account using a different password than that for users. In that case the output of the last command would have been: @example $ recsel -t Account -s secret -p Login,Password accounts.rec Login: foo Password: foosecret Login: bar Password: barsecret Login: admin Password: encrypted-TTTVVVBBBNNN @end example @noindent We would need to invoke @command{recsel} with the password used to encrypt the admin entry in order to read it back unencrypted. @node Generating Reports @chapter Generating Reports @cindex reports Having a list of names and addresses, one might want to use this list to address envelopes (say, to send annual greeting cards). Since addresses are normally written on several lines, it would be appropriate then to split the @code{Address} field values across multiple lines as described in @ref{Fields}. Suitable text can now be obtained thus: @example $ recsel -t Person -j Abode -P Name,Abode_Address acquaintances.rec Charles Spencer 2 Serpe Rise, Little Worning, SURREY Dirk Spencer 2 Serpe Rise, Little Worning, SURREY Ernest Wright 1 Wanter Rise, Greater Inncombe, BUCKS @end example A business enterprise might want to go one step further and generate letters (such as an advertisement or a recall notice) to customers. Since @command{recsel} merely selects records and fields from record sets, on its own it cannot do this; so there is another command designed for this purpose, called @command{recfmt}. @cindex @command{recfmt} @cindex templates This command uses a @dfn{template} which defines the general form of the desired output. A letter template might look as follows: @example @{@{Name@}@} @{@{Abode_Address@}@} Dear @{@{Name@}@}, Re: Special offer for January We are delighted to be able to offer you a 95% discount on all car and truck hire contracts between 1 January and 2 February. Please call us to take advantage of this offer. Yours sincerely, Karen van Rental (CEO) ^L @end example It is best to place such a template into a file, so that you can edit it as you wish. Notice the instances of double braces enclosing a field name, @eg{} @code{@{@{Name@}@}}. These are called @dfn{slots} and indicate places where the respective field's value should be placed. @cindex slots Let's assume this template is in a file called @file{offer.templ}. We can then pipe the output from @command{recsel} into @command{recfmt} in order as follows: @example $ recsel -t Person -j Abode acquaintances.rec | recfmt -f offer.templ Charles Spencer 2 Serpe Rise, Little Worning, SURREY Dear Charles Spencer, Re: Special offer for January We are delighted to be able to offer you a 95% discount on all car and . . . @end example @noindent For each record that @command{recsel} selects, one copy of @file{offer.templ} will be generated. Each slot will be replaced with the field value corresponding to the field name in the slot. @menu * Templates:: Formatted output. @end menu @node Templates @section Templates @cindex templates A recfmt template is a text string that may contain @dfn{template slots}. Those slots are substituted in the template using the information of a given record. Any text that is not within a slot is copied literally to the output. Slots are written surrounded by double curly braces, like: @example @{@{@dots{}@}@} @end example Slots contain selection expressions, that are executed every time the template is applied to a record. The slot is then replaced by the string representation of the value returned by the expression. For example, consider the following template: @example Task @{@{Id@}@}: @{@{Summary@}@} ------------------------ @{@{Description@}@} -- Created at @{@{CreatedAt@}@} @end example @noindent When applied to the following record: @example Id: 123 Summary: Fix recfmt. CreatedAt: 12 December 2010 Description: + The recfmt tool shall be fixed, because right + now it is leaking 200 megabytes per processed record. @end example @noindent The result is: @example Task 123: Fix recfmt. ------------------------ The recfmt tool shall be fixed, because right now it is leaking 200 megabytes per processed record. -- Created at 12 December 2010 @end example You can use any selection expression in the slots, including conditionals and string concatenation. @node Interoperability @chapter Interoperability Included in the recutils package are a number of utilities to assist in the creation of recfiles using data which already exists in other formats, and for exporting data from recfiles so that it can be used in other applications. @menu * CSV Files:: Converting recfiles to/from csv files. * Importing MDB Files:: Importing MS Access Databases. @end menu @node CSV Files @section CSV Files @cindex csv @cindex comma separated values Many applications are able to read and write files containing so-called ``comma separated values''. Such files generally contain tabular data where the columns are separated by commas and the rows by line feed and/or carriage return characters. Although record sets are not tables, tables can be easily emulated using records having the same fields in the same order. For example: @example a: value b: value c: value a: value b: value c: value @dots{} @end example In several respects records are more flexible than tables: @itemize @minus @item Fields can appear in a different order in several records. @item There can be several fields with the same name in a single record. @item Records can differ in the number of fields. @end itemize It is evident that records, such as those in recfiles, are a more general structure than comma separated values. This means that when converting from csv files to recfiles, certain decisions need to be made. The @code{rec2csv} utility (@pxref{Invoking rec2csv}) implements an algorithm to deal with this problem and generate a table that the user expects. The algorithm works as follows: @enumerate @item The utility first scans the specified record set, building a list with the names that will become the table header. @item For each field, a header is added with the form: @example FIELDNAME[_@var{n}] @end example @noindent where @var{n} is a number in the range @code{2..inf} and is the ``index'' of the field in its containing record plus one. For example, consider the following record set: @example a: a1 b: b11 b: b12 c: c1 a: a2 b: b2 d: d2 @end example The corresponding list of headers being: @example a b b_2 c a b d @end example @item Then duplicates are removed: @example a b b_2 c d @end example @item The resulting list of headers is then used to build the table in the generated csv file. @end enumerate In the above example the result would be @example "a","b","b_2","c","d" "a1","b11","b12","c1", "a2","b2",,,"d2" @end example As shown, missing fields are implemented as empty columns in the generated csv. @node Importing MDB Files @section Importing MDB Files Access files (@dfn{mdb files}) are collections of several relations, also known as tables. Tables can be either @dfn{user tables} storing user data, or @dfn{system tables} storing information such as forms, queries or the relationships between the tables. It is possible to get a listing with the names of all tables stored in a mdb file by calling @command{mdb2rec} in the following way: @example $ mdb2rec -l sales.mdb Customers Products Orders @end example So @file{sales.mdb} stores user information in the tables Customers, Products and Orders. If we want to include system tables in the listing we can use the @samp{-s} command line option: @example $ mdb2rec -s -l sales.mdb MSysObjects MSysACEs MSysQueries MSysRelationships Customers Products Orders @end example The tables with names starting with @command{MSys} are system tables. The data stored in those tables is either not relevant to the recutils user (used by the Access program to create forms and the like) or is used in an indirect way by @command{mdb2rec} (such as the information from MSysRelationships). Let's read some data from the @file{mdb} file. We can get the relation of Products in rec format: @example $ mdb2rec sales.mdb Products %rec: Products %type: ProductID int %type: ProductName size 80 %type: Discontinued bool ProductID: 1 ProductName: GNU generation T-shirt Discontinued: 0 @dots{} @end example A @dfn{record descriptor} is created for the record set containing the generated records, called Products. As seen in the example, @command{mdb2rec} is able to generate type information for the fields. The list of customers is similar: @example $ mdb2rec sales.mdb Customers %rec: Customers %type: CustomerID size 4 %type: CompanyName size 80 %type: ContactName size 60 CustomerID: GSOFT CompanyName: GNU Soft ContactName: Jose E. Marchesi @dots{} @end example If no table is specified in the invocation to @command{mdb2rec} all the tables in the file are processed, with the exception of the system tables, which requires @samp{-s} to be used: @example $ mdb2rec sales.mdb %rec: Products @dots{} %rec: Customers @dots{} %rec: Orders @dots{} @end example @node Bash Builtins @chapter Bash Builtins @cindex bash @cindex interactive use @cindex shell The command-line utilities described in @ref{Invoking the Utilities} are designed to be used interactively in the shell. Together, and often combined with the standard shell utilities, they provide a quite complete user interface. However, the user's experience can be greatly improved by a closer integration between the recutils and the shell. The following sections describe several extensions for @command{bash}, the GNU shell (@pxref{Top,,, bash, The GNU Bourne-Again SHell}). These extensions make the shell ``aware'' of the recutils. As with any bash built-in, help is available in the command line using the @command{help} command. For example: @example $ help readrec @end example If you installed recutils using a binary package in a GNU/Linux distribution, odds are that the built-in commands described in this chapter are already available to you. Otherwise (you get a ``command not found'' or similar error) you may have to register the built-in commands with your bash. This is very easy using the @command{enable} bash command. The registering command for readrec would be: @example $ enable -f readrec.so readrec @end example Note however that some systems require the full path to @file{readrec.so} in order for this command to work. @menu * readrec:: Exporting the contents of records to the shell. @end menu @node readrec @section readrec The bash built-in @command{read}, when invoked with no options, consumes one line from standard input and makes it available in the predefined @code{REPLY} environment variable, or any other variable whose name is passed as an argument. This allows processing data structured in lines in a quite natural way. For example, the following program prints the third field of each line, with fields separated by commas, until standard input is exhausted: @example # Process one line at a time. while read do echo "The third field is " `echo $REPLY | cut -d, -f 2` done @end example However, @command{read} is not very useful when it comes to processing recutils records in the shell. Even though it is possible to customize the character used by @command{read} to split the input into records, we would need to ignore the empty records in the likely case of more than one empty line separating records. Also, we would need to use @command{recsel} to access to the record fields. Too complicated! Thus, the @command{readrec} bash built-in is similar to @command{read} with the difference that it reads records instead of lines. It also ``exports'' the contents of the record to the user as the values of several environment variables: @itemize @minus @item @code{REPLY_REC} is set to the record read from standard input. @item A set of variables @code{FIELD} named after each field found in the record are set to the (decoded) value of the fields found in the input record. When several fields with the same name are found in the input record then a bash array is created. @end itemize Consider for example the following simple database containing contacts information: @example Name: Mr. Foo Email: foo@@bar.com Email: bar@@baz.net Checked: no Name: Mr. Bar Email: bar@@foo.com Telephone: 999666000 Checked: yes @end example @noindent We would like to write some shell code to send an email to all the contacts, but only if the contact has not been checked before, @ie{} the @code{Checked} field contains @code{no}. The following code snippet would do the job nicely using @command{readrec}: @example recsel contacts.rec | while readrec do if [ $Checked = "no" ] then mail -s "You are being checked." $@{Email[0]@} < email.txt recset -e "Email = '$Email'" -f Checked -S yes contacts.rec sleep 1 fi done @end example @noindent Note the usage of the bash array when accessing the primary email address of each contact. Note also that we update each contact to figure as ``checked'', using @command{recset}, so she won't get pestered again the next time the script is run. @node Invoking the Utilities @chapter Invoking the Utilities Certain options are available in all of these programs. Rather than writing identical descriptions for each of the programs, they are listed here. @anchor{Common Options} @table @samp @item --version Print the version number, then exit successfully. @item --help Print a help message, then exit successfully. @item -- Delimit the option list. Later arguments, if any, are treated as operands even if they begin with @option{-}. For example, @code{recsel -- -p} reads from the file named @file{-p}. @end table @menu * Invoking recinf:: Printing information about rec files. * Invoking recsel:: Selecting records. * Invoking recins:: Inserting records. * Invoking recdel:: Deleting records. * Invoking recset:: Managing fields. * Invoking recfix:: Fixing broken rec files, and diagnostics. * Invoking recfmt:: Formatting records using templates. * Invoking csv2rec:: Converting csv data into rec data. * Invoking rec2csv:: Converting rec data into csv data. * Invoking mdb2rec:: Converting mdb files into rec files. @end menu @node Invoking recinf @section Invoking recinf @cindex @command{recinf} @command{recinf} reads the given rec files (or the data from standard input if no file is specified) and prints a summary of the record types contained in the input. Synopsis: @example recinf [@var{option}]@dots{} [@var{file}]@dots{} @end example The default behavior is to emit a line per record type in the input containing its name and the number of records of that type: @example $ recinf hackers.rec tasks.rec 25 Hacker 102 Task @end example If the input contains anonymous records, @ie{} records that are before the first record descriptor, the corresponding output line won't have a type name: @example $ recinf data.rec 10 @end example In addition to the common options described earlier the program accepts the following options. @table @samp @item -t @var{type} @itemx --type=@var{type} Select records of a given type only. @item -d @itemx --descriptor Print all the record descriptors present in the file. @item -n @itemx --names-only Output just the names of the record types found in the input. If the input contains only anonymous records then output nothing. @item -S @itemx --print-sexps Print the data in the form of sexps (Lisp expressions) instead of rec format. This option can be useful for, of course, Lisp programs. @end table @node Invoking recsel @section Invoking recsel @cindex @command{recsel} @cindex selecting records @command{recsel} reads the given rec files (or the data in the standard input if no file is specified) and prints out records (or part of records) based upon some criteria specified by the user. @command{recsel} searches rec files for records satisfying certain criteria. Synopsis: @example recsel [@var{option}]@dots{} \ [-n @var{indexes} | -e @var{record_expr} | -q @var{str} | -m @var{num}] \ [-c | (-p|-P|-R) @var{field_expr}] \ [@var{file}]@dots{} @end example If no @var{file} is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. In addition to the common options described earlier (@pxref{Common Options}) the program accepts the following options. @noindent The following @dfn{global options} are available. @table @samp @item -i @itemx --case-insensitive Make string matching case-insensitive in selection expressions. @cindex case, in selection expressions @item -C @item --collapse Do not section the result in records with newlines. @item -d @itemx --include-descriptors Print record descriptors along with the matched records. @item -s @var{secret} @itemx --password=@var{secret} Try to decrypt confidential fields with the given password. @item -S @itemx --sort=@var{fields} @cindex sorting Sort the output by the comma-separated list of field names, @var{fields}. This option takes precedence over any sorting criteria specified in the corresponding record descriptor with @code{%sort}. @item -U @itemx --uniq Remove duplicated fields in the output records. Fields are duplicated if they have the same field name and the same value. @item -G @itemx --group-by=@var{fields} Group the output records by the provided comma-separated list of @var{fields}. Grouping is performed before sorting. @end table The @dfn{selection options} are used to select a subset of the records in the input. @table @samp @item -n @var{indexes} @item --number=@var{indexes} Match the records occupying the given positions in its record set. @var{indexes} must be a comma-separated list of numbers or ranges, with ranges being two numbers separated with dashes. For example, the following list denotes the first, the third, the fourth and all records up to the tenth: @samp{-n 0,2,4-9}. @item -e @var{expr} @itemx --expression=@var{expr} A record selection expression (@pxref{Selection Expressions}). Only the records matched by the expression will be taken into account to compute the output. @item -q @var{str} @itemx --quick=@var{str} Select records having a field whose value contains the substring @var{str}. @item -m @var{num} @itemx --random=@var{num} Select @var{num} random records. If @var{num} is zero then select all the records. @item -t @var{type} @itemx --type=@var{type} Select records of a given type only. @item -j @var{field} @itemx --join=@var{field} Perform an inner join of the record set selected by @option{-t} and the record set for which @var{field} is a foreign key. @var{field} must be a field declared with type @code{rec} and thus must be a foreign key. If a join is performed then any selection expression and field expression operate on the joined record sets. @end table The @dfn{output options} are used to determine what information about the selected records to display to the user, and how to display it. @table @samp @item -p @var{name_list} @itemx --print=@var{name_list} List of fields to print for each record. @var{name_list} is a list of field names separated by commas. For example: @example -p Name,Email @end example @noindent means to print the Name and the Email of every matching record, both the field names and values. If this option is not specified then all the fields of the matching records are printed to standard output. @item -P @var{name_list} @itemx --print-values=@var{name_list} Same as @samp{-p}, but print only the values of the selected fields. @item -R @var{name_list} @itemx --print-row=@var{name_list} Same as @samp{-P}, but print the values separated by single spaces instead of newlines. @item -c @itemx --count If this option is specified then @command{recsel} will print the number of matching records instead of the records themselves. This option is incompatible with @option{-p}, @option{-P} and @option{-R}. @end table This @dfn{special option} is available to ease the communication between the recutils and other programs, namely Lisp interpreters. This option is not intended to be used by human operators. @table @samp @item --print-sexps Print the data using sexps instead of rec format. @end table @node Invoking recins @section Invoking recins @cindex @command{recins} @cindex inserting new records @command{recins} adds new records to a rec file or to rec data read from standard input. Synopsis: @example recins [@var{option}]@dots{} [-t @var{type}] \ [-n @var{indexes} | -e @var{record_expr} | -q @var{str} | -m @var{num}] \ [( -f @var{str} -v @var{str}]|[-r @var{recdata} )]@dots{} \ [@var{file}] @end example The new record to be inserted by the command is constructed by using pairs of @samp{-f} and @samp{-v} options, or @samp{-r}. Each pair defines a field. The order of the parameters is significant. If no @var{file} is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. In addition to the common options described earlier (@pxref{Common Options}) the program accepts the following options. @table @samp @item -t @itemx --type=@var{expr} The type of the new record. If there is a record set in the input data matching this type then the new record is added there. Otherwise a new record set is created. If this parameter is not specified then the new record is anonymous. @item -f @itemx --field=@var{name} Declares the name of a field. This option must be followed by a @samp{-v}. @item -v @itemx --value=@var{value} The value of the field being defined. @item -r @itemx --record=@var{value} Add the fields of the record in @var{value}. This option can be intermixed with @samp{-f @dots{} -v} pairs. @item -s @itemx --password Encrypt confidential fields with the given password. @item --no-external Don't use external record descriptors. @item --verbose Be verbose when reporting integrity problems. @item --no-auto Don't generate @dfn{auto} fields. @xref{Auto-Generated Fields}. @end table Record selection arguments are supported too. If they are used then @command{recins} uses ``replacement mode'': instead of appending the new record, matched records are replaced by copies of the provided record. The selection arguments are the same as in @command{recsel}: @table @samp @item -n @var{indexes} @item --number=@var{indexes} Match the records occupying the given positions in its record set. @var{indexes} must be a comma-separated list of numbers or ranges, the ranges being two numbers separated with dashes. For example, the following list denotes the first, the third, the fourth and all records up to the tenth: @code{-n 0,2,4-9}. @item -e @var{record_expr} @itemx --expression=@var{expr} A record selection expression (@pxref{Selection Expressions}). Matching records will get replaced. @item -q @var{str} @itemx --quick=@var{str} Remove records having a field whose value contains the substring @var{str}. @item -m @var{num} @itemx --random=@var{num} Select @var{num} random records. If @var{num} is zero then all records are selected, @ie{} no replace mode is activated. @item -i @itemx --case-insensitive Make strings case-insensitive in selection expressions. @cindex case, in selection expressions @item --force Insert the requested record even in potentially dangerous situations, such as when the data integrity of the database is compromised. @end table @node Invoking recdel @section Invoking recdel @cindex @command{recdel} @cindex deleting records @command{recdel} removes records from a rec file, or from rec data read from standard input. Synopsis: @example recdel [OPTIONS]@dots{} [-t @var{type}] \ [-n @var{indexes} | -e @var{record_expr} | -q @var{str} | -m @var{num}] \ [@var{file}] @end example If no @var{file} is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. In addition to the common options described earlier (@pxref{Common Options}) the program accepts the following options. @table @samp @item -t @itemx --type=@var{expr} Remove records of the given type. If this parameter is not specified then records of any type will be removed. @item -n @var{indexes} @item --number=@var{indexes} Match the records occupying the given positions in its record set. @var{indexes} must be a comma-separated list of numbers or ranges, the ranges being two numbers separated with dashes. For example, the following list denotes the first, the third, the fourth and all records up to the tenth: @code{-n 0,2,4-9}. @item -e @var{record_expr} @itemx --expression=@var{expr} A record selection expression (@pxref{Selection Expressions}). Only the records matched by the expression will be removed from the file. @item -q @var{str} @itemx --quick=@var{str} Remove records having a field whose value contains the substring @var{str}. @item -m @var{num} @itemx --random=@var{num} Remove @var{num} random records. If @var{num} is zero then remove all the records. @item -c @itemx --comment Comment the matching records out instead of removing them. @item --force Delete even in potentially dangerous situations, such as a request to delete all the records of some type. @item --no-external Don't use external record descriptors. @item -i @itemx --case-insensitive Make strings case-insensitive in selection expressions. @item --verbose Be verbose when reporting integrity problems. @end table @node Invoking recset @section Invoking recset @cindex @command{recset} @cindex editing fields @command{recset} manipulates the fields of records in a rec file, or rec data read from standard input. Synopsis: @example recset [@var{option}]@dots{} [@var{file}]@dots{} @end example If no @var{file} is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. In addition to the common options described earlier (@pxref{Common Options}) the program accepts the following options. Record selection options: @table @samp @item -i @itemx --case-insensitive Make strings case-insensitive in selection expressions. @item -t @itemx --type=@var{expr} Operate on the records of the given type. If this parameter is not specified then records of any type will be affected. @item -n @var{indexes} @item --number=@var{indexes} Operate on the records occupying the given positions in its record set. @var{indexes} must be a comma-separated list of numbers or ranges, the ranges being two numbers separated with dashes. For example, the following list denotes the first, the third, the fourth and all records up to the tenth: @code{-n 0,2,4-9}. @item -e @var{expr} @itemx --expression=@var{expr} A record selection expression (@pxref{Selection Expressions}). Only the records matched by the expression will be processed. @item -q @var{str} @itemx --quick=@var{str} Operate on records having a field whose value contains the substring @var{str}. @item -m @var{num} @itemx --random=@var{num} Operate on @var{num} random records. If @var{num} is zero then operate on all the records. @end table Field selection options: @table @samp @item -f @itemx --fields=@var{FEX} Field selection expression (@pxref{Field Expressions}) to select the fields to operate. @end table Actions: @table @samp @item -s @itemx --set=@var{value} Set the value of the selected fields to @var{value}. @item -a @itemx --add=@var{value} Add a new field to the selected record with value @var{value}. @item -S @itemx --set-add=@var{value} Set the value of the selected fields to @var{value}. If some of the fields don't exist in a record, append it with the specified value. @item -r @itemx --rename=@var{value} Rename a field; @var{value} must be a valid field name. The field expression associated with this action must contain a single field name and an optional subscript. If an entire record set is selected then the field is renamed in the record descriptor as well. @item -d @itemx --delete Delete the selected fields in the selected records. @item -c @itemx --comment Comment out the selected fields in the selected records. @item --no-external Don't use external record descriptors. @item --verbose Be verbose when reporting integrity problems. @item --force Perform the requested operation even in potentially dangerous situations, or when the integrity of the data stored in the file is affected. @end table @node Invoking recfix @section Invoking recfix @cindex @command{recfix} @cindex checking recfiles @cindex integrity, checking @command{recfix} checks and fixes rec files. Synopsis: @example recfix [@var{option}]@dots{} [@var{operation}] [@var{op_option}]@dots{} [@var{file}] @end example If no @var{file} is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. In addition to the common options described earlier (@pxref{Common Options}) the program accepts the following global options. @table @samp @item --no-external Don't use external record descriptors. @end table The effect of running @command{recfix} depends on the operation it performs. The operation mode is selected by using one of the following options. @table @samp @item --check Check the integrity of the database contained in the file, printing diagnostics messages in case something is not right. This is the default operation. @item --sort Perform a physical sort of all the records contained in the file (or standard input) after checking for its integrity. The sorting criteria are provided by the @code{%sort} special field, if any. If there is an integrity failure the sorting is not performed. @cindex sorting This is a destructive operation. @item --decrypt @itemx --encrypt Decrypt (encrypt) all the (non-)encrypted fields in the database which are marked as confidential. This operation requires a password. If no password is specified with @option{-s} and the program is run in a terminal, a prompt is given to get the password from the user. If encryption is performed on a file having encrypted fields, the operation will fail unless @samp{--force} is used. These are destructive operations. @item --auto Insert auto-generated fields as appropriate in the records which are missing them. This is a destructive operation. @end table As described above, some operations make use of these additional options: @table @samp @item -s @var{secret} @itemx --password=@var{secret} Password used to encrypt or decrypt fields. @item --force Force potentially dangerous operations. @end table @node Invoking recfmt @section Invoking recfmt @cindex @command{recfmt} @cindex formatted output @command{recfmt} formats records using templates. Synopsis: @example recfmt [@var{option}]@dots{} [@var{template}] @end example This program always works as a filter, getting the data from the standard input and writing the result to standard output. In addition to the common options described earlier (@pxref{Common Options}) the program accepts the following options. @table @samp @item -f @itemx --filename=@var{PATH} Read the template from the file in @var{PATH} instead of the command line. @end table @node Invoking csv2rec @section Invoking csv2rec @cindex @command{csv2rec} @cindex csv @cindex comma separated values @command{csv2rec} reads the given comma-separated-values file (or the data from standard input if no file is specified) and prints out the converted rec data, if possible. Synopsis: @example csv2rec [@var{option}]@dots{} [@var{csv_file}] @end example In addition to the common options described earlier (@pxref{Common Options}) the program accepts the following options. @table @samp @item -t @var{type} @itemx --type=@var{type} Type of the converted records. If no type is specified then no type is used. @item -s @itemx --strict Be strict parsing the csv file. @item -e @itemx --omit-empty Omit empty fields. @end table @node Invoking rec2csv @section Invoking rec2csv @cindex @command{rec2csv} @cindex csv @cindex comma separated values @command{rec2csv} reads the given rec files (or the data in the standard input if no file is specified) and prints out the converted comma-separated-values. Synopsis: @example rec2csv [@var{option}]@dots{} [@var{rec_file}]@dots{} @end example The rec data can be read from files specified in the command line, or from standard input. The program writes the converted data to standard output. In addition to the common options described earlier (@pxref{Common Options}) the program accepts the following options. @table @samp @item -t @var{type} @itemx --type=@var{type} Type of the records to convert. If no type is specified then the default records (with no name) are converted. @item -S @itemx --sort=@var{fields} Sort the output by the comma-separated list of field names @var{fields}. This option has precedence to whatever sorting criteria are specified in the corresponding record descriptor with @code{%sort}. @item -d @itemx --delim=@var{char} Use @var{char} as the delimiter character separating fields in the output. Defaults to @code{,}. @end table @node Invoking mdb2rec @section Invoking mdb2rec @cindex @command{mdb2rec} @cindex mdb @cindex MS Access @command{mdb2rec} reads the given mdb file and prints out the converted rec data, if possible. Synopsis: @example mdb2rec [@var{option}]@dots{} @var{mdb_file} [@var{table}] @end example All the tables contained in the mdb file are exported unless a table is specified in the command line. In addition to the common options described earlier (@pxref{Common Options}) the program accepts the following options. @table @samp @item -s @itemx --system-tables Include system tables in the output. @item -l @itemx --list-tables Dump a list of the table names contained in the mdb file, one per line. @item -e @itemx --keep-empty-fields Don't prune empty fields in the rec output. @end table @node Using ob-rec.el @chapter Using ob-rec.el ob-rec.el allows you to use Recutils as a language in org-mode source blocks. @section Setup Recutils should install the necessary files where emacs can see them. In your .emacs you may need to add: @example (require 'ob-rec) @end example You will need to add "rec" to your list of 'org-babel-load-languages' like below: @example (org-babel-do-load-languages 'org-babel-load-languages '((rec . t))) @end example @section Usage To your org file, add a src code block like: @example #+BEGIN_SRC rec :data books.rec Location = 'loaned' #+END_SRC @end example This performs the equivalent of the command: @example $ recsel -e "Location = 'loaned'" books.rec @end example It will produce a result like: @example #+RESULTS: | Title | Author | Date | Location | |---------------------+-----------------+-----------------+----------| | The Colour of Magic | Terry Pratchett | 4/20/01 11:15pm | loaned | @end example @section Header Arguments @table @samp @item :data The recfile you would like to query. Can be a relative path. Spaces in the filename or path need to be escaped with a backslash (for example, file\ name.rec). This is the only required header argument. @item :results If this list contains "scalar", "html", "code" or "verbatim" then the output will look the same as if called from the command line and it will not be put into an org table. @item :type Only returns this type of record. Corresponds to the -t argument. Accepts only one argument. @item :fields Comma-separated list of fields to print. Corresponds to the -p argument. @item :sort Comma-separated list of fields by which to sort records. Corresponds to the -S argument. @item :groupby Comma-separated list of fields by which to group records. If the records grouped together share fields in common, these will be in separate columns with a "_N" appended. Corresponds to the -G argument. @item :join Field on which to join records from one record set to another. Please see blah for more on how joins work. Corresponds to the -j argument. @end table @section Warnings @enumerate @item Output may be unpredictable if fields contain newlines, as would be the case for a multi-line field. This appears to be a limitation in org-mode's 'org-table-convert-region' function. @end enumerate @node Regular Expressions @chapter Regular Expressions @cindex regular expressions The character @samp{.} matches any single character except the null character. @table @samp @item + match one or more occurrences of the previous atom or regexp. @item ? match zero or one occurrences of the previous atom or regexp. @item \+ matches a @samp{+} @item \? matches a @samp{?}. @end table Bracket expressions are used to match ranges of characters. Bracket expressions where the range is backward, for example @samp{[z-a]}, are invalid. Within square brackets, @samp{\} is taken literally. Character classes are supported; for example @samp{[[:digit:]]} matches a single decimal digit. GNU extensions are supported: @table @samp @item \w matches a character within a word @item \W matches a character which is not within a word @item \< matches the beginning of a word @item \> matches the end of a word @item \b matches a word boundary @item \B matches characters which are not a word boundary @item \` matches the beginning of the whole input @item \' matches the end of the whole input @end table @cindex grouping, within regular expressions Grouping is performed with parentheses @samp{()}. An unmatched @samp{)} matches just itself. A backslash followed by a digit acts as a back-reference and matches the same thing as the previous grouped expression indicated by that number. For example, @samp{\2} matches the second group expression. The order of group expressions is determined by the position of their opening parenthesis @samp{(}. The alternation operator is @samp{|}. The characters @samp{^} and @samp{$} always represent the beginning and end of a string respectively, except within square brackets. Within brackets, an initial @samp{^} inverts the character class being matched. @samp{*}, @samp{+} and @samp{?} are special at any point in a regular expression except the following places, where they are not allowed: @enumerate @item At the beginning of a regular expression @item After an open-group, @samp{(} @item After the alternation operator, @samp{|} @end enumerate Intervals are specified by @samp{@{} and @samp{@}}. Invalid intervals such as @samp{a@{1z} are not accepted. The longest possible match is returned; this applies to the regular expression as a whole and (subject to this constraint) to sub-expressions within groups. @c @lowersections @include parse-datetime.texi @c @raisesections @node GNU Free Documentation License @appendix GNU Free Documentation License @cindex license, GNU Free Documentation License @include fdl.texi @node Concept Index @unnumbered Concept Index @printindex cp @bye recutils-1.9/doc/parse-datetime.texi0000644000000000000000000005653214226564447014501 00000000000000@c GNU date syntax documentation @c Copyright (C) 1994--2006, 2009--2022 Free Software Foundation, Inc. @c Permission is granted to copy, distribute and/or modify this document @c under the terms of the GNU Free Documentation License, Version 1.3 or @c any later version published by the Free Software Foundation; with no @c Invariant Sections, no Front-Cover Texts, and no Back-Cover Texts. A @c copy of the license is at . @node Date input formats @chapter Date input formats @cindex date input formats @findex parse_datetime First, a quote: @quotation Our units of temporal measurement, from seconds on up to months, are so complicated, asymmetrical and disjunctive so as to make coherent mental reckoning in time all but impossible. Indeed, had some tyrannical god contrived to enslave our minds to time, to make it all but impossible for us to escape subjection to sodden routines and unpleasant surprises, he could hardly have done better than handing down our present system. It is like a set of trapezoidal building blocks, with no vertical or horizontal surfaces, like a language in which the simplest thought demands ornate constructions, useless particles and lengthy circumlocutions. Unlike the more successful patterns of language and science, which enable us to face experience boldly or at least level-headedly, our system of temporal calculation silently and persistently encourages our terror of time. @dots{} It is as though architects had to measure length in feet, width in meters and height in ells; as though basic instruction manuals demanded a knowledge of five different languages. It is no wonder then that we often look into our own immediate past or future, last Tuesday or a week from Sunday, with feelings of helpless confusion. @dots{} ---Robert Grudin, @cite{Time and the Art of Living}. @end quotation This section describes the textual date representations that GNU programs accept. These are the strings you, as a user, can supply as arguments to the various programs. The C interface (via the @code{parse_datetime} function) is not described here. @menu * General date syntax:: Common rules * Calendar date items:: 21 Jul 2020 * Time of day items:: 9:20pm * Time zone items:: UTC, -0700, +0900, @dots{} * Combined date and time of day items:: 2020-07-21T20:02:00,000000-0400 * Day of week items:: Monday and others * Relative items in date strings:: next tuesday, 2 years ago * Pure numbers in date strings:: 20200721, 1440 * Seconds since the Epoch:: @@1595289600 * Specifying time zone rules:: TZ="America/New_York", TZ="UTC0" * Authors of parse_datetime:: Bellovin, Eggert, Salz, Berets, et al. @end menu @node General date syntax @section General date syntax @cindex general date syntax @cindex items in date strings A @dfn{date} is a string, possibly empty, containing many items separated by whitespace. The whitespace may be omitted when no ambiguity arises. The empty string means the beginning of today (i.e., midnight). Order of the items is immaterial. A date string may contain many flavors of items: @itemize @bullet @item calendar date items @item time of day items @item time zone items @item combined date and time of day items @item day of the week items @item relative items @item pure numbers. @end itemize @noindent We describe each of these item types in turn, below. @cindex numbers, written-out @cindex ordinal numbers @findex first @r{in date strings} @findex next @r{in date strings} @findex last @r{in date strings} A few ordinal numbers may be written out in words in some contexts. This is most useful for specifying day of the week items or relative items (see below). Among the most commonly used ordinal numbers, the word @samp{last} stands for @math{-1}, @samp{this} stands for 0, and @samp{first} and @samp{next} both stand for 1. Because the word @samp{second} stands for the unit of time there is no way to write the ordinal number 2, but for convenience @samp{third} stands for 3, @samp{fourth} for 4, @samp{fifth} for 5, @samp{sixth} for 6, @samp{seventh} for 7, @samp{eighth} for 8, @samp{ninth} for 9, @samp{tenth} for 10, @samp{eleventh} for 11 and @samp{twelfth} for 12. @cindex months, written-out When a month is written this way, it is still considered to be written numerically, instead of being ``spelled in full''; this changes the allowed strings. @cindex language, in dates In the current implementation, only English is supported for words and abbreviations like @samp{AM}, @samp{DST}, @samp{EST}, @samp{first}, @samp{January}, @samp{Sunday}, @samp{tomorrow}, and @samp{year}. @cindex language, in dates @cindex time zone item The output of the @command{date} command is not always acceptable as a date string, not only because of the language problem, but also because there is no standard meaning for time zone items like @samp{IST}@. When using @command{date} to generate a date string intended to be parsed later, specify a date format that is independent of language and that does not use time zone items other than @samp{UTC} and @samp{Z}@. Here are some ways to do this: @example $ LC_ALL=C TZ=UTC0 date Tue Jul 21 23:00:37 UTC 2020 $ TZ=UTC0 date +'%Y-%m-%d %H:%M:%SZ' 2020-07-21 23:00:37Z $ date --rfc-3339=ns # --rfc-3339 is a GNU extension. 2020-07-21 19:00:37.692722128-04:00 $ date --rfc-2822 # a GNU extension Tue, 21 Jul 2020 19:00:37 -0400 $ date +'%Y-%m-%d %H:%M:%S %z' # %z is a GNU extension. 2020-07-21 19:00:37 -0400 $ date +'@@%s.%N' # %s and %N are GNU extensions. @@1595372437.692722128 @end example @cindex case, ignored in dates @cindex comments, in dates Alphabetic case is completely ignored in dates. Comments may be introduced between round parentheses, as long as included parentheses are properly nested. Hyphens not followed by a digit are currently ignored. Leading zeros on numbers are ignored. @cindex leap seconds Invalid dates like @samp{2019-02-29} or times like @samp{24:00} are rejected. In the typical case of a host that does not support leap seconds, a time like @samp{23:59:60} is rejected even if it corresponds to a valid leap second. @node Calendar date items @section Calendar date items @cindex calendar date item A @dfn{calendar date item} specifies a day of the year. It is specified differently, depending on whether the month is specified numerically or literally. All these strings specify the same calendar date: @example 2020-07-20 # ISO 8601. 20-7-20 # Assume 19xx for 69 through 99, # 20xx for 00 through 68 (not recommended). 7/20/2020 # Common U.S. writing. 20 July 2020 20 Jul 2020 # Three-letter abbreviations always allowed. Jul 20, 2020 20-jul-2020 20jul2020 @end example The year can also be omitted. In this case, the last specified year is used, or the current year if none. For example: @example 7/20 jul 20 @end example Here are the rules. @cindex ISO 8601 date format @cindex date format, ISO 8601 For numeric months, the ISO 8601 format @samp{@var{year}-@var{month}-@var{day}} is allowed, where @var{year} is any positive number, @var{month} is a number between 01 and 12, and @var{day} is a number between 01 and 31. A leading zero must be present if a number is less than ten. If @var{year} is 68 or smaller, then 2000 is added to it; otherwise, if @var{year} is less than 100, then 1900 is added to it. The construct @samp{@var{month}/@var{day}/@var{year}}, popular in the United States, is accepted. Also @samp{@var{month}/@var{day}}, omitting the year. @cindex month names in date strings @cindex abbreviations for months Literal months may be spelled out in full: @samp{January}, @samp{February}, @samp{March}, @samp{April}, @samp{May}, @samp{June}, @samp{July}, @samp{August}, @samp{September}, @samp{October}, @samp{November} or @samp{December}. Literal months may be abbreviated to their first three letters, possibly followed by an abbreviating dot. It is also permitted to write @samp{Sept} instead of @samp{September}. When months are written literally, the calendar date may be given as any of the following: @example @var{day} @var{month} @var{year} @var{day} @var{month} @var{month} @var{day} @var{year} @var{day}-@var{month}-@var{year} @end example Or, omitting the year: @example @var{month} @var{day} @end example @node Time of day items @section Time of day items @cindex time of day item A @dfn{time of day item} in date strings specifies the time on a given day. Here are some examples, all of which represent the same time: @example 20:02:00.000000 20:02 8:02pm 20:02-0500 # In EST (U.S. Eastern Standard Time). @end example @cindex leap seconds More generally, the time of day may be given as @samp{@var{hour}:@var{minute}:@var{second}}, where @var{hour} is a number between 0 and 23, @var{minute} is a number between 0 and 59, and @var{second} is a number between 0 and 59 possibly followed by @samp{.} or @samp{,} and a fraction containing one or more digits. Alternatively, @samp{:@var{second}} can be omitted, in which case it is taken to be zero. On the rare hosts that support leap seconds, @var{second} may be 60. @findex am @r{in date strings} @findex pm @r{in date strings} @findex midnight @r{in date strings} @findex noon @r{in date strings} If the time is followed by @samp{am} or @samp{pm} (or @samp{a.m.} or @samp{p.m.}), @var{hour} is restricted to run from 1 to 12, and @samp{:@var{minute}} may be omitted (taken to be zero). @samp{am} indicates the first half of the day, @samp{pm} indicates the second half of the day. In this notation, 12 is the predecessor of 1: midnight is @samp{12am} while noon is @samp{12pm}. (This is the zero-oriented interpretation of @samp{12am} and @samp{12pm}, as opposed to the old tradition derived from Latin which uses @samp{12m} for noon and @samp{12pm} for midnight.) @cindex time zone correction @cindex minutes, time zone correction by The time may alternatively be followed by a time zone correction, expressed as @samp{@var{s}@var{hh}@var{mm}}, where @var{s} is @samp{+} or @samp{-}, @var{hh} is a number of zone hours and @var{mm} is a number of zone minutes. The zone minutes term, @var{mm}, may be omitted, in which case the one- or two-digit correction is interpreted as a number of hours. You can also separate @var{hh} from @var{mm} with a colon. When a time zone correction is given this way, it forces interpretation of the time relative to Coordinated Universal Time (UTC), overriding any previous specification for the time zone or the local time zone. For example, @samp{+0530} and @samp{+05:30} both stand for the time zone 5.5 hours ahead of UTC (e.g., India). This is the best way to specify a time zone correction by fractional parts of an hour. The maximum zone correction is 24 hours. Either @samp{am}/@samp{pm} or a time zone correction may be specified, but not both. @node Time zone items @section Time zone items @cindex time zone item A @dfn{time zone item} specifies an international time zone, indicated by a small set of letters, e.g., @samp{UTC} or @samp{Z} for Coordinated Universal Time. Any included periods are ignored. By following a non-daylight-saving time zone by the string @samp{DST} in a separate word (that is, separated by some white space), the corresponding daylight saving time zone may be specified. Alternatively, a non-daylight-saving time zone can be followed by a time zone correction, to add the two values. This is normally done only for @samp{UTC}; for example, @samp{UTC+05:30} is equivalent to @samp{+05:30}. Time zone items other than @samp{UTC} and @samp{Z} are obsolescent and are not recommended, because they are ambiguous; for example, @samp{EST} has a different meaning in Australia than in the United States, and @samp{A} has different meaning as a military time zone than as an obsolescent RFC 822 time zone. Instead, it's better to use unambiguous numeric time zone corrections like @samp{-0500}, as described in the previous section. If neither a time zone item nor a time zone correction is supplied, timestamps are interpreted using the rules of the default time zone (@pxref{Specifying time zone rules}). @node Combined date and time of day items @section Combined date and time of day items @cindex combined date and time of day item @cindex ISO 8601 date and time of day format @cindex date and time of day format, ISO 8601 The ISO 8601 date and time of day extended format consists of an ISO 8601 date, a @samp{T} character separator, and an ISO 8601 time of day. This format is also recognized if the @samp{T} is replaced by a space. In this format, the time of day should use 24-hour notation. Fractional seconds are allowed, with either comma or period preceding the fraction. ISO 8601 fractional minutes and hours are not supported. Typically, hosts support nanosecond timestamp resolution; excess precision is silently discarded. Here are some examples: @example 2012-09-24T20:02:00.052-05:00 2012-12-31T23:59:59,999999999+11:00 1970-01-01 00:00Z @end example @node Day of week items @section Day of week items @cindex day of week item The explicit mention of a day of the week will forward the date (only if necessary) to reach that day of the week in the future. Days of the week may be spelled out in full: @samp{Sunday}, @samp{Monday}, @samp{Tuesday}, @samp{Wednesday}, @samp{Thursday}, @samp{Friday} or @samp{Saturday}. Days may be abbreviated to their first three letters, optionally followed by a period. The special abbreviations @samp{Tues} for @samp{Tuesday}, @samp{Wednes} for @samp{Wednesday} and @samp{Thur} or @samp{Thurs} for @samp{Thursday} are also allowed. @findex next @var{day} @findex last @var{day} A number may precede a day of the week item to move forward supplementary weeks. It is best used in expression like @samp{third monday}. In this context, @samp{last @var{day}} or @samp{next @var{day}} is also acceptable; they move one week before or after the day that @var{day} by itself would represent. A comma following a day of the week item is ignored. @node Relative items in date strings @section Relative items in date strings @cindex relative items in date strings @cindex displacement of dates @dfn{Relative items} adjust a date (or the current date if none) forward or backward. The effects of relative items accumulate. Here are some examples: @example 1 year 1 year ago 3 years 2 days @end example @findex year @r{in date strings} @findex month @r{in date strings} @findex fortnight @r{in date strings} @findex week @r{in date strings} @findex day @r{in date strings} @findex hour @r{in date strings} @findex minute @r{in date strings} The unit of time displacement may be selected by the string @samp{year} or @samp{month} for moving by whole years or months. These are fuzzy units, as years and months are not all of equal duration. More precise units are @samp{fortnight} which is worth 14 days, @samp{week} worth 7 days, @samp{day} worth 24 hours, @samp{hour} worth 60 minutes, @samp{minute} or @samp{min} worth 60 seconds, and @samp{second} or @samp{sec} worth one second. An @samp{s} suffix on these units is accepted and ignored. @findex ago @r{in date strings} The unit of time may be preceded by a multiplier, given as an optionally signed number. Unsigned numbers are taken as positively signed. No number at all implies 1 for a multiplier. Following a relative item by the string @samp{ago} is equivalent to preceding the unit by a multiplier with value @math{-1}. @findex day @r{in date strings} @findex tomorrow @r{in date strings} @findex yesterday @r{in date strings} The string @samp{tomorrow} is worth one day in the future (equivalent to @samp{day}), the string @samp{yesterday} is worth one day in the past (equivalent to @samp{day ago}). @findex now @r{in date strings} @findex today @r{in date strings} @findex this @r{in date strings} The strings @samp{now} or @samp{today} are relative items corresponding to zero-valued time displacement, these strings come from the fact a zero-valued time displacement represents the current time when not otherwise changed by previous items. They may be used to stress other items, like in @samp{12:00 today}. The string @samp{this} also has the meaning of a zero-valued time displacement, but is preferred in date strings like @samp{this thursday}. When a relative item causes the resulting date to cross a boundary where the clocks were adjusted, typically for daylight saving time, the resulting date and time are adjusted accordingly. The fuzz in units can cause problems with relative items. For example, @samp{2020-07-31 -1 month} might evaluate to 2020-07-01, because 2020-06-31 is an invalid date. To determine the previous month more reliably, you can ask for the month before the 15th of the current month. For example: @example $ date -R Thu, 31 Jul 2020 13:02:39 -0400 $ date --date='-1 month' +'Last month was %B?' Last month was July? $ date --date="$(date +%Y-%m-15) -1 month" +'Last month was %B!' Last month was June! @end example Also, take care when manipulating dates around clock changes such as daylight saving leaps. In a few cases these have added or subtracted as much as 24 hours from the clock, so it is often wise to adopt universal time by setting the @env{TZ} environment variable to @samp{UTC0} before embarking on calendrical calculations. @node Pure numbers in date strings @section Pure numbers in date strings @cindex pure numbers in date strings The precise interpretation of a pure decimal number depends on the context in the date string. If the decimal number is of the form @var{yyyy}@var{mm}@var{dd} and no other calendar date item (@pxref{Calendar date items}) appears before it in the date string, then @var{yyyy} is read as the year, @var{mm} as the month number and @var{dd} as the day of the month, for the specified calendar date. If the decimal number is of the form @var{hh}@var{mm} and no other time of day item appears before it in the date string, then @var{hh} is read as the hour of the day and @var{mm} as the minute of the hour, for the specified time of day. @var{mm} can also be omitted. If both a calendar date and a time of day appear to the left of a number in the date string, but no relative item, then the number overrides the year. @node Seconds since the Epoch @section Seconds since the Epoch If you precede a number with @samp{@@}, it represents an internal timestamp as a count of seconds. The number can contain an internal decimal point (either @samp{.} or @samp{,}); any excess precision not supported by the internal representation is truncated toward minus infinity. Such a number cannot be combined with any other date item, as it specifies a complete timestamp. @cindex beginning of time, for POSIX @cindex Epoch, for POSIX Internally, computer times are represented as a count of seconds since an Epoch---a well-defined point of time. On GNU and POSIX systems, the Epoch is 1970-01-01 00:00:00 UTC, so @samp{@@0} represents this time, @samp{@@1} represents 1970-01-01 00:00:01 UTC, and so forth. GNU and most other POSIX-compliant systems support such times as an extension to POSIX, using negative counts, so that @samp{@@-1} represents 1969-12-31 23:59:59 UTC. Most modern systems count seconds with 64-bit two's-complement integers of seconds with nanosecond subcounts, which is a range that includes the known lifetime of the universe with nanosecond resolution. Some obsolescent systems count seconds with 32-bit two's-complement integers and can represent times from 1901-12-13 20:45:52 through 2038-01-19 03:14:07 UTC@. A few systems sport other time ranges. @cindex leap seconds On most hosts, these counts ignore the presence of leap seconds. For example, on most hosts @samp{@@1483228799} represents 2016-12-31 23:59:59 UTC, @samp{@@1483228800} represents 2017-01-01 00:00:00 UTC, and there is no way to represent the intervening leap second 2016-12-31 23:59:60 UTC. @node Specifying time zone rules @section Specifying time zone rules @vindex TZ Normally, dates are interpreted using the rules of the current time zone, which in turn are specified by the @env{TZ} environment variable, or by a system default if @env{TZ} is not set. To specify a different set of default time zone rules that apply just to one date, start the date with a string of the form @samp{TZ="@var{rule}"}. The two quote characters (@samp{"}) must be present in the date, and any quotes or backslashes within @var{rule} must be escaped by a backslash. For example, with the GNU @command{date} command you can answer the question ``What time is it in New York when a Paris clock shows 6:30am on October 31, 2019?'' by using a date beginning with @samp{TZ="Europe/Paris"} as shown in the following shell transcript: @example $ export TZ="America/New_York" $ date --date='TZ="Europe/Paris" 2019-10-31 06:30' Sun Oct 31 01:30:00 EDT 2019 @end example In this example, the @option{--date} operand begins with its own @env{TZ} setting, so the rest of that operand is processed according to @samp{Europe/Paris} rules, treating the string @samp{2019-10-31 06:30} as if it were in Paris. However, since the output of the @command{date} command is processed according to the overall time zone rules, it uses New York time. (Paris was normally six hours ahead of New York in 2019, but this example refers to a brief Halloween period when the gap was five hours.) A @env{TZ} value is a rule that typically names a location in the @uref{https://www.iana.org/time-zones, @samp{tz} database}. A recent catalog of location names appears in the @uref{https://twiki.org/cgi-bin/xtra/tzdatepick.html, TWiki Date and Time Gateway}. A few non-GNU hosts require a colon before a location name in a @env{TZ} setting, e.g., @samp{TZ=":America/New_York"}. The @samp{tz} database includes a wide variety of locations ranging from @samp{Arctic/Longyearbyen} to @samp{Antarctica/South_Pole}, but if you are at sea and have your own private time zone, or if you are using a non-GNU host that does not support the @samp{tz} database, you may need to use a POSIX rule instead. Simple POSIX rules like @samp{UTC0} specify a time zone without daylight saving time; other rules can specify simple daylight saving regimes. @xref{TZ Variable,, Specifying the Time Zone with @code{TZ}, libc, The GNU C Library}. @node Authors of parse_datetime @section Authors of @code{parse_datetime} @c the anchor keeps the old node name, to try to avoid breaking links @anchor{Authors of get_date} @cindex authors of @code{parse_datetime} @cindex Bellovin, Steven M. @cindex Salz, Rich @cindex Berets, Jim @cindex MacKenzie, David @cindex Meyering, Jim @cindex Eggert, Paul @code{parse_datetime} started life as @code{getdate}, as originally implemented by Steven M. Bellovin (@email{smb@@research.att.com}) while at the University of North Carolina at Chapel Hill. The code was later tweaked by a couple of people on Usenet, then completely overhauled by Rich $alz (@email{rsalz@@bbn.com}) and Jim Berets (@email{jberets@@bbn.com}) in August, 1990. Various revisions for the GNU system were made by David MacKenzie, Jim Meyering, Paul Eggert and others, including renaming it to @code{get_date} to avoid a conflict with the alternative Posix function @code{getdate}, and a later rename to @code{parse_datetime}. The Posix function @code{getdate} can parse more locale-specific dates using @code{strptime}, but relies on an environment variable and external file, and lacks the thread-safety of @code{parse_datetime}. @cindex Pinard, F. @cindex Berry, K. This chapter was originally produced by Fran@,{c}ois Pinard (@email{pinard@@iro.umontreal.ca}) from the @file{parse_datetime.y} source code, and then edited by K. Berry (@email{kb@@cs.umb.edu}). recutils-1.9/build-aux/0000755000000000000000000000000014226577416012074 500000000000000recutils-1.9/build-aux/config.rpath0000755000000000000000000004425414226573054014327 00000000000000#! /bin/sh # Output a system dependent set of variables, describing how to set the # run time search path of shared libraries in an executable. # # Copyright 1996-2022 Free Software Foundation, Inc. # Taken from GNU libtool, 2001 # Originally by Gordon Matzigkeit , 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # # The first argument passed to this file is the canonical host specification, # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # The environment variables CC, GCC, LDFLAGS, LD, with_gnu_ld # should be set by the caller. # # The set of defined variables is at the end of this script. # Known limitations: # - On IRIX 6.5 with CC="cc", the run time search patch must not be longer # than 256 bytes, otherwise the compiler driver will dump core. The only # known workaround is to choose shorter directory names for the build # directory and/or the installation directory. # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a shrext=.so host="$1" host_cpu=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` host_vendor=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` host_os=`echo "$host" | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` # Code taken from libtool.m4's _LT_CC_BASENAME. for cc_temp in $CC""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done cc_basename=`echo "$cc_temp" | sed -e 's%^.*/%%'` # Code taken from libtool.m4's _LT_COMPILER_PIC. wl= if test "$GCC" = yes; then wl='-Wl,' else case "$host_os" in aix*) wl='-Wl,' ;; mingw* | cygwin* | pw32* | os2* | cegcc*) ;; hpux9* | hpux10* | hpux11*) wl='-Wl,' ;; irix5* | irix6* | nonstopux*) wl='-Wl,' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) case $cc_basename in ecc*) wl='-Wl,' ;; icc* | ifort*) wl='-Wl,' ;; lf95*) wl='-Wl,' ;; nagfor*) wl='-Wl,-Wl,,' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) wl='-Wl,' ;; ccc*) wl='-Wl,' ;; xl* | bgxl* | bgf* | mpixl*) wl='-Wl,' ;; como) wl='-lopt=' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ F* | *Sun*Fortran*) wl= ;; *Sun\ C*) wl='-Wl,' ;; esac ;; esac ;; newsos6) ;; *nto* | *qnx*) ;; osf3* | osf4* | osf5*) wl='-Wl,' ;; rdos*) ;; solaris*) case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) wl='-Qoption ld ' ;; *) wl='-Wl,' ;; esac ;; sunos4*) wl='-Qoption ld ' ;; sysv4 | sysv4.2uw2* | sysv4.3*) wl='-Wl,' ;; sysv4*MP*) ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) wl='-Wl,' ;; unicos*) wl='-Wl,' ;; uts4*) ;; esac fi # Code taken from libtool.m4's _LT_LINKER_SHLIBS. hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_direct=no hardcode_minus_L=no case "$host_os" in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test "$GCC" != yes; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd*) with_gnu_ld=no ;; esac ld_shlibs=yes if test "$with_gnu_ld" = yes; then # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. # Unlike libtool, we use -rpath here, not --rpath, since the documented # option of GNU ld is called -rpath, not --rpath. hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' case "$host_os" in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test "$host_cpu" != ia64; then ld_shlibs=no fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' if $LD --help 2>&1 | grep 'auto-import' > /dev/null; then : else ld_shlibs=no fi ;; haiku*) ;; interix[3-9]*) hardcode_direct=no hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; netbsd*) ;; solaris*) if $LD -v 2>&1 | grep 'BFD 2\.8' > /dev/null; then ld_shlibs=no elif $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-rpath,$libdir`' else ld_shlibs=no fi ;; esac ;; sunos4*) hardcode_direct=yes ;; *) if $LD --help 2>&1 | grep ': supported targets:.* elf' > /dev/null; then : else ld_shlibs=no fi ;; esac if test "$ld_shlibs" = no; then hardcode_libdir_flag_spec= fi else case "$host_os" in aix3*) # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test "$GCC" = yes; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test "$host_cpu" = ia64; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # need to do runtime linking. case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test $ld_flag = "-brtl" || test $ld_flag = "-Wl,-brtl"); then aix_use_runtimelinking=yes break fi done ;; esac fi hardcode_direct=yes hardcode_libdir_separator=':' if test "$GCC" = yes; then case $host_os in aix4.[012]|aix4.[012].*) collect2name=`${CC} -print-prog-name=collect2` if test -f "$collect2name" && \ strings "$collect2name" | grep resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac fi # Begin _LT_AC_SYS_LIBPATH_AIX. echo 'int main () { return 0; }' > conftest.c ${CC} ${LDFLAGS} conftest.c -o conftest aix_libpath=`dump -H conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` if test -z "$aix_libpath"; then aix_libpath=`dump -HX64 conftest 2>/dev/null | sed -n -e '/Import File Strings/,/^$/ { /^0/ { s/^0 *\(.*\)$/\1/; p; } }'` fi if test -z "$aix_libpath"; then aix_libpath="/usr/lib:/lib" fi rm -f conftest.c conftest # End _LT_AC_SYS_LIBPATH_AIX. if test "$aix_use_runtimelinking" = yes; then hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" else if test "$host_cpu" = ia64; then hardcode_libdir_flag_spec='${wl}-R $libdir:/usr/lib:/lib' else hardcode_libdir_flag_spec='${wl}-blibpath:$libdir:'"$aix_libpath" fi fi ;; amigaos*) case "$host_cpu" in powerpc) ;; m68k) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. hardcode_libdir_flag_spec=' ' libext=lib ;; darwin* | rhapsody*) hardcode_direct=no if { case $cc_basename in ifort*) true;; *) test "$GCC" = yes;; esac; }; then : else ld_shlibs=no fi ;; dgux*) hardcode_libdir_flag_spec='-L$libdir' ;; freebsd2.[01]*) hardcode_direct=yes hardcode_minus_L=yes ;; freebsd* | dragonfly* | midnightbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; hpux9*) hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; hpux10*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test "$with_gnu_ld" = no; then hardcode_libdir_flag_spec='${wl}+b ${wl}$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no ;; *) hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; netbsd*) hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes ;; newsos6) hardcode_direct=yes hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; *nto* | *qnx*) ;; openbsd*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`" || test "$host_os-$host_cpu" = "openbsd2.8-powerpc"; then hardcode_libdir_flag_spec='${wl}-rpath,$libdir' else case "$host_os" in openbsd[01].* | openbsd2.[0-7] | openbsd2.[0-7].*) hardcode_libdir_flag_spec='-R$libdir' ;; *) hardcode_libdir_flag_spec='${wl}-rpath,$libdir' ;; esac fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; osf3*) hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) if test "$GCC" = yes; then hardcode_libdir_flag_spec='${wl}-rpath ${wl}$libdir' else # Both cc and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi hardcode_libdir_separator=: ;; solaris*) hardcode_libdir_flag_spec='-R$libdir' ;; sunos4*) hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes ;; sysv4) case $host_vendor in sni) hardcode_direct=yes # is this really true??? ;; siemens) hardcode_direct=no ;; motorola) hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac ;; sysv4.3*) ;; sysv4*MP*) if test -d /usr/nec; then ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) ;; sysv5* | sco3.2v5* | sco5v6*) hardcode_libdir_flag_spec='`test -z "$SCOABSPATH" && echo ${wl}-R,$libdir`' hardcode_libdir_separator=':' ;; uts4*) hardcode_libdir_flag_spec='-L$libdir' ;; *) ld_shlibs=no ;; esac fi # Check dynamic linker characteristics # Code taken from libtool.m4's _LT_SYS_DYNAMIC_LINKER. # Unlike libtool.m4, here we don't care about _all_ names of the library, but # only about the one the linker finds when passed -lNAME. This is the last # element of library_names_spec in libtool.m4, or possibly two of them if the # linker has special search rules. library_names_spec= # the last element of library_names_spec in libtool.m4 libname_spec='lib$name' case "$host_os" in aix3*) library_names_spec='$libname.a' ;; aix[4-9]*) library_names_spec='$libname$shrext' ;; amigaos*) case "$host_cpu" in powerpc*) library_names_spec='$libname$shrext' ;; m68k) library_names_spec='$libname.a' ;; esac ;; beos*) library_names_spec='$libname$shrext' ;; bsdi[45]*) library_names_spec='$libname$shrext' ;; cygwin* | mingw* | pw32* | cegcc*) shrext=.dll library_names_spec='$libname.dll.a $libname.lib' ;; darwin* | rhapsody*) shrext=.dylib library_names_spec='$libname$shrext' ;; dgux*) library_names_spec='$libname$shrext' ;; freebsd[23].*) library_names_spec='$libname$shrext$versuffix' ;; freebsd* | dragonfly* | midnightbsd*) library_names_spec='$libname$shrext' ;; gnu*) library_names_spec='$libname$shrext' ;; haiku*) library_names_spec='$libname$shrext' ;; hpux9* | hpux10* | hpux11*) case $host_cpu in ia64*) shrext=.so ;; hppa*64*) shrext=.sl ;; *) shrext=.sl ;; esac library_names_spec='$libname$shrext' ;; interix[3-9]*) library_names_spec='$libname$shrext' ;; irix5* | irix6* | nonstopux*) library_names_spec='$libname$shrext' case "$host_os" in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= ;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 ;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 ;; *) libsuff= shlibsuff= ;; esac ;; esac ;; linux*oldld* | linux*aout* | linux*coff*) ;; linux* | k*bsd*-gnu | kopensolaris*-gnu) library_names_spec='$libname$shrext' ;; knetbsd*-gnu) library_names_spec='$libname$shrext' ;; netbsd*) library_names_spec='$libname$shrext' ;; newsos6) library_names_spec='$libname$shrext' ;; *nto* | *qnx*) library_names_spec='$libname$shrext' ;; openbsd*) library_names_spec='$libname$shrext$versuffix' ;; os2*) libname_spec='$name' shrext=.dll library_names_spec='$libname.a' ;; osf3* | osf4* | osf5*) library_names_spec='$libname$shrext' ;; rdos*) ;; solaris*) library_names_spec='$libname$shrext' ;; sunos4*) library_names_spec='$libname$shrext$versuffix' ;; sysv4 | sysv4.3*) library_names_spec='$libname$shrext' ;; sysv4*MP*) library_names_spec='$libname$shrext' ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) library_names_spec='$libname$shrext' ;; tpf*) library_names_spec='$libname$shrext' ;; uts4*) library_names_spec='$libname$shrext' ;; esac sed_quote_subst='s/\(["`$\\]\)/\\\1/g' escaped_wl=`echo "X$wl" | sed -e 's/^X//' -e "$sed_quote_subst"` shlibext=`echo "$shrext" | sed -e 's,^\.,,'` escaped_libname_spec=`echo "X$libname_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_library_names_spec=`echo "X$library_names_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` escaped_hardcode_libdir_flag_spec=`echo "X$hardcode_libdir_flag_spec" | sed -e 's/^X//' -e "$sed_quote_subst"` LC_ALL=C sed -e 's/^\([a-zA-Z0-9_]*\)=/acl_cv_\1=/' <. # # Written by Jim Meyering # This is a prologue that allows to run a perl script as an executable # on systems that are compliant to a POSIX version before POSIX:2017. # On such systems, the usual invocation of an executable through execlp() # or execvp() fails with ENOEXEC if it is a script that does not start # with a #! line. The script interpreter mentioned in the #! line has # to be /bin/sh, because on GuixSD systems that is the only program that # has a fixed file name. The second line is essential for perl and is # also useful for editing this file in Emacs. The next two lines below # are valid code in both sh and perl. When executed by sh, they re-execute # the script through the perl program found in $PATH. The '-x' option # is essential as well; without it, perl would re-execute the script # through /bin/sh. When executed by perl, the next two lines are a no-op. eval 'exec perl -wSx "$0" "$@"' if 0; my $VERSION = '2022-01-27 18:51'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. my $copyright_year = '2022'; use strict; use warnings; use Getopt::Long; (my $ME = $0) =~ s|.*/||; # use File::Coda; # https://meyering.net/code/Coda/ END { defined fileno STDOUT or return; close STDOUT and return; warn "$ME: failed to close standard output: $!\n"; $? ||= 1; } sub usage ($) { my ($exit_code) = @_; my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); if ($exit_code != 0) { print $STREAM "Try '$ME --help' for more information.\n"; } else { print $STREAM < sub { usage 0 }, version => sub { print "$ME version $VERSION\n"; print "Copyright (C) $copyright_year Free Software Foundation, Inc.\n"; print "License GPLv3+: GNU GPL version 3 or later .\n" . "This is free software: you are free to change and redistribute it.\n" . "There is NO WARRANTY, to the extent permitted by law.\n"; print "\n"; my $author = "Jim Meyering"; print "Written by $author.\n"; exit }, list => \$list, 'name=s@' => \@name, ) or usage 1; # Make sure we have the right number of non-option arguments. # Always tell the user why we fail. @ARGV < 1 and (warn "$ME: missing FILE argument\n"), usage EXIT_ERROR; my $or = join '|', @name; my $regexp = qr/(?:$or)/; # Set the input record separator. # Note: this makes it impractical to print line numbers. $/ = '"'; my $found_match = 0; FILE: foreach my $file (@ARGV) { open FH, '<', $file or (warn "$ME: can't open '$file' for reading: $!\n"), $err = EXIT_ERROR, next; while (defined (my $line = )) { # Skip non-matching lines early to save time $line =~ /\bif\b/ or next; while ($line =~ /\b(if\s*\(\s*([^)]+?)(?:\s*!=\s*([^)]+?))?\s*\) # 1 2 3 (?: \s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;| \s*\{\s*$regexp\s*\((?:\s*\([^)]+\))?\s*([^)]+)\)\s*;\s*\}))/sxg) { my $all = $1; my ($lhs, $rhs) = ($2, $3); my ($free_opnd, $braced_free_opnd) = ($4, $5); my $non_NULL; if (!defined $rhs) { $non_NULL = $lhs } elsif (is_NULL $rhs) { $non_NULL = $lhs } elsif (is_NULL $lhs) { $non_NULL = $rhs } else { next } # Compare the non-NULL part of the "if" expression and the # free'd expression, without regard to white space. $non_NULL =~ tr/ \t//d; my $e2 = defined $free_opnd ? $free_opnd : $braced_free_opnd; $e2 =~ tr/ \t//d; if ($non_NULL eq $e2) { $found_match = 1; $list and (print "$file\0"), next FILE; print "$file: $all\n"; } } } } continue { close FH; } $found_match && $err == EXIT_NO_MATCH and $err = EXIT_MATCH; exit $err; } my $foo = <<'EOF'; # The above is to *find* them. # This adjusts them, removing the unnecessary "if (p)" part. # FIXME: do something like this as an option (doesn't do braces): free=xfree git grep -l -z "$free *(" \ | xargs -0 useless-if-before-free -l --name="$free" \ | xargs -0 perl -0x3b -pi -e \ 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s+('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\)\s*;)/$2/s' # Use the following to remove redundant uses of kfree inside braces. # Note that -0777 puts perl in slurp-whole-file mode; # but we have plenty of memory, these days... free=kfree git grep -l -z "$free *(" \ | xargs -0 useless-if-before-free -l --name="$free" \ | xargs -0 perl -0777 -pi -e \ 's/\bif\s*\(\s*(\S+?)(?:\s*!=\s*(?:0|NULL))?\s*\)\s*\{\s*('"$free"'\s*\((?:\s*\([^)]+\))?\s*\1\s*\);)\s*\}[^\n]*$/$2/gms' Be careful that the result of the above transformation is valid. If the matched string is followed by "else", then obviously, it won't be. When modifying files, refuse to process anything other than a regular file. EOF ## Local Variables: ## mode: perl ## indent-tabs-mode: nil ## eval: (add-hook 'before-save-hook 'time-stamp) ## time-stamp-line-limit: 50 ## time-stamp-start: "my $VERSION = '" ## time-stamp-format: "%:y-%02m-%02d %02H:%02M" ## time-stamp-time-zone: "UTC0" ## time-stamp-end: "'; # UTC" ## End: recutils-1.9/build-aux/config.guess0000755000000000000000000014051214226564226014332 00000000000000#! /bin/sh # Attempt to guess a canonical system name. # Copyright 1992-2022 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2022-01-09' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see . # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # # Originally written by Per Bothner; maintained since 2000 by Ben Elliston. # # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.guess # # Please send patches to . # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] Output the configuration name of the system \`$me' is run on. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to ." version="\ GNU config.guess ($timestamp) Originally written by Per Bothner. Copyright 1992-2022 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; * ) break ;; esac done if test $# != 0; then echo "$me: too many arguments$help" >&2 exit 1 fi # Just in case it came from the environment. GUESS= # CC_FOR_BUILD -- compiler used by this script. Note that the use of a # compiler to aid in system detection is discouraged as it requires # temporary files to be created and, as you can see below, it is a # headache to deal with in a portable fashion. # Historically, `CC_FOR_BUILD' used to be named `HOST_CC'. We still # use `HOST_CC' if defined, but it is deprecated. # Portable tmp directory creation inspired by the Autoconf team. tmp= # shellcheck disable=SC2172 trap 'test -z "$tmp" || rm -fr "$tmp"' 0 1 2 13 15 set_cc_for_build() { # prevent multiple calls if $tmp is already set test "$tmp" && return 0 : "${TMPDIR=/tmp}" # shellcheck disable=SC2039,SC3028 { tmp=`(umask 077 && mktemp -d "$TMPDIR/cgXXXXXX") 2>/dev/null` && test -n "$tmp" && test -d "$tmp" ; } || { test -n "$RANDOM" && tmp=$TMPDIR/cg$$-$RANDOM && (umask 077 && mkdir "$tmp" 2>/dev/null) ; } || { tmp=$TMPDIR/cg-$$ && (umask 077 && mkdir "$tmp" 2>/dev/null) && echo "Warning: creating insecure temp directory" >&2 ; } || { echo "$me: cannot create a temporary directory in $TMPDIR" >&2 ; exit 1 ; } dummy=$tmp/dummy case ${CC_FOR_BUILD-},${HOST_CC-},${CC-} in ,,) echo "int x;" > "$dummy.c" for driver in cc gcc c89 c99 ; do if ($driver -c -o "$dummy.o" "$dummy.c") >/dev/null 2>&1 ; then CC_FOR_BUILD=$driver break fi done if test x"$CC_FOR_BUILD" = x ; then CC_FOR_BUILD=no_compiler_found fi ;; ,,*) CC_FOR_BUILD=$CC ;; ,*,*) CC_FOR_BUILD=$HOST_CC ;; esac } # This is needed to find uname on a Pyramid OSx when run in the BSD universe. # (ghazi@noc.rutgers.edu 1994-08-24) if test -f /.attbin/uname ; then PATH=$PATH:/.attbin ; export PATH fi UNAME_MACHINE=`(uname -m) 2>/dev/null` || UNAME_MACHINE=unknown UNAME_RELEASE=`(uname -r) 2>/dev/null` || UNAME_RELEASE=unknown UNAME_SYSTEM=`(uname -s) 2>/dev/null` || UNAME_SYSTEM=unknown UNAME_VERSION=`(uname -v) 2>/dev/null` || UNAME_VERSION=unknown case $UNAME_SYSTEM in Linux|GNU|GNU/*) LIBC=unknown set_cc_for_build cat <<-EOF > "$dummy.c" #include #if defined(__UCLIBC__) LIBC=uclibc #elif defined(__dietlibc__) LIBC=dietlibc #elif defined(__GLIBC__) LIBC=gnu #else #include /* First heuristic to detect musl libc. */ #ifdef __DEFINED_va_list LIBC=musl #endif #endif EOF cc_set_libc=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^LIBC' | sed 's, ,,g'` eval "$cc_set_libc" # Second heuristic to detect musl libc. if [ "$LIBC" = unknown ] && command -v ldd >/dev/null && ldd --version 2>&1 | grep -q ^musl; then LIBC=musl fi # If the system lacks a compiler, then just pick glibc. # We could probably try harder. if [ "$LIBC" = unknown ]; then LIBC=gnu fi ;; esac # Note: order is significant - the case branches are not exclusive. case $UNAME_MACHINE:$UNAME_SYSTEM:$UNAME_RELEASE:$UNAME_VERSION in *:NetBSD:*:*) # NetBSD (nbsd) targets should (where applicable) match one or # more of the tuples: *-*-netbsdelf*, *-*-netbsdaout*, # *-*-netbsdecoff* and *-*-netbsd*. For targets that recently # switched to ELF, *-*-netbsd* would select the old # object file format. This provides both forward # compatibility and a consistent mechanism for selecting the # object file format. # # Note: NetBSD doesn't particularly care about the vendor # portion of the name. We always set it to "unknown". UNAME_MACHINE_ARCH=`(uname -p 2>/dev/null || \ /sbin/sysctl -n hw.machine_arch 2>/dev/null || \ /usr/sbin/sysctl -n hw.machine_arch 2>/dev/null || \ echo unknown)` case $UNAME_MACHINE_ARCH in aarch64eb) machine=aarch64_be-unknown ;; armeb) machine=armeb-unknown ;; arm*) machine=arm-unknown ;; sh3el) machine=shl-unknown ;; sh3eb) machine=sh-unknown ;; sh5el) machine=sh5le-unknown ;; earmv*) arch=`echo "$UNAME_MACHINE_ARCH" | sed -e 's,^e\(armv[0-9]\).*$,\1,'` endian=`echo "$UNAME_MACHINE_ARCH" | sed -ne 's,^.*\(eb\)$,\1,p'` machine=${arch}${endian}-unknown ;; *) machine=$UNAME_MACHINE_ARCH-unknown ;; esac # The Operating System including object format, if it has switched # to ELF recently (or will in the future) and ABI. case $UNAME_MACHINE_ARCH in earm*) os=netbsdelf ;; arm*|i386|m68k|ns32k|sh3*|sparc|vax) set_cc_for_build if echo __ELF__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ELF__ then # Once all utilities can be ECOFF (netbsdecoff) or a.out (netbsdaout). # Return netbsd for either. FIX? os=netbsd else os=netbsdelf fi ;; *) os=netbsd ;; esac # Determine ABI tags. case $UNAME_MACHINE_ARCH in earm*) expr='s/^earmv[0-9]/-eabi/;s/eb$//' abi=`echo "$UNAME_MACHINE_ARCH" | sed -e "$expr"` ;; esac # The OS release # Debian GNU/NetBSD machines have a different userland, and # thus, need a distinct triplet. However, they do not need # kernel version information, so it can be replaced with a # suitable tag, in the style of linux-gnu. case $UNAME_VERSION in Debian*) release='-gnu' ;; *) release=`echo "$UNAME_RELEASE" | sed -e 's/[-_].*//' | cut -d. -f1,2` ;; esac # Since CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM: # contains redundant information, the shorter form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM is used. GUESS=$machine-${os}${release}${abi-} ;; *:Bitrig:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/Bitrig.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-bitrig$UNAME_RELEASE ;; *:OpenBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/OpenBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-openbsd$UNAME_RELEASE ;; *:SecBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/SecBSD.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-secbsd$UNAME_RELEASE ;; *:LibertyBSD:*:*) UNAME_MACHINE_ARCH=`arch | sed 's/^.*BSD\.//'` GUESS=$UNAME_MACHINE_ARCH-unknown-libertybsd$UNAME_RELEASE ;; *:MidnightBSD:*:*) GUESS=$UNAME_MACHINE-unknown-midnightbsd$UNAME_RELEASE ;; *:ekkoBSD:*:*) GUESS=$UNAME_MACHINE-unknown-ekkobsd$UNAME_RELEASE ;; *:SolidBSD:*:*) GUESS=$UNAME_MACHINE-unknown-solidbsd$UNAME_RELEASE ;; *:OS108:*:*) GUESS=$UNAME_MACHINE-unknown-os108_$UNAME_RELEASE ;; macppc:MirBSD:*:*) GUESS=powerpc-unknown-mirbsd$UNAME_RELEASE ;; *:MirBSD:*:*) GUESS=$UNAME_MACHINE-unknown-mirbsd$UNAME_RELEASE ;; *:Sortix:*:*) GUESS=$UNAME_MACHINE-unknown-sortix ;; *:Twizzler:*:*) GUESS=$UNAME_MACHINE-unknown-twizzler ;; *:Redox:*:*) GUESS=$UNAME_MACHINE-unknown-redox ;; mips:OSF1:*.*) GUESS=mips-dec-osf1 ;; alpha:OSF1:*:*) # Reset EXIT trap before exiting to avoid spurious non-zero exit code. trap '' 0 case $UNAME_RELEASE in *4.0) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $3}'` ;; *5.*) UNAME_RELEASE=`/usr/sbin/sizer -v | awk '{print $4}'` ;; esac # According to Compaq, /usr/sbin/psrinfo has been available on # OSF/1 and Tru64 systems produced since 1995. I hope that # covers most systems running today. This code pipes the CPU # types through head -n 1, so we only detect the type of CPU 0. ALPHA_CPU_TYPE=`/usr/sbin/psrinfo -v | sed -n -e 's/^ The alpha \(.*\) processor.*$/\1/p' | head -n 1` case $ALPHA_CPU_TYPE in "EV4 (21064)") UNAME_MACHINE=alpha ;; "EV4.5 (21064)") UNAME_MACHINE=alpha ;; "LCA4 (21066/21068)") UNAME_MACHINE=alpha ;; "EV5 (21164)") UNAME_MACHINE=alphaev5 ;; "EV5.6 (21164A)") UNAME_MACHINE=alphaev56 ;; "EV5.6 (21164PC)") UNAME_MACHINE=alphapca56 ;; "EV5.7 (21164PC)") UNAME_MACHINE=alphapca57 ;; "EV6 (21264)") UNAME_MACHINE=alphaev6 ;; "EV6.7 (21264A)") UNAME_MACHINE=alphaev67 ;; "EV6.8CB (21264C)") UNAME_MACHINE=alphaev68 ;; "EV6.8AL (21264B)") UNAME_MACHINE=alphaev68 ;; "EV6.8CX (21264D)") UNAME_MACHINE=alphaev68 ;; "EV6.9A (21264/EV69A)") UNAME_MACHINE=alphaev69 ;; "EV7 (21364)") UNAME_MACHINE=alphaev7 ;; "EV7.9 (21364A)") UNAME_MACHINE=alphaev79 ;; esac # A Pn.n version is a patched version. # A Vn.n version is a released version. # A Tn.n version is a released field test version. # A Xn.n version is an unreleased experimental baselevel. # 1.2 uses "1.2" for uname -r. OSF_REL=`echo "$UNAME_RELEASE" | sed -e 's/^[PVTX]//' | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` GUESS=$UNAME_MACHINE-dec-osf$OSF_REL ;; Amiga*:UNIX_System_V:4.0:*) GUESS=m68k-unknown-sysv4 ;; *:[Aa]miga[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-amigaos ;; *:[Mm]orph[Oo][Ss]:*:*) GUESS=$UNAME_MACHINE-unknown-morphos ;; *:OS/390:*:*) GUESS=i370-ibm-openedition ;; *:z/VM:*:*) GUESS=s390-ibm-zvmoe ;; *:OS400:*:*) GUESS=powerpc-ibm-os400 ;; arm:RISC*:1.[012]*:*|arm:riscix:1.[012]*:*) GUESS=arm-acorn-riscix$UNAME_RELEASE ;; arm*:riscos:*:*|arm*:RISCOS:*:*) GUESS=arm-unknown-riscos ;; SR2?01:HI-UX/MPP:*:* | SR8000:HI-UX/MPP:*:*) GUESS=hppa1.1-hitachi-hiuxmpp ;; Pyramid*:OSx*:*:* | MIS*:OSx*:*:* | MIS*:SMP_DC-OSx*:*:*) # akee@wpdis03.wpafb.af.mil (Earle F. Ake) contributed MIS and NILE. case `(/bin/universe) 2>/dev/null` in att) GUESS=pyramid-pyramid-sysv3 ;; *) GUESS=pyramid-pyramid-bsd ;; esac ;; NILE*:*:*:dcosx) GUESS=pyramid-pyramid-svr4 ;; DRS?6000:unix:4.0:6*) GUESS=sparc-icl-nx6 ;; DRS?6000:UNIX_SV:4.2*:7* | DRS?6000:isis:4.2*:7*) case `/usr/bin/uname -p` in sparc) GUESS=sparc-icl-nx7 ;; esac ;; s390x:SunOS:*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$UNAME_MACHINE-ibm-solaris2$SUN_REL ;; sun4H:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-hal-solaris2$SUN_REL ;; sun4*:SunOS:5.*:* | tadpole*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris2$SUN_REL ;; i86pc:AuroraUX:5.*:* | i86xen:AuroraUX:5.*:*) GUESS=i386-pc-auroraux$UNAME_RELEASE ;; i86pc:SunOS:5.*:* | i86xen:SunOS:5.*:*) set_cc_for_build SUN_ARCH=i386 # If there is a compiler, see if it is configured for 64-bit objects. # Note that the Sun cc does not turn __LP64__ into 1 like gcc does. # This test works for both compilers. if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __amd64'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -m64 -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then SUN_ARCH=x86_64 fi fi SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=$SUN_ARCH-pc-solaris2$SUN_REL ;; sun4*:SunOS:6*:*) # According to config.sub, this is the proper way to canonicalize # SunOS6. Hard to guess exactly what SunOS6 will be like, but # it's likely to be more like Solaris than SunOS4. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=sparc-sun-solaris3$SUN_REL ;; sun4*:SunOS:*:*) case `/usr/bin/arch -k` in Series*|S4*) UNAME_RELEASE=`uname -v` ;; esac # Japanese Language versions have a version number like `4.1.3-JL'. SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/'` GUESS=sparc-sun-sunos$SUN_REL ;; sun3*:SunOS:*:*) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun*:*:4.2BSD:*) UNAME_RELEASE=`(sed 1q /etc/motd | awk '{print substr($5,1,3)}') 2>/dev/null` test "x$UNAME_RELEASE" = x && UNAME_RELEASE=3 case `/bin/arch` in sun3) GUESS=m68k-sun-sunos$UNAME_RELEASE ;; sun4) GUESS=sparc-sun-sunos$UNAME_RELEASE ;; esac ;; aushp:SunOS:*:*) GUESS=sparc-auspex-sunos$UNAME_RELEASE ;; # The situation for MiNT is a little confusing. The machine name # can be virtually everything (everything which is not # "atarist" or "atariste" at least should have a processor # > m68000). The system name ranges from "MiNT" over "FreeMiNT" # to the lowercase version "mint" (or "freemint"). Finally # the system name "TOS" denotes a system which is actually not # MiNT. But MiNT is downward compatible to TOS, so this should # be no problem. atarist[e]:*MiNT:*:* | atarist[e]:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; atari*:*MiNT:*:* | atari*:*mint:*:* | atarist[e]:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; *falcon*:*MiNT:*:* | *falcon*:*mint:*:* | *falcon*:*TOS:*:*) GUESS=m68k-atari-mint$UNAME_RELEASE ;; milan*:*MiNT:*:* | milan*:*mint:*:* | *milan*:*TOS:*:*) GUESS=m68k-milan-mint$UNAME_RELEASE ;; hades*:*MiNT:*:* | hades*:*mint:*:* | *hades*:*TOS:*:*) GUESS=m68k-hades-mint$UNAME_RELEASE ;; *:*MiNT:*:* | *:*mint:*:* | *:*TOS:*:*) GUESS=m68k-unknown-mint$UNAME_RELEASE ;; m68k:machten:*:*) GUESS=m68k-apple-machten$UNAME_RELEASE ;; powerpc:machten:*:*) GUESS=powerpc-apple-machten$UNAME_RELEASE ;; RISC*:Mach:*:*) GUESS=mips-dec-mach_bsd4.3 ;; RISC*:ULTRIX:*:*) GUESS=mips-dec-ultrix$UNAME_RELEASE ;; VAX*:ULTRIX*:*:*) GUESS=vax-dec-ultrix$UNAME_RELEASE ;; 2020:CLIX:*:* | 2430:CLIX:*:*) GUESS=clipper-intergraph-clix$UNAME_RELEASE ;; mips:*:*:UMIPS | mips:*:*:RISCos) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #ifdef __cplusplus #include /* for printf() prototype */ int main (int argc, char *argv[]) { #else int main (argc, argv) int argc; char *argv[]; { #endif #if defined (host_mips) && defined (MIPSEB) #if defined (SYSTYPE_SYSV) printf ("mips-mips-riscos%ssysv\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_SVR4) printf ("mips-mips-riscos%ssvr4\\n", argv[1]); exit (0); #endif #if defined (SYSTYPE_BSD43) || defined(SYSTYPE_BSD) printf ("mips-mips-riscos%sbsd\\n", argv[1]); exit (0); #endif #endif exit (-1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && dummyarg=`echo "$UNAME_RELEASE" | sed -n 's/\([0-9]*\).*/\1/p'` && SYSTEM_NAME=`"$dummy" "$dummyarg"` && { echo "$SYSTEM_NAME"; exit; } GUESS=mips-mips-riscos$UNAME_RELEASE ;; Motorola:PowerMAX_OS:*:*) GUESS=powerpc-motorola-powermax ;; Motorola:*:4.3:PL8-*) GUESS=powerpc-harris-powermax ;; Night_Hawk:*:*:PowerMAX_OS | Synergy:PowerMAX_OS:*:*) GUESS=powerpc-harris-powermax ;; Night_Hawk:Power_UNIX:*:*) GUESS=powerpc-harris-powerunix ;; m88k:CX/UX:7*:*) GUESS=m88k-harris-cxux7 ;; m88k:*:4*:R4*) GUESS=m88k-motorola-sysv4 ;; m88k:*:3*:R3*) GUESS=m88k-motorola-sysv3 ;; AViiON:dgux:*:*) # DG/UX returns AViiON for all architectures UNAME_PROCESSOR=`/usr/bin/uname -p` if test "$UNAME_PROCESSOR" = mc88100 || test "$UNAME_PROCESSOR" = mc88110 then if test "$TARGET_BINARY_INTERFACE"x = m88kdguxelfx || \ test "$TARGET_BINARY_INTERFACE"x = x then GUESS=m88k-dg-dgux$UNAME_RELEASE else GUESS=m88k-dg-dguxbcs$UNAME_RELEASE fi else GUESS=i586-dg-dgux$UNAME_RELEASE fi ;; M88*:DolphinOS:*:*) # DolphinOS (SVR3) GUESS=m88k-dolphin-sysv3 ;; M88*:*:R3*:*) # Delta 88k system running SVR3 GUESS=m88k-motorola-sysv3 ;; XD88*:*:*:*) # Tektronix XD88 system running UTekV (SVR3) GUESS=m88k-tektronix-sysv3 ;; Tek43[0-9][0-9]:UTek:*:*) # Tektronix 4300 system running UTek (BSD) GUESS=m68k-tektronix-bsd ;; *:IRIX*:*:*) IRIX_REL=`echo "$UNAME_RELEASE" | sed -e 's/-/_/g'` GUESS=mips-sgi-irix$IRIX_REL ;; ????????:AIX?:[12].1:2) # AIX 2.2.1 or AIX 2.1.1 is RT/PC AIX. GUESS=romp-ibm-aix # uname -m gives an 8 hex-code CPU id ;; # Note that: echo "'`uname -s`'" gives 'AIX ' i*86:AIX:*:*) GUESS=i386-ibm-aix ;; ia64:AIX:*:*) if test -x /usr/bin/oslevel ; then IBM_REV=`/usr/bin/oslevel` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$UNAME_MACHINE-ibm-aix$IBM_REV ;; *:AIX:2:3) if grep bos325 /usr/include/stdio.h >/dev/null 2>&1; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include main() { if (!__power_pc()) exit(1); puts("powerpc-ibm-aix3.2.5"); exit(0); } EOF if $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` then GUESS=$SYSTEM_NAME else GUESS=rs6000-ibm-aix3.2.5 fi elif grep bos324 /usr/include/stdio.h >/dev/null 2>&1; then GUESS=rs6000-ibm-aix3.2.4 else GUESS=rs6000-ibm-aix3.2 fi ;; *:AIX:*:[4567]) IBM_CPU_ID=`/usr/sbin/lsdev -C -c processor -S available | sed 1q | awk '{ print $1 }'` if /usr/sbin/lsattr -El "$IBM_CPU_ID" | grep ' POWER' >/dev/null 2>&1; then IBM_ARCH=rs6000 else IBM_ARCH=powerpc fi if test -x /usr/bin/lslpp ; then IBM_REV=`/usr/bin/lslpp -Lqc bos.rte.libc | \ awk -F: '{ print $3 }' | sed s/[0-9]*$/0/` else IBM_REV=$UNAME_VERSION.$UNAME_RELEASE fi GUESS=$IBM_ARCH-ibm-aix$IBM_REV ;; *:AIX:*:*) GUESS=rs6000-ibm-aix ;; ibmrt:4.4BSD:*|romp-ibm:4.4BSD:*) GUESS=romp-ibm-bsd4.4 ;; ibmrt:*BSD:*|romp-ibm:BSD:*) # covers RT/PC BSD and GUESS=romp-ibm-bsd$UNAME_RELEASE # 4.3 with uname added to ;; # report: romp-ibm BSD 4.3 *:BOSX:*:*) GUESS=rs6000-bull-bosx ;; DPX/2?00:B.O.S.:*:*) GUESS=m68k-bull-sysv3 ;; 9000/[34]??:4.3bsd:1.*:*) GUESS=m68k-hp-bsd ;; hp300:4.4BSD:*:* | 9000/[34]??:4.3bsd:2.*:*) GUESS=m68k-hp-bsd4.4 ;; 9000/[34678]??:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` case $UNAME_MACHINE in 9000/31?) HP_ARCH=m68000 ;; 9000/[34]??) HP_ARCH=m68k ;; 9000/[678][0-9][0-9]) if test -x /usr/bin/getconf; then sc_cpu_version=`/usr/bin/getconf SC_CPU_VERSION 2>/dev/null` sc_kernel_bits=`/usr/bin/getconf SC_KERNEL_BITS 2>/dev/null` case $sc_cpu_version in 523) HP_ARCH=hppa1.0 ;; # CPU_PA_RISC1_0 528) HP_ARCH=hppa1.1 ;; # CPU_PA_RISC1_1 532) # CPU_PA_RISC2_0 case $sc_kernel_bits in 32) HP_ARCH=hppa2.0n ;; 64) HP_ARCH=hppa2.0w ;; '') HP_ARCH=hppa2.0 ;; # HP-UX 10.20 esac ;; esac fi if test "$HP_ARCH" = ""; then set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #define _HPUX_SOURCE #include #include int main () { #if defined(_SC_KERNEL_BITS) long bits = sysconf(_SC_KERNEL_BITS); #endif long cpu = sysconf (_SC_CPU_VERSION); switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0"); break; case CPU_PA_RISC1_1: puts ("hppa1.1"); break; case CPU_PA_RISC2_0: #if defined(_SC_KERNEL_BITS) switch (bits) { case 64: puts ("hppa2.0w"); break; case 32: puts ("hppa2.0n"); break; default: puts ("hppa2.0"); break; } break; #else /* !defined(_SC_KERNEL_BITS) */ puts ("hppa2.0"); break; #endif default: puts ("hppa1.0"); break; } exit (0); } EOF (CCOPTS="" $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null) && HP_ARCH=`"$dummy"` test -z "$HP_ARCH" && HP_ARCH=hppa fi ;; esac if test "$HP_ARCH" = hppa2.0w then set_cc_for_build # hppa2.0w-hp-hpux* has a 64-bit kernel and a compiler generating # 32-bit code. hppa64-hp-hpux* has the same kernel and a compiler # generating 64-bit code. GNU and HP use different nomenclature: # # $ CC_FOR_BUILD=cc ./config.guess # => hppa2.0w-hp-hpux11.23 # $ CC_FOR_BUILD="cc +DA2.0w" ./config.guess # => hppa64-hp-hpux11.23 if echo __LP64__ | (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | grep -q __LP64__ then HP_ARCH=hppa2.0w else HP_ARCH=hppa64 fi fi GUESS=$HP_ARCH-hp-hpux$HPUX_REV ;; ia64:HP-UX:*:*) HPUX_REV=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*.[0B]*//'` GUESS=ia64-hp-hpux$HPUX_REV ;; 3050*:HI-UX:*:*) set_cc_for_build sed 's/^ //' << EOF > "$dummy.c" #include int main () { long cpu = sysconf (_SC_CPU_VERSION); /* The order matters, because CPU_IS_HP_MC68K erroneously returns true for CPU_PA_RISC1_0. CPU_IS_PA_RISC returns correct results, however. */ if (CPU_IS_PA_RISC (cpu)) { switch (cpu) { case CPU_PA_RISC1_0: puts ("hppa1.0-hitachi-hiuxwe2"); break; case CPU_PA_RISC1_1: puts ("hppa1.1-hitachi-hiuxwe2"); break; case CPU_PA_RISC2_0: puts ("hppa2.0-hitachi-hiuxwe2"); break; default: puts ("hppa-hitachi-hiuxwe2"); break; } } else if (CPU_IS_HP_MC68K (cpu)) puts ("m68k-hitachi-hiuxwe2"); else puts ("unknown-hitachi-hiuxwe2"); exit (0); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } GUESS=unknown-hitachi-hiuxwe2 ;; 9000/7??:4.3bsd:*:* | 9000/8?[79]:4.3bsd:*:*) GUESS=hppa1.1-hp-bsd ;; 9000/8??:4.3bsd:*:*) GUESS=hppa1.0-hp-bsd ;; *9??*:MPE/iX:*:* | *3000*:MPE/iX:*:*) GUESS=hppa1.0-hp-mpeix ;; hp7??:OSF1:*:* | hp8?[79]:OSF1:*:*) GUESS=hppa1.1-hp-osf ;; hp8??:OSF1:*:*) GUESS=hppa1.0-hp-osf ;; i*86:OSF1:*:*) if test -x /usr/sbin/sysversion ; then GUESS=$UNAME_MACHINE-unknown-osf1mk else GUESS=$UNAME_MACHINE-unknown-osf1 fi ;; parisc*:Lites*:*:*) GUESS=hppa1.1-hp-lites ;; C1*:ConvexOS:*:* | convex:ConvexOS:C1*:*) GUESS=c1-convex-bsd ;; C2*:ConvexOS:*:* | convex:ConvexOS:C2*:*) if getsysinfo -f scalar_acc then echo c32-convex-bsd else echo c2-convex-bsd fi exit ;; C34*:ConvexOS:*:* | convex:ConvexOS:C34*:*) GUESS=c34-convex-bsd ;; C38*:ConvexOS:*:* | convex:ConvexOS:C38*:*) GUESS=c38-convex-bsd ;; C4*:ConvexOS:*:* | convex:ConvexOS:C4*:*) GUESS=c4-convex-bsd ;; CRAY*Y-MP:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=ymp-cray-unicos$CRAY_REL ;; CRAY*[A-Z]90:*:*:*) echo "$UNAME_MACHINE"-cray-unicos"$UNAME_RELEASE" \ | sed -e 's/CRAY.*\([A-Z]90\)/\1/' \ -e y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/ \ -e 's/\.[^.]*$/.X/' exit ;; CRAY*TS:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=t90-cray-unicos$CRAY_REL ;; CRAY*T3E:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=alphaev5-cray-unicosmk$CRAY_REL ;; CRAY*SV1:*:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=sv1-cray-unicos$CRAY_REL ;; *:UNICOS/mp:*:*) CRAY_REL=`echo "$UNAME_RELEASE" | sed -e 's/\.[^.]*$/.X/'` GUESS=craynv-cray-unicosmp$CRAY_REL ;; F30[01]:UNIX_System_V:*:* | F700:UNIX_System_V:*:*) FUJITSU_PROC=`uname -m | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz` FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | sed -e 's/ /_/'` GUESS=${FUJITSU_PROC}-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; 5000:UNIX_System_V:4.*:*) FUJITSU_SYS=`uname -p | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/\///'` FUJITSU_REL=`echo "$UNAME_RELEASE" | tr ABCDEFGHIJKLMNOPQRSTUVWXYZ abcdefghijklmnopqrstuvwxyz | sed -e 's/ /_/'` GUESS=sparc-fujitsu-${FUJITSU_SYS}${FUJITSU_REL} ;; i*86:BSD/386:*:* | i*86:BSD/OS:*:* | *:Ascend\ Embedded/OS:*:*) GUESS=$UNAME_MACHINE-pc-bsdi$UNAME_RELEASE ;; sparc*:BSD/OS:*:*) GUESS=sparc-unknown-bsdi$UNAME_RELEASE ;; *:BSD/OS:*:*) GUESS=$UNAME_MACHINE-unknown-bsdi$UNAME_RELEASE ;; arm:FreeBSD:*:*) UNAME_PROCESSOR=`uname -p` set_cc_for_build if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabi else FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL-gnueabihf fi ;; *:FreeBSD:*:*) UNAME_PROCESSOR=`/usr/bin/uname -p` case $UNAME_PROCESSOR in amd64) UNAME_PROCESSOR=x86_64 ;; i386) UNAME_PROCESSOR=i586 ;; esac FREEBSD_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_PROCESSOR-unknown-freebsd$FREEBSD_REL ;; i*:CYGWIN*:*) GUESS=$UNAME_MACHINE-pc-cygwin ;; *:MINGW64*:*) GUESS=$UNAME_MACHINE-pc-mingw64 ;; *:MINGW*:*) GUESS=$UNAME_MACHINE-pc-mingw32 ;; *:MSYS*:*) GUESS=$UNAME_MACHINE-pc-msys ;; i*:PW*:*) GUESS=$UNAME_MACHINE-pc-pw32 ;; *:SerenityOS:*:*) GUESS=$UNAME_MACHINE-pc-serenity ;; *:Interix*:*) case $UNAME_MACHINE in x86) GUESS=i586-pc-interix$UNAME_RELEASE ;; authenticamd | genuineintel | EM64T) GUESS=x86_64-unknown-interix$UNAME_RELEASE ;; IA64) GUESS=ia64-unknown-interix$UNAME_RELEASE ;; esac ;; i*:UWIN*:*) GUESS=$UNAME_MACHINE-pc-uwin ;; amd64:CYGWIN*:*:* | x86_64:CYGWIN*:*:*) GUESS=x86_64-pc-cygwin ;; prep*:SunOS:5.*:*) SUN_REL=`echo "$UNAME_RELEASE" | sed -e 's/[^.]*//'` GUESS=powerpcle-unknown-solaris2$SUN_REL ;; *:GNU:*:*) # the GNU system GNU_ARCH=`echo "$UNAME_MACHINE" | sed -e 's,[-/].*$,,'` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's,/.*$,,'` GUESS=$GNU_ARCH-unknown-$LIBC$GNU_REL ;; *:GNU/*:*:*) # other systems with GNU libc and userland GNU_SYS=`echo "$UNAME_SYSTEM" | sed 's,^[^/]*/,,' | tr "[:upper:]" "[:lower:]"` GNU_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-$GNU_SYS$GNU_REL-$LIBC ;; *:Minix:*:*) GUESS=$UNAME_MACHINE-unknown-minix ;; aarch64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; aarch64_be:Linux:*:*) UNAME_MACHINE=aarch64_be GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; alpha:Linux:*:*) case `sed -n '/^cpu model/s/^.*: \(.*\)/\1/p' /proc/cpuinfo 2>/dev/null` in EV5) UNAME_MACHINE=alphaev5 ;; EV56) UNAME_MACHINE=alphaev56 ;; PCA56) UNAME_MACHINE=alphapca56 ;; PCA57) UNAME_MACHINE=alphapca56 ;; EV6) UNAME_MACHINE=alphaev6 ;; EV67) UNAME_MACHINE=alphaev67 ;; EV68*) UNAME_MACHINE=alphaev68 ;; esac objdump --private-headers /bin/sh | grep -q ld.so.1 if test "$?" = 0 ; then LIBC=gnulibc1 ; fi GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arc:Linux:*:* | arceb:Linux:*:* | arc32:Linux:*:* | arc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; arm*:Linux:*:*) set_cc_for_build if echo __ARM_EABI__ | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_EABI__ then GUESS=$UNAME_MACHINE-unknown-linux-$LIBC else if echo __ARM_PCS_VFP | $CC_FOR_BUILD -E - 2>/dev/null \ | grep -q __ARM_PCS_VFP then GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabi else GUESS=$UNAME_MACHINE-unknown-linux-${LIBC}eabihf fi fi ;; avr32*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; cris:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; crisv32:Linux:*:*) GUESS=$UNAME_MACHINE-axis-linux-$LIBC ;; e2k:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; frv:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; hexagon:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:Linux:*:*) GUESS=$UNAME_MACHINE-pc-linux-$LIBC ;; ia64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; k1om:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; loongarch32:Linux:*:* | loongarch64:Linux:*:* | loongarchx32:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m32r*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; m68*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; mips:Linux:*:* | mips64:Linux:*:*) set_cc_for_build IS_GLIBC=0 test x"${LIBC}" = xgnu && IS_GLIBC=1 sed 's/^ //' << EOF > "$dummy.c" #undef CPU #undef mips #undef mipsel #undef mips64 #undef mips64el #if ${IS_GLIBC} && defined(_ABI64) LIBCABI=gnuabi64 #else #if ${IS_GLIBC} && defined(_ABIN32) LIBCABI=gnuabin32 #else LIBCABI=${LIBC} #endif #endif #if ${IS_GLIBC} && defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa64r6 #else #if ${IS_GLIBC} && !defined(__mips64) && defined(__mips_isa_rev) && __mips_isa_rev>=6 CPU=mipsisa32r6 #else #if defined(__mips64) CPU=mips64 #else CPU=mips #endif #endif #endif #if defined(__MIPSEL__) || defined(__MIPSEL) || defined(_MIPSEL) || defined(MIPSEL) MIPS_ENDIAN=el #else #if defined(__MIPSEB__) || defined(__MIPSEB) || defined(_MIPSEB) || defined(MIPSEB) MIPS_ENDIAN= #else MIPS_ENDIAN= #endif #endif EOF cc_set_vars=`$CC_FOR_BUILD -E "$dummy.c" 2>/dev/null | grep '^CPU\|^MIPS_ENDIAN\|^LIBCABI'` eval "$cc_set_vars" test "x$CPU" != x && { echo "$CPU${MIPS_ENDIAN}-unknown-linux-$LIBCABI"; exit; } ;; mips64el:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; openrisc*:Linux:*:*) GUESS=or1k-unknown-linux-$LIBC ;; or32:Linux:*:* | or1k*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; padre:Linux:*:*) GUESS=sparc-unknown-linux-$LIBC ;; parisc64:Linux:*:* | hppa64:Linux:*:*) GUESS=hppa64-unknown-linux-$LIBC ;; parisc:Linux:*:* | hppa:Linux:*:*) # Look for CPU level case `grep '^cpu[^a-z]*:' /proc/cpuinfo 2>/dev/null | cut -d' ' -f2` in PA7*) GUESS=hppa1.1-unknown-linux-$LIBC ;; PA8*) GUESS=hppa2.0-unknown-linux-$LIBC ;; *) GUESS=hppa-unknown-linux-$LIBC ;; esac ;; ppc64:Linux:*:*) GUESS=powerpc64-unknown-linux-$LIBC ;; ppc:Linux:*:*) GUESS=powerpc-unknown-linux-$LIBC ;; ppc64le:Linux:*:*) GUESS=powerpc64le-unknown-linux-$LIBC ;; ppcle:Linux:*:*) GUESS=powerpcle-unknown-linux-$LIBC ;; riscv32:Linux:*:* | riscv32be:Linux:*:* | riscv64:Linux:*:* | riscv64be:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; s390:Linux:*:* | s390x:Linux:*:*) GUESS=$UNAME_MACHINE-ibm-linux-$LIBC ;; sh64*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sh*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; sparc:Linux:*:* | sparc64:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; tile*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; vax:Linux:*:*) GUESS=$UNAME_MACHINE-dec-linux-$LIBC ;; x86_64:Linux:*:*) set_cc_for_build LIBCABI=$LIBC if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __ILP32__'; echo IS_X32; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_X32 >/dev/null then LIBCABI=${LIBC}x32 fi fi GUESS=$UNAME_MACHINE-pc-linux-$LIBCABI ;; xtensa*:Linux:*:*) GUESS=$UNAME_MACHINE-unknown-linux-$LIBC ;; i*86:DYNIX/ptx:4*:*) # ptx 4.0 does uname -s correctly, with DYNIX/ptx in there. # earlier versions are messed up and put the nodename in both # sysname and nodename. GUESS=i386-sequent-sysv4 ;; i*86:UNIX_SV:4.2MP:2.*) # Unixware is an offshoot of SVR4, but it has its own version # number series starting with 2... # I am not positive that other SVR4 systems won't match this, # I just have to hope. -- rms. # Use sysv4.2uw... so that sysv4* matches it. GUESS=$UNAME_MACHINE-pc-sysv4.2uw$UNAME_VERSION ;; i*86:OS/2:*:*) # If we were able to find `uname', then EMX Unix compatibility # is probably installed. GUESS=$UNAME_MACHINE-pc-os2-emx ;; i*86:XTS-300:*:STOP) GUESS=$UNAME_MACHINE-unknown-stop ;; i*86:atheos:*:*) GUESS=$UNAME_MACHINE-unknown-atheos ;; i*86:syllable:*:*) GUESS=$UNAME_MACHINE-pc-syllable ;; i*86:LynxOS:2.*:* | i*86:LynxOS:3.[01]*:* | i*86:LynxOS:4.[02]*:*) GUESS=i386-unknown-lynxos$UNAME_RELEASE ;; i*86:*DOS:*:*) GUESS=$UNAME_MACHINE-pc-msdosdjgpp ;; i*86:*:4.*:*) UNAME_REL=`echo "$UNAME_RELEASE" | sed 's/\/MP$//'` if grep Novell /usr/include/link.h >/dev/null 2>/dev/null; then GUESS=$UNAME_MACHINE-univel-sysv$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv$UNAME_REL fi ;; i*86:*:5:[678]*) # UnixWare 7.x, OpenUNIX and OpenServer 6. case `/bin/uname -X | grep "^Machine"` in *486*) UNAME_MACHINE=i486 ;; *Pentium) UNAME_MACHINE=i586 ;; *Pent*|*Celeron) UNAME_MACHINE=i686 ;; esac GUESS=$UNAME_MACHINE-unknown-sysv${UNAME_RELEASE}${UNAME_SYSTEM}${UNAME_VERSION} ;; i*86:*:3.2:*) if test -f /usr/options/cb.name; then UNAME_REL=`sed -n 's/.*Version //p' /dev/null >/dev/null ; then UNAME_REL=`(/bin/uname -X|grep Release|sed -e 's/.*= //')` (/bin/uname -X|grep i80486 >/dev/null) && UNAME_MACHINE=i486 (/bin/uname -X|grep '^Machine.*Pentium' >/dev/null) \ && UNAME_MACHINE=i586 (/bin/uname -X|grep '^Machine.*Pent *II' >/dev/null) \ && UNAME_MACHINE=i686 (/bin/uname -X|grep '^Machine.*Pentium Pro' >/dev/null) \ && UNAME_MACHINE=i686 GUESS=$UNAME_MACHINE-pc-sco$UNAME_REL else GUESS=$UNAME_MACHINE-pc-sysv32 fi ;; pc:*:*:*) # Left here for compatibility: # uname -m prints for DJGPP always 'pc', but it prints nothing about # the processor, so we play safe by assuming i586. # Note: whatever this is, it MUST be the same as what config.sub # prints for the "djgpp" host, or else GDB configure will decide that # this is a cross-build. GUESS=i586-pc-msdosdjgpp ;; Intel:Mach:3*:*) GUESS=i386-pc-mach3 ;; paragon:*:*:*) GUESS=i860-intel-osf1 ;; i860:*:4.*:*) # i860-SVR4 if grep Stardent /usr/include/sys/uadmin.h >/dev/null 2>&1 ; then GUESS=i860-stardent-sysv$UNAME_RELEASE # Stardent Vistra i860-SVR4 else # Add other i860-SVR4 vendors below as they are discovered. GUESS=i860-unknown-sysv$UNAME_RELEASE # Unknown i860-SVR4 fi ;; mini*:CTIX:SYS*5:*) # "miniframe" GUESS=m68010-convergent-sysv ;; mc68k:UNIX:SYSTEM5:3.51m) GUESS=m68k-convergent-sysv ;; M680?0:D-NIX:5.3:*) GUESS=m68k-diab-dnix ;; M68*:*:R3V[5678]*:*) test -r /sysV68 && { echo 'm68k-motorola-sysv'; exit; } ;; 3[345]??:*:4.0:3.0 | 3[34]??A:*:4.0:3.0 | 3[34]??,*:*:4.0:3.0 | 3[34]??/*:*:4.0:3.0 | 4400:*:4.0:3.0 | 4850:*:4.0:3.0 | SKA40:*:4.0:3.0 | SDS2:*:4.0:3.0 | SHG2:*:4.0:3.0 | S7501*:*:4.0:3.0) OS_REL='' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; 3[34]??:*:4.0:* | 3[34]??,*:*:4.0:*) /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4; exit; } ;; NCR*:*:4.2:* | MPRAS*:*:4.2:*) OS_REL='.3' test -r /etc/.relid \ && OS_REL=.`sed -n 's/[^ ]* [^ ]* \([0-9][0-9]\).*/\1/p' < /etc/.relid` /bin/uname -p 2>/dev/null | grep 86 >/dev/null \ && { echo i486-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep entium >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } /bin/uname -p 2>/dev/null | /bin/grep pteron >/dev/null \ && { echo i586-ncr-sysv4.3"$OS_REL"; exit; } ;; m68*:LynxOS:2.*:* | m68*:LynxOS:3.0*:*) GUESS=m68k-unknown-lynxos$UNAME_RELEASE ;; mc68030:UNIX_System_V:4.*:*) GUESS=m68k-atari-sysv4 ;; TSUNAMI:LynxOS:2.*:*) GUESS=sparc-unknown-lynxos$UNAME_RELEASE ;; rs6000:LynxOS:2.*:*) GUESS=rs6000-unknown-lynxos$UNAME_RELEASE ;; PowerPC:LynxOS:2.*:* | PowerPC:LynxOS:3.[01]*:* | PowerPC:LynxOS:4.[02]*:*) GUESS=powerpc-unknown-lynxos$UNAME_RELEASE ;; SM[BE]S:UNIX_SV:*:*) GUESS=mips-dde-sysv$UNAME_RELEASE ;; RM*:ReliantUNIX-*:*:*) GUESS=mips-sni-sysv4 ;; RM*:SINIX-*:*:*) GUESS=mips-sni-sysv4 ;; *:SINIX-*:*:*) if uname -p 2>/dev/null >/dev/null ; then UNAME_MACHINE=`(uname -p) 2>/dev/null` GUESS=$UNAME_MACHINE-sni-sysv4 else GUESS=ns32k-sni-sysv fi ;; PENTIUM:*:4.0*:*) # Unisys `ClearPath HMP IX 4000' SVR4/MP effort # says GUESS=i586-unisys-sysv4 ;; *:UNIX_System_V:4*:FTX*) # From Gerald Hewes . # How about differentiating between stratus architectures? -djm GUESS=hppa1.1-stratus-sysv4 ;; *:*:*:FTX*) # From seanf@swdc.stratus.com. GUESS=i860-stratus-sysv4 ;; i*86:VOS:*:*) # From Paul.Green@stratus.com. GUESS=$UNAME_MACHINE-stratus-vos ;; *:VOS:*:*) # From Paul.Green@stratus.com. GUESS=hppa1.1-stratus-vos ;; mc68*:A/UX:*:*) GUESS=m68k-apple-aux$UNAME_RELEASE ;; news*:NEWS-OS:6*:*) GUESS=mips-sony-newsos6 ;; R[34]000:*System_V*:*:* | R4000:UNIX_SYSV:*:* | R*000:UNIX_SV:*:*) if test -d /usr/nec; then GUESS=mips-nec-sysv$UNAME_RELEASE else GUESS=mips-unknown-sysv$UNAME_RELEASE fi ;; BeBox:BeOS:*:*) # BeOS running on hardware made by Be, PPC only. GUESS=powerpc-be-beos ;; BeMac:BeOS:*:*) # BeOS running on Mac or Mac clone, PPC only. GUESS=powerpc-apple-beos ;; BePC:BeOS:*:*) # BeOS running on Intel PC compatible. GUESS=i586-pc-beos ;; BePC:Haiku:*:*) # Haiku running on Intel PC compatible. GUESS=i586-pc-haiku ;; x86_64:Haiku:*:*) GUESS=x86_64-unknown-haiku ;; SX-4:SUPER-UX:*:*) GUESS=sx4-nec-superux$UNAME_RELEASE ;; SX-5:SUPER-UX:*:*) GUESS=sx5-nec-superux$UNAME_RELEASE ;; SX-6:SUPER-UX:*:*) GUESS=sx6-nec-superux$UNAME_RELEASE ;; SX-7:SUPER-UX:*:*) GUESS=sx7-nec-superux$UNAME_RELEASE ;; SX-8:SUPER-UX:*:*) GUESS=sx8-nec-superux$UNAME_RELEASE ;; SX-8R:SUPER-UX:*:*) GUESS=sx8r-nec-superux$UNAME_RELEASE ;; SX-ACE:SUPER-UX:*:*) GUESS=sxace-nec-superux$UNAME_RELEASE ;; Power*:Rhapsody:*:*) GUESS=powerpc-apple-rhapsody$UNAME_RELEASE ;; *:Rhapsody:*:*) GUESS=$UNAME_MACHINE-apple-rhapsody$UNAME_RELEASE ;; arm64:Darwin:*:*) GUESS=aarch64-apple-darwin$UNAME_RELEASE ;; *:Darwin:*:*) UNAME_PROCESSOR=`uname -p` case $UNAME_PROCESSOR in unknown) UNAME_PROCESSOR=powerpc ;; esac if command -v xcode-select > /dev/null 2> /dev/null && \ ! xcode-select --print-path > /dev/null 2> /dev/null ; then # Avoid executing cc if there is no toolchain installed as # cc will be a stub that puts up a graphical alert # prompting the user to install developer tools. CC_FOR_BUILD=no_compiler_found else set_cc_for_build fi if test "$CC_FOR_BUILD" != no_compiler_found; then if (echo '#ifdef __LP64__'; echo IS_64BIT_ARCH; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_64BIT_ARCH >/dev/null then case $UNAME_PROCESSOR in i386) UNAME_PROCESSOR=x86_64 ;; powerpc) UNAME_PROCESSOR=powerpc64 ;; esac fi # On 10.4-10.6 one might compile for PowerPC via gcc -arch ppc if (echo '#ifdef __POWERPC__'; echo IS_PPC; echo '#endif') | \ (CCOPTS="" $CC_FOR_BUILD -E - 2>/dev/null) | \ grep IS_PPC >/dev/null then UNAME_PROCESSOR=powerpc fi elif test "$UNAME_PROCESSOR" = i386 ; then # uname -m returns i386 or x86_64 UNAME_PROCESSOR=$UNAME_MACHINE fi GUESS=$UNAME_PROCESSOR-apple-darwin$UNAME_RELEASE ;; *:procnto*:*:* | *:QNX:[0123456789]*:*) UNAME_PROCESSOR=`uname -p` if test "$UNAME_PROCESSOR" = x86; then UNAME_PROCESSOR=i386 UNAME_MACHINE=pc fi GUESS=$UNAME_PROCESSOR-$UNAME_MACHINE-nto-qnx$UNAME_RELEASE ;; *:QNX:*:4*) GUESS=i386-pc-qnx ;; NEO-*:NONSTOP_KERNEL:*:*) GUESS=neo-tandem-nsk$UNAME_RELEASE ;; NSE-*:NONSTOP_KERNEL:*:*) GUESS=nse-tandem-nsk$UNAME_RELEASE ;; NSR-*:NONSTOP_KERNEL:*:*) GUESS=nsr-tandem-nsk$UNAME_RELEASE ;; NSV-*:NONSTOP_KERNEL:*:*) GUESS=nsv-tandem-nsk$UNAME_RELEASE ;; NSX-*:NONSTOP_KERNEL:*:*) GUESS=nsx-tandem-nsk$UNAME_RELEASE ;; *:NonStop-UX:*:*) GUESS=mips-compaq-nonstopux ;; BS2000:POSIX*:*:*) GUESS=bs2000-siemens-sysv ;; DS/*:UNIX_System_V:*:*) GUESS=$UNAME_MACHINE-$UNAME_SYSTEM-$UNAME_RELEASE ;; *:Plan9:*:*) # "uname -m" is not consistent, so use $cputype instead. 386 # is converted to i386 for consistency with other x86 # operating systems. if test "${cputype-}" = 386; then UNAME_MACHINE=i386 elif test "x${cputype-}" != x; then UNAME_MACHINE=$cputype fi GUESS=$UNAME_MACHINE-unknown-plan9 ;; *:TOPS-10:*:*) GUESS=pdp10-unknown-tops10 ;; *:TENEX:*:*) GUESS=pdp10-unknown-tenex ;; KS10:TOPS-20:*:* | KL10:TOPS-20:*:* | TYPE4:TOPS-20:*:*) GUESS=pdp10-dec-tops20 ;; XKL-1:TOPS-20:*:* | TYPE5:TOPS-20:*:*) GUESS=pdp10-xkl-tops20 ;; *:TOPS-20:*:*) GUESS=pdp10-unknown-tops20 ;; *:ITS:*:*) GUESS=pdp10-unknown-its ;; SEI:*:*:SEIUX) GUESS=mips-sei-seiux$UNAME_RELEASE ;; *:DragonFly:*:*) DRAGONFLY_REL=`echo "$UNAME_RELEASE" | sed -e 's/[-(].*//'` GUESS=$UNAME_MACHINE-unknown-dragonfly$DRAGONFLY_REL ;; *:*VMS:*:*) UNAME_MACHINE=`(uname -p) 2>/dev/null` case $UNAME_MACHINE in A*) GUESS=alpha-dec-vms ;; I*) GUESS=ia64-dec-vms ;; V*) GUESS=vax-dec-vms ;; esac ;; *:XENIX:*:SysV) GUESS=i386-pc-xenix ;; i*86:skyos:*:*) SKYOS_REL=`echo "$UNAME_RELEASE" | sed -e 's/ .*$//'` GUESS=$UNAME_MACHINE-pc-skyos$SKYOS_REL ;; i*86:rdos:*:*) GUESS=$UNAME_MACHINE-pc-rdos ;; i*86:Fiwix:*:*) GUESS=$UNAME_MACHINE-pc-fiwix ;; *:AROS:*:*) GUESS=$UNAME_MACHINE-unknown-aros ;; x86_64:VMkernel:*:*) GUESS=$UNAME_MACHINE-unknown-esx ;; amd64:Isilon\ OneFS:*:*) GUESS=x86_64-unknown-onefs ;; *:Unleashed:*:*) GUESS=$UNAME_MACHINE-unknown-unleashed$UNAME_RELEASE ;; esac # Do we have a guess based on uname results? if test "x$GUESS" != x; then echo "$GUESS" exit fi # No uname command or uname output not recognized. set_cc_for_build cat > "$dummy.c" < #include #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined (vax) || defined (__vax) || defined (__vax__) || defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #include #if defined(_SIZE_T_) || defined(SIGLOST) #include #endif #endif #endif main () { #if defined (sony) #if defined (MIPSEB) /* BFD wants "bsd" instead of "newsos". Perhaps BFD should be changed, I don't know.... */ printf ("mips-sony-bsd\n"); exit (0); #else #include printf ("m68k-sony-newsos%s\n", #ifdef NEWSOS4 "4" #else "" #endif ); exit (0); #endif #endif #if defined (NeXT) #if !defined (__ARCHITECTURE__) #define __ARCHITECTURE__ "m68k" #endif int version; version=`(hostinfo | sed -n 's/.*NeXT Mach \([0-9]*\).*/\1/p') 2>/dev/null`; if (version < 4) printf ("%s-next-nextstep%d\n", __ARCHITECTURE__, version); else printf ("%s-next-openstep%d\n", __ARCHITECTURE__, version); exit (0); #endif #if defined (MULTIMAX) || defined (n16) #if defined (UMAXV) printf ("ns32k-encore-sysv\n"); exit (0); #else #if defined (CMU) printf ("ns32k-encore-mach\n"); exit (0); #else printf ("ns32k-encore-bsd\n"); exit (0); #endif #endif #endif #if defined (__386BSD__) printf ("i386-pc-bsd\n"); exit (0); #endif #if defined (sequent) #if defined (i386) printf ("i386-sequent-dynix\n"); exit (0); #endif #if defined (ns32000) printf ("ns32k-sequent-dynix\n"); exit (0); #endif #endif #if defined (_SEQUENT_) struct utsname un; uname(&un); if (strncmp(un.version, "V2", 2) == 0) { printf ("i386-sequent-ptx2\n"); exit (0); } if (strncmp(un.version, "V1", 2) == 0) { /* XXX is V1 correct? */ printf ("i386-sequent-ptx1\n"); exit (0); } printf ("i386-sequent-ptx\n"); exit (0); #endif #if defined (vax) #if !defined (ultrix) #include #if defined (BSD) #if BSD == 43 printf ("vax-dec-bsd4.3\n"); exit (0); #else #if BSD == 199006 printf ("vax-dec-bsd4.3reno\n"); exit (0); #else printf ("vax-dec-bsd\n"); exit (0); #endif #endif #else printf ("vax-dec-bsd\n"); exit (0); #endif #else #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname un; uname (&un); printf ("vax-dec-ultrix%s\n", un.release); exit (0); #else printf ("vax-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined(ultrix) || defined(_ultrix) || defined(__ultrix) || defined(__ultrix__) #if defined(mips) || defined(__mips) || defined(__mips__) || defined(MIPS) || defined(__MIPS__) #if defined(_SIZE_T_) || defined(SIGLOST) struct utsname *un; uname (&un); printf ("mips-dec-ultrix%s\n", un.release); exit (0); #else printf ("mips-dec-ultrix\n"); exit (0); #endif #endif #endif #if defined (alliant) && defined (i860) printf ("i860-alliant-bsd\n"); exit (0); #endif exit (1); } EOF $CC_FOR_BUILD -o "$dummy" "$dummy.c" 2>/dev/null && SYSTEM_NAME=`"$dummy"` && { echo "$SYSTEM_NAME"; exit; } # Apollos put the system type in the environment. test -d /usr/apollo && { echo "$ISP-apollo-$SYSTYPE"; exit; } echo "$0: unable to guess system type" >&2 case $UNAME_MACHINE:$UNAME_SYSTEM in mips:Linux | mips64:Linux) # If we got here on MIPS GNU/Linux, output extra information. cat >&2 <&2 <&2 </dev/null || echo unknown` uname -r = `(uname -r) 2>/dev/null || echo unknown` uname -s = `(uname -s) 2>/dev/null || echo unknown` uname -v = `(uname -v) 2>/dev/null || echo unknown` /usr/bin/uname -p = `(/usr/bin/uname -p) 2>/dev/null` /bin/uname -X = `(/bin/uname -X) 2>/dev/null` hostinfo = `(hostinfo) 2>/dev/null` /bin/universe = `(/bin/universe) 2>/dev/null` /usr/bin/arch -k = `(/usr/bin/arch -k) 2>/dev/null` /bin/arch = `(/bin/arch) 2>/dev/null` /usr/bin/oslevel = `(/usr/bin/oslevel) 2>/dev/null` /usr/convex/getsysinfo = `(/usr/convex/getsysinfo) 2>/dev/null` UNAME_MACHINE = "$UNAME_MACHINE" UNAME_RELEASE = "$UNAME_RELEASE" UNAME_SYSTEM = "$UNAME_SYSTEM" UNAME_VERSION = "$UNAME_VERSION" EOF fi exit 1 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: recutils-1.9/build-aux/install-sh0000755000000000000000000003577614226564226014035 00000000000000#!/bin/sh # install - install a program, script, or datafile scriptversion=2020-11-14.01; # UTC # This originates from X11R5 (mit/util/scripts/install.sh), which was # later released in X11R6 (xc/config/util/install.sh) with the # following copyright and license. # # Copyright (C) 1994 X Consortium # # Permission is hereby granted, free of charge, to any person obtaining a copy # of this software and associated documentation files (the "Software"), to # deal in the Software without restriction, including without limitation the # rights to use, copy, modify, merge, publish, distribute, sublicense, and/or # sell copies of the Software, and to permit persons to whom the Software is # furnished to do so, subject to the following conditions: # # The above copyright notice and this permission notice shall be included in # all copies or substantial portions of the Software. # # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR # IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, # FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE # X CONSORTIUM BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN # AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNEC- # TION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. # # Except as contained in this notice, the name of the X Consortium shall not # be used in advertising or otherwise to promote the sale, use or other deal- # ings in this Software without prior written authorization from the X Consor- # tium. # # # FSF changes to this file are in the public domain. # # Calling this script install-sh is preferred over install.sh, to prevent # 'make' implicit rules from creating a file called install from it # when there is no Makefile. # # This script is compatible with the BSD install script, but was written # from scratch. tab=' ' nl=' ' IFS=" $tab$nl" # Set DOITPROG to "echo" to test this script. doit=${DOITPROG-} doit_exec=${doit:-exec} # Put in absolute file names if you don't have them in your path; # or use environment vars. chgrpprog=${CHGRPPROG-chgrp} chmodprog=${CHMODPROG-chmod} chownprog=${CHOWNPROG-chown} cmpprog=${CMPPROG-cmp} cpprog=${CPPROG-cp} mkdirprog=${MKDIRPROG-mkdir} mvprog=${MVPROG-mv} rmprog=${RMPROG-rm} stripprog=${STRIPPROG-strip} posix_mkdir= # Desired mode of installed file. mode=0755 # Create dirs (including intermediate dirs) using mode 755. # This is like GNU 'install' as of coreutils 8.32 (2020). mkdir_umask=22 backupsuffix= chgrpcmd= chmodcmd=$chmodprog chowncmd= mvcmd=$mvprog rmcmd="$rmprog -f" stripcmd= src= dst= dir_arg= dst_arg= copy_on_change=false is_target_a_directory=possibly usage="\ Usage: $0 [OPTION]... [-T] SRCFILE DSTFILE or: $0 [OPTION]... SRCFILES... DIRECTORY or: $0 [OPTION]... -t DIRECTORY SRCFILES... or: $0 [OPTION]... -d DIRECTORIES... In the 1st form, copy SRCFILE to DSTFILE. In the 2nd and 3rd, copy all SRCFILES to DIRECTORY. In the 4th, create DIRECTORIES. Options: --help display this help and exit. --version display version info and exit. -c (ignored) -C install only if different (preserve data modification time) -d create directories instead of installing files. -g GROUP $chgrpprog installed files to GROUP. -m MODE $chmodprog installed files to MODE. -o USER $chownprog installed files to USER. -p pass -p to $cpprog. -s $stripprog installed files. -S SUFFIX attempt to back up existing files, with suffix SUFFIX. -t DIRECTORY install into DIRECTORY. -T report an error if DSTFILE is a directory. Environment variables override the default commands: CHGRPPROG CHMODPROG CHOWNPROG CMPPROG CPPROG MKDIRPROG MVPROG RMPROG STRIPPROG By default, rm is invoked with -f; when overridden with RMPROG, it's up to you to specify -f if you want it. If -S is not specified, no backups are attempted. Email bug reports to bug-automake@gnu.org. Automake home page: https://www.gnu.org/software/automake/ " while test $# -ne 0; do case $1 in -c) ;; -C) copy_on_change=true;; -d) dir_arg=true;; -g) chgrpcmd="$chgrpprog $2" shift;; --help) echo "$usage"; exit $?;; -m) mode=$2 case $mode in *' '* | *"$tab"* | *"$nl"* | *'*'* | *'?'* | *'['*) echo "$0: invalid mode: $mode" >&2 exit 1;; esac shift;; -o) chowncmd="$chownprog $2" shift;; -p) cpprog="$cpprog -p";; -s) stripcmd=$stripprog;; -S) backupsuffix="$2" shift;; -t) is_target_a_directory=always dst_arg=$2 # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac shift;; -T) is_target_a_directory=never;; --version) echo "$0 $scriptversion"; exit $?;; --) shift break;; -*) echo "$0: invalid option: $1" >&2 exit 1;; *) break;; esac shift done # We allow the use of options -d and -T together, by making -d # take the precedence; this is for compatibility with GNU install. if test -n "$dir_arg"; then if test -n "$dst_arg"; then echo "$0: target directory not allowed when installing a directory." >&2 exit 1 fi fi if test $# -ne 0 && test -z "$dir_arg$dst_arg"; then # When -d is used, all remaining arguments are directories to create. # When -t is used, the destination is already specified. # Otherwise, the last argument is the destination. Remove it from $@. for arg do if test -n "$dst_arg"; then # $@ is not empty: it contains at least $arg. set fnord "$@" "$dst_arg" shift # fnord fi shift # arg dst_arg=$arg # Protect names problematic for 'test' and other utilities. case $dst_arg in -* | [=\(\)!]) dst_arg=./$dst_arg;; esac done fi if test $# -eq 0; then if test -z "$dir_arg"; then echo "$0: no input file specified." >&2 exit 1 fi # It's OK to call 'install-sh -d' without argument. # This can happen when creating conditional directories. exit 0 fi if test -z "$dir_arg"; then if test $# -gt 1 || test "$is_target_a_directory" = always; then if test ! -d "$dst_arg"; then echo "$0: $dst_arg: Is not a directory." >&2 exit 1 fi fi fi if test -z "$dir_arg"; then do_exit='(exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 # Set umask so as not to create temps with too-generous modes. # However, 'strip' requires both read and write access to temps. case $mode in # Optimize common cases. *644) cp_umask=133;; *755) cp_umask=22;; *[0-7]) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw='% 200' fi cp_umask=`expr '(' 777 - $mode % 1000 ')' $u_plus_rw`;; *) if test -z "$stripcmd"; then u_plus_rw= else u_plus_rw=,u+rw fi cp_umask=$mode$u_plus_rw;; esac fi for src do # Protect names problematic for 'test' and other utilities. case $src in -* | [=\(\)!]) src=./$src;; esac if test -n "$dir_arg"; then dst=$src dstdir=$dst test -d "$dstdir" dstdir_status=$? # Don't chown directories that already exist. if test $dstdir_status = 0; then chowncmd="" fi else # Waiting for this to be detected by the "$cpprog $src $dsttmp" command # might cause directories to be created, which would be especially bad # if $src (and thus $dsttmp) contains '*'. if test ! -f "$src" && test ! -d "$src"; then echo "$0: $src does not exist." >&2 exit 1 fi if test -z "$dst_arg"; then echo "$0: no destination specified." >&2 exit 1 fi dst=$dst_arg # If destination is a directory, append the input filename. if test -d "$dst"; then if test "$is_target_a_directory" = never; then echo "$0: $dst_arg: Is a directory" >&2 exit 1 fi dstdir=$dst dstbase=`basename "$src"` case $dst in */) dst=$dst$dstbase;; *) dst=$dst/$dstbase;; esac dstdir_status=0 else dstdir=`dirname "$dst"` test -d "$dstdir" dstdir_status=$? fi fi case $dstdir in */) dstdirslash=$dstdir;; *) dstdirslash=$dstdir/;; esac obsolete_mkdir_used=false if test $dstdir_status != 0; then case $posix_mkdir in '') # With -d, create the new directory with the user-specified mode. # Otherwise, rely on $mkdir_umask. if test -n "$dir_arg"; then mkdir_mode=-m$mode else mkdir_mode= fi posix_mkdir=false # The $RANDOM variable is not portable (e.g., dash). Use it # here however when possible just to lower collision chance. tmpdir=${TMPDIR-/tmp}/ins$RANDOM-$$ trap ' ret=$? rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" 2>/dev/null exit $ret ' 0 # Because "mkdir -p" follows existing symlinks and we likely work # directly in world-writeable /tmp, make sure that the '$tmpdir' # directory is successfully created first before we actually test # 'mkdir -p'. if (umask $mkdir_umask && $mkdirprog $mkdir_mode "$tmpdir" && exec $mkdirprog $mkdir_mode -p -- "$tmpdir/a/b") >/dev/null 2>&1 then if test -z "$dir_arg" || { # Check for POSIX incompatibilities with -m. # HP-UX 11.23 and IRIX 6.5 mkdir -m -p sets group- or # other-writable bit of parent directory when it shouldn't. # FreeBSD 6.1 mkdir -m -p sets mode of existing directory. test_tmpdir="$tmpdir/a" ls_ld_tmpdir=`ls -ld "$test_tmpdir"` case $ls_ld_tmpdir in d????-?r-*) different_mode=700;; d????-?--*) different_mode=755;; *) false;; esac && $mkdirprog -m$different_mode -p -- "$test_tmpdir" && { ls_ld_tmpdir_1=`ls -ld "$test_tmpdir"` test "$ls_ld_tmpdir" = "$ls_ld_tmpdir_1" } } then posix_mkdir=: fi rmdir "$tmpdir/a/b" "$tmpdir/a" "$tmpdir" else # Remove any dirs left behind by ancient mkdir implementations. rmdir ./$mkdir_mode ./-p ./-- "$tmpdir" 2>/dev/null fi trap '' 0;; esac if $posix_mkdir && ( umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir" ) then : else # mkdir does not conform to POSIX, # or it failed possibly due to a race condition. Create the # directory the slow way, step by step, checking for races as we go. case $dstdir in /*) prefix='/';; [-=\(\)!]*) prefix='./';; *) prefix='';; esac oIFS=$IFS IFS=/ set -f set fnord $dstdir shift set +f IFS=$oIFS prefixes= for d do test X"$d" = X && continue prefix=$prefix$d if test -d "$prefix"; then prefixes= else if $posix_mkdir; then (umask $mkdir_umask && $doit_exec $mkdirprog $mkdir_mode -p -- "$dstdir") && break # Don't fail if two instances are running concurrently. test -d "$prefix" || exit 1 else case $prefix in *\'*) qprefix=`echo "$prefix" | sed "s/'/'\\\\\\\\''/g"`;; *) qprefix=$prefix;; esac prefixes="$prefixes '$qprefix'" fi fi prefix=$prefix/ done if test -n "$prefixes"; then # Don't fail if two instances are running concurrently. (umask $mkdir_umask && eval "\$doit_exec \$mkdirprog $prefixes") || test -d "$dstdir" || exit 1 obsolete_mkdir_used=true fi fi fi if test -n "$dir_arg"; then { test -z "$chowncmd" || $doit $chowncmd "$dst"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dst"; } && { test "$obsolete_mkdir_used$chowncmd$chgrpcmd" = false || test -z "$chmodcmd" || $doit $chmodcmd $mode "$dst"; } || exit 1 else # Make a couple of temp file names in the proper directory. dsttmp=${dstdirslash}_inst.$$_ rmtmp=${dstdirslash}_rm.$$_ # Trap to clean up those temp files at exit. trap 'ret=$?; rm -f "$dsttmp" "$rmtmp" && exit $ret' 0 # Copy the file name to the temp name. (umask $cp_umask && { test -z "$stripcmd" || { # Create $dsttmp read-write so that cp doesn't create it read-only, # which would cause strip to fail. if test -z "$doit"; then : >"$dsttmp" # No need to fork-exec 'touch'. else $doit touch "$dsttmp" fi } } && $doit_exec $cpprog "$src" "$dsttmp") && # and set any options; do chmod last to preserve setuid bits. # # If any of these fail, we abort the whole thing. If we want to # ignore errors from any of these, just make sure not to ignore # errors from the above "$doit $cpprog $src $dsttmp" command. # { test -z "$chowncmd" || $doit $chowncmd "$dsttmp"; } && { test -z "$chgrpcmd" || $doit $chgrpcmd "$dsttmp"; } && { test -z "$stripcmd" || $doit $stripcmd "$dsttmp"; } && { test -z "$chmodcmd" || $doit $chmodcmd $mode "$dsttmp"; } && # If -C, don't bother to copy if it wouldn't change the file. if $copy_on_change && old=`LC_ALL=C ls -dlL "$dst" 2>/dev/null` && new=`LC_ALL=C ls -dlL "$dsttmp" 2>/dev/null` && set -f && set X $old && old=:$2:$4:$5:$6 && set X $new && new=:$2:$4:$5:$6 && set +f && test "$old" = "$new" && $cmpprog "$dst" "$dsttmp" >/dev/null 2>&1 then rm -f "$dsttmp" else # If $backupsuffix is set, and the file being installed # already exists, attempt a backup. Don't worry if it fails, # e.g., if mv doesn't support -f. if test -n "$backupsuffix" && test -f "$dst"; then $doit $mvcmd -f "$dst" "$dst$backupsuffix" 2>/dev/null fi # Rename the file to the real destination. $doit $mvcmd -f "$dsttmp" "$dst" 2>/dev/null || # The rename failed, perhaps because mv can't rename something else # to itself, or perhaps because mv is so ancient that it does not # support -f. { # Now remove or move aside any old file at destination location. # We try this two ways since rm can't unlink itself on some # systems and the destination file might be busy for other # reasons. In this case, the final cleanup might fail but the new # file should still install successfully. { test ! -f "$dst" || $doit $rmcmd "$dst" 2>/dev/null || { $doit $mvcmd -f "$dst" "$rmtmp" 2>/dev/null && { $doit $rmcmd "$rmtmp" 2>/dev/null; :; } } || { echo "$0: cannot unlink or rename $dst" >&2 (exit 1); exit 1 } } && # Now rename the file to the real destination. $doit $mvcmd "$dsttmp" "$dst" } fi || exit 1 trap '' 0 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: recutils-1.9/build-aux/compile0000755000000000000000000001635014226573146013373 00000000000000#! /bin/sh # Wrapper for compilers which do not understand '-c -o'. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2021 Free Software Foundation, Inc. # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . nl=' ' # We need space, tab and new line, in precisely that order. Quoting is # there to prevent tools from complaining about whitespace usage. IFS=" "" $nl" file_conv= # func_file_conv build_file lazy # Convert a $build file to $host form and store it in $file # Currently only supports Windows hosts. If the determined conversion # type is listed in (the comma separated) LAZY, no conversion will # take place. func_file_conv () { file=$1 case $file in / | /[!/]*) # absolute file, and not a UNC file if test -z "$file_conv"; then # lazily determine how to convert abs files case `uname -s` in MINGW*) file_conv=mingw ;; CYGWIN* | MSYS*) file_conv=cygwin ;; *) file_conv=wine ;; esac fi case $file_conv/,$2, in *,$file_conv,*) ;; mingw/*) file=`cmd //C echo "$file " | sed -e 's/"\(.*\) " *$/\1/'` ;; cygwin/* | msys/*) file=`cygpath -m "$file" || echo "$file"` ;; wine/*) file=`winepath -w "$file" || echo "$file"` ;; esac ;; esac } # func_cl_dashL linkdir # Make cl look for libraries in LINKDIR func_cl_dashL () { func_file_conv "$1" if test -z "$lib_path"; then lib_path=$file else lib_path="$lib_path;$file" fi linker_opts="$linker_opts -LIBPATH:$file" } # func_cl_dashl library # Do a library search-path lookup for cl func_cl_dashl () { lib=$1 found=no save_IFS=$IFS IFS=';' for dir in $lib_path $LIB do IFS=$save_IFS if $shared && test -f "$dir/$lib.dll.lib"; then found=yes lib=$dir/$lib.dll.lib break fi if test -f "$dir/$lib.lib"; then found=yes lib=$dir/$lib.lib break fi if test -f "$dir/lib$lib.a"; then found=yes lib=$dir/lib$lib.a break fi done IFS=$save_IFS if test "$found" != yes; then lib=$lib.lib fi } # func_cl_wrapper cl arg... # Adjust compile command to suit cl func_cl_wrapper () { # Assume a capable shell lib_path= shared=: linker_opts= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. eat=1 case $2 in *.o | *.[oO][bB][jJ]) func_file_conv "$2" set x "$@" -Fo"$file" shift ;; *) func_file_conv "$2" set x "$@" -Fe"$file" shift ;; esac ;; -I) eat=1 func_file_conv "$2" mingw set x "$@" -I"$file" shift ;; -I*) func_file_conv "${1#-I}" mingw set x "$@" -I"$file" shift ;; -l) eat=1 func_cl_dashl "$2" set x "$@" "$lib" shift ;; -l*) func_cl_dashl "${1#-l}" set x "$@" "$lib" shift ;; -L) eat=1 func_cl_dashL "$2" ;; -L*) func_cl_dashL "${1#-L}" ;; -static) shared=false ;; -Wl,*) arg=${1#-Wl,} save_ifs="$IFS"; IFS=',' for flag in $arg; do IFS="$save_ifs" linker_opts="$linker_opts $flag" done IFS="$save_ifs" ;; -Xlinker) eat=1 linker_opts="$linker_opts $2" ;; -*) set x "$@" "$1" shift ;; *.cc | *.CC | *.cxx | *.CXX | *.[cC]++) func_file_conv "$1" set x "$@" -Tp"$file" shift ;; *.c | *.cpp | *.CPP | *.lib | *.LIB | *.Lib | *.OBJ | *.obj | *.[oO]) func_file_conv "$1" mingw set x "$@" "$file" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -n "$linker_opts"; then linker_opts="-link$linker_opts" fi exec "$@" $linker_opts exit 1 } eat= case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: compile [--help] [--version] PROGRAM [ARGS] Wrapper for compilers which do not understand '-c -o'. Remove '-o dest.o' from ARGS, run PROGRAM with the remaining arguments, and rename the output as expected. If you are trying to build a whole package this is not the right script to run: please start by reading the file 'INSTALL'. Report bugs to . EOF exit $? ;; -v | --v*) echo "compile $scriptversion" exit $? ;; cl | *[/\\]cl | cl.exe | *[/\\]cl.exe | \ icl | *[/\\]icl | icl.exe | *[/\\]icl.exe ) func_cl_wrapper "$@" # Doesn't return... ;; esac ofile= cfile= for arg do if test -n "$eat"; then eat= else case $1 in -o) # configure might choose to run compile as 'compile cc -o foo foo.c'. # So we strip '-o arg' only if arg is an object. eat=1 case $2 in *.o | *.obj) ofile=$2 ;; *) set x "$@" -o "$2" shift ;; esac ;; *.c) cfile=$1 set x "$@" "$1" shift ;; *) set x "$@" "$1" shift ;; esac fi shift done if test -z "$ofile" || test -z "$cfile"; then # If no '-o' option was seen then we might have been invoked from a # pattern rule where we don't need one. That is ok -- this is a # normal compilation that the losing compiler can handle. If no # '.c' file was seen then we are probably linking. That is also # ok. exec "$@" fi # Name of file we expect compiler to create. cofile=`echo "$cfile" | sed 's|^.*[\\/]||; s|^[a-zA-Z]:||; s/\.c$/.o/'` # Create the lock directory. # Note: use '[/\\:.-]' here to ensure that we don't use the same name # that we are using for the .o file. Also, base the name on the expected # object file name, since that is what matters with a parallel build. lockdir=`echo "$cofile" | sed -e 's|[/\\:.-]|_|g'`.d while true; do if mkdir "$lockdir" >/dev/null 2>&1; then break fi sleep 1 done # FIXME: race condition here if user kills between mkdir and trap. trap "rmdir '$lockdir'; exit 1" 1 2 15 # Run the compile. "$@" ret=$? if test -f "$cofile"; then test "$cofile" = "$ofile" || mv "$cofile" "$ofile" elif test -f "${cofile}bj"; then test "${cofile}bj" = "$ofile" || mv "${cofile}bj" "$ofile" fi rmdir "$lockdir" exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: recutils-1.9/build-aux/vc-list-files0000755000000000000000000000736714226564447014440 00000000000000#!/bin/sh # List version-controlled file names. # Print a version string. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2006-2022 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # List the specified version-controlled files. # With no argument, list them all. With a single DIRECTORY argument, # list the version-controlled files in that directory. # If there's an argument, it must be a single, "."-relative directory name. # cvsu is part of the cvsutils package: https://www.red-bean.com/cvsutils/ postprocess= case $1 in --help) cat <. EOF exit ;; --version) year=`echo "$scriptversion" | sed 's/[^0-9].*//'` cat < This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. EOF exit ;; -C) test "$2" = . || postprocess="| sed 's|^|$2/|'" cd "$2" || exit 1 shift; shift ;; esac test $# = 0 && set . for dir do if test -d .git || test -f .git; then test "x$dir" = x. \ && dir= sed_esc= \ || { dir="$dir/"; sed_esc=`echo "$dir"|env sed 's,\([\\/]\),\\\\\1,g'`; } # Ignore git symlinks - either they point into the tree, in which case # we don't need to visit the target twice, or they point somewhere # else (often into a submodule), in which case the content does not # belong to this package. eval exec git ls-tree -r 'HEAD:"$dir"' \ \| sed -n '"s/^100[^ ]*./$sed_esc/p"' $postprocess elif test -d .hg; then eval exec hg locate '"$dir/*"' $postprocess elif test -d .bzr; then test "$postprocess" = '' && postprocess="| sed 's|^\./||'" eval exec bzr ls -R --versioned '"$dir"' $postprocess elif test -d CVS; then test "$postprocess" = '' && postprocess="| sed 's|^\./||'" if test -x build-aux/cvsu; then eval build-aux/cvsu --find --types=AFGM '"$dir"' $postprocess elif (cvsu --help) >/dev/null 2>&1; then eval cvsu --find --types=AFGM '"$dir"' $postprocess else eval awk -F/ \''{ \ if (!$1 && $3 !~ /^-/) { \ f=FILENAME; \ if (f ~ /CVS\/Entries$/) \ f = substr(f, 1, length(f)-11); \ print f $2; \ }}'\'' \ `find "$dir" -name Entries -print` /dev/null' $postprocess fi elif test -d .svn; then eval exec svn list -R '"$dir"' $postprocess else echo "$0: Failed to determine type of version control used in `pwd`" 1>&2 exit 1 fi done # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: recutils-1.9/build-aux/test-driver0000755000000000000000000001141714226573151014206 00000000000000#! /bin/sh # test-driver - basic testsuite driver script. scriptversion=2018-03-07.03; # UTC # Copyright (C) 2011-2021 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . # Make unconditional expansion of undefined variables an error. This # helps a lot in preventing typo-related bugs. set -u usage_error () { echo "$0: $*" >&2 print_usage >&2 exit 2 } print_usage () { cat <"$log_file" "$@" >>"$log_file" 2>&1 estatus=$? if test $enable_hard_errors = no && test $estatus -eq 99; then tweaked_estatus=1 else tweaked_estatus=$estatus fi case $tweaked_estatus:$expect_failure in 0:yes) col=$red res=XPASS recheck=yes gcopy=yes;; 0:*) col=$grn res=PASS recheck=no gcopy=no;; 77:*) col=$blu res=SKIP recheck=no gcopy=yes;; 99:*) col=$mgn res=ERROR recheck=yes gcopy=yes;; *:yes) col=$lgn res=XFAIL recheck=no gcopy=yes;; *:*) col=$red res=FAIL recheck=yes gcopy=yes;; esac # Report the test outcome and exit status in the logs, so that one can # know whether the test passed or failed simply by looking at the '.log' # file, without the need of also peaking into the corresponding '.trs' # file (automake bug#11814). echo "$res $test_name (exit status: $estatus)" >>"$log_file" # Report outcome to console. echo "${col}${res}${std}: $test_name" # Register the test result, and other relevant metadata. echo ":test-result: $res" > $trs_file echo ":global-test-result: $res" >> $trs_file echo ":recheck: $recheck" >> $trs_file echo ":copy-in-global-log: $gcopy" >> $trs_file # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: recutils-1.9/build-aux/texinfo.tex0000644000000000000000000133160614226564226014217 00000000000000% texinfo.tex -- TeX macros to handle Texinfo files. % % Load plain if necessary, i.e., if running under initex. \expandafter\ifx\csname fmtname\endcsname\relax\input plain\fi % \def\texinfoversion{2022-04-09.08} % % Copyright 1985, 1986, 1988, 1990-2022 Free Software Foundation, Inc. % % This texinfo.tex file is free software: you can redistribute it and/or % modify it under the terms of the GNU General Public License as % published by the Free Software Foundation, either version 3 of the % License, or (at your option) any later version. % % This texinfo.tex file is distributed in the hope that it will be % useful, but WITHOUT ANY WARRANTY; without even the implied warranty % of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU % General Public License for more details. % % You should have received a copy of the GNU General Public License % along with this program. If not, see . % % As a special exception, when this file is read by TeX when processing % a Texinfo source document, you may use the result without % restriction. This Exception is an additional permission under section 7 % of the GNU General Public License, version 3 ("GPLv3"). % % Please try the latest version of texinfo.tex before submitting bug % reports; you can get the latest version from: % https://ftp.gnu.org/gnu/texinfo/ (the Texinfo release area), or % https://ftpmirror.gnu.org/texinfo/ (same, via a mirror), or % https://www.gnu.org/software/texinfo/ (the Texinfo home page) % The texinfo.tex in any given distribution could well be out % of date, so if that's what you're using, please check. % % Send bug reports to bug-texinfo@gnu.org. Please include a % complete document in each bug report with which we can reproduce the % problem. Patches are, of course, greatly appreciated. % % To process a Texinfo manual with TeX, it's most reliable to use the % texi2dvi shell script that comes with the distribution. For a simple % manual foo.texi, however, you can get away with this: % tex foo.texi % texindex foo.?? % tex foo.texi % tex foo.texi % dvips foo.dvi -o # or whatever; this makes foo.ps. % The extra TeX runs get the cross-reference information correct. % Sometimes one run after texindex suffices, and sometimes you need more % than two; texi2dvi does it as many times as necessary. % % It is possible to adapt texinfo.tex for other languages, to some % extent. You can get the existing language-specific files from the % full Texinfo distribution. % % The GNU Texinfo home page is https://www.gnu.org/software/texinfo. \message{Loading texinfo [version \texinfoversion]:} % If in a .fmt file, print the version number % and turn on active characters that we couldn't do earlier because % they might have appeared in the input file name. \everyjob{\message{[Texinfo version \texinfoversion]}% \catcode`+=\active \catcode`\_=\active} % LaTeX's \typeout. This ensures that the messages it is used for % are identical in format to the corresponding ones from latex/pdflatex. \def\typeout{\immediate\write17}% \chardef\other=12 % We never want plain's \outer definition of \+ in Texinfo. % For @tex, we can use \tabalign. \let\+ = \relax % Save some plain tex macros whose names we will redefine. \let\ptexb=\b \let\ptexbullet=\bullet \let\ptexc=\c \let\ptexcomma=\, \let\ptexdot=\. \let\ptexdots=\dots \let\ptexend=\end \let\ptexequiv=\equiv \let\ptexexclam=\! \let\ptexfootnote=\footnote \let\ptexgtr=> \let\ptexhat=^ \let\ptexi=\i \let\ptexindent=\indent \let\ptexinsert=\insert \let\ptexlbrace=\{ \let\ptexless=< \let\ptexnewwrite\newwrite \let\ptexnoindent=\noindent \let\ptexplus=+ \let\ptexraggedright=\raggedright \let\ptexrbrace=\} \let\ptexslash=\/ \let\ptexsp=\sp \let\ptexstar=\* \let\ptexsup=\sup \let\ptext=\t \let\ptextop=\top {\catcode`\'=\active \global\let\ptexquoteright'}% active in plain's math mode % If this character appears in an error message or help string, it % starts a new line in the output. \newlinechar = `^^J % Use TeX 3.0's \inputlineno to get the line number, for better error % messages, but if we're using an old version of TeX, don't do anything. % \ifx\inputlineno\thisisundefined \let\linenumber = \empty % Pre-3.0. \else \def\linenumber{l.\the\inputlineno:\space} \fi % Set up fixed words for English if not already set. \ifx\putwordAppendix\undefined \gdef\putwordAppendix{Appendix}\fi \ifx\putwordChapter\undefined \gdef\putwordChapter{Chapter}\fi \ifx\putworderror\undefined \gdef\putworderror{error}\fi \ifx\putwordfile\undefined \gdef\putwordfile{file}\fi \ifx\putwordin\undefined \gdef\putwordin{in}\fi \ifx\putwordIndexIsEmpty\undefined \gdef\putwordIndexIsEmpty{(Index is empty)}\fi \ifx\putwordIndexNonexistent\undefined \gdef\putwordIndexNonexistent{(Index is nonexistent)}\fi \ifx\putwordInfo\undefined \gdef\putwordInfo{Info}\fi \ifx\putwordInstanceVariableof\undefined \gdef\putwordInstanceVariableof{Instance Variable of}\fi \ifx\putwordMethodon\undefined \gdef\putwordMethodon{Method on}\fi \ifx\putwordNoTitle\undefined \gdef\putwordNoTitle{No Title}\fi \ifx\putwordof\undefined \gdef\putwordof{of}\fi \ifx\putwordon\undefined \gdef\putwordon{on}\fi \ifx\putwordpage\undefined \gdef\putwordpage{page}\fi \ifx\putwordsection\undefined \gdef\putwordsection{section}\fi \ifx\putwordSection\undefined \gdef\putwordSection{Section}\fi \ifx\putwordsee\undefined \gdef\putwordsee{see}\fi \ifx\putwordSee\undefined \gdef\putwordSee{See}\fi \ifx\putwordShortTOC\undefined \gdef\putwordShortTOC{Short Contents}\fi \ifx\putwordTOC\undefined \gdef\putwordTOC{Table of Contents}\fi % \ifx\putwordMJan\undefined \gdef\putwordMJan{January}\fi \ifx\putwordMFeb\undefined \gdef\putwordMFeb{February}\fi \ifx\putwordMMar\undefined \gdef\putwordMMar{March}\fi \ifx\putwordMApr\undefined \gdef\putwordMApr{April}\fi \ifx\putwordMMay\undefined \gdef\putwordMMay{May}\fi \ifx\putwordMJun\undefined \gdef\putwordMJun{June}\fi \ifx\putwordMJul\undefined \gdef\putwordMJul{July}\fi \ifx\putwordMAug\undefined \gdef\putwordMAug{August}\fi \ifx\putwordMSep\undefined \gdef\putwordMSep{September}\fi \ifx\putwordMOct\undefined \gdef\putwordMOct{October}\fi \ifx\putwordMNov\undefined \gdef\putwordMNov{November}\fi \ifx\putwordMDec\undefined \gdef\putwordMDec{December}\fi % \ifx\putwordDefmac\undefined \gdef\putwordDefmac{Macro}\fi \ifx\putwordDefspec\undefined \gdef\putwordDefspec{Special Form}\fi \ifx\putwordDefvar\undefined \gdef\putwordDefvar{Variable}\fi \ifx\putwordDefopt\undefined \gdef\putwordDefopt{User Option}\fi \ifx\putwordDeffunc\undefined \gdef\putwordDeffunc{Function}\fi % Give the space character the catcode for a space. \def\spaceisspace{\catcode`\ =10\relax} % Likewise for ^^M, the end of line character. \def\endlineisspace{\catcode13=10\relax} \chardef\dashChar = `\- \chardef\slashChar = `\/ \chardef\underChar = `\_ % Ignore a token. % \def\gobble#1{} % The following is used inside several \edef's. \def\makecsname#1{\expandafter\noexpand\csname#1\endcsname} % Hyphenation fixes. \hyphenation{ Flor-i-da Ghost-script Ghost-view Mac-OS Post-Script ap-pen-dix bit-map bit-maps data-base data-bases eshell fall-ing half-way long-est man-u-script man-u-scripts mini-buf-fer mini-buf-fers over-view par-a-digm par-a-digms rath-er rec-tan-gu-lar ro-bot-ics se-vere-ly set-up spa-ces spell-ing spell-ings stand-alone strong-est time-stamp time-stamps which-ever white-space wide-spread wrap-around } % Sometimes it is convenient to have everything in the transcript file % and nothing on the terminal. We don't just call \tracingall here, % since that produces some useless output on the terminal. We also make % some effort to order the tracing commands to reduce output in the log % file; cf. trace.sty in LaTeX. % \def\gloggingall{\begingroup \globaldefs = 1 \loggingall \endgroup}% \def\loggingall{% \tracingstats2 \tracingpages1 \tracinglostchars2 % 2 gives us more in etex \tracingparagraphs1 \tracingoutput1 \tracingmacros2 \tracingrestores1 \showboxbreadth\maxdimen \showboxdepth\maxdimen \ifx\eTeXversion\thisisundefined\else % etex gives us more logging \tracingscantokens1 \tracingifs1 \tracinggroups1 \tracingnesting2 \tracingassigns1 \fi \tracingcommands3 % 3 gives us more in etex \errorcontextlines16 }% % @errormsg{MSG}. Do the index-like expansions on MSG, but if things % aren't perfect, it's not the end of the world, being an error message, % after all. % \def\errormsg{\begingroup \indexnofonts \doerrormsg} \def\doerrormsg#1{\errmessage{#1}} % add check for \lastpenalty to plain's definitions. If the last thing % we did was a \nobreak, we don't want to insert more space. % \def\smallbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\smallskipamount \removelastskip\penalty-50\smallskip\fi\fi} \def\medbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\medskipamount \removelastskip\penalty-100\medskip\fi\fi} \def\bigbreak{\ifnum\lastpenalty<10000\par\ifdim\lastskip<\bigskipamount \removelastskip\penalty-200\bigskip\fi\fi} % Output routine % % For a final copy, take out the rectangles % that mark overfull boxes (in case you have decided % that the text looks ok even though it passes the margin). % \def\finalout{\overfullrule=0pt } \newdimen\outerhsize \newdimen\outervsize % set by the paper size routines \newdimen\topandbottommargin \topandbottommargin=.75in % Output a mark which sets \thischapter, \thissection and \thiscolor. % We dump everything together because we only have one kind of mark. % This works because we only use \botmark / \topmark, not \firstmark. % % A mark contains a subexpression of the \ifcase ... \fi construct. % \get*marks macros below extract the needed part using \ifcase. % % Another complication is to let the user choose whether \thischapter % (\thissection) refers to the chapter (section) in effect at the top % of a page, or that at the bottom of a page. % \domark is called twice inside \chapmacro, to add one % mark before the section break, and one after. % In the second call \prevchapterdefs is the same as \currentchapterdefs, % and \prevsectiondefs is the same as \currentsectiondefs. % Then if the page is not broken at the mark, some of the previous % section appears on the page, and we can get the name of this section % from \firstmark for @everyheadingmarks top. % @everyheadingmarks bottom uses \botmark. % % See page 260 of The TeXbook. \def\domark{% \toks0=\expandafter{\currentchapterdefs}% \toks2=\expandafter{\currentsectiondefs}% \toks4=\expandafter{\prevchapterdefs}% \toks6=\expandafter{\prevsectiondefs}% \toks8=\expandafter{\currentcolordefs}% \mark{% \the\toks0 \the\toks2 % 0: marks for @everyheadingmarks top \noexpand\or \the\toks4 \the\toks6 % 1: for @everyheadingmarks bottom \noexpand\else \the\toks8 % 2: color marks }% } % \gettopheadingmarks, \getbottomheadingmarks, % \getcolormarks - extract needed part of mark. % % \topmark doesn't work for the very first chapter (after the title % page or the contents), so we use \firstmark there -- this gets us % the mark with the chapter defs, unless the user sneaks in, e.g., % @setcolor (or @url, or @link, etc.) between @contents and the very % first @chapter. \def\gettopheadingmarks{% \ifcase0\the\savedtopmark\fi \ifx\thischapter\empty \ifcase0\firstmark\fi \fi } \def\getbottomheadingmarks{\ifcase1\botmark\fi} \def\getcolormarks{\ifcase2\the\savedtopmark\fi} % Avoid "undefined control sequence" errors. \def\currentchapterdefs{} \def\currentsectiondefs{} \def\currentsection{} \def\prevchapterdefs{} \def\prevsectiondefs{} \def\currentcolordefs{} % Margin to add to right of even pages, to left of odd pages. \newdimen\bindingoffset \newdimen\normaloffset \newdimen\txipagewidth \newdimen\txipageheight % Main output routine. % \chardef\PAGE = 255 \newtoks\defaultoutput \defaultoutput = {\savetopmark\onepageout{\pagecontents\PAGE}} \output=\expandafter{\the\defaultoutput} \newbox\headlinebox \newbox\footlinebox % When outputting the double column layout for indices, an output routine % is run several times, which hides the original value of \topmark. This % can lead to a page heading being output and duplicating the chapter heading % of the index. Hence, save the contents of \topmark at the beginning of % the output routine. The saved contents are valid until we actually % \shipout a page. % % (We used to run a short output routine to actually set \topmark and % \firstmark to the right values, but if this was called with an empty page % containing whatsits for writing index entries, the whatsits would be thrown % away and the index auxiliary file would remain empty.) % \newtoks\savedtopmark \newif\iftopmarksaved \topmarksavedtrue \def\savetopmark{% \iftopmarksaved\else \global\savedtopmark=\expandafter{\topmark}% \global\topmarksavedtrue \fi } % \onepageout takes a vbox as an argument. % \shipout a vbox for a single page, adding an optional header, footer % and footnote. This also causes index entries for this page to be written % to the auxiliary files. % \def\onepageout#1{% \hoffset=\normaloffset % \ifodd\pageno \advance\hoffset by \bindingoffset \else \advance\hoffset by -\bindingoffset\fi % \checkchapterpage % % Retrieve the information for the headings from the marks in the page, % and call Plain TeX's \makeheadline and \makefootline, which use the % values in \headline and \footline. % % Common context changes for both heading and footing. % Do this outside of the \shipout so @code etc. will be expanded in % the headline as they should be, not taken literally (outputting ''code). \def\commonheadfootline{\let\hsize=\txipagewidth \texinfochars} % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \global\setbox\headlinebox = \vbox{\commonheadfootline \makeheadline}% \ifodd\pageno \getoddfootingmarks \else \getevenfootingmarks \fi \global\setbox\footlinebox = \vbox{\commonheadfootline \makefootline}% % {% % Set context for writing to auxiliary files like index files. % Have to do this stuff outside the \shipout because we want it to % take effect in \write's, yet the group defined by the \vbox ends % before the \shipout runs. % \atdummies % don't expand commands in the output. \turnoffactive \shipout\vbox{% % Do this early so pdf references go to the beginning of the page. \ifpdfmakepagedest \pdfdest name{\the\pageno} xyz\fi % \unvbox\headlinebox \pagebody{#1}% \ifdim\ht\footlinebox > 0pt % Only leave this space if the footline is nonempty. % (We lessened \vsize for it in \oddfootingyyy.) % The \baselineskip=24pt in plain's \makefootline has no effect. \vskip 24pt \unvbox\footlinebox \fi % }% }% \global\topmarksavedfalse \advancepageno \ifnum\outputpenalty>-20000 \else\dosupereject\fi } \newinsert\margin \dimen\margin=\maxdimen % Main part of page, including any footnotes \def\pagebody#1{\vbox to\txipageheight{\boxmaxdepth=\maxdepth #1}} {\catcode`\@ =11 \gdef\pagecontents#1{\ifvoid\topins\else\unvbox\topins\fi % marginal hacks, juha@viisa.uucp (Juha Takala) \ifvoid\margin\else % marginal info is present \rlap{\kern\hsize\vbox to\z@{\kern1pt\box\margin \vss}}\fi \dimen@=\dp#1\relax \unvbox#1\relax \ifvoid\footins\else\vskip\skip\footins\footnoterule \unvbox\footins\fi \ifr@ggedbottom \kern-\dimen@ \vfil \fi} } % Check if we are on the first page of a chapter. Used for printing headings. \newif\ifchapterpage \def\checkchapterpage{% % Get the chapter that was current at the end of the last page \ifcase1\the\savedtopmark\fi \let\prevchaptername\thischaptername % \ifodd\pageno \getoddheadingmarks \else \getevenheadingmarks \fi \let\curchaptername\thischaptername % \ifx\curchaptername\prevchaptername \chapterpagefalse \else \chapterpagetrue \fi } % Argument parsing % Parse an argument, then pass it to #1. The argument is the rest of % the input line (except we remove a trailing comment). #1 should be a % macro which expects an ordinary undelimited TeX argument. % For example, \def\foo{\parsearg\fooxxx}. % \def\parsearg{\parseargusing{}} \def\parseargusing#1#2{% \def\argtorun{#2}% \begingroup \obeylines \spaceisspace #1% \parseargline\empty% Insert the \empty token, see \finishparsearg below. } {\obeylines % \gdef\parseargline#1^^M{% \endgroup % End of the group started in \parsearg. \argremovecomment #1\comment\ArgTerm% }% } % First remove any @comment, then any @c comment. Pass the result on to % \argcheckspaces. \def\argremovecomment#1\comment#2\ArgTerm{\argremovec #1\c\ArgTerm} \def\argremovec#1\c#2\ArgTerm{\argcheckspaces#1\^^M\ArgTerm} % Each occurrence of `\^^M' or `\^^M' is replaced by a single space. % % \argremovec might leave us with trailing space, e.g., % @end itemize @c foo % This space token undergoes the same procedure and is eventually removed % by \finishparsearg. % \def\argcheckspaces#1\^^M{\argcheckspacesX#1\^^M \^^M} \def\argcheckspacesX#1 \^^M{\argcheckspacesY#1\^^M} \def\argcheckspacesY#1\^^M#2\^^M#3\ArgTerm{% \def\temp{#3}% \ifx\temp\empty % Do not use \next, perhaps the caller of \parsearg uses it; reuse \temp: \let\temp\finishparsearg \else \let\temp\argcheckspaces \fi % Put the space token in: \temp#1 #3\ArgTerm } % If a _delimited_ argument is enclosed in braces, they get stripped; so % to get _exactly_ the rest of the line, we had to prevent such situation. % We prepended an \empty token at the very beginning and we expand it now, % just before passing the control to \argtorun. % (Similarly, we have to think about #3 of \argcheckspacesY above: it is % either the null string, or it ends with \^^M---thus there is no danger % that a pair of braces would be stripped. % % But first, we have to remove the trailing space token. % \def\finishparsearg#1 \ArgTerm{\expandafter\argtorun\expandafter{#1}} % \parseargdef - define a command taking an argument on the line % % \parseargdef\foo{...} % is roughly equivalent to % \def\foo{\parsearg\Xfoo} % \def\Xfoo#1{...} \def\parseargdef#1{% \expandafter \doparseargdef \csname\string#1\endcsname #1% } \def\doparseargdef#1#2{% \def#2{\parsearg#1}% \def#1##1% } % Several utility definitions with active space: { \obeyspaces \gdef\obeyedspace{ } % Make each space character in the input produce a normal interword % space in the output. Don't allow a line break at this space, as this % is used only in environments like @example, where each line of input % should produce a line of output anyway. % \gdef\sepspaces{\obeyspaces\let =\tie} % If an index command is used in an @example environment, any spaces % therein should become regular spaces in the raw index file, not the % expansion of \tie (\leavevmode \penalty \@M \ ). \gdef\unsepspaces{\let =\space} } \def\flushcr{\ifx\par\lisppar \def\next##1{}\else \let\next=\relax \fi \next} % Define the framework for environments in texinfo.tex. It's used like this: % % \envdef\foo{...} % \def\Efoo{...} % % It's the responsibility of \envdef to insert \begingroup before the % actual body; @end closes the group after calling \Efoo. \envdef also % defines \thisenv, so the current environment is known; @end checks % whether the environment name matches. The \checkenv macro can also be % used to check whether the current environment is the one expected. % % Non-false conditionals (@iftex, @ifset) don't fit into this, so they % are not treated as environments; they don't open a group. (The % implementation of @end takes care not to call \endgroup in this % special case.) % At run-time, environments start with this: \def\startenvironment#1{\begingroup\def\thisenv{#1}} % initialize \let\thisenv\empty % ... but they get defined via ``\envdef\foo{...}'': \long\def\envdef#1#2{\def#1{\startenvironment#1#2}} \def\envparseargdef#1#2{\parseargdef#1{\startenvironment#1#2}} % Check whether we're in the right environment: \def\checkenv#1{% \def\temp{#1}% \ifx\thisenv\temp \else \badenverr \fi } % Environment mismatch, #1 expected: \def\badenverr{% \errhelp = \EMsimple \errmessage{This command can appear only \inenvironment\temp, not \inenvironment\thisenv}% } \def\inenvironment#1{% \ifx#1\empty outside of any environment% \else in environment \expandafter\string#1% \fi } % @end foo calls \checkenv and executes the definition of \Efoo. \parseargdef\end{% \if 1\csname iscond.#1\endcsname \else % The general wording of \badenverr may not be ideal. \expandafter\checkenv\csname#1\endcsname \csname E#1\endcsname \endgroup \fi } \newhelp\EMsimple{Press RETURN to continue.} % Be sure we're in horizontal mode when doing a tie, since we make space % equivalent to this in @example-like environments. Otherwise, a space % at the beginning of a line will start with \penalty -- and % since \penalty is valid in vertical mode, we'd end up putting the % penalty on the vertical list instead of in the new paragraph. {\catcode`@ = 11 % Avoid using \@M directly, because that causes trouble % if the definition is written into an index file. \global\let\tiepenalty = \@M \gdef\tie{\leavevmode\penalty\tiepenalty\ } } % @: forces normal size whitespace following. \def\:{\spacefactor=1000 } % @* forces a line break. \def\*{\unskip\hfil\break\hbox{}\ignorespaces} % @/ allows a line break. \let\/=\allowbreak % @. is an end-of-sentence period. \def\.{.\spacefactor=\endofsentencespacefactor\space} % @! is an end-of-sentence bang. \def\!{!\spacefactor=\endofsentencespacefactor\space} % @? is an end-of-sentence query. \def\?{?\spacefactor=\endofsentencespacefactor\space} % @frenchspacing on|off says whether to put extra space after punctuation. % \def\onword{on} \def\offword{off} % \parseargdef\frenchspacing{% \def\temp{#1}% \ifx\temp\onword \plainfrenchspacing \else\ifx\temp\offword \plainnonfrenchspacing \else \errhelp = \EMsimple \errmessage{Unknown @frenchspacing option `\temp', must be on|off}% \fi\fi } % @w prevents a word break. Without the \leavevmode, @w at the % beginning of a paragraph, when TeX is still in vertical mode, would % produce a whole line of output instead of starting the paragraph. \def\w#1{\leavevmode\hbox{#1}} % @group ... @end group forces ... to be all on one page, by enclosing % it in a TeX vbox. We use \vtop instead of \vbox to construct the box % to keep its height that of a normal line. According to the rules for % \topskip (p.114 of the TeXbook), the glue inserted is % max (\topskip - \ht (first item), 0). If that height is large, % therefore, no glue is inserted, and the space between the headline and % the text is small, which looks bad. % % Another complication is that the group might be very large. This can % cause the glue on the previous page to be unduly stretched, because it % does not have much material. In this case, it's better to add an % explicit \vfill so that the extra space is at the bottom. The % threshold for doing this is if the group is more than \vfilllimit % percent of a page (\vfilllimit can be changed inside of @tex). % \newbox\groupbox \def\vfilllimit{0.7} % \envdef\group{% \ifnum\catcode`\^^M=\active \else \errhelp = \groupinvalidhelp \errmessage{@group invalid in context where filling is enabled}% \fi \startsavinginserts % \setbox\groupbox = \vtop\bgroup % Do @comment since we are called inside an environment such as % @example, where each end-of-line in the input causes an % end-of-line in the output. We don't want the end-of-line after % the `@group' to put extra space in the output. Since @group % should appear on a line by itself (according to the Texinfo % manual), we don't worry about eating any user text. \comment } % % The \vtop produces a box with normal height and large depth; thus, TeX puts % \baselineskip glue before it, and (when the next line of text is done) % \lineskip glue after it. Thus, space below is not quite equal to space % above. But it's pretty close. \def\Egroup{% % To get correct interline space between the last line of the group % and the first line afterwards, we have to propagate \prevdepth. \endgraf % Not \par, as it may have been set to \lisppar. \global\dimen1 = \prevdepth \egroup % End the \vtop. \addgroupbox \prevdepth = \dimen1 \checkinserts } \def\addgroupbox{ % \dimen0 is the vertical size of the group's box. \dimen0 = \ht\groupbox \advance\dimen0 by \dp\groupbox % \dimen2 is how much space is left on the page (more or less). \dimen2 = \txipageheight \advance\dimen2 by -\pagetotal % if the group doesn't fit on the current page, and it's a big big % group, force a page break. \ifdim \dimen0 > \dimen2 \ifdim \pagetotal < \vfilllimit\txipageheight \page \fi \fi \box\groupbox } % % TeX puts in an \escapechar (i.e., `@') at the beginning of the help % message, so this ends up printing `@group can only ...'. % \newhelp\groupinvalidhelp{% group can only be used in environments such as @example,^^J% where each line of input produces a line of output.} % @need space-in-mils % forces a page break if there is not space-in-mils remaining. \newdimen\mil \mil=0.001in \parseargdef\need{% % Ensure vertical mode, so we don't make a big box in the middle of a % paragraph. \par % % If the @need value is less than one line space, it's useless. \dimen0 = #1\mil \dimen2 = \ht\strutbox \advance\dimen2 by \dp\strutbox \ifdim\dimen0 > \dimen2 % % Do a \strut just to make the height of this box be normal, so the % normal leading is inserted relative to the preceding line. % And a page break here is fine. \vtop to #1\mil{\strut\vfil}% % % TeX does not even consider page breaks if a penalty added to the % main vertical list is 10000 or more. But in order to see if the % empty box we just added fits on the page, we must make it consider % page breaks. On the other hand, we don't want to actually break the % page after the empty box. So we use a penalty of 9999. % % There is an extremely small chance that TeX will actually break the % page at this \penalty, if there are no other feasible breakpoints in % sight. (If the user is using lots of big @group commands, which % almost-but-not-quite fill up a page, TeX will have a hard time doing % good page breaking, for example.) However, I could not construct an % example where a page broke at this \penalty; if it happens in a real % document, then we can reconsider our strategy. \penalty9999 % % Back up by the size of the box, whether we did a page break or not. \kern -#1\mil % % Do not allow a page break right after this kern. \nobreak \fi } % @br forces paragraph break (and is undocumented). \let\br = \par % @page forces the start of a new page. % \def\page{\par\vfill\supereject} % @exdent text.... % outputs text on separate line in roman font, starting at standard page margin % This records the amount of indent in the innermost environment. % That's how much \exdent should take out. \newskip\exdentamount % This defn is used inside fill environments such as @defun. \parseargdef\exdent{\hfil\break\hbox{\kern -\exdentamount{\rm#1}}\hfil\break} % This defn is used inside nofill environments such as @example. \parseargdef\nofillexdent{{\advance \leftskip by -\exdentamount \leftline{\hskip\leftskip{\rm#1}}}} % @inmargin{WHICH}{TEXT} puts TEXT in the WHICH margin next to the current % paragraph. For more general purposes, use the \margin insertion % class. WHICH is `l' or `r'. Not documented, written for gawk manual. % \newskip\inmarginspacing \inmarginspacing=1cm \def\strutdepth{\dp\strutbox} % \def\doinmargin#1#2{\strut\vadjust{% \nobreak \kern-\strutdepth \vtop to \strutdepth{% \baselineskip=\strutdepth \vss % if you have multiple lines of stuff to put here, you'll need to % make the vbox yourself of the appropriate size. \ifx#1l% \llap{\ignorespaces #2\hskip\inmarginspacing}% \else \rlap{\hskip\hsize \hskip\inmarginspacing \ignorespaces #2}% \fi \null }% }} \def\inleftmargin{\doinmargin l} \def\inrightmargin{\doinmargin r} % % @inmargin{TEXT [, RIGHT-TEXT]} % (if RIGHT-TEXT is given, use TEXT for left page, RIGHT-TEXT for right; % else use TEXT for both). % \def\inmargin#1{\parseinmargin #1,,\finish} \def\parseinmargin#1,#2,#3\finish{% not perfect, but better than nothing. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \def\lefttext{#1}% have both texts \def\righttext{#2}% \else \def\lefttext{#1}% have only one text \def\righttext{#1}% \fi % \ifodd\pageno \def\temp{\inrightmargin\righttext}% odd page -> outside is right margin \else \def\temp{\inleftmargin\lefttext}% \fi \temp } % @include FILE -- \input text of FILE. % \def\include{\parseargusing\filenamecatcodes\includezzz} \def\includezzz#1{% \pushthisfilestack \def\thisfile{#1}% {% \makevalueexpandable % we want to expand any @value in FILE. \turnoffactive % and allow special characters in the expansion \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @include of #1^^J}% \edef\temp{\noexpand\input #1 }% % % This trickery is to read FILE outside of a group, in case it makes % definitions, etc. \expandafter }\temp \popthisfilestack } \def\filenamecatcodes{% \catcode`\\=\other \catcode`~=\other \catcode`^=\other \catcode`_=\other \catcode`|=\other \catcode`<=\other \catcode`>=\other \catcode`+=\other \catcode`-=\other \catcode`\`=\other \catcode`\'=\other } \def\pushthisfilestack{% \expandafter\pushthisfilestackX\popthisfilestack\StackTerm } \def\pushthisfilestackX{% \expandafter\pushthisfilestackY\thisfile\StackTerm } \def\pushthisfilestackY #1\StackTerm #2\StackTerm {% \gdef\popthisfilestack{\gdef\thisfile{#1}\gdef\popthisfilestack{#2}}% } \def\popthisfilestack{\errthisfilestackempty} \def\errthisfilestackempty{\errmessage{Internal error: the stack of filenames is empty.}} % \def\thisfile{} % @center line % outputs that line, centered. % \parseargdef\center{% \ifhmode \let\centersub\centerH \else \let\centersub\centerV \fi \centersub{\hfil \ignorespaces#1\unskip \hfil}% \let\centersub\relax % don't let the definition persist, just in case } \def\centerH#1{{% \hfil\break \advance\hsize by -\leftskip \advance\hsize by -\rightskip \line{#1}% \break }} % \newcount\centerpenalty \def\centerV#1{% % The idea here is the same as in \startdefun, \cartouche, etc.: if % @center is the first thing after a section heading, we need to wipe % out the negative parskip inserted by \sectionheading, but still % prevent a page break here. \centerpenalty = \lastpenalty \ifnum\centerpenalty>10000 \vskip\parskip \fi \ifnum\centerpenalty>9999 \penalty\centerpenalty \fi \line{\kern\leftskip #1\kern\rightskip}% } % @sp n outputs n lines of vertical space % \parseargdef\sp{\vskip #1\baselineskip} % @comment ...line which is ignored... % @c is the same as @comment % @ignore ... @end ignore is another way to write a comment \def\c{\begingroup \catcode`\^^M=\active% \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other% \cxxx} {\catcode`\^^M=\active \gdef\cxxx#1^^M{\endgroup}} % \let\comment\c % @paragraphindent NCHARS % We'll use ems for NCHARS, close enough. % NCHARS can also be the word `asis' or `none'. % We cannot feasibly implement @paragraphindent asis, though. % \def\asisword{asis} % no translation, these are keywords \def\noneword{none} % \parseargdef\paragraphindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \defaultparindent = 0pt \else \defaultparindent = #1em \fi \fi \parindent = \defaultparindent } % @exampleindent NCHARS % We'll use ems for NCHARS like @paragraphindent. % It seems @exampleindent asis isn't necessary, but % I preserve it to make it similar to @paragraphindent. \parseargdef\exampleindent{% \def\temp{#1}% \ifx\temp\asisword \else \ifx\temp\noneword \lispnarrowing = 0pt \else \lispnarrowing = #1em \fi \fi } % @firstparagraphindent WORD % If WORD is `none', then suppress indentation of the first paragraph % after a section heading. If WORD is `insert', then do indent at such % paragraphs. % % The paragraph indentation is suppressed or not by calling % \suppressfirstparagraphindent, which the sectioning commands do. % We switch the definition of this back and forth according to WORD. % By default, we suppress indentation. % \def\suppressfirstparagraphindent{\dosuppressfirstparagraphindent} \def\insertword{insert} % \parseargdef\firstparagraphindent{% \def\temp{#1}% \ifx\temp\noneword \let\suppressfirstparagraphindent = \dosuppressfirstparagraphindent \else\ifx\temp\insertword \let\suppressfirstparagraphindent = \relax \else \errhelp = \EMsimple \errmessage{Unknown @firstparagraphindent option `\temp'}% \fi\fi } % Here is how we actually suppress indentation. Redefine \everypar to % \kern backwards by \parindent, and then reset itself to empty. % % We also make \indent itself not actually do anything until the next % paragraph. % \gdef\dosuppressfirstparagraphindent{% \gdef\indent {\restorefirstparagraphindent \indent}% \gdef\noindent{\restorefirstparagraphindent \noindent}% \global\everypar = {\kern -\parindent \restorefirstparagraphindent}% } % \gdef\restorefirstparagraphindent{% \global\let\indent = \ptexindent \global\let\noindent = \ptexnoindent \global\everypar = {}% } % leave vertical mode without cancelling any first paragraph indent \gdef\imageindent{% \toks0=\everypar \everypar={}% \ptexnoindent \global\everypar=\toks0 } % @refill is a no-op. \let\refill=\relax % @setfilename INFO-FILENAME - ignored \let\setfilename=\comment % @bye. \outer\def\bye{\chappager\pagelabels\tracingstats=1\ptexend} \message{pdf,} % adobe `portable' document format \newcount\tempnum \newcount\lnkcount \newtoks\filename \newcount\filenamelength \newcount\pgn \newtoks\toksA \newtoks\toksB \newtoks\toksC \newtoks\toksD \newbox\boxA \newbox\boxB \newcount\countA \newif\ifpdf \newif\ifpdfmakepagedest % % For LuaTeX % \newif\iftxiuseunicodedestname \txiuseunicodedestnamefalse % For pdfTeX etc. \ifx\luatexversion\thisisundefined \else % Use Unicode destination names \txiuseunicodedestnametrue % Escape PDF strings with converting UTF-16 from UTF-8 \begingroup \catcode`\%=12 \directlua{ function UTF16oct(str) tex.sprint(string.char(0x5c) .. '376' .. string.char(0x5c) .. '377') for c in string.utfvalues(str) do if c < 0x10000 then tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o', math.floor(c / 256), math.floor(c % 256))) else c = c - 0x10000 local c_hi = c / 1024 + 0xd800 local c_lo = c % 1024 + 0xdc00 tex.sprint( string.format(string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o' .. string.char(0x5c) .. string.char(0x25) .. '03o', math.floor(c_hi / 256), math.floor(c_hi % 256), math.floor(c_lo / 256), math.floor(c_lo % 256))) end end end } \endgroup \def\pdfescapestrutfsixteen#1{\directlua{UTF16oct('\luaescapestring{#1}')}} % Escape PDF strings without converting \begingroup \directlua{ function PDFescstr(str) for c in string.bytes(str) do if c <= 0x20 or c >= 0x80 or c == 0x28 or c == 0x29 or c == 0x5c then tex.sprint(-2, string.format(string.char(0x5c) .. string.char(0x25) .. '03o', c)) else tex.sprint(-2, string.char(c)) end end end } % The -2 in the arguments here gives all the input to TeX catcode 12 % (other) or 10 (space), preventing undefined control sequence errors. See % https://lists.gnu.org/archive/html/bug-texinfo/2019-08/msg00031.html % \endgroup \def\pdfescapestring#1{\directlua{PDFescstr('\luaescapestring{#1}')}} \ifnum\luatexversion>84 % For LuaTeX >= 0.85 \def\pdfdest{\pdfextension dest} \let\pdfoutput\outputmode \def\pdfliteral{\pdfextension literal} \def\pdfcatalog{\pdfextension catalog} \def\pdftexversion{\numexpr\pdffeedback version\relax} \let\pdfximage\saveimageresource \let\pdfrefximage\useimageresource \let\pdflastximage\lastsavedimageresourceindex \def\pdfendlink{\pdfextension endlink\relax} \def\pdfoutline{\pdfextension outline} \def\pdfstartlink{\pdfextension startlink} \def\pdffontattr{\pdfextension fontattr} \def\pdfobj{\pdfextension obj} \def\pdflastobj{\numexpr\pdffeedback lastobj\relax} \let\pdfpagewidth\pagewidth \let\pdfpageheight\pageheight \edef\pdfhorigin{\pdfvariable horigin} \edef\pdfvorigin{\pdfvariable vorigin} \fi \fi % when pdftex is run in dvi mode, \pdfoutput is defined (so \pdfoutput=1 % can be set). So we test for \relax and 0 as well as being undefined. \ifx\pdfoutput\thisisundefined \else \ifx\pdfoutput\relax \else \ifcase\pdfoutput \else \pdftrue \fi \fi \fi \newif\ifpdforxetex \pdforxetexfalse \ifpdf \pdforxetextrue \fi \ifx\XeTeXrevision\thisisundefined\else \pdforxetextrue \fi % Output page labels information. % See PDF reference v.1.7 p.594, section 8.3.1. \ifpdf \def\pagelabels{% \def\title{0 << /P (T-) /S /D >>}% \edef\roman{\the\romancount << /S /r >>}% \edef\arabic{\the\arabiccount << /S /D >>}% % % Page label ranges must be increasing. Remove any duplicates. % (There is a slight chance of this being wrong if e.g. there is % a @contents but no @titlepage, etc.) % \ifnum\romancount=0 \def\roman{}\fi \ifnum\arabiccount=0 \def\title{}% \else \ifnum\romancount=\arabiccount \def\roman{}\fi \fi % \ifnum\romancount<\arabiccount \pdfcatalog{/PageLabels << /Nums [\title \roman \arabic ] >> }\relax \else \pdfcatalog{/PageLabels << /Nums [\title \arabic \roman ] >> }\relax \fi } \else \let\pagelabels\relax \fi \newcount\pagecount \pagecount=0 \newcount\romancount \romancount=0 \newcount\arabiccount \arabiccount=0 \ifpdf \let\ptxadvancepageno\advancepageno \def\advancepageno{% \ptxadvancepageno\global\advance\pagecount by 1 } \fi % PDF uses PostScript string constants for the names of xref targets, % for display in the outlines, and in other places. Thus, we have to % double any backslashes. Otherwise, a name like "\node" will be % interpreted as a newline (\n), followed by o, d, e. Not good. % % See http://www.ntg.nl/pipermail/ntg-pdftex/2004-July/000654.html and % related messages. The final outcome is that it is up to the TeX user % to double the backslashes and otherwise make the string valid, so % that's what we do. pdftex 1.30.0 (ca.2005) introduced a primitive to % do this reliably, so we use it. % #1 is a control sequence in which to do the replacements, % which we \xdef. \def\txiescapepdf#1{% \ifx\pdfescapestring\thisisundefined % No primitive available; should we give a warning or log? % Many times it won't matter. \xdef#1{#1}% \else % The expandable \pdfescapestring primitive escapes parentheses, % backslashes, and other special chars. \xdef#1{\pdfescapestring{#1}}% \fi } \def\txiescapepdfutfsixteen#1{% \ifx\pdfescapestrutfsixteen\thisisundefined % No UTF-16 converting macro available. \txiescapepdf{#1}% \else \xdef#1{\pdfescapestrutfsixteen{#1}}% \fi } \newhelp\nopdfimagehelp{Texinfo supports .png, .jpg, .jpeg, and .pdf images with PDF output, and none of those formats could be found. (.eps cannot be supported due to the design of the PDF format; use regular TeX (DVI output) for that.)} \ifpdf % % Color manipulation macros using ideas from pdfcolor.tex, % except using rgb instead of cmyk; the latter is said to render as a % very dark gray on-screen and a very dark halftone in print, instead % of actual black. The dark red here is dark enough to print on paper as % nearly black, but still distinguishable for online viewing. We use % black by default, though. \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % % rg sets the color for filling (usual text, etc.); % RG sets the color for stroking (thin rules, e.g., normal _'s). \def\pdfsetcolor#1{\pdfliteral{#1 rg #1 RG}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\currentcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % \pdfcatalog{/PageMode /UseOutlines} % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\dopdfimage#1#2#3{% \def\pdfimagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\pdfimageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % pdftex (and the PDF format) support .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\pdfimgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errhelp = \nopdfimagehelp \errmessage{Could not find image file #1 for pdf}% \else \gdef\pdfimgext{JPG}% \fi \else \gdef\pdfimgext{jpeg}% \fi \else \gdef\pdfimgext{jpg}% \fi \else \gdef\pdfimgext{png}% \fi \else \gdef\pdfimgext{PDF}% \fi \else \gdef\pdfimgext{pdf}% \fi \closein 1 \endgroup % % without \immediate, ancient pdftex seg faults when the same image is % included twice. (Version 3.14159-pre-1.0-unofficial-20010704.) \ifnum\pdftexversion < 14 \immediate\pdfimage \else \immediate\pdfximage \fi \ifdim \wd0 >0pt width \pdfimagewidth \fi \ifdim \wd2 >0pt height \pdfimageheight \fi \ifnum\pdftexversion<13 #1.\pdfimgext \else {#1.\pdfimgext}% \fi \ifnum\pdftexversion < 14 \else \pdfrefximage \pdflastximage \fi} % \def\setpdfdestname#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \makevalueexpandable \turnoffactive \iftxiuseunicodedestname \ifx \declaredencoding \latone % Pass through Latin-1 characters. % LuaTeX with byte wise I/O converts Latin-1 characters to Unicode. \else \ifx \declaredencoding \utfeight % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \fi \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \indexnofonts \makevalueexpandable \turnoffactive \ifx \declaredencoding \latone % The PDF format can use an extended form of Latin-1 in bookmark % strings. See Appendix D of the PDF Reference, Sixth Edition, for % the "PDFDocEncoding". \passthroughcharstrue % Pass through Latin-1 characters. % LuaTeX: Convert to Unicode % pdfTeX: Use Latin-1 as PDFDocEncoding \def\pdfoutlinetext{#1}% \else \ifx \declaredencoding \utfeight \ifx\luatexversion\thisisundefined % For pdfTeX with UTF-8. % TODO: the PDF format can use UTF-16 in bookmark strings, % but the code for this isn't done yet. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \else % For LuaTeX with UTF-8. % Pass through Unicode characters for title texts. \passthroughcharstrue \def\pdfoutlinetext{#1}% \fi \else % For non-Latin-1 or non-UTF-8 encodings. % Use ASCII approximations. \passthroughcharsfalse \def\pdfoutlinetext{#1}% \fi \fi % LuaTeX: Convert to UTF-16 % pdfTeX: Use Latin-1 as PDFDocEncoding \txiescapepdfutfsixteen\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % used to mark target names; must be expandable. \def\pdfmkpgn#1{#1} % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % % Adding outlines to PDF; macros for calculating structure of outlines % come from Petr Olsak \def\expnumber#1{\expandafter\ifx\csname#1\endcsname\relax 0% \else \csname#1\endcsname \fi} \def\advancenumber#1{\tempnum=\expnumber{#1}\relax \advance\tempnum by 1 \expandafter\xdef\csname#1\endcsname{\the\tempnum}} % % #1 is the section text, which is what will be displayed in the % outline by the pdf viewer. #2 is the pdf expression for the number % of subentries (or empty, for subsubsections). #3 is the node text, % which might be empty if this toc entry had no corresponding node. % #4 is the page number % \def\dopdfoutline#1#2#3#4{% % Generate a link to the node text if that exists; else, use the % page number. We could generate a destination for the section % text in the case where a section has no node, but it doesn't % seem worth the trouble, since most documents are normally structured. \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \pdfoutline goto name{\pdfmkpgn{\pdfdestname}}#2{\pdfoutlinetext}% } % \def\pdfmakeoutlines{% \begingroup % Read toc silently, to get counts of subentries for \pdfoutline. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \def\thischapnum{##2}% \def\thissecnum{0}% \def\thissubsecnum{0}% }% \def\numsecentry##1##2##3##4{% \advancenumber{chap\thischapnum}% \def\thissecnum{##2}% \def\thissubsecnum{0}% }% \def\numsubsecentry##1##2##3##4{% \advancenumber{sec\thissecnum}% \def\thissubsecnum{##2}% }% \def\numsubsubsecentry##1##2##3##4{% \advancenumber{subsec\thissubsecnum}% }% \def\thischapnum{0}% \def\thissecnum{0}% \def\thissubsecnum{0}% % % use \def rather than \let here because we redefine \chapentry et % al. a second time, below. \def\appentry{\numchapentry}% \def\appsecentry{\numsecentry}% \def\appsubsecentry{\numsubsecentry}% \def\appsubsubsecentry{\numsubsubsecentry}% \def\unnchapentry{\numchapentry}% \def\unnsecentry{\numsecentry}% \def\unnsubsecentry{\numsubsecentry}% \def\unnsubsubsecentry{\numsubsubsecentry}% \readdatafile{toc}% % % Read toc second time, this time actually producing the outlines. % The `-' means take the \expnumber as the absolute number of % subentries, which we calculated on our first read of the .toc above. % % We use the node names as the destinations. % % Currently we prefix the section name with the section number % for chapter and appendix headings only in order to avoid too much % horizontal space being required in the PDF viewer. \def\numchapentry##1##2##3##4{% \dopdfoutline{##2 ##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\unnchapentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{chap##2}}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{sec##2}}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{count-\expnumber{subsec##2}}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% count is always zero \dopdfoutline{##1}{}{##3}{##4}}% % % PDF outlines are displayed using system fonts, instead of % document fonts. Therefore we cannot use special characters, % since the encoding is unknown. For example, the eogonek from % Latin 2 (0xea) gets translated to a | character. Info from % Staszek Wawrykiewicz, 19 Jan 2004 04:09:24 +0100. % % TODO this right, we have to translate 8-bit characters to % their "best" equivalent, based on the @documentencoding. Too % much work for too little return. Just use the ASCII equivalents % we use for the index sort strings. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } \ifnum\pdftexversion < 14 \let \startlink \pdfannotlink \else \let \startlink \pdfstartlink \fi % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \startlink attr{/Border [0 0 0]}% user{/Subtype /Link /A << /S /URI /URI (#1) >>}% \endgroup} % \pdfgettoks - Surround page numbers in #1 with @pdflink. #1 may % be a simple number, or a list of numbers in the case of an index % entry. \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \startlink attr{/Border [0 0 0]} goto name{\pdfmkpgn{#1}} \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} \else % non-pdf mode \let\pdfmkdest = \gobble \let\pdfurl = \gobble \let\endlink = \relax \let\setcolor = \gobble \let\pdfsetcolor = \gobble \let\pdfmakeoutlines = \relax \fi % \ifx\pdfoutput % % For XeTeX % \ifx\XeTeXrevision\thisisundefined \else % % XeTeX version check % \ifnum\strcmp{\the\XeTeXversion\XeTeXrevision}{0.99996}>-1 % TeX Live 2016 contains XeTeX 0.99996 and xdvipdfmx 20160307. % It can use the `dvipdfmx:config' special (from TeX Live SVN r40941). % For avoiding PDF destination name replacement, we use this special % instead of xdvipdfmx's command line option `-C 0x0010'. \special{dvipdfmx:config C 0x0010} % XeTeX 0.99995+ comes with xdvipdfmx 20160307+. % It can handle Unicode destination names for PDF. \txiuseunicodedestnametrue \else % XeTeX < 0.99996 (TeX Live < 2016) cannot use the % `dvipdfmx:config' special. % So for avoiding PDF destination name replacement, % xdvipdfmx's command line option `-C 0x0010' is necessary. % % XeTeX < 0.99995 can not handle Unicode destination names for PDF % because xdvipdfmx 20150315 has a UTF-16 conversion issue. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). \txiuseunicodedestnamefalse \fi % % Color support % \def\rgbDarkRed{0.50 0.09 0.12} \def\rgbBlack{0 0 0} % \def\pdfsetcolor#1{\special{pdf:scolor [#1]}} % % Set color, and create a mark which defines \thiscolor accordingly, % so that \makeheadline knows which color to restore. \def\setcolor#1{% \xdef\currentcolordefs{\gdef\noexpand\thiscolor{#1}}% \domark \pdfsetcolor{#1}% } % \def\maincolor{\rgbBlack} \pdfsetcolor{\maincolor} \edef\thiscolor{\maincolor} \def\currentcolordefs{} % \def\makefootline{% \baselineskip24pt \line{\pdfsetcolor{\maincolor}\the\footline}% } % \def\makeheadline{% \vbox to 0pt{% \vskip-22.5pt \line{% \vbox to8.5pt{}% % Extract \thiscolor definition from the marks. \getcolormarks % Typeset the headline with \maincolor, then restore the color. \pdfsetcolor{\maincolor}\the\headline\pdfsetcolor{\thiscolor}% }% \vss }% \nointerlineskip } % % PDF outline support % % Emulate pdfTeX primitive \def\pdfdest name#1 xyz{% \special{pdf:dest (#1) [@thispage /XYZ @xpos @ypos null]}% } % \def\setpdfdestname#1{{% % We have to set dummies so commands such as @code, and characters % such as \, aren't expanded when present in a section title. \indexnofonts \makevalueexpandable \turnoffactive \iftxiuseunicodedestname % Pass through Unicode characters. \else % Use ASCII approximations in destination names. \passthroughcharsfalse \fi \def\pdfdestname{#1}% \txiescapepdf\pdfdestname }} % \def\setpdfoutlinetext#1{{% \turnoffactive % Always use Unicode characters in title texts. \def\pdfoutlinetext{#1}% % For XeTeX, xdvipdfmx converts to UTF-16. % So we do not convert. \txiescapepdf\pdfoutlinetext }} % \def\pdfmkdest#1{% \setpdfdestname{#1}% \safewhatsit{\pdfdest name{\pdfdestname} xyz}% } % % by default, use black for everything. \def\urlcolor{\rgbBlack} \def\linkcolor{\rgbBlack} \def\endlink{\setcolor{\maincolor}\pdfendlink} % \def\dopdfoutline#1#2#3#4{% \setpdfoutlinetext{#1} \setpdfdestname{#3} \ifx\pdfdestname\empty \def\pdfdestname{#4}% \fi % \special{pdf:out [-] #2 << /Title (\pdfoutlinetext) /A << /S /GoTo /D (\pdfdestname) >> >> }% } % \def\pdfmakeoutlines{% \begingroup % % For XeTeX, counts of subentries are not necessary. % Therefore, we read toc only once. % % We use node names as destinations. % % Currently we prefix the section name with the section number % for chapter and appendix headings only in order to avoid too much % horizontal space being required in the PDF viewer. \def\partentry##1##2##3##4{}% ignore parts in the outlines \def\numchapentry##1##2##3##4{% \dopdfoutline{##2 ##1}{1}{##3}{##4}}% \def\numsecentry##1##2##3##4{% \dopdfoutline{##1}{2}{##3}{##4}}% \def\numsubsecentry##1##2##3##4{% \dopdfoutline{##1}{3}{##3}{##4}}% \def\numsubsubsecentry##1##2##3##4{% \dopdfoutline{##1}{4}{##3}{##4}}% % \let\appentry\numchapentry% \let\appsecentry\numsecentry% \let\appsubsecentry\numsubsecentry% \let\appsubsubsecentry\numsubsubsecentry% \def\unnchapentry##1##2##3##4{% \dopdfoutline{##1}{1}{##3}{##4}}% \let\unnsecentry\numsecentry% \let\unnsubsecentry\numsubsecentry% \let\unnsubsubsecentry\numsubsubsecentry% % % For XeTeX, xdvipdfmx converts strings to UTF-16. % Therefore, the encoding and the language may not be considered. % \indexnofonts \setupdatafile % We can have normal brace characters in the PDF outlines, unlike % Texinfo index files. So set that up. \def\{{\lbracecharliteral}% \def\}{\rbracecharliteral}% \catcode`\\=\active \otherbackslash \input \tocreadfilename \endgroup } {\catcode`[=1 \catcode`]=2 \catcode`{=\other \catcode`}=\other \gdef\lbracecharliteral[{]% \gdef\rbracecharliteral[}]% ] \special{pdf:docview << /PageMode /UseOutlines >> } % ``\special{pdf:tounicode ...}'' is not necessary % because xdvipdfmx converts strings from UTF-8 to UTF-16 without it. % However, due to a UTF-16 conversion issue of xdvipdfmx 20150315, % ``\special{pdf:dest ...}'' cannot handle non-ASCII strings. % It is fixed by xdvipdfmx 20160106 (TeX Live SVN r39753). % \def\skipspaces#1{\def\PP{#1}\def\D{|}% \ifx\PP\D\let\nextsp\relax \else\let\nextsp\skipspaces \addtokens{\filename}{\PP}% \advance\filenamelength by 1 \fi \nextsp} \def\getfilename#1{% \filenamelength=0 % If we don't expand the argument now, \skipspaces will get % snagged on things like "@value{foo}". \edef\temp{#1}% \expandafter\skipspaces\temp|\relax } % make a live url in pdf output. \def\pdfurl#1{% \begingroup % it seems we really need yet another set of dummies; have not % tried to figure out what each command should do in the context % of @url. for now, just make @/ a no-op, that's the only one % people have actually reported a problem with. % \normalturnoffactive \def\@{@}% \let\/=\empty \makevalueexpandable % do we want to go so far as to use \indexnofonts instead of just % special-casing \var here? \def\var##1{##1}% % \leavevmode\setcolor{\urlcolor}% \special{pdf:bann << /Border [0 0 0] /Subtype /Link /A << /S /URI /URI (#1) >> >>}% \endgroup} \def\endlink{\setcolor{\maincolor}\special{pdf:eann}} \def\pdfgettoks#1.{\setbox\boxA=\hbox{\toksA={#1.}\toksB={}\maketoks}} \def\addtokens#1#2{\edef\addtoks{\noexpand#1={\the#1#2}}\addtoks} \def\adn#1{\addtokens{\toksC}{#1}\global\countA=1\let\next=\maketoks} \def\poptoks#1#2|ENDTOKS|{\let\first=#1\toksD={#1}\toksA={#2}} \def\maketoks{% \expandafter\poptoks\the\toksA|ENDTOKS|\relax \ifx\first0\adn0 \else\ifx\first1\adn1 \else\ifx\first2\adn2 \else\ifx\first3\adn3 \else\ifx\first4\adn4 \else\ifx\first5\adn5 \else\ifx\first6\adn6 \else\ifx\first7\adn7 \else\ifx\first8\adn8 \else\ifx\first9\adn9 \else \ifnum0=\countA\else\makelink\fi \ifx\first.\let\next=\done\else \let\next=\maketoks \addtokens{\toksB}{\the\toksD} \ifx\first,\addtokens{\toksB}{\space}\fi \fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \next} \def\makelink{\addtokens{\toksB}% {\noexpand\pdflink{\the\toksC}}\toksC={}\global\countA=0} \def\pdflink#1{% \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (#1) >> >>}% \setcolor{\linkcolor}#1\endlink} \def\done{\edef\st{\global\noexpand\toksA={\the\toksB}}\st} % % % @image support % % #1 is image name, #2 width (might be empty/whitespace), #3 height (ditto). \def\doxeteximage#1#2#3{% \def\xeteximagewidth{#2}\setbox0 = \hbox{\ignorespaces #2}% \def\xeteximageheight{#3}\setbox2 = \hbox{\ignorespaces #3}% % % XeTeX (and the PDF format) supports .pdf, .png, .jpg (among % others). Let's try in that order, PDF first since if % someone has a scalable image, presumably better to use that than a % bitmap. \let\xeteximgext=\empty \begingroup \openin 1 #1.pdf \ifeof 1 \openin 1 #1.PDF \ifeof 1 \openin 1 #1.png \ifeof 1 \openin 1 #1.jpg \ifeof 1 \openin 1 #1.jpeg \ifeof 1 \openin 1 #1.JPG \ifeof 1 \errmessage{Could not find image file #1 for XeTeX}% \else \gdef\xeteximgext{JPG}% \fi \else \gdef\xeteximgext{jpeg}% \fi \else \gdef\xeteximgext{jpg}% \fi \else \gdef\xeteximgext{png}% \fi \else \gdef\xeteximgext{PDF}% \fi \else \gdef\xeteximgext{pdf}% \fi \closein 1 \endgroup % % Putting an \hbox around the image can prevent an over-long line % after the image. \hbox\bgroup \def\xetexpdfext{pdf}% \ifx\xeteximgext\xetexpdfext \XeTeXpdffile "#1".\xeteximgext "" \else \def\xetexpdfext{PDF}% \ifx\xeteximgext\xetexpdfext \XeTeXpdffile "#1".\xeteximgext "" \else \XeTeXpicfile "#1".\xeteximgext "" \fi \fi \ifdim \wd0 >0pt width \xeteximagewidth \fi \ifdim \wd2 >0pt height \xeteximageheight \fi \relax \egroup } \fi % \message{fonts,} % Set the baselineskip to #1, and the lineskip and strut size % correspondingly. There is no deep meaning behind these magic numbers % used as factors; they just match (closely enough) what Knuth defined. % \def\lineskipfactor{.08333} \def\strutheightpercent{.70833} \def\strutdepthpercent {.29167} % % can get a sort of poor man's double spacing by redefining this. \def\baselinefactor{1} % \newdimen\textleading \def\setleading#1{% \dimen0 = #1\relax \normalbaselineskip = \baselinefactor\dimen0 \normallineskip = \lineskipfactor\normalbaselineskip \normalbaselines \setbox\strutbox =\hbox{% \vrule width0pt height\strutheightpercent\baselineskip depth \strutdepthpercent \baselineskip }% } % PDF CMaps. See also LaTeX's t1.cmap. % % do nothing with this by default. \expandafter\let\csname cmapOT1\endcsname\gobble \expandafter\let\csname cmapOT1IT\endcsname\gobble \expandafter\let\csname cmapOT1TT\endcsname\gobble % if we are producing pdf, and we have \pdffontattr, then define cmaps. % (\pdffontattr was introduced many years ago, but people still run % older pdftex's; it's easy to conditionalize, so we do.) \ifpdf \ifx\pdffontattr\thisisundefined \else \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1-0) %%Title: (TeX-OT1-0 TeX OT1 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1) /Supplement 0 >> def /CMapName /TeX-OT1-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <23> <26> <0023> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 40 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1IT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1IT-0) %%Title: (TeX-OT1IT-0 TeX OT1IT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1IT) /Supplement 0 >> def /CMapName /TeX-OT1IT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 8 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <25> <26> <0025> <28> <3B> <0028> <3F> <5B> <003F> <5D> <5E> <005D> <61> <7A> <0061> <7B> <7C> <2013> endbfrange 42 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <00660066> <0C> <00660069> <0D> <0066006C> <0E> <006600660069> <0F> <00660066006C> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <21> <0021> <22> <201D> <23> <0023> <24> <00A3> <27> <2019> <3C> <00A1> <3D> <003D> <3E> <00BF> <5C> <201C> <5F> <02D9> <60> <2018> <7D> <02DD> <7E> <007E> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1IT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% % % \cmapOT1TT \begingroup \catcode`\^^M=\active \def^^M{^^J}% Output line endings as the ^^J char. \catcode`\%=12 \immediate\pdfobj stream {%!PS-Adobe-3.0 Resource-CMap %%DocumentNeededResources: ProcSet (CIDInit) %%IncludeResource: ProcSet (CIDInit) %%BeginResource: CMap (TeX-OT1TT-0) %%Title: (TeX-OT1TT-0 TeX OT1TT 0) %%Version: 1.000 %%EndComments /CIDInit /ProcSet findresource begin 12 dict begin begincmap /CIDSystemInfo << /Registry (TeX) /Ordering (OT1TT) /Supplement 0 >> def /CMapName /TeX-OT1TT-0 def /CMapType 2 def 1 begincodespacerange <00> <7F> endcodespacerange 5 beginbfrange <00> <01> <0393> <09> <0A> <03A8> <21> <26> <0021> <28> <5F> <0028> <61> <7E> <0061> endbfrange 32 beginbfchar <02> <0398> <03> <039B> <04> <039E> <05> <03A0> <06> <03A3> <07> <03D2> <08> <03A6> <0B> <2191> <0C> <2193> <0D> <0027> <0E> <00A1> <0F> <00BF> <10> <0131> <11> <0237> <12> <0060> <13> <00B4> <14> <02C7> <15> <02D8> <16> <00AF> <17> <02DA> <18> <00B8> <19> <00DF> <1A> <00E6> <1B> <0153> <1C> <00F8> <1D> <00C6> <1E> <0152> <1F> <00D8> <20> <2423> <27> <2019> <60> <2018> <7F> <00A8> endbfchar endcmap CMapName currentdict /CMap defineresource pop end end %%EndResource %%EOF }\endgroup \expandafter\edef\csname cmapOT1TT\endcsname#1{% \pdffontattr#1{/ToUnicode \the\pdflastobj\space 0 R}% }% \fi\fi % Set the font macro #1 to the font named \fontprefix#2. % #3 is the font's design size, #4 is a scale factor, #5 is the CMap % encoding (only OT1, OT1IT and OT1TT are allowed, or empty to omit). % Example: % #1 = \textrm % #2 = \rmshape % #3 = 10 % #4 = \mainmagstep % #5 = OT1 % \def\setfont#1#2#3#4#5{% \font#1=\fontprefix#2#3 scaled #4 \csname cmap#5\endcsname#1% } % This is what gets called when #5 of \setfont is empty. \let\cmap\gobble % % (end of cmaps) % Use cm as the default font prefix. % To specify the font prefix, you must define \fontprefix % before you read in texinfo.tex. \ifx\fontprefix\thisisundefined \def\fontprefix{cm} \fi % Support font families that don't use the same naming scheme as CM. \def\rmshape{r} \def\rmbshape{bx} % where the normal face is bold \def\bfshape{b} \def\bxshape{bx} \def\ttshape{tt} \def\ttbshape{tt} \def\ttslshape{sltt} \def\itshape{ti} \def\itbshape{bxti} \def\slshape{sl} \def\slbshape{bxsl} \def\sfshape{ss} \def\sfbshape{ss} \def\scshape{csc} \def\scbshape{csc} % Definitions for a main text size of 11pt. (The default in Texinfo.) % \def\definetextfontsizexi{% % Text fonts (11.2pt, magstep1). \def\textnominalsize{11pt} \edef\mainmagstep{\magstephalf} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1095} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstep1}{OT1} \setfont\deftt\ttshape{10}{\magstep1}{OT1TT} \setfont\defsl\slshape{10}{\magstep1}{OT1} \setfont\defttsl\ttslshape{10}{\magstep1}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\ttslfont=\defttsl \let\slfont=\defsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for math mode superscripts (7pt). \def\sevennominalsize{7pt} \setfont\sevenrm\rmshape{7}{1000}{OT1} \setfont\seventt\ttshape{10}{700}{OT1TT} \setfont\sevenbf\bfshape{10}{700}{OT1} \setfont\sevenit\itshape{7}{1000}{OT1IT} \setfont\sevensl\slshape{10}{700}{OT1} \setfont\sevensf\sfshape{10}{700}{OT1} \setfont\sevensc\scshape{10}{700}{OT1} \setfont\seventtsl\ttslshape{10}{700}{OT1TT} \font\seveni=cmmi7 \font\sevensy=cmsy7 \def\sevenecsize{0700} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter (and unnumbered) fonts (17.28pt). \def\chapnominalsize{17pt} \setfont\chaprm\rmbshape{12}{\magstep2}{OT1} \setfont\chapit\itbshape{10}{\magstep3}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep3}{OT1} \setfont\chaptt\ttbshape{12}{\magstep2}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep3}{OT1TT} \setfont\chapsf\sfbshape{17}{1000}{OT1} \let\chapbf=\chaprm \setfont\chapsc\scbshape{10}{\magstep3}{OT1} \font\chapi=cmmi12 scaled \magstep2 \font\chapsy=cmsy10 scaled \magstep3 \def\chapecsize{1728} % Section fonts (14.4pt). \def\secnominalsize{14pt} \setfont\secrm\rmbshape{12}{\magstep1}{OT1} \setfont\secrmnotbold\rmshape{12}{\magstep1}{OT1} \setfont\secit\itbshape{10}{\magstep2}{OT1IT} \setfont\secsl\slbshape{10}{\magstep2}{OT1} \setfont\sectt\ttbshape{12}{\magstep1}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\secsf\sfbshape{12}{\magstep1}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep2}{OT1} \font\seci=cmmi12 scaled \magstep1 \font\secsy=cmsy10 scaled \magstep2 \def\sececsize{1440} % Subsection fonts (13.15pt). \def\ssecnominalsize{13pt} \setfont\ssecrm\rmbshape{12}{\magstephalf}{OT1} \setfont\ssecit\itbshape{10}{1315}{OT1IT} \setfont\ssecsl\slbshape{10}{1315}{OT1} \setfont\ssectt\ttbshape{12}{\magstephalf}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1315}{OT1TT} \setfont\ssecsf\sfbshape{12}{\magstephalf}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1315}{OT1} \font\sseci=cmmi12 scaled \magstephalf \font\ssecsy=cmsy10 scaled 1315 \def\ssececsize{1200} % Reduced fonts for @acronym in text (10pt). \def\reducednominalsize{10pt} \setfont\reducedrm\rmshape{10}{1000}{OT1} \setfont\reducedtt\ttshape{10}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{1000}{OT1} \setfont\reducedit\itshape{10}{1000}{OT1IT} \setfont\reducedsl\slshape{10}{1000}{OT1} \setfont\reducedsf\sfshape{10}{1000}{OT1} \setfont\reducedsc\scshape{10}{1000}{OT1} \setfont\reducedttsl\ttslshape{10}{1000}{OT1TT} \font\reducedi=cmmi10 \font\reducedsy=cmsy10 \def\reducedecsize{1000} \textleading = 13.2pt % line spacing for 11pt CM \textfonts % reset the current fonts \rm } % end of 11pt text font size definitions, \definetextfontsizexi % Definitions to make the main text be 10pt Computer Modern, with % section, chapter, etc., sizes following suit. This is for the GNU % Press printing of the Emacs 22 manual. Maybe other manuals in the % future. Used with @smallbook, which sets the leading to 12pt. % \def\definetextfontsizex{% % Text fonts (10pt). \def\textnominalsize{10pt} \edef\mainmagstep{1000} \setfont\textrm\rmshape{10}{\mainmagstep}{OT1} \setfont\texttt\ttshape{10}{\mainmagstep}{OT1TT} \setfont\textbf\bfshape{10}{\mainmagstep}{OT1} \setfont\textit\itshape{10}{\mainmagstep}{OT1IT} \setfont\textsl\slshape{10}{\mainmagstep}{OT1} \setfont\textsf\sfshape{10}{\mainmagstep}{OT1} \setfont\textsc\scshape{10}{\mainmagstep}{OT1} \setfont\textttsl\ttslshape{10}{\mainmagstep}{OT1TT} \font\texti=cmmi10 scaled \mainmagstep \font\textsy=cmsy10 scaled \mainmagstep \def\textecsize{1000} % A few fonts for @defun names and args. \setfont\defbf\bfshape{10}{\magstephalf}{OT1} \setfont\deftt\ttshape{10}{\magstephalf}{OT1TT} \setfont\defsl\slshape{10}{\magstephalf}{OT1} \setfont\defttsl\ttslshape{10}{\magstephalf}{OT1TT} \def\df{\let\ttfont=\deftt \let\bffont = \defbf \let\slfont=\defsl \let\ttslfont=\defttsl \bf} % Fonts for indices, footnotes, small examples (9pt). \def\smallnominalsize{9pt} \setfont\smallrm\rmshape{9}{1000}{OT1} \setfont\smalltt\ttshape{9}{1000}{OT1TT} \setfont\smallbf\bfshape{10}{900}{OT1} \setfont\smallit\itshape{9}{1000}{OT1IT} \setfont\smallsl\slshape{9}{1000}{OT1} \setfont\smallsf\sfshape{9}{1000}{OT1} \setfont\smallsc\scshape{10}{900}{OT1} \setfont\smallttsl\ttslshape{10}{900}{OT1TT} \font\smalli=cmmi9 \font\smallsy=cmsy9 \def\smallecsize{0900} % Fonts for small examples (8pt). \def\smallernominalsize{8pt} \setfont\smallerrm\rmshape{8}{1000}{OT1} \setfont\smallertt\ttshape{8}{1000}{OT1TT} \setfont\smallerbf\bfshape{10}{800}{OT1} \setfont\smallerit\itshape{8}{1000}{OT1IT} \setfont\smallersl\slshape{8}{1000}{OT1} \setfont\smallersf\sfshape{8}{1000}{OT1} \setfont\smallersc\scshape{10}{800}{OT1} \setfont\smallerttsl\ttslshape{10}{800}{OT1TT} \font\smalleri=cmmi8 \font\smallersy=cmsy8 \def\smallerecsize{0800} % Fonts for math mode superscripts (7pt). \def\sevennominalsize{7pt} \setfont\sevenrm\rmshape{7}{1000}{OT1} \setfont\seventt\ttshape{10}{700}{OT1TT} \setfont\sevenbf\bfshape{10}{700}{OT1} \setfont\sevenit\itshape{7}{1000}{OT1IT} \setfont\sevensl\slshape{10}{700}{OT1} \setfont\sevensf\sfshape{10}{700}{OT1} \setfont\sevensc\scshape{10}{700}{OT1} \setfont\seventtsl\ttslshape{10}{700}{OT1TT} \font\seveni=cmmi7 \font\sevensy=cmsy7 \def\sevenecsize{0700} % Fonts for title page (20.4pt): \def\titlenominalsize{20pt} \setfont\titlerm\rmbshape{12}{\magstep3}{OT1} \setfont\titleit\itbshape{10}{\magstep4}{OT1IT} \setfont\titlesl\slbshape{10}{\magstep4}{OT1} \setfont\titlett\ttbshape{12}{\magstep3}{OT1TT} \setfont\titlettsl\ttslshape{10}{\magstep4}{OT1TT} \setfont\titlesf\sfbshape{17}{\magstep1}{OT1} \let\titlebf=\titlerm \setfont\titlesc\scbshape{10}{\magstep4}{OT1} \font\titlei=cmmi12 scaled \magstep3 \font\titlesy=cmsy10 scaled \magstep4 \def\titleecsize{2074} % Chapter fonts (14.4pt). \def\chapnominalsize{14pt} \setfont\chaprm\rmbshape{12}{\magstep1}{OT1} \setfont\chapit\itbshape{10}{\magstep2}{OT1IT} \setfont\chapsl\slbshape{10}{\magstep2}{OT1} \setfont\chaptt\ttbshape{12}{\magstep1}{OT1TT} \setfont\chapttsl\ttslshape{10}{\magstep2}{OT1TT} \setfont\chapsf\sfbshape{12}{\magstep1}{OT1} \let\chapbf\chaprm \setfont\chapsc\scbshape{10}{\magstep2}{OT1} \font\chapi=cmmi12 scaled \magstep1 \font\chapsy=cmsy10 scaled \magstep2 \def\chapecsize{1440} % Section fonts (12pt). \def\secnominalsize{12pt} \setfont\secrm\rmbshape{12}{1000}{OT1} \setfont\secit\itbshape{10}{\magstep1}{OT1IT} \setfont\secsl\slbshape{10}{\magstep1}{OT1} \setfont\sectt\ttbshape{12}{1000}{OT1TT} \setfont\secttsl\ttslshape{10}{\magstep1}{OT1TT} \setfont\secsf\sfbshape{12}{1000}{OT1} \let\secbf\secrm \setfont\secsc\scbshape{10}{\magstep1}{OT1} \font\seci=cmmi12 \font\secsy=cmsy10 scaled \magstep1 \def\sececsize{1200} % Subsection fonts (10pt). \def\ssecnominalsize{10pt} \setfont\ssecrm\rmbshape{10}{1000}{OT1} \setfont\ssecit\itbshape{10}{1000}{OT1IT} \setfont\ssecsl\slbshape{10}{1000}{OT1} \setfont\ssectt\ttbshape{10}{1000}{OT1TT} \setfont\ssecttsl\ttslshape{10}{1000}{OT1TT} \setfont\ssecsf\sfbshape{10}{1000}{OT1} \let\ssecbf\ssecrm \setfont\ssecsc\scbshape{10}{1000}{OT1} \font\sseci=cmmi10 \font\ssecsy=cmsy10 \def\ssececsize{1000} % Reduced fonts for @acronym in text (9pt). \def\reducednominalsize{9pt} \setfont\reducedrm\rmshape{9}{1000}{OT1} \setfont\reducedtt\ttshape{9}{1000}{OT1TT} \setfont\reducedbf\bfshape{10}{900}{OT1} \setfont\reducedit\itshape{9}{1000}{OT1IT} \setfont\reducedsl\slshape{9}{1000}{OT1} \setfont\reducedsf\sfshape{9}{1000}{OT1} \setfont\reducedsc\scshape{10}{900}{OT1} \setfont\reducedttsl\ttslshape{10}{900}{OT1TT} \font\reducedi=cmmi9 \font\reducedsy=cmsy9 \def\reducedecsize{0900} \divide\parskip by 2 % reduce space between paragraphs \textleading = 12pt % line spacing for 10pt CM \textfonts % reset the current fonts \rm } % end of 10pt text font size definitions, \definetextfontsizex % Fonts for short table of contents. \setfont\shortcontrm\rmshape{12}{1000}{OT1} \setfont\shortcontbf\bfshape{10}{\magstep1}{OT1} % no cmb12 \setfont\shortcontsl\slshape{12}{1000}{OT1} \setfont\shortconttt\ttshape{12}{1000}{OT1TT} % We provide the user-level command % @fonttextsize 10 % (or 11) to redefine the text font size. pt is assumed. % \def\xiword{11} \def\xword{10} \def\xwordpt{10pt} % \parseargdef\fonttextsize{% \def\textsizearg{#1}% %\wlog{doing @fonttextsize \textsizearg}% % % Set \globaldefs so that documents can use this inside @tex, since % makeinfo 4.8 does not support it, but we need it nonetheless. % \begingroup \globaldefs=1 \ifx\textsizearg\xword \definetextfontsizex \else \ifx\textsizearg\xiword \definetextfontsizexi \else \errhelp=\EMsimple \errmessage{@fonttextsize only supports `10' or `11', not `\textsizearg'} \fi\fi \endgroup } % % Change the current font style to #1, remembering it in \curfontstyle. % For now, we do not accumulate font styles: @b{@i{foo}} prints foo in % italics, not bold italics. % \def\setfontstyle#1{% \def\curfontstyle{#1}% not as a control sequence, because we are \edef'd. \csname #1font\endcsname % change the current font } \def\rm{\fam=0 \setfontstyle{rm}} \def\it{\fam=\itfam \setfontstyle{it}} \def\sl{\fam=\slfam \setfontstyle{sl}} \def\bf{\fam=\bffam \setfontstyle{bf}}\def\bfstylename{bf} \def\tt{\fam=\ttfam \setfontstyle{tt}}\def\ttstylename{tt} % Texinfo sort of supports the sans serif font style, which plain TeX does not. % So we set up a \sf. \newfam\sffam \def\sf{\fam=\sffam \setfontstyle{sf}} % We don't need math for this font style. \def\ttsl{\setfontstyle{ttsl}} % In order for the font changes to affect most math symbols and letters, % we have to define the \textfont of the standard families. % We don't bother to reset \scriptscriptfont; awaiting user need. % \def\resetmathfonts{% \textfont0=\rmfont \textfont1=\ifont \textfont2=\syfont \textfont\itfam=\itfont \textfont\slfam=\slfont \textfont\bffam=\bffont \textfont\ttfam=\ttfont \textfont\sffam=\sffont % % Fonts for superscript. Note that the 7pt fonts are used regardless % of the current font size. \scriptfont0=\sevenrm \scriptfont1=\seveni \scriptfont2=\sevensy \scriptfont\itfam=\sevenit \scriptfont\slfam=\sevensl \scriptfont\bffam=\sevenbf \scriptfont\ttfam=\seventt \scriptfont\sffam=\sevensf } % % The font-changing commands (all called \...fonts) redefine the meanings % of \STYLEfont, instead of just \STYLE. We do this because \STYLE needs % to also set the current \fam for math mode. Our \STYLE (e.g., \rm) % commands hardwire \STYLEfont to set the current font. % % The fonts used for \ifont are for "math italics" (\itfont is for italics % in regular text). \syfont is also used in math mode only. % % Each font-changing command also sets the names \lsize (one size lower) % and \lllsize (three sizes lower). These relative commands are used % in, e.g., the LaTeX logo and acronyms. % % This all needs generalizing, badly. % \def\assignfonts#1{% \expandafter\let\expandafter\rmfont\csname #1rm\endcsname \expandafter\let\expandafter\itfont\csname #1it\endcsname \expandafter\let\expandafter\slfont\csname #1sl\endcsname \expandafter\let\expandafter\bffont\csname #1bf\endcsname \expandafter\let\expandafter\ttfont\csname #1tt\endcsname \expandafter\let\expandafter\smallcaps\csname #1sc\endcsname \expandafter\let\expandafter\sffont \csname #1sf\endcsname \expandafter\let\expandafter\ifont \csname #1i\endcsname \expandafter\let\expandafter\syfont \csname #1sy\endcsname \expandafter\let\expandafter\ttslfont\csname #1ttsl\endcsname } \newif\ifrmisbold % Select smaller font size with the current style. Used to change font size % in, e.g., the LaTeX logo and acronyms. If we are using bold fonts for % normal roman text, also use bold fonts for roman text in the smaller size. \def\switchtolllsize{% \expandafter\assignfonts\expandafter{\lllsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% \def\switchtolsize{% \expandafter\assignfonts\expandafter{\lsize}% \ifrmisbold \let\rmfont\bffont \fi \csname\curfontstyle\endcsname }% \def\definefontsetatsize#1#2#3#4#5{% \expandafter\def\csname #1fonts\endcsname{% \def\curfontsize{#1}% \def\lsize{#2}\def\lllsize{#3}% \csname rmisbold#5\endcsname \assignfonts{#1}% \resetmathfonts \setleading{#4}% }} \definefontsetatsize{text} {reduced}{smaller}{\textleading}{false} \definefontsetatsize{title} {chap} {subsec} {27pt} {true} \definefontsetatsize{chap} {sec} {text} {19pt} {true} \definefontsetatsize{sec} {subsec} {reduced}{17pt} {true} \definefontsetatsize{ssec} {text} {small} {15pt} {true} \definefontsetatsize{reduced}{small} {smaller}{10.5pt}{false} \definefontsetatsize{small} {smaller}{smaller}{10.5pt}{false} \definefontsetatsize{smaller}{smaller}{smaller}{9.5pt} {false} \def\titlefont#1{{\titlefonts\rm #1}} \let\subsecfonts = \ssecfonts \let\subsubsecfonts = \ssecfonts % Define these just so they can be easily changed for other fonts. \def\angleleft{$\langle$} \def\angleright{$\rangle$} % Set the fonts to use with the @small... environments. \let\smallexamplefonts = \smallfonts % About \smallexamplefonts. If we use \smallfonts (9pt), @smallexample % can fit this many characters: % 8.5x11=86 smallbook=72 a4=90 a5=69 % If we use \scriptfonts (8pt), then we can fit this many characters: % 8.5x11=90+ smallbook=80 a4=90+ a5=77 % For me, subjectively, the few extra characters that fit aren't worth % the additional smallness of 8pt. So I'm making the default 9pt. % % By the way, for comparison, here's what fits with @example (10pt): % 8.5x11=71 smallbook=60 a4=75 a5=58 % --karl, 24jan03. % Set up the default fonts, so we can use them for creating boxes. % \definetextfontsizexi % Check if we are currently using a typewriter font. Since all the % Computer Modern typewriter fonts have zero interword stretch (and % shrink), and it is reasonable to expect all typewriter fonts to have % this property, we can check that font parameter. % \def\ifmonospace{\ifdim\fontdimen3\font=0pt } { \catcode`\'=\active \catcode`\`=\active \gdef\setcodequotes{\let`\codequoteleft \let'\codequoteright} \gdef\setregularquotes{\let`\lq \let'\rq} } % Allow an option to not use regular directed right quote/apostrophe % (char 0x27), but instead the undirected quote from cmtt (char 0x0d). % The undirected quote is ugly, so don't make it the default, but it % works for pasting with more pdf viewers (at least evince), the % lilypond developers report. xpdf does work with the regular 0x27. % \def\codequoteright{% \ifmonospace \expandafter\ifx\csname SETtxicodequoteundirected\endcsname\relax \expandafter\ifx\csname SETcodequoteundirected\endcsname\relax '% \else \char'15 \fi \else \char'15 \fi \else '% \fi } % % and a similar option for the left quote char vs. a grave accent. % Modern fonts display ASCII 0x60 as a grave accent, so some people like % the code environments to do likewise. % \def\codequoteleft{% \ifmonospace \expandafter\ifx\csname SETtxicodequotebacktick\endcsname\relax \expandafter\ifx\csname SETcodequotebacktick\endcsname\relax % [Knuth] pp. 380,381,391 % \relax disables Spanish ligatures ?` and !` of \tt font. \relax`% \else \char'22 \fi \else \char'22 \fi \else \relax`% \fi } % Commands to set the quote options. % \parseargdef\codequoteundirected{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequoteundirected\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequoteundirected\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequoteundirected value `\temp', must be on|off}% \fi\fi } % \parseargdef\codequotebacktick{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxicodequotebacktick\endcsname = t% \else\ifx\temp\offword \expandafter\let\csname SETtxicodequotebacktick\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @codequotebacktick value `\temp', must be on|off}% \fi\fi } % [Knuth] pp. 380,381,391, disable Spanish ligatures ?` and !` of \tt font. \def\noligaturesquoteleft{\relax\lq} % Count depth in font-changes, for error checks \newcount\fontdepth \fontdepth=0 % Font commands. % #1 is the font command (\sl or \it), #2 is the text to slant. % If we are in a monospaced environment, however, 1) always use \ttsl, % and 2) do not add an italic correction. \def\dosmartslant#1#2{% \ifusingtt {{\ttsl #2}\let\next=\relax}% {\def\next{{#1#2}\futurelet\next\smartitaliccorrection}}% \next } \def\smartslanted{\dosmartslant\sl} \def\smartitalic{\dosmartslant\it} % Output an italic correction unless \next (presumed to be the following % character) is such as not to need one. \def\smartitaliccorrection{% \ifx\next,% \else\ifx\next-% \else\ifx\next.% \else\ifx\next\.% \else\ifx\next\comma% \else\ptexslash \fi\fi\fi\fi\fi \aftersmartic } % Unconditional use \ttsl, and no ic. @var is set to this for defuns. \def\ttslanted#1{{\ttsl #1}} % @cite is like \smartslanted except unconditionally use \sl. We never want % ttsl for book titles, do we? \def\cite#1{{\sl #1}\futurelet\next\smartitaliccorrection} \def\aftersmartic{} \def\var#1{% \let\saveaftersmartic = \aftersmartic \def\aftersmartic{\null\let\aftersmartic=\saveaftersmartic}% \smartslanted{#1}% } \let\i=\smartitalic \let\slanted=\smartslanted \let\dfn=\smartslanted \let\emph=\smartitalic % Explicit font changes: @r, @sc, undocumented @ii. \def\r#1{{\rm #1}} % roman font \def\sc#1{{\smallcaps#1}} % smallcaps font \def\ii#1{{\it #1}} % italic font % @b, explicit bold. Also @strong. \def\b#1{{\bf #1}} \let\strong=\b % @sansserif, explicit sans. \def\sansserif#1{{\sf #1}} % We can't just use \exhyphenpenalty, because that only has effect at % the end of a paragraph. Restore normal hyphenation at the end of the % group within which \nohyphenation is presumably called. % \def\nohyphenation{\hyphenchar\font = -1 \aftergroup\restorehyphenation} \def\restorehyphenation{\hyphenchar\font = `- } % Set sfcode to normal for the chars that usually have another value. % Can't use plain's \frenchspacing because it uses the `\x notation, and % sometimes \x has an active definition that messes things up. % \catcode`@=11 \def\plainfrenchspacing{% \sfcode`\.=\@m \sfcode`\?=\@m \sfcode`\!=\@m \sfcode`\:=\@m \sfcode`\;=\@m \sfcode`\,=\@m \def\endofsentencespacefactor{1000}% for @. and friends } \def\plainnonfrenchspacing{% \sfcode`\.3000\sfcode`\?3000\sfcode`\!3000 \sfcode`\:2000\sfcode`\;1500\sfcode`\,1250 \def\endofsentencespacefactor{3000}% for @. and friends } \catcode`@=\other \def\endofsentencespacefactor{3000}% default % @t, explicit typewriter. \def\t#1{% {\tt \plainfrenchspacing #1}% \null } % @samp. \def\samp#1{{\setcodequotes\lq\tclose{#1}\rq\null}} % @indicateurl is \samp, that is, with quotes. \let\indicateurl=\samp % @code (and similar) prints in typewriter, but with spaces the same % size as normal in the surrounding text, without hyphenation, etc. % This is a subroutine for that. \def\tclose#1{% {% % Change normal interword space to be same as for the current font. \spaceskip = \fontdimen2\font % % Switch to typewriter. \tt % % But `\ ' produces the large typewriter interword space. \def\ {{\spaceskip = 0pt{} }}% % % Turn off hyphenation. \nohyphenation % \plainfrenchspacing #1% }% \null % reset spacefactor to 1000 } % We *must* turn on hyphenation at `-' and `_' in @code. % (But see \codedashfinish below.) % Otherwise, it is too hard to avoid overfull hboxes % in the Emacs manual, the Library manual, etc. % % Unfortunately, TeX uses one parameter (\hyphenchar) to control % both hyphenation at - and hyphenation within words. % We must therefore turn them both off (\tclose does that) % and arrange explicitly to hyphenate at a dash. -- rms. { \catcode`\-=\active \catcode`\_=\active \catcode`\'=\active \catcode`\`=\active \global\let'=\rq \global\let`=\lq % default definitions % \global\def\code{\begingroup \setcodequotes \catcode\dashChar=\active \catcode\underChar=\active \ifallowcodebreaks \let-\codedash \let_\codeunder \else \let-\normaldash \let_\realunder \fi % Given -foo (with a single dash), we do not want to allow a break % after the hyphen. \global\let\codedashprev=\codedash % \codex } % \gdef\codedash{\futurelet\next\codedashfinish} \gdef\codedashfinish{% \normaldash % always output the dash character itself. % % Now, output a discretionary to allow a line break, unless % (a) the next character is a -, or % (b) the preceding character is a -. % E.g., given --posix, we do not want to allow a break after either -. % Given --foo-bar, we do want to allow a break between the - and the b. \ifx\next\codedash \else \ifx\codedashprev\codedash \else \discretionary{}{}{}\fi \fi % we need the space after the = for the case when \next itself is a % space token; it would get swallowed otherwise. As in @code{- a}. \global\let\codedashprev= \next } } \def\normaldash{-} % \def\codex #1{\tclose{#1}\endgroup} \def\codeunder{% % this is all so @math{@code{var_name}+1} can work. In math mode, _ % is "active" (mathcode"8000) and \normalunderscore (or \char95, etc.) % will therefore expand the active definition of _, which is us % (inside @code that is), therefore an endless loop. \ifusingtt{\ifmmode \mathchar"075F % class 0=ordinary, family 7=ttfam, pos 0x5F=_. \else\normalunderscore \fi \discretionary{}{}{}}% {\_}% } % An additional complication: the above will allow breaks after, e.g., % each of the four underscores in __typeof__. This is bad. % @allowcodebreaks provides a document-level way to turn breaking at - % and _ on and off. % \newif\ifallowcodebreaks \allowcodebreakstrue \def\keywordtrue{true} \def\keywordfalse{false} \parseargdef\allowcodebreaks{% \def\txiarg{#1}% \ifx\txiarg\keywordtrue \allowcodebreakstrue \else\ifx\txiarg\keywordfalse \allowcodebreaksfalse \else \errhelp = \EMsimple \errmessage{Unknown @allowcodebreaks option `\txiarg', must be true|false}% \fi\fi } % For @command, @env, @file, @option quotes seem unnecessary, % so use \code rather than \samp. \let\command=\code \let\env=\code \let\file=\code \let\option=\code % @uref (abbreviation for `urlref') aka @url takes an optional % (comma-separated) second argument specifying the text to display and % an optional third arg as text to display instead of (rather than in % addition to) the url itself. First (mandatory) arg is the url. % TeX-only option to allow changing PDF output to show only the second % arg (if given), and not the url (which is then just the link target). \newif\ifurefurlonlylink % The default \pretolerance setting stops the penalty inserted in % \urefallowbreak being a discouragement to line breaking. Set it to % a negative value for this paragraph only. Hopefully this does not % conflict with redefinitions of \par done elsewhere. \def\nopretolerance{% \pretolerance=-1 \def\par{\endgraf\pretolerance=100 \let\par\endgraf}% } % The main macro is \urefbreak, which allows breaking at expected % places within the url. \def\urefbreak{\nopretolerance \begingroup \urefcatcodes \dourefbreak} \let\uref=\urefbreak % \def\dourefbreak#1{\urefbreakfinish #1,,,\finish} \def\urefbreakfinish#1,#2,#3,#4\finish{% doesn't work in @example \unsepspaces \pdfurl{#1}% \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \unhbox0 % third arg given, show only that \else \setbox0 = \hbox{\ignorespaces #2}% look for second arg \ifdim\wd0 > 0pt \ifpdf % For pdfTeX and LuaTeX \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \else \ifx\XeTeXrevision\thisisundefined \unhbox0\ (\urefcode{#1})% DVI, always show arg and url \else % For XeTeX \ifurefurlonlylink % PDF plus option to not display url, show just arg \unhbox0 \else % PDF, normally display both arg and url for consistency, % visibility, if the pdf is eventually used to print, etc. \unhbox0\ (\urefcode{#1})% \fi \fi \fi \else \urefcode{#1}% only url given, so show it \fi \fi \endlink \endgroup} % Allow line breaks around only a few characters (only). \def\urefcatcodes{% \catcode`\&=\active \catcode`\.=\active \catcode`\#=\active \catcode`\?=\active \catcode`\/=\active } { \urefcatcodes % \global\def\urefcode{\begingroup \setcodequotes \urefcatcodes \let&\urefcodeamp \let.\urefcodedot \let#\urefcodehash \let?\urefcodequest \let/\urefcodeslash \codex } % % By default, they are just regular characters. \global\def&{\normalamp} \global\def.{\normaldot} \global\def#{\normalhash} \global\def?{\normalquest} \global\def/{\normalslash} } \def\urefcodeamp{\urefprebreak \&\urefpostbreak} \def\urefcodedot{\urefprebreak .\urefpostbreak} \def\urefcodehash{\urefprebreak \#\urefpostbreak} \def\urefcodequest{\urefprebreak ?\urefpostbreak} \def\urefcodeslash{\futurelet\next\urefcodeslashfinish} { \catcode`\/=\active \global\def\urefcodeslashfinish{% \urefprebreak \slashChar % Allow line break only after the final / in a sequence of % slashes, to avoid line break between the slashes in http://. \ifx\next/\else \urefpostbreak \fi } } % By default we'll break after the special characters, but some people like to % break before the special chars, so allow that. Also allow no breaking at % all, for manual control. % \parseargdef\urefbreakstyle{% \def\txiarg{#1}% \ifx\txiarg\wordnone \def\urefprebreak{\nobreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordbefore \def\urefprebreak{\urefallowbreak}\def\urefpostbreak{\nobreak} \else\ifx\txiarg\wordafter \def\urefprebreak{\nobreak}\def\urefpostbreak{\urefallowbreak} \else \errhelp = \EMsimple \errmessage{Unknown @urefbreakstyle setting `\txiarg'}% \fi\fi\fi } \def\wordafter{after} \def\wordbefore{before} \def\wordnone{none} % Allow a ragged right output to aid breaking long URL's. There can % be a break at the \allowbreak with no extra glue (if the existing stretch in % the line is sufficient), a break at the \penalty with extra glue added % at the end of the line, or no break at all here. % Changing the value of the penalty and/or the amount of stretch affects how % preferable one choice is over the other. \def\urefallowbreak{% \penalty0\relax \hskip 0pt plus 2 em\relax \penalty1000\relax \hskip 0pt plus -2 em\relax } \urefbreakstyle after % @url synonym for @uref, since that's how everyone uses it. % \let\url=\uref % rms does not like angle brackets --karl, 17may97. % So now @email is just like @uref, unless we are pdf. % %\def\email#1{\angleleft{\tt #1}\angleright} \ifpdforxetex \def\email#1{\doemail#1,,\finish} \def\doemail#1,#2,#3\finish{\begingroup \unsepspaces \pdfurl{mailto:#1}% \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0>0pt\unhbox0\else\code{#1}\fi \endlink \endgroup} \else \let\email=\uref \fi % @kbdinputstyle -- arg is `distinct' (@kbd uses slanted tty font always), % `example' (@kbd uses ttsl only inside of @example and friends), % or `code' (@kbd uses normal tty font always). \parseargdef\kbdinputstyle{% \def\txiarg{#1}% \ifx\txiarg\worddistinct \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\ttsl}% \else\ifx\txiarg\wordexample \gdef\kbdexamplefont{\ttsl}\gdef\kbdfont{\tt}% \else\ifx\txiarg\wordcode \gdef\kbdexamplefont{\tt}\gdef\kbdfont{\tt}% \else \errhelp = \EMsimple \errmessage{Unknown @kbdinputstyle setting `\txiarg'}% \fi\fi\fi } \def\worddistinct{distinct} \def\wordexample{example} \def\wordcode{code} % Default is `distinct'. \kbdinputstyle distinct \def\kbd#1{% \tclose{\kbdfont\setcodequotes#1}% } % definition of @key that produces a lozenge. Doesn't adjust to text size. %\setfont\keyrm\rmshape{8}{1000}{OT1} %\font\keysy=cmsy9 %\def\key#1{{\keyrm\textfont2=\keysy \leavevmode\hbox{% % \raise0.4pt\hbox{\angleleft}\kern-.08em\vtop{% % \vbox{\hrule\kern-0.4pt % \hbox{\raise0.4pt\hbox{\vphantom{\angleleft}}#1}}% % \kern-0.4pt\hrule}% % \kern-.06em\raise0.4pt\hbox{\angleright}}}} % definition of @key with no lozenge. % \def\key#1{{\setregularquotes \nohyphenation \tt #1}\null} % @clicksequence{File @click{} Open ...} \def\clicksequence#1{\begingroup #1\endgroup} % @clickstyle @arrow (by default) \parseargdef\clickstyle{\def\click{#1}} \def\click{\arrow} % Typeset a dimension, e.g., `in' or `pt'. The only reason for the % argument is to make the input look right: @dmn{pt} instead of @dmn{}pt. % \def\dmn#1{\thinspace #1} % @acronym for "FBI", "NATO", and the like. % We print this one point size smaller, since it's intended for % all-uppercase. % \def\acronym#1{\doacronym #1,,\finish} \def\doacronym#1,#2,#3\finish{% {\switchtolsize #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @abbr for "Comput. J." and the like. % No font change, but don't do end-of-sentence spacing. % \def\abbr#1{\doabbr #1,,\finish} \def\doabbr#1,#2,#3\finish{% {\plainfrenchspacing #1}% \def\temp{#2}% \ifx\temp\empty \else \space ({\unsepspaces \ignorespaces \temp \unskip})% \fi \null % reset \spacefactor=1000 } % @asis just yields its argument. Used with @table, for example. % \def\asis#1{#1} % @math outputs its argument in math mode. % % One complication: _ usually means subscripts, but it could also mean % an actual _ character, as in @math{@var{some_variable} + 1}. So make % _ active, and distinguish by seeing if the current family is \slfam, % which is what @var uses. { \catcode`\_ = \active \gdef\mathunderscore{% \catcode`\_=\active \def_{\ifnum\fam=\slfam \_\else\sb\fi}% } } % Another complication: we want \\ (and @\) to output a math (or tt) \. % FYI, plain.tex uses \\ as a temporary control sequence (for no % particular reason), but this is not advertised and we don't care. % % The \mathchar is class=0=ordinary, family=7=ttfam, position=5C=\. \def\mathbackslash{\ifnum\fam=\ttfam \mathchar"075C \else\backslash \fi} % \def\math{% \ifmmode\else % only go into math if not in math mode already \tex \mathunderscore \let\\ = \mathbackslash \mathactive % make the texinfo accent commands work in math mode \let\"=\ddot \let\'=\acute \let\==\bar \let\^=\hat \let\`=\grave \let\u=\breve \let\v=\check \let\~=\tilde \let\dotaccent=\dot % have to provide another name for sup operator \let\mathopsup=\sup $\expandafter\finishmath\fi } \def\finishmath#1{#1$\endgroup} % Close the group opened by \tex. % Some active characters (such as <) are spaced differently in math. % We have to reset their definitions in case the @math was an argument % to a command which sets the catcodes (such as @item or @section). % { \catcode`^ = \active \catcode`< = \active \catcode`> = \active \catcode`+ = \active \catcode`' = \active \gdef\mathactive{% \let^ = \ptexhat \let< = \ptexless \let> = \ptexgtr \let+ = \ptexplus \let' = \ptexquoteright } } % for @sub and @sup, if in math mode, just do a normal sub/superscript. % If in text, use math to place as sub/superscript, but switch % into text mode, with smaller fonts. This is a different font than the % one used for real math sub/superscripts (8pt vs. 7pt), but let's not % fix it (significant additions to font machinery) until someone notices. % \def\sub{\ifmmode \expandafter\sb \else \expandafter\finishsub\fi} \def\finishsub#1{$\sb{\hbox{\switchtolllsize #1}}$}% % \def\sup{\ifmmode \expandafter\ptexsp \else \expandafter\finishsup\fi} \def\finishsup#1{$\ptexsp{\hbox{\switchtolllsize #1}}$}% % provide this command from LaTeX as it is very common \def\frac#1#2{{{#1}\over{#2}}} % @displaymath. % \globaldefs is needed to recognize the end lines in \tex and % \end tex. Set \thisenv as @end displaymath is seen before @end tex. {\obeylines \globaldefs=1 \envdef\displaymath{% \tex% \def\thisenv{\displaymath}% \begingroup\let\end\displaymathend% $$% } \def\displaymathend{$$\endgroup\end}% \def\Edisplaymath{% \def\thisenv{\tex}% \end tex }} % @inlinefmt{FMTNAME,PROCESSED-TEXT} and @inlineraw{FMTNAME,RAW-TEXT}. % Ignore unless FMTNAME == tex; then it is like @iftex and @tex, % except specified as a normal braced arg, so no newlines to worry about. % \def\outfmtnametex{tex} % \long\def\inlinefmt#1{\doinlinefmt #1,\finish} \long\def\doinlinefmt#1,#2,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\fi } % % @inlinefmtifelse{FMTNAME,THEN-TEXT,ELSE-TEXT} expands THEN-TEXT if % FMTNAME is tex, else ELSE-TEXT. \long\def\inlinefmtifelse#1{\doinlinefmtifelse #1,,,\finish} \long\def\doinlinefmtifelse#1,#2,#3,#4,\finish{% \def\inlinefmtname{#1}% \ifx\inlinefmtname\outfmtnametex \ignorespaces #2\else \ignorespaces #3\fi } % % For raw, must switch into @tex before parsing the argument, to avoid % setting catcodes prematurely. Doing it this way means that, for % example, @inlineraw{html, foo{bar} gets a parse error instead of being % ignored. But this isn't important because if people want a literal % *right* brace they would have to use a command anyway, so they may as % well use a command to get a left brace too. We could re-use the % delimiter character idea from \verb, but it seems like overkill. % \long\def\inlineraw{\tex \doinlineraw} \long\def\doinlineraw#1{\doinlinerawtwo #1,\finish} \def\doinlinerawtwo#1,#2,\finish{% \def\inlinerawname{#1}% \ifx\inlinerawname\outfmtnametex \ignorespaces #2\fi \endgroup % close group opened by \tex. } % @inlineifset{VAR, TEXT} expands TEXT if VAR is @set. % \long\def\inlineifset#1{\doinlineifset #1,\finish} \long\def\doinlineifset#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \else\ignorespaces#2\fi } % @inlineifclear{VAR, TEXT} expands TEXT if VAR is not @set. % \long\def\inlineifclear#1{\doinlineifclear #1,\finish} \long\def\doinlineifclear#1,#2,\finish{% \def\inlinevarname{#1}% \expandafter\ifx\csname SET\inlinevarname\endcsname\relax \ignorespaces#2\fi } \message{glyphs,} % and logos. % @@ prints an @, as does @atchar{}. \def\@{\char64 } \let\atchar=\@ % @{ @} @lbracechar{} @rbracechar{} all generate brace characters. \def\lbracechar{{\ifmonospace\char123\else\ensuremath\lbrace\fi}} \def\rbracechar{{\ifmonospace\char125\else\ensuremath\rbrace\fi}} \let\{=\lbracechar \let\}=\rbracechar % @comma{} to avoid , parsing problems. \let\comma = , % Accents: @, @dotaccent @ringaccent @ubaraccent @udotaccent % Others are defined by plain TeX: @` @' @" @^ @~ @= @u @v @H. \let\, = \ptexc \let\dotaccent = \ptexdot \def\ringaccent#1{{\accent23 #1}} \let\tieaccent = \ptext \let\ubaraccent = \ptexb \let\udotaccent = \d % Other special characters: @questiondown @exclamdown @ordf @ordm % Plain TeX defines: @AA @AE @O @OE @L (plus lowercase versions) @ss. \def\questiondown{?`} \def\exclamdown{!`} \def\ordf{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{a}}} \def\ordm{\leavevmode\raise1ex\hbox{\switchtolllsize \underbar{o}}} % Dotless i and dotless j, used for accents. \def\imacro{i} \def\jmacro{j} \def\dotless#1{% \def\temp{#1}% \ifx\temp\imacro \ifmmode\imath \else\ptexi \fi \else\ifx\temp\jmacro \ifmmode\jmath \else\j \fi \else \errmessage{@dotless can be used only with i or j}% \fi\fi } % The \TeX{} logo, as in plain, but resetting the spacing so that a % period following counts as ending a sentence. (Idea found in latex.) % \edef\TeX{\TeX \spacefactor=1000 } % @LaTeX{} logo. Not quite the same results as the definition in % latex.ltx, since we use a different font for the raised A; it's most % convenient for us to use an explicitly smaller font, rather than using % the \scriptstyle font (since we don't reset \scriptstyle and % \scriptscriptstyle). % \def\LaTeX{% L\kern-.36em {\setbox0=\hbox{T}% \vbox to \ht0{\hbox{% \ifx\textnominalsize\xwordpt % for 10pt running text, lllsize (8pt) is too small for the A in LaTeX. % Revert to plain's \scriptsize, which is 7pt. \count255=\the\fam $\fam\count255 \scriptstyle A$% \else % For 11pt, we can use our lllsize. \switchtolllsize A% \fi }% \vss }}% \kern-.15em \TeX } % Some math mode symbols. Define \ensuremath to switch into math mode % unless we are already there. Expansion tricks may not be needed here, % but safer, and can't hurt. \def\ensuremath{\ifmmode \expandafter\asis \else\expandafter\ensuredmath \fi} \def\ensuredmath#1{$\relax#1$} % \def\bullet{\ensuremath\ptexbullet} \def\geq{\ensuremath\ge} \def\leq{\ensuremath\le} \def\minus{\ensuremath-} % @dots{} outputs an ellipsis using the current font. % We do .5em per period so that it has the same spacing in the cm % typewriter fonts as three actual period characters; on the other hand, % in other typewriter fonts three periods are wider than 1.5em. So do % whichever is larger. % \def\dots{% \leavevmode \setbox0=\hbox{...}% get width of three periods \ifdim\wd0 > 1.5em \dimen0 = \wd0 \else \dimen0 = 1.5em \fi \hbox to \dimen0{% \hskip 0pt plus.25fil .\hskip 0pt plus1fil .\hskip 0pt plus1fil .\hskip 0pt plus.5fil }% } % @enddots{} is an end-of-sentence ellipsis. % \def\enddots{% \dots \spacefactor=\endofsentencespacefactor } % @point{}, @result{}, @expansion{}, @print{}, @equiv{}. % % Since these characters are used in examples, they should be an even number of % \tt widths. Each \tt character is 1en, so two makes it 1em. % \def\point{$\star$} \def\arrow{\leavevmode\raise.05ex\hbox to 1em{\hfil$\rightarrow$\hfil}} \def\result{\leavevmode\raise.05ex\hbox to 1em{\hfil$\Rightarrow$\hfil}} \def\expansion{\leavevmode\hbox to 1em{\hfil$\mapsto$\hfil}} \def\print{\leavevmode\lower.1ex\hbox to 1em{\hfil$\dashv$\hfil}} \def\equiv{\leavevmode\hbox to 1em{\hfil$\ptexequiv$\hfil}} % The @error{} command. % Adapted from the TeXbook's \boxit. % \newbox\errorbox % {\ttfont \global\dimen0 = 3em}% Width of the box. \dimen2 = .55pt % Thickness of rules % The text. (`r' is open on the right, `e' somewhat less so on the left.) \setbox0 = \hbox{\kern-.75pt \reducedsf \putworderror\kern-1.5pt} % \setbox\errorbox=\hbox to \dimen0{\hfil \hsize = \dimen0 \advance\hsize by -5.8pt % Space to left+right. \advance\hsize by -2\dimen2 % Rules. \vbox{% \hrule height\dimen2 \hbox{\vrule width\dimen2 \kern3pt % Space to left of text. \vtop{\kern2.4pt \box0 \kern2.4pt}% Space above/below. \kern3pt\vrule width\dimen2}% Space to right. \hrule height\dimen2} \hfil} % \def\error{\leavevmode\lower.7ex\copy\errorbox} % @pounds{} is a sterling sign, which Knuth put in the CM italic font. % \def\pounds{\ifmonospace{\ecfont\char"BF}\else{\it\$}\fi} % @euro{} comes from a separate font, depending on the current style. % We use the free feym* fonts from the eurosym package by Henrik % Theiling, which support regular, slanted, bold and bold slanted (and % "outlined" (blackboard board, sort of) versions, which we don't need). % It is available from http://www.ctan.org/tex-archive/fonts/eurosym. % % Although only regular is the truly official Euro symbol, we ignore % that. The Euro is designed to be slightly taller than the regular % font height. % % feymr - regular % feymo - slanted % feybr - bold % feybo - bold slanted % % There is no good (free) typewriter version, to my knowledge. % A feymr10 euro is ~7.3pt wide, while a normal cmtt10 char is ~5.25pt wide. % Hmm. % % Also doesn't work in math. Do we need to do math with euro symbols? % Hope not. % % \def\euro{{\eurofont e}} \def\eurofont{% % We set the font at each command, rather than predefining it in % \textfonts and the other font-switching commands, so that % installations which never need the symbol don't have to have the % font installed. % % There is only one designed size (nominal 10pt), so we always scale % that to the current nominal size. % % By the way, simply using "at 1em" works for cmr10 and the like, but % does not work for cmbx10 and other extended/shrunken fonts. % \def\eurosize{\csname\curfontsize nominalsize\endcsname}% % \ifx\curfontstyle\bfstylename % bold: \font\thiseurofont = \ifusingit{feybo10}{feybr10} at \eurosize \else % regular: \font\thiseurofont = \ifusingit{feymo10}{feymr10} at \eurosize \fi \thiseurofont } % Glyphs from the EC fonts. We don't use \let for the aliases, because % sometimes we redefine the original macro, and the alias should reflect % the redefinition. % % Use LaTeX names for the Icelandic letters. \def\DH{{\ecfont \char"D0}} % Eth \def\dh{{\ecfont \char"F0}} % eth \def\TH{{\ecfont \char"DE}} % Thorn \def\th{{\ecfont \char"FE}} % thorn % \def\guillemetleft{{\ecfont \char"13}} \def\guillemotleft{\guillemetleft} \def\guillemetright{{\ecfont \char"14}} \def\guillemotright{\guillemetright} \def\guilsinglleft{{\ecfont \char"0E}} \def\guilsinglright{{\ecfont \char"0F}} \def\quotedblbase{{\ecfont \char"12}} \def\quotesinglbase{{\ecfont \char"0D}} % \def\L{{\ecfont \char"8A}} % L with stroke \def\l{{\ecfont \char"AA}} % l with stroke % % This positioning is not perfect (see the ogonek LaTeX package), but % we have the precomposed glyphs for the most common cases. We put the % tests to use those glyphs in the single \ogonek macro so we have fewer % dummy definitions to worry about for index entries, etc. % % ogonek is also used with other letters in Lithuanian (IOU), but using % the precomposed glyphs for those is not so easy since they aren't in % the same EC font. \def\ogonek#1{{% \def\temp{#1}% \ifx\temp\macrocharA\Aogonek \else\ifx\temp\macrochara\aogonek \else\ifx\temp\macrocharE\Eogonek \else\ifx\temp\macrochare\eogonek \else \ecfont \setbox0=\hbox{#1}% \ifdim\ht0=1ex\accent"0C #1% \else\ooalign{\unhbox0\crcr\hidewidth\char"0C \hidewidth}% \fi \fi\fi\fi\fi }% } \def\Aogonek{{\ecfont \char"81}}\def\macrocharA{A} \def\aogonek{{\ecfont \char"A1}}\def\macrochara{a} \def\Eogonek{{\ecfont \char"86}}\def\macrocharE{E} \def\eogonek{{\ecfont \char"A6}}\def\macrochare{e} % % Use the European Computer Modern fonts (cm-super in outline format) % for non-CM glyphs. That is ec* for regular text and tc* for the text % companion symbols (LaTeX TS1 encoding). Both are part of the ec % package and follow the same conventions. % \def\ecfont{\etcfont{e}} \def\tcfont{\etcfont{t}} % \def\etcfont#1{% % We can't distinguish serif/sans and italic/slanted, but this % is used for crude hacks anyway (like adding French and German % quotes to documents typeset with CM, where we lose kerning), so % hopefully nobody will notice/care. \edef\ecsize{\csname\curfontsize ecsize\endcsname}% \edef\nominalsize{\csname\curfontsize nominalsize\endcsname}% \ifmonospace % typewriter: \font\thisecfont = #1ctt\ecsize \space at \nominalsize \else \ifx\curfontstyle\bfstylename % bold: \font\thisecfont = #1cb\ifusingit{i}{x}\ecsize \space at \nominalsize \else % regular: \font\thisecfont = #1c\ifusingit{ti}{rm}\ecsize \space at \nominalsize \fi \fi \thisecfont } % @registeredsymbol - R in a circle. The font for the R should really % be smaller yet, but lllsize is the best we can do for now. % Adapted from the plain.tex definition of \copyright. % \def\registeredsymbol{% $^{{\ooalign{\hfil\raise.07ex\hbox{\switchtolllsize R}% \hfil\crcr\Orb}}% }$% } % @textdegree - the normal degrees sign. % \def\textdegree{$^\circ$} % Laurent Siebenmann reports \Orb undefined with: % Textures 1.7.7 (preloaded format=plain 93.10.14) (68K) 16 APR 2004 02:38 % so we'll define it if necessary. % \ifx\Orb\thisisundefined \def\Orb{\mathhexbox20D} \fi % Quotes. \chardef\quoteleft=`\` \chardef\quoteright=`\' % only change font for tt for correct kerning and to avoid using % \ecfont unless necessary. \def\quotedblleft{% \ifmonospace{\ecfont\char"10}\else{\char"5C}\fi } \def\quotedblright{% \ifmonospace{\ecfont\char"11}\else{\char`\"}\fi } \message{page headings,} \newskip\titlepagetopglue \titlepagetopglue = 1.5in \newskip\titlepagebottomglue \titlepagebottomglue = 2pc % First the title page. Must do @settitle before @titlepage. \newif\ifseenauthor \newif\iffinishedtitlepage % @setcontentsaftertitlepage used to do an implicit @contents or % @shortcontents after @end titlepage, but it is now obsolete. \def\setcontentsaftertitlepage{% \errmessage{@setcontentsaftertitlepage has been removed as a Texinfo command; move your @contents command if you want the contents after the title page.}}% \def\setshortcontentsaftertitlepage{% \errmessage{@setshortcontentsaftertitlepage has been removed as a Texinfo command; move your @shortcontents and @contents commands if you want the contents after the title page.}}% \parseargdef\shorttitlepage{% \begingroup \hbox{}\vskip 1.5in \chaprm \centerline{#1}% \endgroup\page\hbox{}\page} \envdef\titlepage{% % Open one extra group, as we want to close it in the middle of \Etitlepage. \begingroup \parindent=0pt \textfonts % Leave some space at the very top of the page. \vglue\titlepagetopglue % No rule at page bottom unless we print one at the top with @title. \finishedtitlepagetrue % % Most title ``pages'' are actually two pages long, with space % at the top of the second. We don't want the ragged left on the second. \let\oldpage = \page \def\page{% \iffinishedtitlepage\else \finishtitlepage \fi \let\page = \oldpage \page \null }% } \def\Etitlepage{% \iffinishedtitlepage\else \finishtitlepage \fi % It is important to do the page break before ending the group, % because the headline and footline are only empty inside the group. % If we use the new definition of \page, we always get a blank page % after the title page, which we certainly don't want. \oldpage \endgroup % % Need this before the \...aftertitlepage checks so that if they are % in effect the toc pages will come out with page numbers. \HEADINGSon } \def\finishtitlepage{% \vskip4pt \hrule height 2pt width \hsize \vskip\titlepagebottomglue \finishedtitlepagetrue } % Settings used for typesetting titles: no hyphenation, no indentation, % don't worry much about spacing, ragged right. This should be used % inside a \vbox, and fonts need to be set appropriately first. \par should % be specified before the end of the \vbox, since a vbox is a group. % \def\raggedtitlesettings{% \rm \hyphenpenalty=10000 \parindent=0pt \tolerance=5000 \ptexraggedright } % Macros to be used within @titlepage: \let\subtitlerm=\rmfont \def\subtitlefont{\subtitlerm \normalbaselineskip = 13pt \normalbaselines} \parseargdef\title{% \checkenv\titlepage \vbox{\titlefonts \raggedtitlesettings #1\par}% % print a rule at the page bottom also. \finishedtitlepagefalse \vskip4pt \hrule height 4pt width \hsize \vskip4pt } \parseargdef\subtitle{% \checkenv\titlepage {\subtitlefont \rightline{#1}}% } % @author should come last, but may come many times. % It can also be used inside @quotation. % \parseargdef\author{% \def\temp{\quotation}% \ifx\thisenv\temp \def\quotationauthor{#1}% printed in \Equotation. \else \checkenv\titlepage \ifseenauthor\else \vskip 0pt plus 1filll \seenauthortrue \fi {\secfonts\rm \leftline{#1}}% \fi } % Set up page headings and footings. \let\thispage=\folio \newtoks\evenheadline % headline on even pages \newtoks\oddheadline % headline on odd pages \newtoks\evenchapheadline% headline on even pages with a new chapter \newtoks\oddchapheadline % headline on odd pages with a new chapter \newtoks\evenfootline % footline on even pages \newtoks\oddfootline % footline on odd pages % Now make \makeheadline and \makefootline in Plain TeX use those variables \headline={{\textfonts\rm \ifchapterpage \ifodd\pageno\the\oddchapheadline\else\the\evenchapheadline\fi \else \ifodd\pageno\the\oddheadline\else\the\evenheadline\fi \fi}} \footline={{\textfonts\rm \ifodd\pageno \the\oddfootline \else \the\evenfootline \fi}\HEADINGShook} \let\HEADINGShook=\relax % Commands to set those variables. % For example, this is what @headings on does % @evenheading @thistitle|@thispage|@thischapter % @oddheading @thischapter|@thispage|@thistitle % @evenfooting @thisfile|| % @oddfooting ||@thisfile \def\evenheading{\parsearg\evenheadingxxx} \def\evenheadingxxx #1{\evenheadingyyy #1\|\|\|\|\finish} \def\evenheadingyyy #1\|#2\|#3\|#4\finish{% \global\evenheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}} \global\evenchapheadline=\evenheadline} \def\oddheading{\parsearg\oddheadingxxx} \def\oddheadingxxx #1{\oddheadingyyy #1\|\|\|\|\finish} \def\oddheadingyyy #1\|#2\|#3\|#4\finish{% \global\oddheadline={\rlap{\centerline{#2}}\line{#1\hfil#3}}% \global\oddchapheadline=\oddheadline} \parseargdef\everyheading{\oddheadingxxx{#1}\evenheadingxxx{#1}}% \def\evenfooting{\parsearg\evenfootingxxx} \def\evenfootingxxx #1{\evenfootingyyy #1\|\|\|\|\finish} \def\evenfootingyyy #1\|#2\|#3\|#4\finish{% \global\evenfootline={\rlap{\centerline{#2}}\line{#1\hfil#3}}} \def\oddfooting{\parsearg\oddfootingxxx} \def\oddfootingxxx #1{\oddfootingyyy #1\|\|\|\|\finish} \def\oddfootingyyy #1\|#2\|#3\|#4\finish{% \global\oddfootline = {\rlap{\centerline{#2}}\line{#1\hfil#3}}% % % Leave some space for the footline. Hopefully ok to assume % @evenfooting will not be used by itself. \global\advance\txipageheight by -12pt \global\advance\vsize by -12pt } \parseargdef\everyfooting{\oddfootingxxx{#1}\evenfootingxxx{#1}} % @evenheadingmarks top \thischapter <- chapter at the top of a page % @evenheadingmarks bottom \thischapter <- chapter at the bottom of a page % % The same set of arguments for: % % @oddheadingmarks % @evenfootingmarks % @oddfootingmarks % @everyheadingmarks % @everyfootingmarks % These define \getoddheadingmarks, \getevenheadingmarks, % \getoddfootingmarks, and \getevenfootingmarks, each to one of % \gettopheadingmarks, \getbottomheadingmarks. % \def\evenheadingmarks{\headingmarks{even}{heading}} \def\oddheadingmarks{\headingmarks{odd}{heading}} \def\evenfootingmarks{\headingmarks{even}{footing}} \def\oddfootingmarks{\headingmarks{odd}{footing}} \parseargdef\everyheadingmarks{\headingmarks{even}{heading}{#1} \headingmarks{odd}{heading}{#1} } \parseargdef\everyfootingmarks{\headingmarks{even}{footing}{#1} \headingmarks{odd}{footing}{#1} } % #1 = even/odd, #2 = heading/footing, #3 = top/bottom. \def\headingmarks#1#2#3 {% \expandafter\let\expandafter\temp \csname get#3headingmarks\endcsname \global\expandafter\let\csname get#1#2marks\endcsname \temp } \everyheadingmarks bottom \everyfootingmarks bottom % @headings double turns headings on for double-sided printing. % @headings single turns headings on for single-sided printing. % @headings off turns them off. % @headings on same as @headings double, retained for compatibility. % @headings after turns on double-sided headings after this page. % @headings doubleafter turns on double-sided headings after this page. % @headings singleafter turns on single-sided headings after this page. % By default, they are off at the start of a document, % and turned `on' after @end titlepage. \parseargdef\headings{\csname HEADINGS#1\endcsname} \def\headingsoff{% non-global headings elimination \evenheadline={\hfil}\evenfootline={\hfil}\evenchapheadline={\hfil}% \oddheadline={\hfil}\oddfootline={\hfil}\oddchapheadline={\hfil}% } \def\HEADINGSoff{{\globaldefs=1 \headingsoff}} % global setting \HEADINGSoff % it's the default % When we turn headings on, set the page number to 1. \def\pageone{ \global\pageno=1 \global\arabiccount = \pagecount } % For double-sided printing, put current file name in lower left corner, % chapter name on inside top of right hand pages, document % title on inside top of left hand pages, and page numbers on outside top % edge of all pages. \def\HEADINGSdouble{% \pageone \HEADINGSdoublex } \let\contentsalignmacro = \chappager % For single-sided printing, chapter title goes across top left of page, % page number on top right. \def\HEADINGSsingle{% \pageone \HEADINGSsinglex } \def\HEADINGSon{\HEADINGSdouble} \def\HEADINGSafter{\let\HEADINGShook=\HEADINGSdoublex} \let\HEADINGSdoubleafter=\HEADINGSafter \def\HEADINGSdoublex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\folio\hfil\thistitle}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\evenchapheadline={\line{\folio\hfil}} \global\oddchapheadline={\line{\hfil\folio}} \global\let\contentsalignmacro = \chapoddpage } \def\HEADINGSsingleafter{\let\HEADINGShook=\HEADINGSsinglex} \def\HEADINGSsinglex{% \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\evenchapheadline={\line{\hfil\folio}} \global\oddchapheadline={\line{\hfil\folio}} \global\let\contentsalignmacro = \chappager } % for @setchapternewpage off \def\HEADINGSsinglechapoff{% \pageone \global\evenfootline={\hfil} \global\oddfootline={\hfil} \global\evenheadline={\line{\thischapter\hfil\folio}} \global\oddheadline={\line{\thischapter\hfil\folio}} \global\evenchapheadline=\evenheadline \global\oddchapheadline=\oddheadline \global\let\contentsalignmacro = \chappager } % Subroutines used in generating headings % This produces Day Month Year style of output. % Only define if not already defined, in case a txi-??.tex file has set % up a different format (e.g., txi-cs.tex does this). \ifx\today\thisisundefined \def\today{% \number\day\space \ifcase\month \or\putwordMJan\or\putwordMFeb\or\putwordMMar\or\putwordMApr \or\putwordMMay\or\putwordMJun\or\putwordMJul\or\putwordMAug \or\putwordMSep\or\putwordMOct\or\putwordMNov\or\putwordMDec \fi \space\number\year} \fi % @settitle line... specifies the title of the document, for headings. % It generates no output of its own. \def\thistitle{\putwordNoTitle} \def\settitle{\parsearg{\gdef\thistitle}} \message{tables,} % Tables -- @table, @ftable, @vtable, @item(x). % default indentation of table text \newdimen\tableindent \tableindent=.8in % default indentation of @itemize and @enumerate text \newdimen\itemindent \itemindent=.3in % margin between end of table item and start of table text. \newdimen\itemmargin \itemmargin=.1in % used internally for \itemindent minus \itemmargin \newdimen\itemmax % Note @table, @ftable, and @vtable define @item, @itemx, etc., with % these defs. % They also define \itemindex % to index the item name in whatever manner is desired (perhaps none). \newif\ifitemxneedsnegativevskip \def\itemxpar{\par\ifitemxneedsnegativevskip\nobreak\vskip-\parskip\nobreak\fi} \def\internalBitem{\smallbreak \parsearg\itemzzz} \def\internalBitemx{\itemxpar \parsearg\itemzzz} \def\itemzzz #1{\begingroup % \advance\hsize by -\rightskip \advance\hsize by -\tableindent \setbox0=\hbox{\itemindicate{#1}}% \itemindex{#1}% \nobreak % This prevents a break before @itemx. % % If the item text does not fit in the space we have, put it on a line % by itself, and do not allow a page break either before or after that % line. We do not start a paragraph here because then if the next % command is, e.g., @kindex, the whatsit would get put into the % horizontal list on a line by itself, resulting in extra blank space. \ifdim \wd0>\itemmax % % Make this a paragraph so we get the \parskip glue and wrapping, % but leave it ragged-right. \begingroup \advance\leftskip by-\tableindent \advance\hsize by\tableindent \advance\rightskip by0pt plus1fil\relax \leavevmode\unhbox0\par \endgroup % % We're going to be starting a paragraph, but we don't want the % \parskip glue -- logically it's part of the @item we just started. \nobreak \vskip-\parskip % % Stop a page break at the \parskip glue coming up. However, if % what follows is an environment such as @example, there will be no % \parskip glue; then the negative vskip we just inserted would % cause the example and the item to crash together. So we use this % bizarre value of 10001 as a signal to \aboveenvbreak to insert % \parskip glue after all. Section titles are handled this way also. % \penalty 10001 \endgroup \itemxneedsnegativevskipfalse \else % The item text fits into the space. Start a paragraph, so that the % following text (if any) will end up on the same line. \noindent % Do this with kerns and \unhbox so that if there is a footnote in % the item text, it can migrate to the main vertical list and % eventually be printed. \nobreak\kern-\tableindent \dimen0 = \itemmax \advance\dimen0 by \itemmargin \advance\dimen0 by -\wd0 \unhbox0 \nobreak\kern\dimen0 \endgroup \itemxneedsnegativevskiptrue \fi } \def\item{\errmessage{@item while not in a list environment}} \def\itemx{\errmessage{@itemx while not in a list environment}} % @table, @ftable, @vtable. \envdef\table{% \let\itemindex\gobble \tablecheck{table}% } \envdef\ftable{% \def\itemindex ##1{\doind {fn}{\code{##1}}}% \tablecheck{ftable}% } \envdef\vtable{% \def\itemindex ##1{\doind {vr}{\code{##1}}}% \tablecheck{vtable}% } \def\tablecheck#1{% \ifnum \the\catcode`\^^M=\active \endgroup \errmessage{This command won't work in this context; perhaps the problem is that we are \inenvironment\thisenv}% \def\next{\doignore{#1}}% \else \let\next\tablex \fi \next } \def\tablex#1{% \def\itemindicate{#1}% \parsearg\tabley } \def\tabley#1{% {% \makevalueexpandable \edef\temp{\noexpand\tablez #1\space\space\space}% \expandafter }\temp \endtablez } \def\tablez #1 #2 #3 #4\endtablez{% \aboveenvbreak \ifnum 0#1>0 \advance \leftskip by #1\mil \fi \ifnum 0#2>0 \tableindent=#2\mil \fi \ifnum 0#3>0 \advance \rightskip by #3\mil \fi \itemmax=\tableindent \advance \itemmax by -\itemmargin \advance \leftskip by \tableindent \exdentamount=\tableindent \parindent = 0pt \parskip = \smallskipamount \ifdim \parskip=0pt \parskip=2pt \fi \let\item = \internalBitem \let\itemx = \internalBitemx } \def\Etable{\endgraf\afterenvbreak} \let\Eftable\Etable \let\Evtable\Etable \let\Eitemize\Etable \let\Eenumerate\Etable % This is the counter used by @enumerate, which is really @itemize \newcount \itemno \envdef\itemize{\parsearg\doitemize} \def\doitemize#1{% \aboveenvbreak \itemmax=\itemindent \advance\itemmax by -\itemmargin \advance\leftskip by \itemindent \exdentamount=\itemindent \parindent=0pt \parskip=\smallskipamount \ifdim\parskip=0pt \parskip=2pt \fi % % Try typesetting the item mark so that if the document erroneously says % something like @itemize @samp (intending @table), there's an error % right away at the @itemize. It's not the best error message in the % world, but it's better than leaving it to the @item. This means if % the user wants an empty mark, they have to say @w{} not just @w. \def\itemcontents{#1}% \setbox0 = \hbox{\itemcontents}% % % @itemize with no arg is equivalent to @itemize @bullet. \ifx\itemcontents\empty\def\itemcontents{\bullet}\fi % \let\item=\itemizeitem } % Definition of @item while inside @itemize and @enumerate. % \def\itemizeitem{% \advance\itemno by 1 % for enumerations {\let\par=\endgraf \smallbreak}% reasonable place to break {% % If the document has an @itemize directly after a section title, a % \nobreak will be last on the list, and \sectionheading will have % done a \vskip-\parskip. In that case, we don't want to zero % parskip, or the item text will crash with the heading. On the % other hand, when there is normal text preceding the item (as there % usually is), we do want to zero parskip, or there would be too much % space. In that case, we won't have a \nobreak before. At least % that's the theory. \ifnum\lastpenalty<10000 \parskip=0in \fi \noindent \hbox to 0pt{\hss \itemcontents \kern\itemmargin}% % \ifinner\else \vadjust{\penalty 1200}% not good to break after first line of item. \fi % We can be in inner vertical mode in a footnote, although an % @itemize looks awful there. }% \flushcr } % \splitoff TOKENS\endmark defines \first to be the first token in % TOKENS, and \rest to be the remainder. % \def\splitoff#1#2\endmark{\def\first{#1}\def\rest{#2}}% % Allow an optional argument of an uppercase letter, lowercase letter, % or number, to specify the first label in the enumerated list. No % argument is the same as `1'. % \envparseargdef\enumerate{\enumeratey #1 \endenumeratey} \def\enumeratey #1 #2\endenumeratey{% % If we were given no argument, pretend we were given `1'. \def\thearg{#1}% \ifx\thearg\empty \def\thearg{1}\fi % % Detect if the argument is a single token. If so, it might be a % letter. Otherwise, the only valid thing it can be is a number. % (We will always have one token, because of the test we just made. % This is a good thing, since \splitoff doesn't work given nothing at % all -- the first parameter is undelimited.) \expandafter\splitoff\thearg\endmark \ifx\rest\empty % Only one token in the argument. It could still be anything. % A ``lowercase letter'' is one whose \lccode is nonzero. % An ``uppercase letter'' is one whose \lccode is both nonzero, and % not equal to itself. % Otherwise, we assume it's a number. % % We need the \relax at the end of the \ifnum lines to stop TeX from % continuing to look for a . % \ifnum\lccode\expandafter`\thearg=0\relax \numericenumerate % a number (we hope) \else % It's a letter. \ifnum\lccode\expandafter`\thearg=\expandafter`\thearg\relax \lowercaseenumerate % lowercase letter \else \uppercaseenumerate % uppercase letter \fi \fi \else % Multiple tokens in the argument. We hope it's a number. \numericenumerate \fi } % An @enumerate whose labels are integers. The starting integer is % given in \thearg. % \def\numericenumerate{% \itemno = \thearg \startenumeration{\the\itemno}% } % The starting (lowercase) letter is in \thearg. \def\lowercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more lowercase letters in @enumerate; get a bigger alphabet}% \fi \char\lccode\itemno }% } % The starting (uppercase) letter is in \thearg. \def\uppercaseenumerate{% \itemno = \expandafter`\thearg \startenumeration{% % Be sure we're not beyond the end of the alphabet. \ifnum\itemno=0 \errmessage{No more uppercase letters in @enumerate; get a bigger alphabet} \fi \char\uccode\itemno }% } % Call \doitemize, adding a period to the first argument and supplying the % common last two arguments. Also subtract one from the initial value in % \itemno, since @item increments \itemno. % \def\startenumeration#1{% \advance\itemno by -1 \doitemize{#1.}\flushcr } % @multitable macros % Macros used to set up halign preamble: % \let\endsetuptable\relax \def\xendsetuptable{\endsetuptable} \let\columnfractions\relax \def\xcolumnfractions{\columnfractions} \newif\ifsetpercent % #1 is the @columnfraction, usually a decimal number like .5, but might % be just 1. We just use it, whatever it is. % \def\pickupwholefraction#1 {% \global\advance\colcount by 1 \expandafter\xdef\csname col\the\colcount\endcsname{#1\hsize}% \setuptable } \newcount\colcount \def\setuptable#1{% \def\firstarg{#1}% \ifx\firstarg\xendsetuptable \let\go = \relax \else \ifx\firstarg\xcolumnfractions \global\setpercenttrue \else \ifsetpercent \let\go\pickupwholefraction \else \global\advance\colcount by 1 \setbox0=\hbox{#1\unskip\space}% Add a normal word space as a % separator; typically that is always in the input, anyway. \expandafter\xdef\csname col\the\colcount\endcsname{\the\wd0}% \fi \fi \ifx\go\pickupwholefraction % Put the argument back for the \pickupwholefraction call, so % we'll always have a period there to be parsed. \def\go{\pickupwholefraction#1}% \else \let\go = \setuptable \fi% \fi \go } % @headitem starts a heading row, which we typeset in bold. Assignments % have to be global since we are inside the implicit group of an % alignment entry. \everycr below resets \everytab so we don't have to % undo it ourselves. \def\headitemfont{\b}% for people to use in the template row; not changeable \def\headitem{% \checkenv\multitable \crcr \gdef\headitemcrhook{\nobreak}% attempt to avoid page break after headings \global\everytab={\bf}% can't use \headitemfont since the parsing differs \the\everytab % for the first item }% % % default for tables with no headings. \let\headitemcrhook=\relax % \def\tab{\checkenv\multitable &\the\everytab}% \newtoks\everytab % insert after every tab. % \envdef\multitable{% \vskip\parskip \startsavinginserts % % @item within a multitable starts a normal row. % We use \def instead of \let so that if one of the multitable entries % contains an @itemize, we don't choke on the \item (seen as \crcr aka % \endtemplate) expanding \doitemize. \def\item{\crcr}% % \tolerance=9500 \hbadness=9500 \parskip=0pt \parindent=6pt \overfullrule=0pt \global\colcount=0 % \everycr = {% \noalign{% \global\everytab={}% Reset from possible headitem. \global\colcount=0 % Reset the column counter. % % Check for saved footnotes, etc.: \checkinserts % % Perhaps a \nobreak, then reset: \headitemcrhook \global\let\headitemcrhook=\relax }% }% % \parsearg\domultitable } \def\domultitable#1{% % To parse everything between @multitable and @item: \setuptable#1 \endsetuptable % % This preamble sets up a generic column definition, which will % be used as many times as user calls for columns. % \vtop will set a single line and will also let text wrap and % continue for many paragraphs if desired. \halign\bgroup &% \global\advance\colcount by 1 \strut \vtop{% \advance\hsize by -1\leftskip % Find the correct column width \hsize=\expandafter\csname col\the\colcount\endcsname % \advance\rightskip by -1\rightskip % Zero leaving only any stretch \ifnum\colcount=1 \advance\hsize by\leftskip % Add indent of surrounding text \else % In order to keep entries from bumping into each other. \leftskip=12pt \ifsetpercent \else % If a template has been used \advance\hsize by \leftskip \fi \fi \noindent\ignorespaces##\unskip\strut }\cr } \def\Emultitable{% \crcr \egroup % end the \halign \global\setpercentfalse } \message{conditionals,} % @iftex, @ifnotdocbook, @ifnothtml, @ifnotinfo, @ifnotplaintext, % @ifnotxml always succeed. They currently do nothing; we don't % attempt to check whether the conditionals are properly nested. But we % have to remember that they are conditionals, so that @end doesn't % attempt to close an environment group. % \def\makecond#1{% \expandafter\let\csname #1\endcsname = \relax \expandafter\let\csname iscond.#1\endcsname = 1 } \makecond{iftex} \makecond{ifnotdocbook} \makecond{ifnothtml} \makecond{ifnotinfo} \makecond{ifnotplaintext} \makecond{ifnotxml} % Ignore @ignore, @ifhtml, @ifinfo, and the like. % \def\direntry{\doignore{direntry}} \def\documentdescription{\doignore{documentdescription}} \def\docbook{\doignore{docbook}} \def\html{\doignore{html}} \def\ifdocbook{\doignore{ifdocbook}} \def\ifhtml{\doignore{ifhtml}} \def\ifinfo{\doignore{ifinfo}} \def\ifnottex{\doignore{ifnottex}} \def\ifplaintext{\doignore{ifplaintext}} \def\ifxml{\doignore{ifxml}} \def\ignore{\doignore{ignore}} \def\menu{\doignore{menu}} \def\xml{\doignore{xml}} % Ignore text until a line `@end #1', keeping track of nested conditionals. % % A count to remember the depth of nesting. \newcount\doignorecount \def\doignore#1{\begingroup % Scan in ``verbatim'' mode: \obeylines \catcode`\@ = \other \catcode`\{ = \other \catcode`\} = \other % % Make sure that spaces turn into tokens that match what \doignoretext wants. \spaceisspace % % Count number of #1's that we've seen. \doignorecount = 0 % % Swallow text until we reach the matching `@end #1'. \dodoignore{#1}% } { \catcode`_=11 % We want to use \_STOP_ which cannot appear in texinfo source. \obeylines % % \gdef\dodoignore#1{% % #1 contains the command name as a string, e.g., `ifinfo'. % % Define a command to find the next `@end #1'. \long\def\doignoretext##1^^M@end #1{% \doignoretextyyy##1^^M@#1\_STOP_}% % % And this command to find another #1 command, at the beginning of a % line. (Otherwise, we would consider a line `@c @ifset', for % example, to count as an @ifset for nesting.) \long\def\doignoretextyyy##1^^M@#1##2\_STOP_{\doignoreyyy{##2}\_STOP_}% % % And now expand that command. \doignoretext ^^M% }% } \def\doignoreyyy#1{% \def\temp{#1}% \ifx\temp\empty % Nothing found. \let\next\doignoretextzzz \else % Found a nested condition, ... \advance\doignorecount by 1 \let\next\doignoretextyyy % ..., look for another. % If we're here, #1 ends with ^^M\ifinfo (for example). \fi \next #1% the token \_STOP_ is present just after this macro. } % We have to swallow the remaining "\_STOP_". % \def\doignoretextzzz#1{% \ifnum\doignorecount = 0 % We have just found the outermost @end. \let\next\enddoignore \else % Still inside a nested condition. \advance\doignorecount by -1 \let\next\doignoretext % Look for the next @end. \fi \next } % Finish off ignored text. { \obeylines% % Ignore anything after the last `@end #1'; this matters in verbatim % environments, where otherwise the newline after an ignored conditional % would result in a blank line in the output. \gdef\enddoignore#1^^M{\endgroup\ignorespaces}% } % @set VAR sets the variable VAR to an empty value. % @set VAR REST-OF-LINE sets VAR to the value REST-OF-LINE. % % Since we want to separate VAR from REST-OF-LINE (which might be % empty), we can't just use \parsearg; we have to insert a space of our % own to delimit the rest of the line, and then take it out again if we % didn't need it. % We rely on the fact that \parsearg sets \catcode`\ =10. % \parseargdef\set{\setyyy#1 \endsetyyy} \def\setyyy#1 #2\endsetyyy{% {% \makevalueexpandable \def\temp{#2}% \edef\next{\gdef\makecsname{SET#1}}% \ifx\temp\empty \next{}% \else \setzzz#2\endsetzzz \fi }% } % Remove the trailing space \setxxx inserted. \def\setzzz#1 \endsetzzz{\next{#1}} % @clear VAR clears (i.e., unsets) the variable VAR. % \parseargdef\clear{% {% \makevalueexpandable \global\expandafter\let\csname SET#1\endcsname=\relax }% } % @value{foo} gets the text saved in variable foo. \def\value{\begingroup\makevalueexpandable\valuexxx} \def\valuexxx#1{\expandablevalue{#1}\endgroup} { \catcode`\-=\active \catcode`\_=\active % \gdef\makevalueexpandable{% \let\value = \expandablevalue % We don't want these characters active, ... \catcode`\-=\other \catcode`\_=\other % ..., but we might end up with active ones in the argument if % we're called from @code, as @code{@value{foo-bar_}}, though. % So \let them to their normal equivalents. \let-\normaldash \let_\normalunderscore } } \def\expandablevalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax {[No value for ``#1'']}% \message{Variable `#1', used in @value, is not set.}% \else \csname SET#1\endcsname \fi } % Like \expandablevalue, but completely expandable (the \message in the % definition above operates at the execution level of TeX). Used when % writing to auxiliary files, due to the expansion that \write does. % If flag is undefined, pass through an unexpanded @value command: maybe it % will be set by the time it is read back in. % % NB flag names containing - or _ may not work here. \def\dummyvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax \string\value{#1}% \else \csname SET#1\endcsname \fi } % Used for @value's in index entries to form the sort key: expand the @value % if possible, otherwise sort late. \def\indexnofontsvalue#1{% \expandafter\ifx\csname SET#1\endcsname\relax ZZZZZZZ% \else \csname SET#1\endcsname \fi } % @ifset VAR ... @end ifset reads the `...' iff VAR has been defined % with @set. % % To get the special treatment we need for `@end ifset,' we call % \makecond and then redefine. % \makecond{ifset} \def\ifset{\parsearg{\doifset{\let\next=\ifsetfail}}} \def\doifset#1#2{% {% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname SET#2\endcsname\relax #1% If not set, redefine \next. \fi \expandafter }\next } \def\ifsetfail{\doignore{ifset}} % @ifclear VAR ... @end executes the `...' iff VAR has never been % defined with @set, or has been undefined with @clear. % % The `\else' inside the `\doifset' parameter is a trick to reuse the % above code: if the variable is not set, do nothing, if it is set, % then redefine \next to \ifclearfail. % \makecond{ifclear} \def\ifclear{\parsearg{\doifset{\else \let\next=\ifclearfail}}} \def\ifclearfail{\doignore{ifclear}} % @ifcommandisdefined CMD ... @end executes the `...' if CMD (written % without the @) is in fact defined. We can only feasibly check at the % TeX level, so something like `mathcode' is going to considered % defined even though it is not a Texinfo command. % \makecond{ifcommanddefined} \def\ifcommanddefined{\parsearg{\doifcmddefined{\let\next=\ifcmddefinedfail}}} % \def\doifcmddefined#1#2{{% \makevalueexpandable \let\next=\empty \expandafter\ifx\csname #2\endcsname\relax #1% If not defined, \let\next as above. \fi \expandafter }\next } \def\ifcmddefinedfail{\doignore{ifcommanddefined}} % @ifcommandnotdefined CMD ... handled similar to @ifclear above. \makecond{ifcommandnotdefined} \def\ifcommandnotdefined{% \parsearg{\doifcmddefined{\else \let\next=\ifcmdnotdefinedfail}}} \def\ifcmdnotdefinedfail{\doignore{ifcommandnotdefined}} % Set the `txicommandconditionals' variable, so documents have a way to % test if the @ifcommand...defined conditionals are available. \set txicommandconditionals % @dircategory CATEGORY -- specify a category of the dir file % which this file should belong to. Ignore this in TeX. \let\dircategory=\comment % @defininfoenclose. \let\definfoenclose=\comment \message{indexing,} % Index generation facilities % Define \newwrite to be identical to plain tex's \newwrite % except not \outer, so it can be used within macros and \if's. \edef\newwrite{\makecsname{ptexnewwrite}} % \newindex {foo} defines an index named IX. % It automatically defines \IXindex such that % \IXindex ...rest of line... puts an entry in the index IX. % It also defines \IXindfile to be the number of the output channel for % the file that accumulates this index. The file's extension is IX. % The name of an index should be no more than 2 characters long % for the sake of vms. % \def\newindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% % Define @#1index \noexpand\doindex{#1}} } % @defindex foo == \newindex{foo} % \def\defindex{\parsearg\newindex} % Define @defcodeindex, like @defindex except put all entries in @code. % \def\defcodeindex{\parsearg\newcodeindex} % \def\newcodeindex#1{% \expandafter\chardef\csname#1indfile\endcsname=0 \expandafter\xdef\csname#1index\endcsname{% \noexpand\docodeindex{#1}}% } % The default indices: \newindex{cp}% concepts, \newcodeindex{fn}% functions, \newcodeindex{vr}% variables, \newcodeindex{tp}% types, \newcodeindex{ky}% keys \newcodeindex{pg}% and programs. % @synindex foo bar makes index foo feed into index bar. % Do this instead of @defindex foo if you don't want it as a separate index. % % @syncodeindex foo bar similar, but put all entries made for index foo % inside @code. % \def\synindex#1 #2 {\dosynindex\doindex{#1}{#2}} \def\syncodeindex#1 #2 {\dosynindex\docodeindex{#1}{#2}} % #1 is \doindex or \docodeindex, #2 the index getting redefined (foo), % #3 the target index (bar). \def\dosynindex#1#2#3{% \requireopenindexfile{#3}% % redefine \fooindfile: \expandafter\let\expandafter\temp\expandafter=\csname#3indfile\endcsname \expandafter\let\csname#2indfile\endcsname=\temp % redefine \fooindex: \expandafter\xdef\csname#2index\endcsname{\noexpand#1{#3}}% } % Define \doindex, the driver for all index macros. % Argument #1 is generated by the calling \fooindex macro, % and it is the two-letter name of the index. \def\doindex#1{\edef\indexname{#1}\parsearg\doindexxxx} \def\doindexxxx #1{\doind{\indexname}{#1}} % like the previous two, but they put @code around the argument. \def\docodeindex#1{\edef\indexname{#1}\parsearg\docodeindexxxx} \def\docodeindexxxx #1{\docind{\indexname}{#1}} % Used for the aux, toc and index files to prevent expansion of Texinfo % commands. % \def\atdummies{% \definedummyletter\@% \definedummyletter\ % \definedummyletter\{% \definedummyletter\}% \definedummyletter\&% % % Do the redefinitions. \definedummies \otherbackslash } % \definedummyword defines \#1 as \string\#1\space, thus effectively % preventing its expansion. This is used only for control words, % not control letters, because the \space would be incorrect for % control characters, but is needed to separate the control word % from whatever follows. % % These can be used both for control words that take an argument and % those that do not. If it is followed by {arg} in the input, then % that will dutifully get written to the index (or wherever). % % For control letters, we have \definedummyletter, which omits the % space. % \def\definedummyword #1{\def#1{\string#1\space}}% \def\definedummyletter#1{\def#1{\string#1}}% \let\definedummyaccent\definedummyletter % Called from \atdummies to prevent the expansion of commands. % \def\definedummies{% % \let\commondummyword\definedummyword \let\commondummyletter\definedummyletter \let\commondummyaccent\definedummyaccent \commondummiesnofonts % \definedummyletter\_% \definedummyletter\-% % % Non-English letters. \definedummyword\AA \definedummyword\AE \definedummyword\DH \definedummyword\L \definedummyword\O \definedummyword\OE \definedummyword\TH \definedummyword\aa \definedummyword\ae \definedummyword\dh \definedummyword\exclamdown \definedummyword\l \definedummyword\o \definedummyword\oe \definedummyword\ordf \definedummyword\ordm \definedummyword\questiondown \definedummyword\ss \definedummyword\th % % Although these internal commands shouldn't show up, sometimes they do. \definedummyword\bf \definedummyword\gtr \definedummyword\hat \definedummyword\less \definedummyword\sf \definedummyword\sl \definedummyword\tclose \definedummyword\tt % \definedummyword\LaTeX \definedummyword\TeX % % Assorted special characters. \definedummyword\ampchar \definedummyword\atchar \definedummyword\arrow \definedummyword\backslashchar \definedummyword\bullet \definedummyword\comma \definedummyword\copyright \definedummyword\registeredsymbol \definedummyword\dots \definedummyword\enddots \definedummyword\entrybreak \definedummyword\equiv \definedummyword\error \definedummyword\euro \definedummyword\expansion \definedummyword\geq \definedummyword\guillemetleft \definedummyword\guillemetright \definedummyword\guilsinglleft \definedummyword\guilsinglright \definedummyword\lbracechar \definedummyword\leq \definedummyword\mathopsup \definedummyword\minus \definedummyword\ogonek \definedummyword\pounds \definedummyword\point \definedummyword\print \definedummyword\quotedblbase \definedummyword\quotedblleft \definedummyword\quotedblright \definedummyword\quoteleft \definedummyword\quoteright \definedummyword\quotesinglbase \definedummyword\rbracechar \definedummyword\result \definedummyword\sub \definedummyword\sup \definedummyword\textdegree % \definedummyword\subentry % % We want to disable all macros so that they are not expanded by \write. \macrolist \let\value\dummyvalue % \normalturnoffactive } % \commondummiesnofonts: common to \definedummies and \indexnofonts. % Define \commondummyletter, \commondummyaccent and \commondummyword before % using. Used for accents, font commands, and various control letters. % \def\commondummiesnofonts{% % Control letters and accents. \commondummyletter\!% \commondummyaccent\"% \commondummyaccent\'% \commondummyletter\*% \commondummyaccent\,% \commondummyletter\.% \commondummyletter\/% \commondummyletter\:% \commondummyaccent\=% \commondummyletter\?% \commondummyaccent\^% \commondummyaccent\`% \commondummyaccent\~% \commondummyword\u \commondummyword\v \commondummyword\H \commondummyword\dotaccent \commondummyword\ogonek \commondummyword\ringaccent \commondummyword\tieaccent \commondummyword\ubaraccent \commondummyword\udotaccent \commondummyword\dotless % % Texinfo font commands. \commondummyword\b \commondummyword\i \commondummyword\r \commondummyword\sansserif \commondummyword\sc \commondummyword\slanted \commondummyword\t % % Commands that take arguments. \commondummyword\abbr \commondummyword\acronym \commondummyword\anchor \commondummyword\cite \commondummyword\code \commondummyword\command \commondummyword\dfn \commondummyword\dmn \commondummyword\email \commondummyword\emph \commondummyword\env \commondummyword\file \commondummyword\image \commondummyword\indicateurl \commondummyword\inforef \commondummyword\kbd \commondummyword\key \commondummyword\math \commondummyword\option \commondummyword\pxref \commondummyword\ref \commondummyword\samp \commondummyword\strong \commondummyword\tie \commondummyword\U \commondummyword\uref \commondummyword\url \commondummyword\var \commondummyword\verb \commondummyword\w \commondummyword\xref } \let\indexlbrace\relax \let\indexrbrace\relax \let\indexatchar\relax \let\indexbackslash\relax {\catcode`\@=0 \catcode`\\=13 @gdef@backslashdisappear{@def\{}} } { \catcode`\<=13 \catcode`\-=13 \catcode`\`=13 \gdef\indexnonalnumdisappear{% \expandafter\ifx\csname SETtxiindexlquoteignore\endcsname\relax\else % @set txiindexlquoteignore makes us ignore left quotes in the sort term. % (Introduced for FSFS 2nd ed.) \let`=\empty \fi % \expandafter\ifx\csname SETtxiindexbackslashignore\endcsname\relax\else \backslashdisappear \fi % \expandafter\ifx\csname SETtxiindexhyphenignore\endcsname\relax\else \def-{}% \fi \expandafter\ifx\csname SETtxiindexlessthanignore\endcsname\relax\else \def<{}% \fi \expandafter\ifx\csname SETtxiindexatsignignore\endcsname\relax\else \def\@{}% \fi } \gdef\indexnonalnumreappear{% \let-\normaldash \let<\normalless } } % \indexnofonts is used when outputting the strings to sort the index % by, and when constructing control sequence names. It eliminates all % control sequences and just writes whatever the best ASCII sort string % would be for a given command (usually its argument). % \def\indexnofonts{% % Accent commands should become @asis. \def\commondummyaccent##1{\let##1\asis}% % We can just ignore other control letters. \def\commondummyletter##1{\let##1\empty}% % All control words become @asis by default; overrides below. \let\commondummyword\commondummyaccent \commondummiesnofonts % % Don't no-op \tt, since it isn't a user-level command % and is used in the definitions of the active chars like <, >, |, etc. % Likewise with the other plain tex font commands. %\let\tt=\asis % \def\ { }% \def\@{@}% \def\_{\normalunderscore}% \def\-{}% @- shouldn't affect sorting % \uccode`\1=`\{ \uppercase{\def\{{1}}% \uccode`\1=`\} \uppercase{\def\}{1}}% \let\lbracechar\{% \let\rbracechar\}% % % Non-English letters. \def\AA{AA}% \def\AE{AE}% \def\DH{DZZ}% \def\L{L}% \def\OE{OE}% \def\O{O}% \def\TH{TH}% \def\aa{aa}% \def\ae{ae}% \def\dh{dzz}% \def\exclamdown{!}% \def\l{l}% \def\oe{oe}% \def\ordf{a}% \def\ordm{o}% \def\o{o}% \def\questiondown{?}% \def\ss{ss}% \def\th{th}% % \let\do\indexnofontsdef % \do\LaTeX{LaTeX}% \do\TeX{TeX}% % % Assorted special characters. \do\atchar{@}% \do\arrow{->}% \do\bullet{bullet}% \do\comma{,}% \do\copyright{copyright}% \do\dots{...}% \do\enddots{...}% \do\equiv{==}% \do\error{error}% \do\euro{euro}% \do\expansion{==>}% \do\geq{>=}% \do\guillemetleft{<<}% \do\guillemetright{>>}% \do\guilsinglleft{<}% \do\guilsinglright{>}% \do\leq{<=}% \do\lbracechar{\{}% \do\minus{-}% \do\point{.}% \do\pounds{pounds}% \do\print{-|}% \do\quotedblbase{"}% \do\quotedblleft{"}% \do\quotedblright{"}% \do\quoteleft{`}% \do\quoteright{'}% \do\quotesinglbase{,}% \do\rbracechar{\}}% \do\registeredsymbol{R}% \do\result{=>}% \do\textdegree{o}% % % We need to get rid of all macros, leaving only the arguments (if present). % Of course this is not nearly correct, but it is the best we can do for now. % makeinfo does not expand macros in the argument to @deffn, which ends up % writing an index entry, and texindex isn't prepared for an index sort entry % that starts with \. % % Since macro invocations are followed by braces, we can just redefine them % to take a single TeX argument. The case of a macro invocation that % goes to end-of-line is not handled. % \macrolist \let\value\indexnofontsvalue } % Give the control sequence a definition that removes the {} that follows % its use, e.g. @AA{} -> AA \def\indexnofontsdef#1#2{\def#1##1{#2}}% % #1 is the index name, #2 is the entry text. \def\doind#1#2{% \iflinks {% % \requireopenindexfile{#1}% \edef\writeto{\csname#1indfile\endcsname}% % \def\indextext{#2}% \safewhatsit\doindwrite }% \fi } % Same as \doind, but for code indices \def\docind#1#2{% \iflinks {% % \requireopenindexfile{#1}% \edef\writeto{\csname#1indfile\endcsname}% % \def\indextext{#2}% \safewhatsit\docindwrite }% \fi } % Check if an index file has been opened, and if not, open it. \def\requireopenindexfile#1{% \ifnum\csname #1indfile\endcsname=0 \expandafter\newwrite \csname#1indfile\endcsname \edef\suffix{#1}% % A .fls suffix would conflict with the file extension for the output % of -recorder, so use .f1s instead. \ifx\suffix\indexisfl\def\suffix{f1}\fi % Open the file \immediate\openout\csname#1indfile\endcsname \jobname.\suffix % Using \immediate above here prevents an object entering into the current % box, which could confound checks such as those in \safewhatsit for % preceding skips. \typeout{Writing index file \jobname.\suffix}% \fi} \def\indexisfl{fl} % Definition for writing index entry sort key. { \catcode`\-=13 \gdef\indexwritesortas{% \begingroup \indexnonalnumreappear \indexwritesortasxxx} \gdef\indexwritesortasxxx#1{% \xdef\indexsortkey{#1}\endgroup} } \def\indexwriteseealso#1{ \gdef\pagenumbertext{\string\seealso{#1}}% } \def\indexwriteseeentry#1{ \gdef\pagenumbertext{\string\seeentry{#1}}% } % The default definitions \def\sortas#1{}% \def\seealso#1{\i{\putwordSeeAlso}\ #1}% for sorted index file only \def\putwordSeeAlso{See also} \def\seeentry#1{\i{\putwordSee}\ #1}% for sorted index file only % Given index entry text like "aaa @subentry bbb @sortas{ZZZ}": % * Set \bracedtext to "{aaa}{bbb}" % * Set \fullindexsortkey to "aaa @subentry ZZZ" % * If @seealso occurs, set \pagenumbertext % \def\splitindexentry#1{% \gdef\fullindexsortkey{}% \xdef\bracedtext{}% \def\sep{}% \def\seealso##1{}% \def\seeentry##1{}% \expandafter\doindexsegment#1\subentry\finish\subentry } % append the results from the next segment \def\doindexsegment#1\subentry{% \def\segment{#1}% \ifx\segment\isfinish \else % % Fully expand the segment, throwing away any @sortas directives, and % trim spaces. \edef\trimmed{\segment}% \edef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% \ifincodeindex \edef\trimmed{\noexpand\code{\trimmed}}% \fi % \xdef\bracedtext{\bracedtext{\trimmed}}% % % Get the string to sort by. Process the segment with all % font commands turned off. \bgroup \let\sortas\indexwritesortas \let\seealso\indexwriteseealso \let\seeentry\indexwriteseeentry \indexnofonts % The braces around the commands are recognized by texindex. \def\lbracechar{{\string\indexlbrace}}% \def\rbracechar{{\string\indexrbrace}}% \let\{=\lbracechar \let\}=\rbracechar \def\@{{\string\indexatchar}}% \def\atchar##1{\@}% \def\backslashchar{{\string\indexbackslash}}% \uccode`\~=`\\ \uppercase{\let~\backslashchar}% % \let\indexsortkey\empty \global\let\pagenumbertext\empty % Execute the segment and throw away the typeset output. This executes % any @sortas or @seealso commands in this segment. \setbox\dummybox = \hbox{\segment}% \ifx\indexsortkey\empty{% \indexnonalnumdisappear \xdef\trimmed{\segment}% \xdef\trimmed{\expandafter\eatspaces\expandafter{\trimmed}}% \xdef\indexsortkey{\trimmed}% \ifx\indexsortkey\empty\xdef\indexsortkey{ }\fi }\fi % % Append to \fullindexsortkey. \edef\tmp{\gdef\noexpand\fullindexsortkey{% \fullindexsortkey\sep\indexsortkey}}% \tmp \egroup \def\sep{\subentry}% % \expandafter\doindexsegment \fi } \def\isfinish{\finish}% \newbox\dummybox % used above \let\subentry\relax % Use \ instead of @ in index files. To support old texi2dvi and texindex. % This works without changing the escape character used in the toc or aux % files because the index entries are fully expanded here, and \string uses % the current value of \escapechar. \def\escapeisbackslash{\escapechar=`\\} % Use \ in index files by default. texi2dvi didn't support @ as the escape % character (as it checked for "\entry" in the files, and not "@entry"). When % the new version of texi2dvi has had a chance to become more prevalent, then % the escape character can change back to @ again. This should be an easy % change to make now because both @ and \ are only used as escape characters in % index files, never standing for themselves. % \set txiindexescapeisbackslash % Write the entry in \indextext to the index file. % \newif\ifincodeindex \def\doindwrite{\incodeindexfalse\doindwritex} \def\docindwrite{\incodeindextrue\doindwritex} \def\doindwritex{% \maybemarginindex % \atdummies % \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax\else \escapeisbackslash \fi % % For texindex which always views { and } as separators. \def\{{\lbracechar{}}% \def\}{\rbracechar{}}% \uccode`\~=`\\ \uppercase{\def~{\backslashchar{}}}% % % Split the entry into primary entry and any subentries, and get the index % sort key. \splitindexentry\indextext % % Set up the complete index entry, with both the sort key and % the original text, including any font commands. We write % three arguments to \entry to the .?? file (four in the % subentry case), texindex reduces to two when writing the .??s % sorted result. % \edef\temp{% \write\writeto{% \string\entry{\fullindexsortkey}% {\ifx\pagenumbertext\empty\noexpand\folio\else\pagenumbertext\fi}% \bracedtext}% }% \temp } % Put the index entry in the margin if desired (undocumented). \def\maybemarginindex{% \ifx\SETmarginindex\relax\else \insert\margin{\hbox{\vrule height8pt depth3pt width0pt \relax\indextext}}% \fi } \let\SETmarginindex=\relax % Take care of unwanted page breaks/skips around a whatsit: % % If a skip is the last thing on the list now, preserve it % by backing up by \lastskip, doing the \write, then inserting % the skip again. Otherwise, the whatsit generated by the % \write or \pdfdest will make \lastskip zero. The result is that % sequences like this: % @end defun % @tindex whatever % @defun ... % will have extra space inserted, because the \medbreak in the % start of the @defun won't see the skip inserted by the @end of % the previous defun. % % But don't do any of this if we're not in vertical mode. We % don't want to do a \vskip and prematurely end a paragraph. % % Avoid page breaks due to these extra skips, too. % % But wait, there is a catch there: % We'll have to check whether \lastskip is zero skip. \ifdim is not % sufficient for this purpose, as it ignores stretch and shrink parts % of the skip. The only way seems to be to check the textual % representation of the skip. % % The following is almost like \def\zeroskipmacro{0.0pt} except that % the ``p'' and ``t'' characters have catcode \other, not 11 (letter). % \edef\zeroskipmacro{\expandafter\the\csname z@skip\endcsname} % \newskip\whatsitskip \newcount\whatsitpenalty % % ..., ready, GO: % \def\safewhatsit#1{\ifhmode #1% \else % \lastskip and \lastpenalty cannot both be nonzero simultaneously. \whatsitskip = \lastskip \edef\lastskipmacro{\the\lastskip}% \whatsitpenalty = \lastpenalty % % If \lastskip is nonzero, that means the last item was a % skip. And since a skip is discardable, that means this % -\whatsitskip glue we're inserting is preceded by a % non-discardable item, therefore it is not a potential % breakpoint, therefore no \nobreak needed. \ifx\lastskipmacro\zeroskipmacro \else \vskip-\whatsitskip \fi % #1% % \ifx\lastskipmacro\zeroskipmacro % If \lastskip was zero, perhaps the last item was a penalty, and % perhaps it was >=10000, e.g., a \nobreak. In that case, we want % to re-insert the same penalty (values >10000 are used for various % signals); since we just inserted a non-discardable item, any % following glue (such as a \parskip) would be a breakpoint. For example: % @deffn deffn-whatever % @vindex index-whatever % Description. % would allow a break between the index-whatever whatsit % and the "Description." paragraph. \ifnum\whatsitpenalty>9999 \penalty\whatsitpenalty \fi \else % On the other hand, if we had a nonzero \lastskip, % this make-up glue would be preceded by a non-discardable item % (the whatsit from the \write), so we must insert a \nobreak. \nobreak\vskip\whatsitskip \fi \fi} % The index entry written in the file actually looks like % \entry {sortstring}{page}{topic} % or % \entry {sortstring}{page}{topic}{subtopic} % The texindex program reads in these files and writes files % containing these kinds of lines: % \initial {c} % before the first topic whose initial is c % \entry {topic}{pagelist} % for a topic that is used without subtopics % \primary {topic} % \entry {topic}{} % for the beginning of a topic that is used with subtopics % \secondary {subtopic}{pagelist} % for each subtopic. % \secondary {subtopic}{} % for a subtopic with sub-subtopics % \tertiary {subtopic}{subsubtopic}{pagelist} % for each sub-subtopic. % Define the user-accessible indexing commands % @findex, @vindex, @kindex, @cindex. \def\findex {\fnindex} \def\kindex {\kyindex} \def\cindex {\cpindex} \def\vindex {\vrindex} \def\tindex {\tpindex} \def\pindex {\pgindex} % Define the macros used in formatting output of the sorted index material. % @printindex causes a particular index (the ??s file) to get printed. % It does not print any chapter heading (usually an @unnumbered). % \parseargdef\printindex{\begingroup \dobreak \chapheadingskip{10000}% % \smallfonts \rm \tolerance = 9500 \plainfrenchspacing \everypar = {}% don't want the \kern\-parindent from indentation suppression. % % See comment in \requireopenindexfile. \def\indexname{#1}\ifx\indexname\indexisfl\def\indexname{f1}\fi % % See if the index file exists and is nonempty. \openin 1 \jobname.\indexname s \ifeof 1 % \enddoublecolumns gets confused if there is no text in the index, % and it loses the chapter title and the aux file entries for the % index. The easiest way to prevent this problem is to make sure % there is some text. \putwordIndexNonexistent \typeout{No file \jobname.\indexname s.}% \else % If the index file exists but is empty, then \openin leaves \ifeof % false. We have to make TeX try to read something from the file, so % it can discover if there is anything in it. \read 1 to \thisline \ifeof 1 \putwordIndexIsEmpty \else \expandafter\printindexzz\thisline\relax\relax\finish% \fi \fi \closein 1 \endgroup} % If the index file starts with a backslash, forgo reading the index % file altogether. If somebody upgrades texinfo.tex they may still have % old index files using \ as the escape character. Reading this would % at best lead to typesetting garbage, at worst a TeX syntax error. \def\printindexzz#1#2\finish{% \expandafter\ifx\csname SETtxiindexescapeisbackslash\endcsname\relax \uccode`\~=`\\ \uppercase{\if\noexpand~}\noexpand#1 \expandafter\ifx\csname SETtxiskipindexfileswithbackslash\endcsname\relax \errmessage{% ERROR: A sorted index file in an obsolete format was skipped. To fix this problem, please upgrade your version of 'texi2dvi' or 'texi2pdf' to that at . If you are using an old version of 'texindex' (part of the Texinfo distribution), you may also need to upgrade to a newer version (at least 6.0). You may be able to typeset the index if you run 'texindex \jobname.\indexname' yourself. You could also try setting the 'txiindexescapeisbackslash' flag by running a command like 'texi2dvi -t "@set txiindexescapeisbackslash" \jobname.texi'. If you do this, Texinfo will try to use index files in the old format. If you continue to have problems, deleting the index files and starting again might help (with 'rm \jobname.?? \jobname.??s')% }% \else (Skipped sorted index file in obsolete format) \fi \else \begindoublecolumns \input \jobname.\indexname s \enddoublecolumns \fi \else \begindoublecolumns \catcode`\\=0\relax % % Make @ an escape character to give macros a chance to work. This % should work because we (hopefully) don't otherwise use @ in index files. %\catcode`\@=12\relax \catcode`\@=0\relax \input \jobname.\indexname s \enddoublecolumns \fi } % These macros are used by the sorted index file itself. % Change them to control the appearance of the index. {\catcode`\/=13 \catcode`\-=13 \catcode`\^=13 \catcode`\~=13 \catcode`\_=13 \catcode`\|=13 \catcode`\<=13 \catcode`\>=13 \catcode`\+=13 \catcode`\"=13 \catcode`\$=3 \gdef\initialglyphs{% % special control sequences used in the index sort key \let\indexlbrace\{% \let\indexrbrace\}% \let\indexatchar\@% \def\indexbackslash{\math{\backslash}}% % % Some changes for non-alphabetic characters. Using the glyphs from the % math fonts looks more consistent than the typewriter font used elsewhere % for these characters. \uccode`\~=`\\ \uppercase{\def~{\math{\backslash}}} % % In case @\ is used for backslash \uppercase{\let\\=~} % Can't get bold backslash so don't use bold forward slash \catcode`\/=13 \def/{{\secrmnotbold \normalslash}}% \def-{{\normaldash\normaldash}}% en dash `--' \def^{{\chapbf \normalcaret}}% \def~{{\chapbf \normaltilde}}% \def\_{% \leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em }% \def|{$\vert$}% \def<{$\less$}% \def>{$\gtr$}% \def+{$\normalplus$}% }} \def\initial{% \bgroup \initialglyphs \initialx } \def\initialx#1{% % Remove any glue we may have, we'll be inserting our own. \removelastskip % % We like breaks before the index initials, so insert a bonus. % The glue before the bonus allows a little bit of space at the % bottom of a column to reduce an increase in inter-line spacing. \nobreak \vskip 0pt plus 5\baselineskip \penalty -300 \vskip 0pt plus -5\baselineskip % % Typeset the initial. Making this add up to a whole number of % baselineskips increases the chance of the dots lining up from column % to column. It still won't often be perfect, because of the stretch % we need before each entry, but it's better. % % No shrink because it confuses \balancecolumns. \vskip 1.67\baselineskip plus 1\baselineskip \leftline{\secfonts \kern-0.05em \secbf #1}% % \secfonts is inside the argument of \leftline so that the change of % \baselineskip will not affect any glue inserted before the vbox that % \leftline creates. % Do our best not to break after the initial. \nobreak \vskip .33\baselineskip plus .1\baselineskip \egroup % \initialglyphs } \newdimen\entryrightmargin \entryrightmargin=0pt % \entry typesets a paragraph consisting of the text (#1), dot leaders, and % then page number (#2) flushed to the right margin. It is used for index % and table of contents entries. The paragraph is indented by \leftskip. % \def\entry{% \begingroup % % Start a new paragraph if necessary, so our assignments below can't % affect previous text. \par % % No extra space above this paragraph. \parskip = 0in % % When reading the text of entry, convert explicit line breaks % from @* into spaces. The user might give these in long section % titles, for instance. \def\*{\unskip\space\ignorespaces}% \def\entrybreak{\hfil\break}% An undocumented command % % Swallow the left brace of the text (first parameter): \afterassignment\doentry \let\temp = } \def\entrybreak{\unskip\space\ignorespaces}% \def\doentry{% % Save the text of the entry \global\setbox\boxA=\hbox\bgroup \bgroup % Instead of the swallowed brace. \noindent \aftergroup\finishentry % And now comes the text of the entry. % Not absorbing as a macro argument reduces the chance of problems % with catcodes occurring. } {\catcode`\@=11 \gdef\finishentry#1{% \egroup % end box A \dimen@ = \wd\boxA % Length of text of entry \global\setbox\boxA=\hbox\bgroup \unhbox\boxA % #1 is the page number. % % Get the width of the page numbers, and only use % leaders if they are present. \global\setbox\boxB = \hbox{#1}% \ifdim\wd\boxB = 0pt \null\nobreak\hfill\ % \else % \null\nobreak\indexdotfill % Have leaders before the page number. % \ifpdforxetex \pdfgettoks#1.% \hskip\skip\thinshrinkable\the\toksA \else \hskip\skip\thinshrinkable #1% \fi \fi \egroup % end \boxA \ifdim\wd\boxB = 0pt \noindent\unhbox\boxA\par \nobreak \else\bgroup % We want the text of the entries to be aligned to the left, and the % page numbers to be aligned to the right. % \parindent = 0pt \advance\leftskip by 0pt plus 1fil \advance\leftskip by 0pt plus -1fill \rightskip = 0pt plus -1fil \advance\rightskip by 0pt plus 1fill % Cause last line, which could consist of page numbers on their own % if the list of page numbers is long, to be aligned to the right. \parfillskip=0pt plus -1fill % \advance\rightskip by \entryrightmargin % Determine how far we can stretch into the margin. % This allows, e.g., "Appendix H GNU Free Documentation License" to % fit on one line in @letterpaper format. \ifdim\entryrightmargin>2.1em \dimen@i=2.1em \else \dimen@i=0em \fi \advance \parfillskip by 0pt minus 1\dimen@i % \dimen@ii = \hsize \advance\dimen@ii by -1\leftskip \advance\dimen@ii by -1\entryrightmargin \advance\dimen@ii by 1\dimen@i \ifdim\wd\boxA > \dimen@ii % If the entry doesn't fit in one line \ifdim\dimen@ > 0.8\dimen@ii % due to long index text % Try to split the text roughly evenly. \dimen@ will be the length of % the first line. \dimen@ = 0.7\dimen@ \dimen@ii = \hsize \ifnum\dimen@>\dimen@ii % If the entry is too long (for example, if it needs more than % two lines), use all the space in the first line. \dimen@ = \dimen@ii \fi \advance\leftskip by 0pt plus 1fill % ragged right \advance \dimen@ by 1\rightskip \parshape = 2 0pt \dimen@ 0em \dimen@ii % Ideally we'd add a finite glue at the end of the first line only, % instead of using \parshape with explicit line lengths, but TeX % doesn't seem to provide a way to do such a thing. % % Indent all lines but the first one. \advance\leftskip by 1em \advance\parindent by -1em \fi\fi \indent % start paragraph \unhbox\boxA % % Do not prefer a separate line ending with a hyphen to fewer lines. \finalhyphendemerits = 0 % % Word spacing - no stretch \spaceskip=\fontdimen2\font minus \fontdimen4\font % \linepenalty=1000 % Discourage line breaks. \hyphenpenalty=5000 % Discourage hyphenation. % \par % format the paragraph \egroup % The \vbox \fi \endgroup }} \newskip\thinshrinkable \skip\thinshrinkable=.15em minus .15em % Like plain.tex's \dotfill, except uses up at least 1 em. % The filll stretch here overpowers both the fil and fill stretch to push % the page number to the right. \def\indexdotfill{\cleaders \hbox{$\mathsurround=0pt \mkern1.5mu.\mkern1.5mu$}\hskip 1em plus 1filll} \def\primary #1{\line{#1\hfil}} \def\secondary{\indententry{0.5cm}} \def\tertiary{\indententry{1cm}} \def\indententry#1#2#3{% \bgroup \leftskip=#1 \entry{#2}{#3}% \egroup } % Define two-column mode, which we use to typeset indexes. % Adapted from the TeXbook, page 416, which is to say, % the manmac.tex format used to print the TeXbook itself. \catcode`\@=11 % private names \newbox\partialpage \newdimen\doublecolumnhsize \def\begindoublecolumns{\begingroup % ended by \enddoublecolumns % If not much space left on page, start a new page. \ifdim\pagetotal>0.8\vsize\vfill\eject\fi % % Grab any single-column material above us. \output = {% \savetopmark % \global\setbox\partialpage = \vbox{% % Unvbox the main output page. \unvbox\PAGE \kern-\topskip \kern\baselineskip }% }% \eject % run that output routine to set \partialpage % % Use the double-column output routine for subsequent pages. \output = {\doublecolumnout}% % % Change the page size parameters. We could do this once outside this % routine, in each of @smallbook, @afourpaper, and the default 8.5x11 % format, but then we repeat the same computation. Repeating a couple % of assignments once per index is clearly meaningless for the % execution time, so we may as well do it in one place. % % First we halve the line length, less a little for the gutter between % the columns. We compute the gutter based on the line length, so it % changes automatically with the paper format. The magic constant % below is chosen so that the gutter has the same value (well, +-<1pt) % as it did when we hard-coded it. % % We put the result in a separate register, \doublecolumhsize, so we % can restore it in \pagesofar, after \hsize itself has (potentially) % been clobbered. % \doublecolumnhsize = \hsize \advance\doublecolumnhsize by -.04154\hsize \divide\doublecolumnhsize by 2 \hsize = \doublecolumnhsize % % Get the available space for the double columns -- the normal % (undoubled) page height minus any material left over from the % previous page. \advance\vsize by -\ht\partialpage \vsize = 2\vsize % % For the benefit of balancing columns \advance\baselineskip by 0pt plus 0.5pt } % The double-column output routine for all double-column pages except % the last, which is done by \balancecolumns. % \def\doublecolumnout{% % \savetopmark \splittopskip=\topskip \splitmaxdepth=\maxdepth \dimen@ = \vsize \divide\dimen@ by 2 % % box0 will be the left-hand column, box2 the right. \setbox0=\vsplit\PAGE to\dimen@ \setbox2=\vsplit\PAGE to\dimen@ \global\advance\vsize by 2\ht\partialpage \onepageout\pagesofar % empty except for the first time we are called \unvbox\PAGE \penalty\outputpenalty } % % Re-output the contents of the output page -- any previous material, % followed by the two boxes we just split, in box0 and box2. \def\pagesofar{% \unvbox\partialpage % \hsize = \doublecolumnhsize \wd0=\hsize \wd2=\hsize \hbox to\txipagewidth{\box0\hfil\box2}% } % Finished with double columns. \def\enddoublecolumns{% % The following penalty ensures that the page builder is exercised % _before_ we change the output routine. This is necessary in the % following situation: % % The last section of the index consists only of a single entry. % Before this section, \pagetotal is less than \pagegoal, so no % break occurs before the last section starts. However, the last % section, consisting of \initial and the single \entry, does not % fit on the page and has to be broken off. Without the following % penalty the page builder will not be exercised until \eject % below, and by that time we'll already have changed the output % routine to the \balancecolumns version, so the next-to-last % double-column page will be processed with \balancecolumns, which % is wrong: The two columns will go to the main vertical list, with % the broken-off section in the recent contributions. As soon as % the output routine finishes, TeX starts reconsidering the page % break. The two columns and the broken-off section both fit on the % page, because the two columns now take up only half of the page % goal. When TeX sees \eject from below which follows the final % section, it invokes the new output routine that we've set after % \balancecolumns below; \onepageout will try to fit the two columns % and the final section into the vbox of \txipageheight (see % \pagebody), causing an overfull box. % % Note that glue won't work here, because glue does not exercise the % page builder, unlike penalties (see The TeXbook, pp. 280-281). \penalty0 % \output = {% % Split the last of the double-column material. \savetopmark \balancecolumns }% \eject % call the \output just set \ifdim\pagetotal=0pt % Having called \balancecolumns once, we do not % want to call it again. Therefore, reset \output to its normal % definition right away. \global\output=\expandafter{\the\defaultoutput} % \endgroup % started in \begindoublecolumns % Leave the double-column material on the current page, no automatic % page break. \box\balancedcolumns % % \pagegoal was set to the doubled \vsize above, since we restarted % the current page. We're now back to normal single-column % typesetting, so reset \pagegoal to the normal \vsize. \global\vsize = \txipageheight % \pagegoal = \txipageheight % \else % We had some left-over material. This might happen when \doublecolumnout % is called in \balancecolumns. Try again. \expandafter\enddoublecolumns \fi } \newbox\balancedcolumns \setbox\balancedcolumns=\vbox{shouldnt see this}% % % Only called for the last of the double column material. \doublecolumnout % does the others. \def\balancecolumns{% \setbox0 = \vbox{\unvbox\PAGE}% like \box255 but more efficient, see p.120. \dimen@ = \ht0 \ifdim\dimen@<7\baselineskip % Don't split a short final column in two. \setbox2=\vbox{}% \global\setbox\balancedcolumns=\vbox{\pagesofar}% \else % double the leading vertical space \advance\dimen@ by \topskip \advance\dimen@ by-\baselineskip \divide\dimen@ by 2 % target to split to \dimen@ii = \dimen@ \splittopskip = \topskip % Loop until left column is at least as high as the right column. {% \vbadness = 10000 \loop \global\setbox3 = \copy0 \global\setbox1 = \vsplit3 to \dimen@ \ifdim\ht1<\ht3 \global\advance\dimen@ by 1pt \repeat }% % Now the left column is in box 1, and the right column in box 3. % % Check whether the left column has come out higher than the page itself. % (Note that we have doubled \vsize for the double columns, so % the actual height of the page is 0.5\vsize). \ifdim2\ht1>\vsize % It appears that we have been called upon to balance too much material. % Output some of it with \doublecolumnout, leaving the rest on the page. \setbox\PAGE=\box0 \doublecolumnout \else % Compare the heights of the two columns. \ifdim4\ht1>5\ht3 % Column heights are too different, so don't make their bottoms % flush with each other. \setbox2=\vbox to \ht1 {\unvbox3\vfill}% \setbox0=\vbox to \ht1 {\unvbox1\vfill}% \else % Make column bottoms flush with each other. \setbox2=\vbox to\ht1{\unvbox3\unskip}% \setbox0=\vbox to\ht1{\unvbox1\unskip}% \fi \global\setbox\balancedcolumns=\vbox{\pagesofar}% \fi \fi % } \catcode`\@ = \other \message{sectioning,} % Chapters, sections, etc. % Let's start with @part. \parseargdef\part{\partzzz{#1}} \def\partzzz#1{% \chapoddpage \null \vskip.3\vsize % move it down on the page a bit \begingroup \noindent \titlefonts\rm #1\par % the text \let\lastnode=\empty % no node to associate with \writetocentry{part}{#1}{}% but put it in the toc \headingsoff % no headline or footline on the part page % This outputs a mark at the end of the page that clears \thischapter % and \thissection, as is done in \startcontents. \let\pchapsepmacro\relax \chapmacro{}{Yomitfromtoc}{}% \chapoddpage \endgroup } % \unnumberedno is an oxymoron. But we count the unnumbered % sections so that we can refer to them unambiguously in the pdf % outlines by their "section number". We avoid collisions with chapter % numbers by starting them at 10000. (If a document ever has 10000 % chapters, we're in trouble anyway, I'm sure.) \newcount\unnumberedno \unnumberedno = 10000 \newcount\chapno \newcount\secno \secno=0 \newcount\subsecno \subsecno=0 \newcount\subsubsecno \subsubsecno=0 % This counter is funny since it counts through charcodes of letters A, B, ... \newcount\appendixno \appendixno = `\@ % % \def\appendixletter{\char\the\appendixno} % We do the following ugly conditional instead of the above simple % construct for the sake of pdftex, which needs the actual % letter in the expansion, not just typeset. % \def\appendixletter{% \ifnum\appendixno=`A A% \else\ifnum\appendixno=`B B% \else\ifnum\appendixno=`C C% \else\ifnum\appendixno=`D D% \else\ifnum\appendixno=`E E% \else\ifnum\appendixno=`F F% \else\ifnum\appendixno=`G G% \else\ifnum\appendixno=`H H% \else\ifnum\appendixno=`I I% \else\ifnum\appendixno=`J J% \else\ifnum\appendixno=`K K% \else\ifnum\appendixno=`L L% \else\ifnum\appendixno=`M M% \else\ifnum\appendixno=`N N% \else\ifnum\appendixno=`O O% \else\ifnum\appendixno=`P P% \else\ifnum\appendixno=`Q Q% \else\ifnum\appendixno=`R R% \else\ifnum\appendixno=`S S% \else\ifnum\appendixno=`T T% \else\ifnum\appendixno=`U U% \else\ifnum\appendixno=`V V% \else\ifnum\appendixno=`W W% \else\ifnum\appendixno=`X X% \else\ifnum\appendixno=`Y Y% \else\ifnum\appendixno=`Z Z% % The \the is necessary, despite appearances, because \appendixletter is % expanded while writing the .toc file. \char\appendixno is not % expandable, thus it is written literally, thus all appendixes come out % with the same letter (or @) in the toc without it. \else\char\the\appendixno \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi \fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi\fi} % Each @chapter defines these (using marks) as the number+name, number % and name of the chapter. Page headings and footings can use % these. @section does likewise. \def\thischapter{} \def\thischapternum{} \def\thischaptername{} \def\thissection{} \def\thissectionnum{} \def\thissectionname{} \newcount\absseclevel % used to calculate proper heading level \newcount\secbase\secbase=0 % @raisesections/@lowersections modify this count % @raisesections: treat @section as chapter, @subsection as section, etc. \def\raisesections{\global\advance\secbase by -1} % @lowersections: treat @chapter as section, @section as subsection, etc. \def\lowersections{\global\advance\secbase by 1} % we only have subsub. \chardef\maxseclevel = 3 % % A numbered section within an unnumbered changes to unnumbered too. % To achieve this, remember the "biggest" unnum. sec. we are currently in: \chardef\unnlevel = \maxseclevel % % Trace whether the current chapter is an appendix or not: % \chapheadtype is "N" or "A", unnumbered chapters are ignored. \def\chapheadtype{N} % Choose a heading macro % #1 is heading type % #2 is heading level % #3 is text for heading \def\genhead#1#2#3{% % Compute the abs. sec. level: \absseclevel=#2 \advance\absseclevel by \secbase % Make sure \absseclevel doesn't fall outside the range: \ifnum \absseclevel < 0 \absseclevel = 0 \else \ifnum \absseclevel > 3 \absseclevel = 3 \fi \fi % The heading type: \def\headtype{#1}% \if \headtype U% \ifnum \absseclevel < \unnlevel \chardef\unnlevel = \absseclevel \fi \else % Check for appendix sections: \ifnum \absseclevel = 0 \edef\chapheadtype{\headtype}% \else \if \headtype A\if \chapheadtype N% \errmessage{@appendix... within a non-appendix chapter}% \fi\fi \fi % Check for numbered within unnumbered: \ifnum \absseclevel > \unnlevel \def\headtype{U}% \else \chardef\unnlevel = 3 \fi \fi % Now print the heading: \if \headtype U% \ifcase\absseclevel \unnumberedzzz{#3}% \or \unnumberedseczzz{#3}% \or \unnumberedsubseczzz{#3}% \or \unnumberedsubsubseczzz{#3}% \fi \else \if \headtype A% \ifcase\absseclevel \appendixzzz{#3}% \or \appendixsectionzzz{#3}% \or \appendixsubseczzz{#3}% \or \appendixsubsubseczzz{#3}% \fi \else \ifcase\absseclevel \chapterzzz{#3}% \or \seczzz{#3}% \or \numberedsubseczzz{#3}% \or \numberedsubsubseczzz{#3}% \fi \fi \fi \suppressfirstparagraphindent } % an interface: \def\numhead{\genhead N} \def\apphead{\genhead A} \def\unnmhead{\genhead U} % @chapter, @appendix, @unnumbered. Increment top-level counter, reset % all lower-level sectioning counters to zero. % % Also set \chaplevelprefix, which we prepend to @float sequence numbers % (e.g., figures), q.v. By default (before any chapter), that is empty. \let\chaplevelprefix = \empty % \outer\parseargdef\chapter{\numhead0{#1}} % normally numhead0 calls chapterzzz \def\chapterzzz#1{% % section resetting is \global in case the chapter is in a group, such % as an @include file. \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\chapno by 1 % % Used for \float. \gdef\chaplevelprefix{\the\chapno.}% \resetallfloatnos % % \putwordChapter can contain complex things in translations. \toks0=\expandafter{\putwordChapter}% \message{\the\toks0 \space \the\chapno}% % % Write the actual heading. \chapmacro{#1}{Ynumbered}{\the\chapno}% % % So @section and the like are numbered underneath this chapter. \global\let\section = \numberedsec \global\let\subsection = \numberedsubsec \global\let\subsubsection = \numberedsubsubsec } \outer\parseargdef\appendix{\apphead0{#1}} % normally calls appendixzzz % \def\appendixzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\appendixno by 1 \gdef\chaplevelprefix{\appendixletter.}% \resetallfloatnos % % \putwordAppendix can contain complex things in translations. \toks0=\expandafter{\putwordAppendix}% \message{\the\toks0 \space \appendixletter}% % \chapmacro{#1}{Yappendix}{\appendixletter}% % \global\let\section = \appendixsec \global\let\subsection = \appendixsubsec \global\let\subsubsection = \appendixsubsubsec } % normally unnmhead0 calls unnumberedzzz: \outer\parseargdef\unnumbered{\unnmhead0{#1}} \def\unnumberedzzz#1{% \global\secno=0 \global\subsecno=0 \global\subsubsecno=0 \global\advance\unnumberedno by 1 % % Since an unnumbered has no number, no prefix for figures. \global\let\chaplevelprefix = \empty \resetallfloatnos % % This used to be simply \message{#1}, but TeX fully expands the % argument to \message. Therefore, if #1 contained @-commands, TeX % expanded them. For example, in `@unnumbered The @cite{Book}', TeX % expanded @cite (which turns out to cause errors because \cite is meant % to be executed, not expanded). % % Anyway, we don't want the fully-expanded definition of @cite to appear % as a result of the \message, we just want `@cite' itself. We use % \the to achieve this: TeX expands \the only once, % simply yielding the contents of . (We also do this for % the toc entries.) \toks0 = {#1}% \message{(\the\toks0)}% % \chapmacro{#1}{Ynothing}{\the\unnumberedno}% % \global\let\section = \unnumberedsec \global\let\subsection = \unnumberedsubsec \global\let\subsubsection = \unnumberedsubsubsec } % @centerchap is like @unnumbered, but the heading is centered. \outer\parseargdef\centerchap{% \let\centerparametersmaybe = \centerparameters \unnmhead0{#1}% \let\centerparametersmaybe = \relax } % @top is like @unnumbered. \let\top\unnumbered % Sections. % \outer\parseargdef\numberedsec{\numhead1{#1}} % normally calls seczzz \def\seczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynumbered}{\the\chapno.\the\secno}% } % normally calls appendixsectionzzz: \outer\parseargdef\appendixsection{\apphead1{#1}} \def\appendixsectionzzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Yappendix}{\appendixletter.\the\secno}% } \let\appendixsec\appendixsection % normally calls unnumberedseczzz: \outer\parseargdef\unnumberedsec{\unnmhead1{#1}} \def\unnumberedseczzz#1{% \global\subsecno=0 \global\subsubsecno=0 \global\advance\secno by 1 \sectionheading{#1}{sec}{Ynothing}{\the\unnumberedno.\the\secno}% } % Subsections. % % normally calls numberedsubseczzz: \outer\parseargdef\numberedsubsec{\numhead2{#1}} \def\numberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynumbered}{\the\chapno.\the\secno.\the\subsecno}% } % normally calls appendixsubseczzz: \outer\parseargdef\appendixsubsec{\apphead2{#1}} \def\appendixsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno}% } % normally calls unnumberedsubseczzz: \outer\parseargdef\unnumberedsubsec{\unnmhead2{#1}} \def\unnumberedsubseczzz#1{% \global\subsubsecno=0 \global\advance\subsecno by 1 \sectionheading{#1}{subsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno}% } % Subsubsections. % % normally numberedsubsubseczzz: \outer\parseargdef\numberedsubsubsec{\numhead3{#1}} \def\numberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynumbered}% {\the\chapno.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally appendixsubsubseczzz: \outer\parseargdef\appendixsubsubsec{\apphead3{#1}} \def\appendixsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Yappendix}% {\appendixletter.\the\secno.\the\subsecno.\the\subsubsecno}% } % normally unnumberedsubsubseczzz: \outer\parseargdef\unnumberedsubsubsec{\unnmhead3{#1}} \def\unnumberedsubsubseczzz#1{% \global\advance\subsubsecno by 1 \sectionheading{#1}{subsubsec}{Ynothing}% {\the\unnumberedno.\the\secno.\the\subsecno.\the\subsubsecno}% } % These macros control what the section commands do, according % to what kind of chapter we are in (ordinary, appendix, or unnumbered). % Define them by default for a numbered chapter. \let\section = \numberedsec \let\subsection = \numberedsubsec \let\subsubsection = \numberedsubsubsec % Define @majorheading, @heading and @subheading \def\majorheading{% {\advance\chapheadingskip by 10pt \chapbreak }% \parsearg\chapheadingzzz } \def\chapheading{\chapbreak \parsearg\chapheadingzzz} \def\chapheadingzzz#1{% \vbox{\chapfonts \raggedtitlesettings #1\par}% \nobreak\bigskip \nobreak \suppressfirstparagraphindent } % @heading, @subheading, @subsubheading. \parseargdef\heading{\sectionheading{#1}{sec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subheading{\sectionheading{#1}{subsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} \parseargdef\subsubheading{\sectionheading{#1}{subsubsec}{Yomitfromtoc}{} \suppressfirstparagraphindent} % These macros generate a chapter, section, etc. heading only % (including whitespace, linebreaking, etc. around it), % given all the information in convenient, parsed form. % Args are the skip and penalty (usually negative) \def\dobreak#1#2{\par\ifdim\lastskip<#1\removelastskip\penalty#2\vskip#1\fi} % Parameter controlling skip before chapter headings (if needed) \newskip\chapheadingskip % Define plain chapter starts, and page on/off switching for it. \def\chapbreak{\dobreak \chapheadingskip {-4000}} % Start a new page \def\chappager{\par\vfill\supereject} % \chapoddpage - start on an odd page for a new chapter % Because \domark is called before \chapoddpage, the filler page will % get the headings for the next chapter, which is wrong. But we don't % care -- we just disable all headings on the filler page. \def\chapoddpage{% \chappager \ifodd\pageno \else \begingroup \headingsoff \null \chappager \endgroup \fi } \parseargdef\setchapternewpage{\csname CHAPPAG#1\endcsname} \def\CHAPPAGoff{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chapbreak \global\def\HEADINGSon{\HEADINGSsinglechapoff}} \def\CHAPPAGon{% \global\let\contentsalignmacro = \chappager \global\let\pchapsepmacro=\chappager \global\def\HEADINGSon{\HEADINGSsingle}} \def\CHAPPAGodd{% \global\let\contentsalignmacro = \chapoddpage \global\let\pchapsepmacro=\chapoddpage \global\def\HEADINGSon{\HEADINGSdouble}} \CHAPPAGon % \chapmacro - Chapter opening. % % #1 is the text, #2 is the section type (Ynumbered, Ynothing, % Yappendix, Yomitfromtoc), #3 the chapter number. % Not used for @heading series. % % To test against our argument. \def\Ynothingkeyword{Ynothing} \def\Yappendixkeyword{Yappendix} \def\Yomitfromtockeyword{Yomitfromtoc} % \def\chapmacro#1#2#3{% \expandafter\ifx\thisenv\titlepage\else \checkenv{}% chapters, etc., should not start inside an environment. \fi % Insert the first mark before the heading break (see notes for \domark). \let\prevchapterdefs=\currentchapterdefs \let\prevsectiondefs=\currentsectiondefs \gdef\currentsectiondefs{\gdef\thissectionname{}\gdef\thissectionnum{}% \gdef\thissection{}}% % \def\temptype{#2}% \ifx\temptype\Ynothingkeyword \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{\thischaptername}}% \else\ifx\temptype\Yomitfromtockeyword \gdef\currentchapterdefs{\gdef\thischaptername{#1}\gdef\thischapternum{}% \gdef\thischapter{}}% \else\ifx\temptype\Yappendixkeyword \toks0={#1}% \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\appendixletter}% % \noexpand\putwordAppendix avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordAppendix{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \else \toks0={#1}% \xdef\currentchapterdefs{% \gdef\noexpand\thischaptername{\the\toks0}% \gdef\noexpand\thischapternum{\the\chapno}% % \noexpand\putwordChapter avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thischapter{\noexpand\putwordChapter{} \noexpand\thischapternum: \noexpand\thischaptername}% }% \fi\fi\fi % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert the chapter heading break. \pchapsepmacro % % Now the second mark, after the heading break. No break points % between here and the heading. \let\prevchapterdefs=\currentchapterdefs \let\prevsectiondefs=\currentsectiondefs \domark % {% \chapfonts \rm \let\footnote=\errfootnoteheading % give better error message % % Have to define \currentsection before calling \donoderef, because the % xref code eventually uses it. On the other hand, it has to be called % after \pchapsepmacro, or the headline will change too soon. \gdef\currentsection{#1}% % % Only insert the separating space if we have a chapter/appendix % number, and don't print the unnumbered ``number''. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unnchap}% \else\ifx\temptype\Yomitfromtockeyword \setbox0 = \hbox{}% contents like unnumbered, but no toc entry \def\toctype{omit}% \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{\putwordAppendix{} #3\enspace}% \def\toctype{app}% \else \setbox0 = \hbox{#3\enspace}% \def\toctype{numchap}% \fi\fi\fi % % Write the toc entry for this chapter. Must come before the % \donoderef, because we include the current node name in the toc % entry, and \donoderef resets it to empty. \writetocentry{\toctype}{#1}{#3}% % % For pdftex, we have to write out the node definition (aka, make % the pdfdest) after any page break, but before the actual text has % been typeset. If the destination for the pdf outline is after the % text, then jumping from the outline may wind up with the text not % being visible, for instance under high magnification. \donoderef{#2}% % % Typeset the actual heading. \nobreak % Avoid page breaks at the interline glue. \vbox{\raggedtitlesettings \hangindent=\wd0 \centerparametersmaybe \unhbox0 #1\par}% }% \nobreak\bigskip % no page break after a chapter title \nobreak } % @centerchap -- centered and unnumbered. \let\centerparametersmaybe = \relax \def\centerparameters{% \advance\rightskip by 3\rightskip \leftskip = \rightskip \parfillskip = 0pt } % Section titles. These macros combine the section number parts and % call the generic \sectionheading to do the printing. % \newskip\secheadingskip \def\secheadingbreak{\dobreak \secheadingskip{-1000}} % Subsection titles. \newskip\subsecheadingskip \def\subsecheadingbreak{\dobreak \subsecheadingskip{-500}} % Subsubsection titles. \def\subsubsecheadingskip{\subsecheadingskip} \def\subsubsecheadingbreak{\subsecheadingbreak} % Print any size, any type, section title. % % #1 is the text of the title, % #2 is the section level (sec/subsec/subsubsec), % #3 is the section type (Ynumbered, Ynothing, Yappendix, Yomitfromtoc), % #4 is the section number. % \def\seckeyword{sec} % \def\sectionheading#1#2#3#4{% {% \def\sectionlevel{#2}% \def\temptype{#3}% % % It is ok for the @heading series commands to appear inside an % environment (it's been historically allowed, though the logic is % dubious), but not the others. \ifx\temptype\Yomitfromtockeyword\else \checkenv{}% non-@*heading should not be in an environment. \fi \let\footnote=\errfootnoteheading % % Switch to the right set of fonts. \csname #2fonts\endcsname \rm % % Insert first mark before the heading break (see notes for \domark). \let\prevsectiondefs=\currentsectiondefs \ifx\temptype\Ynothingkeyword \ifx\sectionlevel\seckeyword \gdef\currentsectiondefs{\gdef\thissectionname{#1}\gdef\thissectionnum{}% \gdef\thissection{\thissectionname}}% \fi \else\ifx\temptype\Yomitfromtockeyword % Don't redefine \thissection. \else\ifx\temptype\Yappendixkeyword \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \else \ifx\sectionlevel\seckeyword \toks0={#1}% \xdef\currentsectiondefs{% \gdef\noexpand\thissectionname{\the\toks0}% \gdef\noexpand\thissectionnum{#4}% % \noexpand\putwordSection avoids expanding indigestible % commands in some of the translations. \gdef\noexpand\thissection{\noexpand\putwordSection{} \noexpand\thissectionnum: \noexpand\thissectionname}% }% \fi \fi\fi\fi % % Go into vertical mode. Usually we'll already be there, but we % don't want the following whatsit to end up in a preceding paragraph % if the document didn't happen to have a blank line. \par % % Output the mark. Pass it through \safewhatsit, to take care of % the preceding space. \safewhatsit\domark % % Insert space above the heading. \csname #2headingbreak\endcsname % % Now the second mark, after the heading break. No break points % between here and the heading. \global\let\prevsectiondefs=\currentsectiondefs \domark % % Only insert the space after the number if we have a section number. \ifx\temptype\Ynothingkeyword \setbox0 = \hbox{}% \def\toctype{unn}% \gdef\currentsection{#1}% \else\ifx\temptype\Yomitfromtockeyword % for @headings -- no section number, don't include in toc, % and don't redefine \currentsection. \setbox0 = \hbox{}% \def\toctype{omit}% \let\sectionlevel=\empty \else\ifx\temptype\Yappendixkeyword \setbox0 = \hbox{#4\enspace}% \def\toctype{app}% \gdef\currentsection{#1}% \else \setbox0 = \hbox{#4\enspace}% \def\toctype{num}% \gdef\currentsection{#1}% \fi\fi\fi % % Write the toc entry (before \donoderef). See comments in \chapmacro. \writetocentry{\toctype\sectionlevel}{#1}{#4}% % % Write the node reference (= pdf destination for pdftex). % Again, see comments in \chapmacro. \donoderef{#3}% % % Interline glue will be inserted when the vbox is completed. % That glue will be a valid breakpoint for the page, since it'll be % preceded by a whatsit (usually from the \donoderef, or from the % \writetocentry if there was no node). We don't want to allow that % break, since then the whatsits could end up on page n while the % section is on page n+1, thus toc/etc. are wrong. Debian bug 276000. \nobreak % % Output the actual section heading. \vbox{\hyphenpenalty=10000 \tolerance=5000 \parindent=0pt \ptexraggedright \hangindent=\wd0 % zero if no section number \unhbox0 #1}% }% % Add extra space after the heading -- half of whatever came above it. % Don't allow stretch, though. \kern .5 \csname #2headingskip\endcsname % % Do not let the kern be a potential breakpoint, as it would be if it % was followed by glue. \nobreak % % We'll almost certainly start a paragraph next, so don't let that % glue accumulate. (Not a breakpoint because it's preceded by a % discardable item.) However, when a paragraph is not started next % (\startdefun, \cartouche, \center, etc.), this needs to be wiped out % or the negative glue will cause weirdly wrong output, typically % obscuring the section heading with something else. \vskip-\parskip % % This is so the last item on the main vertical list is a known % \penalty > 10000, so \startdefun, etc., can recognize the situation % and do the needful. \penalty 10001 } \message{toc,} % Table of contents. \newwrite\tocfile % Write an entry to the toc file, opening it if necessary. % Called from @chapter, etc. % % Example usage: \writetocentry{sec}{Section Name}{\the\chapno.\the\secno} % We append the current node name (if any) and page number as additional % arguments for the \{chap,sec,...}entry macros which will eventually % read this. The node name is used in the pdf outlines as the % destination to jump to. % % We open the .toc file for writing here instead of at @setfilename (or % any other fixed time) so that @contents can be anywhere in the document. % But if #1 is `omit', then we don't do anything. This is used for the % table of contents chapter openings themselves. % \newif\iftocfileopened \def\omitkeyword{omit}% % \def\writetocentry#1#2#3{% \edef\writetoctype{#1}% \ifx\writetoctype\omitkeyword \else \iftocfileopened\else \immediate\openout\tocfile = \jobname.toc \global\tocfileopenedtrue \fi % \iflinks {\atdummies \edef\temp{% \write\tocfile{@#1entry{#2}{#3}{\lastnode}{\noexpand\folio}}}% \temp }% \fi \fi % % Tell \shipout to create a pdf destination on each page, if we're % writing pdf. These are used in the table of contents. We can't % just write one on every page because the title pages are numbered % 1 and 2 (the page numbers aren't printed), and so are the first % two pages of the document. Thus, we'd have two destinations named % `1', and two named `2'. \ifpdforxetex \global\pdfmakepagedesttrue \fi } % These characters do not print properly in the Computer Modern roman % fonts, so we must take special care. This is more or less redundant % with the Texinfo input format setup at the end of this file. % \def\activecatcodes{% \catcode`\"=\active \catcode`\$=\active \catcode`\<=\active \catcode`\>=\active \catcode`\\=\active \catcode`\^=\active \catcode`\_=\active \catcode`\|=\active \catcode`\~=\active } % Read the toc file, which is essentially Texinfo input. \def\readtocfile{% \setupdatafile \activecatcodes \input \tocreadfilename } \newskip\contentsrightmargin \contentsrightmargin=1in \newcount\savepageno \newcount\lastnegativepageno \lastnegativepageno = -1 % Prepare to read what we've written to \tocfile. % \def\startcontents#1{% % If @setchapternewpage on, and @headings double, the contents should % start on an odd page, unlike chapters. \contentsalignmacro \immediate\closeout\tocfile % % Don't need to put `Contents' or `Short Contents' in the headline. % It is abundantly clear what they are. \chapmacro{#1}{Yomitfromtoc}{}% % \savepageno = \pageno \begingroup % Set up to handle contents files properly. \raggedbottom % Worry more about breakpoints than the bottom. \entryrightmargin=\contentsrightmargin % Don't use the full line length. % % Roman numerals for page numbers. \ifnum \pageno>0 \global\pageno = \lastnegativepageno \fi \def\thistitle{}% no title in double-sided headings % Record where the Roman numerals started. \ifnum\romancount=0 \global\romancount=\pagecount \fi } % redefined for the two-volume lispref. We always output on % \jobname.toc even if this is redefined. % \def\tocreadfilename{\jobname.toc} % Normal (long) toc. % \def\contents{% \startcontents{\putwordTOC}% \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \ifeof 1 \else \pdfmakeoutlines \fi \closein 1 \endgroup \contentsendroman } % And just the chapters. \def\summarycontents{% \startcontents{\putwordShortTOC}% % \let\partentry = \shortpartentry \let\numchapentry = \shortchapentry \let\appentry = \shortchapentry \let\unnchapentry = \shortunnchapentry % We want a true roman here for the page numbers. \secfonts \let\rm=\shortcontrm \let\bf=\shortcontbf \let\sl=\shortcontsl \let\tt=\shortconttt \rm \hyphenpenalty = 10000 \advance\baselineskip by 1pt % Open it up a little. \def\numsecentry##1##2##3##4{} \let\appsecentry = \numsecentry \let\unnsecentry = \numsecentry \let\numsubsecentry = \numsecentry \let\appsubsecentry = \numsecentry \let\unnsubsecentry = \numsecentry \let\numsubsubsecentry = \numsecentry \let\appsubsubsecentry = \numsecentry \let\unnsubsubsecentry = \numsecentry \openin 1 \tocreadfilename\space \ifeof 1 \else \readtocfile \fi \closein 1 \vfill \eject \contentsalignmacro % in case @setchapternewpage odd is in effect \endgroup \contentsendroman } \let\shortcontents = \summarycontents % Get ready to use Arabic numerals again \def\contentsendroman{% \lastnegativepageno = \pageno \global\pageno = \savepageno % % If \romancount > \arabiccount, the contents are at the end of the % document. Otherwise, advance where the Arabic numerals start for % the page numbers. \ifnum\romancount>\arabiccount\else\global\arabiccount=\pagecount\fi } % Typeset the label for a chapter or appendix for the short contents. % The arg is, e.g., `A' for an appendix, or `3' for a chapter. % \def\shortchaplabel#1{% % This space should be enough, since a single number is .5em, and the % widest letter (M) is 1em, at least in the Computer Modern fonts. % But use \hss just in case. % (This space doesn't include the extra space that gets added after % the label; that gets put in by \shortchapentry above.) % % We'd like to right-justify chapter numbers, but that looks strange % with appendix letters. And right-justifying numbers and % left-justifying letters looks strange when there is less than 10 % chapters. Have to read the whole toc once to know how many chapters % there are before deciding ... \hbox to 1em{#1\hss}% } % These macros generate individual entries in the table of contents. % The first argument is the chapter or section name. % The last argument is the page number. % The arguments in between are the chapter number, section number, ... % Parts, in the main contents. Replace the part number, which doesn't % exist, with an empty box. Let's hope all the numbers have the same width. % Also ignore the page number, which is conventionally not printed. \def\numeralbox{\setbox0=\hbox{8}\hbox to \wd0{\hfil}} \def\partentry#1#2#3#4{% % Add stretch and a bonus for breaking the page before the part heading. % This reduces the chance of the page being broken immediately after the % part heading, before a following chapter heading. \vskip 0pt plus 5\baselineskip \penalty-300 \vskip 0pt plus -5\baselineskip \dochapentry{\numeralbox\labelspace#1}{}% } % % Parts, in the short toc. \def\shortpartentry#1#2#3#4{% \penalty-300 \vskip.5\baselineskip plus.15\baselineskip minus.1\baselineskip \shortchapentry{{\bf #1}}{\numeralbox}{}{}% } % Chapters, in the main contents. \def\numchapentry#1#2#3#4{\dochapentry{#2\labelspace#1}{#4}} % Chapters, in the short toc. % See comments in \dochapentry re vbox and related settings. \def\shortchapentry#1#2#3#4{% \tocentry{\shortchaplabel{#2}\labelspace #1}{\doshortpageno\bgroup#4\egroup}% } % Appendices, in the main contents. % Need the word Appendix, and a fixed-size box. % \def\appendixbox#1{% % We use M since it's probably the widest letter. \setbox0 = \hbox{\putwordAppendix{} M}% \hbox to \wd0{\putwordAppendix{} #1\hss}} % \def\appentry#1#2#3#4{\dochapentry{\appendixbox{#2}\hskip.7em#1}{#4}} % Unnumbered chapters. \def\unnchapentry#1#2#3#4{\dochapentry{#1}{#4}} \def\shortunnchapentry#1#2#3#4{\tocentry{#1}{\doshortpageno\bgroup#4\egroup}} % Sections. \def\numsecentry#1#2#3#4{\dosecentry{#2\labelspace#1}{#4}} \let\appsecentry=\numsecentry \def\unnsecentry#1#2#3#4{\dosecentry{#1}{#4}} % Subsections. \def\numsubsecentry#1#2#3#4{\dosubsecentry{#2\labelspace#1}{#4}} \let\appsubsecentry=\numsubsecentry \def\unnsubsecentry#1#2#3#4{\dosubsecentry{#1}{#4}} % And subsubsections. \def\numsubsubsecentry#1#2#3#4{\dosubsubsecentry{#2\labelspace#1}{#4}} \let\appsubsubsecentry=\numsubsubsecentry \def\unnsubsubsecentry#1#2#3#4{\dosubsubsecentry{#1}{#4}} % This parameter controls the indentation of the various levels. % Same as \defaultparindent. \newdimen\tocindent \tocindent = 15pt % Now for the actual typesetting. In all these, #1 is the text and #2 is the % page number. % % If the toc has to be broken over pages, we want it to be at chapters % if at all possible; hence the \penalty. \def\dochapentry#1#2{% \penalty-300 \vskip1\baselineskip plus.33\baselineskip minus.25\baselineskip \begingroup % Move the page numbers slightly to the right \advance\entryrightmargin by -0.05em \chapentryfonts \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup \nobreak\vskip .25\baselineskip plus.1\baselineskip } \def\dosecentry#1#2{\begingroup \secentryfonts \leftskip=\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsecentry#1#2{\begingroup \subsecentryfonts \leftskip=2\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} \def\dosubsubsecentry#1#2{\begingroup \subsubsecentryfonts \leftskip=3\tocindent \tocentry{#1}{\dopageno\bgroup#2\egroup}% \endgroup} % We use the same \entry macro as for the index entries. \let\tocentry = \entry % Space between chapter (or whatever) number and the title. \def\labelspace{\hskip1em \relax} \def\dopageno#1{{\rm #1}} \def\doshortpageno#1{{\rm #1}} \def\chapentryfonts{\secfonts \rm} \def\secentryfonts{\textfonts} \def\subsecentryfonts{\textfonts} \def\subsubsecentryfonts{\textfonts} \message{environments,} % @foo ... @end foo. % @tex ... @end tex escapes into raw TeX temporarily. % One exception: @ is still an escape character, so that @end tex works. % But \@ or @@ will get a plain @ character. \envdef\tex{% \setregularquotes \catcode `\\=0 \catcode `\{=1 \catcode `\}=2 \catcode `\$=3 \catcode `\&=4 \catcode `\#=6 \catcode `\^=7 \catcode `\_=8 \catcode `\~=\active \let~=\tie \catcode `\%=14 \catcode `\+=\other \catcode `\"=\other \catcode `\|=\other \catcode `\<=\other \catcode `\>=\other \catcode `\`=\other \catcode `\'=\other % % ' is active in math mode (mathcode"8000). So reset it, and all our % other math active characters (just in case), to plain's definitions. \mathactive % % Inverse of the list at the beginning of the file. \let\b=\ptexb \let\bullet=\ptexbullet \let\c=\ptexc \let\,=\ptexcomma \let\.=\ptexdot \let\dots=\ptexdots \let\equiv=\ptexequiv \let\!=\ptexexclam \let\i=\ptexi \let\indent=\ptexindent \let\noindent=\ptexnoindent \let\{=\ptexlbrace \let\+=\tabalign \let\}=\ptexrbrace \let\/=\ptexslash \let\sp=\ptexsp \let\*=\ptexstar %\let\sup=\ptexsup % do not redefine, we want @sup to work in math mode \let\t=\ptext \expandafter \let\csname top\endcsname=\ptextop % we've made it outer \let\frenchspacing=\plainfrenchspacing % \def\endldots{\mathinner{\ldots\ldots\ldots\ldots}}% \def\enddots{\relax\ifmmode\endldots\else$\mathsurround=0pt \endldots\,$\fi}% \def\@{@}% } % There is no need to define \Etex. % Define @lisp ... @end lisp. % @lisp environment forms a group so it can rebind things, % including the definition of @end lisp (which normally is erroneous). % Amount to narrow the margins by for @lisp. \newskip\lispnarrowing \lispnarrowing=0.4in % This is the definition that ^^M gets inside @lisp, @example, and other % such environments. \null is better than a space, since it doesn't % have any width. \def\lisppar{\null\endgraf} % This space is always present above and below environments. \newskip\envskipamount \envskipamount = 0pt % Make spacing and below environment symmetrical. We use \parskip here % to help in doing that, since in @example-like environments \parskip % is reset to zero; thus the \afterenvbreak inserts no space -- but the % start of the next paragraph will insert \parskip. % \def\aboveenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip \ifnum\lastpenalty<10000 % Penalize breaking before the environment, because preceding text % often leads into it. \penalty100 \fi \vskip\envskipamount \fi \fi }} \def\afterenvbreak{{% % =10000 instead of <10000 because of a special case in \itemzzz and % \sectionheading, q.v. \ifnum \lastpenalty=10000 \else \advance\envskipamount by \parskip \endgraf \ifdim\lastskip<\envskipamount \removelastskip % it's not a good place to break if the last penalty was \nobreak % or better ... \ifnum\lastpenalty<10000 \penalty-50 \fi \vskip\envskipamount \fi \fi }} % \nonarrowing is a flag. If "set", @lisp etc don't narrow margins; it will % also clear it, so that its embedded environments do the narrowing again. \let\nonarrowing=\relax % @cartouche ... @end cartouche: draw rectangle w/rounded corners around % environment contents. % \def\ctl{{\circle\char'013\hskip -6pt}}% 6pt from pl file: 1/2charwidth \def\ctr{{\hskip 6pt\circle\char'010}} \def\cbl{{\circle\char'012\hskip -6pt}} \def\cbr{{\hskip 6pt\circle\char'011}} \def\carttop{\hbox to \cartouter{\hskip\lskip \ctl\leaders\hrule height\circthick\hfil\ctr \hskip\rskip}} \def\cartbot{\hbox to \cartouter{\hskip\lskip \cbl\leaders\hrule height\circthick\hfil\cbr \hskip\rskip}} % \newskip\lskip\newskip\rskip % only require the font if @cartouche is actually used \def\cartouchefontdefs{% \font\circle=lcircle10\relax \circthick=\fontdimen8\circle } \newdimen\circthick \newdimen\cartouter\newdimen\cartinner \newskip\normbskip\newskip\normpskip\newskip\normlskip \envdef\cartouche{% \cartouchefontdefs \ifhmode\par\fi % can't be in the midst of a paragraph. \startsavinginserts \lskip=\leftskip \rskip=\rightskip \leftskip=0pt\rightskip=0pt % we want these *outside*. \cartinner=\hsize \advance\cartinner by-\lskip \advance\cartinner by-\rskip \cartouter=\hsize \advance\cartouter by 18.4pt % allow for 3pt kerns on either % side, and for 6pt waste from % each corner char, and rule thickness \normbskip=\baselineskip \normpskip=\parskip \normlskip=\lineskip % % If this cartouche directly follows a sectioning command, we need the % \parskip glue (backspaced over by default) or the cartouche can % collide with the section heading. \ifnum\lastpenalty>10000 \vskip\parskip \penalty\lastpenalty \fi % \setbox\groupbox=\vbox\bgroup \baselineskip=0pt\parskip=0pt\lineskip=0pt \carttop \hbox\bgroup \hskip\lskip \vrule\kern3pt \vbox\bgroup \kern3pt \hsize=\cartinner \baselineskip=\normbskip \lineskip=\normlskip \parskip=\normpskip \vskip -\parskip \comment % For explanation, see the end of def\group. } \def\Ecartouche{% \ifhmode\par\fi \kern3pt \egroup \kern3pt\vrule \hskip\rskip \egroup \cartbot \egroup \addgroupbox \checkinserts } % This macro is called at the beginning of all the @example variants, % inside a group. \newdimen\nonfillparindent \def\nonfillstart{% \aboveenvbreak \ifdim\hfuzz < 12pt \hfuzz = 12pt \fi % Don't be fussy \sepspaces % Make spaces be word-separators rather than space tokens. \let\par = \lisppar % don't ignore blank lines \obeylines % each line of input is a line of output \parskip = 0pt % Turn off paragraph indentation but redefine \indent to emulate % the normal \indent. \nonfillparindent=\parindent \parindent = 0pt \let\indent\nonfillindent % \emergencystretch = 0pt % don't try to avoid overfull boxes \ifx\nonarrowing\relax \advance \leftskip by \lispnarrowing \exdentamount=\lispnarrowing \else \let\nonarrowing = \relax \fi \let\exdent=\nofillexdent } \begingroup \obeyspaces % We want to swallow spaces (but not other tokens) after the fake % @indent in our nonfill-environments, where spaces are normally % active and set to @tie, resulting in them not being ignored after % @indent. \gdef\nonfillindent{\futurelet\temp\nonfillindentcheck}% \gdef\nonfillindentcheck{% \ifx\temp % \expandafter\nonfillindentgobble% \else% \leavevmode\nonfillindentbox% \fi% }% \endgroup \def\nonfillindentgobble#1{\nonfillindent} \def\nonfillindentbox{\hbox to \nonfillparindent{\hss}} % If you want all examples etc. small: @set dispenvsize small. % If you want even small examples the full size: @set dispenvsize nosmall. % This affects the following displayed environments: % @example, @display, @format, @lisp, @verbatim % \def\smallword{small} \def\nosmallword{nosmall} \let\SETdispenvsize\relax \def\setnormaldispenv{% \ifx\SETdispenvsize\smallword % end paragraph for sake of leading, in case document has no blank % line. This is redundant with what happens in \aboveenvbreak, but % we need to do it before changing the fonts, and it's inconvenient % to change the fonts afterward. \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } \def\setsmalldispenv{% \ifx\SETdispenvsize\nosmallword \else \ifnum \lastpenalty=10000 \else \endgraf \fi \smallexamplefonts \rm \fi } % We often define two environments, @foo and @smallfoo. % Let's do it in one command. #1 is the env name, #2 the definition. \def\makedispenvdef#1#2{% \expandafter\envdef\csname#1\endcsname {\setnormaldispenv #2}% \expandafter\envdef\csname small#1\endcsname {\setsmalldispenv #2}% \expandafter\let\csname E#1\endcsname \afterenvbreak \expandafter\let\csname Esmall#1\endcsname \afterenvbreak } % Define two environment synonyms (#1 and #2) for an environment. \def\maketwodispenvdef#1#2#3{% \makedispenvdef{#1}{#3}% \makedispenvdef{#2}{#3}% } % % @lisp: indented, narrowed, typewriter font; % @example: same as @lisp. % % @smallexample and @smalllisp: use smaller fonts. % Originally contributed by Pavel@xerox. % \maketwodispenvdef{lisp}{example}{% \nonfillstart \tt\setcodequotes \let\kbdfont = \kbdexamplefont % Allow @kbd to do something special. \parsearg\gobble } % @display/@smalldisplay: same as @lisp except keep current font. % \makedispenvdef{display}{% \nonfillstart \gobble } % @format/@smallformat: same as @display except don't narrow margins. % \makedispenvdef{format}{% \let\nonarrowing = t% \nonfillstart \gobble } % @flushleft: same as @format, but doesn't obey \SETdispenvsize. \envdef\flushleft{% \let\nonarrowing = t% \nonfillstart \gobble } \let\Eflushleft = \afterenvbreak % @flushright. % \envdef\flushright{% \let\nonarrowing = t% \nonfillstart \advance\leftskip by 0pt plus 1fill\relax \gobble } \let\Eflushright = \afterenvbreak % @raggedright does more-or-less normal line breaking but no right % justification. From plain.tex. \envdef\raggedright{% \rightskip0pt plus2.4em \spaceskip.3333em \xspaceskip.5em\relax } \let\Eraggedright\par \envdef\raggedleft{% \parindent=0pt \leftskip0pt plus2em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedleft\par \envdef\raggedcenter{% \parindent=0pt \rightskip0pt plus1em \leftskip0pt plus1em \spaceskip.3333em \xspaceskip.5em \parfillskip=0pt \hbadness=10000 % Last line will usually be underfull, so turn off % badness reporting. } \let\Eraggedcenter\par % @quotation does normal linebreaking (hence we can't use \nonfillstart) % and narrows the margins. We keep \parskip nonzero in general, since % we're doing normal filling. So, when using \aboveenvbreak and % \afterenvbreak, temporarily make \parskip 0. % \makedispenvdef{quotation}{\quotationstart} % \def\quotationstart{% \indentedblockstart % same as \indentedblock, but increase right margin too. \ifx\nonarrowing\relax \advance\rightskip by \lispnarrowing \fi \parsearg\quotationlabel } % We have retained a nonzero parskip for the environment, since we're % doing normal filling. % \def\Equotation{% \par \ifx\quotationauthor\thisisundefined\else % indent a bit. \leftline{\kern 2\leftskip \sl ---\quotationauthor}% \fi {\parskip=0pt \afterenvbreak}% } \def\Esmallquotation{\Equotation} % If we're given an argument, typeset it in bold with a colon after. \def\quotationlabel#1{% \def\temp{#1}% \ifx\temp\empty \else {\bf #1: }% \fi } % @indentedblock is like @quotation, but indents only on the left and % has no optional argument. % \makedispenvdef{indentedblock}{\indentedblockstart} % \def\indentedblockstart{% {\parskip=0pt \aboveenvbreak}% because \aboveenvbreak inserts \parskip \parindent=0pt % % @cartouche defines \nonarrowing to inhibit narrowing at next level down. \ifx\nonarrowing\relax \advance\leftskip by \lispnarrowing \exdentamount = \lispnarrowing \else \let\nonarrowing = \relax \fi } % Keep a nonzero parskip for the environment, since we're doing normal filling. % \def\Eindentedblock{% \par {\parskip=0pt \afterenvbreak}% } \def\Esmallindentedblock{\Eindentedblock} % LaTeX-like @verbatim...@end verbatim and @verb{...} % If we want to allow any as delimiter, % we need the curly braces so that makeinfo sees the @verb command, eg: % `@verbx...x' would look like the '@verbx' command. --janneke@gnu.org % % [Knuth]: Donald Ervin Knuth, 1996. The TeXbook. % % [Knuth] p.344; only we need to do the other characters Texinfo sets % active too. Otherwise, they get lost as the first character on a % verbatim line. \def\dospecials{% \do\ \do\\\do\{\do\}\do\$\do\&% \do\#\do\^\do\^^K\do\_\do\^^A\do\%\do\~% \do\<\do\>\do\|\do\@\do+\do\"% % Don't do the quotes -- if we do, @set txicodequoteundirected and % @set txicodequotebacktick will not have effect on @verb and % @verbatim, and ?` and !` ligatures won't get disabled. %\do\`\do\'% } % % [Knuth] p. 380 \def\uncatcodespecials{% \def\do##1{\catcode`##1=\other}\dospecials} % % Setup for the @verb command. % % Eight spaces for a tab \begingroup \catcode`\^^I=\active \gdef\tabeightspaces{\catcode`\^^I=\active\def^^I{\ \ \ \ \ \ \ \ }} \endgroup % \def\setupverb{% \tt % easiest (and conventionally used) font for verbatim \def\par{\leavevmode\endgraf}% \setcodequotes \tabeightspaces % Respect line breaks, % print special symbols as themselves, and % make each space count % must do in this order: \obeylines \uncatcodespecials \sepspaces } % Setup for the @verbatim environment % % Real tab expansion. \newdimen\tabw \setbox0=\hbox{\tt\space} \tabw=8\wd0 % tab amount % % We typeset each line of the verbatim in an \hbox, so we can handle % tabs. \newbox\verbbox \def\starttabbox{\setbox\verbbox=\hbox\bgroup} % \begingroup \catcode`\^^I=\active \gdef\tabexpand{% \catcode`\^^I=\active \def^^I{\leavevmode\egroup \dimen\verbbox=\wd\verbbox % the width so far, or since the previous tab \divide\dimen\verbbox by\tabw \multiply\dimen\verbbox by\tabw % compute previous multiple of \tabw \advance\dimen\verbbox by\tabw % advance to next multiple of \tabw \wd\verbbox=\dimen\verbbox \leavevmode\box\verbbox \starttabbox }% } \endgroup % start the verbatim environment. \def\setupverbatim{% \let\nonarrowing = t% \nonfillstart \tt % easiest (and conventionally used) font for verbatim \def\par{\egroup\leavevmode\box\verbbox\endgraf\starttabbox}% \tabexpand \setcodequotes % Respect line breaks, % print special symbols as themselves, and % make each space count. % Must do in this order: \obeylines \uncatcodespecials \sepspaces } % Do the @verb magic: verbatim text is quoted by unique % delimiter characters. Before first delimiter expect a % right brace, after last delimiter expect closing brace: % % \def\doverb'{'#1'}'{#1} % % [Knuth] p. 382; only eat outer {} \begingroup \catcode`[=1\catcode`]=2\catcode`\{=\other\catcode`\}=\other \gdef\doverb{#1[\def\next##1#1}[##1\endgroup]\next] \endgroup % \def\verb{\begingroup\setupverb\doverb} % % % Do the @verbatim magic: define the macro \doverbatim so that % the (first) argument ends when '@end verbatim' is reached, ie: % % \def\doverbatim#1@end verbatim{#1} % % For Texinfo it's a lot easier than for LaTeX, % because texinfo's \verbatim doesn't stop at '\end{verbatim}': % we need not redefine '\', '{' and '}'. % % Inspired by LaTeX's verbatim command set [latex.ltx] % \begingroup \catcode`\ =\active \obeylines % % ignore everything up to the first ^^M, that's the newline at the end % of the @verbatim input line itself. Otherwise we get an extra blank % line in the output. \xdef\doverbatim#1^^M#2@end verbatim{% \starttabbox#2\egroup\noexpand\end\gobble verbatim}% % We really want {...\end verbatim} in the body of the macro, but % without the active space; thus we have to use \xdef and \gobble. % The \egroup ends the \verbbox started at the end of the last line in % the block. \endgroup % \envdef\verbatim{% \setnormaldispenv\setupverbatim\doverbatim } \let\Everbatim = \afterenvbreak % @verbatiminclude FILE - insert text of file in verbatim environment. % \def\verbatiminclude{\parseargusing\filenamecatcodes\doverbatiminclude} % \def\doverbatiminclude#1{% {% \makevalueexpandable \setupverbatim {% \indexnofonts % Allow `@@' and other weird things in file names. \wlog{texinfo.tex: doing @verbatiminclude of #1^^J}% \edef\tmp{\noexpand\input #1 } \expandafter }\expandafter\starttabbox\tmp\egroup \afterenvbreak }% } % @copying ... @end copying. % Save the text away for @insertcopying later. % % We save the uninterpreted tokens, rather than creating a box. % Saving the text in a box would be much easier, but then all the % typesetting commands (@smallbook, font changes, etc.) have to be done % beforehand -- and a) we want @copying to be done first in the source % file; b) letting users define the frontmatter in as flexible order as % possible is desirable. % \def\copying{\checkenv{}\begingroup\scanargctxt\docopying} \def\docopying#1@end copying{\endgroup\def\copyingtext{#1}} % \def\insertcopying{% \begingroup \parindent = 0pt % paragraph indentation looks wrong on title page \scanexp\copyingtext \endgroup } \message{defuns,} % @defun etc. \newskip\defbodyindent \defbodyindent=.4in \newskip\defargsindent \defargsindent=50pt \newskip\deflastargmargin \deflastargmargin=18pt \newcount\defunpenalty % Start the processing of @deffn: \def\startdefun{% \ifnum\lastpenalty<10000 \medbreak \defunpenalty=10003 % Will keep this @deffn together with the % following @def command, see below. \else % If there are two @def commands in a row, we'll have a \nobreak, % which is there to keep the function description together with its % header. But if there's nothing but headers, we need to allow a % break somewhere. Check specifically for penalty 10002, inserted % by \printdefunline, instead of 10000, since the sectioning % commands also insert a nobreak penalty, and we don't want to allow % a break between a section heading and a defun. % % As a further refinement, we avoid "club" headers by signalling % with penalty of 10003 after the very first @deffn in the % sequence (see above), and penalty of 10002 after any following % @def command. \ifnum\lastpenalty=10002 \penalty2000 \else \defunpenalty=10002 \fi % % Similarly, after a section heading, do not allow a break. % But do insert the glue. \medskip % preceded by discardable penalty, so not a breakpoint \fi % \parindent=0in \advance\leftskip by \defbodyindent \exdentamount=\defbodyindent } \def\dodefunx#1{% % First, check whether we are in the right environment: \checkenv#1% % % As above, allow line break if we have multiple x headers in a row. % It's not a great place, though. \ifnum\lastpenalty=10002 \penalty3000 \else \defunpenalty=10002 \fi % % And now, it's time to reuse the body of the original defun: \expandafter\gobbledefun#1% } \def\gobbledefun#1\startdefun{} % \printdefunline \deffnheader{text} % \def\printdefunline#1#2{% \begingroup \plainfrenchspacing % call \deffnheader: #1#2 \endheader % common ending: \interlinepenalty = 10000 \advance\rightskip by 0pt plus 1fil\relax \endgraf \nobreak\vskip -\parskip \penalty\defunpenalty % signal to \startdefun and \dodefunx % Some of the @defun-type tags do not enable magic parentheses, % rendering the following check redundant. But we don't optimize. \checkparencounts \endgroup } \def\Edefun{\endgraf\medbreak} % \makedefun{deffn} creates \deffn, \deffnx and \Edeffn; % the only thing remaining is to define \deffnheader. % \def\makedefun#1{% \expandafter\let\csname E#1\endcsname = \Edefun \edef\temp{\noexpand\domakedefun \makecsname{#1}\makecsname{#1x}\makecsname{#1header}}% \temp } % \domakedefun \deffn \deffnx \deffnheader { (defn. of \deffnheader) } % % Define \deffn and \deffnx, without parameters. % \deffnheader has to be defined explicitly. % \def\domakedefun#1#2#3{% \envdef#1{% \startdefun \doingtypefnfalse % distinguish typed functions from all else \parseargusing\activeparens{\printdefunline#3}% }% \def#2{\dodefunx#1}% \def#3% } \newif\ifdoingtypefn % doing typed function? \newif\ifrettypeownline % typeset return type on its own line? % @deftypefnnewline on|off says whether the return type of typed functions % are printed on their own line. This affects @deftypefn, @deftypefun, % @deftypeop, and @deftypemethod. % \parseargdef\deftypefnnewline{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETtxideftypefnnl\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETtxideftypefnnl\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @txideftypefnnl value `\temp', must be on|off}% \fi\fi } % \dosubind {index}{topic}{subtopic} % % If SUBTOPIC is present, precede it with a space, and call \doind. % (At some time during the 20th century, this made a two-level entry in an % index such as the operation index. Nobody seemed to notice the change in % behaviour though.) \def\dosubind#1#2#3{% \def\thirdarg{#3}% \ifx\thirdarg\empty \doind{#1}{#2}% \else \doind{#1}{#2\space#3}% \fi } % Untyped functions: % @deffn category name args \makedefun{deffn}{\deffngeneral{}} % @deffn category class name args \makedefun{defop}#1 {\defopon{#1\ \putwordon}} % \defopon {category on}class name args \def\defopon#1#2 {\deffngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deffngeneral {subind}category name args % \def\deffngeneral#1#2 #3 #4\endheader{% \dosubind{fn}{\code{#3}}{#1}% \defname{#2}{}{#3}\magicamp\defunargs{#4\unskip}% } % Typed functions: % @deftypefn category type name args \makedefun{deftypefn}{\deftypefngeneral{}} % @deftypeop category class type name args \makedefun{deftypeop}#1 {\deftypeopon{#1\ \putwordon}} % \deftypeopon {category on}class type name args \def\deftypeopon#1#2 {\deftypefngeneral{\putwordon\ \code{#2}}{#1\ \code{#2}} } % \deftypefngeneral {subind}category type name args % \def\deftypefngeneral#1#2 #3 #4 #5\endheader{% \dosubind{fn}{\code{#4}}{#1}% \doingtypefntrue \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Typed variables: % @deftypevr category type var args \makedefun{deftypevr}{\deftypecvgeneral{}} % @deftypecv category class type var args \makedefun{deftypecv}#1 {\deftypecvof{#1\ \putwordof}} % \deftypecvof {category of}class type var args \def\deftypecvof#1#2 {\deftypecvgeneral{\putwordof\ \code{#2}}{#1\ \code{#2}} } % \deftypecvgeneral {subind}category type var args % \def\deftypecvgeneral#1#2 #3 #4 #5\endheader{% \dosubind{vr}{\code{#4}}{#1}% \defname{#2}{#3}{#4}\defunargs{#5\unskip}% } % Untyped variables: % @defvr category var args \makedefun{defvr}#1 {\deftypevrheader{#1} {} } % @defcv category class var args \makedefun{defcv}#1 {\defcvof{#1\ \putwordof}} % \defcvof {category of}class var args \def\defcvof#1#2 {\deftypecvof{#1}#2 {} } % Types: % @deftp category name args \makedefun{deftp}#1 #2 #3\endheader{% \doind{tp}{\code{#2}}% \defname{#1}{}{#2}\defunargs{#3\unskip}% } % Remaining @defun-like shortcuts: \makedefun{defun}{\deffnheader{\putwordDeffunc} } \makedefun{defmac}{\deffnheader{\putwordDefmac} } \makedefun{defspec}{\deffnheader{\putwordDefspec} } \makedefun{deftypefun}{\deftypefnheader{\putwordDeffunc} } \makedefun{defvar}{\defvrheader{\putwordDefvar} } \makedefun{defopt}{\defvrheader{\putwordDefopt} } \makedefun{deftypevar}{\deftypevrheader{\putwordDefvar} } \makedefun{defmethod}{\defopon\putwordMethodon} \makedefun{deftypemethod}{\deftypeopon\putwordMethodon} \makedefun{defivar}{\defcvof\putwordInstanceVariableof} \makedefun{deftypeivar}{\deftypecvof\putwordInstanceVariableof} % \defname, which formats the name of the @def (not the args). % #1 is the category, such as "Function". % #2 is the return type, if any. % #3 is the function name. % % We are followed by (but not passed) the arguments, if any. % \def\defname#1#2#3{% \par % Get the values of \leftskip and \rightskip as they were outside the @def... \advance\leftskip by -\defbodyindent % % Determine if we are typesetting the return type of a typed function % on a line by itself. \rettypeownlinefalse \ifdoingtypefn % doing a typed function specifically? % then check user option for putting return type on its own line: \expandafter\ifx\csname SETtxideftypefnnl\endcsname\relax \else \rettypeownlinetrue \fi \fi % % How we'll format the category name. Putting it in brackets helps % distinguish it from the body text that may end up on the next line % just below it. \def\temp{#1}% \setbox0=\hbox{\kern\deflastargmargin \ifx\temp\empty\else [\rm\temp]\fi} % % Figure out line sizes for the paragraph shape. We'll always have at % least two. \tempnum = 2 % % The first line needs space for \box0; but if \rightskip is nonzero, % we need only space for the part of \box0 which exceeds it: \dimen0=\hsize \advance\dimen0 by -\wd0 \advance\dimen0 by \rightskip % % If doing a return type on its own line, we'll have another line. \ifrettypeownline \advance\tempnum by 1 \def\maybeshapeline{0in \hsize}% \else \def\maybeshapeline{}% \fi % % The continuations: \dimen2=\hsize \advance\dimen2 by -\defargsindent % % The final paragraph shape: \parshape \tempnum 0in \dimen0 \maybeshapeline \defargsindent \dimen2 % % Put the category name at the right margin. \noindent \hbox to 0pt{% \hfil\box0 \kern-\hsize % \hsize has to be shortened this way: \kern\leftskip % Intentionally do not respect \rightskip, since we need the space. }% % % Allow all lines to be underfull without complaint: \tolerance=10000 \hbadness=10000 \exdentamount=\defbodyindent {% % defun fonts. We use typewriter by default (used to be bold) because: % . we're printing identifiers, they should be in tt in principle. % . in languages with many accents, such as Czech or French, it's % common to leave accents off identifiers. The result looks ok in % tt, but exceedingly strange in rm. % . we don't want -- and --- to be treated as ligatures. % . this still does not fix the ?` and !` ligatures, but so far no % one has made identifiers using them :). \df \tt \def\temp{#2}% text of the return type \ifx\temp\empty\else \tclose{\temp}% typeset the return type \ifrettypeownline % put return type on its own line; prohibit line break following: \hfil\vadjust{\nobreak}\break \else \space % type on same line, so just followed by a space \fi \fi % no return type #3% output function name }% {\rm\enskip}% hskip 0.5 em of \rmfont % \boldbrax % arguments will be output next, if any. } % Print arguments in slanted roman (not ttsl), inconsistently with using % tt for the name. This is because literal text is sometimes needed in % the argument list (groff manual), and ttsl and tt are not very % distinguishable. Prevent hyphenation at `-' chars. % \def\defunargs#1{% % use sl by default (not ttsl), % tt for the names. \df \sl \hyphenchar\font=0 % % On the other hand, if an argument has two dashes (for instance), we % want a way to get ttsl. We used to recommend @var for that, so % leave the code in, but it's strange for @var to lead to typewriter. % Nowadays we recommend @code, since the difference between a ttsl hyphen % and a tt hyphen is pretty tiny. @code also disables ?` !`. \def\var##1{{\setregularquotes\ttslanted{##1}}}% #1% \sl\hyphenchar\font=45 } % We want ()&[] to print specially on the defun line. % \def\activeparens{% \catcode`\(=\active \catcode`\)=\active \catcode`\[=\active \catcode`\]=\active \catcode`\&=\active } % Make control sequences which act like normal parenthesis chars. \let\lparen = ( \let\rparen = ) % Be sure that we always have a definition for `(', etc. For example, % if the fn name has parens in it, \boldbrax will not be in effect yet, % so TeX would otherwise complain about undefined control sequence. { \activeparens \global\let(=\lparen \global\let)=\rparen \global\let[=\lbrack \global\let]=\rbrack \global\let& = \& \gdef\boldbrax{\let(=\opnr\let)=\clnr\let[=\lbrb\let]=\rbrb} \gdef\magicamp{\let&=\amprm} } \let\ampchar\& \newcount\parencount % If we encounter &foo, then turn on ()-hacking afterwards \newif\ifampseen \def\amprm#1 {\ampseentrue{\bf\ }} \def\parenfont{% \ifampseen % At the first level, print parens in roman, % otherwise use the default font. \ifnum \parencount=1 \rm \fi \else % The \sf parens (in \boldbrax) actually are a little bolder than % the contained text. This is especially needed for [ and ] . \sf \fi } \def\infirstlevel#1{% \ifampseen \ifnum\parencount=1 #1% \fi \fi } \def\bfafterword#1 {#1 \bf} \def\opnr{% \global\advance\parencount by 1 {\parenfont(}% \infirstlevel \bfafterword } \def\clnr{% {\parenfont)}% \infirstlevel \sl \global\advance\parencount by -1 } \newcount\brackcount \def\lbrb{% \global\advance\brackcount by 1 {\bf[}% } \def\rbrb{% {\bf]}% \global\advance\brackcount by -1 } \def\checkparencounts{% \ifnum\parencount=0 \else \badparencount \fi \ifnum\brackcount=0 \else \badbrackcount \fi } % these should not use \errmessage; the glibc manual, at least, actually % has such constructs (when documenting function pointers). \def\badparencount{% \message{Warning: unbalanced parentheses in @def...}% \global\parencount=0 } \def\badbrackcount{% \message{Warning: unbalanced square brackets in @def...}% \global\brackcount=0 } \message{macros,} % @macro. % To do this right we need a feature of e-TeX, \scantokens, % which we arrange to emulate with a temporary file in ordinary TeX. \ifx\eTeXversion\thisisundefined \newwrite\macscribble \def\scantokens#1{% \toks0={#1}% \immediate\openout\macscribble=\jobname.tmp \immediate\write\macscribble{\the\toks0}% \immediate\closeout\macscribble \input \jobname.tmp } \fi \let\E=\expandafter % Used at the time of macro expansion. % Argument is macro body with arguments substituted \def\scanmacro#1{% \newlinechar`\^^M % expand the expansion of \eatleadingcr twice to maybe remove a leading % newline (and \else and \fi tokens), then call \eatspaces on the result. \def\xeatspaces##1{% \E\E\E\E\E\E\E\eatspaces\E\E\E\E\E\E\E{\eatleadingcr##1% }}% \def\xempty##1{}% % % Process the macro body under the current catcode regime. \scantokens{#1@comment}% % % The \comment is to remove the \newlinechar added by \scantokens, and % can be noticed by \parsearg. Note \c isn't used because this means cedilla % in math mode. } % Used for copying and captions \def\scanexp#1{% \expandafter\scanmacro\expandafter{#1}% } \newcount\paramno % Count of parameters \newtoks\macname % Macro name \newif\ifrecursive % Is it recursive? % List of all defined macros in the form % \commondummyword\macro1\commondummyword\macro2... % Currently is also contains all @aliases; the list can be split % if there is a need. \def\macrolist{} % Add the macro to \macrolist \def\addtomacrolist#1{\expandafter \addtomacrolistxxx \csname#1\endcsname} \def\addtomacrolistxxx#1{% \toks0 = \expandafter{\macrolist\commondummyword#1}% \xdef\macrolist{\the\toks0}% } % Utility routines. % This does \let #1 = #2, with \csnames; that is, % \let \csname#1\endcsname = \csname#2\endcsname % (except of course we have to play expansion games). % \def\cslet#1#2{% \expandafter\let \csname#1\expandafter\endcsname \csname#2\endcsname } % Trim leading and trailing spaces off a string. % Concepts from aro-bend problem 15 (see CTAN). {\catcode`\@=11 \gdef\eatspaces #1{\expandafter\trim@\expandafter{#1 }} \gdef\trim@ #1{\trim@@ @#1 @ #1 @ @@} \gdef\trim@@ #1@ #2@ #3@@{\trim@@@\empty #2 @} \def\unbrace#1{#1} \unbrace{\gdef\trim@@@ #1 } #2@{#1} } {\catcode`\^^M=\other% \gdef\eatleadingcr#1{\if\noexpand#1\noexpand^^M\else\E#1\fi}}% % Warning: this won't work for a delimited argument % or for an empty argument % Trim a single trailing ^^M off a string. {\catcode`\^^M=\other \catcode`\Q=3% \gdef\eatcr #1{\eatcra #1Q^^MQ}% \gdef\eatcra#1^^MQ{\eatcrb#1Q}% \gdef\eatcrb#1Q#2Q{#1}% } % Macro bodies are absorbed as an argument in a context where % all characters are catcode 10, 11 or 12, except \ which is active % (as in normal texinfo). It is necessary to change the definition of \ % to recognize macro arguments; this is the job of \mbodybackslash. % % Non-ASCII encodings make 8-bit characters active, so un-activate % them to avoid their expansion. Must do this non-globally, to % confine the change to the current group. % % It's necessary to have hard CRs when the macro is executed. This is % done by making ^^M (\endlinechar) catcode 12 when reading the macro % body, and then making it the \newlinechar in \scanmacro. % \def\scanctxt{% used as subroutine \catcode`\"=\other \catcode`\+=\other \catcode`\<=\other \catcode`\>=\other \catcode`\^=\other \catcode`\_=\other \catcode`\|=\other \catcode`\~=\other \passthroughcharstrue } \def\scanargctxt{% used for copying and captions, not macros. \scanctxt \catcode`\@=\other \catcode`\\=\other \catcode`\^^M=\other } \def\macrobodyctxt{% used for @macro definitions \scanctxt \catcode`\ =\other \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other \catcode`\^^M=\other \usembodybackslash } % Used when scanning braced macro arguments. Note, however, that catcode % changes here are ineffectual if the macro invocation was nested inside % an argument to another Texinfo command. \def\macroargctxt{% \scanctxt \catcode`\ =\active \catcode`\@=\other \catcode`\^^M=\other \catcode`\\=\active } \def\macrolineargctxt{% used for whole-line arguments without braces \scanctxt \catcode`\@=\other \catcode`\{=\other \catcode`\}=\other } % \mbodybackslash is the definition of \ in @macro bodies. % It maps \foo\ => \csname macarg.foo\endcsname => #N % where N is the macro parameter number. % We define \csname macarg.\endcsname to be \realbackslash, so % \\ in macro replacement text gets you a backslash. % {\catcode`@=0 @catcode`@\=@active @gdef@usembodybackslash{@let\=@mbodybackslash} @gdef@mbodybackslash#1\{@csname macarg.#1@endcsname} } \expandafter\def\csname macarg.\endcsname{\realbackslash} \def\margbackslash#1{\char`\#1 } \def\macro{\recursivefalse\parsearg\macroxxx} \def\rmacro{\recursivetrue\parsearg\macroxxx} \def\macroxxx#1{% \getargs{#1}% now \macname is the macname and \argl the arglist \ifx\argl\empty % no arguments \paramno=0\relax \else \expandafter\parsemargdef \argl;% \if\paramno>256\relax \ifx\eTeXversion\thisisundefined \errhelp = \EMsimple \errmessage{You need eTeX to compile a file with macros with more than 256 arguments} \fi \fi \fi \if1\csname ismacro.\the\macname\endcsname \message{Warning: redefining \the\macname}% \else \expandafter\ifx\csname \the\macname\endcsname \relax \else \errmessage{Macro name \the\macname\space already defined}\fi \global\cslet{macsave.\the\macname}{\the\macname}% \global\expandafter\let\csname ismacro.\the\macname\endcsname=1% \addtomacrolist{\the\macname}% \fi \begingroup \macrobodyctxt \ifrecursive \expandafter\parsermacbody \else \expandafter\parsemacbody \fi} \parseargdef\unmacro{% \if1\csname ismacro.#1\endcsname \global\cslet{#1}{macsave.#1}% \global\expandafter\let \csname ismacro.#1\endcsname=0% % Remove the macro name from \macrolist: \begingroup \expandafter\let\csname#1\endcsname \relax \let\commondummyword\unmacrodo \xdef\macrolist{\macrolist}% \endgroup \else \errmessage{Macro #1 not defined}% \fi } % Called by \do from \dounmacro on each macro. The idea is to omit any % macro definitions that have been changed to \relax. % \def\unmacrodo#1{% \ifx #1\relax % remove this \else \noexpand\commondummyword \noexpand#1% \fi } % \getargs -- Parse the arguments to a @macro line. Set \macname to % the name of the macro, and \argl to the braced argument list. \def\getargs#1{\getargsxxx#1{}} \def\getargsxxx#1#{\getmacname #1 \relax\getmacargs} \def\getmacname#1 #2\relax{\macname={#1}} \def\getmacargs#1{\def\argl{#1}} % This made use of the feature that if the last token of a % is #, then the preceding argument is delimited by % an opening brace, and that opening brace is not consumed. % Parse the optional {params} list to @macro or @rmacro. % Set \paramno to the number of arguments, % and \paramlist to a parameter text for the macro (e.g. #1,#2,#3 for a % three-param macro.) Define \macarg.BLAH for each BLAH in the params % list to some hook where the argument is to be expanded. If there are % less than 10 arguments that hook is to be replaced by ##N where N % is the position in that list, that is to say the macro arguments are to be % defined `a la TeX in the macro body. % % That gets used by \mbodybackslash (above). % % If there are 10 or more arguments, a different technique is used: see % \parsemmanyargdef. % \def\parsemargdef#1;{% \paramno=0\def\paramlist{}% \let\hash\relax % \hash is redefined to `#' later to get it into definitions \let\xeatspaces\relax \let\xempty\relax \parsemargdefxxx#1,;,% \ifnum\paramno<10\relax\else \paramno0\relax \parsemmanyargdef@@#1,;,% 10 or more arguments \fi } \def\parsemargdefxxx#1,{% \if#1;\let\next=\relax \else \let\next=\parsemargdefxxx \advance\paramno by 1 \expandafter\edef\csname macarg.\eatspaces{#1}\endcsname {\xeatspaces{\hash\the\paramno\noexpand\xempty{}}}% \edef\paramlist{\paramlist\hash\the\paramno,}% \fi\next} % the \xempty{} is to give \eatleadingcr an argument in the case of an % empty macro argument. % \parsemacbody, \parsermacbody % % Read recursive and nonrecursive macro bodies. (They're different since % rec and nonrec macros end differently.) % % We are in \macrobodyctxt, and the \xdef causes backslashshes in the macro % body to be transformed. % Set \macrobody to the body of the macro, and call \defmacro. % {\catcode`\ =\other\long\gdef\parsemacbody#1@end macro{% \xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% {\catcode`\ =\other\long\gdef\parsermacbody#1@end rmacro{% \xdef\macrobody{\eatcr{#1}}\endgroup\defmacro}}% % Make @ a letter, so that we can make private-to-Texinfo macro names. \edef\texiatcatcode{\the\catcode`\@} \catcode `@=11\relax %%%%%%%%%%%%%% Code for > 10 arguments only %%%%%%%%%%%%%%%%%% % If there are 10 or more arguments, a different technique is used, where the % hook remains in the body, and when macro is to be expanded the body is % processed again to replace the arguments. % % In that case, the hook is \the\toks N-1, and we simply set \toks N-1 to the % argument N value and then \edef the body (nothing else will expand because of % the catcode regime under which the body was input). % % If you compile with TeX (not eTeX), and you have macros with 10 or more % arguments, no macro can have more than 256 arguments (else error). % % In case that there are 10 or more arguments we parse again the arguments % list to set new definitions for the \macarg.BLAH macros corresponding to % each BLAH argument. It was anyhow needed to parse already once this list % in order to count the arguments, and as macros with at most 9 arguments % are by far more frequent than macro with 10 or more arguments, defining % twice the \macarg.BLAH macros does not cost too much processing power. \def\parsemmanyargdef@@#1,{% \if#1;\let\next=\relax \else \let\next=\parsemmanyargdef@@ \edef\tempb{\eatspaces{#1}}% \expandafter\def\expandafter\tempa \expandafter{\csname macarg.\tempb\endcsname}% % Note that we need some extra \noexpand\noexpand, this is because we % don't want \the to be expanded in the \parsermacbody as it uses an % \xdef . \expandafter\edef\tempa {\noexpand\noexpand\noexpand\the\toks\the\paramno}% \advance\paramno by 1\relax \fi\next} \let\endargs@\relax \let\nil@\relax \def\nilm@{\nil@}% \long\def\nillm@{\nil@}% % This macro is expanded during the Texinfo macro expansion, not during its % definition. It gets all the arguments' values and assigns them to macros % macarg.ARGNAME % % #1 is the macro name % #2 is the list of argument names % #3 is the list of argument values \def\getargvals@#1#2#3{% \def\macargdeflist@{}% \def\saveparamlist@{#2}% Need to keep a copy for parameter expansion. \def\paramlist{#2,\nil@}% \def\macroname{#1}% \begingroup \macroargctxt \def\argvaluelist{#3,\nil@}% \def\@tempa{#3}% \ifx\@tempa\empty \setemptyargvalues@ \else \getargvals@@ \fi } \def\getargvals@@{% \ifx\paramlist\nilm@ % Some sanity check needed here that \argvaluelist is also empty. \ifx\argvaluelist\nillm@ \else \errhelp = \EMsimple \errmessage{Too many arguments in macro `\macroname'!}% \fi \let\next\macargexpandinbody@ \else \ifx\argvaluelist\nillm@ % No more arguments values passed to macro. Set remaining named-arg % macros to empty. \let\next\setemptyargvalues@ \else % pop current arg name into \@tempb \def\@tempa##1{\pop@{\@tempb}{\paramlist}##1\endargs@}% \expandafter\@tempa\expandafter{\paramlist}% % pop current argument value into \@tempc \def\@tempa##1{\longpop@{\@tempc}{\argvaluelist}##1\endargs@}% \expandafter\@tempa\expandafter{\argvaluelist}% % Here \@tempb is the current arg name and \@tempc is the current arg value. % First place the new argument macro definition into \@tempd \expandafter\macname\expandafter{\@tempc}% \expandafter\let\csname macarg.\@tempb\endcsname\relax \expandafter\def\expandafter\@tempe\expandafter{% \csname macarg.\@tempb\endcsname}% \edef\@tempd{\long\def\@tempe{\the\macname}}% \push@\@tempd\macargdeflist@ \let\next\getargvals@@ \fi \fi \next } \def\push@#1#2{% \expandafter\expandafter\expandafter\def \expandafter\expandafter\expandafter#2% \expandafter\expandafter\expandafter{% \expandafter#1#2}% } % Replace arguments by their values in the macro body, and place the result % in macro \@tempa. % \def\macvalstoargs@{% % To do this we use the property that token registers that are \the'ed % within an \edef expand only once. So we are going to place all argument % values into respective token registers. % % First we save the token context, and initialize argument numbering. \begingroup \paramno0\relax % Then, for each argument number #N, we place the corresponding argument % value into a new token list register \toks#N \expandafter\putargsintokens@\saveparamlist@,;,% % Then, we expand the body so that argument are replaced by their % values. The trick for values not to be expanded themselves is that they % are within tokens and that tokens expand only once in an \edef . \edef\@tempc{\csname mac.\macroname .body\endcsname}% % Now we restore the token stack pointer to free the token list registers % which we have used, but we make sure that expanded body is saved after % group. \expandafter \endgroup \expandafter\def\expandafter\@tempa\expandafter{\@tempc}% } % Define the named-macro outside of this group and then close this group. % \def\macargexpandinbody@{% \expandafter \endgroup \macargdeflist@ % First the replace in body the macro arguments by their values, the result % is in \@tempa . \macvalstoargs@ % Then we point at the \norecurse or \gobble (for recursive) macro value % with \@tempb . \expandafter\let\expandafter\@tempb\csname mac.\macroname .recurse\endcsname % Depending on whether it is recursive or not, we need some tailing % \egroup . \ifx\@tempb\gobble \let\@tempc\relax \else \let\@tempc\egroup \fi % And now we do the real job: \edef\@tempd{\noexpand\@tempb{\macroname}\noexpand\scanmacro{\@tempa}\@tempc}% \@tempd } \def\putargsintokens@#1,{% \if#1;\let\next\relax \else \let\next\putargsintokens@ % First we allocate the new token list register, and give it a temporary % alias \@tempb . \toksdef\@tempb\the\paramno % Then we place the argument value into that token list register. \expandafter\let\expandafter\@tempa\csname macarg.#1\endcsname \expandafter\@tempb\expandafter{\@tempa}% \advance\paramno by 1\relax \fi \next } % Trailing missing arguments are set to empty. % \def\setemptyargvalues@{% \ifx\paramlist\nilm@ \let\next\macargexpandinbody@ \else \expandafter\setemptyargvaluesparser@\paramlist\endargs@ \let\next\setemptyargvalues@ \fi \next } \def\setemptyargvaluesparser@#1,#2\endargs@{% \expandafter\def\expandafter\@tempa\expandafter{% \expandafter\def\csname macarg.#1\endcsname{}}% \push@\@tempa\macargdeflist@ \def\paramlist{#2}% } % #1 is the element target macro % #2 is the list macro % #3,#4\endargs@ is the list value \def\pop@#1#2#3,#4\endargs@{% \def#1{#3}% \def#2{#4}% } \long\def\longpop@#1#2#3,#4\endargs@{% \long\def#1{#3}% \long\def#2{#4}% } %%%%%%%%%%%%%% End of code for > 10 arguments %%%%%%%%%%%%%%%%%% % This defines a Texinfo @macro or @rmacro, called by \parsemacbody. % \macrobody has the body of the macro in it, with placeholders for % its parameters, looking like "\xeatspaces{\hash 1}". % \paramno is the number of parameters % \paramlist is a TeX parameter text, e.g. "#1,#2,#3," % There are four cases: macros of zero, one, up to nine, and many arguments. % \xdef is used so that macro definitions will survive the file % they're defined in: @include reads the file inside a group. % \def\defmacro{% \let\hash=##% convert placeholders to macro parameter chars \ifnum\paramno=1 \def\xeatspaces##1{##1}% % This removes the pair of braces around the argument. We don't % use \eatspaces, because this can cause ends of lines to be lost % when the argument to \eatspaces is read, leading to line-based % commands like "@itemize" not being read correctly. \else \let\xeatspaces\relax % suppress expansion \fi \ifcase\paramno % 0 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\spaceisspace \noexpand\endlineisspace \noexpand\expandafter % skip any whitespace after the macro name. \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname{% \egroup \noexpand\scanmacro{\macrobody}}% \or % 1 \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\braceorline \expandafter\noexpand\csname\the\macname @@@\endcsname}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \egroup \noexpand\scanmacro{\macrobody}% }% \else % at most 9 \ifnum\paramno<10\relax % @MACNAME sets the context for reading the macro argument % @MACNAME@@ gets the argument, processes backslashes and appends a % comma. % @MACNAME@@@ removes braces surrounding the argument list. % @MACNAME@@@@ scans the macro body with arguments substituted. \expandafter\xdef\csname\the\macname\endcsname{% \bgroup \noexpand\expandafter % This \expandafter skip any spaces after the \noexpand\macroargctxt % macro before we change the catcode of space. \noexpand\expandafter \expandafter\noexpand\csname\the\macname @@\endcsname}% \expandafter\xdef\csname\the\macname @@\endcsname##1{% \noexpand\passargtomacro \expandafter\noexpand\csname\the\macname @@@\endcsname{##1,}}% \expandafter\xdef\csname\the\macname @@@\endcsname##1{% \expandafter\noexpand\csname\the\macname @@@@\endcsname ##1}% \expandafter\expandafter \expandafter\xdef \expandafter\expandafter \csname\the\macname @@@@\endcsname\paramlist{% \egroup\noexpand\scanmacro{\macrobody}}% \else % 10 or more: \expandafter\xdef\csname\the\macname\endcsname{% \noexpand\getargvals@{\the\macname}{\argl}% }% \global\expandafter\let\csname mac.\the\macname .body\endcsname\macrobody \global\expandafter\let\csname mac.\the\macname .recurse\endcsname\gobble \fi \fi} \catcode `\@\texiatcatcode\relax % end private-to-Texinfo catcodes \def\norecurse#1{\bgroup\cslet{#1}{macsave.#1}} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % {\catcode`\@=0 \catcode`\\=13 % We need to manipulate \ so use @ as escape @catcode`@_=11 % private names @catcode`@!=11 % used as argument separator % \passargtomacro#1#2 - % Call #1 with a list of tokens #2, with any doubled backslashes in #2 % compressed to one. % % This implementation works by expansion, and not execution (so we cannot use % \def or similar). This reduces the risk of this failing in contexts where % complete expansion is done with no execution (for example, in writing out to % an auxiliary file for an index entry). % % State is kept in the input stream: the argument passed to % @look_ahead, @gobble_and_check_finish and @add_segment is % % THE_MACRO ARG_RESULT ! {PENDING_BS} NEXT_TOKEN (... rest of input) % % where: % THE_MACRO - name of the macro we want to call % ARG_RESULT - argument list we build to pass to that macro % PENDING_BS - either a backslash or nothing % NEXT_TOKEN - used to look ahead in the input stream to see what's coming next @gdef@passargtomacro#1#2{% @add_segment #1!{}@relax#2\@_finish\% } @gdef@_finish{@_finishx} @global@let@_finishx@relax % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 used to look ahead % % If the next token is not a backslash, process the rest of the argument; % otherwise, remove the next token. @gdef@look_ahead#1!#2#3#4{% @ifx#4\% @expandafter@gobble_and_check_finish @else @expandafter@add_segment @fi#1!{#2}#4#4% } % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 should be a backslash, which is gobbled. % #5 looks ahead % % Double backslash found. Add a single backslash, and look ahead. @gdef@gobble_and_check_finish#1!#2#3#4#5{% @add_segment#1\!{}#5#5% } @gdef@is_fi{@fi} % #1 - THE_MACRO ARG_RESULT % #2 - PENDING_BS % #3 - NEXT_TOKEN % #4 is input stream until next backslash % % Input stream is either at the start of the argument, or just after a % backslash sequence, either a lone backslash, or a doubled backslash. % NEXT_TOKEN contains the first token in the input stream: if it is \finish, % finish; otherwise, append to ARG_RESULT the segment of the argument up until % the next backslash. PENDING_BACKSLASH contains a backslash to represent % a backslash just before the start of the input stream that has not been % added to ARG_RESULT. @gdef@add_segment#1!#2#3#4\{% @ifx#3@_finish @call_the_macro#1!% @else % append the pending backslash to the result, followed by the next segment @expandafter@is_fi@look_ahead#1#2#4!{\}@fi % this @fi is discarded by @look_ahead. % we can't get rid of it with \expandafter because we don't know how % long #4 is. } % #1 - THE_MACRO % #2 - ARG_RESULT % #3 discards the res of the conditional in @add_segment, and @is_fi ends the % conditional. @gdef@call_the_macro#1#2!#3@fi{@is_fi #1{#2}} } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% % \braceorline MAC is used for a one-argument macro MAC. It checks % whether the next non-whitespace character is a {. It sets the context % for reading the argument (slightly different in the two cases). Then, % to read the argument, in the whole-line case, it then calls the regular % \parsearg MAC; in the lbrace case, it calls \passargtomacro MAC. % \def\braceorline#1{\let\macnamexxx=#1\futurelet\nchar\braceorlinexxx} \def\braceorlinexxx{% \ifx\nchar\bgroup \macroargctxt \expandafter\passargtomacro \else \macrolineargctxt\expandafter\parsearg \fi \macnamexxx} % @alias. % We need some trickery to remove the optional spaces around the equal % sign. Make them active and then expand them all to nothing. % \def\alias{\parseargusing\obeyspaces\aliasxxx} \def\aliasxxx #1{\aliasyyy#1\relax} \def\aliasyyy #1=#2\relax{% {% \expandafter\let\obeyedspace=\empty \addtomacrolist{#1}% \xdef\next{\global\let\makecsname{#1}=\makecsname{#2}}% }% \next } \message{cross references,} \newwrite\auxfile \newif\ifhavexrefs % True if xref values are known. \newif\ifwarnedxrefs % True if we warned once that they aren't known. % @inforef is relatively simple. \def\inforef #1{\inforefzzz #1,,,,**} \def\inforefzzz #1,#2,#3,#4**{% \putwordSee{} \putwordInfo{} \putwordfile{} \file{\ignorespaces #3{}}, node \samp{\ignorespaces#1{}}} % @node's only job in TeX is to define \lastnode, which is used in % cross-references. The @node line might or might not have commas, and % might or might not have spaces before the first comma, like: % @node foo , bar , ... % We don't want such trailing spaces in the node name. % \parseargdef\node{\checkenv{}\donode #1 ,\finishnodeparse} % % also remove a trailing comma, in case of something like this: % @node Help-Cross, , , Cross-refs \def\donode#1 ,#2\finishnodeparse{\dodonode #1,\finishnodeparse} \def\dodonode#1,#2\finishnodeparse{\gdef\lastnode{#1}\omittopnode} % Used so that the @top node doesn't have to be wrapped in an @ifnottex % conditional. % \doignore goes to more effort to skip nested conditionals but we don't need % that here. \def\omittopnode{% \ifx\lastnode\wordTop \expandafter\ignorenode\fi } \def\wordTop{Top} % Until the next @node, @part or @bye command, divert output to a box that % is not output. \def\ignorenode{\setbox\dummybox\vbox\bgroup \def\part{\egroup\part}% \def\node{\egroup\node}% \ignorenodebye } {\let\bye\relax \gdef\ignorenodebye{\let\bye\ignorenodebyedef} \gdef\ignorenodebyedef{\egroup(`Top' node ignored)\bye}} % The redefinition of \bye here is because it is declared \outer \let\lastnode=\empty % Write a cross-reference definition for the current node. #1 is the % type (Ynumbered, Yappendix, Ynothing). % \def\donoderef#1{% \ifx\lastnode\empty\else \setref{\lastnode}{#1}% \global\let\lastnode=\empty \fi } % @anchor{NAME} -- define xref target at arbitrary point. % \newcount\savesfregister % \def\savesf{\relax \ifhmode \savesfregister=\spacefactor \fi} \def\restoresf{\relax \ifhmode \spacefactor=\savesfregister \fi} \def\anchor#1{\savesf \setref{#1}{Ynothing}\restoresf \ignorespaces} % \setref{NAME}{SNT} defines a cross-reference point NAME (a node or an % anchor), which consists of three parts: % 1) NAME-title - the current sectioning name taken from \currentsection, % or the anchor name. % 2) NAME-snt - section number and type, passed as the SNT arg, or % empty for anchors. % 3) NAME-pg - the page number. % % This is called from \donoderef, \anchor, and \dofloat. In the case of % floats, there is an additional part, which is not written here: % 4) NAME-lof - the text as it should appear in a @listoffloats. % \def\setref#1#2{% \pdfmkdest{#1}% \iflinks {% \requireauxfile \atdummies % preserve commands, but don't expand them % match definition in \xrdef, \refx, \xrefX. \def\value##1{##1}% \edef\writexrdef##1##2{% \write\auxfile{@xrdef{#1-% #1 of \setref, expanded by the \edef ##1}{##2}}% these are parameters of \writexrdef }% \toks0 = \expandafter{\currentsection}% \immediate \writexrdef{title}{\the\toks0 }% \immediate \writexrdef{snt}{\csname #2\endcsname}% \Ynumbered etc. \safewhatsit{\writexrdef{pg}{\folio}}% will be written later, at \shipout }% \fi } % @xrefautosectiontitle on|off says whether @section(ing) names are used % automatically in xrefs, if the third arg is not explicitly specified. % This was provided as a "secret" @set xref-automatic-section-title % variable, now it's official. % \parseargdef\xrefautomaticsectiontitle{% \def\temp{#1}% \ifx\temp\onword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \empty \else\ifx\temp\offword \expandafter\let\csname SETxref-automatic-section-title\endcsname = \relax \else \errhelp = \EMsimple \errmessage{Unknown @xrefautomaticsectiontitle value `\temp', must be on|off}% \fi\fi } % % @xref, @pxref, and @ref generate cross-references. For \xrefX, #1 is % the node name, #2 the name of the Info cross-reference, #3 the printed % node name, #4 the name of the Info file, #5 the name of the printed % manual. All but the node name can be omitted. % \def\pxref{\putwordsee{} \xrefXX} \def\xref{\putwordSee{} \xrefXX} \def\ref{\xrefXX} \def\xrefXX#1{\def\xrefXXarg{#1}\futurelet\tokenafterxref\xrefXXX} \def\xrefXXX{\expandafter\xrefX\expandafter[\xrefXXarg,,,,,,,]} % \newbox\toprefbox \newbox\printedrefnamebox \newbox\infofilenamebox \newbox\printedmanualbox % \def\xrefX[#1,#2,#3,#4,#5,#6]{\begingroup \unsepspaces % % Get args without leading/trailing spaces. \def\printedrefname{\ignorespaces #3}% \setbox\printedrefnamebox = \hbox{\printedrefname\unskip}% % \def\infofilename{\ignorespaces #4}% \setbox\infofilenamebox = \hbox{\infofilename\unskip}% % \def\printedmanual{\ignorespaces #5}% \setbox\printedmanualbox = \hbox{\printedmanual\unskip}% % % If the printed reference name (arg #3) was not explicitly given in % the @xref, figure out what we want to use. \ifdim \wd\printedrefnamebox = 0pt % No printed node name was explicitly given. \expandafter\ifx\csname SETxref-automatic-section-title\endcsname \relax % Not auto section-title: use node name inside the square brackets. \def\printedrefname{\ignorespaces #1}% \else % Auto section-title: use chapter/section title inside % the square brackets if we have it. \ifdim \wd\printedmanualbox > 0pt % It is in another manual, so we don't have it; use node name. \def\printedrefname{\ignorespaces #1}% \else \ifhavexrefs % We (should) know the real title if we have the xref values. \def\printedrefname{\refx{#1-title}}% \else % Otherwise just copy the Info node name. \def\printedrefname{\ignorespaces #1}% \fi% \fi \fi \fi % % Make link in pdf output. \ifpdf % For pdfTeX and LuaTeX {\indexnofonts \makevalueexpandable \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \startlink attr{/Border [0 0 0]}% \ifnum\filenamelength>0 goto file{\the\filename.pdf} name{\pdfdestname}% \else goto name{\pdfmkpgn{\pdfdestname}}% \fi }% \setcolor{\linkcolor}% \else \ifx\XeTeXrevision\thisisundefined \else % For XeTeX {\indexnofonts \makevalueexpandable \turnoffactive % This expands tokens, so do it after making catcode changes, so _ % etc. don't get their TeX definitions. This ignores all spaces in % #4, including (wrongly) those in the middle of the filename. \getfilename{#4}% % % This (wrongly) does not take account of leading or trailing % spaces in #1, which should be ignored. \setpdfdestname{#1}% % \ifx\pdfdestname\empty \def\pdfdestname{Top}% no empty targets \fi % \leavevmode \ifnum\filenamelength>0 % With default settings, % XeTeX (xdvipdfmx) replaces link destination names with integers. % In this case, the replaced destination names of % remote PDFs are no longer known. In order to avoid a replacement, % you can use xdvipdfmx's command line option `-C 0x0010'. % If you use XeTeX 0.99996+ (TeX Live 2016+), % this command line option is no longer necessary % because we can use the `dvipdfmx:config' special. \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoToR /F (\the\filename.pdf) /D (\pdfdestname) >> >>}% \else \special{pdf:bann << /Border [0 0 0] /Type /Annot /Subtype /Link /A << /S /GoTo /D (\pdfdestname) >> >>}% \fi }% \setcolor{\linkcolor}% \fi \fi {% % Have to otherify everything special to allow the \csname to % include an _ in the xref name, etc. \indexnofonts \turnoffactive \def\value##1{##1}% \expandafter\global\expandafter\let\expandafter\Xthisreftitle \csname XR#1-title\endcsname }% % % Float references are printed completely differently: "Figure 1.2" % instead of "[somenode], p.3". \iffloat distinguishes them by % \Xthisreftitle being set to a magic string. \iffloat\Xthisreftitle % If the user specified the print name (third arg) to the ref, % print it instead of our usual "Figure 1.2". \ifdim\wd\printedrefnamebox = 0pt \refx{#1-snt}% \else \printedrefname \fi % % If the user also gave the printed manual name (fifth arg), append % "in MANUALNAME". \ifdim \wd\printedmanualbox > 0pt \space \putwordin{} \cite{\printedmanual}% \fi \else % node/anchor (non-float) references. % % If we use \unhbox to print the node names, TeX does not insert % empty discretionaries after hyphens, which means that it will not % find a line break at a hyphen in a node names. Since some manuals % are best written with fairly long node names, containing hyphens, % this is a loss. Therefore, we give the text of the node name % again, so it is as if TeX is seeing it for the first time. % \ifdim \wd\printedmanualbox > 0pt % Cross-manual reference with a printed manual name. % \crossmanualxref{\cite{\printedmanual\unskip}}% % \else\ifdim \wd\infofilenamebox > 0pt % Cross-manual reference with only an info filename (arg 4), no % printed manual name (arg 5). This is essentially the same as % the case above; we output the filename, since we have nothing else. % \crossmanualxref{\code{\infofilename\unskip}}% % \else % Reference within this manual. % % Only output a following space if the -snt ref is nonempty, as the ref % will be empty for @unnumbered and @anchor. \setbox2 = \hbox{\ignorespaces \refx{#1-snt}}% \ifdim \wd2 > 0pt \refx{#1-snt}\space\fi % % output the `[mynode]' via the macro below so it can be overridden. \xrefprintnodename\printedrefname % \expandafter\ifx\csname SETtxiomitxrefpg\endcsname\relax % But we always want a comma and a space: ,\space % % output the `page 3'. \turnoffactive \putwordpage\tie\refx{#1-pg}% % Add a , if xref followed by a space \if\space\noexpand\tokenafterxref ,% \else\ifx\ \tokenafterxref ,% @TAB \else\ifx\*\tokenafterxref ,% @* \else\ifx\ \tokenafterxref ,% @SPACE \else\ifx\ \tokenafterxref ,% @NL \else\ifx\tie\tokenafterxref ,% @tie \fi\fi\fi\fi\fi\fi \fi \fi\fi \fi \endlink \endgroup} % Output a cross-manual xref to #1. Used just above (twice). % % Only include the text "Section ``foo'' in" if the foo is neither % missing or Top. Thus, @xref{,,,foo,The Foo Manual} outputs simply % "see The Foo Manual", the idea being to refer to the whole manual. % % But, this being TeX, we can't easily compare our node name against the % string "Top" while ignoring the possible spaces before and after in % the input. By adding the arbitrary 7sp below, we make it much less % likely that a real node name would have the same width as "Top" (e.g., % in a monospaced font). Hopefully it will never happen in practice. % % For the same basic reason, we retypeset the "Top" at every % reference, since the current font is indeterminate. % \def\crossmanualxref#1{% \setbox\toprefbox = \hbox{Top\kern7sp}% \setbox2 = \hbox{\ignorespaces \printedrefname \unskip \kern7sp}% \ifdim \wd2 > 7sp % nonempty? \ifdim \wd2 = \wd\toprefbox \else % same as Top? \putwordSection{} ``\printedrefname'' \putwordin{}\space \fi \fi #1% } % This macro is called from \xrefX for the `[nodename]' part of xref % output. It's a separate macro only so it can be changed more easily, % since square brackets don't work well in some documents. Particularly % one that Bob is working on :). % \def\xrefprintnodename#1{[#1]} % Things referred to by \setref. % \def\Ynothing{} \def\Yomitfromtoc{} \def\Ynumbered{% \ifnum\secno=0 \putwordChapter@tie \the\chapno \else \ifnum\subsecno=0 \putwordSection@tie \the\chapno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie \the\chapno.\the\secno.\the\subsecno \else \putwordSection@tie \the\chapno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } \def\Yappendix{% \ifnum\secno=0 \putwordAppendix@tie @char\the\appendixno{}% \else \ifnum\subsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno \else \ifnum\subsubsecno=0 \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno \else \putwordSection@tie @char\the\appendixno.\the\secno.\the\subsecno.\the\subsubsecno \fi\fi\fi } % \refx{NAME} - reference a cross-reference string named NAME. \def\refx#1{% \requireauxfile {% \indexnofonts \turnoffactive \def\value##1{##1}% \expandafter\global\expandafter\let\expandafter\thisrefX \csname XR#1\endcsname }% \ifx\thisrefX\relax % If not defined, say something at least. \angleleft un\-de\-fined\angleright \iflinks \ifhavexrefs {\toks0 = {#1}% avoid expansion of possibly-complex value \message{\linenumber Undefined cross reference `\the\toks0'.}}% \else \ifwarnedxrefs\else \global\warnedxrefstrue \message{Cross reference values unknown; you must run TeX again.}% \fi \fi \fi \else % It's defined, so just use it. \thisrefX \fi } % This is the macro invoked by entries in the aux file. Define a control % sequence for a cross-reference target (we prepend XR to the control sequence % name to avoid collisions). The value is the page number. If this is a float % type, we have more work to do. % \def\xrdef#1#2{% {% Expand the node or anchor name to remove control sequences. % \turnoffactive stops 8-bit characters being changed to commands % like @'e. \refx does the same to retrieve the value in the definition. \indexnofonts \turnoffactive \def\value##1{##1}% \xdef\safexrefname{#1}% }% % \bgroup \expandafter\gdef\csname XR\safexrefname\endcsname{#2}% \egroup % We put the \gdef inside a group to avoid the definitions building up on % TeX's save stack, which can cause it to run out of space for aux files with % thousands of lines. \gdef doesn't use the save stack, but \csname does % when it defines an unknown control sequence as \relax. % % Was that xref control sequence that we just defined for a float? \expandafter\iffloat\csname XR\safexrefname\endcsname % it was a float, and we have the (safe) float type in \iffloattype. \expandafter\let\expandafter\floatlist \csname floatlist\iffloattype\endcsname % % Is this the first time we've seen this float type? \expandafter\ifx\floatlist\relax \toks0 = {\do}% yes, so just \do \else % had it before, so preserve previous elements in list. \toks0 = \expandafter{\floatlist\do}% \fi % % Remember this xref in the control sequence \floatlistFLOATTYPE, % for later use in \listoffloats. \expandafter\xdef\csname floatlist\iffloattype\endcsname{\the\toks0 {\safexrefname}}% \fi } % If working on a large document in chapters, it is convenient to % be able to disable indexing, cross-referencing, and contents, for test runs. % This is done with @novalidate at the beginning of the file. % \newif\iflinks \linkstrue % by default we want the aux files. \let\novalidate = \linksfalse % Used when writing to the aux file, or when using data from it. \def\requireauxfile{% \iflinks \tryauxfile % Open the new aux file. TeX will close it automatically at exit. \immediate\openout\auxfile=\jobname.aux \fi \global\let\requireauxfile=\relax % Only do this once. } % Read the last existing aux file, if any. No error if none exists. % \def\tryauxfile{% \openin 1 \jobname.aux \ifeof 1 \else \readdatafile{aux}% \global\havexrefstrue \fi \closein 1 } \def\setupdatafile{% \catcode`\^^@=\other \catcode`\^^A=\other \catcode`\^^B=\other \catcode`\^^C=\other \catcode`\^^D=\other \catcode`\^^E=\other \catcode`\^^F=\other \catcode`\^^G=\other \catcode`\^^H=\other \catcode`\^^K=\other \catcode`\^^L=\other \catcode`\^^N=\other \catcode`\^^P=\other \catcode`\^^Q=\other \catcode`\^^R=\other \catcode`\^^S=\other \catcode`\^^T=\other \catcode`\^^U=\other \catcode`\^^V=\other \catcode`\^^W=\other \catcode`\^^X=\other \catcode`\^^Z=\other \catcode`\^^[=\other \catcode`\^^\=\other \catcode`\^^]=\other \catcode`\^^^=\other \catcode`\^^_=\other \catcode`\^=\other % % Special characters. Should be turned off anyway, but... \catcode`\~=\other \catcode`\[=\other \catcode`\]=\other \catcode`\"=\other \catcode`\_=\active \catcode`\|=\active \catcode`\<=\active \catcode`\>=\active \catcode`\$=\other \catcode`\#=\other \catcode`\&=\other \catcode`\%=\other \catcode`+=\other % avoid \+ for paranoia even though we've turned it off % \catcode`\\=\active % % @ is our escape character in .aux files, and we need braces. \catcode`\{=1 \catcode`\}=2 \catcode`\@=0 } \def\readdatafile#1{% \begingroup \setupdatafile \input\jobname.#1 \endgroup} \message{insertions,} % including footnotes. \newcount \footnoteno % The trailing space in the following definition for supereject is % vital for proper filling; pages come out unaligned when you do a % pagealignmacro call if that space before the closing brace is % removed. (Generally, numeric constants should always be followed by a % space to prevent strange expansion errors.) \def\supereject{\par\penalty -20000\footnoteno =0 } % @footnotestyle is meaningful for Info output only. \let\footnotestyle=\comment {\catcode `\@=11 % % Auto-number footnotes. Otherwise like plain. \gdef\footnote{% \global\advance\footnoteno by \@ne \edef\thisfootno{$^{\the\footnoteno}$}% % % In case the footnote comes at the end of a sentence, preserve the % extra spacing after we do the footnote number. \let\@sf\empty \ifhmode\edef\@sf{\spacefactor\the\spacefactor}\ptexslash\fi % % Remove inadvertent blank space before typesetting the footnote number. \unskip \thisfootno\@sf \dofootnote }% % Don't bother with the trickery in plain.tex to not require the % footnote text as a parameter. Our footnotes don't need to be so general. % % Oh yes, they do; otherwise, @ifset (and anything else that uses % \parseargline) fails inside footnotes because the tokens are fixed when % the footnote is read. --karl, 16nov96. % \gdef\dofootnote{% \insert\footins\bgroup % % Nested footnotes are not supported in TeX, that would take a lot % more work. (\startsavinginserts does not suffice.) \let\footnote=\errfootnotenest % % We want to typeset this text as a normal paragraph, even if the % footnote reference occurs in (for example) a display environment. % So reset some parameters. \hsize=\txipagewidth \interlinepenalty\interfootnotelinepenalty \splittopskip\ht\strutbox % top baseline for broken footnotes \splitmaxdepth\dp\strutbox \floatingpenalty\@MM \leftskip\z@skip \rightskip\z@skip \spaceskip\z@skip \xspaceskip\z@skip \parindent\defaultparindent % \smallfonts \rm % % Because we use hanging indentation in footnotes, a @noindent appears % to exdent this text, so make it be a no-op. makeinfo does not use % hanging indentation so @noindent can still be needed within footnote % text after an @example or the like (not that this is good style). \let\noindent = \relax % % Hang the footnote text off the number. Use \everypar in case the % footnote extends for more than one paragraph. \everypar = {\hang}% \textindent{\thisfootno}% % % Don't crash into the line above the footnote text. Since this % expands into a box, it must come within the paragraph, lest it % provide a place where TeX can split the footnote. \footstrut % % Invoke rest of plain TeX footnote routine. \futurelet\next\fo@t } }%end \catcode `\@=11 \def\errfootnotenest{% \errhelp=\EMsimple \errmessage{Nested footnotes not supported in texinfo.tex, even though they work in makeinfo; sorry} } \def\errfootnoteheading{% \errhelp=\EMsimple \errmessage{Footnotes in chapters, sections, etc., are not supported} } % In case a @footnote appears in a vbox, save the footnote text and create % the real \insert just after the vbox finished. Otherwise, the insertion % would be lost. % Similarly, if a @footnote appears inside an alignment, save the footnote % text to a box and make the \insert when a row of the table is finished. % And the same can be done for other insert classes. --kasal, 16nov03. % % Replace the \insert primitive by a cheating macro. % Deeper inside, just make sure that the saved insertions are not spilled % out prematurely. % \def\startsavinginserts{% \ifx \insert\ptexinsert \let\insert\saveinsert \else \let\checkinserts\relax \fi } % This \insert replacement works for both \insert\footins{foo} and % \insert\footins\bgroup foo\egroup, but it doesn't work for \insert27{foo}. % \def\saveinsert#1{% \edef\next{\noexpand\savetobox \makeSAVEname#1}% \afterassignment\next % swallow the left brace \let\temp = } \def\makeSAVEname#1{\makecsname{SAVE\expandafter\gobble\string#1}} \def\savetobox#1{\global\setbox#1 = \vbox\bgroup \unvbox#1} \def\checksaveins#1{\ifvoid#1\else \placesaveins#1\fi} \def\placesaveins#1{% \ptexinsert \csname\expandafter\gobblesave\string#1\endcsname {\box#1}% } % eat @SAVE -- beware, all of them have catcode \other: { \def\dospecials{\do S\do A\do V\do E} \uncatcodespecials % ;-) \gdef\gobblesave @SAVE{} } % initialization: \def\newsaveins #1{% \edef\next{\noexpand\newsaveinsX \makeSAVEname#1}% \next } \def\newsaveinsX #1{% \csname newbox\endcsname #1% \expandafter\def\expandafter\checkinserts\expandafter{\checkinserts \checksaveins #1}% } % initialize: \let\checkinserts\empty \newsaveins\footins \newsaveins\margin % @image. We use the macros from epsf.tex to support this. % If epsf.tex is not installed and @image is used, we complain. % % Check for and read epsf.tex up front. If we read it only at @image % time, we might be inside a group, and then its definitions would get % undone and the next image would fail. \openin 1 = epsf.tex \ifeof 1 \else % Do not bother showing banner with epsf.tex v2.7k (available in % doc/epsf.tex and on ctan). \def\epsfannounce{\toks0 = }% \input epsf.tex \fi \closein 1 % % We will only complain once about lack of epsf.tex. \newif\ifwarnednoepsf \newhelp\noepsfhelp{epsf.tex must be installed for images to work. It is also included in the Texinfo distribution, or you can get it from https://ctan.org/texarchive/macros/texinfo/texinfo/doc/epsf.tex.} % \def\image#1{% \ifx\epsfbox\thisisundefined \ifwarnednoepsf \else \errhelp = \noepsfhelp \errmessage{epsf.tex not found, images will be ignored}% \global\warnednoepsftrue \fi \else \imagexxx #1,,,,,\finish \fi } % % Arguments to @image: % #1 is (mandatory) image filename; we tack on .eps extension. % #2 is (optional) width, #3 is (optional) height. % #4 is (ignored optional) html alt text. % #5 is (ignored optional) extension. % #6 is just the usual extra ignored arg for parsing stuff. \newif\ifimagevmode \def\imagexxx#1,#2,#3,#4,#5,#6\finish{\begingroup \catcode`\^^M = 5 % in case we're inside an example \normalturnoffactive % allow _ et al. in names \makevalueexpandable \ifvmode \imagevmodetrue \else \ifx\centersub\centerV % for @center @image, we need a vbox so we can have our vertical space \imagevmodetrue \vbox\bgroup % vbox has better behavior than vtop here \fi\fi % \ifimagevmode \medskip % Usually we'll have text after the image which will insert % \parskip glue, so insert it here too to equalize the space % above and below. \vskip\parskip % % Place image in a \vtop for a top page margin that is (close to) correct, % as \topskip glue is relative to the first baseline. \vtop\bgroup\hrule height 0pt\vskip-\parskip \fi % % Enter horizontal mode so that indentation from an enclosing % environment such as @quotation is respected. % However, if we're at the top level, we don't want the % normal paragraph indentation. % On the other hand, if we are in the case of @center @image, we don't % want to start a paragraph, which will create a hsize-width box and % eradicate the centering. \ifx\centersub\centerV \else \imageindent \fi % % Output the image. \ifpdf % For pdfTeX and LuaTeX <= 0.80 \dopdfimage{#1}{#2}{#3}% \else \ifx\XeTeXrevision\thisisundefined % For epsf.tex % \epsfbox itself resets \epsf?size at each figure. \setbox0 = \hbox{\ignorespaces #2}% \ifdim\wd0 > 0pt \epsfxsize=#2\relax \fi \setbox0 = \hbox{\ignorespaces #3}% \ifdim\wd0 > 0pt \epsfysize=#3\relax \fi \epsfbox{#1.eps}% \else % For XeTeX \doxeteximage{#1}{#2}{#3}% \fi \fi % \ifimagevmode \egroup \medskip % space after a standalone image \fi \ifx\centersub\centerV \egroup \fi \endgroup} % @float FLOATTYPE,LABEL,LOC ... @end float for displayed figures, tables, % etc. We don't actually implement floating yet, we always include the % float "here". But it seemed the best name for the future. % \envparseargdef\float{\eatcommaspace\eatcommaspace\dofloat#1, , ,\finish} % There may be a space before second and/or third parameter; delete it. \def\eatcommaspace#1, {#1,} % #1 is the optional FLOATTYPE, the text label for this float, typically % "Figure", "Table", "Example", etc. Can't contain commas. If omitted, % this float will not be numbered and cannot be referred to. % % #2 is the optional xref label. Also must be present for the float to % be referable. % % #3 is the optional positioning argument; for now, it is ignored. It % will somehow specify the positions allowed to float to (here, top, bottom). % % We keep a separate counter for each FLOATTYPE, which we reset at each % chapter-level command. \let\resetallfloatnos=\empty % \def\dofloat#1,#2,#3,#4\finish{% \let\thiscaption=\empty \let\thisshortcaption=\empty % % don't lose footnotes inside @float. % % BEWARE: when the floats start float, we have to issue warning whenever an % insert appears inside a float which could possibly float. --kasal, 26may04 % \startsavinginserts % % We can't be used inside a paragraph. \par % \vtop\bgroup \def\floattype{#1}% \def\floatlabel{#2}% \def\floatloc{#3}% we do nothing with this yet. % \ifx\floattype\empty \let\safefloattype=\empty \else {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% \fi % % If label is given but no type, we handle that as the empty type. \ifx\floatlabel\empty \else % We want each FLOATTYPE to be numbered separately (Figure 1, % Table 1, Figure 2, ...). (And if no label, no number.) % \expandafter\getfloatno\csname\safefloattype floatno\endcsname \global\advance\floatno by 1 % {% % This magic value for \currentsection is output by \setref as the % XREFLABEL-title value. \xrefX uses it to distinguish float % labels (which have a completely different output format) from % node and anchor labels. And \xrdef uses it to construct the % lists of floats. % \edef\currentsection{\floatmagic=\safefloattype}% \setref{\floatlabel}{Yfloat}% }% \fi % % start with \parskip glue, I guess. \vskip\parskip % % Don't suppress indentation if a float happens to start a section. \restorefirstparagraphindent } % we have these possibilities: % @float Foo,lbl & @caption{Cap}: Foo 1.1: Cap % @float Foo,lbl & no caption: Foo 1.1 % @float Foo & @caption{Cap}: Foo: Cap % @float Foo & no caption: Foo % @float ,lbl & Caption{Cap}: 1.1: Cap % @float ,lbl & no caption: 1.1 % @float & @caption{Cap}: Cap % @float & no caption: % \def\Efloat{% \let\floatident = \empty % % In all cases, if we have a float type, it comes first. \ifx\floattype\empty \else \def\floatident{\floattype}\fi % % If we have an xref label, the number comes next. \ifx\floatlabel\empty \else \ifx\floattype\empty \else % if also had float type, need tie first. \appendtomacro\floatident{\tie}% \fi % the number. \appendtomacro\floatident{\chaplevelprefix\the\floatno}% \fi % % Start the printed caption with what we've constructed in % \floatident, but keep it separate; we need \floatident again. \let\captionline = \floatident % \ifx\thiscaption\empty \else \ifx\floatident\empty \else \appendtomacro\captionline{: }% had ident, so need a colon between \fi % % caption text. \appendtomacro\captionline{\scanexp\thiscaption}% \fi % % If we have anything to print, print it, with space before. % Eventually this needs to become an \insert. \ifx\captionline\empty \else \vskip.5\parskip \captionline % % Space below caption. \vskip\parskip \fi % % If have an xref label, write the list of floats info. Do this % after the caption, to avoid chance of it being a breakpoint. \ifx\floatlabel\empty \else % Write the text that goes in the lof to the aux file as % \floatlabel-lof. Besides \floatident, we include the short % caption if specified, else the full caption if specified, else nothing. {% \requireauxfile \atdummies % \ifx\thisshortcaption\empty \def\gtemp{\thiscaption}% \else \def\gtemp{\thisshortcaption}% \fi \immediate\write\auxfile{@xrdef{\floatlabel-lof}{\floatident \ifx\gtemp\empty \else : \gtemp \fi}}% }% \fi \egroup % end of \vtop % \checkinserts } % Append the tokens #2 to the definition of macro #1, not expanding either. % \def\appendtomacro#1#2{% \expandafter\def\expandafter#1\expandafter{#1#2}% } % @caption, @shortcaption % \def\caption{\docaption\thiscaption} \def\shortcaption{\docaption\thisshortcaption} \def\docaption{\checkenv\float \bgroup\scanargctxt\defcaption} \def\defcaption#1#2{\egroup \def#1{#2}} % The parameter is the control sequence identifying the counter we are % going to use. Create it if it doesn't exist and assign it to \floatno. \def\getfloatno#1{% \ifx#1\relax % Haven't seen this figure type before. \csname newcount\endcsname #1% % % Remember to reset this floatno at the next chap. \expandafter\gdef\expandafter\resetallfloatnos \expandafter{\resetallfloatnos #1=0 }% \fi \let\floatno#1% } % \setref calls this to get the XREFLABEL-snt value. We want an @xref % to the FLOATLABEL to expand to "Figure 3.1". We call \setref when we % first read the @float command. % \def\Yfloat{\floattype@tie \chaplevelprefix\the\floatno}% % Magic string used for the XREFLABEL-title value, so \xrefX can % distinguish floats from other xref types. \def\floatmagic{!!float!!} % #1 is the control sequence we are passed; we expand into a conditional % which is true if #1 represents a float ref. That is, the magic % \currentsection value which we \setref above. % \def\iffloat#1{\expandafter\doiffloat#1==\finish} % % #1 is (maybe) the \floatmagic string. If so, #2 will be the % (safe) float type for this float. We set \iffloattype to #2. % \def\doiffloat#1=#2=#3\finish{% \def\temp{#1}% \def\iffloattype{#2}% \ifx\temp\floatmagic } % @listoffloats FLOATTYPE - print a list of floats like a table of contents. % \parseargdef\listoffloats{% \def\floattype{#1}% floattype {% % the floattype might have accents or other special characters, % but we need to use it in a control sequence name. \indexnofonts \turnoffactive \xdef\safefloattype{\floattype}% }% % % \xrdef saves the floats as a \do-list in \floatlistSAFEFLOATTYPE. \expandafter\ifx\csname floatlist\safefloattype\endcsname \relax \ifhavexrefs % if the user said @listoffloats foo but never @float foo. \message{\linenumber No `\safefloattype' floats to list.}% \fi \else \begingroup \leftskip=\tocindent % indent these entries like a toc \let\do=\listoffloatsdo \csname floatlist\safefloattype\endcsname \endgroup \fi } % This is called on each entry in a list of floats. We're passed the % xref label, in the form LABEL-title, which is how we save it in the % aux file. We strip off the -title and look up \XRLABEL-lof, which % has the text we're supposed to typeset here. % % Figures without xref labels will not be included in the list (since % they won't appear in the aux file). % \def\listoffloatsdo#1{\listoffloatsdoentry#1\finish} \def\listoffloatsdoentry#1-title\finish{{% % Can't fully expand XR#1-lof because it can contain anything. Just % pass the control sequence. On the other hand, XR#1-pg is just the % page number, and we want to fully expand that so we can get a link % in pdf output. \toksA = \expandafter{\csname XR#1-lof\endcsname}% % % use the same \entry macro we use to generate the TOC and index. \edef\writeentry{\noexpand\entry{\the\toksA}{\csname XR#1-pg\endcsname}}% \writeentry }} \message{localization,} % For single-language documents, @documentlanguage is usually given very % early, just after @documentencoding. Single argument is the language % (de) or locale (de_DE) abbreviation. % { \catcode`\_ = \active \globaldefs=1 \parseargdef\documentlanguage{% \tex % read txi-??.tex file in plain TeX. % Read the file by the name they passed if it exists. \let_ = \normalunderscore % normal _ character for filename test \openin 1 txi-#1.tex \ifeof 1 \documentlanguagetrywithoutunderscore #1_\finish \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 \endgroup % end raw TeX } % % If they passed de_DE, and txi-de_DE.tex doesn't exist, % try txi-de.tex. % \gdef\documentlanguagetrywithoutunderscore#1_#2\finish{% \openin 1 txi-#1.tex \ifeof 1 \errhelp = \nolanghelp \errmessage{Cannot read language file txi-#1.tex}% \else \globaldefs = 1 % everything in the txi-LL files needs to persist \input txi-#1.tex \fi \closein 1 } }% end of special _ catcode % \newhelp\nolanghelp{The given language definition file cannot be found or is empty. Maybe you need to install it? Putting it in the current directory should work if nowhere else does.} % This macro is called from txi-??.tex files; the first argument is the % \language name to set (without the "\lang@" prefix), the second and % third args are \{left,right}hyphenmin. % % The language names to pass are determined when the format is built. % See the etex.log file created at that time, e.g., % /usr/local/texlive/2008/texmf-var/web2c/pdftex/etex.log. % % With TeX Live 2008, etex now includes hyphenation patterns for all % available languages. This means we can support hyphenation in % Texinfo, at least to some extent. (This still doesn't solve the % accented characters problem.) % \catcode`@=11 \def\txisetlanguage#1#2#3{% % do not set the language if the name is undefined in the current TeX. \expandafter\ifx\csname lang@#1\endcsname \relax \message{no patterns for #1}% \else \global\language = \csname lang@#1\endcsname \fi % but there is no harm in adjusting the hyphenmin values regardless. \global\lefthyphenmin = #2\relax \global\righthyphenmin = #3\relax } % XeTeX and LuaTeX can handle Unicode natively. % Their default I/O uses UTF-8 sequences instead of a byte-wise operation. % Other TeX engines' I/O (pdfTeX, etc.) is byte-wise. % \newif\iftxinativeunicodecapable \newif\iftxiusebytewiseio \ifx\XeTeXrevision\thisisundefined \ifx\luatexversion\thisisundefined \txinativeunicodecapablefalse \txiusebytewiseiotrue \else \txinativeunicodecapabletrue \txiusebytewiseiofalse \fi \else \txinativeunicodecapabletrue \txiusebytewiseiofalse \fi % Set I/O by bytes instead of UTF-8 sequence for XeTeX and LuaTex % for non-UTF-8 (byte-wise) encodings. % \def\setbytewiseio{% \ifx\XeTeXrevision\thisisundefined \else \XeTeXdefaultencoding "bytes" % For subsequent files to be read \XeTeXinputencoding "bytes" % For document root file % Unfortunately, there seems to be no corresponding XeTeX command for % output encoding. This is a problem for auxiliary index and TOC files. % The only solution would be perhaps to write out @U{...} sequences in % place of non-ASCII characters. \fi \ifx\luatexversion\thisisundefined \else \directlua{ local utf8_char, byte, gsub = unicode.utf8.char, string.byte, string.gsub local function convert_char (char) return utf8_char(byte(char)) end local function convert_line (line) return gsub(line, ".", convert_char) end callback.register("process_input_buffer", convert_line) local function convert_line_out (line) local line_out = "" for c in string.utfvalues(line) do line_out = line_out .. string.char(c) end return line_out end callback.register("process_output_buffer", convert_line_out) } \fi \txiusebytewiseiotrue } % Helpers for encodings. % Set the catcode of characters 128 through 255 to the specified number. % \def\setnonasciicharscatcode#1{% \count255=128 \loop\ifnum\count255<256 \global\catcode\count255=#1\relax \advance\count255 by 1 \repeat } \def\setnonasciicharscatcodenonglobal#1{% \count255=128 \loop\ifnum\count255<256 \catcode\count255=#1\relax \advance\count255 by 1 \repeat } % @documentencoding sets the definition of non-ASCII characters % according to the specified encoding. % \def\documentencoding{\parseargusing\filenamecatcodes\documentencodingzzz} \def\documentencodingzzz#1{% % % Encoding being declared for the document. \def\declaredencoding{\csname #1.enc\endcsname}% % % Supported encodings: names converted to tokens in order to be able % to compare them with \ifx. \def\ascii{\csname US-ASCII.enc\endcsname}% \def\latnine{\csname ISO-8859-15.enc\endcsname}% \def\latone{\csname ISO-8859-1.enc\endcsname}% \def\lattwo{\csname ISO-8859-2.enc\endcsname}% \def\utfeight{\csname UTF-8.enc\endcsname}% % \ifx \declaredencoding \ascii \asciichardefs % \else \ifx \declaredencoding \lattwo \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \lattwochardefs % \else \ifx \declaredencoding \latone \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \latonechardefs % \else \ifx \declaredencoding \latnine \iftxinativeunicodecapable \setbytewiseio \fi \setnonasciicharscatcode\active \latninechardefs % \else \ifx \declaredencoding \utfeight \iftxinativeunicodecapable % For native Unicode handling (XeTeX and LuaTeX) \nativeunicodechardefs \else % For treating UTF-8 as byte sequences (TeX, eTeX and pdfTeX) \setnonasciicharscatcode\active % since we already invoked \utfeightchardefs at the top level % (below), do not re-invoke it, otherwise our check for duplicated % definitions gets triggered. Making non-ascii chars active is % sufficient. \fi % \else \message{Ignoring unknown document encoding: #1.}% % \fi % utfeight \fi % latnine \fi % latone \fi % lattwo \fi % ascii % \ifx\XeTeXrevision\thisisundefined \else \ifx \declaredencoding \utfeight \else \ifx \declaredencoding \ascii \else \message{Warning: XeTeX with non-UTF-8 encodings cannot handle % non-ASCII characters in auxiliary files.}% \fi \fi \fi } % emacs-page % A message to be logged when using a character that isn't available % the default font encoding (OT1). % \def\missingcharmsg#1{\message{Character missing, sorry: #1.}} % Take account of \c (plain) vs. \, (Texinfo) difference. \def\cedilla#1{\ifx\c\ptexc\c{#1}\else\,{#1}\fi} % First, make active non-ASCII characters in order for them to be % correctly categorized when TeX reads the replacement text of % macros containing the character definitions. \setnonasciicharscatcode\active % \def\gdefchar#1#2{% \gdef#1{% \ifpassthroughchars \string#1% \else #2% \fi }} % Latin1 (ISO-8859-1) character definitions. \def\latonechardefs{% \gdefchar^^a0{\tie} \gdefchar^^a1{\exclamdown} \gdefchar^^a2{{\tcfont \char162}} % cent \gdefchar^^a3{\pounds{}} \gdefchar^^a4{{\tcfont \char164}} % currency \gdefchar^^a5{{\tcfont \char165}} % yen \gdefchar^^a6{{\tcfont \char166}} % broken bar \gdefchar^^a7{\S} \gdefchar^^a8{\"{}} \gdefchar^^a9{\copyright{}} \gdefchar^^aa{\ordf} \gdefchar^^ab{\guillemetleft{}} \gdefchar^^ac{\ensuremath\lnot} \gdefchar^^ad{\-} \gdefchar^^ae{\registeredsymbol{}} \gdefchar^^af{\={}} % \gdefchar^^b0{\textdegree} \gdefchar^^b1{$\pm$} \gdefchar^^b2{$^2$} \gdefchar^^b3{$^3$} \gdefchar^^b4{\'{}} \gdefchar^^b5{$\mu$} \gdefchar^^b6{\P} \gdefchar^^b7{\ensuremath\cdot} \gdefchar^^b8{\cedilla\ } \gdefchar^^b9{$^1$} \gdefchar^^ba{\ordm} \gdefchar^^bb{\guillemetright{}} \gdefchar^^bc{$1\over4$} \gdefchar^^bd{$1\over2$} \gdefchar^^be{$3\over4$} \gdefchar^^bf{\questiondown} % \gdefchar^^c0{\`A} \gdefchar^^c1{\'A} \gdefchar^^c2{\^A} \gdefchar^^c3{\~A} \gdefchar^^c4{\"A} \gdefchar^^c5{\ringaccent A} \gdefchar^^c6{\AE} \gdefchar^^c7{\cedilla C} \gdefchar^^c8{\`E} \gdefchar^^c9{\'E} \gdefchar^^ca{\^E} \gdefchar^^cb{\"E} \gdefchar^^cc{\`I} \gdefchar^^cd{\'I} \gdefchar^^ce{\^I} \gdefchar^^cf{\"I} % \gdefchar^^d0{\DH} \gdefchar^^d1{\~N} \gdefchar^^d2{\`O} \gdefchar^^d3{\'O} \gdefchar^^d4{\^O} \gdefchar^^d5{\~O} \gdefchar^^d6{\"O} \gdefchar^^d7{$\times$} \gdefchar^^d8{\O} \gdefchar^^d9{\`U} \gdefchar^^da{\'U} \gdefchar^^db{\^U} \gdefchar^^dc{\"U} \gdefchar^^dd{\'Y} \gdefchar^^de{\TH} \gdefchar^^df{\ss} % \gdefchar^^e0{\`a} \gdefchar^^e1{\'a} \gdefchar^^e2{\^a} \gdefchar^^e3{\~a} \gdefchar^^e4{\"a} \gdefchar^^e5{\ringaccent a} \gdefchar^^e6{\ae} \gdefchar^^e7{\cedilla c} \gdefchar^^e8{\`e} \gdefchar^^e9{\'e} \gdefchar^^ea{\^e} \gdefchar^^eb{\"e} \gdefchar^^ec{\`{\dotless i}} \gdefchar^^ed{\'{\dotless i}} \gdefchar^^ee{\^{\dotless i}} \gdefchar^^ef{\"{\dotless i}} % \gdefchar^^f0{\dh} \gdefchar^^f1{\~n} \gdefchar^^f2{\`o} \gdefchar^^f3{\'o} \gdefchar^^f4{\^o} \gdefchar^^f5{\~o} \gdefchar^^f6{\"o} \gdefchar^^f7{$\div$} \gdefchar^^f8{\o} \gdefchar^^f9{\`u} \gdefchar^^fa{\'u} \gdefchar^^fb{\^u} \gdefchar^^fc{\"u} \gdefchar^^fd{\'y} \gdefchar^^fe{\th} \gdefchar^^ff{\"y} } % Latin9 (ISO-8859-15) encoding character definitions. \def\latninechardefs{% % Encoding is almost identical to Latin1. \latonechardefs % \gdefchar^^a4{\euro{}} \gdefchar^^a6{\v S} \gdefchar^^a8{\v s} \gdefchar^^b4{\v Z} \gdefchar^^b8{\v z} \gdefchar^^bc{\OE} \gdefchar^^bd{\oe} \gdefchar^^be{\"Y} } % Latin2 (ISO-8859-2) character definitions. \def\lattwochardefs{% \gdefchar^^a0{\tie} \gdefchar^^a1{\ogonek{A}} \gdefchar^^a2{\u{}} \gdefchar^^a3{\L} \gdefchar^^a4{\missingcharmsg{CURRENCY SIGN}} \gdefchar^^a5{\v L} \gdefchar^^a6{\'S} \gdefchar^^a7{\S} \gdefchar^^a8{\"{}} \gdefchar^^a9{\v S} \gdefchar^^aa{\cedilla S} \gdefchar^^ab{\v T} \gdefchar^^ac{\'Z} \gdefchar^^ad{\-} \gdefchar^^ae{\v Z} \gdefchar^^af{\dotaccent Z} % \gdefchar^^b0{\textdegree{}} \gdefchar^^b1{\ogonek{a}} \gdefchar^^b2{\ogonek{ }} \gdefchar^^b3{\l} \gdefchar^^b4{\'{}} \gdefchar^^b5{\v l} \gdefchar^^b6{\'s} \gdefchar^^b7{\v{}} \gdefchar^^b8{\cedilla\ } \gdefchar^^b9{\v s} \gdefchar^^ba{\cedilla s} \gdefchar^^bb{\v t} \gdefchar^^bc{\'z} \gdefchar^^bd{\H{}} \gdefchar^^be{\v z} \gdefchar^^bf{\dotaccent z} % \gdefchar^^c0{\'R} \gdefchar^^c1{\'A} \gdefchar^^c2{\^A} \gdefchar^^c3{\u A} \gdefchar^^c4{\"A} \gdefchar^^c5{\'L} \gdefchar^^c6{\'C} \gdefchar^^c7{\cedilla C} \gdefchar^^c8{\v C} \gdefchar^^c9{\'E} \gdefchar^^ca{\ogonek{E}} \gdefchar^^cb{\"E} \gdefchar^^cc{\v E} \gdefchar^^cd{\'I} \gdefchar^^ce{\^I} \gdefchar^^cf{\v D} % \gdefchar^^d0{\DH} \gdefchar^^d1{\'N} \gdefchar^^d2{\v N} \gdefchar^^d3{\'O} \gdefchar^^d4{\^O} \gdefchar^^d5{\H O} \gdefchar^^d6{\"O} \gdefchar^^d7{$\times$} \gdefchar^^d8{\v R} \gdefchar^^d9{\ringaccent U} \gdefchar^^da{\'U} \gdefchar^^db{\H U} \gdefchar^^dc{\"U} \gdefchar^^dd{\'Y} \gdefchar^^de{\cedilla T} \gdefchar^^df{\ss} % \gdefchar^^e0{\'r} \gdefchar^^e1{\'a} \gdefchar^^e2{\^a} \gdefchar^^e3{\u a} \gdefchar^^e4{\"a} \gdefchar^^e5{\'l} \gdefchar^^e6{\'c} \gdefchar^^e7{\cedilla c} \gdefchar^^e8{\v c} \gdefchar^^e9{\'e} \gdefchar^^ea{\ogonek{e}} \gdefchar^^eb{\"e} \gdefchar^^ec{\v e} \gdefchar^^ed{\'{\dotless{i}}} \gdefchar^^ee{\^{\dotless{i}}} \gdefchar^^ef{\v d} % \gdefchar^^f0{\dh} \gdefchar^^f1{\'n} \gdefchar^^f2{\v n} \gdefchar^^f3{\'o} \gdefchar^^f4{\^o} \gdefchar^^f5{\H o} \gdefchar^^f6{\"o} \gdefchar^^f7{$\div$} \gdefchar^^f8{\v r} \gdefchar^^f9{\ringaccent u} \gdefchar^^fa{\'u} \gdefchar^^fb{\H u} \gdefchar^^fc{\"u} \gdefchar^^fd{\'y} \gdefchar^^fe{\cedilla t} \gdefchar^^ff{\dotaccent{}} } % UTF-8 character definitions. % % This code to support UTF-8 is based on LaTeX's utf8.def, with some % changes for Texinfo conventions. It is included here under the GPL by % permission from Frank Mittelbach and the LaTeX team. % \newcount\countUTFx \newcount\countUTFy \newcount\countUTFz \gdef\UTFviiiTwoOctets#1#2{\expandafter \UTFviiiDefined\csname u8:#1\string #2\endcsname} % \gdef\UTFviiiThreeOctets#1#2#3{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\endcsname} % \gdef\UTFviiiFourOctets#1#2#3#4{\expandafter \UTFviiiDefined\csname u8:#1\string #2\string #3\string #4\endcsname} \gdef\UTFviiiDefined#1{% \ifx #1\relax \message{\linenumber Unicode char \string #1 not defined for Texinfo}% \else \expandafter #1% \fi } % Give non-ASCII bytes the active definitions for processing UTF-8 sequences \begingroup \catcode`\~13 \catcode`\$12 \catcode`\"12 % Loop from \countUTFx to \countUTFy, performing \UTFviiiTmp % substituting ~ and $ with a character token of that value. \def\UTFviiiLoop{% \global\catcode\countUTFx\active \uccode`\~\countUTFx \uccode`\$\countUTFx \uppercase\expandafter{\UTFviiiTmp}% \advance\countUTFx by 1 \ifnum\countUTFx < \countUTFy \expandafter\UTFviiiLoop \fi} % For bytes other than the first in a UTF-8 sequence. Not expected to % be expanded except when writing to auxiliary files. \countUTFx = "80 \countUTFy = "C2 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $\fi}}% \UTFviiiLoop \countUTFx = "C2 \countUTFy = "E0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiTwoOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "E0 \countUTFy = "F0 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiThreeOctets\expandafter$\fi}}% \UTFviiiLoop \countUTFx = "F0 \countUTFy = "F4 \def\UTFviiiTmp{% \gdef~{% \ifpassthroughchars $% \else\expandafter\UTFviiiFourOctets\expandafter$\fi }}% \UTFviiiLoop \endgroup \def\globallet{\global\let} % save some \expandafter's below % @U{xxxx} to produce U+xxxx, if we support it. \def\U#1{% \expandafter\ifx\csname uni:#1\endcsname \relax \iftxinativeunicodecapable % All Unicode characters can be used if native Unicode handling is % active. However, if the font does not have the glyph, % letters are missing. \begingroup \uccode`\.="#1\relax \uppercase{.} \endgroup \else \errhelp = \EMsimple \errmessage{Unicode character U+#1 not supported, sorry}% \fi \else \csname uni:#1\endcsname \fi } % These macros are used here to construct the name of a control % sequence to be defined. \def\UTFviiiTwoOctetsName#1#2{% \csname u8:#1\string #2\endcsname}% \def\UTFviiiThreeOctetsName#1#2#3{% \csname u8:#1\string #2\string #3\endcsname}% \def\UTFviiiFourOctetsName#1#2#3#4{% \csname u8:#1\string #2\string #3\string #4\endcsname}% % For UTF-8 byte sequences (TeX, e-TeX and pdfTeX), % provide a definition macro to replace a Unicode character; % this gets used by the @U command % \begingroup \catcode`\"=12 \catcode`\<=12 \catcode`\.=12 \catcode`\,=12 \catcode`\;=12 \catcode`\!=12 \catcode`\~=13 \gdef\DeclareUnicodeCharacterUTFviii#1#2{% \countUTFz = "#1\relax \begingroup \parseXMLCharref % Give \u8:... its definition. The sequence of seven \expandafter's % expands after the \gdef three times, e.g. % % 1. \UTFviiTwoOctetsName B1 B2 % 2. \csname u8:B1 \string B2 \endcsname % 3. \u8: B1 B2 (a single control sequence token) % \expandafter\expandafter \expandafter\expandafter \expandafter\expandafter \expandafter\gdef \UTFviiiTmp{#2}% % \expandafter\ifx\csname uni:#1\endcsname \relax \else \message{Internal error, already defined: #1}% \fi % % define an additional control sequence for this code point. \expandafter\globallet\csname uni:#1\endcsname \UTFviiiTmp \endgroup} % % Given the value in \countUTFz as a Unicode code point, set \UTFviiiTmp % to the corresponding UTF-8 sequence. \gdef\parseXMLCharref{% \ifnum\countUTFz < "A0\relax \errhelp = \EMsimple \errmessage{Cannot define Unicode char value < 00A0}% \else\ifnum\countUTFz < "800\relax \parseUTFviiiA,% \parseUTFviiiB C\UTFviiiTwoOctetsName.,% \else\ifnum\countUTFz < "10000\relax \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiB E\UTFviiiThreeOctetsName.{,;}% \else \parseUTFviiiA;% \parseUTFviiiA,% \parseUTFviiiA!% \parseUTFviiiB F\UTFviiiFourOctetsName.{!,;}% \fi\fi\fi } % Extract a byte from the end of the UTF-8 representation of \countUTFx. % It must be a non-initial byte in the sequence. % Change \uccode of #1 for it to be used in \parseUTFviiiB as one % of the bytes. \gdef\parseUTFviiiA#1{% \countUTFx = \countUTFz \divide\countUTFz by 64 \countUTFy = \countUTFz % Save to be the future value of \countUTFz. \multiply\countUTFz by 64 % \countUTFz is now \countUTFx with the last 5 bits cleared. Subtract % in order to get the last five bits. \advance\countUTFx by -\countUTFz % Convert this to the byte in the UTF-8 sequence. \advance\countUTFx by 128 \uccode `#1\countUTFx \countUTFz = \countUTFy} % Used to put a UTF-8 byte sequence into \UTFviiiTmp % #1 is the increment for \countUTFz to yield a the first byte of the UTF-8 % sequence. % #2 is one of the \UTFviii*OctetsName macros. % #3 is always a full stop (.) % #4 is a template for the other bytes in the sequence. The values for these % bytes is substituted in here with \uppercase using the \uccode's. \gdef\parseUTFviiiB#1#2#3#4{% \advance\countUTFz by "#10\relax \uccode `#3\countUTFz \uppercase{\gdef\UTFviiiTmp{#2#3#4}}} \endgroup % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro that sets a catcode to `other' non-globally % \def\DeclareUnicodeCharacterNativeOther#1#2{% \catcode"#1=\other } % https://en.wikipedia.org/wiki/Plane_(Unicode)#Basic_M % U+0000..U+007F = https://en.wikipedia.org/wiki/Basic_Latin_(Unicode_block) % U+0080..U+00FF = https://en.wikipedia.org/wiki/Latin-1_Supplement_(Unicode_block) % U+0100..U+017F = https://en.wikipedia.org/wiki/Latin_Extended-A % U+0180..U+024F = https://en.wikipedia.org/wiki/Latin_Extended-B % % Many of our renditions are less than wonderful, and all the missing % characters are available somewhere. Loading the necessary fonts % awaits user request. We can't truly support Unicode without % reimplementing everything that's been done in LaTeX for many years, % plus probably using luatex or xetex, and who knows what else. % We won't be doing that here in this simple file. But we can try to at % least make most of the characters not bomb out. % \def\unicodechardefs{% \DeclareUnicodeCharacter{00A0}{\tie}% \DeclareUnicodeCharacter{00A1}{\exclamdown}% \DeclareUnicodeCharacter{00A2}{{\tcfont \char162}}% 0242=cent \DeclareUnicodeCharacter{00A3}{\pounds{}}% \DeclareUnicodeCharacter{00A4}{{\tcfont \char164}}% 0244=currency \DeclareUnicodeCharacter{00A5}{{\tcfont \char165}}% 0245=yen \DeclareUnicodeCharacter{00A6}{{\tcfont \char166}}% 0246=brokenbar \DeclareUnicodeCharacter{00A7}{\S}% \DeclareUnicodeCharacter{00A8}{\"{ }}% \DeclareUnicodeCharacter{00A9}{\copyright{}}% \DeclareUnicodeCharacter{00AA}{\ordf}% \DeclareUnicodeCharacter{00AB}{\guillemetleft{}}% \DeclareUnicodeCharacter{00AC}{\ensuremath\lnot}% \DeclareUnicodeCharacter{00AD}{\-}% \DeclareUnicodeCharacter{00AE}{\registeredsymbol{}}% \DeclareUnicodeCharacter{00AF}{\={ }}% % \DeclareUnicodeCharacter{00B0}{\ringaccent{ }}% \DeclareUnicodeCharacter{00B1}{\ensuremath\pm}% \DeclareUnicodeCharacter{00B2}{$^2$}% \DeclareUnicodeCharacter{00B3}{$^3$}% \DeclareUnicodeCharacter{00B4}{\'{ }}% \DeclareUnicodeCharacter{00B5}{$\mu$}% \DeclareUnicodeCharacter{00B6}{\P}% \DeclareUnicodeCharacter{00B7}{\ensuremath\cdot}% \DeclareUnicodeCharacter{00B8}{\cedilla{ }}% \DeclareUnicodeCharacter{00B9}{$^1$}% \DeclareUnicodeCharacter{00BA}{\ordm}% \DeclareUnicodeCharacter{00BB}{\guillemetright{}}% \DeclareUnicodeCharacter{00BC}{$1\over4$}% \DeclareUnicodeCharacter{00BD}{$1\over2$}% \DeclareUnicodeCharacter{00BE}{$3\over4$}% \DeclareUnicodeCharacter{00BF}{\questiondown}% % \DeclareUnicodeCharacter{00C0}{\`A}% \DeclareUnicodeCharacter{00C1}{\'A}% \DeclareUnicodeCharacter{00C2}{\^A}% \DeclareUnicodeCharacter{00C3}{\~A}% \DeclareUnicodeCharacter{00C4}{\"A}% \DeclareUnicodeCharacter{00C5}{\AA}% \DeclareUnicodeCharacter{00C6}{\AE}% \DeclareUnicodeCharacter{00C7}{\cedilla{C}}% \DeclareUnicodeCharacter{00C8}{\`E}% \DeclareUnicodeCharacter{00C9}{\'E}% \DeclareUnicodeCharacter{00CA}{\^E}% \DeclareUnicodeCharacter{00CB}{\"E}% \DeclareUnicodeCharacter{00CC}{\`I}% \DeclareUnicodeCharacter{00CD}{\'I}% \DeclareUnicodeCharacter{00CE}{\^I}% \DeclareUnicodeCharacter{00CF}{\"I}% % \DeclareUnicodeCharacter{00D0}{\DH}% \DeclareUnicodeCharacter{00D1}{\~N}% \DeclareUnicodeCharacter{00D2}{\`O}% \DeclareUnicodeCharacter{00D3}{\'O}% \DeclareUnicodeCharacter{00D4}{\^O}% \DeclareUnicodeCharacter{00D5}{\~O}% \DeclareUnicodeCharacter{00D6}{\"O}% \DeclareUnicodeCharacter{00D7}{\ensuremath\times}% \DeclareUnicodeCharacter{00D8}{\O}% \DeclareUnicodeCharacter{00D9}{\`U}% \DeclareUnicodeCharacter{00DA}{\'U}% \DeclareUnicodeCharacter{00DB}{\^U}% \DeclareUnicodeCharacter{00DC}{\"U}% \DeclareUnicodeCharacter{00DD}{\'Y}% \DeclareUnicodeCharacter{00DE}{\TH}% \DeclareUnicodeCharacter{00DF}{\ss}% % \DeclareUnicodeCharacter{00E0}{\`a}% \DeclareUnicodeCharacter{00E1}{\'a}% \DeclareUnicodeCharacter{00E2}{\^a}% \DeclareUnicodeCharacter{00E3}{\~a}% \DeclareUnicodeCharacter{00E4}{\"a}% \DeclareUnicodeCharacter{00E5}{\aa}% \DeclareUnicodeCharacter{00E6}{\ae}% \DeclareUnicodeCharacter{00E7}{\cedilla{c}}% \DeclareUnicodeCharacter{00E8}{\`e}% \DeclareUnicodeCharacter{00E9}{\'e}% \DeclareUnicodeCharacter{00EA}{\^e}% \DeclareUnicodeCharacter{00EB}{\"e}% \DeclareUnicodeCharacter{00EC}{\`{\dotless{i}}}% \DeclareUnicodeCharacter{00ED}{\'{\dotless{i}}}% \DeclareUnicodeCharacter{00EE}{\^{\dotless{i}}}% \DeclareUnicodeCharacter{00EF}{\"{\dotless{i}}}% % \DeclareUnicodeCharacter{00F0}{\dh}% \DeclareUnicodeCharacter{00F1}{\~n}% \DeclareUnicodeCharacter{00F2}{\`o}% \DeclareUnicodeCharacter{00F3}{\'o}% \DeclareUnicodeCharacter{00F4}{\^o}% \DeclareUnicodeCharacter{00F5}{\~o}% \DeclareUnicodeCharacter{00F6}{\"o}% \DeclareUnicodeCharacter{00F7}{\ensuremath\div}% \DeclareUnicodeCharacter{00F8}{\o}% \DeclareUnicodeCharacter{00F9}{\`u}% \DeclareUnicodeCharacter{00FA}{\'u}% \DeclareUnicodeCharacter{00FB}{\^u}% \DeclareUnicodeCharacter{00FC}{\"u}% \DeclareUnicodeCharacter{00FD}{\'y}% \DeclareUnicodeCharacter{00FE}{\th}% \DeclareUnicodeCharacter{00FF}{\"y}% % \DeclareUnicodeCharacter{0100}{\=A}% \DeclareUnicodeCharacter{0101}{\=a}% \DeclareUnicodeCharacter{0102}{\u{A}}% \DeclareUnicodeCharacter{0103}{\u{a}}% \DeclareUnicodeCharacter{0104}{\ogonek{A}}% \DeclareUnicodeCharacter{0105}{\ogonek{a}}% \DeclareUnicodeCharacter{0106}{\'C}% \DeclareUnicodeCharacter{0107}{\'c}% \DeclareUnicodeCharacter{0108}{\^C}% \DeclareUnicodeCharacter{0109}{\^c}% \DeclareUnicodeCharacter{010A}{\dotaccent{C}}% \DeclareUnicodeCharacter{010B}{\dotaccent{c}}% \DeclareUnicodeCharacter{010C}{\v{C}}% \DeclareUnicodeCharacter{010D}{\v{c}}% \DeclareUnicodeCharacter{010E}{\v{D}}% \DeclareUnicodeCharacter{010F}{d'}% % \DeclareUnicodeCharacter{0110}{\DH}% \DeclareUnicodeCharacter{0111}{\dh}% \DeclareUnicodeCharacter{0112}{\=E}% \DeclareUnicodeCharacter{0113}{\=e}% \DeclareUnicodeCharacter{0114}{\u{E}}% \DeclareUnicodeCharacter{0115}{\u{e}}% \DeclareUnicodeCharacter{0116}{\dotaccent{E}}% \DeclareUnicodeCharacter{0117}{\dotaccent{e}}% \DeclareUnicodeCharacter{0118}{\ogonek{E}}% \DeclareUnicodeCharacter{0119}{\ogonek{e}}% \DeclareUnicodeCharacter{011A}{\v{E}}% \DeclareUnicodeCharacter{011B}{\v{e}}% \DeclareUnicodeCharacter{011C}{\^G}% \DeclareUnicodeCharacter{011D}{\^g}% \DeclareUnicodeCharacter{011E}{\u{G}}% \DeclareUnicodeCharacter{011F}{\u{g}}% % \DeclareUnicodeCharacter{0120}{\dotaccent{G}}% \DeclareUnicodeCharacter{0121}{\dotaccent{g}}% \DeclareUnicodeCharacter{0122}{\cedilla{G}}% \DeclareUnicodeCharacter{0123}{\cedilla{g}}% \DeclareUnicodeCharacter{0124}{\^H}% \DeclareUnicodeCharacter{0125}{\^h}% \DeclareUnicodeCharacter{0126}{\missingcharmsg{H WITH STROKE}}% \DeclareUnicodeCharacter{0127}{\missingcharmsg{h WITH STROKE}}% \DeclareUnicodeCharacter{0128}{\~I}% \DeclareUnicodeCharacter{0129}{\~{\dotless{i}}}% \DeclareUnicodeCharacter{012A}{\=I}% \DeclareUnicodeCharacter{012B}{\={\dotless{i}}}% \DeclareUnicodeCharacter{012C}{\u{I}}% \DeclareUnicodeCharacter{012D}{\u{\dotless{i}}}% \DeclareUnicodeCharacter{012E}{\ogonek{I}}% \DeclareUnicodeCharacter{012F}{\ogonek{i}}% % \DeclareUnicodeCharacter{0130}{\dotaccent{I}}% \DeclareUnicodeCharacter{0131}{\dotless{i}}% \DeclareUnicodeCharacter{0132}{IJ}% \DeclareUnicodeCharacter{0133}{ij}% \DeclareUnicodeCharacter{0134}{\^J}% \DeclareUnicodeCharacter{0135}{\^{\dotless{j}}}% \DeclareUnicodeCharacter{0136}{\cedilla{K}}% \DeclareUnicodeCharacter{0137}{\cedilla{k}}% \DeclareUnicodeCharacter{0138}{\ensuremath\kappa}% \DeclareUnicodeCharacter{0139}{\'L}% \DeclareUnicodeCharacter{013A}{\'l}% \DeclareUnicodeCharacter{013B}{\cedilla{L}}% \DeclareUnicodeCharacter{013C}{\cedilla{l}}% \DeclareUnicodeCharacter{013D}{L'}% should kern \DeclareUnicodeCharacter{013E}{l'}% should kern \DeclareUnicodeCharacter{013F}{L\U{00B7}}% % \DeclareUnicodeCharacter{0140}{l\U{00B7}}% \DeclareUnicodeCharacter{0141}{\L}% \DeclareUnicodeCharacter{0142}{\l}% \DeclareUnicodeCharacter{0143}{\'N}% \DeclareUnicodeCharacter{0144}{\'n}% \DeclareUnicodeCharacter{0145}{\cedilla{N}}% \DeclareUnicodeCharacter{0146}{\cedilla{n}}% \DeclareUnicodeCharacter{0147}{\v{N}}% \DeclareUnicodeCharacter{0148}{\v{n}}% \DeclareUnicodeCharacter{0149}{'n}% \DeclareUnicodeCharacter{014A}{\missingcharmsg{ENG}}% \DeclareUnicodeCharacter{014B}{\missingcharmsg{eng}}% \DeclareUnicodeCharacter{014C}{\=O}% \DeclareUnicodeCharacter{014D}{\=o}% \DeclareUnicodeCharacter{014E}{\u{O}}% \DeclareUnicodeCharacter{014F}{\u{o}}% % \DeclareUnicodeCharacter{0150}{\H{O}}% \DeclareUnicodeCharacter{0151}{\H{o}}% \DeclareUnicodeCharacter{0152}{\OE}% \DeclareUnicodeCharacter{0153}{\oe}% \DeclareUnicodeCharacter{0154}{\'R}% \DeclareUnicodeCharacter{0155}{\'r}% \DeclareUnicodeCharacter{0156}{\cedilla{R}}% \DeclareUnicodeCharacter{0157}{\cedilla{r}}% \DeclareUnicodeCharacter{0158}{\v{R}}% \DeclareUnicodeCharacter{0159}{\v{r}}% \DeclareUnicodeCharacter{015A}{\'S}% \DeclareUnicodeCharacter{015B}{\'s}% \DeclareUnicodeCharacter{015C}{\^S}% \DeclareUnicodeCharacter{015D}{\^s}% \DeclareUnicodeCharacter{015E}{\cedilla{S}}% \DeclareUnicodeCharacter{015F}{\cedilla{s}}% % \DeclareUnicodeCharacter{0160}{\v{S}}% \DeclareUnicodeCharacter{0161}{\v{s}}% \DeclareUnicodeCharacter{0162}{\cedilla{T}}% \DeclareUnicodeCharacter{0163}{\cedilla{t}}% \DeclareUnicodeCharacter{0164}{\v{T}}% \DeclareUnicodeCharacter{0165}{\v{t}}% \DeclareUnicodeCharacter{0166}{\missingcharmsg{H WITH STROKE}}% \DeclareUnicodeCharacter{0167}{\missingcharmsg{h WITH STROKE}}% \DeclareUnicodeCharacter{0168}{\~U}% \DeclareUnicodeCharacter{0169}{\~u}% \DeclareUnicodeCharacter{016A}{\=U}% \DeclareUnicodeCharacter{016B}{\=u}% \DeclareUnicodeCharacter{016C}{\u{U}}% \DeclareUnicodeCharacter{016D}{\u{u}}% \DeclareUnicodeCharacter{016E}{\ringaccent{U}}% \DeclareUnicodeCharacter{016F}{\ringaccent{u}}% % \DeclareUnicodeCharacter{0170}{\H{U}}% \DeclareUnicodeCharacter{0171}{\H{u}}% \DeclareUnicodeCharacter{0172}{\ogonek{U}}% \DeclareUnicodeCharacter{0173}{\ogonek{u}}% \DeclareUnicodeCharacter{0174}{\^W}% \DeclareUnicodeCharacter{0175}{\^w}% \DeclareUnicodeCharacter{0176}{\^Y}% \DeclareUnicodeCharacter{0177}{\^y}% \DeclareUnicodeCharacter{0178}{\"Y}% \DeclareUnicodeCharacter{0179}{\'Z}% \DeclareUnicodeCharacter{017A}{\'z}% \DeclareUnicodeCharacter{017B}{\dotaccent{Z}}% \DeclareUnicodeCharacter{017C}{\dotaccent{z}}% \DeclareUnicodeCharacter{017D}{\v{Z}}% \DeclareUnicodeCharacter{017E}{\v{z}}% \DeclareUnicodeCharacter{017F}{\missingcharmsg{LONG S}}% % \DeclareUnicodeCharacter{01C4}{D\v{Z}}% \DeclareUnicodeCharacter{01C5}{D\v{z}}% \DeclareUnicodeCharacter{01C6}{d\v{z}}% \DeclareUnicodeCharacter{01C7}{LJ}% \DeclareUnicodeCharacter{01C8}{Lj}% \DeclareUnicodeCharacter{01C9}{lj}% \DeclareUnicodeCharacter{01CA}{NJ}% \DeclareUnicodeCharacter{01CB}{Nj}% \DeclareUnicodeCharacter{01CC}{nj}% \DeclareUnicodeCharacter{01CD}{\v{A}}% \DeclareUnicodeCharacter{01CE}{\v{a}}% \DeclareUnicodeCharacter{01CF}{\v{I}}% % \DeclareUnicodeCharacter{01D0}{\v{\dotless{i}}}% \DeclareUnicodeCharacter{01D1}{\v{O}}% \DeclareUnicodeCharacter{01D2}{\v{o}}% \DeclareUnicodeCharacter{01D3}{\v{U}}% \DeclareUnicodeCharacter{01D4}{\v{u}}% % \DeclareUnicodeCharacter{01E2}{\={\AE}}% \DeclareUnicodeCharacter{01E3}{\={\ae}}% \DeclareUnicodeCharacter{01E6}{\v{G}}% \DeclareUnicodeCharacter{01E7}{\v{g}}% \DeclareUnicodeCharacter{01E8}{\v{K}}% \DeclareUnicodeCharacter{01E9}{\v{k}}% % \DeclareUnicodeCharacter{01F0}{\v{\dotless{j}}}% \DeclareUnicodeCharacter{01F1}{DZ}% \DeclareUnicodeCharacter{01F2}{Dz}% \DeclareUnicodeCharacter{01F3}{dz}% \DeclareUnicodeCharacter{01F4}{\'G}% \DeclareUnicodeCharacter{01F5}{\'g}% \DeclareUnicodeCharacter{01F8}{\`N}% \DeclareUnicodeCharacter{01F9}{\`n}% \DeclareUnicodeCharacter{01FC}{\'{\AE}}% \DeclareUnicodeCharacter{01FD}{\'{\ae}}% \DeclareUnicodeCharacter{01FE}{\'{\O}}% \DeclareUnicodeCharacter{01FF}{\'{\o}}% % \DeclareUnicodeCharacter{021E}{\v{H}}% \DeclareUnicodeCharacter{021F}{\v{h}}% % \DeclareUnicodeCharacter{0226}{\dotaccent{A}}% \DeclareUnicodeCharacter{0227}{\dotaccent{a}}% \DeclareUnicodeCharacter{0228}{\cedilla{E}}% \DeclareUnicodeCharacter{0229}{\cedilla{e}}% \DeclareUnicodeCharacter{022E}{\dotaccent{O}}% \DeclareUnicodeCharacter{022F}{\dotaccent{o}}% % \DeclareUnicodeCharacter{0232}{\=Y}% \DeclareUnicodeCharacter{0233}{\=y}% \DeclareUnicodeCharacter{0237}{\dotless{j}}% % \DeclareUnicodeCharacter{02BC}{'}% % \DeclareUnicodeCharacter{02DB}{\ogonek{ }}% % % Greek letters upper case \DeclareUnicodeCharacter{0391}{{\it A}}% \DeclareUnicodeCharacter{0392}{{\it B}}% \DeclareUnicodeCharacter{0393}{\ensuremath{\mit\Gamma}}% \DeclareUnicodeCharacter{0394}{\ensuremath{\mit\Delta}}% \DeclareUnicodeCharacter{0395}{{\it E}}% \DeclareUnicodeCharacter{0396}{{\it Z}}% \DeclareUnicodeCharacter{0397}{{\it H}}% \DeclareUnicodeCharacter{0398}{\ensuremath{\mit\Theta}}% \DeclareUnicodeCharacter{0399}{{\it I}}% \DeclareUnicodeCharacter{039A}{{\it K}}% \DeclareUnicodeCharacter{039B}{\ensuremath{\mit\Lambda}}% \DeclareUnicodeCharacter{039C}{{\it M}}% \DeclareUnicodeCharacter{039D}{{\it N}}% \DeclareUnicodeCharacter{039E}{\ensuremath{\mit\Xi}}% \DeclareUnicodeCharacter{039F}{{\it O}}% \DeclareUnicodeCharacter{03A0}{\ensuremath{\mit\Pi}}% \DeclareUnicodeCharacter{03A1}{{\it P}}% %\DeclareUnicodeCharacter{03A2}{} % none - corresponds to final sigma \DeclareUnicodeCharacter{03A3}{\ensuremath{\mit\Sigma}}% \DeclareUnicodeCharacter{03A4}{{\it T}}% \DeclareUnicodeCharacter{03A5}{\ensuremath{\mit\Upsilon}}% \DeclareUnicodeCharacter{03A6}{\ensuremath{\mit\Phi}}% \DeclareUnicodeCharacter{03A7}{{\it X}}% \DeclareUnicodeCharacter{03A8}{\ensuremath{\mit\Psi}}% \DeclareUnicodeCharacter{03A9}{\ensuremath{\mit\Omega}}% % % Vowels with accents \DeclareUnicodeCharacter{0390}{\ensuremath{\ddot{\acute\iota}}}% \DeclareUnicodeCharacter{03AC}{\ensuremath{\acute\alpha}}% \DeclareUnicodeCharacter{03AD}{\ensuremath{\acute\epsilon}}% \DeclareUnicodeCharacter{03AE}{\ensuremath{\acute\eta}}% \DeclareUnicodeCharacter{03AF}{\ensuremath{\acute\iota}}% \DeclareUnicodeCharacter{03B0}{\ensuremath{\acute{\ddot\upsilon}}}% % % Standalone accent \DeclareUnicodeCharacter{0384}{\ensuremath{\acute{\ }}}% % % Greek letters lower case \DeclareUnicodeCharacter{03B1}{\ensuremath\alpha}% \DeclareUnicodeCharacter{03B2}{\ensuremath\beta}% \DeclareUnicodeCharacter{03B3}{\ensuremath\gamma}% \DeclareUnicodeCharacter{03B4}{\ensuremath\delta}% \DeclareUnicodeCharacter{03B5}{\ensuremath\epsilon}% \DeclareUnicodeCharacter{03B6}{\ensuremath\zeta}% \DeclareUnicodeCharacter{03B7}{\ensuremath\eta}% \DeclareUnicodeCharacter{03B8}{\ensuremath\theta}% \DeclareUnicodeCharacter{03B9}{\ensuremath\iota}% \DeclareUnicodeCharacter{03BA}{\ensuremath\kappa}% \DeclareUnicodeCharacter{03BB}{\ensuremath\lambda}% \DeclareUnicodeCharacter{03BC}{\ensuremath\mu}% \DeclareUnicodeCharacter{03BD}{\ensuremath\nu}% \DeclareUnicodeCharacter{03BE}{\ensuremath\xi}% \DeclareUnicodeCharacter{03BF}{{\it o}}% omicron \DeclareUnicodeCharacter{03C0}{\ensuremath\pi}% \DeclareUnicodeCharacter{03C1}{\ensuremath\rho}% \DeclareUnicodeCharacter{03C2}{\ensuremath\varsigma}% \DeclareUnicodeCharacter{03C3}{\ensuremath\sigma}% \DeclareUnicodeCharacter{03C4}{\ensuremath\tau}% \DeclareUnicodeCharacter{03C5}{\ensuremath\upsilon}% \DeclareUnicodeCharacter{03C6}{\ensuremath\phi}% \DeclareUnicodeCharacter{03C7}{\ensuremath\chi}% \DeclareUnicodeCharacter{03C8}{\ensuremath\psi}% \DeclareUnicodeCharacter{03C9}{\ensuremath\omega}% % % More Greek vowels with accents \DeclareUnicodeCharacter{03CA}{\ensuremath{\ddot\iota}}% \DeclareUnicodeCharacter{03CB}{\ensuremath{\ddot\upsilon}}% \DeclareUnicodeCharacter{03CC}{\ensuremath{\acute o}}% \DeclareUnicodeCharacter{03CD}{\ensuremath{\acute\upsilon}}% \DeclareUnicodeCharacter{03CE}{\ensuremath{\acute\omega}}% % % Variant Greek letters \DeclareUnicodeCharacter{03D1}{\ensuremath\vartheta}% \DeclareUnicodeCharacter{03D6}{\ensuremath\varpi}% \DeclareUnicodeCharacter{03F1}{\ensuremath\varrho}% % \DeclareUnicodeCharacter{1E02}{\dotaccent{B}}% \DeclareUnicodeCharacter{1E03}{\dotaccent{b}}% \DeclareUnicodeCharacter{1E04}{\udotaccent{B}}% \DeclareUnicodeCharacter{1E05}{\udotaccent{b}}% \DeclareUnicodeCharacter{1E06}{\ubaraccent{B}}% \DeclareUnicodeCharacter{1E07}{\ubaraccent{b}}% \DeclareUnicodeCharacter{1E0A}{\dotaccent{D}}% \DeclareUnicodeCharacter{1E0B}{\dotaccent{d}}% \DeclareUnicodeCharacter{1E0C}{\udotaccent{D}}% \DeclareUnicodeCharacter{1E0D}{\udotaccent{d}}% \DeclareUnicodeCharacter{1E0E}{\ubaraccent{D}}% \DeclareUnicodeCharacter{1E0F}{\ubaraccent{d}}% % \DeclareUnicodeCharacter{1E1E}{\dotaccent{F}}% \DeclareUnicodeCharacter{1E1F}{\dotaccent{f}}% % \DeclareUnicodeCharacter{1E20}{\=G}% \DeclareUnicodeCharacter{1E21}{\=g}% \DeclareUnicodeCharacter{1E22}{\dotaccent{H}}% \DeclareUnicodeCharacter{1E23}{\dotaccent{h}}% \DeclareUnicodeCharacter{1E24}{\udotaccent{H}}% \DeclareUnicodeCharacter{1E25}{\udotaccent{h}}% \DeclareUnicodeCharacter{1E26}{\"H}% \DeclareUnicodeCharacter{1E27}{\"h}% % \DeclareUnicodeCharacter{1E30}{\'K}% \DeclareUnicodeCharacter{1E31}{\'k}% \DeclareUnicodeCharacter{1E32}{\udotaccent{K}}% \DeclareUnicodeCharacter{1E33}{\udotaccent{k}}% \DeclareUnicodeCharacter{1E34}{\ubaraccent{K}}% \DeclareUnicodeCharacter{1E35}{\ubaraccent{k}}% \DeclareUnicodeCharacter{1E36}{\udotaccent{L}}% \DeclareUnicodeCharacter{1E37}{\udotaccent{l}}% \DeclareUnicodeCharacter{1E3A}{\ubaraccent{L}}% \DeclareUnicodeCharacter{1E3B}{\ubaraccent{l}}% \DeclareUnicodeCharacter{1E3E}{\'M}% \DeclareUnicodeCharacter{1E3F}{\'m}% % \DeclareUnicodeCharacter{1E40}{\dotaccent{M}}% \DeclareUnicodeCharacter{1E41}{\dotaccent{m}}% \DeclareUnicodeCharacter{1E42}{\udotaccent{M}}% \DeclareUnicodeCharacter{1E43}{\udotaccent{m}}% \DeclareUnicodeCharacter{1E44}{\dotaccent{N}}% \DeclareUnicodeCharacter{1E45}{\dotaccent{n}}% \DeclareUnicodeCharacter{1E46}{\udotaccent{N}}% \DeclareUnicodeCharacter{1E47}{\udotaccent{n}}% \DeclareUnicodeCharacter{1E48}{\ubaraccent{N}}% \DeclareUnicodeCharacter{1E49}{\ubaraccent{n}}% % \DeclareUnicodeCharacter{1E54}{\'P}% \DeclareUnicodeCharacter{1E55}{\'p}% \DeclareUnicodeCharacter{1E56}{\dotaccent{P}}% \DeclareUnicodeCharacter{1E57}{\dotaccent{p}}% \DeclareUnicodeCharacter{1E58}{\dotaccent{R}}% \DeclareUnicodeCharacter{1E59}{\dotaccent{r}}% \DeclareUnicodeCharacter{1E5A}{\udotaccent{R}}% \DeclareUnicodeCharacter{1E5B}{\udotaccent{r}}% \DeclareUnicodeCharacter{1E5E}{\ubaraccent{R}}% \DeclareUnicodeCharacter{1E5F}{\ubaraccent{r}}% % \DeclareUnicodeCharacter{1E60}{\dotaccent{S}}% \DeclareUnicodeCharacter{1E61}{\dotaccent{s}}% \DeclareUnicodeCharacter{1E62}{\udotaccent{S}}% \DeclareUnicodeCharacter{1E63}{\udotaccent{s}}% \DeclareUnicodeCharacter{1E6A}{\dotaccent{T}}% \DeclareUnicodeCharacter{1E6B}{\dotaccent{t}}% \DeclareUnicodeCharacter{1E6C}{\udotaccent{T}}% \DeclareUnicodeCharacter{1E6D}{\udotaccent{t}}% \DeclareUnicodeCharacter{1E6E}{\ubaraccent{T}}% \DeclareUnicodeCharacter{1E6F}{\ubaraccent{t}}% % \DeclareUnicodeCharacter{1E7C}{\~V}% \DeclareUnicodeCharacter{1E7D}{\~v}% \DeclareUnicodeCharacter{1E7E}{\udotaccent{V}}% \DeclareUnicodeCharacter{1E7F}{\udotaccent{v}}% % \DeclareUnicodeCharacter{1E80}{\`W}% \DeclareUnicodeCharacter{1E81}{\`w}% \DeclareUnicodeCharacter{1E82}{\'W}% \DeclareUnicodeCharacter{1E83}{\'w}% \DeclareUnicodeCharacter{1E84}{\"W}% \DeclareUnicodeCharacter{1E85}{\"w}% \DeclareUnicodeCharacter{1E86}{\dotaccent{W}}% \DeclareUnicodeCharacter{1E87}{\dotaccent{w}}% \DeclareUnicodeCharacter{1E88}{\udotaccent{W}}% \DeclareUnicodeCharacter{1E89}{\udotaccent{w}}% \DeclareUnicodeCharacter{1E8A}{\dotaccent{X}}% \DeclareUnicodeCharacter{1E8B}{\dotaccent{x}}% \DeclareUnicodeCharacter{1E8C}{\"X}% \DeclareUnicodeCharacter{1E8D}{\"x}% \DeclareUnicodeCharacter{1E8E}{\dotaccent{Y}}% \DeclareUnicodeCharacter{1E8F}{\dotaccent{y}}% % \DeclareUnicodeCharacter{1E90}{\^Z}% \DeclareUnicodeCharacter{1E91}{\^z}% \DeclareUnicodeCharacter{1E92}{\udotaccent{Z}}% \DeclareUnicodeCharacter{1E93}{\udotaccent{z}}% \DeclareUnicodeCharacter{1E94}{\ubaraccent{Z}}% \DeclareUnicodeCharacter{1E95}{\ubaraccent{z}}% \DeclareUnicodeCharacter{1E96}{\ubaraccent{h}}% \DeclareUnicodeCharacter{1E97}{\"t}% \DeclareUnicodeCharacter{1E98}{\ringaccent{w}}% \DeclareUnicodeCharacter{1E99}{\ringaccent{y}}% % \DeclareUnicodeCharacter{1EA0}{\udotaccent{A}}% \DeclareUnicodeCharacter{1EA1}{\udotaccent{a}}% % \DeclareUnicodeCharacter{1EB8}{\udotaccent{E}}% \DeclareUnicodeCharacter{1EB9}{\udotaccent{e}}% \DeclareUnicodeCharacter{1EBC}{\~E}% \DeclareUnicodeCharacter{1EBD}{\~e}% % \DeclareUnicodeCharacter{1ECA}{\udotaccent{I}}% \DeclareUnicodeCharacter{1ECB}{\udotaccent{i}}% \DeclareUnicodeCharacter{1ECC}{\udotaccent{O}}% \DeclareUnicodeCharacter{1ECD}{\udotaccent{o}}% % \DeclareUnicodeCharacter{1EE4}{\udotaccent{U}}% \DeclareUnicodeCharacter{1EE5}{\udotaccent{u}}% % \DeclareUnicodeCharacter{1EF2}{\`Y}% \DeclareUnicodeCharacter{1EF3}{\`y}% \DeclareUnicodeCharacter{1EF4}{\udotaccent{Y}}% % \DeclareUnicodeCharacter{1EF8}{\~Y}% \DeclareUnicodeCharacter{1EF9}{\~y}% % % Exotic spaces \DeclareUnicodeCharacter{2007}{\hphantom{0}}% % % Punctuation \DeclareUnicodeCharacter{2013}{--}% \DeclareUnicodeCharacter{2014}{---}% \DeclareUnicodeCharacter{2018}{\quoteleft{}}% \DeclareUnicodeCharacter{2019}{\quoteright{}}% \DeclareUnicodeCharacter{201A}{\quotesinglbase{}}% \DeclareUnicodeCharacter{201C}{\quotedblleft{}}% \DeclareUnicodeCharacter{201D}{\quotedblright{}}% \DeclareUnicodeCharacter{201E}{\quotedblbase{}}% \DeclareUnicodeCharacter{2020}{\ensuremath\dagger}% \DeclareUnicodeCharacter{2021}{\ensuremath\ddagger}% \DeclareUnicodeCharacter{2022}{\bullet{}}% \DeclareUnicodeCharacter{202F}{\thinspace}% \DeclareUnicodeCharacter{2026}{\dots{}}% \DeclareUnicodeCharacter{2039}{\guilsinglleft{}}% \DeclareUnicodeCharacter{203A}{\guilsinglright{}}% % \DeclareUnicodeCharacter{20AC}{\euro{}}% % \DeclareUnicodeCharacter{2192}{\expansion{}}% \DeclareUnicodeCharacter{21D2}{\result{}}% % % Mathematical symbols \DeclareUnicodeCharacter{2200}{\ensuremath\forall}% \DeclareUnicodeCharacter{2203}{\ensuremath\exists}% \DeclareUnicodeCharacter{2208}{\ensuremath\in}% \DeclareUnicodeCharacter{2212}{\minus{}}% \DeclareUnicodeCharacter{2217}{\ast}% \DeclareUnicodeCharacter{221E}{\ensuremath\infty}% \DeclareUnicodeCharacter{2225}{\ensuremath\parallel}% \DeclareUnicodeCharacter{2227}{\ensuremath\wedge}% \DeclareUnicodeCharacter{2229}{\ensuremath\cap}% \DeclareUnicodeCharacter{2261}{\equiv{}}% \DeclareUnicodeCharacter{2264}{\ensuremath\leq}% \DeclareUnicodeCharacter{2265}{\ensuremath\geq}% \DeclareUnicodeCharacter{2282}{\ensuremath\subset}% \DeclareUnicodeCharacter{2287}{\ensuremath\supseteq}% % \DeclareUnicodeCharacter{2016}{\ensuremath\Vert}% \DeclareUnicodeCharacter{2032}{\ensuremath\prime}% \DeclareUnicodeCharacter{210F}{\ensuremath\hbar}% \DeclareUnicodeCharacter{2111}{\ensuremath\Im}% \DeclareUnicodeCharacter{2113}{\ensuremath\ell}% \DeclareUnicodeCharacter{2118}{\ensuremath\wp}% \DeclareUnicodeCharacter{211C}{\ensuremath\Re}% \DeclareUnicodeCharacter{2135}{\ensuremath\aleph}% \DeclareUnicodeCharacter{2190}{\ensuremath\leftarrow}% \DeclareUnicodeCharacter{2191}{\ensuremath\uparrow}% \DeclareUnicodeCharacter{2193}{\ensuremath\downarrow}% \DeclareUnicodeCharacter{2194}{\ensuremath\leftrightarrow}% \DeclareUnicodeCharacter{2195}{\ensuremath\updownarrow}% \DeclareUnicodeCharacter{2196}{\ensuremath\nwarrow}% \DeclareUnicodeCharacter{2197}{\ensuremath\nearrow}% \DeclareUnicodeCharacter{2198}{\ensuremath\searrow}% \DeclareUnicodeCharacter{2199}{\ensuremath\swarrow}% \DeclareUnicodeCharacter{21A6}{\ensuremath\mapsto}% \DeclareUnicodeCharacter{21A9}{\ensuremath\hookleftarrow}% \DeclareUnicodeCharacter{21AA}{\ensuremath\hookrightarrow}% \DeclareUnicodeCharacter{21BC}{\ensuremath\leftharpoonup}% \DeclareUnicodeCharacter{21BD}{\ensuremath\leftharpoondown}% \DeclareUnicodeCharacter{21C0}{\ensuremath\rightharpoonup}% \DeclareUnicodeCharacter{21C1}{\ensuremath\rightharpoondown}% \DeclareUnicodeCharacter{21CC}{\ensuremath\rightleftharpoons}% \DeclareUnicodeCharacter{21D0}{\ensuremath\Leftarrow}% \DeclareUnicodeCharacter{21D1}{\ensuremath\Uparrow}% \DeclareUnicodeCharacter{21D3}{\ensuremath\Downarrow}% \DeclareUnicodeCharacter{21D4}{\ensuremath\Leftrightarrow}% \DeclareUnicodeCharacter{21D5}{\ensuremath\Updownarrow}% \DeclareUnicodeCharacter{2202}{\ensuremath\partial}% \DeclareUnicodeCharacter{2205}{\ensuremath\emptyset}% \DeclareUnicodeCharacter{2207}{\ensuremath\nabla}% \DeclareUnicodeCharacter{2209}{\ensuremath\notin}% \DeclareUnicodeCharacter{220B}{\ensuremath\owns}% \DeclareUnicodeCharacter{220F}{\ensuremath\prod}% \DeclareUnicodeCharacter{2210}{\ensuremath\coprod}% \DeclareUnicodeCharacter{2211}{\ensuremath\sum}% \DeclareUnicodeCharacter{2213}{\ensuremath\mp}% \DeclareUnicodeCharacter{2218}{\ensuremath\circ}% \DeclareUnicodeCharacter{221A}{\ensuremath\surd}% \DeclareUnicodeCharacter{221D}{\ensuremath\propto}% \DeclareUnicodeCharacter{2220}{\ensuremath\angle}% \DeclareUnicodeCharacter{2223}{\ensuremath\mid}% \DeclareUnicodeCharacter{2228}{\ensuremath\vee}% \DeclareUnicodeCharacter{222A}{\ensuremath\cup}% \DeclareUnicodeCharacter{222B}{\ensuremath\smallint}% \DeclareUnicodeCharacter{222E}{\ensuremath\oint}% \DeclareUnicodeCharacter{223C}{\ensuremath\sim}% \DeclareUnicodeCharacter{2240}{\ensuremath\wr}% \DeclareUnicodeCharacter{2243}{\ensuremath\simeq}% \DeclareUnicodeCharacter{2245}{\ensuremath\cong}% \DeclareUnicodeCharacter{2248}{\ensuremath\approx}% \DeclareUnicodeCharacter{224D}{\ensuremath\asymp}% \DeclareUnicodeCharacter{2250}{\ensuremath\doteq}% \DeclareUnicodeCharacter{2260}{\ensuremath\neq}% \DeclareUnicodeCharacter{226A}{\ensuremath\ll}% \DeclareUnicodeCharacter{226B}{\ensuremath\gg}% \DeclareUnicodeCharacter{227A}{\ensuremath\prec}% \DeclareUnicodeCharacter{227B}{\ensuremath\succ}% \DeclareUnicodeCharacter{2283}{\ensuremath\supset}% \DeclareUnicodeCharacter{2286}{\ensuremath\subseteq}% \DeclareUnicodeCharacter{228E}{\ensuremath\uplus}% \DeclareUnicodeCharacter{2291}{\ensuremath\sqsubseteq}% \DeclareUnicodeCharacter{2292}{\ensuremath\sqsupseteq}% \DeclareUnicodeCharacter{2293}{\ensuremath\sqcap}% \DeclareUnicodeCharacter{2294}{\ensuremath\sqcup}% \DeclareUnicodeCharacter{2295}{\ensuremath\oplus}% \DeclareUnicodeCharacter{2296}{\ensuremath\ominus}% \DeclareUnicodeCharacter{2297}{\ensuremath\otimes}% \DeclareUnicodeCharacter{2298}{\ensuremath\oslash}% \DeclareUnicodeCharacter{2299}{\ensuremath\odot}% \DeclareUnicodeCharacter{22A2}{\ensuremath\vdash}% \DeclareUnicodeCharacter{22A3}{\ensuremath\dashv}% \DeclareUnicodeCharacter{22A4}{\ensuremath\ptextop}% \DeclareUnicodeCharacter{22A5}{\ensuremath\bot}% \DeclareUnicodeCharacter{22A8}{\ensuremath\models}% \DeclareUnicodeCharacter{22C0}{\ensuremath\bigwedge}% \DeclareUnicodeCharacter{22C1}{\ensuremath\bigvee}% \DeclareUnicodeCharacter{22C2}{\ensuremath\bigcap}% \DeclareUnicodeCharacter{22C3}{\ensuremath\bigcup}% \DeclareUnicodeCharacter{22C4}{\ensuremath\diamond}% \DeclareUnicodeCharacter{22C5}{\ensuremath\cdot}% \DeclareUnicodeCharacter{22C6}{\ensuremath\star}% \DeclareUnicodeCharacter{22C8}{\ensuremath\bowtie}% \DeclareUnicodeCharacter{2308}{\ensuremath\lceil}% \DeclareUnicodeCharacter{2309}{\ensuremath\rceil}% \DeclareUnicodeCharacter{230A}{\ensuremath\lfloor}% \DeclareUnicodeCharacter{230B}{\ensuremath\rfloor}% \DeclareUnicodeCharacter{2322}{\ensuremath\frown}% \DeclareUnicodeCharacter{2323}{\ensuremath\smile}% % \DeclareUnicodeCharacter{25B3}{\ensuremath\triangle}% \DeclareUnicodeCharacter{25B7}{\ensuremath\triangleright}% \DeclareUnicodeCharacter{25BD}{\ensuremath\bigtriangledown}% \DeclareUnicodeCharacter{25C1}{\ensuremath\triangleleft}% \DeclareUnicodeCharacter{25C7}{\ensuremath\diamond}% \DeclareUnicodeCharacter{2660}{\ensuremath\spadesuit}% \DeclareUnicodeCharacter{2661}{\ensuremath\heartsuit}% \DeclareUnicodeCharacter{2662}{\ensuremath\diamondsuit}% \DeclareUnicodeCharacter{2663}{\ensuremath\clubsuit}% \DeclareUnicodeCharacter{266D}{\ensuremath\flat}% \DeclareUnicodeCharacter{266E}{\ensuremath\natural}% \DeclareUnicodeCharacter{266F}{\ensuremath\sharp}% \DeclareUnicodeCharacter{26AA}{\ensuremath\bigcirc}% \DeclareUnicodeCharacter{27B9}{\ensuremath\rangle}% \DeclareUnicodeCharacter{27C2}{\ensuremath\perp}% \DeclareUnicodeCharacter{27E8}{\ensuremath\langle}% \DeclareUnicodeCharacter{27F5}{\ensuremath\longleftarrow}% \DeclareUnicodeCharacter{27F6}{\ensuremath\longrightarrow}% \DeclareUnicodeCharacter{27F7}{\ensuremath\longleftrightarrow}% \DeclareUnicodeCharacter{27FC}{\ensuremath\longmapsto}% \DeclareUnicodeCharacter{29F5}{\ensuremath\setminus}% \DeclareUnicodeCharacter{2A00}{\ensuremath\bigodot}% \DeclareUnicodeCharacter{2A01}{\ensuremath\bigoplus}% \DeclareUnicodeCharacter{2A02}{\ensuremath\bigotimes}% \DeclareUnicodeCharacter{2A04}{\ensuremath\biguplus}% \DeclareUnicodeCharacter{2A06}{\ensuremath\bigsqcup}% \DeclareUnicodeCharacter{2A3F}{\ensuremath\amalg}% \DeclareUnicodeCharacter{2AAF}{\ensuremath\preceq}% \DeclareUnicodeCharacter{2AB0}{\ensuremath\succeq}% % \global\mathchardef\checkmark="1370% actually the square root sign \DeclareUnicodeCharacter{2713}{\ensuremath\checkmark}% }% end of \unicodechardefs % UTF-8 byte sequence (pdfTeX) definitions (replacing and @U command) % It makes the setting that replace UTF-8 byte sequence. \def\utfeightchardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterUTFviii \unicodechardefs } % Whether the active definitions of non-ASCII characters expand to % non-active tokens with the same character code. This is used to % write characters literally, instead of using active definitions for % printing the correct glyphs. \newif\ifpassthroughchars \passthroughcharsfalse % For native Unicode handling (XeTeX and LuaTeX), % provide a definition macro to replace/pass-through a Unicode character % \def\DeclareUnicodeCharacterNative#1#2{% \catcode"#1=\active \def\dodeclareunicodecharacternative##1##2##3{% \begingroup \uccode`\~="##2\relax \uppercase{\gdef~}{% \ifpassthroughchars ##1% \else ##3% \fi } \endgroup } \begingroup \uccode`\.="#1\relax \uppercase{\def\UTFNativeTmp{.}}% \expandafter\dodeclareunicodecharacternative\UTFNativeTmp{#1}{#2}% \endgroup } % Native Unicode handling (XeTeX and LuaTeX) character replacing definition. % It activates the setting that replaces Unicode characters. \def\nativeunicodechardefs{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNative \unicodechardefs } % For native Unicode handling (XeTeX and LuaTeX), % make the character token expand % to the sequences given in \unicodechardefs for printing. \def\DeclareUnicodeCharacterNativeAtU#1#2{% \def\UTFAtUTmp{#2} \expandafter\globallet\csname uni:#1\endcsname \UTFAtUTmp } % @U command definitions for native Unicode handling (XeTeX and LuaTeX). \def\nativeunicodechardefsatu{% \let\DeclareUnicodeCharacter\DeclareUnicodeCharacterNativeAtU \unicodechardefs } % US-ASCII character definitions. \def\asciichardefs{% nothing need be done \relax } % Define all Unicode characters we know about. This makes UTF-8 the default % input encoding and allows @U to work. \iftxinativeunicodecapable \nativeunicodechardefsatu \else \utfeightchardefs \fi \message{formatting,} \newdimen\defaultparindent \defaultparindent = 15pt \chapheadingskip = 15pt plus 4pt minus 2pt \secheadingskip = 12pt plus 3pt minus 2pt \subsecheadingskip = 9pt plus 2pt minus 2pt % Prevent underfull vbox error messages. \vbadness = 10000 % Don't be very finicky about underfull hboxes, either. \hbadness = 6666 % Following George Bush, get rid of widows and orphans. \widowpenalty=10000 \clubpenalty=10000 % Use TeX 3.0's \emergencystretch to help line breaking, but if we're % using an old version of TeX, don't do anything. We want the amount of % stretch added to depend on the line length, hence the dependence on % \hsize. We call this whenever the paper size is set. % \def\setemergencystretch{% \ifx\emergencystretch\thisisundefined % Allow us to assign to \emergencystretch anyway. \def\emergencystretch{\dimen0}% \else \emergencystretch = .15\hsize \fi } % Parameters in order: 1) textheight; 2) textwidth; % 3) voffset; 4) hoffset; 5) binding offset; 6) topskip; % 7) physical page height; 8) physical page width. % % We also call \setleading{\textleading}, so the caller should define % \textleading. The caller should also set \parskip. % \def\internalpagesizes#1#2#3#4#5#6#7#8{% \voffset = #3\relax \topskip = #6\relax \splittopskip = \topskip % \vsize = #1\relax \advance\vsize by \topskip \outervsize = \vsize \advance\outervsize by 2\topandbottommargin \txipageheight = \vsize % \hsize = #2\relax \outerhsize = \hsize \advance\outerhsize by 0.5in \txipagewidth = \hsize % \normaloffset = #4\relax \bindingoffset = #5\relax % \ifpdf \pdfpageheight #7\relax \pdfpagewidth #8\relax % if we don't reset these, they will remain at "1 true in" of % whatever layout pdftex was dumped with. \pdfhorigin = 1 true in \pdfvorigin = 1 true in \else \ifx\XeTeXrevision\thisisundefined \special{papersize=#8,#7}% \else \pdfpageheight #7\relax \pdfpagewidth #8\relax % XeTeX does not have \pdfhorigin and \pdfvorigin. \fi \fi % \setleading{\textleading} % \parindent = \defaultparindent \setemergencystretch } % @letterpaper (the default). \def\letterpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % If page is nothing but text, make it come out even. \internalpagesizes{607.2pt}{6in}% that's 46 lines {\voffset}{.25in}% {\bindingoffset}{36pt}% {11in}{8.5in}% }} % Use @smallbook to reset parameters for 7x9.25 trim size. \def\smallbook{{\globaldefs = 1 \parskip = 2pt plus 1pt \textleading = 12pt % \internalpagesizes{7.5in}{5in}% {-.2in}{0in}% {\bindingoffset}{16pt}% {9.25in}{7in}% % \lispnarrowing = 0.3in \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = .5cm }} % Use @afourpaper to print on European A4 paper. \def\afourpaper{{\globaldefs = 1 \parskip = 3pt plus 2pt minus 1pt \textleading = 13.2pt % % Double-side printing via postscript on Laserjet 4050 % prints double-sided nicely when \bindingoffset=10mm and \hoffset=-6mm. % To change the settings for a different printer or situation, adjust % \normaloffset until the front-side and back-side texts align. Then % do the same for \bindingoffset. You can set these for testing in % your texinfo source file like this: % @tex % \global\normaloffset = -6mm % \global\bindingoffset = 10mm % @end tex \internalpagesizes{673.2pt}{160mm}% that's 51 lines {\voffset}{\hoffset}% {\bindingoffset}{44pt}% {297mm}{210mm}% % \tolerance = 700 \contentsrightmargin = 0pt \defbodyindent = 5mm }} % Use @afivepaper to print on European A5 paper. % From romildo@urano.iceb.ufop.br, 2 July 2000. % He also recommends making @example and @lisp be small. \def\afivepaper{{\globaldefs = 1 \parskip = 2pt plus 1pt minus 0.1pt \textleading = 12.5pt % \internalpagesizes{160mm}{120mm}% {\voffset}{\hoffset}% {\bindingoffset}{8pt}% {210mm}{148mm}% % \lispnarrowing = 0.2in \tolerance = 800 \contentsrightmargin = 0pt \defbodyindent = 2mm \tableindent = 12mm }} % A specific text layout, 24x15cm overall, intended for A4 paper. \def\afourlatex{{\globaldefs = 1 \afourpaper \internalpagesizes{237mm}{150mm}% {\voffset}{4.6mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% % % Must explicitly reset to 0 because we call \afourpaper. \globaldefs = 0 }} % Use @afourwide to print on A4 paper in landscape format. \def\afourwide{{\globaldefs = 1 \afourpaper \internalpagesizes{241mm}{165mm}% {\voffset}{-2.95mm}% {\bindingoffset}{7mm}% {297mm}{210mm}% \globaldefs = 0 }} \def\bsixpaper{{\globaldefs = 1 \afourpaper \internalpagesizes{140mm}{100mm}% {-6.35mm}{-12.7mm}% {\bindingoffset}{14pt}% {176mm}{125mm}% \let\SETdispenvsize=\smallword \lispnarrowing = 0.2in \globaldefs = 0 }} % @pagesizes TEXTHEIGHT[,TEXTWIDTH] % Perhaps we should allow setting the margins, \topskip, \parskip, % and/or leading, also. Or perhaps we should compute them somehow. % \parseargdef\pagesizes{\pagesizesyyy #1,,\finish} \def\pagesizesyyy#1,#2,#3\finish{{% \setbox0 = \hbox{\ignorespaces #2}\ifdim\wd0 > 0pt \hsize=#2\relax \fi \globaldefs = 1 % \parskip = 3pt plus 2pt minus 1pt \setleading{\textleading}% % \dimen0 = #1\relax \advance\dimen0 by 2.5in % default 1in margin above heading line % and 1.5in to include heading, footing and % bottom margin % \dimen2 = \hsize \advance\dimen2 by 2in % default to 1 inch margin on each side % \internalpagesizes{#1}{\hsize}% {\voffset}{\normaloffset}% {\bindingoffset}{44pt}% {\dimen0}{\dimen2}% }} % Set default to letter. % \letterpaper % Default value of \hfuzz, for suppressing warnings about overfull hboxes. \hfuzz = 1pt \message{and turning on texinfo input format.} \def^^L{\par} % remove \outer, so ^L can appear in an @comment % DEL is a comment character, in case @c does not suffice. \catcode`\^^? = 14 % Define macros to output various characters with catcode for normal text. \catcode`\"=\other \def\normaldoublequote{"} \catcode`\$=\other \def\normaldollar{$}%$ font-lock fix \catcode`\+=\other \def\normalplus{+} \catcode`\<=\other \def\normalless{<} \catcode`\>=\other \def\normalgreater{>} \catcode`\^=\other \def\normalcaret{^} \catcode`\_=\other \def\normalunderscore{_} \catcode`\|=\other \def\normalverticalbar{|} \catcode`\~=\other \def\normaltilde{~} % This macro is used to make a character print one way in \tt % (where it can probably be output as-is), and another way in other fonts, % where something hairier probably needs to be done. % % #1 is what to print if we are indeed using \tt; #2 is what to print % otherwise. Since all the Computer Modern typewriter fonts have zero % interword stretch (and shrink), and it is reasonable to expect all % typewriter fonts to have this, we can check that font parameter. % \def\ifusingtt#1#2{\ifdim \fontdimen3\font=0pt #1\else #2\fi} % Same as above, but check for italic font. Actually this also catches % non-italic slanted fonts since it is impossible to distinguish them from % italic fonts. But since this is only used by $ and it uses \sl anyway % this is not a problem. \def\ifusingit#1#2{\ifdim \fontdimen1\font>0pt #1\else #2\fi} % Set catcodes for Texinfo file % Active characters for printing the wanted glyph. % Most of these we simply print from the \tt font, but for some, we can % use math or other variants that look better in normal text. % \catcode`\"=\active \def\activedoublequote{{\tt\char34}} \let"=\activedoublequote \catcode`\~=\active \def\activetilde{{\tt\char126}} \let~ = \activetilde \chardef\hatchar=`\^ \catcode`\^=\active \def\activehat{{\tt \hatchar}} \let^ = \activehat \catcode`\_=\active \def_{\ifusingtt\normalunderscore\_} \def\_{\leavevmode \kern.07em \vbox{\hrule width.3em height.1ex}\kern .07em } \let\realunder=_ \catcode`\|=\active \def|{{\tt\char124}} \chardef \less=`\< \catcode`\<=\active \def\activeless{{\tt \less}}\let< = \activeless \chardef \gtr=`\> \catcode`\>=\active \def\activegtr{{\tt \gtr}}\let> = \activegtr \catcode`\+=\active \def+{{\tt \char 43}} \catcode`\$=\active \def${\ifusingit{{\sl\$}}\normaldollar}%$ font-lock fix \catcode`\-=\active \let-=\normaldash % used for headline/footline in the output routine, in case the page % breaks in the middle of an @tex block. \def\texinfochars{% \let< = \activeless \let> = \activegtr \let~ = \activetilde \let^ = \activehat \setregularquotes \let\b = \strong \let\i = \smartitalic % in principle, all other definitions in \tex have to be undone too. } % Used sometimes to turn off (effectively) the active characters even after % parsing them. \def\turnoffactive{% \normalturnoffactive \otherbackslash } \catcode`\@=0 % \backslashcurfont outputs one backslash character in current font, % as in \char`\\. \global\chardef\backslashcurfont=`\\ % \realbackslash is an actual character `\' with catcode other. {\catcode`\\=\other @gdef@realbackslash{\}} % In Texinfo, backslash is an active character; it prints the backslash % in fixed width font. \catcode`\\=\active % @ for escape char from now on. % Print a typewriter backslash. For math mode, we can't simply use % \backslashcurfont: the story here is that in math mode, the \char % of \backslashcurfont ends up printing the roman \ from the math symbol % font (because \char in math mode uses the \mathcode, and plain.tex % sets \mathcode`\\="026E). Hence we use an explicit \mathchar, % which is the decimal equivalent of "715c (class 7, e.g., use \fam; % ignored family value; char position "5C). We can't use " for the % usual hex value because it has already been made active. @def@ttbackslash{{@tt @ifmmode @mathchar29020 @else @backslashcurfont @fi}} @let@backslashchar = @ttbackslash % @backslashchar{} is for user documents. % \otherbackslash defines an active \ to be a literal `\' character with % catcode other. @gdef@otherbackslash{@let\=@realbackslash} % Same as @turnoffactive except outputs \ as {\tt\char`\\} instead of % the literal character `\'. % {@catcode`- = @active @gdef@normalturnoffactive{% @passthroughcharstrue @let-=@normaldash @let"=@normaldoublequote @let$=@normaldollar %$ font-lock fix @let+=@normalplus @let<=@normalless @let>=@normalgreater @let^=@normalcaret @let_=@normalunderscore @let|=@normalverticalbar @let~=@normaltilde @let\=@ttbackslash @setregularquotes @unsepspaces } } % If a .fmt file is being used, characters that might appear in a file % name cannot be active until we have parsed the command line. % So turn them off again, and have @fixbackslash turn them back on. @catcode`+=@other @catcode`@_=@other % \enablebackslashhack - allow file to begin `\input texinfo' % % If a .fmt file is being used, we don't want the `\input texinfo' to show up. % That is what \eatinput is for; after that, the `\' should revert to printing % a backslash. % If the file did not have a `\input texinfo', then it is turned off after % the first line; otherwise the first `\' in the file would cause an error. % This is used on the very last line of this file, texinfo.tex. % We also use @c to call @fixbackslash, in case ends of lines are hidden. { @catcode`@^=7 @catcode`@^^M=13@gdef@enablebackslashhack{% @global@let\ = @eatinput% @catcode`@^^M=13% @def@c{@fixbackslash@c}% % Definition for the newline at the end of this file. @def ^^M{@let^^M@secondlinenl}% % Definition for a newline in the main Texinfo file. @gdef @secondlinenl{@fixbackslash}% % In case the first line has a whole-line command on it @let@originalparsearg@parsearg @def@parsearg{@fixbackslash@originalparsearg} }} {@catcode`@^=7 @catcode`@^^M=13% @gdef@eatinput input texinfo#1^^M{@fixbackslash}} % Emergency active definition of newline, in case an active newline token % appears by mistake. {@catcode`@^=7 @catcode13=13% @gdef@enableemergencynewline{% @gdef^^M{% @par% %@par% }}} @gdef@fixbackslash{% @ifx\@eatinput @let\ = @ttbackslash @fi @catcode13=5 % regular end of line @enableemergencynewline @let@c=@comment @let@parsearg@originalparsearg % Also turn back on active characters that might appear in the input % file name, in case not using a pre-dumped format. @catcode`+=@active @catcode`@_=@active % % If texinfo.cnf is present on the system, read it. % Useful for site-wide @afourpaper, etc. This macro, @fixbackslash, gets % called at the beginning of every Texinfo file. Not opening texinfo.cnf % directly in this file, texinfo.tex, makes it possible to make a format % file for Texinfo. % @openin 1 texinfo.cnf @ifeof 1 @else @input texinfo.cnf @fi @closein 1 } % Say @foo, not \foo, in error messages. @escapechar = `@@ % These (along with & and #) are made active for url-breaking, so need % active definitions as the normal characters. @def@normaldot{.} @def@normalquest{?} @def@normalslash{/} % These look ok in all fonts, so just make them not special. % @hashchar{} gets its own user-level command, because of #line. @catcode`@& = @other @def@normalamp{&} @catcode`@# = @other @def@normalhash{#} @catcode`@% = @other @def@normalpercent{%} @let @hashchar = @normalhash @c Finally, make ` and ' active, so that txicodequoteundirected and @c txicodequotebacktick work right in, e.g., @w{@code{`foo'}}. If we @c don't make ` and ' active, @code will not get them as active chars. @c Do this last of all since we use ` in the previous @catcode assignments. @catcode`@'=@active @catcode`@`=@active @setregularquotes @c Local variables: @c eval: (add-hook 'before-save-hook 'time-stamp nil t) @c time-stamp-pattern: "texinfoversion{%Y-%02m-%02d.%02H}" @c page-delimiter: "^\\\\message\\|emacs-page" @c End: @c vim:sw=2: @enablebackslashhack recutils-1.9/build-aux/depcomp0000755000000000000000000005577614226564226013410 00000000000000#! /bin/sh # depcomp - compile a program generating dependencies as side-effects scriptversion=2018-03-07.03; # UTC # Copyright (C) 1999-2022 Free Software Foundation, Inc. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # Originally written by Alexandre Oliva . case $1 in '') echo "$0: No command. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: depcomp [--help] [--version] PROGRAM [ARGS] Run PROGRAMS ARGS to compile a file, generating dependencies as side-effects. Environment variables: depmode Dependency tracking mode. source Source file read by 'PROGRAMS ARGS'. object Object file output by 'PROGRAMS ARGS'. DEPDIR directory where to store dependencies. depfile Dependency file to output. tmpdepfile Temporary file to use when outputting dependencies. libtool Whether libtool is used (yes/no). Report bugs to . EOF exit $? ;; -v | --v*) echo "depcomp $scriptversion" exit $? ;; esac # Get the directory component of the given path, and save it in the # global variables '$dir'. Note that this directory component will # be either empty or ending with a '/' character. This is deliberate. set_dir_from () { case $1 in */*) dir=`echo "$1" | sed -e 's|/[^/]*$|/|'`;; *) dir=;; esac } # Get the suffix-stripped basename of the given path, and save it the # global variable '$base'. set_base_from () { base=`echo "$1" | sed -e 's|^.*/||' -e 's/\.[^.]*$//'` } # If no dependency file was actually created by the compiler invocation, # we still have to create a dummy depfile, to avoid errors with the # Makefile "include basename.Plo" scheme. make_dummy_depfile () { echo "#dummy" > "$depfile" } # Factor out some common post-processing of the generated depfile. # Requires the auxiliary global variable '$tmpdepfile' to be set. aix_post_process_depfile () { # If the compiler actually managed to produce a dependency file, # post-process it. if test -f "$tmpdepfile"; then # Each line is of the form 'foo.o: dependency.h'. # Do two passes, one to just change these to # $object: dependency.h # and one to simply output # dependency.h: # which is needed to avoid the deleted-header problem. { sed -e "s,^.*\.[$lower]*:,$object:," < "$tmpdepfile" sed -e "s,^.*\.[$lower]*:[$tab ]*,," -e 's,$,:,' < "$tmpdepfile" } > "$depfile" rm -f "$tmpdepfile" else make_dummy_depfile fi } # A tabulation character. tab=' ' # A newline character. nl=' ' # Character ranges might be problematic outside the C locale. # These definitions help. upper=ABCDEFGHIJKLMNOPQRSTUVWXYZ lower=abcdefghijklmnopqrstuvwxyz alpha=${upper}${lower} if test -z "$depmode" || test -z "$source" || test -z "$object"; then echo "depcomp: Variables source, object and depmode must be set" 1>&2 exit 1 fi # Dependencies for sub/bar.o or sub/bar.obj go into sub/.deps/bar.Po. depfile=${depfile-`echo "$object" | sed 's|[^\\/]*$|'${DEPDIR-.deps}'/&|;s|\.\([^.]*\)$|.P\1|;s|Pobj$|Po|'`} tmpdepfile=${tmpdepfile-`echo "$depfile" | sed 's/\.\([^.]*\)$/.T\1/'`} rm -f "$tmpdepfile" # Avoid interferences from the environment. gccflag= dashmflag= # Some modes work just like other modes, but use different flags. We # parameterize here, but still list the modes in the big case below, # to make depend.m4 easier to write. Note that we *cannot* use a case # here, because this file can only contain one case statement. if test "$depmode" = hp; then # HP compiler uses -M and no extra arg. gccflag=-M depmode=gcc fi if test "$depmode" = dashXmstdout; then # This is just like dashmstdout with a different argument. dashmflag=-xM depmode=dashmstdout fi cygpath_u="cygpath -u -f -" if test "$depmode" = msvcmsys; then # This is just like msvisualcpp but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvisualcpp fi if test "$depmode" = msvc7msys; then # This is just like msvc7 but w/o cygpath translation. # Just convert the backslash-escaped backslashes to single forward # slashes to satisfy depend.m4 cygpath_u='sed s,\\\\,/,g' depmode=msvc7 fi if test "$depmode" = xlc; then # IBM C/C++ Compilers xlc/xlC can output gcc-like dependency information. gccflag=-qmakedep=gcc,-MF depmode=gcc fi case "$depmode" in gcc3) ## gcc 3 implements dependency tracking that does exactly what ## we want. Yay! Note: for some reason libtool 1.4 doesn't like ## it if -MD -MP comes after the -MF stuff. Hmm. ## Unfortunately, FreeBSD c89 acceptance of flags depends upon ## the command line argument order; so add the flags where they ## appear in depend2.am. Note that the slowdown incurred here ## affects only configure: in makefiles, %FASTDEP% shortcuts this. for arg do case $arg in -c) set fnord "$@" -MT "$object" -MD -MP -MF "$tmpdepfile" "$arg" ;; *) set fnord "$@" "$arg" ;; esac shift # fnord shift # $arg done "$@" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi mv "$tmpdepfile" "$depfile" ;; gcc) ## Note that this doesn't just cater to obsosete pre-3.x GCC compilers. ## but also to in-use compilers like IMB xlc/xlC and the HP C compiler. ## (see the conditional assignment to $gccflag above). ## There are various ways to get dependency output from gcc. Here's ## why we pick this rather obscure method: ## - Don't want to use -MD because we'd like the dependencies to end ## up in a subdir. Having to rename by hand is ugly. ## (We might end up doing this anyway to support other compilers.) ## - The DEPENDENCIES_OUTPUT environment variable makes gcc act like ## -MM, not -M (despite what the docs say). Also, it might not be ## supported by the other compilers which use the 'gcc' depmode. ## - Using -M directly means running the compiler twice (even worse ## than renaming). if test -z "$gccflag"; then gccflag=-MD, fi "$@" -Wp,"$gccflag$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The second -e expression handles DOS-style file names with drive # letters. sed -e 's/^[^:]*: / /' \ -e 's/^['$alpha']:\/[^:]*: / /' < "$tmpdepfile" >> "$depfile" ## This next piece of magic avoids the "deleted header file" problem. ## The problem is that when a header file which appears in a .P file ## is deleted, the dependency causes make to die (because there is ## typically no way to rebuild the header). We avoid this by adding ## dummy dependencies for each header file. Too bad gcc doesn't do ## this for us directly. ## Some versions of gcc put a space before the ':'. On the theory ## that the space means something, we add a space to the output as ## well. hp depmode also adds that space, but also prefixes the VPATH ## to the object. Take care to not repeat it in the output. ## Some versions of the HPUX 10.20 sed can't process this invocation ## correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e "s|.*$object$||" -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; sgi) if test "$libtool" = yes; then "$@" "-Wp,-MDupdate,$tmpdepfile" else "$@" -MDupdate "$tmpdepfile" fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" if test -f "$tmpdepfile"; then # yes, the sourcefile depend on other files echo "$object : \\" > "$depfile" # Clip off the initial element (the dependent). Don't try to be # clever and replace this with sed code, as IRIX sed won't handle # lines with more than a fixed number of characters (4096 in # IRIX 6.2 sed, 8192 in IRIX 6.5). We also remove comment lines; # the IRIX cc adds comments like '#:fec' to the end of the # dependency line. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' \ | tr "$nl" ' ' >> "$depfile" echo >> "$depfile" # The second pass generates a dummy entry for each header file. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^.*\.o://' -e 's/#.*$//' -e '/^$/ d' -e 's/$/:/' \ >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" ;; xlc) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; aix) # The C for AIX Compiler uses -M and outputs the dependencies # in a .u file. In older versions, this file always lives in the # current directory. Also, the AIX compiler puts '$object:' at the # start of each line; $object doesn't have directory information. # Version 6 uses the directory in both cases. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.u tmpdepfile2=$base.u tmpdepfile3=$dir.libs/$base.u "$@" -Wc,-M else tmpdepfile1=$dir$base.u tmpdepfile2=$dir$base.u tmpdepfile3=$dir$base.u "$@" -M fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done aix_post_process_depfile ;; tcc) # tcc (Tiny C Compiler) understand '-MD -MF file' since version 0.9.26 # FIXME: That version still under development at the moment of writing. # Make that this statement remains true also for stable, released # versions. # It will wrap lines (doesn't matter whether long or short) with a # trailing '\', as in: # # foo.o : \ # foo.c \ # foo.h \ # # It will put a trailing '\' even on the last line, and will use leading # spaces rather than leading tabs (at least since its commit 0394caf7 # "Emit spaces for -MD"). "$@" -MD -MF "$tmpdepfile" stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each non-empty line is of the form 'foo.o : \' or ' dep.h \'. # We have to change lines of the first kind to '$object: \'. sed -e "s|.*:|$object :|" < "$tmpdepfile" > "$depfile" # And for each line of the second kind, we have to emit a 'dep.h:' # dummy dependency, to avoid the deleted-header problem. sed -n -e 's|^ *\(.*\) *\\$|\1:|p' < "$tmpdepfile" >> "$depfile" rm -f "$tmpdepfile" ;; ## The order of this option in the case statement is important, since the ## shell code in configure will try each of these formats in the order ## listed in this file. A plain '-MD' option would be understood by many ## compilers, so we must ensure this comes after the gcc and icc options. pgcc) # Portland's C compiler understands '-MD'. # Will always output deps to 'file.d' where file is the root name of the # source file under compilation, even if file resides in a subdirectory. # The object file name does not affect the name of the '.d' file. # pgcc 10.2 will output # foo.o: sub/foo.c sub/foo.h # and will wrap long lines using '\' : # foo.o: sub/foo.c ... \ # sub/foo.h ... \ # ... set_dir_from "$object" # Use the source, not the object, to determine the base name, since # that's sadly what pgcc will do too. set_base_from "$source" tmpdepfile=$base.d # For projects that build the same source file twice into different object # files, the pgcc approach of using the *source* file root name can cause # problems in parallel builds. Use a locking strategy to avoid stomping on # the same $tmpdepfile. lockdir=$base.d-lock trap " echo '$0: caught signal, cleaning up...' >&2 rmdir '$lockdir' exit 1 " 1 2 13 15 numtries=100 i=$numtries while test $i -gt 0; do # mkdir is a portable test-and-set. if mkdir "$lockdir" 2>/dev/null; then # This process acquired the lock. "$@" -MD stat=$? # Release the lock. rmdir "$lockdir" break else # If the lock is being held by a different process, wait # until the winning process is done or we timeout. while test -d "$lockdir" && test $i -gt 0; do sleep 1 i=`expr $i - 1` done fi i=`expr $i - 1` done trap - 1 2 13 15 if test $i -le 0; then echo "$0: failed to acquire lock after $numtries attempts" >&2 echo "$0: check lockdir '$lockdir'" >&2 exit 1 fi if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" # Each line is of the form `foo.o: dependent.h', # or `foo.o: dep1.h dep2.h \', or ` dep3.h dep4.h \'. # Do two passes, one to just change these to # `$object: dependent.h' and one to simply `dependent.h:'. sed "s,^[^:]*:,$object :," < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this invocation # correctly. Breaking it into two sed invocations is a workaround. sed 's,^[^:]*: \(.*\)$,\1,;s/^\\$//;/^$/d;/:$/d' < "$tmpdepfile" \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; hp2) # The "hp" stanza above does not work with aCC (C++) and HP's ia64 # compilers, which have integrated preprocessors. The correct option # to use with these is +Maked; it writes dependencies to a file named # 'foo.d', which lands next to the object file, wherever that # happens to be. # Much of this is similar to the tru64 case; see comments there. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then tmpdepfile1=$dir$base.d tmpdepfile2=$dir.libs/$base.d "$@" -Wc,+Maked else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d "$@" +Maked fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" do test -f "$tmpdepfile" && break done if test -f "$tmpdepfile"; then sed -e "s,^.*\.[$lower]*:,$object:," "$tmpdepfile" > "$depfile" # Add 'dependent.h:' lines. sed -ne '2,${ s/^ *// s/ \\*$// s/$/:/ p }' "$tmpdepfile" >> "$depfile" else make_dummy_depfile fi rm -f "$tmpdepfile" "$tmpdepfile2" ;; tru64) # The Tru64 compiler uses -MD to generate dependencies as a side # effect. 'cc -MD -o foo.o ...' puts the dependencies into 'foo.o.d'. # At least on Alpha/Redhat 6.1, Compaq CCC V6.2-504 seems to put # dependencies in 'foo.d' instead, so we check for that too. # Subdirectories are respected. set_dir_from "$object" set_base_from "$object" if test "$libtool" = yes; then # Libtool generates 2 separate objects for the 2 libraries. These # two compilations output dependencies in $dir.libs/$base.o.d and # in $dir$base.o.d. We have to check for both files, because # one of the two compilations can be disabled. We should prefer # $dir$base.o.d over $dir.libs/$base.o.d because the latter is # automatically cleaned when .libs/ is deleted, while ignoring # the former would cause a distcleancheck panic. tmpdepfile1=$dir$base.o.d # libtool 1.5 tmpdepfile2=$dir.libs/$base.o.d # Likewise. tmpdepfile3=$dir.libs/$base.d # Compaq CCC V6.2-504 "$@" -Wc,-MD else tmpdepfile1=$dir$base.d tmpdepfile2=$dir$base.d tmpdepfile3=$dir$base.d "$@" -MD fi stat=$? if test $stat -ne 0; then rm -f "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" exit $stat fi for tmpdepfile in "$tmpdepfile1" "$tmpdepfile2" "$tmpdepfile3" do test -f "$tmpdepfile" && break done # Same post-processing that is required for AIX mode. aix_post_process_depfile ;; msvc7) if test "$libtool" = yes; then showIncludes=-Wc,-showIncludes else showIncludes=-showIncludes fi "$@" $showIncludes > "$tmpdepfile" stat=$? grep -v '^Note: including file: ' "$tmpdepfile" if test $stat -ne 0; then rm -f "$tmpdepfile" exit $stat fi rm -f "$depfile" echo "$object : \\" > "$depfile" # The first sed program below extracts the file names and escapes # backslashes for cygpath. The second sed program outputs the file # name when reading, but also accumulates all include files in the # hold buffer in order to output them again at the end. This only # works with sed implementations that can handle large buffers. sed < "$tmpdepfile" -n ' /^Note: including file: *\(.*\)/ { s//\1/ s/\\/\\\\/g p }' | $cygpath_u | sort -u | sed -n ' s/ /\\ /g s/\(.*\)/'"$tab"'\1 \\/p s/.\(.*\) \\/\1:/ H $ { s/.*/'"$tab"'/ G p }' >> "$depfile" echo >> "$depfile" # make sure the fragment doesn't end with a backslash rm -f "$tmpdepfile" ;; msvc7msys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; #nosideeffect) # This comment above is used by automake to tell side-effect # dependency tracking mechanisms from slower ones. dashmstdout) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout, regardless of -o. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done test -z "$dashmflag" && dashmflag=-M # Require at least two characters before searching for ':' # in the target name. This is to cope with DOS-style filenames: # a dependency such as 'c:/foo/bar' could be seen as target 'c' otherwise. "$@" $dashmflag | sed "s|^[$tab ]*[^:$tab ][^:][^:]*:[$tab ]*|$object: |" > "$tmpdepfile" rm -f "$depfile" cat < "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process this sed invocation # correctly. Breaking it into two sed invocations is a workaround. tr ' ' "$nl" < "$tmpdepfile" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; dashXmstdout) # This case only exists to satisfy depend.m4. It is never actually # run, as this mode is specially recognized in the preamble. exit 1 ;; makedepend) "$@" || exit $? # Remove any Libtool call if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # X makedepend shift cleared=no eat=no for arg do case $cleared in no) set ""; shift cleared=yes ;; esac if test $eat = yes; then eat=no continue fi case "$arg" in -D*|-I*) set fnord "$@" "$arg"; shift ;; # Strip any option that makedepend may not understand. Remove # the object too, otherwise makedepend will parse it as a source file. -arch) eat=yes ;; -*|$object) ;; *) set fnord "$@" "$arg"; shift ;; esac done obj_suffix=`echo "$object" | sed 's/^.*\././'` touch "$tmpdepfile" ${MAKEDEPEND-makedepend} -o"$obj_suffix" -f"$tmpdepfile" "$@" rm -f "$depfile" # makedepend may prepend the VPATH from the source file name to the object. # No need to regex-escape $object, excess matching of '.' is harmless. sed "s|^.*\($object *:\)|\1|" "$tmpdepfile" > "$depfile" # Some versions of the HPUX 10.20 sed can't process the last invocation # correctly. Breaking it into two sed invocations is a workaround. sed '1,2d' "$tmpdepfile" \ | tr ' ' "$nl" \ | sed -e 's/^\\$//' -e '/^$/d' -e '/:$/d' \ | sed -e 's/$/ :/' >> "$depfile" rm -f "$tmpdepfile" "$tmpdepfile".bak ;; cpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi # Remove '-o $object'. IFS=" " for arg do case $arg in -o) shift ;; $object) shift ;; *) set fnord "$@" "$arg" shift # fnord shift # $arg ;; esac done "$@" -E \ | sed -n -e '/^# [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ -e '/^#line [0-9][0-9]* "\([^"]*\)".*/ s:: \1 \\:p' \ | sed '$ s: \\$::' > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" cat < "$tmpdepfile" >> "$depfile" sed < "$tmpdepfile" '/^$/d;s/^ //;s/ \\$//;s/$/ :/' >> "$depfile" rm -f "$tmpdepfile" ;; msvisualcpp) # Important note: in order to support this mode, a compiler *must* # always write the preprocessed file to stdout. "$@" || exit $? # Remove the call to Libtool. if test "$libtool" = yes; then while test "X$1" != 'X--mode=compile'; do shift done shift fi IFS=" " for arg do case "$arg" in -o) shift ;; $object) shift ;; "-Gm"|"/Gm"|"-Gi"|"/Gi"|"-ZI"|"/ZI") set fnord "$@" shift shift ;; *) set fnord "$@" "$arg" shift shift ;; esac done "$@" -E 2>/dev/null | sed -n '/^#line [0-9][0-9]* "\([^"]*\)"/ s::\1:p' | $cygpath_u | sort -u > "$tmpdepfile" rm -f "$depfile" echo "$object : \\" > "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::'"$tab"'\1 \\:p' >> "$depfile" echo "$tab" >> "$depfile" sed < "$tmpdepfile" -n -e 's% %\\ %g' -e '/^\(.*\)$/ s::\1\::p' >> "$depfile" rm -f "$tmpdepfile" ;; msvcmsys) # This case exists only to let depend.m4 do its work. It works by # looking at the text of this script. This case will never be run, # since it is checked for above. exit 1 ;; none) exec "$@" ;; *) echo "Unknown depmode $depmode" 1>&2 exit 1 ;; esac exit 0 # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: recutils-1.9/build-aux/ylwrap0000755000000000000000000001531414226573150013253 00000000000000#! /bin/sh # ylwrap - wrapper for lex/yacc invocations. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # Written by Tom Tromey . # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to or send patches to # . get_dirname () { case $1 in */*|*\\*) printf '%s\n' "$1" | sed -e 's|\([\\/]\)[^\\/]*$|\1|';; # Otherwise, we want the empty string (not "."). esac } # guard FILE # ---------- # The CPP macro used to guard inclusion of FILE. guard () { printf '%s\n' "$1" \ | sed \ -e 'y/abcdefghijklmnopqrstuvwxyz/ABCDEFGHIJKLMNOPQRSTUVWXYZ/' \ -e 's/[^ABCDEFGHIJKLMNOPQRSTUVWXYZ]/_/g' \ -e 's/__*/_/g' } # quote_for_sed [STRING] # ---------------------- # Return STRING (or stdin) quoted to be used as a sed pattern. quote_for_sed () { case $# in 0) cat;; 1) printf '%s\n' "$1";; esac \ | sed -e 's|[][\\.*]|\\&|g' } case "$1" in '') echo "$0: No files given. Try '$0 --help' for more information." 1>&2 exit 1 ;; --basedir) basedir=$2 shift 2 ;; -h|--h*) cat <<\EOF Usage: ylwrap [--help|--version] INPUT [OUTPUT DESIRED]... -- PROGRAM [ARGS]... Wrapper for lex/yacc invocations, renaming files as desired. INPUT is the input file OUTPUT is one file PROG generates DESIRED is the file we actually want instead of OUTPUT PROGRAM is program to run ARGS are passed to PROG Any number of OUTPUT,DESIRED pairs may be used. Report bugs to . EOF exit $? ;; -v|--v*) echo "ylwrap $scriptversion" exit $? ;; esac # The input. input=$1 shift # We'll later need for a correct munging of "#line" directives. input_sub_rx=`get_dirname "$input" | quote_for_sed` case $input in [\\/]* | ?:[\\/]*) # Absolute path; do nothing. ;; *) # Relative path. Make it absolute. input=`pwd`/$input ;; esac input_rx=`get_dirname "$input" | quote_for_sed` # Since DOS filename conventions don't allow two dots, # the DOS version of Bison writes out y_tab.c instead of y.tab.c # and y_tab.h instead of y.tab.h. Test to see if this is the case. y_tab_nodot=false if test -f y_tab.c || test -f y_tab.h; then y_tab_nodot=true fi # The parser itself, the first file, is the destination of the .y.c # rule in the Makefile. parser=$1 # A sed program to s/FROM/TO/g for all the FROM/TO so that, for # instance, we rename #include "y.tab.h" into #include "parse.h" # during the conversion from y.tab.c to parse.c. sed_fix_filenames= # Also rename header guards, as Bison 2.7 for instance uses its header # guard in its implementation file. sed_fix_header_guards= while test $# -ne 0; do if test x"$1" = x"--"; then shift break fi from=$1 # Handle y_tab.c and y_tab.h output by DOS if $y_tab_nodot; then case $from in "y.tab.c") from=y_tab.c;; "y.tab.h") from=y_tab.h;; esac fi shift to=$1 shift sed_fix_filenames="${sed_fix_filenames}s|"`quote_for_sed "$from"`"|$to|g;" sed_fix_header_guards="${sed_fix_header_guards}s|"`guard "$from"`"|"`guard "$to"`"|g;" done # The program to run. prog=$1 shift # Make any relative path in $prog absolute. case $prog in [\\/]* | ?:[\\/]*) ;; *[\\/]*) prog=`pwd`/$prog ;; esac dirname=ylwrap$$ do_exit="cd '`pwd`' && rm -rf $dirname > /dev/null 2>&1;"' (exit $ret); exit $ret' trap "ret=129; $do_exit" 1 trap "ret=130; $do_exit" 2 trap "ret=141; $do_exit" 13 trap "ret=143; $do_exit" 15 mkdir $dirname || exit 1 cd $dirname case $# in 0) "$prog" "$input" ;; *) "$prog" "$@" "$input" ;; esac ret=$? if test $ret -eq 0; then for from in * do to=`printf '%s\n' "$from" | sed "$sed_fix_filenames"` if test -f "$from"; then # If $2 is an absolute path name, then just use that, # otherwise prepend '../'. case $to in [\\/]* | ?:[\\/]*) target=$to;; *) target=../$to;; esac # Do not overwrite unchanged header files to avoid useless # recompilations. Always update the parser itself: it is the # destination of the .y.c rule in the Makefile. Divert the # output of all other files to a temporary file so we can # compare them to existing versions. if test $from != $parser; then realtarget=$target target=tmp-`printf '%s\n' "$target" | sed 's|.*[\\/]||g'` fi # Munge "#line" or "#" directives. Don't let the resulting # debug information point at an absolute srcdir. Use the real # output file name, not yy.lex.c for instance. Adjust the # include guards too. sed -e "/^#/!b" \ -e "s|$input_rx|$input_sub_rx|" \ -e "$sed_fix_filenames" \ -e "$sed_fix_header_guards" \ "$from" >"$target" || ret=$? # Check whether files must be updated. if test "$from" != "$parser"; then if test -f "$realtarget" && cmp -s "$realtarget" "$target"; then echo "$to is unchanged" rm -f "$target" else echo "updating $to" mv -f "$target" "$realtarget" fi fi else # A missing file is only an error for the parser. This is a # blatant hack to let us support using "yacc -d". If -d is not # specified, don't fail when the header file is "missing". if test "$from" = "$parser"; then ret=1 fi fi done fi # Remove the directory. cd .. rm -rf $dirname exit $ret # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: recutils-1.9/build-aux/update-copyright0000755000000000000000000002513514226564447015240 00000000000000#!/bin/sh #! -*-perl-*- # Update an FSF copyright year list to include the current year. # Copyright (C) 2009-2022 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Written by Jim Meyering and Joel E. Denny # This script updates an FSF copyright year list to include the current year. # Usage: update-copyright [FILE...] # # The arguments to this script should be names of files that contain # copyright statements to be updated. The copyright holder's name # defaults to "Free Software Foundation, Inc." but may be changed to # any other name by using the "UPDATE_COPYRIGHT_HOLDER" environment # variable. # # For example, you might wish to use the update-copyright target rule # in maint.mk from gnulib's maintainer-makefile module. # # Iff a copyright statement is recognized in a file and the final # year is not the current year, then the statement is updated for the # new year and it is reformatted to: # # 1. Fit within 72 columns. # 2. Convert 2-digit years to 4-digit years by prepending "19". # 3. Expand copyright year intervals. (See "Environment variables" # below.) # # A warning is printed for every file for which no copyright # statement is recognized. # # Each file's copyright statement must be formatted correctly in # order to be recognized. For example, each of these is fine: # # Copyright @copyright{} 1990-2005, 2007-2009 Free Software # Foundation, Inc. # # # Copyright (C) 1990-2005, 2007-2009 Free Software # # Foundation, Inc. # # /* # * Copyright © 90,2005,2007-2009 # * Free Software Foundation, Inc. # */ # # However, the following format is not recognized because the line # prefix changes after the first line: # # ## Copyright (C) 1990-2005, 2007-2009 Free Software # # Foundation, Inc. # # However, any correctly formatted copyright statement following # a non-matching copyright statements would be recognized. # # The exact conditions that a file's copyright statement must meet # to be recognized are: # # 1. It is the first copyright statement that meets all of the # following conditions. Subsequent copyright statements are # ignored. # 2. Its format is "Copyright (C)", then a list of copyright years, # and then the name of the copyright holder. # 3. The "(C)" takes one of the following forms or is omitted # entirely: # # A. (C) # B. (c) # C. @copyright{} # D. © # E. © # # 4. The "Copyright" appears at the beginning of a line, except that it # may be prefixed by any sequence (e.g., a comment) of no more than # 5 characters -- including white space. # 5. Iff such a prefix is present, the same prefix appears at the # beginning of each remaining line within the FSF copyright # statement. There is one exception in order to support C-style # comments: if the first line's prefix contains nothing but # whitespace surrounding a "/*", then the prefix for all subsequent # lines is the same as the first line's prefix except with each of # "/" and possibly "*" replaced by a " ". The replacement of "*" # by " " is consistent throughout all subsequent lines. # 6. Blank lines, even if preceded by the prefix, do not appear # within the FSF copyright statement. # 7. Each copyright year is 2 or 4 digits, and years are separated by # commas, "-", or "--". Whitespace may appear after commas. # # Environment variables: # # 1. If UPDATE_COPYRIGHT_FORCE=1, a recognized FSF copyright statement # is reformatted even if it does not need updating for the new # year. If unset or set to 0, only updated FSF copyright # statements are reformatted. # 2. If UPDATE_COPYRIGHT_USE_INTERVALS=1, every series of consecutive # copyright years (such as 90, 1991, 1992-2007, 2008) in a # reformatted FSF copyright statement is collapsed to a single # interval (such as 1990-2008). If unset or set to 0, all existing # copyright year intervals in a reformatted FSF copyright statement # are expanded instead. # If UPDATE_COPYRIGHT_USE_INTERVALS=2, convert a sequence with gaps # to the minimal containing range. For example, convert # 2000, 2004-2007, 2009 to 2000-2009. # 3. For testing purposes, you can set the assumed current year in # UPDATE_COPYRIGHT_YEAR. # 4. The default maximum line length for a copyright line is 72. # Set UPDATE_COPYRIGHT_MAX_LINE_LENGTH to use a different length. # 5. Set UPDATE_COPYRIGHT_HOLDER if the copyright holder is other # than "Free Software Foundation, Inc.". # This is a prologue that allows to run a perl script as an executable # on systems that are compliant to a POSIX version before POSIX:2017. # On such systems, the usual invocation of an executable through execlp() # or execvp() fails with ENOEXEC if it is a script that does not start # with a #! line. The script interpreter mentioned in the #! line has # to be /bin/sh, because on GuixSD systems that is the only program that # has a fixed file name. The second line is essential for perl and is # also useful for editing this file in Emacs. The next two lines below # are valid code in both sh and perl. When executed by sh, they re-execute # the script through the perl program found in $PATH. The '-x' option # is essential as well; without it, perl would re-execute the script # through /bin/sh. When executed by perl, the next two lines are a no-op. eval 'exec perl -wSx -0777 -pi "$0" "$@"' if 0; my $VERSION = '2020-04-04.15:07'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. use strict; use warnings; my $copyright_re = 'Copyright'; my $circle_c_re = '(?:\([cC]\)|@copyright\{}|\\\\\(co|©|©)'; my $holder = $ENV{UPDATE_COPYRIGHT_HOLDER}; $holder ||= 'Free Software Foundation, Inc.'; my $prefix_max = 5; my $margin = $ENV{UPDATE_COPYRIGHT_MAX_LINE_LENGTH}; !$margin || $margin !~ m/^\d+$/ and $margin = 72; my $tab_width = 8; my $this_year = $ENV{UPDATE_COPYRIGHT_YEAR}; if (!$this_year || $this_year !~ m/^\d{4}$/) { my ($sec, $min, $hour, $mday, $month, $year) = localtime (time ()); $this_year = $year + 1900; } # Unless the file consistently uses "\r\n" as the EOL, use "\n" instead. my $eol = /(?:^|[^\r])\n/ ? "\n" : "\r\n"; my $leading; my $prefix; my $ws_re; my $stmt_re; while (/(^|\n)(.{0,$prefix_max})$copyright_re/g) { $leading = "$1$2"; $prefix = $2; if ($prefix =~ /^(\s*\/)\*(\s*)$/) { $prefix =~ s,/, ,; my $prefix_ws = $prefix; $prefix_ws =~ s/\*/ /; # Only whitespace. if (/\G(?:[^*\n]|\*[^\/\n])*\*?\n$prefix_ws/) { $prefix = $prefix_ws; } } $ws_re = '[ \t\r\f]'; # \s without \n $ws_re = "(?:$ws_re*(?:$ws_re|\\n" . quotemeta($prefix) . ")$ws_re*)"; my $holder_re = $holder; $holder_re =~ s/\s/$ws_re/g; my $stmt_remainder_re = "(?:$ws_re$circle_c_re)?" . "$ws_re(?:(?:\\d\\d)?\\d\\d(?:,$ws_re?|--?))*" . "((?:\\d\\d)?\\d\\d)$ws_re$holder_re"; if (/\G$stmt_remainder_re/) { $stmt_re = quotemeta($leading) . "($copyright_re$stmt_remainder_re)"; last; } } if (defined $stmt_re) { /$stmt_re/ or die; # Should never die. my $stmt = $1; my $final_year_orig = $2; # Handle two-digit year numbers like "98" and "99". my $final_year = $final_year_orig; $final_year <= 99 and $final_year += 1900; if ($final_year != $this_year) { # Update the year. $stmt =~ s/\b$final_year_orig\b/$final_year, $this_year/; } if ($final_year != $this_year || $ENV{'UPDATE_COPYRIGHT_FORCE'}) { # Normalize all whitespace including newline-prefix sequences. $stmt =~ s/$ws_re/ /g; # Put spaces after commas. $stmt =~ s/, ?/, /g; # Convert 2-digit to 4-digit years. $stmt =~ s/(\b\d\d\b)/19$1/g; # Make the use of intervals consistent. if (!$ENV{UPDATE_COPYRIGHT_USE_INTERVALS}) { $stmt =~ s/(\d{4})--?(\d{4})/join(', ', $1..$2)/eg; } else { my $ndash = $ARGV =~ /\.tex(i(nfo)?)?$/ ? "--" : "-"; $stmt =~ s/ (\d{4}) (?: (,\ |--?) ((??{ if ($2 ne ', ') { '\d{4}'; } elsif (!$3) { $1 + 1; } else { $3 + 1; } })) )+ /$1$ndash$3/gx; # When it's 2, emit a single range encompassing all year numbers. $ENV{UPDATE_COPYRIGHT_USE_INTERVALS} == 2 and $stmt =~ s/\b(\d{4})\b.*\b(\d{4})\b/$1$ndash$2/; } # Format within margin. my $stmt_wrapped; my $text_margin = $margin - length($prefix); if ($prefix =~ /^(\t+)/) { $text_margin -= length($1) * ($tab_width - 1); } while (length $stmt) { if (($stmt =~ s/^(.{1,$text_margin})(?: |$)//) || ($stmt =~ s/^([\S]+)(?: |$)//)) { my $line = $1; $stmt_wrapped .= $stmt_wrapped ? "$eol$prefix" : $leading; $stmt_wrapped .= $line; } else { # Should be unreachable, but we don't want an infinite # loop if it can be reached. die; } } # Replace the old copyright statement. s/$stmt_re/$stmt_wrapped/; } } else { print STDERR "$ARGV: warning: copyright statement not found\n"; } # Hey Emacs! # Local variables: # coding: utf-8 # mode: perl # indent-tabs-mode: nil # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-line-limit: 200 # time-stamp-start: "my $VERSION = '" # time-stamp-format: "%:y-%02m-%02d.%02H:%02M" # time-stamp-time-zone: "UTC0" # time-stamp-end: "'; # UTC" # End: recutils-1.9/build-aux/missing0000755000000000000000000001533614226573146013417 00000000000000#! /bin/sh # Common wrapper for a few potentially missing GNU programs. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1996-2021 Free Software Foundation, Inc. # Originally written by Fran,cois Pinard , 1996. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see . # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. if test $# -eq 0; then echo 1>&2 "Try '$0 --help' for more information" exit 1 fi case $1 in --is-lightweight) # Used by our autoconf macros to check whether the available missing # script is modern enough. exit 0 ;; --run) # Back-compat with the calling convention used by older automake. shift ;; -h|--h|--he|--hel|--help) echo "\ $0 [OPTION]... PROGRAM [ARGUMENT]... Run 'PROGRAM [ARGUMENT]...', returning a proper advice when this fails due to PROGRAM being missing or too old. Options: -h, --help display this help and exit -v, --version output version information and exit Supported PROGRAM values: aclocal autoconf autoheader autom4te automake makeinfo bison yacc flex lex help2man Version suffixes to PROGRAM as well as the prefixes 'gnu-', 'gnu', and 'g' are ignored when checking the name. Send bug reports to ." exit $? ;; -v|--v|--ve|--ver|--vers|--versi|--versio|--version) echo "missing $scriptversion (GNU Automake)" exit $? ;; -*) echo 1>&2 "$0: unknown '$1' option" echo 1>&2 "Try '$0 --help' for more information" exit 1 ;; esac # Run the given program, remember its exit status. "$@"; st=$? # If it succeeded, we are done. test $st -eq 0 && exit 0 # Also exit now if we it failed (or wasn't found), and '--version' was # passed; such an option is passed most likely to detect whether the # program is present and works. case $2 in --version|--help) exit $st;; esac # Exit code 63 means version mismatch. This often happens when the user # tries to use an ancient version of a tool on a file that requires a # minimum version. if test $st -eq 63; then msg="probably too old" elif test $st -eq 127; then # Program was missing. msg="missing on your system" else # Program was found and executed, but failed. Give up. exit $st fi perl_URL=https://www.perl.org/ flex_URL=https://github.com/westes/flex gnu_software_URL=https://www.gnu.org/software program_details () { case $1 in aclocal|automake) echo "The '$1' program is part of the GNU Automake package:" echo "<$gnu_software_URL/automake>" echo "It also requires GNU Autoconf, GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/autoconf>" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; autoconf|autom4te|autoheader) echo "The '$1' program is part of the GNU Autoconf package:" echo "<$gnu_software_URL/autoconf/>" echo "It also requires GNU m4 and Perl in order to run:" echo "<$gnu_software_URL/m4/>" echo "<$perl_URL>" ;; esac } give_advice () { # Normalize program name to check for. normalized_program=`echo "$1" | sed ' s/^gnu-//; t s/^gnu//; t s/^g//; t'` printf '%s\n' "'$1' is $msg." configure_deps="'configure.ac' or m4 files included by 'configure.ac'" case $normalized_program in autoconf*) echo "You should only need it if you modified 'configure.ac'," echo "or m4 files included by it." program_details 'autoconf' ;; autoheader*) echo "You should only need it if you modified 'acconfig.h' or" echo "$configure_deps." program_details 'autoheader' ;; automake*) echo "You should only need it if you modified 'Makefile.am' or" echo "$configure_deps." program_details 'automake' ;; aclocal*) echo "You should only need it if you modified 'acinclude.m4' or" echo "$configure_deps." program_details 'aclocal' ;; autom4te*) echo "You might have modified some maintainer files that require" echo "the 'autom4te' program to be rebuilt." program_details 'autom4te' ;; bison*|yacc*) echo "You should only need it if you modified a '.y' file." echo "You may want to install the GNU Bison package:" echo "<$gnu_software_URL/bison/>" ;; lex*|flex*) echo "You should only need it if you modified a '.l' file." echo "You may want to install the Fast Lexical Analyzer package:" echo "<$flex_URL>" ;; help2man*) echo "You should only need it if you modified a dependency" \ "of a man page." echo "You may want to install the GNU Help2man package:" echo "<$gnu_software_URL/help2man/>" ;; makeinfo*) echo "You should only need it if you modified a '.texi' file, or" echo "any other file indirectly affecting the aspect of the manual." echo "You might want to install the Texinfo package:" echo "<$gnu_software_URL/texinfo/>" echo "The spurious makeinfo call might also be the consequence of" echo "using a buggy 'make' (AIX, DU, IRIX), in which case you might" echo "want to install GNU make:" echo "<$gnu_software_URL/make/>" ;; *) echo "You might have modified some files without having the proper" echo "tools for further handling them. Check the 'README' file, it" echo "often tells you about the needed prerequisites for installing" echo "this package. You may also peek at any GNU archive site, in" echo "case some other package contains this missing '$1' program." ;; esac } give_advice "$1" | sed -e '1s/^/WARNING: /' \ -e '2,$s/^/ /' >&2 # Propagate the correct exit status (expected to be 127 for a program # not found, 63 for a program that failed due to version mismatch). exit $st # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: recutils-1.9/build-aux/gendocs.sh0000755000000000000000000004147314226564447014006 00000000000000#!/bin/sh -e # gendocs.sh -- generate a GNU manual in many formats. This script is # mentioned in maintain.texi. See the help message below for usage details. scriptversion=2022-01-01.00 # Copyright 2003-2022 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see . # # Original author: Mohit Agarwal. # Send bug reports and any other correspondence to bug-gnulib@gnu.org. # # The latest version of this script, and the companion template, is # available from the Gnulib repository: # # https://git.savannah.gnu.org/cgit/gnulib.git/tree/build-aux/gendocs.sh # https://git.savannah.gnu.org/cgit/gnulib.git/tree/doc/gendocs_template # TODO: # - image importing was only implemented for HTML generated by # makeinfo. But it should be simple enough to adjust. # - images are not imported in the source tarball. All the needed # formats (PDF, PNG, etc.) should be included. prog=`basename "$0"` srcdir=`pwd` scripturl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/build-aux/gendocs.sh" templateurl="https://git.savannah.gnu.org/cgit/gnulib.git/plain/doc/gendocs_template" : ${SETLANG="env LANG= LC_MESSAGES= LC_ALL= LANGUAGE="} : ${MAKEINFO="makeinfo"} : ${TEXI2DVI="texi2dvi"} : ${DOCBOOK2HTML="docbook2html"} : ${DOCBOOK2PDF="docbook2pdf"} : ${DOCBOOK2TXT="docbook2txt"} : ${GENDOCS_TEMPLATE_DIR="."} : ${PERL='perl'} : ${TEXI2HTML="texi2html"} unset CDPATH unset use_texi2html MANUAL_TITLE= PACKAGE= EMAIL=webmasters@gnu.org # please override with --email commonarg= # passed to all makeinfo/texi2html invcations. dirargs= # passed to all tools (-I dir). dirs= # -I directories. htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css -c TOP_NODE_UP_URL=/manual" default_htmlarg=true infoarg=--no-split generate_ascii=true generate_html=true generate_info=true generate_tex=true outdir=manual source_extra= split=node srcfile= texarg="-t @finalout" version="gendocs.sh $scriptversion Copyright 2022 Free Software Foundation, Inc. There is NO warranty. You may redistribute this software under the terms of the GNU General Public License. For more information about these matters, see the files named COPYING." usage="Usage: $prog [OPTION]... PACKAGE MANUAL-TITLE Generate output in various formats from PACKAGE.texinfo (or .texi or .txi) source. See the GNU Maintainers document for a more extensive discussion: https://www.gnu.org/prep/maintain_toc.html Options: --email ADR use ADR as contact in generated web pages; always give this. -s SRCFILE read Texinfo from SRCFILE, instead of PACKAGE.{texinfo|texi|txi} -o OUTDIR write files into OUTDIR, instead of manual/. -I DIR append DIR to the Texinfo search path. --common ARG pass ARG in all invocations. --html ARG pass ARG to makeinfo or texi2html for HTML targets, instead of '$htmlarg'. --info ARG pass ARG to makeinfo for Info, instead of --no-split. --no-ascii skip generating the plain text output. --no-html skip generating the html output. --no-info skip generating the info output. --no-tex skip generating the dvi and pdf output. --source ARG include ARG in tar archive of sources. --split HOW make split HTML by node, section, chapter; default node. --tex ARG pass ARG to texi2dvi for DVI and PDF, instead of -t @finalout. --texi2html use texi2html to make HTML target, with all split versions. --docbook convert through DocBook too (xml, txt, html, pdf). --help display this help and exit successfully. --version display version information and exit successfully. Simple example: $prog --email bug-gnu-emacs@gnu.org emacs \"GNU Emacs Manual\" Typical sequence: cd PACKAGESOURCE/doc wget \"$scripturl\" wget \"$templateurl\" $prog --email BUGLIST MANUAL \"GNU MANUAL - One-line description\" Output will be in a new subdirectory \"manual\" (by default; use -o OUTDIR to override). Move all the new files into your web CVS tree, as explained in the Web Pages node of maintain.texi. Please use the --email ADDRESS option so your own bug-reporting address will be used in the generated HTML pages. MANUAL-TITLE is included as part of the HTML of the overall manual/index.html file. It should include the name of the package being documented. manual/index.html is created by substitution from the file $GENDOCS_TEMPLATE_DIR/gendocs_template. (Feel free to modify the generic template for your own purposes.) If you have several manuals, you'll need to run this script several times with different MANUAL values, specifying a different output directory with -o each time. Then write (by hand) an overall index.html with links to them all. If a manual's Texinfo sources are spread across several directories, first copy or symlink all Texinfo sources into a single directory. (Part of the script's work is to make a tar.gz of the sources.) As implied above, by default monolithic Info files are generated. If you want split Info, or other Info options, use --info to override. You can set the environment variables MAKEINFO, TEXI2DVI, TEXI2HTML, and PERL to control the programs that get executed, and GENDOCS_TEMPLATE_DIR to control where the gendocs_template file is looked for. With --docbook, the environment variables DOCBOOK2HTML, DOCBOOK2PDF, and DOCBOOK2TXT are also consulted. By default, makeinfo and texi2dvi are run in the default (English) locale, since that's the language of most Texinfo manuals. If you happen to have a non-English manual and non-English web site, see the SETLANG setting in the source. Email bug reports or enhancement requests to bug-gnulib@gnu.org. " while test $# -gt 0; do case $1 in -s) shift; srcfile=$1;; -o) shift; outdir=$1;; -I) shift; dirargs="$dirargs -I '$1'"; dirs="$dirs $1";; --common) shift; commonarg=$1;; --docbook) docbook=yes;; --email) shift; EMAIL=$1;; --html) shift; default_htmlarg=false; htmlarg=$1;; --info) shift; infoarg=$1;; --no-ascii) generate_ascii=false;; --no-html) generate_ascii=false;; --no-info) generate_info=false;; --no-tex) generate_tex=false;; --source) shift; source_extra=$1;; --split) shift; split=$1;; --tex) shift; texarg=$1;; --texi2html) use_texi2html=1;; --help) echo "$usage"; exit 0;; --version) echo "$version"; exit 0;; -*) echo "$0: Unknown option \`$1'." >&2 echo "$0: Try \`--help' for more information." >&2 exit 1;; *) if test -z "$PACKAGE"; then PACKAGE=$1 elif test -z "$MANUAL_TITLE"; then MANUAL_TITLE=$1 else echo "$0: extra non-option argument \`$1'." >&2 exit 1 fi;; esac shift done # makeinfo uses the dirargs, but texi2dvi doesn't. commonarg=" $dirargs $commonarg" # For most of the following, the base name is just $PACKAGE base=$PACKAGE if $default_htmlarg && test -n "$use_texi2html"; then # The legacy texi2html doesn't support TOP_NODE_UP_URL htmlarg="--css-ref=https://www.gnu.org/software/gnulib/manual.css" fi if test -n "$srcfile"; then # but here, we use the basename of $srcfile base=`basename "$srcfile"` case $base in *.txi|*.texi|*.texinfo) base=`echo "$base"|sed 's/\.[texinfo]*$//'`;; esac PACKAGE=$base elif test -s "$srcdir/$PACKAGE.texinfo"; then srcfile=$srcdir/$PACKAGE.texinfo elif test -s "$srcdir/$PACKAGE.texi"; then srcfile=$srcdir/$PACKAGE.texi elif test -s "$srcdir/$PACKAGE.txi"; then srcfile=$srcdir/$PACKAGE.txi else echo "$0: cannot find .texinfo or .texi or .txi for $PACKAGE in $srcdir." >&2 exit 1 fi if test ! -r $GENDOCS_TEMPLATE_DIR/gendocs_template; then echo "$0: cannot read $GENDOCS_TEMPLATE_DIR/gendocs_template." >&2 echo "$0: it is available from $templateurl." >&2 exit 1 fi # Function to return size of $1 in something resembling kilobytes. calcsize() { size=`ls -ksl $1 | awk '{print $1}'` echo $size } # copy_images OUTDIR HTML-FILE... # ------------------------------- # Copy all the images needed by the HTML-FILEs into OUTDIR. # Look for them in . and the -I directories; this is simpler than what # makeinfo supports with -I, but hopefully it will suffice. copy_images() { local odir odir=$1 shift $PERL -n -e " BEGIN { \$me = '$prog'; \$odir = '$odir'; @dirs = qw(. $dirs); } " -e ' /<img src="(.*?)"/g && ++$need{$1}; END { #print "$me: @{[keys %need]}\n"; # for debugging, show images found. FILE: for my $f (keys %need) { for my $d (@dirs) { if (-f "$d/$f") { use File::Basename; my $dest = dirname ("$odir/$f"); # use File::Path; -d $dest || mkpath ($dest) || die "$me: cannot mkdir $dest: $!\n"; # use File::Copy; copy ("$d/$f", $dest) || die "$me: cannot copy $d/$f to $dest: $!\n"; next FILE; } } die "$me: $ARGV: cannot find image $f\n"; } } ' -- "$@" || exit 1 } case $outdir in /*) abs_outdir=$outdir;; *) abs_outdir=$srcdir/$outdir;; esac echo "Making output for $srcfile" echo " in `pwd`" mkdir -p "$outdir/" # if $generate_info; then cmd="$SETLANG $MAKEINFO -o $PACKAGE.info $commonarg $infoarg \"$srcfile\"" echo "Generating info... ($cmd)" rm -f $PACKAGE.info* # get rid of any strays eval "$cmd" tar czf "$outdir/$PACKAGE.info.tar.gz" $PACKAGE.info* ls -l "$outdir/$PACKAGE.info.tar.gz" info_tgz_size=`calcsize "$outdir/$PACKAGE.info.tar.gz"` # do not mv the info files, there's no point in having them available # separately on the web. fi # end info # if $generate_tex; then cmd="$SETLANG $TEXI2DVI $dirargs $texarg \"$srcfile\"" printf "\nGenerating dvi... ($cmd)\n" eval "$cmd" # compress/finish dvi: gzip -f -9 $PACKAGE.dvi dvi_gz_size=`calcsize $PACKAGE.dvi.gz` mv $PACKAGE.dvi.gz "$outdir/" ls -l "$outdir/$PACKAGE.dvi.gz" cmd="$SETLANG $TEXI2DVI --pdf $dirargs $texarg \"$srcfile\"" printf "\nGenerating pdf... ($cmd)\n" eval "$cmd" pdf_size=`calcsize $PACKAGE.pdf` mv $PACKAGE.pdf "$outdir/" ls -l "$outdir/$PACKAGE.pdf" fi # end tex (dvi + pdf) # if $generate_ascii; then opt="-o $PACKAGE.txt --no-split --no-headers $commonarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating ascii... ($cmd)\n" eval "$cmd" ascii_size=`calcsize $PACKAGE.txt` gzip -f -9 -c $PACKAGE.txt >"$outdir/$PACKAGE.txt.gz" ascii_gz_size=`calcsize "$outdir/$PACKAGE.txt.gz"` mv $PACKAGE.txt "$outdir/" ls -l "$outdir/$PACKAGE.txt" "$outdir/$PACKAGE.txt.gz" fi # if $generate_html; then # Split HTML at level $1. Used for texi2html. html_split() { opt="--split=$1 --node-files $commonarg $htmlarg" cmd="$SETLANG $TEXI2HTML --output $PACKAGE.html $opt \"$srcfile\"" printf "\nGenerating html by $1... ($cmd)\n" eval "$cmd" split_html_dir=$PACKAGE.html ( cd ${split_html_dir} || exit 1 ln -sf ${PACKAGE}.html index.html tar -czf "$abs_outdir/${PACKAGE}.html_$1.tar.gz" -- *.html ) eval html_$1_tgz_size=`calcsize "$outdir/${PACKAGE}.html_$1.tar.gz"` rm -f "$outdir"/html_$1/*.html mkdir -p "$outdir/html_$1/" mv ${split_html_dir}/*.html "$outdir/html_$1/" rmdir ${split_html_dir} } if test -z "$use_texi2html"; then opt="--no-split --html -o $PACKAGE.html $commonarg $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating monolithic html... ($cmd)\n" rm -rf $PACKAGE.html # in case a directory is left over eval "$cmd" html_mono_size=`calcsize $PACKAGE.html` gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` copy_images "$outdir/" $PACKAGE.html mv $PACKAGE.html "$outdir/" ls -l "$outdir/$PACKAGE.html" "$outdir/$PACKAGE.html.gz" # Before Texinfo 5.0, makeinfo did not accept a --split=HOW option, # it just always split by node. So if we're splitting by node anyway, # leave it out. if test "x$split" = xnode; then split_arg= else split_arg=--split=$split fi # opt="--html -o $PACKAGE.html $split_arg $commonarg $htmlarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\"" printf "\nGenerating html by $split... ($cmd)\n" eval "$cmd" split_html_dir=$PACKAGE.html copy_images $split_html_dir/ $split_html_dir/*.html ( cd $split_html_dir || exit 1 tar -czf "$abs_outdir/$PACKAGE.html_$split.tar.gz" -- * ) eval \ html_${split}_tgz_size=`calcsize "$outdir/$PACKAGE.html_$split.tar.gz"` rm -rf "$outdir/html_$split/" mv $split_html_dir "$outdir/html_$split/" du -s "$outdir/html_$split/" ls -l "$outdir/$PACKAGE.html_$split.tar.gz" else # use texi2html: opt="--output $PACKAGE.html $commonarg $htmlarg" cmd="$SETLANG $TEXI2HTML $opt \"$srcfile\"" printf "\nGenerating monolithic html with texi2html... ($cmd)\n" rm -rf $PACKAGE.html # in case a directory is left over eval "$cmd" html_mono_size=`calcsize $PACKAGE.html` gzip -f -9 -c $PACKAGE.html >"$outdir/$PACKAGE.html.gz" html_mono_gz_size=`calcsize "$outdir/$PACKAGE.html.gz"` mv $PACKAGE.html "$outdir/" html_split node html_split chapter html_split section fi fi # end html # printf "\nMaking .tar.gz for sources...\n" d=`dirname $srcfile` ( cd "$d" srcfiles=`ls -d *.texinfo *.texi *.txi *.eps $source_extra 2>/dev/null` || true tar czfh "$abs_outdir/$PACKAGE.texi.tar.gz" $srcfiles ls -l "$abs_outdir/$PACKAGE.texi.tar.gz" ) texi_tgz_size=`calcsize "$outdir/$PACKAGE.texi.tar.gz"` # # Do everything again through docbook. if test -n "$docbook"; then opt="-o - --docbook $commonarg" cmd="$SETLANG $MAKEINFO $opt \"$srcfile\" >${srcdir}/$PACKAGE-db.xml" printf "\nGenerating docbook XML... ($cmd)\n" eval "$cmd" docbook_xml_size=`calcsize $PACKAGE-db.xml` gzip -f -9 -c $PACKAGE-db.xml >"$outdir/$PACKAGE-db.xml.gz" docbook_xml_gz_size=`calcsize "$outdir/$PACKAGE-db.xml.gz"` mv $PACKAGE-db.xml "$outdir/" split_html_db_dir=html_node_db opt="$commonarg -o $split_html_db_dir" cmd="$DOCBOOK2HTML $opt \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook HTML... ($cmd)\n" eval "$cmd" ( cd ${split_html_db_dir} || exit 1 tar -czf "$abs_outdir/${PACKAGE}.html_node_db.tar.gz" -- *.html ) html_node_db_tgz_size=`calcsize "$outdir/${PACKAGE}.html_node_db.tar.gz"` rm -f "$outdir"/html_node_db/*.html mkdir -p "$outdir/html_node_db" mv ${split_html_db_dir}/*.html "$outdir/html_node_db/" rmdir ${split_html_db_dir} cmd="$DOCBOOK2TXT \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook ASCII... ($cmd)\n" eval "$cmd" docbook_ascii_size=`calcsize $PACKAGE-db.txt` mv $PACKAGE-db.txt "$outdir/" cmd="$DOCBOOK2PDF \"${outdir}/$PACKAGE-db.xml\"" printf "\nGenerating docbook PDF... ($cmd)\n" eval "$cmd" docbook_pdf_size=`calcsize $PACKAGE-db.pdf` mv $PACKAGE-db.pdf "$outdir/" fi # printf "\nMaking index.html for $PACKAGE...\n" if test -z "$use_texi2html"; then CONDS="/%%IF *HTML_SECTION%%/,/%%ENDIF *HTML_SECTION%%/d;\ /%%IF *HTML_CHAPTER%%/,/%%ENDIF *HTML_CHAPTER%%/d" else # should take account of --split here. CONDS="/%%ENDIF.*%%/d;/%%IF *HTML_SECTION%%/d;/%%IF *HTML_CHAPTER%%/d" fi curdate=`$SETLANG date '+%B %d, %Y'` sed \ -e "s!%%TITLE%%!$MANUAL_TITLE!g" \ -e "s!%%EMAIL%%!$EMAIL!g" \ -e "s!%%PACKAGE%%!$PACKAGE!g" \ -e "s!%%DATE%%!$curdate!g" \ -e "s!%%HTML_MONO_SIZE%%!$html_mono_size!g" \ -e "s!%%HTML_MONO_GZ_SIZE%%!$html_mono_gz_size!g" \ -e "s!%%HTML_NODE_TGZ_SIZE%%!$html_node_tgz_size!g" \ -e "s!%%HTML_SECTION_TGZ_SIZE%%!$html_section_tgz_size!g" \ -e "s!%%HTML_CHAPTER_TGZ_SIZE%%!$html_chapter_tgz_size!g" \ -e "s!%%INFO_TGZ_SIZE%%!$info_tgz_size!g" \ -e "s!%%DVI_GZ_SIZE%%!$dvi_gz_size!g" \ -e "s!%%PDF_SIZE%%!$pdf_size!g" \ -e "s!%%ASCII_SIZE%%!$ascii_size!g" \ -e "s!%%ASCII_GZ_SIZE%%!$ascii_gz_size!g" \ -e "s!%%TEXI_TGZ_SIZE%%!$texi_tgz_size!g" \ -e "s!%%DOCBOOK_HTML_NODE_TGZ_SIZE%%!$html_node_db_tgz_size!g" \ -e "s!%%DOCBOOK_ASCII_SIZE%%!$docbook_ascii_size!g" \ -e "s!%%DOCBOOK_PDF_SIZE%%!$docbook_pdf_size!g" \ -e "s!%%DOCBOOK_XML_SIZE%%!$docbook_xml_size!g" \ -e "s!%%DOCBOOK_XML_GZ_SIZE%%!$docbook_xml_gz_size!g" \ -e "s,%%SCRIPTURL%%,$scripturl,g" \ -e "s!%%SCRIPTNAME%%!$prog!g" \ -e "$CONDS" \ $GENDOCS_TEMPLATE_DIR/gendocs_template >"$outdir/index.html" echo "Done, see $outdir/ subdirectory for new files." # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-end: "$" # End: �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/build-aux/config.sub�������������������������������������������������������������������0000755�0000000�0000000�00000105116�14226564226�013776� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Configuration validation subroutine script. # Copyright 1992-2021 Free Software Foundation, Inc. # shellcheck disable=SC2006,SC2268 # see below for rationale timestamp='2021-12-25' # This file is free software; you can redistribute it and/or modify it # under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program; if not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that # program. This Exception is an additional permission under section 7 # of the GNU General Public License, version 3 ("GPLv3"). # Please send patches to <config-patches@gnu.org>. # # Configuration subroutine to validate and canonicalize a configuration type. # Supply the specified configuration type as an argument. # If it is invalid, we print an error message on stderr and exit with code 1. # Otherwise, we print the canonical config type on stdout and succeed. # You can get the latest version of this script from: # https://git.savannah.gnu.org/cgit/config.git/plain/config.sub # This file is supposed to be the same for all GNU packages # and recognize all the CPU types, system types and aliases # that are meaningful with *any* GNU software. # Each package is responsible for reporting which valid configurations # it does not support. The user should be able to distinguish # a failure to support a valid configuration from a meaningless # configuration. # The goal of this file is to map all the various variations of a given # machine specification into a single specification in the form: # CPU_TYPE-MANUFACTURER-OPERATING_SYSTEM # or in some cases, the newer four-part form: # CPU_TYPE-MANUFACTURER-KERNEL-OPERATING_SYSTEM # It is wrong to echo any other type of specification. # The "shellcheck disable" line above the timestamp inhibits complaints # about features and limitations of the classic Bourne shell that were # superseded or lifted in POSIX. However, this script identifies a wide # variety of pre-POSIX systems that do not have POSIX shells at all, and # even some reasonably current systems (Solaris 10 as case-in-point) still # have a pre-POSIX /bin/sh. me=`echo "$0" | sed -e 's,.*/,,'` usage="\ Usage: $0 [OPTION] CPU-MFR-OPSYS or ALIAS Canonicalize a configuration name. Options: -h, --help print this help, then exit -t, --time-stamp print date of last modification, then exit -v, --version print version number, then exit Report bugs and patches to <config-patches@gnu.org>." version="\ GNU config.sub ($timestamp) Copyright 1992-2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE." help=" Try \`$me --help' for more information." # Parse command line while test $# -gt 0 ; do case $1 in --time-stamp | --time* | -t ) echo "$timestamp" ; exit ;; --version | -v ) echo "$version" ; exit ;; --help | --h* | -h ) echo "$usage"; exit ;; -- ) # Stop option processing shift; break ;; - ) # Use stdin as input. break ;; -* ) echo "$me: invalid option $1$help" >&2 exit 1 ;; *local*) # First pass through any local machine types. echo "$1" exit ;; * ) break ;; esac done case $# in 0) echo "$me: missing argument$help" >&2 exit 1;; 1) ;; *) echo "$me: too many arguments$help" >&2 exit 1;; esac # Split fields of configuration type # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read field1 field2 field3 field4 <<EOF $1 EOF IFS=$saved_IFS # Separate into logical components for further validation case $1 in *-*-*-*-*) echo Invalid configuration \`"$1"\': more than four components >&2 exit 1 ;; *-*-*-*) basic_machine=$field1-$field2 basic_os=$field3-$field4 ;; *-*-*) # Ambiguous whether COMPANY is present, or skipped and KERNEL-OS is two # parts maybe_os=$field2-$field3 case $maybe_os in nto-qnx* | linux-* | uclinux-uclibc* \ | uclinux-gnu* | kfreebsd*-gnu* | knetbsd*-gnu* | netbsd*-gnu* \ | netbsd*-eabi* | kopensolaris*-gnu* | cloudabi*-eabi* \ | storm-chaos* | os2-emx* | rtmk-nova*) basic_machine=$field1 basic_os=$maybe_os ;; android-linux) basic_machine=$field1-unknown basic_os=linux-android ;; *) basic_machine=$field1-$field2 basic_os=$field3 ;; esac ;; *-*) # A lone config we happen to match not fitting any pattern case $field1-$field2 in decstation-3100) basic_machine=mips-dec basic_os= ;; *-*) # Second component is usually, but not always the OS case $field2 in # Prevent following clause from handling this valid os sun*os*) basic_machine=$field1 basic_os=$field2 ;; zephyr*) basic_machine=$field1-unknown basic_os=$field2 ;; # Manufacturers dec* | mips* | sequent* | encore* | pc533* | sgi* | sony* \ | att* | 7300* | 3300* | delta* | motorola* | sun[234]* \ | unicom* | ibm* | next | hp | isi* | apollo | altos* \ | convergent* | ncr* | news | 32* | 3600* | 3100* \ | hitachi* | c[123]* | convex* | sun | crds | omron* | dg \ | ultra | tti* | harris | dolphin | highlevel | gould \ | cbm | ns | masscomp | apple | axis | knuth | cray \ | microblaze* | sim | cisco \ | oki | wec | wrs | winbond) basic_machine=$field1-$field2 basic_os= ;; *) basic_machine=$field1 basic_os=$field2 ;; esac ;; esac ;; *) # Convert single-component short-hands not valid as part of # multi-component configurations. case $field1 in 386bsd) basic_machine=i386-pc basic_os=bsd ;; a29khif) basic_machine=a29k-amd basic_os=udi ;; adobe68k) basic_machine=m68010-adobe basic_os=scout ;; alliant) basic_machine=fx80-alliant basic_os= ;; altos | altos3068) basic_machine=m68k-altos basic_os= ;; am29k) basic_machine=a29k-none basic_os=bsd ;; amdahl) basic_machine=580-amdahl basic_os=sysv ;; amiga) basic_machine=m68k-unknown basic_os= ;; amigaos | amigados) basic_machine=m68k-unknown basic_os=amigaos ;; amigaunix | amix) basic_machine=m68k-unknown basic_os=sysv4 ;; apollo68) basic_machine=m68k-apollo basic_os=sysv ;; apollo68bsd) basic_machine=m68k-apollo basic_os=bsd ;; aros) basic_machine=i386-pc basic_os=aros ;; aux) basic_machine=m68k-apple basic_os=aux ;; balance) basic_machine=ns32k-sequent basic_os=dynix ;; blackfin) basic_machine=bfin-unknown basic_os=linux ;; cegcc) basic_machine=arm-unknown basic_os=cegcc ;; convex-c1) basic_machine=c1-convex basic_os=bsd ;; convex-c2) basic_machine=c2-convex basic_os=bsd ;; convex-c32) basic_machine=c32-convex basic_os=bsd ;; convex-c34) basic_machine=c34-convex basic_os=bsd ;; convex-c38) basic_machine=c38-convex basic_os=bsd ;; cray) basic_machine=j90-cray basic_os=unicos ;; crds | unos) basic_machine=m68k-crds basic_os= ;; da30) basic_machine=m68k-da30 basic_os= ;; decstation | pmax | pmin | dec3100 | decstatn) basic_machine=mips-dec basic_os= ;; delta88) basic_machine=m88k-motorola basic_os=sysv3 ;; dicos) basic_machine=i686-pc basic_os=dicos ;; djgpp) basic_machine=i586-pc basic_os=msdosdjgpp ;; ebmon29k) basic_machine=a29k-amd basic_os=ebmon ;; es1800 | OSE68k | ose68k | ose | OSE) basic_machine=m68k-ericsson basic_os=ose ;; gmicro) basic_machine=tron-gmicro basic_os=sysv ;; go32) basic_machine=i386-pc basic_os=go32 ;; h8300hms) basic_machine=h8300-hitachi basic_os=hms ;; h8300xray) basic_machine=h8300-hitachi basic_os=xray ;; h8500hms) basic_machine=h8500-hitachi basic_os=hms ;; harris) basic_machine=m88k-harris basic_os=sysv3 ;; hp300 | hp300hpux) basic_machine=m68k-hp basic_os=hpux ;; hp300bsd) basic_machine=m68k-hp basic_os=bsd ;; hppaosf) basic_machine=hppa1.1-hp basic_os=osf ;; hppro) basic_machine=hppa1.1-hp basic_os=proelf ;; i386mach) basic_machine=i386-mach basic_os=mach ;; isi68 | isi) basic_machine=m68k-isi basic_os=sysv ;; m68knommu) basic_machine=m68k-unknown basic_os=linux ;; magnum | m3230) basic_machine=mips-mips basic_os=sysv ;; merlin) basic_machine=ns32k-utek basic_os=sysv ;; mingw64) basic_machine=x86_64-pc basic_os=mingw64 ;; mingw32) basic_machine=i686-pc basic_os=mingw32 ;; mingw32ce) basic_machine=arm-unknown basic_os=mingw32ce ;; monitor) basic_machine=m68k-rom68k basic_os=coff ;; morphos) basic_machine=powerpc-unknown basic_os=morphos ;; moxiebox) basic_machine=moxie-unknown basic_os=moxiebox ;; msdos) basic_machine=i386-pc basic_os=msdos ;; msys) basic_machine=i686-pc basic_os=msys ;; mvs) basic_machine=i370-ibm basic_os=mvs ;; nacl) basic_machine=le32-unknown basic_os=nacl ;; ncr3000) basic_machine=i486-ncr basic_os=sysv4 ;; netbsd386) basic_machine=i386-pc basic_os=netbsd ;; netwinder) basic_machine=armv4l-rebel basic_os=linux ;; news | news700 | news800 | news900) basic_machine=m68k-sony basic_os=newsos ;; news1000) basic_machine=m68030-sony basic_os=newsos ;; necv70) basic_machine=v70-nec basic_os=sysv ;; nh3000) basic_machine=m68k-harris basic_os=cxux ;; nh[45]000) basic_machine=m88k-harris basic_os=cxux ;; nindy960) basic_machine=i960-intel basic_os=nindy ;; mon960) basic_machine=i960-intel basic_os=mon960 ;; nonstopux) basic_machine=mips-compaq basic_os=nonstopux ;; os400) basic_machine=powerpc-ibm basic_os=os400 ;; OSE68000 | ose68000) basic_machine=m68000-ericsson basic_os=ose ;; os68k) basic_machine=m68k-none basic_os=os68k ;; paragon) basic_machine=i860-intel basic_os=osf ;; parisc) basic_machine=hppa-unknown basic_os=linux ;; psp) basic_machine=mipsallegrexel-sony basic_os=psp ;; pw32) basic_machine=i586-unknown basic_os=pw32 ;; rdos | rdos64) basic_machine=x86_64-pc basic_os=rdos ;; rdos32) basic_machine=i386-pc basic_os=rdos ;; rom68k) basic_machine=m68k-rom68k basic_os=coff ;; sa29200) basic_machine=a29k-amd basic_os=udi ;; sei) basic_machine=mips-sei basic_os=seiux ;; sequent) basic_machine=i386-sequent basic_os= ;; sps7) basic_machine=m68k-bull basic_os=sysv2 ;; st2000) basic_machine=m68k-tandem basic_os= ;; stratus) basic_machine=i860-stratus basic_os=sysv4 ;; sun2) basic_machine=m68000-sun basic_os= ;; sun2os3) basic_machine=m68000-sun basic_os=sunos3 ;; sun2os4) basic_machine=m68000-sun basic_os=sunos4 ;; sun3) basic_machine=m68k-sun basic_os= ;; sun3os3) basic_machine=m68k-sun basic_os=sunos3 ;; sun3os4) basic_machine=m68k-sun basic_os=sunos4 ;; sun4) basic_machine=sparc-sun basic_os= ;; sun4os3) basic_machine=sparc-sun basic_os=sunos3 ;; sun4os4) basic_machine=sparc-sun basic_os=sunos4 ;; sun4sol2) basic_machine=sparc-sun basic_os=solaris2 ;; sun386 | sun386i | roadrunner) basic_machine=i386-sun basic_os= ;; sv1) basic_machine=sv1-cray basic_os=unicos ;; symmetry) basic_machine=i386-sequent basic_os=dynix ;; t3e) basic_machine=alphaev5-cray basic_os=unicos ;; t90) basic_machine=t90-cray basic_os=unicos ;; toad1) basic_machine=pdp10-xkl basic_os=tops20 ;; tpf) basic_machine=s390x-ibm basic_os=tpf ;; udi29k) basic_machine=a29k-amd basic_os=udi ;; ultra3) basic_machine=a29k-nyu basic_os=sym1 ;; v810 | necv810) basic_machine=v810-nec basic_os=none ;; vaxv) basic_machine=vax-dec basic_os=sysv ;; vms) basic_machine=vax-dec basic_os=vms ;; vsta) basic_machine=i386-pc basic_os=vsta ;; vxworks960) basic_machine=i960-wrs basic_os=vxworks ;; vxworks68) basic_machine=m68k-wrs basic_os=vxworks ;; vxworks29k) basic_machine=a29k-wrs basic_os=vxworks ;; xbox) basic_machine=i686-pc basic_os=mingw32 ;; ymp) basic_machine=ymp-cray basic_os=unicos ;; *) basic_machine=$1 basic_os= ;; esac ;; esac # Decode 1-component or ad-hoc basic machines case $basic_machine in # Here we handle the default manufacturer of certain CPU types. It is in # some cases the only manufacturer, in others, it is the most popular. w89k) cpu=hppa1.1 vendor=winbond ;; op50n) cpu=hppa1.1 vendor=oki ;; op60c) cpu=hppa1.1 vendor=oki ;; ibm*) cpu=i370 vendor=ibm ;; orion105) cpu=clipper vendor=highlevel ;; mac | mpw | mac-mpw) cpu=m68k vendor=apple ;; pmac | pmac-mpw) cpu=powerpc vendor=apple ;; # Recognize the various machine names and aliases which stand # for a CPU type and a company and sometimes even an OS. 3b1 | 7300 | 7300-att | att-7300 | pc7300 | safari | unixpc) cpu=m68000 vendor=att ;; 3b*) cpu=we32k vendor=att ;; bluegene*) cpu=powerpc vendor=ibm basic_os=cnk ;; decsystem10* | dec10*) cpu=pdp10 vendor=dec basic_os=tops10 ;; decsystem20* | dec20*) cpu=pdp10 vendor=dec basic_os=tops20 ;; delta | 3300 | motorola-3300 | motorola-delta \ | 3300-motorola | delta-motorola) cpu=m68k vendor=motorola ;; dpx2*) cpu=m68k vendor=bull basic_os=sysv3 ;; encore | umax | mmax) cpu=ns32k vendor=encore ;; elxsi) cpu=elxsi vendor=elxsi basic_os=${basic_os:-bsd} ;; fx2800) cpu=i860 vendor=alliant ;; genix) cpu=ns32k vendor=ns ;; h3050r* | hiux*) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; hp3k9[0-9][0-9] | hp9[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k2[0-9][0-9] | hp9k31[0-9]) cpu=m68000 vendor=hp ;; hp9k3[2-9][0-9]) cpu=m68k vendor=hp ;; hp9k6[0-9][0-9] | hp6[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; hp9k7[0-79][0-9] | hp7[0-79][0-9]) cpu=hppa1.1 vendor=hp ;; hp9k78[0-9] | hp78[0-9]) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[67]1 | hp8[67]1 | hp9k80[24] | hp80[24] | hp9k8[78]9 | hp8[78]9 | hp9k893 | hp893) # FIXME: really hppa2.0-hp cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][13679] | hp8[0-9][13679]) cpu=hppa1.1 vendor=hp ;; hp9k8[0-9][0-9] | hp8[0-9][0-9]) cpu=hppa1.0 vendor=hp ;; i*86v32) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv32 ;; i*86v4*) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv4 ;; i*86v) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=sysv ;; i*86sol2) cpu=`echo "$1" | sed -e 's/86.*/86/'` vendor=pc basic_os=solaris2 ;; j90 | j90-cray) cpu=j90 vendor=cray basic_os=${basic_os:-unicos} ;; iris | iris4d) cpu=mips vendor=sgi case $basic_os in irix*) ;; *) basic_os=irix4 ;; esac ;; miniframe) cpu=m68000 vendor=convergent ;; *mint | mint[0-9]* | *MiNT | *MiNT[0-9]*) cpu=m68k vendor=atari basic_os=mint ;; news-3600 | risc-news) cpu=mips vendor=sony basic_os=newsos ;; next | m*-next) cpu=m68k vendor=next case $basic_os in openstep*) ;; nextstep*) ;; ns2*) basic_os=nextstep2 ;; *) basic_os=nextstep3 ;; esac ;; np1) cpu=np1 vendor=gould ;; op50n-* | op60c-*) cpu=hppa1.1 vendor=oki basic_os=proelf ;; pa-hitachi) cpu=hppa1.1 vendor=hitachi basic_os=hiuxwe2 ;; pbd) cpu=sparc vendor=tti ;; pbb) cpu=m68k vendor=tti ;; pc532) cpu=ns32k vendor=pc532 ;; pn) cpu=pn vendor=gould ;; power) cpu=power vendor=ibm ;; ps2) cpu=i386 vendor=ibm ;; rm[46]00) cpu=mips vendor=siemens ;; rtpc | rtpc-*) cpu=romp vendor=ibm ;; sde) cpu=mipsisa32 vendor=sde basic_os=${basic_os:-elf} ;; simso-wrs) cpu=sparclite vendor=wrs basic_os=vxworks ;; tower | tower-32) cpu=m68k vendor=ncr ;; vpp*|vx|vx-*) cpu=f301 vendor=fujitsu ;; w65) cpu=w65 vendor=wdc ;; w89k-*) cpu=hppa1.1 vendor=winbond basic_os=proelf ;; none) cpu=none vendor=none ;; leon|leon[3-9]) cpu=sparc vendor=$basic_machine ;; leon-*|leon[3-9]-*) cpu=sparc vendor=`echo "$basic_machine" | sed 's/-.*//'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read cpu vendor <<EOF $basic_machine EOF IFS=$saved_IFS ;; # We use `pc' rather than `unknown' # because (1) that's what they normally are, and # (2) the word "unknown" tends to confuse beginning users. i*86 | x86_64) cpu=$basic_machine vendor=pc ;; # These rules are duplicated from below for sake of the special case above; # i.e. things that normalized to x86 arches should also default to "pc" pc98) cpu=i386 vendor=pc ;; x64 | amd64) cpu=x86_64 vendor=pc ;; # Recognize the basic CPU types without company name. *) cpu=$basic_machine vendor=unknown ;; esac unset -v basic_machine # Decode basic machines in the full and proper CPU-Company form. case $cpu-$vendor in # Here we handle the default manufacturer of certain CPU types in canonical form. It is in # some cases the only manufacturer, in others, it is the most popular. craynv-unknown) vendor=cray basic_os=${basic_os:-unicosmp} ;; c90-unknown | c90-cray) vendor=cray basic_os=${Basic_os:-unicos} ;; fx80-unknown) vendor=alliant ;; romp-unknown) vendor=ibm ;; mmix-unknown) vendor=knuth ;; microblaze-unknown | microblazeel-unknown) vendor=xilinx ;; rs6000-unknown) vendor=ibm ;; vax-unknown) vendor=dec ;; pdp11-unknown) vendor=dec ;; we32k-unknown) vendor=att ;; cydra-unknown) vendor=cydrome ;; i370-ibm*) vendor=ibm ;; orion-unknown) vendor=highlevel ;; xps-unknown | xps100-unknown) cpu=xps100 vendor=honeywell ;; # Here we normalize CPU types with a missing or matching vendor armh-unknown | armh-alt) cpu=armv7l vendor=alt basic_os=${basic_os:-linux-gnueabihf} ;; dpx20-unknown | dpx20-bull) cpu=rs6000 vendor=bull basic_os=${basic_os:-bosx} ;; # Here we normalize CPU types irrespective of the vendor amd64-*) cpu=x86_64 ;; blackfin-*) cpu=bfin basic_os=linux ;; c54x-*) cpu=tic54x ;; c55x-*) cpu=tic55x ;; c6x-*) cpu=tic6x ;; e500v[12]-*) cpu=powerpc basic_os=${basic_os}"spe" ;; mips3*-*) cpu=mips64 ;; ms1-*) cpu=mt ;; m68knommu-*) cpu=m68k basic_os=linux ;; m9s12z-* | m68hcs12z-* | hcs12z-* | s12z-*) cpu=s12z ;; openrisc-*) cpu=or32 ;; parisc-*) cpu=hppa basic_os=linux ;; pentium-* | p5-* | k5-* | k6-* | nexgen-* | viac3-*) cpu=i586 ;; pentiumpro-* | p6-* | 6x86-* | athlon-* | athalon_*-*) cpu=i686 ;; pentiumii-* | pentium2-* | pentiumiii-* | pentium3-*) cpu=i686 ;; pentium4-*) cpu=i786 ;; pc98-*) cpu=i386 ;; ppc-* | ppcbe-*) cpu=powerpc ;; ppcle-* | powerpclittle-*) cpu=powerpcle ;; ppc64-*) cpu=powerpc64 ;; ppc64le-* | powerpc64little-*) cpu=powerpc64le ;; sb1-*) cpu=mipsisa64sb1 ;; sb1el-*) cpu=mipsisa64sb1el ;; sh5e[lb]-*) cpu=`echo "$cpu" | sed 's/^\(sh.\)e\(.\)$/\1\2e/'` ;; spur-*) cpu=spur ;; strongarm-* | thumb-*) cpu=arm ;; tx39-*) cpu=mipstx39 ;; tx39el-*) cpu=mipstx39el ;; x64-*) cpu=x86_64 ;; xscale-* | xscalee[bl]-*) cpu=`echo "$cpu" | sed 's/^xscale/arm/'` ;; arm64-* | aarch64le-*) cpu=aarch64 ;; # Recognize the canonical CPU Types that limit and/or modify the # company names they are paired with. cr16-*) basic_os=${basic_os:-elf} ;; crisv32-* | etraxfs*-*) cpu=crisv32 vendor=axis ;; cris-* | etrax*-*) cpu=cris vendor=axis ;; crx-*) basic_os=${basic_os:-elf} ;; neo-tandem) cpu=neo vendor=tandem ;; nse-tandem) cpu=nse vendor=tandem ;; nsr-tandem) cpu=nsr vendor=tandem ;; nsv-tandem) cpu=nsv vendor=tandem ;; nsx-tandem) cpu=nsx vendor=tandem ;; mipsallegrexel-sony) cpu=mipsallegrexel vendor=sony ;; tile*-*) basic_os=${basic_os:-linux-gnu} ;; *) # Recognize the canonical CPU types that are allowed with any # company name. case $cpu in 1750a | 580 \ | a29k \ | aarch64 | aarch64_be \ | abacus \ | alpha | alphaev[4-8] | alphaev56 | alphaev6[78] \ | alpha64 | alpha64ev[4-8] | alpha64ev56 | alpha64ev6[78] \ | alphapca5[67] | alpha64pca5[67] \ | am33_2.0 \ | amdgcn \ | arc | arceb | arc32 | arc64 \ | arm | arm[lb]e | arme[lb] | armv* \ | avr | avr32 \ | asmjs \ | ba \ | be32 | be64 \ | bfin | bpf | bs2000 \ | c[123]* | c30 | [cjt]90 | c4x \ | c8051 | clipper | craynv | csky | cydra \ | d10v | d30v | dlx | dsp16xx \ | e2k | elxsi | epiphany \ | f30[01] | f700 | fido | fr30 | frv | ft32 | fx80 \ | h8300 | h8500 \ | hppa | hppa1.[01] | hppa2.0 | hppa2.0[nw] | hppa64 \ | hexagon \ | i370 | i*86 | i860 | i960 | ia16 | ia64 \ | ip2k | iq2000 \ | k1om \ | le32 | le64 \ | lm32 \ | loongarch32 | loongarch64 | loongarchx32 \ | m32c | m32r | m32rle \ | m5200 | m68000 | m680[012346]0 | m68360 | m683?2 | m68k \ | m6811 | m68hc11 | m6812 | m68hc12 | m68hcs12x \ | m88110 | m88k | maxq | mb | mcore | mep | metag \ | microblaze | microblazeel \ | mips | mipsbe | mipseb | mipsel | mipsle \ | mips16 \ | mips64 | mips64eb | mips64el \ | mips64octeon | mips64octeonel \ | mips64orion | mips64orionel \ | mips64r5900 | mips64r5900el \ | mips64vr | mips64vrel \ | mips64vr4100 | mips64vr4100el \ | mips64vr4300 | mips64vr4300el \ | mips64vr5000 | mips64vr5000el \ | mips64vr5900 | mips64vr5900el \ | mipsisa32 | mipsisa32el \ | mipsisa32r2 | mipsisa32r2el \ | mipsisa32r3 | mipsisa32r3el \ | mipsisa32r5 | mipsisa32r5el \ | mipsisa32r6 | mipsisa32r6el \ | mipsisa64 | mipsisa64el \ | mipsisa64r2 | mipsisa64r2el \ | mipsisa64r3 | mipsisa64r3el \ | mipsisa64r5 | mipsisa64r5el \ | mipsisa64r6 | mipsisa64r6el \ | mipsisa64sb1 | mipsisa64sb1el \ | mipsisa64sr71k | mipsisa64sr71kel \ | mipsr5900 | mipsr5900el \ | mipstx39 | mipstx39el \ | mmix \ | mn10200 | mn10300 \ | moxie \ | mt \ | msp430 \ | nds32 | nds32le | nds32be \ | nfp \ | nios | nios2 | nios2eb | nios2el \ | none | np1 | ns16k | ns32k | nvptx \ | open8 \ | or1k* \ | or32 \ | orion \ | picochip \ | pdp10 | pdp11 | pj | pjl | pn | power \ | powerpc | powerpc64 | powerpc64le | powerpcle | powerpcspe \ | pru \ | pyramid \ | riscv | riscv32 | riscv32be | riscv64 | riscv64be \ | rl78 | romp | rs6000 | rx \ | s390 | s390x \ | score \ | sh | shl \ | sh[1234] | sh[24]a | sh[24]ae[lb] | sh[23]e | she[lb] | sh[lb]e \ | sh[1234]e[lb] | sh[12345][lb]e | sh[23]ele | sh64 | sh64le \ | sparc | sparc64 | sparc64b | sparc64v | sparc86x | sparclet \ | sparclite \ | sparcv8 | sparcv9 | sparcv9b | sparcv9v | sv1 | sx* \ | spu \ | tahoe \ | thumbv7* \ | tic30 | tic4x | tic54x | tic55x | tic6x | tic80 \ | tron \ | ubicom32 \ | v70 | v850 | v850e | v850e1 | v850es | v850e2 | v850e2v3 \ | vax \ | visium \ | w65 \ | wasm32 | wasm64 \ | we32k \ | x86 | x86_64 | xc16x | xgate | xps100 \ | xstormy16 | xtensa* \ | ymp \ | z8k | z80) ;; *) echo Invalid configuration \`"$1"\': machine \`"$cpu-$vendor"\' not recognized 1>&2 exit 1 ;; esac ;; esac # Here we canonicalize certain aliases for manufacturers. case $vendor in digital*) vendor=dec ;; commodore*) vendor=cbm ;; *) ;; esac # Decode manufacturer-specific aliases for certain operating systems. if test x$basic_os != x then # First recognize some ad-hoc cases, or perhaps split kernel-os, or else just # set os. case $basic_os in gnu/linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|gnu/linux|gnu|'` ;; os2-emx) kernel=os2 os=`echo "$basic_os" | sed -e 's|os2-emx|emx|'` ;; nto-qnx*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto-qnx|qnx|'` ;; *-*) # shellcheck disable=SC2162 saved_IFS=$IFS IFS="-" read kernel os <<EOF $basic_os EOF IFS=$saved_IFS ;; # Default OS when just kernel was specified nto*) kernel=nto os=`echo "$basic_os" | sed -e 's|nto|qnx|'` ;; linux*) kernel=linux os=`echo "$basic_os" | sed -e 's|linux|gnu|'` ;; *) kernel= os=$basic_os ;; esac # Now, normalize the OS (knowing we just have one component, it's not a kernel, # etc.) case $os in # First match some system type aliases that might get confused # with valid system types. # solaris* is a basic system type, with this one exception. auroraux) os=auroraux ;; bluegene*) os=cnk ;; solaris1 | solaris1.*) os=`echo "$os" | sed -e 's|solaris1|sunos4|'` ;; solaris) os=solaris2 ;; unixware*) os=sysv4.2uw ;; # es1800 is here to avoid being matched by es* (a different OS) es1800*) os=ose ;; # Some version numbers need modification chorusos*) os=chorusos ;; isc) os=isc2.2 ;; sco6) os=sco5v6 ;; sco5) os=sco3.2v5 ;; sco4) os=sco3.2v4 ;; sco3.2.[4-9]*) os=`echo "$os" | sed -e 's/sco3.2./sco3.2v/'` ;; sco*v* | scout) # Don't match below ;; sco*) os=sco3.2v2 ;; psos*) os=psos ;; qnx*) os=qnx ;; hiux*) os=hiuxwe2 ;; lynx*178) os=lynxos178 ;; lynx*5) os=lynxos5 ;; lynxos*) # don't get caught up in next wildcard ;; lynx*) os=lynxos ;; mac[0-9]*) os=`echo "$os" | sed -e 's|mac|macos|'` ;; opened*) os=openedition ;; os400*) os=os400 ;; sunos5*) os=`echo "$os" | sed -e 's|sunos5|solaris2|'` ;; sunos6*) os=`echo "$os" | sed -e 's|sunos6|solaris3|'` ;; wince*) os=wince ;; utek*) os=bsd ;; dynix*) os=bsd ;; acis*) os=aos ;; atheos*) os=atheos ;; syllable*) os=syllable ;; 386bsd) os=bsd ;; ctix* | uts*) os=sysv ;; nova*) os=rtmk-nova ;; ns2) os=nextstep2 ;; # Preserve the version number of sinix5. sinix5.*) os=`echo "$os" | sed -e 's|sinix|sysv|'` ;; sinix*) os=sysv4 ;; tpf*) os=tpf ;; triton*) os=sysv3 ;; oss*) os=sysv3 ;; svr4*) os=sysv4 ;; svr3) os=sysv3 ;; sysvr4) os=sysv4 ;; ose*) os=ose ;; *mint | mint[0-9]* | *MiNT | MiNT[0-9]*) os=mint ;; dicos*) os=dicos ;; pikeos*) # Until real need of OS specific support for # particular features comes up, bare metal # configurations are quite functional. case $cpu in arm*) os=eabi ;; *) os=elf ;; esac ;; *) # No normalization, but not necessarily accepted, that comes below. ;; esac else # Here we handle the default operating systems that come with various machines. # The value should be what the vendor currently ships out the door with their # machine or put another way, the most popular os provided with the machine. # Note that if you're going to try to match "-MANUFACTURER" here (say, # "-sun"), then you have to tell the case statement up towards the top # that MANUFACTURER isn't an operating system. Otherwise, code above # will signal an error saying that MANUFACTURER isn't an operating # system, and we'll never get to this point. kernel= case $cpu-$vendor in score-*) os=elf ;; spu-*) os=elf ;; *-acorn) os=riscix1.2 ;; arm*-rebel) kernel=linux os=gnu ;; arm*-semi) os=aout ;; c4x-* | tic4x-*) os=coff ;; c8051-*) os=elf ;; clipper-intergraph) os=clix ;; hexagon-*) os=elf ;; tic54x-*) os=coff ;; tic55x-*) os=coff ;; tic6x-*) os=coff ;; # This must come before the *-dec entry. pdp10-*) os=tops20 ;; pdp11-*) os=none ;; *-dec | vax-*) os=ultrix4.2 ;; m68*-apollo) os=domain ;; i386-sun) os=sunos4.0.2 ;; m68000-sun) os=sunos3 ;; m68*-cisco) os=aout ;; mep-*) os=elf ;; mips*-cisco) os=elf ;; mips*-*) os=elf ;; or32-*) os=coff ;; *-tti) # must be before sparc entry or we get the wrong os. os=sysv3 ;; sparc-* | *-sun) os=sunos4.1.1 ;; pru-*) os=elf ;; *-be) os=beos ;; *-ibm) os=aix ;; *-knuth) os=mmixware ;; *-wec) os=proelf ;; *-winbond) os=proelf ;; *-oki) os=proelf ;; *-hp) os=hpux ;; *-hitachi) os=hiux ;; i860-* | *-att | *-ncr | *-altos | *-motorola | *-convergent) os=sysv ;; *-cbm) os=amigaos ;; *-dg) os=dgux ;; *-dolphin) os=sysv3 ;; m68k-ccur) os=rtu ;; m88k-omron*) os=luna ;; *-next) os=nextstep ;; *-sequent) os=ptx ;; *-crds) os=unos ;; *-ns) os=genix ;; i370-*) os=mvs ;; *-gould) os=sysv ;; *-highlevel) os=bsd ;; *-encore) os=bsd ;; *-sgi) os=irix ;; *-siemens) os=sysv4 ;; *-masscomp) os=rtu ;; f30[01]-fujitsu | f700-fujitsu) os=uxpv ;; *-rom68k) os=coff ;; *-*bug) os=coff ;; *-apple) os=macos ;; *-atari*) os=mint ;; *-wrs) os=vxworks ;; *) os=none ;; esac fi # Now, validate our (potentially fixed-up) OS. case $os in # Sometimes we do "kernel-libc", so those need to count as OSes. musl* | newlib* | relibc* | uclibc*) ;; # Likewise for "kernel-abi" eabi* | gnueabi*) ;; # VxWorks passes extra cpu info in the 4th filed. simlinux | simwindows | spe) ;; # Now accept the basic system types. # The portable systems comes first. # Each alternative MUST end in a * to match a version number. gnu* | android* | bsd* | mach* | minix* | genix* | ultrix* | irix* \ | *vms* | esix* | aix* | cnk* | sunos | sunos[34]* \ | hpux* | unos* | osf* | luna* | dgux* | auroraux* | solaris* \ | sym* | plan9* | psp* | sim* | xray* | os68k* | v88r* \ | hiux* | abug | nacl* | netware* | windows* \ | os9* | macos* | osx* | ios* \ | mpw* | magic* | mmixware* | mon960* | lnews* \ | amigaos* | amigados* | msdos* | newsos* | unicos* | aof* \ | aos* | aros* | cloudabi* | sortix* | twizzler* \ | nindy* | vxsim* | vxworks* | ebmon* | hms* | mvs* \ | clix* | riscos* | uniplus* | iris* | isc* | rtu* | xenix* \ | mirbsd* | netbsd* | dicos* | openedition* | ose* \ | bitrig* | openbsd* | secbsd* | solidbsd* | libertybsd* | os108* \ | ekkobsd* | freebsd* | riscix* | lynxos* | os400* \ | bosx* | nextstep* | cxux* | aout* | elf* | oabi* \ | ptx* | coff* | ecoff* | winnt* | domain* | vsta* \ | udi* | lites* | ieee* | go32* | aux* | hcos* \ | chorusrdb* | cegcc* | glidix* | serenity* \ | cygwin* | msys* | pe* | moss* | proelf* | rtems* \ | midipix* | mingw32* | mingw64* | mint* \ | uxpv* | beos* | mpeix* | udk* | moxiebox* \ | interix* | uwin* | mks* | rhapsody* | darwin* \ | openstep* | oskit* | conix* | pw32* | nonstopux* \ | storm-chaos* | tops10* | tenex* | tops20* | its* \ | os2* | vos* | palmos* | uclinux* | nucleus* | morphos* \ | scout* | superux* | sysv* | rtmk* | tpf* | windiss* \ | powermax* | dnix* | nx6 | nx7 | sei* | dragonfly* \ | skyos* | haiku* | rdos* | toppers* | drops* | es* \ | onefs* | tirtos* | phoenix* | fuchsia* | redox* | bme* \ | midnightbsd* | amdhsa* | unleashed* | emscripten* | wasi* \ | nsk* | powerunix* | genode* | zvmoe* | qnx* | emx* | zephyr* \ | fiwix* ) ;; # This one is extra strict with allowed versions sco3.2v2 | sco3.2v[4-9]* | sco5v6*) # Don't forget version if it is 3.2v4 or newer. ;; none) ;; *) echo Invalid configuration \`"$1"\': OS \`"$os"\' not recognized 1>&2 exit 1 ;; esac # As a final step for OS-related things, validate the OS-kernel combination # (given a valid OS), if there is a kernel. case $kernel-$os in linux-gnu* | linux-dietlibc* | linux-android* | linux-newlib* \ | linux-musl* | linux-relibc* | linux-uclibc* ) ;; uclinux-uclibc* ) ;; -dietlibc* | -newlib* | -musl* | -relibc* | -uclibc* ) # These are just libc implementations, not actual OSes, and thus # require a kernel. echo "Invalid configuration \`$1': libc \`$os' needs explicit kernel." 1>&2 exit 1 ;; kfreebsd*-gnu* | kopensolaris*-gnu*) ;; vxworks-simlinux | vxworks-simwindows | vxworks-spe) ;; nto-qnx*) ;; os2-emx) ;; *-eabi* | *-gnueabi*) ;; -*) # Blank kernel with real OS is always fine. ;; *-*) echo "Invalid configuration \`$1': Kernel \`$kernel' not known to work with OS \`$os'." 1>&2 exit 1 ;; esac # Here we handle the case where we know the os, and the CPU type, but not the # manufacturer. We pick the logical manufacturer. case $vendor in unknown) case $cpu-$os in *-riscix*) vendor=acorn ;; *-sunos*) vendor=sun ;; *-cnk* | *-aix*) vendor=ibm ;; *-beos*) vendor=be ;; *-hpux*) vendor=hp ;; *-mpeix*) vendor=hp ;; *-hiux*) vendor=hitachi ;; *-unos*) vendor=crds ;; *-dgux*) vendor=dg ;; *-luna*) vendor=omron ;; *-genix*) vendor=ns ;; *-clix*) vendor=intergraph ;; *-mvs* | *-opened*) vendor=ibm ;; *-os400*) vendor=ibm ;; s390-* | s390x-*) vendor=ibm ;; *-ptx*) vendor=sequent ;; *-tpf*) vendor=ibm ;; *-vxsim* | *-vxworks* | *-windiss*) vendor=wrs ;; *-aux*) vendor=apple ;; *-hms*) vendor=hitachi ;; *-mpw* | *-macos*) vendor=apple ;; *-*mint | *-mint[0-9]* | *-*MiNT | *-MiNT[0-9]*) vendor=atari ;; *-vos*) vendor=stratus ;; esac ;; esac echo "$cpu-$vendor-${kernel:+$kernel-}$os" exit # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "timestamp='" # time-stamp-format: "%:y-%02m-%02d" # time-stamp-end: "'" # End: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/build-aux/announce-gen�����������������������������������������������������������������0000755�0000000�0000000�00000042554�14226564447�014331� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh #! -*-perl-*- # Generate a release announcement message. # Copyright (C) 2002-2022 Free Software Foundation, Inc. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # # Written by Jim Meyering # This is a prologue that allows to run a perl script as an executable # on systems that are compliant to a POSIX version before POSIX:2017. # On such systems, the usual invocation of an executable through execlp() # or execvp() fails with ENOEXEC if it is a script that does not start # with a #! line. The script interpreter mentioned in the #! line has # to be /bin/sh, because on GuixSD systems that is the only program that # has a fixed file name. The second line is essential for perl and is # also useful for editing this file in Emacs. The next two lines below # are valid code in both sh and perl. When executed by sh, they re-execute # the script through the perl program found in $PATH. The '-x' option # is essential as well; without it, perl would re-execute the script # through /bin/sh. When executed by perl, the next two lines are a no-op. eval 'exec perl -wSx "$0" "$@"' if 0; my $VERSION = '2022-03-14 10:08'; # UTC # The definition above must lie within the first 8 lines in order # for the Emacs time-stamp write hook (at end) to update it. # If you change this file with Emacs, please let the write hook # do its job. Otherwise, update this string manually. my $copyright_year = '2022'; use strict; use Getopt::Long; use POSIX qw(strftime); (my $ME = $0) =~ s|.*/||; my %valid_release_types = map {$_ => 1} qw (alpha beta stable); my @archive_suffixes = qw (tar.gz tar.bz2 tar.lz tar.lzma tar.xz); my $srcdir = '.'; sub usage ($) { my ($exit_code) = @_; my $STREAM = ($exit_code == 0 ? *STDOUT : *STDERR); if ($exit_code != 0) { print $STREAM "Try '$ME --help' for more information.\n"; } else { my @types = sort keys %valid_release_types; print $STREAM <<EOF; Usage: $ME [OPTIONS] Generate an announcement message. Run this from builddir. OPTIONS: These options must be specified: --release-type=TYPE TYPE must be one of @types --package-name=PACKAGE_NAME --previous-version=VER --current-version=VER --gpg-key-id=ID The GnuPG ID of the key used to sign the tarballs --url-directory=URL_DIR The following are optional: --news=NEWS_FILE include the NEWS section about this release from this NEWS_FILE; accumulates. --srcdir=DIR where to find the NEWS_FILEs (default: $srcdir) --bootstrap-tools=TOOL_LIST a comma-separated list of tools, e.g., autoconf,automake,bison,gnulib --gnulib-version=VERSION report VERSION as the gnulib version, where VERSION is the result of running git describe in the gnulib source directory. required if gnulib is in TOOL_LIST. --gpg-key-email=EMAIL The email address of the key used to sign the tarballs --gpg-keyring-url=URL URL pointing to keyring containing the key used to sign the tarballs --no-print-checksums do not emit SHA1 or SHA256 checksums --archive-suffix=SUF add SUF to the list of archive suffixes --mail-headers=HEADERS a space-separated list of mail headers, e.g., To: x\@example.com Cc: y-announce\@example.com,... --help display this help and exit --version output version information and exit EOF } exit $exit_code; } =item C<%size> = C<sizes (@file)> Compute the sizes of the C<@file> and return them as a hash. Return C<undef> if one of the computation failed. =cut sub sizes (@) { my (@file) = @_; my $fail = 0; my %res; foreach my $f (@file) { my $cmd = "du -h $f"; my $t = `$cmd`; # FIXME-someday: give a better diagnostic, a la $PROCESS_STATUS $@ and (warn "command failed: '$cmd'\n"), $fail = 1; chomp $t; $t =~ s/^\s*([\d.]+[MkK]).*/${1}B/; $res{$f} = $t; } return $fail ? undef : %res; } =item C<print_locations ($title, \@url, \%size, @file) Print a section C<$title> dedicated to the list of <@file>, which sizes are stored in C<%size>, and which are available from the C<@url>. =cut sub print_locations ($\@\%@) { my ($title, $url, $size, @file) = @_; print "Here are the $title:\n"; foreach my $url (@{$url}) { for my $file (@file) { print " $url/$file"; print " (", $$size{$file}, ")" if exists $$size{$file}; print "\n"; } } print "\n"; } =item C<print_checksums (@file) Print the SHA1 and SHA256 signature section for each C<@file>. =cut sub print_checksums (@) { my (@file) = @_; print "Here are the SHA1 and SHA256 checksums:\n"; print "\n"; use Digest::file qw(digest_file_hex digest_file_base64); foreach my $f (@file) { print digest_file_hex($f, "SHA-1"), " $f\n"; print digest_file_base64($f, "SHA-256"), " $f\n"; } print "\nThe SHA256 checksum is base64 encoded, instead of the\n"; print "hexadecimal encoding that most checksum tools default to.\n\n"; } =item C<print_news_deltas ($news_file, $prev_version, $curr_version) Print the section of the NEWS file C<$news_file> addressing changes between versions C<$prev_version> and C<$curr_version>. =cut sub print_news_deltas ($$$) { my ($news_file, $prev_version, $curr_version) = @_; my $news_name = $news_file; $news_name =~ s|^\Q$srcdir\E/||; print "\n$news_name\n\n"; # Print all lines from $news_file, starting with the first one # that mentions $curr_version up to but not including # the first occurrence of $prev_version. my $in_items; my $re_prefix = qr/(?:\* )?(?:Noteworthy c|Major c|C)(?i:hanges)/; my $found_news; open NEWS, '<', $news_file or die "$ME: $news_file: cannot open for reading: $!\n"; while (defined (my $line = <NEWS>)) { if ( ! $in_items) { # Match lines like these: # * Major changes in release 5.0.1: # * Noteworthy changes in release 6.6 (2006-11-22) [stable] $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$curr_version\E(?:[^\d.]|$)/o or next; $in_items = 1; print $line; } else { # This regexp must not match version numbers in NEWS items. # For example, they might well say "introduced in 4.5.5", # and we don't want that to match. $line =~ /^$re_prefix.*(?:[^\d.]|$)\Q$prev_version\E(?:[^\d.]|$)/o and last; print $line; $line =~ /\S/ and $found_news = 1; } } close NEWS; $in_items or die "$ME: $news_file: no matching lines for '$curr_version'\n"; $found_news or die "$ME: $news_file: no news item found for '$curr_version'\n"; } sub print_changelog_deltas ($$) { my ($package_name, $prev_version) = @_; # Print new ChangeLog entries. # First find all CVS-controlled ChangeLog files. use File::Find; my @changelog; find ({wanted => sub {$_ eq 'ChangeLog' && -d 'CVS' and push @changelog, $File::Find::name}}, '.'); # If there are no ChangeLog files, we're done. @changelog or return; my %changelog = map {$_ => 1} @changelog; # Reorder the list of files so that if there are ChangeLog # files in the specified directories, they're listed first, # in this order: my @dir = qw ( . src lib m4 config doc ); # A typical @changelog array might look like this: # ./ChangeLog # ./po/ChangeLog # ./m4/ChangeLog # ./lib/ChangeLog # ./doc/ChangeLog # ./config/ChangeLog my @reordered; foreach my $d (@dir) { my $dot_slash = $d eq '.' ? $d : "./$d"; my $target = "$dot_slash/ChangeLog"; delete $changelog{$target} and push @reordered, $target; } # Append any remaining ChangeLog files. push @reordered, sort keys %changelog; # Remove leading './'. @reordered = map { s!^\./!!; $_ } @reordered; print "\nChangeLog entries:\n\n"; # print join ("\n", @reordered), "\n"; $prev_version =~ s/\./_/g; my $prev_cvs_tag = "\U$package_name\E-$prev_version"; my $cmd = "cvs -n diff -u -r$prev_cvs_tag -rHEAD @reordered"; open DIFF, '-|', $cmd or die "$ME: cannot run '$cmd': $!\n"; # Print two types of lines, making minor changes: # Lines starting with '+++ ', e.g., # +++ ChangeLog 22 Feb 2003 16:52:51 -0000 1.247 # and those starting with '+'. # Don't print the others. my $prev_printed_line_empty = 1; while (defined (my $line = <DIFF>)) { if ($line =~ /^\+\+\+ /) { my $separator = "*"x70 ."\n"; $line =~ s///; $line =~ s/\s.*//; $prev_printed_line_empty or print "\n"; print $separator, $line, $separator; } elsif ($line =~ /^\+/) { $line =~ s///; print $line; $prev_printed_line_empty = ($line =~ /^$/); } } close DIFF; # The exit code should be 1. # Allow in case there are no modified ChangeLog entries. $? == 256 || $? == 128 or warn "warning: '$cmd' had unexpected exit code or signal ($?)\n"; } sub get_tool_versions ($$) { my ($tool_list, $gnulib_version) = @_; @$tool_list or return (); my $fail; my @tool_version_pair; foreach my $t (@$tool_list) { if ($t eq 'gnulib') { push @tool_version_pair, ucfirst $t . ' ' . $gnulib_version; next; } # Assume that the last "word" on the first line of # 'tool --version' output is the version string. my ($first_line, undef) = split ("\n", `$t --version`); if ($first_line =~ /.* (\d[\w.-]+)$/) { $t = ucfirst $t; push @tool_version_pair, "$t $1"; } else { defined $first_line and $first_line = ''; warn "$t: unexpected --version output\n:$first_line"; $fail = 1; } } $fail and exit 1; return @tool_version_pair; } { # Use the C locale so that, for instance, "du" does not # print "1,2" instead of "1.2", which would confuse our regexps. $ENV{LC_ALL} = "C"; my $mail_headers; my $release_type; my $package_name; my $prev_version; my $curr_version; my $gpg_key_id; my @url_dir_list; my @news_file; my $bootstrap_tools; my $gnulib_version; my $print_checksums_p = 1; my $gpg_key_email; my $gpg_keyring_url; # Reformat the warnings before displaying them. local $SIG{__WARN__} = sub { my ($msg) = @_; # Warnings from GetOptions. $msg =~ s/Option (\w)/option --$1/; warn "$ME: $msg"; }; GetOptions ( 'mail-headers=s' => \$mail_headers, 'release-type=s' => \$release_type, 'package-name=s' => \$package_name, 'previous-version=s' => \$prev_version, 'current-version=s' => \$curr_version, 'gpg-key-id=s' => \$gpg_key_id, 'gpg-key-email=s' => \$gpg_key_email, 'gpg-keyring-url=s' => \$gpg_keyring_url, 'url-directory=s' => \@url_dir_list, 'news=s' => \@news_file, 'srcdir=s' => \$srcdir, 'bootstrap-tools=s' => \$bootstrap_tools, 'gnulib-version=s' => \$gnulib_version, 'print-checksums!' => \$print_checksums_p, 'archive-suffix=s' => \@archive_suffixes, help => sub { usage 0 }, version => sub { print "$ME version $VERSION\n"; print "Copyright (C) $copyright_year Free Software Foundation, Inc.\n"; print "License GPLv3+: GNU GPL version 3 or later <https://gnu.org/licenses/gpl.html>.\n" . "This is free software: you are free to change and redistribute it.\n" . "There is NO WARRANTY, to the extent permitted by law.\n"; print "\n"; my $author = "Jim Meyering"; print "Written by $author.\n"; exit }, ) or usage 1; my $fail = 0; # Ensure that each required option is specified. $release_type or (warn "release type not specified\n"), $fail = 1; $package_name or (warn "package name not specified\n"), $fail = 1; $prev_version or (warn "previous version string not specified\n"), $fail = 1; $curr_version or (warn "current version string not specified\n"), $fail = 1; $gpg_key_id or (warn "GnuPG key ID not specified\n"), $fail = 1; @url_dir_list or (warn "URL directory name(s) not specified\n"), $fail = 1; my @tool_list = split ',', $bootstrap_tools if $bootstrap_tools; grep (/^gnulib$/, @tool_list) ^ defined $gnulib_version and (warn "when specifying gnulib as a tool, you must also specify\n" . "--gnulib-version=V, where V is the result of running git describe\n" . "in the gnulib source directory.\n"), $fail = 1; !$release_type || exists $valid_release_types{$release_type} or (warn "'$release_type': invalid release type\n"), $fail = 1; @ARGV and (warn "too many arguments:\n", join ("\n", @ARGV), "\n"), $fail = 1; $fail and usage 1; my $my_distdir = "$package_name-$curr_version"; my $xd = "$package_name-$prev_version-$curr_version.xdelta"; my @candidates = map { "$my_distdir.$_" } @archive_suffixes; my @tarballs = grep {-f $_} @candidates; @tarballs or die "$ME: none of " . join(', ', @candidates) . " were found\n"; my @sizable = @tarballs; -f $xd and push @sizable, $xd; my %size = sizes (@sizable); %size or exit 1; my $headers = ''; if (defined $mail_headers) { ($headers = $mail_headers) =~ s/\s+(\S+:)/\n$1/g; $headers .= "\n"; } # The markup is escaped as <\# so that when this script is sent by # mail (or part of a diff), Gnus is not triggered. print <<EOF; ${headers}Subject: $my_distdir released [$release_type] <\#secure method=pgpmime mode=sign> FIXME: put comments here EOF if (@url_dir_list == 1 && @tarballs == 1) { # When there's only one tarball and one URL, use a more concise form. my $m = "$url_dir_list[0]/$tarballs[0]"; print "Here are the compressed sources and a GPG detached signature[*]:\n" . " $m\n" . " $m.sig\n\n"; } else { print_locations ("compressed sources", @url_dir_list, %size, @tarballs); -f $xd and print_locations ("xdelta diffs (useful? if so, " . "please tell bug-gnulib\@gnu.org)", @url_dir_list, %size, $xd); my @sig_files = map { "$_.sig" } @tarballs; print_locations ("GPG detached signatures[*]", @url_dir_list, %size, @sig_files); } if ($url_dir_list[0] =~ "gnu\.org") { print "Use a mirror for higher download bandwidth:\n"; if (@tarballs == 1 && $url_dir_list[0] =~ m!https://ftp\.gnu\.org/gnu/!) { (my $m = "$url_dir_list[0]/$tarballs[0]") =~ s!https://ftp\.gnu\.org/gnu/!https://ftpmirror\.gnu\.org/!; print " $m\n" . " $m.sig\n\n"; } else { print " https://www.gnu.org/order/ftp.html\n\n"; } } $print_checksums_p and print_checksums (@sizable); print <<EOF; [*] Use a .sig file to verify that the corresponding file (without the .sig suffix) is intact. First, be sure to download both the .sig file and the corresponding tarball. Then, run a command like this: gpg --verify $tarballs[0].sig If that command fails because you don't have the required public key, or that public key has expired, try the following commands to update or refresh it, and then rerun the 'gpg --verify' command. EOF if ($gpg_key_email) { print <<EOF; gpg --locate-external-key $gpg_key_email EOF } print <<EOF; gpg --recv-keys $gpg_key_id EOF if ($gpg_keyring_url) { print <<EOF; wget -q -O- '$gpg_keyring_url' | gpg --import - EOF } my @tool_versions = get_tool_versions (\@tool_list, $gnulib_version); @tool_versions and print "\nThis release was bootstrapped with the following tools:", join ('', map {"\n $_"} @tool_versions), "\n"; print_news_deltas ($_, $prev_version, $curr_version) foreach @news_file; $release_type eq 'stable' or print_changelog_deltas ($package_name, $prev_version); exit 0; } ### Setup "GNU" style for perl-mode and cperl-mode. ## Local Variables: ## mode: perl ## perl-indent-level: 2 ## perl-continued-statement-offset: 2 ## perl-continued-brace-offset: 0 ## perl-brace-offset: 0 ## perl-brace-imaginary-offset: 0 ## perl-label-offset: -2 ## perl-extra-newline-before-brace: t ## perl-merge-trailing-else: nil ## eval: (add-hook 'before-save-hook 'time-stamp) ## time-stamp-line-limit: 50 ## time-stamp-start: "my $VERSION = '" ## time-stamp-format: "%:y-%02m-%02d %02H:%02M" ## time-stamp-time-zone: "UTC0" ## time-stamp-end: "'; # UTC" ## End: ����������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/build-aux/mdate-sh���������������������������������������������������������������������0000755�0000000�0000000�00000013732�14226564226�013445� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Get modification time of a file or directory and pretty-print it. scriptversion=2018-03-07.03; # UTC # Copyright (C) 1995-2022 Free Software Foundation, Inc. # written by Ulrich Drepper <drepper@gnu.ai.mit.edu>, June 1995 # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # As a special exception to the GNU General Public License, if you # distribute this file as part of a program that contains a # configuration script generated by Autoconf, you may include it under # the same distribution terms that you use for the rest of that program. # This file is maintained in Automake, please report # bugs to <bug-automake@gnu.org> or send patches to # <automake-patches@gnu.org>. if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST fi case $1 in '') echo "$0: No file. Try '$0 --help' for more information." 1>&2 exit 1; ;; -h | --h*) cat <<\EOF Usage: mdate-sh [--help] [--version] FILE Pretty-print the modification day of FILE, in the format: 1 January 1970 Report bugs to <bug-automake@gnu.org>. EOF exit $? ;; -v | --v*) echo "mdate-sh $scriptversion" exit $? ;; esac error () { echo "$0: $1" >&2 exit 1 } # Prevent date giving response in another language. LANG=C export LANG LC_ALL=C export LC_ALL LC_TIME=C export LC_TIME # Use UTC to get reproducible result. TZ=UTC0 export TZ # GNU ls changes its time format in response to the TIME_STYLE # variable. Since we cannot assume 'unset' works, revert this # variable to its documented default. if test "${TIME_STYLE+set}" = set; then TIME_STYLE=posix-long-iso export TIME_STYLE fi save_arg1=$1 # Find out how to get the extended ls output of a file or directory. if ls -L /dev/null 1>/dev/null 2>&1; then ls_command='ls -L -l -d' else ls_command='ls -l -d' fi # Avoid user/group names that might have spaces, when possible. if ls -n /dev/null 1>/dev/null 2>&1; then ls_command="$ls_command -n" fi # A 'ls -l' line looks as follows on OS/2. # drwxrwx--- 0 Aug 11 2001 foo # This differs from Unix, which adds ownership information. # drwxrwx--- 2 root root 4096 Aug 11 2001 foo # # To find the date, we split the line on spaces and iterate on words # until we find a month. This cannot work with files whose owner is a # user named "Jan", or "Feb", etc. However, it's unlikely that '/' # will be owned by a user whose name is a month. So we first look at # the extended ls output of the root directory to decide how many # words should be skipped to get the date. # On HPUX /bin/sh, "set" interprets "-rw-r--r--" as options, so the "x" below. set x`$ls_command /` # Find which argument is the month. month= command= until test $month do test $# -gt 0 || error "failed parsing '$ls_command /' output" shift # Add another shift to the command. command="$command shift;" case $1 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac done test -n "$month" || error "failed parsing '$ls_command /' output" # Get the extended ls output of the file or directory. set dummy x`eval "$ls_command \"\\\$save_arg1\""` # Remove all preceding arguments eval $command # Because of the dummy argument above, month is in $2. # # On a POSIX system, we should have # # $# = 5 # $1 = file size # $2 = month # $3 = day # $4 = year or time # $5 = filename # # On Darwin 7.7.0 and 7.6.0, we have # # $# = 4 # $1 = day # $2 = month # $3 = year or time # $4 = filename # Get the month. case $2 in Jan) month=January; nummonth=1;; Feb) month=February; nummonth=2;; Mar) month=March; nummonth=3;; Apr) month=April; nummonth=4;; May) month=May; nummonth=5;; Jun) month=June; nummonth=6;; Jul) month=July; nummonth=7;; Aug) month=August; nummonth=8;; Sep) month=September; nummonth=9;; Oct) month=October; nummonth=10;; Nov) month=November; nummonth=11;; Dec) month=December; nummonth=12;; esac case $3 in ???*) day=$1;; *) day=$3; shift;; esac # Here we have to deal with the problem that the ls output gives either # the time of day or the year. case $3 in *:*) set `date`; eval year=\$$# case $2 in Jan) nummonthtod=1;; Feb) nummonthtod=2;; Mar) nummonthtod=3;; Apr) nummonthtod=4;; May) nummonthtod=5;; Jun) nummonthtod=6;; Jul) nummonthtod=7;; Aug) nummonthtod=8;; Sep) nummonthtod=9;; Oct) nummonthtod=10;; Nov) nummonthtod=11;; Dec) nummonthtod=12;; esac # For the first six month of the year the time notation can also # be used for files modified in the last year. if (expr $nummonth \> $nummonthtod) > /dev/null; then year=`expr $year - 1` fi;; *) year=$3;; esac # The result. echo $day $month $year # Local Variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��������������������������������������recutils-1.9/build-aux/gnupload���������������������������������������������������������������������0000755�0000000�0000000�00000032666�14226564447�013570� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # Sign files and upload them. scriptversion=2022-01-27.18; # UTC # Copyright (C) 2004-2022 Free Software Foundation, Inc. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # Originally written by Alexandre Duret-Lutz <adl@gnu.org>. # The master copy of this file is maintained in the gnulib Git repository. # Please send bug reports and feature requests to bug-gnulib@gnu.org. set -e GPG=gpg # Choose the proper version of gpg, so as to avoid a # "gpg-agent is not available in this session" error # when gpg-agent is version 2 but gpg is still version 1. # FIXME-2020: remove, once all major distros ship gpg version 2 as /usr/bin/gpg gpg_agent_version=`(gpg-agent --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'` case "$gpg_agent_version" in 2.*) gpg_version=`(gpg --version) 2>/dev/null | sed -e '2,$d' -e 's/^[^0-9]*//'` case "$gpg_version" in 1.*) if (type gpg2) >/dev/null 2>/dev/null; then # gpg2 is present. GPG=gpg2 else # gpg2 is missing. Ubuntu users should install the package 'gnupg2'. echo "WARNING: Using 'gpg', which is too old. You should install 'gpg2'." 1>&2 fi ;; esac ;; esac GPG="${GPG} --batch --no-tty" conffile=.gnuploadrc to= dry_run=false replace= symlink_files= delete_files= delete_symlinks= collect_var= dbg= nl=' ' usage="Usage: $0 [OPTION]... [CMD] FILE... [[CMD] FILE...] Sign all FILES, and process them at the destinations specified with --to. If CMD is not given, it defaults to uploading. See examples below. Commands: --delete delete FILES from destination --symlink create symbolic links --rmsymlink remove symbolic links -- treat the remaining arguments as files to upload Options: --to DEST specify a destination DEST for FILES (multiple --to options are allowed) --user NAME sign with key NAME --replace allow replacements of existing files --symlink-regex[=EXPR] use sed script EXPR to compute symbolic link names -n, --dry-run do nothing, show what would have been done (including the constructed directive file) --version output version information and exit -h, --help print this help text and exit If --symlink-regex is given without EXPR, then the link target name is created by replacing the version information with '-latest', e.g.: foo-1.3.4.tar.gz -> foo-latest.tar.gz Recognized destinations are: alpha.gnu.org:DIRECTORY savannah.gnu.org:DIRECTORY savannah.nongnu.org:DIRECTORY ftp.gnu.org:DIRECTORY build directive files and upload files by FTP download.gnu.org.ua:{alpha|ftp}/DIRECTORY build directive files and upload files by SFTP [user@]host:DIRECTORY upload files with scp Options and commands are applied in order. If the file $conffile exists in the current working directory, its contents are prepended to the actual command line options. Use this to keep your defaults. Comments (#) and empty lines in $conffile are allowed. <https://www.gnu.org/prep/maintain/html_node/Automated-FTP-Uploads.html> gives some further background. Examples: 1. Upload foobar-1.0.tar.gz to ftp.gnu.org: gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz 2. Upload foobar-1.0.tar.gz and foobar-1.0.tar.xz to ftp.gnu.org: gnupload --to ftp.gnu.org:foobar foobar-1.0.tar.gz foobar-1.0.tar.xz 3. Same as above, and also create symbolic links to foobar-latest.tar.*: gnupload --to ftp.gnu.org:foobar \\ --symlink-regex \\ foobar-1.0.tar.gz foobar-1.0.tar.xz 4. Create a symbolic link foobar-latest.tar.gz -> foobar-1.0.tar.gz and likewise for the corresponding .sig file: gnupload --to ftp.gnu.org:foobar \\ --symlink foobar-1.0.tar.gz foobar-latest.tar.gz \\ foobar-1.0.tar.gz.sig foobar-latest.tar.gz.sig or (equivalent): gnupload --to ftp.gnu.org:foobar \\ --symlink foobar-1.0.tar.gz foobar-latest.tar.gz \\ --symlink foobar-1.0.tar.gz.sig foobar-latest.tar.gz.sig 5. Upload foobar-0.9.90.tar.gz to two sites: gnupload --to alpha.gnu.org:foobar \\ --to sources.redhat.com:~ftp/pub/foobar \\ foobar-0.9.90.tar.gz 6. Delete oopsbar-0.9.91.tar.gz and upload foobar-0.9.91.tar.gz (the -- terminates the list of files to delete): gnupload --to alpha.gnu.org:foobar \\ --to sources.redhat.com:~ftp/pub/foobar \\ --delete oopsbar-0.9.91.tar.gz \\ -- foobar-0.9.91.tar.gz gnupload executes a program ncftpput to do the transfers; if you don't happen to have an ncftp package installed, the ncftpput-ftp script in the build-aux/ directory of the gnulib package (https://savannah.gnu.org/projects/gnulib) may serve as a replacement. Send patches and bug reports to <bug-gnulib@gnu.org>." copyright_year=`echo "$scriptversion" | sed -e 's/[^0-9].*//'` copyright="Copyright (C) ${copyright_year} Free Software Foundation, Inc. License GPLv2+: GNU GPL version 2 or later <https://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law." # Read local configuration file if test -r "$conffile"; then echo "$0: Reading configuration file $conffile" conf=`sed 's/#.*$//;/^$/d' "$conffile" | tr "\015$nl" ' '` eval set x "$conf \"\$@\"" shift fi while test -n "$1"; do case $1 in -*) collect_var= case $1 in -h | --help) echo "$usage" exit $? ;; --to) if test -z "$2"; then echo "$0: Missing argument for --to" 1>&2 exit 1 elif echo "$2" | grep 'ftp-upload\.gnu\.org' >/dev/null; then echo "$0: Use ftp.gnu.org:PKGNAME or alpha.gnu.org:PKGNAME" >&2 echo "$0: for the destination, not ftp-upload.gnu.org (which" >&2 echo "$0: is used for direct ftp uploads, not with gnupload)." >&2 echo "$0: See --help and its examples if need be." >&2 exit 1 else to="$to $2" shift fi ;; --user) if test -z "$2"; then echo "$0: Missing argument for --user" 1>&2 exit 1 else GPG="$GPG --local-user $2" shift fi ;; --delete) collect_var=delete_files ;; --replace) replace="replace: true" ;; --rmsymlink) collect_var=delete_symlinks ;; --symlink-regex=*) symlink_expr=`expr "$1" : '[^=]*=\(.*\)'` ;; --symlink-regex) symlink_expr='s|-[0-9][0-9\.]*\(-[0-9][0-9]*\)\{0,1\}\.|-latest.|' ;; --symlink) collect_var=symlink_files ;; -n | --dry-run) dry_run=: ;; --version) echo "gnupload $scriptversion" echo "$copyright" exit 0 ;; --) shift break ;; -*) echo "$0: Unknown option '$1', try '$0 --help'" 1>&2 exit 1 ;; esac ;; *) if test -z "$collect_var"; then break else eval "$collect_var=\"\$$collect_var $1\"" fi ;; esac shift done dprint() { echo "Running $* ..." } if $dry_run; then dbg=dprint fi if test -z "$to"; then echo "$0: Missing destination sites" >&2 exit 1 fi if test -n "$symlink_files"; then x=`echo "$symlink_files" | sed 's/[^ ]//g;s/ //g'` if test -n "$x"; then echo "$0: Odd number of symlink arguments" >&2 exit 1 fi fi if test $# = 0; then if test -z "${symlink_files}${delete_files}${delete_symlinks}"; then echo "$0: No file to upload" 1>&2 exit 1 fi else # Make sure all files exist. We don't want to ask # for the passphrase if the script will fail. for file do if test ! -f $file; then echo "$0: Cannot find '$file'" 1>&2 exit 1 elif test -n "$symlink_expr"; then linkname=`echo $file | sed "$symlink_expr"` if test -z "$linkname"; then echo "$0: symlink expression produces empty results" >&2 exit 1 elif test "$linkname" = $file; then echo "$0: symlink expression does not alter file name" >&2 exit 1 fi fi done fi # Make sure passphrase is not exported in the environment. unset passphrase unset passphrase_fd_0 GNUPGHOME=${GNUPGHOME:-$HOME/.gnupg} # Reset PATH to be sure that echo is a built-in. We will later use # 'echo $passphrase' to output the passphrase, so it is important that # it is a built-in (third-party programs tend to appear in 'ps' # listings with their arguments...). # Remember this script runs with 'set -e', so if echo is not built-in # it will exit now. if $dry_run || grep -q "^use-agent" $GNUPGHOME/gpg.conf; then :; else PATH=/empty echo -n "Enter GPG passphrase: " stty -echo read -r passphrase stty echo echo passphrase_fd_0="--passphrase-fd 0" fi if test $# -ne 0; then for file do echo "Signing $file ..." rm -f $file.sig echo "$passphrase" | $dbg $GPG $passphrase_fd_0 -ba -o $file.sig $file done fi # mkdirective DESTDIR BASE FILE STMT # Arguments: See upload, below mkdirective () { stmt="$4" if test -n "$3"; then stmt=" filename: $3$stmt" fi cat >${2}.directive<<EOF version: 1.2 directory: $1 comment: gnupload v. $scriptversion$stmt EOF if $dry_run; then echo "File ${2}.directive:" cat ${2}.directive echo "File ${2}.directive:" | sed 's/./-/g' fi } mksymlink () { while test $# -ne 0 do echo "symlink: $1 $2" shift shift done } # upload DEST DESTDIR BASE FILE STMT FILES # Arguments: # DEST Destination site; # DESTDIR Destination directory; # BASE Base name for the directive file; # FILE Name of the file to distribute (may be empty); # STMT Additional statements for the directive file; # FILES List of files to upload. upload () { dest=$1 destdir=$2 base=$3 file=$4 stmt=$5 files=$6 rm -f $base.directive $base.directive.asc case $dest in alpha.gnu.org:*) mkdirective "$destdir" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive $dbg ncftpput ftp-upload.gnu.org /incoming/alpha $files $base.directive.asc ;; ftp.gnu.org:*) mkdirective "$destdir" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive $dbg ncftpput ftp-upload.gnu.org /incoming/ftp $files $base.directive.asc ;; savannah.gnu.org:*) if test -z "$files"; then echo "$0: warning: standalone directives not applicable for $dest" >&2 fi $dbg ncftpput savannah.gnu.org /incoming/savannah/$destdir $files ;; savannah.nongnu.org:*) if test -z "$files"; then echo "$0: warning: standalone directives not applicable for $dest" >&2 fi $dbg ncftpput savannah.nongnu.org /incoming/savannah/$destdir $files ;; download.gnu.org.ua:alpha/*|download.gnu.org.ua:ftp/*) destdir_p1=`echo "$destdir" | sed 's,^[^/]*/,,'` destdir_topdir=`echo "$destdir" | sed 's,/.*,,'` mkdirective "$destdir_p1" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive for f in $files $base.directive.asc do echo put $f done | $dbg sftp -b - puszcza.gnu.org.ua:/incoming/$destdir_topdir ;; /*) dest_host=`echo "$dest" | sed 's,:.*,,'` mkdirective "$destdir" "$base" "$file" "$stmt" echo "$passphrase" | $dbg $GPG $passphrase_fd_0 --clearsign $base.directive $dbg cp $files $base.directive.asc $dest_host ;; *) if test -z "$files"; then echo "$0: warning: standalone directives not applicable for $dest" >&2 fi $dbg scp $files $dest ;; esac rm -f $base.directive $base.directive.asc } ##### # Process any standalone directives stmt= if test -n "$symlink_files"; then stmt="$stmt `mksymlink $symlink_files`" fi for file in $delete_files do stmt="$stmt archive: $file" done for file in $delete_symlinks do stmt="$stmt rmsymlink: $file" done if test -n "$stmt"; then for dest in $to do destdir=`echo $dest | sed 's/[^:]*://'` upload "$dest" "$destdir" "`hostname`-$$" "" "$stmt" done fi # Process actual uploads for dest in $to do for file do echo "Uploading $file to $dest ..." stmt= # # allowing file replacement is all or nothing. if test -n "$replace"; then stmt="$stmt $replace" fi # files="$file $file.sig" destdir=`echo $dest | sed 's/[^:]*://'` if test -n "$symlink_expr"; then linkname=`echo $file | sed "$symlink_expr"` stmt="$stmt symlink: $file $linkname symlink: $file.sig $linkname.sig" fi upload "$dest" "$destdir" "$file" "$file" "$stmt" "$files" done done exit 0 # Local variables: # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-start: "scriptversion=" # time-stamp-format: "%:y-%02m-%02d.%02H" # time-stamp-time-zone: "UTC0" # time-stamp-end: "; # UTC" # End: ��������������������������������������������������������������������������recutils-1.9/build-aux/ltmain.sh��������������������������������������������������������������������0000644�0000000�0000000�00001171474�13253165100�013631� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh ## DO NOT EDIT - This file generated from ./build-aux/ltmain.in ## by inline-source v2014-01-03.01 # libtool (GNU libtool) 2.4.6 # Provide generalized library-building support services. # Written by Gordon Matzigkeit <gord@gnu.ai.mit.edu>, 1996 # Copyright (C) 1996-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, # if you distribute this file as part of a program or library that # is built using GNU Libtool, you may include this file under the # same distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. PROGRAM=libtool PACKAGE=libtool VERSION="2.4.6 Debian-2.4.6-2" package_revision=2.4.6 ## ------ ## ## Usage. ## ## ------ ## # Run './libtool --help' for help with using this script from the # command line. ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # After configure completes, it has a better idea of some of the # shell tools we need than the defaults used by the functions shared # with bootstrap, so set those here where they can still be over- # ridden by the user, but otherwise take precedence. : ${AUTOCONF="autoconf"} : ${AUTOMAKE="automake"} ## -------------------------- ## ## Source external libraries. ## ## -------------------------- ## # Much of our low-level functionality needs to be sourced from external # libraries, which are installed to $pkgauxdir. # Set a version string for this script. scriptversion=2015-01-20.17; # UTC # General shell script boiler plate, and helper functions. # Written by Gary V. Vaughan, 2004 # Copyright (C) 2004-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3 of the License, or # (at your option) any later version. # As a special exception to the GNU General Public License, if you distribute # this file as part of a program or library that is built using GNU Libtool, # you may include this file under the same distribution terms that you use # for the rest of that program. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNES FOR A PARTICULAR PURPOSE. See the GNU # General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # Evaluate this file near the top of your script to gain access to # the functions and variables defined here: # # . `echo "$0" | ${SED-sed} 's|[^/]*$||'`/build-aux/funclib.sh # # If you need to override any of the default environment variable # settings, do that before evaluating this file. ## -------------------- ## ## Shell normalisation. ## ## -------------------- ## # Some shells need a little help to be as Bourne compatible as possible. # Before doing anything else, make sure all that help has been provided! DUALCASE=1; export DUALCASE # for MKS sh if test -n "${ZSH_VERSION+set}" && (emulate sh) >/dev/null 2>&1; then : emulate sh NULLCMD=: # Pre-4.2 versions of Zsh do word splitting on ${1+"$@"}, which # is contrary to our usage. Disable this feature. alias -g '${1+"$@"}'='"$@"' setopt NO_GLOB_SUBST else case `(set -o) 2>/dev/null` in *posix*) set -o posix ;; esac fi # NLS nuisances: We save the old values in case they are required later. _G_user_locale= _G_safe_locale= for _G_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test set = \"\${$_G_var+set}\"; then save_$_G_var=\$$_G_var $_G_var=C export $_G_var _G_user_locale=\"$_G_var=\\\$save_\$_G_var; \$_G_user_locale\" _G_safe_locale=\"$_G_var=C; \$_G_safe_locale\" fi" done # CDPATH. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH # Make sure IFS has a sensible default sp=' ' nl=' ' IFS="$sp $nl" # There are apparently some retarded systems that use ';' as a PATH separator! if test "${PATH_SEPARATOR+set}" != set; then PATH_SEPARATOR=: (PATH='/bin;/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 && { (PATH='/bin:/bin'; FPATH=$PATH; sh -c :) >/dev/null 2>&1 || PATH_SEPARATOR=';' } fi ## ------------------------- ## ## Locate command utilities. ## ## ------------------------- ## # func_executable_p FILE # ---------------------- # Check that FILE is an executable regular file. func_executable_p () { test -f "$1" && test -x "$1" } # func_path_progs PROGS_LIST CHECK_FUNC [PATH] # -------------------------------------------- # Search for either a program that responds to --version with output # containing "GNU", or else returned by CHECK_FUNC otherwise, by # trying all the directories in PATH with each of the elements of # PROGS_LIST. # # CHECK_FUNC should accept the path to a candidate program, and # set $func_check_prog_result if it truncates its output less than # $_G_path_prog_max characters. func_path_progs () { _G_progs_list=$1 _G_check_func=$2 _G_PATH=${3-"$PATH"} _G_path_prog_max=0 _G_path_prog_found=false _G_save_IFS=$IFS; IFS=${PATH_SEPARATOR-:} for _G_dir in $_G_PATH; do IFS=$_G_save_IFS test -z "$_G_dir" && _G_dir=. for _G_prog_name in $_G_progs_list; do for _exeext in '' .EXE; do _G_path_prog=$_G_dir/$_G_prog_name$_exeext func_executable_p "$_G_path_prog" || continue case `"$_G_path_prog" --version 2>&1` in *GNU*) func_path_progs_result=$_G_path_prog _G_path_prog_found=: ;; *) $_G_check_func $_G_path_prog func_path_progs_result=$func_check_prog_result ;; esac $_G_path_prog_found && break 3 done done done IFS=$_G_save_IFS test -z "$func_path_progs_result" && { echo "no acceptable sed could be found in \$PATH" >&2 exit 1 } } # We want to be able to use the functions in this file before configure # has figured out where the best binaries are kept, which means we have # to search for them ourselves - except when the results are already set # where we skip the searches. # Unless the user overrides by setting SED, search the path for either GNU # sed, or the sed that truncates its output the least. test -z "$SED" && { _G_sed_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for _G_i in 1 2 3 4 5 6 7; do _G_sed_script=$_G_sed_script$nl$_G_sed_script done echo "$_G_sed_script" 2>/dev/null | sed 99q >conftest.sed _G_sed_script= func_check_prog_sed () { _G_path_prog=$1 _G_count=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo '' >> conftest.nl "$_G_path_prog" -f conftest.sed <conftest.nl >conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "sed gsed" func_check_prog_sed $PATH:/usr/xpg4/bin rm -f conftest.sed SED=$func_path_progs_result } # Unless the user overrides by setting GREP, search the path for either GNU # grep, or the grep that truncates its output the least. test -z "$GREP" && { func_check_prog_grep () { _G_path_prog=$1 _G_count=0 _G_path_prog_max=0 printf 0123456789 >conftest.in while : do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo 'GREP' >> conftest.nl "$_G_path_prog" -e 'GREP$' -e '-(cannot match)-' <conftest.nl >conftest.out 2>/dev/null || break diff conftest.out conftest.nl >/dev/null 2>&1 || break _G_count=`expr $_G_count + 1` if test "$_G_count" -gt "$_G_path_prog_max"; then # Best one so far, save it but keep looking for a better one func_check_prog_result=$_G_path_prog _G_path_prog_max=$_G_count fi # 10*(2^10) chars as input seems more than enough test 10 -lt "$_G_count" && break done rm -f conftest.in conftest.tmp conftest.nl conftest.out } func_path_progs "grep ggrep" func_check_prog_grep $PATH:/usr/xpg4/bin GREP=$func_path_progs_result } ## ------------------------------- ## ## User overridable command paths. ## ## ------------------------------- ## # All uppercase variable names are used for environment variables. These # variables can be overridden by the user before calling a script that # uses them if a suitable command of that name is not already available # in the command search PATH. : ${CP="cp -f"} : ${ECHO="printf %s\n"} : ${EGREP="$GREP -E"} : ${FGREP="$GREP -F"} : ${LN_S="ln -s"} : ${MAKE="make"} : ${MKDIR="mkdir"} : ${MV="mv -f"} : ${RM="rm -f"} : ${SHELL="${CONFIG_SHELL-/bin/sh}"} ## -------------------- ## ## Useful sed snippets. ## ## -------------------- ## sed_dirname='s|/[^/]*$||' sed_basename='s|^.*/||' # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='s|\([`"$\\]\)|\\\1|g' # Same as above, but do not quote variable references. sed_double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution that turns a string into a regex matching for the # string literally. sed_make_literal_regex='s|[].[^$\\*\/]|\\&|g' # Sed substitution that converts a w32 file name or path # that contains forward slashes, into one that contains # (escaped) backslashes. A very naive implementation. sed_naive_backslashify='s|\\\\*|\\|g;s|/|\\|g;s|\\|\\\\|g' # Re-'\' parameter expansions in output of sed_double_quote_subst that # were '\'-ed in input to the same. If an odd number of '\' preceded a # '$' in input to sed_double_quote_subst, that '$' was protected from # expansion. Since each input '\' is now two '\'s, look for any number # of runs of four '\'s followed by two '\'s and then a '$'. '\' that '$'. _G_bs='\\' _G_bs2='\\\\' _G_bs4='\\\\\\\\' _G_dollar='\$' sed_double_backslash="\ s/$_G_bs4/&\\ /g s/^$_G_bs2$_G_dollar/$_G_bs&/ s/\\([^$_G_bs]\\)$_G_bs2$_G_dollar/\\1$_G_bs2$_G_bs$_G_dollar/g s/\n//g" ## ----------------- ## ## Global variables. ## ## ----------------- ## # Except for the global variables explicitly listed below, the following # functions in the '^func_' namespace, and the '^require_' namespace # variables initialised in the 'Resource management' section, sourcing # this file will not pollute your global namespace with anything # else. There's no portable way to scope variables in Bourne shell # though, so actually running these functions will sometimes place # results into a variable named after the function, and often use # temporary variables in the '^_G_' namespace. If you are careful to # avoid using those namespaces casually in your sourcing script, things # should continue to work as you expect. And, of course, you can freely # overwrite any of the functions or variables defined here before # calling anything to customize them. EXIT_SUCCESS=0 EXIT_FAILURE=1 EXIT_MISMATCH=63 # $? = 63 is used to indicate version mismatch to missing. EXIT_SKIP=77 # $? = 77 is used to indicate a skipped test to automake. # Allow overriding, eg assuming that you follow the convention of # putting '$debug_cmd' at the start of all your functions, you can get # bash to show function call trace with: # # debug_cmd='eval echo "${FUNCNAME[0]} $*" >&2' bash your-script-name debug_cmd=${debug_cmd-":"} exit_cmd=: # By convention, finish your script with: # # exit $exit_status # # so that you can set exit_status to non-zero if you want to indicate # something went wrong during execution without actually bailing out at # the point of failure. exit_status=$EXIT_SUCCESS # Work around backward compatibility issue on IRIX 6.5. On IRIX 6.4+, sh # is ksh but when the shell is invoked as "sh" and the current value of # the _XPG environment variable is not equal to 1 (one), the special # positional parameter $0, within a function call, is the name of the # function. progpath=$0 # The name of this program. progname=`$ECHO "$progpath" |$SED "$sed_basename"` # Make sure we have an absolute progpath for reexecution: case $progpath in [\\/]*|[A-Za-z]:\\*) ;; *[\\/]*) progdir=`$ECHO "$progpath" |$SED "$sed_dirname"` progdir=`cd "$progdir" && pwd` progpath=$progdir/$progname ;; *) _G_IFS=$IFS IFS=${PATH_SEPARATOR-:} for progdir in $PATH; do IFS=$_G_IFS test -x "$progdir/$progname" && break done IFS=$_G_IFS test -n "$progdir" || progdir=`pwd` progpath=$progdir/$progname ;; esac ## ----------------- ## ## Standard options. ## ## ----------------- ## # The following options affect the operation of the functions defined # below, and should be set appropriately depending on run-time para- # meters passed on the command line. opt_dry_run=false opt_quiet=false opt_verbose=false # Categories 'all' and 'none' are always available. Append any others # you will pass as the first argument to func_warning from your own # code. warning_categories= # By default, display warnings according to 'opt_warning_types'. Set # 'warning_func' to ':' to elide all warnings, or func_fatal_error to # treat the next displayed warning as a fatal error. warning_func=func_warn_and_continue # Set to 'all' to display all warnings, 'none' to suppress all # warnings, or a space delimited list of some subset of # 'warning_categories' to display only the listed warnings. opt_warning_types=all ## -------------------- ## ## Resource management. ## ## -------------------- ## # This section contains definitions for functions that each ensure a # particular resource (a file, or a non-empty configuration variable for # example) is available, and if appropriate to extract default values # from pertinent package files. Call them using their associated # 'require_*' variable to ensure that they are executed, at most, once. # # It's entirely deliberate that calling these functions can set # variables that don't obey the namespace limitations obeyed by the rest # of this file, in order that that they be as useful as possible to # callers. # require_term_colors # ------------------- # Allow display of bold text on terminals that support it. require_term_colors=func_require_term_colors func_require_term_colors () { $debug_cmd test -t 1 && { # COLORTERM and USE_ANSI_COLORS environment variables take # precedence, because most terminfo databases neglect to describe # whether color sequences are supported. test -n "${COLORTERM+set}" && : ${USE_ANSI_COLORS="1"} if test 1 = "$USE_ANSI_COLORS"; then # Standard ANSI escape sequences tc_reset='' tc_bold=''; tc_standout='' tc_red=''; tc_green='' tc_blue=''; tc_cyan='' else # Otherwise trust the terminfo database after all. test -n "`tput sgr0 2>/dev/null`" && { tc_reset=`tput sgr0` test -n "`tput bold 2>/dev/null`" && tc_bold=`tput bold` tc_standout=$tc_bold test -n "`tput smso 2>/dev/null`" && tc_standout=`tput smso` test -n "`tput setaf 1 2>/dev/null`" && tc_red=`tput setaf 1` test -n "`tput setaf 2 2>/dev/null`" && tc_green=`tput setaf 2` test -n "`tput setaf 4 2>/dev/null`" && tc_blue=`tput setaf 4` test -n "`tput setaf 5 2>/dev/null`" && tc_cyan=`tput setaf 5` } fi } require_term_colors=: } ## ----------------- ## ## Function library. ## ## ----------------- ## # This section contains a variety of useful functions to call in your # scripts. Take note of the portable wrappers for features provided by # some modern shells, which will fall back to slower equivalents on # less featureful shells. # func_append VAR VALUE # --------------------- # Append VALUE onto the existing contents of VAR. # We should try to minimise forks, especially on Windows where they are # unreasonably slow, so skip the feature probes when bash or zsh are # being used: if test set = "${BASH_VERSION+set}${ZSH_VERSION+set}"; then : ${_G_HAVE_ARITH_OP="yes"} : ${_G_HAVE_XSI_OPS="yes"} # The += operator was introduced in bash 3.1 case $BASH_VERSION in [12].* | 3.0 | 3.0*) ;; *) : ${_G_HAVE_PLUSEQ_OP="yes"} ;; esac fi # _G_HAVE_PLUSEQ_OP # Can be empty, in which case the shell is probed, "yes" if += is # useable or anything else if it does not work. test -z "$_G_HAVE_PLUSEQ_OP" \ && (eval 'x=a; x+=" b"; test "a b" = "$x"') 2>/dev/null \ && _G_HAVE_PLUSEQ_OP=yes if test yes = "$_G_HAVE_PLUSEQ_OP" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_append () { $debug_cmd eval "$1+=\$2" }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_append () { $debug_cmd eval "$1=\$$1\$2" } fi # func_append_quoted VAR VALUE # ---------------------------- # Quote VALUE and append to the end of shell variable VAR, separated # by a space. if test yes = "$_G_HAVE_PLUSEQ_OP"; then eval 'func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1+=\\ \$func_quote_for_eval_result" }' else func_append_quoted () { $debug_cmd func_quote_for_eval "$2" eval "$1=\$$1\\ \$func_quote_for_eval_result" } fi # func_append_uniq VAR VALUE # -------------------------- # Append unique VALUE onto the existing contents of VAR, assuming # entries are delimited by the first character of VALUE. For example: # # func_append_uniq options " --another-option option-argument" # # will only append to $options if " --another-option option-argument " # is not already present somewhere in $options already (note spaces at # each end implied by leading space in second argument). func_append_uniq () { $debug_cmd eval _G_current_value='`$ECHO $'$1'`' _G_delim=`expr "$2" : '\(.\)'` case $_G_delim$_G_current_value$_G_delim in *"$2$_G_delim"*) ;; *) func_append "$@" ;; esac } # func_arith TERM... # ------------------ # Set func_arith_result to the result of evaluating TERMs. test -z "$_G_HAVE_ARITH_OP" \ && (eval 'test 2 = $(( 1 + 1 ))') 2>/dev/null \ && _G_HAVE_ARITH_OP=yes if test yes = "$_G_HAVE_ARITH_OP"; then eval 'func_arith () { $debug_cmd func_arith_result=$(( $* )) }' else func_arith () { $debug_cmd func_arith_result=`expr "$@"` } fi # func_basename FILE # ------------------ # Set func_basename_result to FILE with everything up to and including # the last / stripped. if test yes = "$_G_HAVE_XSI_OPS"; then # If this shell supports suffix pattern removal, then use it to avoid # forking. Hide the definitions single quotes in case the shell chokes # on unsupported syntax... _b='func_basename_result=${1##*/}' _d='case $1 in */*) func_dirname_result=${1%/*}$2 ;; * ) func_dirname_result=$3 ;; esac' else # ...otherwise fall back to using sed. _b='func_basename_result=`$ECHO "$1" |$SED "$sed_basename"`' _d='func_dirname_result=`$ECHO "$1" |$SED "$sed_dirname"` if test "X$func_dirname_result" = "X$1"; then func_dirname_result=$3 else func_append func_dirname_result "$2" fi' fi eval 'func_basename () { $debug_cmd '"$_b"' }' # func_dirname FILE APPEND NONDIR_REPLACEMENT # ------------------------------------------- # Compute the dirname of FILE. If nonempty, add APPEND to the result, # otherwise set result to NONDIR_REPLACEMENT. eval 'func_dirname () { $debug_cmd '"$_d"' }' # func_dirname_and_basename FILE APPEND NONDIR_REPLACEMENT # -------------------------------------------------------- # Perform func_basename and func_dirname in a single function # call: # dirname: Compute the dirname of FILE. If nonempty, # add APPEND to the result, otherwise set result # to NONDIR_REPLACEMENT. # value returned in "$func_dirname_result" # basename: Compute filename of FILE. # value retuned in "$func_basename_result" # For efficiency, we do not delegate to the functions above but instead # duplicate the functionality here. eval 'func_dirname_and_basename () { $debug_cmd '"$_b"' '"$_d"' }' # func_echo ARG... # ---------------- # Echo program name prefixed message. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname: $_G_line" done IFS=$func_echo_IFS } # func_echo_all ARG... # -------------------- # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } # func_echo_infix_1 INFIX ARG... # ------------------------------ # Echo program name, followed by INFIX on the first line, with any # additional lines not showing INFIX. func_echo_infix_1 () { $debug_cmd $require_term_colors _G_infix=$1; shift _G_indent=$_G_infix _G_prefix="$progname: $_G_infix: " _G_message=$* # Strip color escape sequences before counting printable length for _G_tc in "$tc_reset" "$tc_bold" "$tc_standout" "$tc_red" "$tc_green" "$tc_blue" "$tc_cyan" do test -n "$_G_tc" && { _G_esc_tc=`$ECHO "$_G_tc" | $SED "$sed_make_literal_regex"` _G_indent=`$ECHO "$_G_indent" | $SED "s|$_G_esc_tc||g"` } done _G_indent="$progname: "`echo "$_G_indent" | $SED 's|.| |g'`" " ## exclude from sc_prohibit_nested_quotes func_echo_infix_1_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_infix_1_IFS $ECHO "$_G_prefix$tc_bold$_G_line$tc_reset" >&2 _G_prefix=$_G_indent done IFS=$func_echo_infix_1_IFS } # func_error ARG... # ----------------- # Echo program name prefixed message to standard error. func_error () { $debug_cmd $require_term_colors func_echo_infix_1 " $tc_standout${tc_red}error$tc_reset" "$*" >&2 } # func_fatal_error ARG... # ----------------------- # Echo program name prefixed message to standard error, and exit. func_fatal_error () { $debug_cmd func_error "$*" exit $EXIT_FAILURE } # func_grep EXPRESSION FILENAME # ----------------------------- # Check whether EXPRESSION matches any line of FILENAME, without output. func_grep () { $debug_cmd $GREP "$1" "$2" >/dev/null 2>&1 } # func_len STRING # --------------- # Set func_len_result to the length of STRING. STRING may not # start with a hyphen. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_len () { $debug_cmd func_len_result=${#1} }' else func_len () { $debug_cmd func_len_result=`expr "$1" : ".*" 2>/dev/null || echo $max_cmd_len` } fi # func_mkdir_p DIRECTORY-PATH # --------------------------- # Make sure the entire path to DIRECTORY-PATH is available. func_mkdir_p () { $debug_cmd _G_directory_path=$1 _G_dir_list= if test -n "$_G_directory_path" && test : != "$opt_dry_run"; then # Protect directory names starting with '-' case $_G_directory_path in -*) _G_directory_path=./$_G_directory_path ;; esac # While some portion of DIR does not yet exist... while test ! -d "$_G_directory_path"; do # ...make a list in topmost first order. Use a colon delimited # list incase some portion of path contains whitespace. _G_dir_list=$_G_directory_path:$_G_dir_list # If the last portion added has no slash in it, the list is done case $_G_directory_path in */*) ;; *) break ;; esac # ...otherwise throw away the child directory and loop _G_directory_path=`$ECHO "$_G_directory_path" | $SED -e "$sed_dirname"` done _G_dir_list=`$ECHO "$_G_dir_list" | $SED 's|:*$||'` func_mkdir_p_IFS=$IFS; IFS=: for _G_dir in $_G_dir_list; do IFS=$func_mkdir_p_IFS # mkdir can fail with a 'File exist' error if two processes # try to create one of the directories concurrently. Don't # stop in that case! $MKDIR "$_G_dir" 2>/dev/null || : done IFS=$func_mkdir_p_IFS # Bail out if we (or some other process) failed to create a directory. test -d "$_G_directory_path" || \ func_fatal_error "Failed to create '$1'" fi } # func_mktempdir [BASENAME] # ------------------------- # Make a temporary directory that won't clash with other running # libtool processes, and avoids race conditions if possible. If # given, BASENAME is the basename for that directory. func_mktempdir () { $debug_cmd _G_template=${TMPDIR-/tmp}/${1-$progname} if test : = "$opt_dry_run"; then # Return a directory name, but don't create it in dry-run mode _G_tmpdir=$_G_template-$$ else # If mktemp works, use that first and foremost _G_tmpdir=`mktemp -d "$_G_template-XXXXXXXX" 2>/dev/null` if test ! -d "$_G_tmpdir"; then # Failing that, at least try and use $RANDOM to avoid a race _G_tmpdir=$_G_template-${RANDOM-0}$$ func_mktempdir_umask=`umask` umask 0077 $MKDIR "$_G_tmpdir" umask $func_mktempdir_umask fi # If we're not in dry-run mode, bomb out on failure test -d "$_G_tmpdir" || \ func_fatal_error "cannot create temporary directory '$_G_tmpdir'" fi $ECHO "$_G_tmpdir" } # func_normal_abspath PATH # ------------------------ # Remove doubled-up and trailing slashes, "." path components, # and cancel out any ".." path components in PATH after making # it an absolute path. func_normal_abspath () { $debug_cmd # These SED scripts presuppose an absolute path with a trailing slash. _G_pathcar='s|^/\([^/]*\).*$|\1|' _G_pathcdr='s|^/[^/]*||' _G_removedotparts=':dotsl s|/\./|/|g t dotsl s|/\.$|/|' _G_collapseslashes='s|/\{1,\}|/|g' _G_finalslash='s|/*$|/|' # Start from root dir and reassemble the path. func_normal_abspath_result= func_normal_abspath_tpath=$1 func_normal_abspath_altnamespace= case $func_normal_abspath_tpath in "") # Empty path, that just means $cwd. func_stripname '' '/' "`pwd`" func_normal_abspath_result=$func_stripname_result return ;; # The next three entries are used to spot a run of precisely # two leading slashes without using negated character classes; # we take advantage of case's first-match behaviour. ///*) # Unusual form of absolute path, do nothing. ;; //*) # Not necessarily an ordinary path; POSIX reserves leading '//' # and for example Cygwin uses it to access remote file shares # over CIFS/SMB, so we conserve a leading double slash if found. func_normal_abspath_altnamespace=/ ;; /*) # Absolute path, do nothing. ;; *) # Relative path, prepend $cwd. func_normal_abspath_tpath=`pwd`/$func_normal_abspath_tpath ;; esac # Cancel out all the simple stuff to save iterations. We also want # the path to end with a slash for ease of parsing, so make sure # there is one (and only one) here. func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_removedotparts" -e "$_G_collapseslashes" -e "$_G_finalslash"` while :; do # Processed it all yet? if test / = "$func_normal_abspath_tpath"; then # If we ascended to the root using ".." the result may be empty now. if test -z "$func_normal_abspath_result"; then func_normal_abspath_result=/ fi break fi func_normal_abspath_tcomponent=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcar"` func_normal_abspath_tpath=`$ECHO "$func_normal_abspath_tpath" | $SED \ -e "$_G_pathcdr"` # Figure out what to do with it case $func_normal_abspath_tcomponent in "") # Trailing empty path component, ignore it. ;; ..) # Parent dir; strip last assembled component from result. func_dirname "$func_normal_abspath_result" func_normal_abspath_result=$func_dirname_result ;; *) # Actual path component, append it. func_append func_normal_abspath_result "/$func_normal_abspath_tcomponent" ;; esac done # Restore leading double-slash if one was found on entry. func_normal_abspath_result=$func_normal_abspath_altnamespace$func_normal_abspath_result } # func_notquiet ARG... # -------------------- # Echo program name prefixed message only when not in quiet mode. func_notquiet () { $debug_cmd $opt_quiet || func_echo ${1+"$@"} # A bug in bash halts the script if the last line of a function # fails when set -e is in force, so we need another command to # work around that: : } # func_relative_path SRCDIR DSTDIR # -------------------------------- # Set func_relative_path_result to the relative path from SRCDIR to DSTDIR. func_relative_path () { $debug_cmd func_relative_path_result= func_normal_abspath "$1" func_relative_path_tlibdir=$func_normal_abspath_result func_normal_abspath "$2" func_relative_path_tbindir=$func_normal_abspath_result # Ascend the tree starting from libdir while :; do # check if we have found a prefix of bindir case $func_relative_path_tbindir in $func_relative_path_tlibdir) # found an exact match func_relative_path_tcancelled= break ;; $func_relative_path_tlibdir*) # found a matching prefix func_stripname "$func_relative_path_tlibdir" '' "$func_relative_path_tbindir" func_relative_path_tcancelled=$func_stripname_result if test -z "$func_relative_path_result"; then func_relative_path_result=. fi break ;; *) func_dirname $func_relative_path_tlibdir func_relative_path_tlibdir=$func_dirname_result if test -z "$func_relative_path_tlibdir"; then # Have to descend all the way to the root! func_relative_path_result=../$func_relative_path_result func_relative_path_tcancelled=$func_relative_path_tbindir break fi func_relative_path_result=../$func_relative_path_result ;; esac done # Now calculate path; take care to avoid doubling-up slashes. func_stripname '' '/' "$func_relative_path_result" func_relative_path_result=$func_stripname_result func_stripname '/' '/' "$func_relative_path_tcancelled" if test -n "$func_stripname_result"; then func_append func_relative_path_result "/$func_stripname_result" fi # Normalisation. If bindir is libdir, return '.' else relative path. if test -n "$func_relative_path_result"; then func_stripname './' '' "$func_relative_path_result" func_relative_path_result=$func_stripname_result fi test -n "$func_relative_path_result" || func_relative_path_result=. : } # func_quote_for_eval ARG... # -------------------------- # Aesthetically quote ARGs to be evaled later. # This function returns two values: # i) func_quote_for_eval_result # double-quoted, suitable for a subsequent eval # ii) func_quote_for_eval_unquoted_result # has all characters that are still active within double # quotes backslashified. func_quote_for_eval () { $debug_cmd func_quote_for_eval_unquoted_result= func_quote_for_eval_result= while test 0 -lt $#; do case $1 in *[\\\`\"\$]*) _G_unquoted_arg=`printf '%s\n' "$1" |$SED "$sed_quote_subst"` ;; *) _G_unquoted_arg=$1 ;; esac if test -n "$func_quote_for_eval_unquoted_result"; then func_append func_quote_for_eval_unquoted_result " $_G_unquoted_arg" else func_append func_quote_for_eval_unquoted_result "$_G_unquoted_arg" fi case $_G_unquoted_arg in # Double-quote args containing shell metacharacters to delay # word splitting, command substitution and variable expansion # for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_quoted_arg=\"$_G_unquoted_arg\" ;; *) _G_quoted_arg=$_G_unquoted_arg ;; esac if test -n "$func_quote_for_eval_result"; then func_append func_quote_for_eval_result " $_G_quoted_arg" else func_append func_quote_for_eval_result "$_G_quoted_arg" fi shift done } # func_quote_for_expand ARG # ------------------------- # Aesthetically quote ARG to be evaled later; same as above, # but do not quote variable references. func_quote_for_expand () { $debug_cmd case $1 in *[\\\`\"]*) _G_arg=`$ECHO "$1" | $SED \ -e "$sed_double_quote_subst" -e "$sed_double_backslash"` ;; *) _G_arg=$1 ;; esac case $_G_arg in # Double-quote args containing shell metacharacters to delay # word splitting and command substitution for a subsequent eval. # Many Bourne shells cannot handle close brackets correctly # in scan sets, so we specify it separately. *[\[\~\#\^\&\*\(\)\{\}\|\;\<\>\?\'\ \ ]*|*]*|"") _G_arg=\"$_G_arg\" ;; esac func_quote_for_expand_result=$_G_arg } # func_stripname PREFIX SUFFIX NAME # --------------------------------- # strip PREFIX and SUFFIX from NAME, and store in func_stripname_result. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_stripname () { $debug_cmd # pdksh 5.2.14 does not do ${X%$Y} correctly if both X and Y are # positional parameters, so assign one to ordinary variable first. func_stripname_result=$3 func_stripname_result=${func_stripname_result#"$1"} func_stripname_result=${func_stripname_result%"$2"} }' else func_stripname () { $debug_cmd case $2 in .*) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%\\\\$2\$%%"`;; *) func_stripname_result=`$ECHO "$3" | $SED -e "s%^$1%%" -e "s%$2\$%%"`;; esac } fi # func_show_eval CMD [FAIL_EXP] # ----------------------------- # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. func_show_eval () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} func_quote_for_expand "$_G_cmd" eval "func_notquiet $func_quote_for_expand_result" $opt_dry_run || { eval "$_G_cmd" _G_status=$? if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_show_eval_locale CMD [FAIL_EXP] # ------------------------------------ # Unless opt_quiet is true, then output CMD. Then, if opt_dryrun is # not true, evaluate CMD. If the evaluation of CMD fails, and FAIL_EXP # is given, then evaluate it. Use the saved locale for evaluation. func_show_eval_locale () { $debug_cmd _G_cmd=$1 _G_fail_exp=${2-':'} $opt_quiet || { func_quote_for_expand "$_G_cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || { eval "$_G_user_locale $_G_cmd" _G_status=$? eval "$_G_safe_locale" if test 0 -ne "$_G_status"; then eval "(exit $_G_status); $_G_fail_exp" fi } } # func_tr_sh # ---------- # Turn $1 into a string suitable for a shell variable name. # Result is stored in $func_tr_sh_result. All characters # not in the set a-zA-Z0-9_ are replaced with '_'. Further, # if $1 begins with a digit, a '_' is prepended as well. func_tr_sh () { $debug_cmd case $1 in [0-9]* | *[!a-zA-Z0-9_]*) func_tr_sh_result=`$ECHO "$1" | $SED -e 's/^\([0-9]\)/_\1/' -e 's/[^a-zA-Z0-9_]/_/g'` ;; * ) func_tr_sh_result=$1 ;; esac } # func_verbose ARG... # ------------------- # Echo program name prefixed message in verbose mode only. func_verbose () { $debug_cmd $opt_verbose && func_echo "$*" : } # func_warn_and_continue ARG... # ----------------------------- # Echo program name prefixed warning message to standard error. func_warn_and_continue () { $debug_cmd $require_term_colors func_echo_infix_1 "${tc_red}warning$tc_reset" "$*" >&2 } # func_warning CATEGORY ARG... # ---------------------------- # Echo program name prefixed warning message to standard error. Warning # messages can be filtered according to CATEGORY, where this function # elides messages where CATEGORY is not listed in the global variable # 'opt_warning_types'. func_warning () { $debug_cmd # CATEGORY must be in the warning_categories list! case " $warning_categories " in *" $1 "*) ;; *) func_internal_error "invalid warning category '$1'" ;; esac _G_category=$1 shift case " $opt_warning_types " in *" $_G_category "*) $warning_func ${1+"$@"} ;; esac } # func_sort_ver VER1 VER2 # ----------------------- # 'sort -V' is not generally available. # Note this deviates from the version comparison in automake # in that it treats 1.5 < 1.5.0, and treats 1.4.4a < 1.4-p3a # but this should suffice as we won't be specifying old # version formats or redundant trailing .0 in bootstrap.conf. # If we did want full compatibility then we should probably # use m4_version_compare from autoconf. func_sort_ver () { $debug_cmd printf '%s\n%s\n' "$1" "$2" \ | sort -t. -k 1,1n -k 2,2n -k 3,3n -k 4,4n -k 5,5n -k 6,6n -k 7,7n -k 8,8n -k 9,9n } # func_lt_ver PREV CURR # --------------------- # Return true if PREV and CURR are in the correct order according to # func_sort_ver, otherwise false. Use it like this: # # func_lt_ver "$prev_ver" "$proposed_ver" || func_fatal_error "..." func_lt_ver () { $debug_cmd test "x$1" = x`func_sort_ver "$1" "$2" | $SED 1q` } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: #! /bin/sh # Set a version string for this script. scriptversion=2014-01-07.03; # UTC # A portable, pluggable option parser for Bourne shell. # Written by Gary V. Vaughan, 2010 # Copyright (C) 2010-2015 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # Please report bugs or propose patches to gary@gnu.org. ## ------ ## ## Usage. ## ## ------ ## # This file is a library for parsing options in your shell scripts along # with assorted other useful supporting features that you can make use # of too. # # For the simplest scripts you might need only: # # #!/bin/sh # . relative/path/to/funclib.sh # . relative/path/to/options-parser # scriptversion=1.0 # func_options ${1+"$@"} # eval set dummy "$func_options_result"; shift # ...rest of your script... # # In order for the '--version' option to work, you will need to have a # suitably formatted comment like the one at the top of this file # starting with '# Written by ' and ending with '# warranty; '. # # For '-h' and '--help' to work, you will also need a one line # description of your script's purpose in a comment directly above the # '# Written by ' line, like the one at the top of this file. # # The default options also support '--debug', which will turn on shell # execution tracing (see the comment above debug_cmd below for another # use), and '--verbose' and the func_verbose function to allow your script # to display verbose messages only when your user has specified # '--verbose'. # # After sourcing this file, you can plug processing for additional # options by amending the variables from the 'Configuration' section # below, and following the instructions in the 'Option parsing' # section further down. ## -------------- ## ## Configuration. ## ## -------------- ## # You should override these variables in your script after sourcing this # file so that they reflect the customisations you have added to the # option parser. # The usage line for option parsing errors and the start of '-h' and # '--help' output messages. You can embed shell variables for delayed # expansion at the time the message is displayed, but you will need to # quote other shell meta-characters carefully to prevent them being # expanded when the contents are evaled. usage='$progpath [OPTION]...' # Short help message in response to '-h' and '--help'. Add to this or # override it after sourcing this library to reflect the full set of # options your script accepts. usage_message="\ --debug enable verbose shell tracing -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -v, --verbose verbosely report processing --version print version information and exit -h, --help print short or long help message and exit " # Additional text appended to 'usage_message' in response to '--help'. long_help_message=" Warning categories include: 'all' show all warnings 'none' turn off all the warnings 'error' warnings are treated as fatal errors" # Help message printed before fatal option parsing errors. fatal_help="Try '\$progname --help' for more information." ## ------------------------- ## ## Hook function management. ## ## ------------------------- ## # This section contains functions for adding, removing, and running hooks # to the main code. A hook is just a named list of of function, that can # be run in order later on. # func_hookable FUNC_NAME # ----------------------- # Declare that FUNC_NAME will run hooks added with # 'func_add_hook FUNC_NAME ...'. func_hookable () { $debug_cmd func_append hookable_fns " $1" } # func_add_hook FUNC_NAME HOOK_FUNC # --------------------------------- # Request that FUNC_NAME call HOOK_FUNC before it returns. FUNC_NAME must # first have been declared "hookable" by a call to 'func_hookable'. func_add_hook () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not accept hook functions." ;; esac eval func_append ${1}_hooks '" $2"' } # func_remove_hook FUNC_NAME HOOK_FUNC # ------------------------------------ # Remove HOOK_FUNC from the list of functions called by FUNC_NAME. func_remove_hook () { $debug_cmd eval ${1}_hooks='`$ECHO "\$'$1'_hooks" |$SED "s| '$2'||"`' } # func_run_hooks FUNC_NAME [ARG]... # --------------------------------- # Run all hook functions registered to FUNC_NAME. # It is assumed that the list of hook functions contains nothing more # than a whitespace-delimited list of legal shell function names, and # no effort is wasted trying to catch shell meta-characters or preserve # whitespace. func_run_hooks () { $debug_cmd case " $hookable_fns " in *" $1 "*) ;; *) func_fatal_error "'$1' does not support hook funcions.n" ;; esac eval _G_hook_fns=\$$1_hooks; shift for _G_hook in $_G_hook_fns; do eval $_G_hook '"$@"' # store returned options list back into positional # parameters for next 'cmd' execution. eval _G_hook_result=\$${_G_hook}_result eval set dummy "$_G_hook_result"; shift done func_quote_for_eval ${1+"$@"} func_run_hooks_result=$func_quote_for_eval_result } ## --------------- ## ## Option parsing. ## ## --------------- ## # In order to add your own option parsing hooks, you must accept the # full positional parameter list in your hook function, remove any # options that you action, and then pass back the remaining unprocessed # options in '<hooked_function_name>_result', escaped suitably for # 'eval'. Like this: # # my_options_prep () # { # $debug_cmd # # # Extend the existing usage message. # usage_message=$usage_message' # -s, --silent don'\''t print informational messages # ' # # func_quote_for_eval ${1+"$@"} # my_options_prep_result=$func_quote_for_eval_result # } # func_add_hook func_options_prep my_options_prep # # # my_silent_option () # { # $debug_cmd # # # Note that for efficiency, we parse as many options as we can # # recognise in a loop before passing the remainder back to the # # caller on the first unrecognised argument we encounter. # while test $# -gt 0; do # opt=$1; shift # case $opt in # --silent|-s) opt_silent=: ;; # # Separate non-argument short options: # -s*) func_split_short_opt "$_G_opt" # set dummy "$func_split_short_opt_name" \ # "-$func_split_short_opt_arg" ${1+"$@"} # shift # ;; # *) set dummy "$_G_opt" "$*"; shift; break ;; # esac # done # # func_quote_for_eval ${1+"$@"} # my_silent_option_result=$func_quote_for_eval_result # } # func_add_hook func_parse_options my_silent_option # # # my_option_validation () # { # $debug_cmd # # $opt_silent && $opt_verbose && func_fatal_help "\ # '--silent' and '--verbose' options are mutually exclusive." # # func_quote_for_eval ${1+"$@"} # my_option_validation_result=$func_quote_for_eval_result # } # func_add_hook func_validate_options my_option_validation # # You'll alse need to manually amend $usage_message to reflect the extra # options you parse. It's preferable to append if you can, so that # multiple option parsing hooks can be added safely. # func_options [ARG]... # --------------------- # All the functions called inside func_options are hookable. See the # individual implementations for details. func_hookable func_options func_options () { $debug_cmd func_options_prep ${1+"$@"} eval func_parse_options \ ${func_options_prep_result+"$func_options_prep_result"} eval func_validate_options \ ${func_parse_options_result+"$func_parse_options_result"} eval func_run_hooks func_options \ ${func_validate_options_result+"$func_validate_options_result"} # save modified positional parameters for caller func_options_result=$func_run_hooks_result } # func_options_prep [ARG]... # -------------------------- # All initialisations required before starting the option parse loop. # Note that when calling hook functions, we pass through the list of # positional parameters. If a hook function modifies that list, and # needs to propogate that back to rest of this script, then the complete # modified list must be put in 'func_run_hooks_result' before # returning. func_hookable func_options_prep func_options_prep () { $debug_cmd # Option defaults: opt_verbose=false opt_warning_types= func_run_hooks func_options_prep ${1+"$@"} # save modified positional parameters for caller func_options_prep_result=$func_run_hooks_result } # func_parse_options [ARG]... # --------------------------- # The main option parsing loop. func_hookable func_parse_options func_parse_options () { $debug_cmd func_parse_options_result= # this just eases exit handling while test $# -gt 0; do # Defer to hook functions for initial option parsing, so they # get priority in the event of reusing an option name. func_run_hooks func_parse_options ${1+"$@"} # Adjust func_parse_options positional parameters to match eval set dummy "$func_run_hooks_result"; shift # Break out of the loop if we already parsed every option. test $# -gt 0 || break _G_opt=$1 shift case $_G_opt in --debug|-x) debug_cmd='set -x' func_echo "enabling shell trace mode" $debug_cmd ;; --no-warnings|--no-warning|--no-warn) set dummy --warnings none ${1+"$@"} shift ;; --warnings|--warning|-W) test $# = 0 && func_missing_arg $_G_opt && break case " $warning_categories $1" in *" $1 "*) # trailing space prevents matching last $1 above func_append_uniq opt_warning_types " $1" ;; *all) opt_warning_types=$warning_categories ;; *none) opt_warning_types=none warning_func=: ;; *error) opt_warning_types=$warning_categories warning_func=func_fatal_error ;; *) func_fatal_error \ "unsupported warning category: '$1'" ;; esac shift ;; --verbose|-v) opt_verbose=: ;; --version) func_version ;; -\?|-h) func_usage ;; --help) func_help ;; # Separate optargs to long options (plugins may need this): --*=*) func_split_equals "$_G_opt" set dummy "$func_split_equals_lhs" \ "$func_split_equals_rhs" ${1+"$@"} shift ;; # Separate optargs to short options: -W*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "$func_split_short_opt_arg" ${1+"$@"} shift ;; # Separate non-argument short options: -\?*|-h*|-v*|-x*) func_split_short_opt "$_G_opt" set dummy "$func_split_short_opt_name" \ "-$func_split_short_opt_arg" ${1+"$@"} shift ;; --) break ;; -*) func_fatal_help "unrecognised option: '$_G_opt'" ;; *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} func_parse_options_result=$func_quote_for_eval_result } # func_validate_options [ARG]... # ------------------------------ # Perform any sanity checks on option settings and/or unconsumed # arguments. func_hookable func_validate_options func_validate_options () { $debug_cmd # Display all warnings if -W was not given. test -n "$opt_warning_types" || opt_warning_types=" $warning_categories" func_run_hooks func_validate_options ${1+"$@"} # Bail if the options were screwed! $exit_cmd $EXIT_FAILURE # save modified positional parameters for caller func_validate_options_result=$func_run_hooks_result } ## ----------------- ## ## Helper functions. ## ## ----------------- ## # This section contains the helper functions used by the rest of the # hookable option parser framework in ascii-betical order. # func_fatal_help ARG... # ---------------------- # Echo program name prefixed message to standard error, followed by # a help hint, and exit. func_fatal_help () { $debug_cmd eval \$ECHO \""Usage: $usage"\" eval \$ECHO \""$fatal_help"\" func_error ${1+"$@"} exit $EXIT_FAILURE } # func_help # --------- # Echo long help message to standard output and exit. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message" exit 0 } # func_missing_arg ARGNAME # ------------------------ # Echo program name prefixed message to standard error and set global # exit_cmd. func_missing_arg () { $debug_cmd func_error "Missing argument for '$1'." exit_cmd=exit } # func_split_equals STRING # ------------------------ # Set func_split_equals_lhs and func_split_equals_rhs shell variables after # splitting STRING at the '=' sign. test -z "$_G_HAVE_XSI_OPS" \ && (eval 'x=a/b/c; test 5aa/bb/cc = "${#x}${x%%/*}${x%/*}${x#*/}${x##*/}"') 2>/dev/null \ && _G_HAVE_XSI_OPS=yes if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_equals () { $debug_cmd func_split_equals_lhs=${1%%=*} func_split_equals_rhs=${1#*=} test "x$func_split_equals_lhs" = "x$1" \ && func_split_equals_rhs= }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_equals () { $debug_cmd func_split_equals_lhs=`expr "x$1" : 'x\([^=]*\)'` func_split_equals_rhs= test "x$func_split_equals_lhs" = "x$1" \ || func_split_equals_rhs=`expr "x$1" : 'x[^=]*=\(.*\)$'` } fi #func_split_equals # func_split_short_opt SHORTOPT # ----------------------------- # Set func_split_short_opt_name and func_split_short_opt_arg shell # variables after splitting SHORTOPT after the 2nd character. if test yes = "$_G_HAVE_XSI_OPS" then # This is an XSI compatible shell, allowing a faster implementation... eval 'func_split_short_opt () { $debug_cmd func_split_short_opt_arg=${1#??} func_split_short_opt_name=${1%"$func_split_short_opt_arg"} }' else # ...otherwise fall back to using expr, which is often a shell builtin. func_split_short_opt () { $debug_cmd func_split_short_opt_name=`expr "x$1" : 'x-\(.\)'` func_split_short_opt_arg=`expr "x$1" : 'x-.\(.*\)$'` } fi #func_split_short_opt # func_usage # ---------- # Echo short help message to standard output and exit. func_usage () { $debug_cmd func_usage_message $ECHO "Run '$progname --help |${PAGER-more}' for full usage" exit 0 } # func_usage_message # ------------------ # Echo short help message to standard output. func_usage_message () { $debug_cmd eval \$ECHO \""Usage: $usage"\" echo $SED -n 's|^# || /^Written by/{ x;p;x } h /^Written by/q' < "$progpath" echo eval \$ECHO \""$usage_message"\" } # func_version # ------------ # Echo version message to standard output and exit. func_version () { $debug_cmd printf '%s\n' "$progname $scriptversion" $SED -n ' /(C)/!b go :more /\./!{ N s|\n# | | b more } :go /^# Written by /,/# warranty; / { s|^# || s|^# *$|| s|\((C)\)[ 0-9,-]*[ ,-]\([1-9][0-9]* \)|\1 \2| p } /^# Written by / { s|^# || p } /^warranty; /q' < "$progpath" exit $? } # Local variables: # mode: shell-script # sh-indentation: 2 # eval: (add-hook 'before-save-hook 'time-stamp) # time-stamp-pattern: "10/scriptversion=%:y-%02m-%02d.%02H; # UTC" # time-stamp-time-zone: "UTC" # End: # Set a version string. scriptversion='(GNU libtool) 2.4.6' # func_echo ARG... # ---------------- # Libtool also displays the current mode in messages, so override # funclib.sh func_echo with this custom definition. func_echo () { $debug_cmd _G_message=$* func_echo_IFS=$IFS IFS=$nl for _G_line in $_G_message; do IFS=$func_echo_IFS $ECHO "$progname${opt_mode+: $opt_mode}: $_G_line" done IFS=$func_echo_IFS } # func_warning ARG... # ------------------- # Libtool warnings are not categorized, so override funclib.sh # func_warning with this simpler definition. func_warning () { $debug_cmd $warning_func ${1+"$@"} } ## ---------------- ## ## Options parsing. ## ## ---------------- ## # Hook in the functions to make sure our own options are parsed during # the option parsing loop. usage='$progpath [OPTION]... [MODE-ARG]...' # Short help message in response to '-h'. usage_message="Options: --config show all configuration variables --debug enable verbose shell tracing -n, --dry-run display commands without modifying any files --features display basic configuration information and exit --mode=MODE use operation mode MODE --no-warnings equivalent to '-Wnone' --preserve-dup-deps don't remove duplicate dependency libraries --quiet, --silent don't print informational messages --tag=TAG use configuration variables from tag TAG -v, --verbose print more informational messages than default --version print version information -W, --warnings=CATEGORY report the warnings falling in CATEGORY [all] -h, --help, --help-all print short, long, or detailed help message " # Additional text appended to 'usage_message' in response to '--help'. func_help () { $debug_cmd func_usage_message $ECHO "$long_help_message MODE must be one of the following: clean remove files from the build directory compile compile a source file into a libtool object execute automatically set library path, then run a program finish complete the installation of libtool libraries install install libraries or executables link create a library or an executable uninstall remove libraries from an installed directory MODE-ARGS vary depending on the MODE. When passed as first option, '--mode=MODE' may be abbreviated as 'MODE' or a unique abbreviation of that. Try '$progname --help --mode=MODE' for a more detailed description of MODE. When reporting a bug, please describe a test case to reproduce it and include the following information: host-triplet: $host shell: $SHELL compiler: $LTCC compiler flags: $LTCFLAGS linker: $LD (gnu? $with_gnu_ld) version: $progname $scriptversion Debian-2.4.6-2 automake: `($AUTOMAKE --version) 2>/dev/null |$SED 1q` autoconf: `($AUTOCONF --version) 2>/dev/null |$SED 1q` Report bugs to <bug-libtool@gnu.org>. GNU libtool home page: <http://www.gnu.org/s/libtool/>. General help using GNU software: <http://www.gnu.org/gethelp/>." exit 0 } # func_lo2o OBJECT-NAME # --------------------- # Transform OBJECT-NAME from a '.lo' suffix to the platform specific # object suffix. lo2o=s/\\.lo\$/.$objext/ o2lo=s/\\.$objext\$/.lo/ if test yes = "$_G_HAVE_XSI_OPS"; then eval 'func_lo2o () { case $1 in *.lo) func_lo2o_result=${1%.lo}.$objext ;; * ) func_lo2o_result=$1 ;; esac }' # func_xform LIBOBJ-OR-SOURCE # --------------------------- # Transform LIBOBJ-OR-SOURCE from a '.o' or '.c' (or otherwise) # suffix to a '.lo' libtool-object suffix. eval 'func_xform () { func_xform_result=${1%.*}.lo }' else # ...otherwise fall back to using sed. func_lo2o () { func_lo2o_result=`$ECHO "$1" | $SED "$lo2o"` } func_xform () { func_xform_result=`$ECHO "$1" | $SED 's|\.[^.]*$|.lo|'` } fi # func_fatal_configuration ARG... # ------------------------------- # Echo program name prefixed message to standard error, followed by # a configuration failure hint, and exit. func_fatal_configuration () { func__fatal_error ${1+"$@"} \ "See the $PACKAGE documentation for more information." \ "Fatal configuration error." } # func_config # ----------- # Display the configuration for all the tags in this script. func_config () { re_begincf='^# ### BEGIN LIBTOOL' re_endcf='^# ### END LIBTOOL' # Default configuration. $SED "1,/$re_begincf CONFIG/d;/$re_endcf CONFIG/,\$d" < "$progpath" # Now print the configurations for the tags. for tagname in $taglist; do $SED -n "/$re_begincf TAG CONFIG: $tagname\$/,/$re_endcf TAG CONFIG: $tagname\$/p" < "$progpath" done exit $? } # func_features # ------------- # Display the features supported by this script. func_features () { echo "host: $host" if test yes = "$build_libtool_libs"; then echo "enable shared libraries" else echo "disable shared libraries" fi if test yes = "$build_old_libs"; then echo "enable static libraries" else echo "disable static libraries" fi exit $? } # func_enable_tag TAGNAME # ----------------------- # Verify that TAGNAME is valid, and either flag an error and exit, or # enable the TAGNAME tag. We also add TAGNAME to the global $taglist # variable here. func_enable_tag () { # Global variable: tagname=$1 re_begincf="^# ### BEGIN LIBTOOL TAG CONFIG: $tagname\$" re_endcf="^# ### END LIBTOOL TAG CONFIG: $tagname\$" sed_extractcf=/$re_begincf/,/$re_endcf/p # Validate tagname. case $tagname in *[!-_A-Za-z0-9,/]*) func_fatal_error "invalid tag name: $tagname" ;; esac # Don't test for the "default" C tag, as we know it's # there but not specially marked. case $tagname in CC) ;; *) if $GREP "$re_begincf" "$progpath" >/dev/null 2>&1; then taglist="$taglist $tagname" # Evaluate the configuration. Be careful to quote the path # and the sed script, to avoid splitting on whitespace, but # also don't use non-portable quotes within backquotes within # quotes we have to do it in 2 steps: extractedcf=`$SED -n -e "$sed_extractcf" < "$progpath"` eval "$extractedcf" else func_error "ignoring unknown tag $tagname" fi ;; esac } # func_check_version_match # ------------------------ # Ensure that we are using m4 macros, and libtool script from the same # release of libtool. func_check_version_match () { if test "$package_revision" != "$macro_revision"; then if test "$VERSION" != "$macro_version"; then if test -z "$macro_version"; then cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from an older release. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, but the $progname: definition of this LT_INIT comes from $PACKAGE $macro_version. $progname: You should recreate aclocal.m4 with macros from $PACKAGE $VERSION $progname: and run autoconf again. _LT_EOF fi else cat >&2 <<_LT_EOF $progname: Version mismatch error. This is $PACKAGE $VERSION, revision $package_revision, $progname: but the definition of this LT_INIT comes from revision $macro_revision. $progname: You should recreate aclocal.m4 with macros from revision $package_revision $progname: of $PACKAGE $VERSION and run autoconf again. _LT_EOF fi exit $EXIT_MISMATCH fi } # libtool_options_prep [ARG]... # ----------------------------- # Preparation for options parsed by libtool. libtool_options_prep () { $debug_mode # Option defaults: opt_config=false opt_dlopen= opt_dry_run=false opt_help=false opt_mode= opt_preserve_dup_deps=false opt_quiet=false nonopt= preserve_args= # Shorthand for --mode=foo, only valid as the first argument case $1 in clean|clea|cle|cl) shift; set dummy --mode clean ${1+"$@"}; shift ;; compile|compil|compi|comp|com|co|c) shift; set dummy --mode compile ${1+"$@"}; shift ;; execute|execut|execu|exec|exe|ex|e) shift; set dummy --mode execute ${1+"$@"}; shift ;; finish|finis|fini|fin|fi|f) shift; set dummy --mode finish ${1+"$@"}; shift ;; install|instal|insta|inst|ins|in|i) shift; set dummy --mode install ${1+"$@"}; shift ;; link|lin|li|l) shift; set dummy --mode link ${1+"$@"}; shift ;; uninstall|uninstal|uninsta|uninst|unins|unin|uni|un|u) shift; set dummy --mode uninstall ${1+"$@"}; shift ;; esac # Pass back the list of options. func_quote_for_eval ${1+"$@"} libtool_options_prep_result=$func_quote_for_eval_result } func_add_hook func_options_prep libtool_options_prep # libtool_parse_options [ARG]... # --------------------------------- # Provide handling for libtool specific options. libtool_parse_options () { $debug_cmd # Perform our own loop to consume as many options as possible in # each iteration. while test $# -gt 0; do _G_opt=$1 shift case $_G_opt in --dry-run|--dryrun|-n) opt_dry_run=: ;; --config) func_config ;; --dlopen|-dlopen) opt_dlopen="${opt_dlopen+$opt_dlopen }$1" shift ;; --preserve-dup-deps) opt_preserve_dup_deps=: ;; --features) func_features ;; --finish) set dummy --mode finish ${1+"$@"}; shift ;; --help) opt_help=: ;; --help-all) opt_help=': help-all' ;; --mode) test $# = 0 && func_missing_arg $_G_opt && break opt_mode=$1 case $1 in # Valid mode arguments: clean|compile|execute|finish|install|link|relink|uninstall) ;; # Catch anything else as an error *) func_error "invalid argument for $_G_opt" exit_cmd=exit break ;; esac shift ;; --no-silent|--no-quiet) opt_quiet=false func_append preserve_args " $_G_opt" ;; --no-warnings|--no-warning|--no-warn) opt_warning=false func_append preserve_args " $_G_opt" ;; --no-verbose) opt_verbose=false func_append preserve_args " $_G_opt" ;; --silent|--quiet) opt_quiet=: opt_verbose=false func_append preserve_args " $_G_opt" ;; --tag) test $# = 0 && func_missing_arg $_G_opt && break opt_tag=$1 func_append preserve_args " $_G_opt $1" func_enable_tag "$1" shift ;; --verbose|-v) opt_quiet=false opt_verbose=: func_append preserve_args " $_G_opt" ;; # An option not handled by this hook function: *) set dummy "$_G_opt" ${1+"$@"}; shift; break ;; esac done # save modified positional parameters for caller func_quote_for_eval ${1+"$@"} libtool_parse_options_result=$func_quote_for_eval_result } func_add_hook func_parse_options libtool_parse_options # libtool_validate_options [ARG]... # --------------------------------- # Perform any sanity checks on option settings and/or unconsumed # arguments. libtool_validate_options () { # save first non-option argument if test 0 -lt $#; then nonopt=$1 shift fi # preserve --debug test : = "$debug_cmd" || func_append preserve_args " --debug" case $host in # Solaris2 added to fix http://debbugs.gnu.org/cgi/bugreport.cgi?bug=16452 # see also: http://gcc.gnu.org/bugzilla/show_bug.cgi?id=59788 *cygwin* | *mingw* | *pw32* | *cegcc* | *solaris2* | *os2*) # don't eliminate duplications in $postdeps and $predeps opt_duplicate_compiler_generated_deps=: ;; *) opt_duplicate_compiler_generated_deps=$opt_preserve_dup_deps ;; esac $opt_help || { # Sanity checks first: func_check_version_match test yes != "$build_libtool_libs" \ && test yes != "$build_old_libs" \ && func_fatal_configuration "not configured to build any kind of library" # Darwin sucks eval std_shrext=\"$shrext_cmds\" # Only execute mode is allowed to have -dlopen flags. if test -n "$opt_dlopen" && test execute != "$opt_mode"; then func_error "unrecognized option '-dlopen'" $ECHO "$help" 1>&2 exit $EXIT_FAILURE fi # Change the help message to a mode-specific one. generic_help=$help help="Try '$progname --help --mode=$opt_mode' for more information." } # Pass back the unparsed argument list func_quote_for_eval ${1+"$@"} libtool_validate_options_result=$func_quote_for_eval_result } func_add_hook func_validate_options libtool_validate_options # Process options as early as possible so that --help and --version # can return quickly. func_options ${1+"$@"} eval set dummy "$func_options_result"; shift ## ----------- ## ## Main. ## ## ----------- ## magic='%%%MAGIC variable%%%' magic_exe='%%%MAGIC EXE variable%%%' # Global variables. extracted_archives= extracted_serial=0 # If this variable is set in any of the actions, the command in it # will be execed at the end. This prevents here-documents from being # left over by shells. exec_cmd= # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } # func_generated_by_libtool # True iff stdin has been generated by Libtool. This function is only # a basic sanity check; it will hardly flush out determined imposters. func_generated_by_libtool_p () { $GREP "^# Generated by .*$PACKAGE" > /dev/null 2>&1 } # func_lalib_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_lalib_p () { test -f "$1" && $SED -e 4q "$1" 2>/dev/null | func_generated_by_libtool_p } # func_lalib_unsafe_p file # True iff FILE is a libtool '.la' library or '.lo' object file. # This function implements the same check as func_lalib_p without # resorting to external programs. To this end, it redirects stdin and # closes it afterwards, without saving the original file descriptor. # As a safety measure, use it only where a negative result would be # fatal anyway. Works if 'file' does not exist. func_lalib_unsafe_p () { lalib_p=no if test -f "$1" && test -r "$1" && exec 5<&0 <"$1"; then for lalib_p_l in 1 2 3 4 do read lalib_p_line case $lalib_p_line in \#\ Generated\ by\ *$PACKAGE* ) lalib_p=yes; break;; esac done exec 0<&5 5<&- fi test yes = "$lalib_p" } # func_ltwrapper_script_p file # True iff FILE is a libtool wrapper script # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_script_p () { test -f "$1" && $lt_truncate_bin < "$1" 2>/dev/null | func_generated_by_libtool_p } # func_ltwrapper_executable_p file # True iff FILE is a libtool wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_executable_p () { func_ltwrapper_exec_suffix= case $1 in *.exe) ;; *) func_ltwrapper_exec_suffix=.exe ;; esac $GREP "$magic_exe" "$1$func_ltwrapper_exec_suffix" >/dev/null 2>&1 } # func_ltwrapper_scriptname file # Assumes file is an ltwrapper_executable # uses $file to determine the appropriate filename for a # temporary ltwrapper_script. func_ltwrapper_scriptname () { func_dirname_and_basename "$1" "" "." func_stripname '' '.exe' "$func_basename_result" func_ltwrapper_scriptname_result=$func_dirname_result/$objdir/${func_stripname_result}_ltshwrapper } # func_ltwrapper_p file # True iff FILE is a libtool wrapper script or wrapper executable # This function is only a basic sanity check; it will hardly flush out # determined imposters. func_ltwrapper_p () { func_ltwrapper_script_p "$1" || func_ltwrapper_executable_p "$1" } # func_execute_cmds commands fail_cmd # Execute tilde-delimited COMMANDS. # If FAIL_CMD is given, eval that upon failure. # FAIL_CMD may read-access the current command in variable CMD! func_execute_cmds () { $debug_cmd save_ifs=$IFS; IFS='~' for cmd in $1; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs func_show_eval "$cmd" "${2-:}" done IFS=$save_ifs } # func_source file # Source FILE, adding directory component if necessary. # Note that it is not necessary on cygwin/mingw to append a dot to # FILE even if both FILE and FILE.exe exist: automatic-append-.exe # behavior happens only for exec(3), not for open(2)! Also, sourcing # 'FILE.' does not work on cygwin managed mounts. func_source () { $debug_cmd case $1 in */* | *\\*) . "$1" ;; *) . "./$1" ;; esac } # func_resolve_sysroot PATH # Replace a leading = in PATH with a sysroot. Store the result into # func_resolve_sysroot_result func_resolve_sysroot () { func_resolve_sysroot_result=$1 case $func_resolve_sysroot_result in =*) func_stripname '=' '' "$func_resolve_sysroot_result" func_resolve_sysroot_result=$lt_sysroot$func_stripname_result ;; esac } # func_replace_sysroot PATH # If PATH begins with the sysroot, replace it with = and # store the result into func_replace_sysroot_result. func_replace_sysroot () { case $lt_sysroot:$1 in ?*:"$lt_sysroot"*) func_stripname "$lt_sysroot" '' "$1" func_replace_sysroot_result='='$func_stripname_result ;; *) # Including no sysroot. func_replace_sysroot_result=$1 ;; esac } # func_infer_tag arg # Infer tagged configuration to use if any are available and # if one wasn't chosen via the "--tag" command line option. # Only attempt this if the compiler in the base compile # command doesn't match the default compiler. # arg is usually of the form 'gcc ...' func_infer_tag () { $debug_cmd if test -n "$available_tags" && test -z "$tagname"; then CC_quoted= for arg in $CC; do func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case $@ in # Blanks in the command may have been stripped by the calling shell, # but not from the CC environment variable when configure was run. " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) ;; # Blanks at the start of $base_compile will cause this to fail # if we don't check for them as well. *) for z in $available_tags; do if $GREP "^# ### BEGIN LIBTOOL TAG CONFIG: $z$" < "$progpath" > /dev/null; then # Evaluate the configuration. eval "`$SED -n -e '/^# ### BEGIN LIBTOOL TAG CONFIG: '$z'$/,/^# ### END LIBTOOL TAG CONFIG: '$z'$/p' < $progpath`" CC_quoted= for arg in $CC; do # Double-quote args containing other shell metacharacters. func_append_quoted CC_quoted "$arg" done CC_expanded=`func_echo_all $CC` CC_quoted_expanded=`func_echo_all $CC_quoted` case "$@ " in " $CC "* | "$CC "* | " $CC_expanded "* | "$CC_expanded "* | \ " $CC_quoted"* | "$CC_quoted "* | " $CC_quoted_expanded "* | "$CC_quoted_expanded "*) # The compiler in the base compile command matches # the one in the tagged configuration. # Assume this is the tagged configuration we want. tagname=$z break ;; esac fi done # If $tagname still isn't set, then no tagged configuration # was found and let the user know that the "--tag" command # line option must be used. if test -z "$tagname"; then func_echo "unable to infer tagged configuration" func_fatal_error "specify a tag with '--tag'" # else # func_verbose "using $tagname tagged configuration" fi ;; esac fi } # func_write_libtool_object output_name pic_name nonpic_name # Create a libtool object file (analogous to a ".la" file), # but don't create it if we're doing a dry run. func_write_libtool_object () { write_libobj=$1 if test yes = "$build_libtool_libs"; then write_lobj=\'$2\' else write_lobj=none fi if test yes = "$build_old_libs"; then write_oldobj=\'$3\' else write_oldobj=none fi $opt_dry_run || { cat >${write_libobj}T <<EOF # $write_libobj - a libtool object file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # Name of the PIC object. pic_object=$write_lobj # Name of the non-PIC object non_pic_object=$write_oldobj EOF $MV "${write_libobj}T" "$write_libobj" } } ################################################## # FILE NAME AND PATH CONVERSION HELPER FUNCTIONS # ################################################## # func_convert_core_file_wine_to_w32 ARG # Helper function used by file name conversion functions when $build is *nix, # and $host is mingw, cygwin, or some other w32 environment. Relies on a # correctly configured wine environment available, with the winepath program # in $build's $PATH. # # ARG is the $build file name to be converted to w32 format. # Result is available in $func_convert_core_file_wine_to_w32_result, and will # be empty on error (or when ARG is empty) func_convert_core_file_wine_to_w32 () { $debug_cmd func_convert_core_file_wine_to_w32_result=$1 if test -n "$1"; then # Unfortunately, winepath does not exit with a non-zero error code, so we # are forced to check the contents of stdout. On the other hand, if the # command is not found, the shell will set an exit code of 127 and print # *an error message* to stdout. So we must check for both error code of # zero AND non-empty stdout, which explains the odd construction: func_convert_core_file_wine_to_w32_tmp=`winepath -w "$1" 2>/dev/null` if test "$?" -eq 0 && test -n "$func_convert_core_file_wine_to_w32_tmp"; then func_convert_core_file_wine_to_w32_result=`$ECHO "$func_convert_core_file_wine_to_w32_tmp" | $SED -e "$sed_naive_backslashify"` else func_convert_core_file_wine_to_w32_result= fi fi } # end: func_convert_core_file_wine_to_w32 # func_convert_core_path_wine_to_w32 ARG # Helper function used by path conversion functions when $build is *nix, and # $host is mingw, cygwin, or some other w32 environment. Relies on a correctly # configured wine environment available, with the winepath program in $build's # $PATH. Assumes ARG has no leading or trailing path separator characters. # # ARG is path to be converted from $build format to win32. # Result is available in $func_convert_core_path_wine_to_w32_result. # Unconvertible file (directory) names in ARG are skipped; if no directory names # are convertible, then the result may be empty. func_convert_core_path_wine_to_w32 () { $debug_cmd # unfortunately, winepath doesn't convert paths, only file names func_convert_core_path_wine_to_w32_result= if test -n "$1"; then oldIFS=$IFS IFS=: for func_convert_core_path_wine_to_w32_f in $1; do IFS=$oldIFS func_convert_core_file_wine_to_w32 "$func_convert_core_path_wine_to_w32_f" if test -n "$func_convert_core_file_wine_to_w32_result"; then if test -z "$func_convert_core_path_wine_to_w32_result"; then func_convert_core_path_wine_to_w32_result=$func_convert_core_file_wine_to_w32_result else func_append func_convert_core_path_wine_to_w32_result ";$func_convert_core_file_wine_to_w32_result" fi fi done IFS=$oldIFS fi } # end: func_convert_core_path_wine_to_w32 # func_cygpath ARGS... # Wrapper around calling the cygpath program via LT_CYGPATH. This is used when # when (1) $build is *nix and Cygwin is hosted via a wine environment; or (2) # $build is MSYS and $host is Cygwin, or (3) $build is Cygwin. In case (1) or # (2), returns the Cygwin file name or path in func_cygpath_result (input # file name or path is assumed to be in w32 format, as previously converted # from $build's *nix or MSYS format). In case (3), returns the w32 file name # or path in func_cygpath_result (input file name or path is assumed to be in # Cygwin format). Returns an empty string on error. # # ARGS are passed to cygpath, with the last one being the file name or path to # be converted. # # Specify the absolute *nix (or w32) name to cygpath in the LT_CYGPATH # environment variable; do not put it in $PATH. func_cygpath () { $debug_cmd if test -n "$LT_CYGPATH" && test -f "$LT_CYGPATH"; then func_cygpath_result=`$LT_CYGPATH "$@" 2>/dev/null` if test "$?" -ne 0; then # on failure, ensure result is empty func_cygpath_result= fi else func_cygpath_result= func_error "LT_CYGPATH is empty or specifies non-existent file: '$LT_CYGPATH'" fi } #end: func_cygpath # func_convert_core_msys_to_w32 ARG # Convert file name or path ARG from MSYS format to w32 format. Return # result in func_convert_core_msys_to_w32_result. func_convert_core_msys_to_w32 () { $debug_cmd # awkward: cmd appends spaces to result func_convert_core_msys_to_w32_result=`( cmd //c echo "$1" ) 2>/dev/null | $SED -e 's/[ ]*$//' -e "$sed_naive_backslashify"` } #end: func_convert_core_msys_to_w32 # func_convert_file_check ARG1 ARG2 # Verify that ARG1 (a file name in $build format) was converted to $host # format in ARG2. Otherwise, emit an error message, but continue (resetting # func_to_host_file_result to ARG1). func_convert_file_check () { $debug_cmd if test -z "$2" && test -n "$1"; then func_error "Could not determine host file name corresponding to" func_error " '$1'" func_error "Continuing, but uninstalled executables may not work." # Fallback: func_to_host_file_result=$1 fi } # end func_convert_file_check # func_convert_path_check FROM_PATHSEP TO_PATHSEP FROM_PATH TO_PATH # Verify that FROM_PATH (a path in $build format) was converted to $host # format in TO_PATH. Otherwise, emit an error message, but continue, resetting # func_to_host_file_result to a simplistic fallback value (see below). func_convert_path_check () { $debug_cmd if test -z "$4" && test -n "$3"; then func_error "Could not determine the host path corresponding to" func_error " '$3'" func_error "Continuing, but uninstalled executables may not work." # Fallback. This is a deliberately simplistic "conversion" and # should not be "improved". See libtool.info. if test "x$1" != "x$2"; then lt_replace_pathsep_chars="s|$1|$2|g" func_to_host_path_result=`echo "$3" | $SED -e "$lt_replace_pathsep_chars"` else func_to_host_path_result=$3 fi fi } # end func_convert_path_check # func_convert_path_front_back_pathsep FRONTPAT BACKPAT REPL ORIG # Modifies func_to_host_path_result by prepending REPL if ORIG matches FRONTPAT # and appending REPL if ORIG matches BACKPAT. func_convert_path_front_back_pathsep () { $debug_cmd case $4 in $1 ) func_to_host_path_result=$3$func_to_host_path_result ;; esac case $4 in $2 ) func_append func_to_host_path_result "$3" ;; esac } # end func_convert_path_front_back_pathsep ################################################## # $build to $host FILE NAME CONVERSION FUNCTIONS # ################################################## # invoked via '$to_host_file_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # Result will be available in $func_to_host_file_result. # func_to_host_file ARG # Converts the file name ARG from $build format to $host format. Return result # in func_to_host_file_result. func_to_host_file () { $debug_cmd $to_host_file_cmd "$1" } # end func_to_host_file # func_to_tool_file ARG LAZY # converts the file name ARG from $build format to toolchain format. Return # result in func_to_tool_file_result. If the conversion in use is listed # in (the comma separated) LAZY, no conversion takes place. func_to_tool_file () { $debug_cmd case ,$2, in *,"$to_tool_file_cmd",*) func_to_tool_file_result=$1 ;; *) $to_tool_file_cmd "$1" func_to_tool_file_result=$func_to_host_file_result ;; esac } # end func_to_tool_file # func_convert_file_noop ARG # Copy ARG to func_to_host_file_result. func_convert_file_noop () { func_to_host_file_result=$1 } # end func_convert_file_noop # func_convert_file_msys_to_w32 ARG # Convert file name ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_file_result. func_convert_file_msys_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_to_host_file_result=$func_convert_core_msys_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_w32 # func_convert_file_cygwin_to_w32 ARG # Convert file name ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_file_cygwin_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # because $build is cygwin, we call "the" cygpath in $PATH; no need to use # LT_CYGPATH in this case. func_to_host_file_result=`cygpath -m "$1"` fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_cygwin_to_w32 # func_convert_file_nix_to_w32 ARG # Convert file name ARG from *nix to w32 format. Requires a wine environment # and a working winepath. Returns result in func_to_host_file_result. func_convert_file_nix_to_w32 () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_file_wine_to_w32 "$1" func_to_host_file_result=$func_convert_core_file_wine_to_w32_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_w32 # func_convert_file_msys_to_cygwin ARG # Convert file name ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_file_msys_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then func_convert_core_msys_to_w32 "$1" func_cygpath -u "$func_convert_core_msys_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_msys_to_cygwin # func_convert_file_nix_to_cygwin ARG # Convert file name ARG from *nix to Cygwin format. Requires Cygwin installed # in a wine environment, working winepath, and LT_CYGPATH set. Returns result # in func_to_host_file_result. func_convert_file_nix_to_cygwin () { $debug_cmd func_to_host_file_result=$1 if test -n "$1"; then # convert from *nix to w32, then use cygpath to convert from w32 to cygwin. func_convert_core_file_wine_to_w32 "$1" func_cygpath -u "$func_convert_core_file_wine_to_w32_result" func_to_host_file_result=$func_cygpath_result fi func_convert_file_check "$1" "$func_to_host_file_result" } # end func_convert_file_nix_to_cygwin ############################################# # $build to $host PATH CONVERSION FUNCTIONS # ############################################# # invoked via '$to_host_path_cmd ARG' # # In each case, ARG is the path to be converted from $build to $host format. # The result will be available in $func_to_host_path_result. # # Path separators are also converted from $build format to $host format. If # ARG begins or ends with a path separator character, it is preserved (but # converted to $host format) on output. # # All path conversion functions are named using the following convention: # file name conversion function : func_convert_file_X_to_Y () # path conversion function : func_convert_path_X_to_Y () # where, for any given $build/$host combination the 'X_to_Y' value is the # same. If conversion functions are added for new $build/$host combinations, # the two new functions must follow this pattern, or func_init_to_host_path_cmd # will break. # func_init_to_host_path_cmd # Ensures that function "pointer" variable $to_host_path_cmd is set to the # appropriate value, based on the value of $to_host_file_cmd. to_host_path_cmd= func_init_to_host_path_cmd () { $debug_cmd if test -z "$to_host_path_cmd"; then func_stripname 'func_convert_file_' '' "$to_host_file_cmd" to_host_path_cmd=func_convert_path_$func_stripname_result fi } # func_to_host_path ARG # Converts the path ARG from $build format to $host format. Return result # in func_to_host_path_result. func_to_host_path () { $debug_cmd func_init_to_host_path_cmd $to_host_path_cmd "$1" } # end func_to_host_path # func_convert_path_noop ARG # Copy ARG to func_to_host_path_result. func_convert_path_noop () { func_to_host_path_result=$1 } # end func_convert_path_noop # func_convert_path_msys_to_w32 ARG # Convert path ARG from (mingw) MSYS to (mingw) w32 format; automatic # conversion to w32 is not available inside the cwrapper. Returns result in # func_to_host_path_result. func_convert_path_msys_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from ARG. MSYS # behavior is inconsistent here; cygpath turns them into '.;' and ';.'; # and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_msys_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_msys_to_w32 # func_convert_path_cygwin_to_w32 ARG # Convert path ARG from Cygwin to w32 format. Returns result in # func_to_host_file_result. func_convert_path_cygwin_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_to_host_path_result=`cygpath -m -p "$func_to_host_path_tmp1"` func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_cygwin_to_w32 # func_convert_path_nix_to_w32 ARG # Convert path ARG from *nix to w32 format. Requires a wine environment and # a working winepath. Returns result in func_to_host_file_result. func_convert_path_nix_to_w32 () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_to_host_path_result=$func_convert_core_path_wine_to_w32_result func_convert_path_check : ";" \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" ";" "$1" fi } # end func_convert_path_nix_to_w32 # func_convert_path_msys_to_cygwin ARG # Convert path ARG from MSYS to Cygwin format. Requires LT_CYGPATH set. # Returns result in func_to_host_file_result. func_convert_path_msys_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # See func_convert_path_msys_to_w32: func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_msys_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_msys_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_msys_to_cygwin # func_convert_path_nix_to_cygwin ARG # Convert path ARG from *nix to Cygwin format. Requires Cygwin installed in a # a wine environment, working winepath, and LT_CYGPATH set. Returns result in # func_to_host_file_result. func_convert_path_nix_to_cygwin () { $debug_cmd func_to_host_path_result=$1 if test -n "$1"; then # Remove leading and trailing path separator characters from # ARG. msys behavior is inconsistent here, cygpath turns them # into '.;' and ';.', and winepath ignores them completely. func_stripname : : "$1" func_to_host_path_tmp1=$func_stripname_result func_convert_core_path_wine_to_w32 "$func_to_host_path_tmp1" func_cygpath -u -p "$func_convert_core_path_wine_to_w32_result" func_to_host_path_result=$func_cygpath_result func_convert_path_check : : \ "$func_to_host_path_tmp1" "$func_to_host_path_result" func_convert_path_front_back_pathsep ":*" "*:" : "$1" fi } # end func_convert_path_nix_to_cygwin # func_dll_def_p FILE # True iff FILE is a Windows DLL '.def' file. # Keep in sync with _LT_DLL_DEF_P in libtool.m4 func_dll_def_p () { $debug_cmd func_dll_def_p_tmp=`$SED -n \ -e 's/^[ ]*//' \ -e '/^\(;.*\)*$/d' \ -e 's/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p' \ -e q \ "$1"` test DEF = "$func_dll_def_p_tmp" } # func_mode_compile arg... func_mode_compile () { $debug_cmd # Get the compilation command and the source file. base_compile= srcfile=$nonopt # always keep a non-empty value in "srcfile" suppress_opt=yes suppress_output= arg_mode=normal libobj= later= pie_flag= for arg do case $arg_mode in arg ) # do not "continue". Instead, add this to base_compile lastarg=$arg arg_mode=normal ;; target ) libobj=$arg arg_mode=normal continue ;; normal ) # Accept any command-line options. case $arg in -o) test -n "$libobj" && \ func_fatal_error "you cannot specify '-o' more than once" arg_mode=target continue ;; -pie | -fpie | -fPIE) func_append pie_flag " $arg" continue ;; -shared | -static | -prefer-pic | -prefer-non-pic) func_append later " $arg" continue ;; -no-suppress) suppress_opt=no continue ;; -Xcompiler) arg_mode=arg # the next one goes into the "base_compile" arg list continue # The current "srcfile" will either be retained or ;; # replaced later. I would guess that would be a bug. -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result lastarg= save_ifs=$IFS; IFS=, for arg in $args; do IFS=$save_ifs func_append_quoted lastarg "$arg" done IFS=$save_ifs func_stripname ' ' '' "$lastarg" lastarg=$func_stripname_result # Add the arguments to base_compile. func_append base_compile " $lastarg" continue ;; *) # Accept the current argument as the source file. # The previous "srcfile" becomes the current argument. # lastarg=$srcfile srcfile=$arg ;; esac # case $arg ;; esac # case $arg_mode # Aesthetically quote the previous argument. func_append_quoted base_compile "$lastarg" done # for arg case $arg_mode in arg) func_fatal_error "you must specify an argument for -Xcompile" ;; target) func_fatal_error "you must specify a target with '-o'" ;; *) # Get the name of the library object. test -z "$libobj" && { func_basename "$srcfile" libobj=$func_basename_result } ;; esac # Recognize several different file suffixes. # If the user specifies -o file.o, it is replaced with file.lo case $libobj in *.[cCFSifmso] | \ *.ada | *.adb | *.ads | *.asm | \ *.c++ | *.cc | *.ii | *.class | *.cpp | *.cxx | \ *.[fF][09]? | *.for | *.java | *.go | *.obj | *.sx | *.cu | *.cup) func_xform "$libobj" libobj=$func_xform_result ;; esac case $libobj in *.lo) func_lo2o "$libobj"; obj=$func_lo2o_result ;; *) func_fatal_error "cannot determine name of library object from '$libobj'" ;; esac func_infer_tag $base_compile for arg in $later; do case $arg in -shared) test yes = "$build_libtool_libs" \ || func_fatal_configuration "cannot build a shared library" build_old_libs=no continue ;; -static) build_libtool_libs=no build_old_libs=yes continue ;; -prefer-pic) pic_mode=yes continue ;; -prefer-non-pic) pic_mode=no continue ;; esac done func_quote_for_eval "$libobj" test "X$libobj" != "X$func_quote_for_eval_result" \ && $ECHO "X$libobj" | $GREP '[]~#^*{};<>?"'"'"' &()|`$[]' \ && func_warning "libobj name '$libobj' may not contain shell special characters." func_dirname_and_basename "$obj" "/" "" objname=$func_basename_result xdir=$func_dirname_result lobj=$xdir$objdir/$objname test -z "$base_compile" && \ func_fatal_help "you must specify a compilation command" # Delete any leftover library objects. if test yes = "$build_old_libs"; then removelist="$obj $lobj $libobj ${libobj}T" else removelist="$lobj $libobj ${libobj}T" fi # On Cygwin there's no "real" PIC flag so we must build both object types case $host_os in cygwin* | mingw* | pw32* | os2* | cegcc*) pic_mode=default ;; esac if test no = "$pic_mode" && test pass_all != "$deplibs_check_method"; then # non-PIC code in shared libraries is not supported pic_mode=default fi # Calculate the filename of the output object if compiler does # not support -o with -c if test no = "$compiler_c_o"; then output_obj=`$ECHO "$srcfile" | $SED 's%^.*/%%; s%\.[^.]*$%%'`.$objext lockfile=$output_obj.lock else output_obj= need_locks=no lockfile= fi # Lock this critical section if it is needed # We use this script file to make the link, it avoids creating a new file if test yes = "$need_locks"; then until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done elif test warn = "$need_locks"; then if test -f "$lockfile"; then $ECHO "\ *** ERROR, $lockfile exists and contains: `cat $lockfile 2>/dev/null` This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi func_append removelist " $output_obj" $ECHO "$srcfile" > "$lockfile" fi $opt_dry_run || $RM $removelist func_append removelist " $lockfile" trap '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' 1 2 15 func_to_tool_file "$srcfile" func_convert_file_msys_to_w32 srcfile=$func_to_tool_file_result func_quote_for_eval "$srcfile" qsrcfile=$func_quote_for_eval_result # Only build a PIC object if we are building libtool libraries. if test yes = "$build_libtool_libs"; then # Without this assignment, base_compile gets emptied. fbsd_hideous_sh_bug=$base_compile if test no != "$pic_mode"; then command="$base_compile $qsrcfile $pic_flag" else # Don't build PIC code command="$base_compile $qsrcfile" fi func_mkdir_p "$xdir$objdir" if test -z "$output_obj"; then # Place PIC objects in $objdir func_append command " -o $lobj" fi func_show_eval_locale "$command" \ 'test -n "$output_obj" && $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed, then go on to compile the next one if test -n "$output_obj" && test "X$output_obj" != "X$lobj"; then func_show_eval '$MV "$output_obj" "$lobj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi # Allow error messages only from the first compilation. if test yes = "$suppress_opt"; then suppress_output=' >/dev/null 2>&1' fi fi # Only build a position-dependent object if we build old libraries. if test yes = "$build_old_libs"; then if test yes != "$pic_mode"; then # Don't build PIC code command="$base_compile $qsrcfile$pie_flag" else command="$base_compile $qsrcfile $pic_flag" fi if test yes = "$compiler_c_o"; then func_append command " -o $obj" fi # Suppress compiler output if we already did a PIC compilation. func_append command "$suppress_output" func_show_eval_locale "$command" \ '$opt_dry_run || $RM $removelist; exit $EXIT_FAILURE' if test warn = "$need_locks" && test "X`cat $lockfile 2>/dev/null`" != "X$srcfile"; then $ECHO "\ *** ERROR, $lockfile contains: `cat $lockfile 2>/dev/null` but it should contain: $srcfile This indicates that another process is trying to use the same temporary object file, and libtool could not work around it because your compiler does not support '-c' and '-o' together. If you repeat this compilation, it may succeed, by chance, but you had better avoid parallel builds (make -j) in this platform, or get a better compiler." $opt_dry_run || $RM $removelist exit $EXIT_FAILURE fi # Just move the object if needed if test -n "$output_obj" && test "X$output_obj" != "X$obj"; then func_show_eval '$MV "$output_obj" "$obj"' \ 'error=$?; $opt_dry_run || $RM $removelist; exit $error' fi fi $opt_dry_run || { func_write_libtool_object "$libobj" "$objdir/$objname" "$objname" # Unlock the critical section if it was locked if test no != "$need_locks"; then removelist=$lockfile $RM "$lockfile" fi } exit $EXIT_SUCCESS } $opt_help || { test compile = "$opt_mode" && func_mode_compile ${1+"$@"} } func_mode_help () { # We need to display help for each of the modes. case $opt_mode in "") # Generic help is extracted from the usage comments # at the start of this file. func_help ;; clean) $ECHO \ "Usage: $progname [OPTION]... --mode=clean RM [RM-OPTION]... FILE... Remove files from the build directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, object or program, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; compile) $ECHO \ "Usage: $progname [OPTION]... --mode=compile COMPILE-COMMAND... SOURCEFILE Compile a source file into a libtool library object. This mode accepts the following additional options: -o OUTPUT-FILE set the output file name to OUTPUT-FILE -no-suppress do not suppress compiler output for multiple passes -prefer-pic try to build PIC objects only -prefer-non-pic try to build non-PIC objects only -shared do not build a '.o' file suitable for static linking -static only build a '.o' file suitable for static linking -Wc,FLAG pass FLAG directly to the compiler COMPILE-COMMAND is a command to be used in creating a 'standard' object file from the given SOURCEFILE. The output file name is determined by removing the directory component from SOURCEFILE, then substituting the C source code suffix '.c' with the library object suffix, '.lo'." ;; execute) $ECHO \ "Usage: $progname [OPTION]... --mode=execute COMMAND [ARGS]... Automatically set library path, then run a program. This mode accepts the following additional options: -dlopen FILE add the directory containing FILE to the library path This mode sets the library path environment variable according to '-dlopen' flags. If any of the ARGS are libtool executable wrappers, then they are translated into their corresponding uninstalled binary, and any of their required library directories are added to the library path. Then, COMMAND is executed, with ARGS as arguments." ;; finish) $ECHO \ "Usage: $progname [OPTION]... --mode=finish [LIBDIR]... Complete the installation of libtool libraries. Each LIBDIR is a directory that contains libtool libraries. The commands that this mode executes may require superuser privileges. Use the '--dry-run' option if you just want to see what would be executed." ;; install) $ECHO \ "Usage: $progname [OPTION]... --mode=install INSTALL-COMMAND... Install executables or libraries. INSTALL-COMMAND is the installation command. The first component should be either the 'install' or 'cp' program. The following components of INSTALL-COMMAND are treated specially: -inst-prefix-dir PREFIX-DIR Use PREFIX-DIR as a staging area for installation The rest of the components are interpreted as arguments to that command (only BSD-compatible install options are recognized)." ;; link) $ECHO \ "Usage: $progname [OPTION]... --mode=link LINK-COMMAND... Link object files or libraries together to form another library, or to create an executable program. LINK-COMMAND is a command using the C compiler that you would use to create a program from several object files. The following components of LINK-COMMAND are treated specially: -all-static do not do any dynamic linking at all -avoid-version do not add a version suffix if possible -bindir BINDIR specify path to binaries directory (for systems where libraries must be found in the PATH setting at runtime) -dlopen FILE '-dlpreopen' FILE if it cannot be dlopened at runtime -dlpreopen FILE link in FILE and add its symbols to lt_preloaded_symbols -export-dynamic allow symbols from OUTPUT-FILE to be resolved with dlsym(3) -export-symbols SYMFILE try to export only the symbols listed in SYMFILE -export-symbols-regex REGEX try to export only the symbols matching REGEX -LLIBDIR search LIBDIR for required installed libraries -lNAME OUTPUT-FILE requires the installed library libNAME -module build a library that can dlopened -no-fast-install disable the fast-install mode -no-install link a not-installable executable -no-undefined declare that a library does not refer to external symbols -o OUTPUT-FILE create OUTPUT-FILE from the specified objects -objectlist FILE use a list of object files found in FILE to specify objects -os2dllname NAME force a short DLL name on OS/2 (no effect on other OSes) -precious-files-regex REGEX don't remove output files matching REGEX -release RELEASE specify package release information -rpath LIBDIR the created library will eventually be installed in LIBDIR -R[ ]LIBDIR add LIBDIR to the runtime path of programs and libraries -shared only do dynamic linking of libtool libraries -shrext SUFFIX override the standard shared library file extension -static do not do any dynamic linking of uninstalled libtool libraries -static-libtool-libs do not do any dynamic linking of libtool libraries -version-info CURRENT[:REVISION[:AGE]] specify library version info [each variable defaults to 0] -weak LIBNAME declare that the target provides the LIBNAME interface -Wc,FLAG -Xcompiler FLAG pass linker-specific FLAG directly to the compiler -Wl,FLAG -Xlinker FLAG pass linker-specific FLAG directly to the linker -XCClinker FLAG pass link-specific FLAG to the compiler driver (CC) All other options (arguments beginning with '-') are ignored. Every other argument is treated as a filename. Files ending in '.la' are treated as uninstalled libtool libraries, other files are standard or library object files. If the OUTPUT-FILE ends in '.la', then a libtool library is created, only library objects ('.lo' files) may be specified, and '-rpath' is required, except when creating a convenience library. If OUTPUT-FILE ends in '.a' or '.lib', then a standard library is created using 'ar' and 'ranlib', or on Windows using 'lib'. If OUTPUT-FILE ends in '.lo' or '.$objext', then a reloadable object file is created, otherwise an executable program is created." ;; uninstall) $ECHO \ "Usage: $progname [OPTION]... --mode=uninstall RM [RM-OPTION]... FILE... Remove libraries from an installation directory. RM is the name of the program to use to delete files associated with each FILE (typically '/bin/rm'). RM-OPTIONS are options (such as '-f') to be passed to RM. If FILE is a libtool library, all the files associated with it are deleted. Otherwise, only FILE itself is deleted using RM." ;; *) func_fatal_help "invalid operation mode '$opt_mode'" ;; esac echo $ECHO "Try '$progname --help' for more information about other modes." } # Now that we've collected a possible --mode arg, show help if necessary if $opt_help; then if test : = "$opt_help"; then func_mode_help else { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do func_mode_help done } | $SED -n '1p; 2,$s/^Usage:/ or: /p' { func_help noexit for opt_mode in compile link execute install finish uninstall clean; do echo func_mode_help done } | $SED '1d /^When reporting/,/^Report/{ H d } $x /information about other modes/d /more detailed .*MODE/d s/^Usage:.*--mode=\([^ ]*\) .*/Description of \1 mode:/' fi exit $? fi # func_mode_execute arg... func_mode_execute () { $debug_cmd # The first argument is the command name. cmd=$nonopt test -z "$cmd" && \ func_fatal_help "you must specify a COMMAND" # Handle -dlopen flags immediately. for file in $opt_dlopen; do test -f "$file" \ || func_fatal_help "'$file' is not a file" dir= case $file in *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$lib' is not a valid libtool archive" # Read the libtool library. dlname= library_names= func_source "$file" # Skip this library if it cannot be dlopened. if test -z "$dlname"; then # Warn if it was a shared library. test -n "$library_names" && \ func_warning "'$file' was not linked with '-export-dynamic'" continue fi func_dirname "$file" "" "." dir=$func_dirname_result if test -f "$dir/$objdir/$dlname"; then func_append dir "/$objdir" else if test ! -f "$dir/$dlname"; then func_fatal_error "cannot find '$dlname' in '$dir' or '$dir/$objdir'" fi fi ;; *.lo) # Just add the directory containing the .lo file. func_dirname "$file" "" "." dir=$func_dirname_result ;; *) func_warning "'-dlopen' is ignored for non-libtool libraries and objects" continue ;; esac # Get the absolute pathname. absdir=`cd "$dir" && pwd` test -n "$absdir" && dir=$absdir # Now add the directory to shlibpath_var. if eval "test -z \"\$$shlibpath_var\""; then eval "$shlibpath_var=\"\$dir\"" else eval "$shlibpath_var=\"\$dir:\$$shlibpath_var\"" fi done # This variable tells wrapper scripts just to set shlibpath_var # rather than running their programs. libtool_execute_magic=$magic # Check if any of the arguments is a wrapper script. args= for file do case $file in -* | *.la | *.lo ) ;; *) # Do a test to see if this is really a libtool program. if func_ltwrapper_script_p "$file"; then func_source "$file" # Transform arg to wrapped name. file=$progdir/$program elif func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" func_source "$func_ltwrapper_scriptname_result" # Transform arg to wrapped name. file=$progdir/$program fi ;; esac # Quote arguments (to preserve shell metacharacters). func_append_quoted args "$file" done if $opt_dry_run; then # Display what would be done. if test -n "$shlibpath_var"; then eval "\$ECHO \"\$shlibpath_var=\$$shlibpath_var\"" echo "export $shlibpath_var" fi $ECHO "$cmd$args" exit $EXIT_SUCCESS else if test -n "$shlibpath_var"; then # Export the shlibpath_var. eval "export $shlibpath_var" fi # Restore saved environment variables for lt_var in LANG LANGUAGE LC_ALL LC_CTYPE LC_COLLATE LC_MESSAGES do eval "if test \"\${save_$lt_var+set}\" = set; then $lt_var=\$save_$lt_var; export $lt_var else $lt_unset $lt_var fi" done # Now prepare to actually exec the command. exec_cmd=\$cmd$args fi } test execute = "$opt_mode" && func_mode_execute ${1+"$@"} # func_mode_finish arg... func_mode_finish () { $debug_cmd libs= libdirs= admincmds= for opt in "$nonopt" ${1+"$@"} do if test -d "$opt"; then func_append libdirs " $opt" elif test -f "$opt"; then if func_lalib_unsafe_p "$opt"; then func_append libs " $opt" else func_warning "'$opt' is not a valid libtool archive" fi else func_fatal_error "invalid argument '$opt'" fi done if test -n "$libs"; then if test -n "$lt_sysroot"; then sysroot_regex=`$ECHO "$lt_sysroot" | $SED "$sed_make_literal_regex"` sysroot_cmd="s/\([ ']\)$sysroot_regex/\1/g;" else sysroot_cmd= fi # Remove sysroot references if $opt_dry_run; then for lib in $libs; do echo "removing references to $lt_sysroot and '=' prefixes from $lib" done else tmpdir=`func_mktempdir` for lib in $libs; do $SED -e "$sysroot_cmd s/\([ ']-[LR]\)=/\1/g; s/\([ ']\)=/\1/g" $lib \ > $tmpdir/tmp-la mv -f $tmpdir/tmp-la $lib done ${RM}r "$tmpdir" fi fi if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then for libdir in $libdirs; do if test -n "$finish_cmds"; then # Do each command in the finish commands. func_execute_cmds "$finish_cmds" 'admincmds="$admincmds '"$cmd"'"' fi if test -n "$finish_eval"; then # Do the single finish_eval. eval cmds=\"$finish_eval\" $opt_dry_run || eval "$cmds" || func_append admincmds " $cmds" fi done fi # Exit here if they wanted silent mode. $opt_quiet && exit $EXIT_SUCCESS if test -n "$finish_cmds$finish_eval" && test -n "$libdirs"; then echo "----------------------------------------------------------------------" echo "Libraries have been installed in:" for libdir in $libdirs; do $ECHO " $libdir" done echo echo "If you ever happen to want to link against installed libraries" echo "in a given directory, LIBDIR, you must either use libtool, and" echo "specify the full pathname of the library, or use the '-LLIBDIR'" echo "flag during linking and do at least one of the following:" if test -n "$shlibpath_var"; then echo " - add LIBDIR to the '$shlibpath_var' environment variable" echo " during execution" fi if test -n "$runpath_var"; then echo " - add LIBDIR to the '$runpath_var' environment variable" echo " during linking" fi if test -n "$hardcode_libdir_flag_spec"; then libdir=LIBDIR eval flag=\"$hardcode_libdir_flag_spec\" $ECHO " - use the '$flag' linker flag" fi if test -n "$admincmds"; then $ECHO " - have your system administrator run these commands:$admincmds" fi if test -f /etc/ld.so.conf; then echo " - have your system administrator add LIBDIR to '/etc/ld.so.conf'" fi echo echo "See any operating system documentation about shared libraries for" case $host in solaris2.[6789]|solaris2.1[0-9]) echo "more information, such as the ld(1), crle(1) and ld.so(8) manual" echo "pages." ;; *) echo "more information, such as the ld(1) and ld.so(8) manual pages." ;; esac echo "----------------------------------------------------------------------" fi exit $EXIT_SUCCESS } test finish = "$opt_mode" && func_mode_finish ${1+"$@"} # func_mode_install arg... func_mode_install () { $debug_cmd # There may be an optional sh(1) argument at the beginning of # install_prog (especially on Windows NT). if test "$SHELL" = "$nonopt" || test /bin/sh = "$nonopt" || # Allow the use of GNU shtool's install command. case $nonopt in *shtool*) :;; *) false;; esac then # Aesthetically quote it. func_quote_for_eval "$nonopt" install_prog="$func_quote_for_eval_result " arg=$1 shift else install_prog= arg=$nonopt fi # The real first argument should be the name of the installation program. # Aesthetically quote it. func_quote_for_eval "$arg" func_append install_prog "$func_quote_for_eval_result" install_shared_prog=$install_prog case " $install_prog " in *[\\\ /]cp\ *) install_cp=: ;; *) install_cp=false ;; esac # We need to accept at least all the BSD install flags. dest= files= opts= prev= install_type= isdir=false stripme= no_mode=: for arg do arg2= if test -n "$dest"; then func_append files " $dest" dest=$arg continue fi case $arg in -d) isdir=: ;; -f) if $install_cp; then :; else prev=$arg fi ;; -g | -m | -o) prev=$arg ;; -s) stripme=" -s" continue ;; -*) ;; *) # If the previous option needed an argument, then skip it. if test -n "$prev"; then if test X-m = "X$prev" && test -n "$install_override_mode"; then arg2=$install_override_mode no_mode=false fi prev= else dest=$arg continue fi ;; esac # Aesthetically quote the argument. func_quote_for_eval "$arg" func_append install_prog " $func_quote_for_eval_result" if test -n "$arg2"; then func_quote_for_eval "$arg2" fi func_append install_shared_prog " $func_quote_for_eval_result" done test -z "$install_prog" && \ func_fatal_help "you must specify an install program" test -n "$prev" && \ func_fatal_help "the '$prev' option requires an argument" if test -n "$install_override_mode" && $no_mode; then if $install_cp; then :; else func_quote_for_eval "$install_override_mode" func_append install_shared_prog " -m $func_quote_for_eval_result" fi fi if test -z "$files"; then if test -z "$dest"; then func_fatal_help "no file or destination specified" else func_fatal_help "you must specify a destination" fi fi # Strip any trailing slash from the destination. func_stripname '' '/' "$dest" dest=$func_stripname_result # Check to see that the destination is a directory. test -d "$dest" && isdir=: if $isdir; then destdir=$dest destname= else func_dirname_and_basename "$dest" "" "." destdir=$func_dirname_result destname=$func_basename_result # Not a directory, so check to see that there is only one file specified. set dummy $files; shift test "$#" -gt 1 && \ func_fatal_help "'$dest' is not a directory" fi case $destdir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) for file in $files; do case $file in *.lo) ;; *) func_fatal_help "'$destdir' must be an absolute directory name" ;; esac done ;; esac # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic staticlibs= future_libdirs= current_libdirs= for file in $files; do # Do each installation. case $file in *.$libext) # Do the static libraries later. func_append staticlibs " $file" ;; *.la) func_resolve_sysroot "$file" file=$func_resolve_sysroot_result # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$file" \ || func_fatal_help "'$file' is not a valid libtool archive" library_names= old_library= relink_command= func_source "$file" # Add the libdir to current_libdirs if it is the destination. if test "X$destdir" = "X$libdir"; then case "$current_libdirs " in *" $libdir "*) ;; *) func_append current_libdirs " $libdir" ;; esac else # Note the libdir as a future libdir. case "$future_libdirs " in *" $libdir "*) ;; *) func_append future_libdirs " $libdir" ;; esac fi func_dirname "$file" "/" "" dir=$func_dirname_result func_append dir "$objdir" if test -n "$relink_command"; then # Determine the prefix the user has applied to our future dir. inst_prefix_dir=`$ECHO "$destdir" | $SED -e "s%$libdir\$%%"` # Don't allow the user to place us outside of our expected # location b/c this prevents finding dependent libraries that # are installed to the same prefix. # At present, this check doesn't affect windows .dll's that # are installed into $libdir/../bin (currently, that works fine) # but it's something to keep an eye on. test "$inst_prefix_dir" = "$destdir" && \ func_fatal_error "error: cannot install '$file' to a directory not ending in $libdir" if test -n "$inst_prefix_dir"; then # Stick the inst_prefix_dir data into the link command. relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%-inst-prefix-dir $inst_prefix_dir%"` else relink_command=`$ECHO "$relink_command" | $SED "s%@inst_prefix_dir@%%"` fi func_warning "relinking '$file'" func_show_eval "$relink_command" \ 'func_fatal_error "error: relink '\''$file'\'' with the above command before installing it"' fi # See the names of the shared library. set dummy $library_names; shift if test -n "$1"; then realname=$1 shift srcname=$realname test -n "$relink_command" && srcname=${realname}T # Install the shared library and build the symlinks. func_show_eval "$install_shared_prog $dir/$srcname $destdir/$realname" \ 'exit $?' tstripme=$stripme case $host_os in cygwin* | mingw* | pw32* | cegcc*) case $realname in *.dll.a) tstripme= ;; esac ;; os2*) case $realname in *_dll.a) tstripme= ;; esac ;; esac if test -n "$tstripme" && test -n "$striplib"; then func_show_eval "$striplib $destdir/$realname" 'exit $?' fi if test "$#" -gt 0; then # Delete the old symlinks, and create new ones. # Try 'ln -sf' first, because the 'ln' binary might depend on # the symlink we replace! Solaris /bin/ln does not understand -f, # so we also need to try rm && ln -s. for linkname do test "$linkname" != "$realname" \ && func_show_eval "(cd $destdir && { $LN_S -f $realname $linkname || { $RM $linkname && $LN_S $realname $linkname; }; })" done fi # Do each command in the postinstall commands. lib=$destdir/$realname func_execute_cmds "$postinstall_cmds" 'exit $?' fi # Install the pseudo-library for information purposes. func_basename "$file" name=$func_basename_result instname=$dir/${name}i func_show_eval "$install_prog $instname $destdir/$name" 'exit $?' # Maybe install the static library, too. test -n "$old_library" && func_append staticlibs " $dir/$old_library" ;; *.lo) # Install (i.e. copy) a libtool object. # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # Deduce the name of the destination old-style object file. case $destfile in *.lo) func_lo2o "$destfile" staticdest=$func_lo2o_result ;; *.$objext) staticdest=$destfile destfile= ;; *) func_fatal_help "cannot copy a libtool object to '$destfile'" ;; esac # Install the libtool object if requested. test -n "$destfile" && \ func_show_eval "$install_prog $file $destfile" 'exit $?' # Install the old object if enabled. if test yes = "$build_old_libs"; then # Deduce the name of the old-style object file. func_lo2o "$file" staticobj=$func_lo2o_result func_show_eval "$install_prog \$staticobj \$staticdest" 'exit $?' fi exit $EXIT_SUCCESS ;; *) # Figure out destination file name, if it wasn't already specified. if test -n "$destname"; then destfile=$destdir/$destname else func_basename "$file" destfile=$func_basename_result destfile=$destdir/$destfile fi # If the file is missing, and there is a .exe on the end, strip it # because it is most likely a libtool script we actually want to # install stripped_ext= case $file in *.exe) if test ! -f "$file"; then func_stripname '' '.exe' "$file" file=$func_stripname_result stripped_ext=.exe fi ;; esac # Do a test to see if this is really a libtool program. case $host in *cygwin* | *mingw*) if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" wrapper=$func_ltwrapper_scriptname_result else func_stripname '' '.exe' "$file" wrapper=$func_stripname_result fi ;; *) wrapper=$file ;; esac if func_ltwrapper_script_p "$wrapper"; then notinst_deplibs= relink_command= func_source "$wrapper" # Check the variables that should have been set. test -z "$generated_by_libtool_version" && \ func_fatal_error "invalid libtool wrapper script '$wrapper'" finalize=: for lib in $notinst_deplibs; do # Check to see that each library is installed. libdir= if test -f "$lib"; then func_source "$lib" fi libfile=$libdir/`$ECHO "$lib" | $SED 's%^.*/%%g'` if test -n "$libdir" && test ! -f "$libfile"; then func_warning "'$lib' has not been installed in '$libdir'" finalize=false fi done relink_command= func_source "$wrapper" outputname= if test no = "$fast_install" && test -n "$relink_command"; then $opt_dry_run || { if $finalize; then tmpdir=`func_mktempdir` func_basename "$file$stripped_ext" file=$func_basename_result outputname=$tmpdir/$file # Replace the output file specification. relink_command=`$ECHO "$relink_command" | $SED 's%@OUTPUT@%'"$outputname"'%g'` $opt_quiet || { func_quote_for_expand "$relink_command" eval "func_echo $func_quote_for_expand_result" } if eval "$relink_command"; then : else func_error "error: relink '$file' with the above command before installing it" $opt_dry_run || ${RM}r "$tmpdir" continue fi file=$outputname else func_warning "cannot relink '$file'" fi } else # Install the binary that we compiled earlier. file=`$ECHO "$file$stripped_ext" | $SED "s%\([^/]*\)$%$objdir/\1%"` fi fi # remove .exe since cygwin /usr/bin/install will append another # one anyway case $install_prog,$host in */usr/bin/install*,*cygwin*) case $file:$destfile in *.exe:*.exe) # this is ok ;; *.exe:*) destfile=$destfile.exe ;; *:*.exe) func_stripname '' '.exe' "$destfile" destfile=$func_stripname_result ;; esac ;; esac func_show_eval "$install_prog\$stripme \$file \$destfile" 'exit $?' $opt_dry_run || if test -n "$outputname"; then ${RM}r "$tmpdir" fi ;; esac done for file in $staticlibs; do func_basename "$file" name=$func_basename_result # Set up the ranlib parameters. oldlib=$destdir/$name func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result func_show_eval "$install_prog \$file \$oldlib" 'exit $?' if test -n "$stripme" && test -n "$old_striplib"; then func_show_eval "$old_striplib $tool_oldlib" 'exit $?' fi # Do each command in the postinstall commands. func_execute_cmds "$old_postinstall_cmds" 'exit $?' done test -n "$future_libdirs" && \ func_warning "remember to run '$progname --finish$future_libdirs'" if test -n "$current_libdirs"; then # Maybe just do a dry run. $opt_dry_run && current_libdirs=" -n$current_libdirs" exec_cmd='$SHELL "$progpath" $preserve_args --finish$current_libdirs' else exit $EXIT_SUCCESS fi } test install = "$opt_mode" && func_mode_install ${1+"$@"} # func_generate_dlsyms outputname originator pic_p # Extract symbols from dlprefiles and create ${outputname}S.o with # a dlpreopen symbol table. func_generate_dlsyms () { $debug_cmd my_outputname=$1 my_originator=$2 my_pic_p=${3-false} my_prefix=`$ECHO "$my_originator" | $SED 's%[^a-zA-Z0-9]%_%g'` my_dlsyms= if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then if test -n "$NM" && test -n "$global_symbol_pipe"; then my_dlsyms=${my_outputname}S.c else func_error "not configured to extract global symbols from dlpreopened files" fi fi if test -n "$my_dlsyms"; then case $my_dlsyms in "") ;; *.c) # Discover the nlist of each of the dlfiles. nlist=$output_objdir/$my_outputname.nm func_show_eval "$RM $nlist ${nlist}S ${nlist}T" # Parse the name list into a source file. func_verbose "creating $output_objdir/$my_dlsyms" $opt_dry_run || $ECHO > "$output_objdir/$my_dlsyms" "\ /* $my_dlsyms - symbol resolution table for '$my_outputname' dlsym emulation. */ /* Generated by $PROGRAM (GNU $PACKAGE) $VERSION */ #ifdef __cplusplus extern \"C\" { #endif #if defined __GNUC__ && (((__GNUC__ == 4) && (__GNUC_MINOR__ >= 4)) || (__GNUC__ > 4)) #pragma GCC diagnostic ignored \"-Wstrict-prototypes\" #endif /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* External symbol declarations for the compiler. */\ " if test yes = "$dlself"; then func_verbose "generating symbol list for '$output'" $opt_dry_run || echo ': @PROGRAM@ ' > "$nlist" # Add our own program objects to the symbol list. progfiles=`$ECHO "$objs$old_deplibs" | $SP2NL | $SED "$lo2o" | $NL2SP` for progfile in $progfiles; do func_to_tool_file "$progfile" func_convert_file_msys_to_w32 func_verbose "extracting global C symbols from '$func_to_tool_file_result'" $opt_dry_run || eval "$NM $func_to_tool_file_result | $global_symbol_pipe >> '$nlist'" done if test -n "$exclude_expsyms"; then $opt_dry_run || { eval '$EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi if test -n "$export_symbols_regex"; then $opt_dry_run || { eval '$EGREP -e "$export_symbols_regex" "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' } fi # Prepare the list of exported symbols if test -z "$export_symbols"; then export_symbols=$output_objdir/$outputname.exp $opt_dry_run || { $RM $export_symbols eval "$SED -n -e '/^: @PROGRAM@ $/d' -e 's/^.* \(.*\)$/\1/p' "'< "$nlist" > "$export_symbols"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$export_symbols" >> "$output_objdir/$outputname.def"' ;; esac } else $opt_dry_run || { eval "$SED -e 's/\([].[*^$]\)/\\\\\1/g' -e 's/^/ /' -e 's/$/$/'"' < "$export_symbols" > "$output_objdir/$outputname.exp"' eval '$GREP -f "$output_objdir/$outputname.exp" < "$nlist" > "$nlist"T' eval '$MV "$nlist"T "$nlist"' case $host in *cygwin* | *mingw* | *cegcc* ) eval "echo EXPORTS "'> "$output_objdir/$outputname.def"' eval 'cat "$nlist" >> "$output_objdir/$outputname.def"' ;; esac } fi fi for dlprefile in $dlprefiles; do func_verbose "extracting global C symbols from '$dlprefile'" func_basename "$dlprefile" name=$func_basename_result case $host in *cygwin* | *mingw* | *cegcc* ) # if an import library, we need to obtain dlname if func_win32_import_lib_p "$dlprefile"; then func_tr_sh "$dlprefile" eval "curr_lafile=\$libfile_$func_tr_sh_result" dlprefile_dlbasename= if test -n "$curr_lafile" && func_lalib_p "$curr_lafile"; then # Use subshell, to avoid clobbering current variable values dlprefile_dlname=`source "$curr_lafile" && echo "$dlname"` if test -n "$dlprefile_dlname"; then func_basename "$dlprefile_dlname" dlprefile_dlbasename=$func_basename_result else # no lafile. user explicitly requested -dlpreopen <import library>. $sharedlib_from_linklib_cmd "$dlprefile" dlprefile_dlbasename=$sharedlib_from_linklib_result fi fi $opt_dry_run || { if test -n "$dlprefile_dlbasename"; then eval '$ECHO ": $dlprefile_dlbasename" >> "$nlist"' else func_warning "Could not compute DLL name from $name" eval '$ECHO ": $name " >> "$nlist"' fi func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe | $SED -e '/I __imp/d' -e 's/I __nm_/D /;s/_nm__//' >> '$nlist'" } else # not an import lib $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } fi ;; *) $opt_dry_run || { eval '$ECHO ": $name " >> "$nlist"' func_to_tool_file "$dlprefile" func_convert_file_msys_to_w32 eval "$NM \"$func_to_tool_file_result\" 2>/dev/null | $global_symbol_pipe >> '$nlist'" } ;; esac done $opt_dry_run || { # Make sure we have at least an empty file. test -f "$nlist" || : > "$nlist" if test -n "$exclude_expsyms"; then $EGREP -v " ($exclude_expsyms)$" "$nlist" > "$nlist"T $MV "$nlist"T "$nlist" fi # Try sorting and uniquifying the output. if $GREP -v "^: " < "$nlist" | if sort -k 3 </dev/null >/dev/null 2>&1; then sort -k 3 else sort +2 fi | uniq > "$nlist"S; then : else $GREP -v "^: " < "$nlist" > "$nlist"S fi if test -f "$nlist"S; then eval "$global_symbol_to_cdecl"' < "$nlist"S >> "$output_objdir/$my_dlsyms"' else echo '/* NONE */' >> "$output_objdir/$my_dlsyms" fi func_show_eval '$RM "${nlist}I"' if test -n "$global_symbol_to_import"; then eval "$global_symbol_to_import"' < "$nlist"S > "$nlist"I' fi echo >> "$output_objdir/$my_dlsyms" "\ /* The mapping between symbol names and symbols. */ typedef struct { const char *name; void *address; } lt_dlsymlist; extern LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[];\ " if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ static void lt_syminit(void) { LT_DLSYM_CONST lt_dlsymlist *symbol = lt_${my_prefix}_LTX_preloaded_symbols; for (; symbol->name; ++symbol) {" $SED 's/.*/ if (STREQ (symbol->name, \"&\")) symbol->address = (void *) \&&;/' < "$nlist"I >> "$output_objdir/$my_dlsyms" echo >> "$output_objdir/$my_dlsyms" "\ } }" fi echo >> "$output_objdir/$my_dlsyms" "\ LT_DLSYM_CONST lt_dlsymlist lt_${my_prefix}_LTX_preloaded_symbols[] = { {\"$my_originator\", (void *) 0}," if test -s "$nlist"I; then echo >> "$output_objdir/$my_dlsyms" "\ {\"@INIT@\", (void *) <_syminit}," fi case $need_lib_prefix in no) eval "$global_symbol_to_c_name_address" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; *) eval "$global_symbol_to_c_name_address_lib_prefix" < "$nlist" >> "$output_objdir/$my_dlsyms" ;; esac echo >> "$output_objdir/$my_dlsyms" "\ {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt_${my_prefix}_LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif\ " } # !$opt_dry_run pic_flag_for_symtable= case "$compile_command " in *" -static "*) ;; *) case $host in # compiling the symbol table file with pic_flag works around # a FreeBSD bug that causes programs to crash when -lm is # linked before any other PIC object. But we must not use # pic_flag when linking with -static. The problem exists in # FreeBSD 2.2.6 and is fixed in FreeBSD 3.1. *-*-freebsd2.*|*-*-freebsd3.0*|*-*-freebsdelf3.0*) pic_flag_for_symtable=" $pic_flag -DFREEBSD_WORKAROUND" ;; *-*-hpux*) pic_flag_for_symtable=" $pic_flag" ;; *) $my_pic_p && pic_flag_for_symtable=" $pic_flag" ;; esac ;; esac symtab_cflags= for arg in $LTCFLAGS; do case $arg in -pie | -fpie | -fPIE) ;; *) func_append symtab_cflags " $arg" ;; esac done # Now compile the dynamic symbol file. func_show_eval '(cd $output_objdir && $LTCC$symtab_cflags -c$no_builtin_flag$pic_flag_for_symtable "$my_dlsyms")' 'exit $?' # Clean up the generated files. func_show_eval '$RM "$output_objdir/$my_dlsyms" "$nlist" "${nlist}S" "${nlist}T" "${nlist}I"' # Transform the symbol file into the correct name. symfileobj=$output_objdir/${my_outputname}S.$objext case $host in *cygwin* | *mingw* | *cegcc* ) if test -f "$output_objdir/$my_outputname.def"; then compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$output_objdir/$my_outputname.def $symfileobj%"` else compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` fi ;; *) compile_command=`$ECHO "$compile_command" | $SED "s%@SYMFILE@%$symfileobj%"` finalize_command=`$ECHO "$finalize_command" | $SED "s%@SYMFILE@%$symfileobj%"` ;; esac ;; *) func_fatal_error "unknown suffix for '$my_dlsyms'" ;; esac else # We keep going just in case the user didn't refer to # lt_preloaded_symbols. The linker will fail if global_symbol_pipe # really was required. # Nullify the symbol file. compile_command=`$ECHO "$compile_command" | $SED "s% @SYMFILE@%%"` finalize_command=`$ECHO "$finalize_command" | $SED "s% @SYMFILE@%%"` fi } # func_cygming_gnu_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is a GNU/binutils-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_gnu_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_gnu_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $EGREP ' (_head_[A-Za-z0-9_]+_[ad]l*|[A-Za-z0-9_]+_[ad]l*_iname)$'` test -n "$func_cygming_gnu_implib_tmp" } # func_cygming_ms_implib_p ARG # This predicate returns with zero status (TRUE) if # ARG is an MS-style import library. Returns # with nonzero status (FALSE) otherwise. func_cygming_ms_implib_p () { $debug_cmd func_to_tool_file "$1" func_convert_file_msys_to_w32 func_cygming_ms_implib_tmp=`$NM "$func_to_tool_file_result" | eval "$global_symbol_pipe" | $GREP '_NULL_IMPORT_DESCRIPTOR'` test -n "$func_cygming_ms_implib_tmp" } # func_win32_libid arg # return the library type of file 'arg' # # Need a lot of goo to handle *both* DLLs and import libs # Has to be a shell function in order to 'eat' the argument # that is supplied when $file_magic_command is called. # Despite the name, also deal with 64 bit binaries. func_win32_libid () { $debug_cmd win32_libid_type=unknown win32_fileres=`file -L $1 2>/dev/null` case $win32_fileres in *ar\ archive\ import\ library*) # definitely import win32_libid_type="x86 archive import" ;; *ar\ archive*) # could be an import, or static # Keep the egrep pattern in sync with the one in _LT_CHECK_MAGIC_METHOD. if eval $OBJDUMP -f $1 | $SED -e '10q' 2>/dev/null | $EGREP 'file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' >/dev/null; then case $nm_interface in "MS dumpbin") if func_cygming_ms_implib_p "$1" || func_cygming_gnu_implib_p "$1" then win32_nmres=import else win32_nmres= fi ;; *) func_to_tool_file "$1" func_convert_file_msys_to_w32 win32_nmres=`eval $NM -f posix -A \"$func_to_tool_file_result\" | $SED -n -e ' 1,100{ / I /{ s|.*|import| p q } }'` ;; esac case $win32_nmres in import*) win32_libid_type="x86 archive import";; *) win32_libid_type="x86 archive static";; esac fi ;; *DLL*) win32_libid_type="x86 DLL" ;; *executable*) # but shell scripts are "executable" too... case $win32_fileres in *MS\ Windows\ PE\ Intel*) win32_libid_type="x86 DLL" ;; esac ;; esac $ECHO "$win32_libid_type" } # func_cygming_dll_for_implib ARG # # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib () { $debug_cmd sharedlib_from_linklib_result=`$DLLTOOL --identify-strict --identify "$1"` } # func_cygming_dll_for_implib_fallback_core SECTION_NAME LIBNAMEs # # The is the core of a fallback implementation of a # platform-specific function to extract the name of the # DLL associated with the specified import library LIBNAME. # # SECTION_NAME is either .idata$6 or .idata$7, depending # on the platform and compiler that created the implib. # # Echos the name of the DLL associated with the # specified import library. func_cygming_dll_for_implib_fallback_core () { $debug_cmd match_literal=`$ECHO "$1" | $SED "$sed_make_literal_regex"` $OBJDUMP -s --section "$1" "$2" 2>/dev/null | $SED '/^Contents of section '"$match_literal"':/{ # Place marker at beginning of archive member dllname section s/.*/====MARK====/ p d } # These lines can sometimes be longer than 43 characters, but # are always uninteresting /:[ ]*file format pe[i]\{,1\}-/d /^In archive [^:]*:/d # Ensure marker is printed /^====MARK====/p # Remove all lines with less than 43 characters /^.\{43\}/!d # From remaining lines, remove first 43 characters s/^.\{43\}//' | $SED -n ' # Join marker and all lines until next marker into a single line /^====MARK====/ b para H $ b para b :para x s/\n//g # Remove the marker s/^====MARK====// # Remove trailing dots and whitespace s/[\. \t]*$// # Print /./p' | # we now have a list, one entry per line, of the stringified # contents of the appropriate section of all members of the # archive that possess that section. Heuristic: eliminate # all those that have a first or second character that is # a '.' (that is, objdump's representation of an unprintable # character.) This should work for all archives with less than # 0x302f exports -- but will fail for DLLs whose name actually # begins with a literal '.' or a single character followed by # a '.'. # # Of those that remain, print the first one. $SED -e '/^\./d;/^.\./d;q' } # func_cygming_dll_for_implib_fallback ARG # Platform-specific function to extract the # name of the DLL associated with the specified # import library ARG. # # This fallback implementation is for use when $DLLTOOL # does not support the --identify-strict option. # Invoked by eval'ing the libtool variable # $sharedlib_from_linklib_cmd # Result is available in the variable # $sharedlib_from_linklib_result func_cygming_dll_for_implib_fallback () { $debug_cmd if func_cygming_gnu_implib_p "$1"; then # binutils import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$7' "$1"` elif func_cygming_ms_implib_p "$1"; then # ms-generated import library sharedlib_from_linklib_result=`func_cygming_dll_for_implib_fallback_core '.idata$6' "$1"` else # unknown sharedlib_from_linklib_result= fi } # func_extract_an_archive dir oldlib func_extract_an_archive () { $debug_cmd f_ex_an_ar_dir=$1; shift f_ex_an_ar_oldlib=$1 if test yes = "$lock_old_archive_extraction"; then lockfile=$f_ex_an_ar_oldlib.lock until $opt_dry_run || ln "$progpath" "$lockfile" 2>/dev/null; do func_echo "Waiting for $lockfile to be removed" sleep 2 done fi func_show_eval "(cd \$f_ex_an_ar_dir && $AR x \"\$f_ex_an_ar_oldlib\")" \ 'stat=$?; rm -f "$lockfile"; exit $stat' if test yes = "$lock_old_archive_extraction"; then $opt_dry_run || rm -f "$lockfile" fi if ($AR t "$f_ex_an_ar_oldlib" | sort | sort -uc >/dev/null 2>&1); then : else func_fatal_error "object name conflicts in archive: $f_ex_an_ar_dir/$f_ex_an_ar_oldlib" fi } # func_extract_archives gentop oldlib ... func_extract_archives () { $debug_cmd my_gentop=$1; shift my_oldlibs=${1+"$@"} my_oldobjs= my_xlib= my_xabs= my_xdir= for my_xlib in $my_oldlibs; do # Extract the objects. case $my_xlib in [\\/]* | [A-Za-z]:[\\/]*) my_xabs=$my_xlib ;; *) my_xabs=`pwd`"/$my_xlib" ;; esac func_basename "$my_xlib" my_xlib=$func_basename_result my_xlib_u=$my_xlib while :; do case " $extracted_archives " in *" $my_xlib_u "*) func_arith $extracted_serial + 1 extracted_serial=$func_arith_result my_xlib_u=lt$extracted_serial-$my_xlib ;; *) break ;; esac done extracted_archives="$extracted_archives $my_xlib_u" my_xdir=$my_gentop/$my_xlib_u func_mkdir_p "$my_xdir" case $host in *-darwin*) func_verbose "Extracting $my_xabs" # Do not bother doing anything if just a dry run $opt_dry_run || { darwin_orig_dir=`pwd` cd $my_xdir || exit $? darwin_archive=$my_xabs darwin_curdir=`pwd` func_basename "$darwin_archive" darwin_base_archive=$func_basename_result darwin_arches=`$LIPO -info "$darwin_archive" 2>/dev/null | $GREP Architectures 2>/dev/null || true` if test -n "$darwin_arches"; then darwin_arches=`$ECHO "$darwin_arches" | $SED -e 's/.*are://'` darwin_arch= func_verbose "$darwin_base_archive has multiple architectures $darwin_arches" for darwin_arch in $darwin_arches; do func_mkdir_p "unfat-$$/$darwin_base_archive-$darwin_arch" $LIPO -thin $darwin_arch -output "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" "$darwin_archive" cd "unfat-$$/$darwin_base_archive-$darwin_arch" func_extract_an_archive "`pwd`" "$darwin_base_archive" cd "$darwin_curdir" $RM "unfat-$$/$darwin_base_archive-$darwin_arch/$darwin_base_archive" done # $darwin_arches ## Okay now we've a bunch of thin objects, gotta fatten them up :) darwin_filelist=`find unfat-$$ -type f -name \*.o -print -o -name \*.lo -print | $SED -e "$sed_basename" | sort -u` darwin_file= darwin_files= for darwin_file in $darwin_filelist; do darwin_files=`find unfat-$$ -name $darwin_file -print | sort | $NL2SP` $LIPO -create -output "$darwin_file" $darwin_files done # $darwin_filelist $RM -rf unfat-$$ cd "$darwin_orig_dir" else cd $darwin_orig_dir func_extract_an_archive "$my_xdir" "$my_xabs" fi # $darwin_arches } # !$opt_dry_run ;; *) func_extract_an_archive "$my_xdir" "$my_xabs" ;; esac my_oldobjs="$my_oldobjs "`find $my_xdir -name \*.$objext -print -o -name \*.lo -print | sort | $NL2SP` done func_extract_archives_result=$my_oldobjs } # func_emit_wrapper [arg=no] # # Emit a libtool wrapper script on stdout. # Don't directly open a file because we may want to # incorporate the script contents within a cygwin/mingw # wrapper executable. Must ONLY be called from within # func_mode_link because it depends on a number of variables # set therein. # # ARG is the value that the WRAPPER_SCRIPT_BELONGS_IN_OBJDIR # variable will take. If 'yes', then the emitted script # will assume that the directory where it is stored is # the $objdir directory. This is a cygwin/mingw-specific # behavior. func_emit_wrapper () { func_emit_wrapper_arg1=${1-no} $ECHO "\ #! $SHELL # $output - temporary wrapper script for $objdir/$outputname # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # The $output program cannot be directly executed until all the libtool # libraries that it depends on are installed. # # This wrapper script should never be moved out of the build directory. # If it is, it will not operate correctly. # Sed substitution that helps us do robust quoting. It backslashifies # metacharacters that are still active within double-quoted strings. sed_quote_subst='$sed_quote_subst' # Be Bourne compatible if test -n \"\${ZSH_VERSION+set}\" && (emulate sh) >/dev/null 2>&1; then emulate sh NULLCMD=: # Zsh 3.x and 4.x performs word splitting on \${1+\"\$@\"}, which # is contrary to our usage. Disable this feature. alias -g '\${1+\"\$@\"}'='\"\$@\"' setopt NO_GLOB_SUBST else case \`(set -o) 2>/dev/null\` in *posix*) set -o posix;; esac fi BIN_SH=xpg4; export BIN_SH # for Tru64 DUALCASE=1; export DUALCASE # for MKS sh # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH relink_command=\"$relink_command\" # This environment variable determines our operation mode. if test \"\$libtool_install_magic\" = \"$magic\"; then # install mode needs the following variables: generated_by_libtool_version='$macro_version' notinst_deplibs='$notinst_deplibs' else # When we are sourced in execute mode, \$file and \$ECHO are already set. if test \"\$libtool_execute_magic\" != \"$magic\"; then file=\"\$0\"" qECHO=`$ECHO "$ECHO" | $SED "$sed_quote_subst"` $ECHO "\ # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } ECHO=\"$qECHO\" fi # Very basic option parsing. These options are (a) specific to # the libtool wrapper, (b) are identical between the wrapper # /script/ and the wrapper /executable/ that is used only on # windows platforms, and (c) all begin with the string "--lt-" # (application programs are unlikely to have options that match # this pattern). # # There are only two supported options: --lt-debug and # --lt-dump-script. There is, deliberately, no --lt-help. # # The first argument to this parsing function should be the # script's $0 value, followed by "$@". lt_option_debug= func_parse_lt_options () { lt_script_arg0=\$0 shift for lt_opt do case \"\$lt_opt\" in --lt-debug) lt_option_debug=1 ;; --lt-dump-script) lt_dump_D=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%/[^/]*$%%'\` test \"X\$lt_dump_D\" = \"X\$lt_script_arg0\" && lt_dump_D=. lt_dump_F=\`\$ECHO \"X\$lt_script_arg0\" | $SED -e 's/^X//' -e 's%^.*/%%'\` cat \"\$lt_dump_D/\$lt_dump_F\" exit 0 ;; --lt-*) \$ECHO \"Unrecognized --lt- option: '\$lt_opt'\" 1>&2 exit 1 ;; esac done # Print the debug banner immediately: if test -n \"\$lt_option_debug\"; then echo \"$outputname:$output:\$LINENO: libtool wrapper (GNU $PACKAGE) $VERSION\" 1>&2 fi } # Used when --lt-debug. Prints its arguments to stdout # (redirection is the responsibility of the caller) func_lt_dump_args () { lt_dump_args_N=1; for lt_arg do \$ECHO \"$outputname:$output:\$LINENO: newargv[\$lt_dump_args_N]: \$lt_arg\" lt_dump_args_N=\`expr \$lt_dump_args_N + 1\` done } # Core function for launching the target application func_exec_program_core () { " case $host in # Backslashes separate directories on plain windows *-*-mingw | *-*-os2* | *-cegcc*) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir\\\\\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir\\\\\$program\" \${1+\"\$@\"} " ;; *) $ECHO "\ if test -n \"\$lt_option_debug\"; then \$ECHO \"$outputname:$output:\$LINENO: newargv[0]: \$progdir/\$program\" 1>&2 func_lt_dump_args \${1+\"\$@\"} 1>&2 fi exec \"\$progdir/\$program\" \${1+\"\$@\"} " ;; esac $ECHO "\ \$ECHO \"\$0: cannot exec \$program \$*\" 1>&2 exit 1 } # A function to encapsulate launching the target application # Strips options in the --lt-* namespace from \$@ and # launches target application with the remaining arguments. func_exec_program () { case \" \$* \" in *\\ --lt-*) for lt_wr_arg do case \$lt_wr_arg in --lt-*) ;; *) set x \"\$@\" \"\$lt_wr_arg\"; shift;; esac shift done ;; esac func_exec_program_core \${1+\"\$@\"} } # Parse options func_parse_lt_options \"\$0\" \${1+\"\$@\"} # Find the directory that this script lives in. thisdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*$%%'\` test \"x\$thisdir\" = \"x\$file\" && thisdir=. # Follow symbolic links until we get to the real thisdir. file=\`ls -ld \"\$file\" | $SED -n 's/.*-> //p'\` while test -n \"\$file\"; do destdir=\`\$ECHO \"\$file\" | $SED 's%/[^/]*\$%%'\` # If there was a directory component, then change thisdir. if test \"x\$destdir\" != \"x\$file\"; then case \"\$destdir\" in [\\\\/]* | [A-Za-z]:[\\\\/]*) thisdir=\"\$destdir\" ;; *) thisdir=\"\$thisdir/\$destdir\" ;; esac fi file=\`\$ECHO \"\$file\" | $SED 's%^.*/%%'\` file=\`ls -ld \"\$thisdir/\$file\" | $SED -n 's/.*-> //p'\` done # Usually 'no', except on cygwin/mingw when embedded into # the cwrapper. WRAPPER_SCRIPT_BELONGS_IN_OBJDIR=$func_emit_wrapper_arg1 if test \"\$WRAPPER_SCRIPT_BELONGS_IN_OBJDIR\" = \"yes\"; then # special case for '.' if test \"\$thisdir\" = \".\"; then thisdir=\`pwd\` fi # remove .libs from thisdir case \"\$thisdir\" in *[\\\\/]$objdir ) thisdir=\`\$ECHO \"\$thisdir\" | $SED 's%[\\\\/][^\\\\/]*$%%'\` ;; $objdir ) thisdir=. ;; esac fi # Try to get the absolute directory name. absdir=\`cd \"\$thisdir\" && pwd\` test -n \"\$absdir\" && thisdir=\"\$absdir\" " if test yes = "$fast_install"; then $ECHO "\ program=lt-'$outputname'$exeext progdir=\"\$thisdir/$objdir\" if test ! -f \"\$progdir/\$program\" || { file=\`ls -1dt \"\$progdir/\$program\" \"\$progdir/../\$program\" 2>/dev/null | $SED 1q\`; \\ test \"X\$file\" != \"X\$progdir/\$program\"; }; then file=\"\$\$-\$program\" if test ! -d \"\$progdir\"; then $MKDIR \"\$progdir\" else $RM \"\$progdir/\$file\" fi" $ECHO "\ # relink executable if necessary if test -n \"\$relink_command\"; then if relink_command_output=\`eval \$relink_command 2>&1\`; then : else \$ECHO \"\$relink_command_output\" >&2 $RM \"\$progdir/\$file\" exit 1 fi fi $MV \"\$progdir/\$file\" \"\$progdir/\$program\" 2>/dev/null || { $RM \"\$progdir/\$program\"; $MV \"\$progdir/\$file\" \"\$progdir/\$program\"; } $RM \"\$progdir/\$file\" fi" else $ECHO "\ program='$outputname' progdir=\"\$thisdir/$objdir\" " fi $ECHO "\ if test -f \"\$progdir/\$program\"; then" # fixup the dll searchpath if we need to. # # Fix the DLL searchpath if we need to. Do this before prepending # to shlibpath, because on Windows, both are PATH and uninstalled # libraries must come first. if test -n "$dllsearchpath"; then $ECHO "\ # Add the dll search path components to the executable PATH PATH=$dllsearchpath:\$PATH " fi # Export our shlibpath_var if we have one. if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then $ECHO "\ # Add our own library path to $shlibpath_var $shlibpath_var=\"$temp_rpath\$$shlibpath_var\" # Some systems cannot cope with colon-terminated $shlibpath_var # The second colon is a workaround for a bug in BeOS R4 sed $shlibpath_var=\`\$ECHO \"\$$shlibpath_var\" | $SED 's/::*\$//'\` export $shlibpath_var " fi $ECHO "\ if test \"\$libtool_execute_magic\" != \"$magic\"; then # Run the actual program with our arguments. func_exec_program \${1+\"\$@\"} fi else # The program doesn't exist. \$ECHO \"\$0: error: '\$progdir/\$program' does not exist\" 1>&2 \$ECHO \"This script is just a wrapper for \$program.\" 1>&2 \$ECHO \"See the $PACKAGE documentation for more information.\" 1>&2 exit 1 fi fi\ " } # func_emit_cwrapperexe_src # emit the source code for a wrapper executable on stdout # Must ONLY be called from within func_mode_link because # it depends on a number of variable set therein. func_emit_cwrapperexe_src () { cat <<EOF /* $cwrappersource - temporary wrapper executable for $objdir/$outputname Generated by $PROGRAM (GNU $PACKAGE) $VERSION The $output program cannot be directly executed until all the libtool libraries that it depends on are installed. This wrapper executable should never be moved out of the build directory. If it is, it will not operate correctly. */ EOF cat <<"EOF" #ifdef _MSC_VER # define _CRT_SECURE_NO_DEPRECATE 1 #endif #include <stdio.h> #include <stdlib.h> #ifdef _MSC_VER # include <direct.h> # include <process.h> # include <io.h> #else # include <unistd.h> # include <stdint.h> # ifdef __CYGWIN__ # include <io.h> # endif #endif #include <malloc.h> #include <stdarg.h> #include <assert.h> #include <string.h> #include <ctype.h> #include <errno.h> #include <fcntl.h> #include <sys/stat.h> #define STREQ(s1, s2) (strcmp ((s1), (s2)) == 0) /* declarations of non-ANSI functions */ #if defined __MINGW32__ # ifdef __STRICT_ANSI__ int _putenv (const char *); # endif #elif defined __CYGWIN__ # ifdef __STRICT_ANSI__ char *realpath (const char *, char *); int putenv (char *); int setenv (const char *, const char *, int); # endif /* #elif defined other_platform || defined ... */ #endif /* portability defines, excluding path handling macros */ #if defined _MSC_VER # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv # define S_IXUSR _S_IEXEC #elif defined __MINGW32__ # define setmode _setmode # define stat _stat # define chmod _chmod # define getcwd _getcwd # define putenv _putenv #elif defined __CYGWIN__ # define HAVE_SETENV # define FOPEN_WB "wb" /* #elif defined other platforms ... */ #endif #if defined PATH_MAX # define LT_PATHMAX PATH_MAX #elif defined MAXPATHLEN # define LT_PATHMAX MAXPATHLEN #else # define LT_PATHMAX 1024 #endif #ifndef S_IXOTH # define S_IXOTH 0 #endif #ifndef S_IXGRP # define S_IXGRP 0 #endif /* path handling portability macros */ #ifndef DIR_SEPARATOR # define DIR_SEPARATOR '/' # define PATH_SEPARATOR ':' #endif #if defined _WIN32 || defined __MSDOS__ || defined __DJGPP__ || \ defined __OS2__ # define HAVE_DOS_BASED_FILE_SYSTEM # define FOPEN_WB "wb" # ifndef DIR_SEPARATOR_2 # define DIR_SEPARATOR_2 '\\' # endif # ifndef PATH_SEPARATOR_2 # define PATH_SEPARATOR_2 ';' # endif #endif #ifndef DIR_SEPARATOR_2 # define IS_DIR_SEPARATOR(ch) ((ch) == DIR_SEPARATOR) #else /* DIR_SEPARATOR_2 */ # define IS_DIR_SEPARATOR(ch) \ (((ch) == DIR_SEPARATOR) || ((ch) == DIR_SEPARATOR_2)) #endif /* DIR_SEPARATOR_2 */ #ifndef PATH_SEPARATOR_2 # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR) #else /* PATH_SEPARATOR_2 */ # define IS_PATH_SEPARATOR(ch) ((ch) == PATH_SEPARATOR_2) #endif /* PATH_SEPARATOR_2 */ #ifndef FOPEN_WB # define FOPEN_WB "w" #endif #ifndef _O_BINARY # define _O_BINARY 0 #endif #define XMALLOC(type, num) ((type *) xmalloc ((num) * sizeof(type))) #define XFREE(stale) do { \ if (stale) { free (stale); stale = 0; } \ } while (0) #if defined LT_DEBUGWRAPPER static int lt_debug = 1; #else static int lt_debug = 0; #endif const char *program_name = "libtool-wrapper"; /* in case xstrdup fails */ void *xmalloc (size_t num); char *xstrdup (const char *string); const char *base_name (const char *name); char *find_executable (const char *wrapper); char *chase_symlinks (const char *pathspec); int make_executable (const char *path); int check_executable (const char *path); char *strendzap (char *str, const char *pat); void lt_debugprintf (const char *file, int line, const char *fmt, ...); void lt_fatal (const char *file, int line, const char *message, ...); static const char *nonnull (const char *s); static const char *nonempty (const char *s); void lt_setenv (const char *name, const char *value); char *lt_extend_str (const char *orig_value, const char *add, int to_end); void lt_update_exe_path (const char *name, const char *value); void lt_update_lib_path (const char *name, const char *value); char **prepare_spawn (char **argv); void lt_dump_script (FILE *f); EOF cat <<EOF #if __GNUC__ < 4 || (__GNUC__ == 4 && __GNUC_MINOR__ < 5) # define externally_visible volatile #else # define externally_visible __attribute__((externally_visible)) volatile #endif externally_visible const char * MAGIC_EXE = "$magic_exe"; const char * LIB_PATH_VARNAME = "$shlibpath_var"; EOF if test yes = "$shlibpath_overrides_runpath" && test -n "$shlibpath_var" && test -n "$temp_rpath"; then func_to_host_path "$temp_rpath" cat <<EOF const char * LIB_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * LIB_PATH_VALUE = ""; EOF fi if test -n "$dllsearchpath"; then func_to_host_path "$dllsearchpath:" cat <<EOF const char * EXE_PATH_VARNAME = "PATH"; const char * EXE_PATH_VALUE = "$func_to_host_path_result"; EOF else cat <<"EOF" const char * EXE_PATH_VARNAME = ""; const char * EXE_PATH_VALUE = ""; EOF fi if test yes = "$fast_install"; then cat <<EOF const char * TARGET_PROGRAM_NAME = "lt-$outputname"; /* hopefully, no .exe */ EOF else cat <<EOF const char * TARGET_PROGRAM_NAME = "$outputname"; /* hopefully, no .exe */ EOF fi cat <<"EOF" #define LTWRAPPER_OPTION_PREFIX "--lt-" static const char *ltwrapper_option_prefix = LTWRAPPER_OPTION_PREFIX; static const char *dumpscript_opt = LTWRAPPER_OPTION_PREFIX "dump-script"; static const char *debug_opt = LTWRAPPER_OPTION_PREFIX "debug"; int main (int argc, char *argv[]) { char **newargz; int newargc; char *tmp_pathspec; char *actual_cwrapper_path; char *actual_cwrapper_name; char *target_name; char *lt_argv_zero; int rval = 127; int i; program_name = (char *) xstrdup (base_name (argv[0])); newargz = XMALLOC (char *, (size_t) argc + 1); /* very simple arg parsing; don't want to rely on getopt * also, copy all non cwrapper options to newargz, except * argz[0], which is handled differently */ newargc=0; for (i = 1; i < argc; i++) { if (STREQ (argv[i], dumpscript_opt)) { EOF case $host in *mingw* | *cygwin* ) # make stdout use "unix" line endings echo " setmode(1,_O_BINARY);" ;; esac cat <<"EOF" lt_dump_script (stdout); return 0; } if (STREQ (argv[i], debug_opt)) { lt_debug = 1; continue; } if (STREQ (argv[i], ltwrapper_option_prefix)) { /* however, if there is an option in the LTWRAPPER_OPTION_PREFIX namespace, but it is not one of the ones we know about and have already dealt with, above (inluding dump-script), then report an error. Otherwise, targets might begin to believe they are allowed to use options in the LTWRAPPER_OPTION_PREFIX namespace. The first time any user complains about this, we'll need to make LTWRAPPER_OPTION_PREFIX a configure-time option or a configure.ac-settable value. */ lt_fatal (__FILE__, __LINE__, "unrecognized %s option: '%s'", ltwrapper_option_prefix, argv[i]); } /* otherwise ... */ newargz[++newargc] = xstrdup (argv[i]); } newargz[++newargc] = NULL; EOF cat <<EOF /* The GNU banner must be the first non-error debug message */ lt_debugprintf (__FILE__, __LINE__, "libtool wrapper (GNU $PACKAGE) $VERSION\n"); EOF cat <<"EOF" lt_debugprintf (__FILE__, __LINE__, "(main) argv[0]: %s\n", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) program_name: %s\n", program_name); tmp_pathspec = find_executable (argv[0]); if (tmp_pathspec == NULL) lt_fatal (__FILE__, __LINE__, "couldn't find %s", argv[0]); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (before symlink chase) at: %s\n", tmp_pathspec); actual_cwrapper_path = chase_symlinks (tmp_pathspec); lt_debugprintf (__FILE__, __LINE__, "(main) found exe (after symlink chase) at: %s\n", actual_cwrapper_path); XFREE (tmp_pathspec); actual_cwrapper_name = xstrdup (base_name (actual_cwrapper_path)); strendzap (actual_cwrapper_path, actual_cwrapper_name); /* wrapper name transforms */ strendzap (actual_cwrapper_name, ".exe"); tmp_pathspec = lt_extend_str (actual_cwrapper_name, ".exe", 1); XFREE (actual_cwrapper_name); actual_cwrapper_name = tmp_pathspec; tmp_pathspec = 0; /* target_name transforms -- use actual target program name; might have lt- prefix */ target_name = xstrdup (base_name (TARGET_PROGRAM_NAME)); strendzap (target_name, ".exe"); tmp_pathspec = lt_extend_str (target_name, ".exe", 1); XFREE (target_name); target_name = tmp_pathspec; tmp_pathspec = 0; lt_debugprintf (__FILE__, __LINE__, "(main) libtool target name: %s\n", target_name); EOF cat <<EOF newargz[0] = XMALLOC (char, (strlen (actual_cwrapper_path) + strlen ("$objdir") + 1 + strlen (actual_cwrapper_name) + 1)); strcpy (newargz[0], actual_cwrapper_path); strcat (newargz[0], "$objdir"); strcat (newargz[0], "/"); EOF cat <<"EOF" /* stop here, and copy so we don't have to do this twice */ tmp_pathspec = xstrdup (newargz[0]); /* do NOT want the lt- prefix here, so use actual_cwrapper_name */ strcat (newargz[0], actual_cwrapper_name); /* DO want the lt- prefix here if it exists, so use target_name */ lt_argv_zero = lt_extend_str (tmp_pathspec, target_name, 1); XFREE (tmp_pathspec); tmp_pathspec = NULL; EOF case $host_os in mingw*) cat <<"EOF" { char* p; while ((p = strchr (newargz[0], '\\')) != NULL) { *p = '/'; } while ((p = strchr (lt_argv_zero, '\\')) != NULL) { *p = '/'; } } EOF ;; esac cat <<"EOF" XFREE (target_name); XFREE (actual_cwrapper_path); XFREE (actual_cwrapper_name); lt_setenv ("BIN_SH", "xpg4"); /* for Tru64 */ lt_setenv ("DUALCASE", "1"); /* for MSK sh */ /* Update the DLL searchpath. EXE_PATH_VALUE ($dllsearchpath) must be prepended before (that is, appear after) LIB_PATH_VALUE ($temp_rpath) because on Windows, both *_VARNAMEs are PATH but uninstalled libraries must come first. */ lt_update_exe_path (EXE_PATH_VARNAME, EXE_PATH_VALUE); lt_update_lib_path (LIB_PATH_VARNAME, LIB_PATH_VALUE); lt_debugprintf (__FILE__, __LINE__, "(main) lt_argv_zero: %s\n", nonnull (lt_argv_zero)); for (i = 0; i < newargc; i++) { lt_debugprintf (__FILE__, __LINE__, "(main) newargz[%d]: %s\n", i, nonnull (newargz[i])); } EOF case $host_os in mingw*) cat <<"EOF" /* execv doesn't actually work on mingw as expected on unix */ newargz = prepare_spawn (newargz); rval = (int) _spawnv (_P_WAIT, lt_argv_zero, (const char * const *) newargz); if (rval == -1) { /* failed to start process */ lt_debugprintf (__FILE__, __LINE__, "(main) failed to launch target \"%s\": %s\n", lt_argv_zero, nonnull (strerror (errno))); return 127; } return rval; EOF ;; *) cat <<"EOF" execv (lt_argv_zero, newargz); return rval; /* =127, but avoids unused variable warning */ EOF ;; esac cat <<"EOF" } void * xmalloc (size_t num) { void *p = (void *) malloc (num); if (!p) lt_fatal (__FILE__, __LINE__, "memory exhausted"); return p; } char * xstrdup (const char *string) { return string ? strcpy ((char *) xmalloc (strlen (string) + 1), string) : NULL; } const char * base_name (const char *name) { const char *base; #if defined HAVE_DOS_BASED_FILE_SYSTEM /* Skip over the disk name in MSDOS pathnames. */ if (isalpha ((unsigned char) name[0]) && name[1] == ':') name += 2; #endif for (base = name; *name; name++) if (IS_DIR_SEPARATOR (*name)) base = name + 1; return base; } int check_executable (const char *path) { struct stat st; lt_debugprintf (__FILE__, __LINE__, "(check_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if ((stat (path, &st) >= 0) && (st.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH))) return 1; else return 0; } int make_executable (const char *path) { int rval = 0; struct stat st; lt_debugprintf (__FILE__, __LINE__, "(make_executable): %s\n", nonempty (path)); if ((!path) || (!*path)) return 0; if (stat (path, &st) >= 0) { rval = chmod (path, st.st_mode | S_IXOTH | S_IXGRP | S_IXUSR); } return rval; } /* Searches for the full path of the wrapper. Returns newly allocated full path name if found, NULL otherwise Does not chase symlinks, even on platforms that support them. */ char * find_executable (const char *wrapper) { int has_slash = 0; const char *p; const char *p_next; /* static buffer for getcwd */ char tmp[LT_PATHMAX + 1]; size_t tmp_len; char *concat_name; lt_debugprintf (__FILE__, __LINE__, "(find_executable): %s\n", nonempty (wrapper)); if ((wrapper == NULL) || (*wrapper == '\0')) return NULL; /* Absolute path? */ #if defined HAVE_DOS_BASED_FILE_SYSTEM if (isalpha ((unsigned char) wrapper[0]) && wrapper[1] == ':') { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } else { #endif if (IS_DIR_SEPARATOR (wrapper[0])) { concat_name = xstrdup (wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } #if defined HAVE_DOS_BASED_FILE_SYSTEM } #endif for (p = wrapper; *p; p++) if (*p == '/') { has_slash = 1; break; } if (!has_slash) { /* no slashes; search PATH */ const char *path = getenv ("PATH"); if (path != NULL) { for (p = path; *p; p = p_next) { const char *q; size_t p_len; for (q = p; *q; q++) if (IS_PATH_SEPARATOR (*q)) break; p_len = (size_t) (q - p); p_next = (*q == '\0' ? q : q + 1); if (p_len == 0) { /* empty path: current directory */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); } else { concat_name = XMALLOC (char, p_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, p, p_len); concat_name[p_len] = '/'; strcpy (concat_name + p_len + 1, wrapper); } if (check_executable (concat_name)) return concat_name; XFREE (concat_name); } } /* not found in PATH; assume curdir */ } /* Relative path | not found in path: prepend cwd */ if (getcwd (tmp, LT_PATHMAX) == NULL) lt_fatal (__FILE__, __LINE__, "getcwd failed: %s", nonnull (strerror (errno))); tmp_len = strlen (tmp); concat_name = XMALLOC (char, tmp_len + 1 + strlen (wrapper) + 1); memcpy (concat_name, tmp, tmp_len); concat_name[tmp_len] = '/'; strcpy (concat_name + tmp_len + 1, wrapper); if (check_executable (concat_name)) return concat_name; XFREE (concat_name); return NULL; } char * chase_symlinks (const char *pathspec) { #ifndef S_ISLNK return xstrdup (pathspec); #else char buf[LT_PATHMAX]; struct stat s; char *tmp_pathspec = xstrdup (pathspec); char *p; int has_symlinks = 0; while (strlen (tmp_pathspec) && !has_symlinks) { lt_debugprintf (__FILE__, __LINE__, "checking path component for symlinks: %s\n", tmp_pathspec); if (lstat (tmp_pathspec, &s) == 0) { if (S_ISLNK (s.st_mode) != 0) { has_symlinks = 1; break; } /* search backwards for last DIR_SEPARATOR */ p = tmp_pathspec + strlen (tmp_pathspec) - 1; while ((p > tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) p--; if ((p == tmp_pathspec) && (!IS_DIR_SEPARATOR (*p))) { /* no more DIR_SEPARATORS left */ break; } *p = '\0'; } else { lt_fatal (__FILE__, __LINE__, "error accessing file \"%s\": %s", tmp_pathspec, nonnull (strerror (errno))); } } XFREE (tmp_pathspec); if (!has_symlinks) { return xstrdup (pathspec); } tmp_pathspec = realpath (pathspec, buf); if (tmp_pathspec == 0) { lt_fatal (__FILE__, __LINE__, "could not follow symlinks for %s", pathspec); } return xstrdup (tmp_pathspec); #endif } char * strendzap (char *str, const char *pat) { size_t len, patlen; assert (str != NULL); assert (pat != NULL); len = strlen (str); patlen = strlen (pat); if (patlen <= len) { str += len - patlen; if (STREQ (str, pat)) *str = '\0'; } return str; } void lt_debugprintf (const char *file, int line, const char *fmt, ...) { va_list args; if (lt_debug) { (void) fprintf (stderr, "%s:%s:%d: ", program_name, file, line); va_start (args, fmt); (void) vfprintf (stderr, fmt, args); va_end (args); } } static void lt_error_core (int exit_status, const char *file, int line, const char *mode, const char *message, va_list ap) { fprintf (stderr, "%s:%s:%d: %s: ", program_name, file, line, mode); vfprintf (stderr, message, ap); fprintf (stderr, ".\n"); if (exit_status >= 0) exit (exit_status); } void lt_fatal (const char *file, int line, const char *message, ...) { va_list ap; va_start (ap, message); lt_error_core (EXIT_FAILURE, file, line, "FATAL", message, ap); va_end (ap); } static const char * nonnull (const char *s) { return s ? s : "(null)"; } static const char * nonempty (const char *s) { return (s && !*s) ? "(empty)" : nonnull (s); } void lt_setenv (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_setenv) setting '%s' to '%s'\n", nonnull (name), nonnull (value)); { #ifdef HAVE_SETENV /* always make a copy, for consistency with !HAVE_SETENV */ char *str = xstrdup (value); setenv (name, str, 1); #else size_t len = strlen (name) + 1 + strlen (value) + 1; char *str = XMALLOC (char, len); sprintf (str, "%s=%s", name, value); if (putenv (str) != EXIT_SUCCESS) { XFREE (str); } #endif } } char * lt_extend_str (const char *orig_value, const char *add, int to_end) { char *new_value; if (orig_value && *orig_value) { size_t orig_value_len = strlen (orig_value); size_t add_len = strlen (add); new_value = XMALLOC (char, add_len + orig_value_len + 1); if (to_end) { strcpy (new_value, orig_value); strcpy (new_value + orig_value_len, add); } else { strcpy (new_value, add); strcpy (new_value + add_len, orig_value); } } else { new_value = xstrdup (add); } return new_value; } void lt_update_exe_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_exe_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); /* some systems can't cope with a ':'-terminated path #' */ size_t len = strlen (new_value); while ((len > 0) && IS_PATH_SEPARATOR (new_value[len-1])) { new_value[--len] = '\0'; } lt_setenv (name, new_value); XFREE (new_value); } } void lt_update_lib_path (const char *name, const char *value) { lt_debugprintf (__FILE__, __LINE__, "(lt_update_lib_path) modifying '%s' by prepending '%s'\n", nonnull (name), nonnull (value)); if (name && *name && value && *value) { char *new_value = lt_extend_str (getenv (name), value, 0); lt_setenv (name, new_value); XFREE (new_value); } } EOF case $host_os in mingw*) cat <<"EOF" /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Win32 CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" */ #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" char ** prepare_spawn (char **argv) { size_t argc; char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = XMALLOC (char *, argc + 1); /* Put quoted arguments into the new argument vector. */ for (i = 0; i < argc; i++) { const char *string = argv[i]; if (string[0] == '\0') new_argv[i] = xstrdup ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { int quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; char *quoted_string; char *p; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; quoted_string = XMALLOC (char, length + 1); p = quoted_string; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p = '\0'; new_argv[i] = quoted_string; } else new_argv[i] = (char *) string; } new_argv[argc] = NULL; return new_argv; } EOF ;; esac cat <<"EOF" void lt_dump_script (FILE* f) { EOF func_emit_wrapper yes | $SED -n -e ' s/^\(.\{79\}\)\(..*\)/\1\ \2/ h s/\([\\"]\)/\\\1/g s/$/\\n/ s/\([^\n]*\).*/ fputs ("\1", f);/p g D' cat <<"EOF" } EOF } # end: func_emit_cwrapperexe_src # func_win32_import_lib_p ARG # True if ARG is an import lib, as indicated by $file_magic_cmd func_win32_import_lib_p () { $debug_cmd case `eval $file_magic_cmd \"\$1\" 2>/dev/null | $SED -e 10q` in *import*) : ;; *) false ;; esac } # func_suncc_cstd_abi # !!ONLY CALL THIS FOR SUN CC AFTER $compile_command IS FULLY EXPANDED!! # Several compiler flags select an ABI that is incompatible with the # Cstd library. Avoid specifying it if any are in CXXFLAGS. func_suncc_cstd_abi () { $debug_cmd case " $compile_command " in *" -compat=g "*|*\ -std=c++[0-9][0-9]\ *|*" -library=stdcxx4 "*|*" -library=stlport4 "*) suncc_use_cstd_abi=no ;; *) suncc_use_cstd_abi=yes ;; esac } # func_mode_link arg... func_mode_link () { $debug_cmd case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) # It is impossible to link a dll without this setting, and # we shouldn't force the makefile maintainer to figure out # what system we are compiling for in order to pass an extra # flag for every libtool invocation. # allow_undefined=no # FIXME: Unfortunately, there are problems with the above when trying # to make a dll that has undefined symbols, in which case not # even a static library is built. For now, we need to specify # -no-undefined on the libtool link line when we can be certain # that all symbols are satisfied, otherwise we get a static library. allow_undefined=yes ;; *) allow_undefined=yes ;; esac libtool_args=$nonopt base_compile="$nonopt $@" compile_command=$nonopt finalize_command=$nonopt compile_rpath= finalize_rpath= compile_shlibpath= finalize_shlibpath= convenience= old_convenience= deplibs= old_deplibs= compiler_flags= linker_flags= dllsearchpath= lib_search_path=`pwd` inst_prefix_dir= new_inherited_linker_flags= avoid_version=no bindir= dlfiles= dlprefiles= dlself=no export_dynamic=no export_symbols= export_symbols_regex= generated= libobjs= ltlibs= module=no no_install=no objs= os2dllname= non_pic_objects= precious_files_regex= prefer_static_libs=no preload=false prev= prevarg= release= rpath= xrpath= perm_rpath= temp_rpath= thread_safe=no vinfo= vinfo_number=no weak_libs= single_module=$wl-single_module func_infer_tag $base_compile # We need to know -static, to get the right output filenames. for arg do case $arg in -shared) test yes != "$build_libtool_libs" \ && func_fatal_configuration "cannot build a shared library" build_old_libs=no break ;; -all-static | -static | -static-libtool-libs) case $arg in -all-static) if test yes = "$build_libtool_libs" && test -z "$link_static_flag"; then func_warning "complete static linking is impossible in this configuration" fi if test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; -static) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=built ;; -static-libtool-libs) if test -z "$pic_flag" && test -n "$link_static_flag"; then dlopen_self=$dlopen_self_static fi prefer_static_libs=yes ;; esac build_libtool_libs=no build_old_libs=yes break ;; esac done # See if our shared archives depend on static archives. test -n "$old_archive_from_new_cmds" && build_old_libs=yes # Go through the arguments, transforming them on the way. while test "$#" -gt 0; do arg=$1 shift func_quote_for_eval "$arg" qarg=$func_quote_for_eval_unquoted_result func_append libtool_args " $func_quote_for_eval_result" # If the previous option needs an argument, assign it. if test -n "$prev"; then case $prev in output) func_append compile_command " @OUTPUT@" func_append finalize_command " @OUTPUT@" ;; esac case $prev in bindir) bindir=$arg prev= continue ;; dlfiles|dlprefiles) $preload || { # Add the symbol object into the linking commands. func_append compile_command " @SYMFILE@" func_append finalize_command " @SYMFILE@" preload=: } case $arg in *.la | *.lo) ;; # We handle these cases below. force) if test no = "$dlself"; then dlself=needless export_dynamic=yes fi prev= continue ;; self) if test dlprefiles = "$prev"; then dlself=yes elif test dlfiles = "$prev" && test yes != "$dlopen_self"; then dlself=yes else dlself=needless export_dynamic=yes fi prev= continue ;; *) if test dlfiles = "$prev"; then func_append dlfiles " $arg" else func_append dlprefiles " $arg" fi prev= continue ;; esac ;; expsyms) export_symbols=$arg test -f "$arg" \ || func_fatal_error "symbol file '$arg' does not exist" prev= continue ;; expsyms_regex) export_symbols_regex=$arg prev= continue ;; framework) case $host in *-*-darwin*) case "$deplibs " in *" $qarg.ltframework "*) ;; *) func_append deplibs " $qarg.ltframework" # this is fixed later ;; esac ;; esac prev= continue ;; inst_prefix) inst_prefix_dir=$arg prev= continue ;; mllvm) # Clang does not use LLVM to link, so we can simply discard any # '-mllvm $arg' options when doing the link step. prev= continue ;; objectlist) if test -f "$arg"; then save_arg=$arg moreargs= for fil in `cat "$save_arg"` do # func_append moreargs " $fil" arg=$fil # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result if test none != "$pic_object"; then # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object fi # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi done else func_fatal_error "link input file '$arg' does not exist" fi arg=$save_arg prev= continue ;; os2dllname) os2dllname=$arg prev= continue ;; precious_regex) precious_files_regex=$arg prev= continue ;; release) release=-$arg prev= continue ;; rpath | xrpath) # We need an absolute path. case $arg in [\\/]* | [A-Za-z]:[\\/]*) ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac if test rpath = "$prev"; then case "$rpath " in *" $arg "*) ;; *) func_append rpath " $arg" ;; esac else case "$xrpath " in *" $arg "*) ;; *) func_append xrpath " $arg" ;; esac fi prev= continue ;; shrext) shrext_cmds=$arg prev= continue ;; weak) func_append weak_libs " $arg" prev= continue ;; xcclinker) func_append linker_flags " $qarg" func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xcompiler) func_append compiler_flags " $qarg" prev= func_append compile_command " $qarg" func_append finalize_command " $qarg" continue ;; xlinker) func_append linker_flags " $qarg" func_append compiler_flags " $wl$qarg" prev= func_append compile_command " $wl$qarg" func_append finalize_command " $wl$qarg" continue ;; *) eval "$prev=\"\$arg\"" prev= continue ;; esac fi # test -n "$prev" prevarg=$arg case $arg in -all-static) if test -n "$link_static_flag"; then # See comment for -static flag below, for more details. func_append compile_command " $link_static_flag" func_append finalize_command " $link_static_flag" fi continue ;; -allow-undefined) # FIXME: remove this flag sometime in the future. func_fatal_error "'-allow-undefined' must not be used because it is the default" ;; -avoid-version) avoid_version=yes continue ;; -bindir) prev=bindir continue ;; -dlopen) prev=dlfiles continue ;; -dlpreopen) prev=dlprefiles continue ;; -export-dynamic) export_dynamic=yes continue ;; -export-symbols | -export-symbols-regex) if test -n "$export_symbols" || test -n "$export_symbols_regex"; then func_fatal_error "more than one -exported-symbols argument is not allowed" fi if test X-export-symbols = "X$arg"; then prev=expsyms else prev=expsyms_regex fi continue ;; -framework) prev=framework continue ;; -inst-prefix-dir) prev=inst_prefix continue ;; # The native IRIX linker understands -LANG:*, -LIST:* and -LNO:* # so, if we see these flags be careful not to treat them like -L -L[A-Z][A-Z]*:*) case $with_gcc/$host in no/*-*-irix* | /*-*-irix*) func_append compile_command " $arg" func_append finalize_command " $arg" ;; esac continue ;; -L*) func_stripname "-L" '' "$arg" if test -z "$func_stripname_result"; then if test "$#" -gt 0; then func_fatal_error "require no space between '-L' and '$1'" else func_fatal_error "need path for '-L' option" fi fi func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; *) absdir=`cd "$dir" && pwd` test -z "$absdir" && \ func_fatal_error "cannot determine absolute directory name of '$dir'" dir=$absdir ;; esac case "$deplibs " in *" -L$dir "* | *" $arg "*) # Will only happen for absolute or sysroot arguments ;; *) # Preserve sysroot, but never include relative directories case $dir in [\\/]* | [A-Za-z]:[\\/]* | =*) func_append deplibs " $arg" ;; *) func_append deplibs " -L$dir" ;; esac func_append lib_search_path " $dir" ;; esac case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$dir" | $SED 's*/lib$*/bin*'` case :$dllsearchpath: in *":$dir:"*) ;; ::) dllsearchpath=$dir;; *) func_append dllsearchpath ":$dir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac continue ;; -l*) if test X-lc = "X$arg" || test X-lm = "X$arg"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-beos* | *-cegcc* | *-*-haiku*) # These systems don't actually have a C or math library (as such) continue ;; *-*-os2*) # These systems don't actually have a C library (as such) test X-lc = "X$arg" && continue ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc due to us having libc/libc_r. test X-lc = "X$arg" && continue ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C and math libraries are in the System framework func_append deplibs " System.ltframework" continue ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype test X-lc = "X$arg" && continue ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work test X-lc = "X$arg" && continue ;; esac elif test X-lc_r = "X$arg"; then case $host in *-*-openbsd* | *-*-freebsd* | *-*-dragonfly* | *-*-bitrig*) # Do not include libc_r directly, use -pthread flag. continue ;; esac fi func_append deplibs " $arg" continue ;; -mllvm) prev=mllvm continue ;; -module) module=yes continue ;; # Tru64 UNIX uses -model [arg] to determine the layout of C++ # classes, name mangling, and exception handling. # Darwin uses the -arch flag to determine output architecture. -model|-arch|-isysroot|--sysroot) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" prev=xcompiler continue ;; -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) func_append compiler_flags " $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case "$new_inherited_linker_flags " in *" $arg "*) ;; * ) func_append new_inherited_linker_flags " $arg" ;; esac continue ;; -multi_module) single_module=$wl-multi_module continue ;; -no-fast-install) fast_install=no continue ;; -no-install) case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-darwin* | *-cegcc*) # The PATH hackery in wrapper scripts is required on Windows # and Darwin in order for the loader to find any dlls it needs. func_warning "'-no-install' is ignored for $host" func_warning "assuming '-no-fast-install' instead" fast_install=no ;; *) no_install=yes ;; esac continue ;; -no-undefined) allow_undefined=no continue ;; -objectlist) prev=objectlist continue ;; -os2dllname) prev=os2dllname continue ;; -o) prev=output ;; -precious-files-regex) prev=precious_regex continue ;; -release) prev=release continue ;; -rpath) prev=rpath continue ;; -R) prev=xrpath continue ;; -R*) func_stripname '-R' '' "$arg" dir=$func_stripname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) ;; =*) func_stripname '=' '' "$dir" dir=$lt_sysroot$func_stripname_result ;; *) func_fatal_error "only absolute run-paths are allowed" ;; esac case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac continue ;; -shared) # The effects of -shared are defined in a previous loop. continue ;; -shrext) prev=shrext continue ;; -static | -static-libtool-libs) # The effects of -static are defined in a previous loop. # We used to do the same as -all-static on platforms that # didn't have a PIC flag, but the assumption that the effects # would be equivalent was wrong. It would break on at least # Digital Unix and AIX. continue ;; -thread-safe) thread_safe=yes continue ;; -version-info) prev=vinfo continue ;; -version-number) prev=vinfo vinfo_number=yes continue ;; -weak) prev=weak continue ;; -Wc,*) func_stripname '-Wc,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $func_quote_for_eval_result" func_append compiler_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Wl,*) func_stripname '-Wl,' '' "$arg" args=$func_stripname_result arg= save_ifs=$IFS; IFS=, for flag in $args; do IFS=$save_ifs func_quote_for_eval "$flag" func_append arg " $wl$func_quote_for_eval_result" func_append compiler_flags " $wl$func_quote_for_eval_result" func_append linker_flags " $func_quote_for_eval_result" done IFS=$save_ifs func_stripname ' ' '' "$arg" arg=$func_stripname_result ;; -Xcompiler) prev=xcompiler continue ;; -Xlinker) prev=xlinker continue ;; -XCClinker) prev=xcclinker continue ;; # -msg_* for osf cc -msg_*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; # Flags to be passed through unchanged, with rationale: # -64, -mips[0-9] enable 64-bit mode for the SGI compiler # -r[0-9][0-9]* specify processor for the SGI compiler # -xarch=*, -xtarget=* enable 64-bit mode for the Sun compiler # +DA*, +DD* enable 64-bit mode for the HP compiler # -q* compiler args for the IBM compiler # -m*, -t[45]*, -txscale* architecture-specific flags for GCC # -F/path path to uninstalled frameworks, gcc on darwin # -p, -pg, --coverage, -fprofile-* profiling flags for GCC # -fstack-protector* stack protector flags for GCC # @file GCC response files # -tp=* Portland pgcc target processor selection # --sysroot=* for sysroot support # -O*, -g*, -flto*, -fwhopr*, -fuse-linker-plugin GCC link-time optimization # -specs=* GCC specs files # -stdlib=* select c++ std lib with clang # -fsanitize=* Clang/GCC memory and address sanitizer -64|-mips[0-9]|-r[0-9][0-9]*|-xarch=*|-xtarget=*|+DA*|+DD*|-q*|-m*| \ -t[45]*|-txscale*|-p|-pg|--coverage|-fprofile-*|-F*|@*|-tp=*|--sysroot=*| \ -O*|-g*|-flto*|-fwhopr*|-fuse-linker-plugin|-fstack-protector*|-stdlib=*| \ -specs=*|-fsanitize=*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result func_append compile_command " $arg" func_append finalize_command " $arg" func_append compiler_flags " $arg" continue ;; -Z*) if test os2 = "`expr $host : '.*\(os2\)'`"; then # OS/2 uses -Zxxx to specify OS/2-specific options compiler_flags="$compiler_flags $arg" func_append compile_command " $arg" func_append finalize_command " $arg" case $arg in -Zlinker | -Zstack) prev=xcompiler ;; esac continue else # Otherwise treat like 'Some other compiler flag' below func_quote_for_eval "$arg" arg=$func_quote_for_eval_result fi ;; # Some other compiler flag. -* | +*) func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; *.$objext) # A standard object. func_append objs " $arg" ;; *.lo) # A libtool-controlled object. # Check to see that this really is a libtool object. if func_lalib_unsafe_p "$arg"; then pic_object= non_pic_object= # Read the .lo file func_source "$arg" if test -z "$pic_object" || test -z "$non_pic_object" || test none = "$pic_object" && test none = "$non_pic_object"; then func_fatal_error "cannot find name of object for '$arg'" fi # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result test none = "$pic_object" || { # Prepend the subdirectory the object is found in. pic_object=$xdir$pic_object if test dlfiles = "$prev"; then if test yes = "$build_libtool_libs" && test yes = "$dlopen_support"; then func_append dlfiles " $pic_object" prev= continue else # If libtool objects are unsupported, then we need to preload. prev=dlprefiles fi fi # CHECK ME: I think I busted this. -Ossama if test dlprefiles = "$prev"; then # Preload the old-style object. func_append dlprefiles " $pic_object" prev= fi # A PIC object. func_append libobjs " $pic_object" arg=$pic_object } # Non-PIC object. if test none != "$non_pic_object"; then # Prepend the subdirectory the object is found in. non_pic_object=$xdir$non_pic_object # A standard non-PIC object func_append non_pic_objects " $non_pic_object" if test -z "$pic_object" || test none = "$pic_object"; then arg=$non_pic_object fi else # If the PIC object exists, use it instead. # $xdir was prepended to $pic_object above. non_pic_object=$pic_object func_append non_pic_objects " $non_pic_object" fi else # Only an error if not doing a dry-run. if $opt_dry_run; then # Extract subdirectory from the argument. func_dirname "$arg" "/" "" xdir=$func_dirname_result func_lo2o "$arg" pic_object=$xdir$objdir/$func_lo2o_result non_pic_object=$xdir$func_lo2o_result func_append libobjs " $pic_object" func_append non_pic_objects " $non_pic_object" else func_fatal_error "'$arg' is not a valid libtool object" fi fi ;; *.$libext) # An archive. func_append deplibs " $arg" func_append old_deplibs " $arg" continue ;; *.la) # A libtool-controlled library. func_resolve_sysroot "$arg" if test dlfiles = "$prev"; then # This library was specified with -dlopen. func_append dlfiles " $func_resolve_sysroot_result" prev= elif test dlprefiles = "$prev"; then # The library was specified with -dlpreopen. func_append dlprefiles " $func_resolve_sysroot_result" prev= else func_append deplibs " $func_resolve_sysroot_result" fi continue ;; # Some other compiler argument. *) # Unknown arguments in both finalize_command and compile_command need # to be aesthetically quoted because they are evaled later. func_quote_for_eval "$arg" arg=$func_quote_for_eval_result ;; esac # arg # Now actually substitute the argument into the commands. if test -n "$arg"; then func_append compile_command " $arg" func_append finalize_command " $arg" fi done # argument parsing loop test -n "$prev" && \ func_fatal_help "the '$prevarg' option requires an argument" if test yes = "$export_dynamic" && test -n "$export_dynamic_flag_spec"; then eval arg=\"$export_dynamic_flag_spec\" func_append compile_command " $arg" func_append finalize_command " $arg" fi oldlibs= # calculate the name of the file, without its directory func_basename "$output" outputname=$func_basename_result libobjs_save=$libobjs if test -n "$shlibpath_var"; then # get the directories listed in $shlibpath_var eval shlib_search_path=\`\$ECHO \"\$$shlibpath_var\" \| \$SED \'s/:/ /g\'\` else shlib_search_path= fi eval sys_lib_search_path=\"$sys_lib_search_path_spec\" eval sys_lib_dlsearch_path=\"$sys_lib_dlsearch_path_spec\" # Definition is injected by LT_CONFIG during libtool generation. func_munge_path_list sys_lib_dlsearch_path "$LT_SYS_LIBRARY_PATH" func_dirname "$output" "/" "" output_objdir=$func_dirname_result$objdir func_to_tool_file "$output_objdir/" tool_output_objdir=$func_to_tool_file_result # Create the object directory. func_mkdir_p "$output_objdir" # Determine the type of output case $output in "") func_fatal_help "you must specify an output file" ;; *.$libext) linkmode=oldlib ;; *.lo | *.$objext) linkmode=obj ;; *.la) linkmode=lib ;; *) linkmode=prog ;; # Anything else should be a program. esac specialdeplibs= libs= # Find all interdependent deplibs by searching for libraries # that are linked more than once (e.g. -la -lb -la) for deplib in $deplibs; do if $opt_preserve_dup_deps; then case "$libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append libs " $deplib" done if test lib = "$linkmode"; then libs="$predeps $libs $compiler_lib_search_path $postdeps" # Compute libraries that are listed more than once in $predeps # $postdeps and mark them as special (i.e., whose duplicates are # not to be eliminated). pre_post_deps= if $opt_duplicate_compiler_generated_deps; then for pre_post_dep in $predeps $postdeps; do case "$pre_post_deps " in *" $pre_post_dep "*) func_append specialdeplibs " $pre_post_deps" ;; esac func_append pre_post_deps " $pre_post_dep" done fi pre_post_deps= fi deplibs= newdependency_libs= newlib_search_path= need_relink=no # whether we're linking any uninstalled libtool libraries notinst_deplibs= # not-installed libtool libraries notinst_path= # paths that contain not-installed libtool libraries case $linkmode in lib) passes="conv dlpreopen link" for file in $dlfiles $dlprefiles; do case $file in *.la) ;; *) func_fatal_help "libraries can '-dlopen' only libtool libraries: $file" ;; esac done ;; prog) compile_deplibs= finalize_deplibs= alldeplibs=false newdlfiles= newdlprefiles= passes="conv scan dlopen dlpreopen link" ;; *) passes="conv" ;; esac for pass in $passes; do # The preopen pass in lib mode reverses $deplibs; put it back here # so that -L comes before libs that need it for instance... if test lib,link = "$linkmode,$pass"; then ## FIXME: Find the place where the list is rebuilt in the wrong ## order, and fix it there properly tmp_deplibs= for deplib in $deplibs; do tmp_deplibs="$deplib $tmp_deplibs" done deplibs=$tmp_deplibs fi if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass"; then libs=$deplibs deplibs= fi if test prog = "$linkmode"; then case $pass in dlopen) libs=$dlfiles ;; dlpreopen) libs=$dlprefiles ;; link) libs="$deplibs %DEPLIBS%" test "X$link_all_deplibs" != Xno && libs="$libs $dependency_libs" ;; esac fi if test lib,dlpreopen = "$linkmode,$pass"; then # Collect and forward deplibs of preopened libtool libs for lib in $dlprefiles; do # Ignore non-libtool-libs dependency_libs= func_resolve_sysroot "$lib" case $lib in *.la) func_source "$func_resolve_sysroot_result" ;; esac # Collect preopened libtool deplibs, except any this library # has declared as weak libs for deplib in $dependency_libs; do func_basename "$deplib" deplib_base=$func_basename_result case " $weak_libs " in *" $deplib_base "*) ;; *) func_append deplibs " $deplib" ;; esac done done libs=$dlprefiles fi if test dlopen = "$pass"; then # Collect dlpreopened libraries save_deplibs=$deplibs deplibs= fi for deplib in $libs; do lib= found=false case $deplib in -mt|-mthreads|-kthread|-Kthread|-pthread|-pthreads|--thread-safe \ |-threads|-fopenmp|-openmp|-mp|-xopenmp|-omp|-qsmp=*) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append compiler_flags " $deplib" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -l*) if test lib != "$linkmode" && test prog != "$linkmode"; then func_warning "'-l' is ignored for archives/objects" continue fi func_stripname '-l' '' "$deplib" name=$func_stripname_result if test lib = "$linkmode"; then searchdirs="$newlib_search_path $lib_search_path $compiler_lib_search_dirs $sys_lib_search_path $shlib_search_path" else searchdirs="$newlib_search_path $lib_search_path $sys_lib_search_path $shlib_search_path" fi for searchdir in $searchdirs; do for search_ext in .la $std_shrext .so .a; do # Search the libtool library lib=$searchdir/lib$name$search_ext if test -f "$lib"; then if test .la = "$search_ext"; then found=: else found=false fi break 2 fi done done if $found; then # deplib is a libtool library # If $allow_libtool_libs_with_static_runtimes && $deplib is a stdlib, # We need to do some special things here, and not later. if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $deplib "*) if func_lalib_p "$lib"; then library_names= old_library= func_source "$lib" for l in $old_library $library_names; do ll=$l done if test "X$ll" = "X$old_library"; then # only static version available found=false func_dirname "$lib" "" "." ladir=$func_dirname_result lib=$ladir/$old_library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi fi ;; *) ;; esac fi else # deplib doesn't seem to be a libtool library if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" test lib = "$linkmode" && newdependency_libs="$deplib $newdependency_libs" fi continue fi ;; # -l *.ltframework) if test prog,link = "$linkmode,$pass"; then compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else deplibs="$deplib $deplibs" if test lib = "$linkmode"; then case "$new_inherited_linker_flags " in *" $deplib "*) ;; * ) func_append new_inherited_linker_flags " $deplib" ;; esac fi fi continue ;; -L*) case $linkmode in lib) deplibs="$deplib $deplibs" test conv = "$pass" && continue newdependency_libs="$deplib $newdependency_libs" func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; prog) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi if test scan = "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; *) func_warning "'-L' is ignored for archives/objects" ;; esac # linkmode continue ;; # -L -R*) if test link = "$pass"; then func_stripname '-R' '' "$deplib" func_resolve_sysroot "$func_stripname_result" dir=$func_resolve_sysroot_result # Make sure the xrpath contains only unique directories. case "$xrpath " in *" $dir "*) ;; *) func_append xrpath " $dir" ;; esac fi deplibs="$deplib $deplibs" continue ;; *.la) func_resolve_sysroot "$deplib" lib=$func_resolve_sysroot_result ;; *.$libext) if test conv = "$pass"; then deplibs="$deplib $deplibs" continue fi case $linkmode in lib) # Linking convenience modules into shared libraries is allowed, # but linking other static libraries is non-portable. case " $dlpreconveniencelibs " in *" $deplib "*) ;; *) valid_a_lib=false case $deplibs_check_method in match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` if eval "\$ECHO \"$deplib\"" 2>/dev/null | $SED 10q \ | $EGREP "$match_pattern_regex" > /dev/null; then valid_a_lib=: fi ;; pass_all) valid_a_lib=: ;; esac if $valid_a_lib; then echo $ECHO "*** Warning: Linking the shared library $output against the" $ECHO "*** static library $deplib is not portable!" deplibs="$deplib $deplibs" else echo $ECHO "*** Warning: Trying to link with static lib archive $deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because the file extensions .$libext of this argument makes me believe" echo "*** that it is just a static archive that I should not use here." fi ;; esac continue ;; prog) if test link != "$pass"; then deplibs="$deplib $deplibs" else compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" fi continue ;; esac # linkmode ;; # *.$libext *.lo | *.$objext) if test conv = "$pass"; then deplibs="$deplib $deplibs" elif test prog = "$linkmode"; then if test dlpreopen = "$pass" || test yes != "$dlopen_support" || test no = "$build_libtool_libs"; then # If there is no dlopen support or we're linking statically, # we need to preload. func_append newdlprefiles " $deplib" compile_deplibs="$deplib $compile_deplibs" finalize_deplibs="$deplib $finalize_deplibs" else func_append newdlfiles " $deplib" fi fi continue ;; %DEPLIBS%) alldeplibs=: continue ;; esac # case $deplib $found || test -f "$lib" \ || func_fatal_error "cannot find the library '$lib' or unhandled argument '$deplib'" # Check to see that this really is a libtool archive. func_lalib_unsafe_p "$lib" \ || func_fatal_error "'$lib' is not a valid libtool archive" func_dirname "$lib" "" "." ladir=$func_dirname_result dlname= dlopen= dlpreopen= libdir= library_names= old_library= inherited_linker_flags= # If the library was installed with an old release of libtool, # it will not redefine variables installed, or shouldnotlink installed=yes shouldnotlink=no avoidtemprpath= # Read the .la file func_source "$lib" # Convert "-framework foo" to "foo.ltframework" if test -n "$inherited_linker_flags"; then tmp_inherited_linker_flags=`$ECHO "$inherited_linker_flags" | $SED 's/-framework \([^ $]*\)/\1.ltframework/g'` for tmp_inherited_linker_flag in $tmp_inherited_linker_flags; do case " $new_inherited_linker_flags " in *" $tmp_inherited_linker_flag "*) ;; *) func_append new_inherited_linker_flags " $tmp_inherited_linker_flag";; esac done fi dependency_libs=`$ECHO " $dependency_libs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` if test lib,link = "$linkmode,$pass" || test prog,scan = "$linkmode,$pass" || { test prog != "$linkmode" && test lib != "$linkmode"; }; then test -n "$dlopen" && func_append dlfiles " $dlopen" test -n "$dlpreopen" && func_append dlprefiles " $dlpreopen" fi if test conv = "$pass"; then # Only check for convenience libraries deplibs="$lib $deplibs" if test -z "$libdir"; then if test -z "$old_library"; then func_fatal_error "cannot find name of link library for '$lib'" fi # It is a libtool convenience library, so add in its objects. func_append convenience " $ladir/$objdir/$old_library" func_append old_convenience " $ladir/$objdir/$old_library" tmp_libs= for deplib in $dependency_libs; do deplibs="$deplib $deplibs" if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done elif test prog != "$linkmode" && test lib != "$linkmode"; then func_fatal_error "'$lib' is not a convenience library" fi continue fi # $pass = conv # Get the name of the library we link against. linklib= if test -n "$old_library" && { test yes = "$prefer_static_libs" || test built,no = "$prefer_static_libs,$installed"; }; then linklib=$old_library else for l in $old_library $library_names; do linklib=$l done fi if test -z "$linklib"; then func_fatal_error "cannot find name of link library for '$lib'" fi # This library was specified with -dlopen. if test dlopen = "$pass"; then test -z "$libdir" \ && func_fatal_error "cannot -dlopen a convenience library: '$lib'" if test -z "$dlname" || test yes != "$dlopen_support" || test no = "$build_libtool_libs" then # If there is no dlname, no dlopen support or we're linking # statically, we need to preload. We also need to preload any # dependent libraries so libltdl's deplib preloader doesn't # bomb out in the load deplibs phase. func_append dlprefiles " $lib $dependency_libs" else func_append newdlfiles " $lib" fi continue fi # $pass = dlopen # We need an absolute path. case $ladir in [\\/]* | [A-Za-z]:[\\/]*) abs_ladir=$ladir ;; *) abs_ladir=`cd "$ladir" && pwd` if test -z "$abs_ladir"; then func_warning "cannot determine absolute directory name of '$ladir'" func_warning "passing it literally to the linker, although it might fail" abs_ladir=$ladir fi ;; esac func_basename "$lib" laname=$func_basename_result # Find the relevant object directory and library name. if test yes = "$installed"; then if test ! -f "$lt_sysroot$libdir/$linklib" && test -f "$abs_ladir/$linklib"; then func_warning "library '$lib' was moved." dir=$ladir absdir=$abs_ladir libdir=$abs_ladir else dir=$lt_sysroot$libdir absdir=$lt_sysroot$libdir fi test yes = "$hardcode_automatic" && avoidtemprpath=yes else if test ! -f "$ladir/$objdir/$linklib" && test -f "$abs_ladir/$linklib"; then dir=$ladir absdir=$abs_ladir # Remove this search path later func_append notinst_path " $abs_ladir" else dir=$ladir/$objdir absdir=$abs_ladir/$objdir # Remove this search path later func_append notinst_path " $abs_ladir" fi fi # $installed = yes func_stripname 'lib' '.la' "$laname" name=$func_stripname_result # This library was specified with -dlpreopen. if test dlpreopen = "$pass"; then if test -z "$libdir" && test prog = "$linkmode"; then func_fatal_error "only libraries may -dlpreopen a convenience library: '$lib'" fi case $host in # special handling for platforms with PE-DLLs. *cygwin* | *mingw* | *cegcc* ) # Linker will automatically link against shared library if both # static and shared are present. Therefore, ensure we extract # symbols from the import library if a shared library is present # (otherwise, the dlopen module name will be incorrect). We do # this by putting the import library name into $newdlprefiles. # We recover the dlopen module name by 'saving' the la file # name in a special purpose variable, and (later) extracting the # dlname from the la file. if test -n "$dlname"; then func_tr_sh "$dir/$linklib" eval "libfile_$func_tr_sh_result=\$abs_ladir/\$laname" func_append newdlprefiles " $dir/$linklib" else func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" fi ;; * ) # Prefer using a static library (so that no silly _DYNAMIC symbols # are required to link). if test -n "$old_library"; then func_append newdlprefiles " $dir/$old_library" # Keep a list of preopened convenience libraries to check # that they are being used correctly in the link pass. test -z "$libdir" && \ func_append dlpreconveniencelibs " $dir/$old_library" # Otherwise, use the dlname, so that lt_dlopen finds it. elif test -n "$dlname"; then func_append newdlprefiles " $dir/$dlname" else func_append newdlprefiles " $dir/$linklib" fi ;; esac fi # $pass = dlpreopen if test -z "$libdir"; then # Link the convenience library if test lib = "$linkmode"; then deplibs="$dir/$old_library $deplibs" elif test prog,link = "$linkmode,$pass"; then compile_deplibs="$dir/$old_library $compile_deplibs" finalize_deplibs="$dir/$old_library $finalize_deplibs" else deplibs="$lib $deplibs" # used for prog,scan pass fi continue fi if test prog = "$linkmode" && test link != "$pass"; then func_append newlib_search_path " $ladir" deplibs="$lib $deplibs" linkalldeplibs=false if test no != "$link_all_deplibs" || test -z "$library_names" || test no = "$build_libtool_libs"; then linkalldeplibs=: fi tmp_libs= for deplib in $dependency_libs; do case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result" func_append newlib_search_path " $func_resolve_sysroot_result" ;; esac # Need to link against all dependency_libs? if $linkalldeplibs; then deplibs="$deplib $deplibs" else # Need to hardcode shared library paths # or/and link against static libraries newdependency_libs="$deplib $newdependency_libs" fi if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $deplib "*) func_append specialdeplibs " $deplib" ;; esac fi func_append tmp_libs " $deplib" done # for deplib continue fi # $linkmode = prog... if test prog,link = "$linkmode,$pass"; then if test -n "$library_names" && { { test no = "$prefer_static_libs" || test built,yes = "$prefer_static_libs,$installed"; } || test -z "$old_library"; }; then # We need to hardcode the library path if test -n "$shlibpath_var" && test -z "$avoidtemprpath"; then # Make sure the rpath contains only unique directories. case $temp_rpath: in *"$absdir:"*) ;; *) func_append temp_rpath "$absdir:" ;; esac fi # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi # $linkmode,$pass = prog,link... if $alldeplibs && { test pass_all = "$deplibs_check_method" || { test yes = "$build_libtool_libs" && test -n "$library_names"; }; }; then # We only need to search for static libraries continue fi fi link_static=no # Whether the deplib will be linked statically use_static_libs=$prefer_static_libs if test built = "$use_static_libs" && test yes = "$installed"; then use_static_libs=no fi if test -n "$library_names" && { test no = "$use_static_libs" || test -z "$old_library"; }; then case $host in *cygwin* | *mingw* | *cegcc* | *os2*) # No point in relinking DLLs because paths are not encoded func_append notinst_deplibs " $lib" need_relink=no ;; *) if test no = "$installed"; then func_append notinst_deplibs " $lib" need_relink=yes fi ;; esac # This is a shared library # Warn about portability, can't link against -module's on some # systems (darwin). Don't bleat about dlopened modules though! dlopenmodule= for dlpremoduletest in $dlprefiles; do if test "X$dlpremoduletest" = "X$lib"; then dlopenmodule=$dlpremoduletest break fi done if test -z "$dlopenmodule" && test yes = "$shouldnotlink" && test link = "$pass"; then echo if test prog = "$linkmode"; then $ECHO "*** Warning: Linking the executable $output against the loadable module" else $ECHO "*** Warning: Linking the shared library $output against the loadable module" fi $ECHO "*** $linklib is not portable!" fi if test lib = "$linkmode" && test yes = "$hardcode_into_libs"; then # Hardcode the library path. # Skip directories that are in the system default run-time # search path. case " $sys_lib_dlsearch_path " in *" $absdir "*) ;; *) case "$compile_rpath " in *" $absdir "*) ;; *) func_append compile_rpath " $absdir" ;; esac ;; esac case " $sys_lib_dlsearch_path " in *" $libdir "*) ;; *) case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac ;; esac fi if test -n "$old_archive_from_expsyms_cmds"; then # figure out the soname set dummy $library_names shift realname=$1 shift libname=`eval "\\$ECHO \"$libname_spec\""` # use dlname if we got it. it's perfectly good, no? if test -n "$dlname"; then soname=$dlname elif test -n "$soname_spec"; then # bleh windows case $host in *cygwin* | mingw* | *cegcc* | *os2*) func_arith $current - $age major=$func_arith_result versuffix=-$major ;; esac eval soname=\"$soname_spec\" else soname=$realname fi # Make a new name for the extract_expsyms_cmds to use soroot=$soname func_basename "$soroot" soname=$func_basename_result func_stripname 'lib' '.dll' "$soname" newlib=libimp-$func_stripname_result.a # If the library has no export list, then create one now if test -f "$output_objdir/$soname-def"; then : else func_verbose "extracting exported symbol list from '$soname'" func_execute_cmds "$extract_expsyms_cmds" 'exit $?' fi # Create $newlib if test -f "$output_objdir/$newlib"; then :; else func_verbose "generating import library for '$soname'" func_execute_cmds "$old_archive_from_expsyms_cmds" 'exit $?' fi # make sure the library variables are pointing to the new library dir=$output_objdir linklib=$newlib fi # test -n "$old_archive_from_expsyms_cmds" if test prog = "$linkmode" || test relink != "$opt_mode"; then add_shlibpath= add_dir= add= lib_linked=yes case $hardcode_action in immediate | unsupported) if test no = "$hardcode_direct"; then add=$dir/$linklib case $host in *-*-sco3.2v5.0.[024]*) add_dir=-L$dir ;; *-*-sysv4*uw2*) add_dir=-L$dir ;; *-*-sysv5OpenUNIX* | *-*-sysv5UnixWare7.[01].[10]* | \ *-*-unixware7*) add_dir=-L$dir ;; *-*-darwin* ) # if the lib is a (non-dlopened) module then we cannot # link against it, someone is ignoring the earlier warnings if /usr/bin/file -L $add 2> /dev/null | $GREP ": [^:]* bundle" >/dev/null; then if test "X$dlopenmodule" != "X$lib"; then $ECHO "*** Warning: lib $linklib is a module, not a shared library" if test -z "$old_library"; then echo echo "*** And there doesn't seem to be a static archive available" echo "*** The link will probably fail, sorry" else add=$dir/$old_library fi elif test -n "$old_library"; then add=$dir/$old_library fi fi esac elif test no = "$hardcode_minus_L"; then case $host in *-*-sunos*) add_shlibpath=$dir ;; esac add_dir=-L$dir add=-l$name elif test no = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; relink) if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$dir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$absdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name elif test yes = "$hardcode_shlibpath_var"; then add_shlibpath=$dir add=-l$name else lib_linked=no fi ;; *) lib_linked=no ;; esac if test yes != "$lib_linked"; then func_fatal_configuration "unsupported hardcode properties" fi if test -n "$add_shlibpath"; then case :$compile_shlibpath: in *":$add_shlibpath:"*) ;; *) func_append compile_shlibpath "$add_shlibpath:" ;; esac fi if test prog = "$linkmode"; then test -n "$add_dir" && compile_deplibs="$add_dir $compile_deplibs" test -n "$add" && compile_deplibs="$add $compile_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" if test yes != "$hardcode_direct" && test yes != "$hardcode_minus_L" && test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac fi fi fi if test prog = "$linkmode" || test relink = "$opt_mode"; then add_shlibpath= add_dir= add= # Finalize command for both is simple: just hardcode it. if test yes = "$hardcode_direct" && test no = "$hardcode_direct_absolute"; then add=$libdir/$linklib elif test yes = "$hardcode_minus_L"; then add_dir=-L$libdir add=-l$name elif test yes = "$hardcode_shlibpath_var"; then case :$finalize_shlibpath: in *":$libdir:"*) ;; *) func_append finalize_shlibpath "$libdir:" ;; esac add=-l$name elif test yes = "$hardcode_automatic"; then if test -n "$inst_prefix_dir" && test -f "$inst_prefix_dir$libdir/$linklib"; then add=$inst_prefix_dir$libdir/$linklib else add=$libdir/$linklib fi else # We cannot seem to hardcode it, guess we'll fake it. add_dir=-L$libdir # Try looking first in the location we're being installed to. if test -n "$inst_prefix_dir"; then case $libdir in [\\/]*) func_append add_dir " -L$inst_prefix_dir$libdir" ;; esac fi add=-l$name fi if test prog = "$linkmode"; then test -n "$add_dir" && finalize_deplibs="$add_dir $finalize_deplibs" test -n "$add" && finalize_deplibs="$add $finalize_deplibs" else test -n "$add_dir" && deplibs="$add_dir $deplibs" test -n "$add" && deplibs="$add $deplibs" fi fi elif test prog = "$linkmode"; then # Here we assume that one of hardcode_direct or hardcode_minus_L # is not unsupported. This is valid on all known static and # shared platforms. if test unsupported != "$hardcode_direct"; then test -n "$old_library" && linklib=$old_library compile_deplibs="$dir/$linklib $compile_deplibs" finalize_deplibs="$dir/$linklib $finalize_deplibs" else compile_deplibs="-l$name -L$dir $compile_deplibs" finalize_deplibs="-l$name -L$dir $finalize_deplibs" fi elif test yes = "$build_libtool_libs"; then # Not a shared library if test pass_all != "$deplibs_check_method"; then # We're trying link a shared library against a static one # but the system doesn't support it. # Just print a warning and add the library to dependency_libs so # that the program can be linked against the static library. echo $ECHO "*** Warning: This system cannot link to static lib archive $lib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have." if test yes = "$module"; then echo "*** But as you try to build a module library, libtool will still create " echo "*** a static module, that should work as long as the dlopening application" echo "*** is linked with the -dlopen flag to resolve symbols at runtime." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi else deplibs="$dir/$old_library $deplibs" link_static=yes fi fi # link shared/static library? if test lib = "$linkmode"; then if test -n "$dependency_libs" && { test yes != "$hardcode_into_libs" || test yes = "$build_old_libs" || test yes = "$link_static"; }; then # Extract -R from dependency_libs temp_deplibs= for libdir in $dependency_libs; do case $libdir in -R*) func_stripname '-R' '' "$libdir" temp_xrpath=$func_stripname_result case " $xrpath " in *" $temp_xrpath "*) ;; *) func_append xrpath " $temp_xrpath";; esac;; *) func_append temp_deplibs " $libdir";; esac done dependency_libs=$temp_deplibs fi func_append newlib_search_path " $absdir" # Link against this library test no = "$link_static" && newdependency_libs="$abs_ladir/$laname $newdependency_libs" # ... and its dependency_libs tmp_libs= for deplib in $dependency_libs; do newdependency_libs="$deplib $newdependency_libs" case $deplib in -L*) func_stripname '-L' '' "$deplib" func_resolve_sysroot "$func_stripname_result";; *) func_resolve_sysroot "$deplib" ;; esac if $opt_preserve_dup_deps; then case "$tmp_libs " in *" $func_resolve_sysroot_result "*) func_append specialdeplibs " $func_resolve_sysroot_result" ;; esac fi func_append tmp_libs " $func_resolve_sysroot_result" done if test no != "$link_all_deplibs"; then # Add the search paths of all dependency libraries for deplib in $dependency_libs; do path= case $deplib in -L*) path=$deplib ;; *.la) func_resolve_sysroot "$deplib" deplib=$func_resolve_sysroot_result func_dirname "$deplib" "" "." dir=$func_dirname_result # We need an absolute path. case $dir in [\\/]* | [A-Za-z]:[\\/]*) absdir=$dir ;; *) absdir=`cd "$dir" && pwd` if test -z "$absdir"; then func_warning "cannot determine absolute directory name of '$dir'" absdir=$dir fi ;; esac if $GREP "^installed=no" $deplib > /dev/null; then case $host in *-*-darwin*) depdepl= eval deplibrary_names=`$SED -n -e 's/^library_names=\(.*\)$/\1/p' $deplib` if test -n "$deplibrary_names"; then for tmp in $deplibrary_names; do depdepl=$tmp done if test -f "$absdir/$objdir/$depdepl"; then depdepl=$absdir/$objdir/$depdepl darwin_install_name=`$OTOOL -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` if test -z "$darwin_install_name"; then darwin_install_name=`$OTOOL64 -L $depdepl | awk '{if (NR == 2) {print $1;exit}}'` fi func_append compiler_flags " $wl-dylib_file $wl$darwin_install_name:$depdepl" func_append linker_flags " -dylib_file $darwin_install_name:$depdepl" path= fi fi ;; *) path=-L$absdir/$objdir ;; esac else eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $deplib` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" test "$absdir" != "$libdir" && \ func_warning "'$deplib' seems to be moved" path=-L$absdir fi ;; esac case " $deplibs " in *" $path "*) ;; *) deplibs="$path $deplibs" ;; esac done fi # link_all_deplibs != no fi # linkmode = lib done # for deplib in $libs if test link = "$pass"; then if test prog = "$linkmode"; then compile_deplibs="$new_inherited_linker_flags $compile_deplibs" finalize_deplibs="$new_inherited_linker_flags $finalize_deplibs" else compiler_flags="$compiler_flags "`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` fi fi dependency_libs=$newdependency_libs if test dlpreopen = "$pass"; then # Link the dlpreopened libraries before other libraries for deplib in $save_deplibs; do deplibs="$deplib $deplibs" done fi if test dlopen != "$pass"; then test conv = "$pass" || { # Make sure lib_search_path contains only unique directories. lib_search_path= for dir in $newlib_search_path; do case "$lib_search_path " in *" $dir "*) ;; *) func_append lib_search_path " $dir" ;; esac done newlib_search_path= } if test prog,link = "$linkmode,$pass"; then vars="compile_deplibs finalize_deplibs" else vars=deplibs fi for var in $vars dependency_libs; do # Add libraries to $var in reverse order eval tmp_libs=\"\$$var\" new_libs= for deplib in $tmp_libs; do # FIXME: Pedantically, this is the right thing to do, so # that some nasty dependency loop isn't accidentally # broken: #new_libs="$deplib $new_libs" # Pragmatically, this seems to cause very few problems in # practice: case $deplib in -L*) new_libs="$deplib $new_libs" ;; -R*) ;; *) # And here is the reason: when a library appears more # than once as an explicit dependence of a library, or # is implicitly linked in more than once by the # compiler, it is considered special, and multiple # occurrences thereof are not removed. Compare this # with having the same library being listed as a # dependency of multiple other libraries: in this case, # we know (pedantically, we assume) the library does not # need to be listed more than once, so we keep only the # last copy. This is not always right, but it is rare # enough that we require users that really mean to play # such unportable linking tricks to link the library # using -Wl,-lname, so that libtool does not consider it # for duplicate removal. case " $specialdeplibs " in *" $deplib "*) new_libs="$deplib $new_libs" ;; *) case " $new_libs " in *" $deplib "*) ;; *) new_libs="$deplib $new_libs" ;; esac ;; esac ;; esac done tmp_libs= for deplib in $new_libs; do case $deplib in -L*) case " $tmp_libs " in *" $deplib "*) ;; *) func_append tmp_libs " $deplib" ;; esac ;; *) func_append tmp_libs " $deplib" ;; esac done eval $var=\"$tmp_libs\" done # for var fi # Add Sun CC postdeps if required: test CXX = "$tagname" && { case $host_os in linux*) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; solaris*) func_cc_basename "$CC" case $func_cc_basename_result in CC* | sunCC*) func_suncc_cstd_abi if test no != "$suncc_use_cstd_abi"; then func_append postdeps ' -library=Cstd -library=Crun' fi ;; esac ;; esac } # Last step: remove runtime libs from dependency_libs # (they stay in deplibs) tmp_libs= for i in $dependency_libs; do case " $predeps $postdeps $compiler_lib_search_path " in *" $i "*) i= ;; esac if test -n "$i"; then func_append tmp_libs " $i" fi done dependency_libs=$tmp_libs done # for pass if test prog = "$linkmode"; then dlfiles=$newdlfiles fi if test prog = "$linkmode" || test lib = "$linkmode"; then dlprefiles=$newdlprefiles fi case $linkmode in oldlib) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for archives" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for archives" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for archives" test -n "$xrpath" && \ func_warning "'-R' is ignored for archives" test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for archives" test -n "$release" && \ func_warning "'-release' is ignored for archives" test -n "$export_symbols$export_symbols_regex" && \ func_warning "'-export-symbols' is ignored for archives" # Now set the variables for building old libraries. build_libtool_libs=no oldlibs=$output func_append objs "$old_deplibs" ;; lib) # Make sure we only generate libraries of the form 'libNAME.la'. case $outputname in lib*) func_stripname 'lib' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" ;; *) test no = "$module" \ && func_fatal_help "libtool library '$output' must begin with 'lib'" if test no != "$need_lib_prefix"; then # Add the "lib" prefix for modules if required func_stripname '' '.la' "$outputname" name=$func_stripname_result eval shared_ext=\"$shrext_cmds\" eval libname=\"$libname_spec\" else func_stripname '' '.la' "$outputname" libname=$func_stripname_result fi ;; esac if test -n "$objs"; then if test pass_all != "$deplibs_check_method"; then func_fatal_error "cannot build libtool library '$output' from non-libtool objects on this host:$objs" else echo $ECHO "*** Warning: Linking the shared library $output against the non-libtool" $ECHO "*** objects $objs is not portable!" func_append libobjs " $objs" fi fi test no = "$dlself" \ || func_warning "'-dlopen self' is ignored for libtool libraries" set dummy $rpath shift test 1 -lt "$#" \ && func_warning "ignoring multiple '-rpath's for a libtool library" install_libdir=$1 oldlibs= if test -z "$rpath"; then if test yes = "$build_libtool_libs"; then # Building a libtool convenience library. # Some compilers have problems with a '.al' extension so # convenience libraries should have the same extension an # archive normally would. oldlibs="$output_objdir/$libname.$libext $oldlibs" build_libtool_libs=convenience build_old_libs=yes fi test -n "$vinfo" && \ func_warning "'-version-info/-version-number' is ignored for convenience libraries" test -n "$release" && \ func_warning "'-release' is ignored for convenience libraries" else # Parse the version information argument. save_ifs=$IFS; IFS=: set dummy $vinfo 0 0 0 shift IFS=$save_ifs test -n "$7" && \ func_fatal_help "too many parameters to '-version-info'" # convert absolute version numbers to libtool ages # this retains compatibility with .la files and attempts # to make the code below a bit more comprehensible case $vinfo_number in yes) number_major=$1 number_minor=$2 number_revision=$3 # # There are really only two kinds -- those that # use the current revision as the major version # and those that subtract age and use age as # a minor version. But, then there is irix # that has an extra 1 added just for fun # case $version_type in # correct linux to gnu/linux during the next big refactor darwin|freebsd-elf|linux|osf|windows|none) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_revision ;; freebsd-aout|qnx|sunos) current=$number_major revision=$number_minor age=0 ;; irix|nonstopux) func_arith $number_major + $number_minor current=$func_arith_result age=$number_minor revision=$number_minor lt_irix_increment=no ;; *) func_fatal_configuration "$modename: unknown library version type '$version_type'" ;; esac ;; no) current=$1 revision=$2 age=$3 ;; esac # Check that each of the things are valid numbers. case $current in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "CURRENT '$current' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $revision in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "REVISION '$revision' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac case $age in 0|[1-9]|[1-9][0-9]|[1-9][0-9][0-9]|[1-9][0-9][0-9][0-9]|[1-9][0-9][0-9][0-9][0-9]) ;; *) func_error "AGE '$age' must be a nonnegative integer" func_fatal_error "'$vinfo' is not valid version information" ;; esac if test "$age" -gt "$current"; then func_error "AGE '$age' is greater than the current interface number '$current'" func_fatal_error "'$vinfo' is not valid version information" fi # Calculate the version variables. major= versuffix= verstring= case $version_type in none) ;; darwin) # Like Linux, but with the current version available in # verstring for coding it into the library header func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision # Darwin ld doesn't like 0 for these options... func_arith $current + 1 minor_current=$func_arith_result xlcverstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" # On Darwin other compilers case $CC in nagfor*) verstring="$wl-compatibility_version $wl$minor_current $wl-current_version $wl$minor_current.$revision" ;; *) verstring="-compatibility_version $minor_current -current_version $minor_current.$revision" ;; esac ;; freebsd-aout) major=.$current versuffix=.$current.$revision ;; freebsd-elf) func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; irix | nonstopux) if test no = "$lt_irix_increment"; then func_arith $current - $age else func_arith $current - $age + 1 fi major=$func_arith_result case $version_type in nonstopux) verstring_prefix=nonstopux ;; *) verstring_prefix=sgi ;; esac verstring=$verstring_prefix$major.$revision # Add in all the interfaces that we are compatible with. loop=$revision while test 0 -ne "$loop"; do func_arith $revision - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring_prefix$major.$iface:$verstring done # Before this point, $major must not contain '.'. major=.$major versuffix=$major.$revision ;; linux) # correct to gnu/linux during the next big refactor func_arith $current - $age major=.$func_arith_result versuffix=$major.$age.$revision ;; osf) func_arith $current - $age major=.$func_arith_result versuffix=.$current.$age.$revision verstring=$current.$age.$revision # Add in all the interfaces that we are compatible with. loop=$age while test 0 -ne "$loop"; do func_arith $current - $loop iface=$func_arith_result func_arith $loop - 1 loop=$func_arith_result verstring=$verstring:$iface.0 done # Make executables depend on our current version. func_append verstring ":$current.0" ;; qnx) major=.$current versuffix=.$current ;; sco) major=.$current versuffix=.$current ;; sunos) major=.$current versuffix=.$current.$revision ;; windows) # Use '-' rather than '.', since we only want one # extension on DOS 8.3 file systems. func_arith $current - $age major=$func_arith_result versuffix=-$major ;; *) func_fatal_configuration "unknown library version type '$version_type'" ;; esac # Clear the version info if we defaulted, and they specified a release. if test -z "$vinfo" && test -n "$release"; then major= case $version_type in darwin) # we can't check for "0.0" in archive_cmds due to quoting # problems, so we reset it completely verstring= ;; *) verstring=0.0 ;; esac if test no = "$need_version"; then versuffix= else versuffix=.0.0 fi fi # Remove version info from name if versioning should be avoided if test yes,no = "$avoid_version,$need_version"; then major= versuffix= verstring= fi # Check to see if the archive will have undefined symbols. if test yes = "$allow_undefined"; then if test unsupported = "$allow_undefined_flag"; then if test yes = "$build_old_libs"; then func_warning "undefined symbols not allowed in $host shared libraries; building static only" build_libtool_libs=no else func_fatal_error "can't build $host shared library unless -no-undefined is specified" fi fi else # Don't allow undefined symbols. allow_undefined_flag=$no_undefined_flag fi fi func_generate_dlsyms "$libname" "$libname" : func_append libobjs " $symfileobj" test " " = "$libobjs" && libobjs= if test relink != "$opt_mode"; then # Remove our outputs, but don't remove object files since they # may have been created when compiling PIC objects. removelist= tempremovelist=`$ECHO "$output_objdir/*"` for p in $tempremovelist; do case $p in *.$objext | *.gcno) ;; $output_objdir/$outputname | $output_objdir/$libname.* | $output_objdir/$libname$release.*) if test -n "$precious_files_regex"; then if $ECHO "$p" | $EGREP -e "$precious_files_regex" >/dev/null 2>&1 then continue fi fi func_append removelist " $p" ;; *) ;; esac done test -n "$removelist" && \ func_show_eval "${RM}r \$removelist" fi # Now set the variables for building old libraries. if test yes = "$build_old_libs" && test convenience != "$build_libtool_libs"; then func_append oldlibs " $output_objdir/$libname.$libext" # Transform .lo files to .o files. oldobjs="$objs "`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; $lo2o" | $NL2SP` fi # Eliminate all temporary directories. #for path in $notinst_path; do # lib_search_path=`$ECHO "$lib_search_path " | $SED "s% $path % %g"` # deplibs=`$ECHO "$deplibs " | $SED "s% -L$path % %g"` # dependency_libs=`$ECHO "$dependency_libs " | $SED "s% -L$path % %g"` #done if test -n "$xrpath"; then # If the user specified any rpath flags, then add them. temp_xrpath= for libdir in $xrpath; do func_replace_sysroot "$libdir" func_append temp_xrpath " -R$func_replace_sysroot_result" case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done if test yes != "$hardcode_into_libs" || test yes = "$build_old_libs"; then dependency_libs="$temp_xrpath $dependency_libs" fi fi # Make sure dlfiles contains only unique files that won't be dlpreopened old_dlfiles=$dlfiles dlfiles= for lib in $old_dlfiles; do case " $dlprefiles $dlfiles " in *" $lib "*) ;; *) func_append dlfiles " $lib" ;; esac done # Make sure dlprefiles contains only unique files old_dlprefiles=$dlprefiles dlprefiles= for lib in $old_dlprefiles; do case "$dlprefiles " in *" $lib "*) ;; *) func_append dlprefiles " $lib" ;; esac done if test yes = "$build_libtool_libs"; then if test -n "$rpath"; then case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-*-beos* | *-cegcc* | *-*-haiku*) # these systems don't actually have a c library (as such)! ;; *-*-rhapsody* | *-*-darwin1.[012]) # Rhapsody C library is in the System framework func_append deplibs " System.ltframework" ;; *-*-netbsd*) # Don't link with libc until the a.out ld.so is fixed. ;; *-*-openbsd* | *-*-freebsd* | *-*-dragonfly*) # Do not include libc due to us having libc/libc_r. ;; *-*-sco3.2v5* | *-*-sco5v6*) # Causes problems with __ctype ;; *-*-sysv4.2uw2* | *-*-sysv5* | *-*-unixware* | *-*-OpenUNIX*) # Compiler inserts libc in the correct place for threads to work ;; *) # Add libc to deplibs on all other systems if necessary. if test yes = "$build_libtool_need_lc"; then func_append deplibs " -lc" fi ;; esac fi # Transform deplibs into only deplibs that can be linked in shared. name_save=$name libname_save=$libname release_save=$release versuffix_save=$versuffix major_save=$major # I'm not sure if I'm treating the release correctly. I think # release should show up in the -l (ie -lgmp5) so we don't want to # add it in twice. Is that correct? release= versuffix= major= newdeplibs= droppeddeps=no case $deplibs_check_method in pass_all) # Don't check for shared/static. Everything works. # This might be a little naive. We might want to check # whether the library exists or not. But this is on # osf3 & osf4 and I'm not really sure... Just # implementing what was already the behavior. newdeplibs=$deplibs ;; test_compile) # This code stresses the "libraries are programs" paradigm to its # limits. Maybe even breaks it. We compile a program, linking it # against the deplibs as a proxy for the library. Then we can check # whether they linked in statically or dynamically with ldd. $opt_dry_run || $RM conftest.c cat > conftest.c <<EOF int main() { return 0; } EOF $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $deplibs; then ldd_output=`ldd conftest` for i in $deplibs; do case $i in -l*) func_stripname -l '' "$i" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" i= ;; esac fi if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes echo $ECHO "*** Warning: dynamic linker does not accept needed library $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which I believe you do not have" echo "*** because a test_compile did reveal that the linker did not use it for" echo "*** its dynamic dependency list that programs get resolved with at runtime." fi fi ;; *) func_append newdeplibs " $i" ;; esac done else # Error occurred in the first compile. Let's try to salvage # the situation: Compile a separate program for each library. for i in $deplibs; do case $i in -l*) func_stripname -l '' "$i" name=$func_stripname_result $opt_dry_run || $RM conftest if $LTCC $LTCFLAGS -o conftest conftest.c $i; then ldd_output=`ldd conftest` if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $i "*) func_append newdeplibs " $i" i= ;; esac fi if test -n "$i"; then libname=`eval "\\$ECHO \"$libname_spec\""` deplib_matches=`eval "\\$ECHO \"$library_names_spec\""` set dummy $deplib_matches; shift deplib_match=$1 if test `expr "$ldd_output" : ".*$deplib_match"` -ne 0; then func_append newdeplibs " $i" else droppeddeps=yes echo $ECHO "*** Warning: dynamic linker does not accept needed library $i." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because a test_compile did reveal that the linker did not use this one" echo "*** as a dynamic dependency that programs can get resolved with at runtime." fi fi else droppeddeps=yes echo $ECHO "*** Warning! Library $i is needed by this library but I was not able to" echo "*** make it link in! You will probably need to install it or some" echo "*** library that it depends on before this library will be fully" echo "*** functional. Installing it before continuing would be even better." fi ;; *) func_append newdeplibs " $i" ;; esac done fi ;; file_magic*) set dummy $deplibs_check_method; shift file_magic_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` if test -n "$file_magic_glob"; then libnameglob=`func_echo_all "$libname" | $SED -e $file_magic_glob` else libnameglob=$libname fi test yes = "$want_nocaseglob" && nocaseglob=`shopt -p nocaseglob` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do if test yes = "$want_nocaseglob"; then shopt -s nocaseglob potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` $nocaseglob else potential_libs=`ls $i/$libnameglob[.-]* 2>/dev/null` fi for potent_lib in $potential_libs; do # Follow soft links. if ls -lLd "$potent_lib" 2>/dev/null | $GREP " -> " >/dev/null; then continue fi # The statement above tries to avoid entering an # endless loop below, in case of cyclic links. # We might still enter an endless loop, since a link # loop can be closed while we follow links, # but so what? potlib=$potent_lib while test -h "$potlib" 2>/dev/null; do potliblink=`ls -ld $potlib | $SED 's/.* -> //'` case $potliblink in [\\/]* | [A-Za-z]:[\\/]*) potlib=$potliblink;; *) potlib=`$ECHO "$potlib" | $SED 's|[^/]*$||'`"$potliblink";; esac done if eval $file_magic_cmd \"\$potlib\" 2>/dev/null | $SED -e 10q | $EGREP "$file_magic_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for file magic test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a file magic. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; match_pattern*) set dummy $deplibs_check_method; shift match_pattern_regex=`expr "$deplibs_check_method" : "$1 \(.*\)"` for a_deplib in $deplibs; do case $a_deplib in -l*) func_stripname -l '' "$a_deplib" name=$func_stripname_result if test yes = "$allow_libtool_libs_with_static_runtimes"; then case " $predeps $postdeps " in *" $a_deplib "*) func_append newdeplibs " $a_deplib" a_deplib= ;; esac fi if test -n "$a_deplib"; then libname=`eval "\\$ECHO \"$libname_spec\""` for i in $lib_search_path $sys_lib_search_path $shlib_search_path; do potential_libs=`ls $i/$libname[.-]* 2>/dev/null` for potent_lib in $potential_libs; do potlib=$potent_lib # see symlink-check above in file_magic test if eval "\$ECHO \"$potent_lib\"" 2>/dev/null | $SED 10q | \ $EGREP "$match_pattern_regex" > /dev/null; then func_append newdeplibs " $a_deplib" a_deplib= break 2 fi done done fi if test -n "$a_deplib"; then droppeddeps=yes echo $ECHO "*** Warning: linker path does not have real file for library $a_deplib." echo "*** I have the capability to make that library automatically link in when" echo "*** you link to this library. But I can only do this if you have a" echo "*** shared version of the library, which you do not appear to have" echo "*** because I did check the linker path looking for a file starting" if test -z "$potlib"; then $ECHO "*** with $libname but no candidates were found. (...for regex pattern test)" else $ECHO "*** with $libname and none of the candidates passed a file format test" $ECHO "*** using a regex pattern. Last file checked: $potlib" fi fi ;; *) # Add a -L argument. func_append newdeplibs " $a_deplib" ;; esac done # Gone through all deplibs. ;; none | unknown | *) newdeplibs= tmp_deplibs=`$ECHO " $deplibs" | $SED 's/ -lc$//; s/ -[LR][^ ]*//g'` if test yes = "$allow_libtool_libs_with_static_runtimes"; then for i in $predeps $postdeps; do # can't use Xsed below, because $i might contain '/' tmp_deplibs=`$ECHO " $tmp_deplibs" | $SED "s|$i||"` done fi case $tmp_deplibs in *[!\ \ ]*) echo if test none = "$deplibs_check_method"; then echo "*** Warning: inter-library dependencies are not supported in this platform." else echo "*** Warning: inter-library dependencies are not known to be supported." fi echo "*** All declared inter-library dependencies are being dropped." droppeddeps=yes ;; esac ;; esac versuffix=$versuffix_save major=$major_save release=$release_save libname=$libname_save name=$name_save case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library with the System framework newdeplibs=`$ECHO " $newdeplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac if test yes = "$droppeddeps"; then if test yes = "$module"; then echo echo "*** Warning: libtool could not satisfy all declared inter-library" $ECHO "*** dependencies of module $libname. Therefore, libtool will create" echo "*** a static module, that should work as long as the dlopening" echo "*** application is linked with the -dlopen flag." if test -z "$global_symbol_pipe"; then echo echo "*** However, this would only work if libtool was able to extract symbol" echo "*** lists from a program, using 'nm' or equivalent, but libtool could" echo "*** not find such a program. So, this module is probably useless." echo "*** 'nm' from GNU binutils and a full rebuild may help." fi if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi else echo "*** The inter-library dependencies that have been dropped here will be" echo "*** automatically added whenever a program is linked with this library" echo "*** or is declared to -dlopen it." if test no = "$allow_undefined"; then echo echo "*** Since this library must not contain undefined symbols," echo "*** because either the platform does not support them or" echo "*** it was explicitly requested with -no-undefined," echo "*** libtool will only create a static version of it." if test no = "$build_old_libs"; then oldlibs=$output_objdir/$libname.$libext build_libtool_libs=module build_old_libs=yes else build_libtool_libs=no fi fi fi fi # Done checking deplibs! deplibs=$newdeplibs fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" case $host in *-*-darwin*) newdeplibs=`$ECHO " $newdeplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` new_inherited_linker_flags=`$ECHO " $new_inherited_linker_flags" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` deplibs=`$ECHO " $deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done deplibs=$new_libs # All the library-specific variables (install_libdir is set above). library_names= old_library= dlname= # Test again, we may have decided not to build it any more if test yes = "$build_libtool_libs"; then # Remove $wl instances when linking with ld. # FIXME: should test the right _cmds variable. case $archive_cmds in *\$LD\ *) wl= ;; esac if test yes = "$hardcode_into_libs"; then # Hardcode the library paths hardcode_libdirs= dep_rpath= rpath=$finalize_rpath test relink = "$opt_mode" || rpath=$compile_rpath$rpath for libdir in $rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then func_replace_sysroot "$libdir" libdir=$func_replace_sysroot_result if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append dep_rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval "dep_rpath=\"$hardcode_libdir_flag_spec\"" fi if test -n "$runpath_var" && test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done eval "$runpath_var='$rpath\$$runpath_var'; export $runpath_var" fi test -n "$dep_rpath" && deplibs="$dep_rpath $deplibs" fi shlibpath=$finalize_shlibpath test relink = "$opt_mode" || shlibpath=$compile_shlibpath$shlibpath if test -n "$shlibpath"; then eval "$shlibpath_var='$shlibpath\$$shlibpath_var'; export $shlibpath_var" fi # Get the real and link names of the library. eval shared_ext=\"$shrext_cmds\" eval library_names=\"$library_names_spec\" set dummy $library_names shift realname=$1 shift if test -n "$soname_spec"; then eval soname=\"$soname_spec\" else soname=$realname fi if test -z "$dlname"; then dlname=$soname fi lib=$output_objdir/$realname linknames= for link do func_append linknames " $link" done # Use standard objects if they are pic test -z "$pic_flag" && libobjs=`$ECHO "$libobjs" | $SP2NL | $SED "$lo2o" | $NL2SP` test "X$libobjs" = "X " && libobjs= delfiles= if test -n "$export_symbols" && test -n "$include_expsyms"; then $opt_dry_run || cp "$export_symbols" "$output_objdir/$libname.uexp" export_symbols=$output_objdir/$libname.uexp func_append delfiles " $export_symbols" fi orig_export_symbols= case $host_os in cygwin* | mingw* | cegcc*) if test -n "$export_symbols" && test -z "$export_symbols_regex"; then # exporting using user supplied symfile func_dll_def_p "$export_symbols" || { # and it's NOT already a .def file. Must figure out # which of the given symbols are data symbols and tag # them as such. So, trigger use of export_symbols_cmds. # export_symbols gets reassigned inside the "prepare # the list of exported symbols" if statement, so the # include_expsyms logic still works. orig_export_symbols=$export_symbols export_symbols= always_export_symbols=yes } fi ;; esac # Prepare the list of exported symbols if test -z "$export_symbols"; then if test yes = "$always_export_symbols" || test -n "$export_symbols_regex"; then func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols cmds=$export_symbols_cmds save_ifs=$IFS; IFS='~' for cmd1 in $cmds; do IFS=$save_ifs # Take the normal branch if the nm_file_list_spec branch # doesn't work or if tool conversion is not needed. case $nm_file_list_spec~$to_tool_file_cmd in *~func_convert_file_noop | *~func_convert_file_msys_to_w32 | ~*) try_normal_branch=yes eval cmd=\"$cmd1\" func_len " $cmd" len=$func_len_result ;; *) try_normal_branch=no ;; esac if test yes = "$try_normal_branch" \ && { test "$len" -lt "$max_cmd_len" \ || test "$max_cmd_len" -le -1; } then func_show_eval "$cmd" 'exit $?' skipped_export=false elif test -n "$nm_file_list_spec"; then func_basename "$output" output_la=$func_basename_result save_libobjs=$libobjs save_output=$output output=$output_objdir/$output_la.nm func_to_tool_file "$output" libobjs=$nm_file_list_spec$func_to_tool_file_result func_append delfiles " $output" func_verbose "creating $NM input file list: $output" for obj in $save_libobjs; do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > "$output" eval cmd=\"$cmd1\" func_show_eval "$cmd" 'exit $?' output=$save_output libobjs=$save_libobjs skipped_export=false else # The command line is too long to execute in one step. func_verbose "using reloadable object file for export list..." skipped_export=: # Break out early, otherwise skipped_export may be # set to false by a later but shorter cmd. break fi done IFS=$save_ifs if test -n "$export_symbols_regex" && test : != "$skipped_export"; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi fi if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test : != "$skipped_export" && test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi tmp_deplibs= for test_deplib in $deplibs; do case " $convenience " in *" $test_deplib "*) ;; *) func_append tmp_deplibs " $test_deplib" ;; esac done deplibs=$tmp_deplibs if test -n "$convenience"; then if test -n "$whole_archive_flag_spec" && test yes = "$compiler_needs_object" && test -z "$libobjs"; then # extract the archives, so we have objects to list. # TODO: could optimize this to just extract one archive. whole_archive_flag_spec= fi if test -n "$whole_archive_flag_spec"; then save_libobjs=$libobjs eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= else gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $convenience func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi fi if test yes = "$thread_safe" && test -n "$thread_safe_flag_spec"; then eval flag=\"$thread_safe_flag_spec\" func_append linker_flags " $flag" fi # Make a backup of the uninstalled library when relinking if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}U && $MV $realname ${realname}U)' || exit $? fi # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then eval test_cmds=\"$module_expsym_cmds\" cmds=$module_expsym_cmds else eval test_cmds=\"$module_cmds\" cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then eval test_cmds=\"$archive_expsym_cmds\" cmds=$archive_expsym_cmds else eval test_cmds=\"$archive_cmds\" cmds=$archive_cmds fi fi if test : != "$skipped_export" && func_len " $test_cmds" && len=$func_len_result && test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then : else # The command line is too long to link in one step, link piecewise # or, if using GNU ld and skipped_export is not :, use a linker # script. # Save the value of $output and $libobjs because we want to # use them later. If we have whole_archive_flag_spec, we # want to use save_libobjs as it was before # whole_archive_flag_spec was expanded, because we can't # assume the linker understands whole_archive_flag_spec. # This may have to be revisited, in case too many # convenience libraries get linked in and end up exceeding # the spec. if test -z "$convenience" || test -z "$whole_archive_flag_spec"; then save_libobjs=$libobjs fi save_output=$output func_basename "$output" output_la=$func_basename_result # Clear the reloadable object creation command queue and # initialize k to one. test_cmds= concat_cmds= objlist= last_robj= k=1 if test -n "$save_libobjs" && test : != "$skipped_export" && test yes = "$with_gnu_ld"; then output=$output_objdir/$output_la.lnkscript func_verbose "creating GNU ld script: $output" echo 'INPUT (' > $output for obj in $save_libobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done echo ')' >> $output func_append delfiles " $output" func_to_tool_file "$output" output=$func_to_tool_file_result elif test -n "$save_libobjs" && test : != "$skipped_export" && test -n "$file_list_spec"; then output=$output_objdir/$output_la.lnk func_verbose "creating linker input file list: $output" : > $output set x $save_libobjs shift firstobj= if test yes = "$compiler_needs_object"; then firstobj="$1 " shift fi for obj do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" >> $output done func_append delfiles " $output" func_to_tool_file "$output" output=$firstobj\"$file_list_spec$func_to_tool_file_result\" else if test -n "$save_libobjs"; then func_verbose "creating reloadable object files..." output=$output_objdir/$output_la-$k.$objext eval test_cmds=\"$reload_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 # Loop over the list of objects to be linked. for obj in $save_libobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result if test -z "$objlist" || test "$len" -lt "$max_cmd_len"; then func_append objlist " $obj" else # The command $test_cmds is almost too long, add a # command to the queue. if test 1 -eq "$k"; then # The first file doesn't have a previous command to add. reload_objs=$objlist eval concat_cmds=\"$reload_cmds\" else # All subsequent reloadable object files will link in # the last one created. reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds~$reload_cmds~\$RM $last_robj\" fi last_robj=$output_objdir/$output_la-$k.$objext func_arith $k + 1 k=$func_arith_result output=$output_objdir/$output_la-$k.$objext objlist=" $obj" func_len " $last_robj" func_arith $len0 + $func_len_result len=$func_arith_result fi done # Handle the remaining objects by creating one last # reloadable object file. All subsequent reloadable object # files will link in the last one created. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ reload_objs="$objlist $last_robj" eval concat_cmds=\"\$concat_cmds$reload_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi func_append delfiles " $output" else output= fi ${skipped_export-false} && { func_verbose "generating symbol list for '$libname.la'" export_symbols=$output_objdir/$libname.exp $opt_dry_run || $RM $export_symbols libobjs=$output # Append the command to create the export file. test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$export_symbols_cmds\" if test -n "$last_robj"; then eval concat_cmds=\"\$concat_cmds~\$RM $last_robj\" fi } test -n "$save_libobjs" && func_verbose "creating a temporary reloadable object file: $output" # Loop through the commands generated above and execute them. save_ifs=$IFS; IFS='~' for cmd in $concat_cmds; do IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs if test -n "$export_symbols_regex" && ${skipped_export-false}; then func_show_eval '$EGREP -e "$export_symbols_regex" "$export_symbols" > "${export_symbols}T"' func_show_eval '$MV "${export_symbols}T" "$export_symbols"' fi fi ${skipped_export-false} && { if test -n "$export_symbols" && test -n "$include_expsyms"; then tmp_export_symbols=$export_symbols test -n "$orig_export_symbols" && tmp_export_symbols=$orig_export_symbols $opt_dry_run || eval '$ECHO "$include_expsyms" | $SP2NL >> "$tmp_export_symbols"' fi if test -n "$orig_export_symbols"; then # The given exports_symbols file has to be filtered, so filter it. func_verbose "filter symbol list for '$libname.la' to tag DATA exports" # FIXME: $output_objdir/$libname.filter potentially contains lots of # 's' commands, which not all seds can handle. GNU sed should be fine # though. Also, the filter scales superlinearly with the number of # global variables. join(1) would be nice here, but unfortunately # isn't a blessed tool. $opt_dry_run || $SED -e '/[ ,]DATA/!d;s,\(.*\)\([ \,].*\),s|^\1$|\1\2|,' < $export_symbols > $output_objdir/$libname.filter func_append delfiles " $export_symbols $output_objdir/$libname.filter" export_symbols=$output_objdir/$libname.def $opt_dry_run || $SED -f $output_objdir/$libname.filter < $orig_export_symbols > $export_symbols fi } libobjs=$output # Restore the value of output. output=$save_output if test -n "$convenience" && test -n "$whole_archive_flag_spec"; then eval libobjs=\"\$libobjs $whole_archive_flag_spec\" test "X$libobjs" = "X " && libobjs= fi # Expand the library linking commands again to reset the # value of $libobjs for piecewise linking. # Do each of the archive commands. if test yes = "$module" && test -n "$module_cmds"; then if test -n "$export_symbols" && test -n "$module_expsym_cmds"; then cmds=$module_expsym_cmds else cmds=$module_cmds fi else if test -n "$export_symbols" && test -n "$archive_expsym_cmds"; then cmds=$archive_expsym_cmds else cmds=$archive_cmds fi fi fi if test -n "$delfiles"; then # Append the command to remove temporary files to $cmds. eval cmds=\"\$cmds~\$RM $delfiles\" fi # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append libobjs " $func_extract_archives_result" test "X$libobjs" = "X " && libobjs= fi save_ifs=$IFS; IFS='~' for cmd in $cmds; do IFS=$sp$nl eval cmd=\"$cmd\" IFS=$save_ifs $opt_quiet || { func_quote_for_expand "$cmd" eval "func_echo $func_quote_for_expand_result" } $opt_dry_run || eval "$cmd" || { lt_exit=$? # Restore the uninstalled library and exit if test relink = "$opt_mode"; then ( cd "$output_objdir" && \ $RM "${realname}T" && \ $MV "${realname}U" "$realname" ) fi exit $lt_exit } done IFS=$save_ifs # Restore the uninstalled library and exit if test relink = "$opt_mode"; then $opt_dry_run || eval '(cd $output_objdir && $RM ${realname}T && $MV $realname ${realname}T && $MV ${realname}U $realname)' || exit $? if test -n "$convenience"; then if test -z "$whole_archive_flag_spec"; then func_show_eval '${RM}r "$gentop"' fi fi exit $EXIT_SUCCESS fi # Create links to the real library. for linkname in $linknames; do if test "$realname" != "$linkname"; then func_show_eval '(cd "$output_objdir" && $RM "$linkname" && $LN_S "$realname" "$linkname")' 'exit $?' fi done # If -module or -export-dynamic was specified, set the dlname. if test yes = "$module" || test yes = "$export_dynamic"; then # On all known operating systems, these are identical. dlname=$soname fi fi ;; obj) if test -n "$dlfiles$dlprefiles" || test no != "$dlself"; then func_warning "'-dlopen' is ignored for objects" fi case " $deplibs" in *\ -l* | *\ -L*) func_warning "'-l' and '-L' are ignored for objects" ;; esac test -n "$rpath" && \ func_warning "'-rpath' is ignored for objects" test -n "$xrpath" && \ func_warning "'-R' is ignored for objects" test -n "$vinfo" && \ func_warning "'-version-info' is ignored for objects" test -n "$release" && \ func_warning "'-release' is ignored for objects" case $output in *.lo) test -n "$objs$old_deplibs" && \ func_fatal_error "cannot build library object '$output' from non-libtool objects" libobj=$output func_lo2o "$libobj" obj=$func_lo2o_result ;; *) libobj= obj=$output ;; esac # Delete the old objects. $opt_dry_run || $RM $obj $libobj # Objects from convenience libraries. This assumes # single-version convenience libraries. Whenever we create # different ones for PIC/non-PIC, this we'll have to duplicate # the extraction. reload_conv_objs= gentop= # if reload_cmds runs $LD directly, get rid of -Wl from # whole_archive_flag_spec and hope we can get by with turning comma # into space. case $reload_cmds in *\$LD[\ \$]*) wl= ;; esac if test -n "$convenience"; then if test -n "$whole_archive_flag_spec"; then eval tmp_whole_archive_flags=\"$whole_archive_flag_spec\" test -n "$wl" || tmp_whole_archive_flags=`$ECHO "$tmp_whole_archive_flags" | $SED 's|,| |g'` reload_conv_objs=$reload_objs\ $tmp_whole_archive_flags else gentop=$output_objdir/${obj}x func_append generated " $gentop" func_extract_archives $gentop $convenience reload_conv_objs="$reload_objs $func_extract_archives_result" fi fi # If we're not building shared, we need to use non_pic_objs test yes = "$build_libtool_libs" || libobjs=$non_pic_objects # Create the old-style object. reload_objs=$objs$old_deplibs' '`$ECHO "$libobjs" | $SP2NL | $SED "/\.$libext$/d; /\.lib$/d; $lo2o" | $NL2SP`' '$reload_conv_objs output=$obj func_execute_cmds "$reload_cmds" 'exit $?' # Exit if we aren't doing a library object file. if test -z "$libobj"; then if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS fi test yes = "$build_libtool_libs" || { if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi # Create an invalid libtool object if no PIC, so that we don't # accidentally link it into a program. # $show "echo timestamp > $libobj" # $opt_dry_run || eval "echo timestamp > $libobj" || exit $? exit $EXIT_SUCCESS } if test -n "$pic_flag" || test default != "$pic_mode"; then # Only do commands if we really have different PIC objects. reload_objs="$libobjs $reload_conv_objs" output=$libobj func_execute_cmds "$reload_cmds" 'exit $?' fi if test -n "$gentop"; then func_show_eval '${RM}r "$gentop"' fi exit $EXIT_SUCCESS ;; prog) case $host in *cygwin*) func_stripname '' '.exe' "$output" output=$func_stripname_result.exe;; esac test -n "$vinfo" && \ func_warning "'-version-info' is ignored for programs" test -n "$release" && \ func_warning "'-release' is ignored for programs" $preload \ && test unknown,unknown,unknown = "$dlopen_support,$dlopen_self,$dlopen_self_static" \ && func_warning "'LT_INIT([dlopen])' not used. Assuming no dlopen support." case $host in *-*-rhapsody* | *-*-darwin1.[012]) # On Rhapsody replace the C library is the System framework compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's/ -lc / System.ltframework /'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's/ -lc / System.ltframework /'` ;; esac case $host in *-*-darwin*) # Don't allow lazy linking, it breaks C++ global constructors # But is supposedly fixed on 10.4 or later (yay!). if test CXX = "$tagname"; then case ${MACOSX_DEPLOYMENT_TARGET-10.0} in 10.[0123]) func_append compile_command " $wl-bind_at_load" func_append finalize_command " $wl-bind_at_load" ;; esac fi # Time to change all our "foo.ltframework" stuff back to "-framework foo" compile_deplibs=`$ECHO " $compile_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` finalize_deplibs=`$ECHO " $finalize_deplibs" | $SED 's% \([^ $]*\).ltframework% -framework \1%g'` ;; esac # move library search paths that coincide with paths to not yet # installed libraries to the beginning of the library search list new_libs= for path in $notinst_path; do case " $new_libs " in *" -L$path/$objdir "*) ;; *) case " $compile_deplibs " in *" -L$path/$objdir "*) func_append new_libs " -L$path/$objdir" ;; esac ;; esac done for deplib in $compile_deplibs; do case $deplib in -L*) case " $new_libs " in *" $deplib "*) ;; *) func_append new_libs " $deplib" ;; esac ;; *) func_append new_libs " $deplib" ;; esac done compile_deplibs=$new_libs func_append compile_command " $compile_deplibs" func_append finalize_command " $finalize_deplibs" if test -n "$rpath$xrpath"; then # If the user specified any rpath flags, then add them. for libdir in $rpath $xrpath; do # This is the magic to use -rpath. case "$finalize_rpath " in *" $libdir "*) ;; *) func_append finalize_rpath " $libdir" ;; esac done fi # Now hardcode the library paths rpath= hardcode_libdirs= for libdir in $compile_rpath $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$perm_rpath " in *" $libdir "*) ;; *) func_append perm_rpath " $libdir" ;; esac fi case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-os2* | *-cegcc*) testbindir=`$ECHO "$libdir" | $SED -e 's*/lib$*/bin*'` case :$dllsearchpath: in *":$libdir:"*) ;; ::) dllsearchpath=$libdir;; *) func_append dllsearchpath ":$libdir";; esac case :$dllsearchpath: in *":$testbindir:"*) ;; ::) dllsearchpath=$testbindir;; *) func_append dllsearchpath ":$testbindir";; esac ;; esac done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi compile_rpath=$rpath rpath= hardcode_libdirs= for libdir in $finalize_rpath; do if test -n "$hardcode_libdir_flag_spec"; then if test -n "$hardcode_libdir_separator"; then if test -z "$hardcode_libdirs"; then hardcode_libdirs=$libdir else # Just accumulate the unique libdirs. case $hardcode_libdir_separator$hardcode_libdirs$hardcode_libdir_separator in *"$hardcode_libdir_separator$libdir$hardcode_libdir_separator"*) ;; *) func_append hardcode_libdirs "$hardcode_libdir_separator$libdir" ;; esac fi else eval flag=\"$hardcode_libdir_flag_spec\" func_append rpath " $flag" fi elif test -n "$runpath_var"; then case "$finalize_perm_rpath " in *" $libdir "*) ;; *) func_append finalize_perm_rpath " $libdir" ;; esac fi done # Substitute the hardcoded libdirs into the rpath. if test -n "$hardcode_libdir_separator" && test -n "$hardcode_libdirs"; then libdir=$hardcode_libdirs eval rpath=\" $hardcode_libdir_flag_spec\" fi finalize_rpath=$rpath if test -n "$libobjs" && test yes = "$build_old_libs"; then # Transform all the library objects into standard objects. compile_command=`$ECHO "$compile_command" | $SP2NL | $SED "$lo2o" | $NL2SP` finalize_command=`$ECHO "$finalize_command" | $SP2NL | $SED "$lo2o" | $NL2SP` fi func_generate_dlsyms "$outputname" "@PROGRAM@" false # template prelinking step if test -n "$prelink_cmds"; then func_execute_cmds "$prelink_cmds" 'exit $?' fi wrappers_required=: case $host in *cegcc* | *mingw32ce*) # Disable wrappers for cegcc and mingw32ce hosts, we are cross compiling anyway. wrappers_required=false ;; *cygwin* | *mingw* ) test yes = "$build_libtool_libs" || wrappers_required=false ;; *) if test no = "$need_relink" || test yes != "$build_libtool_libs"; then wrappers_required=false fi ;; esac $wrappers_required || { # Replace the output file specification. compile_command=`$ECHO "$compile_command" | $SED 's%@OUTPUT@%'"$output"'%g'` link_command=$compile_command$compile_rpath # We have no uninstalled library dependencies, so finalize right now. exit_status=0 func_show_eval "$link_command" 'exit_status=$?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Delete the generated files. if test -f "$output_objdir/${outputname}S.$objext"; then func_show_eval '$RM "$output_objdir/${outputname}S.$objext"' fi exit $exit_status } if test -n "$compile_shlibpath$finalize_shlibpath"; then compile_command="$shlibpath_var=\"$compile_shlibpath$finalize_shlibpath\$$shlibpath_var\" $compile_command" fi if test -n "$finalize_shlibpath"; then finalize_command="$shlibpath_var=\"$finalize_shlibpath\$$shlibpath_var\" $finalize_command" fi compile_var= finalize_var= if test -n "$runpath_var"; then if test -n "$perm_rpath"; then # We should set the runpath_var. rpath= for dir in $perm_rpath; do func_append rpath "$dir:" done compile_var="$runpath_var=\"$rpath\$$runpath_var\" " fi if test -n "$finalize_perm_rpath"; then # We should set the runpath_var. rpath= for dir in $finalize_perm_rpath; do func_append rpath "$dir:" done finalize_var="$runpath_var=\"$rpath\$$runpath_var\" " fi fi if test yes = "$no_install"; then # We don't need to create a wrapper script. link_command=$compile_var$compile_command$compile_rpath # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output"'%g'` # Delete the old output file. $opt_dry_run || $RM $output # Link the executable and exit func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi exit $EXIT_SUCCESS fi case $hardcode_action,$fast_install in relink,*) # Fast installation is not supported link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath func_warning "this platform does not like uninstalled shared libraries" func_warning "'$output' will be relinked during installation" ;; *,yes) link_command=$finalize_var$compile_command$finalize_rpath relink_command=`$ECHO "$compile_var$compile_command$compile_rpath" | $SED 's%@OUTPUT@%\$progdir/\$file%g'` ;; *,no) link_command=$compile_var$compile_command$compile_rpath relink_command=$finalize_var$finalize_command$finalize_rpath ;; *,needless) link_command=$finalize_var$compile_command$finalize_rpath relink_command= ;; esac # Replace the output file specification. link_command=`$ECHO "$link_command" | $SED 's%@OUTPUT@%'"$output_objdir/$outputname"'%g'` # Delete the old output files. $opt_dry_run || $RM $output $output_objdir/$outputname $output_objdir/lt-$outputname func_show_eval "$link_command" 'exit $?' if test -n "$postlink_cmds"; then func_to_tool_file "$output_objdir/$outputname" postlink_cmds=`func_echo_all "$postlink_cmds" | $SED -e 's%@OUTPUT@%'"$output_objdir/$outputname"'%g' -e 's%@TOOL_OUTPUT@%'"$func_to_tool_file_result"'%g'` func_execute_cmds "$postlink_cmds" 'exit $?' fi # Now create the wrapper script. func_verbose "creating $output" # Quote the relink command for shipping. if test -n "$relink_command"; then # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done relink_command="(cd `pwd`; $relink_command)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` fi # Only actually do things if not in dry run mode. $opt_dry_run || { # win32 will think the script is a binary if it has # a .exe suffix, so we strip it off here. case $output in *.exe) func_stripname '' '.exe' "$output" output=$func_stripname_result ;; esac # test for cygwin because mv fails w/o .exe extensions case $host in *cygwin*) exeext=.exe func_stripname '' '.exe' "$outputname" outputname=$func_stripname_result ;; *) exeext= ;; esac case $host in *cygwin* | *mingw* ) func_dirname_and_basename "$output" "" "." output_name=$func_basename_result output_path=$func_dirname_result cwrappersource=$output_path/$objdir/lt-$output_name.c cwrapper=$output_path/$output_name.exe $RM $cwrappersource $cwrapper trap "$RM $cwrappersource $cwrapper; exit $EXIT_FAILURE" 1 2 15 func_emit_cwrapperexe_src > $cwrappersource # The wrapper executable is built using the $host compiler, # because it contains $host paths and files. If cross- # compiling, it, like the target executable, must be # executed on the $host or under an emulation environment. $opt_dry_run || { $LTCC $LTCFLAGS -o $cwrapper $cwrappersource $STRIP $cwrapper } # Now, create the wrapper script for func_source use: func_ltwrapper_scriptname $cwrapper $RM $func_ltwrapper_scriptname_result trap "$RM $func_ltwrapper_scriptname_result; exit $EXIT_FAILURE" 1 2 15 $opt_dry_run || { # note: this script will not be executed, so do not chmod. if test "x$build" = "x$host"; then $cwrapper --lt-dump-script > $func_ltwrapper_scriptname_result else func_emit_wrapper no > $func_ltwrapper_scriptname_result fi } ;; * ) $RM $output trap "$RM $output; exit $EXIT_FAILURE" 1 2 15 func_emit_wrapper no > $output chmod +x $output ;; esac } exit $EXIT_SUCCESS ;; esac # See if we need to build an old-fashioned archive. for oldlib in $oldlibs; do case $build_libtool_libs in convenience) oldobjs="$libobjs_save $symfileobj" addlibs=$convenience build_libtool_libs=no ;; module) oldobjs=$libobjs_save addlibs=$old_convenience build_libtool_libs=no ;; *) oldobjs="$old_deplibs $non_pic_objects" $preload && test -f "$symfileobj" \ && func_append oldobjs " $symfileobj" addlibs=$old_convenience ;; esac if test -n "$addlibs"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $addlibs func_append oldobjs " $func_extract_archives_result" fi # Do each command in the archive commands. if test -n "$old_archive_from_new_cmds" && test yes = "$build_libtool_libs"; then cmds=$old_archive_from_new_cmds else # Add any objects from preloaded convenience libraries if test -n "$dlprefiles"; then gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_extract_archives $gentop $dlprefiles func_append oldobjs " $func_extract_archives_result" fi # POSIX demands no paths to be encoded in archives. We have # to avoid creating archives with duplicate basenames if we # might have to extract them afterwards, e.g., when creating a # static archive out of a convenience library, or when linking # the entirety of a libtool archive into another (currently # not supported by libtool). if (for obj in $oldobjs do func_basename "$obj" $ECHO "$func_basename_result" done | sort | sort -uc >/dev/null 2>&1); then : else echo "copying selected object files to avoid basename conflicts..." gentop=$output_objdir/${outputname}x func_append generated " $gentop" func_mkdir_p "$gentop" save_oldobjs=$oldobjs oldobjs= counter=1 for obj in $save_oldobjs do func_basename "$obj" objbase=$func_basename_result case " $oldobjs " in " ") oldobjs=$obj ;; *[\ /]"$objbase "*) while :; do # Make sure we don't pick an alternate name that also # overlaps. newobj=lt$counter-$objbase func_arith $counter + 1 counter=$func_arith_result case " $oldobjs " in *[\ /]"$newobj "*) ;; *) if test ! -f "$gentop/$newobj"; then break; fi ;; esac done func_show_eval "ln $obj $gentop/$newobj || cp $obj $gentop/$newobj" func_append oldobjs " $gentop/$newobj" ;; *) func_append oldobjs " $obj" ;; esac done fi func_to_tool_file "$oldlib" func_convert_file_msys_to_w32 tool_oldlib=$func_to_tool_file_result eval cmds=\"$old_archive_cmds\" func_len " $cmds" len=$func_len_result if test "$len" -lt "$max_cmd_len" || test "$max_cmd_len" -le -1; then cmds=$old_archive_cmds elif test -n "$archiver_list_spec"; then func_verbose "using command file archive linking..." for obj in $oldobjs do func_to_tool_file "$obj" $ECHO "$func_to_tool_file_result" done > $output_objdir/$libname.libcmd func_to_tool_file "$output_objdir/$libname.libcmd" oldobjs=" $archiver_list_spec$func_to_tool_file_result" cmds=$old_archive_cmds else # the command line is too long to link in one step, link in parts func_verbose "using piecewise archive linking..." save_RANLIB=$RANLIB RANLIB=: objlist= concat_cmds= save_oldobjs=$oldobjs oldobjs= # Is there a better way of finding the last object in the list? for obj in $save_oldobjs do last_oldobj=$obj done eval test_cmds=\"$old_archive_cmds\" func_len " $test_cmds" len0=$func_len_result len=$len0 for obj in $save_oldobjs do func_len " $obj" func_arith $len + $func_len_result len=$func_arith_result func_append objlist " $obj" if test "$len" -lt "$max_cmd_len"; then : else # the above command should be used before it gets too long oldobjs=$objlist if test "$obj" = "$last_oldobj"; then RANLIB=$save_RANLIB fi test -z "$concat_cmds" || concat_cmds=$concat_cmds~ eval concat_cmds=\"\$concat_cmds$old_archive_cmds\" objlist= len=$len0 fi done RANLIB=$save_RANLIB oldobjs=$objlist if test -z "$oldobjs"; then eval cmds=\"\$concat_cmds\" else eval cmds=\"\$concat_cmds~\$old_archive_cmds\" fi fi fi func_execute_cmds "$cmds" 'exit $?' done test -n "$generated" && \ func_show_eval "${RM}r$generated" # Now create the libtool archive. case $output in *.la) old_library= test yes = "$build_old_libs" && old_library=$libname.$libext func_verbose "creating $output" # Preserve any variables that may affect compiler behavior for var in $variables_saved_for_relink; do if eval test -z \"\${$var+set}\"; then relink_command="{ test -z \"\${$var+set}\" || $lt_unset $var || { $var=; export $var; }; }; $relink_command" elif eval var_value=\$$var; test -z "$var_value"; then relink_command="$var=; export $var; $relink_command" else func_quote_for_eval "$var_value" relink_command="$var=$func_quote_for_eval_result; export $var; $relink_command" fi done # Quote the link command for shipping. relink_command="(cd `pwd`; $SHELL \"$progpath\" $preserve_args --mode=relink $libtool_args @inst_prefix_dir@)" relink_command=`$ECHO "$relink_command" | $SED "$sed_quote_subst"` if test yes = "$hardcode_automatic"; then relink_command= fi # Only create the output if not a dry run. $opt_dry_run || { for installed in no yes; do if test yes = "$installed"; then if test -z "$install_libdir"; then break fi output=$output_objdir/${outputname}i # Replace all uninstalled libtool libraries with the installed ones newdependency_libs= for deplib in $dependency_libs; do case $deplib in *.la) func_basename "$deplib" name=$func_basename_result func_resolve_sysroot "$deplib" eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $func_resolve_sysroot_result` test -z "$libdir" && \ func_fatal_error "'$deplib' is not a valid libtool archive" func_append newdependency_libs " ${lt_sysroot:+=}$libdir/$name" ;; -L*) func_stripname -L '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -L$func_replace_sysroot_result" ;; -R*) func_stripname -R '' "$deplib" func_replace_sysroot "$func_stripname_result" func_append newdependency_libs " -R$func_replace_sysroot_result" ;; *) func_append newdependency_libs " $deplib" ;; esac done dependency_libs=$newdependency_libs newdlfiles= for lib in $dlfiles; do case $lib in *.la) func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlfiles " ${lt_sysroot:+=}$libdir/$name" ;; *) func_append newdlfiles " $lib" ;; esac done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in *.la) # Only pass preopened files to the pseudo-archive (for # eventual linking with the app. that links it) if we # didn't already link the preopened objects directly into # the library: func_basename "$lib" name=$func_basename_result eval libdir=`$SED -n -e 's/^libdir=\(.*\)$/\1/p' $lib` test -z "$libdir" && \ func_fatal_error "'$lib' is not a valid libtool archive" func_append newdlprefiles " ${lt_sysroot:+=}$libdir/$name" ;; esac done dlprefiles=$newdlprefiles else newdlfiles= for lib in $dlfiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlfiles " $abs" done dlfiles=$newdlfiles newdlprefiles= for lib in $dlprefiles; do case $lib in [\\/]* | [A-Za-z]:[\\/]*) abs=$lib ;; *) abs=`pwd`"/$lib" ;; esac func_append newdlprefiles " $abs" done dlprefiles=$newdlprefiles fi $RM $output # place dlname in correct position for cygwin # In fact, it would be nice if we could use this code for all target # systems that can't hard-code library paths into their executables # and that have no shared library path variable independent of PATH, # but it turns out we can't easily determine that from inspecting # libtool variables, so we have to hard-code the OSs to which it # applies here; at the moment, that means platforms that use the PE # object format with DLL files. See the long comment at the top of # tests/bindir.at for full details. tdlname=$dlname case $host,$output,$installed,$module,$dlname in *cygwin*,*lai,yes,no,*.dll | *mingw*,*lai,yes,no,*.dll | *cegcc*,*lai,yes,no,*.dll) # If a -bindir argument was supplied, place the dll there. if test -n "$bindir"; then func_relative_path "$install_libdir" "$bindir" tdlname=$func_relative_path_result/$dlname else # Otherwise fall back on heuristic. tdlname=../bin/$dlname fi ;; esac $ECHO > $output "\ # $outputname - a libtool library file # Generated by $PROGRAM (GNU $PACKAGE) $VERSION # # Please DO NOT delete this file! # It is necessary for linking the library. # The name that we can dlopen(3). dlname='$tdlname' # Names of this library. library_names='$library_names' # The name of the static archive. old_library='$old_library' # Linker flags that cannot go in dependency_libs. inherited_linker_flags='$new_inherited_linker_flags' # Libraries that this one depends upon. dependency_libs='$dependency_libs' # Names of additional weak libraries provided by this library weak_library_names='$weak_libs' # Version information for $libname. current=$current age=$age revision=$revision # Is this an already installed library? installed=$installed # Should we warn about portability when linking against -modules? shouldnotlink=$module # Files to dlopen/dlpreopen dlopen='$dlfiles' dlpreopen='$dlprefiles' # Directory that this library needs to be installed in: libdir='$install_libdir'" if test no,yes = "$installed,$need_relink"; then $ECHO >> $output "\ relink_command=\"$relink_command\"" fi done } # Do a symbolic link so that the libtool archive can be found in # LD_LIBRARY_PATH before the program is installed. func_show_eval '( cd "$output_objdir" && $RM "$outputname" && $LN_S "../$outputname" "$outputname" )' 'exit $?' ;; esac exit $EXIT_SUCCESS } if test link = "$opt_mode" || test relink = "$opt_mode"; then func_mode_link ${1+"$@"} fi # func_mode_uninstall arg... func_mode_uninstall () { $debug_cmd RM=$nonopt files= rmforce=false exit_status=0 # This variable tells wrapper scripts just to set variables rather # than running their programs. libtool_install_magic=$magic for arg do case $arg in -f) func_append RM " $arg"; rmforce=: ;; -*) func_append RM " $arg" ;; *) func_append files " $arg" ;; esac done test -z "$RM" && \ func_fatal_help "you must specify an RM program" rmdirs= for file in $files; do func_dirname "$file" "" "." dir=$func_dirname_result if test . = "$dir"; then odir=$objdir else odir=$dir/$objdir fi func_basename "$file" name=$func_basename_result test uninstall = "$opt_mode" && odir=$dir # Remember odir for removal later, being careful to avoid duplicates if test clean = "$opt_mode"; then case " $rmdirs " in *" $odir "*) ;; *) func_append rmdirs " $odir" ;; esac fi # Don't error if the file doesn't exist and rm -f was used. if { test -L "$file"; } >/dev/null 2>&1 || { test -h "$file"; } >/dev/null 2>&1 || test -f "$file"; then : elif test -d "$file"; then exit_status=1 continue elif $rmforce; then continue fi rmfiles=$file case $name in *.la) # Possibly a libtool archive, so verify it. if func_lalib_p "$file"; then func_source $dir/$name # Delete the libtool libraries and symlinks. for n in $library_names; do func_append rmfiles " $odir/$n" done test -n "$old_library" && func_append rmfiles " $odir/$old_library" case $opt_mode in clean) case " $library_names " in *" $dlname "*) ;; *) test -n "$dlname" && func_append rmfiles " $odir/$dlname" ;; esac test -n "$libdir" && func_append rmfiles " $odir/$name $odir/${name}i" ;; uninstall) if test -n "$library_names"; then # Do each command in the postuninstall commands. func_execute_cmds "$postuninstall_cmds" '$rmforce || exit_status=1' fi if test -n "$old_library"; then # Do each command in the old_postuninstall commands. func_execute_cmds "$old_postuninstall_cmds" '$rmforce || exit_status=1' fi # FIXME: should reinstall the best remaining shared library. ;; esac fi ;; *.lo) # Possibly a libtool object, so verify it. if func_lalib_p "$file"; then # Read the .lo file func_source $dir/$name # Add PIC object to the list of files to remove. if test -n "$pic_object" && test none != "$pic_object"; then func_append rmfiles " $dir/$pic_object" fi # Add non-PIC object to the list of files to remove. if test -n "$non_pic_object" && test none != "$non_pic_object"; then func_append rmfiles " $dir/$non_pic_object" fi fi ;; *) if test clean = "$opt_mode"; then noexename=$name case $file in *.exe) func_stripname '' '.exe' "$file" file=$func_stripname_result func_stripname '' '.exe' "$name" noexename=$func_stripname_result # $file with .exe has already been added to rmfiles, # add $file without .exe func_append rmfiles " $file" ;; esac # Do a test to see if this is a libtool program. if func_ltwrapper_p "$file"; then if func_ltwrapper_executable_p "$file"; then func_ltwrapper_scriptname "$file" relink_command= func_source $func_ltwrapper_scriptname_result func_append rmfiles " $func_ltwrapper_scriptname_result" else relink_command= func_source $dir/$noexename fi # note $name still contains .exe if it was in $file originally # as does the version of $file that was added into $rmfiles func_append rmfiles " $odir/$name $odir/${name}S.$objext" if test yes = "$fast_install" && test -n "$relink_command"; then func_append rmfiles " $odir/lt-$name" fi if test "X$noexename" != "X$name"; then func_append rmfiles " $odir/lt-$noexename.c" fi fi fi ;; esac func_show_eval "$RM $rmfiles" 'exit_status=1' done # Try to remove the $objdir's in the directories where we deleted files for dir in $rmdirs; do if test -d "$dir"; then func_show_eval "rmdir $dir >/dev/null 2>&1" fi done exit $exit_status } if test uninstall = "$opt_mode" || test clean = "$opt_mode"; then func_mode_uninstall ${1+"$@"} fi test -z "$opt_mode" && { help=$generic_help func_fatal_help "you must specify a MODE" } test -z "$exec_cmd" && \ func_fatal_help "invalid operation mode '$opt_mode'" if test -n "$exec_cmd"; then eval exec "$exec_cmd" exit $EXIT_FAILURE fi exit $exit_status # The TAGs below are defined such that we never get into a situation # where we disable both kinds of libraries. Given conflicting # choices, we go for a static library, that is the most portable, # since we can't tell whether shared libraries were disabled because # the user asked for that or because the platform doesn't support # them. This is particularly important on AIX, because we don't # support having both static and shared libraries enabled at the same # time on that platform, so we default to a shared-only configuration. # If a disable-shared tag is given, we'll fallback to a static-only # configuration. But we'll never go from static-only to shared-only. # ### BEGIN LIBTOOL TAG CONFIG: disable-shared build_libtool_libs=no build_old_libs=yes # ### END LIBTOOL TAG CONFIG: disable-shared # ### BEGIN LIBTOOL TAG CONFIG: disable-static build_old_libs=`case $build_libtool_libs in yes) echo no;; *) echo yes;; esac` # ### END LIBTOOL TAG CONFIG: disable-static # Local Variables: # mode:shell-script # sh-indentation:2 # End: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/configure.ac���������������������������������������������������������������������������0000644�0000000�0000000�00000016007�14226571675�012415� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl configure.ac for GNU rec dnl dnl Please process this file with autoconf to get a 'configure' dnl script. dnl Copyright (C) 2009-2022 Jose E. Marchesi dnl This program is free software: you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation, either version 3 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, dnl but WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the dnl GNU General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program. If not, see <http://www.gnu.org/licenses/>. AC_INIT([GNU recutils], [1.9], [bug-recutils@gnu.org]) dnl Must come before AM_INIT_AUTOMAKE AC_CONFIG_AUX_DIR([build-aux]) AM_INIT_AUTOMAKE([subdir-objects]) AC_CONFIG_HEADERS(src/config.h) AC_CONFIG_MACRO_DIR([m4]) dnl Autobuild AB_INIT AC_PROG_CC gl_EARLY LT_INIT AC_PROG_CC_C99 AM_PROG_CC_C_O dnl Both lex and yacc are required to generate the lexer/parser source dnl files. : ${LEX='flex'} : ${LEXLIB='-lfl'} : ${LEX_OUTPUT_ROOT='lex.yy'} AC_ARG_VAR([LEX], [The flex implementation to use.]) AC_ARG_VAR([LEXLIB], [Options for linking with the flex runtime library.]) AC_ARG_VAR([LEX_OUTPUT_ROOT], [Base of the file name that the lexer generates.]) gl_BISON dnl System AC_CANONICAL_HOST canonical=$host gl_INIT # GNU help2man creates man pages from --help output; in many cases, this # is sufficient, and obviates the need to maintain man pages separately. # However, this means invoking executables, which we generally cannot do # when cross-compiling, so we test to avoid that (the variable # "cross_compiling" is set by AC_PROG_CC). if test $cross_compiling = no; then AM_MISSING_PROG(HELP2MAN, help2man) else HELP2MAN=: fi dnl Seach for headers AC_CHECK_HEADERS([malloc.h string.h]) dnl Search for data types AC_CHECK_TYPE(size_t, unsigned) AC_CHECK_TYPE(off_t, long) dnl Search for functions AC_FUNC_FSEEKO dnl Search for required libraries have_check=no PKG_CHECK_MODULES([CHECK], [check], [have_check=yes], [have_check=no]) AM_CONDITIONAL([CHECK], [test "x$have_check" != "xno"]) AC_SUBST([CHECK_CFLAGS]) AC_SUBST([CHECK_LIBS]) have_curl=no AC_CHECK_LIB([curl],[curl_global_init],[have_curl=yes],) if test "x$have_curl" = "xyes"; then CURLLIBS=-lcurl fi AC_SUBST([CURLLIBS]) have_uuid=no AC_CHECK_LIB([uuid],[uuid_generate],[have_uuid=yes],) if test "x$have_uuid" = "xyes"; then UUIDLIBS=-luuid fi AC_SUBST([UUIDLIBS]) AC_SUBST([have_uuid]) AC_ARG_ENABLE([encryption], AS_HELP_STRING([--enable-encryption], [Compile recutils with encryption support (default is YES)]), [crypt_enabled=$enableval], [crypt_enabled=yes]) crypt_support=no if test "x$crypt_enabled" = "xyes"; then AC_LIB_HAVE_LINKFLAGS([gcrypt],[gpg-error],[#include <gpg-error.h>]) crypt_support=$HAVE_LIBGCRYPT if test "x$crypt_support" = "xyes"; then AC_DEFINE([REC_CRYPT_SUPPORT],[1],[Compile encryption support]) fi fi AM_CONDITIONAL([CRYPT], [test "x$crypt_support" = "xyes"]) AC_SUBST([crypt_support]) have_glib=no PKG_CHECK_MODULES([GLIB], [glib-2.0 >= 2.0.0], [have_glib=yes], [have_glib=no]) have_mdb=no AC_CHECK_LIB([mdb],[mdb_init],[have_mdb=yes],) if test "x$have_mdb" = "xyes"; then MDBLIBS=-lmdb OLD_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $pkg_cv_GLIB_CFLAGS" mdb_uses_sdatetime=no AC_CHECK_DECL([MDB_SDATETIME],[mdb_uses_sdatetime=yes],,[#include <glib.h> #include <mdbtools.h>]) CFLAGS=$OLD_CFLAGS if test "x$mdb_uses_sdatetime" = "xyes"; then MDB_DATETIME="MDB_SDATETIME" else MDB_DATETIME="MDB_DATETIME" fi AC_SUBST([MDB_DATETIME]) fi AC_SUBST([MDBLIBS]) AM_CONDITIONAL([COMPILE_MDB2REC], [test "x$have_glib" = "xyes" && test "x$have_mdb" = "xyes"]) AM_CONDITIONAL([REMOTE_DESCRIPTORS], [test "x$have_curl" = "xyes"]) AM_CONDITIONAL([UUID_TYPE], [test "x$have_uuid" = "xyes"]) dnl Bash builtins dnl It would be much better to use AC_CHECK_HEADER([bash/config.h]) instead dnl of a fixed value like /usr/include/bash, but then it would be difficult dnl to set a proper search path for the preprocessor, since the bash dnl headers which are needed to compile loadable builtins are not dnl very well designed. BASH_HEADERS=/usr/include/bash AC_ARG_WITH([bash-headers], AS_HELP_STRING([--with-bash-headers], [location of the bash header files (default is /usr/include/bash)]), [BASH_HEADERS=$withval],) if test -f ${BASH_HEADERS}/config.h; then AC_SUBST([BASH_HEADERS]) bash_headers_available=yes else bash_headers_available=no fi AC_ARG_ENABLE([bash-builtins], AS_HELP_STRING([--enable-bash-builtins], [Build the recutils bash builtins (default is YES)]), [bash_builtins_enabled=$enableval], [bash_builtins_enabled=yes]) AM_CONDITIONAL([BASH_BUILTINS], [test "x$bash_headers_available" = "xyes" && test "x$bash_builtins_enabled" = "xyes"]) dnl Platform-based compilation options compile_w32_system=no case "${host}" in *-mingw32*) compile_w32_system=yes ;; *) ;; esac dnl i18n with gettext AM_GNU_GETTEXT_VERSION([0.19.8]) AM_GNU_GETTEXT([external]) dnl gcov compilation AC_ARG_ENABLE([coverage], AS_HELP_STRING([--enable-coverage], [Compile the library with code coverage support (default is NO)]), [use_gcov=$enableval], [use_gcov=no]) AM_CONDITIONAL([USE_COVERAGE], [test "x$use_gcov" = "xyes"]) dnl Generate output files AC_CONFIG_FILES(Makefile lib/Makefile libcsv/Makefile src/Makefile utils/Makefile bash/Makefile doc/Makefile po/Makefile.in torture/Makefile torture/utils/Makefile torture/utils/config.sh man/Makefile etc/Makefile) AC_OUTPUT dnl Report warnings if test "x$have_check" = "xno"; then echo "warning: libcheck was not found in the system." echo "warning: unit tests wont be compiled and executed upon make check." fi if test "x$have_mdb" = "xno"; then echo "warning: libmdb was not found in the system." echo "warning: the mdb2rec utility won't get built." fi if test "x$have_glib" = "xno"; then echo "warning: glib was not found in the system." echo "warning: the mdb2rec utility won't get built." fi if test "x$crypt_support" = "xno"; then echo "warning: building recutils without encryption support." fi if test "x$have_uuid" = "xno"; then echo "warning: building recutils without support for uuid types." fi if test "x$bash_headers_available" = "xno" || test "x$bash_builtins_enabled" = "xno"; then echo "warning: not building the recutils bash builtins." fi dnl End of configure.ac �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/utils/���������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577414�011340� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/utils/Makefile.am����������������������������������������������������������������������0000644�0000000�0000000�00000004631�14226563465�013321� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# utils/ Makefile.am # GNU rec # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, # 2018, 2019, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. if COMPILE_MDB2REC MDB2REC = mdb2rec else MDB2REC = endif bin_PROGRAMS = recinf recsel recins recdel recset recfix recfmt \ csv2rec rec2csv $(MDB2REC) COMMONSRC = recutl.h recutl.c COMMONLIBS = $(top_builddir)/lib/librecutils.la $(top_builddir)/src/librec.la if CRYPT COMMONLIBS += $(LTLIBGCRYPT) endif AM_CFLAGS = if USE_COVERAGE AM_CFLAGS += -fprofile-arcs -ftest-coverage endif AM_CPPFLAGS = -I$(top_builddir)/lib \ -I$(top_srcdir)/lib -I$(top_srcdir)/src \ -I$(top_srcdir)/libcsv -DLOCALEDIR=\"$(localedir)\" \ -DMDB_DATETIME=$(MDB_DATETIME) recinf_SOURCES = $(COMMONSRC) \ recinf.c recinf_LDADD = $(COMMONLIBS) recsel_SOURCES = $(COMMONSRC) \ recsel.c recsel_LDADD = $(COMMONLIBS) recins_SOURCES = $(COMMONSRC) \ recins.c recins_LDADD = $(COMMONLIBS) recdel_SOURCES = $(COMMONSRC) \ recdel.c recdel_LDADD = $(COMMONLIBS) recset_SOURCES = $(COMMONSRC) \ recset.c recset_LDADD = $(COMMONLIBS) recfix_SOURCES = $(COMMONSRC) \ recfix.c recfix_LDADD = $(COMMONLIBS) recfmt_SOURCES = $(COMMONSRC) \ recfmt.c recfmt_LDADD = $(COMMONLIBS) csv2rec_SOURCES = $(COMMONSRC) \ csv2rec.c csv2rec_LDADD = $(COMMONLIBS) \ $(top_builddir)/libcsv/libcsv.la rec2csv_SOURCES = $(COMMONSRC) \ rec2csv.c rec2csv_LDADD = $(COMMONLIBS) \ $(top_builddir)/libcsv/libcsv.la mdb2rec_SOURCES = $(COMMONSRC) \ mdb2rec.c mdb2rec_CFLAGS = $(GLIB_CFLAGS) mdb2rec_LDADD = $(COMMONLIBS) $(MDBLIBS) # End of Makefile.am �������������������������������������������������������������������������������������������������������recutils-1.9/utils/Makefile.in����������������������������������������������������������������������0000644�0000000�0000000�00000263174�14226573151�013334� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # utils/ Makefile.am # GNU rec # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, # 2018, 2019, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ bin_PROGRAMS = recinf$(EXEEXT) recsel$(EXEEXT) recins$(EXEEXT) \ recdel$(EXEEXT) recset$(EXEEXT) recfix$(EXEEXT) \ recfmt$(EXEEXT) csv2rec$(EXEEXT) rec2csv$(EXEEXT) \ $(am__EXEEXT_1) @CRYPT_TRUE@am__append_1 = $(LTLIBGCRYPT) @USE_COVERAGE_TRUE@am__append_2 = -fprofile-arcs -ftest-coverage subdir = utils ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 \ $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/calloc.m4 \ $(top_srcdir)/m4/canonicalize.m4 \ $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/clock_time.m4 \ $(top_srcdir)/m4/close.m4 $(top_srcdir)/m4/closedir.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/copy-file-range.m4 \ $(top_srcdir)/m4/copy-file.m4 $(top_srcdir)/m4/d-ino.m4 \ $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup.m4 \ $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eaccess.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ $(top_srcdir)/m4/explicit_bzero.m4 \ $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 \ $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fchdir.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \ $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \ $(top_srcdir)/m4/filenamecat.m4 \ $(top_srcdir)/m4/findprog-in.m4 $(top_srcdir)/m4/flexmember.m4 \ $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/flock.m4 \ $(top_srcdir)/m4/floor.m4 $(top_srcdir)/m4/fopen.m4 \ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ $(top_srcdir)/m4/fseek.m4 $(top_srcdir)/m4/fseeko.m4 \ $(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \ $(top_srcdir)/m4/fstatat.m4 $(top_srcdir)/m4/ftell.m4 \ $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ $(top_srcdir)/m4/getcwd-abort-bug.m4 \ $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \ $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \ $(top_srcdir)/m4/getpass.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/getrandom.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/group-member.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexpl.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrlen.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/minmax.m4 \ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkostemp.m4 \ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \ $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/opendir.m4 \ $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ $(top_srcdir)/m4/posix_spawn_faction_addchdir.m4 \ $(top_srcdir)/m4/printf-frexp.m4 \ $(top_srcdir)/m4/printf-frexpl.m4 \ $(top_srcdir)/m4/printf-posix-rpl.m4 \ $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readdir.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/remove.m4 \ $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rewinddir.m4 \ $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/safe-read.m4 \ $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/save-cwd.m4 \ $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ $(top_srcdir)/m4/selinux-context-h.m4 \ $(top_srcdir)/m4/selinux-label-h.m4 \ $(top_srcdir)/m4/selinux-selinux-h.m4 \ $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/setlocale_null.m4 \ $(top_srcdir)/m4/sh-filename.m4 \ $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ $(top_srcdir)/m4/signal_h.m4 \ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/stdio_h.m4 \ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/stpcpy.m4 \ $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ $(top_srcdir)/m4/sys_random_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink.m4 \ $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utime.m4 \ $(top_srcdir)/m4/utime_h.m4 $(top_srcdir)/m4/utimens.m4 \ $(top_srcdir)/m4/utimes.m4 \ $(top_srcdir)/m4/vasnprintf-posix.m4 \ $(top_srcdir)/m4/vasnprintf.m4 \ $(top_srcdir)/m4/vasprintf-posix.m4 \ $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ $(top_srcdir)/m4/vfprintf-posix.m4 \ $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/write.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/year2038.m4 \ $(top_srcdir)/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = @COMPILE_MDB2REC_TRUE@am__EXEEXT_1 = mdb2rec$(EXEEXT) am__installdirs = "$(DESTDIR)$(bindir)" PROGRAMS = $(bin_PROGRAMS) am__objects_1 = recutl.$(OBJEXT) am_csv2rec_OBJECTS = $(am__objects_1) csv2rec.$(OBJEXT) csv2rec_OBJECTS = $(am_csv2rec_OBJECTS) am__DEPENDENCIES_1 = @CRYPT_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) am__DEPENDENCIES_3 = $(top_builddir)/lib/librecutils.la \ $(top_builddir)/src/librec.la $(am__DEPENDENCIES_2) csv2rec_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(top_builddir)/libcsv/libcsv.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = am__objects_2 = mdb2rec-recutl.$(OBJEXT) am_mdb2rec_OBJECTS = $(am__objects_2) mdb2rec-mdb2rec.$(OBJEXT) mdb2rec_OBJECTS = $(am_mdb2rec_OBJECTS) mdb2rec_DEPENDENCIES = $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_1) mdb2rec_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(mdb2rec_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ am_rec2csv_OBJECTS = $(am__objects_1) rec2csv.$(OBJEXT) rec2csv_OBJECTS = $(am_rec2csv_OBJECTS) rec2csv_DEPENDENCIES = $(am__DEPENDENCIES_3) \ $(top_builddir)/libcsv/libcsv.la am_recdel_OBJECTS = $(am__objects_1) recdel.$(OBJEXT) recdel_OBJECTS = $(am_recdel_OBJECTS) recdel_DEPENDENCIES = $(am__DEPENDENCIES_3) am_recfix_OBJECTS = $(am__objects_1) recfix.$(OBJEXT) recfix_OBJECTS = $(am_recfix_OBJECTS) recfix_DEPENDENCIES = $(am__DEPENDENCIES_3) am_recfmt_OBJECTS = $(am__objects_1) recfmt.$(OBJEXT) recfmt_OBJECTS = $(am_recfmt_OBJECTS) recfmt_DEPENDENCIES = $(am__DEPENDENCIES_3) am_recinf_OBJECTS = $(am__objects_1) recinf.$(OBJEXT) recinf_OBJECTS = $(am_recinf_OBJECTS) recinf_DEPENDENCIES = $(am__DEPENDENCIES_3) am_recins_OBJECTS = $(am__objects_1) recins.$(OBJEXT) recins_OBJECTS = $(am_recins_OBJECTS) recins_DEPENDENCIES = $(am__DEPENDENCIES_3) am_recsel_OBJECTS = $(am__objects_1) recsel.$(OBJEXT) recsel_OBJECTS = $(am_recsel_OBJECTS) recsel_DEPENDENCIES = $(am__DEPENDENCIES_3) am_recset_OBJECTS = $(am__objects_1) recset.$(OBJEXT) recset_OBJECTS = $(am_recset_OBJECTS) recset_DEPENDENCIES = $(am__DEPENDENCIES_3) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/csv2rec.Po \ ./$(DEPDIR)/mdb2rec-mdb2rec.Po ./$(DEPDIR)/mdb2rec-recutl.Po \ ./$(DEPDIR)/rec2csv.Po ./$(DEPDIR)/recdel.Po \ ./$(DEPDIR)/recfix.Po ./$(DEPDIR)/recfmt.Po \ ./$(DEPDIR)/recinf.Po ./$(DEPDIR)/recins.Po \ ./$(DEPDIR)/recsel.Po ./$(DEPDIR)/recset.Po \ ./$(DEPDIR)/recutl.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(csv2rec_SOURCES) $(mdb2rec_SOURCES) $(rec2csv_SOURCES) \ $(recdel_SOURCES) $(recfix_SOURCES) $(recfmt_SOURCES) \ $(recinf_SOURCES) $(recins_SOURCES) $(recsel_SOURCES) \ $(recset_SOURCES) DIST_SOURCES = $(csv2rec_SOURCES) $(mdb2rec_SOURCES) \ $(rec2csv_SOURCES) $(recdel_SOURCES) $(recfix_SOURCES) \ $(recfmt_SOURCES) $(recinf_SOURCES) $(recins_SOURCES) \ $(recsel_SOURCES) $(recset_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_HEADERS = @BASH_HEADERS@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CURLLIBS = @CURLLIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ FLOOR_LIBM = @FLOOR_LIBM@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POSIX_SPAWN = @GL_GNULIB_POSIX_SPAWN@ GL_GNULIB_POSIX_SPAWNATTR_DESTROY = @GL_GNULIB_POSIX_SPAWNATTR_DESTROY@ GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ GL_GNULIB_POSIX_SPAWNATTR_INIT = @GL_GNULIB_POSIX_SPAWNATTR_INIT@ GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ GL_GNULIB_POSIX_SPAWNP = @GL_GNULIB_POSIX_SPAWNP@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIME = @GL_GNULIB_UTIME@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FLOCK = @HAVE_FLOCK@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SPAWN_H = @HAVE_SPAWN_H@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIME = @HAVE_UTIME@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_UTIME_H = @HAVE_UTIME_H@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGCRYPT = @LIBGCRYPT@ LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIB_ACL = @LIB_ACL@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ LIB_EACCESS = @LIB_EACCESS@ LIB_GETRANDOM = @LIB_GETRANDOM@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELINUX = @LIB_SELINUX@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBGCRYPT = @LTLIBGCRYPT@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBREADLINE = @LTLIBREADLINE@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MDBLIBS = @MDBLIBS@ MDB_DATETIME = @MDB_DATETIME@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_UTIME_H = @NEXT_AS_FIRST_DIRECTIVE_UTIME_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_SPAWN_H = @NEXT_SPAWN_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_UTIME_H = @NEXT_UTIME_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PARSE_DATETIME_BISON = @PARSE_DATETIME_BISON@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIME = @REPLACE_UTIME@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ SELINUX_LABEL_H = @SELINUX_LABEL_H@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_ACL = @USE_ACL@ USE_NLS = @USE_NLS@ UUIDLIBS = @UUIDLIBS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ crypt_support = @crypt_support@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ have_uuid = @have_uuid@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @COMPILE_MDB2REC_FALSE@MDB2REC = @COMPILE_MDB2REC_TRUE@MDB2REC = mdb2rec COMMONSRC = recutl.h recutl.c COMMONLIBS = $(top_builddir)/lib/librecutils.la \ $(top_builddir)/src/librec.la $(am__append_1) AM_CFLAGS = $(am__append_2) AM_CPPFLAGS = -I$(top_builddir)/lib \ -I$(top_srcdir)/lib -I$(top_srcdir)/src \ -I$(top_srcdir)/libcsv -DLOCALEDIR=\"$(localedir)\" \ -DMDB_DATETIME=$(MDB_DATETIME) recinf_SOURCES = $(COMMONSRC) \ recinf.c recinf_LDADD = $(COMMONLIBS) recsel_SOURCES = $(COMMONSRC) \ recsel.c recsel_LDADD = $(COMMONLIBS) recins_SOURCES = $(COMMONSRC) \ recins.c recins_LDADD = $(COMMONLIBS) recdel_SOURCES = $(COMMONSRC) \ recdel.c recdel_LDADD = $(COMMONLIBS) recset_SOURCES = $(COMMONSRC) \ recset.c recset_LDADD = $(COMMONLIBS) recfix_SOURCES = $(COMMONSRC) \ recfix.c recfix_LDADD = $(COMMONLIBS) recfmt_SOURCES = $(COMMONSRC) \ recfmt.c recfmt_LDADD = $(COMMONLIBS) csv2rec_SOURCES = $(COMMONSRC) \ csv2rec.c csv2rec_LDADD = $(COMMONLIBS) \ $(top_builddir)/libcsv/libcsv.la rec2csv_SOURCES = $(COMMONSRC) \ rec2csv.c rec2csv_LDADD = $(COMMONLIBS) \ $(top_builddir)/libcsv/libcsv.la mdb2rec_SOURCES = $(COMMONSRC) \ mdb2rec.c mdb2rec_CFLAGS = $(GLIB_CFLAGS) mdb2rec_LDADD = $(COMMONLIBS) $(MDBLIBS) all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu utils/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu utils/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-binPROGRAMS: $(bin_PROGRAMS) @$(NORMAL_INSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(bindir)'"; \ $(MKDIR_P) "$(DESTDIR)$(bindir)" || exit 1; \ fi; \ for p in $$list; do echo "$$p $$p"; done | \ sed 's/$(EXEEXT)$$//' | \ while read p p1; do if test -f $$p \ || test -f $$p1 \ ; then echo "$$p"; echo "$$p"; else :; fi; \ done | \ sed -e 'p;s,.*/,,;n;h' \ -e 's|.*|.|' \ -e 'p;x;s,.*/,,;s/$(EXEEXT)$$//;$(transform);s/$$/$(EXEEXT)/' | \ sed 'N;N;N;s,\n, ,g' | \ $(AWK) 'BEGIN { files["."] = ""; dirs["."] = 1 } \ { d=$$3; if (dirs[d] != 1) { print "d", d; dirs[d] = 1 } \ if ($$2 == $$4) files[d] = files[d] " " $$1; \ else { print "f", $$3 "/" $$4, $$1; } } \ END { for (d in files) print "f", d, files[d] }' | \ while read type dir files; do \ if test "$$dir" = .; then dir=; else dir=/$$dir; fi; \ test -z "$$files" || { \ echo " $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files '$(DESTDIR)$(bindir)$$dir'"; \ $(INSTALL_PROGRAM_ENV) $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL_PROGRAM) $$files "$(DESTDIR)$(bindir)$$dir" || exit $$?; \ } \ ; done uninstall-binPROGRAMS: @$(NORMAL_UNINSTALL) @list='$(bin_PROGRAMS)'; test -n "$(bindir)" || list=; \ files=`for p in $$list; do echo "$$p"; done | \ sed -e 'h;s,^.*/,,;s/$(EXEEXT)$$//;$(transform)' \ -e 's/$$/$(EXEEXT)/' \ `; \ test -n "$$list" || exit 0; \ echo " ( cd '$(DESTDIR)$(bindir)' && rm -f" $$files ")"; \ cd "$(DESTDIR)$(bindir)" && rm -f $$files clean-binPROGRAMS: @list='$(bin_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list csv2rec$(EXEEXT): $(csv2rec_OBJECTS) $(csv2rec_DEPENDENCIES) $(EXTRA_csv2rec_DEPENDENCIES) @rm -f csv2rec$(EXEEXT) $(AM_V_CCLD)$(LINK) $(csv2rec_OBJECTS) $(csv2rec_LDADD) $(LIBS) mdb2rec$(EXEEXT): $(mdb2rec_OBJECTS) $(mdb2rec_DEPENDENCIES) $(EXTRA_mdb2rec_DEPENDENCIES) @rm -f mdb2rec$(EXEEXT) $(AM_V_CCLD)$(mdb2rec_LINK) $(mdb2rec_OBJECTS) $(mdb2rec_LDADD) $(LIBS) rec2csv$(EXEEXT): $(rec2csv_OBJECTS) $(rec2csv_DEPENDENCIES) $(EXTRA_rec2csv_DEPENDENCIES) @rm -f rec2csv$(EXEEXT) $(AM_V_CCLD)$(LINK) $(rec2csv_OBJECTS) $(rec2csv_LDADD) $(LIBS) recdel$(EXEEXT): $(recdel_OBJECTS) $(recdel_DEPENDENCIES) $(EXTRA_recdel_DEPENDENCIES) @rm -f recdel$(EXEEXT) $(AM_V_CCLD)$(LINK) $(recdel_OBJECTS) $(recdel_LDADD) $(LIBS) recfix$(EXEEXT): $(recfix_OBJECTS) $(recfix_DEPENDENCIES) $(EXTRA_recfix_DEPENDENCIES) @rm -f recfix$(EXEEXT) $(AM_V_CCLD)$(LINK) $(recfix_OBJECTS) $(recfix_LDADD) $(LIBS) recfmt$(EXEEXT): $(recfmt_OBJECTS) $(recfmt_DEPENDENCIES) $(EXTRA_recfmt_DEPENDENCIES) @rm -f recfmt$(EXEEXT) $(AM_V_CCLD)$(LINK) $(recfmt_OBJECTS) $(recfmt_LDADD) $(LIBS) recinf$(EXEEXT): $(recinf_OBJECTS) $(recinf_DEPENDENCIES) $(EXTRA_recinf_DEPENDENCIES) @rm -f recinf$(EXEEXT) $(AM_V_CCLD)$(LINK) $(recinf_OBJECTS) $(recinf_LDADD) $(LIBS) recins$(EXEEXT): $(recins_OBJECTS) $(recins_DEPENDENCIES) $(EXTRA_recins_DEPENDENCIES) @rm -f recins$(EXEEXT) $(AM_V_CCLD)$(LINK) $(recins_OBJECTS) $(recins_LDADD) $(LIBS) recsel$(EXEEXT): $(recsel_OBJECTS) $(recsel_DEPENDENCIES) $(EXTRA_recsel_DEPENDENCIES) @rm -f recsel$(EXEEXT) $(AM_V_CCLD)$(LINK) $(recsel_OBJECTS) $(recsel_LDADD) $(LIBS) recset$(EXEEXT): $(recset_OBJECTS) $(recset_DEPENDENCIES) $(EXTRA_recset_DEPENDENCIES) @rm -f recset$(EXEEXT) $(AM_V_CCLD)$(LINK) $(recset_OBJECTS) $(recset_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/csv2rec.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdb2rec-mdb2rec.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/mdb2rec-recutl.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec2csv.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recdel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recfix.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recfmt.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recinf.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recins.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recsel.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/recutl.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mdb2rec-recutl.o: recutl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -MT mdb2rec-recutl.o -MD -MP -MF $(DEPDIR)/mdb2rec-recutl.Tpo -c -o mdb2rec-recutl.o `test -f 'recutl.c' || echo '$(srcdir)/'`recutl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mdb2rec-recutl.Tpo $(DEPDIR)/mdb2rec-recutl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='recutl.c' object='mdb2rec-recutl.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -c -o mdb2rec-recutl.o `test -f 'recutl.c' || echo '$(srcdir)/'`recutl.c mdb2rec-recutl.obj: recutl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -MT mdb2rec-recutl.obj -MD -MP -MF $(DEPDIR)/mdb2rec-recutl.Tpo -c -o mdb2rec-recutl.obj `if test -f 'recutl.c'; then $(CYGPATH_W) 'recutl.c'; else $(CYGPATH_W) '$(srcdir)/recutl.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mdb2rec-recutl.Tpo $(DEPDIR)/mdb2rec-recutl.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='recutl.c' object='mdb2rec-recutl.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -c -o mdb2rec-recutl.obj `if test -f 'recutl.c'; then $(CYGPATH_W) 'recutl.c'; else $(CYGPATH_W) '$(srcdir)/recutl.c'; fi` mdb2rec-mdb2rec.o: mdb2rec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -MT mdb2rec-mdb2rec.o -MD -MP -MF $(DEPDIR)/mdb2rec-mdb2rec.Tpo -c -o mdb2rec-mdb2rec.o `test -f 'mdb2rec.c' || echo '$(srcdir)/'`mdb2rec.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mdb2rec-mdb2rec.Tpo $(DEPDIR)/mdb2rec-mdb2rec.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mdb2rec.c' object='mdb2rec-mdb2rec.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -c -o mdb2rec-mdb2rec.o `test -f 'mdb2rec.c' || echo '$(srcdir)/'`mdb2rec.c mdb2rec-mdb2rec.obj: mdb2rec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -MT mdb2rec-mdb2rec.obj -MD -MP -MF $(DEPDIR)/mdb2rec-mdb2rec.Tpo -c -o mdb2rec-mdb2rec.obj `if test -f 'mdb2rec.c'; then $(CYGPATH_W) 'mdb2rec.c'; else $(CYGPATH_W) '$(srcdir)/mdb2rec.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/mdb2rec-mdb2rec.Tpo $(DEPDIR)/mdb2rec-mdb2rec.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mdb2rec.c' object='mdb2rec-mdb2rec.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(mdb2rec_CFLAGS) $(CFLAGS) -c -o mdb2rec-mdb2rec.obj `if test -f 'mdb2rec.c'; then $(CYGPATH_W) 'mdb2rec.c'; else $(CYGPATH_W) '$(srcdir)/mdb2rec.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(PROGRAMS) installdirs: for dir in "$(DESTDIR)$(bindir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-binPROGRAMS clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/csv2rec.Po -rm -f ./$(DEPDIR)/mdb2rec-mdb2rec.Po -rm -f ./$(DEPDIR)/mdb2rec-recutl.Po -rm -f ./$(DEPDIR)/rec2csv.Po -rm -f ./$(DEPDIR)/recdel.Po -rm -f ./$(DEPDIR)/recfix.Po -rm -f ./$(DEPDIR)/recfmt.Po -rm -f ./$(DEPDIR)/recinf.Po -rm -f ./$(DEPDIR)/recins.Po -rm -f ./$(DEPDIR)/recsel.Po -rm -f ./$(DEPDIR)/recset.Po -rm -f ./$(DEPDIR)/recutl.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-binPROGRAMS install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/csv2rec.Po -rm -f ./$(DEPDIR)/mdb2rec-mdb2rec.Po -rm -f ./$(DEPDIR)/mdb2rec-recutl.Po -rm -f ./$(DEPDIR)/rec2csv.Po -rm -f ./$(DEPDIR)/recdel.Po -rm -f ./$(DEPDIR)/recfix.Po -rm -f ./$(DEPDIR)/recfmt.Po -rm -f ./$(DEPDIR)/recinf.Po -rm -f ./$(DEPDIR)/recins.Po -rm -f ./$(DEPDIR)/recsel.Po -rm -f ./$(DEPDIR)/recset.Po -rm -f ./$(DEPDIR)/recutl.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-binPROGRAMS .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-binPROGRAMS clean-generic clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-binPROGRAMS \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-binPROGRAMS .PRECIOUS: Makefile # End of Makefile.am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/utils/rec2csv.c������������������������������������������������������������������������0000644�0000000�0000000�00000017476�14226563465�013013� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec2csv.c - rec to csv converter. */ /* Copyright (C) 2011-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <getopt.h> #include <string.h> #include <stdlib.h> #include <xalloc.h> #include <gettext.h> #define _(str) gettext (str) #include <csv.h> #include <rec.h> #include <recutl.h> /* * Global variables */ char *rec2csv_record_type = NULL; rec_fex_t rec2csv_sort_by_fields = NULL; char rec2csv_delim = ','; /* * Command line options management */ enum { COMMON_ARGS, DELIM_ARG, RECORD_TYPE_ARG, SORT_ARG }; static const struct option GNU_longOptions[] = { COMMON_LONG_ARGS, {"delim", required_argument, NULL, DELIM_ARG}, {"type", required_argument, NULL, RECORD_TYPE_ARG}, {"sort", required_argument, NULL, SORT_ARG}, {NULL, 0, NULL, 0} }; /* * Functions. */ void recutl_print_help (void) { /* TRANSLATORS: --help output, rec2csv synopsis. no-wrap */ printf (_("\ Usage: rec2csv [OPTIONS]... [REC_FILE]\n")); /* TRANSLATORS: --help output, rec2csv short description. no-wrap */ fputs (_("\ Convert rec data into csv data.\n"), stdout); puts (""); /* TRANSLATORS: --help output, rec2csv options. no-wrap */ fputs (_("\ -d, --delim=char sets the deliminator (default ',')\n\ -t, --type=TYPE record set to convert to csv; if this parameter\n\ is omitted then the default record set is used\n\ -S, --sort=FIELDS sort the output by the specified fields.\n"), stdout); recutl_print_help_common (); puts (""); recutl_print_help_footer (); } static void rec2csv_parse_args (int argc, char **argv) { int ret; char c; while ((ret = getopt_long (argc, argv, "t:S:d:", GNU_longOptions, NULL)) != -1) { c = ret; switch (c) { COMMON_ARGS_CASES case DELIM_ARG: case 'd': rec2csv_delim = optarg[0]; break; case RECORD_TYPE_ARG: case 't': rec2csv_record_type = xstrdup (optarg); break; case SORT_ARG: case 'S': if (rec2csv_sort_by_fields) recutl_fatal (_("only one list of fields can be specified\ as a sorting criteria.\n")); /* Parse the field name. */ if (!rec_fex_check (optarg, REC_FEX_CSV)) recutl_fatal (_("invalid field name list in -S.\n")); rec2csv_sort_by_fields = rec_fex_new (optarg, REC_FEX_CSV); if (!rec2csv_sort_by_fields) recutl_fatal (_("internal error creating fex.\n")); break; default: exit (EXIT_FAILURE); } } } static void rec2csv_generate_csv (rec_rset_t rset, rec_fex_t fex) { rec_mset_iterator_t iter; rec_fex_elem_t fex_elem; rec_record_t record; rec_field_t field; char *field_name; char *tmp; size_t i; /* Generate the row with headers. */ for (i = 0; i < rec_fex_size (fex); i++) { if (i != 0) putc (rec2csv_delim, stdout); fex_elem = rec_fex_get (fex, i); field_name = xstrdup (rec_fex_elem_field_name (fex_elem)); /* The header is FNAME or FNAME_N where N is the index starting at 1. Note that we shall remove the trailing ':', if any. */ if (field_name[strlen(field_name)-1] == ':') field_name[strlen(field_name)-1] = '\0'; if (rec_fex_elem_min (fex_elem) != 0) { if (asprintf (&tmp, "%s_%d", field_name, rec_fex_elem_min (fex_elem) + 1) == -1) recutl_out_of_memory (); } else { if (asprintf (&tmp, "%s", field_name) == -1) recutl_out_of_memory (); } csv_fwrite (stdout, tmp, strlen(tmp)); free (field_name); free (tmp); } putc ('\n', stdout); /* Generate the data rows. */ iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void**) &record, NULL)) { for (i = 0; i < rec_fex_size (fex); i++) { if (i != 0) putc (rec2csv_delim, stdout); fex_elem = rec_fex_get (fex, i); field = rec_record_get_field_by_name (record, rec_fex_elem_field_name (fex_elem), rec_fex_elem_min (fex_elem)); if (field) csv_fwrite (stdout, rec_field_value (field), strlen (rec_field_value (field))); } putc ('\n', stdout); } rec_mset_iterator_free (&iter); } static rec_fex_t rec2csv_determine_fields (rec_rset_t rset) { rec_fex_t fields; rec_mset_iterator_t iter_rset; rec_mset_iterator_t iter_record; rec_record_t record; rec_field_t field; int field_index; fields = rec_fex_new (NULL, REC_FEX_SIMPLE); iter_rset = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter_rset, MSET_RECORD, (const void **) &record, NULL)) { iter_record = rec_mset_iterator (rec_record_mset (record)); while (rec_mset_iterator_next (&iter_record, MSET_FIELD, (const void **) &field, NULL)) { field_index = rec_record_get_field_index_by_name (record, field); if (!rec_fex_member_p (fields, rec_field_name (field), field_index, field_index)) rec_fex_append (fields, rec_field_name (field), field_index, field_index); } rec_mset_iterator_free (&iter_record); } rec_mset_iterator_free (&iter_rset); return fields; } static bool rec2csv_process_data (rec_db_t db) { bool ret; rec_fex_t row_fields; size_t i; rec_rset_t rset; ret = true; for (i = 0; i < rec_db_size (db); i++) { rset = rec_db_get_rset (db, i); if (((rec2csv_record_type) && rec_rset_type (rset) && (strcmp (rec_rset_type (rset), rec2csv_record_type) == 0)) || (!rec2csv_record_type && (!rec_rset_type (rset) || (rec_db_size (db) == 1)))) { /* Process this record set. */ if (!rec_rset_sort (rset, rec2csv_sort_by_fields)) recutl_out_of_memory (); /* Build the fields that will appear in the row. */ row_fields = rec2csv_determine_fields (rset); /* Generate the csv data. */ rec2csv_generate_csv (rset, row_fields); /* Cleanup. */ rec_fex_destroy (row_fields); } } return ret; } int main (int argc, char *argv[]) { int res; rec_db_t db; res = 0; recutl_init ("rec2csv"); /* Parse arguments. */ rec2csv_parse_args (argc, argv); /* Get the input data. */ db = recutl_build_db (argc, argv); if (!db) res = 1; else { /* Process the data. */ if (!rec2csv_process_data (db)) res = 1; } rec_db_destroy (db); return res; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/utils/recutl.h�������������������������������������������������������������������������0000644�0000000�0000000�00000020763�14226563465�012740� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recutl.h - Common code for the utilities. */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef RECUTL_H #define RECUTL_H #include <progname.h> /* * Common arguments. */ #define COMMON_ARGS \ HELP_ARG, \ VERSION_ARG #define COMMON_LONG_ARGS \ {"help", no_argument, NULL, HELP_ARG}, \ {"version", no_argument, NULL, VERSION_ARG} #define COMMON_ARGS_CASES \ case HELP_ARG: \ { \ recutl_print_help (); \ exit (EXIT_SUCCESS); \ break; \ } \ case VERSION_ARG: \ { \ recutl_print_version (); \ exit (EXIT_SUCCESS); \ break; \ } /* * Record selection arguments. */ #define RECORD_SELECTION_ARGS \ TYPE_ARG, \ EXPRESSION_ARG, \ QUICK_ARG, \ NUM_ARG, \ INSENSITIVE_ARG, \ RANDOM_ARG #define RECORD_SELECTION_LONG_ARGS \ {"type", required_argument, NULL, TYPE_ARG}, \ {"expression", required_argument, NULL, EXPRESSION_ARG}, \ {"quick", required_argument, NULL, QUICK_ARG}, \ {"number", required_argument, NULL, NUM_ARG}, \ {"case-insensitive", no_argument, NULL, INSENSITIVE_ARG}, \ {"random", required_argument, NULL, RANDOM_ARG} #define RECORD_SELECTION_SHORT_ARGS \ "it:e:n:q:m:" #define RECORD_SELECTION_ARGS_CASES \ case TYPE_ARG: \ case 't': \ recutl_type = xstrdup (optarg); \ if (!rec_field_name_p (recutl_type)) \ recutl_fatal ("invalid record type %s\n", \ recutl_type); \ break; \ case EXPRESSION_ARG: \ case 'e': \ if (recutl_num_indexes() != 0) \ recutl_fatal (_("cannot specify -e and also -n\n")); \ if (recutl_quick_str) \ recutl_fatal (_("cannot specify -e and also -q\n")); \ recutl_sex_str = xstrdup (optarg); \ \ /* Compile the search expression. */ \ if (recutl_sex_str) \ { \ recutl_sex = rec_sex_new (recutl_insensitive); \ if (!rec_sex_compile (recutl_sex, recutl_sex_str)) \ recutl_fatal(_("invalid selection expression\n")); \ } \ break; \ case NUM_ARG: \ case 'n': \ if (recutl_sex) \ recutl_fatal(_("cannot specify -n and also -e\n")); \ if (recutl_quick_str) \ recutl_fatal(_("cannot specify -n and also -q\n")); \ if (recutl_num_indexes() != 0) \ recutl_fatal ("please specify just one -n\n"); \ if (!recutl_index_list_parse (optarg)) \ recutl_fatal (_("invalid list of indexes in -n\n")); \ break; \ case RANDOM_ARG: \ case 'm': \ if (recutl_sex) \ recutl_fatal (_("cannot specify -m and also -e\n")); \ if (recutl_quick_str) \ recutl_fatal (_("cannot specify -m and also -q\n")); \ if (recutl_num_indexes() != 0) \ recutl_fatal (_("cannot specify -m and also -n\n")); \ if (recutl_random) \ recutl_fatal ("please specify just one -m\n"); \ \ { \ char *end; \ long int li = strtol (optarg, &end, 0); \ if (*end != '\0') \ recutl_fatal ("invalid number in -m\n"); \ \ recutl_random = li; \ } \ break; \ case QUICK_ARG: \ case 'q': \ if (recutl_sex) \ recutl_fatal (_("cannot specify -e and also -n\n")); \ if (recutl_num_indexes() != 0) \ recutl_fatal (_("cannot specify -e and also -n\n")); \ \ recutl_quick_str = xstrdup (optarg); \ break; \ case INSENSITIVE_ARG: \ case 'i': \ recutl_insensitive = true; \ break; #if defined REC_CRYPT_SUPPORT # define ENCRYPTION_SHORT_ARGS "s:" #else # define ENCRYPTION_SHORT_ARGS "" #endif /* * Function prototypes. */ void recutl_init (char *util_name); void recutl_print_version (void); void recutl_print_help_common (void); void recutl_print_help_footer (void); void recutl_print_help_record_selection (void); void recutl_error (const char *fmt, ...); void recutl_warning (const char *fmt, ...); void recutl_fatal (const char *fmt, ...); void recutl_out_of_memory (void); bool recutl_parse_db_from_file (FILE *in, char *file_name, rec_db_t db); rec_db_t recutl_build_db (int argc, char **argv); rec_db_t recutl_read_db_from_file (char *file_name); void recutl_write_db_to_file (rec_db_t db, char *file_name); bool recutl_file_is_writable (char *file_name); char *recutl_read_file (char *file_name); void recutl_check_integrity (rec_db_t db, bool verbose_p, bool external_p); bool recutl_yesno (char *prompt); bool recutl_interactive (void); char *recutl_getpass (bool asktwice); /* Parse a list of indexes from the given string and set the internal recutl_indexes accordingly. Return true if a list was found in the string. Return false otherwise. */ bool recutl_index_list_parse (const char *str); /* Return the number of indexes in the internal recutl_indexes data structure. */ size_t recutl_num_indexes (void); /* Reset the list of indexes to be empty. */ void recutl_reset_indexes (void); /* Return the index structure. */ size_t *recutl_index (void); #endif /* ! RECUTL_H */ �������������recutils-1.9/utils/recutl.c�������������������������������������������������������������������������0000644�0000000�0000000�00000035022�14226563465�012725� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recutl.c - Common code for the utilities. */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <getopt.h> #include <stdio.h> #include <string.h> #include <stdarg.h> #include <closeout.h> #include <xalloc.h> #include <unistd.h> #include <locale.h> #include <gettext.h> #define _(str) gettext (str) #if defined REC_CRYPT_SUPPORT # include <gcrypt.h> #endif #include <progname.h> #include <sys/stat.h> #include <readline.h> #include <regex.h> #include <stdint.h> #include <time.h> #include <unistd.h> #include <getpass.h> #include <tmpdir.h> #include <pathmax.h> /* GNU/Hurd doesn't define PATH_MAX */ #ifndef PATH_MAX # define PATH_MAX 8192 #endif #include <rec.h> #include <recutl.h> #include "read-file.h" #include "copy-file.h" /* * Global variables. */ static bool recutl_sort_p = false; static char *recutl_order_rset = NULL; static char *recutl_order_by_field = NULL; static bool recutl_interactive_p = false; static size_t *recutl_indexes = NULL; static size_t recutl_indexes_size = 0; void recutl_print_help (void); /* Forward prototype. */ void recutl_init (char *util_name) { set_program_name (xstrdup (util_name)); #if defined REC_CRYPT_SUPPORT /* Initialize libgcrypt */ gcry_check_version (NULL); gcry_control (GCRYCTL_INITIALIZATION_FINISHED, 0); #endif /* Initialize librec */ rec_init (); /* Even exiting has subtleties. On exit, if any writes failed, change the exit status. The /dev/full device on GNU/Linux can be used for testing; for instance, hello >/dev/full should exit unsuccessfully. This is implemented in the Gnulib module "closeout". */ atexit (close_stdout); /* i18n */ setlocale (LC_ALL, ""); bindtextdomain (PACKAGE, LOCALEDIR); textdomain (PACKAGE); /* Detect whether the tool has been invoked interactively. */ recutl_interactive_p = isatty (fileno(stdin)); /* Initially there are no indexes. */ recutl_reset_indexes (); } bool recutl_interactive (void) { return recutl_interactive_p; } void recutl_print_help_footer (void) { /* TRANSLATORS: --help output 5+ (reports) TRANSLATORS: the placeholder indicates the bug-reporting address for this application. Please add _another line_ with the address for translation bugs. no-wrap */ printf (_("\ Report bugs to: %s\n"), PACKAGE_BUGREPORT); #ifdef PACKAGE_PACKAGER_BUG_REPORTS printf (_("Report %s bugs to: %s\n"), PACKAGE_PACKAGER, PACKAGE_PACKAGER_BUG_REPORTS); #endif #ifdef PACKAGE_URL printf (_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); #else printf (_("%s home page: <http://www.gnu.org/software/recutils/>\n"), PACKAGE_NAME, PACKAGE); #endif fputs (_("General help using GNU software: <http://www.gnu.org/gethelp/>\n"), stdout); } void recutl_print_help_common (void) { /* TRANSLATORS: --help output, common arguments. no-wrap */ fputs (_("\ --help print a help message and exit.\n\ --version show version and exit.\n"), stdout); } void recutl_print_help_record_selection (void) { /* TRANSLATORS: --help output, record selection arguments no-wrap */ fputs (_("\ Record selection options:\n\ -i, --case-insensitive make strings case-insensitive in selection\n\ expressions.\n\ -t, --type=TYPE operate on records of the specified type only.\n\ -e, --expression=RECORD_EXPR selection expression.\n\ -q, --quick=STR select records with fields containing a string.\n\ -n, --number=NUM,... select specific records by position, with ranges.\n\ -m, --random=NUM select a given number of random records.\n"), stdout); } void recutl_print_version (void) { printf ("%s (GNU %s) %s\n", program_name, PACKAGE, VERSION); /* xgettext: no-wrap */ puts (""); /* It is important to separate the year from the rest of the message, as done here, to avoid having to retranslate the message when a new year comes around. */ printf (_("\ Copyright (C) %s Jose E. Marchesi.\n\ License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>.\n\ This is free software: you are free to change and redistribute it.\n\ There is NO WARRANTY, to the extent permitted by law.\n"), "2010-2020"); puts (_("\ \n\ Written by Jose E. Marchesi.")); } void recutl_fatal (const char *fmt, ...) { va_list ap; va_start (ap, fmt); fputs (program_name, stderr); fputs (_(": error: "), stderr); vfprintf (stderr, fmt, ap); va_end (ap); exit (EXIT_FAILURE); } void recutl_out_of_memory (void) { recutl_fatal (_("out of memory\n")); } void recutl_error (const char *fmt, ...) { va_list ap; va_start (ap, fmt); fputs (program_name, stderr); fputs (_(": error: "), stderr); vfprintf (stderr, fmt, ap); va_end (ap); } void recutl_warning (const char *fmt, ...) { va_list ap; va_start (ap, fmt); fputs (program_name, stderr); fputs (_(": warning: "), stderr); vfprintf (stderr, fmt, ap); va_end (ap); } bool recutl_parse_db_from_file (FILE *in, char *file_name, rec_db_t db) { bool res; rec_rset_t rset; rec_parser_t parser; res = true; parser = rec_parser_new (in, file_name); while (rec_parse_rset (parser, &rset)) { char *rset_type; /* XXX: check for consistency!!!. */ rset_type = rec_rset_type (rset); if (rec_db_type_p (db, rset_type)) { if (rset_type) recutl_fatal (_("duplicated record set '%s' from %s.\n"), rset_type, file_name); else { /* Special case: the database already contains anonymous records (with no type) and the record set to be inserted also contains anonyous records. In this case we just append the records and comments in the anonymous record set. */ rec_rset_t anon_rset = rec_db_get_rset_by_type (db, NULL); rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); rec_mset_elem_t elem; while (rec_mset_iterator_next (&iter, MSET_ANY, NULL, &elem)) { void *data = rec_mset_elem_dup_data (elem); if (!data || !rec_mset_append (rec_rset_mset (anon_rset), rec_mset_elem_type (elem), data, MSET_ANY)) return false; } rec_mset_iterator_free (&iter); return true; } } if (!rec_db_insert_rset (db, rset, rec_db_size (db))) { /* Error. */ res = false; break; } } if (rec_parser_error (parser)) { /* Report parsing errors. */ rec_parser_perror (parser, "%s", file_name); res = false; } rec_parser_destroy (parser); return res; } rec_db_t recutl_build_db (int argc, char **argv) { rec_db_t db; char *file_name; FILE *in; db = rec_db_new (); if (!db) return NULL; /* Register the default functions in the database. */ /* Process the input files, if any. Otherwise use the standard input to read the rec data. */ if (optind < argc) { while (optind < argc) { file_name = argv[optind++]; if (!(in = fopen (file_name, "r"))) recutl_fatal (_("cannot read file %s\n"), file_name); else { if (!recutl_parse_db_from_file (in, file_name, db)) { free (db); db = NULL; } fclose (in); } } } else { if (!recutl_parse_db_from_file (stdin, "stdin", db)) { free (db); db = NULL; } } return db; } rec_db_t recutl_read_db_from_file (char *file_name) { rec_db_t db; FILE *in; db = rec_db_new (); if (file_name) { in = fopen (file_name, "r"); if (in == NULL) return NULL; } else { /* Process the standard input. */ file_name = "stdin"; in = stdin; } if (!recutl_parse_db_from_file (in, file_name, db)) { rec_db_destroy (db); db = NULL; } return db; } bool recutl_file_is_writable (char *file_name) { return !file_name || (euidaccess (file_name, W_OK) == 0); } void recutl_write_db_to_file (rec_db_t db, char *file_name) { FILE *out; char tmp_file_name[PATH_MAX]; rec_writer_t writer; int des; struct stat st1; int stat_result; if (!file_name) out = stdout; else { /* Record the original file attributes. */ stat_result = stat (file_name, &st1); /* Create a temporary file with the results. */ if ((path_search (tmp_file_name, PATH_MAX, NULL, "rec", true) == -1) || ((des = mkstemp (tmp_file_name)) == -1)) recutl_fatal (_("cannot create a unique name.\n")); out = fdopen (des, "w+"); } writer = rec_writer_new (out); rec_write_db (writer, db); if (file_name) fclose (out); rec_db_destroy (db); if (file_name) { /* Rename the temporary file to file_name. We copy and remove instead of renaming because the later doesn't work across different mount points, and it is getting common for /tmp to be mounted in its own filesystem. */ if (qcopy_file_preserving (tmp_file_name, file_name) != 0) recutl_fatal (_("renaming file %s to %s\n"), tmp_file_name, file_name); remove (tmp_file_name); /* Restore the attributes of the original file. */ if (stat_result != -1) chmod (file_name, st1.st_mode); } } char * recutl_read_file (char *file_name) { char *result; FILE *in; result = NULL; in = fopen (file_name, "r"); if (in) { size_t file_size; result = fread_file (in, 0, &file_size); fclose (in); } return result; } void recutl_check_integrity (rec_db_t db, bool verbose_p, bool external_p) { rec_buf_t errors_buf; char *errors_str; size_t errors_str_size; errors_buf = rec_buf_new (&errors_str, &errors_str_size); if (rec_int_check_db (db, true, external_p, errors_buf) > 0) { rec_buf_close (errors_buf); if (!verbose_p) { recutl_error (_("operation aborted due to integrity failures.\n")); recutl_error (_("use --verbose to get a detailed report.\n")); } else { fprintf (stderr, "%s", errors_str); } recutl_fatal (_("use --force to skip the integrity check.\n")); } } bool recutl_yesno (char *prompt) { bool res = false; char *line = NULL; while (1) { line = readline (prompt); if (line) { if (strcmp (line, "yes") == 0) { res = true; break; } else if (strcmp (line, "no") == 0) { res = false; break; } } printf ("Please answer 'yes' or 'no'.\n"); } return res; } #define INDEX_LIST_ENTRY_RE "[0-9]+(-[0-9]+)?" #define INDEX_LIST_RE "(" INDEX_LIST_ENTRY_RE ",)*" INDEX_LIST_ENTRY_RE bool recutl_index_list_parse (const char *str) { regex_t regexp; bool res = true; const char *p; long int number; char *end; size_t i; /* Initialize the list structure. An pessimistic estimation of the number of indexes encoded in the string is used. */ free (recutl_indexes); recutl_indexes = xmalloc (sizeof (size_t) * (strlen (str) * 2 + 2)); for (i = 0; i < (strlen (str) * 2 + 2); i++) recutl_indexes[i] = REC_Q_NOINDEX; /* Make sure the string is valid. The code below relies on this fact. */ if (regcomp (®exp, "^" INDEX_LIST_RE "$", REG_EXTENDED) != 0) { recutl_fatal (_("internal error: recutl_index_list_parse: error compiling regexp.\n")); return false; } if (regexec (®exp, str, 0, NULL, 0) != 0) { regfree (®exp); return false; } regfree (®exp); /* Parse the string. */ p = str; while (true) { /* Get the 'min' part of the entry. */ number = strtol (p, &end, 10); recutl_indexes[recutl_indexes_size] = (size_t) number; p = end; /* Get the 'max' part of the entry, if any. */ if (*p == '-') { p++; number = strtol (p, &end, 10); recutl_indexes[recutl_indexes_size+1] = (size_t) number; p = end; } recutl_indexes_size = recutl_indexes_size + 2; /* Exit or pass the separator. */ if (*p == '\0') break; else p++; } return res; } void recutl_reset_indexes (void) { free (recutl_indexes); recutl_indexes = NULL; recutl_indexes_size = 0; } size_t recutl_num_indexes (void) { return recutl_indexes_size; } size_t * recutl_index (void) { return recutl_indexes; } char * recutl_getpass (bool asktwice) { char *ret = NULL; char *pass = getpass (_("Password: ")); if (pass) { ret = xstrdup (pass); if (asktwice) { pass = getpass (_("Password again: ")); if (pass) { if (strcmp (ret, pass) != 0) { recutl_fatal (_("the provided passwords don't match.\n")); memset (ret, 0, strlen (ret)); memset (pass, 0, strlen (pass)); } } else { memset (ret, 0, strlen (ret)); free (ret); ret = NULL; } } } return ret; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/utils/recfix.c�������������������������������������������������������������������������0000644�0000000�0000000�00000031415�14226563465�012711� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recfix.c - Fix and analyze a recfile. */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <getopt.h> #include <stdlib.h> #include <xalloc.h> #include <gettext.h> #define _(str) gettext (str) #include <rec.h> #include <recutl.h> /* * Data types. */ /* recfix supports several operations, enumerated in the following type. */ enum recfix_op { RECFIX_OP_INVALID, RECFIX_OP_CHECK, #if defined REC_CRYPT_SUPPORT RECFIX_OP_ENCRYPT, RECFIX_OP_DECRYPT, #endif RECFIX_OP_SORT, RECFIX_OP_AUTO }; /* * Global variables. */ bool recfix_external = true; char *recfix_file = NULL; int recfix_op = RECFIX_OP_INVALID; char *recfix_password = NULL; bool recfix_force = false; /* * Command line options management. */ enum { COMMON_ARGS, NO_EXTERNAL_ARG, FORCE_ARG, OP_SORT_ARG, #if defined REC_CRYPT_SUPPORT PASSWORD_ARG, OP_ENCRYPT_ARG, OP_DECRYPT_ARG, #endif OP_CHECK_ARG, OP_AUTO_ARG }; static const struct option GNU_longOptions[] = { COMMON_LONG_ARGS, {"no-external", no_argument, NULL, NO_EXTERNAL_ARG}, {"force", no_argument, NULL, FORCE_ARG}, {"check", no_argument, NULL, OP_CHECK_ARG}, {"sort", no_argument, NULL, OP_SORT_ARG}, #if defined REC_CRYPT_SUPPORT {"password", required_argument, NULL, PASSWORD_ARG}, {"encrypt", no_argument, NULL, OP_ENCRYPT_ARG}, {"decrypt", no_argument, NULL, OP_DECRYPT_ARG}, #endif {"auto", no_argument, NULL, OP_AUTO_ARG}, {NULL, 0, NULL, 0} }; void recutl_print_help (void) { /* TRANSLATORS: --help output, recfix synopsis. no-wrap */ printf (_("\ Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n")); /* TRANSLATORS: --help output, recfix short description. no-wrap */ fputs (_("\ Check and fix rec files.\n"), stdout); puts (""); /* TRANSLATORS: --help output, recfix global arguments. no-wrap */ fputs (_("\ --no-external don't use external descriptors.\n\ --force force the requested operation.\n"), stdout); recutl_print_help_common (); puts(""); /* TRANSLATORS: --help output, recfix operations. no-wrap */ fputs (_("\ Operations:\n\ --check check integrity of the specified file. Default.\n\ --sort sort the records in the specified file.\n\ --auto insert auto-generated fields in records missing them.\n"), stdout); #if defined REC_CRYPT_SUPPORT /* TRANSLATORS: --help output, recfix operations related with encryption. no-wrap */ fputs (_("\ --encrypt encrypt confidential fields in the specified file.\n\ --decrypt decrypt confidential fields in the specified file.\n"), stdout); puts(""); /* TRANSLATORS: --help output, recfix encryption and decryption options. no-wrap */ fputs (_("\ De/Encryption options:\n\ -s, --password=PASSWORD encrypt/decrypt with this password.\n"), stdout); #endif /* REC_CRYPT_SUPPORT */ puts(""); /* TRANSLATORS: --help output, notes on recfix. no-wrap */ fputs (_("\ If no FILE is specified then the command acts like a filter, getting\n\ the data from standard input and writing the result to standard output.\n"), stdout); puts(""); recutl_print_help_footer (); } static void recfix_parse_args (int argc, char **argv) { char c; int ret; while ((ret = getopt_long (argc, argv, ENCRYPTION_SHORT_ARGS, GNU_longOptions, NULL)) != -1) { c = ret; switch (c) { COMMON_ARGS_CASES case NO_EXTERNAL_ARG: recfix_external = false; break; case FORCE_ARG: recfix_force = true; break; #if defined REC_CRYPT_SUPPORT case 's': case PASSWORD_ARG: if (recfix_op == RECFIX_OP_INVALID) recutl_fatal (_("--password|-s must be used as an operation argument.\n")); if ((recfix_op != RECFIX_OP_ENCRYPT) && (recfix_op != RECFIX_OP_DECRYPT)) recutl_fatal (_("the specified operation does not require a password.\n")); if (recfix_password != NULL) recutl_fatal (_("please specify just one password.\n")); recfix_password = xstrdup (optarg); break; #endif /* REC_CRYPT_SUPPORT */ case OP_CHECK_ARG: if (recfix_op != RECFIX_OP_INVALID) recutl_fatal (_("please specify just one operation.\n")); recfix_op = RECFIX_OP_CHECK; break; case OP_SORT_ARG: if (recfix_op != RECFIX_OP_INVALID) recutl_fatal (_("please specify just one operation.\n")); recfix_op = RECFIX_OP_SORT; break; case OP_AUTO_ARG: if (recfix_op != RECFIX_OP_INVALID) recutl_fatal (_("please specify just one operation.\n")); recfix_op = RECFIX_OP_AUTO; break; #if defined REC_CRYPT_SUPPORT case OP_ENCRYPT_ARG: if (recfix_op != RECFIX_OP_INVALID) recutl_fatal (_("please specify just one operation.\n")); recfix_op = RECFIX_OP_ENCRYPT; break; case OP_DECRYPT_ARG: if (recfix_op != RECFIX_OP_INVALID) recutl_fatal (_("please specify just one operation.\n")); recfix_op = RECFIX_OP_DECRYPT; break; #endif /* REC_CRYPT_SUPPORT */ default: exit (EXIT_FAILURE); } } /* The default operation is check, in case the user did not specify any in the command line. */ if (recfix_op == RECFIX_OP_INVALID) recfix_op = RECFIX_OP_CHECK; #if defined REC_CRYPT_SUPPORT /* The encrypt and decrypt operations require the user to specify a password. If no password was specified with -s and the program is running in a terminal, prompt the user to provide the password. */ if (((recfix_op == RECFIX_OP_ENCRYPT) || (recfix_op == RECFIX_OP_DECRYPT)) && (recfix_password == NULL)) { if (recutl_interactive ()) { if (recfix_op == RECFIX_OP_ENCRYPT) recfix_password = recutl_getpass (true); else recfix_password = recutl_getpass (false); } if (!recfix_password || (strlen (recfix_password) == 0)) recutl_fatal ("please specify a password.\n"); } #endif /* REC_CRYPT_SUPPORT */ /* Read the name of the file to work on. */ if (optind < argc) { if ((argc - optind) != 1) { recutl_print_help (); exit (EXIT_FAILURE); } recfix_file = argv[optind++]; } } static bool recfix_check_database (rec_db_t db) { bool ret; char *errors; size_t errors_size; rec_buf_t buf; buf = rec_buf_new (&errors, &errors_size); ret = (rec_int_check_db (db, true, /* Check descriptors. */ recfix_external, /* Use external descriptors. */ buf) == 0); rec_buf_close (buf); fprintf (stderr, "%s", errors); return ret; } static int recfix_do_check () { rec_db_t db; /* Read the database from the specified file and check its integrity. */ db = recutl_read_db_from_file (recfix_file); if (!db) { fprintf (stderr, _("recfix: error: cannot read file %s\n"), recfix_file); return EXIT_FAILURE; } if (!recfix_check_database (db)) return EXIT_FAILURE; return EXIT_SUCCESS; } static int recfix_do_sort () { rec_db_t db = NULL; size_t n_rset = 0; rec_rset_t rset = NULL; /* Read the database from the specified file. */ db = recutl_read_db_from_file (recfix_file); if (!db) { fprintf (stderr, _("recfix: error: cannot read file %s\n"), recfix_file); return EXIT_FAILURE; } /* Sort all the record sets contained in the database. */ for (n_rset = 0; n_rset < rec_db_size (db); n_rset++) { rset = rec_db_get_rset (db, n_rset); if (!rec_rset_sort (rset, NULL)) recutl_out_of_memory (); } if (!recfix_check_database (db)) return EXIT_FAILURE; if (!recutl_file_is_writable (recfix_file)) { recutl_error (_("file %s is not writable.\n"), recfix_file); return EXIT_FAILURE; } recutl_write_db_to_file (db, recfix_file); return EXIT_SUCCESS; } #if defined REC_CRYPT_SUPPORT static int recfix_do_crypt () { rec_db_t db; size_t n_rset; /* Read the database from the specified file. */ db = recutl_read_db_from_file (recfix_file); if (!db) { fprintf (stderr, _("recfix: error: cannot read file %s\n"), recfix_file); return EXIT_FAILURE; } /* Encrypt/decrypt any unencrypted/encrypted field marked as "confidential" using the given password. */ for (n_rset = 0; n_rset < rec_db_size (db); n_rset++) { rec_mset_iterator_t iter; rec_fex_t confidential_fields; rec_record_t record; rec_rset_t rset = rec_db_get_rset (db, n_rset); /* Skip record sets not having any confidential fields. */ confidential_fields = rec_rset_confidential (rset); if (confidential_fields == NULL) continue; /* Process every record of the record set. */ iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &record, NULL)) { if (recfix_op == RECFIX_OP_ENCRYPT) { /* Encrypt any unencrypted confidential field in this record. */ if (!rec_encrypt_record (rset, record, recfix_password) && !recfix_force) { recutl_error (_("the database contains already encrypted fields\n")); recutl_fatal (_("please use --force or --decrypt\n")); } } else { /* Decrypt any encrypted confidential field in this record. */ rec_decrypt_record (rset, record, recfix_password); } } rec_mset_iterator_free (&iter); } /* Write the modified database back to the file. */ recutl_write_db_to_file (db, recfix_file); return EXIT_SUCCESS; } #endif /* REC_CRYPT_SUPPORT */ static int recfix_do_auto () { rec_db_t db = NULL; size_t n_rset = 0; /* Read the database from the especified file. */ db = recutl_read_db_from_file (recfix_file); if (!db) { fprintf (stderr, _("recfix: error: cannot read file %s\n"), recfix_file); return EXIT_FAILURE; } /* Add auto fields to any record in the database not having it, in record sets featuring auto fields. */ for (n_rset = 0; n_rset < rec_db_size (db); n_rset++) { rec_mset_iterator_t iter; rec_record_t record; rec_rset_t rset = rec_db_get_rset (db, n_rset); iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void**) &record, NULL)) { if (!rec_rset_add_auto_fields (rset, record)) recutl_out_of_memory (); } rec_mset_iterator_free (&iter); } if (!recfix_check_database (db)) return EXIT_FAILURE; recutl_write_db_to_file (db, recfix_file); return EXIT_SUCCESS; } int main (int argc, char *argv[]) { int res = EXIT_SUCCESS; recutl_init ("recfix"); /* Parse arguments. */ recfix_parse_args (argc, argv); /* Execute the proper operation as specified in the recfix_op variable. */ switch (recfix_op) { case RECFIX_OP_CHECK: res = recfix_do_check (); break; case RECFIX_OP_SORT: res = recfix_do_sort (); break; case RECFIX_OP_AUTO: res = recfix_do_auto (); break; #if defined REC_CRYPT_SUPPORT case RECFIX_OP_ENCRYPT: case RECFIX_OP_DECRYPT: res = recfix_do_crypt (); break; #endif /* REC_CRYPT_SUPPORT */ default: /* This point shall not be reached. */ res = EXIT_FAILURE; recutl_fatal (_("unknown operation in recfix: please report this as a bug.\n")); } return res; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/utils/recset.c�������������������������������������������������������������������������0000644�0000000�0000000�00000022660�14226563465�012720� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recset.c - Set and update the values of fields. */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <getopt.h> #include <string.h> #include <stdlib.h> #include <xalloc.h> #include <gettext.h> #define _(str) gettext (str) #include <rec.h> #include <recutl.h> /* * Global variables. */ char *recutl_sex_str = NULL; rec_sex_t recutl_sex = NULL; char *recutl_quick_str = NULL; char *recutl_fex_str = NULL; rec_fex_t recutl_fex = NULL; char *recutl_type = NULL; int recset_action = REC_SET_ACT_NONE; char *recset_value = NULL; char *recset_new_field_name = NULL; bool recutl_insensitive = false; char *recset_file = NULL; bool recset_force = false; bool recset_verbose = false; bool recset_external = true; bool recset_descriptor_renamed = false; size_t recutl_random = 0; /* * Command line options management */ enum { COMMON_ARGS, RECORD_SELECTION_ARGS, FIELD_EXPR_ARG, ADD_ACTION_ARG, RENAME_ACTION_ARG, DELETE_ACTION_ARG, COMMENT_ACTION_ARG, SET_ACTION_ARG, SET_ADD_ACTION_ARG, FORCE_ARG, VERBOSE_ARG, NO_EXTERNAL_ARG }; static const struct option GNU_longOptions[] = { COMMON_LONG_ARGS, RECORD_SELECTION_LONG_ARGS, {"fields", required_argument, NULL, FIELD_EXPR_ARG}, {"add", required_argument, NULL, ADD_ACTION_ARG}, {"rename", required_argument, NULL, RENAME_ACTION_ARG}, {"delete", no_argument, NULL, DELETE_ACTION_ARG}, {"comment", no_argument, NULL, COMMENT_ACTION_ARG}, {"set", required_argument, NULL, SET_ACTION_ARG}, {"set-add", required_argument, NULL, SET_ADD_ACTION_ARG}, {"force", no_argument, NULL, FORCE_ARG}, {"verbose", no_argument, NULL, VERBOSE_ARG}, {"no-external", no_argument, NULL, NO_EXTERNAL_ARG}, {NULL, 0, NULL, 0} }; /* * Functions. */ void recutl_print_help (void) { /* TRANSLATORS: --help output, recset synopsis. no-wrap */ printf (_("\ Usage: recset [OPTION]... [FILE]...\n")); /* TRANSLATORS: --help output, recset short description. no-wrap */ fputs (_("\ Alter or delete fields in records.\n"), stdout); puts (""); /* TRANSLATORS: --help output, recset options. no-wrap */ fputs (_("\ --no-external don't use external descriptors.\n\ --force alter the records even if violating record\n\ restrictions.\n"), stdout); recutl_print_help_common (); puts (""); recutl_print_help_record_selection (); puts (""); /* TRANSLATORS: --help output, recset field selection options. no-wrap */ fputs (_("\ Field selection options:\n\ -f, --fields=FIELDS comma-separated list of field names with optional\n\ subscripts.\n"), stdout); puts (""); /* TRANSLATORS: --help output, recset actions. no-wrap */ fputs (_("\ Actions:\n\ -s, --set=VALUE change the value of the selected fields.\n\ -a, --add=VALUE add the selected fields with the given value.\n\ -S, --set-add=VALUE change the value of the selected fields. If they don't\n\ exist then add a new field with that value.\n\ -r, --rename=NAME rename the selected fields to a given name. If an entire\n\ record set is selected then the field is renamed in the\n\ record descriptor as well.\n\ -d, --delete delete the selected fields.\n\ -c, --comment comment out the selected fields.\n"), stdout); puts (""); recutl_print_help_footer (); } /* This macro is used in recset_parse_args to avoid code repetition in the actions (set, add, delete, ...) switch cases.. */ #define CHECK_ACTION_PREREQ \ do \ { \ if (!recutl_fex) \ { \ recutl_fatal (_("please specify some field with -f.\n")); \ } \ \ if (recset_action != REC_SET_ACT_NONE) \ { \ recutl_fatal (_("please specify just one action.\n")); \ } \ } \ while (0) static void recset_parse_args (int argc, char **argv) { int ret; char c; while ((ret = getopt_long (argc, argv, RECORD_SELECTION_SHORT_ARGS "dct:s:S:a:f:r:", GNU_longOptions, NULL)) != -1) { c = ret; switch (c) { COMMON_ARGS_CASES RECORD_SELECTION_ARGS_CASES case FORCE_ARG: recset_force = true; break; case VERBOSE_ARG: recset_verbose = true; break; case FIELD_EXPR_ARG: case 'f': recutl_fex_str = xstrdup (optarg); if (!rec_fex_check (recutl_fex_str, REC_FEX_SUBSCRIPTS)) recutl_fatal (_("invalid field expression in -f.\n")); /* Create the field expression. */ recutl_fex = rec_fex_new (recutl_fex_str, REC_FEX_SUBSCRIPTS); if (!recutl_fex) recutl_fatal (_("creating the field expression.\n")); /* Sort it. */ rec_fex_sort (recutl_fex); break; case SET_ACTION_ARG: case 's': CHECK_ACTION_PREREQ; recset_action = REC_SET_ACT_SET; recset_value = xstrdup (optarg); break; case RENAME_ACTION_ARG: case 'r': CHECK_ACTION_PREREQ; if (rec_fex_size (recutl_fex) != 1) recutl_fatal (_("the rename operation requires just one\ field with an optional subscript.\n")); recset_action = REC_SET_ACT_RENAME; recset_value = xstrdup (optarg); /* Validate the new name. */ recset_new_field_name = recset_value; if (!rec_field_name_p (recset_new_field_name)) recutl_fatal (_("invalid field name %s.\n"), recset_value); break; case ADD_ACTION_ARG: case 'a': CHECK_ACTION_PREREQ; recset_action = REC_SET_ACT_ADD; recset_value = xstrdup (optarg); break; case SET_ADD_ACTION_ARG: case 'S': CHECK_ACTION_PREREQ; recset_action = REC_SET_ACT_SETADD; recset_value = xstrdup (optarg); break; case DELETE_ACTION_ARG: case 'd': CHECK_ACTION_PREREQ; recset_action = REC_SET_ACT_DELETE; break; case COMMENT_ACTION_ARG: case 'c': CHECK_ACTION_PREREQ; recset_action = REC_SET_ACT_COMMENT; break; case NO_EXTERNAL_ARG: recset_external = false; break; default: exit (EXIT_FAILURE); break; } } /* Read the name of the data source. */ if (optind < argc) { if ((argc - optind) != 1) { recutl_print_help (); exit (EXIT_FAILURE); } recset_file = argv[optind++]; } } static void recset_process_actions (rec_db_t db) { int flags = 0; if (recutl_insensitive) flags = flags | REC_F_ICASE; if (!rec_db_set (db, recutl_type, recutl_index (), recutl_sex, recutl_quick_str, recutl_random, recutl_fex, recset_action, recset_value, flags)) recutl_out_of_memory (); /* Check the integrity of the resulting database. */ if (!recset_force && db) recutl_check_integrity (db, recset_verbose, recset_external); } int main (int argc, char *argv[]) { rec_db_t db; recutl_init ("recset"); /* Parse arguments. */ recset_parse_args (argc, argv); db = recutl_read_db_from_file (recset_file); if (!db) recutl_fatal (_("cannot read file %s\n"), recset_file); recset_process_actions (db); if (!recutl_file_is_writable (recset_file)) { recutl_error (_("file %s is not writable.\n"), recset_file); return EXIT_FAILURE; } recutl_write_db_to_file (db, recset_file); return EXIT_SUCCESS; } ��������������������������������������������������������������������������������recutils-1.9/utils/recsel.c�������������������������������������������������������������������������0000644�0000000�0000000�00000031161�14226563465�012704� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recsel.c - Selecting records. */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <getopt.h> #include <string.h> #include <stdlib.h> #include <xalloc.h> #include <gettext.h> #define _(str) gettext (str) #include <rec.h> #include <recutl.h> /* * Global variables */ char *recutl_sex_str = NULL; rec_sex_t recutl_sex = NULL; char *recutl_quick_str = NULL; char *recsel_fex_str = NULL; rec_fex_t recsel_fex = NULL; char *recutl_type = NULL; bool recsel_collapse = false; bool recsel_count = false; bool recutl_insensitive = false; bool recsel_descriptors = false; rec_fex_t recutl_sort_by_fields = NULL; rec_fex_t recsel_group_by_fields = NULL; rec_writer_mode_t recsel_write_mode = REC_WRITER_NORMAL; char *recsel_password = NULL; bool recsel_uniq = false; size_t recutl_random = 0; char *recsel_join = NULL; /* * Command line options management. */ enum { COMMON_ARGS, RECORD_SELECTION_ARGS, PRINT_ARG, PRINT_VALUES_ARG, PRINT_IN_A_ROW_ARG, COLLAPSE_ARG, COUNT_ARG, DESCRIPTOR_ARG, PRINT_SEXPS_ARG, SORT_ARG, #if defined REC_CRYPT_SUPPORT PASSWORD_ARG, #endif UNIQ_ARG, GROUP_BY_ARG, JOIN_ARG }; static const struct option GNU_longOptions[] = { COMMON_LONG_ARGS, RECORD_SELECTION_LONG_ARGS, {"print", required_argument, NULL, PRINT_ARG}, {"print-values", required_argument, NULL, PRINT_VALUES_ARG}, {"print-row", required_argument, NULL, PRINT_IN_A_ROW_ARG}, {"collapse", no_argument, NULL, COLLAPSE_ARG}, {"count", no_argument, NULL, COUNT_ARG}, {"include-descriptors", no_argument, NULL, DESCRIPTOR_ARG}, {"print-sexps", no_argument, NULL, PRINT_SEXPS_ARG}, {"sort", required_argument, NULL, SORT_ARG}, #if defined REC_CRYPT_SUPPORT {"password", required_argument, NULL, PASSWORD_ARG}, #endif {"uniq", no_argument, NULL, UNIQ_ARG}, {"group-by", required_argument, NULL, GROUP_BY_ARG}, {"join", required_argument, NULL, JOIN_ARG}, {NULL, 0, NULL, 0} }; /* * Functions. */ void recutl_print_help (void) { /* TRANSLATORS: --help output, recsel synopsis. no-wrap */ printf (_("\ Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n")); /* TRANSLATORS: --help output, recsel arguments. no-wrap */ fputs(_("\ Select and print rec data.\n"), stdout); puts (""); /* TRANSLATORS: --help output, recsel arguments. no-wrap */ fputs (_("\ -d, --include-descriptors print record descriptors along with the matched\n\ records.\n\ -C, --collapse do not section the result in records with newlines.\n\ -S, --sort=FIELD,... sort the output by the specified fields.\n\ -G, --group-by=FIELD,... group records by the specified fields.\n\ -U, --uniq remove duplicated fields in the output records.\n"), stdout); #if defined REC_CRYPT_SUPPORT /* TRANSLATORS: --help output, encryption related options. no-wrap */ fputs (_("\ -s, --password=STR decrypt confidential fields with the given password.\n"), stdout); #endif recutl_print_help_common (); puts (""); recutl_print_help_record_selection (); fputs (_("\ -j, --join=FIELD perform an inner join using the specified field.\n"), stdout); puts (""); /* TRANSLATORS: --help output, recsel output options. no-wrap */ fputs (_("\ Output options:\n\ -p, --print=FIELDS comma-separated list of fields to print for each\n\ matching record.\n\ -P, --print-values=FIELDS as -p, but print only the values of the selected\n\ fields.\n\ -R, --print-row=FIELDS as -P, but separate the values with spaces instead\n\ of newlines.\n\ -c, --count print a count of the matching records instead of\n\ the records themselves.\n"), stdout); puts (""); /* TRANSLATORS: --help output, recsel special options. no-wrap */ fputs (_("\ Special options:\n\ --print-sexps print the data in sexps instead of rec format.\n"), stdout); puts (""); recutl_print_help_footer (); } void recsel_parse_args (int argc, char **argv) { char c; int ret; while ((ret = getopt_long (argc, argv, RECORD_SELECTION_SHORT_ARGS ENCRYPTION_SHORT_ARGS "S:Cdcp:P:R:UG:j:", GNU_longOptions, NULL)) != -1) { c = ret; switch (c) { COMMON_ARGS_CASES RECORD_SELECTION_ARGS_CASES case DESCRIPTOR_ARG: case 'd': recsel_descriptors = true; break; case PRINT_SEXPS_ARG: recsel_write_mode = REC_WRITER_SEXP; break; case UNIQ_ARG: case 'U': recsel_uniq = true; break; #if defined REC_CRYPT_SUPPORT case PASSWORD_ARG: case 's': if (recsel_password != NULL) recutl_fatal (_("more than one password was specified\n")); recsel_password = xstrdup (optarg); break; #endif case SORT_ARG: case 'S': if (recutl_sort_by_fields) recutl_fatal (_("only one field list can be specified\ as a sorting criteria.\n")); /* Parse the field name. */ if (!rec_fex_check (optarg, REC_FEX_CSV)) recutl_fatal (_("invalid field names in -S.\n")); recutl_sort_by_fields = rec_fex_new (optarg, REC_FEX_CSV); if (!recutl_sort_by_fields) recutl_fatal (_("internal error creating fex.\n")); break; case JOIN_ARG: case 'j': if (recsel_join) recutl_fatal (_("only one field can be specified as join criteria.\n")); if (!rec_field_name_p (optarg)) recutl_fatal (_("please specify a correct field name to -j|--join.\n")); recsel_join = xstrdup (optarg); break; case GROUP_BY_ARG: case 'G': if (recsel_group_by_fields) recutl_fatal (_("only one field list can be specified as\ a grouping criteria.\n")); /* Parse the field name. */ if (!rec_fex_check (optarg, REC_FEX_CSV)) recutl_fatal (_("invalid field names in -G.\n")); recsel_group_by_fields = rec_fex_new (optarg, REC_FEX_CSV); if (!recsel_group_by_fields) recutl_fatal (_("internal error creating fex.\n")); break; case PRINT_ARG: case PRINT_VALUES_ARG: case PRINT_IN_A_ROW_ARG: case 'p': case 'P': case 'R': if (recsel_count) recutl_fatal (_("cannot specify -[pPR] and also -c.\n")); if ((c == 'P') || (c == PRINT_VALUES_ARG)) recsel_write_mode = REC_WRITER_VALUES; if ((c == 'R') || (c == PRINT_IN_A_ROW_ARG)) recsel_write_mode = REC_WRITER_VALUES_ROW; recsel_fex_str = xstrdup (optarg); if (!rec_fex_check (recsel_fex_str, REC_FEX_SUBSCRIPTS)) recutl_fatal (_("invalid list of fields in -%c\n"), c); /* Create the field expresion. */ recsel_fex = rec_fex_new (recsel_fex_str, REC_FEX_SUBSCRIPTS); if (!recsel_fex) recutl_fatal (_("internal error creating the field expression.\n")); /* Check that all the functions called in the fex exist. Otherwise raise an error. */ { size_t i = 0; for (i = 0; i < rec_fex_size (recsel_fex); i++) { rec_fex_elem_t elem = rec_fex_get (recsel_fex, i); const char *fname = rec_fex_elem_function_name (elem); if (fname && !rec_aggregate_std_p (fname)) recutl_fatal (_("invalid aggregate function '%s'\n"), fname); } } break; case COLLAPSE_ARG: case 'C': recsel_collapse = true; break; case COUNT_ARG: case 'c': if (recsel_fex_str) { recutl_fatal (_("cannot specify -c and also -p.\n")); exit (EXIT_FAILURE); } recsel_count = true; break; default: exit (EXIT_FAILURE); } } /* Global checks on the parameters. */ if (!recutl_type && recsel_join) recutl_fatal (_("joins can only be used when a named record\ set is selected.\n")); } bool recsel_process_data (rec_db_t db) { int rset_size = 0; rec_rset_t rset = NULL; rec_writer_t writer = NULL; #if defined REC_CRYPT_SUPPORT /* If recsel was called interactively and with an empty -s, was not used then prompt the user for it. Otherwise use the password specified in the command line if any. */ if (!recsel_password && (recutl_type || (rec_db_size (db) == 1)) && recutl_interactive ()) { rec_rset_t rset; rec_fex_t confidential_fields; if (recutl_type) rset = rec_db_get_rset_by_type (db, recutl_type); else rset = rec_db_get_rset (db, 0); if (rset) { confidential_fields = rec_rset_confidential (rset); if (rec_fex_size (confidential_fields) > 0) recsel_password = recutl_getpass (false); rec_fex_destroy (confidential_fields); } } /* Note that the password must be at least one character long. */ if (recsel_password && (strlen (recsel_password) == 0)) { free (recsel_password); recsel_password = NULL; } #endif /* REC_CRYPT_SUPPORT */ /* If the database contains more than one type of records and the user did'nt specify the recutl_type then ask the user to clarify the request. */ if (!recutl_type && (rec_db_size (db) > 1)) recutl_fatal (_("several record types found. Please use -t to specify one.\n")); /* Query the database using the criteria specified by the user in the command line. */ { int flags = 0; if (recutl_insensitive) flags = flags | REC_F_ICASE; if (recsel_descriptors) flags = flags | REC_F_DESCRIPTOR; if (recsel_uniq) flags = flags | REC_F_UNIQ; rset = rec_db_query (db, recutl_type, recsel_join, recutl_index(), recutl_sex, recutl_quick_str, recutl_random, recsel_fex, recsel_password, recsel_group_by_fields, recutl_sort_by_fields, flags); if (!rset) recutl_out_of_memory (); } if (recsel_count) /* Write the number of matching records. */ fprintf (stdout, "%d\n", rec_rset_num_records (rset)); else { /* Write the resulting record set to the standard output. */ writer = rec_writer_new (stdout); rec_writer_set_collapse (writer, recsel_collapse); rec_writer_set_skip_comments (writer, true); rec_writer_set_mode (writer, recsel_write_mode); rec_write_rset (writer, rset); rec_writer_destroy (writer); } rec_rset_destroy (rset); return true; } int main (int argc, char *argv[]) { int res; rec_db_t db; res = 0; recutl_init ("recsel"); /* Parse arguments. */ recsel_parse_args (argc, argv); /* Get the input data. */ db = recutl_build_db (argc, argv); if (!db) { res = 1; return res; } /* Process the data. */ if (!recsel_process_data (db)) res = 1; rec_db_destroy (db); return res; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/utils/recinf.c�������������������������������������������������������������������������0000644�0000000�0000000�00000014105�14226563465�012674� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recinf.c - Getting information about recfiles. */ /* Copyright (C) 2009-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <getopt.h> #include <string.h> #include <stdlib.h> #include <xalloc.h> #include <gettext.h> #define _(str) gettext (str) #include <rec.h> #include <recutl.h> /* * Global variables */ rec_writer_mode_t recinf_write_mode = REC_WRITER_NORMAL; /* * Command line options management */ enum { COMMON_ARGS, DESCRIPTOR_ARG, NAMES_ARG, TYPE_ARG, PRINT_SEXPS_ARG }; static const struct option GNU_longOptions[] = { COMMON_LONG_ARGS, {"descriptor", no_argument, NULL, DESCRIPTOR_ARG}, {"names-only", no_argument, NULL, NAMES_ARG}, {"type", required_argument, NULL, TYPE_ARG}, {"print-sexps", no_argument, NULL, PRINT_SEXPS_ARG}, {NULL, 0, NULL, 0} }; /* * Global variables. */ bool recinf_descriptor = false; bool recinf_names_only = false; char *recinf_type = NULL; /* * Functions. */ void recutl_print_help (void) { /* TRANSLATORS: --help output, recinf synopsis. no-wrap */ printf (_("\ Usage: recinf [OPTION]... [FILE]...\n")); /* TRANSLATORS: --help output, recinf short description. no-wrap */ fputs (_("\ Print information about the types of records stored in the input.\n"), stdout); puts (""); /* TRANSLATORS: --help output, recinf arguments. no-wrap */ fputs (_("\ -t, --type=RECORD_TYPE print information on the records having the\n\ specified type.\n\ -d, --descriptor include the full record descriptors.\n\ -n, --names-only output just the names of the record files\n\ found in the input.\n"), stdout); recutl_print_help_common (); puts (""); /* TRANSLATORS: --help output, recinf special options. no-wrap */ fputs (_("\ Special options:\n\ -S, --print-sexps print the data in sexps instead of rec format.\n"), stdout); puts (""); recutl_print_help_footer (); } bool print_info_file (FILE *in, char *file_name) { bool ret; rec_db_t db; rec_rset_t rset; rec_record_t descriptor; rec_parser_t parser; int position; ret = true; parser = rec_parser_new (in, file_name); ret = rec_parse_db (parser, &db); if (ret) { for (position = 0; position < rec_db_size (db); position++) { rset = rec_db_get_rset (db, position); descriptor = rec_rset_descriptor (rset); if (recinf_type && descriptor && (strcmp (rec_rset_type (rset), recinf_type) != 0)) continue; if (recinf_descriptor) { rec_writer_t writer; if (descriptor) { writer = rec_writer_new (stdout); rec_writer_set_mode (writer, recinf_write_mode); rec_write_record (writer, descriptor); rec_write_string (writer, "\n"); rec_writer_destroy (writer); } else { if (recinf_write_mode == REC_WRITER_NORMAL) printf ("unknown\n"); } if (position < (rec_db_size (db) - 1)) printf ("\n"); } else { if (descriptor) { if (!recinf_names_only) fprintf (stdout, "%zd ", rec_rset_num_records (rset)); fprintf (stdout, "%s\n", rec_rset_type (rset)); } else { if (!recinf_names_only) printf ("%zd\n", rec_rset_num_records (rset)); } } } } if (rec_parser_error (parser)) rec_parser_perror (parser, file_name); rec_parser_destroy (parser); return ret; } int main (int argc, char *argv[]) { char c; int ret; char *file_name; FILE *in; recutl_init ("recinf"); while ((ret = getopt_long (argc, argv, "Sdnt:", GNU_longOptions, NULL)) != -1) { c = ret; switch (c) { COMMON_ARGS_CASES case PRINT_SEXPS_ARG: case 'S': recinf_write_mode = REC_WRITER_SEXP; break; case DESCRIPTOR_ARG: case 'd': recinf_descriptor = true; break; case NAMES_ARG: case 'n': recinf_names_only = true; break; case TYPE_ARG: case 't': recinf_type = xstrdup (optarg); break; default: exit (EXIT_FAILURE); } } /* Process the input files, if any. Otherwise use the standard input to read the rec data. */ if (optind < argc) { while (optind < argc) { file_name = argv[optind++]; if (!(in = fopen (file_name, "r"))) { printf(_("error: cannot read file %s\n"), file_name); exit (EXIT_FAILURE); } else { if (!print_info_file (in, file_name)) /* Parse error */ exit (EXIT_FAILURE); fclose (in); } } } else { if (!print_info_file (stdin, "stdin")) /* Parse error */ exit (EXIT_FAILURE); } return EXIT_SUCCESS; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/utils/recdel.c�������������������������������������������������������������������������0000644�0000000�0000000�00000014753�14226563465�012675� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recdel.c - Deleting records. */ /* Copyright (C) 2009-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <getopt.h> #include <string.h> #include <stdlib.h> #include <gettext.h> #define _(str) gettext (str) #include <xalloc.h> #include <rec.h> #include <recutl.h> /* * Global variables */ char *recutl_type = NULL; bool recdel_comment = false; rec_sex_t recutl_sex = NULL; char *recutl_quick_str = NULL; char *recutl_sex_str = NULL; bool recutl_insensitive = false; bool recdel_force = false; bool recdel_verbose = false; bool recdel_external = true; size_t recutl_random = 0; char *recdel_file = NULL; /* File from where to delete the records. */ /* * Command line options management */ enum { COMMON_ARGS, RECORD_SELECTION_ARGS, COMMENT_ARG, FORCE_ARG, VERBOSE_ARG, NO_EXTERNAL_ARG }; static const struct option GNU_longOptions[] = { COMMON_LONG_ARGS, RECORD_SELECTION_LONG_ARGS, {"comment", no_argument, NULL, COMMENT_ARG}, {"force", no_argument, NULL, FORCE_ARG}, {"verbose", no_argument, NULL, VERBOSE_ARG}, {"no-external", no_argument, NULL, NO_EXTERNAL_ARG}, {NULL, 0, NULL, 0} }; void recutl_print_help (void) { /* TRANSLATORS: --help output, recdel synopsis. no-wrap */ printf (_("\ Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [FILE]\n")); /* TRANSLATORS: --help output, recdel short description. no-wrap */ fputs (_("\ Remove (or comment out) records from a rec file.\n"), stdout); puts (""); /* TRANSLATORS: --help output, recdel arguments. no-wrap */ fputs (_("\ -c, --comment comment out the matching records instead of\n\ deleting them.\n\ --force delete even in potentially dangerous situations,\n\ and if the deletion is violating record restrictions.\n\ --no-external don't use external descriptors.\n\ --verbose give a detailed report if the integrity check\n\ fails.\n"), stdout); recutl_print_help_common (); puts (""); recutl_print_help_record_selection (); puts (""); /* TRANSLATORS: --help output, notes on recdel. no-wrap */ fputs (_("\ If no FILE is specified then the command acts like a filter, getting\n\ the data from standard input and writing the result to standard output.\n"), stdout); puts (""); recutl_print_help_footer (); } void recdel_delete_records (rec_db_t db) { /* Make sure that the user selected an existing record set from which to delete records. */ if (!rec_db_type_p (db, recutl_type)) recutl_fatal (_("no records of type %s found.\n"), recutl_type ? recutl_type : "<default>"); /* Invoke the library to perform the requested deletions. */ { int flags = 0; if (recutl_insensitive) flags = flags | REC_F_ICASE; if (recdel_comment) flags = flags | REC_F_COMMENT_OUT; if (!rec_db_delete (db, recutl_type, recutl_index (), recutl_sex, recutl_quick_str, recutl_random, flags)) recutl_out_of_memory (); } /* Check the integrity of the resulting database. */ if (!recdel_force && db) recutl_check_integrity (db, recdel_verbose, recdel_external); } void recdel_parse_args (int argc, char **argv) { int ret; char c; while ((ret = getopt_long (argc, argv, RECORD_SELECTION_SHORT_ARGS "c", GNU_longOptions, NULL)) != -1) { c = ret; switch (c) { COMMON_ARGS_CASES RECORD_SELECTION_ARGS_CASES case FORCE_ARG: recdel_force = true; break; case VERBOSE_ARG: recdel_verbose = true; break; case NO_EXTERNAL_ARG: recdel_external = false; break; case COMMENT_ARG: case 'c': recdel_comment = true; break; default: exit (EXIT_FAILURE); } } /* Require the usage of --force for potentially dangerous operations, such as the request of deleting a whole record set. */ if ((recutl_num_indexes() == 0) && !recutl_sex_str && !recutl_quick_str && !recdel_force && (recutl_random == 0)) { recutl_error (_("ignoring a request to delete all records of type %s.\n"), recutl_type ? recutl_type : "unknown"); recutl_fatal (_("use --force if you really want to proceed,\ or use either -n or -e.\n")); } if (recutl_sex_str) { recutl_sex = rec_sex_new (recutl_insensitive); if (!rec_sex_compile (recutl_sex, recutl_sex_str)) recutl_fatal (_("invalid selection expression.\n")); } /* Read the name of the file where to delete the records. */ if (optind < argc) { if ((argc - optind) != 1) { recutl_print_help (); exit (EXIT_FAILURE); } recdel_file = argv[optind++]; } } int main (int argc, char *argv[]) { rec_db_t db; recutl_init ("recdel"); recdel_parse_args (argc, argv); db = recutl_read_db_from_file (recdel_file); if (!db) recutl_fatal (_("cannot read file %s\n"), recdel_file); if (((recutl_num_indexes() != 0) || recutl_sex || recutl_quick_str) || recdel_force || (recutl_random > 0)) recdel_delete_records (db); if (!recutl_file_is_writable (recdel_file)) { recutl_error (_("file %s is not writable.\n"), recdel_file); return EXIT_FAILURE; } recutl_write_db_to_file (db, recdel_file); return EXIT_SUCCESS; } ���������������������recutils-1.9/utils/recins.c�������������������������������������������������������������������������0000644�0000000�0000000�00000024255�14226563465�012720� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recins.c - Inserting records. */ /* Copyright (C) 2009-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <getopt.h> #include <string.h> #include <stdlib.h> #include <xalloc.h> #include <gettext.h> #include <errno.h> #include <time.h> #include <locale.h> #define _(str) gettext (str) #include <base64.h> #include <rec.h> #include <recutl.h> /* * Global variables */ char *recutl_type = NULL; rec_sex_t recutl_sex = NULL; char *recutl_sex_str = NULL; char *recutl_quick_str = NULL; bool recutl_insensitive = false; rec_record_t recins_record = NULL; char *recins_file = NULL; bool recins_force = false; bool recins_verbose = false; bool recins_external = true; bool recins_auto = true; char *recins_password = NULL; size_t recutl_random = 0; /* * Command line options management */ enum { COMMON_ARGS, RECORD_SELECTION_ARGS, NAME_ARG, VALUE_ARG, FORCE_ARG, VERBOSE_ARG, NO_EXTERNAL_ARG, RECORD_ARG, #if defined REC_CRYPT_SUPPORT PASSWORD_ARG, #endif NO_AUTO_ARG }; static const struct option GNU_longOptions[] = { COMMON_LONG_ARGS, RECORD_SELECTION_LONG_ARGS, {"type", required_argument, NULL, TYPE_ARG}, {"name", required_argument, NULL, NAME_ARG}, {"value", required_argument, NULL, VALUE_ARG}, {"force", no_argument, NULL, FORCE_ARG}, {"verbose", no_argument, NULL, VERBOSE_ARG}, {"no-external", no_argument, NULL, NO_EXTERNAL_ARG}, {"record", required_argument, NULL, RECORD_ARG}, {"no-auto", no_argument, NULL, NO_AUTO_ARG}, #if defined REC_CRYPT_SUPPORT {"password", required_argument, NULL, PASSWORD_ARG}, #endif {NULL, 0, NULL, 0} }; /* * Functions. */ void recutl_print_help (void) { /* TRANSLATORS: --help output, recins synopsis. no-wrap */ printf (_("\ Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n")); /* TRANSLATORS: --help output, recins short description. no-wrap */ fputs (_("\ Insert new records in a rec database.\n"), stdout); puts (""); /* TRANSLATORS: --help output, recins arguments. no-wrap */ fputs (_("\ -f, --field=STR field name; should be followed by a -v.\n\ -v, --value=STR field value; should be preceded by an -f.\n\ -r, --record=STR record that will be inserted in the file.\n\ --force insert the record even if it is violating\n\ record restrictions.\n\ --no-external don't use external descriptors.\n\ --no-auto don't insert auto generated fields.\n\ --verbose give a detailed report if the integrity check\n\ fails.\n"), stdout); #if defined REC_CRYPT_SUPPORT /* TRANSLATORS: --help output, encryption related options. no-wrap */ fputs (_("\ -s, --password=STR encrypt confidential fields with the given password.\n"), stdout); #endif recutl_print_help_common (); puts (""); recutl_print_help_record_selection (); puts (""); /* TRANSLATORS: --help output, notes on recins. no-wrap */ fputs (_("\ If no FILE is specified then the command acts like a filter, getting\n\ the data from standard input and writing the result to standard output.\n"), stdout); puts (""); recutl_print_help_footer (); } void recins_parse_args (int argc, char **argv) { int ret; char c; rec_field_t field = NULL; char *field_name = NULL; rec_record_t provided_record; while ((ret = getopt_long (argc, argv, RECORD_SELECTION_SHORT_ARGS ENCRYPTION_SHORT_ARGS "f:v:r:", GNU_longOptions, NULL)) != -1) { c = ret; switch (c) { COMMON_ARGS_CASES RECORD_SELECTION_ARGS_CASES case FORCE_ARG: recins_force = true; break; case VERBOSE_ARG: recins_verbose = true; break; case NAME_ARG: case 'f': if (field != NULL) { recutl_fatal (_("a -f should be followed by a -v\n")); exit (EXIT_FAILURE); } if (recins_record == NULL) { recins_record = rec_record_new (); rec_record_set_source (recins_record, "cmdli"); rec_record_set_location (recins_record, 0); } if (!rec_field_name_p (optarg)) recutl_fatal (_("invalid field name %s.\n"), optarg); field = rec_field_new (optarg, "foo"); break; case VALUE_ARG: case 'v': if (field == NULL) recutl_fatal (_("a -v should be preceded by a -f\n")); rec_field_set_value (field, optarg); rec_mset_append (rec_record_mset (recins_record), MSET_FIELD, (void *) field, MSET_ANY); field = NULL; break; case NO_EXTERNAL_ARG: recins_external = false; break; case NO_AUTO_ARG: recins_auto = false; break; #if defined REC_CRYPT_SUPPORT case PASSWORD_ARG: case 's': if (recins_password != NULL) recutl_fatal (_("more than one password was specified\n")); recins_password = xstrdup (optarg); break; #endif case RECORD_ARG: case 'r': /* Parse the provided record and put it in recins_record. */ provided_record = rec_parse_record_str (optarg); if (!provided_record) recutl_fatal (_("error while parsing the record provided by -r\n")); if (recins_record) { /* Append the fields in provided_record into recins_record. */ rec_mset_iterator_t iter = rec_mset_iterator (rec_record_mset (provided_record)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) { rec_mset_append (rec_record_mset (recins_record), MSET_FIELD, (void *) rec_field_dup (field), MSET_ANY); field = NULL; } rec_mset_iterator_free (&iter); rec_record_destroy (provided_record); provided_record = NULL; } else recins_record = provided_record; break; default: exit (EXIT_FAILURE); } } if (field != NULL) recutl_fatal (_("please provide a value for the field %s\n"), field_name); /* Read the name of the file where to make the insertions. */ if (optind < argc) { if ((argc - optind) != 1) { recutl_print_help (); exit (EXIT_FAILURE); } recins_file = argv[optind++]; } } void recins_add_new_record (rec_db_t db) { int flags = 0; #if defined REC_CRYPT_SUPPORT /* Get the password interactively from the user if some field is declared as confidential in the requested record set. */ { rec_rset_t rset; rec_fex_t confidential_fields; if (recutl_type) { rset = rec_db_get_rset_by_type (db, recutl_type); if (rset) { confidential_fields = rec_rset_confidential (rset); if (!confidential_fields) recutl_out_of_memory (); if (rec_fex_size (confidential_fields) > 0) { if (!recins_password && recutl_interactive ()) { recins_password = recutl_getpass (true); if (!recins_password) recutl_fatal ("not in an interactive terminal.\n"); } /* Passwords can't be empty. */ if (recins_password && (strlen (recins_password) == 0)) { free (recins_password); recins_password = NULL; } } } } } #endif /* REC_CRYPT_SUPPORT */ /* Set flags flags and call the library to perform the requested insertion/replacement operation. */ if (recutl_insensitive) flags = flags | REC_F_ICASE; if (!recins_auto) flags = flags | REC_F_NOAUTO; if (!rec_db_insert (db, recutl_type, recutl_index (), recutl_sex, recutl_quick_str, recutl_random, recins_password, recins_record, flags)) recutl_out_of_memory (); /* Check for the integrity of the resulting database. */ if (!recins_force && db) recutl_check_integrity (db, recins_verbose, recins_external); } int main (int argc, char *argv[]) { rec_db_t db; recutl_init ("recins"); recins_parse_args (argc, argv); db = recutl_read_db_from_file (recins_file); if (!db) /* Create an empty database. */ db = rec_db_new (); recins_add_new_record (db); if (!recutl_file_is_writable (recins_file)) { recutl_error (_("file %s is not writable.\n"), recins_file); return EXIT_FAILURE; } recutl_write_db_to_file (db, recins_file); return EXIT_SUCCESS; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/utils/mdb2rec.c������������������������������������������������������������������������0000644�0000000�0000000�00000031443�14226563465�012750� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* mdb2rec.c - mdb to rec converter. */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <getopt.h> #include <string.h> #include <stdlib.h> #include <ctype.h> #include <xalloc.h> #include <gettext.h> #define _(str) gettext (str) #include <glib.h> #include <mdbtools.h> #include <rec.h> #include <recutl.h> /* Forward declarations. */ static void parse_args (int argc, char **argv); static rec_db_t process_mdb (void); static rec_rset_t process_table (MdbCatalogEntry *entry); static char *get_field_name (MdbHandle *mdb, const char *table_name, const char *col_name); static void get_relationships (MdbHandle *mdb); /* * Data types */ struct relationship_s { char *table; char *column; char *referenced_table; char *referenced_column; }; /* * Global variables */ char *mdb2rec_mdb_file = NULL; char *mdb2rec_mdb_table = NULL; bool mdb2rec_include_system = false; bool mdb2rec_keep_empty_fields = false; bool mdb2rec_list_tables = false; struct relationship_s *relationships; size_t num_relationships = 0; /* * Command line options management */ enum { COMMON_ARGS, SYSTEM_TABLES_ARG, KEEP_EMPTY_FIELDS_ARG, LIST_TABLES_ARG }; static const struct option GNU_longOptions[] = { COMMON_LONG_ARGS, {"system-tables", no_argument, NULL, SYSTEM_TABLES_ARG}, {"keep-empty-fields", no_argument, NULL, KEEP_EMPTY_FIELDS_ARG}, {"list-tables", no_argument, NULL, LIST_TABLES_ARG}, {NULL, 0, NULL, 0} }; /* * Functions. */ void recutl_print_help (void) { /* TRANSLATORS: --help output, mdb2rec synopsis. no-wrap */ printf (_("\ Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n")); /* TRANSLATORS: --help output, mdb2rec short description. no-wrap */ fputs (_("\ Convert an mdb file into a rec file.\n"), stdout); puts (""); /* TRANSLATORS: --help output, mdb2rec options. no-wrap */ fputs (_("\ -s, --system-tables include system tables.\n\ -e, --keep-empty-fields don't prune empty fields in the rec\n\ output.\n\ -l, --list-tables dump a list of the table names contained\n\ in the mdb file.\n"), stdout); recutl_print_help_common (); puts (""); recutl_print_help_footer (); } static void parse_args (int argc, char **argv) { int ret; char c; while ((ret = getopt_long (argc, argv, "sel", GNU_longOptions, NULL)) != -1) { c = ret; switch (c) { COMMON_ARGS_CASES case SYSTEM_TABLES_ARG: case 's': mdb2rec_include_system = true; break; case KEEP_EMPTY_FIELDS_ARG: case 'e': mdb2rec_keep_empty_fields = true; break; case LIST_TABLES_ARG: case 'l': mdb2rec_list_tables = true; break; default: exit (EXIT_FAILURE); } } /* Read the name of the mdb file. */ if ((argc - optind) > 2) { recutl_print_help (); exit (EXIT_FAILURE); } else { mdb2rec_mdb_file = argv[optind++]; if ((argc - optind) > 0) mdb2rec_mdb_table = argv[optind++]; } } static void get_relationships (MdbHandle *mdb) { char *bound[4]; MdbTableDef *table; size_t i; table = mdb_read_table_by_name (mdb, "MsysRelationships", MDB_TABLE); if ((!table) || (table->num_rows == 0)) return; mdb_read_columns (table); for (i = 0; i < 4; i++) bound[i] = xmalloc (MDB_BIND_SIZE); mdb_bind_column_by_name (table, "szColumn", bound[0], NULL); mdb_bind_column_by_name (table, "szObject", bound[1], NULL); mdb_bind_column_by_name (table, "szReferencedColumn", bound[2], NULL); mdb_bind_column_by_name (table, "szReferencedObject", bound[3], NULL); mdb_rewind_table (table); num_relationships = table->num_rows; relationships = xmalloc (sizeof (struct relationship_s) * num_relationships); i = 0; while (mdb_fetch_row (table)) { relationships[i].column = xstrdup (bound[0]); relationships[i].table = xstrdup (bound[1]); relationships[i].referenced_column = xstrdup (bound[2]); relationships[i].referenced_table = xstrdup (bound[3]); i++; } } static char * get_field_name (MdbHandle *mdb, const char *table_name, const char *col_name) { char *field_name; char *referenced_table; char *referenced_column; size_t i; /* If this field is a relationship to other table, build a compound field name. */ referenced_table = NULL; referenced_column = NULL; for (i = 0; i < num_relationships; i++) { if ((strcmp (relationships[i].table, table_name) == 0) && (strcmp (relationships[i].column, col_name) == 0)) { referenced_table = rec_field_name_normalise (relationships[i].referenced_table); if (!referenced_table) recutl_fatal (_("failed to normalise record type name %s\n"), relationships[i].referenced_table); referenced_column = rec_field_name_normalise (relationships[i].referenced_column); if (!referenced_column) recutl_fatal (_("failed to normalise field name %s\n"), relationships[i].referenced_column); break; } } field_name = rec_field_name_normalise (col_name); if (!field_name) recutl_fatal (_("failed to normalise field name %s\n"), table_name); if (referenced_table && referenced_column) { /* TODO: handle foreign keys. */ } return field_name; } static rec_rset_t process_table (MdbCatalogEntry *entry) { rec_rset_t rset; MdbTableDef *table; MdbHandle *mdb; size_t i; MdbColumn *col; char *table_name; char *column_name; char *field_name; char *field_value; char **bound_values; char *normalised; int *bound_lens; #define TYPE_VALUE_SIZE 256 char type_value[TYPE_VALUE_SIZE]; rec_record_t record; rec_field_t field; mdb = entry->mdb; table_name = entry->object_name; table = mdb_read_table (entry); /* Create the record set. */ rset = rec_rset_new (); if (!rset) recutl_out_of_memory (); /* Create the record descriptor and add the %rec: entry. */ field_name = rec_field_name_normalise (table_name); if (!field_name) recutl_fatal (_("failed to normalise record type name %s\n"), table_name); record = rec_record_new (); field = rec_field_new ("%rec", field_name); rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY); free (field_name); /* Get the columns of the table. */ mdb_read_columns (table); /* Loop on the columns. We will define the key and the types. */ for (i = 0; i < table->num_cols; i++) { col = g_ptr_array_index (table->columns, i); column_name = col->name; type_value[0] = 0; normalised = rec_field_name_normalise (column_name); if (!normalised) recutl_fatal (_("failed to normalise the field name %s\n"), column_name); /* Emit a field type specification. */ switch (col->col_type) { case MDB_BOOL: snprintf (type_value, TYPE_VALUE_SIZE, "%s bool", normalised); break; case MDB_BYTE: snprintf (type_value, TYPE_VALUE_SIZE, "%s range 256", normalised); break; case MDB_INT: case MDB_LONGINT: case MDB_NUMERIC: snprintf (type_value, TYPE_VALUE_SIZE, "%s int", normalised); break; case MDB_MONEY: case MDB_FLOAT: case MDB_DOUBLE: snprintf (type_value, TYPE_VALUE_SIZE, "%s real", normalised); break; case MDB_DATETIME: snprintf (type_value, TYPE_VALUE_SIZE, "%s date", normalised); break; case MDB_TEXT: if (col->col_size > 0) snprintf (type_value, TYPE_VALUE_SIZE, "%s size %d", normalised, col->col_size); break; case MDB_REPID: case MDB_MEMO: case MDB_OLE: default: break; } if (type_value[0] != 0) { /* Insert a type field for this column. */ field = rec_field_new ("%type", type_value); rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY); } } rec_rset_set_descriptor (rset, record); /* Add the records for this table. */ mdb_rewind_table (table); bound_values = xmalloc (table->num_cols * sizeof(char *)); bound_lens = xmalloc(table->num_cols * sizeof(int)); for (i = 0; i < table->num_cols; i++) { bound_values[i] = xmalloc (MDB_BIND_SIZE); mdb_bind_column (table, i+1, bound_values[i], &bound_lens[i]); } while (mdb_fetch_row (table)) { record = rec_record_new (); if (!record) recutl_out_of_memory (); for (i = 0; i < table->num_cols; i++) { col = g_ptr_array_index (table->columns, i); if (col->col_type == MDB_OLE) continue; /* Compute the value of the field. */ field_value = xmalloc (bound_lens[i] + 1); memcpy (field_value, bound_values[i], bound_lens[i]); field_value[bound_lens[i]] = '\0'; if (mdb2rec_keep_empty_fields || (strlen (field_value) > 0)) { /* Create the field and append it into the record. */ field = rec_field_new (get_field_name (mdb, table_name, column_name), field_value); if (!field) { recutl_fatal (_("invalid field name %s.\n"), column_name); } rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY); } free (field_value); } rec_record_set_container (record, rset); rec_mset_append (rec_rset_mset (rset), MSET_RECORD, (void *) record, MSET_ANY); } mdb_free_tabledef (table); return rset; } static rec_db_t process_mdb (void) { rec_db_t db; MdbHandle *mdb; MdbCatalogEntry *entry; int i; char *table_name; /* Create the rec database. */ db = rec_db_new (); if (!db) recutl_out_of_memory (); /* Initialize libmdb and open the input file. */ mdb_init(); mdb_set_date_fmt ("%Y-%m-%dT%H:%M:%S%z"); /* ISO 8601 */ mdb = mdb_open (mdb2rec_mdb_file, MDB_NOFLAGS); if (!mdb) recutl_fatal (_("could not open file %s\n"), mdb2rec_mdb_file); /* Read the catalog. */ if (!mdb_read_catalog (mdb, MDB_TABLE)) recutl_fatal (_("file does not appear to be an Access database\n")); /* Read relationships from the database. Relationships in mdb files are stored in the MSysRelationships table. */ get_relationships (mdb); /* Iterate on the catalogs. */ for (i = 0; i < mdb->num_catalog; i++) { entry = g_ptr_array_index (mdb->catalog, i); table_name = rec_field_name_normalise (entry->object_name); if ((entry->object_type == MDB_TABLE) && (mdb_is_user_table (entry) || mdb2rec_include_system) && (!mdb2rec_mdb_table || (strcmp (mdb2rec_mdb_table, table_name) == 0))) { if (mdb2rec_list_tables) fprintf (stdout, "%s\n", table_name); else rec_db_insert_rset (db, process_table (entry), rec_db_size (db)); } } return db; } int main (int argc, char *argv[]) { int ret; rec_db_t db; rec_writer_t writer; recutl_init ("mdb2rec"); parse_args (argc, argv); db = process_mdb (); if (db) { writer = rec_writer_new (stdout); rec_write_db (writer, db); rec_writer_destroy (writer); rec_db_destroy (db); ret = EXIT_SUCCESS; } else ret = EXIT_FAILURE; return ret; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/utils/csv2rec.c������������������������������������������������������������������������0000644�0000000�0000000�00000021727�14226563465�013005� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* csv2rec.c - csv to rec converter. */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <getopt.h> #include <string.h> #include <stdlib.h> #include <xalloc.h> #include <gettext.h> #define _(str) gettext (str) #include <csv.h> #include <rec.h> #include <recutl.h> /* Forward declarations. */ static void parse_args (int argc, char **argv); static rec_db_t process_csv (void); static int is_space (unsigned char c); static int is_term (unsigned char c); static void field_cb (void *s, size_t len, void *data); static void record_cb (int c, void *data); /* * Types */ struct csv2rec_ctx { rec_db_t db; rec_rset_t rset; rec_record_t record; size_t num_fields; size_t lineno; #define ALLOC_FIELDS 256 bool header_p; size_t num_field_names; char **field_names; }; /* * Global variables */ char *csv2rec_record_type = NULL; char *csv2rec_csv_file = NULL; bool csv2rec_strict = false; bool csv2rec_omit_empty = false; /* * Command line options management */ enum { COMMON_ARGS, RECORD_TYPE_ARG, STRICT_ARG, OMIT_EMPTY_ARG }; static const struct option GNU_longOptions[] = { COMMON_LONG_ARGS, {"type", required_argument, NULL, RECORD_TYPE_ARG}, {"strict", no_argument, NULL, STRICT_ARG}, {"omit-empty", no_argument, NULL, OMIT_EMPTY_ARG}, {NULL, 0, NULL, 0} }; /* * Functions. */ void recutl_print_help (void) { /* TRANSLATORS: --help output, csv2rec synopsis. no-wrap */ printf (_("\ Usage: csv2rec [OPTIONS]... [CSV_FILE]\n")); /* TRANSLATORS: --help output, csv2rec short description. no-wrap */ fputs (_("\ Convert csv data into rec data.\n"), stdout); puts (""); /* TRANSLATORS: --help output, csv2rec options. no-wrap */ fputs (_("\ -t, --type=TYPE type name for the converted records; if this\n\ parameter is omitted then no type is used.\n\ -s, --strict be strict parsing the csv file.\n\ -e, --omit-empty omit empty fields.\n"), stdout); recutl_print_help_common (); puts (""); recutl_print_help_footer (); } static void parse_args (int argc, char **argv) { int ret; char c; while ((ret = getopt_long (argc, argv, "t:se", GNU_longOptions, NULL)) != -1) { c = ret; switch (c) { COMMON_ARGS_CASES case RECORD_TYPE_ARG: case 't': csv2rec_record_type = xstrdup (optarg); break; case STRICT_ARG: case 's': csv2rec_strict = true; break; case OMIT_EMPTY_ARG: case 'e': csv2rec_omit_empty = true; break; default: exit (EXIT_FAILURE); } } /* Read the name of the csv file, if any. */ if (optind < argc) { if ((argc - optind) != 1) { recutl_print_help (); exit (EXIT_FAILURE); } csv2rec_csv_file = argv[optind++]; } } static int is_space (unsigned char c) { return (c == CSV_SPACE) || (c == CSV_TAB); } static int is_term (unsigned char c) { return (c == CSV_CR) || (c == CSV_LF); } void field_cb (void *s, size_t len, void *data) { char *str; char *field_name; rec_field_t field; struct csv2rec_ctx *ctx; size_t i; ctx = (struct csv2rec_ctx *) data; str = xmalloc (len + 1); memcpy (str, s, len); str[len] = '\0'; if (ctx->header_p) { /* Add a new field name to ctx.field_names. */ if ((ctx->num_field_names % ALLOC_FIELDS) == 0) ctx->field_names = realloc (ctx->field_names, ((ctx->num_field_names / ALLOC_FIELDS) + 1) * (sizeof(char *) * ALLOC_FIELDS)); /* Normalize the name: spaces and tabs are turned into dashes '_'. */ for (i = 0; i < strlen (str); i++) { if ((str[i] == ' ') || (str[i] == '\t')) str[i] = '_'; } /* Verify that it is a valid field name. */ field_name = str; if (!rec_field_name_p (field_name)) recutl_fatal (_("invalid field name '%s' in header\n"), str); ctx->field_names[ctx->num_field_names++] = str; } else { /* Create a new field and insert it in the current record. */ if (ctx->num_fields >= ctx->num_field_names) recutl_fatal (_("error while parsing CSV file: too many columns in row\n")); if (!ctx->record) { /* Create a new record. */ ctx->record = rec_record_new (); if (!ctx->record) recutl_out_of_memory (); } if (!csv2rec_omit_empty || (strlen(str) > 0)) { if (ctx->num_fields > ctx->num_field_names) { char *source = csv2rec_csv_file; if (!source) source = "stdin"; fprintf (stderr, _("%s: %lu: \ this line contains %lu fields, but %lu header fields were read\n"), source, ctx->lineno, ctx->num_field_names, ctx->num_fields); exit (EXIT_FAILURE); } field = rec_field_new (ctx->field_names[ctx->num_fields], str); rec_mset_append (rec_record_mset (ctx->record), MSET_FIELD, (void *) field, MSET_ANY); } ctx->num_fields++; } } void record_cb (int c, void *data) { struct csv2rec_ctx *ctx; ctx = (struct csv2rec_ctx *) data; ctx->lineno++; if (ctx->header_p) ctx->header_p = false; else { if (!ctx->rset) { /* Create a new record set. */ ctx->rset = rec_rset_new (); if (!ctx->rset) recutl_out_of_memory (); /* Add a type, if needed. */ if (csv2rec_record_type) rec_rset_set_type (ctx->rset, csv2rec_record_type); /* Add it to the database. */ if (!ctx->db) { ctx->db = rec_db_new (); if (!ctx->db) recutl_out_of_memory (); } rec_db_insert_rset (ctx->db, ctx->rset, rec_db_size (ctx->db)); } /* Add the current record to the record set. */ rec_mset_append (rec_rset_mset (ctx->rset), MSET_RECORD, (void *) ctx->record, MSET_ANY); ctx->record = NULL; /* Reset the field counter. */ ctx->num_fields = 0; } } static rec_db_t process_csv (void) { struct csv2rec_ctx ctx; FILE *in; struct csv_parser p; unsigned char options = 0; char buf[1024]; size_t bytes_read = 0; /* Initialize the data in the context. */ ctx.db = NULL; ctx.rset = NULL; ctx.record = NULL; ctx.header_p = true; ctx.field_names = NULL; ctx.num_field_names = 0; ctx.num_fields = 0; ctx.lineno = 0; /* Set the files to read/write from/to. If a filename was specified, read the csv file from there. Otherwise use the standard input. The output is written to the standard output in any case. */ if (csv2rec_csv_file) { if (!(in = fopen (csv2rec_csv_file, "r"))) recutl_fatal (_("cannot read file %s\n"), csv2rec_csv_file); } else in = stdin; /* Initialize the csv library. */ if (csv_init (&p, options) != 0) recutl_fatal (_("failed to initialize csv parser\n")); /* Set some properties of the parser. */ if (csv2rec_strict) { options |= CSV_STRICT; csv_set_opts (&p, options); } csv_set_space_func (&p, is_space); csv_set_term_func (&p, is_term); /* Parse the input file in chunks of data. */ while ((bytes_read = fread (buf, 1, 1024, in)) > 0) { if (csv_parse (&p, buf, bytes_read, field_cb, record_cb, &ctx) != bytes_read) recutl_fatal (_("error while parsing CSV file: %s\n"), csv_strerror (csv_error (&p))); } return ctx.db; } int main (int argc, char *argv[]) { int ret; rec_db_t db; rec_writer_t writer; recutl_init ("csv2rec"); parse_args (argc, argv); db = process_csv (); ret = EXIT_SUCCESS; if (db) { writer = rec_writer_new (stdout); rec_write_db (writer, db); rec_writer_destroy (writer); rec_db_destroy (db); } else ret = EXIT_FAILURE; return ret; } �����������������������������������������recutils-1.9/utils/recfmt.c�������������������������������������������������������������������������0000644�0000000�0000000�00000014333�14226563465�012711� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* recfmt.c - Format records and generate reports. */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <getopt.h> #include <stdlib.h> #include <xalloc.h> #include <regex.h> #include <gettext.h> #define _(str) gettext (str) #include <rec.h> #include <recutl.h> /* * Global variables */ char *recfmt_template = NULL; /* * Command line options management. */ enum { COMMON_ARGS, FILE_ARG }; static const struct option GNU_longOptions[] = { COMMON_LONG_ARGS, {"file", required_argument, NULL, FILE_ARG}, {NULL, 0, NULL, 0} }; /* * Functions. */ void recutl_print_help (void) { /* TRANSLATORS: --help output, recfmt synopsis. no-wrap */ printf (_("\ Usage: recfmt [OPTION]... [TEMPLATE]\n")); /* TRANSLATORS: --help output, recfmt arguments. no-wrap */ fputs(_("\ Apply a template to records read from standard input.\n"), stdout); puts (""); /* TRANSLATORS: --help output, recfmt arguments. no-wrap */ fputs(_("\ -f, --file=FILENAME read the template to apply from a file.\n"), stdout); recutl_print_help_common (); puts (""); recutl_print_help_footer (); } void recfmt_parse_args (int argc, char **argv) { char c; int ret; while ((ret = getopt_long (argc, argv, "f:", GNU_longOptions, NULL)) != -1) { c = ret; switch (c) { COMMON_ARGS_CASES case FILE_ARG: case 'f': /* Read the template from the specified file and store it in recfmt_template. */ recfmt_template = recutl_read_file (optarg); if (!recfmt_template) recutl_fatal (_("can't open file %s for reading.\n"), optarg); break; default: exit (EXIT_FAILURE); } } /* See if the template is specified in the command line. */ if (optind < argc) { if (recfmt_template) recutl_fatal (_("don't specify a template in the command line\ and -f at the same time.\n")); if ((argc - optind) != 1) { recutl_print_help (); exit (EXIT_FAILURE); } recfmt_template = xstrdup (argv[optind++]); } } char * recfmt_get_subst (rec_record_t record, char *str) { char *res; rec_sex_t sex; sex = rec_sex_new (false); if (!rec_sex_compile (sex, str)) recutl_fatal (_("invalid expression in a template slot.\n")); res = rec_sex_eval_str (sex, record); if (!res) recutl_fatal (_("error evaluating expression in a template slot.\n")); rec_sex_destroy (sex); return res; } char * recfmt_apply_template (rec_record_t record, char *template) { rec_buf_t result_buf; char *result; char *tmp; size_t tmp_size; size_t result_size; char *p; regex_t regexp; regmatch_t matches; char *subst_str; /* Replace occurrences of: {{Name[N]}} where Name[N] is the name of a field with an optional subscript. If the subscript is not present then it is assumed to be 0. If the contents between {{...}} are not a field name then replace the slot with the empty string. */ if (regcomp (®exp, "\\{\\{" "[^{}]*" "\\}\\}", REG_EXTENDED) != 0) recutl_fatal (_("recfmt_apply_template: error compiling regexp.\ Please report this.\n")); result_buf = rec_buf_new (&result, &result_size); p = template; while (*p && (regexec (®exp, p, 1, &matches, 0) == 0) && (matches.rm_so != -1)) { /* Add the prolog, if any. */ if (matches.rm_so > 0) { tmp = xmalloc (matches.rm_so + 1); memcpy (tmp, p, matches.rm_so); tmp[matches.rm_so] = '\0'; rec_buf_puts (tmp, result_buf); free (tmp); } /* Get the match. */ tmp_size = matches.rm_eo - matches.rm_so - 4; tmp = xmalloc (tmp_size + 1); memcpy (tmp, p + matches.rm_so + 2, tmp_size); tmp[tmp_size] = '\0'; /* Advance p. */ p = p + matches.rm_eo; /* Get the substitution text and append it to the result. */ subst_str = recfmt_get_subst (record, tmp); if (subst_str) { rec_buf_puts (subst_str, result_buf); free (subst_str); } free (tmp); } /* Add the epilog, if any. */ if (*p) rec_buf_puts (p, result_buf); rec_buf_close (result_buf); return result; } void recfmt_process_db (rec_db_t db, char *template) { size_t n_rset; rec_rset_t rset; rec_record_t record; char *result; rec_mset_iterator_t iter; /* Iterate on all the record sets. */ for (n_rset = 0; n_rset < rec_db_size (db); n_rset++) { rset = rec_db_get_rset (db, n_rset); /* Iterate on all the records. */ iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void**) &record, NULL)) { /* Apply the template to this record. */ result = recfmt_apply_template (record, template); if (result && (*result != '\0')) { printf ("%s", result); free (result); } } rec_mset_iterator_free (&iter); } } int main (int argc, char *argv[]) { rec_db_t db; recutl_init ("recfmt"); recfmt_parse_args (argc, argv); db = recutl_read_db_from_file (NULL); if (db && recfmt_template) recfmt_process_db (db, recfmt_template); return EXIT_SUCCESS; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/Makefile.in����������������������������������������������������������������������������0000644�0000000�0000000�00000251335�14226573146�012174� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Top-level Makefile.am # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 # Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = . ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 \ $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/calloc.m4 \ $(top_srcdir)/m4/canonicalize.m4 \ $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/clock_time.m4 \ $(top_srcdir)/m4/close.m4 $(top_srcdir)/m4/closedir.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/copy-file-range.m4 \ $(top_srcdir)/m4/copy-file.m4 $(top_srcdir)/m4/d-ino.m4 \ $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup.m4 \ $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eaccess.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ $(top_srcdir)/m4/explicit_bzero.m4 \ $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 \ $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fchdir.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \ $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \ $(top_srcdir)/m4/filenamecat.m4 \ $(top_srcdir)/m4/findprog-in.m4 $(top_srcdir)/m4/flexmember.m4 \ $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/flock.m4 \ $(top_srcdir)/m4/floor.m4 $(top_srcdir)/m4/fopen.m4 \ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ $(top_srcdir)/m4/fseek.m4 $(top_srcdir)/m4/fseeko.m4 \ $(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \ $(top_srcdir)/m4/fstatat.m4 $(top_srcdir)/m4/ftell.m4 \ $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ $(top_srcdir)/m4/getcwd-abort-bug.m4 \ $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \ $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \ $(top_srcdir)/m4/getpass.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/getrandom.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/group-member.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexpl.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrlen.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/minmax.m4 \ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkostemp.m4 \ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \ $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/opendir.m4 \ $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ $(top_srcdir)/m4/posix_spawn_faction_addchdir.m4 \ $(top_srcdir)/m4/printf-frexp.m4 \ $(top_srcdir)/m4/printf-frexpl.m4 \ $(top_srcdir)/m4/printf-posix-rpl.m4 \ $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readdir.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/remove.m4 \ $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rewinddir.m4 \ $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/safe-read.m4 \ $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/save-cwd.m4 \ $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ $(top_srcdir)/m4/selinux-context-h.m4 \ $(top_srcdir)/m4/selinux-label-h.m4 \ $(top_srcdir)/m4/selinux-selinux-h.m4 \ $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/setlocale_null.m4 \ $(top_srcdir)/m4/sh-filename.m4 \ $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ $(top_srcdir)/m4/signal_h.m4 \ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/stdio_h.m4 \ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/stpcpy.m4 \ $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ $(top_srcdir)/m4/sys_random_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink.m4 \ $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utime.m4 \ $(top_srcdir)/m4/utime_h.m4 $(top_srcdir)/m4/utimens.m4 \ $(top_srcdir)/m4/utimes.m4 \ $(top_srcdir)/m4/vasnprintf-posix.m4 \ $(top_srcdir)/m4/vasnprintf.m4 \ $(top_srcdir)/m4/vasprintf-posix.m4 \ $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ $(top_srcdir)/m4/vfprintf-posix.m4 \ $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/write.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/year2038.m4 \ $(top_srcdir)/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(top_srcdir)/configure \ $(am__configure_deps) $(am__DIST_COMMON) am__CONFIG_DISTCLEAN_FILES = config.status config.cache config.log \ configure.lineno config.status.lineno mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ cscope distdir distdir-am dist dist-all distcheck am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/compile \ $(top_srcdir)/build-aux/config.guess \ $(top_srcdir)/build-aux/config.rpath \ $(top_srcdir)/build-aux/config.sub \ $(top_srcdir)/build-aux/install-sh \ $(top_srcdir)/build-aux/ltmain.sh \ $(top_srcdir)/build-aux/missing ABOUT-NLS AUTHORS COPYING \ ChangeLog INSTALL NEWS README build-aux/compile \ build-aux/config.guess build-aux/config.rpath \ build-aux/config.sub build-aux/depcomp build-aux/install-sh \ build-aux/ltmain.sh build-aux/mdate-sh build-aux/missing \ build-aux/texinfo.tex build-aux/ylwrap DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) distdir = $(PACKAGE)-$(VERSION) top_distdir = $(distdir) am__remove_distdir = \ if test -d "$(distdir)"; then \ find "$(distdir)" -type d ! -perm -200 -exec chmod u+w {} ';' \ && rm -rf "$(distdir)" \ || { sleep 5 && rm -rf "$(distdir)"; }; \ else :; fi am__post_remove_distdir = $(am__remove_distdir) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" DIST_ARCHIVES = $(distdir).tar.gz GZIP_ENV = --best DIST_TARGETS = dist-gzip # Exists only to be overridden by the user if desired. AM_DISTCHECK_DVI_TARGET = dvi distuninstallcheck_listfiles = find . -type f -print am__distuninstallcheck_listfiles = $(distuninstallcheck_listfiles) \ | sed 's|^\./|$(prefix)/|' | grep -v '$(infodir)/dir$$' distcleancheck_listfiles = find . -type f -print ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_HEADERS = @BASH_HEADERS@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CURLLIBS = @CURLLIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ FLOOR_LIBM = @FLOOR_LIBM@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POSIX_SPAWN = @GL_GNULIB_POSIX_SPAWN@ GL_GNULIB_POSIX_SPAWNATTR_DESTROY = @GL_GNULIB_POSIX_SPAWNATTR_DESTROY@ GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ GL_GNULIB_POSIX_SPAWNATTR_INIT = @GL_GNULIB_POSIX_SPAWNATTR_INIT@ GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ GL_GNULIB_POSIX_SPAWNP = @GL_GNULIB_POSIX_SPAWNP@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIME = @GL_GNULIB_UTIME@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FLOCK = @HAVE_FLOCK@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SPAWN_H = @HAVE_SPAWN_H@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIME = @HAVE_UTIME@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_UTIME_H = @HAVE_UTIME_H@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGCRYPT = @LIBGCRYPT@ LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIB_ACL = @LIB_ACL@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ LIB_EACCESS = @LIB_EACCESS@ LIB_GETRANDOM = @LIB_GETRANDOM@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELINUX = @LIB_SELINUX@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBGCRYPT = @LTLIBGCRYPT@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBREADLINE = @LTLIBREADLINE@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MDBLIBS = @MDBLIBS@ MDB_DATETIME = @MDB_DATETIME@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_UTIME_H = @NEXT_AS_FIRST_DIRECTIVE_UTIME_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_SPAWN_H = @NEXT_SPAWN_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_UTIME_H = @NEXT_UTIME_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PARSE_DATETIME_BISON = @PARSE_DATETIME_BISON@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIME = @REPLACE_UTIME@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ SELINUX_LABEL_H = @SELINUX_LABEL_H@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_ACL = @USE_ACL@ USE_NLS = @USE_NLS@ UUIDLIBS = @UUIDLIBS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ crypt_support = @crypt_support@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ have_uuid = @have_uuid@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ ACLOCAL_AMFLAGS = -I m4 SUBDIRS = lib libcsv src utils bash doc po man torture etc all: all-recursive .SUFFIXES: am--refresh: Makefile @: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ echo ' cd $(srcdir) && $(AUTOMAKE) --gnu'; \ $(am__cd) $(srcdir) && $(AUTOMAKE) --gnu \ && exit 0; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ echo ' $(SHELL) ./config.status'; \ $(SHELL) ./config.status;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) $(SHELL) ./config.status --recheck $(top_srcdir)/configure: $(am__configure_deps) $(am__cd) $(srcdir) && $(AUTOCONF) $(ACLOCAL_M4): $(am__aclocal_m4_deps) $(am__cd) $(srcdir) && $(ACLOCAL) $(ACLOCAL_AMFLAGS) $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs distclean-libtool: -rm -f libtool config.lt # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscope: cscope.files test ! -s cscope.files \ || $(CSCOPE) -b -q $(AM_CSCOPEFLAGS) $(CSCOPEFLAGS) -i cscope.files $(CSCOPE_ARGS) clean-cscope: -rm -f cscope.files cscope.files: clean-cscope cscopelist cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags -rm -f cscope.out cscope.in.out cscope.po.out cscope.files distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) $(am__remove_distdir) test -d "$(distdir)" || mkdir "$(distdir)" @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done -test -n "$(am__skip_mode_fix)" \ || find "$(distdir)" -type d ! -perm -755 \ -exec chmod u+rwx,go+rx {} \; -o \ ! -type d ! -perm -444 -links 1 -exec chmod a+r {} \; -o \ ! -type d ! -perm -400 -exec chmod a+r {} \; -o \ ! -type d ! -perm -444 -exec $(install_sh) -c -m a+r {} {} \; \ || chmod -R a+r "$(distdir)" dist-gzip: distdir tardir=$(distdir) && $(am__tar) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).tar.gz $(am__post_remove_distdir) dist-bzip2: distdir tardir=$(distdir) && $(am__tar) | BZIP2=$${BZIP2--9} bzip2 -c >$(distdir).tar.bz2 $(am__post_remove_distdir) dist-lzip: distdir tardir=$(distdir) && $(am__tar) | lzip -c $${LZIP_OPT--9} >$(distdir).tar.lz $(am__post_remove_distdir) dist-xz: distdir tardir=$(distdir) && $(am__tar) | XZ_OPT=$${XZ_OPT--e} xz -c >$(distdir).tar.xz $(am__post_remove_distdir) dist-zstd: distdir tardir=$(distdir) && $(am__tar) | zstd -c $${ZSTD_CLEVEL-$${ZSTD_OPT--19}} >$(distdir).tar.zst $(am__post_remove_distdir) dist-tarZ: distdir @echo WARNING: "Support for distribution archives compressed with" \ "legacy program 'compress' is deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 tardir=$(distdir) && $(am__tar) | compress -c >$(distdir).tar.Z $(am__post_remove_distdir) dist-shar: distdir @echo WARNING: "Support for shar distribution archives is" \ "deprecated." >&2 @echo WARNING: "It will be removed altogether in Automake 2.0" >&2 shar $(distdir) | eval GZIP= gzip $(GZIP_ENV) -c >$(distdir).shar.gz $(am__post_remove_distdir) dist-zip: distdir -rm -f $(distdir).zip zip -rq $(distdir).zip $(distdir) $(am__post_remove_distdir) dist dist-all: $(MAKE) $(AM_MAKEFLAGS) $(DIST_TARGETS) am__post_remove_distdir='@:' $(am__post_remove_distdir) # This target untars the dist file and tries a VPATH configuration. Then # it guarantees that the distribution is self-contained by making another # tarfile. distcheck: dist case '$(DIST_ARCHIVES)' in \ *.tar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).tar.gz | $(am__untar) ;;\ *.tar.bz2*) \ bzip2 -dc $(distdir).tar.bz2 | $(am__untar) ;;\ *.tar.lz*) \ lzip -dc $(distdir).tar.lz | $(am__untar) ;;\ *.tar.xz*) \ xz -dc $(distdir).tar.xz | $(am__untar) ;;\ *.tar.Z*) \ uncompress -c $(distdir).tar.Z | $(am__untar) ;;\ *.shar.gz*) \ eval GZIP= gzip $(GZIP_ENV) -dc $(distdir).shar.gz | unshar ;;\ *.zip*) \ unzip $(distdir).zip ;;\ *.tar.zst*) \ zstd -dc $(distdir).tar.zst | $(am__untar) ;;\ esac chmod -R a-w $(distdir) chmod u+w $(distdir) mkdir $(distdir)/_build $(distdir)/_build/sub $(distdir)/_inst chmod a-w $(distdir) test -d $(distdir)/_build || exit 0; \ dc_install_base=`$(am__cd) $(distdir)/_inst && pwd | sed -e 's,^[^:\\/]:[\\/],/,'` \ && dc_destdir="$${TMPDIR-/tmp}/am-dc-$$$$/" \ && am__cwd=`pwd` \ && $(am__cd) $(distdir)/_build/sub \ && ../../configure \ $(AM_DISTCHECK_CONFIGURE_FLAGS) \ $(DISTCHECK_CONFIGURE_FLAGS) \ --srcdir=../.. --prefix="$$dc_install_base" \ && $(MAKE) $(AM_MAKEFLAGS) \ && $(MAKE) $(AM_MAKEFLAGS) $(AM_DISTCHECK_DVI_TARGET) \ && $(MAKE) $(AM_MAKEFLAGS) check \ && $(MAKE) $(AM_MAKEFLAGS) install \ && $(MAKE) $(AM_MAKEFLAGS) installcheck \ && $(MAKE) $(AM_MAKEFLAGS) uninstall \ && $(MAKE) $(AM_MAKEFLAGS) distuninstallcheck_dir="$$dc_install_base" \ distuninstallcheck \ && chmod -R a-w "$$dc_install_base" \ && ({ \ (cd ../.. && umask 077 && mkdir "$$dc_destdir") \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" install \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" uninstall \ && $(MAKE) $(AM_MAKEFLAGS) DESTDIR="$$dc_destdir" \ distuninstallcheck_dir="$$dc_destdir" distuninstallcheck; \ } || { rm -rf "$$dc_destdir"; exit 1; }) \ && rm -rf "$$dc_destdir" \ && $(MAKE) $(AM_MAKEFLAGS) dist \ && rm -rf $(DIST_ARCHIVES) \ && $(MAKE) $(AM_MAKEFLAGS) distcleancheck \ && cd "$$am__cwd" \ || exit 1 $(am__post_remove_distdir) @(echo "$(distdir) archives ready for distribution: "; \ list='$(DIST_ARCHIVES)'; for i in $$list; do echo $$i; done) | \ sed -e 1h -e 1s/./=/g -e 1p -e 1x -e '$$p' -e '$$x' distuninstallcheck: @test -n '$(distuninstallcheck_dir)' || { \ echo 'ERROR: trying to run $@ with an empty' \ '$$(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ $(am__cd) '$(distuninstallcheck_dir)' || { \ echo 'ERROR: cannot chdir into $(distuninstallcheck_dir)' >&2; \ exit 1; \ }; \ test `$(am__distuninstallcheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left after uninstall:" ; \ if test -n "$(DESTDIR)"; then \ echo " (check DESTDIR support)"; \ fi ; \ $(distuninstallcheck_listfiles) ; \ exit 1; } >&2 distcleancheck: distclean @if test '$(srcdir)' = . ; then \ echo "ERROR: distcleancheck can only run from a VPATH build" ; \ exit 1 ; \ fi @test `$(distcleancheck_listfiles) | wc -l` -eq 0 \ || { echo "ERROR: files left in build directory after distclean:" ; \ $(distcleancheck_listfiles) ; \ exit 1; } >&2 check-am: all-am check: check-recursive all-am: Makefile installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-recursive clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -f Makefile distclean-am: clean-am distclean-generic distclean-libtool \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f $(am__CONFIG_DISTCLEAN_FILES) -rm -rf $(top_srcdir)/autom4te.cache -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--refresh check check-am clean clean-cscope clean-generic \ clean-libtool cscope cscopelist-am ctags ctags-am dist \ dist-all dist-bzip2 dist-gzip dist-lzip dist-shar dist-tarZ \ dist-xz dist-zip dist-zstd distcheck distclean \ distclean-generic distclean-libtool distclean-tags \ distcleancheck distdir distuninstallcheck dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags tags-am uninstall \ uninstall-am .PRECIOUS: Makefile perf: $(MAKE) -C torture/utils perf .PHONY: perf # End of Makefile.am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/AUTHORS��������������������������������������������������������������������������������0000644�0000000�0000000�00000000617�13253164723�011166� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*- mode: rec -*- # This file contains the names of the people that contributed with # code and/or documentation to GNU recutils. Name: Jose E. Marchesi Email: jemarch@gnu.org Name: Ralf Wildenhues Email: Ralf.Wildenhues@gmx.de Name: Daiki Ueno Email: ueno@unixuser.org Name: John Darrington Email: john@darrington.wattle.id.au Name: MichaÅ‚ MasÅ‚owski Email: mtjm@mtjm.eu # End of AUTHORS �����������������������������������������������������������������������������������������������������������������recutils-1.9/torture/�������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�011706� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/Makefile.am��������������������������������������������������������������������0000644�0000000�0000000�00000015151�14226563465�013664� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# torture/ Makefile.am # GNU rec library # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 # Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # Note that we want to run the unit tests first. They are stored in # the rec-* subdirectories, but commanded by the Makefile in the # current directory. That explains the dot in the SUBDIRS variable # definition. SUBDIRS = . utils if CHECK TESTS = runtests noinst_PROGRAMS = runtests REC_MSET_TSUITE = rec-mset/elem-types.h \ rec-mset/rec-mset-new.c \ rec-mset/rec-mset-dup.c \ rec-mset/rec-mset-type-p.c \ rec-mset/rec-mset-register-type.c \ rec-mset/rec-mset-count.c \ rec-mset/rec-mset-get-at.c \ rec-mset/tsuite-rec-mset.c REC_COMMENT_TSUITE = rec-comment/rec-comment-new.c \ rec-comment/rec-comment-destroy.c \ rec-comment/rec-comment-dup.c \ rec-comment/rec-comment-text.c \ rec-comment/rec-comment-set-text.c \ rec-comment/rec-comment-equal-p.c \ rec-comment/tsuite-rec-comment.c REC_FIELD_NAME_TSUITE = rec-field-name/rec-field-name-equal-p.c \ rec-field-name/rec-field-name-p.c \ rec-field-name/rec-field-name-normalise.c \ rec-field-name/tsuite-rec-field-name.c REC_TYPE_TSUITE = rec-type/rec-type-new.c \ rec-type/rec-type-destroy.c \ rec-type/rec-type-descr-p.c \ rec-type/rec-type-kind.c \ rec-type/rec-type-kind-str.c \ rec-type/rec-type-equal-p.c \ rec-type/rec-type-check.c \ rec-type/rec-type-name.c \ rec-type/rec-type-set-name.c \ rec-type/tsuite-rec-type.c REC_TYPE_REG_TSUITE = rec-type-reg/rec-type-reg-new.c \ rec-type-reg/rec-type-reg-destroy.c \ rec-type-reg/tsuite-rec-type-reg.c \ rec-type-reg/rec-type-reg-get.c REC_FEX_TSUITE = rec-fex/rec-fex-new.c \ rec-fex/rec-fex-destroy.c \ rec-fex/rec-fex-check.c \ rec-fex/rec-fex-sort.c \ rec-fex/rec-fex-size.c \ rec-fex/rec-fex-get.c \ rec-fex/rec-fex-elem-field-name.c \ rec-fex/rec-fex-elem-rewrite-to.c \ rec-fex/rec-fex-elem-min.c \ rec-fex/rec-fex-elem-max.c \ rec-fex/rec-fex-str.c \ rec-fex/tsuite-rec-fex.c REC_FIELD_TSUITE = rec-field/rec-field-name.c \ rec-field/rec-field-set-name.c \ rec-field/rec-field-value.c \ rec-field/rec-field-set-value.c \ rec-field/rec-field-dup.c \ rec-field/rec-field-new.c \ rec-field/rec-field-destroy.c \ rec-field/rec-field-equal-p.c \ rec-field/rec-field-source.c \ rec-field/rec-field-set-source.c \ rec-field/rec-field-location.c \ rec-field/rec-field-location-str.c \ rec-field/rec-field-set-location.c \ rec-field/rec-field-char-location.c \ rec-field/rec-field-char-location-str.c \ rec-field/rec-field-set-char-location.c \ rec-field/rec-field-to-comment.c \ rec-field/tsuite-rec-field.c REC_RECORD_TSUITE = rec-record/tsuite-rec-record.c REC_PARSER_TSUITE = rec-parser/rec-parser-new.c \ rec-parser/rec-parser-new-str.c \ rec-parser/rec-parser-new-mem.c \ rec-parser/rec-parser-destroy.c \ rec-parser/rec-parse-field-name-str.c \ rec-parser/rec-parse-field-name.c \ rec-parser/rec-parse-field.c \ rec-parser/rec-parse-record.c \ rec-parser/rec-parse-record-str.c \ rec-parser/rec-parse-rset.c \ rec-parser/rec-parse-db.c \ rec-parser/rec-parser-eof.c \ rec-parser/rec-parser-error.c \ rec-parser/rec-parser-reset.c \ rec-parser/rec-parser-perror.c \ rec-parser/rec-parser-seek-mem.c \ rec-parser/tsuite-rec-parser.c REC_WRITER_TSUITE= rec-writer/rec-write-comment.c \ rec-writer/rec-write-field.c \ rec-writer/rec-write-field-name.c \ rec-writer/rec-writer-destroy.c \ rec-writer/rec-write-record.c \ rec-writer/rec-writer-new.c \ rec-writer/rec-write-rset.c \ rec-writer/rec-write-db.c \ rec-writer/rec-write-field-name-str.c \ rec-writer/rec-write-field-str.c \ rec-writer/rec-write-comment-str.c \ rec-writer/tsuite-rec-writer.c REC_SEX_TSUITE = rec-sex/rec-sex-new.c \ rec-sex/rec-sex-destroy.c \ rec-sex/rec-sex-compile.c \ rec-sex/rec-sex-eval.c \ rec-sex/tsuite-rec-sex.c runtests_SOURCES = runtests.c \ $(REC_MSET_TSUITE) \ $(REC_COMMENT_TSUITE) \ $(REC_FIELD_NAME_TSUITE) \ $(REC_TYPE_TSUITE) \ $(REC_TYPE_REG_TSUITE) \ $(REC_FIELD_TSUITE) \ $(REC_RECORD_TSUITE) \ $(REC_FEX_TSUITE) \ $(REC_PARSER_TSUITE) \ $(REC_WRITER_TSUITE) \ $(REC_SEX_TSUITE) AM_CPPFLAGS = -I$(top_srcdir)/src \ -I$(top_srcdir)/torture runtests_CFLAGS = $(CHECK_CFLAGS) runtests_LDADD = $(CHECK_LIBS) ../src/librec.la clean-local: -rm -f tests.log endif # CHECK # End of Makefile.am �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/runtests.c���������������������������������������������������������������������0000644�0000000�0000000�00000004252�14226563465�013663� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: runtests.c * Date: Sun Mar 1 17:00:14 2009 * * GNU recutils - Unit testing driver * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include <check.h> extern Suite *tsuite_rec_mset (void); extern Suite *tsuite_rec_comment (void); extern Suite *tsuite_rec_field_name (void); extern Suite *tsuite_rec_type (void); extern Suite *tsuite_rec_type_reg (void); extern Suite *tsuite_rec_field (void); extern Suite *tsuite_rec_record (void); extern Suite *tsuite_rec_fex (void); extern Suite *tsuite_rec_parser (void); extern Suite *tsuite_rec_writer (void); extern Suite *tsuite_rec_sex (void); int main (int argc, char **argv) { int failures; SRunner *sr; sr = srunner_create (NULL); srunner_add_suite (sr, tsuite_rec_mset ()); srunner_add_suite (sr, tsuite_rec_comment ()); srunner_add_suite (sr, tsuite_rec_field_name ()); srunner_add_suite (sr, tsuite_rec_fex ()); srunner_add_suite (sr, tsuite_rec_type ()); srunner_add_suite (sr, tsuite_rec_type_reg ()); srunner_add_suite (sr, tsuite_rec_field ()); srunner_add_suite (sr, tsuite_rec_record ()); srunner_add_suite (sr, tsuite_rec_parser ()); srunner_add_suite (sr, tsuite_rec_writer ()); srunner_add_suite (sr, tsuite_rec_sex ()); srunner_set_log (sr, "tests.log"); srunner_run_all (sr, CK_ENV); failures = srunner_ntests_failed (sr); srunner_free (sr); return (failures == 0) ? 0 : 1; } /* End of runtests.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-sex/�����������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�013254� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-sex/rec-sex-new.c����������������������������������������������������������0000644�0000000�0000000�00000002706�14226563465�015501� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-sex-new.c * Date: Mon Nov 15 15:06:48 2010 * * GNU recutils - rec_sex_new unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_sex_new_nominal * Unit: rec_sex_new * Description: * + Create selection expressions. */ START_TEST(rec_sex_new_nominal) { rec_sex_t sex; sex = rec_sex_new (true); fail_if (sex == NULL); rec_sex_destroy (sex); sex = rec_sex_new (false); fail_if (sex == NULL); rec_sex_destroy (sex); } END_TEST /* * Test case creation function */ TCase * test_rec_sex_new (void) { TCase *tc = tcase_create ("rec_sex_new"); tcase_add_test (tc, rec_sex_new_nominal); return tc; } /* End of rec-sex-new.c */ ����������������������������������������������������������recutils-1.9/torture/rec-sex/rec-sex-eval.c���������������������������������������������������������0000644�0000000�0000000�00000003323�14226563465�015633� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-sex-eval.c * Date: Mon Nov 15 15:19:22 2010 * * GNU recutils - rec_sex_eval unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_sex_eval_match * Unit: rec_sex_eval * Description: * + Eval SEX expressions against matching records. */ START_TEST(rec_sex_eval_match) { rec_sex_t sex; sex = rec_sex_new (false); fail_if (sex == NULL); rec_sex_destroy (sex); } END_TEST /*- * Test: rec_sex_eval_nomatch * Unit: rec_sex_eval * Description: * + Eval SEX expressions against non matching * + records. */ START_TEST(rec_sex_eval_nomatch) { rec_sex_t sex; sex = rec_sex_new (false); fail_if (sex == NULL); rec_sex_destroy (sex); } END_TEST /* * Test case creation function */ TCase * test_rec_sex_eval (void) { TCase *tc = tcase_create ("rec_sex_eval"); tcase_add_test (tc, rec_sex_eval_match); tcase_add_test (tc, rec_sex_eval_nomatch); return tc; } /* End of rec-sex-eval.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-sex/rec-sex-compile.c������������������������������������������������������0000644�0000000�0000000�00000004154�14226563465�016337� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-sex-compile.c * Date: Mon Nov 15 15:12:24 2010 * * GNU recutils - rec_sex_compile unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_sex_compile_nominal * Unit: rec_sex_compile * Description: * + Compile valid selection expressions. */ START_TEST(rec_sex_compile_nominal) { rec_sex_t sex; sex = rec_sex_new (false); fail_if (sex == NULL); fail_if (!rec_sex_compile (sex, "true")); rec_sex_destroy (sex); sex = rec_sex_new (false); fail_if (sex == NULL); fail_if (!rec_sex_compile (sex, "false")); rec_sex_destroy (sex); } END_TEST /*- * Test: rec_sex_compile_invalid * Unit: rec_sex_compile * Description: * + Try to compile invalid selection expressions. */ START_TEST(rec_sex_compile_invalid) { rec_sex_t sex; sex = rec_sex_new (false); fail_if (sex == NULL); fail_if (rec_sex_compile (sex, "")); rec_sex_destroy (sex); sex = rec_sex_new (false); fail_if (sex == NULL); fail_if (rec_sex_compile (sex, "+")); rec_sex_destroy (sex); } END_TEST /* * Test case creation function */ TCase * test_rec_sex_compile (void) { TCase *tc = tcase_create ("rec_sex_compile"); tcase_add_test (tc, rec_sex_compile_nominal); tcase_add_test (tc, rec_sex_compile_invalid); return tc; } /* End of rec-sex-compile.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-sex/tsuite-rec-sex.c�������������������������������������������������������0000644�0000000�0000000�00000002536�14226563465�016226� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: tsuite-rec-sex.c * Date: Mon Nov 15 15:04:12 2010 * * GNU recutils - rec_sex test suite. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> extern TCase *test_rec_sex_new (void); extern TCase *test_rec_sex_destroy (void); extern TCase *test_rec_sex_compile (void); extern TCase *test_rec_sex_eval (void); Suite * tsuite_rec_sex () { Suite *s; s = suite_create ("rec-sex"); suite_add_tcase (s, test_rec_sex_new ()); suite_add_tcase (s, test_rec_sex_destroy ()); suite_add_tcase (s, test_rec_sex_compile ()); suite_add_tcase (s, test_rec_sex_eval ()); return s; } /* End of tsuite-rec-sex.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-sex/rec-sex-destroy.c������������������������������������������������������0000644�0000000�0000000�00000002753�14226563465�016403� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-sex-destroy.c * Date: Mon Nov 15 15:06:48 2010 * * GNU recutils - rec_sex_destroy unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_sex_destroy_nominal * Unit: rec_sex_destroy * Description: * + Destroy selection expressions. */ START_TEST(rec_sex_destroy_nominal) { rec_sex_t sex; sex = rec_sex_new (true); fail_if (sex == NULL); rec_sex_destroy (sex); sex = rec_sex_new (false); fail_if (sex == NULL); rec_sex_destroy (sex); } END_TEST /* * Test case creation function */ TCase * test_rec_sex_destroy (void) { TCase *tc = tcase_create ("rec_sex_destroy"); tcase_add_test (tc, rec_sex_destroy_nominal); return tc; } /* End of rec-sex-destroy.c */ ���������������������recutils-1.9/torture/rec-mset/����������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�013425� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-mset/rec-mset-new.c��������������������������������������������������������0000644�0000000�0000000�00000002747�14226563465�016030� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-mset-new.c * Date: Thu Oct 28 16:47:46 2010 * * GNU recutils - rec_mset_new unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_mset_new_and_destroy * Unit: rec_mset_new * Description: * + Create an empty record set and destroy it. * + * + 1. The value returned by rec_mset_new shall not * + be NULL. */ START_TEST(rec_mset_new_and_destroy) { rec_mset_t mset; mset = rec_mset_new (); fail_if (mset == NULL); rec_mset_destroy (mset); } END_TEST /* * Test case creation function */ TCase * test_rec_mset_new (void) { TCase *tc = tcase_create ("rec_mset_new"); tcase_add_test (tc, rec_mset_new_and_destroy); return tc; } /* End of rec-mset-new.c */ �������������������������recutils-1.9/torture/rec-mset/rec-mset-register-type.c����������������������������������������������0000644�0000000�0000000�00000003637�14226563465�020041� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-mset-register-type.c * Date: Thu Oct 28 20:10:18 2010 * * GNU recutils - Tests for rec_mset_register_type * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> #include <rec-mset/elem-types.h> /*- * Test: rec_mset_register_type_nominal * Unit: rec_mset_register_type * Description: * + Register a type in a mset. * + * + 1. The registration should succeed. * + 2. The number returned by rec_mset_register_type shall * + be bigger than 0. */ START_TEST(rec_mset_register_type_nominal) { int type; rec_mset_t mset; mset = rec_mset_new (); fail_if (mset == NULL); type = rec_mset_register_type (mset, TYPE1, type1_disp, type1_equal, type1_dup, NULL); fail_if (type <= 0); rec_mset_destroy (mset); } END_TEST /* * Test case creation function */ TCase * test_rec_mset_register_type (void) { TCase *tc = tcase_create ("rec_mset_register_type"); tcase_add_test (tc, rec_mset_register_type_nominal); return tc; } /* End of rec-mset-register-type.c */ �������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-mset/rec-mset-count.c������������������������������������������������������0000644�0000000�0000000�00000006501�14226563465�016357� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-mset-count.c * Date: Thu Oct 28 20:17:55 2010 * * GNU recutils - unit tests for rec_mset_count * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> #include <rec-mset/elem-types.h> /*- * Test: rec_mset_count_empty * Unit: rec_mset_count * Description: * + Count the number of total elements of an * + empty mset. * + * + 1. The function shall return 0. */ START_TEST(rec_mset_count_empty) { rec_mset_t mset; mset = rec_mset_new (); fail_if (mset == NULL); fail_if (rec_mset_count (mset, MSET_ANY) != 0); rec_mset_destroy (mset); } END_TEST /*- * Test: rec_mset_count_existing * Unit: rec_mset_count * Description: * + Count the number of elements of a non empty * + mset. * + * + 1. The function shall return the number of * + elements. */ START_TEST(rec_mset_count_existing) { int type; struct type1_t *elem1; struct type1_t *elem2; rec_mset_elem_t e1; rec_mset_elem_t e2; rec_mset_t mset1; /* Create a mset, register a type and insert two elements of that type. */ mset1 = rec_mset_new (); fail_if (mset1 == NULL); type = rec_mset_register_type (mset1, TYPE1, type1_disp, type1_equal, type1_dup, NULL); elem1 = malloc (sizeof (struct type1_t)); fail_if (elem1 == NULL); elem1->i = 1; e1 = rec_mset_append (mset1, type, (void *) elem1, MSET_ANY); fail_if (e1 == NULL); elem2 = malloc (sizeof (struct type1_t)); fail_if (elem2 == NULL); elem2->i = 2; e2 = rec_mset_append (mset1, type, (void *) elem2, MSET_ANY); fail_if (e2 == NULL); /* Count elements. */ fail_if (rec_mset_count (mset1, MSET_ANY) != 2); fail_if (rec_mset_count (mset1, type) != 2); rec_mset_destroy (mset1); } END_TEST /*- * Test: rec_mset_count_nonexisting * Unit: rec_mset_count * Description: * + Count the number of total elements pertaining to * + an unexisting type in a mset. * + * + 1. The function shall return 0. */ START_TEST(rec_mset_count_nonexisting) { rec_mset_t mset; mset = rec_mset_new (); fail_if (mset == NULL); fail_if (rec_mset_count (mset, MSET_ANY + 1) != 0); rec_mset_destroy (mset); } END_TEST /* * Test case creation function */ TCase * test_rec_mset_count (void) { TCase *tc = tcase_create ("rec_mset_count"); tcase_add_test (tc, rec_mset_count_empty); tcase_add_test (tc, rec_mset_count_existing); tcase_add_test (tc, rec_mset_count_nonexisting); return tc; } /* End of rec-mset-count.c */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-mset/elem-types.h����������������������������������������������������������0000644�0000000�0000000�00000004314�14226563465�015603� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: elem-types.h * Date: Thu Oct 28 20:01:31 2010 * * GNU recutils - Element types for the rec_mset tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> /* mset types used by the tests in this file: * * TYPE1 and TYPE2 */ #define TYPE1 "TYPE1" struct type1_t { int i; }; static void type1_disp (void *data) { struct type1_t *s; s = (struct type1_t *) data; free (s); } static bool type1_equal (void *data1, void *data2) { struct type1_t *s1; struct type1_t *s2; s1 = (struct type1_t *) data1; s2 = (struct type1_t *) data2; return (s1->i == s2->i); } static void * type1_dup (void *data) { struct type1_t *s; struct type1_t *s_copy; s = (struct type1_t *) data; s_copy = malloc (sizeof (struct type1_t)); if (s_copy) { s_copy->i = s->i; } return (void *) s_copy; } #define TYPE2 "TYPE2" struct type2_t { char c; }; static void type2_disp (void *data) { struct type2_t *s; s = (struct type2_t *) data; free (s); } static bool type2_equal (void *data1, void *data2) { struct type2_t *s1; struct type2_t *s2; s1 = (struct type2_t *) data1; s2 = (struct type2_t *) data2; return (s1->c == s2->c); } static void * type2_dup (void *data) { struct type2_t *s; struct type2_t *s_copy; s = (struct type2_t *) data; s_copy = malloc (sizeof (struct type2_t)); if (s_copy) { s_copy->c = s->c; } return (void *) s_copy; } /* End of elem-types.h */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-mset/rec-mset-dup.c��������������������������������������������������������0000644�0000000�0000000�00000006124�14226563465�016020� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-mset-dup.c * Date: Thu Oct 28 19:03:01 2010 * * GNU recutils - rec_mset_dup unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> #include <rec-mset/elem-types.h> /*- * Test: rec_mset_dup_empty * Unit: rec_mset_dup * Description: * + Dup an empty mset. * + * + 1. The copy shall be successfully returned. * + 2. The copy shall be empty. */ START_TEST(rec_mset_dup_empty) { rec_mset_t mset1; rec_mset_t mset2; /* Create an empty mset. */ mset1 = rec_mset_new (); fail_if (mset1 == NULL); /* Get a copy. */ mset2 = rec_mset_dup (mset1); fail_if (mset2 == NULL); fail_if (rec_mset_count (mset2, MSET_ANY) != 0); rec_mset_destroy (mset1); rec_mset_destroy (mset2); } END_TEST /*- * Test: rec_mset_dup_nonempty * Unit: rec_mset_dup * Description: * + Dup an mset containing two elements of a nonempty type. * + * + 1. The copy shall be successfully returned. * + 2. The copy shall contain the same elements. */ START_TEST(rec_mset_dup_nonempty) { int type; struct type1_t *elem1; struct type1_t *elem2; rec_mset_elem_t e1; rec_mset_elem_t e2; rec_mset_t mset1; rec_mset_t mset2; /* Create a mset, register a type and insert two elements of that type. */ mset1 = rec_mset_new (); fail_if (mset1 == NULL); type = rec_mset_register_type (mset1, TYPE1, type1_disp, type1_equal, type1_dup, NULL); elem1 = malloc (sizeof (struct type1_t)); fail_if (elem1 == NULL); elem1->i = 1; e1 = rec_mset_append (mset1, type, (void *) elem1, MSET_ANY); fail_if (e1 == NULL); elem2 = malloc (sizeof (struct type1_t)); fail_if (elem2 == NULL); elem2->i = 2; e2 = rec_mset_append (mset1, type, (void *) elem2, MSET_ANY); fail_if (e2 == NULL); /* Make a copy of the mset. */ mset2 = rec_mset_dup (mset1); fail_if (mset2 == NULL); fail_if (rec_mset_count (mset2, type) != 2); rec_mset_destroy (mset1); rec_mset_destroy (mset2); } END_TEST /* * Test case creation function */ TCase * test_rec_mset_dup (void) { TCase *tc = tcase_create ("rec_mset_dup"); tcase_add_test (tc, rec_mset_dup_empty); tcase_add_test (tc, rec_mset_dup_nonempty); return tc; } /* End of rec-mset-dup.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-mset/tsuite-rec-mset.c�����������������������������������������������������0000644�0000000�0000000�00000003050�14226563465�016540� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: tsuite-rec-mset.c * Date: Thu Oct 28 16:45:34 2010 * * GNU recutils - rec_mset test suite * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> extern TCase *test_rec_mset_new (void); extern TCase *test_rec_mset_dup (void); extern TCase *test_rec_mset_type_p (void); extern TCase *test_rec_mset_register_type (void); extern TCase *test_rec_mset_count (void); extern TCase *test_rec_mset_get_at (void); Suite * tsuite_rec_mset () { Suite *s; s = suite_create ("rec-mset"); suite_add_tcase (s, test_rec_mset_new ()); suite_add_tcase (s, test_rec_mset_dup ()); suite_add_tcase (s, test_rec_mset_type_p ()); suite_add_tcase (s, test_rec_mset_register_type ()); suite_add_tcase (s, test_rec_mset_count ()); suite_add_tcase (s, test_rec_mset_get_at ()); return s; } /* End of tsuite-rec-mset.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-mset/rec-mset-get-at.c�����������������������������������������������������0000644�0000000�0000000�00000011632�14226563465�016411� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-mset-get-at.c * Date: Thu Oct 28 20:35:33 2010 * * GNU recutils - Unit tests for rec_mset_get_at * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> #include <rec-mset/elem-types.h> /*- * Test: rec_mset_get_at_empty * Unit: rec_mset_get_at * Description: * + Try to get an element from an empty mset. * + * + 1. The function shall return NULL. */ START_TEST(rec_mset_get_at_empty) { rec_mset_t mset; mset = rec_mset_new (); fail_if (mset == NULL); fail_if (rec_mset_get_at (mset, MSET_ANY, 0) != NULL); rec_mset_destroy (mset); } END_TEST /*- * Test: rec_mset_get_at_existing * Unit: rec_mset_get * Description: * + Get an existing element from a mset. * + * + 1. The function shall return a pointer to * + the element. */ START_TEST(rec_mset_get_at_existing) { int type; struct type1_t *elem1, *elem1aux; rec_mset_elem_t e1; rec_mset_t mset; /* Create a mset, register a type and insert two elements of that type. */ mset = rec_mset_new (); fail_if (mset == NULL); type = rec_mset_register_type (mset, TYPE1, type1_disp, type1_equal, type1_dup, NULL); elem1 = malloc (sizeof (struct type1_t)); fail_if (elem1 == NULL); elem1->i = 1; e1 = rec_mset_append (mset, type, (void *) elem1, MSET_ANY); fail_if (e1 == NULL); /* Get the element and compare. */ elem1aux = rec_mset_get_at (mset, type, 0); fail_if (elem1aux == NULL); fail_if (elem1aux != elem1); rec_mset_destroy (mset); } END_TEST /*- * Test: rec_mset_get_at_any * Unit: rec_mset_get * Description: * + Get an existing element from a mset using * + the ANY index. * + * + 1. The function shall return a pointer to * + the element. */ START_TEST(rec_mset_get_at_any) { int type; struct type1_t *elem1, *elem1aux; rec_mset_elem_t e1; rec_mset_t mset; /* Create a mset, register a type and insert two elements of that type. */ mset = rec_mset_new (); fail_if (mset == NULL); type = rec_mset_register_type (mset, TYPE1, type1_disp, type1_equal, type1_dup, NULL); elem1 = malloc (sizeof (struct type1_t)); fail_if (elem1 == NULL); elem1->i = 1; e1 = rec_mset_append (mset, type, (void *) elem1, MSET_ANY); fail_if (e1 == NULL); /* Get the element and compare. */ elem1aux = rec_mset_get_at (mset, MSET_ANY, 0); fail_if (elem1aux == NULL); fail_if (elem1aux != elem1); rec_mset_destroy (mset); } END_TEST /*- * Test: rec_mset_get_at_invalid * Unit: rec_mset_get_at * Description: * + Get the first element of a mset by using invalid * + indexes. * + * + 1. The function shall return NULL. */ START_TEST(rec_mset_get_at_invalid) { int type; struct type1_t *elem1; rec_mset_elem_t e1; rec_mset_elem_t e1aux; rec_mset_t mset; /* Create a mset, register a type and insert two elements of that type. */ mset = rec_mset_new (); fail_if (mset == NULL); type = rec_mset_register_type (mset, TYPE1, type1_disp, type1_equal, type1_dup, NULL); elem1 = malloc (sizeof (struct type1_t)); fail_if (elem1 == NULL); elem1->i = 1; e1 = rec_mset_append (mset, type, (void *) elem1, MSET_ANY); fail_if (e1 == NULL); /* Try to get invalid elements. */ e1aux = rec_mset_get_at (mset, MSET_ANY, -10); fail_if (e1aux != NULL); e1aux = rec_mset_get_at (mset, MSET_ANY, 1000); fail_if (e1aux != NULL); rec_mset_destroy (mset); } END_TEST /* * Test case creation function */ TCase * test_rec_mset_get_at (void) { TCase *tc = tcase_create ("rec_mset_get"); tcase_add_test (tc, rec_mset_get_at_empty); tcase_add_test (tc, rec_mset_get_at_existing); tcase_add_test (tc, rec_mset_get_at_any); tcase_add_test (tc, rec_mset_get_at_invalid); return tc; } /* End of rec-mset-get-at.c */ ������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-mset/rec-mset-type-p.c�����������������������������������������������������0000644�0000000�0000000�00000006020�14226563465�016441� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-mset-type-p.c * Date: Thu Oct 28 19:55:46 2010 * * GNU recutils - rec_mset_type_p unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> #include <rec-mset/elem-types.h> /*- * Test: rec_mset_type_p_any * Unit: rec_mset_type_p * Description: * + Check for the MSET_ANY type with rec_mset_type_p. * + * + 1. The MSET_ANY type shall exist. */ START_TEST(rec_mset_type_p_any) { rec_mset_t mset; mset = rec_mset_new (); fail_if (mset == NULL); fail_if (!rec_mset_type_p (mset, MSET_ANY)); rec_mset_destroy (mset); } END_TEST /*- * Test: rec_mset_type_p_existing * Unit: rec_mset_type_p * Description: * + Register a type in an empty mset and check * + for it with rec_mset_type_p. * + * + 1. The function shall report that the type * + exists. */ START_TEST(rec_mset_type_p_existing) { int type; rec_mset_t mset; mset = rec_mset_new (); fail_if (mset == NULL); type = rec_mset_register_type (mset, TYPE1, type1_disp, type1_equal, type1_dup, NULL); fail_if (!rec_mset_type_p (mset, type)); rec_mset_destroy (mset); } END_TEST /*- * Test: rec_mset_type_p_nonexisting * Unit: rec_mset_type_p * Description: * + Register a type in an empty mset and check * + for other type with rec_mset_type_p. * + * + 1. The function shall report that the type * + does not exist. */ START_TEST(rec_mset_type_p_nonexisting) { int type; rec_mset_t mset; mset = rec_mset_new (); fail_if (mset == NULL); type = rec_mset_register_type (mset, TYPE1, type1_disp, type1_equal, type1_dup, NULL); fail_if (rec_mset_type_p (mset, type + 1)); rec_mset_destroy (mset); } END_TEST /* * Test case creation function */ TCase * test_rec_mset_type_p (void) { TCase *tc = tcase_create ("rec_mset_type_p"); tcase_add_test (tc, rec_mset_type_p_any); tcase_add_test (tc, rec_mset_type_p_existing); tcase_add_test (tc, rec_mset_type_p_nonexisting); return tc; } /* End of rec-mset-type-p.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/utils/�������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�013046� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/utils/Makefile.am��������������������������������������������������������������0000644�0000000�0000000�00000002220�14226563465�015015� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile for torture/utils. # # Copyright (C) 2010-2022 Jose E. Marchesi. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. TESTS = recinf.sh \ recsel.sh \ recdel.sh \ recins.sh \ recset.sh \ recfix.sh \ recfmt.sh \ rec2csv.sh \ csv2rec.sh EXTRA_DIST = $(TESTS) testutils.sh TESTS_ENVIRONMENT = top_srcdir=$(top_srcdir) builddir=$(builddir) \ PATH=$(srcdir)$(PATH_SEPARATOR)$(top_builddir)/utils$(PATH_SEPARATOR)$$PATH perf: $(TESTS_ENVIRONMENT) srcdir=$(srcdir) $(srcdir)/p-recsel.sh # End of Makefile.am ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/utils/recins.sh����������������������������������������������������������������0000755�0000000�0000000�00000020473�14226563465�014615� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # recins.sh - System tests for recins. # # Copyright (C) 2010-2022 Jose E. Marchesi. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Initialization # : ${srcdir=.} . $srcdir/testutils.sh test_init "recins" # # Create input files. # test_declare_input_file empty-file \ '' test_declare_input_file one-record \ 'field1: value11 field2: value12 field3: value13 ' test_declare_input_file multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' test_declare_input_file multiple-records-case \ 'field1: Value11 field2: Value12 field3: Value13 field1: Value21 field2: Value22 field3: Value23 field1: Value31 field2: Value32 field3: Value33 ' test_declare_input_file multiple-named \ '%rec: Type1 field1: value11 field2: value12 field3: value13 %rec: Type2 field1: value21 field2: value22 field3: value23 %rec: Type3 field1: value31 field2: value32 field3: value33 ' test_declare_input_file integrity \ '%rec: Integrity %type: Id int Id: 0 ' test_declare_input_file only-descriptor \ '%rec: foo ' test_declare_input_file comments-and-descriptor \ '# comment 1 # comment 2 %rec: foo ' test_declare_input_file external-descriptor-types \ '%rec: Patata %type: foo int ' test_declare_input_file external-descriptor \ '%rec: Patata recins-external-descriptor-types.in foo: 10 ' test_declare_input_file auto-fields \ '%rec: foo %type: myint int %type: myrange range 0 10 %auto: myint myrange myint: 10 myrange: 0 ' test_declare_input_file auto-notype \ '%rec: foo %auto: key key: 12 ' test_declare_input_file auto-fields-several \ '%rec: foo %type: myint int %type: myrange range 0 10 %auto: myint %auto: myrange myint: 10 myrange: 0 ' test_declare_input_file auto-range-overflow \ '%rec: foo %type: myrange range 0 10 %auto: myrange myrange: 10 ' test_declare_input_file marks \ '%rec: Marks %type: Class enum A B C Name: Alfred Class: A Name: Bertram Class: B ' # # Declare tests. # test_tool recins-empty ok \ recins \ '-f field1 -v "value1"' \ empty-file \ 'field1: value1 ' test_tool recins-empty-with-type ok \ recins \ '-t Type1 -f field1 -v "value1"' \ empty-file \ '%rec: Type1 field1: value1 ' test_tool recins-several-fields ok \ recins \ '-f field1 -v "value1" -f field2 -v "value2"' \ empty-file \ 'field1: value1 field2: value2 ' test_tool recins-append ok \ recins \ '-f afield1 -v "appended1"' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 afield1: appended1 ' test_tool recins-append-in-type ok \ recins \ '-t Type2 -f afield1 -v "appended1"' \ multiple-named \ '%rec: Type1 field1: value11 field2: value12 field3: value13 %rec: Type2 field1: value21 field2: value22 field3: value23 afield1: appended1 %rec: Type3 field1: value31 field2: value32 field3: value33 ' test_tool recins-append-new-type ok \ recins \ '-t NewType -f afield1 -v "appended1"' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 %rec: NewType afield1: appended1 ' test_tool recins-replace ok \ recins \ '-n 1 -f afield1 -v "replaced"' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 afield1: replaced field1: value31 field2: value32 field3: value33 ' test_tool recins-replace-range ok \ recins \ '-n 1-2 -f afield1 -v "replaced"' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 afield1: replaced afield1: replaced ' test_tool recins-replace-several-indexes ok \ recins \ '-n 0,2 -f afield1 -v "replaced"' \ multiple-records \ 'afield1: replaced field1: value21 field2: value22 field3: value23 afield1: replaced ' test_tool recins-replace-sex ok \ recins \ '-e "field2 = '\''value22'\''" -f afield1 -v "replaced"' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 afield1: replaced field1: value31 field2: value32 field3: value33 ' test_tool recins-violate-restrictions xfail \ recins \ '-t Integrity -f Id -v "not a number"' \ integrity test_tool recins-force-restrictions ok \ recins \ '--force -t Integrity -f Id -v "not a number"' \ integrity \ '%rec: Integrity %type: Id int Id: 0 Id: not a number ' test_tool recins-only-descriptor ok \ recins \ '' \ only-descriptor \ '%rec: foo ' test_tool recins-comments-and-descriptor ok \ recins \ '' \ comments-and-descriptor \ '# comment 1 # comment 2 %rec: foo ' test_tool recins-external-descriptor ok \ recins \ '-t Patata -f foo -v 20' \ external-descriptor \ '%rec: Patata recins-external-descriptor-types.in foo: 10 foo: 20 ' test_tool recins-auto-fields ok \ recins \ '-t foo -f foo -v bar' \ auto-fields \ '%rec: foo %type: myint int %type: myrange range 0 10 %auto: myint myrange myint: 10 myrange: 0 myint: 11 myrange: 1 foo: bar ' test_tool recins-auto-notype ok \ recins \ '-t foo -f foo -v bar' \ auto-notype \ '%rec: foo %auto: key key: 12 key: 13 foo: bar ' test_tool recins-auto-fields-several ok \ recins \ '-t foo -f foo -v bar' \ auto-fields-several \ '%rec: foo %type: myint int %type: myrange range 0 10 %auto: myint %auto: myrange myint: 10 myrange: 0 myint: 11 myrange: 1 foo: bar ' test_tool recins-no-auto ok \ recins \ '--no-auto -t foo -f foo -v bar' \ auto-fields \ '%rec: foo %type: myint int %type: myrange range 0 10 %auto: myint myrange myint: 10 myrange: 0 foo: bar ' test_tool recins-auto-range-overflow xfail \ recins \ '-t foo -f foo -v bar' \ auto-range-overflow test_tool recins-auto-range-overflow-force ok \ recins \ '--force -t foo -f foo -v bar' \ auto-range-overflow \ '%rec: foo %type: myrange range 0 10 %auto: myrange myrange: 10 myrange: 11 foo: bar ' test_tool recins-quick-simple ok \ recins \ '-q value22 -f foo -v bar' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 foo: bar field1: value31 field2: value32 field3: value33 ' test_tool recins-random-all ok \ recins \ '-m 0 -f foo -v bar' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 foo: bar ' test_tool recins-random-one ok \ recins \ '-m 1 -f foo -v bar' \ one-record \ 'foo: bar ' test_tool recins-case-insensitive ok \ recins \ '-i -q value22 -f foo -v bar' \ multiple-records-case \ 'field1: Value11 field2: Value12 field3: Value13 foo: bar field1: Value31 field2: Value32 field3: Value33 ' test_tool recins-case-sensitive ok \ recins \ '-q value22 -f foo -v bar' \ multiple-records-case \ 'field1: Value11 field2: Value12 field3: Value13 field1: Value21 field2: Value22 field3: Value23 field1: Value31 field2: Value32 field3: Value33 ' test_tool recins-insert-default-type ok \ recins \ '-f Name -v Xavier -f Class -v X' \ marks \ 'Name: Xavier Class: X %rec: Marks %type: Class enum A B C Name: Alfred Class: A Name: Bertram Class: B ' # # Cleanup. # test_cleanup exit $? # End of recins.sh �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/utils/recfmt.sh����������������������������������������������������������������0000755�0000000�0000000�00000006241�14226563465�014607� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # recfmt.sh - System tests for recfmt. # # Copyright (C) 2010-2022 Jose E. Marchesi. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Initialization # : ${srcdir=.} . $srcdir/testutils.sh test_init "recfmt" # # Create input files. # test_declare_input_file empty-file '' test_declare_input_file multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field2: value22bis field3: value23 field1: value31 field2: value32 field3: value33 ' # # Declare tests # # Apply an empty template. test_tool recfmt-empty-template ok \ recfmt \ '""' \ multiple-records \ '' # Apply a template to an empty file. test_tool recfmt-empty-file ok \ recfmt \ '"a template {{foo}}"' \ empty-file \ '' # Apply a template affecting all the records. test_tool recfmt-all-records ok \ recfmt \ '"foo {{field3}} bar "' \ multiple-records \ 'foo value13 bar foo value23 bar foo value33 bar ' # Apply a template with a slot starting at 0. test_tool recfmt-slot-beginning ok \ recfmt \ '"{{field1}} bar "' \ multiple-records \ 'value11 bar value21 bar value31 bar ' # Apply a template without prolog. test_tool recfmt-no-prolog ok \ recfmt \ '"foo {{field1}} "' \ multiple-records \ 'foo value11 foo value21 foo value31 ' # Apply a template with subscripts. test_tool recfmt-subscripts ok \ recfmt \ '"foo {{field2[1]}} bar "' \ multiple-records \ 'foo bar foo value22bis bar foo bar ' # Apply a template with non-matching records. test_tool recfmt-non-matching-records ok \ recfmt \ '"{{field2[1]}}"' \ multiple-records \ 'value22bis' # Apply a template with string concatenation. test_tool recfmt-concat ok \ recfmt \ '"{{field1 & '\'' '\'' & field2 & field3}} "' \ multiple-records \ 'value11 value12value13 value21 value22value23 value31 value32value33 ' # Apply a template containing curly-brace markup. test_tool recfmt-curly ok \ recfmt \ '"\def\field1{{{field1}}} "' \ multiple-records \ '\def\field1{value11} \def\field1{value21} \def\field1{value31} ' # Try to apply an empty slot. test_tool recfmt-empty-slot xfail \ recfmt \ '"{{field2[1]}}{{}} "' \ multiple-records # Try to apply an invalid slot. test_tool recfmt-invalid-slot xfail \ recfmt \ '"invalid slot: {{in#alid[}} "' \ multiple-records # # Cleanup # test_cleanup exit $? # End of recfmt.sh ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/utils/recinf.sh����������������������������������������������������������������0000755�0000000�0000000�00000004577�14226563465�014607� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # recinf.sh - System tests for recinf. # # Copyright (C) 2010-2022 Jose E. Marchesi. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Initialization # : ${srcdir=.} . $srcdir/testutils.sh test_init "recinf" # # Create input files. # test_declare_input_file empty-file '' test_declare_input_file invalid \ 'foo: bar bar: baz + jo ju: bar ' test_declare_input_file one-record \ 'field1: value1 field2: value2 field3: value3 ' test_declare_input_file multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' test_declare_input_file multiple-named \ '%rec: Type1 field1: value11 field2: value12 field3: value13 %rec: Type2 field1: value21 field2: value22 field3: value23 %rec: Type3 field1: value31 field2: value32 field3: value33 ' # # Declare tests. # test_tool recinf-empty ok \ recinf \ '' \ empty-file \ '' test_tool recinf-one-record ok \ recinf \ '' \ one-record \ '1 ' test_tool recinf-multiple-records ok \ recinf \ '' \ multiple-records \ '3 ' test_tool recinf-multiple-named ok \ recinf \ '' \ multiple-named \ '1 Type1 1 Type2 1 Type3 ' test_tool recinf-multiple-named-descriptors ok \ recinf \ '-d' \ multiple-named \ '%rec: Type1 %rec: Type2 %rec: Type3 ' test_tool recinf-multiple-types ok \ recinf \ '-t Type2' \ multiple-named \ '1 Type2 ' test_tool recinf-names-only ok \ recinf \ '-n' \ multiple-named \ 'Type1 Type2 Type3 ' test_tool recinf-invalid xfail \ recinf \ '' \ invalid # # Cleanup # test_cleanup exit $? # End of recinf.sh ���������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/utils/recdel.sh����������������������������������������������������������������0000755�0000000�0000000�00000011355�14226563465�014567� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # recdel.sh - System tests for recdel. # # Copyright (C) 2010-2022 Jose E. Marchesi. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Initialization # : ${srcdir=.} . $srcdir/testutils.sh test_init "recdel" # # Create input files. # test_declare_input_file multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' test_declare_input_file multiple-named \ '%rec: Type1 field1: value11 field2: value12 field3: value13 %rec: Type2 field1: value21 field2: value22 field3: value23 %rec: Type3 field1: value31 field2: value32 field3: value33 ' test_declare_input_file integrity-fail \ '%rec: IntegrityFail %type: Id int Id: foo Id: bar ' test_declare_input_file external-types \ '%rec: External %type: Id int ' test_declare_input_file external \ '%rec: External external-types.in Id: foo Id: bar ' # # Declare tests. # test_tool recdel-first ok \ recdel \ '-n 0' \ multiple-records \ 'field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' test_tool recdel-second ok \ recdel \ '-n 1' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value31 field2: value32 field3: value33 ' test_tool recdel-last ok \ recdel \ '-n 2' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 ' test_tool recdel-index-list ok \ recdel \ '-n 0,2' \ multiple-records \ 'field1: value21 field2: value22 field3: value23 ' test_tool recdel-case-insensitive ok \ recdel \ '-i -q Value22' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value31 field2: value32 field3: value33 ' test_tool recdel-case-sensitive ok \ recdel \ '-q Value22' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' test_tool recdel-comment ok \ recdel \ '-n 1 -c' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 #field1: value21 #field2: value22 #field3: value23 field1: value31 field2: value32 field3: value33 ' test_tool recdel-sex ok \ recdel \ '-e "field2 = '\''value22'\''"' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value31 field2: value32 field3: value33 ' test_tool recdel-try-type xfail \ recdel \ '-t Type2' \ multiple-named test_tool recdel-type ok \ recdel \ '--force -t Type2' \ multiple-named \ '%rec: Type1 field1: value11 field2: value12 field3: value13 %rec: Type2 %rec: Type3 field1: value31 field2: value32 field3: value33 ' test_tool recdel-request-all xfail \ recdel \ '' \ multiple-records test_tool recdel-force-all ok \ recdel \ '--force' \ multiple-records \ '' test_tool recdel-integrity-fail xfail \ recdel \ '-t IntegrityFail -n 0' \ integrity-fail test_tool recdel-force-restrictions ok \ recdel \ '--force -t IntegrityFail -n 0' \ integrity-fail \ '%rec: IntegrityFail %type: Id int Id: bar ' test_tool recdel-external-fail xfail \ recdel \ '-t External -n 0' \ external test_tool recdel-no-external ok \ recdel \ '--no-external -t External -n 0' \ external \ '%rec: External external-types.in Id: bar ' test_tool recdel-quick-simple ok \ recdel \ '-q value22' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value31 field2: value32 field3: value33 ' test_tool recdel-random-all xfail \ recdel \ '-m 0' \ multiple-records test_tool recdel-random-all-force ok \ recdel \ '-m 0 --force' \ multiple-records \ '' # # Cleanup # test_cleanup exit $? # End of recdel.sh �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/utils/testutils.sh�������������������������������������������������������������0000644�0000000�0000000�00000012701�14226563465�015362� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # testutils.sh - Misc utilities for testing the GNU recutils. # # Copyright (C) 2010-2022 Jose E. Marchesi. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. : ${builddir=.} . $builddir/config.sh # Create an input file. # # $1 => Name of the file. # $2 => Contents of the file. test_declare_input_file () { # Check parameters. if test "$#" -ne "2" then echo "error: testutils: invalid parameters to test_declare_input_file" exit 1 fi filename="${test_suite}-$1.in" contents="$2" # Create the input file. printf "%s" "$contents" > $filename # Add the file to the global list of temp files. test_tmpfiles="$test_tmpfiles $filename" } # Generate an input file. # # $1 => Name of the file. # $2 => Number of records. # $3 => Number of fields in each record. test_gen_input_file () { # Check parameters. if test "$#" -ne "3" then echo "error: testutils: invalid parameters to test_gen_input_file" exit 1 fi filename="$1.in" numrecords="$2" numfields="$3" # Create the contents of the file if it does not already exist. # This is important, since the generated test files will usually # be very big. echo -n " Creating input file $filename ..." if test -f $filename; then echo " skipped" else recno=0 while test "$recno" -lt "$numrecords" do fieldno=0 while test "$fieldno" -lt "$numfields" do echo "field$fieldno: value$recno$fieldno" >> $filename fieldno=`expr $fieldno + 1` done echo "" >> $filename recno=`expr $recno + 1` done echo " done" fi } # Initialize the testing environment. # # $1 => Name of the test suite. test_init () { if test "$#" -ne "1"; then echo "error: testutils: invalid parameters to test_init" exit 1 fi test_suite=$1 test_result="0" trap 'rm -fr $test_tmpfiles' EXIT 1 2 3 15 echo "Running $test_suite test(s): " } # Delete temporary files and other cleanup. # # No parameters. test_cleanup () { rm -fr $test_tmpfiles return $test_result } # Test a recutil. # # $1 => Test name. # $2 => Expected result: ok, xfail, perf # $3 => Utility to test. # $4 => Parameters. # $5 => Input file to use. # $6 => Expected result. Only for 'ok' tests. test_tool () { # Check parameters. if test "$#" -lt "2" || \ { test "$2" != "ok" && test "$2" != "xfail" && test "$2" != "perf"; } || \ { test "$2" = "ok" && test "$#" -ne "6"; } || \ { test "$2" = "perf" && test "$#" -ne "5"; } || \ { test "$2" = "xfail" && test "$#" -ne "5"; } then echo "error: testutils: invalid parameters to test_tool" exit 1 fi printf " %s " $1 status=$2 utility=$3$EXEEXT parameters=$4 input_file="${test_suite}-$5.in" ok_file="$1.ok" output_file="$1.out" error_file="$1.err" timing_file="$1.tim" postprocessed_output_file="$1.put" expected=$6 test_tmpfiles="$test_tmpfiles $output_file $ok_file" if test "$status" = "perf"; then test_tmpfiles="$test_tmpfiles $timing_file" fi # Run the tool. if test "$status" = "perf"; then eval "cat $input_file | time -f %E -o $timing_file \ $utility $parameters > $output_file 2> $error_file" else eval "cat $input_file | $utility $parameters > $output_file 2> $error_file" fi res=$? if test "$status" = "ok" || test "$status" = "perf" then if test "$res" -ne "0" then printf "%s (see %s)\n" "error" "$error_file" else if test "$status" = "ok"; then # Check for the result in output_file. LC_ALL=C tr -d '\r' < $output_file > $postprocessed_output_file printf "%s" "$expected" > $ok_file cmp $ok_file $postprocessed_output_file > /dev/null 2>&1 res=$? if test "$res" -eq "0" then echo $status else printf "%s (see %s)\n" "fail" "$1.diff" diff $ok_file $postprocessed_output_file > $1.diff fi rm $error_file $postprocessed_output_file else elapsed_time=`cat $timing_file` echo $elapsed_time rm $error_file fi fi fi if test "$status" = "xfail" then if test "$res" -eq "0" then echo "error (expected failure)" res=1 else echo $status # Don't accumulate any error. res=0 fi rm $error_file fi # Accumulate the error. test_result=`expr $test_result + $res` } PATH=$srcdir:$PATH export PATH # End of testutils.sh ���������������������������������������������������������������recutils-1.9/torture/utils/recset.sh����������������������������������������������������������������0000755�0000000�0000000�00000020255�14226563465�014615� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # recset.sh - System tests for recset. # # Copyright (C) 2010-2022 Jose E. Marchesi. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Initialization # : ${srcdir=.} . $srcdir/testutils.sh test_init "recset" # # Create input files. # test_declare_input_file one-record \ 'field1: value1 field2: value2 field3: value3 ' test_declare_input_file repeated-fields \ 'field1: value1 field2: value21 field2: value22 field3: value3 ' test_declare_input_file integrity \ '%rec: Integrity %key: Id Id: 10 other: field ' test_declare_input_file renames \ '%rec: Type1 %key: field1 %type: field2 line %mandatory: field2 %sort: field2 field1: field11 field2: field121 field2: field122 field2: field123 field3: field13 ' test_declare_input_file renames-multiple \ '%rec: Type1 %key: field1 %type: field2 line %mandatory: field2 %sort: field2 field1: field11 field2: field121 field2: field122 field2: field123 field3: field13 field1: field21 field2: field221 field2: field222 field2: field223 field3: field23 ' test_declare_input_file multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' # # Declare tests. # test_tool recset-append-field ok \ recset \ '-n 0 -f foo -a bar' \ one-record \ 'field1: value1 field2: value2 field3: value3 foo: bar ' test_tool recset-set-field ok \ recset \ '-n 0 -f field2 -s bar' \ one-record \ 'field1: value1 field2: bar field3: value3 ' test_tool recset-delete-field ok \ recset \ '-n 0 -f field2 -d' \ one-record \ 'field1: value1 field3: value3 ' test_tool recset-comment-out-field ok \ recset \ '-n 0 -f field2 -c' \ one-record \ 'field1: value1 #field2: value2 field3: value3 ' test_tool recset-delete-non-existant ok \ recset \ '-n 0 -f nonexistant -d' \ one-record \ 'field1: value1 field2: value2 field3: value3 ' test_tool recset-comment-out-fex-first ok \ recset \ '-n 0 -f field2[0] -c' \ repeated-fields \ 'field1: value1 #field2: value21 field2: value22 field3: value3 ' test_tool recset-comment-out-fex-last ok \ recset \ '-n 0 -f field2[1] -c' \ repeated-fields \ 'field1: value1 field2: value21 #field2: value22 field3: value3 ' test_tool recset-violate-integrity xfail \ recset \ '-n 0 -f Id -d' \ integrity test_tool recset-force-integrity ok \ recset \ '--force -n 0 -f Id -d' \ integrity \ '%rec: Integrity %key: Id other: field ' test_tool recset-rename ok \ recset \ '--force -t Type1 -n 0 -f field2 -r foo' \ renames \ '%rec: Type1 %key: field1 %type: field2 line %mandatory: field2 %sort: field2 field1: field11 foo: field121 foo: field122 foo: field123 field3: field13 ' test_tool recset-rename-first ok \ recset \ '--force -t Type1 -n 0 -f field2[0] -r foo' \ renames \ '%rec: Type1 %key: field1 %type: field2 line %mandatory: field2 %sort: field2 field1: field11 foo: field121 field2: field122 field2: field123 field3: field13 ' test_tool recset-rename-middle ok \ recset \ '--force -t Type1 -n 0 -f field2[1] -r foo' \ renames \ '%rec: Type1 %key: field1 %type: field2 line %mandatory: field2 %sort: field2 field1: field11 field2: field121 foo: field122 field2: field123 field3: field13 ' test_tool recset-rename-last ok \ recset \ '--force -t Type1 -n 0 -f field2[2] -r foo' \ renames \ '%rec: Type1 %key: field1 %type: field2 line %mandatory: field2 %sort: field2 field1: field11 field2: field121 field2: field122 foo: field123 field3: field13 ' test_tool recset-rename-range-first ok \ recset \ '--force -t Type1 -n 0 -f field2[0-1] -r foo' \ renames \ '%rec: Type1 %key: field1 %type: field2 line %mandatory: field2 %sort: field2 field1: field11 foo: field121 foo: field122 field2: field123 field3: field13 ' test_tool recset-rename-range-last ok \ recset \ '--force -t Type1 -n 0 -f field2[1-2] -r foo' \ renames \ '%rec: Type1 %key: field1 %type: field2 line %mandatory: field2 %sort: field2 field1: field11 field2: field121 foo: field122 foo: field123 field3: field13 ' test_tool recset-rename-range-all ok \ recset \ '--force -t Type1 -n 0 -f field2[0-2] -r foo' \ renames \ '%rec: Type1 %key: field1 %type: field2 line %mandatory: field2 %sort: field2 field1: field11 foo: field121 foo: field122 foo: field123 field3: field13 ' test_tool recset-rename-all ok \ recset \ '--force -t Type1 -e "1" -f field2[0-2] -r foo' \ renames-multiple \ '%rec: Type1 %key: field1 %type: field2 line %mandatory: field2 %sort: field2 field1: field11 foo: field121 foo: field122 foo: field123 field3: field13 field1: field21 foo: field221 foo: field222 foo: field223 field3: field23 ' test_tool recset-rename-all-descriptor ok \ recset \ '--force -t Type1 -f field2[0-2] -r foo' \ renames-multiple \ '%rec: Type1 %key: field1 %type: foo line %mandatory: foo %sort: foo field1: field11 foo: field121 foo: field122 foo: field123 field3: field13 field1: field21 foo: field221 foo: field222 foo: field223 field3: field23 ' test_tool recset-rename-all-key ok \ recset \ '--force -t Type1 -f field1 -r newkey' \ renames-multiple \ '%rec: Type1 %key: newkey %type: field2 line %mandatory: field2 %sort: field2 newkey: field11 field2: field121 field2: field122 field2: field123 field3: field13 newkey: field21 field2: field221 field2: field222 field2: field223 field3: field23 ' test_tool recset-rename-invalid-fex xfail \ recset \ '--force -t Type1 -f field1,field2 -r foo' \ renames-multiple test_tool recset-set-add-1 ok \ recset \ '-f field2 -S foo' \ one-record \ 'field1: value1 field2: foo field3: value3 ' test_tool recset-set-add-2 ok \ recset \ '-f field4 -S foo' \ one-record \ 'field1: value1 field2: value2 field3: value3 field4: foo ' test_tool recset-set-add-3 ok \ recset \ '-f field2,field4 -S foo' \ one-record \ 'field1: value1 field2: foo field3: value3 field4: foo ' test_tool recset-quick-simple ok \ recset \ '-q value22 -f field1 -s foo' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: foo field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' test_tool recset-set-field-in-range ok \ recset \ '-n 0-1 -f field2 -s XXX' \ multiple-records \ 'field1: value11 field2: XXX field3: value13 field1: value21 field2: XXX field3: value23 field1: value31 field2: value32 field3: value33 ' test_tool recset-set-field-in-several-indexes ok \ recset \ '-n 0,2 -f field2 -s XXX' \ multiple-records \ 'field1: value11 field2: XXX field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: XXX field3: value33 ' test_tool recset-random-all ok \ recset \ '-m 0 -f field2 -s XXX' \ multiple-records \ 'field1: value11 field2: XXX field3: value13 field1: value21 field2: XXX field3: value23 field1: value31 field2: XXX field3: value33 ' test_tool recset-random-one ok \ recset \ '-m 1 -f field2 -s XXX' \ one-record \ 'field1: value1 field2: XXX field3: value3 ' # # Cleanup. # test_cleanup exit $? # End of recset.sh ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/utils/rec2csv.sh���������������������������������������������������������������0000755�0000000�0000000�00000006445�14226563465�014704� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # rec2csv.sh - System tests for rec2csv. # # Copyright (C) 2011-2022 Jose E. Marchesi. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Initialization # : ${srcdir=.} . $srcdir/testutils.sh test_init "rec2csv" # # Create input files. # test_declare_input_file default-records \ 'a: a1 b: b1 c: c1 a: a2 b: b2 c: c2 ' test_declare_input_file missing-fields \ 'a: a1 b: b1 c: c1 a: a2 c: c2 b: b3 c: c3 a: a4 b: b4 ' test_declare_input_file missing-fields-first \ 'a: a1 c: c1 a: a2 b: b2 c: c2 ' test_declare_input_file multi-line \ 'a: foo + bar + baz b: jo + ju + je ' test_declare_input_file escape-quotes \ 'a: foo"bar b: bar"baz ' test_declare_input_file repeated-fields \ 'a: a11 a: a12 a: a21 a: a22 ' test_declare_input_file repeated-missing \ 'a: a11 a: a12 b: b2 a: a21 ' test_declare_input_file several-types \ 'a: a_none b: b_none %rec: foo a: a_foo b: b_foo %rec: bar a: a_bar b: b_bar ' test_declare_input_file sort \ '%rec: Sorted %sort: foo %type: bar int foo: b bar: 100 foo: a bar: 50 foo: c bar: 0 ' # # Declare tests. # test_tool rec2csv-default-record ok \ rec2csv \ '' \ default-records \ '"a","b","c" "a1","b1","c1" "a2","b2","c2" ' test_tool rec2csv-missing-fields ok \ rec2csv \ '' \ missing-fields \ '"a","b","c" "a1","b1","c1" "a2",,"c2" ,"b3","c3" "a4","b4", ' test_tool rec2csv-missing-fields-first ok \ rec2csv \ '' \ missing-fields-first \ '"a","c","b" "a1","c1", "a2","c2","b2" ' test_tool rec2csv-multi-line ok \ rec2csv \ '' \ multi-line \ '"a","b" "foo bar baz","jo ju je" ' test_tool rec2csv-escape-quotes ok \ rec2csv \ '' \ escape-quotes \ '"a","b" "foo""bar","bar""baz" ' test_tool rec2csv-repeated-fields ok \ rec2csv \ '' \ repeated-fields \ '"a","a_2" "a11","a12" "a21","a22" ' test_tool rec2csv-repeated-missing ok \ rec2csv \ '' \ repeated-missing \ '"a","a_2","b" "a11","a12", "a21",,"b2" ' test_tool rec2csv-default-type ok \ rec2csv \ '' \ several-types \ '"a","b" "a_none","b_none" ' test_tool rec2csv-with-type ok \ rec2csv \ '-t bar' \ several-types \ '"a","b" "a_bar","b_bar" ' test_tool rec2csv-nonexistant-type ok \ rec2csv \ '-t jorl' \ several-types \ '' test_tool rec2csv-sort ok \ rec2csv \ '' \ sort \ '"foo","bar" "a","50" "b","100" "c","0" ' test_tool rec2csv-sort-field ok \ rec2csv \ '-S bar' \ sort \ '"foo","bar" "c","0" "a","50" "b","100" ' # # Cleanup # test_cleanup exit $? # End of rec2csv.sh ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/utils/Makefile.in��������������������������������������������������������������0000644�0000000�0000000�00000257115�14226573151�015036� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Makefile for torture/utils. # # Copyright (C) 2010-2022 Jose E. Marchesi. # # This program is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 3, or (at your option) # any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = torture/utils ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 \ $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/calloc.m4 \ $(top_srcdir)/m4/canonicalize.m4 \ $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/clock_time.m4 \ $(top_srcdir)/m4/close.m4 $(top_srcdir)/m4/closedir.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/copy-file-range.m4 \ $(top_srcdir)/m4/copy-file.m4 $(top_srcdir)/m4/d-ino.m4 \ $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup.m4 \ $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eaccess.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ $(top_srcdir)/m4/explicit_bzero.m4 \ $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 \ $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fchdir.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \ $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \ $(top_srcdir)/m4/filenamecat.m4 \ $(top_srcdir)/m4/findprog-in.m4 $(top_srcdir)/m4/flexmember.m4 \ $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/flock.m4 \ $(top_srcdir)/m4/floor.m4 $(top_srcdir)/m4/fopen.m4 \ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ $(top_srcdir)/m4/fseek.m4 $(top_srcdir)/m4/fseeko.m4 \ $(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \ $(top_srcdir)/m4/fstatat.m4 $(top_srcdir)/m4/ftell.m4 \ $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ $(top_srcdir)/m4/getcwd-abort-bug.m4 \ $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \ $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \ $(top_srcdir)/m4/getpass.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/getrandom.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/group-member.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexpl.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrlen.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/minmax.m4 \ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkostemp.m4 \ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \ $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/opendir.m4 \ $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ $(top_srcdir)/m4/posix_spawn_faction_addchdir.m4 \ $(top_srcdir)/m4/printf-frexp.m4 \ $(top_srcdir)/m4/printf-frexpl.m4 \ $(top_srcdir)/m4/printf-posix-rpl.m4 \ $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readdir.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/remove.m4 \ $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rewinddir.m4 \ $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/safe-read.m4 \ $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/save-cwd.m4 \ $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ $(top_srcdir)/m4/selinux-context-h.m4 \ $(top_srcdir)/m4/selinux-label-h.m4 \ $(top_srcdir)/m4/selinux-selinux-h.m4 \ $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/setlocale_null.m4 \ $(top_srcdir)/m4/sh-filename.m4 \ $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ $(top_srcdir)/m4/signal_h.m4 \ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/stdio_h.m4 \ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/stpcpy.m4 \ $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ $(top_srcdir)/m4/sys_random_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink.m4 \ $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utime.m4 \ $(top_srcdir)/m4/utime_h.m4 $(top_srcdir)/m4/utimens.m4 \ $(top_srcdir)/m4/utimes.m4 \ $(top_srcdir)/m4/vasnprintf-posix.m4 \ $(top_srcdir)/m4/vasnprintf.m4 \ $(top_srcdir)/m4/vasprintf-posix.m4 \ $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ $(top_srcdir)/m4/vfprintf-posix.m4 \ $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/write.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/year2038.m4 \ $(top_srcdir)/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = config.sh CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) AM_RECURSIVE_TARGETS = check recheck TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.sh.in \ $(top_srcdir)/build-aux/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_HEADERS = @BASH_HEADERS@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CURLLIBS = @CURLLIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ FLOOR_LIBM = @FLOOR_LIBM@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POSIX_SPAWN = @GL_GNULIB_POSIX_SPAWN@ GL_GNULIB_POSIX_SPAWNATTR_DESTROY = @GL_GNULIB_POSIX_SPAWNATTR_DESTROY@ GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ GL_GNULIB_POSIX_SPAWNATTR_INIT = @GL_GNULIB_POSIX_SPAWNATTR_INIT@ GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ GL_GNULIB_POSIX_SPAWNP = @GL_GNULIB_POSIX_SPAWNP@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIME = @GL_GNULIB_UTIME@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FLOCK = @HAVE_FLOCK@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SPAWN_H = @HAVE_SPAWN_H@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIME = @HAVE_UTIME@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_UTIME_H = @HAVE_UTIME_H@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGCRYPT = @LIBGCRYPT@ LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIB_ACL = @LIB_ACL@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ LIB_EACCESS = @LIB_EACCESS@ LIB_GETRANDOM = @LIB_GETRANDOM@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELINUX = @LIB_SELINUX@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBGCRYPT = @LTLIBGCRYPT@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBREADLINE = @LTLIBREADLINE@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MDBLIBS = @MDBLIBS@ MDB_DATETIME = @MDB_DATETIME@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_UTIME_H = @NEXT_AS_FIRST_DIRECTIVE_UTIME_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_SPAWN_H = @NEXT_SPAWN_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_UTIME_H = @NEXT_UTIME_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PARSE_DATETIME_BISON = @PARSE_DATETIME_BISON@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIME = @REPLACE_UTIME@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ SELINUX_LABEL_H = @SELINUX_LABEL_H@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_ACL = @USE_ACL@ USE_NLS = @USE_NLS@ UUIDLIBS = @UUIDLIBS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ crypt_support = @crypt_support@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ have_uuid = @have_uuid@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ TESTS = recinf.sh \ recsel.sh \ recdel.sh \ recins.sh \ recset.sh \ recfix.sh \ recfmt.sh \ rec2csv.sh \ csv2rec.sh EXTRA_DIST = $(TESTS) testutils.sh TESTS_ENVIRONMENT = top_srcdir=$(top_srcdir) builddir=$(builddir) \ PATH=$(srcdir)$(PATH_SEPARATOR)$(top_builddir)/utils$(PATH_SEPARATOR)$$PATH all: all-am .SUFFIXES: .SUFFIXES: .log .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu torture/utils/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu torture/utils/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.sh: $(top_builddir)/config.status $(srcdir)/config.sh.in cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs tags TAGS: ctags CTAGS: cscope cscopelist: # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? recinf.sh.log: recinf.sh @p='recinf.sh'; \ b='recinf.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) recsel.sh.log: recsel.sh @p='recsel.sh'; \ b='recsel.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) recdel.sh.log: recdel.sh @p='recdel.sh'; \ b='recdel.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) recins.sh.log: recins.sh @p='recins.sh'; \ b='recins.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) recset.sh.log: recset.sh @p='recset.sh'; \ b='recset.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) recfix.sh.log: recfix.sh @p='recfix.sh'; \ b='recfix.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) recfmt.sh.log: recfmt.sh @p='recfmt.sh'; \ b='recfmt.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) rec2csv.sh.log: rec2csv.sh @p='rec2csv.sh'; \ b='rec2csv.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) csv2rec.sh.log: csv2rec.sh @p='csv2rec.sh'; \ b='csv2rec.sh'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-am all-am: Makefile installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: check-am install-am install-strip .PHONY: all all-am check check-TESTS check-am clean clean-generic \ clean-libtool cscopelist-am ctags-am distclean \ distclean-generic distclean-libtool distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am recheck tags-am \ uninstall uninstall-am .PRECIOUS: Makefile perf: $(TESTS_ENVIRONMENT) srcdir=$(srcdir) $(srcdir)/p-recsel.sh # End of Makefile.am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/utils/config.sh.in�������������������������������������������������������������0000644�0000000�0000000�00000001543�14226563465�015176� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # config.sh.in - Configuration for testutils # # Copyright (C) 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. # Marchesi. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. crypt_support=@crypt_support@ uuid_support=@have_uuid@ EXEEXT=@EXEEXT@ # End of config.sh.in �������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/utils/recfix.sh����������������������������������������������������������������0000755�0000000�0000000�00000104315�14226563465�014610� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # recfix.sh - System tests for recfix. # # Copyright (C) 2010-2022 Jose E. Marchesi. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Initialization # : ${srcdir=.} : ${builddir=.} : ${crypt_support=yes} : ${uuid_support=yes} . $builddir/config.sh . $srcdir/testutils.sh test_init "recfix" # # Create input files. # test_declare_input_file type-rec-valid \ '%rec: Package %type: Maintainer rec Hacker Name: GNU recutils Maintainer: jemarch@gnu.org ' test_declare_input_file type-rec-invalid-empty \ '%rec: Package %type: Maintainer rec ' test_declare_input_file type-rec-invalid-malformed \ '%rec: Package %type: Maintainer rec foo;invalid ' test_declare_input_file type-int-valid \ '%rec: Types %type: Integer int Integer: 10 Integer: 0x10 Integer: 012 Integer: 0xaaaa0000 Integer: -0x10 Integer: -0xFF ' test_declare_input_file type-int-invalid \ '%rec: Types %type: Integer int Integer: aaa Integer: 0x Integer: --0xF ' test_declare_input_file type-real-valid \ '%rec: Types %type: Real real Real: 3.14 ' test_declare_input_file type-real-invalid \ '%rec: Types %type: Real real Real: 3..14 ' test_declare_input_file duplicated-keys \ '%rec: Keys %key: Id Id: 0 Id: 1 Id: 2 Id: 2 Id: 3 ' test_declare_input_file missing-mandatory \ '%rec: Mandatory %mandatory: ma foo: bar bar: baz ma: foo ' test_declare_input_file several-unique \ '%rec: Unique %unique: Id Id: 0 Id: 1 Id: 2 Id: 3 ' test_declare_input_file referred-type \ '%rec: One %type: foo int foo: 10 foo: 20 %rec: Two One:foo: 20 ' test_declare_input_file hidden-type \ '%rec: One %type: foo int foo: 10 foo: 20 %rec: Two %type: foo line One:foo: foobar ' test_declare_input_file ranges-ok \ '%rec: Foo %type: bar range -10 10 %type: baz range 10 bar: -10 baz: 0 bar: 10 baz: 10 bar: 2 baz: 5 ' test_declare_input_file ranges-hex-ok \ '%rec: Foo %type: bar range -0x10 0x10 bar: -16 bar: 0 bar: 5 bar: 0x10 ' test_declare_input_file ranges-hex-invalid \ '%rec: Foo %type: bar range 0 0xFF bar: 0 bar: 0x100 ' test_declare_input_file ranges-oct-ok \ '%rec: Foo %type: bar range -010 010 bar: -8 bar: 0 bar: 8 ' test_declare_input_file ranges-oct-invalid \ '%rec: Foo %type: bar range -010 010 bar: -8 bar: 0 bar: 9 ' test_declare_input_file ranges-xfail-1 \ '%rec: Foo %type: bar range -10 10 %type: baz range 10 bar: -25 baz: 0 ' test_declare_input_file ranges-xfail-2 \ '%rec: Foo %type: bar range -10 10 %type: baz range 10 bar: 2 baz: 11 ' test_declare_input_file multiple-rec \ '%rec: foo %type: bar int %rec: bar bar: 10 ' test_declare_input_file enum-valid \ '%rec: foo %type: bar enum + KEY1 (This is key 1) + KEY2 (This is key 2) + KEY3 (This is key 3) bar: KEY1 bar: KEY2 bar: KEY3 ' test_declare_input_file enum-invalid-1 \ '%rec: foo %type: bar enum + KEY1 (This is key 1) + KEY2 ((This is key 2) + KEY3 (This is key 3) bar: KEY1 bar: KEY2 bar: KEY3 ' test_declare_input_file enum-invalid-2 \ '%rec: foo %type: bar enum + KEY1 (This is key 1) + KEY2 (This is key 2)) + KEY3 (This is key 3) bar: KEY1 bar: KEY2 bar: KEY3 ' test_declare_input_file type-size-valid \ '%rec: foo %type: bar size 10 bar: bar: xxx bar: 1 2 3 + 4 55 ' test_declare_input_file type-size-valid-hex \ '%rec: foo %type: bar size 0xa bar: bar: xxx bar: 1 2 3 + 4 55 ' test_declare_input_file type-size-valid-oct \ '%rec: foo %type: bar size 012 bar: bar: xxx bar: 1 2 3 + 4 55 ' test_declare_input_file type-size-invalid \ '%rec: foo %type: bar size 2 bar: bar: xxx bar: 1 2 3 \ + 4 55 ' test_declare_input_file type-size-invalid-negative \ '%rec: foo %type: bar size -2 ' test_declare_input_file prohibited-fields-ok \ '%rec: foo %prohibit: banned foo: bar bar: baz ' test_declare_input_file prohibited-fields \ '%rec: foo %prohibit: banned1 banned2 foo: bar banned1: foo bar: baz banned2: bar bar: foo ' test_declare_input_file auto-int \ '%rec: foo %type: myint int %auto: myint ' test_declare_input_file auto-range \ '%rec: foo %type: myrange range 0 10 %auto: myrange ' test_declare_input_file auto-date \ '%rec: foo %type: mydate date %auto: mydate ' test_declare_input_file auto-notype \ '%rec: foo %auto: myint ' test_declare_input_file auto-invalid-type \ '%rec: foo %auto: key %type: key line ' test_declare_input_file auto-nofex \ '%rec: foo %auto: this%is#not%a^ fex ' test_declare_input_file size-invalid-1 \ '%rec: foo %size: > ' test_declare_input_file size-invalid-2 \ '%rec: foo %size: foo ' test_declare_input_file size-exact-zero \ '%rec: foo %size: 0 ' test_declare_input_file size-exact-zero-invalid \ '%rec: foo %size: 0 foo: bar ' test_declare_input_file size-exact \ '%rec: foo %size: 2 foo: bar bar: baz ' test_declare_input_file size-exact-hex \ '%rec: foo %size: 0x2 foo: bar bar: baz ' test_declare_input_file size-exact-oct \ '%rec: foo %size: 02 foo: bar bar: baz ' test_declare_input_file size-exact-invalid \ '%rec: foo %size: 2 foo: bar ' test_declare_input_file size-less \ '%rec: foo %size: < 2 foo: bar ' test_declare_input_file size-less-invalid \ '%rec: foo %size: < 2 foo: bar bar: baz ' test_declare_input_file size-less-equal \ '%rec: foo %size: <= 2 foo: bar bar: baz ' test_declare_input_file size-less-equal-invalid \ '%rec: foo %size: <= 1 foo: bar bar: baz ' test_declare_input_file size-bigger \ '%rec: foo %size: > 1 foo: bar bar: baz ' test_declare_input_file size-bigger-invalid \ '%rec: foo %size: > 2 foo: bar ' test_declare_input_file size-bigger-equal \ '%rec: foo %size: >= 2 foo: bar bar: baz ' test_declare_input_file size-bigger-equal-invalid \ '%rec: foo %size: >= 2 foo: bar ' test_declare_input_file size-several \ '%rec: foo %size: 2 %size: < 10 ' test_declare_input_file typedef-valid \ '%rec: foo %typedef: Id_t int %type: Id Id_t Id: 10 ' test_declare_input_file typedef-valid-xfail \ '%rec: foo %typedef: Id_t int %type: Id Id_t Id: xx ' test_declare_input_file typedef-valid-with-blanks \ '%rec: foo %typedef: + Id_t int %type: Id Id_t + Id: 10 ' test_declare_input_file typedef-valid-with-blanks-xfail \ '%rec: foo %typedef: + Id_t int %type: Id Id_t + Id: xx ' test_declare_input_file typedef-valid-order \ '%rec: foo %type: Id Id_t %typedef: Id_t int Id: 10 ' test_declare_input_file typedef-valid-order-xfail \ '%rec: foo %type: Id Id_t %typedef: Id_t int Id: xx ' test_declare_input_file typedef-valid-chain \ '%rec: foo %typedef: Foo_t Bar_t %typedef: Bar_t Baz_t %typedef: Baz_t int %type: Foo Foo_t Foo: 10 ' test_declare_input_file typedef-valid-chain-xfail \ '%rec: foo %typedef: Foo_t Bar_t %typedef: Bar_t Baz_t %typedef: Baz_t int %type: Foo Foo_t Foo: xx ' test_declare_input_file typedef-valid-multiple \ '%rec: foo %typedef: Foo_t int %typedef: Foo_t email %type: Foo Foo_t Foo: foo@bar.baz ' test_declare_input_file typedef-valid-multiple-xfail \ '%rec: foo %typedef: Foo_t int %typedef: Foo_t email %type: Foo Foo_t Foo: 10 ' test_declare_input_file typedef-invalid-bad-type \ '%rec: foo %typedef: Id_t int invalid %type: Id Id_t Id: 10 ' test_declare_input_file typedef-invalid-chain-undefined \ '%rec: foo %typedef: Id_t Undefined_t %type: Id Id_t Id: 10 ' test_declare_input_file typedef-invalid-chain-loop \ '%rec: foo %typedef: Foo_t Bar_t %typedef: Bar_t Baz_t %typedef: Baz_t Foo_t %type: Id Foo_t Id: 10 ' test_declare_input_file sortcheck-valid \ '%rec: foo %sort: AField ' test_declare_input_file sortcheck-with-blanks \ '%rec: foo %sort: + AField \ ' test_declare_input_file sortcheck-invalid-empty \ '%rec: foo %sort: ' test_declare_input_file sortcheck-invalid-field-name \ '%rec: foo %sort: A/Field ' test_declare_input_file sortcheck-with-several-fields-invalid \ '%rec: foo %sort: BField %sort: AField ' test_declare_input_file unsorted-int \ '%rec: foo %type: Id int %sort: Id Id: 4 Name: A Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 3 Name: B Field ' test_declare_input_file unsorted-int-with-equals \ '%rec: foo %type: Id int %sort: Id Id: 4 Name: A Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 3 Name: B Field Id: 2 Name: Cbis Field ' test_declare_input_file unsorted-range \ '%rec: foo %type: Id range 0 10 %sort: Id Id: 4 Name: A Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 3 Name: B Field ' test_declare_input_file unsorted-range-with-equals \ '%rec: foo %type: Id range 0 10 %sort: Id Id: 4 Name: A Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 3 Name: B Field Id: 2 Name: Cbis Field ' test_declare_input_file unsorted-real \ '%rec: foo %type: Id real %sort: Id Id: 4.2 Name: A Field Id: 2.2 Name: C Field Id: 1.2 Name: D Field Id: 3.2 Name: B Field ' test_declare_input_file unsorted-real-with-equals \ '%rec: foo %type: Id real %sort: Id Id: 4.2 Name: A Field Id: 2.2 Name: C Field Id: 1.2 Name: D Field Id: 3.2 Name: B Field Id: 4.2 Name: Abis Field ' test_declare_input_file unsorted-lex \ '%rec: foo %sort: Name Id: 4 Name: A Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 3 Name: B Field ' test_declare_input_file unsorted-lex-with-equals \ '%rec: foo %sort: Name Id: 4 Name: A Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 3 Name: B Field Id: 1 Name: Dbis Field ' test_declare_input_file unsorted-bool \ '%rec: foo %type: Bool bool %sort: Bool Id: 5 Bool: 1 Id: 1 Bool: 0 Id: 3 Bool: no Id: 6 Bool: true Id: 2 Bool: false Id: 4 Bool: yes ' test_declare_input_file unsorted-date \ '%rec: foo %type: Date date %sort: Date Id: 1 Date: 24 September 1972 Id: 3 Date: 23 October 1972 Id: 5 Date: 26 May 1984 Id: 2 Date: 23 September 1972 Id: 4 Date: 1 April 1999 ' test_declare_input_file unsorted-date-with-equals \ '%rec: foo %type: Date date %sort: Date Id: 1 Date: 24 September 1972 Id: 3 Date: 23 October 1972 Id: 5 Date: 26 May 1984 Id: 6 Date: 23 October 1972 Id: 2 Date: 23 September 1972 Id: 4 Date: 1 April 1999 ' test_declare_input_file unsorted-multiple \ '%rec: SortMultiple %sort: Class Price %type: Price real Item: one Class: B Price: 30 Item: two Class: A Price: 30 Item: three Class: C Price: 40 Item: four Class: A Price: 10 Item: five Class: B Price: 15 ' test_declare_input_file confidential \ '%rec: foo %confidential: Foo Bar Baz Foo: encrypted-foo Bar: encrypted-bar Baz: encrypted-baz %rec: bar Foo: jorl Bar: jarl Baz: jerl ' test_declare_input_file confidential-several \ '%rec: foo %confidential: Foo Bar Baz %confidential: Jorl ' test_declare_input_file confidential-with-unencrypted-fields \ '%rec: foo %confidential: Foo Foo: encrypted-foo Foo: Not encrypted ' test_declare_input_file confidential-fields \ '%rec: foo %confidential: Password WebPassword User: user1 Password: secret1 Password: secret2 WebPassword: websecret1 User: user2 Password: secret2 Password: secret22 WebPassword: websecret2 ' test_declare_input_file encrypt \ '%rec: Account %confidential: Secret Secret: foo Secret: bar %rec: Jorl Secret: jojo %rec: jojo %confidential: joo joo: je fo: fu joo: ji fo: ja ' test_declare_input_file decrypt \ '%rec: Account %confidential: Secret Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== %rec: Jorl Secret: jojo %rec: jojo %confidential: joo joo: encrypted-MhsqXvDjqU9vOXG8QoHxKg== fo: fu joo: encrypted-By/F2HBy1wiim1fUWMVKRg== fo: ja ' test_declare_input_file encrypt-already-encrypted \ '%rec: Account %confidential: Secret Id: 1 Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== Id: 2 Secret: bar ' test_declare_input_file missing-auto-fields \ '%rec: Item %auto: Id Id: 0 Title: foo Id: 1 Title: baz Title: bar ' test_declare_input_file uuid-fields-ok \ '%rec: Item %type: Id uuid Id: 550e8400-e29b-41d4-a716-446655440000 Name: Item 1 Id: 550e8401-e29b-41d4-a716-446655440000 Name: Item 2 ' test_declare_input_file uuid-fields-invalid \ '%rec: Item %type: Id uuid Id: Name: Item 1 Id: foo Name: Item 2 ' test_declare_input_file type-rec-norset \ '%rec: foo %type: Foo rec bar Foo: foo Foo: bar ' test_declare_input_file type-rec-nokey \ '%rec: foo %type: Foo rec bar Foo: foo Foo: bar %rec: bar Bar: 10 Bar: 20 ' test_declare_input_file type-rec-key-notype \ '%rec: foo %type: Foo rec bar Foo: foo Foo: bar %rec: bar %key: Bar Bar: 10 Bar: 20 ' test_declare_input_file type-rec-key-type \ '%rec: foo %type: Foo rec bar Foo: 2 Foo: 3 %rec: bar %key: Bar %type: Bar int Bar: 10 Bar: 20 ' test_declare_input_file type-rec-key-type-invalid \ '%rec: foo %type: Foo rec bar Foo: xxx Foo: 3 %rec: bar %key: Bar %type: Bar int Bar: 10 Bar: 20 ' test_declare_input_file constraint-sex-valid \ '%rec: Task %constraint: Status = '\''Closed'\'' => #ClosedBy Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed ClosedBy: bar Id: 2 Status: Open ' test_declare_input_file constraint-sex-invalid \ '%rec: Task %constraint: Status &= 'Closed' => #ClosedBy Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed Id: 2 Status: Open ' test_declare_input_file constraint-sex-invalid-empty \ '%rec: Task %constraint: Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed Id: 2 Status: Open ' test_declare_input_file constraint-sex-with-violation \ '%rec: Task %constraint: Status = '\''Closed'\'' + => #ClosedBy = 0 Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed Id: 2 Status: Open ' test_declare_input_file constraint-sex-several-valid \ '%rec: Task %constraint: Status = '\''Closed'\'' => #ClosedBy %constraint: 1 Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed ClosedBy: mr foo Id: 2 Status: Open ' test_declare_input_file constraint-sex-several-invalid \ '%rec: Task %constraint: Status = '\''Closed'\'' => #ClosedBy %constraint: Id = 1 => Status != '\''Closed'\'' Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed Id: 2 Status: Open ' test_declare_input_file unused-type \ '%rec: Task %typedef: Status_t enum Open Closed %key: Id Id: 1 ' test_declare_input_file blank-line-after-record \ 'foo: bar ' test_declare_input_file blank-line-after-record-invalid \ 'foo:bar x ' test_declare_input_file hyphens-in-field-names \ 'foo-bar: baz ' test_declare_input_file ranges-min-ok \ '%rec: foo %type: Negative range MIN -1 Negative: -1 Negative: -2147483648 ' test_declare_input_file ranges-min-invalid \ '%rec: foo %type: Negative range MIN -1 Negative: -1 Negative: 0 ' test_declare_input_file ranges-max-ok \ '%rec: foo %type: Positive range 0 MAX Positive: 0 Positive: 2147483647 ' test_declare_input_file ranges-max-invalid \ '%rec: foo %type: Positive range 0 MAX Positive: -1 Positive: 2147483647 ' test_declare_input_file ranges-minmax-ok \ '%rec: foo %type: Any range MIN MAX Any: -2147483648 Any: 0 Any: 2147483647 ' test_declare_input_file ranges-minmax-invalid \ '%rec: foo %type None range MAX MIN None: -2147483648 None: 0 None: 2147483647 ' test_declare_input_file allowed-ok-1 \ '%rec: foo %allowed: xxx xxx: 10 xxx: 20 ' test_declare_input_file allowed-ok-2 \ '%rec: foo %allowed: xxx yyy xxx: 10 xxx: 20 yyy: 30 ' test_declare_input_file allowed-ok-3 \ '%rec: foo %allowed: xxx %allowed: yyy xxx: 10 xxx: 20 yyy: 30 ' test_declare_input_file allowed-ok-4 \ '%rec: foo %allowed: xxx %allowed: yyy xxx: 10 xxx: 20 yyy: 30 ' test_declare_input_file allowed-ok-5 \ '%rec: foo %key: xkey %mandatory: xmandatory %allowed: xxx xkey: jur xxx: 10 xmandatory: jur xxx: 20 xkey: jor xmandatory: jur ' test_declare_input_file allowed-xfail-1 \ '%rec: foo %allowed: xxx xxx: 10 xxx: 20 yyy: 30 ' test_declare_input_file allowed-xfail-2 \ '%rec: foo %allowed: xxx yyy xxx: 10 xxx: 20 zzz: 40 yyy: 30 ' test_declare_input_file allowed-xfail-3 \ '%rec: foo %allowed: xxx %allowed: yyy xxx: 10 xxx: 20 zzz: 40 yyy: 30 ' test_declare_input_file multiple-singulars \ '%rec: Foo %singular: Id %unique: Id Id: 0 Name: Name1 Id: 2 Name: Name2 Id: 2 Name: Name3 ' test_declare_input_file blanks-before-fex-in-type \ '%rec: Bug %mandatory: Id Title Desc Status Reporter Time %typedef: Id_t int %type: Id Id_t %typedef: Status_t enum TODO ACTIVE DOING DONE %type: Status Status_t Id: 1 Title: first bug Desc: test recfiles Status: DONE Reporter: Hao Wu Time: Thu Jan 30 14:11:05 CST 2020 Id: 2 Title: first bug Title: first bug Desc: test recfiles Status: DONE Reporter: Hao Wu Time: : Thu Jan 30 14:10:56 CST 2020 Id: 3 Title: learn recfiles Desc: learn recfiles Status: DOING Reporter: Hao Wu Time: Mon Feb 3 14:35:03 CST 2020 ' # # Declare tests. # test_tool recfix-with-operation ok \ recfix \ '--check' \ type-int-valid \ '' test_tool recfix-type-int-valid ok \ recfix \ '' \ type-int-valid \ '' test_tool recfix-type-int-invalid xfail \ recfix \ '' \ type-int-invalid test_tool recfix-type-real-valid ok \ recfix \ '' \ type-real-valid \ '' test_tool recfix-type-real-invalid xfail \ recfix \ '' \ type-real-invalid test_tool recfix-duplicated-keys xfail \ recfix \ '' \ duplicated-keys test_tool recfix-missing-mandatory xfail \ recfix \ '' \ missing-mandatory test_tool recfix-several-unique xfail \ recfix \ '' \ several-unique test_tool recfix-referred-type ok \ recfix \ '' \ referred-type \ '' test_tool recfix-hidden-type ok \ recfix \ '' \ hidden-type \ '' test_tool recfix-ranges-ok ok \ recfix \ '' \ ranges-ok \ '' test_tool recfix-range-hex-ok ok \ recfix \ '' \ ranges-hex-ok \ '' test_tool recfix-range-hex-xfail xfail \ recfix \ '' \ ranges-hex-invalid test_tool recfix-range-oct-ok ok \ recfix \ '' \ ranges-oct-ok \ '' test_tool recfix-range-oct-xfail xfail \ recfix \ '' \ ranges-oct-invalid test_tool recfix-range-min-ok ok \ recfix \ '' \ ranges-min-ok \ '' test_tool recfix-range-min-invalid xfail \ recfix \ '' \ ranges-min-invalid test_tool recfix-range-max-ok ok \ recfix \ '' \ ranges-max-ok \ '' test_tool recfix-range-max-invalid xfail \ recfix \ '' \ ranges-max-invalid test_tool recfix-range-minmax-ok ok \ recfix \ '' \ ranges-minmax-ok \ '' test_tool recfix-range-minmax-invalid xfail \ recfix \ '' \ ranges-minmax-invalid test_tool recfix-ranges-xfail-1 xfail \ recfix \ '' \ ranges-xfail-1 test_tool recfix-ranges-xfail-2 xfail \ recfix \ '' \ ranges-xfail-2 test_tool recfix-one-rec ok \ recfix \ '' \ type-int-valid \ '' test_tool recfix-multiple-rec-in-descriptor xfail \ recfix \ '' \ multiple-rec test_tool recfix-enum-valid ok \ recfix \ '' \ enum-valid \ '' test_tool recfix-enum-invalid-1 xfail \ recfix \ '' \ enum-invalid-1 test_tool recfix-enum-invalid-2 xfail \ recfix \ '' \ enum-invalid-2 test_tool recfix-type-size-valid ok \ recfix \ '' \ type-size-valid \ '' test_tool recfix-type-size-valid-hex ok \ recfix \ '' \ type-size-valid-hex \ '' test_tool recfix-type-size-valid-oct ok \ recfix \ '' \ type-size-valid-oct \ '' test_tool recfix-type-size-invalid xfail \ recfix \ '' \ type-size-invalid test_tool recfix-type-size-invalid-negative xfail \ recfix \ '' \ type-size-invalid-negative test_tool recfix-prohibited-fields-ok ok \ recfix \ '' \ prohibited-fields-ok \ '' test_tool recfix-prohibited-fields-fail xfail \ recfix \ '' \ prohibited-fields test_tool recfix-auto-int ok \ recfix \ '' \ auto-int \ '' test_tool recfix-auto-range ok \ recfix \ '' \ auto-range \ '' test_tool recfix-auto-date ok \ recfix \ '' \ auto-date \ '' test_tool recfix-auto-notype ok \ recfix \ '' \ auto-notype \ '' test_tool recfix-auto-invalid-type xfail \ recfix \ '' \ auto-invalid-type test_tool recfix-auto-nofex xfail \ recfix \ '' \ auto-nofex test_tool recfix-size-invalid-1 xfail \ recfix \ '' \ size-invalid-1 test_tool recfix-size-invalid-2 xfail \ recfix \ '' \ size-invalid-2 test_tool recfix-size-exact-zero ok \ recfix \ '' \ size-exact-zero \ '' test_tool recfix-size-exact-zero-invalid xfail \ recfix \ '' \ size-exact-zero-invalid test_tool recfix-size-exact ok \ recfix \ '' \ size-exact \ '' test_tool recfix-size-exact-hex ok \ recfix \ '' \ size-exact-hex \ '' test_tool recfix-size-exact-oct ok \ recfix \ '' \ size-exact-oct \ '' test_tool recfix-size-exact-invalid xfail \ recfix \ '' \ size-exact-invalid test_tool recfix-size-less ok \ recfix \ '' \ size-less \ '' test_tool recfix-size-less-invalid xfail \ recfix \ '' \ size-less-invalid test_tool recfix-size-less-equal ok \ recfix \ '' \ size-less-equal \ '' test_tool recfix-size-less-equal-invalid xfail \ recfix \ '' \ size-less-equal-invalid test_tool recfix-size-bigger ok \ recfix \ '' \ size-bigger \ '' test_tool recfix-size-bigger-invalid xfail \ recfix \ '' \ size-bigger-invalid test_tool recfix-size-bigger-equal ok \ recfix \ '' \ size-bigger-equal \ '' test_tool recfix-size-bigger-equal-invalid xfail \ recfix \ '' \ size-bigger-equal-invalid test_tool recfix-size-several xfail \ recfix \ '' \ size-several test_tool recfix-typedef-valid ok \ recfix \ '' \ typedef-valid \ '' test_tool recfix-typedef-valid-xfail xfail \ recfix \ '' \ typedef-valid-xfail test_tool recfix-typedef-valid-with-blanks ok \ recfix \ '' \ typedef-valid-with-blanks \ '' test_tool recfix-typedef-valid-with-blanks-xfail xfail \ recfix \ '' \ typedef-valid-with-blanks-xfail test_tool recfix-typedef-valid-order ok \ recfix \ '' \ typedef-valid-order \ '' test_tool recfix-typedef-valid-order-xfail xfail \ recfix \ '' \ typedef-valid-order-xfail test_tool recfix-typedef-valid-chain ok \ recfix \ '' \ typedef-valid-chain \ '' test_tool recfix-typedef-valid-chain-xfail xfail \ recfix \ '' \ typedef-valid-chain-xfail test_tool recfix-typedef-valid-multiple ok \ recfix \ '' \ typedef-valid-multiple \ '' test_tool recfix-typedef-valid-multiple-xfail xfail \ recfix \ '' \ typedef-valid-multiple-xfail test_tool recfix-typedef-invalid-bad-type xfail \ recfix \ '' \ typedef-invalid-bad-type test_tool recfix-typedef-invalid-chain-undefined xfail \ recfix \ '' \ typedef-invalid-chain-undefined test_tool recfix-typedef-invalid-chain-loop xfail \ recfix \ '' \ typedef-invalid-chain-loop test_tool recfix-sortcheck-valid ok \ recfix \ '' \ sortcheck-valid \ '' test_tool recfix-sortcheck-with-blanks ok \ recfix \ '' \ sortcheck-with-blanks \ '' test_tool recfix-sortcheck-invalid-empty xfail \ recfix \ '' \ sortcheck-invalid-empty test_tool recfix-sortcheck-invalid-field-name xfail \ recfix \ '' \ sortcheck-invalid-field-name if test "x$crypt_support" = "yes"; then test_tool recfix-confidential ok \ recfix \ '--check' \ confidential \ '' test_tool recfix-confidential-several ok \ recfix \ '--check' \ confidential-several \ '' test_tool recfix-confidential-with-unencrypted-fields xfail \ recfix \ '--check' \ confidential-with-unencrypted-fields test_tool recfix-encrypt ok \ recfix \ '--encrypt -s foo' \ encrypt \ '%rec: Account %confidential: Secret Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== %rec: Jorl Secret: jojo %rec: jojo %confidential: joo joo: encrypted-MhsqXvDjqU9vOXG8QoHxKg== fo: fu joo: encrypted-By/F2HBy1wiim1fUWMVKRg== fo: ja ' test_tool recfix-encrypt-password-long ok \ recfix \ '--encrypt --password=foo' \ encrypt \ '%rec: Account %confidential: Secret Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== %rec: Jorl Secret: jojo %rec: jojo %confidential: joo joo: encrypted-MhsqXvDjqU9vOXG8QoHxKg== fo: fu joo: encrypted-By/F2HBy1wiim1fUWMVKRg== fo: ja ' test_tool recfix-encrypt-without-password xfail \ recfix \ '--encrypt' \ encrypt test_tool recfix-encrypt-password-before-operation xfail \ recfix \ '-s foo --encrypt' \ encrypt test_tool recfix-encrypt-already-encrypted xfail \ recfix \ '--encrypt -s foo' \ encrypt-already-encrypted test_tool recfix-encrypt-already-encrypted-force ok \ recfix \ '--force --encrypt -s foo' \ encrypt-already-encrypted \ '%rec: Account %confidential: Secret Id: 1 Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== Id: 2 Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== ' test_tool recfix-decrypt ok \ recfix \ '--decrypt -s foo' \ decrypt \ '%rec: Account %confidential: Secret Secret: foo Secret: bar %rec: Jorl Secret: jojo %rec: jojo %confidential: joo joo: je fo: fu joo: ji fo: ja ' test_tool recfix-decrypt-invalid-password ok \ recfix \ '--decrypt -s bar' \ decrypt \ '%rec: Account %confidential: Secret Secret: encrypted-xsU/pJwqJBZv3+6tn2AzTA== Secret: encrypted-V1xOls6u5Zw/D5AOtZ9gfQ== %rec: Jorl Secret: jojo %rec: jojo %confidential: joo joo: encrypted-MhsqXvDjqU9vOXG8QoHxKg== fo: fu joo: encrypted-By/F2HBy1wiim1fUWMVKRg== fo: ja ' fi # crypt_support test_tool recfix-sort-several-fields-invalid xfail \ recfix \ '--check' \ sortcheck-with-several-fields-invalid test_tool recfix-sort-ints ok \ recfix \ '--sort' \ unsorted-int \ '%rec: foo %type: Id int %sort: Id Id: 1 Name: D Field Id: 2 Name: C Field Id: 3 Name: B Field Id: 4 Name: A Field ' test_tool recfix-sort-multiple ok \ recfix \ '--sort' \ unsorted-multiple \ '%rec: SortMultiple %sort: Class Price %type: Price real Item: four Class: A Price: 10 Item: two Class: A Price: 30 Item: five Class: B Price: 15 Item: one Class: B Price: 30 Item: three Class: C Price: 40 ' test_tool recfix-sort-ints-with-equals ok \ recfix \ '--sort' \ unsorted-int-with-equals \ '%rec: foo %type: Id int %sort: Id Id: 1 Name: D Field Id: 2 Name: C Field Id: 2 Name: Cbis Field Id: 3 Name: B Field Id: 4 Name: A Field ' test_tool recfix-sort-ranges ok \ recfix \ '--sort' \ unsorted-range \ '%rec: foo %type: Id range 0 10 %sort: Id Id: 1 Name: D Field Id: 2 Name: C Field Id: 3 Name: B Field Id: 4 Name: A Field ' test_tool recfix-sort-ranges-with-equals ok \ recfix \ '--sort' \ unsorted-range-with-equals \ '%rec: foo %type: Id range 0 10 %sort: Id Id: 1 Name: D Field Id: 2 Name: C Field Id: 2 Name: Cbis Field Id: 3 Name: B Field Id: 4 Name: A Field ' test_tool recfix-sort-reals ok \ recfix \ '--sort' \ unsorted-real \ '%rec: foo %type: Id real %sort: Id Id: 1.2 Name: D Field Id: 2.2 Name: C Field Id: 3.2 Name: B Field Id: 4.2 Name: A Field ' test_tool recfix-sort-reals-with-equals ok \ recfix \ '--sort' \ unsorted-real-with-equals \ '%rec: foo %type: Id real %sort: Id Id: 1.2 Name: D Field Id: 2.2 Name: C Field Id: 3.2 Name: B Field Id: 4.2 Name: A Field Id: 4.2 Name: Abis Field ' test_tool recfix-sort-lex ok \ recfix \ '--sort' \ unsorted-lex \ '%rec: foo %sort: Name Id: 4 Name: A Field Id: 3 Name: B Field Id: 2 Name: C Field Id: 1 Name: D Field ' test_tool recfix-sort-lex-with-equals ok \ recfix \ '--sort' \ unsorted-lex-with-equals \ '%rec: foo %sort: Name Id: 4 Name: A Field Id: 3 Name: B Field Id: 2 Name: C Field Id: 1 Name: D Field Id: 1 Name: Dbis Field ' test_tool recfix-sort-dates ok \ recfix \ '--sort' \ unsorted-date \ '%rec: foo %type: Date date %sort: Date Id: 2 Date: 23 September 1972 Id: 1 Date: 24 September 1972 Id: 3 Date: 23 October 1972 Id: 5 Date: 26 May 1984 Id: 4 Date: 1 April 1999 ' test_tool recfix-sort-dates-with-equals ok \ recfix \ '--sort' \ unsorted-date-with-equals \ '%rec: foo %type: Date date %sort: Date Id: 2 Date: 23 September 1972 Id: 1 Date: 24 September 1972 Id: 3 Date: 23 October 1972 Id: 6 Date: 23 October 1972 Id: 5 Date: 26 May 1984 Id: 4 Date: 1 April 1999 ' test_tool recfix-sort-booleans ok \ recfix \ '--sort' \ unsorted-bool \ '%rec: foo %type: Bool bool %sort: Bool Id: 1 Bool: 0 Id: 3 Bool: no Id: 2 Bool: false Id: 5 Bool: 1 Id: 6 Bool: true Id: 4 Bool: yes ' test_tool recfix-missing-auto-fields ok \ recfix \ "--auto" \ missing-auto-fields \ '%rec: Item %auto: Id Id: 0 Title: foo Id: 1 Title: baz Id: 2 Title: bar ' if test "$uuid_support" = "yes"; then test_tool recfix-uuid-ok ok \ recfix \ '--check' \ uuid-fields-ok \ '' test_tool recfix-uuid-invalid xfail \ recfix \ '--check' \ uuid-fields-invalid fi test_tool recfix-type-rec-valid ok \ recfix \ '--check' \ type-rec-valid \ '' test_tool recfix-type-rec-invalid-empty xfail \ recfix \ '--check' \ type-rec-invalid-empty test_tool recfix-type-rec-invalid-malformed xfail \ recfix \ '--check' \ type-rec-invalid-malformed test_tool recfix-type-rec-norset ok \ recfix \ '--check' \ type-rec-norset \ '' test_tool recfix-type-rec-nokey ok \ recfix \ '--check' \ type-rec-nokey \ '' test_tool recfix-type-rec-key-notype ok \ recfix \ '--check' \ type-rec-key-notype \ '' test_tool recfix-type-rec-key-type ok \ recfix \ '--check' \ type-rec-key-type \ '' test_tool recfix-type-rec-key-type-invalid xfail \ recfix \ '--check' \ type-rec-key-type-invalid test_tool recfix-constraint-sex-valid ok \ recfix \ '--check' \ constraint-sex-valid \ '' test_tool recfix-constraint-sex-invalid xfail \ recfix \ '--check' \ constraint-sex-invalid test_tool recfix-constraint-sex-invalid-empty xfail \ recfix \ '--check' \ constraint-sex-invalid-empty test_tool recfix-constraint-sex-several-valid ok \ recfix \ '--check' \ constraint-sex-several-valid \ '' test_tool recfix-constraint-sex-several-invalid xfail \ recfix \ '--check' \ constraint-sex-several-invalid test_tool recfix-constraint-sex-with-violation xfail \ recfix \ '--check' \ constraint-sex-with-violation test_tool recfix-unused-type ok \ recfix \ '--check' \ unused-type \ '' test_tool recfix-blank-line-after-record ok \ recfix \ '--check' \ blank-line-after-record \ '' test_tool recfix-blank-line-after-record-invalid xfail \ recfix \ '--check' \ blank-line-after-record-invalid test_tool recfix-hyphens-in-field-names xfail \ recfix \ '--check' \ hyphens-in-field-names test_tool recfix-allowed-ok-1 ok \ recfix \ '--check' \ allowed-ok-1 \ '' test_tool recfix-allowed-ok-2 ok \ recfix \ '--check' \ allowed-ok-2 \ '' test_tool recfix-allowed-ok-3 ok \ recfix \ '--check' \ allowed-ok-3 \ '' test_tool recfix-allowed-ok-4 ok \ recfix \ '--check' \ allowed-ok-4 \ '' test_tool recfix-allowed-ok-5 ok \ recfix \ '--check' \ allowed-ok-5 \ '' test_tool recfix-allowed-xfail-1 xfail \ recfix \ '--check' \ allowed-xfail-1 test_tool recfix-allowed-xfail-2 xfail \ recfix \ '--check' \ allowed-xfail-2 test_tool recfix-allowed-xfail-3 xfail \ recfix \ '--check' \ allowed-xfail-3 test_tool recfix-blanks-before-fex-in-type ok \ recfix \ '--check' \ blanks-before-fex-in-type \ '' test_tool recfix-multiple-singulars xfail \ recfix \ '--check' \ multiple-singulars # # Cleanup. # test_cleanup exit $? # End of recfix.sh �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/utils/csv2rec.sh���������������������������������������������������������������0000755�0000000�0000000�00000003702�14226563465�014675� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # csv2rec.sh - System tests for csv2rec. # # Copyright (C) 2011-2022 Jose E. Marchesi. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Initialization # : ${srcdir=.} . $srcdir/testutils.sh test_init "csv2rec" # # Create input files. # test_declare_input_file simple-table \ 'a,b,c a1,b1,c1 a2,b2,c2 a3,b3,c3 ' test_declare_input_file simple-table-quotes \ '"a","b","c" "a1","b1","c1" a2,b2,c2 "a3","b3",c3 ' test_declare_input_file empty-columns \ '"a","b","c" ,b1,c1 a2,,c2 a3,b3, ' test_declare_input_file multi-line \ 'a,b "foo bar",baz x,y ' # # Declare tests. # test_tool csv2rec-simple-table ok \ csv2rec \ '' \ simple-table \ 'a: a1 b: b1 c: c1 a: a2 b: b2 c: c2 a: a3 b: b3 c: c3 ' test_tool csv2rec-simple-table-quotes ok \ csv2rec \ '' \ simple-table-quotes \ 'a: a1 b: b1 c: c1 a: a2 b: b2 c: c2 a: a3 b: b3 c: c3 ' test_tool csv2rec-empty-columns ok \ csv2rec \ '' \ empty-columns \ 'a: b: b1 c: c1 a: a2 b: c: c2 a: a3 b: b3 c: ' test_tool csv2rec-empty-columns-omit ok \ csv2rec \ '-e' \ empty-columns \ 'b: b1 c: c1 a: a2 c: c2 a: a3 b: b3 ' test_tool csv2rec-multi-line ok \ csv2rec \ '' \ multi-line \ 'a: foo + bar b: baz a: x b: y ' # # Cleanup # test_cleanup exit $? # End of csv2rec.sh ��������������������������������������������������������������recutils-1.9/torture/utils/recsel.sh����������������������������������������������������������������0000755�0000000�0000000�00000067447�14226563465�014623� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#!/bin/sh # # recsel.sh - System tests for recsel. # # Copyright (C) 2010-2022 Jose E. Marchesi. # # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # # Initialization # : ${srcdir=.} : ${crypt_support=yes} . $srcdir/testutils.sh test_init "recsel" # # Create input files. # test_declare_input_file empty-file '' test_declare_input_file one-record \ 'field1: value1 field2: value2 field3: value3 ' test_declare_input_file multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' test_declare_input_file multiline \ 'field1: foo bar \ baz field2: foo + bar + baz field1: jo ja \ ju field2: + foo + bar ' test_declare_input_file repeated-fields \ 'field1: value11 field2: value121 field2: value122 field3: value13 field1: value21 field2: value221 field2: value222 field3: value23 ' test_declare_input_file multiple-types \ '%rec: type1 field1: value11 field2: value12 field3: value13 %rec: type2 field1: value21 field2: value22 field3: value23 %rec: type3 field1: value31 field2: value32 field3: value33 ' test_declare_input_file integer-fields \ 'field1: 314 field1: 10 field1: -10 field1: 0 ' test_declare_input_file real-fields \ 'field1: 3.14 field1: 10.0 field1: -10.0 field1: 0 ' test_declare_input_file recurrent-fields \ 'field1: value11 field2: value121 field2: value122 field2: value22 field3: value23 ' test_declare_input_file recurrent-fields-2 \ 'Name: foo Index: 5 Index: 9 Name: bar Index: 7 ' test_declare_input_file dates \ 'Date: Tue Nov 30 12:00:00 CET 2002 Date: Tue Nov 30 12:00:00 CET 2010 Date: Tue Nov 30 12:00:00 CET 2030 ' test_declare_input_file academy \ 'Name: John Smith Role: Professor Age: 52 Name: Tom Johnson Role: Professor Age: 67 Name: Tommy Junior Role: Student Age: 5 Name: Johnny NotSoJunior Role: Student Age: 15 ' test_declare_input_file confidential \ '%rec: Account %confidential: Password User: foo Password: encrypted-MHyd3Dqz+iaViL8h1m18sA== ' test_declare_input_file sort \ '%rec: Sorted %sort: Id %type: Id int Id: 100 Key: foo Id: 20 Key: bar Id: -2 Key: baz ' test_declare_input_file sort-with-comment \ '%rec: Sorted %sort: Id %type: Id int # Foo # Bar Id: 100 Key: foo Id: 20 Key: bar Id: -2 Key: baz ' test_declare_input_file sort-multiple \ '%rec: SortMultiple %sort: Class Price %type: Price real Item: one Class: B Price: 30 Item: two Class: A Price: 30 Item: three Class: C Price: 40 Item: four Class: A Price: 10 Item: five Class: B Price: 15 ' test_declare_input_file empty-field-values \ 'a: a1 b: c: d: d1 ' test_declare_input_file duplicated-fields \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value21 field1: value21 field1: value31 field2: field2: field3: value33 field1: foo field1: foo ' test_declare_input_file group-records \ 'id: 3 pos: 1 id: 1 pos: 2 id: 1 pos: 3 id: 2 pos: 4 id: 3 pos: 5 ' test_declare_input_file group-records-missing \ 'id: 3 pos: 1 id: 1 pos: 2 pos: 3 id: 2 pos: 4 id: 3 pos: 5 ' test_declare_input_file sales \ 'Item: A Date: 21 April 2012 Cost: 23 Item: B Date: 20 April 2012 Cost: 50 Item: A Date: 21 April 2012 Cost: 10 Item: C Date: 12 January 2003 Cost: 12 Item: D Date: 20 April 2012 Cost: 100 ' test_declare_input_file packages-maintainers \ '%rec: Package %type: Maintainer,PreviousMaintainer rec Hacker Name: GNU PDF URL: http://www.gnupdf.org Maintainer: jemarch@gnu.org Maintainer: aleksander@gnu.org Name: GNU recutils URL: http://www.gnu.org/software/recutils Maintainer: jemarch@gnu.org Name: GNU Emacs URL: http://www.gnu.org/software/emacs Maintainer: stefan@monnier.com PreviousMaintainer: rms@gnu.org %rec: Hacker %key: Email %type: Email email Name: Jose E. Marchesi Email: jemarch@gnu.org URL: http://www.jemarch.net Name: Aleksander Morgado Email: aleksander@gnu.org Name: Richard M. Stallman Email: rms@gnu.org URL: http://www.stallman.org Name: Stefan Monnier Email: stefan@monnier.com ' test_declare_input_file implications \ '%rec: Task Id: 0 Status: Closed ClosedBy: jemarch Id: 1 Status: Closed Id: 2 Status: Open ' test_declare_input_file non-existant-foreign-key \ '%rec: Record %type: Foreign rec NonExistant Name: Fred Foreign: xxx ' test_declare_input_file several-foreign-keys \ '%rec: R %key: Id Id: R1 Description: this is R1 Id: R2 Description: this is R1 Id: R3 Description: this is R1 %rec: T %key: Id %type: Requirement rec R Id: T1 Requirement: R1 Id: T2 Requirement: R2 Requirement: R3 Id: T3 Requirement: R3 ' test_declare_input_file unquoted-lisp-strings \ 'foo: fo\o bar: a quote"etouq a ' test_declare_input_file single-char-field-names \ 'a: 10 b: 20 c: 30 d: 40 ' test_declare_input_file record-with-comments \ 'foo1: v1 # bar foo2: v2 # jorl bar1: v1 bar2: v2 # jurl ' test_declare_input_file ignored-first-blanks \ 'foo: v1 bar: v2 ' test_declare_input_file negative_fields \ 'foo: 10 bar: -10 foo: 9 bar: -9 ' # # Declare tests # # Select the whole record set. test_tool recsel-all-fields ok \ recsel \ '' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' # Print just one field. test_tool recsel-one-field ok \ recsel \ '-p field2' \ multiple-records \ 'field2: value12 field2: value22 field2: value32 ' # Print two fields. test_tool recsel-two-fields ok \ recsel \ '-p field2,field3' \ multiple-records \ 'field2: value12 field3: value13 field2: value22 field3: value23 field2: value32 field3: value33 ' # Print values test_tool recsel-values ok \ recsel \ '-P field2' \ multiple-records \ 'value12 value22 value32 ' test_tool recsel-values-long ok \ recsel \ '--print-values=field2' \ multiple-records \ 'value12 value22 value32 ' # Print multiple values test_tool recsel-multiple-values ok \ recsel \ '-P field1,field3' \ multiple-records \ 'value11 value13 value21 value23 value31 value33 ' # Print collapsed test_tool recsel-collapsed ok \ recsel \ '-C -p field1' \ multiple-records \ 'field1: value11 field1: value21 field1: value31 ' # Print values collapsed test_tool recsel-values-collapsed ok \ recsel \ '-C -P field2,field3' \ multiple-records \ 'value12 value13 value22 value23 value32 value33 ' # Print in a row test_tool recsel-row ok \ recsel \ '-R field1,field2' \ multiple-records \ 'value11 value12 value21 value22 value31 value32 ' test_tool recsel-row-long ok \ recsel \ '--print-row=field1,field2' \ multiple-records \ 'value11 value12 value21 value22 value31 value32 ' # Print collapsed in a row test_tool recsel-collapsed-row ok \ recsel \ '-C -R field1,field2,field3' \ multiple-records \ 'value11 value12 value13 value21 value22 value23 value31 value32 value33 ' # Print all fields (multiline) test_tool recsel-multi-all-fields ok \ recsel \ '' \ multiline \ 'field1: foo bar baz field2: foo + bar + baz field1: jo ja ju field2: + foo + bar ' # Print values (multiline) test_tool recsel-multi-values ok \ recsel \ '-P field1,field2' \ multiline \ 'foo bar baz foo bar baz jo ja ju foo bar ' # Print collapsed values (multiline) test_tool recsel-multi-collapsed-values ok \ recsel \ '-C -P field1,field2' \ multiline \ 'foo bar baz foo bar baz jo ja ju foo bar ' # Print a count of all the records. test_tool recsel-count ok \ recsel \ '-c' \ multiple-records \ '3 ' # Subscripts. test_tool recsel-subs ok \ recsel \ '-p field2[0]' \ repeated-fields \ 'field2: value121 field2: value221 ' test_tool recsel-subs-2 ok \ recsel \ '-p field2[1]' \ repeated-fields \ 'field2: value122 field2: value222 ' # Print records identified by its position into the record set. test_tool recsel-index-first ok \ recsel \ '-n 0' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 ' test_tool recsel-index-long ok \ recsel \ '--number=0' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 ' test_tool recsel-index-second ok \ recsel \ '-n 1' \ multiple-records \ 'field1: value21 field2: value22 field3: value23 ' test_tool recsel-index-toobig ok \ recsel \ '-n 100' \ multiple-records \ '' test_tool recsel-index-several ok \ recsel \ '-n 0,2' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value31 field2: value32 field3: value33 ' test_tool recsel-index-range-1 ok \ recsel \ '-n 0-1' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 ' test_tool recsel-index-range-2 ok \ recsel \ '-n 1-2' \ multiple-records \ 'field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' test_tool recsel-index-range-3 ok \ recsel \ '-n 0,1-2' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' test_tool recsel-index-invalid-1 xfail \ recsel \ '-n 0,' \ multiple-records test_tool recsel-index-invalid-2 xfail \ recsel \ '-n ,0' \ multiple-records test_tool recsel-index-invalid-3 xfail \ recsel \ '-n 0,1,2-' \ multiple-records test_tool recsel-index-invalid-4 xfail \ recsel \ '-n 0,1,,2' \ multiple-records # Print records of several types. test_tool recsel-type ok \ recsel \ '-t type1' \ multiple-types \ 'field1: value11 field2: value12 field3: value13 ' test_tool recsel-type-2 ok \ recsel \ '-t type2' \ multiple-types \ 'field1: value21 field2: value22 field3: value23 ' test_tool recsel-type-3 ok \ recsel \ '-t type2' \ multiple-types \ 'field1: value21 field2: value22 field3: value23 ' test_tool recsel-type-4 ok \ recsel \ '-t type3' \ multiple-types \ 'field1: value31 field2: value32 field3: value33 ' # Selection expressions. test_tool recsel-sex-integer-equal ok \ recsel \ '-e "field1 = 0"' \ integer-fields \ 'field1: 0 ' test_tool recsel-sex-integer-equal-hex ok \ recsel \ '-e "field1 = -0xa"' \ integer-fields \ 'field1: -10 ' test_tool recsel-sex-integer-equal-oct ok \ recsel \ '-e "field1 = -012"' \ integer-fields \ 'field1: -10 ' test_tool recsel-sex-integer-nonequal ok \ recsel \ '-e "field1 != 314"' \ integer-fields \ 'field1: 10 field1: -10 field1: 0 ' test_tool recsel-sex-integer-lessthan ok \ recsel \ '-e "field1 < -5"' \ integer-fields \ 'field1: -10 ' test_tool recsel-sex-integer-lessequalthan ok \ recsel \ '-e "field1 <= 0"' \ integer-fields \ 'field1: -10 field1: 0 ' test_tool recsel-sex-integer-biggerthan ok \ recsel \ '-e "field1 > 10"' \ integer-fields \ 'field1: 314 ' test_tool recsel-sex-integer-biggerequalthan ok \ recsel \ '-e "field1 >= 10"' \ integer-fields \ 'field1: 314 field1: 10 ' test_tool recsel-sex-integer-plus ok \ recsel \ '-e "field1 + 2 = 316"' \ integer-fields \ 'field1: 314 ' test_tool recsel-sex-integer-minus ok \ recsel \ '-e "field1 - 2 = -12"' \ integer-fields \ 'field1: -10 ' test_tool recsel-sex-integer-mul ok \ recsel \ '-e "field1 * 20 = 200"' \ integer-fields \ 'field1: 10 ' test_tool recsel-sex-integer-div ok \ recsel \ '-e "field1 / 2 = 5"' \ integer-fields \ 'field1: 10 ' test_tool recsel-sex-integer-mod ok \ recsel \ '-e "field1 % 313 = 1"' \ integer-fields \ 'field1: 314 ' test_tool recsel-sex-integer-not ok \ recsel \ '-e "!field1"' \ integer-fields \ 'field1: 0 ' test_tool recsel-sex-integer-and ok \ recsel \ '-e "field1 && field1"' \ integer-fields \ 'field1: 314 field1: 10 field1: -10 ' test_tool recsel-sex-integer-or ok \ recsel \ '-e "field1 || 1"' \ integer-fields \ 'field1: 314 field1: 10 field1: -10 field1: 0 ' test_tool recsel-sex-real-equal ok \ recsel \ '-e "field1 = 3.14"' \ real-fields \ 'field1: 3.14 ' test_tool recsel-sex-real-nonequal ok \ recsel \ '-e "field1 != 3.14"' \ real-fields \ 'field1: 10.0 field1: -10.0 field1: 0 ' test_tool recsel-sex-real-lessthan ok \ recsel \ '-e "field1 < -5.2"' \ real-fields \ 'field1: -10.0 ' test_tool recsel-sex-real-biggerthan ok \ recsel \ '-e "field1 > 3.14"' \ real-fields \ 'field1: 10.0 ' test_tool recsel-sex-real-plus ok \ recsel \ '-e "((field1 + 2) > 5.14) && ((field1 + 2) < 5.15)"' \ real-fields \ 'field1: 3.14 ' #test_tool recsel-sex-real-minus \ # recsel \ # '-e "((field1 - 2.0) > -12.0)"' \ # real-fields \ #'field1: -10.0 #' test_tool recsel-sex-real-mul ok \ recsel \ '-e "field1 * 20.0 = 200.0"' \ real-fields \ 'field1: 10.0 ' test_tool recsel-sex-sharp-zero ok \ recsel \ '-e "#field1 = 0"' \ recurrent-fields \ 'field2: value22 field3: value23 ' test_tool recsel-sex-sharp-one ok \ recsel \ '-e "#field3 = 1"' \ recurrent-fields \ 'field2: value22 field3: value23 ' test_tool recsel-sex-sharp-multiple ok \ recsel \ '-e "#field2 = 2"' \ recurrent-fields \ 'field1: value11 field2: value121 field2: value122 ' test_tool recsel-sex-sharp-multiple-2 ok \ recsel \ '-e "#Index = 1"' \ recurrent-fields-2 \ 'Name: bar Index: 7 ' test_tool recsel-sex-sharp-subname ok \ recsel \ '-t Package -j Maintainer -e "#Maintainer.URL" -P Maintainer.URL' \ packages-maintainers \ 'http://www.jemarch.net http://www.jemarch.net ' test_tool recsel-sex-match ok \ recsel \ '-p Name -e "Name ~ '\''Tom'\''"' \ academy \ 'Name: Tom Johnson Name: Tommy Junior ' test_tool recsel-sex-date-sametime ok \ recsel \ '-e "Date == '\''Tue Nov 30 12:00:00 CET 2010'\''"' \ dates \ 'Date: Tue Nov 30 12:00:00 CET 2010 ' test_tool recsel-sex-date-before ok \ recsel \ '-e "Date << '\''Tue Nov 30 12:00:00 CET 2030'\''"' \ dates \ 'Date: Tue Nov 30 12:00:00 CET 2002 Date: Tue Nov 30 12:00:00 CET 2010 ' test_tool recsel-sex-date-after ok \ recsel \ '-e "Date >> '\''Tue Nov 30 12:00:00 CET 2002'\''"' \ dates \ 'Date: Tue Nov 30 12:00:00 CET 2010 Date: Tue Nov 30 12:00:00 CET 2030 ' test_tool recsel-sex-implies-1 ok \ recsel \ '-e "Status = '\''Closed'\'' => #ClosedBy"' \ implications \ 'Id: 0 Status: Closed ClosedBy: jemarch Id: 2 Status: Open ' test_tool recsel-sex-conditional-1 ok \ recsel \ '-e "Role ~ '\''Professor'\'' ? Age > 65 : Age < 10" -p Name' \ academy \ 'Name: Tom Johnson Name: Tommy Junior ' test_tool recsel-sex-conditional-2 ok \ recsel \ '-e "(Role ~ '\''Professor'\'') ? (Age < 65) : (Age > 10)" -p Name' \ academy \ 'Name: John Smith Name: Johnny NotSoJunior ' test_tool recsel-sex-string-single-quote ok \ recsel \ '-e "(Role ~ '\''Professor'\'')" -p Name' \ academy \ 'Name: John Smith Name: Tom Johnson ' test_tool recsel-sex-string-double-quote ok \ recsel \ "-e '(Role ~ "\""Professor"\"")' -p Name" \ academy \ 'Name: John Smith Name: Tom Johnson ' test_tool recsel-sex-string-multiline ok \ recsel \ "-e 'field2 = "\"" foo bar"\""' -c" \ multiline \ '1 ' test_tool recsel-sex-string-equal ok \ recsel \ "-e 'field2 = \"value12\"'" \ multiple-records \ 'field1: value11 field2: value12 field3: value13 ' test_tool recsel-sex-string-non-equal ok \ recsel \ "-e 'field2 != \"value12\"'" \ multiple-records \ 'field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' test_tool recsel-sex-string-equal-insensitive ok \ recsel \ "-i -e 'field2 = \"vaLue12\"'" \ multiple-records \ 'field1: value11 field2: value12 field3: value13 ' test_tool recsel-sex-string-non-equal-insensitive ok \ recsel \ "-i -e 'field2 != \"vaLue12\"'" \ multiple-records \ 'field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' test_tool recsel-quick-simple ok \ recsel \ "-q value22" \ multiple-records \ 'field1: value21 field2: value22 field3: value23 ' test_tool recsel-quick-not-found ok \ recsel \ "-q notfound" \ multiple-records \ '' test_tool recsel-quick-and-sex xfail \ recsel \ "-q foo -e 'Bar = 10'" \ multiple-records test_tool recsel-sex-and-quick xfail \ recsel \ "-e 'Bar = 10' -q foo" \ multiple-records test_tool recsel-quick-and-num xfail \ recsel \ "-q foo -n 5" \ multiple-records test_tool recsel-num-and-quick xfail \ recsel \ "-n 5 -q foo" \ multiple-records test_tool recsel-num-and-random xfail \ recsel \ "-n 5 -m 2" \ multiple-records test_tool recsel-sex-and-random xfail \ recsel \ "-e 'field1 = 10' -m 2" \ multiple-records test_tool recsel-quick-and-random xfail \ recsel \ "-q foo -m 1" \ multiple-records if test "x$crypt_support" = "xyes"; then test_tool recsel-confidential ok \ recsel \ '-s secret' \ confidential \ 'User: foo Password: secret ' test_tool recsel-confidential-fex ok \ recsel \ '-s secret -p Password' \ confidential \ 'Password: secret ' test_tool recsel-confidential-fex-value ok \ recsel \ '-s secret -P Password' \ confidential \ 'secret ' test_tool recsel-confidential-num ok \ recsel \ '-s secret -n 0' \ confidential \ 'User: foo Password: secret ' fi # crypt_support test_tool recsel-sort ok \ recsel \ '' \ sort \ 'Id: -2 Key: baz Id: 20 Key: bar Id: 100 Key: foo ' test_tool recsel-sort-with-comment ok \ recsel \ '' \ sort-with-comment \ 'Id: -2 Key: baz Id: 20 Key: bar Id: 100 Key: foo ' test_tool recsel-sort-multiple ok \ recsel \ '' \ sort-multiple \ 'Item: four Class: A Price: 10 Item: two Class: A Price: 30 Item: five Class: B Price: 15 Item: one Class: B Price: 30 Item: three Class: C Price: 40 ' test_tool recsel-sort-field ok \ recsel \ '-S Key' \ sort \ 'Id: 20 Key: bar Id: -2 Key: baz Id: 100 Key: foo ' test_tool recsel-sort-field-multiple ok \ recsel \ '-S Price,Class' \ sort-multiple \ 'Item: four Class: A Price: 10 Item: five Class: B Price: 15 Item: two Class: A Price: 30 Item: one Class: B Price: 30 Item: three Class: C Price: 40 ' test_tool recsel-sort-field-nonexist ok \ recsel \ '-S doesnotexist' \ sort \ 'Id: 100 Key: foo Id: 20 Key: bar Id: -2 Key: baz ' test_tool recsel-empty-field-values ok \ recsel \ '' \ empty-field-values \ 'a: a1 b: c: d: d1 ' test_tool recsel-uniq ok \ recsel \ '-U' \ duplicated-fields \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value21 field1: value31 field2: field3: value33 field1: foo ' test_tool recsel-uniq-long ok \ recsel \ '--uniq' \ duplicated-fields \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value21 field1: value31 field2: field3: value33 field1: foo ' test_tool recsel-random-all ok \ recsel \ '-m 0' \ multiple-records \ 'field1: value11 field2: value12 field3: value13 field1: value21 field2: value22 field3: value23 field1: value31 field2: value32 field3: value33 ' test_tool recsel-random-one ok \ recsel \ '-m 1' \ one-record \ 'field1: value1 field2: value2 field3: value3 ' test_tool recsel-group-records ok \ recsel \ '-G id' \ group-records \ 'id: 1 pos: 2 pos: 3 id: 2 pos: 4 id: 3 pos: 1 pos: 5 ' test_tool recsel-group-records-sort ok \ recsel \ '-G pos' \ group-records \ 'id: 3 pos: 1 id: 1 pos: 2 id: 1 pos: 3 id: 2 pos: 4 id: 3 pos: 5 ' test_tool recsel-group-records-non-existing-field ok \ recsel \ '-G doesnotexist' \ group-records \ 'id: 3 pos: 1 id: 1 pos: 2 id: 1 pos: 3 id: 2 pos: 4 id: 3 pos: 5 ' test_tool recsel-group-one-record ok \ recsel \ '-G field3' \ one-record \ 'field1: value1 field2: value2 field3: value3 ' test_tool recsel-group-records-missing ok \ recsel \ '-G id' \ group-records-missing \ 'pos: 3 id: 1 pos: 2 id: 2 pos: 4 id: 3 pos: 1 pos: 5 ' test_tool recsel-group-multiple-fields ok \ recsel \ '-G Date,Item' \ sales \ 'Item: C Date: 12 January 2003 Cost: 12 Item: B Date: 20 April 2012 Cost: 50 Item: D Date: 20 April 2012 Cost: 100 Item: A Date: 21 April 2012 Cost: 23 Cost: 10 ' # rewrite rule test_tool recsel-aggregate-field-name ok \ recsel \ '-p "Count(Cost)"' \ sales \ 'Count_Cost: 5 ' test_tool recsel-aggregate-case-insensitive ok \ recsel \ '-p "cOuNt(Cost)"' \ sales \ 'cOuNt_Cost: 5 ' test_tool recsel-aggregate-rewrite-rule ok \ recsel \ '-p "Count(Cost):MyCount"' \ sales \ 'MyCount: 5 ' test_tool recsel-aggregate-count-overall ok \ recsel \ '-P "Count(Cost)"' \ sales \ '5 ' test_tool recsel-aggregate-count-grouped ok \ recsel \ '-p "Item,Count(Cost)" -G Item' \ sales \ 'Item: A Count_Cost: 2 Item: B Count_Cost: 1 Item: C Count_Cost: 1 Item: D Count_Cost: 1 ' test_tool recsel-aggregate-avg-overall ok \ recsel \ '-P "Avg(Cost)"' \ sales \ '39 ' test_tool recsel-aggregate-avg-grouped ok \ recsel \ '-p "Item,Avg(Cost)" -G Item' \ sales \ 'Item: A Avg_Cost: 16.5 Item: B Avg_Cost: 50 Item: C Avg_Cost: 12 Item: D Avg_Cost: 100 ' test_tool recsel-aggregate-sum-overall ok \ recsel \ '-P "Sum(Cost)"' \ sales \ '195 ' test_tool recsel-aggregate-sum-grouped ok \ recsel \ '-p "Item,Sum(Cost):TotalCost" -G Item' \ sales \ 'Item: A TotalCost: 33 Item: B TotalCost: 50 Item: C TotalCost: 12 Item: D TotalCost: 100 ' test_tool recsel-aggregate-sum-negative ok \ recsel \ '-p "Sum(bar):TotalBar"' \ negative_fields \ 'TotalBar: -19 ' test_tool recsel-aggregate-min-overall ok \ recsel \ '-P "Min(Cost)"' \ sales \ '10 ' test_tool recsel-aggregate-min-grouped ok \ recsel \ '-p "Item,Min(Cost)" -G Item' \ sales \ 'Item: A Min_Cost: 10 Item: B Min_Cost: 50 Item: C Min_Cost: 12 Item: D Min_Cost: 100 ' test_tool recsel-aggregate-max-overall ok \ recsel \ '-P "Max(Cost)"' \ sales \ '100 ' test_tool recsel-aggregate-max-grouped ok \ recsel \ '-p "Item,Max(Cost)" -G Item' \ sales \ 'Item: A Max_Cost: 23 Item: B Max_Cost: 50 Item: C Max_Cost: 12 Item: D Max_Cost: 100 ' test_tool recsel-fex-rewrite-all ok \ recsel \ "-p field1,field2:xxx,field3" \ repeated-fields \ 'field1: value11 xxx: value121 xxx: value122 field3: value13 field1: value21 xxx: value221 xxx: value222 field3: value23 ' test_tool recsel-fex-rewrite-subscript-single ok \ recsel \ "-p field1,field2[0]:xxx,field2[1],field3" \ repeated-fields \ 'field1: value11 xxx: value121 field2: value122 field3: value13 field1: value21 xxx: value221 field2: value222 field3: value23 ' test_tool recsel-fex-rewrite-subscript-multi ok \ recsel \ "-p field1,field2[0-1]:xxx,field3" \ repeated-fields \ 'field1: value11 xxx: value121 xxx: value122 field3: value13 field1: value21 xxx: value221 xxx: value222 field3: value23 ' test_tool recsel-fex-rewrite-several ok \ recsel \ "-p field1,field2:xxx,field3:yyy" \ repeated-fields \ 'field1: value11 xxx: value121 xxx: value122 yyy: value13 field1: value21 xxx: value221 xxx: value222 yyy: value23 ' test_tool recsel-descriptor ok \ recsel \ "-t type2 -d" \ multiple-types \ '%rec: type2 field1: value21 field2: value22 field3: value23 ' test_tool recsel-nonexistent-print ok \ recsel \ '-p dontexist' \ multiple-records \ '' test_tool recsel-join-default-rset xfail \ recsel \ '-j field2' \ multiple-records test_tool recsel-join-no-foreign ok \ recsel \ '-t type1 -j field2' \ multiple-types \ 'field1: value11 field2: value12 field3: value13 ' test_tool recsel-non-existant-foreign-key ok \ recsel \ '-t Record -j Foreign' \ non-existant-foreign-key \ 'Name: Fred Foreign: xxx ' test_tool recsel-several-foreign-keys ok \ recsel \ '-t T -j Requirement -p Id,Requirement.Id' \ several-foreign-keys \ 'Id: T1 Requirement_Id: R1 Id: T2 Requirement_Id: R2 Id: T2 Requirement_Id: R3 Id: T3 Requirement_Id: R3 ' test_tool recsel-join-descriptor ok \ recsel \ '-t Package -j Maintainer -d -p Name' \ packages-maintainers \ '%rec: Package_Maintainer Name: GNU PDF Name: GNU PDF Name: GNU recutils Name: GNU Emacs ' test_tool recsel-unquoted-lisp-strings ok \ recsel \ '--print-sexps' \ unquoted-lisp-strings \ '(record 0 ( (field 0 "foo" "fo\\o") (field 11 "bar" "a quote\"etouq a"))) ' test_tool recsel-sex-single-char-field-names ok \ recsel \ '-e "c = 30"' \ single-char-field-names \ 'c: 30 d: 40 ' test_tool recsel-record-with-comments ok \ recsel \ '' \ record-with-comments \ 'foo1: v1 foo2: v2 bar1: v1 bar2: v2 ' test_tool recsel-ignored-first-blanks ok \ recsel \ '' \ ignored-first-blanks \ 'foo: v1 bar: v2 ' # # Cleanup # test_cleanup exit $? # End of recsel.sh �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-comment/�������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�014117� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-comment/rec-comment-equal-p.c����������������������������������������������0000644�0000000�0000000�00000004500�14226563465�017754� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-comment-equal-p.c * Date: Fri Oct 29 11:58:25 2010 * * GNU recutils - rec_comment_equal_p unit tests * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_comment_equal_p_nominal * Unit: rec_comment_equal_p * Description: * + Compare comments. * + * + 1. The comparisons shall be correct. */ START_TEST(rec_comment_equal_p_nominal) { rec_comment_t comment1; rec_comment_t comment2; rec_comment_t comment3; rec_comment_t comment_empty; comment1 = rec_comment_new ("abc"); fail_if (comment1 == NULL); comment2 = rec_comment_new ("xyz"); fail_if (comment2 == NULL); comment3 = rec_comment_new ("abc"); /* Same than comment1 */ fail_if (comment3 == NULL); comment_empty = rec_comment_new (""); fail_if (comment_empty == NULL); fail_if (rec_comment_equal_p (comment1, comment2)); fail_if (rec_comment_equal_p (comment1, comment_empty)); fail_if (rec_comment_equal_p (comment2, comment_empty)); fail_if (!rec_comment_equal_p (comment1, comment1)); fail_if (!rec_comment_equal_p (comment_empty, comment_empty)); fail_if (!rec_comment_equal_p (comment1, comment3)); rec_comment_destroy (comment1); rec_comment_destroy (comment2); rec_comment_destroy (comment3); rec_comment_destroy (comment_empty); } END_TEST /* * Test case creation function */ TCase * test_rec_comment_equal_p (void) { TCase *tc = tcase_create ("rec-comment-equal-p"); tcase_add_test (tc, rec_comment_equal_p_nominal); return tc; } /* End of rec-comment-equal-p.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-comment/rec-comment-text.c�������������������������������������������������0000644�0000000�0000000�00000004124�14226563465�017376� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-comment-text.c * Date: Fri Oct 29 11:48:45 2010 * * GNU recutils - rec_comment_text unit tests * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_comment_text_nominal * Unit: rec_comment_text * Description: * + Get the contents of a comment. * + * + 1. The function shall return the right contents. */ START_TEST(rec_comment_text_nominal) { rec_comment_t comment; comment = rec_comment_new ("abc"); fail_if (comment == NULL); fail_if (strcmp ("abc", rec_comment_text (comment)) != 0); rec_comment_destroy (comment); } END_TEST /*- * Test: rec_comment_text_empty * Unit: rec_comment_text * Description: * + Get the contents of an empty comment. * + * + 1. The function shall return the empty string. */ START_TEST(rec_comment_text_empty) { rec_comment_t comment; comment = rec_comment_new (""); fail_if (comment == NULL); fail_if (strcmp ("", rec_comment_text (comment)) != 0); rec_comment_destroy (comment); } END_TEST /* * Test case creation function */ TCase * test_rec_comment_text (void) { TCase *tc = tcase_create ("rec-comment-text"); tcase_add_test (tc, rec_comment_text_nominal); tcase_add_test (tc, rec_comment_text_empty); return tc; } /* End of rec-comment-text.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-comment/tsuite-rec-comment.c�����������������������������������������������0000644�0000000�0000000�00000003171�14226563465�017730� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: tsuite-rec-comment.c * Date: Fri Oct 29 11:19:36 2010 * * GNU recutils - rec_comment test suite * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> extern TCase *test_rec_comment_new (void); extern TCase *test_rec_comment_destroy (void); extern TCase *test_rec_comment_dup (void); extern TCase *test_rec_comment_text (void); extern TCase *test_rec_comment_set_text (void); extern TCase *test_rec_comment_equal_p (void); Suite * tsuite_rec_comment () { Suite *s; s = suite_create ("rec-comment"); suite_add_tcase (s, test_rec_comment_new ()); suite_add_tcase (s, test_rec_comment_destroy ()); suite_add_tcase (s, test_rec_comment_dup ()); suite_add_tcase (s, test_rec_comment_text ()); suite_add_tcase (s, test_rec_comment_set_text ()); suite_add_tcase (s, test_rec_comment_equal_p ()); return s; } /* End of tsuite-rec-comment.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-comment/rec-comment-set-text.c���������������������������������������������0000644�0000000�0000000�00000003474�14226563465�020176� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-comment-set-text.c * Date: Fri Oct 29 11:54:14 2010 * * GNU recutils - rec_comment_set_text unit tests * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_comment_set_text_nominal * Unit: rec_comment_set_text * Description: * + Set the text of a comment. * + * + 1. The function shall change the value of the comment. */ START_TEST(rec_comment_set_text_nominal) { rec_comment_t comment; comment = rec_comment_new ("abc"); fail_if (comment == NULL); rec_comment_set_text (&comment, "xyz"); fail_if (strcmp ("xyz", rec_comment_text (comment)) != 0); rec_comment_set_text (&comment, ""); fail_if (strcmp ("", rec_comment_text (comment)) != 0); rec_comment_destroy (comment); } END_TEST /* * Test case creation function */ TCase * test_rec_comment_set_text (void) { TCase *tc = tcase_create ("rec-comment-set-text"); tcase_add_test (tc, rec_comment_set_text_nominal); return tc; } /* End of rec-comment-set-text.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-comment/rec-comment-destroy.c����������������������������������������������0000644�0000000�0000000�00000003057�14226563465�020107� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-comment-destroy.c * Date: Fri Oct 29 11:27:27 2010 * * GNU recutils - rec_comment_destroy unit tests * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_comment_destroy_nominal * Unit: rec_comment_destroy * Description: * + Destroy a properly created comment. * + * + 1. The call shall not crash. */ START_TEST(rec_comment_destroy_nominal) { rec_comment_t comment; comment = rec_comment_new ("abc"); fail_if (comment == NULL); rec_comment_destroy (comment); } END_TEST /* * Test case creation function */ TCase * test_rec_comment_destroy (void) { TCase *tc = tcase_create ("rec-comment-destroy"); tcase_add_test (tc, rec_comment_destroy_nominal); return tc; } /* End of rec-comment-destroy.c */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-comment/rec-comment-dup.c��������������������������������������������������0000644�0000000�0000000�00000003575�14226563465�017213� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-comment-dup.c * Date: Fri Oct 29 11:31:22 2010 * * GNU recutils - rec_comment_dup unit tests * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_comment_dup_nominal * Unit: rec_comment_dup * Description: * + Dup a properly initialized comment. * + * + 1. The call to rec_comment_dup shall return a * + non-null pointer different that the original. * + 2. The contents of the copy shall be the same * + than the contents of the original. */ START_TEST(rec_comment_dup_nominal) { rec_comment_t comment; rec_comment_t copy; comment = rec_comment_new ("abc"); fail_if (comment == NULL); copy = rec_comment_dup (comment); fail_if (copy == NULL); fail_if (copy == comment); fail_if (strcmp (rec_comment_text (copy), "abc") != 0); rec_comment_destroy (comment); rec_comment_destroy (copy); } END_TEST /* * Test case creation function */ TCase * test_rec_comment_dup (void) { TCase *tc = tcase_create ("rec-comment-dup"); tcase_add_test (tc, rec_comment_dup_nominal); return tc; } /* End of rec-comment-dup.c */ �����������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-comment/rec-comment-new.c��������������������������������������������������0000644�0000000�0000000�00000003600�14226563465�017201� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-comment-new.c * Date: Fri Oct 29 11:22:47 2010 * * GNU recutils - rec_comment_new unit tests * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_comment_new_nominal * Unit: rec_comment_new * Description: * + Create a new comment from a string. * + * + 1. rec_comment_new shall return a non-NULL pointer. */ START_TEST(rec_comment_new_nominal) { rec_comment_t comment; comment = rec_comment_new ("foo"); fail_if (comment == NULL); rec_comment_destroy (comment); } END_TEST /*- * Test: rec_comment_new_null * Unit: rec_comment_new * Description: * + Create a new comment from a NULL. * + * + 1. rec_comment_new shall return NULL. */ START_TEST(rec_comment_new_null) { rec_comment_t comment; comment = rec_comment_new (NULL); fail_if (comment != NULL); } END_TEST /* * Test case creation function */ TCase * test_rec_comment_new (void) { TCase *tc = tcase_create ("rec_comment_new"); tcase_add_test (tc, rec_comment_new_nominal); tcase_add_test (tc, rec_comment_new_null); return tc; } /* End of rec-comment-new.c */ ��������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field-name/����������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�014456� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field-name/rec-field-name-p.c����������������������������������������������0000644�0000000�0000000�00000003343�14226563465�017551� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-name-p.c * Date: Fri Oct 29 15:26:11 2010 * * GNU recutils - rec_field_name_part_str_p unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_name_p_nominal * Unit: rec_field_name_p * Description: * + Check field name parts. */ START_TEST(rec_field_name_part_str_p_nominal) { fail_if (rec_field_name_p ("")); fail_if (rec_field_name_p (":")); fail_if (rec_field_name_p ("-x")); fail_if (rec_field_name_p ("_x")); fail_if (rec_field_name_p ("0x")); fail_if (rec_field_name_p ("x%")); fail_if (!rec_field_name_p ("%")); fail_if (!rec_field_name_p ("ax")); fail_if (!rec_field_name_p ("Ax")); } END_TEST /* * Test case creation function */ TCase * test_rec_field_name_p (void) { TCase *tc = tcase_create ("rec_field_name_part_str_p"); tcase_add_test (tc, rec_field_name_part_str_p_nominal); return tc; } /* End of rec-field-name-part-str-p.c */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field-name/rec-field-name-normalise.c��������������������������������������0000644�0000000�0000000�00000003513�14226563465�021302� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-name-normalise.c * Date: Fri Oct 29 15:38:54 2010 * * GNU recutils - rec_field_name_normalise unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_name_normalise_nominal * Unit: rec_field_name_normalise * Description: * + Check normalisation of names. */ START_TEST(rec_field_name_normalise_nominal) { char *normalised; normalised = rec_field_name_normalise ("abc"); fail_if (normalised == NULL); fail_if (strcmp (normalised, "abc") != 0); free (normalised); normalised = rec_field_name_normalise ("a#c d"); fail_if (normalised == NULL); fail_if (strcmp (normalised, "a_c_d") != 0); free (normalised); normalised = rec_field_name_normalise ("a-b%c_d"); fail_if (normalised != NULL); free (normalised); } END_TEST /* * Test case creation function */ TCase * test_rec_field_name_normalise (void) { TCase *tc = tcase_create ("rec_field_name_normalise"); tcase_add_test (tc, rec_field_name_normalise_nominal); return tc; } /* End of rec-field-name-normalise.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field-name/tsuite-rec-field-name.c�����������������������������������������0000644�0000000�0000000�00000002526�14226563465�020631� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: tsuite-rec-field-name.c * Date: Fri Oct 29 13:43:08 2010 * * GNU recutils - rec_field_name test suite * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> extern TCase *test_rec_field_name_equal_p (void); extern TCase *test_rec_field_name_normalise (void); extern TCase *test_rec_field_name_p (void); Suite * tsuite_rec_field_name () { Suite *s; s = suite_create ("rec-field-name"); suite_add_tcase (s, test_rec_field_name_equal_p ()); suite_add_tcase (s, test_rec_field_name_normalise ()); suite_add_tcase (s, test_rec_field_name_p ()); return s; } /* End of tsuite-rec-field-name.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field-name/rec-field-name-equal-p.c����������������������������������������0000644�0000000�0000000�00000004047�14226563465�020660� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-name-equal-p.c * Date: Fri Oct 29 14:35:27 2010 * * GNU recutils - rec_field_name_equal_p unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_name_equal_p_empty * Unit: rec_field_name_equal_p * Description: * + Compare two empty field names with * + rec_field_name_equal_p. * + * + 1. The function call shall return true. */ START_TEST(rec_field_name_equal_p_empty) { const char *fname1 = ""; const char *fname2 = ""; fail_if (!rec_field_name_equal_p (fname1, fname2)); } END_TEST /*- * Test: rec_field_name_equal_p_nonempty * Unit: rec_field_name_equal_p * Description: * + Compare two field names with * + rec_field_name_equal_p. */ START_TEST(rec_field_name_equal_p_nonempty) { const char *fname1 = "a"; const char *fname2 = "a"; const char *fname3 = "c"; fail_if (!rec_field_name_equal_p (fname1, fname1)); fail_if (!rec_field_name_equal_p (fname1, fname2)); fail_if (rec_field_name_equal_p (fname1, fname3)); } END_TEST /* * Test case creation function */ TCase * test_rec_field_name_equal_p (void) { TCase *tc = tcase_create ("rec-field-name-equal-p"); tcase_add_test (tc, rec_field_name_equal_p_empty); tcase_add_test (tc, rec_field_name_equal_p_nonempty); return tc; } /* End of rec-field-name-equal-p.c */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/Makefile.in��������������������������������������������������������������������0000644�0000000�0000000�00001373234�14226573151�013700� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # torture/ Makefile.am # GNU rec library # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 # Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # Note that we want to run the unit tests first. They are stored in # the rec-* subdirectories, but commanded by the Makefile in the # current directory. That explains the dot in the SUBDIRS variable # definition. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @CHECK_TRUE@TESTS = runtests$(EXEEXT) @CHECK_TRUE@noinst_PROGRAMS = runtests$(EXEEXT) subdir = torture ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 \ $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/calloc.m4 \ $(top_srcdir)/m4/canonicalize.m4 \ $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/clock_time.m4 \ $(top_srcdir)/m4/close.m4 $(top_srcdir)/m4/closedir.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/copy-file-range.m4 \ $(top_srcdir)/m4/copy-file.m4 $(top_srcdir)/m4/d-ino.m4 \ $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup.m4 \ $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eaccess.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ $(top_srcdir)/m4/explicit_bzero.m4 \ $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 \ $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fchdir.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \ $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \ $(top_srcdir)/m4/filenamecat.m4 \ $(top_srcdir)/m4/findprog-in.m4 $(top_srcdir)/m4/flexmember.m4 \ $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/flock.m4 \ $(top_srcdir)/m4/floor.m4 $(top_srcdir)/m4/fopen.m4 \ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ $(top_srcdir)/m4/fseek.m4 $(top_srcdir)/m4/fseeko.m4 \ $(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \ $(top_srcdir)/m4/fstatat.m4 $(top_srcdir)/m4/ftell.m4 \ $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ $(top_srcdir)/m4/getcwd-abort-bug.m4 \ $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \ $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \ $(top_srcdir)/m4/getpass.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/getrandom.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/group-member.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexpl.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrlen.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/minmax.m4 \ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkostemp.m4 \ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \ $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/opendir.m4 \ $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ $(top_srcdir)/m4/posix_spawn_faction_addchdir.m4 \ $(top_srcdir)/m4/printf-frexp.m4 \ $(top_srcdir)/m4/printf-frexpl.m4 \ $(top_srcdir)/m4/printf-posix-rpl.m4 \ $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readdir.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/remove.m4 \ $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rewinddir.m4 \ $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/safe-read.m4 \ $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/save-cwd.m4 \ $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ $(top_srcdir)/m4/selinux-context-h.m4 \ $(top_srcdir)/m4/selinux-label-h.m4 \ $(top_srcdir)/m4/selinux-selinux-h.m4 \ $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/setlocale_null.m4 \ $(top_srcdir)/m4/sh-filename.m4 \ $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ $(top_srcdir)/m4/signal_h.m4 \ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/stdio_h.m4 \ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/stpcpy.m4 \ $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ $(top_srcdir)/m4/sys_random_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink.m4 \ $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utime.m4 \ $(top_srcdir)/m4/utime_h.m4 $(top_srcdir)/m4/utimens.m4 \ $(top_srcdir)/m4/utimes.m4 \ $(top_srcdir)/m4/vasnprintf-posix.m4 \ $(top_srcdir)/m4/vasnprintf.m4 \ $(top_srcdir)/m4/vasprintf-posix.m4 \ $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ $(top_srcdir)/m4/vfprintf-posix.m4 \ $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/write.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/year2038.m4 \ $(top_srcdir)/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = PROGRAMS = $(noinst_PROGRAMS) am__runtests_SOURCES_DIST = runtests.c rec-mset/elem-types.h \ rec-mset/rec-mset-new.c rec-mset/rec-mset-dup.c \ rec-mset/rec-mset-type-p.c rec-mset/rec-mset-register-type.c \ rec-mset/rec-mset-count.c rec-mset/rec-mset-get-at.c \ rec-mset/tsuite-rec-mset.c rec-comment/rec-comment-new.c \ rec-comment/rec-comment-destroy.c \ rec-comment/rec-comment-dup.c rec-comment/rec-comment-text.c \ rec-comment/rec-comment-set-text.c \ rec-comment/rec-comment-equal-p.c \ rec-comment/tsuite-rec-comment.c \ rec-field-name/rec-field-name-equal-p.c \ rec-field-name/rec-field-name-p.c \ rec-field-name/rec-field-name-normalise.c \ rec-field-name/tsuite-rec-field-name.c rec-type/rec-type-new.c \ rec-type/rec-type-destroy.c rec-type/rec-type-descr-p.c \ rec-type/rec-type-kind.c rec-type/rec-type-kind-str.c \ rec-type/rec-type-equal-p.c rec-type/rec-type-check.c \ rec-type/rec-type-name.c rec-type/rec-type-set-name.c \ rec-type/tsuite-rec-type.c rec-type-reg/rec-type-reg-new.c \ rec-type-reg/rec-type-reg-destroy.c \ rec-type-reg/tsuite-rec-type-reg.c \ rec-type-reg/rec-type-reg-get.c rec-field/rec-field-name.c \ rec-field/rec-field-set-name.c rec-field/rec-field-value.c \ rec-field/rec-field-set-value.c rec-field/rec-field-dup.c \ rec-field/rec-field-new.c rec-field/rec-field-destroy.c \ rec-field/rec-field-equal-p.c rec-field/rec-field-source.c \ rec-field/rec-field-set-source.c \ rec-field/rec-field-location.c \ rec-field/rec-field-location-str.c \ rec-field/rec-field-set-location.c \ rec-field/rec-field-char-location.c \ rec-field/rec-field-char-location-str.c \ rec-field/rec-field-set-char-location.c \ rec-field/rec-field-to-comment.c rec-field/tsuite-rec-field.c \ rec-record/tsuite-rec-record.c rec-fex/rec-fex-new.c \ rec-fex/rec-fex-destroy.c rec-fex/rec-fex-check.c \ rec-fex/rec-fex-sort.c rec-fex/rec-fex-size.c \ rec-fex/rec-fex-get.c rec-fex/rec-fex-elem-field-name.c \ rec-fex/rec-fex-elem-rewrite-to.c rec-fex/rec-fex-elem-min.c \ rec-fex/rec-fex-elem-max.c rec-fex/rec-fex-str.c \ rec-fex/tsuite-rec-fex.c rec-parser/rec-parser-new.c \ rec-parser/rec-parser-new-str.c \ rec-parser/rec-parser-new-mem.c \ rec-parser/rec-parser-destroy.c \ rec-parser/rec-parse-field-name-str.c \ rec-parser/rec-parse-field-name.c rec-parser/rec-parse-field.c \ rec-parser/rec-parse-record.c \ rec-parser/rec-parse-record-str.c rec-parser/rec-parse-rset.c \ rec-parser/rec-parse-db.c rec-parser/rec-parser-eof.c \ rec-parser/rec-parser-error.c rec-parser/rec-parser-reset.c \ rec-parser/rec-parser-perror.c \ rec-parser/rec-parser-seek-mem.c \ rec-parser/tsuite-rec-parser.c rec-writer/rec-write-comment.c \ rec-writer/rec-write-field.c rec-writer/rec-write-field-name.c \ rec-writer/rec-writer-destroy.c rec-writer/rec-write-record.c \ rec-writer/rec-writer-new.c rec-writer/rec-write-rset.c \ rec-writer/rec-write-db.c \ rec-writer/rec-write-field-name-str.c \ rec-writer/rec-write-field-str.c \ rec-writer/rec-write-comment-str.c \ rec-writer/tsuite-rec-writer.c rec-sex/rec-sex-new.c \ rec-sex/rec-sex-destroy.c rec-sex/rec-sex-compile.c \ rec-sex/rec-sex-eval.c rec-sex/tsuite-rec-sex.c am__dirstamp = $(am__leading_dot)dirstamp @CHECK_TRUE@am__objects_1 = rec-mset/runtests-rec-mset-new.$(OBJEXT) \ @CHECK_TRUE@ rec-mset/runtests-rec-mset-dup.$(OBJEXT) \ @CHECK_TRUE@ rec-mset/runtests-rec-mset-type-p.$(OBJEXT) \ @CHECK_TRUE@ rec-mset/runtests-rec-mset-register-type.$(OBJEXT) \ @CHECK_TRUE@ rec-mset/runtests-rec-mset-count.$(OBJEXT) \ @CHECK_TRUE@ rec-mset/runtests-rec-mset-get-at.$(OBJEXT) \ @CHECK_TRUE@ rec-mset/runtests-tsuite-rec-mset.$(OBJEXT) @CHECK_TRUE@am__objects_2 = \ @CHECK_TRUE@ rec-comment/runtests-rec-comment-new.$(OBJEXT) \ @CHECK_TRUE@ rec-comment/runtests-rec-comment-destroy.$(OBJEXT) \ @CHECK_TRUE@ rec-comment/runtests-rec-comment-dup.$(OBJEXT) \ @CHECK_TRUE@ rec-comment/runtests-rec-comment-text.$(OBJEXT) \ @CHECK_TRUE@ rec-comment/runtests-rec-comment-set-text.$(OBJEXT) \ @CHECK_TRUE@ rec-comment/runtests-rec-comment-equal-p.$(OBJEXT) \ @CHECK_TRUE@ rec-comment/runtests-tsuite-rec-comment.$(OBJEXT) @CHECK_TRUE@am__objects_3 = rec-field-name/runtests-rec-field-name-equal-p.$(OBJEXT) \ @CHECK_TRUE@ rec-field-name/runtests-rec-field-name-p.$(OBJEXT) \ @CHECK_TRUE@ rec-field-name/runtests-rec-field-name-normalise.$(OBJEXT) \ @CHECK_TRUE@ rec-field-name/runtests-tsuite-rec-field-name.$(OBJEXT) @CHECK_TRUE@am__objects_4 = rec-type/runtests-rec-type-new.$(OBJEXT) \ @CHECK_TRUE@ rec-type/runtests-rec-type-destroy.$(OBJEXT) \ @CHECK_TRUE@ rec-type/runtests-rec-type-descr-p.$(OBJEXT) \ @CHECK_TRUE@ rec-type/runtests-rec-type-kind.$(OBJEXT) \ @CHECK_TRUE@ rec-type/runtests-rec-type-kind-str.$(OBJEXT) \ @CHECK_TRUE@ rec-type/runtests-rec-type-equal-p.$(OBJEXT) \ @CHECK_TRUE@ rec-type/runtests-rec-type-check.$(OBJEXT) \ @CHECK_TRUE@ rec-type/runtests-rec-type-name.$(OBJEXT) \ @CHECK_TRUE@ rec-type/runtests-rec-type-set-name.$(OBJEXT) \ @CHECK_TRUE@ rec-type/runtests-tsuite-rec-type.$(OBJEXT) @CHECK_TRUE@am__objects_5 = \ @CHECK_TRUE@ rec-type-reg/runtests-rec-type-reg-new.$(OBJEXT) \ @CHECK_TRUE@ rec-type-reg/runtests-rec-type-reg-destroy.$(OBJEXT) \ @CHECK_TRUE@ rec-type-reg/runtests-tsuite-rec-type-reg.$(OBJEXT) \ @CHECK_TRUE@ rec-type-reg/runtests-rec-type-reg-get.$(OBJEXT) @CHECK_TRUE@am__objects_6 = \ @CHECK_TRUE@ rec-field/runtests-rec-field-name.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-set-name.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-value.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-set-value.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-dup.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-new.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-destroy.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-equal-p.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-source.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-set-source.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-location.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-location-str.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-set-location.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-char-location.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-char-location-str.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-set-char-location.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-rec-field-to-comment.$(OBJEXT) \ @CHECK_TRUE@ rec-field/runtests-tsuite-rec-field.$(OBJEXT) @CHECK_TRUE@am__objects_7 = \ @CHECK_TRUE@ rec-record/runtests-tsuite-rec-record.$(OBJEXT) @CHECK_TRUE@am__objects_8 = rec-fex/runtests-rec-fex-new.$(OBJEXT) \ @CHECK_TRUE@ rec-fex/runtests-rec-fex-destroy.$(OBJEXT) \ @CHECK_TRUE@ rec-fex/runtests-rec-fex-check.$(OBJEXT) \ @CHECK_TRUE@ rec-fex/runtests-rec-fex-sort.$(OBJEXT) \ @CHECK_TRUE@ rec-fex/runtests-rec-fex-size.$(OBJEXT) \ @CHECK_TRUE@ rec-fex/runtests-rec-fex-get.$(OBJEXT) \ @CHECK_TRUE@ rec-fex/runtests-rec-fex-elem-field-name.$(OBJEXT) \ @CHECK_TRUE@ rec-fex/runtests-rec-fex-elem-rewrite-to.$(OBJEXT) \ @CHECK_TRUE@ rec-fex/runtests-rec-fex-elem-min.$(OBJEXT) \ @CHECK_TRUE@ rec-fex/runtests-rec-fex-elem-max.$(OBJEXT) \ @CHECK_TRUE@ rec-fex/runtests-rec-fex-str.$(OBJEXT) \ @CHECK_TRUE@ rec-fex/runtests-tsuite-rec-fex.$(OBJEXT) @CHECK_TRUE@am__objects_9 = \ @CHECK_TRUE@ rec-parser/runtests-rec-parser-new.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parser-new-str.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parser-new-mem.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parser-destroy.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parse-field-name-str.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parse-field-name.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parse-field.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parse-record.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parse-record-str.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parse-rset.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parse-db.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parser-eof.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parser-error.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parser-reset.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parser-perror.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-rec-parser-seek-mem.$(OBJEXT) \ @CHECK_TRUE@ rec-parser/runtests-tsuite-rec-parser.$(OBJEXT) @CHECK_TRUE@am__objects_10 = \ @CHECK_TRUE@ rec-writer/runtests-rec-write-comment.$(OBJEXT) \ @CHECK_TRUE@ rec-writer/runtests-rec-write-field.$(OBJEXT) \ @CHECK_TRUE@ rec-writer/runtests-rec-write-field-name.$(OBJEXT) \ @CHECK_TRUE@ rec-writer/runtests-rec-writer-destroy.$(OBJEXT) \ @CHECK_TRUE@ rec-writer/runtests-rec-write-record.$(OBJEXT) \ @CHECK_TRUE@ rec-writer/runtests-rec-writer-new.$(OBJEXT) \ @CHECK_TRUE@ rec-writer/runtests-rec-write-rset.$(OBJEXT) \ @CHECK_TRUE@ rec-writer/runtests-rec-write-db.$(OBJEXT) \ @CHECK_TRUE@ rec-writer/runtests-rec-write-field-name-str.$(OBJEXT) \ @CHECK_TRUE@ rec-writer/runtests-rec-write-field-str.$(OBJEXT) \ @CHECK_TRUE@ rec-writer/runtests-rec-write-comment-str.$(OBJEXT) \ @CHECK_TRUE@ rec-writer/runtests-tsuite-rec-writer.$(OBJEXT) @CHECK_TRUE@am__objects_11 = rec-sex/runtests-rec-sex-new.$(OBJEXT) \ @CHECK_TRUE@ rec-sex/runtests-rec-sex-destroy.$(OBJEXT) \ @CHECK_TRUE@ rec-sex/runtests-rec-sex-compile.$(OBJEXT) \ @CHECK_TRUE@ rec-sex/runtests-rec-sex-eval.$(OBJEXT) \ @CHECK_TRUE@ rec-sex/runtests-tsuite-rec-sex.$(OBJEXT) @CHECK_TRUE@am_runtests_OBJECTS = runtests-runtests.$(OBJEXT) \ @CHECK_TRUE@ $(am__objects_1) $(am__objects_2) $(am__objects_3) \ @CHECK_TRUE@ $(am__objects_4) $(am__objects_5) $(am__objects_6) \ @CHECK_TRUE@ $(am__objects_7) $(am__objects_8) $(am__objects_9) \ @CHECK_TRUE@ $(am__objects_10) $(am__objects_11) runtests_OBJECTS = $(am_runtests_OBJECTS) am__DEPENDENCIES_1 = @CHECK_TRUE@runtests_DEPENDENCIES = $(am__DEPENDENCIES_1) \ @CHECK_TRUE@ ../src/librec.la AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = runtests_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(runtests_CFLAGS) \ $(CFLAGS) $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/runtests-runtests.Po \ rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Po \ rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Po \ rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Po \ rec-comment/$(DEPDIR)/runtests-rec-comment-new.Po \ rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Po \ rec-comment/$(DEPDIR)/runtests-rec-comment-text.Po \ rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Po \ rec-fex/$(DEPDIR)/runtests-rec-fex-check.Po \ rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Po \ rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Po \ rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Po \ rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Po \ rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Po \ rec-fex/$(DEPDIR)/runtests-rec-fex-get.Po \ rec-fex/$(DEPDIR)/runtests-rec-fex-new.Po \ rec-fex/$(DEPDIR)/runtests-rec-fex-size.Po \ rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Po \ rec-fex/$(DEPDIR)/runtests-rec-fex-str.Po \ rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Po \ rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Po \ rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Po \ rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Po \ rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Po \ rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Po \ rec-field/$(DEPDIR)/runtests-rec-field-char-location.Po \ rec-field/$(DEPDIR)/runtests-rec-field-destroy.Po \ rec-field/$(DEPDIR)/runtests-rec-field-dup.Po \ rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Po \ rec-field/$(DEPDIR)/runtests-rec-field-location-str.Po \ rec-field/$(DEPDIR)/runtests-rec-field-location.Po \ rec-field/$(DEPDIR)/runtests-rec-field-name.Po \ rec-field/$(DEPDIR)/runtests-rec-field-new.Po \ rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Po \ rec-field/$(DEPDIR)/runtests-rec-field-set-location.Po \ rec-field/$(DEPDIR)/runtests-rec-field-set-name.Po \ rec-field/$(DEPDIR)/runtests-rec-field-set-source.Po \ rec-field/$(DEPDIR)/runtests-rec-field-set-value.Po \ rec-field/$(DEPDIR)/runtests-rec-field-source.Po \ rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Po \ rec-field/$(DEPDIR)/runtests-rec-field-value.Po \ rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Po \ rec-mset/$(DEPDIR)/runtests-rec-mset-count.Po \ rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Po \ rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Po \ rec-mset/$(DEPDIR)/runtests-rec-mset-new.Po \ rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Po \ rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Po \ rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Po \ rec-parser/$(DEPDIR)/runtests-rec-parse-db.Po \ rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Po \ rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Po \ rec-parser/$(DEPDIR)/runtests-rec-parse-field.Po \ rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Po \ rec-parser/$(DEPDIR)/runtests-rec-parse-record.Po \ rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Po \ rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Po \ rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Po \ rec-parser/$(DEPDIR)/runtests-rec-parser-error.Po \ rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Po \ rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Po \ rec-parser/$(DEPDIR)/runtests-rec-parser-new.Po \ rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Po \ rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Po \ rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Po \ rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Po \ rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Po \ rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Po \ rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Po \ rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Po \ rec-sex/$(DEPDIR)/runtests-rec-sex-new.Po \ rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Po \ rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Po \ rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Po \ rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Po \ rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Po \ rec-type/$(DEPDIR)/runtests-rec-type-check.Po \ rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Po \ rec-type/$(DEPDIR)/runtests-rec-type-destroy.Po \ rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Po \ rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Po \ rec-type/$(DEPDIR)/runtests-rec-type-kind.Po \ rec-type/$(DEPDIR)/runtests-rec-type-name.Po \ rec-type/$(DEPDIR)/runtests-rec-type-new.Po \ rec-type/$(DEPDIR)/runtests-rec-type-set-name.Po \ rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Po \ rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Po \ rec-writer/$(DEPDIR)/runtests-rec-write-comment.Po \ rec-writer/$(DEPDIR)/runtests-rec-write-db.Po \ rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Po \ rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Po \ rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Po \ rec-writer/$(DEPDIR)/runtests-rec-write-field.Po \ rec-writer/$(DEPDIR)/runtests-rec-write-record.Po \ rec-writer/$(DEPDIR)/runtests-rec-write-rset.Po \ rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Po \ rec-writer/$(DEPDIR)/runtests-rec-writer-new.Po \ rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Po am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(runtests_SOURCES) DIST_SOURCES = $(am__runtests_SOURCES_DIST) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ check recheck distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__tty_colors_dummy = \ mgn= red= grn= lgn= blu= brg= std=; \ am__color_tests=no am__tty_colors = { \ $(am__tty_colors_dummy); \ if test "X$(AM_COLOR_TESTS)" = Xno; then \ am__color_tests=no; \ elif test "X$(AM_COLOR_TESTS)" = Xalways; then \ am__color_tests=yes; \ elif test "X$$TERM" != Xdumb && { test -t 1; } 2>/dev/null; then \ am__color_tests=yes; \ fi; \ if test $$am__color_tests = yes; then \ red=''; \ grn=''; \ lgn=''; \ blu=''; \ mgn=''; \ brg=''; \ std=''; \ fi; \ } am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__recheck_rx = ^[ ]*:recheck:[ ]* am__global_test_result_rx = ^[ ]*:global-test-result:[ ]* am__copy_in_global_log_rx = ^[ ]*:copy-in-global-log:[ ]* # A command that, given a newline-separated list of test names on the # standard input, print the name of the tests that are to be re-run # upon "make recheck". am__list_recheck_tests = $(AWK) '{ \ recheck = 1; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ { \ if ((getline line2 < ($$0 ".log")) < 0) \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[nN][Oo]/) \ { \ recheck = 0; \ break; \ } \ else if (line ~ /$(am__recheck_rx)[yY][eE][sS]/) \ { \ break; \ } \ }; \ if (recheck) \ print $$0; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # A command that, given a newline-separated list of test names on the # standard input, create the global log from their .trs and .log files. am__create_global_log = $(AWK) ' \ function fatal(msg) \ { \ print "fatal: making $@: " msg | "cat >&2"; \ exit 1; \ } \ function rst_section(header) \ { \ print header; \ len = length(header); \ for (i = 1; i <= len; i = i + 1) \ printf "="; \ printf "\n\n"; \ } \ { \ copy_in_global_log = 1; \ global_test_result = "RUN"; \ while ((rc = (getline line < ($$0 ".trs"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".trs"); \ if (line ~ /$(am__global_test_result_rx)/) \ { \ sub("$(am__global_test_result_rx)", "", line); \ sub("[ ]*$$", "", line); \ global_test_result = line; \ } \ else if (line ~ /$(am__copy_in_global_log_rx)[nN][oO]/) \ copy_in_global_log = 0; \ }; \ if (copy_in_global_log) \ { \ rst_section(global_test_result ": " $$0); \ while ((rc = (getline line < ($$0 ".log"))) != 0) \ { \ if (rc < 0) \ fatal("failed to read from " $$0 ".log"); \ print line; \ }; \ printf "\n"; \ }; \ close ($$0 ".trs"); \ close ($$0 ".log"); \ }' # Restructured Text title. am__rst_title = { sed 's/.*/ & /;h;s/./=/g;p;x;s/ *$$//;p;g' && echo; } # Solaris 10 'make', and several other traditional 'make' implementations, # pass "-e" to $(SHELL), and POSIX 2008 even requires this. Work around it # by disabling -e (using the XSI extension "set +e") if it's set. am__sh_e_setup = case $$- in *e*) set +e;; esac # Default flags passed to test drivers. am__common_driver_flags = \ --color-tests "$$am__color_tests" \ --enable-hard-errors "$$am__enable_hard_errors" \ --expect-failure "$$am__expect_failure" # To be inserted before the command running the test. Creates the # directory for the log if needed. Stores in $dir the directory # containing $f, in $tst the test, in $log the log. Executes the # developer- defined test setup AM_TESTS_ENVIRONMENT (if any), and # passes TESTS_ENVIRONMENT. Set up options for the wrapper that # will run the test scripts (or their associated LOG_COMPILER, if # thy have one). am__check_pre = \ $(am__sh_e_setup); \ $(am__vpath_adj_setup) $(am__vpath_adj) \ $(am__tty_colors); \ srcdir=$(srcdir); export srcdir; \ case "$@" in \ */*) am__odir=`echo "./$@" | sed 's|/[^/]*$$||'`;; \ *) am__odir=.;; \ esac; \ test "x$$am__odir" = x"." || test -d "$$am__odir" \ || $(MKDIR_P) "$$am__odir" || exit $$?; \ if test -f "./$$f"; then dir=./; \ elif test -f "$$f"; then dir=; \ else dir="$(srcdir)/"; fi; \ tst=$$dir$$f; log='$@'; \ if test -n '$(DISABLE_HARD_ERRORS)'; then \ am__enable_hard_errors=no; \ else \ am__enable_hard_errors=yes; \ fi; \ case " $(XFAIL_TESTS) " in \ *[\ \ ]$$f[\ \ ]* | *[\ \ ]$$dir$$f[\ \ ]*) \ am__expect_failure=yes;; \ *) \ am__expect_failure=no;; \ esac; \ $(AM_TESTS_ENVIRONMENT) $(TESTS_ENVIRONMENT) # A shell command to get the names of the tests scripts with any registered # extension removed (i.e., equivalently, the names of the test logs, with # the '.log' extension removed). The result is saved in the shell variable # '$bases'. This honors runtime overriding of TESTS and TEST_LOGS. Sadly, # we cannot use something simpler, involving e.g., "$(TEST_LOGS:.log=)", # since that might cause problem with VPATH rewrites for suffix-less tests. # See also 'test-harness-vpath-rewrite.sh' and 'test-trs-basic.sh'. am__set_TESTS_bases = \ bases='$(TEST_LOGS)'; \ bases=`for i in $$bases; do echo $$i; done | sed 's/\.log$$//'`; \ bases=`echo $$bases` AM_TESTSUITE_SUMMARY_HEADER = ' for $(PACKAGE_STRING)' RECHECK_LOGS = $(TEST_LOGS) TEST_SUITE_LOG = test-suite.log TEST_EXTENSIONS = @EXEEXT@ .test LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver LOG_COMPILE = $(LOG_COMPILER) $(AM_LOG_FLAGS) $(LOG_FLAGS) am__set_b = \ case '$@' in \ */*) \ case '$*' in \ */*) b='$*';; \ *) b=`echo '$@' | sed 's/\.log$$//'`; \ esac;; \ *) \ b='$*';; \ esac am__test_logs1 = $(TESTS:=.log) am__test_logs2 = $(am__test_logs1:@EXEEXT@.log=.log) TEST_LOGS = $(am__test_logs2:.test.log=.log) TEST_LOG_DRIVER = $(SHELL) $(top_srcdir)/build-aux/test-driver TEST_LOG_COMPILE = $(TEST_LOG_COMPILER) $(AM_TEST_LOG_FLAGS) \ $(TEST_LOG_FLAGS) DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp \ $(top_srcdir)/build-aux/test-driver DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_HEADERS = @BASH_HEADERS@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CURLLIBS = @CURLLIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ FLOOR_LIBM = @FLOOR_LIBM@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POSIX_SPAWN = @GL_GNULIB_POSIX_SPAWN@ GL_GNULIB_POSIX_SPAWNATTR_DESTROY = @GL_GNULIB_POSIX_SPAWNATTR_DESTROY@ GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ GL_GNULIB_POSIX_SPAWNATTR_INIT = @GL_GNULIB_POSIX_SPAWNATTR_INIT@ GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ GL_GNULIB_POSIX_SPAWNP = @GL_GNULIB_POSIX_SPAWNP@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIME = @GL_GNULIB_UTIME@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FLOCK = @HAVE_FLOCK@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SPAWN_H = @HAVE_SPAWN_H@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIME = @HAVE_UTIME@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_UTIME_H = @HAVE_UTIME_H@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGCRYPT = @LIBGCRYPT@ LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIB_ACL = @LIB_ACL@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ LIB_EACCESS = @LIB_EACCESS@ LIB_GETRANDOM = @LIB_GETRANDOM@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELINUX = @LIB_SELINUX@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBGCRYPT = @LTLIBGCRYPT@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBREADLINE = @LTLIBREADLINE@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MDBLIBS = @MDBLIBS@ MDB_DATETIME = @MDB_DATETIME@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_UTIME_H = @NEXT_AS_FIRST_DIRECTIVE_UTIME_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_SPAWN_H = @NEXT_SPAWN_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_UTIME_H = @NEXT_UTIME_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PARSE_DATETIME_BISON = @PARSE_DATETIME_BISON@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIME = @REPLACE_UTIME@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ SELINUX_LABEL_H = @SELINUX_LABEL_H@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_ACL = @USE_ACL@ USE_NLS = @USE_NLS@ UUIDLIBS = @UUIDLIBS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ crypt_support = @crypt_support@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ have_uuid = @have_uuid@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ SUBDIRS = . utils @CHECK_TRUE@REC_MSET_TSUITE = rec-mset/elem-types.h \ @CHECK_TRUE@ rec-mset/rec-mset-new.c \ @CHECK_TRUE@ rec-mset/rec-mset-dup.c \ @CHECK_TRUE@ rec-mset/rec-mset-type-p.c \ @CHECK_TRUE@ rec-mset/rec-mset-register-type.c \ @CHECK_TRUE@ rec-mset/rec-mset-count.c \ @CHECK_TRUE@ rec-mset/rec-mset-get-at.c \ @CHECK_TRUE@ rec-mset/tsuite-rec-mset.c @CHECK_TRUE@REC_COMMENT_TSUITE = rec-comment/rec-comment-new.c \ @CHECK_TRUE@ rec-comment/rec-comment-destroy.c \ @CHECK_TRUE@ rec-comment/rec-comment-dup.c \ @CHECK_TRUE@ rec-comment/rec-comment-text.c \ @CHECK_TRUE@ rec-comment/rec-comment-set-text.c \ @CHECK_TRUE@ rec-comment/rec-comment-equal-p.c \ @CHECK_TRUE@ rec-comment/tsuite-rec-comment.c @CHECK_TRUE@REC_FIELD_NAME_TSUITE = rec-field-name/rec-field-name-equal-p.c \ @CHECK_TRUE@ rec-field-name/rec-field-name-p.c \ @CHECK_TRUE@ rec-field-name/rec-field-name-normalise.c \ @CHECK_TRUE@ rec-field-name/tsuite-rec-field-name.c @CHECK_TRUE@REC_TYPE_TSUITE = rec-type/rec-type-new.c \ @CHECK_TRUE@ rec-type/rec-type-destroy.c \ @CHECK_TRUE@ rec-type/rec-type-descr-p.c \ @CHECK_TRUE@ rec-type/rec-type-kind.c \ @CHECK_TRUE@ rec-type/rec-type-kind-str.c \ @CHECK_TRUE@ rec-type/rec-type-equal-p.c \ @CHECK_TRUE@ rec-type/rec-type-check.c \ @CHECK_TRUE@ rec-type/rec-type-name.c \ @CHECK_TRUE@ rec-type/rec-type-set-name.c \ @CHECK_TRUE@ rec-type/tsuite-rec-type.c @CHECK_TRUE@REC_TYPE_REG_TSUITE = rec-type-reg/rec-type-reg-new.c \ @CHECK_TRUE@ rec-type-reg/rec-type-reg-destroy.c \ @CHECK_TRUE@ rec-type-reg/tsuite-rec-type-reg.c \ @CHECK_TRUE@ rec-type-reg/rec-type-reg-get.c @CHECK_TRUE@REC_FEX_TSUITE = rec-fex/rec-fex-new.c \ @CHECK_TRUE@ rec-fex/rec-fex-destroy.c \ @CHECK_TRUE@ rec-fex/rec-fex-check.c \ @CHECK_TRUE@ rec-fex/rec-fex-sort.c \ @CHECK_TRUE@ rec-fex/rec-fex-size.c \ @CHECK_TRUE@ rec-fex/rec-fex-get.c \ @CHECK_TRUE@ rec-fex/rec-fex-elem-field-name.c \ @CHECK_TRUE@ rec-fex/rec-fex-elem-rewrite-to.c \ @CHECK_TRUE@ rec-fex/rec-fex-elem-min.c \ @CHECK_TRUE@ rec-fex/rec-fex-elem-max.c \ @CHECK_TRUE@ rec-fex/rec-fex-str.c \ @CHECK_TRUE@ rec-fex/tsuite-rec-fex.c @CHECK_TRUE@REC_FIELD_TSUITE = rec-field/rec-field-name.c \ @CHECK_TRUE@ rec-field/rec-field-set-name.c \ @CHECK_TRUE@ rec-field/rec-field-value.c \ @CHECK_TRUE@ rec-field/rec-field-set-value.c \ @CHECK_TRUE@ rec-field/rec-field-dup.c \ @CHECK_TRUE@ rec-field/rec-field-new.c \ @CHECK_TRUE@ rec-field/rec-field-destroy.c \ @CHECK_TRUE@ rec-field/rec-field-equal-p.c \ @CHECK_TRUE@ rec-field/rec-field-source.c \ @CHECK_TRUE@ rec-field/rec-field-set-source.c \ @CHECK_TRUE@ rec-field/rec-field-location.c \ @CHECK_TRUE@ rec-field/rec-field-location-str.c \ @CHECK_TRUE@ rec-field/rec-field-set-location.c \ @CHECK_TRUE@ rec-field/rec-field-char-location.c \ @CHECK_TRUE@ rec-field/rec-field-char-location-str.c \ @CHECK_TRUE@ rec-field/rec-field-set-char-location.c \ @CHECK_TRUE@ rec-field/rec-field-to-comment.c \ @CHECK_TRUE@ rec-field/tsuite-rec-field.c @CHECK_TRUE@REC_RECORD_TSUITE = rec-record/tsuite-rec-record.c @CHECK_TRUE@REC_PARSER_TSUITE = rec-parser/rec-parser-new.c \ @CHECK_TRUE@ rec-parser/rec-parser-new-str.c \ @CHECK_TRUE@ rec-parser/rec-parser-new-mem.c \ @CHECK_TRUE@ rec-parser/rec-parser-destroy.c \ @CHECK_TRUE@ rec-parser/rec-parse-field-name-str.c \ @CHECK_TRUE@ rec-parser/rec-parse-field-name.c \ @CHECK_TRUE@ rec-parser/rec-parse-field.c \ @CHECK_TRUE@ rec-parser/rec-parse-record.c \ @CHECK_TRUE@ rec-parser/rec-parse-record-str.c \ @CHECK_TRUE@ rec-parser/rec-parse-rset.c \ @CHECK_TRUE@ rec-parser/rec-parse-db.c \ @CHECK_TRUE@ rec-parser/rec-parser-eof.c \ @CHECK_TRUE@ rec-parser/rec-parser-error.c \ @CHECK_TRUE@ rec-parser/rec-parser-reset.c \ @CHECK_TRUE@ rec-parser/rec-parser-perror.c \ @CHECK_TRUE@ rec-parser/rec-parser-seek-mem.c \ @CHECK_TRUE@ rec-parser/tsuite-rec-parser.c @CHECK_TRUE@REC_WRITER_TSUITE = rec-writer/rec-write-comment.c \ @CHECK_TRUE@ rec-writer/rec-write-field.c \ @CHECK_TRUE@ rec-writer/rec-write-field-name.c \ @CHECK_TRUE@ rec-writer/rec-writer-destroy.c \ @CHECK_TRUE@ rec-writer/rec-write-record.c \ @CHECK_TRUE@ rec-writer/rec-writer-new.c \ @CHECK_TRUE@ rec-writer/rec-write-rset.c \ @CHECK_TRUE@ rec-writer/rec-write-db.c \ @CHECK_TRUE@ rec-writer/rec-write-field-name-str.c \ @CHECK_TRUE@ rec-writer/rec-write-field-str.c \ @CHECK_TRUE@ rec-writer/rec-write-comment-str.c \ @CHECK_TRUE@ rec-writer/tsuite-rec-writer.c @CHECK_TRUE@REC_SEX_TSUITE = rec-sex/rec-sex-new.c \ @CHECK_TRUE@ rec-sex/rec-sex-destroy.c \ @CHECK_TRUE@ rec-sex/rec-sex-compile.c \ @CHECK_TRUE@ rec-sex/rec-sex-eval.c \ @CHECK_TRUE@ rec-sex/tsuite-rec-sex.c @CHECK_TRUE@runtests_SOURCES = runtests.c \ @CHECK_TRUE@ $(REC_MSET_TSUITE) \ @CHECK_TRUE@ $(REC_COMMENT_TSUITE) \ @CHECK_TRUE@ $(REC_FIELD_NAME_TSUITE) \ @CHECK_TRUE@ $(REC_TYPE_TSUITE) \ @CHECK_TRUE@ $(REC_TYPE_REG_TSUITE) \ @CHECK_TRUE@ $(REC_FIELD_TSUITE) \ @CHECK_TRUE@ $(REC_RECORD_TSUITE) \ @CHECK_TRUE@ $(REC_FEX_TSUITE) \ @CHECK_TRUE@ $(REC_PARSER_TSUITE) \ @CHECK_TRUE@ $(REC_WRITER_TSUITE) \ @CHECK_TRUE@ $(REC_SEX_TSUITE) @CHECK_TRUE@AM_CPPFLAGS = -I$(top_srcdir)/src \ @CHECK_TRUE@ -I$(top_srcdir)/torture @CHECK_TRUE@runtests_CFLAGS = $(CHECK_CFLAGS) @CHECK_TRUE@runtests_LDADD = $(CHECK_LIBS) ../src/librec.la all: all-recursive .SUFFIXES: .SUFFIXES: .c .lo .log .o .obj .test .test$(EXEEXT) .trs $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu torture/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu torture/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstPROGRAMS: @list='$(noinst_PROGRAMS)'; test -n "$$list" || exit 0; \ echo " rm -f" $$list; \ rm -f $$list || exit $$?; \ test -n "$(EXEEXT)" || exit 0; \ list=`for p in $$list; do echo "$$p"; done | sed 's/$(EXEEXT)$$//'`; \ echo " rm -f" $$list; \ rm -f $$list rec-mset/$(am__dirstamp): @$(MKDIR_P) rec-mset @: > rec-mset/$(am__dirstamp) rec-mset/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rec-mset/$(DEPDIR) @: > rec-mset/$(DEPDIR)/$(am__dirstamp) rec-mset/runtests-rec-mset-new.$(OBJEXT): rec-mset/$(am__dirstamp) \ rec-mset/$(DEPDIR)/$(am__dirstamp) rec-mset/runtests-rec-mset-dup.$(OBJEXT): rec-mset/$(am__dirstamp) \ rec-mset/$(DEPDIR)/$(am__dirstamp) rec-mset/runtests-rec-mset-type-p.$(OBJEXT): rec-mset/$(am__dirstamp) \ rec-mset/$(DEPDIR)/$(am__dirstamp) rec-mset/runtests-rec-mset-register-type.$(OBJEXT): \ rec-mset/$(am__dirstamp) rec-mset/$(DEPDIR)/$(am__dirstamp) rec-mset/runtests-rec-mset-count.$(OBJEXT): rec-mset/$(am__dirstamp) \ rec-mset/$(DEPDIR)/$(am__dirstamp) rec-mset/runtests-rec-mset-get-at.$(OBJEXT): rec-mset/$(am__dirstamp) \ rec-mset/$(DEPDIR)/$(am__dirstamp) rec-mset/runtests-tsuite-rec-mset.$(OBJEXT): rec-mset/$(am__dirstamp) \ rec-mset/$(DEPDIR)/$(am__dirstamp) rec-comment/$(am__dirstamp): @$(MKDIR_P) rec-comment @: > rec-comment/$(am__dirstamp) rec-comment/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rec-comment/$(DEPDIR) @: > rec-comment/$(DEPDIR)/$(am__dirstamp) rec-comment/runtests-rec-comment-new.$(OBJEXT): \ rec-comment/$(am__dirstamp) \ rec-comment/$(DEPDIR)/$(am__dirstamp) rec-comment/runtests-rec-comment-destroy.$(OBJEXT): \ rec-comment/$(am__dirstamp) \ rec-comment/$(DEPDIR)/$(am__dirstamp) rec-comment/runtests-rec-comment-dup.$(OBJEXT): \ rec-comment/$(am__dirstamp) \ rec-comment/$(DEPDIR)/$(am__dirstamp) rec-comment/runtests-rec-comment-text.$(OBJEXT): \ rec-comment/$(am__dirstamp) \ rec-comment/$(DEPDIR)/$(am__dirstamp) rec-comment/runtests-rec-comment-set-text.$(OBJEXT): \ rec-comment/$(am__dirstamp) \ rec-comment/$(DEPDIR)/$(am__dirstamp) rec-comment/runtests-rec-comment-equal-p.$(OBJEXT): \ rec-comment/$(am__dirstamp) \ rec-comment/$(DEPDIR)/$(am__dirstamp) rec-comment/runtests-tsuite-rec-comment.$(OBJEXT): \ rec-comment/$(am__dirstamp) \ rec-comment/$(DEPDIR)/$(am__dirstamp) rec-field-name/$(am__dirstamp): @$(MKDIR_P) rec-field-name @: > rec-field-name/$(am__dirstamp) rec-field-name/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rec-field-name/$(DEPDIR) @: > rec-field-name/$(DEPDIR)/$(am__dirstamp) rec-field-name/runtests-rec-field-name-equal-p.$(OBJEXT): \ rec-field-name/$(am__dirstamp) \ rec-field-name/$(DEPDIR)/$(am__dirstamp) rec-field-name/runtests-rec-field-name-p.$(OBJEXT): \ rec-field-name/$(am__dirstamp) \ rec-field-name/$(DEPDIR)/$(am__dirstamp) rec-field-name/runtests-rec-field-name-normalise.$(OBJEXT): \ rec-field-name/$(am__dirstamp) \ rec-field-name/$(DEPDIR)/$(am__dirstamp) rec-field-name/runtests-tsuite-rec-field-name.$(OBJEXT): \ rec-field-name/$(am__dirstamp) \ rec-field-name/$(DEPDIR)/$(am__dirstamp) rec-type/$(am__dirstamp): @$(MKDIR_P) rec-type @: > rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rec-type/$(DEPDIR) @: > rec-type/$(DEPDIR)/$(am__dirstamp) rec-type/runtests-rec-type-new.$(OBJEXT): rec-type/$(am__dirstamp) \ rec-type/$(DEPDIR)/$(am__dirstamp) rec-type/runtests-rec-type-destroy.$(OBJEXT): \ rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) rec-type/runtests-rec-type-descr-p.$(OBJEXT): \ rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) rec-type/runtests-rec-type-kind.$(OBJEXT): rec-type/$(am__dirstamp) \ rec-type/$(DEPDIR)/$(am__dirstamp) rec-type/runtests-rec-type-kind-str.$(OBJEXT): \ rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) rec-type/runtests-rec-type-equal-p.$(OBJEXT): \ rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) rec-type/runtests-rec-type-check.$(OBJEXT): rec-type/$(am__dirstamp) \ rec-type/$(DEPDIR)/$(am__dirstamp) rec-type/runtests-rec-type-name.$(OBJEXT): rec-type/$(am__dirstamp) \ rec-type/$(DEPDIR)/$(am__dirstamp) rec-type/runtests-rec-type-set-name.$(OBJEXT): \ rec-type/$(am__dirstamp) rec-type/$(DEPDIR)/$(am__dirstamp) rec-type/runtests-tsuite-rec-type.$(OBJEXT): rec-type/$(am__dirstamp) \ rec-type/$(DEPDIR)/$(am__dirstamp) rec-type-reg/$(am__dirstamp): @$(MKDIR_P) rec-type-reg @: > rec-type-reg/$(am__dirstamp) rec-type-reg/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rec-type-reg/$(DEPDIR) @: > rec-type-reg/$(DEPDIR)/$(am__dirstamp) rec-type-reg/runtests-rec-type-reg-new.$(OBJEXT): \ rec-type-reg/$(am__dirstamp) \ rec-type-reg/$(DEPDIR)/$(am__dirstamp) rec-type-reg/runtests-rec-type-reg-destroy.$(OBJEXT): \ rec-type-reg/$(am__dirstamp) \ rec-type-reg/$(DEPDIR)/$(am__dirstamp) rec-type-reg/runtests-tsuite-rec-type-reg.$(OBJEXT): \ rec-type-reg/$(am__dirstamp) \ rec-type-reg/$(DEPDIR)/$(am__dirstamp) rec-type-reg/runtests-rec-type-reg-get.$(OBJEXT): \ rec-type-reg/$(am__dirstamp) \ rec-type-reg/$(DEPDIR)/$(am__dirstamp) rec-field/$(am__dirstamp): @$(MKDIR_P) rec-field @: > rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rec-field/$(DEPDIR) @: > rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-name.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-set-name.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-value.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-set-value.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-dup.$(OBJEXT): rec-field/$(am__dirstamp) \ rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-new.$(OBJEXT): rec-field/$(am__dirstamp) \ rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-destroy.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-equal-p.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-source.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-set-source.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-location.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-location-str.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-set-location.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-char-location.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-char-location-str.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-set-char-location.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-rec-field-to-comment.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-field/runtests-tsuite-rec-field.$(OBJEXT): \ rec-field/$(am__dirstamp) rec-field/$(DEPDIR)/$(am__dirstamp) rec-record/$(am__dirstamp): @$(MKDIR_P) rec-record @: > rec-record/$(am__dirstamp) rec-record/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rec-record/$(DEPDIR) @: > rec-record/$(DEPDIR)/$(am__dirstamp) rec-record/runtests-tsuite-rec-record.$(OBJEXT): \ rec-record/$(am__dirstamp) \ rec-record/$(DEPDIR)/$(am__dirstamp) rec-fex/$(am__dirstamp): @$(MKDIR_P) rec-fex @: > rec-fex/$(am__dirstamp) rec-fex/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rec-fex/$(DEPDIR) @: > rec-fex/$(DEPDIR)/$(am__dirstamp) rec-fex/runtests-rec-fex-new.$(OBJEXT): rec-fex/$(am__dirstamp) \ rec-fex/$(DEPDIR)/$(am__dirstamp) rec-fex/runtests-rec-fex-destroy.$(OBJEXT): rec-fex/$(am__dirstamp) \ rec-fex/$(DEPDIR)/$(am__dirstamp) rec-fex/runtests-rec-fex-check.$(OBJEXT): rec-fex/$(am__dirstamp) \ rec-fex/$(DEPDIR)/$(am__dirstamp) rec-fex/runtests-rec-fex-sort.$(OBJEXT): rec-fex/$(am__dirstamp) \ rec-fex/$(DEPDIR)/$(am__dirstamp) rec-fex/runtests-rec-fex-size.$(OBJEXT): rec-fex/$(am__dirstamp) \ rec-fex/$(DEPDIR)/$(am__dirstamp) rec-fex/runtests-rec-fex-get.$(OBJEXT): rec-fex/$(am__dirstamp) \ rec-fex/$(DEPDIR)/$(am__dirstamp) rec-fex/runtests-rec-fex-elem-field-name.$(OBJEXT): \ rec-fex/$(am__dirstamp) rec-fex/$(DEPDIR)/$(am__dirstamp) rec-fex/runtests-rec-fex-elem-rewrite-to.$(OBJEXT): \ rec-fex/$(am__dirstamp) rec-fex/$(DEPDIR)/$(am__dirstamp) rec-fex/runtests-rec-fex-elem-min.$(OBJEXT): rec-fex/$(am__dirstamp) \ rec-fex/$(DEPDIR)/$(am__dirstamp) rec-fex/runtests-rec-fex-elem-max.$(OBJEXT): rec-fex/$(am__dirstamp) \ rec-fex/$(DEPDIR)/$(am__dirstamp) rec-fex/runtests-rec-fex-str.$(OBJEXT): rec-fex/$(am__dirstamp) \ rec-fex/$(DEPDIR)/$(am__dirstamp) rec-fex/runtests-tsuite-rec-fex.$(OBJEXT): rec-fex/$(am__dirstamp) \ rec-fex/$(DEPDIR)/$(am__dirstamp) rec-parser/$(am__dirstamp): @$(MKDIR_P) rec-parser @: > rec-parser/$(am__dirstamp) rec-parser/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rec-parser/$(DEPDIR) @: > rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parser-new.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parser-new-str.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parser-new-mem.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parser-destroy.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parse-field-name-str.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parse-field-name.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parse-field.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parse-record.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parse-record-str.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parse-rset.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parse-db.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parser-eof.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parser-error.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parser-reset.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parser-perror.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-rec-parser-seek-mem.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-parser/runtests-tsuite-rec-parser.$(OBJEXT): \ rec-parser/$(am__dirstamp) \ rec-parser/$(DEPDIR)/$(am__dirstamp) rec-writer/$(am__dirstamp): @$(MKDIR_P) rec-writer @: > rec-writer/$(am__dirstamp) rec-writer/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rec-writer/$(DEPDIR) @: > rec-writer/$(DEPDIR)/$(am__dirstamp) rec-writer/runtests-rec-write-comment.$(OBJEXT): \ rec-writer/$(am__dirstamp) \ rec-writer/$(DEPDIR)/$(am__dirstamp) rec-writer/runtests-rec-write-field.$(OBJEXT): \ rec-writer/$(am__dirstamp) \ rec-writer/$(DEPDIR)/$(am__dirstamp) rec-writer/runtests-rec-write-field-name.$(OBJEXT): \ rec-writer/$(am__dirstamp) \ rec-writer/$(DEPDIR)/$(am__dirstamp) rec-writer/runtests-rec-writer-destroy.$(OBJEXT): \ rec-writer/$(am__dirstamp) \ rec-writer/$(DEPDIR)/$(am__dirstamp) rec-writer/runtests-rec-write-record.$(OBJEXT): \ rec-writer/$(am__dirstamp) \ rec-writer/$(DEPDIR)/$(am__dirstamp) rec-writer/runtests-rec-writer-new.$(OBJEXT): \ rec-writer/$(am__dirstamp) \ rec-writer/$(DEPDIR)/$(am__dirstamp) rec-writer/runtests-rec-write-rset.$(OBJEXT): \ rec-writer/$(am__dirstamp) \ rec-writer/$(DEPDIR)/$(am__dirstamp) rec-writer/runtests-rec-write-db.$(OBJEXT): \ rec-writer/$(am__dirstamp) \ rec-writer/$(DEPDIR)/$(am__dirstamp) rec-writer/runtests-rec-write-field-name-str.$(OBJEXT): \ rec-writer/$(am__dirstamp) \ rec-writer/$(DEPDIR)/$(am__dirstamp) rec-writer/runtests-rec-write-field-str.$(OBJEXT): \ rec-writer/$(am__dirstamp) \ rec-writer/$(DEPDIR)/$(am__dirstamp) rec-writer/runtests-rec-write-comment-str.$(OBJEXT): \ rec-writer/$(am__dirstamp) \ rec-writer/$(DEPDIR)/$(am__dirstamp) rec-writer/runtests-tsuite-rec-writer.$(OBJEXT): \ rec-writer/$(am__dirstamp) \ rec-writer/$(DEPDIR)/$(am__dirstamp) rec-sex/$(am__dirstamp): @$(MKDIR_P) rec-sex @: > rec-sex/$(am__dirstamp) rec-sex/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) rec-sex/$(DEPDIR) @: > rec-sex/$(DEPDIR)/$(am__dirstamp) rec-sex/runtests-rec-sex-new.$(OBJEXT): rec-sex/$(am__dirstamp) \ rec-sex/$(DEPDIR)/$(am__dirstamp) rec-sex/runtests-rec-sex-destroy.$(OBJEXT): rec-sex/$(am__dirstamp) \ rec-sex/$(DEPDIR)/$(am__dirstamp) rec-sex/runtests-rec-sex-compile.$(OBJEXT): rec-sex/$(am__dirstamp) \ rec-sex/$(DEPDIR)/$(am__dirstamp) rec-sex/runtests-rec-sex-eval.$(OBJEXT): rec-sex/$(am__dirstamp) \ rec-sex/$(DEPDIR)/$(am__dirstamp) rec-sex/runtests-tsuite-rec-sex.$(OBJEXT): rec-sex/$(am__dirstamp) \ rec-sex/$(DEPDIR)/$(am__dirstamp) runtests$(EXEEXT): $(runtests_OBJECTS) $(runtests_DEPENDENCIES) $(EXTRA_runtests_DEPENDENCIES) @rm -f runtests$(EXEEXT) $(AM_V_CCLD)$(runtests_LINK) $(runtests_OBJECTS) $(runtests_LDADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f rec-comment/*.$(OBJEXT) -rm -f rec-fex/*.$(OBJEXT) -rm -f rec-field-name/*.$(OBJEXT) -rm -f rec-field/*.$(OBJEXT) -rm -f rec-mset/*.$(OBJEXT) -rm -f rec-parser/*.$(OBJEXT) -rm -f rec-record/*.$(OBJEXT) -rm -f rec-sex/*.$(OBJEXT) -rm -f rec-type-reg/*.$(OBJEXT) -rm -f rec-type/*.$(OBJEXT) -rm -f rec-writer/*.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/runtests-runtests.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-rec-comment-new.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-rec-comment-text.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-check.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-get.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-new.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-size.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-rec-fex-str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-char-location.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-destroy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-dup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-location-str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-location.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-name.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-new.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-set-location.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-set-name.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-set-source.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-set-value.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-source.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-rec-field-value.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-rec-mset-count.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-rec-mset-new.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-db.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-field.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-record.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-error.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-new.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-sex/$(DEPDIR)/runtests-rec-sex-new.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-check.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-destroy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-kind.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-name.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-new.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-rec-type-set-name.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-comment.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-db.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-field.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-record.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-write-rset.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-rec-writer-new.Po@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Po@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< runtests-runtests.o: runtests.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT runtests-runtests.o -MD -MP -MF $(DEPDIR)/runtests-runtests.Tpo -c -o runtests-runtests.o `test -f 'runtests.c' || echo '$(srcdir)/'`runtests.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/runtests-runtests.Tpo $(DEPDIR)/runtests-runtests.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='runtests.c' object='runtests-runtests.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o runtests-runtests.o `test -f 'runtests.c' || echo '$(srcdir)/'`runtests.c runtests-runtests.obj: runtests.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT runtests-runtests.obj -MD -MP -MF $(DEPDIR)/runtests-runtests.Tpo -c -o runtests-runtests.obj `if test -f 'runtests.c'; then $(CYGPATH_W) 'runtests.c'; else $(CYGPATH_W) '$(srcdir)/runtests.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/runtests-runtests.Tpo $(DEPDIR)/runtests-runtests.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='runtests.c' object='runtests-runtests.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o runtests-runtests.obj `if test -f 'runtests.c'; then $(CYGPATH_W) 'runtests.c'; else $(CYGPATH_W) '$(srcdir)/runtests.c'; fi` rec-mset/runtests-rec-mset-new.o: rec-mset/rec-mset-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-new.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-new.Tpo -c -o rec-mset/runtests-rec-mset-new.o `test -f 'rec-mset/rec-mset-new.c' || echo '$(srcdir)/'`rec-mset/rec-mset-new.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-new.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-new.c' object='rec-mset/runtests-rec-mset-new.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-new.o `test -f 'rec-mset/rec-mset-new.c' || echo '$(srcdir)/'`rec-mset/rec-mset-new.c rec-mset/runtests-rec-mset-new.obj: rec-mset/rec-mset-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-new.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-new.Tpo -c -o rec-mset/runtests-rec-mset-new.obj `if test -f 'rec-mset/rec-mset-new.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-new.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-new.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-new.c' object='rec-mset/runtests-rec-mset-new.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-new.obj `if test -f 'rec-mset/rec-mset-new.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-new.c'; fi` rec-mset/runtests-rec-mset-dup.o: rec-mset/rec-mset-dup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-dup.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Tpo -c -o rec-mset/runtests-rec-mset-dup.o `test -f 'rec-mset/rec-mset-dup.c' || echo '$(srcdir)/'`rec-mset/rec-mset-dup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-dup.c' object='rec-mset/runtests-rec-mset-dup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-dup.o `test -f 'rec-mset/rec-mset-dup.c' || echo '$(srcdir)/'`rec-mset/rec-mset-dup.c rec-mset/runtests-rec-mset-dup.obj: rec-mset/rec-mset-dup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-dup.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Tpo -c -o rec-mset/runtests-rec-mset-dup.obj `if test -f 'rec-mset/rec-mset-dup.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-dup.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-dup.c' object='rec-mset/runtests-rec-mset-dup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-dup.obj `if test -f 'rec-mset/rec-mset-dup.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-dup.c'; fi` rec-mset/runtests-rec-mset-type-p.o: rec-mset/rec-mset-type-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-type-p.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Tpo -c -o rec-mset/runtests-rec-mset-type-p.o `test -f 'rec-mset/rec-mset-type-p.c' || echo '$(srcdir)/'`rec-mset/rec-mset-type-p.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-type-p.c' object='rec-mset/runtests-rec-mset-type-p.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-type-p.o `test -f 'rec-mset/rec-mset-type-p.c' || echo '$(srcdir)/'`rec-mset/rec-mset-type-p.c rec-mset/runtests-rec-mset-type-p.obj: rec-mset/rec-mset-type-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-type-p.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Tpo -c -o rec-mset/runtests-rec-mset-type-p.obj `if test -f 'rec-mset/rec-mset-type-p.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-type-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-type-p.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-type-p.c' object='rec-mset/runtests-rec-mset-type-p.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-type-p.obj `if test -f 'rec-mset/rec-mset-type-p.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-type-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-type-p.c'; fi` rec-mset/runtests-rec-mset-register-type.o: rec-mset/rec-mset-register-type.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-register-type.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Tpo -c -o rec-mset/runtests-rec-mset-register-type.o `test -f 'rec-mset/rec-mset-register-type.c' || echo '$(srcdir)/'`rec-mset/rec-mset-register-type.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-register-type.c' object='rec-mset/runtests-rec-mset-register-type.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-register-type.o `test -f 'rec-mset/rec-mset-register-type.c' || echo '$(srcdir)/'`rec-mset/rec-mset-register-type.c rec-mset/runtests-rec-mset-register-type.obj: rec-mset/rec-mset-register-type.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-register-type.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Tpo -c -o rec-mset/runtests-rec-mset-register-type.obj `if test -f 'rec-mset/rec-mset-register-type.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-register-type.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-register-type.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-register-type.c' object='rec-mset/runtests-rec-mset-register-type.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-register-type.obj `if test -f 'rec-mset/rec-mset-register-type.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-register-type.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-register-type.c'; fi` rec-mset/runtests-rec-mset-count.o: rec-mset/rec-mset-count.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-count.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-count.Tpo -c -o rec-mset/runtests-rec-mset-count.o `test -f 'rec-mset/rec-mset-count.c' || echo '$(srcdir)/'`rec-mset/rec-mset-count.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-count.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-count.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-count.c' object='rec-mset/runtests-rec-mset-count.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-count.o `test -f 'rec-mset/rec-mset-count.c' || echo '$(srcdir)/'`rec-mset/rec-mset-count.c rec-mset/runtests-rec-mset-count.obj: rec-mset/rec-mset-count.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-count.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-count.Tpo -c -o rec-mset/runtests-rec-mset-count.obj `if test -f 'rec-mset/rec-mset-count.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-count.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-count.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-count.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-count.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-count.c' object='rec-mset/runtests-rec-mset-count.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-count.obj `if test -f 'rec-mset/rec-mset-count.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-count.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-count.c'; fi` rec-mset/runtests-rec-mset-get-at.o: rec-mset/rec-mset-get-at.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-get-at.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Tpo -c -o rec-mset/runtests-rec-mset-get-at.o `test -f 'rec-mset/rec-mset-get-at.c' || echo '$(srcdir)/'`rec-mset/rec-mset-get-at.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-get-at.c' object='rec-mset/runtests-rec-mset-get-at.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-get-at.o `test -f 'rec-mset/rec-mset-get-at.c' || echo '$(srcdir)/'`rec-mset/rec-mset-get-at.c rec-mset/runtests-rec-mset-get-at.obj: rec-mset/rec-mset-get-at.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-rec-mset-get-at.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Tpo -c -o rec-mset/runtests-rec-mset-get-at.obj `if test -f 'rec-mset/rec-mset-get-at.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-get-at.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-get-at.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Tpo rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/rec-mset-get-at.c' object='rec-mset/runtests-rec-mset-get-at.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-rec-mset-get-at.obj `if test -f 'rec-mset/rec-mset-get-at.c'; then $(CYGPATH_W) 'rec-mset/rec-mset-get-at.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/rec-mset-get-at.c'; fi` rec-mset/runtests-tsuite-rec-mset.o: rec-mset/tsuite-rec-mset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-tsuite-rec-mset.o -MD -MP -MF rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Tpo -c -o rec-mset/runtests-tsuite-rec-mset.o `test -f 'rec-mset/tsuite-rec-mset.c' || echo '$(srcdir)/'`rec-mset/tsuite-rec-mset.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Tpo rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/tsuite-rec-mset.c' object='rec-mset/runtests-tsuite-rec-mset.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-tsuite-rec-mset.o `test -f 'rec-mset/tsuite-rec-mset.c' || echo '$(srcdir)/'`rec-mset/tsuite-rec-mset.c rec-mset/runtests-tsuite-rec-mset.obj: rec-mset/tsuite-rec-mset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-mset/runtests-tsuite-rec-mset.obj -MD -MP -MF rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Tpo -c -o rec-mset/runtests-tsuite-rec-mset.obj `if test -f 'rec-mset/tsuite-rec-mset.c'; then $(CYGPATH_W) 'rec-mset/tsuite-rec-mset.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/tsuite-rec-mset.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Tpo rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-mset/tsuite-rec-mset.c' object='rec-mset/runtests-tsuite-rec-mset.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-mset/runtests-tsuite-rec-mset.obj `if test -f 'rec-mset/tsuite-rec-mset.c'; then $(CYGPATH_W) 'rec-mset/tsuite-rec-mset.c'; else $(CYGPATH_W) '$(srcdir)/rec-mset/tsuite-rec-mset.c'; fi` rec-comment/runtests-rec-comment-new.o: rec-comment/rec-comment-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-new.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-new.Tpo -c -o rec-comment/runtests-rec-comment-new.o `test -f 'rec-comment/rec-comment-new.c' || echo '$(srcdir)/'`rec-comment/rec-comment-new.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-new.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-new.c' object='rec-comment/runtests-rec-comment-new.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-new.o `test -f 'rec-comment/rec-comment-new.c' || echo '$(srcdir)/'`rec-comment/rec-comment-new.c rec-comment/runtests-rec-comment-new.obj: rec-comment/rec-comment-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-new.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-new.Tpo -c -o rec-comment/runtests-rec-comment-new.obj `if test -f 'rec-comment/rec-comment-new.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-new.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-new.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-new.c' object='rec-comment/runtests-rec-comment-new.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-new.obj `if test -f 'rec-comment/rec-comment-new.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-new.c'; fi` rec-comment/runtests-rec-comment-destroy.o: rec-comment/rec-comment-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-destroy.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Tpo -c -o rec-comment/runtests-rec-comment-destroy.o `test -f 'rec-comment/rec-comment-destroy.c' || echo '$(srcdir)/'`rec-comment/rec-comment-destroy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-destroy.c' object='rec-comment/runtests-rec-comment-destroy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-destroy.o `test -f 'rec-comment/rec-comment-destroy.c' || echo '$(srcdir)/'`rec-comment/rec-comment-destroy.c rec-comment/runtests-rec-comment-destroy.obj: rec-comment/rec-comment-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-destroy.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Tpo -c -o rec-comment/runtests-rec-comment-destroy.obj `if test -f 'rec-comment/rec-comment-destroy.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-destroy.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-destroy.c' object='rec-comment/runtests-rec-comment-destroy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-destroy.obj `if test -f 'rec-comment/rec-comment-destroy.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-destroy.c'; fi` rec-comment/runtests-rec-comment-dup.o: rec-comment/rec-comment-dup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-dup.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Tpo -c -o rec-comment/runtests-rec-comment-dup.o `test -f 'rec-comment/rec-comment-dup.c' || echo '$(srcdir)/'`rec-comment/rec-comment-dup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-dup.c' object='rec-comment/runtests-rec-comment-dup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-dup.o `test -f 'rec-comment/rec-comment-dup.c' || echo '$(srcdir)/'`rec-comment/rec-comment-dup.c rec-comment/runtests-rec-comment-dup.obj: rec-comment/rec-comment-dup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-dup.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Tpo -c -o rec-comment/runtests-rec-comment-dup.obj `if test -f 'rec-comment/rec-comment-dup.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-dup.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-dup.c' object='rec-comment/runtests-rec-comment-dup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-dup.obj `if test -f 'rec-comment/rec-comment-dup.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-dup.c'; fi` rec-comment/runtests-rec-comment-text.o: rec-comment/rec-comment-text.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-text.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-text.Tpo -c -o rec-comment/runtests-rec-comment-text.o `test -f 'rec-comment/rec-comment-text.c' || echo '$(srcdir)/'`rec-comment/rec-comment-text.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-text.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-text.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-text.c' object='rec-comment/runtests-rec-comment-text.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-text.o `test -f 'rec-comment/rec-comment-text.c' || echo '$(srcdir)/'`rec-comment/rec-comment-text.c rec-comment/runtests-rec-comment-text.obj: rec-comment/rec-comment-text.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-text.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-text.Tpo -c -o rec-comment/runtests-rec-comment-text.obj `if test -f 'rec-comment/rec-comment-text.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-text.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-text.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-text.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-text.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-text.c' object='rec-comment/runtests-rec-comment-text.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-text.obj `if test -f 'rec-comment/rec-comment-text.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-text.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-text.c'; fi` rec-comment/runtests-rec-comment-set-text.o: rec-comment/rec-comment-set-text.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-set-text.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Tpo -c -o rec-comment/runtests-rec-comment-set-text.o `test -f 'rec-comment/rec-comment-set-text.c' || echo '$(srcdir)/'`rec-comment/rec-comment-set-text.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-set-text.c' object='rec-comment/runtests-rec-comment-set-text.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-set-text.o `test -f 'rec-comment/rec-comment-set-text.c' || echo '$(srcdir)/'`rec-comment/rec-comment-set-text.c rec-comment/runtests-rec-comment-set-text.obj: rec-comment/rec-comment-set-text.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-set-text.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Tpo -c -o rec-comment/runtests-rec-comment-set-text.obj `if test -f 'rec-comment/rec-comment-set-text.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-set-text.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-set-text.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-set-text.c' object='rec-comment/runtests-rec-comment-set-text.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-set-text.obj `if test -f 'rec-comment/rec-comment-set-text.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-set-text.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-set-text.c'; fi` rec-comment/runtests-rec-comment-equal-p.o: rec-comment/rec-comment-equal-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-equal-p.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Tpo -c -o rec-comment/runtests-rec-comment-equal-p.o `test -f 'rec-comment/rec-comment-equal-p.c' || echo '$(srcdir)/'`rec-comment/rec-comment-equal-p.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-equal-p.c' object='rec-comment/runtests-rec-comment-equal-p.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-equal-p.o `test -f 'rec-comment/rec-comment-equal-p.c' || echo '$(srcdir)/'`rec-comment/rec-comment-equal-p.c rec-comment/runtests-rec-comment-equal-p.obj: rec-comment/rec-comment-equal-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-rec-comment-equal-p.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Tpo -c -o rec-comment/runtests-rec-comment-equal-p.obj `if test -f 'rec-comment/rec-comment-equal-p.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-equal-p.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Tpo rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/rec-comment-equal-p.c' object='rec-comment/runtests-rec-comment-equal-p.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-rec-comment-equal-p.obj `if test -f 'rec-comment/rec-comment-equal-p.c'; then $(CYGPATH_W) 'rec-comment/rec-comment-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/rec-comment-equal-p.c'; fi` rec-comment/runtests-tsuite-rec-comment.o: rec-comment/tsuite-rec-comment.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-tsuite-rec-comment.o -MD -MP -MF rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Tpo -c -o rec-comment/runtests-tsuite-rec-comment.o `test -f 'rec-comment/tsuite-rec-comment.c' || echo '$(srcdir)/'`rec-comment/tsuite-rec-comment.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Tpo rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/tsuite-rec-comment.c' object='rec-comment/runtests-tsuite-rec-comment.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-tsuite-rec-comment.o `test -f 'rec-comment/tsuite-rec-comment.c' || echo '$(srcdir)/'`rec-comment/tsuite-rec-comment.c rec-comment/runtests-tsuite-rec-comment.obj: rec-comment/tsuite-rec-comment.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-comment/runtests-tsuite-rec-comment.obj -MD -MP -MF rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Tpo -c -o rec-comment/runtests-tsuite-rec-comment.obj `if test -f 'rec-comment/tsuite-rec-comment.c'; then $(CYGPATH_W) 'rec-comment/tsuite-rec-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/tsuite-rec-comment.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Tpo rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-comment/tsuite-rec-comment.c' object='rec-comment/runtests-tsuite-rec-comment.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-comment/runtests-tsuite-rec-comment.obj `if test -f 'rec-comment/tsuite-rec-comment.c'; then $(CYGPATH_W) 'rec-comment/tsuite-rec-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-comment/tsuite-rec-comment.c'; fi` rec-field-name/runtests-rec-field-name-equal-p.o: rec-field-name/rec-field-name-equal-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-equal-p.o -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Tpo -c -o rec-field-name/runtests-rec-field-name-equal-p.o `test -f 'rec-field-name/rec-field-name-equal-p.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-equal-p.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/rec-field-name-equal-p.c' object='rec-field-name/runtests-rec-field-name-equal-p.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-equal-p.o `test -f 'rec-field-name/rec-field-name-equal-p.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-equal-p.c rec-field-name/runtests-rec-field-name-equal-p.obj: rec-field-name/rec-field-name-equal-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-equal-p.obj -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Tpo -c -o rec-field-name/runtests-rec-field-name-equal-p.obj `if test -f 'rec-field-name/rec-field-name-equal-p.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-equal-p.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/rec-field-name-equal-p.c' object='rec-field-name/runtests-rec-field-name-equal-p.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-equal-p.obj `if test -f 'rec-field-name/rec-field-name-equal-p.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-equal-p.c'; fi` rec-field-name/runtests-rec-field-name-p.o: rec-field-name/rec-field-name-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-p.o -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Tpo -c -o rec-field-name/runtests-rec-field-name-p.o `test -f 'rec-field-name/rec-field-name-p.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-p.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/rec-field-name-p.c' object='rec-field-name/runtests-rec-field-name-p.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-p.o `test -f 'rec-field-name/rec-field-name-p.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-p.c rec-field-name/runtests-rec-field-name-p.obj: rec-field-name/rec-field-name-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-p.obj -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Tpo -c -o rec-field-name/runtests-rec-field-name-p.obj `if test -f 'rec-field-name/rec-field-name-p.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-p.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/rec-field-name-p.c' object='rec-field-name/runtests-rec-field-name-p.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-p.obj `if test -f 'rec-field-name/rec-field-name-p.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-p.c'; fi` rec-field-name/runtests-rec-field-name-normalise.o: rec-field-name/rec-field-name-normalise.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-normalise.o -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Tpo -c -o rec-field-name/runtests-rec-field-name-normalise.o `test -f 'rec-field-name/rec-field-name-normalise.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-normalise.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/rec-field-name-normalise.c' object='rec-field-name/runtests-rec-field-name-normalise.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-normalise.o `test -f 'rec-field-name/rec-field-name-normalise.c' || echo '$(srcdir)/'`rec-field-name/rec-field-name-normalise.c rec-field-name/runtests-rec-field-name-normalise.obj: rec-field-name/rec-field-name-normalise.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-rec-field-name-normalise.obj -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Tpo -c -o rec-field-name/runtests-rec-field-name-normalise.obj `if test -f 'rec-field-name/rec-field-name-normalise.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-normalise.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-normalise.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Tpo rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/rec-field-name-normalise.c' object='rec-field-name/runtests-rec-field-name-normalise.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-rec-field-name-normalise.obj `if test -f 'rec-field-name/rec-field-name-normalise.c'; then $(CYGPATH_W) 'rec-field-name/rec-field-name-normalise.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/rec-field-name-normalise.c'; fi` rec-field-name/runtests-tsuite-rec-field-name.o: rec-field-name/tsuite-rec-field-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-tsuite-rec-field-name.o -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Tpo -c -o rec-field-name/runtests-tsuite-rec-field-name.o `test -f 'rec-field-name/tsuite-rec-field-name.c' || echo '$(srcdir)/'`rec-field-name/tsuite-rec-field-name.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Tpo rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/tsuite-rec-field-name.c' object='rec-field-name/runtests-tsuite-rec-field-name.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-tsuite-rec-field-name.o `test -f 'rec-field-name/tsuite-rec-field-name.c' || echo '$(srcdir)/'`rec-field-name/tsuite-rec-field-name.c rec-field-name/runtests-tsuite-rec-field-name.obj: rec-field-name/tsuite-rec-field-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field-name/runtests-tsuite-rec-field-name.obj -MD -MP -MF rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Tpo -c -o rec-field-name/runtests-tsuite-rec-field-name.obj `if test -f 'rec-field-name/tsuite-rec-field-name.c'; then $(CYGPATH_W) 'rec-field-name/tsuite-rec-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/tsuite-rec-field-name.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Tpo rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field-name/tsuite-rec-field-name.c' object='rec-field-name/runtests-tsuite-rec-field-name.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field-name/runtests-tsuite-rec-field-name.obj `if test -f 'rec-field-name/tsuite-rec-field-name.c'; then $(CYGPATH_W) 'rec-field-name/tsuite-rec-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field-name/tsuite-rec-field-name.c'; fi` rec-type/runtests-rec-type-new.o: rec-type/rec-type-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-new.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-new.Tpo -c -o rec-type/runtests-rec-type-new.o `test -f 'rec-type/rec-type-new.c' || echo '$(srcdir)/'`rec-type/rec-type-new.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-new.Tpo rec-type/$(DEPDIR)/runtests-rec-type-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-new.c' object='rec-type/runtests-rec-type-new.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-new.o `test -f 'rec-type/rec-type-new.c' || echo '$(srcdir)/'`rec-type/rec-type-new.c rec-type/runtests-rec-type-new.obj: rec-type/rec-type-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-new.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-new.Tpo -c -o rec-type/runtests-rec-type-new.obj `if test -f 'rec-type/rec-type-new.c'; then $(CYGPATH_W) 'rec-type/rec-type-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-new.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-new.Tpo rec-type/$(DEPDIR)/runtests-rec-type-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-new.c' object='rec-type/runtests-rec-type-new.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-new.obj `if test -f 'rec-type/rec-type-new.c'; then $(CYGPATH_W) 'rec-type/rec-type-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-new.c'; fi` rec-type/runtests-rec-type-destroy.o: rec-type/rec-type-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-destroy.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-destroy.Tpo -c -o rec-type/runtests-rec-type-destroy.o `test -f 'rec-type/rec-type-destroy.c' || echo '$(srcdir)/'`rec-type/rec-type-destroy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-destroy.Tpo rec-type/$(DEPDIR)/runtests-rec-type-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-destroy.c' object='rec-type/runtests-rec-type-destroy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-destroy.o `test -f 'rec-type/rec-type-destroy.c' || echo '$(srcdir)/'`rec-type/rec-type-destroy.c rec-type/runtests-rec-type-destroy.obj: rec-type/rec-type-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-destroy.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-destroy.Tpo -c -o rec-type/runtests-rec-type-destroy.obj `if test -f 'rec-type/rec-type-destroy.c'; then $(CYGPATH_W) 'rec-type/rec-type-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-destroy.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-destroy.Tpo rec-type/$(DEPDIR)/runtests-rec-type-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-destroy.c' object='rec-type/runtests-rec-type-destroy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-destroy.obj `if test -f 'rec-type/rec-type-destroy.c'; then $(CYGPATH_W) 'rec-type/rec-type-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-destroy.c'; fi` rec-type/runtests-rec-type-descr-p.o: rec-type/rec-type-descr-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-descr-p.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Tpo -c -o rec-type/runtests-rec-type-descr-p.o `test -f 'rec-type/rec-type-descr-p.c' || echo '$(srcdir)/'`rec-type/rec-type-descr-p.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Tpo rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-descr-p.c' object='rec-type/runtests-rec-type-descr-p.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-descr-p.o `test -f 'rec-type/rec-type-descr-p.c' || echo '$(srcdir)/'`rec-type/rec-type-descr-p.c rec-type/runtests-rec-type-descr-p.obj: rec-type/rec-type-descr-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-descr-p.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Tpo -c -o rec-type/runtests-rec-type-descr-p.obj `if test -f 'rec-type/rec-type-descr-p.c'; then $(CYGPATH_W) 'rec-type/rec-type-descr-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-descr-p.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Tpo rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-descr-p.c' object='rec-type/runtests-rec-type-descr-p.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-descr-p.obj `if test -f 'rec-type/rec-type-descr-p.c'; then $(CYGPATH_W) 'rec-type/rec-type-descr-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-descr-p.c'; fi` rec-type/runtests-rec-type-kind.o: rec-type/rec-type-kind.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-kind.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-kind.Tpo -c -o rec-type/runtests-rec-type-kind.o `test -f 'rec-type/rec-type-kind.c' || echo '$(srcdir)/'`rec-type/rec-type-kind.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-kind.Tpo rec-type/$(DEPDIR)/runtests-rec-type-kind.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-kind.c' object='rec-type/runtests-rec-type-kind.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-kind.o `test -f 'rec-type/rec-type-kind.c' || echo '$(srcdir)/'`rec-type/rec-type-kind.c rec-type/runtests-rec-type-kind.obj: rec-type/rec-type-kind.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-kind.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-kind.Tpo -c -o rec-type/runtests-rec-type-kind.obj `if test -f 'rec-type/rec-type-kind.c'; then $(CYGPATH_W) 'rec-type/rec-type-kind.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-kind.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-kind.Tpo rec-type/$(DEPDIR)/runtests-rec-type-kind.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-kind.c' object='rec-type/runtests-rec-type-kind.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-kind.obj `if test -f 'rec-type/rec-type-kind.c'; then $(CYGPATH_W) 'rec-type/rec-type-kind.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-kind.c'; fi` rec-type/runtests-rec-type-kind-str.o: rec-type/rec-type-kind-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-kind-str.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Tpo -c -o rec-type/runtests-rec-type-kind-str.o `test -f 'rec-type/rec-type-kind-str.c' || echo '$(srcdir)/'`rec-type/rec-type-kind-str.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Tpo rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-kind-str.c' object='rec-type/runtests-rec-type-kind-str.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-kind-str.o `test -f 'rec-type/rec-type-kind-str.c' || echo '$(srcdir)/'`rec-type/rec-type-kind-str.c rec-type/runtests-rec-type-kind-str.obj: rec-type/rec-type-kind-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-kind-str.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Tpo -c -o rec-type/runtests-rec-type-kind-str.obj `if test -f 'rec-type/rec-type-kind-str.c'; then $(CYGPATH_W) 'rec-type/rec-type-kind-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-kind-str.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Tpo rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-kind-str.c' object='rec-type/runtests-rec-type-kind-str.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-kind-str.obj `if test -f 'rec-type/rec-type-kind-str.c'; then $(CYGPATH_W) 'rec-type/rec-type-kind-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-kind-str.c'; fi` rec-type/runtests-rec-type-equal-p.o: rec-type/rec-type-equal-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-equal-p.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Tpo -c -o rec-type/runtests-rec-type-equal-p.o `test -f 'rec-type/rec-type-equal-p.c' || echo '$(srcdir)/'`rec-type/rec-type-equal-p.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Tpo rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-equal-p.c' object='rec-type/runtests-rec-type-equal-p.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-equal-p.o `test -f 'rec-type/rec-type-equal-p.c' || echo '$(srcdir)/'`rec-type/rec-type-equal-p.c rec-type/runtests-rec-type-equal-p.obj: rec-type/rec-type-equal-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-equal-p.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Tpo -c -o rec-type/runtests-rec-type-equal-p.obj `if test -f 'rec-type/rec-type-equal-p.c'; then $(CYGPATH_W) 'rec-type/rec-type-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-equal-p.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Tpo rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-equal-p.c' object='rec-type/runtests-rec-type-equal-p.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-equal-p.obj `if test -f 'rec-type/rec-type-equal-p.c'; then $(CYGPATH_W) 'rec-type/rec-type-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-equal-p.c'; fi` rec-type/runtests-rec-type-check.o: rec-type/rec-type-check.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-check.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-check.Tpo -c -o rec-type/runtests-rec-type-check.o `test -f 'rec-type/rec-type-check.c' || echo '$(srcdir)/'`rec-type/rec-type-check.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-check.Tpo rec-type/$(DEPDIR)/runtests-rec-type-check.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-check.c' object='rec-type/runtests-rec-type-check.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-check.o `test -f 'rec-type/rec-type-check.c' || echo '$(srcdir)/'`rec-type/rec-type-check.c rec-type/runtests-rec-type-check.obj: rec-type/rec-type-check.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-check.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-check.Tpo -c -o rec-type/runtests-rec-type-check.obj `if test -f 'rec-type/rec-type-check.c'; then $(CYGPATH_W) 'rec-type/rec-type-check.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-check.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-check.Tpo rec-type/$(DEPDIR)/runtests-rec-type-check.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-check.c' object='rec-type/runtests-rec-type-check.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-check.obj `if test -f 'rec-type/rec-type-check.c'; then $(CYGPATH_W) 'rec-type/rec-type-check.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-check.c'; fi` rec-type/runtests-rec-type-name.o: rec-type/rec-type-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-name.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-name.Tpo -c -o rec-type/runtests-rec-type-name.o `test -f 'rec-type/rec-type-name.c' || echo '$(srcdir)/'`rec-type/rec-type-name.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-name.Tpo rec-type/$(DEPDIR)/runtests-rec-type-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-name.c' object='rec-type/runtests-rec-type-name.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-name.o `test -f 'rec-type/rec-type-name.c' || echo '$(srcdir)/'`rec-type/rec-type-name.c rec-type/runtests-rec-type-name.obj: rec-type/rec-type-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-name.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-name.Tpo -c -o rec-type/runtests-rec-type-name.obj `if test -f 'rec-type/rec-type-name.c'; then $(CYGPATH_W) 'rec-type/rec-type-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-name.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-name.Tpo rec-type/$(DEPDIR)/runtests-rec-type-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-name.c' object='rec-type/runtests-rec-type-name.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-name.obj `if test -f 'rec-type/rec-type-name.c'; then $(CYGPATH_W) 'rec-type/rec-type-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-name.c'; fi` rec-type/runtests-rec-type-set-name.o: rec-type/rec-type-set-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-set-name.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-set-name.Tpo -c -o rec-type/runtests-rec-type-set-name.o `test -f 'rec-type/rec-type-set-name.c' || echo '$(srcdir)/'`rec-type/rec-type-set-name.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-set-name.Tpo rec-type/$(DEPDIR)/runtests-rec-type-set-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-set-name.c' object='rec-type/runtests-rec-type-set-name.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-set-name.o `test -f 'rec-type/rec-type-set-name.c' || echo '$(srcdir)/'`rec-type/rec-type-set-name.c rec-type/runtests-rec-type-set-name.obj: rec-type/rec-type-set-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-rec-type-set-name.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-rec-type-set-name.Tpo -c -o rec-type/runtests-rec-type-set-name.obj `if test -f 'rec-type/rec-type-set-name.c'; then $(CYGPATH_W) 'rec-type/rec-type-set-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-set-name.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-rec-type-set-name.Tpo rec-type/$(DEPDIR)/runtests-rec-type-set-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/rec-type-set-name.c' object='rec-type/runtests-rec-type-set-name.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-rec-type-set-name.obj `if test -f 'rec-type/rec-type-set-name.c'; then $(CYGPATH_W) 'rec-type/rec-type-set-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/rec-type-set-name.c'; fi` rec-type/runtests-tsuite-rec-type.o: rec-type/tsuite-rec-type.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-tsuite-rec-type.o -MD -MP -MF rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Tpo -c -o rec-type/runtests-tsuite-rec-type.o `test -f 'rec-type/tsuite-rec-type.c' || echo '$(srcdir)/'`rec-type/tsuite-rec-type.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Tpo rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/tsuite-rec-type.c' object='rec-type/runtests-tsuite-rec-type.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-tsuite-rec-type.o `test -f 'rec-type/tsuite-rec-type.c' || echo '$(srcdir)/'`rec-type/tsuite-rec-type.c rec-type/runtests-tsuite-rec-type.obj: rec-type/tsuite-rec-type.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type/runtests-tsuite-rec-type.obj -MD -MP -MF rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Tpo -c -o rec-type/runtests-tsuite-rec-type.obj `if test -f 'rec-type/tsuite-rec-type.c'; then $(CYGPATH_W) 'rec-type/tsuite-rec-type.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/tsuite-rec-type.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Tpo rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type/tsuite-rec-type.c' object='rec-type/runtests-tsuite-rec-type.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type/runtests-tsuite-rec-type.obj `if test -f 'rec-type/tsuite-rec-type.c'; then $(CYGPATH_W) 'rec-type/tsuite-rec-type.c'; else $(CYGPATH_W) '$(srcdir)/rec-type/tsuite-rec-type.c'; fi` rec-type-reg/runtests-rec-type-reg-new.o: rec-type-reg/rec-type-reg-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-new.o -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Tpo -c -o rec-type-reg/runtests-rec-type-reg-new.o `test -f 'rec-type-reg/rec-type-reg-new.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-new.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/rec-type-reg-new.c' object='rec-type-reg/runtests-rec-type-reg-new.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-new.o `test -f 'rec-type-reg/rec-type-reg-new.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-new.c rec-type-reg/runtests-rec-type-reg-new.obj: rec-type-reg/rec-type-reg-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-new.obj -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Tpo -c -o rec-type-reg/runtests-rec-type-reg-new.obj `if test -f 'rec-type-reg/rec-type-reg-new.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-new.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/rec-type-reg-new.c' object='rec-type-reg/runtests-rec-type-reg-new.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-new.obj `if test -f 'rec-type-reg/rec-type-reg-new.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-new.c'; fi` rec-type-reg/runtests-rec-type-reg-destroy.o: rec-type-reg/rec-type-reg-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-destroy.o -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Tpo -c -o rec-type-reg/runtests-rec-type-reg-destroy.o `test -f 'rec-type-reg/rec-type-reg-destroy.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-destroy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/rec-type-reg-destroy.c' object='rec-type-reg/runtests-rec-type-reg-destroy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-destroy.o `test -f 'rec-type-reg/rec-type-reg-destroy.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-destroy.c rec-type-reg/runtests-rec-type-reg-destroy.obj: rec-type-reg/rec-type-reg-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-destroy.obj -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Tpo -c -o rec-type-reg/runtests-rec-type-reg-destroy.obj `if test -f 'rec-type-reg/rec-type-reg-destroy.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-destroy.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/rec-type-reg-destroy.c' object='rec-type-reg/runtests-rec-type-reg-destroy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-destroy.obj `if test -f 'rec-type-reg/rec-type-reg-destroy.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-destroy.c'; fi` rec-type-reg/runtests-tsuite-rec-type-reg.o: rec-type-reg/tsuite-rec-type-reg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-tsuite-rec-type-reg.o -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Tpo -c -o rec-type-reg/runtests-tsuite-rec-type-reg.o `test -f 'rec-type-reg/tsuite-rec-type-reg.c' || echo '$(srcdir)/'`rec-type-reg/tsuite-rec-type-reg.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Tpo rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/tsuite-rec-type-reg.c' object='rec-type-reg/runtests-tsuite-rec-type-reg.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-tsuite-rec-type-reg.o `test -f 'rec-type-reg/tsuite-rec-type-reg.c' || echo '$(srcdir)/'`rec-type-reg/tsuite-rec-type-reg.c rec-type-reg/runtests-tsuite-rec-type-reg.obj: rec-type-reg/tsuite-rec-type-reg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-tsuite-rec-type-reg.obj -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Tpo -c -o rec-type-reg/runtests-tsuite-rec-type-reg.obj `if test -f 'rec-type-reg/tsuite-rec-type-reg.c'; then $(CYGPATH_W) 'rec-type-reg/tsuite-rec-type-reg.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/tsuite-rec-type-reg.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Tpo rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/tsuite-rec-type-reg.c' object='rec-type-reg/runtests-tsuite-rec-type-reg.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-tsuite-rec-type-reg.obj `if test -f 'rec-type-reg/tsuite-rec-type-reg.c'; then $(CYGPATH_W) 'rec-type-reg/tsuite-rec-type-reg.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/tsuite-rec-type-reg.c'; fi` rec-type-reg/runtests-rec-type-reg-get.o: rec-type-reg/rec-type-reg-get.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-get.o -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Tpo -c -o rec-type-reg/runtests-rec-type-reg-get.o `test -f 'rec-type-reg/rec-type-reg-get.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-get.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/rec-type-reg-get.c' object='rec-type-reg/runtests-rec-type-reg-get.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-get.o `test -f 'rec-type-reg/rec-type-reg-get.c' || echo '$(srcdir)/'`rec-type-reg/rec-type-reg-get.c rec-type-reg/runtests-rec-type-reg-get.obj: rec-type-reg/rec-type-reg-get.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-type-reg/runtests-rec-type-reg-get.obj -MD -MP -MF rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Tpo -c -o rec-type-reg/runtests-rec-type-reg-get.obj `if test -f 'rec-type-reg/rec-type-reg-get.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-get.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-get.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Tpo rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-type-reg/rec-type-reg-get.c' object='rec-type-reg/runtests-rec-type-reg-get.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-type-reg/runtests-rec-type-reg-get.obj `if test -f 'rec-type-reg/rec-type-reg-get.c'; then $(CYGPATH_W) 'rec-type-reg/rec-type-reg-get.c'; else $(CYGPATH_W) '$(srcdir)/rec-type-reg/rec-type-reg-get.c'; fi` rec-field/runtests-rec-field-name.o: rec-field/rec-field-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-name.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-name.Tpo -c -o rec-field/runtests-rec-field-name.o `test -f 'rec-field/rec-field-name.c' || echo '$(srcdir)/'`rec-field/rec-field-name.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-name.Tpo rec-field/$(DEPDIR)/runtests-rec-field-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-name.c' object='rec-field/runtests-rec-field-name.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-name.o `test -f 'rec-field/rec-field-name.c' || echo '$(srcdir)/'`rec-field/rec-field-name.c rec-field/runtests-rec-field-name.obj: rec-field/rec-field-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-name.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-name.Tpo -c -o rec-field/runtests-rec-field-name.obj `if test -f 'rec-field/rec-field-name.c'; then $(CYGPATH_W) 'rec-field/rec-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-name.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-name.Tpo rec-field/$(DEPDIR)/runtests-rec-field-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-name.c' object='rec-field/runtests-rec-field-name.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-name.obj `if test -f 'rec-field/rec-field-name.c'; then $(CYGPATH_W) 'rec-field/rec-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-name.c'; fi` rec-field/runtests-rec-field-set-name.o: rec-field/rec-field-set-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-name.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-name.Tpo -c -o rec-field/runtests-rec-field-set-name.o `test -f 'rec-field/rec-field-set-name.c' || echo '$(srcdir)/'`rec-field/rec-field-set-name.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-name.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-name.c' object='rec-field/runtests-rec-field-set-name.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-name.o `test -f 'rec-field/rec-field-set-name.c' || echo '$(srcdir)/'`rec-field/rec-field-set-name.c rec-field/runtests-rec-field-set-name.obj: rec-field/rec-field-set-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-name.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-name.Tpo -c -o rec-field/runtests-rec-field-set-name.obj `if test -f 'rec-field/rec-field-set-name.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-name.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-name.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-name.c' object='rec-field/runtests-rec-field-set-name.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-name.obj `if test -f 'rec-field/rec-field-set-name.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-name.c'; fi` rec-field/runtests-rec-field-value.o: rec-field/rec-field-value.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-value.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-value.Tpo -c -o rec-field/runtests-rec-field-value.o `test -f 'rec-field/rec-field-value.c' || echo '$(srcdir)/'`rec-field/rec-field-value.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-value.Tpo rec-field/$(DEPDIR)/runtests-rec-field-value.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-value.c' object='rec-field/runtests-rec-field-value.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-value.o `test -f 'rec-field/rec-field-value.c' || echo '$(srcdir)/'`rec-field/rec-field-value.c rec-field/runtests-rec-field-value.obj: rec-field/rec-field-value.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-value.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-value.Tpo -c -o rec-field/runtests-rec-field-value.obj `if test -f 'rec-field/rec-field-value.c'; then $(CYGPATH_W) 'rec-field/rec-field-value.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-value.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-value.Tpo rec-field/$(DEPDIR)/runtests-rec-field-value.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-value.c' object='rec-field/runtests-rec-field-value.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-value.obj `if test -f 'rec-field/rec-field-value.c'; then $(CYGPATH_W) 'rec-field/rec-field-value.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-value.c'; fi` rec-field/runtests-rec-field-set-value.o: rec-field/rec-field-set-value.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-value.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-value.Tpo -c -o rec-field/runtests-rec-field-set-value.o `test -f 'rec-field/rec-field-set-value.c' || echo '$(srcdir)/'`rec-field/rec-field-set-value.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-value.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-value.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-value.c' object='rec-field/runtests-rec-field-set-value.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-value.o `test -f 'rec-field/rec-field-set-value.c' || echo '$(srcdir)/'`rec-field/rec-field-set-value.c rec-field/runtests-rec-field-set-value.obj: rec-field/rec-field-set-value.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-value.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-value.Tpo -c -o rec-field/runtests-rec-field-set-value.obj `if test -f 'rec-field/rec-field-set-value.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-value.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-value.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-value.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-value.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-value.c' object='rec-field/runtests-rec-field-set-value.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-value.obj `if test -f 'rec-field/rec-field-set-value.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-value.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-value.c'; fi` rec-field/runtests-rec-field-dup.o: rec-field/rec-field-dup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-dup.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-dup.Tpo -c -o rec-field/runtests-rec-field-dup.o `test -f 'rec-field/rec-field-dup.c' || echo '$(srcdir)/'`rec-field/rec-field-dup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-dup.Tpo rec-field/$(DEPDIR)/runtests-rec-field-dup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-dup.c' object='rec-field/runtests-rec-field-dup.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-dup.o `test -f 'rec-field/rec-field-dup.c' || echo '$(srcdir)/'`rec-field/rec-field-dup.c rec-field/runtests-rec-field-dup.obj: rec-field/rec-field-dup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-dup.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-dup.Tpo -c -o rec-field/runtests-rec-field-dup.obj `if test -f 'rec-field/rec-field-dup.c'; then $(CYGPATH_W) 'rec-field/rec-field-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-dup.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-dup.Tpo rec-field/$(DEPDIR)/runtests-rec-field-dup.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-dup.c' object='rec-field/runtests-rec-field-dup.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-dup.obj `if test -f 'rec-field/rec-field-dup.c'; then $(CYGPATH_W) 'rec-field/rec-field-dup.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-dup.c'; fi` rec-field/runtests-rec-field-new.o: rec-field/rec-field-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-new.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-new.Tpo -c -o rec-field/runtests-rec-field-new.o `test -f 'rec-field/rec-field-new.c' || echo '$(srcdir)/'`rec-field/rec-field-new.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-new.Tpo rec-field/$(DEPDIR)/runtests-rec-field-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-new.c' object='rec-field/runtests-rec-field-new.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-new.o `test -f 'rec-field/rec-field-new.c' || echo '$(srcdir)/'`rec-field/rec-field-new.c rec-field/runtests-rec-field-new.obj: rec-field/rec-field-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-new.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-new.Tpo -c -o rec-field/runtests-rec-field-new.obj `if test -f 'rec-field/rec-field-new.c'; then $(CYGPATH_W) 'rec-field/rec-field-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-new.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-new.Tpo rec-field/$(DEPDIR)/runtests-rec-field-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-new.c' object='rec-field/runtests-rec-field-new.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-new.obj `if test -f 'rec-field/rec-field-new.c'; then $(CYGPATH_W) 'rec-field/rec-field-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-new.c'; fi` rec-field/runtests-rec-field-destroy.o: rec-field/rec-field-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-destroy.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-destroy.Tpo -c -o rec-field/runtests-rec-field-destroy.o `test -f 'rec-field/rec-field-destroy.c' || echo '$(srcdir)/'`rec-field/rec-field-destroy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-destroy.Tpo rec-field/$(DEPDIR)/runtests-rec-field-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-destroy.c' object='rec-field/runtests-rec-field-destroy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-destroy.o `test -f 'rec-field/rec-field-destroy.c' || echo '$(srcdir)/'`rec-field/rec-field-destroy.c rec-field/runtests-rec-field-destroy.obj: rec-field/rec-field-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-destroy.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-destroy.Tpo -c -o rec-field/runtests-rec-field-destroy.obj `if test -f 'rec-field/rec-field-destroy.c'; then $(CYGPATH_W) 'rec-field/rec-field-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-destroy.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-destroy.Tpo rec-field/$(DEPDIR)/runtests-rec-field-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-destroy.c' object='rec-field/runtests-rec-field-destroy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-destroy.obj `if test -f 'rec-field/rec-field-destroy.c'; then $(CYGPATH_W) 'rec-field/rec-field-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-destroy.c'; fi` rec-field/runtests-rec-field-equal-p.o: rec-field/rec-field-equal-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-equal-p.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Tpo -c -o rec-field/runtests-rec-field-equal-p.o `test -f 'rec-field/rec-field-equal-p.c' || echo '$(srcdir)/'`rec-field/rec-field-equal-p.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Tpo rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-equal-p.c' object='rec-field/runtests-rec-field-equal-p.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-equal-p.o `test -f 'rec-field/rec-field-equal-p.c' || echo '$(srcdir)/'`rec-field/rec-field-equal-p.c rec-field/runtests-rec-field-equal-p.obj: rec-field/rec-field-equal-p.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-equal-p.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Tpo -c -o rec-field/runtests-rec-field-equal-p.obj `if test -f 'rec-field/rec-field-equal-p.c'; then $(CYGPATH_W) 'rec-field/rec-field-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-equal-p.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Tpo rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-equal-p.c' object='rec-field/runtests-rec-field-equal-p.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-equal-p.obj `if test -f 'rec-field/rec-field-equal-p.c'; then $(CYGPATH_W) 'rec-field/rec-field-equal-p.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-equal-p.c'; fi` rec-field/runtests-rec-field-source.o: rec-field/rec-field-source.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-source.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-source.Tpo -c -o rec-field/runtests-rec-field-source.o `test -f 'rec-field/rec-field-source.c' || echo '$(srcdir)/'`rec-field/rec-field-source.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-source.Tpo rec-field/$(DEPDIR)/runtests-rec-field-source.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-source.c' object='rec-field/runtests-rec-field-source.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-source.o `test -f 'rec-field/rec-field-source.c' || echo '$(srcdir)/'`rec-field/rec-field-source.c rec-field/runtests-rec-field-source.obj: rec-field/rec-field-source.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-source.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-source.Tpo -c -o rec-field/runtests-rec-field-source.obj `if test -f 'rec-field/rec-field-source.c'; then $(CYGPATH_W) 'rec-field/rec-field-source.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-source.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-source.Tpo rec-field/$(DEPDIR)/runtests-rec-field-source.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-source.c' object='rec-field/runtests-rec-field-source.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-source.obj `if test -f 'rec-field/rec-field-source.c'; then $(CYGPATH_W) 'rec-field/rec-field-source.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-source.c'; fi` rec-field/runtests-rec-field-set-source.o: rec-field/rec-field-set-source.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-source.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-source.Tpo -c -o rec-field/runtests-rec-field-set-source.o `test -f 'rec-field/rec-field-set-source.c' || echo '$(srcdir)/'`rec-field/rec-field-set-source.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-source.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-source.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-source.c' object='rec-field/runtests-rec-field-set-source.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-source.o `test -f 'rec-field/rec-field-set-source.c' || echo '$(srcdir)/'`rec-field/rec-field-set-source.c rec-field/runtests-rec-field-set-source.obj: rec-field/rec-field-set-source.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-source.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-source.Tpo -c -o rec-field/runtests-rec-field-set-source.obj `if test -f 'rec-field/rec-field-set-source.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-source.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-source.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-source.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-source.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-source.c' object='rec-field/runtests-rec-field-set-source.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-source.obj `if test -f 'rec-field/rec-field-set-source.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-source.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-source.c'; fi` rec-field/runtests-rec-field-location.o: rec-field/rec-field-location.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-location.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-location.Tpo -c -o rec-field/runtests-rec-field-location.o `test -f 'rec-field/rec-field-location.c' || echo '$(srcdir)/'`rec-field/rec-field-location.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-location.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-location.c' object='rec-field/runtests-rec-field-location.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-location.o `test -f 'rec-field/rec-field-location.c' || echo '$(srcdir)/'`rec-field/rec-field-location.c rec-field/runtests-rec-field-location.obj: rec-field/rec-field-location.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-location.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-location.Tpo -c -o rec-field/runtests-rec-field-location.obj `if test -f 'rec-field/rec-field-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-location.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-location.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-location.c' object='rec-field/runtests-rec-field-location.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-location.obj `if test -f 'rec-field/rec-field-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-location.c'; fi` rec-field/runtests-rec-field-location-str.o: rec-field/rec-field-location-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-location-str.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-location-str.Tpo -c -o rec-field/runtests-rec-field-location-str.o `test -f 'rec-field/rec-field-location-str.c' || echo '$(srcdir)/'`rec-field/rec-field-location-str.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-location-str.Tpo rec-field/$(DEPDIR)/runtests-rec-field-location-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-location-str.c' object='rec-field/runtests-rec-field-location-str.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-location-str.o `test -f 'rec-field/rec-field-location-str.c' || echo '$(srcdir)/'`rec-field/rec-field-location-str.c rec-field/runtests-rec-field-location-str.obj: rec-field/rec-field-location-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-location-str.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-location-str.Tpo -c -o rec-field/runtests-rec-field-location-str.obj `if test -f 'rec-field/rec-field-location-str.c'; then $(CYGPATH_W) 'rec-field/rec-field-location-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-location-str.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-location-str.Tpo rec-field/$(DEPDIR)/runtests-rec-field-location-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-location-str.c' object='rec-field/runtests-rec-field-location-str.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-location-str.obj `if test -f 'rec-field/rec-field-location-str.c'; then $(CYGPATH_W) 'rec-field/rec-field-location-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-location-str.c'; fi` rec-field/runtests-rec-field-set-location.o: rec-field/rec-field-set-location.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-location.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-location.Tpo -c -o rec-field/runtests-rec-field-set-location.o `test -f 'rec-field/rec-field-set-location.c' || echo '$(srcdir)/'`rec-field/rec-field-set-location.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-location.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-location.c' object='rec-field/runtests-rec-field-set-location.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-location.o `test -f 'rec-field/rec-field-set-location.c' || echo '$(srcdir)/'`rec-field/rec-field-set-location.c rec-field/runtests-rec-field-set-location.obj: rec-field/rec-field-set-location.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-location.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-location.Tpo -c -o rec-field/runtests-rec-field-set-location.obj `if test -f 'rec-field/rec-field-set-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-location.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-location.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-location.c' object='rec-field/runtests-rec-field-set-location.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-location.obj `if test -f 'rec-field/rec-field-set-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-location.c'; fi` rec-field/runtests-rec-field-char-location.o: rec-field/rec-field-char-location.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-char-location.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-char-location.Tpo -c -o rec-field/runtests-rec-field-char-location.o `test -f 'rec-field/rec-field-char-location.c' || echo '$(srcdir)/'`rec-field/rec-field-char-location.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-char-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-char-location.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-char-location.c' object='rec-field/runtests-rec-field-char-location.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-char-location.o `test -f 'rec-field/rec-field-char-location.c' || echo '$(srcdir)/'`rec-field/rec-field-char-location.c rec-field/runtests-rec-field-char-location.obj: rec-field/rec-field-char-location.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-char-location.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-char-location.Tpo -c -o rec-field/runtests-rec-field-char-location.obj `if test -f 'rec-field/rec-field-char-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-char-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-char-location.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-char-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-char-location.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-char-location.c' object='rec-field/runtests-rec-field-char-location.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-char-location.obj `if test -f 'rec-field/rec-field-char-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-char-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-char-location.c'; fi` rec-field/runtests-rec-field-char-location-str.o: rec-field/rec-field-char-location-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-char-location-str.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Tpo -c -o rec-field/runtests-rec-field-char-location-str.o `test -f 'rec-field/rec-field-char-location-str.c' || echo '$(srcdir)/'`rec-field/rec-field-char-location-str.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Tpo rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-char-location-str.c' object='rec-field/runtests-rec-field-char-location-str.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-char-location-str.o `test -f 'rec-field/rec-field-char-location-str.c' || echo '$(srcdir)/'`rec-field/rec-field-char-location-str.c rec-field/runtests-rec-field-char-location-str.obj: rec-field/rec-field-char-location-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-char-location-str.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Tpo -c -o rec-field/runtests-rec-field-char-location-str.obj `if test -f 'rec-field/rec-field-char-location-str.c'; then $(CYGPATH_W) 'rec-field/rec-field-char-location-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-char-location-str.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Tpo rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-char-location-str.c' object='rec-field/runtests-rec-field-char-location-str.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-char-location-str.obj `if test -f 'rec-field/rec-field-char-location-str.c'; then $(CYGPATH_W) 'rec-field/rec-field-char-location-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-char-location-str.c'; fi` rec-field/runtests-rec-field-set-char-location.o: rec-field/rec-field-set-char-location.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-char-location.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Tpo -c -o rec-field/runtests-rec-field-set-char-location.o `test -f 'rec-field/rec-field-set-char-location.c' || echo '$(srcdir)/'`rec-field/rec-field-set-char-location.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-char-location.c' object='rec-field/runtests-rec-field-set-char-location.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-char-location.o `test -f 'rec-field/rec-field-set-char-location.c' || echo '$(srcdir)/'`rec-field/rec-field-set-char-location.c rec-field/runtests-rec-field-set-char-location.obj: rec-field/rec-field-set-char-location.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-set-char-location.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Tpo -c -o rec-field/runtests-rec-field-set-char-location.obj `if test -f 'rec-field/rec-field-set-char-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-char-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-char-location.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Tpo rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-set-char-location.c' object='rec-field/runtests-rec-field-set-char-location.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-set-char-location.obj `if test -f 'rec-field/rec-field-set-char-location.c'; then $(CYGPATH_W) 'rec-field/rec-field-set-char-location.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-set-char-location.c'; fi` rec-field/runtests-rec-field-to-comment.o: rec-field/rec-field-to-comment.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-to-comment.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Tpo -c -o rec-field/runtests-rec-field-to-comment.o `test -f 'rec-field/rec-field-to-comment.c' || echo '$(srcdir)/'`rec-field/rec-field-to-comment.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Tpo rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-to-comment.c' object='rec-field/runtests-rec-field-to-comment.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-to-comment.o `test -f 'rec-field/rec-field-to-comment.c' || echo '$(srcdir)/'`rec-field/rec-field-to-comment.c rec-field/runtests-rec-field-to-comment.obj: rec-field/rec-field-to-comment.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-rec-field-to-comment.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Tpo -c -o rec-field/runtests-rec-field-to-comment.obj `if test -f 'rec-field/rec-field-to-comment.c'; then $(CYGPATH_W) 'rec-field/rec-field-to-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-to-comment.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Tpo rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/rec-field-to-comment.c' object='rec-field/runtests-rec-field-to-comment.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-rec-field-to-comment.obj `if test -f 'rec-field/rec-field-to-comment.c'; then $(CYGPATH_W) 'rec-field/rec-field-to-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/rec-field-to-comment.c'; fi` rec-field/runtests-tsuite-rec-field.o: rec-field/tsuite-rec-field.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-tsuite-rec-field.o -MD -MP -MF rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Tpo -c -o rec-field/runtests-tsuite-rec-field.o `test -f 'rec-field/tsuite-rec-field.c' || echo '$(srcdir)/'`rec-field/tsuite-rec-field.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Tpo rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/tsuite-rec-field.c' object='rec-field/runtests-tsuite-rec-field.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-tsuite-rec-field.o `test -f 'rec-field/tsuite-rec-field.c' || echo '$(srcdir)/'`rec-field/tsuite-rec-field.c rec-field/runtests-tsuite-rec-field.obj: rec-field/tsuite-rec-field.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-field/runtests-tsuite-rec-field.obj -MD -MP -MF rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Tpo -c -o rec-field/runtests-tsuite-rec-field.obj `if test -f 'rec-field/tsuite-rec-field.c'; then $(CYGPATH_W) 'rec-field/tsuite-rec-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/tsuite-rec-field.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Tpo rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-field/tsuite-rec-field.c' object='rec-field/runtests-tsuite-rec-field.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-field/runtests-tsuite-rec-field.obj `if test -f 'rec-field/tsuite-rec-field.c'; then $(CYGPATH_W) 'rec-field/tsuite-rec-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-field/tsuite-rec-field.c'; fi` rec-record/runtests-tsuite-rec-record.o: rec-record/tsuite-rec-record.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-record/runtests-tsuite-rec-record.o -MD -MP -MF rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Tpo -c -o rec-record/runtests-tsuite-rec-record.o `test -f 'rec-record/tsuite-rec-record.c' || echo '$(srcdir)/'`rec-record/tsuite-rec-record.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Tpo rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-record/tsuite-rec-record.c' object='rec-record/runtests-tsuite-rec-record.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-record/runtests-tsuite-rec-record.o `test -f 'rec-record/tsuite-rec-record.c' || echo '$(srcdir)/'`rec-record/tsuite-rec-record.c rec-record/runtests-tsuite-rec-record.obj: rec-record/tsuite-rec-record.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-record/runtests-tsuite-rec-record.obj -MD -MP -MF rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Tpo -c -o rec-record/runtests-tsuite-rec-record.obj `if test -f 'rec-record/tsuite-rec-record.c'; then $(CYGPATH_W) 'rec-record/tsuite-rec-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-record/tsuite-rec-record.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Tpo rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-record/tsuite-rec-record.c' object='rec-record/runtests-tsuite-rec-record.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-record/runtests-tsuite-rec-record.obj `if test -f 'rec-record/tsuite-rec-record.c'; then $(CYGPATH_W) 'rec-record/tsuite-rec-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-record/tsuite-rec-record.c'; fi` rec-fex/runtests-rec-fex-new.o: rec-fex/rec-fex-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-new.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-new.Tpo -c -o rec-fex/runtests-rec-fex-new.o `test -f 'rec-fex/rec-fex-new.c' || echo '$(srcdir)/'`rec-fex/rec-fex-new.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-new.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-new.c' object='rec-fex/runtests-rec-fex-new.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-new.o `test -f 'rec-fex/rec-fex-new.c' || echo '$(srcdir)/'`rec-fex/rec-fex-new.c rec-fex/runtests-rec-fex-new.obj: rec-fex/rec-fex-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-new.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-new.Tpo -c -o rec-fex/runtests-rec-fex-new.obj `if test -f 'rec-fex/rec-fex-new.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-new.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-new.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-new.c' object='rec-fex/runtests-rec-fex-new.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-new.obj `if test -f 'rec-fex/rec-fex-new.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-new.c'; fi` rec-fex/runtests-rec-fex-destroy.o: rec-fex/rec-fex-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-destroy.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Tpo -c -o rec-fex/runtests-rec-fex-destroy.o `test -f 'rec-fex/rec-fex-destroy.c' || echo '$(srcdir)/'`rec-fex/rec-fex-destroy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-destroy.c' object='rec-fex/runtests-rec-fex-destroy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-destroy.o `test -f 'rec-fex/rec-fex-destroy.c' || echo '$(srcdir)/'`rec-fex/rec-fex-destroy.c rec-fex/runtests-rec-fex-destroy.obj: rec-fex/rec-fex-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-destroy.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Tpo -c -o rec-fex/runtests-rec-fex-destroy.obj `if test -f 'rec-fex/rec-fex-destroy.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-destroy.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-destroy.c' object='rec-fex/runtests-rec-fex-destroy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-destroy.obj `if test -f 'rec-fex/rec-fex-destroy.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-destroy.c'; fi` rec-fex/runtests-rec-fex-check.o: rec-fex/rec-fex-check.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-check.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-check.Tpo -c -o rec-fex/runtests-rec-fex-check.o `test -f 'rec-fex/rec-fex-check.c' || echo '$(srcdir)/'`rec-fex/rec-fex-check.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-check.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-check.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-check.c' object='rec-fex/runtests-rec-fex-check.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-check.o `test -f 'rec-fex/rec-fex-check.c' || echo '$(srcdir)/'`rec-fex/rec-fex-check.c rec-fex/runtests-rec-fex-check.obj: rec-fex/rec-fex-check.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-check.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-check.Tpo -c -o rec-fex/runtests-rec-fex-check.obj `if test -f 'rec-fex/rec-fex-check.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-check.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-check.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-check.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-check.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-check.c' object='rec-fex/runtests-rec-fex-check.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-check.obj `if test -f 'rec-fex/rec-fex-check.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-check.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-check.c'; fi` rec-fex/runtests-rec-fex-sort.o: rec-fex/rec-fex-sort.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-sort.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Tpo -c -o rec-fex/runtests-rec-fex-sort.o `test -f 'rec-fex/rec-fex-sort.c' || echo '$(srcdir)/'`rec-fex/rec-fex-sort.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-sort.c' object='rec-fex/runtests-rec-fex-sort.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-sort.o `test -f 'rec-fex/rec-fex-sort.c' || echo '$(srcdir)/'`rec-fex/rec-fex-sort.c rec-fex/runtests-rec-fex-sort.obj: rec-fex/rec-fex-sort.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-sort.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Tpo -c -o rec-fex/runtests-rec-fex-sort.obj `if test -f 'rec-fex/rec-fex-sort.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-sort.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-sort.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-sort.c' object='rec-fex/runtests-rec-fex-sort.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-sort.obj `if test -f 'rec-fex/rec-fex-sort.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-sort.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-sort.c'; fi` rec-fex/runtests-rec-fex-size.o: rec-fex/rec-fex-size.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-size.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-size.Tpo -c -o rec-fex/runtests-rec-fex-size.o `test -f 'rec-fex/rec-fex-size.c' || echo '$(srcdir)/'`rec-fex/rec-fex-size.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-size.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-size.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-size.c' object='rec-fex/runtests-rec-fex-size.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-size.o `test -f 'rec-fex/rec-fex-size.c' || echo '$(srcdir)/'`rec-fex/rec-fex-size.c rec-fex/runtests-rec-fex-size.obj: rec-fex/rec-fex-size.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-size.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-size.Tpo -c -o rec-fex/runtests-rec-fex-size.obj `if test -f 'rec-fex/rec-fex-size.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-size.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-size.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-size.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-size.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-size.c' object='rec-fex/runtests-rec-fex-size.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-size.obj `if test -f 'rec-fex/rec-fex-size.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-size.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-size.c'; fi` rec-fex/runtests-rec-fex-get.o: rec-fex/rec-fex-get.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-get.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-get.Tpo -c -o rec-fex/runtests-rec-fex-get.o `test -f 'rec-fex/rec-fex-get.c' || echo '$(srcdir)/'`rec-fex/rec-fex-get.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-get.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-get.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-get.c' object='rec-fex/runtests-rec-fex-get.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-get.o `test -f 'rec-fex/rec-fex-get.c' || echo '$(srcdir)/'`rec-fex/rec-fex-get.c rec-fex/runtests-rec-fex-get.obj: rec-fex/rec-fex-get.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-get.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-get.Tpo -c -o rec-fex/runtests-rec-fex-get.obj `if test -f 'rec-fex/rec-fex-get.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-get.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-get.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-get.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-get.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-get.c' object='rec-fex/runtests-rec-fex-get.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-get.obj `if test -f 'rec-fex/rec-fex-get.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-get.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-get.c'; fi` rec-fex/runtests-rec-fex-elem-field-name.o: rec-fex/rec-fex-elem-field-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-field-name.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Tpo -c -o rec-fex/runtests-rec-fex-elem-field-name.o `test -f 'rec-fex/rec-fex-elem-field-name.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-field-name.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-field-name.c' object='rec-fex/runtests-rec-fex-elem-field-name.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-field-name.o `test -f 'rec-fex/rec-fex-elem-field-name.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-field-name.c rec-fex/runtests-rec-fex-elem-field-name.obj: rec-fex/rec-fex-elem-field-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-field-name.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Tpo -c -o rec-fex/runtests-rec-fex-elem-field-name.obj `if test -f 'rec-fex/rec-fex-elem-field-name.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-field-name.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-field-name.c' object='rec-fex/runtests-rec-fex-elem-field-name.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-field-name.obj `if test -f 'rec-fex/rec-fex-elem-field-name.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-field-name.c'; fi` rec-fex/runtests-rec-fex-elem-rewrite-to.o: rec-fex/rec-fex-elem-rewrite-to.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-rewrite-to.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Tpo -c -o rec-fex/runtests-rec-fex-elem-rewrite-to.o `test -f 'rec-fex/rec-fex-elem-rewrite-to.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-rewrite-to.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-rewrite-to.c' object='rec-fex/runtests-rec-fex-elem-rewrite-to.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-rewrite-to.o `test -f 'rec-fex/rec-fex-elem-rewrite-to.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-rewrite-to.c rec-fex/runtests-rec-fex-elem-rewrite-to.obj: rec-fex/rec-fex-elem-rewrite-to.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-rewrite-to.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Tpo -c -o rec-fex/runtests-rec-fex-elem-rewrite-to.obj `if test -f 'rec-fex/rec-fex-elem-rewrite-to.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-rewrite-to.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-rewrite-to.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-rewrite-to.c' object='rec-fex/runtests-rec-fex-elem-rewrite-to.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-rewrite-to.obj `if test -f 'rec-fex/rec-fex-elem-rewrite-to.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-rewrite-to.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-rewrite-to.c'; fi` rec-fex/runtests-rec-fex-elem-min.o: rec-fex/rec-fex-elem-min.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-min.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Tpo -c -o rec-fex/runtests-rec-fex-elem-min.o `test -f 'rec-fex/rec-fex-elem-min.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-min.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-min.c' object='rec-fex/runtests-rec-fex-elem-min.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-min.o `test -f 'rec-fex/rec-fex-elem-min.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-min.c rec-fex/runtests-rec-fex-elem-min.obj: rec-fex/rec-fex-elem-min.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-min.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Tpo -c -o rec-fex/runtests-rec-fex-elem-min.obj `if test -f 'rec-fex/rec-fex-elem-min.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-min.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-min.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-min.c' object='rec-fex/runtests-rec-fex-elem-min.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-min.obj `if test -f 'rec-fex/rec-fex-elem-min.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-min.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-min.c'; fi` rec-fex/runtests-rec-fex-elem-max.o: rec-fex/rec-fex-elem-max.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-max.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Tpo -c -o rec-fex/runtests-rec-fex-elem-max.o `test -f 'rec-fex/rec-fex-elem-max.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-max.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-max.c' object='rec-fex/runtests-rec-fex-elem-max.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-max.o `test -f 'rec-fex/rec-fex-elem-max.c' || echo '$(srcdir)/'`rec-fex/rec-fex-elem-max.c rec-fex/runtests-rec-fex-elem-max.obj: rec-fex/rec-fex-elem-max.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-elem-max.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Tpo -c -o rec-fex/runtests-rec-fex-elem-max.obj `if test -f 'rec-fex/rec-fex-elem-max.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-max.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-max.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-elem-max.c' object='rec-fex/runtests-rec-fex-elem-max.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-elem-max.obj `if test -f 'rec-fex/rec-fex-elem-max.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-elem-max.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-elem-max.c'; fi` rec-fex/runtests-rec-fex-str.o: rec-fex/rec-fex-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-str.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-str.Tpo -c -o rec-fex/runtests-rec-fex-str.o `test -f 'rec-fex/rec-fex-str.c' || echo '$(srcdir)/'`rec-fex/rec-fex-str.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-str.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-str.c' object='rec-fex/runtests-rec-fex-str.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-str.o `test -f 'rec-fex/rec-fex-str.c' || echo '$(srcdir)/'`rec-fex/rec-fex-str.c rec-fex/runtests-rec-fex-str.obj: rec-fex/rec-fex-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-rec-fex-str.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-rec-fex-str.Tpo -c -o rec-fex/runtests-rec-fex-str.obj `if test -f 'rec-fex/rec-fex-str.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-str.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-rec-fex-str.Tpo rec-fex/$(DEPDIR)/runtests-rec-fex-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/rec-fex-str.c' object='rec-fex/runtests-rec-fex-str.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-rec-fex-str.obj `if test -f 'rec-fex/rec-fex-str.c'; then $(CYGPATH_W) 'rec-fex/rec-fex-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/rec-fex-str.c'; fi` rec-fex/runtests-tsuite-rec-fex.o: rec-fex/tsuite-rec-fex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-tsuite-rec-fex.o -MD -MP -MF rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Tpo -c -o rec-fex/runtests-tsuite-rec-fex.o `test -f 'rec-fex/tsuite-rec-fex.c' || echo '$(srcdir)/'`rec-fex/tsuite-rec-fex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Tpo rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/tsuite-rec-fex.c' object='rec-fex/runtests-tsuite-rec-fex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-tsuite-rec-fex.o `test -f 'rec-fex/tsuite-rec-fex.c' || echo '$(srcdir)/'`rec-fex/tsuite-rec-fex.c rec-fex/runtests-tsuite-rec-fex.obj: rec-fex/tsuite-rec-fex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-fex/runtests-tsuite-rec-fex.obj -MD -MP -MF rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Tpo -c -o rec-fex/runtests-tsuite-rec-fex.obj `if test -f 'rec-fex/tsuite-rec-fex.c'; then $(CYGPATH_W) 'rec-fex/tsuite-rec-fex.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/tsuite-rec-fex.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Tpo rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-fex/tsuite-rec-fex.c' object='rec-fex/runtests-tsuite-rec-fex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-fex/runtests-tsuite-rec-fex.obj `if test -f 'rec-fex/tsuite-rec-fex.c'; then $(CYGPATH_W) 'rec-fex/tsuite-rec-fex.c'; else $(CYGPATH_W) '$(srcdir)/rec-fex/tsuite-rec-fex.c'; fi` rec-parser/runtests-rec-parser-new.o: rec-parser/rec-parser-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new.Tpo -c -o rec-parser/runtests-rec-parser-new.o `test -f 'rec-parser/rec-parser-new.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-new.c' object='rec-parser/runtests-rec-parser-new.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new.o `test -f 'rec-parser/rec-parser-new.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new.c rec-parser/runtests-rec-parser-new.obj: rec-parser/rec-parser-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new.Tpo -c -o rec-parser/runtests-rec-parser-new.obj `if test -f 'rec-parser/rec-parser-new.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-new.c' object='rec-parser/runtests-rec-parser-new.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new.obj `if test -f 'rec-parser/rec-parser-new.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new.c'; fi` rec-parser/runtests-rec-parser-new-str.o: rec-parser/rec-parser-new-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new-str.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Tpo -c -o rec-parser/runtests-rec-parser-new-str.o `test -f 'rec-parser/rec-parser-new-str.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new-str.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-new-str.c' object='rec-parser/runtests-rec-parser-new-str.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new-str.o `test -f 'rec-parser/rec-parser-new-str.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new-str.c rec-parser/runtests-rec-parser-new-str.obj: rec-parser/rec-parser-new-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new-str.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Tpo -c -o rec-parser/runtests-rec-parser-new-str.obj `if test -f 'rec-parser/rec-parser-new-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new-str.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-new-str.c' object='rec-parser/runtests-rec-parser-new-str.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new-str.obj `if test -f 'rec-parser/rec-parser-new-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new-str.c'; fi` rec-parser/runtests-rec-parser-new-mem.o: rec-parser/rec-parser-new-mem.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new-mem.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Tpo -c -o rec-parser/runtests-rec-parser-new-mem.o `test -f 'rec-parser/rec-parser-new-mem.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new-mem.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-new-mem.c' object='rec-parser/runtests-rec-parser-new-mem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new-mem.o `test -f 'rec-parser/rec-parser-new-mem.c' || echo '$(srcdir)/'`rec-parser/rec-parser-new-mem.c rec-parser/runtests-rec-parser-new-mem.obj: rec-parser/rec-parser-new-mem.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-new-mem.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Tpo -c -o rec-parser/runtests-rec-parser-new-mem.obj `if test -f 'rec-parser/rec-parser-new-mem.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new-mem.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new-mem.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-new-mem.c' object='rec-parser/runtests-rec-parser-new-mem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-new-mem.obj `if test -f 'rec-parser/rec-parser-new-mem.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-new-mem.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-new-mem.c'; fi` rec-parser/runtests-rec-parser-destroy.o: rec-parser/rec-parser-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-destroy.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Tpo -c -o rec-parser/runtests-rec-parser-destroy.o `test -f 'rec-parser/rec-parser-destroy.c' || echo '$(srcdir)/'`rec-parser/rec-parser-destroy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-destroy.c' object='rec-parser/runtests-rec-parser-destroy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-destroy.o `test -f 'rec-parser/rec-parser-destroy.c' || echo '$(srcdir)/'`rec-parser/rec-parser-destroy.c rec-parser/runtests-rec-parser-destroy.obj: rec-parser/rec-parser-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-destroy.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Tpo -c -o rec-parser/runtests-rec-parser-destroy.obj `if test -f 'rec-parser/rec-parser-destroy.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-destroy.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-destroy.c' object='rec-parser/runtests-rec-parser-destroy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-destroy.obj `if test -f 'rec-parser/rec-parser-destroy.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-destroy.c'; fi` rec-parser/runtests-rec-parse-field-name-str.o: rec-parser/rec-parse-field-name-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field-name-str.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Tpo -c -o rec-parser/runtests-rec-parse-field-name-str.o `test -f 'rec-parser/rec-parse-field-name-str.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field-name-str.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-field-name-str.c' object='rec-parser/runtests-rec-parse-field-name-str.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field-name-str.o `test -f 'rec-parser/rec-parse-field-name-str.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field-name-str.c rec-parser/runtests-rec-parse-field-name-str.obj: rec-parser/rec-parse-field-name-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field-name-str.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Tpo -c -o rec-parser/runtests-rec-parse-field-name-str.obj `if test -f 'rec-parser/rec-parse-field-name-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field-name-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field-name-str.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-field-name-str.c' object='rec-parser/runtests-rec-parse-field-name-str.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field-name-str.obj `if test -f 'rec-parser/rec-parse-field-name-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field-name-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field-name-str.c'; fi` rec-parser/runtests-rec-parse-field-name.o: rec-parser/rec-parse-field-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field-name.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Tpo -c -o rec-parser/runtests-rec-parse-field-name.o `test -f 'rec-parser/rec-parse-field-name.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field-name.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-field-name.c' object='rec-parser/runtests-rec-parse-field-name.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field-name.o `test -f 'rec-parser/rec-parse-field-name.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field-name.c rec-parser/runtests-rec-parse-field-name.obj: rec-parser/rec-parse-field-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field-name.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Tpo -c -o rec-parser/runtests-rec-parse-field-name.obj `if test -f 'rec-parser/rec-parse-field-name.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field-name.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-field-name.c' object='rec-parser/runtests-rec-parse-field-name.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field-name.obj `if test -f 'rec-parser/rec-parse-field-name.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field-name.c'; fi` rec-parser/runtests-rec-parse-field.o: rec-parser/rec-parse-field.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field.Tpo -c -o rec-parser/runtests-rec-parse-field.o `test -f 'rec-parser/rec-parse-field.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-field.c' object='rec-parser/runtests-rec-parse-field.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field.o `test -f 'rec-parser/rec-parse-field.c' || echo '$(srcdir)/'`rec-parser/rec-parse-field.c rec-parser/runtests-rec-parse-field.obj: rec-parser/rec-parse-field.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-field.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-field.Tpo -c -o rec-parser/runtests-rec-parse-field.obj `if test -f 'rec-parser/rec-parse-field.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-field.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-field.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-field.c' object='rec-parser/runtests-rec-parse-field.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-field.obj `if test -f 'rec-parser/rec-parse-field.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-field.c'; fi` rec-parser/runtests-rec-parse-record.o: rec-parser/rec-parse-record.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-record.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-record.Tpo -c -o rec-parser/runtests-rec-parse-record.o `test -f 'rec-parser/rec-parse-record.c' || echo '$(srcdir)/'`rec-parser/rec-parse-record.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-record.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-record.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-record.c' object='rec-parser/runtests-rec-parse-record.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-record.o `test -f 'rec-parser/rec-parse-record.c' || echo '$(srcdir)/'`rec-parser/rec-parse-record.c rec-parser/runtests-rec-parse-record.obj: rec-parser/rec-parse-record.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-record.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-record.Tpo -c -o rec-parser/runtests-rec-parse-record.obj `if test -f 'rec-parser/rec-parse-record.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-record.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-record.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-record.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-record.c' object='rec-parser/runtests-rec-parse-record.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-record.obj `if test -f 'rec-parser/rec-parse-record.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-record.c'; fi` rec-parser/runtests-rec-parse-record-str.o: rec-parser/rec-parse-record-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-record-str.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Tpo -c -o rec-parser/runtests-rec-parse-record-str.o `test -f 'rec-parser/rec-parse-record-str.c' || echo '$(srcdir)/'`rec-parser/rec-parse-record-str.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-record-str.c' object='rec-parser/runtests-rec-parse-record-str.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-record-str.o `test -f 'rec-parser/rec-parse-record-str.c' || echo '$(srcdir)/'`rec-parser/rec-parse-record-str.c rec-parser/runtests-rec-parse-record-str.obj: rec-parser/rec-parse-record-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-record-str.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Tpo -c -o rec-parser/runtests-rec-parse-record-str.obj `if test -f 'rec-parser/rec-parse-record-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-record-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-record-str.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-record-str.c' object='rec-parser/runtests-rec-parse-record-str.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-record-str.obj `if test -f 'rec-parser/rec-parse-record-str.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-record-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-record-str.c'; fi` rec-parser/runtests-rec-parse-rset.o: rec-parser/rec-parse-rset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-rset.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Tpo -c -o rec-parser/runtests-rec-parse-rset.o `test -f 'rec-parser/rec-parse-rset.c' || echo '$(srcdir)/'`rec-parser/rec-parse-rset.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-rset.c' object='rec-parser/runtests-rec-parse-rset.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-rset.o `test -f 'rec-parser/rec-parse-rset.c' || echo '$(srcdir)/'`rec-parser/rec-parse-rset.c rec-parser/runtests-rec-parse-rset.obj: rec-parser/rec-parse-rset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-rset.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Tpo -c -o rec-parser/runtests-rec-parse-rset.obj `if test -f 'rec-parser/rec-parse-rset.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-rset.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-rset.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-rset.c' object='rec-parser/runtests-rec-parse-rset.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-rset.obj `if test -f 'rec-parser/rec-parse-rset.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-rset.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-rset.c'; fi` rec-parser/runtests-rec-parse-db.o: rec-parser/rec-parse-db.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-db.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-db.Tpo -c -o rec-parser/runtests-rec-parse-db.o `test -f 'rec-parser/rec-parse-db.c' || echo '$(srcdir)/'`rec-parser/rec-parse-db.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-db.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-db.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-db.c' object='rec-parser/runtests-rec-parse-db.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-db.o `test -f 'rec-parser/rec-parse-db.c' || echo '$(srcdir)/'`rec-parser/rec-parse-db.c rec-parser/runtests-rec-parse-db.obj: rec-parser/rec-parse-db.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parse-db.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parse-db.Tpo -c -o rec-parser/runtests-rec-parse-db.obj `if test -f 'rec-parser/rec-parse-db.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-db.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-db.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parse-db.Tpo rec-parser/$(DEPDIR)/runtests-rec-parse-db.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parse-db.c' object='rec-parser/runtests-rec-parse-db.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parse-db.obj `if test -f 'rec-parser/rec-parse-db.c'; then $(CYGPATH_W) 'rec-parser/rec-parse-db.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parse-db.c'; fi` rec-parser/runtests-rec-parser-eof.o: rec-parser/rec-parser-eof.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-eof.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Tpo -c -o rec-parser/runtests-rec-parser-eof.o `test -f 'rec-parser/rec-parser-eof.c' || echo '$(srcdir)/'`rec-parser/rec-parser-eof.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-eof.c' object='rec-parser/runtests-rec-parser-eof.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-eof.o `test -f 'rec-parser/rec-parser-eof.c' || echo '$(srcdir)/'`rec-parser/rec-parser-eof.c rec-parser/runtests-rec-parser-eof.obj: rec-parser/rec-parser-eof.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-eof.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Tpo -c -o rec-parser/runtests-rec-parser-eof.obj `if test -f 'rec-parser/rec-parser-eof.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-eof.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-eof.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-eof.c' object='rec-parser/runtests-rec-parser-eof.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-eof.obj `if test -f 'rec-parser/rec-parser-eof.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-eof.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-eof.c'; fi` rec-parser/runtests-rec-parser-error.o: rec-parser/rec-parser-error.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-error.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-error.Tpo -c -o rec-parser/runtests-rec-parser-error.o `test -f 'rec-parser/rec-parser-error.c' || echo '$(srcdir)/'`rec-parser/rec-parser-error.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-error.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-error.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-error.c' object='rec-parser/runtests-rec-parser-error.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-error.o `test -f 'rec-parser/rec-parser-error.c' || echo '$(srcdir)/'`rec-parser/rec-parser-error.c rec-parser/runtests-rec-parser-error.obj: rec-parser/rec-parser-error.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-error.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-error.Tpo -c -o rec-parser/runtests-rec-parser-error.obj `if test -f 'rec-parser/rec-parser-error.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-error.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-error.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-error.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-error.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-error.c' object='rec-parser/runtests-rec-parser-error.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-error.obj `if test -f 'rec-parser/rec-parser-error.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-error.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-error.c'; fi` rec-parser/runtests-rec-parser-reset.o: rec-parser/rec-parser-reset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-reset.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Tpo -c -o rec-parser/runtests-rec-parser-reset.o `test -f 'rec-parser/rec-parser-reset.c' || echo '$(srcdir)/'`rec-parser/rec-parser-reset.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-reset.c' object='rec-parser/runtests-rec-parser-reset.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-reset.o `test -f 'rec-parser/rec-parser-reset.c' || echo '$(srcdir)/'`rec-parser/rec-parser-reset.c rec-parser/runtests-rec-parser-reset.obj: rec-parser/rec-parser-reset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-reset.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Tpo -c -o rec-parser/runtests-rec-parser-reset.obj `if test -f 'rec-parser/rec-parser-reset.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-reset.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-reset.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-reset.c' object='rec-parser/runtests-rec-parser-reset.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-reset.obj `if test -f 'rec-parser/rec-parser-reset.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-reset.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-reset.c'; fi` rec-parser/runtests-rec-parser-perror.o: rec-parser/rec-parser-perror.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-perror.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Tpo -c -o rec-parser/runtests-rec-parser-perror.o `test -f 'rec-parser/rec-parser-perror.c' || echo '$(srcdir)/'`rec-parser/rec-parser-perror.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-perror.c' object='rec-parser/runtests-rec-parser-perror.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-perror.o `test -f 'rec-parser/rec-parser-perror.c' || echo '$(srcdir)/'`rec-parser/rec-parser-perror.c rec-parser/runtests-rec-parser-perror.obj: rec-parser/rec-parser-perror.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-perror.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Tpo -c -o rec-parser/runtests-rec-parser-perror.obj `if test -f 'rec-parser/rec-parser-perror.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-perror.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-perror.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-perror.c' object='rec-parser/runtests-rec-parser-perror.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-perror.obj `if test -f 'rec-parser/rec-parser-perror.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-perror.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-perror.c'; fi` rec-parser/runtests-rec-parser-seek-mem.o: rec-parser/rec-parser-seek-mem.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-seek-mem.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Tpo -c -o rec-parser/runtests-rec-parser-seek-mem.o `test -f 'rec-parser/rec-parser-seek-mem.c' || echo '$(srcdir)/'`rec-parser/rec-parser-seek-mem.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-seek-mem.c' object='rec-parser/runtests-rec-parser-seek-mem.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-seek-mem.o `test -f 'rec-parser/rec-parser-seek-mem.c' || echo '$(srcdir)/'`rec-parser/rec-parser-seek-mem.c rec-parser/runtests-rec-parser-seek-mem.obj: rec-parser/rec-parser-seek-mem.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-rec-parser-seek-mem.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Tpo -c -o rec-parser/runtests-rec-parser-seek-mem.obj `if test -f 'rec-parser/rec-parser-seek-mem.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-seek-mem.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-seek-mem.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Tpo rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/rec-parser-seek-mem.c' object='rec-parser/runtests-rec-parser-seek-mem.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-rec-parser-seek-mem.obj `if test -f 'rec-parser/rec-parser-seek-mem.c'; then $(CYGPATH_W) 'rec-parser/rec-parser-seek-mem.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/rec-parser-seek-mem.c'; fi` rec-parser/runtests-tsuite-rec-parser.o: rec-parser/tsuite-rec-parser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-tsuite-rec-parser.o -MD -MP -MF rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Tpo -c -o rec-parser/runtests-tsuite-rec-parser.o `test -f 'rec-parser/tsuite-rec-parser.c' || echo '$(srcdir)/'`rec-parser/tsuite-rec-parser.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Tpo rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/tsuite-rec-parser.c' object='rec-parser/runtests-tsuite-rec-parser.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-tsuite-rec-parser.o `test -f 'rec-parser/tsuite-rec-parser.c' || echo '$(srcdir)/'`rec-parser/tsuite-rec-parser.c rec-parser/runtests-tsuite-rec-parser.obj: rec-parser/tsuite-rec-parser.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-parser/runtests-tsuite-rec-parser.obj -MD -MP -MF rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Tpo -c -o rec-parser/runtests-tsuite-rec-parser.obj `if test -f 'rec-parser/tsuite-rec-parser.c'; then $(CYGPATH_W) 'rec-parser/tsuite-rec-parser.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/tsuite-rec-parser.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Tpo rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-parser/tsuite-rec-parser.c' object='rec-parser/runtests-tsuite-rec-parser.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-parser/runtests-tsuite-rec-parser.obj `if test -f 'rec-parser/tsuite-rec-parser.c'; then $(CYGPATH_W) 'rec-parser/tsuite-rec-parser.c'; else $(CYGPATH_W) '$(srcdir)/rec-parser/tsuite-rec-parser.c'; fi` rec-writer/runtests-rec-write-comment.o: rec-writer/rec-write-comment.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-comment.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-comment.Tpo -c -o rec-writer/runtests-rec-write-comment.o `test -f 'rec-writer/rec-write-comment.c' || echo '$(srcdir)/'`rec-writer/rec-write-comment.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-comment.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-comment.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-comment.c' object='rec-writer/runtests-rec-write-comment.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-comment.o `test -f 'rec-writer/rec-write-comment.c' || echo '$(srcdir)/'`rec-writer/rec-write-comment.c rec-writer/runtests-rec-write-comment.obj: rec-writer/rec-write-comment.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-comment.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-comment.Tpo -c -o rec-writer/runtests-rec-write-comment.obj `if test -f 'rec-writer/rec-write-comment.c'; then $(CYGPATH_W) 'rec-writer/rec-write-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-comment.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-comment.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-comment.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-comment.c' object='rec-writer/runtests-rec-write-comment.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-comment.obj `if test -f 'rec-writer/rec-write-comment.c'; then $(CYGPATH_W) 'rec-writer/rec-write-comment.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-comment.c'; fi` rec-writer/runtests-rec-write-field.o: rec-writer/rec-write-field.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field.Tpo -c -o rec-writer/runtests-rec-write-field.o `test -f 'rec-writer/rec-write-field.c' || echo '$(srcdir)/'`rec-writer/rec-write-field.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field.c' object='rec-writer/runtests-rec-write-field.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field.o `test -f 'rec-writer/rec-write-field.c' || echo '$(srcdir)/'`rec-writer/rec-write-field.c rec-writer/runtests-rec-write-field.obj: rec-writer/rec-write-field.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field.Tpo -c -o rec-writer/runtests-rec-write-field.obj `if test -f 'rec-writer/rec-write-field.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field.c' object='rec-writer/runtests-rec-write-field.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field.obj `if test -f 'rec-writer/rec-write-field.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field.c'; fi` rec-writer/runtests-rec-write-field-name.o: rec-writer/rec-write-field-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-name.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Tpo -c -o rec-writer/runtests-rec-write-field-name.o `test -f 'rec-writer/rec-write-field-name.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-name.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field-name.c' object='rec-writer/runtests-rec-write-field-name.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-name.o `test -f 'rec-writer/rec-write-field-name.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-name.c rec-writer/runtests-rec-write-field-name.obj: rec-writer/rec-write-field-name.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-name.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Tpo -c -o rec-writer/runtests-rec-write-field-name.obj `if test -f 'rec-writer/rec-write-field-name.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-name.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field-name.c' object='rec-writer/runtests-rec-write-field-name.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-name.obj `if test -f 'rec-writer/rec-write-field-name.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-name.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-name.c'; fi` rec-writer/runtests-rec-writer-destroy.o: rec-writer/rec-writer-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-writer-destroy.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Tpo -c -o rec-writer/runtests-rec-writer-destroy.o `test -f 'rec-writer/rec-writer-destroy.c' || echo '$(srcdir)/'`rec-writer/rec-writer-destroy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Tpo rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-writer-destroy.c' object='rec-writer/runtests-rec-writer-destroy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-writer-destroy.o `test -f 'rec-writer/rec-writer-destroy.c' || echo '$(srcdir)/'`rec-writer/rec-writer-destroy.c rec-writer/runtests-rec-writer-destroy.obj: rec-writer/rec-writer-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-writer-destroy.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Tpo -c -o rec-writer/runtests-rec-writer-destroy.obj `if test -f 'rec-writer/rec-writer-destroy.c'; then $(CYGPATH_W) 'rec-writer/rec-writer-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-writer-destroy.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Tpo rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-writer-destroy.c' object='rec-writer/runtests-rec-writer-destroy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-writer-destroy.obj `if test -f 'rec-writer/rec-writer-destroy.c'; then $(CYGPATH_W) 'rec-writer/rec-writer-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-writer-destroy.c'; fi` rec-writer/runtests-rec-write-record.o: rec-writer/rec-write-record.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-record.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-record.Tpo -c -o rec-writer/runtests-rec-write-record.o `test -f 'rec-writer/rec-write-record.c' || echo '$(srcdir)/'`rec-writer/rec-write-record.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-record.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-record.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-record.c' object='rec-writer/runtests-rec-write-record.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-record.o `test -f 'rec-writer/rec-write-record.c' || echo '$(srcdir)/'`rec-writer/rec-write-record.c rec-writer/runtests-rec-write-record.obj: rec-writer/rec-write-record.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-record.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-record.Tpo -c -o rec-writer/runtests-rec-write-record.obj `if test -f 'rec-writer/rec-write-record.c'; then $(CYGPATH_W) 'rec-writer/rec-write-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-record.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-record.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-record.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-record.c' object='rec-writer/runtests-rec-write-record.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-record.obj `if test -f 'rec-writer/rec-write-record.c'; then $(CYGPATH_W) 'rec-writer/rec-write-record.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-record.c'; fi` rec-writer/runtests-rec-writer-new.o: rec-writer/rec-writer-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-writer-new.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-writer-new.Tpo -c -o rec-writer/runtests-rec-writer-new.o `test -f 'rec-writer/rec-writer-new.c' || echo '$(srcdir)/'`rec-writer/rec-writer-new.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-writer-new.Tpo rec-writer/$(DEPDIR)/runtests-rec-writer-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-writer-new.c' object='rec-writer/runtests-rec-writer-new.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-writer-new.o `test -f 'rec-writer/rec-writer-new.c' || echo '$(srcdir)/'`rec-writer/rec-writer-new.c rec-writer/runtests-rec-writer-new.obj: rec-writer/rec-writer-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-writer-new.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-writer-new.Tpo -c -o rec-writer/runtests-rec-writer-new.obj `if test -f 'rec-writer/rec-writer-new.c'; then $(CYGPATH_W) 'rec-writer/rec-writer-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-writer-new.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-writer-new.Tpo rec-writer/$(DEPDIR)/runtests-rec-writer-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-writer-new.c' object='rec-writer/runtests-rec-writer-new.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-writer-new.obj `if test -f 'rec-writer/rec-writer-new.c'; then $(CYGPATH_W) 'rec-writer/rec-writer-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-writer-new.c'; fi` rec-writer/runtests-rec-write-rset.o: rec-writer/rec-write-rset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-rset.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-rset.Tpo -c -o rec-writer/runtests-rec-write-rset.o `test -f 'rec-writer/rec-write-rset.c' || echo '$(srcdir)/'`rec-writer/rec-write-rset.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-rset.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-rset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-rset.c' object='rec-writer/runtests-rec-write-rset.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-rset.o `test -f 'rec-writer/rec-write-rset.c' || echo '$(srcdir)/'`rec-writer/rec-write-rset.c rec-writer/runtests-rec-write-rset.obj: rec-writer/rec-write-rset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-rset.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-rset.Tpo -c -o rec-writer/runtests-rec-write-rset.obj `if test -f 'rec-writer/rec-write-rset.c'; then $(CYGPATH_W) 'rec-writer/rec-write-rset.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-rset.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-rset.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-rset.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-rset.c' object='rec-writer/runtests-rec-write-rset.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-rset.obj `if test -f 'rec-writer/rec-write-rset.c'; then $(CYGPATH_W) 'rec-writer/rec-write-rset.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-rset.c'; fi` rec-writer/runtests-rec-write-db.o: rec-writer/rec-write-db.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-db.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-db.Tpo -c -o rec-writer/runtests-rec-write-db.o `test -f 'rec-writer/rec-write-db.c' || echo '$(srcdir)/'`rec-writer/rec-write-db.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-db.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-db.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-db.c' object='rec-writer/runtests-rec-write-db.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-db.o `test -f 'rec-writer/rec-write-db.c' || echo '$(srcdir)/'`rec-writer/rec-write-db.c rec-writer/runtests-rec-write-db.obj: rec-writer/rec-write-db.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-db.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-db.Tpo -c -o rec-writer/runtests-rec-write-db.obj `if test -f 'rec-writer/rec-write-db.c'; then $(CYGPATH_W) 'rec-writer/rec-write-db.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-db.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-db.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-db.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-db.c' object='rec-writer/runtests-rec-write-db.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-db.obj `if test -f 'rec-writer/rec-write-db.c'; then $(CYGPATH_W) 'rec-writer/rec-write-db.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-db.c'; fi` rec-writer/runtests-rec-write-field-name-str.o: rec-writer/rec-write-field-name-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-name-str.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Tpo -c -o rec-writer/runtests-rec-write-field-name-str.o `test -f 'rec-writer/rec-write-field-name-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-name-str.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field-name-str.c' object='rec-writer/runtests-rec-write-field-name-str.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-name-str.o `test -f 'rec-writer/rec-write-field-name-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-name-str.c rec-writer/runtests-rec-write-field-name-str.obj: rec-writer/rec-write-field-name-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-name-str.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Tpo -c -o rec-writer/runtests-rec-write-field-name-str.obj `if test -f 'rec-writer/rec-write-field-name-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-name-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-name-str.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field-name-str.c' object='rec-writer/runtests-rec-write-field-name-str.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-name-str.obj `if test -f 'rec-writer/rec-write-field-name-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-name-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-name-str.c'; fi` rec-writer/runtests-rec-write-field-str.o: rec-writer/rec-write-field-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-str.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Tpo -c -o rec-writer/runtests-rec-write-field-str.o `test -f 'rec-writer/rec-write-field-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-str.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field-str.c' object='rec-writer/runtests-rec-write-field-str.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-str.o `test -f 'rec-writer/rec-write-field-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-field-str.c rec-writer/runtests-rec-write-field-str.obj: rec-writer/rec-write-field-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-field-str.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Tpo -c -o rec-writer/runtests-rec-write-field-str.obj `if test -f 'rec-writer/rec-write-field-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-str.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-field-str.c' object='rec-writer/runtests-rec-write-field-str.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-field-str.obj `if test -f 'rec-writer/rec-write-field-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-field-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-field-str.c'; fi` rec-writer/runtests-rec-write-comment-str.o: rec-writer/rec-write-comment-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-comment-str.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Tpo -c -o rec-writer/runtests-rec-write-comment-str.o `test -f 'rec-writer/rec-write-comment-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-comment-str.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-comment-str.c' object='rec-writer/runtests-rec-write-comment-str.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-comment-str.o `test -f 'rec-writer/rec-write-comment-str.c' || echo '$(srcdir)/'`rec-writer/rec-write-comment-str.c rec-writer/runtests-rec-write-comment-str.obj: rec-writer/rec-write-comment-str.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-rec-write-comment-str.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Tpo -c -o rec-writer/runtests-rec-write-comment-str.obj `if test -f 'rec-writer/rec-write-comment-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-comment-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-comment-str.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Tpo rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/rec-write-comment-str.c' object='rec-writer/runtests-rec-write-comment-str.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-rec-write-comment-str.obj `if test -f 'rec-writer/rec-write-comment-str.c'; then $(CYGPATH_W) 'rec-writer/rec-write-comment-str.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/rec-write-comment-str.c'; fi` rec-writer/runtests-tsuite-rec-writer.o: rec-writer/tsuite-rec-writer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-tsuite-rec-writer.o -MD -MP -MF rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Tpo -c -o rec-writer/runtests-tsuite-rec-writer.o `test -f 'rec-writer/tsuite-rec-writer.c' || echo '$(srcdir)/'`rec-writer/tsuite-rec-writer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Tpo rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/tsuite-rec-writer.c' object='rec-writer/runtests-tsuite-rec-writer.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-tsuite-rec-writer.o `test -f 'rec-writer/tsuite-rec-writer.c' || echo '$(srcdir)/'`rec-writer/tsuite-rec-writer.c rec-writer/runtests-tsuite-rec-writer.obj: rec-writer/tsuite-rec-writer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-writer/runtests-tsuite-rec-writer.obj -MD -MP -MF rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Tpo -c -o rec-writer/runtests-tsuite-rec-writer.obj `if test -f 'rec-writer/tsuite-rec-writer.c'; then $(CYGPATH_W) 'rec-writer/tsuite-rec-writer.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/tsuite-rec-writer.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Tpo rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-writer/tsuite-rec-writer.c' object='rec-writer/runtests-tsuite-rec-writer.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-writer/runtests-tsuite-rec-writer.obj `if test -f 'rec-writer/tsuite-rec-writer.c'; then $(CYGPATH_W) 'rec-writer/tsuite-rec-writer.c'; else $(CYGPATH_W) '$(srcdir)/rec-writer/tsuite-rec-writer.c'; fi` rec-sex/runtests-rec-sex-new.o: rec-sex/rec-sex-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-new.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-new.Tpo -c -o rec-sex/runtests-rec-sex-new.o `test -f 'rec-sex/rec-sex-new.c' || echo '$(srcdir)/'`rec-sex/rec-sex-new.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-new.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-new.c' object='rec-sex/runtests-rec-sex-new.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-new.o `test -f 'rec-sex/rec-sex-new.c' || echo '$(srcdir)/'`rec-sex/rec-sex-new.c rec-sex/runtests-rec-sex-new.obj: rec-sex/rec-sex-new.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-new.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-new.Tpo -c -o rec-sex/runtests-rec-sex-new.obj `if test -f 'rec-sex/rec-sex-new.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-new.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-new.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-new.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-new.c' object='rec-sex/runtests-rec-sex-new.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-new.obj `if test -f 'rec-sex/rec-sex-new.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-new.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-new.c'; fi` rec-sex/runtests-rec-sex-destroy.o: rec-sex/rec-sex-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-destroy.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Tpo -c -o rec-sex/runtests-rec-sex-destroy.o `test -f 'rec-sex/rec-sex-destroy.c' || echo '$(srcdir)/'`rec-sex/rec-sex-destroy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-destroy.c' object='rec-sex/runtests-rec-sex-destroy.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-destroy.o `test -f 'rec-sex/rec-sex-destroy.c' || echo '$(srcdir)/'`rec-sex/rec-sex-destroy.c rec-sex/runtests-rec-sex-destroy.obj: rec-sex/rec-sex-destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-destroy.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Tpo -c -o rec-sex/runtests-rec-sex-destroy.obj `if test -f 'rec-sex/rec-sex-destroy.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-destroy.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-destroy.c' object='rec-sex/runtests-rec-sex-destroy.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-destroy.obj `if test -f 'rec-sex/rec-sex-destroy.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-destroy.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-destroy.c'; fi` rec-sex/runtests-rec-sex-compile.o: rec-sex/rec-sex-compile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-compile.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Tpo -c -o rec-sex/runtests-rec-sex-compile.o `test -f 'rec-sex/rec-sex-compile.c' || echo '$(srcdir)/'`rec-sex/rec-sex-compile.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-compile.c' object='rec-sex/runtests-rec-sex-compile.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-compile.o `test -f 'rec-sex/rec-sex-compile.c' || echo '$(srcdir)/'`rec-sex/rec-sex-compile.c rec-sex/runtests-rec-sex-compile.obj: rec-sex/rec-sex-compile.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-compile.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Tpo -c -o rec-sex/runtests-rec-sex-compile.obj `if test -f 'rec-sex/rec-sex-compile.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-compile.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-compile.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-compile.c' object='rec-sex/runtests-rec-sex-compile.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-compile.obj `if test -f 'rec-sex/rec-sex-compile.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-compile.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-compile.c'; fi` rec-sex/runtests-rec-sex-eval.o: rec-sex/rec-sex-eval.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-eval.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Tpo -c -o rec-sex/runtests-rec-sex-eval.o `test -f 'rec-sex/rec-sex-eval.c' || echo '$(srcdir)/'`rec-sex/rec-sex-eval.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-eval.c' object='rec-sex/runtests-rec-sex-eval.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-eval.o `test -f 'rec-sex/rec-sex-eval.c' || echo '$(srcdir)/'`rec-sex/rec-sex-eval.c rec-sex/runtests-rec-sex-eval.obj: rec-sex/rec-sex-eval.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-rec-sex-eval.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Tpo -c -o rec-sex/runtests-rec-sex-eval.obj `if test -f 'rec-sex/rec-sex-eval.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-eval.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-eval.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Tpo rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/rec-sex-eval.c' object='rec-sex/runtests-rec-sex-eval.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-rec-sex-eval.obj `if test -f 'rec-sex/rec-sex-eval.c'; then $(CYGPATH_W) 'rec-sex/rec-sex-eval.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/rec-sex-eval.c'; fi` rec-sex/runtests-tsuite-rec-sex.o: rec-sex/tsuite-rec-sex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-tsuite-rec-sex.o -MD -MP -MF rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Tpo -c -o rec-sex/runtests-tsuite-rec-sex.o `test -f 'rec-sex/tsuite-rec-sex.c' || echo '$(srcdir)/'`rec-sex/tsuite-rec-sex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Tpo rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/tsuite-rec-sex.c' object='rec-sex/runtests-tsuite-rec-sex.o' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-tsuite-rec-sex.o `test -f 'rec-sex/tsuite-rec-sex.c' || echo '$(srcdir)/'`rec-sex/tsuite-rec-sex.c rec-sex/runtests-tsuite-rec-sex.obj: rec-sex/tsuite-rec-sex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -MT rec-sex/runtests-tsuite-rec-sex.obj -MD -MP -MF rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Tpo -c -o rec-sex/runtests-tsuite-rec-sex.obj `if test -f 'rec-sex/tsuite-rec-sex.c'; then $(CYGPATH_W) 'rec-sex/tsuite-rec-sex.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/tsuite-rec-sex.c'; fi` @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Tpo rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rec-sex/tsuite-rec-sex.c' object='rec-sex/runtests-tsuite-rec-sex.obj' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(runtests_CFLAGS) $(CFLAGS) -c -o rec-sex/runtests-tsuite-rec-sex.obj `if test -f 'rec-sex/tsuite-rec-sex.c'; then $(CYGPATH_W) 'rec-sex/tsuite-rec-sex.c'; else $(CYGPATH_W) '$(srcdir)/rec-sex/tsuite-rec-sex.c'; fi` mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags # Recover from deleted '.trs' file; this should ensure that # "rm -f foo.log; make foo.trs" re-run 'foo.test', and re-create # both 'foo.log' and 'foo.trs'. Break the recipe in two subshells # to avoid problems with "make -n". .log.trs: rm -f $< $@ $(MAKE) $(AM_MAKEFLAGS) $< # Leading 'am--fnord' is there to ensure the list of targets does not # expand to empty, as could happen e.g. with make check TESTS=''. am--fnord $(TEST_LOGS) $(TEST_LOGS:.log=.trs): $(am__force_recheck) am--force-recheck: @: $(TEST_SUITE_LOG): $(TEST_LOGS) @$(am__set_TESTS_bases); \ am__f_ok () { test -f "$$1" && test -r "$$1"; }; \ redo_bases=`for i in $$bases; do \ am__f_ok $$i.trs && am__f_ok $$i.log || echo $$i; \ done`; \ if test -n "$$redo_bases"; then \ redo_logs=`for i in $$redo_bases; do echo $$i.log; done`; \ redo_results=`for i in $$redo_bases; do echo $$i.trs; done`; \ if $(am__make_dryrun); then :; else \ rm -f $$redo_logs && rm -f $$redo_results || exit 1; \ fi; \ fi; \ if test -n "$$am__remaking_logs"; then \ echo "fatal: making $(TEST_SUITE_LOG): possible infinite" \ "recursion detected" >&2; \ elif test -n "$$redo_logs"; then \ am__remaking_logs=yes $(MAKE) $(AM_MAKEFLAGS) $$redo_logs; \ fi; \ if $(am__make_dryrun); then :; else \ st=0; \ errmsg="fatal: making $(TEST_SUITE_LOG): failed to create"; \ for i in $$redo_bases; do \ test -f $$i.trs && test -r $$i.trs \ || { echo "$$errmsg $$i.trs" >&2; st=1; }; \ test -f $$i.log && test -r $$i.log \ || { echo "$$errmsg $$i.log" >&2; st=1; }; \ done; \ test $$st -eq 0 || exit 1; \ fi @$(am__sh_e_setup); $(am__tty_colors); $(am__set_TESTS_bases); \ ws='[ ]'; \ results=`for b in $$bases; do echo $$b.trs; done`; \ test -n "$$results" || results=/dev/null; \ all=` grep "^$$ws*:test-result:" $$results | wc -l`; \ pass=` grep "^$$ws*:test-result:$$ws*PASS" $$results | wc -l`; \ fail=` grep "^$$ws*:test-result:$$ws*FAIL" $$results | wc -l`; \ skip=` grep "^$$ws*:test-result:$$ws*SKIP" $$results | wc -l`; \ xfail=`grep "^$$ws*:test-result:$$ws*XFAIL" $$results | wc -l`; \ xpass=`grep "^$$ws*:test-result:$$ws*XPASS" $$results | wc -l`; \ error=`grep "^$$ws*:test-result:$$ws*ERROR" $$results | wc -l`; \ if test `expr $$fail + $$xpass + $$error` -eq 0; then \ success=true; \ else \ success=false; \ fi; \ br='==================='; br=$$br$$br$$br$$br; \ result_count () \ { \ if test x"$$1" = x"--maybe-color"; then \ maybe_colorize=yes; \ elif test x"$$1" = x"--no-color"; then \ maybe_colorize=no; \ else \ echo "$@: invalid 'result_count' usage" >&2; exit 4; \ fi; \ shift; \ desc=$$1 count=$$2; \ if test $$maybe_colorize = yes && test $$count -gt 0; then \ color_start=$$3 color_end=$$std; \ else \ color_start= color_end=; \ fi; \ echo "$${color_start}# $$desc $$count$${color_end}"; \ }; \ create_testsuite_report () \ { \ result_count $$1 "TOTAL:" $$all "$$brg"; \ result_count $$1 "PASS: " $$pass "$$grn"; \ result_count $$1 "SKIP: " $$skip "$$blu"; \ result_count $$1 "XFAIL:" $$xfail "$$lgn"; \ result_count $$1 "FAIL: " $$fail "$$red"; \ result_count $$1 "XPASS:" $$xpass "$$red"; \ result_count $$1 "ERROR:" $$error "$$mgn"; \ }; \ { \ echo "$(PACKAGE_STRING): $(subdir)/$(TEST_SUITE_LOG)" | \ $(am__rst_title); \ create_testsuite_report --no-color; \ echo; \ echo ".. contents:: :depth: 2"; \ echo; \ for b in $$bases; do echo $$b; done \ | $(am__create_global_log); \ } >$(TEST_SUITE_LOG).tmp || exit 1; \ mv $(TEST_SUITE_LOG).tmp $(TEST_SUITE_LOG); \ if $$success; then \ col="$$grn"; \ else \ col="$$red"; \ test x"$$VERBOSE" = x || cat $(TEST_SUITE_LOG); \ fi; \ echo "$${col}$$br$${std}"; \ echo "$${col}Testsuite summary"$(AM_TESTSUITE_SUMMARY_HEADER)"$${std}"; \ echo "$${col}$$br$${std}"; \ create_testsuite_report --maybe-color; \ echo "$$col$$br$$std"; \ if $$success; then :; else \ echo "$${col}See $(subdir)/$(TEST_SUITE_LOG)$${std}"; \ if test -n "$(PACKAGE_BUGREPORT)"; then \ echo "$${col}Please report to $(PACKAGE_BUGREPORT)$${std}"; \ fi; \ echo "$$col$$br$$std"; \ fi; \ $$success || exit 1 check-TESTS: @list='$(RECHECK_LOGS)'; test -z "$$list" || rm -f $$list @list='$(RECHECK_LOGS:.log=.trs)'; test -z "$$list" || rm -f $$list @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ log_list=`for i in $$bases; do echo $$i.log; done`; \ trs_list=`for i in $$bases; do echo $$i.trs; done`; \ log_list=`echo $$log_list`; trs_list=`echo $$trs_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) TEST_LOGS="$$log_list"; \ exit $$?; recheck: all @test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) @set +e; $(am__set_TESTS_bases); \ bases=`for i in $$bases; do echo $$i; done \ | $(am__list_recheck_tests)` || exit 1; \ log_list=`for i in $$bases; do echo $$i.log; done`; \ log_list=`echo $$log_list`; \ $(MAKE) $(AM_MAKEFLAGS) $(TEST_SUITE_LOG) \ am__force_recheck=am--force-recheck \ TEST_LOGS="$$log_list"; \ exit $$? runtests.log: runtests$(EXEEXT) @p='runtests$(EXEEXT)'; \ b='runtests'; \ $(am__check_pre) $(LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_LOG_DRIVER_FLAGS) $(LOG_DRIVER_FLAGS) -- $(LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) .test.log: @p='$<'; \ $(am__set_b); \ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ --log-file $$b.log --trs-file $$b.trs \ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ "$$tst" $(AM_TESTS_FD_REDIRECT) @am__EXEEXT_TRUE@.test$(EXEEXT).log: @am__EXEEXT_TRUE@ @p='$<'; \ @am__EXEEXT_TRUE@ $(am__set_b); \ @am__EXEEXT_TRUE@ $(am__check_pre) $(TEST_LOG_DRIVER) --test-name "$$f" \ @am__EXEEXT_TRUE@ --log-file $$b.log --trs-file $$b.trs \ @am__EXEEXT_TRUE@ $(am__common_driver_flags) $(AM_TEST_LOG_DRIVER_FLAGS) $(TEST_LOG_DRIVER_FLAGS) -- $(TEST_LOG_COMPILE) \ @am__EXEEXT_TRUE@ "$$tst" $(AM_TESTS_FD_REDIRECT) distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am $(MAKE) $(AM_MAKEFLAGS) check-TESTS check: check-recursive all-am: Makefile $(PROGRAMS) installdirs: installdirs-recursive installdirs-am: install: install-recursive install-exec: install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(TEST_LOGS)" || rm -f $(TEST_LOGS) -test -z "$(TEST_LOGS:.log=.trs)" || rm -f $(TEST_LOGS:.log=.trs) -test -z "$(TEST_SUITE_LOG)" || rm -f $(TEST_SUITE_LOG) clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f rec-comment/$(DEPDIR)/$(am__dirstamp) -rm -f rec-comment/$(am__dirstamp) -rm -f rec-fex/$(DEPDIR)/$(am__dirstamp) -rm -f rec-fex/$(am__dirstamp) -rm -f rec-field-name/$(DEPDIR)/$(am__dirstamp) -rm -f rec-field-name/$(am__dirstamp) -rm -f rec-field/$(DEPDIR)/$(am__dirstamp) -rm -f rec-field/$(am__dirstamp) -rm -f rec-mset/$(DEPDIR)/$(am__dirstamp) -rm -f rec-mset/$(am__dirstamp) -rm -f rec-parser/$(DEPDIR)/$(am__dirstamp) -rm -f rec-parser/$(am__dirstamp) -rm -f rec-record/$(DEPDIR)/$(am__dirstamp) -rm -f rec-record/$(am__dirstamp) -rm -f rec-sex/$(DEPDIR)/$(am__dirstamp) -rm -f rec-sex/$(am__dirstamp) -rm -f rec-type-reg/$(DEPDIR)/$(am__dirstamp) -rm -f rec-type-reg/$(am__dirstamp) -rm -f rec-type/$(DEPDIR)/$(am__dirstamp) -rm -f rec-type/$(am__dirstamp) -rm -f rec-writer/$(DEPDIR)/$(am__dirstamp) -rm -f rec-writer/$(am__dirstamp) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." @CHECK_FALSE@clean-local: clean: clean-recursive clean-am: clean-generic clean-libtool clean-local clean-noinstPROGRAMS \ mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/runtests-runtests.Po -rm -f rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Po -rm -f rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Po -rm -f rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Po -rm -f rec-comment/$(DEPDIR)/runtests-rec-comment-new.Po -rm -f rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Po -rm -f rec-comment/$(DEPDIR)/runtests-rec-comment-text.Po -rm -f rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-check.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-get.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-new.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-size.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-str.Po -rm -f rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Po -rm -f rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Po -rm -f rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Po -rm -f rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Po -rm -f rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-char-location.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-destroy.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-dup.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-location-str.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-location.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-name.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-new.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-set-location.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-set-name.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-set-source.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-set-value.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-source.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-value.Po -rm -f rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Po -rm -f rec-mset/$(DEPDIR)/runtests-rec-mset-count.Po -rm -f rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Po -rm -f rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Po -rm -f rec-mset/$(DEPDIR)/runtests-rec-mset-new.Po -rm -f rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Po -rm -f rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Po -rm -f rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-db.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-field.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-record.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-error.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-new.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Po -rm -f rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Po -rm -f rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Po -rm -f rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Po -rm -f rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Po -rm -f rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Po -rm -f rec-sex/$(DEPDIR)/runtests-rec-sex-new.Po -rm -f rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Po -rm -f rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Po -rm -f rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Po -rm -f rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Po -rm -f rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-check.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-destroy.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-kind.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-name.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-new.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-set-name.Po -rm -f rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-comment.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-db.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-field.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-record.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-rset.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-writer-new.Po -rm -f rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Po -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/runtests-runtests.Po -rm -f rec-comment/$(DEPDIR)/runtests-rec-comment-destroy.Po -rm -f rec-comment/$(DEPDIR)/runtests-rec-comment-dup.Po -rm -f rec-comment/$(DEPDIR)/runtests-rec-comment-equal-p.Po -rm -f rec-comment/$(DEPDIR)/runtests-rec-comment-new.Po -rm -f rec-comment/$(DEPDIR)/runtests-rec-comment-set-text.Po -rm -f rec-comment/$(DEPDIR)/runtests-rec-comment-text.Po -rm -f rec-comment/$(DEPDIR)/runtests-tsuite-rec-comment.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-check.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-destroy.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-elem-field-name.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-elem-max.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-elem-min.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-elem-rewrite-to.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-get.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-new.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-size.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-sort.Po -rm -f rec-fex/$(DEPDIR)/runtests-rec-fex-str.Po -rm -f rec-fex/$(DEPDIR)/runtests-tsuite-rec-fex.Po -rm -f rec-field-name/$(DEPDIR)/runtests-rec-field-name-equal-p.Po -rm -f rec-field-name/$(DEPDIR)/runtests-rec-field-name-normalise.Po -rm -f rec-field-name/$(DEPDIR)/runtests-rec-field-name-p.Po -rm -f rec-field-name/$(DEPDIR)/runtests-tsuite-rec-field-name.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-char-location-str.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-char-location.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-destroy.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-dup.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-equal-p.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-location-str.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-location.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-name.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-new.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-set-char-location.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-set-location.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-set-name.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-set-source.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-set-value.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-source.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-to-comment.Po -rm -f rec-field/$(DEPDIR)/runtests-rec-field-value.Po -rm -f rec-field/$(DEPDIR)/runtests-tsuite-rec-field.Po -rm -f rec-mset/$(DEPDIR)/runtests-rec-mset-count.Po -rm -f rec-mset/$(DEPDIR)/runtests-rec-mset-dup.Po -rm -f rec-mset/$(DEPDIR)/runtests-rec-mset-get-at.Po -rm -f rec-mset/$(DEPDIR)/runtests-rec-mset-new.Po -rm -f rec-mset/$(DEPDIR)/runtests-rec-mset-register-type.Po -rm -f rec-mset/$(DEPDIR)/runtests-rec-mset-type-p.Po -rm -f rec-mset/$(DEPDIR)/runtests-tsuite-rec-mset.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-db.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-field-name-str.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-field-name.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-field.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-record-str.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-record.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parse-rset.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-destroy.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-eof.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-error.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-new-mem.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-new-str.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-new.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-perror.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-reset.Po -rm -f rec-parser/$(DEPDIR)/runtests-rec-parser-seek-mem.Po -rm -f rec-parser/$(DEPDIR)/runtests-tsuite-rec-parser.Po -rm -f rec-record/$(DEPDIR)/runtests-tsuite-rec-record.Po -rm -f rec-sex/$(DEPDIR)/runtests-rec-sex-compile.Po -rm -f rec-sex/$(DEPDIR)/runtests-rec-sex-destroy.Po -rm -f rec-sex/$(DEPDIR)/runtests-rec-sex-eval.Po -rm -f rec-sex/$(DEPDIR)/runtests-rec-sex-new.Po -rm -f rec-sex/$(DEPDIR)/runtests-tsuite-rec-sex.Po -rm -f rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-destroy.Po -rm -f rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-get.Po -rm -f rec-type-reg/$(DEPDIR)/runtests-rec-type-reg-new.Po -rm -f rec-type-reg/$(DEPDIR)/runtests-tsuite-rec-type-reg.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-check.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-descr-p.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-destroy.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-equal-p.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-kind-str.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-kind.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-name.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-new.Po -rm -f rec-type/$(DEPDIR)/runtests-rec-type-set-name.Po -rm -f rec-type/$(DEPDIR)/runtests-tsuite-rec-type.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-comment-str.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-comment.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-db.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-field-name-str.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-field-name.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-field-str.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-field.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-record.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-write-rset.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-writer-destroy.Po -rm -f rec-writer/$(DEPDIR)/runtests-rec-writer-new.Po -rm -f rec-writer/$(DEPDIR)/runtests-tsuite-rec-writer.Po -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) check-am install-am install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-TESTS check-am clean clean-generic \ clean-libtool clean-local clean-noinstPROGRAMS cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs installdirs-am maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ recheck tags tags-am uninstall uninstall-am .PRECIOUS: Makefile @CHECK_TRUE@clean-local: @CHECK_TRUE@ -rm -f tests.log # End of Makefile.am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type/����������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�013436� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type/tsuite-rec-type.c�����������������������������������������������������0000644�0000000�0000000�00000003465�14226563465�016574� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: tsuite-rec-type.c * Date: Fri Oct 29 16:13:26 2010 * * GNU recutils - rec_type test suite * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> extern TCase *test_rec_type_new (void); extern TCase *test_rec_type_destroy (void); extern TCase *test_rec_type_descr_p (void); extern TCase *test_rec_type_kind (void); extern TCase *test_rec_type_kind_str (void); extern TCase *test_rec_type_equal_p (void); extern TCase *test_rec_type_check (void); extern TCase *test_rec_type_name (void); extern TCase *test_rec_type_set_name (void); Suite * tsuite_rec_type () { Suite *s; s = suite_create ("rec-type"); suite_add_tcase (s, test_rec_type_new ()); suite_add_tcase (s, test_rec_type_destroy ()); suite_add_tcase (s, test_rec_type_descr_p ()); suite_add_tcase (s, test_rec_type_kind ()); suite_add_tcase (s, test_rec_type_kind_str ()); suite_add_tcase (s, test_rec_type_equal_p ()); suite_add_tcase (s, test_rec_type_check ()); suite_add_tcase (s, test_rec_type_name ()); suite_add_tcase (s, test_rec_type_set_name ()); return s; } /* End of tsuite-rec-type.c */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type/rec-type-equal-p.c����������������������������������������������������0000644�0000000�0000000�00000007346�14226563465�016625� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-type-equal-p.c * Date: Fri Oct 29 18:33:21 2010 * * GNU recutils - rec_type_equal_p unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> #include <rec.h> /*- * Test: rec_type_equal_p_nominal * Unit: rec_type_equal_p * Description: * + Check equality for equal types. */ START_TEST(rec_type_equal_p_nominal) { rec_type_t type1; rec_type_t type2; type1 = rec_type_new ("int"); type2 = rec_type_new ("int"); fail_if (!rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("bool"); type2 = rec_type_new ("bool"); fail_if (!rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("range 1 10"); type2 = rec_type_new ("range 1 10"); fail_if (!rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("range 1 10"); type2 = rec_type_new ("range -10 0"); fail_if (rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("real"); type2 = rec_type_new ("real"); fail_if (!rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("size 10"); type2 = rec_type_new ("size 10"); fail_if (!rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("size 10"); type2 = rec_type_new ("size 20"); fail_if (rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("line"); type2 = rec_type_new ("line"); fail_if (!rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("date"); type2 = rec_type_new ("date"); fail_if (!rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("enum A B C"); type2 = rec_type_new ("enum A B C \n\n "); fail_if (!rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("enum A B C"); type2 = rec_type_new ("enum B C A"); fail_if (rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("enum A B C"); type2 = rec_type_new ("enum B C A D"); fail_if (rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("field"); type2 = rec_type_new ("field"); fail_if (!rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); type1 = rec_type_new ("email"); type2 = rec_type_new ("email"); fail_if (!rec_type_equal_p (type1, type2)); rec_type_destroy (type1); rec_type_destroy (type2); } END_TEST /* * Test case creation function */ TCase * test_rec_type_equal_p (void) { TCase *tc = tcase_create ("rec_type_equal_p"); tcase_add_test (tc, rec_type_equal_p_nominal); return tc; } /* End of rec-type-equal-p.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type/rec-type-new.c��������������������������������������������������������0000644�0000000�0000000�00000007611�14226563465�016045� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-type-new.c * Date: Fri Oct 29 16:16:05 2010 * * GNU recutils - rec_type_new unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> #include <rec.h> /*- * Test: rec_type_new_nominal * Unit: rec_type_new * Description: * + Create types from correct type descriptions. */ START_TEST(rec_type_new_nominal) { rec_type_t type; type = rec_type_new ("int"); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("int \n\n "); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("bool"); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("range 10"); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("range 1 10"); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("real"); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("size 10"); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("line"); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("regexp /[abc][abc][abc]/"); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("regexp |/jo/jo|"); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("date"); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("enum A B C"); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("field"); fail_if (type == NULL); rec_type_destroy (type); type = rec_type_new ("email"); fail_if (type == NULL); rec_type_destroy (type); } END_TEST /*- * Test: rec_type_new_invalid * Unit: rec_type_new * Description: * + Try to create types from invalid type descriptions. */ START_TEST(rec_type_new_invalid) { rec_type_t type; type = rec_type_new (""); fail_if (type != NULL); type = rec_type_new (" "); fail_if (type != NULL); type = rec_type_new ("int additionalstuff"); fail_if (type != NULL); type = rec_type_new ("invalidkeyword"); fail_if (type != NULL); type = rec_type_new ("range"); fail_if (type != NULL); type = rec_type_new ("range a"); fail_if (type != NULL); type = rec_type_new ("range a b"); fail_if (type != NULL); type = rec_type_new ("range a 1"); fail_if (type != NULL); type = rec_type_new ("range 1 a"); fail_if (type != NULL); type = rec_type_new ("size"); fail_if (type != NULL); type = rec_type_new ("size xxx"); fail_if (type != NULL); type = rec_type_new ("size 10 extra"); fail_if (type != NULL); type = rec_type_new ("regexp"); fail_if (type != NULL); type = rec_type_new ("regexp foo"); fail_if (type != NULL); type = rec_type_new ("regexp /abc/ extra"); fail_if (type != NULL); type = rec_type_new ("enum"); fail_if (type != NULL); type = rec_type_new ("enum "); fail_if (type != NULL); type = rec_type_new ("enum # ! '"); fail_if (type != NULL); } END_TEST /* * Test case creation function */ TCase * test_rec_type_new (void) { TCase *tc = tcase_create ("rec_type_new"); tcase_add_test (tc, rec_type_new_nominal); tcase_add_test (tc, rec_type_new_invalid); return tc; } /* End of rec-type-new.c */ �����������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type/rec-type-set-name.c���������������������������������������������������0000644�0000000�0000000�00000003136�14226563465�016763� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-type-set-name.c * Date: Thu Jul 14 21:47:51 2011 * * GNU recutils - rec_type_set_name unit tests * */ /* Copyright (C) 2011-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_type_set_name_nominal * Unit: rec_type_name * Description: * + Set the name of a type. * + The call shall not crash. * + The returned type must match. */ START_TEST(rec_type_set_name_nominal) { rec_type_t type; type = rec_type_new ("int"); fail_if (type == NULL); rec_type_set_name (type, "foo_t"); fail_if (strcmp ("foo_t", rec_type_name (type)) != 0); rec_type_destroy (type); } END_TEST /* * Test case creation function. */ TCase * test_rec_type_set_name (void) { TCase *tc = tcase_create ("rec_type_set_name"); tcase_add_test (tc, rec_type_set_name_nominal); return tc; } /* End of rec-type-set-name.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type/rec-type-check.c������������������������������������������������������0000644�0000000�0000000�00000020625�14226563465�016331� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-type-check.c * Date: Fri Oct 29 18:50:01 2010 * * GNU recutils - rec_type_check unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_type_check_int * Unit: rec_type_check * Description: * + Check strings of type int. */ START_TEST(rec_type_check_int) { rec_type_t type; char *err_str; type = rec_type_new ("int"); fail_if (type == NULL); /* Positive tests. */ fail_if (!rec_type_check (type, "10", NULL)); fail_if (!rec_type_check (type, "01", NULL)); fail_if (!rec_type_check (type, "-10", NULL)); fail_if (!rec_type_check (type, " 10 \n\t ", NULL)); /* Negative tests. */ fail_if (rec_type_check (type, "abc", NULL)); fail_if (rec_type_check (type, "a10", NULL)); fail_if (rec_type_check (type, "10a", &err_str)); fail_if (err_str == NULL); free (err_str); rec_type_destroy (type); } END_TEST /*- * Test: rec_type_check_bool * Unit: rec_type_check * Description: * + Check strings of type bool. */ START_TEST(rec_type_check_bool) { rec_type_t type; type = rec_type_new ("bool"); fail_if (type == NULL); /* Positive tests. */ fail_if (!rec_type_check (type, "true", NULL)); fail_if (!rec_type_check (type, "false", NULL)); fail_if (!rec_type_check (type, "1", NULL)); fail_if (!rec_type_check (type, "0", NULL)); fail_if (!rec_type_check (type, "yes", NULL)); fail_if (!rec_type_check (type, "no", NULL)); fail_if (!rec_type_check (type, " yes \n\t ", NULL)); rec_type_destroy (type); } END_TEST /*- * Test: rec_type_check_range * Unit: rec_type_check * Description: * + Check strings of type range. */ START_TEST(rec_type_check_range) { rec_type_t type; type = rec_type_new ("range -10 10"); fail_if (type == NULL); /* Positive tests. */ fail_if (!rec_type_check (type, "-10", NULL)); fail_if (!rec_type_check (type, "10", NULL)); fail_if (!rec_type_check (type, "010", NULL)); fail_if (!rec_type_check (type, "5", NULL)); fail_if (!rec_type_check (type, " 5 \n\t ", NULL)); /* Negative tests. */ fail_if (rec_type_check (type, "-100", NULL)); fail_if (rec_type_check (type, "100", NULL)); fail_if (rec_type_check (type, "-11", NULL)); fail_if (rec_type_check (type, "11", NULL)); fail_if (rec_type_check (type, "abc", NULL)); rec_type_destroy (type); } END_TEST /*- * Test: rec_type_check_real * Unit: rec_type_check * Description: * + Check strings of type real. */ START_TEST(rec_type_check_real) { rec_type_t type; type = rec_type_new ("real"); /* Positive tests. */ fail_if (!rec_type_check (type, "3", NULL)); fail_if (!rec_type_check (type, "-3", NULL)); fail_if (!rec_type_check (type, "03", NULL)); fail_if (!rec_type_check (type, "3.14", NULL)); fail_if (!rec_type_check (type, "-3.14", NULL)); fail_if (!rec_type_check (type, ".10", NULL)); fail_if (!rec_type_check (type, "-.10", NULL)); fail_if (!rec_type_check (type, " 3.14 \n\t ", NULL)); /* Negative tests. */ fail_if (rec_type_check (type, "abc", NULL)); fail_if (rec_type_check (type, "3.14a", NULL)); rec_type_destroy (type); } END_TEST /*- * Test: rec_type_check_size * Unit: rec_type_check * Description: * + Check strings of type size. */ START_TEST(rec_type_check_size) { rec_type_t type; type = rec_type_new ("size 5"); fail_if (type == NULL); /* Positive tests. */ fail_if (!rec_type_check (type, "", NULL)); fail_if (!rec_type_check (type, "abcde", NULL)); fail_if (!rec_type_check (type, "ab", NULL)); /* Negative tests. */ fail_if (rec_type_check (type, " abcde ", NULL)); fail_if (rec_type_check (type, "abcdef", NULL)); rec_type_destroy (type); } END_TEST /*- * Test: rec_type_check_line * Unit: rec_type_check * Description: * + Check strings of type line. */ START_TEST(rec_type_check_line) { rec_type_t type; type = rec_type_new ("line"); fail_if (type == NULL); /* Positive tests. */ fail_if (!rec_type_check (type, "", NULL)); fail_if (!rec_type_check (type, "A line.", NULL)); /* Negative tests. */ fail_if (rec_type_check (type, "\n", NULL)); fail_if (rec_type_check (type, "several\nlines\n", NULL)); rec_type_destroy (type); } END_TEST /*- * Test: rec_type_check_regexp * Unit: rec_type_check * Description: * + Check strings of type regexp. */ START_TEST(rec_type_check_regexp) { rec_type_t type; type = rec_type_new ("regexp /[abc][abc][abc]$/"); fail_if (type == NULL); /* Positive tests. */ fail_if (!rec_type_check (type, "abc", NULL)); /* Negative tests. */ fail_if (rec_type_check (type, "", NULL)); fail_if (rec_type_check (type, "abcx", NULL)); fail_if (rec_type_check (type, "abc ", NULL)); rec_type_destroy (type); } END_TEST /*- * Test: rec_type_check_date * Unit: rec_type_check * Description: * + Check strings of type date. */ START_TEST(rec_type_check_date) { rec_type_t type; type = rec_type_new ("date"); fail_if (type == NULL); /* Positive tests. */ fail_if (!rec_type_check (type, "13 August 1980", NULL)); /* Negative tests. */ fail_if (rec_type_check (type, "", NULL)); fail_if (rec_type_check (type, "1000 November -10", NULL)); rec_type_destroy (type); } END_TEST /*- * Test: rec_type_check_enum * Unit: rec_type_check * Description: * + Check strings of type enum. */ START_TEST(rec_type_check_enum) { rec_type_t type; type = rec_type_new ("enum A B C"); fail_if (type == NULL); /* Positive tests. */ fail_if (!rec_type_check (type, "A", NULL)); fail_if (!rec_type_check (type, "B", NULL)); fail_if (!rec_type_check (type, "C", NULL)); fail_if (!rec_type_check (type, " B \n\t ", NULL)); /* Negative tests. */ fail_if (rec_type_check (type, "A B", NULL)); fail_if (rec_type_check (type, "XXX", NULL)); fail_if (rec_type_check (type, "", NULL)); fail_if (rec_type_check (type, " ", NULL)); rec_type_destroy (type); } END_TEST /*- * Test: rec_type_check_field * Unit: rec_type_check * Description: * + Check strings of type field. */ START_TEST(rec_type_check_field) { rec_type_t type; type = rec_type_new ("field"); fail_if (type == NULL); /* Positive tests. */ fail_if (!rec_type_check (type, "a", NULL)); fail_if (!rec_type_check (type, " ac \n\t ", NULL)); /* Negative tests. */ fail_if (rec_type_check (type, "", NULL)); fail_if (rec_type_check (type, " ", NULL)); fail_if (rec_type_check (type, "a:", NULL)); fail_if (rec_type_check (type, "a:b:", NULL)); fail_if (rec_type_check (type, "a%:b:", NULL)); rec_type_destroy (type); } END_TEST /*- * Test: rec_type_check_email * Unit: rec_type_check * Description: * + Check strings of type email. */ START_TEST(rec_type_check_email) { rec_type_t type; type = rec_type_new ("email"); fail_if (type == NULL); /* Positive tests. */ fail_if (!rec_type_check (type, "jemarch@gnu.org", NULL)); fail_if (!rec_type_check (type, " jemarch@gnu.org \n\t ", NULL)); /* Negative tests. */ fail_if (rec_type_check (type, "", NULL)); fail_if (rec_type_check (type, "invalid@@email.com", NULL)); rec_type_destroy (type); } END_TEST /* * Test case creation function. */ TCase * test_rec_type_check (void) { TCase *tc = tcase_create ("rec_type_check"); tcase_add_test (tc, rec_type_check_int); tcase_add_test (tc, rec_type_check_bool); tcase_add_test (tc, rec_type_check_range); tcase_add_test (tc, rec_type_check_real); tcase_add_test (tc, rec_type_check_size); tcase_add_test (tc, rec_type_check_line); tcase_add_test (tc, rec_type_check_regexp); tcase_add_test (tc, rec_type_check_date); tcase_add_test (tc, rec_type_check_enum); tcase_add_test (tc, rec_type_check_field); tcase_add_test (tc, rec_type_check_email); return tc; } /* End of rec-type-check.c */ �����������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type/rec-type-kind.c�������������������������������������������������������0000644�0000000�0000000�00000005440�14226563465�016177� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-type-kind.c * Date: Fri Oct 29 18:08:46 2010 * * GNU recutils - rec_type_kind unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> #include <rec.h> /*- * Test: rec_type_kind_nominal * Unit: rec_type_kind * Description: * + Get the kind of types. */ START_TEST(rec_type_kind_nominal) { rec_type_t type; type = rec_type_new ("int"); fail_if (type == NULL); fail_if (rec_type_kind (type) != REC_TYPE_INT); rec_type_destroy (type); type = rec_type_new ("bool"); fail_if (type == NULL); fail_if (rec_type_kind (type) != REC_TYPE_BOOL); rec_type_destroy (type); type = rec_type_new ("range 1 10"); fail_if (type == NULL); fail_if (rec_type_kind (type) != REC_TYPE_RANGE); rec_type_destroy (type); type = rec_type_new ("real"); fail_if (type == NULL); fail_if (rec_type_kind (type) != REC_TYPE_REAL); rec_type_destroy (type); type = rec_type_new ("size 10"); fail_if (type == NULL); fail_if (rec_type_kind (type) != REC_TYPE_SIZE); rec_type_destroy (type); type = rec_type_new ("line"); fail_if (type == NULL); fail_if (rec_type_kind (type) != REC_TYPE_LINE); rec_type_destroy (type); type = rec_type_new ("regexp /[abc]/"); fail_if (type == NULL); fail_if (rec_type_kind (type) != REC_TYPE_REGEXP); rec_type_destroy (type); type = rec_type_new ("date"); fail_if (type == NULL); fail_if (rec_type_kind (type) != REC_TYPE_DATE); rec_type_destroy (type); type = rec_type_new ("enum A B C"); fail_if (type == NULL); fail_if (rec_type_kind (type) != REC_TYPE_ENUM); rec_type_destroy (type); type = rec_type_new ("field"); fail_if (type == NULL); fail_if (rec_type_kind (type) != REC_TYPE_FIELD); rec_type_destroy (type); type = rec_type_new ("email"); fail_if (type == NULL); fail_if (rec_type_kind (type) != REC_TYPE_EMAIL); rec_type_destroy (type); } END_TEST /* * Test case creation function */ TCase * test_rec_type_kind (void) { TCase *tc = tcase_create ("rec_type_kind"); tcase_add_test (tc, rec_type_kind_nominal); return tc; } /* End of rec-type-kind.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type/rec-type-kind-str.c���������������������������������������������������0000644�0000000�0000000�00000005776�14226563465�017021� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-type-kind-str.c * Date: Fri Oct 29 18:17:18 2010 * * GNU recutils - rec_type_kind_str unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_type_kind_str_nominal * Unit: rec_type_kind_str * Description: * + Get the string representation of all * + the supported types and check they are * + ok. */ START_TEST(rec_type_kind_str_nominal) { rec_type_t type; type = rec_type_new ("int"); fail_if (type == NULL); fail_if (strcmp (rec_type_kind_str (type), "int") != 0); rec_type_destroy (type); type = rec_type_new ("bool"); fail_if (type == NULL); fail_if (strcmp (rec_type_kind_str (type), "bool") != 0); rec_type_destroy (type); type = rec_type_new ("range 1 10"); fail_if (type == NULL); fail_if (strcmp (rec_type_kind_str (type), "range") != 0); rec_type_destroy (type); type = rec_type_new ("real"); fail_if (type == NULL); fail_if (strcmp (rec_type_kind_str (type), "real") != 0); rec_type_destroy (type); type = rec_type_new ("size 10"); fail_if (type == NULL); fail_if (strcmp (rec_type_kind_str (type), "size") != 0); rec_type_destroy (type); type = rec_type_new ("line"); fail_if (type == NULL); fail_if (strcmp (rec_type_kind_str (type), "line") != 0); rec_type_destroy (type); type = rec_type_new ("regexp /[abc]/"); fail_if (type == NULL); fail_if (strcmp (rec_type_kind_str (type), "regexp") != 0); rec_type_destroy (type); type = rec_type_new ("date"); fail_if (type == NULL); fail_if (strcmp (rec_type_kind_str (type), "date") != 0); rec_type_destroy (type); type = rec_type_new ("enum A B C"); fail_if (type == NULL); fail_if (strcmp (rec_type_kind_str (type), "enum") != 0); rec_type_destroy (type); type = rec_type_new ("email"); fail_if (type == NULL); fail_if (strcmp (rec_type_kind_str (type), "email") != 0); rec_type_destroy (type); type = rec_type_new ("field"); fail_if (type == NULL); fail_if (strcmp (rec_type_kind_str (type), "field") != 0); rec_type_destroy (type); } END_TEST /* * Test case creation function */ TCase * test_rec_type_kind_str (void) { TCase *tc = tcase_create ("rec_type_kind_str"); tcase_add_test (tc, rec_type_kind_str_nominal); return tc; } /* End of rec-type-kind-str.c */ ��recutils-1.9/torture/rec-type/rec-type-descr-p.c����������������������������������������������������0000644�0000000�0000000�00000005416�14226563465�016612� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-type-descr-p.c * Date: Fri Oct 29 17:15:50 2010 * * GNU recutils - rec_type_descr_p unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> #include <rec.h> /*- * Test: rec_type_descr_p_nominal * Unit: rec_type_descr_p * Description: * + Check valid type descriptions. */ START_TEST(rec_type_descr_p_nominal) { fail_if (!rec_type_descr_p ("int")); fail_if (!rec_type_descr_p ("int \n\n ")); fail_if (!rec_type_descr_p ("bool")); fail_if (!rec_type_descr_p ("range 10")); fail_if (!rec_type_descr_p ("range 1 10")); fail_if (!rec_type_descr_p ("real")); fail_if (!rec_type_descr_p ("size 10")); fail_if (!rec_type_descr_p ("line")); fail_if (!rec_type_descr_p ("regexp /[abc][abc][abc]/")); fail_if (!rec_type_descr_p ("regexp |/jo/jo|")); fail_if (!rec_type_descr_p ("date")); fail_if (!rec_type_descr_p ("enum A B C")); fail_if (!rec_type_descr_p ("field")); fail_if (!rec_type_descr_p ("email")); } END_TEST /*- * Test: rec_type_descr_p_invalid * Unit: rec_type_descr_p * Description: * + Check for invalid type descriptions. */ START_TEST(rec_type_descr_p_invalid) { fail_if (rec_type_descr_p ("")); fail_if (rec_type_descr_p (" ")); fail_if (rec_type_descr_p ("int additionalstuff")); fail_if (rec_type_descr_p ("invalidkeyword")); fail_if (rec_type_descr_p ("range a b")); fail_if (rec_type_descr_p ("range a 1")); fail_if (rec_type_descr_p ("range 1 a")); fail_if (rec_type_descr_p ("size")); fail_if (rec_type_descr_p ("size xxx")); fail_if (rec_type_descr_p ("size 10 extra")); fail_if (rec_type_descr_p ("regexp")); fail_if (rec_type_descr_p ("regexp foo")); fail_if (rec_type_descr_p ("regexp /abc/ extra")); fail_if (rec_type_descr_p ("enum")); fail_if (rec_type_descr_p ("enum # ! '")); } END_TEST /* * Test case creation function */ TCase * test_rec_type_descr_p (void) { TCase *tc = tcase_create ("rec_type_descr_p"); tcase_add_test (tc, rec_type_descr_p_nominal); tcase_add_test (tc, rec_type_descr_p_invalid); return tc; } /* End of rec-type-descr-p.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type/rec-type-destroy.c����������������������������������������������������0000644�0000000�0000000�00000002611�14226563465�016740� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-type-destroy.c * Date: Fri Oct 29 16:57:32 2010 * * GNU recutils - rec_type_destroy unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> #include <rec.h> /*- * Test: rec_type_destroy_nominal * Unit: rec_type_destroy * Description: * + Destroy a type. */ START_TEST(rec_type_destroy_nominal) { rec_type_t type; type = rec_type_new ("int"); fail_if (type == NULL); rec_type_destroy (type); } END_TEST /* * Test case creation function */ TCase * test_rec_type_destroy (void) { TCase *tc = tcase_create ("rec_type_destroy"); tcase_add_test (tc, rec_type_destroy_nominal); return tc; } /* End of rec-type-destroy.c */ �����������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type/rec-type-name.c�������������������������������������������������������0000644�0000000�0000000�00000003701�14226563465�016170� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-type-name.c * Date: Thu Jul 14 21:36:05 2011 * * GNU recutils - rec_type_name unit tests * */ /* Copyright (C) 2011-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_type_name_anonymous * Unit: rec_type_name * Description: * + Get the name of an anonymous type. * + The returned value shall be NULL. */ START_TEST(rec_type_name_anonymous) { rec_type_t type; type = rec_type_new ("int"); fail_if (type == NULL); fail_if (rec_type_name (type) != NULL); rec_type_destroy (type); } END_TEST /*- * Test: rec_type_name_nominal * Unit: rec_type_name * Description: * + Get the name of a type. * + The returned name shall be correct. */ START_TEST(rec_type_name_nominal) { rec_type_t type; type = rec_type_new ("range 0 120"); fail_if (type == NULL); rec_type_set_name (type, "age_t"); fail_if (strcmp ("age_t", rec_type_name (type)) != 0); rec_type_destroy (type); } END_TEST /* * Test case creation function. */ TCase * test_rec_type_name (void) { TCase *tc = tcase_create ("rec_type_name"); tcase_add_test (tc, rec_type_name_anonymous); tcase_add_test (tc, rec_type_name_nominal); return tc; } /* End of rec-type-name.c */ ���������������������������������������������������������������recutils-1.9/torture/rec-record/��������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�013733� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-record/tsuite-rec-record.c�������������������������������������������������0000644�0000000�0000000�00000003007�14226563465�017356� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: tsuite-rec-record.c * Date: Thu Mar 5 23:56:38 2009 * * GNU recutils - rec_record test suite * */ /* Copyright (C) 2009-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> /* extern TCase *test_rec_record_new (void); extern TCase *test_rec_record_size (void); extern TCase *test_rec_record_field_p (void); extern TCase *test_rec_record_insert_field (void); extern TCase *test_rec_record_remove_field (void); */ Suite * tsuite_rec_record () { Suite *s; s = suite_create ("rec-record"); /* suite_add_tcase (s, test_rec_record_new ()); suite_add_tcase (s, test_rec_record_size ()); suite_add_tcase (s, test_rec_record_field_p ()); suite_add_tcase (s, test_rec_record_insert_field ()); suite_add_tcase (s, test_rec_record_remove_field ()); */ return s; } /* End of tsuite-rec-record.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type-reg/������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�014211� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type-reg/rec-type-reg-new.c������������������������������������������������0000644�0000000�0000000�00000002703�14226563465�017370� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- Time-stamp: "2022-04-16 17:34:59 jemarch" * * File: rec-type-reg-new.c * Date: Fri Oct 29 21:01:56 2010 * * GNU recutils - rec_type_reg_new unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> #include <rec.h> /*- * Test: rec_type_reg_new_nominal * Unit: rec_type_reg_new * Description: * + Creation of a type registry. */ START_TEST(rec_type_reg_new_nominal) { rec_type_reg_t reg; reg = rec_type_reg_new (); fail_if (reg == NULL); rec_type_reg_destroy (reg); } END_TEST /* * Test case creation function */ TCase * test_rec_type_reg_new (void) { TCase *tc = tcase_create ("rec_type_reg_new"); tcase_add_test (tc, rec_type_reg_new_nominal); return tc; } /* End of rec-type-reg-new.c */ �������������������������������������������������������������recutils-1.9/torture/rec-type-reg/rec-type-reg-get.c������������������������������������������������0000644�0000000�0000000�00000004261�14226563465�017357� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-type-reg-get.c * Date: Fri Oct 29 21:30:27 2010 * * GNU recutils - rec_type_reg_get unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> #include <rec.h> /*- * Test: rec_type_reg_get_nominal * Unit: rec_type_reg_get * Description: * + Insert a type in a type registry and get it. * + The call shall success. */ START_TEST(rec_type_reg_get_nominal) { rec_type_t type; rec_type_t type2; rec_type_reg_t reg; reg = rec_type_reg_new (); fail_if (reg == NULL); /* Register a type. */ type = rec_type_new ("int"); rec_type_set_name (type, "foo"); fail_if (type == NULL); rec_type_reg_add (reg, type); /* Get the type and compare. */ type2 = rec_type_reg_get (reg, "foo"); fail_if (type2 == NULL); fail_if (type2 != type); rec_type_reg_destroy (reg); } END_TEST /*- * Test: rec_type_reg_get_nonexisting * Unit: rec_type_reg_get * Description: * + Try to get a nonexisting named type * + from a type registry. */ START_TEST(rec_type_reg_get_nonexisting) { rec_type_reg_t reg; reg = rec_type_reg_new (); fail_if (reg == NULL); fail_if (rec_type_reg_get (reg, "foo") != NULL); rec_type_reg_destroy (reg); } END_TEST /* * Test case creation function */ TCase * test_rec_type_reg_get (void) { TCase *tc = tcase_create ("rec_type_reg_get"); tcase_add_test (tc, rec_type_reg_get_nominal); tcase_add_test (tc, rec_type_reg_get_nonexisting); return tc; } /* End of rec-type-reg-get.c */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type-reg/tsuite-rec-type-reg.c���������������������������������������������0000644�0000000�0000000�00000002541�14226563465�020114� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- Time-stamp: "2022-04-16 17:35:10 jemarch" * * File: tsuite-rec-type-reg.c * Date: Fri Oct 29 20:58:54 2010 * * GNU recutils - rec_type_reg test suite * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> extern TCase *test_rec_type_reg_new (void); extern TCase *test_rec_type_reg_destroy (void); extern TCase *test_rec_type_reg_get (void); Suite * tsuite_rec_type_reg () { Suite *s; s = suite_create ("rec-type-reg"); suite_add_tcase (s, test_rec_type_reg_new ()); suite_add_tcase (s, test_rec_type_reg_destroy ()); suite_add_tcase (s, test_rec_type_reg_get ()); return s; } /* End of tsuite-rec-type-reg.c */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-type-reg/rec-type-reg-destroy.c��������������������������������������������0000644�0000000�0000000�00000002671�14226563465�020274� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-type-reg-destroy.c * Date: Fri Oct 29 21:09:51 2010 * * GNU recutils - rec_type_reg_destroy unit tests * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> #include <rec.h> /*- * Test: rec_type_reg_destroy_nominal * Unit: rec_type_reg_destroy * Description: * + Destroy a type registry. */ START_TEST(rec_type_reg_destroy_nominal) { rec_type_reg_t reg; reg = rec_type_reg_new (); fail_if (reg == NULL); rec_type_reg_destroy (reg); } END_TEST /* * Test case creation function */ TCase * test_rec_type_reg_destroy (void) { TCase *tc = tcase_create ("rec_type_reg_destroy"); tcase_add_test (tc, rec_type_reg_destroy_nominal); return tc; } /* End of rec-type_reg_destroy.c */ �����������������������������������������������������������������������recutils-1.9/torture/rec-writer/��������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�013771� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-writer/rec-write-record.c��������������������������������������������������0000644�0000000�0000000�00000016623�14226563465�017241� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-write-record.c * Date: Sun Nov 14 13:27:25 2010 * * GNU recutils - rec_write_record unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_write_record_nominal * Unit: rec_write_record * Description: * + Write records. */ START_TEST(rec_write_record_nominal) { rec_writer_t writer; rec_record_t record; rec_field_t field; rec_comment_t comment; char *str; size_t str_size; record = rec_record_new (); fail_if (record == NULL); field = rec_field_new ("foo1", "value1"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); comment = rec_comment_new ("comment"); fail_if (comment == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_COMMENT, (void *) comment, MSET_ANY) == NULL); field = rec_field_new ("foo2", "value2"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_NORMAL); fail_if (!rec_write_record (writer, record)); rec_record_destroy (record); rec_writer_destroy (writer); fail_if (strcmp (str, "foo1: value1\n#comment\nfoo2: value2") != 0); free (str); } END_TEST /*- * Test: rec_write_record_skip_comments * Unit: rec_write_record * Description: * + Write records. */ START_TEST(rec_write_record_skip_comments) { rec_writer_t writer; rec_record_t record; rec_field_t field; rec_comment_t comment, comment2; char *str; size_t str_size; record = rec_record_new (); fail_if (record == NULL); field = rec_field_new ("foo1", "value1"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); comment = rec_comment_new ("comment"); fail_if (comment == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_COMMENT, (void *) comment, MSET_ANY) == NULL); field = rec_field_new ("foo2", "value2"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); comment2 = rec_comment_new ("comment2"); fail_if (comment2 == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_COMMENT, (void *) comment2, MSET_ANY) == NULL); writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_NORMAL); rec_writer_set_skip_comments (writer, true); fail_if (!rec_write_record (writer, record)); rec_record_destroy (record); rec_writer_destroy (writer); fail_if (strcmp (str, "foo1: value1\nfoo2: value2") != 0); free (str); } END_TEST /*- * Test: rec_write_record_sexp * Unit: rec_write_record * Description: * + Write records in sexps. */ START_TEST(rec_write_record_sexp) { rec_writer_t writer; rec_record_t record; rec_field_t field; rec_comment_t comment; char *str; size_t str_size; record = rec_record_new (); fail_if (record == NULL); field = rec_field_new ("foo1", "value1"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); comment = rec_comment_new ("comment"); fail_if (comment == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_COMMENT, (void *) comment, MSET_ANY) == NULL); field = rec_field_new ("foo2", "value2"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_SEXP); fail_if (!rec_write_record (writer, record)); rec_record_destroy (record); rec_writer_destroy (writer); fail_if (strcmp (str, "(record (\n(field \"foo1\" \"value1\")\n(comment \"comment\")\n(field \"foo2\" \"value2\")))") != 0); free (str); } END_TEST /*- * Test: rec_write_record_values * Unit: rec_write_record * Description: * + Write records using the * + REC_WRITER_VALUES mode. */ START_TEST(rec_write_record_values) { rec_writer_t writer; rec_record_t record; rec_field_t field; rec_comment_t comment; char *str; size_t str_size; record = rec_record_new (); fail_if (record == NULL); field = rec_field_new ("foo1", "value1"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); comment = rec_comment_new ("comment"); fail_if (comment == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_COMMENT, (void *) comment, MSET_ANY) == NULL); field = rec_field_new ("foo2", "value2"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_VALUES); fail_if (!rec_write_record (writer, record)); rec_record_destroy (record); rec_writer_destroy (writer); fail_if (strcmp (str, "value1\nvalue2") != 0); free (str); } END_TEST /*- * Test: rec_write_record_values_row * Unit: rec_write_record * Description: * + Write records using the * + REC_WRITER_VALUES_ROW mode. */ START_TEST(rec_write_record_values_row) { rec_writer_t writer; rec_record_t record; rec_field_t field; rec_comment_t comment; char *str; size_t str_size; record = rec_record_new (); fail_if (record == NULL); field = rec_field_new ("foo1", "value1"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); comment = rec_comment_new ("comment"); fail_if (comment == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_COMMENT, (void *) comment, MSET_ANY) == NULL); field = rec_field_new ("foo2", "value2"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset(record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_VALUES_ROW); fail_if (!rec_write_record (writer, record)); rec_record_destroy (record); rec_writer_destroy (writer); fail_if (strcmp (str, "value1 value2") != 0); free (str); } END_TEST /* * Test creation function */ TCase * test_rec_write_record (void) { TCase *tc = tcase_create ("rec_write_record"); tcase_add_test (tc, rec_write_record_nominal); tcase_add_test (tc, rec_write_record_skip_comments); tcase_add_test (tc, rec_write_record_sexp); tcase_add_test (tc, rec_write_record_values); tcase_add_test (tc, rec_write_record_values_row); return tc; } /* End of rec-write-record.c */ �������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-writer/rec-write-field-str.c�����������������������������������������������0000644�0000000�0000000�00000004132�14226563465�017644� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-write-field-str.c * Date: Mon Nov 15 14:21:12 2010 * * GNU recutils - rec_write_field_str unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_write_field_str_nominal * Unit: rec_write_field_str * Description: * + Write fields. */ START_TEST(rec_write_field_str_nominal) { rec_field_t field; char *str; field = rec_field_new ("foo", "value"); fail_if (field == NULL); str = rec_write_field_str (field, REC_WRITER_NORMAL); fail_if (str == NULL); rec_field_destroy (field); fail_if (strcmp (str, "foo: value") != 0); free (str); } END_TEST /*- * Test: rec_write_field_str_sexp * Unit: rec_write_field_str * Description: * + Write fields. */ START_TEST(rec_write_field_str_sexp) { rec_field_t field; char *str; field = rec_field_new ("foo", "value"); fail_if (field == NULL); str = rec_write_field_str (field, REC_WRITER_SEXP); fail_if (str == NULL); rec_field_destroy (field); fail_if (strcmp (str, "(field \"foo\" \"value\")") != 0); free (str); } END_TEST /* * Test creation function */ TCase * test_rec_write_field_str (void) { TCase *tc = tcase_create ("rec_write_field_str"); tcase_add_test (tc, rec_write_field_str_nominal); tcase_add_test (tc, rec_write_field_str_sexp); return tc; } /* End of rec-write-field-str.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-writer/rec-write-comment-str.c���������������������������������������������0000644�0000000�0000000�00000004731�14226563465�020230� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-write-comment-str.c * Date: Mon Nov 15 14:43:35 2010 * * GNU recutils - rec_write_comment_str unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_write_comment_str_nominal * Unit: rec_write_comment_str * Description: * + Write comments. */ START_TEST(rec_write_comment_str_nominal) { rec_comment_t comment; char *str; comment = rec_comment_new ("foo bar"); str = rec_write_comment_str (comment, REC_WRITER_NORMAL); rec_comment_destroy (comment); fail_if (strcmp (str, "#foo bar") != 0); free (str); comment = rec_comment_new (""); str = rec_write_comment_str (comment, REC_WRITER_NORMAL); fail_if (str == NULL); rec_comment_destroy (comment); fail_if (strcmp (str, "#") != 0); free (str); } END_TEST /*- * Test: rec_write_comment_str_sexp * Unit: rec_write_comment_str * Description: * + Write comments. */ START_TEST(rec_write_comment_str_sexp) { rec_comment_t comment; char *str; comment = rec_comment_new ("foo bar"); str = rec_write_comment_str (comment, REC_WRITER_SEXP); fail_if (str == NULL); rec_comment_destroy (comment); fail_if (strcmp (str, "(comment \"foo bar\")") != 0); free (str); comment = rec_comment_new (""); str = rec_write_comment_str (comment, REC_WRITER_SEXP); fail_if (str == NULL); rec_comment_destroy (comment); fail_if (strcmp (str, "(comment \"\")") != 0); free (str); } END_TEST /* * Test creation function */ TCase * test_rec_write_comment_str (void) { TCase *tc = tcase_create ("rec_write_comment_str"); tcase_add_test (tc, rec_write_comment_str_nominal); tcase_add_test (tc, rec_write_comment_str_sexp); return tc; } /* End of rec-write-comment-str.c */ ���������������������������������������recutils-1.9/torture/rec-writer/rec-write-field-name-str.c������������������������������������������0000644�0000000�0000000�00000003717�14226563465�020572� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-write-field-name-str.c * Date: Mon Nov 15 14:14:56 2010 * * GNU recutils - rec_write_field_name_str unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_write_field_name_str_nominal * Unit: rec_write_field_name_str * Description: * + Write field names. */ START_TEST(rec_write_field_name_str_nominal) { char *fname; char *str; fname = "foo"; str = rec_write_field_name_str (fname, REC_WRITER_NORMAL); fail_if (str == NULL); fail_if (strcmp (str, "foo:") != 0); free (str); } END_TEST /*- * Test: rec_write_field_name_str_sexp * Unit: rec_write_field_name_str * Description: * + Write field names. */ START_TEST(rec_write_field_name_str_sexp) { char *fname; char *str; fname = "foo"; str = rec_write_field_name_str (fname, REC_WRITER_SEXP); fail_if (strcmp (str, "\"foo\"") != 0); free (str); } END_TEST /* * Test creation function */ TCase * test_rec_write_field_name_str (void) { TCase *tc = tcase_create ("rec_write_field_name_str"); tcase_add_test (tc, rec_write_field_name_str_nominal); tcase_add_test (tc, rec_write_field_name_str_sexp); return tc; } /* End of rec-write-field-name-str.c */ �������������������������������������������������recutils-1.9/torture/rec-writer/rec-write-field-name.c����������������������������������������������0000644�0000000�0000000�00000004334�14226563465�017760� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-write-field-name.c * Date: Sun Nov 14 11:32:17 2010 * * GNU recutils - rec_write_field_name unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_write_field_name_nominal * Unit: rec_write_field_name * Description: * + Write field names. */ START_TEST(rec_write_field_name_nominal) { rec_writer_t writer; char *fname; char *str; size_t str_size; fname = "foo"; writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_NORMAL); fail_if (!rec_write_field_name (writer, fname)); rec_writer_destroy (writer); fail_if (strcmp (str, "foo:") != 0); free (str); } END_TEST /*- * Test: rec_write_field_name_sexp * Unit: rec_write_field_name * Description: * + Write field names. */ START_TEST(rec_write_field_name_sexp) { rec_writer_t writer; char *fname; char *str; size_t str_size; fname = "foo"; writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_SEXP); fail_if (!rec_write_field_name (writer, fname)); rec_writer_destroy (writer); fail_if (strcmp (str, "\"foo\"") != 0); free (str); } END_TEST /* * Test creation function */ TCase * test_rec_write_field_name (void) { TCase *tc = tcase_create ("rec_write_field_name"); tcase_add_test (tc, rec_write_field_name_nominal); tcase_add_test (tc, rec_write_field_name_sexp); return tc; } /* End of rec-write-field-name.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-writer/rec-write-db.c������������������������������������������������������0000644�0000000�0000000�00000005622�14226563465�016345� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-write-db.c * Date: Mon Nov 15 14:06:38 2010 * * GNU recutils - rec_write_db unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_write_db_nominal * Unit: rec_write_db * Description: * + Write a database. */ START_TEST(rec_write_db_nominal) { rec_writer_t writer; rec_db_t db; rec_rset_t rset; rec_record_t record; rec_field_t field; char *str; size_t str_size; db = rec_db_new (); fail_if (db == NULL); rset = rec_rset_new (); fail_if (rset == NULL); record = rec_record_new (); fail_if (record == NULL); field = rec_field_new ("foo1", "value1"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); field = rec_field_new ("foo2", "value2"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); fail_if (rec_mset_append (rec_rset_mset (rset), MSET_RECORD, (void *) record, MSET_ANY) == NULL); record = rec_record_new (); fail_if (record == NULL); field = rec_field_new ("bar1", "value1"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); field = rec_field_new ("bar2", "value2"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); fail_if (rec_mset_append (rec_rset_mset (rset), MSET_RECORD, (void *) record, MSET_ANY) == NULL); rec_db_insert_rset (db, rset, rec_db_size (db)); writer = rec_writer_new_str (&str, &str_size); fail_if (!rec_write_db (writer, db)); rec_db_destroy (db); rec_writer_destroy (writer); fail_if (strcmp (str, "foo1: value1\nfoo2: value2\n\nbar1: value1\nbar2: value2\n") != 0); free (str); } END_TEST /* * Test creation function */ TCase * test_rec_write_db (void) { TCase *tc = tcase_create ("rec_write_db"); tcase_add_test (tc, rec_write_db_nominal); return tc; } /* End of rec-write-db.c */ ��������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-writer/tsuite-rec-writer.c�������������������������������������������������0000644�0000000�0000000�00000004051�14226563465�017452� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: tsuite-rec-writer.c * Date: Sun Nov 14 10:54:46 2010 * * GNU recutils - rec_writer test suite * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> extern TCase *test_rec_writer_new (void); extern TCase *test_rec_writer_destroy (void); extern TCase *test_rec_write_comment (void); extern TCase *test_rec_write_field_name (void); extern TCase *test_rec_write_field (void); extern TCase *test_rec_write_record (void); extern TCase *test_rec_write_rset (void); extern TCase *test_rec_write_db (void); extern TCase *test_rec_write_field_name_str (void); extern TCase *test_rec_write_field_str (void); extern TCase *test_rec_write_comment_str (void); Suite * tsuite_rec_writer () { Suite *s; s = suite_create ("rec-writer"); suite_add_tcase (s, test_rec_writer_new ()); suite_add_tcase (s, test_rec_writer_destroy ()); suite_add_tcase (s, test_rec_write_comment ()); suite_add_tcase (s, test_rec_write_field_name ()); suite_add_tcase (s, test_rec_write_field ()); suite_add_tcase (s, test_rec_write_record ()); suite_add_tcase (s, test_rec_write_rset ()); suite_add_tcase (s, test_rec_write_db ()); suite_add_tcase (s, test_rec_write_field_name_str ()); suite_add_tcase (s, test_rec_write_field_str ()); suite_add_tcase (s, test_rec_write_comment_str ()); return s; } /* End of tsuite-rec-writer.c */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-writer/rec-writer-new.c����������������������������������������������������0000644�0000000�0000000�00000002656�14226563465�016737� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-writer-new.c * Date: Sun Nov 14 10:57:39 2010 * * GNU recutils - rec_writer_new unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_writer_new_nominal * Unit: rec_writer_new * Description: * + Create a rec writer. */ START_TEST(rec_writer_new_nominal) { rec_writer_t writer; writer = rec_writer_new (stdout); fail_if (writer == NULL); rec_writer_destroy (writer); } END_TEST /* * Test creation function */ TCase * test_rec_writer_new (void) { TCase *tc = tcase_create ("rec_writer_new"); tcase_add_test (tc, rec_writer_new_nominal); return tc; } /* End of rec-writer-new.c */ ����������������������������������������������������������������������������������recutils-1.9/torture/rec-writer/rec-write-field.c���������������������������������������������������0000644�0000000�0000000�00000010556�14226563465�017045� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-write-field.c * Date: Sun Nov 14 13:11:01 2010 * * GNU recutils - rec_write_field unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <stdlib.h> #include <rec.h> /*- * Test: rec_write_field_nominal * Unit: rec_write_field * Description: * + Write fields. */ START_TEST(rec_write_field_nominal) { rec_writer_t writer; rec_field_t field; char *str; size_t str_size; field = rec_field_new ("foo", "value"); fail_if (field == NULL); writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_NORMAL); fail_if (!rec_write_field (writer, field)); rec_field_destroy (field); rec_writer_destroy (writer); fail_if (strcmp (str, "foo: value") != 0); free (str); } END_TEST /*- * Test: rec_write_field_values * Unit: rec_write_field * Description: * + Write a field using the * + REC_WRITER_VALUES writing mode. */ START_TEST(rec_write_field_values) { rec_writer_t writer; rec_field_t field; char *str; size_t str_size; field = rec_field_new ("foo", "value"); fail_if (field == NULL); writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_VALUES); fail_if (!rec_write_field (writer, field)); rec_field_destroy (field); rec_writer_destroy (writer); fail_if (strcmp (str, "value") != 0); free (str); field = rec_field_new ("name", "foo\nbar\nbaz"); fail_if (field == NULL); writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_VALUES); fail_if (!rec_write_field (writer, field)); rec_field_destroy (field); rec_writer_destroy (writer); fail_if (strcmp (str, "foo\nbar\nbaz") != 0); free (str); } END_TEST /*- * Test: rec_write_field_values_row * Unit: rec_write_field * Description: * + Write a field using the * + REC_WRITER_VALUES_ROW writing mode. */ START_TEST(rec_write_field_values_row) { rec_writer_t writer; rec_field_t field; char *str; size_t str_size; field = rec_field_new ("foo", "value"); fail_if (field == NULL); writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_VALUES_ROW); fail_if (!rec_write_field (writer, field)); rec_field_destroy (field); rec_writer_destroy (writer); fail_if (strcmp (str, "value") != 0); free (str); field = rec_field_new ("name", "foo\nbar\nbaz"); fail_if (field == NULL); writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_VALUES_ROW); fail_if (!rec_write_field (writer, field)); rec_field_destroy (field); rec_writer_destroy (writer); fail_if (strcmp (str, "foo\nbar\nbaz") != 0); free (str); } END_TEST /*- * Test: rec_write_field_sexp * Unit: rec_write_field * Description: * + Write fields. */ START_TEST(rec_write_field_sexp) { rec_writer_t writer; rec_field_t field; char *str; size_t str_size; field = rec_field_new ("foo", "value"); fail_if (field == NULL); writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_SEXP); fail_if (!rec_write_field (writer, field)); rec_field_destroy (field); rec_writer_destroy (writer); fail_if (strcmp (str, "(field \"foo\" \"value\")") != 0); free (str); } END_TEST /* * Test creation function */ TCase * test_rec_write_field (void) { TCase *tc = tcase_create ("rec_write_field"); tcase_add_test (tc, rec_write_field_nominal); tcase_add_test (tc, rec_write_field_sexp); tcase_add_test (tc, rec_write_field_values); tcase_add_test (tc, rec_write_field_values_row); return tc; } /* End of rec-write-field.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-writer/rec-writer-destroy.c������������������������������������������������0000644�0000000�0000000�00000002723�14226563465�017632� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-writer-destroy.c * Date: Sun Nov 14 10:57:39 2010 * * GNU recutils - rec_writer_destroy unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_writer_destroy_nominal * Unit: rec_writer_destroy * Description: * + Destroy a rec writer. */ START_TEST(rec_writer_destroy_nominal) { rec_writer_t writer; writer = rec_writer_new (stdout); fail_if (writer == NULL); rec_writer_destroy (writer); } END_TEST /* * Test creation function */ TCase * test_rec_writer_destroy (void) { TCase *tc = tcase_create ("rec_writer_destroy"); tcase_add_test (tc, rec_writer_destroy_nominal); return tc; } /* End of rec-writer-destroy.c */ ���������������������������������������������recutils-1.9/torture/rec-writer/rec-write-rset.c����������������������������������������������������0000644�0000000�0000000�00000005460�14226563465�016735� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-write-rset.c * Date: Mon Nov 15 13:56:25 2010 * * GNU recutils - rec_write_rset unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_write_rset_nominal * Unit: rec_write_rset * Description: * + Write record sets. */ START_TEST(rec_write_rset_nominal) { rec_writer_t writer; rec_rset_t rset; rec_record_t record; rec_field_t field; char *str; size_t str_size; rset = rec_rset_new (); fail_if (rset == NULL); record = rec_record_new (); fail_if (record == NULL); field = rec_field_new ("foo1", "value1"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); field = rec_field_new ("foo2", "value2"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); fail_if (rec_mset_append (rec_rset_mset (rset), MSET_RECORD, (void *) record, MSET_ANY) == NULL); record = rec_record_new (); fail_if (record == NULL); field = rec_field_new ("bar1", "value1"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); field = rec_field_new ("bar2", "value2"); fail_if (field == NULL); fail_if (rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY) == NULL); fail_if (rec_mset_append (rec_rset_mset (rset), MSET_RECORD, (void *) record, MSET_ANY) == NULL); writer = rec_writer_new_str (&str, &str_size); rec_writer_set_mode (writer, REC_WRITER_NORMAL); fail_if (!rec_write_rset (writer, rset)); rec_rset_destroy (rset); rec_writer_destroy (writer); fail_if (strcmp (str, "foo1: value1\nfoo2: value2\n\nbar1: value1\nbar2: value2\n") != 0); free (str); } END_TEST /* * Test creation function */ TCase * test_rec_write_rset (void) { TCase *tc = tcase_create ("rec_write_rset"); tcase_add_test (tc, rec_write_rset_nominal); return tc; } /* End of rec-write-rset.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-writer/rec-write-comment.c�������������������������������������������������0000644�0000000�0000000�00000006675�14226563465�017433� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-write-comment.c * Date: Sun Nov 14 11:11:56 2010 * * GNU recutils - rec_write_comment unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_write_comment_nominal * Unit: rec_write_comment * Description: * + Write comments. */ START_TEST(rec_write_comment_nominal) { rec_writer_t writer; rec_comment_t comment; char *str; size_t str_size; comment = rec_comment_new ("foo bar"); writer = rec_writer_new_str (&str, &str_size); fail_if (writer == NULL); rec_writer_set_mode (writer, REC_WRITER_NORMAL); fail_if (!rec_write_comment (writer, comment)); rec_comment_destroy (comment); rec_writer_destroy (writer); fail_if (strcmp (str, "#foo bar") != 0); free (str); comment = rec_comment_new ("one\ntwo\nthree"); writer = rec_writer_new_str (&str, &str_size); fail_if (writer == NULL); rec_writer_set_mode (writer, REC_WRITER_NORMAL); fail_if (!rec_write_comment (writer, comment)); rec_comment_destroy (comment); rec_writer_destroy (writer); fail_if (strcmp (str, "#one\n#two\n#three") != 0); free (str); comment = rec_comment_new (""); writer = rec_writer_new_str (&str, &str_size); fail_if (writer == NULL); rec_writer_set_mode (writer, REC_WRITER_NORMAL); fail_if (!rec_write_comment (writer, comment)); rec_comment_destroy (comment); rec_writer_destroy (writer); fail_if (strcmp (str, "#") != 0); free (str); } END_TEST /*- * Test: rec_write_comment_sexp * Unit: rec_write_comment * Description: * + Write comments. */ START_TEST(rec_write_comment_sexp) { rec_writer_t writer; rec_comment_t comment; char *str; size_t str_size; comment = rec_comment_new ("foo bar"); writer = rec_writer_new_str (&str, &str_size); fail_if (writer == NULL); rec_writer_set_mode (writer, REC_WRITER_SEXP); fail_if (!rec_write_comment (writer, comment)); rec_comment_destroy (comment); rec_writer_destroy (writer); fail_if (strcmp (str, "(comment \"foo bar\")") != 0); free (str); comment = rec_comment_new (""); writer = rec_writer_new_str (&str, &str_size); fail_if (writer == NULL); rec_writer_set_mode (writer, REC_WRITER_SEXP); fail_if (!rec_write_comment (writer, comment)); rec_comment_destroy (comment); rec_writer_destroy (writer); fail_if (strcmp (str, "(comment \"\")") != 0); free (str); } END_TEST /* * Test creation function */ TCase * test_rec_write_comment (void) { TCase *tc = tcase_create ("rec_write_comment"); tcase_add_test (tc, rec_write_comment_nominal); tcase_add_test (tc, rec_write_comment_sexp); return tc; } /* End of rec-write-comment.c */ �������������������������������������������������������������������recutils-1.9/torture/rec-fex/�����������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�013237� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-fex/rec-fex-new.c����������������������������������������������������������0000644�0000000�0000000�00000023242�14226563465�015445� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-fex-new.c * Date: Tue Nov 9 14:04:42 2010 * * GNU recutils - rec_fex_new unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_fex_new_single * Unit: rec_fex_new * Description: * + Create field expressions composed by a single * + field. It shall work for any kind of field name. */ START_TEST(rec_fex_new_single) { rec_fex_t fex; const char *fname_foo; const char *fname_foobar; const char *fname_foobarbaz; fex = rec_fex_new (NULL, REC_FEX_SIMPLE); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 0); rec_fex_destroy (fex); fname_foo = "foo"; fname_foobar = "foobar"; fname_foobarbaz = "foobarbaz"; fex = rec_fex_new ("foo", REC_FEX_SIMPLE); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 1); fail_if (!rec_field_name_equal_p (fname_foo, rec_fex_elem_field_name (rec_fex_get (fex, 0)))); fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); rec_fex_destroy (fex); fex = rec_fex_new ("foobarbaz", REC_FEX_SIMPLE); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 1); fail_if (!rec_field_name_equal_p (fname_foobarbaz, rec_fex_elem_field_name (rec_fex_get (fex, 0)))); fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); rec_fex_destroy (fex); } END_TEST /*- * Test: rec_fex_new_simple * Unit: rec_fex_new * Description: * + Create field expressions of the SIMPLE variety. */ START_TEST(rec_fex_new_simple) { rec_fex_t fex; const char *fname_foo; const char *fname_foobar; const char *fname_foobarbaz; fname_foo = "foo"; fname_foobar = "foobar"; fname_foobarbaz = "foobarbaz"; fex = rec_fex_new ("foo foobar foobarbaz", REC_FEX_SIMPLE); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 3); fail_if (!rec_field_name_equal_p (fname_foo, rec_fex_elem_field_name (rec_fex_get (fex, 0)))); fail_if (!rec_field_name_equal_p (fname_foobar, rec_fex_elem_field_name (rec_fex_get (fex, 1)))); fail_if (!rec_field_name_equal_p (fname_foobarbaz, rec_fex_elem_field_name (rec_fex_get (fex, 2)))); fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); fail_if (rec_fex_elem_min (rec_fex_get (fex, 1)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 1)) != -1); fail_if (rec_fex_elem_min (rec_fex_get (fex, 2)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 2)) != -1); rec_fex_destroy (fex); fex = rec_fex_new ("\tfoo foobar\n ", REC_FEX_SIMPLE); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 2); fail_if (!rec_field_name_equal_p (fname_foo, rec_fex_elem_field_name (rec_fex_get (fex, 0)))); fail_if (!rec_field_name_equal_p (fname_foobar, rec_fex_elem_field_name (rec_fex_get (fex, 1)))); fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); fail_if (rec_fex_elem_min (rec_fex_get (fex, 1)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 1)) != -1); rec_fex_destroy (fex); fex = rec_fex_new ("foo\nfoobar\nfoobarbaz", REC_FEX_SIMPLE); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 3); fail_if (!rec_field_name_equal_p (fname_foo, rec_fex_elem_field_name (rec_fex_get (fex, 0)))); fail_if (!rec_field_name_equal_p (fname_foobar, rec_fex_elem_field_name (rec_fex_get (fex, 1)))); fail_if (!rec_field_name_equal_p (fname_foobarbaz, rec_fex_elem_field_name (rec_fex_get (fex, 2)))); fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); fail_if (rec_fex_elem_min (rec_fex_get (fex, 1)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 1)) != -1); fail_if (rec_fex_elem_min (rec_fex_get (fex, 2)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 2)) != -1); rec_fex_destroy (fex); fex = rec_fex_new ("\n\t foo\nfoobarbaz\n", REC_FEX_SIMPLE); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 2); fail_if (!rec_field_name_equal_p (fname_foo, rec_fex_elem_field_name (rec_fex_get (fex, 0)))); fail_if (!rec_field_name_equal_p (fname_foobarbaz, rec_fex_elem_field_name (rec_fex_get (fex, 1)))); fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); fail_if (rec_fex_elem_min (rec_fex_get (fex, 1)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 1)) != -1); rec_fex_destroy (fex); } END_TEST /*- * Test: rec_fex_new_csv * Unit: rec_fex_new * Description: * + Create field expressions of the CSV variety. */ START_TEST(rec_fex_new_csv) { rec_fex_t fex; fex = rec_fex_new ("foo", REC_FEX_CSV); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 1); rec_fex_destroy (fex); fex = rec_fex_new ("foo,bar,baz", REC_FEX_CSV); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 3); rec_fex_destroy (fex); fex = rec_fex_new ("foo,bar", REC_FEX_CSV); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 2); rec_fex_destroy (fex); } END_TEST /*- * Test: rec_fex_new_subscripts * Unit: rec_fex_new * Description: * + Create field expressions featuring subscripts. */ START_TEST(rec_fex_new_subscripts) { rec_fex_t fex; const char *fname_foo; const char *fname_foobar; const char *fname_foobarbaz; fname_foo = "foo"; fname_foobar = "foobar"; fname_foobarbaz = "foobarbaz"; fex = rec_fex_new ("foo", REC_FEX_SUBSCRIPTS); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 1); fail_if (!rec_field_name_equal_p (fname_foo, rec_fex_elem_field_name (rec_fex_get (fex, 0)))); fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); rec_fex_destroy (fex); fex = rec_fex_new ("foo[1]", REC_FEX_SUBSCRIPTS); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 1); fail_if (!rec_field_name_equal_p (fname_foo, rec_fex_elem_field_name (rec_fex_get (fex, 0)))); fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != 1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); rec_fex_destroy (fex); fex = rec_fex_new ("foo[1],foobar[0-23],foobarbaz", REC_FEX_SUBSCRIPTS); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 3); fail_if (!rec_field_name_equal_p (fname_foo, rec_fex_elem_field_name (rec_fex_get (fex, 0)))); fail_if (!rec_field_name_equal_p (fname_foobar, rec_fex_elem_field_name (rec_fex_get (fex, 1)))); fail_if (!rec_field_name_equal_p (fname_foobarbaz, rec_fex_elem_field_name (rec_fex_get (fex, 2)))); fail_if (rec_fex_elem_min (rec_fex_get (fex, 0)) != 1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 0)) != -1); fail_if (rec_fex_elem_min (rec_fex_get (fex, 1)) != 0); fail_if (rec_fex_elem_max (rec_fex_get (fex, 1)) != 23); fail_if (rec_fex_elem_min (rec_fex_get (fex, 2)) != -1); fail_if (rec_fex_elem_max (rec_fex_get (fex, 2)) != -1); rec_fex_destroy (fex); } END_TEST /*- * Test: rec_fex_new_invalid * Unit: rec_fex_new * Description: * + Try to create field expressions from an invalid string. * + The creation of the fex shall fail. */ START_TEST(rec_fex_new_invalid) { rec_fex_t fex; fex = rec_fex_new ("", REC_FEX_SIMPLE); fail_if (fex != NULL); fex = rec_fex_new ("?", REC_FEX_SIMPLE); fail_if (fex != NULL); fex = rec_fex_new ("foo&", REC_FEX_SIMPLE); fail_if (fex != NULL); fex = rec_fex_new ("foo foo:bar", REC_FEX_SIMPLE); fail_if (fex != NULL); fex = rec_fex_new ("foo,bar,!,baz", REC_FEX_CSV); fail_if (fex != NULL); fex = rec_fex_new ("foo[]", REC_FEX_SUBSCRIPTS); fail_if (fex != NULL); fex = rec_fex_new ("foo[10 10]", REC_FEX_SUBSCRIPTS); fail_if (fex != NULL); fex = rec_fex_new ("bar[[10]", REC_FEX_SUBSCRIPTS); fail_if (fex != NULL); fex = rec_fex_new ("bar,foo[10]]", REC_FEX_SUBSCRIPTS); fail_if (fex != NULL); fex = rec_fex_new ("foo[10-]", REC_FEX_SUBSCRIPTS); fail_if (fex != NULL); fex = rec_fex_new ("foo[-]", REC_FEX_SUBSCRIPTS); fail_if (fex != NULL); } END_TEST /* * Test case creation function */ TCase * test_rec_fex_new (void) { TCase *tc = tcase_create ("rec_fex_new"); tcase_add_test (tc, rec_fex_new_single); tcase_add_test (tc, rec_fex_new_simple); tcase_add_test (tc, rec_fex_new_csv); tcase_add_test (tc, rec_fex_new_subscripts); tcase_add_test (tc, rec_fex_new_invalid); return tc; } /* End of rec-fex-new.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-fex/tsuite-rec-fex.c�������������������������������������������������������0000644�0000000�0000000�00000004015�14226563465�016166� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: tsuite-rec-fex.c * Date: Tue Nov 9 14:02:54 2010 * * GNU recutils - rec_fex test suite. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> extern TCase *test_rec_fex_new (void); extern TCase *test_rec_fex_destroy (void); extern TCase *test_rec_fex_check (void); extern TCase *test_rec_fex_sort (void); extern TCase *test_rec_fex_size (void); extern TCase *test_rec_fex_get (void); extern TCase *test_rec_fex_elem_field_name (void); extern TCase *test_rec_fex_elem_rewrite_to (void); extern TCase *test_rec_fex_elem_min (void); extern TCase *test_rec_fex_elem_max (void); extern TCase *test_rec_fex_str (void); Suite * tsuite_rec_fex () { Suite *s; s = suite_create ("rec-fex"); suite_add_tcase (s, test_rec_fex_new ()); suite_add_tcase (s, test_rec_fex_destroy ()); suite_add_tcase (s, test_rec_fex_check ()); suite_add_tcase (s, test_rec_fex_sort ()); suite_add_tcase (s, test_rec_fex_size ()); suite_add_tcase (s, test_rec_fex_get ()); suite_add_tcase (s, test_rec_fex_elem_field_name ()); suite_add_tcase (s, test_rec_fex_elem_rewrite_to ()); suite_add_tcase (s, test_rec_fex_elem_min ()); suite_add_tcase (s, test_rec_fex_elem_max ()); suite_add_tcase (s, test_rec_fex_str ()); return s; } /* End of tsuite-rec-fex.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-fex/rec-fex-size.c���������������������������������������������������������0000644�0000000�0000000�00000003402�14226563465�015622� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-fex-size.c * Date: Wed Nov 10 11:59:31 2010 * * GNU recutils - rec_fex_size unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_fex_size_nominal * Unit: rec_fex_size * Description: * + Get the size of several field * + expressions. */ START_TEST(rec_fex_size_nominal) { rec_fex_t fex; fex = rec_fex_new ("foo", REC_FEX_SIMPLE); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 1); rec_fex_destroy (fex); fex = rec_fex_new ("foo bar", REC_FEX_SIMPLE); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 2); rec_fex_destroy (fex); fex = rec_fex_new ("foo,bar,baz", REC_FEX_CSV); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 3); rec_fex_destroy (fex); } END_TEST /* * Test case creation function */ TCase * test_rec_fex_size (void) { TCase *tc = tcase_create ("rec_fex_size"); tcase_add_test (tc, rec_fex_size_nominal); return tc; } /* End of rec-fex-size.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-fex/rec-fex-check.c��������������������������������������������������������0000644�0000000�0000000�00000007464�14226563465�015741� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-fex-check.c * Date: Tue Nov 9 17:26:40 2010 * * GNU recutils - rec_fex_check unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_fex_check_simple_nominal * Unit: rec_fex_check * Description: * + Check for simple field expressions. */ START_TEST(rec_fex_check_simple_nominal) { fail_if (!rec_fex_check ("foo", REC_FEX_SIMPLE)); fail_if (!rec_fex_check ("foo bar baz", REC_FEX_SIMPLE)); fail_if (!rec_fex_check ("foo\nbar\nbaz", REC_FEX_SIMPLE)); fail_if (!rec_fex_check ("foo\tbar\tbaz", REC_FEX_SIMPLE)); } END_TEST /*- * Test: rec_fex_check_simple_invalid * Unit: rec_fex_check * Description: * + Check for simple field expressions. */ START_TEST(rec_fex_check_simple_invalid) { fail_if (rec_fex_check ("fo!o", REC_FEX_SIMPLE)); fail_if (rec_fex_check ("foo,bar", REC_FEX_SIMPLE)); } END_TEST /*- * Test: rec_fex_check_csv_nominal * Unit: rec_fex_check * Description: * + Check for comma-separated simple field expressions. */ START_TEST(rec_fex_check_csv_nominal) { fail_if (!rec_fex_check ("foo", REC_FEX_CSV)); fail_if (!rec_fex_check ("foo,bar,baz", REC_FEX_CSV)); fail_if (!rec_fex_check ("foobarbaz,bar,baz", REC_FEX_CSV)); } END_TEST /*- * Test: rec_fex_check_csv_invalid * Unit: rec_fex_check * Description: * + Check for csv simple field expressions. */ START_TEST(rec_fex_check_csv_invalid) { fail_if (rec_fex_check ("fo!o", REC_FEX_CSV)); fail_if (rec_fex_check ("foo bar", REC_FEX_CSV)); } END_TEST /*- * Test: rec_fex_check_sub_nominal * Unit: rec_fex_check * Description: * + Check for comma-separated field expressions. */ START_TEST(rec_fex_check_sub_nominal) { fail_if (!rec_fex_check ("foo", REC_FEX_SUBSCRIPTS)); fail_if (!rec_fex_check ("foo[10]", REC_FEX_SUBSCRIPTS)); fail_if (!rec_fex_check ("foo,bar,baz", REC_FEX_SUBSCRIPTS)); fail_if (!rec_fex_check ("foo[0],bar[1],baz[2]", REC_FEX_SUBSCRIPTS)); fail_if (!rec_fex_check ("foo[0-10],bar[1-100],baz[2-20]", REC_FEX_SUBSCRIPTS)); fail_if (!rec_fex_check ("foobarbaz,bar,baz", REC_FEX_SUBSCRIPTS)); fail_if (!rec_fex_check ("foobarbaz,bar[100-0],baz", REC_FEX_SUBSCRIPTS)); } END_TEST /*- * Test: rec_fex_check_sub_invalid * Unit: rec_fex_check * Description: * + Check for comma-separated field expressions. */ START_TEST(rec_fex_check_sub_invalid) { fail_if (rec_fex_check ("fo!o", REC_FEX_SUBSCRIPTS)); fail_if (rec_fex_check ("foo[]", REC_FEX_SUBSCRIPTS)); fail_if (rec_fex_check ("foo bar", REC_FEX_SUBSCRIPTS)); fail_if (rec_fex_check ("foo,bar[[10]", REC_FEX_SUBSCRIPTS)); } END_TEST /* * Test case creation function */ TCase * test_rec_fex_check (void) { TCase *tc = tcase_create ("rec_fex_check"); tcase_add_test (tc, rec_fex_check_simple_nominal); tcase_add_test (tc, rec_fex_check_simple_invalid); tcase_add_test (tc, rec_fex_check_csv_nominal); tcase_add_test (tc, rec_fex_check_csv_invalid); tcase_add_test (tc, rec_fex_check_sub_nominal); tcase_add_test (tc, rec_fex_check_sub_invalid); return tc; } /* End of rec-fex-check.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-fex/rec-fex-get.c����������������������������������������������������������0000644�0000000�0000000�00000005017�14226563465�015433� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-fex-get.c * Date: Wed Nov 10 12:10:43 2010 * * GNU recutils - rec_fex_get unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_fex_get_nominal * Unit: rec_fex_get * Description: * + Get elements from a field expression. */ START_TEST(rec_fex_get_nominal) { rec_fex_t fex; rec_fex_elem_t elem; const char *fname_aaa; const char *fname_bbb; fname_aaa = "aaa"; fname_bbb = "bbb"; fex = rec_fex_new ("aaa bbb", REC_FEX_SIMPLE); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 2); elem = rec_fex_get (fex, 0); fail_if (elem == NULL); fail_if (!rec_field_name_equal_p (rec_fex_elem_field_name (elem), fname_aaa)); elem = rec_fex_get (fex, 1); fail_if (elem == NULL); fail_if (!rec_field_name_equal_p (rec_fex_elem_field_name (elem), fname_bbb)); rec_fex_destroy (fex); } END_TEST /*- * Test: rec_fex_get_invalid * Unit: rec_fex_get * Description: * + Get elements from a field expression * + providing invalid positions. * + * + The calls to 'rec_fex_get' shall return * + NULL in those cases. */ START_TEST(rec_fex_get_invalid) { rec_fex_t fex; fex = rec_fex_new ("aaa bbb ccc", REC_FEX_SIMPLE); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 3); fail_if (rec_fex_get (fex, -10) != NULL); fail_if (rec_fex_get (fex, 4) != NULL); fail_if (rec_fex_get (fex, 20000) != NULL); rec_fex_destroy (fex); } END_TEST /* * Test creation function */ TCase * test_rec_fex_get (void) { TCase *tc = tcase_create ("rec_fex_get"); tcase_add_test (tc, rec_fex_get_nominal); tcase_add_test (tc, rec_fex_get_invalid); return tc; } /* End of rec-fex-get.c */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-fex/rec-fex-str.c����������������������������������������������������������0000644�0000000�0000000�00000005432�14226563465�015465� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-fex-str.c * Date: Thu Nov 25 16:13:12 2010 * * GNU recutils - rec_fex_str unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <stdlib.h> #include <rec.h> /*- * Test: rec_fex_str_nominal * Unit: rec_fex_str * Description: * + Write fexes in strings. */ START_TEST(rec_fex_str_nominal) { rec_fex_t fex; char *str; fex = rec_fex_new ("foo", REC_FEX_SIMPLE); fail_if (fex == NULL); str = rec_fex_str (fex, REC_FEX_SIMPLE); fail_if (str == NULL); fail_if (strcmp (str, "foo") != 0); free (str); str = rec_fex_str (fex, REC_FEX_CSV); fail_if (str == NULL); fail_if (strcmp (str, "foo") != 0); free (str); str = rec_fex_str (fex, REC_FEX_SUBSCRIPTS); fail_if (str == NULL); fail_if (strcmp (str, "foo") != 0); free (str); rec_fex_destroy (fex); fex = rec_fex_new ("foo bar baz", REC_FEX_SIMPLE); fail_if (fex == NULL); str = rec_fex_str (fex, REC_FEX_SIMPLE); fail_if (str == NULL); fail_if (strcmp (str, "foo bar baz") != 0); free (str); str = rec_fex_str (fex, REC_FEX_CSV); fail_if (str == NULL); fail_if (strcmp (str, "foo,bar,baz") != 0); free (str); str = rec_fex_str (fex, REC_FEX_SUBSCRIPTS); fail_if (str == NULL); fail_if (strcmp (str, "foo,bar,baz") != 0); free (str); rec_fex_destroy (fex); fex = rec_fex_new ("foo[0],bar[1-2],baz", REC_FEX_SUBSCRIPTS); fail_if (fex == NULL); str = rec_fex_str (fex, REC_FEX_SIMPLE); fail_if (str == NULL); fail_if (strcmp (str, "foo bar baz") != 0); free (str); str = rec_fex_str (fex, REC_FEX_CSV); fail_if (str == NULL); fail_if (strcmp (str, "foo,bar,baz") != 0); free (str); str = rec_fex_str (fex, REC_FEX_SUBSCRIPTS); fail_if (str == NULL); fail_if (strcmp (str, "foo[0],bar[1-2],baz") != 0); free (str); rec_fex_destroy (fex); } END_TEST /* * Test case creation function */ TCase * test_rec_fex_str (void) { TCase *tc = tcase_create ("rec_fex_str"); tcase_add_test (tc, rec_fex_str_nominal); return tc; } /* End of rec-fex-str.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-fex/rec-fex-elem-min.c�����������������������������������������������������0000644�0000000�0000000�00000005373�14226563465�016364� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-fex-elem-min.c * Date: Fri Nov 12 12:38:03 2010 * * GNU recutils - rec_fex_elem_min unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_fex_elem_min_nosub * Unit: rec_fex_elem_min * Description: * + Get the min index of an entry in * + a field expression created without * + subscripts. * + * + The min subscript shall be -1 in this case. */ START_TEST(rec_fex_elem_min_nosub) { rec_fex_t fex; rec_fex_elem_t elem; fex = rec_fex_new ("foo bar baz", REC_FEX_SIMPLE); fail_if (fex == NULL); elem = rec_fex_get (fex, 1); fail_if (elem == NULL); fail_if (rec_fex_elem_min (elem) != -1); rec_fex_destroy (fex); } END_TEST /*- * Test: rec_fex_elem_min_min * Unit: rec_fex_elem_min * Description: * + Get the min index of an entry in * + a field expression created with * + a min subscript. */ START_TEST(rec_fex_elem_min_min) { rec_fex_t fex; rec_fex_elem_t elem; fex = rec_fex_new ("foo,bar[6],baz", REC_FEX_SUBSCRIPTS); fail_if (fex == NULL); elem = rec_fex_get (fex, 1); fail_if (elem == NULL); fail_if (rec_fex_elem_min (elem) != 6); rec_fex_destroy (fex); } END_TEST /*- * Test: rec_fex_elem_min_minmax * Unit: rec_fex_elem_min * Description: * + Get the min index of an entry in * + a field expression created with * + full subscripts (both min and max). */ START_TEST(rec_fex_elem_min_minmax) { rec_fex_t fex; rec_fex_elem_t elem; fex = rec_fex_new ("foo,bar[2-10],baz", REC_FEX_SUBSCRIPTS); fail_if (fex == NULL); elem = rec_fex_get (fex, 1); fail_if (elem == NULL); fail_if (rec_fex_elem_min (elem) != 2); rec_fex_destroy (fex); } END_TEST /* * Test creation function */ TCase * test_rec_fex_elem_min (void) { TCase *tc = tcase_create ("rec_fex_elem_min"); tcase_add_test (tc, rec_fex_elem_min_nosub); tcase_add_test (tc, rec_fex_elem_min_min); tcase_add_test (tc, rec_fex_elem_min_minmax); return tc; } /* End of rec-fex-elem-min.c */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-fex/rec-fex-elem-rewrite-to.c����������������������������������������������0000644�0000000�0000000�00000004565�14226563465�017704� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- Time-stamp: "2015-04-27 19:59:28 jemarch" * * File: rec-fex-elem-rewrite-to.c * Date: Sun Feb 26 13:14:15 2012 * * GNU recutils - rec_fex_elem_rewrite_to unit tests. * */ /* Copyright (C) 2012, 2013, 2014, 2015, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_fex_elem_rewrite_to_default * Unit: rec_fex_elem_rewrite_to * Description: * + The rewrite_to property of a fex * + elem without a rewrite rule must be NULL. */ START_TEST(rec_fex_elem_rewrite_to_default) { rec_fex_t fex; rec_fex_elem_t elem; fex = rec_fex_new ("foo,bar,baz", REC_FEX_SUBSCRIPTS); fail_if (fex == NULL); elem = rec_fex_get (fex, 0); fail_if (elem == NULL); fail_if (rec_fex_elem_rewrite_to (elem) != NULL); rec_fex_destroy (fex); } END_TEST /*- * Test: rec_fex_elem_rewrite_to_nominal * Unit: rec_fex_elem_rewrite_to * Description: * + The rewrite_to property of a fex * + elem must be properly parsed and returned. */ START_TEST(rec_fex_elem_rewrite_to_nominal) { rec_fex_t fex; rec_fex_elem_t elem; fex = rec_fex_new ("foo,bar:xxx,baz", REC_FEX_SUBSCRIPTS); fail_if (fex == NULL); elem = rec_fex_get (fex, 1); fail_if (elem == NULL); fail_if (rec_fex_elem_rewrite_to (elem) == NULL); fail_if (strcmp (rec_fex_elem_rewrite_to (elem), "xxx") != 0); rec_fex_destroy (fex); } END_TEST /* * Test case creation function */ TCase * test_rec_fex_elem_rewrite_to (void) { TCase *tc = tcase_create ("rec_fex_elem_rewrite_to"); tcase_add_test (tc, rec_fex_elem_rewrite_to_default); tcase_add_test (tc, rec_fex_elem_rewrite_to_nominal); return tc; } /* End of rec-fex-elem-rewrite-to.c */ �������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-fex/rec-fex-sort.c���������������������������������������������������������0000644�0000000�0000000�00000004040�14226563465�015636� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-fex-sort.c * Date: Tue Nov 9 17:51:59 2010 * * GNU recutils - rec_fex_sort unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_fex_sort_nominal * Unit: rec_fex_sort * Description: * + Sort a field expression. */ START_TEST(rec_fex_sort_nominal) { rec_fex_t fex; const char *fname_aaa; const char *fname_bbb; const char *fname_ccc; fname_aaa = "aaa"; fname_bbb = "bbb"; fname_ccc = "ccc"; fex = rec_fex_new ("ccc[2],aaa[0],bbb[1]", REC_FEX_SUBSCRIPTS); fail_if (fex == NULL); fail_if (rec_fex_size (fex) != 3); rec_fex_sort (fex); fail_if (!rec_field_name_equal_p (rec_fex_elem_field_name (rec_fex_get (fex, 0)), fname_aaa)); fail_if (!rec_field_name_equal_p (rec_fex_elem_field_name (rec_fex_get (fex, 1)), fname_bbb)); fail_if (!rec_field_name_equal_p (rec_fex_elem_field_name (rec_fex_get (fex, 2)), fname_ccc)); rec_fex_destroy (fex); } END_TEST /* * Test case creation function */ TCase * test_rec_fex_sort (void) { TCase *tc = tcase_create ("rec_fex_sort"); tcase_add_test (tc, rec_fex_sort_nominal); return tc; } /* End of rec-fex-sort.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-fex/rec-fex-destroy.c������������������������������������������������������0000644�0000000�0000000�00000002743�14226563465�016350� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-fex-destroy.c * Date: Tue Nov 9 15:54:08 2010 * * GNU recutils - rec_fex_destroy unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_fex_destroy_nominal * Unit: rec_fex_destroy * Description: * + Destroy a properly initialized field expression. */ START_TEST(rec_fex_destroy_nominal) { rec_fex_t fex; fex = rec_fex_new ("foo", REC_FEX_SIMPLE); fail_if (fex == NULL); rec_fex_destroy (fex); } END_TEST /* * Test case creation function */ TCase * test_rec_fex_destroy (void) { TCase *tc = tcase_create ("rec_fex_new"); tcase_add_test (tc, rec_fex_destroy_nominal); return tc; } /* End of rec-fex-destroy.c */ �����������������������������recutils-1.9/torture/rec-fex/rec-fex-elem-field-name.c����������������������������������������������0000644�0000000�0000000�00000003464�14226563465�017601� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-fex-elem-field-name.c * Date: Wed Nov 10 12:28:21 2010 * * GNU recutils - rec_fex_elem_field_name unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_fex_elem_field_name_nominal * Unit: rec_fex_elem_field_name * Description: * + Get the field name of a field expression * + element. */ START_TEST(rec_fex_elem_field_name_nominal) { rec_fex_t fex; rec_fex_elem_t elem; const char *fname_bar; fname_bar = "bar"; fex = rec_fex_new ("foo bar baz", REC_FEX_SIMPLE); fail_if (fex == NULL); elem = rec_fex_get (fex, 1); fail_if (elem == NULL); fail_if (!rec_field_name_equal_p (rec_fex_elem_field_name (elem), fname_bar)); rec_fex_destroy (fex); } END_TEST /* * Test case creation function */ TCase * test_rec_fex_elem_field_name (void) { TCase *tc = tcase_create ("rec_fex_elem_field_name"); tcase_add_test (tc, rec_fex_elem_field_name_nominal); return tc; } /* End of rec-fex-elem-field-name.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-fex/rec-fex-elem-max.c�����������������������������������������������������0000644�0000000�0000000�00000005375�14226563465�016370� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-fex-elem-max.c * Date: Fri Nov 12 12:38:03 2010 * * GNU recutils - rec_fex_elem_max unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_fex_elem_max_nosub * Unit: rec_fex_elem_max * Description: * + Get the max index of an entry in * + a field expression created without * + subscripts. * + * + The max subscript shall be -1 in this case. */ START_TEST(rec_fex_elem_max_nosub) { rec_fex_t fex; rec_fex_elem_t elem; fex = rec_fex_new ("foo bar baz", REC_FEX_SIMPLE); fail_if (fex == NULL); elem = rec_fex_get (fex, 1); fail_if (elem == NULL); fail_if (rec_fex_elem_max (elem) != -1); rec_fex_destroy (fex); } END_TEST /*- * Test: rec_fex_elem_max_min * Unit: rec_fex_elem_max * Description: * + Get the max index of an entry in * + a field expression created with * + a min subscript. */ START_TEST(rec_fex_elem_max_min) { rec_fex_t fex; rec_fex_elem_t elem; fex = rec_fex_new ("foo,bar[6],baz", REC_FEX_SUBSCRIPTS); fail_if (fex == NULL); elem = rec_fex_get (fex, 1); fail_if (elem == NULL); fail_if (rec_fex_elem_max (elem) != -1); rec_fex_destroy (fex); } END_TEST /*- * Test: rec_fex_elem_max_minmax * Unit: rec_fex_elem_max * Description: * + Get the max index of an entry in * + a field expression created with * + full subscripts (both min and max). */ START_TEST(rec_fex_elem_max_minmax) { rec_fex_t fex; rec_fex_elem_t elem; fex = rec_fex_new ("foo,bar[2-10],baz", REC_FEX_SUBSCRIPTS); fail_if (fex == NULL); elem = rec_fex_get (fex, 1); fail_if (elem == NULL); fail_if (rec_fex_elem_max (elem) != 10); rec_fex_destroy (fex); } END_TEST /* * Test creation function */ TCase * test_rec_fex_elem_max (void) { TCase *tc = tcase_create ("rec_fex_elem_max"); tcase_add_test (tc, rec_fex_elem_max_nosub); tcase_add_test (tc, rec_fex_elem_max_min); tcase_add_test (tc, rec_fex_elem_max_minmax); return tc; } /* End of rec-fex-elem-max.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/���������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�013540� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-char-location.c��������������������������������������������0000644�0000000�0000000�00000003221�14226563465�020174� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-char-location.c * Date: Fri Nov 12 15:01:45 2010 * * GNU recutils - rec_field_char_location unit tests. * */ /* Copyright (C) 2009-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_char_location_nominal * Unit: rec_field_char_location * Description: * + Get the char location of a field. */ START_TEST(rec_field_char_location_nominal) { rec_field_t field; field = rec_field_new ("foo", "value"); fail_if (field == NULL); fail_if (rec_field_char_location (field) != 0); rec_field_set_char_location (field, 100); fail_if (rec_field_char_location (field) != 100); rec_field_destroy (field); } END_TEST /* * Test creation function */ TCase * test_rec_field_char_location (void) { TCase *tc = tcase_create ("rec_field_char_location"); tcase_add_test (tc, rec_field_char_location_nominal); return tc; } /* End of rec-field-char-location.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-set-name.c�������������������������������������������������0000644�0000000�0000000�00000005030�14226563465�017162� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-set-name.c * Date: Sun Mar 1 17:04:00 2009 * * GNU recutils - rec_field_set_name unit tests * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_set_name_empty * Unit: rec_field_set_name * Description: * + Set the name of a field to the empty string * + * + 1. The call should not produce an error. * + 2. The name of the field should be properly * + set. */ START_TEST(rec_field_set_name_empty) { rec_field_t field; const char *field_name; const char *field_name_2; field_name = ""; field = rec_field_new (field_name, ""); fail_if(field == NULL); field_name_2 = ""; rec_field_set_name (field, field_name_2); field_name_2 = rec_field_name (field); fail_if(strcmp (field_name_2, "") != 0); rec_field_destroy (field); } END_TEST /*- * Test: rec_field_set_name_nonempty * Unit: rec_field_set_name * Description: * + Set the name of a field to a non-empty name * + * + 1. The call should not produce an error. * + 2. The name of the field should be properly * + set. */ START_TEST(rec_field_set_name_nonempty) { rec_field_t field; const char *field_name; const char *field_name_2; field_name = ""; field = rec_field_new (field_name, ""); fail_if(field == NULL); field_name_2 = "foo"; rec_field_set_name (field, field_name_2); field_name_2 = rec_field_name (field); fail_if(strcmp (field_name_2, "foo") != 0); rec_field_destroy (field); } END_TEST /* * Test case creation function */ TCase * test_rec_field_set_name (void) { TCase *tc = tcase_create("rec_field_set_name"); tcase_add_test (tc, rec_field_set_name_empty); tcase_add_test (tc, rec_field_set_name_nonempty); return tc; } /* End of rec-field-set-name.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-set-char-location.c����������������������������������������0000644�0000000�0000000�00000003261�14226563465�020771� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-set-char-location.c * Date: Fri Nov 12 15:01:45 2010 * * GNU recutils - rec_field_set_char-location unit tests. * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_set_char_location_nominal * Unit: rec_field_set_char_location * Description: * + Set the char location of a field. */ START_TEST(rec_field_set_char_location_nominal) { rec_field_t field; field = rec_field_new ("foo", "value"); fail_if (field == NULL); rec_field_set_char_location (field, 100); fail_if (rec_field_char_location (field) != 100); rec_field_destroy (field); } END_TEST /* * Test creation function */ TCase * test_rec_field_set_char_location (void) { TCase *tc = tcase_create ("rec_field_set_char_location"); tcase_add_test (tc, rec_field_set_char_location_nominal); return tc; } /* End of rec-field-set-char-location.c */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-value.c����������������������������������������������������0000644�0000000�0000000�00000004534�14226563465�016575� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-value.c * Date: Sun Mar 1 17:04:00 2009 * * GNU recutils - rec_field_value unit tests * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_value_empty * Unit: rec_field_value * Description: * + Get the value of a field with an empy value * + * + 1. The call should not produce an error. * + 2. The value of the field should be properly * + returned. */ START_TEST(rec_field_value_empty) { rec_field_t field; const char *fname; const char *field_value; fname = ""; field = rec_field_new (fname, ""); fail_if(field == NULL); field_value = rec_field_value (field); fail_if(strcmp (field_value, "") != 0); rec_field_destroy (field); } END_TEST /*- * Test: rec_field_value_nonempty * Unit: rec_field_value * Description: * + Get the value of a field with a non-empty value * + * + 1. The call should not produce an error. * + 2. The value of the field should be properly * + returned. */ START_TEST(rec_field_value_nonempty) { rec_field_t field; const char *fname; const char *field_value; fname = ""; field = rec_field_new (fname, "foo"); fail_if(field == NULL); field_value = rec_field_value (field); fail_if(strcmp (field_value, "foo") != 0); rec_field_destroy (field); } END_TEST /* * Test case creation function */ TCase * test_rec_field_value (void) { TCase *tc = tcase_create("rec_field_value"); tcase_add_test (tc, rec_field_value_empty); tcase_add_test (tc, rec_field_value_nonempty); return tc; } /* End of rec-field-value.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-equal-p.c��������������������������������������������������0000644�0000000�0000000�00000004461�14226563465�017024� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-equal-p.c * Date: Fri Nov 12 13:34:34 2010 * * GNU recutils - rec_field_equal_p unit tests. * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_equal_p_equal * Unit: rec_field_equal_p * Description: * + Test if two given fields are equal. i.e. * + they have eql field names and the same value. */ START_TEST(rec_field_equal_p_equal) { rec_field_t field1; rec_field_t field2; field1 = rec_field_new ("foo", "value"); fail_if (field1 == NULL); field2 = rec_field_new ("foo", "value"); fail_if (field2 == NULL); fail_if (!rec_field_equal_p (field1, field2)); rec_field_destroy (field1); rec_field_destroy (field2); } END_TEST /*- * Test: rec_field_equal_p_nonequal * Unit: rec_field_equal_p * Description: * + Check whether two different fields are * + equal. * + * + The comparison function shall return false. */ START_TEST(rec_field_equal_p_nonequal) { rec_field_t field1; rec_field_t field2; field1 = rec_field_new ("foo", "value"); fail_if (field1 == NULL); field2 = rec_field_new ("other", "value"); fail_if (field2 == NULL); fail_if (rec_field_equal_p (field1, field2)); rec_field_destroy (field1); rec_field_destroy (field2); } END_TEST /* * Test creation function. */ TCase * test_rec_field_equal_p (void) { TCase *tc = tcase_create ("rec_field_equal_p"); tcase_add_test (tc, rec_field_equal_p_equal); tcase_add_test (tc, rec_field_equal_p_nonequal); return tc; } /* End of rec-field-equal-p.c */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-set-location.c���������������������������������������������0000644�0000000�0000000�00000003165�14226563465�020061� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-set-location.c * Date: Fri Nov 12 15:01:45 2010 * * GNU recutils - rec_field_set_location unit tests. * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_set_location_nominal * Unit: rec_field_set_location * Description: * + Set the location of a field. */ START_TEST(rec_field_set_location_nominal) { rec_field_t field; field = rec_field_new ("foo", "value"); fail_if (field == NULL); rec_field_set_location (field, 100); fail_if (rec_field_location (field) != 100); rec_field_destroy (field); } END_TEST /* * Test creation function */ TCase * test_rec_field_set_location (void) { TCase *tc = tcase_create ("rec_field_set_location"); tcase_add_test (tc, rec_field_set_location_nominal); return tc; } /* End of rec-field-set-location.c */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-char-location-str.c����������������������������������������0000644�0000000�0000000�00000003524�14226563465�021010� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-char-location-str.c * Date: Fri Nov 12 15:01:45 2010 * * GNU recutils - rec_field_char_location_str unit tests. * */ /* Copyright (C) 2009-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_char_location_str_nominal * Unit: rec_field_char_location_str * Description: * + Get the char location of a field as a string. */ START_TEST(rec_field_char_location_str_nominal) { rec_field_t field; const char *num; field = rec_field_new ("foo", "value"); fail_if (field == NULL); num = rec_field_char_location_str (field); fail_if (num == NULL); fail_if (strcmp (num, "") != 0); rec_field_set_char_location (field, 100); num = rec_field_char_location_str (field); fail_if (num == NULL); fail_if (strcmp (num, "100") != 0); rec_field_destroy (field); } END_TEST /* * Test creation function */ TCase * test_rec_field_char_location_str (void) { TCase *tc = tcase_create ("rec_field_char_location_str"); tcase_add_test (tc, rec_field_char_location_str_nominal); return tc; } /* End of rec-field-char-location.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-name.c�����������������������������������������������������0000644�0000000�0000000�00000004371�14226563465�016400� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-name.c * Date: Sun Mar 1 17:04:00 2009 * * GNU recutils - rec_field_name unit tests * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_name_empty * Unit: rec_field_name * Description: * + Get the name of a field with an empy name * + * + 1. The call should not produce an error. * + 2. The name of the field should be properly * + returned. */ START_TEST(rec_field_name_empty) { rec_field_t field; const char *fname; fname = ""; field = rec_field_new (fname, ""); fail_if(field == NULL); fname = rec_field_name (field); fail_if(strcmp (fname, "") != 0); rec_field_destroy (field); } END_TEST /*- * Test: rec_field_name_nonempty * Unit: rec_field_name * Description: * + Get the name of a field with a non-empty name * + * + 1. The call should not produce an error. * + 2. The name of the field should be properly * + returned. */ START_TEST(rec_field_name_nonempty) { rec_field_t field; const char *fname; fname = "foo"; field = rec_field_new (fname, ""); fail_if(field == NULL); fname = rec_field_name (field); fail_if(strcmp (fname, "foo") != 0); rec_field_destroy (field); } END_TEST /* * Test case creation function */ TCase * test_rec_field_name (void) { TCase *tc = tcase_create("rec_field_name"); tcase_add_test (tc, rec_field_name_empty); tcase_add_test (tc, rec_field_name_nonempty); return tc; } /* End of rec-field-name.c */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/tsuite-rec-field.c���������������������������������������������������0000644�0000000�0000000�00000005306�14226563465�016774� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: tsuite-rec-field.c * Date: Sun Mar 1 17:06:28 2009 * * GNU recutils - rec_field test suite * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> extern TCase *test_rec_field_name (void); extern TCase *test_rec_field_set_name (void); extern TCase *test_rec_field_value (void); extern TCase *test_rec_field_set_value (void); extern TCase *test_rec_field_dup (void); extern TCase *test_rec_field_new (void); extern TCase *test_rec_field_destroy (void); extern TCase *test_rec_field_equal_p (void); extern TCase *test_rec_field_source (void); extern TCase *test_rec_field_set_source (void); extern TCase *test_rec_field_location (void); extern TCase *test_rec_field_location_str (void); extern TCase *test_rec_field_set_location (void); extern TCase *test_rec_field_char_location (void); extern TCase *test_rec_field_char_location_str (void); extern TCase *test_rec_field_set_char_location (void); extern TCase *test_rec_field_to_comment (void); Suite * tsuite_rec_field () { Suite *s; s = suite_create ("rec-field"); suite_add_tcase (s, test_rec_field_name ()); suite_add_tcase (s, test_rec_field_set_name ()); suite_add_tcase (s, test_rec_field_value ()); suite_add_tcase (s, test_rec_field_set_value ()); suite_add_tcase (s, test_rec_field_dup ()); suite_add_tcase (s, test_rec_field_new ()); suite_add_tcase (s, test_rec_field_destroy ()); suite_add_tcase (s, test_rec_field_equal_p ()); suite_add_tcase (s, test_rec_field_source ()); suite_add_tcase (s, test_rec_field_set_source ()); suite_add_tcase (s, test_rec_field_location ()); suite_add_tcase (s, test_rec_field_location_str ()); suite_add_tcase (s, test_rec_field_set_location ()); suite_add_tcase (s, test_rec_field_char_location ()); suite_add_tcase (s, test_rec_field_char_location_str ()); suite_add_tcase (s, test_rec_field_set_char_location ()); suite_add_tcase (s, test_rec_field_to_comment ()); return s; } /* End of tsuite-rec-field.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-new.c������������������������������������������������������0000644�0000000�0000000�00000002743�14226563465�016252� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-new.c * Date: Fri Nov 12 13:00:24 2010 * * GNU recutils - rec_field_new unit tests. * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_new_nominal * Unit: rec_field_new * Description: * + Create a field. */ START_TEST(rec_field_new_nominal) { const char *fname; rec_field_t field; fname = "foo"; field = rec_field_new (fname, "value"); fail_if (field == NULL); rec_field_destroy (field); } END_TEST /* * Test creation function */ TCase * test_rec_field_new (void) { TCase *tc = tcase_create ("rec_field_new"); tcase_add_test (tc, rec_field_new_nominal); return tc; } /* End of rec-field-new.c */ �����������������������������recutils-1.9/torture/rec-field/rec-field-source.c���������������������������������������������������0000644�0000000�0000000�00000003225�14226563465�016755� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-source.c * Date: Fri Nov 12 14:53:14 2010 * * GNU recutils - rec_field_source unit tests. * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_source_nominal * Unit: rec_field_source * Description: * + Get the source property of a field. */ START_TEST(rec_field_source_nominal) { rec_field_t field; field = rec_field_new ("foo", "value"); fail_if (field == NULL); fail_if (rec_field_source (field) != NULL); rec_field_set_source (field, "source"); fail_if (strcmp (rec_field_source (field), "source") != 0); rec_field_destroy (field); } END_TEST /* * Test creation function */ TCase * test_rec_field_source (void) { TCase *tc = tcase_create ("rec_field_source"); tcase_add_test (tc, rec_field_source_nominal); return tc; } /* End of rec-field-source.c */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-location-str.c���������������������������������������������0000644�0000000�0000000�00000003455�14226563465�020100� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-location-str.c * Date: Fri Nov 12 15:01:45 2010 * * GNU recutils - rec_field_location_str unit tests. * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_location_str_nominal * Unit: rec_field_location_str * Description: * + Get the location of a field as a string. */ START_TEST(rec_field_location_str_nominal) { rec_field_t field; const char *num; field = rec_field_new ("foo", "value"); fail_if (field == NULL); num = rec_field_location_str (field); fail_if (num == NULL); fail_if (strcmp (num, "") != 0); rec_field_set_location (field, 100); num = rec_field_location_str (field); fail_if (num == NULL); fail_if (strcmp (num, "100") != 0); rec_field_destroy (field); } END_TEST /* * Test creation function */ TCase * test_rec_field_location_str (void) { TCase *tc = tcase_create ("rec_field_location_str"); tcase_add_test (tc, rec_field_location_str_nominal); return tc; } /* End of rec-field-location.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-destroy.c��������������������������������������������������0000644�0000000�0000000�00000002731�14226563465�017147� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-destroy.c * Date: Fri Nov 12 13:19:45 2010 * * GNU recutils - rec_field_destroy unit tests. * */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_destroy_nominal * Unit: rec_field_destroy * Description: * + Destroy a field. */ START_TEST(rec_field_destroy_nominal) { rec_field_t field; field = rec_field_new ("foo", "value"); fail_if (field == NULL); rec_field_destroy (field); } END_TEST /* * Test creation function */ TCase * test_rec_field_destroy (void) { TCase *tc = tcase_create ("rec_field_new"); tcase_add_test (tc, rec_field_destroy_nominal); return tc; } /* End of rec-field-destroy.c */ ���������������������������������������recutils-1.9/torture/rec-field/rec-field-location.c�������������������������������������������������0000644�0000000�0000000�00000003222�14226563465�017262� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-location.c * Date: Fri Nov 12 15:01:45 2010 * * GNU recutils - rec_field_location unit tests. * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_location_nominal * Unit: rec_field_location * Description: * + Get the location of a field. */ START_TEST(rec_field_location_nominal) { rec_field_t field; field = rec_field_new ("foo", "value"); fail_if (field == NULL); fail_if (rec_field_location (field) != 0); rec_field_set_location (field, 100); fail_if (rec_field_location (field) != 100); rec_field_destroy (field); } END_TEST /* * Test creation function */ TCase * test_rec_field_location (void) { TCase *tc = tcase_create ("rec_field_location"); tcase_add_test (tc, rec_field_location_nominal); return tc; } /* End of rec-field-location.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-set-source.c�����������������������������������������������0000644�0000000�0000000�00000003157�14226563465�017552� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-set-source.c * Date: Fri Nov 12 14:56:51 2010 * * GNU recutils - rec_field_set_source unit tests. * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_set_source_nominal * Unit: rec_field_set_source * Description: * + Set the source of a field. */ START_TEST(rec_field_set_source_nominal) { rec_field_t field; field = rec_field_new ("foo", "value"); fail_if (field == NULL); rec_field_set_source (field, "source"); fail_if (strcmp (rec_field_source (field), "source") != 0); rec_field_destroy (field); } END_TEST /* * Test creation function */ TCase * test_rec_field_set_source (void) { TCase *tc = tcase_create ("rec_field_set_source"); tcase_add_test (tc, rec_field_set_source_nominal); return tc; } /* End of rec-field-set-source.c */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-to-comment.c�����������������������������������������������0000644�0000000�0000000�00000004227�14226563465�017542� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-to-comment.c * Date: Fri Nov 12 15:38:17 2010 * * GNU recutils - rec_field_to_comment unit tests. * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_to_comment_nominal * Unit: rec_field_to_comment * Description: * + Convert fields into comments. */ START_TEST(rec_field_to_comment_nominal) { rec_field_t field; rec_comment_t comment; field = rec_field_new ("foo", ""); fail_if (field == NULL); comment = rec_field_to_comment (field); fail_if (strcmp (rec_comment_text (comment), "foo:") != 0); rec_comment_destroy (comment); rec_field_destroy (field); field = rec_field_new ("foo", "value"); fail_if (field == NULL); comment = rec_field_to_comment (field); fail_if (strcmp (rec_comment_text (comment), "foo: value") != 0); rec_comment_destroy (comment); rec_field_destroy (field); field = rec_field_new ("foo", "line1\nline2"); fail_if (field == NULL); comment = rec_field_to_comment (field); fail_if (strcmp (rec_comment_text (comment), "foo: line1\n+ line2") != 0); rec_comment_destroy (comment); rec_field_destroy (field); } END_TEST /* * Test case creation function */ TCase * test_rec_field_to_comment (void) { TCase *tc = tcase_create ("rc_field_to_comment"); tcase_add_test (tc, rec_field_to_comment_nominal); return tc; } /* rec-field-to-comment.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-dup.c������������������������������������������������������0000644�0000000�0000000�00000006154�14226563465�016251� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-dup.c * Date: Thu Mar 5 23:29:56 2009 * * GNU recutils - rec_field_dup unit tests * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_dup_empty * Unit: rec_field_dup * Description: * + Dup a field with empty name and empty value. * + * + 1. The name of the copied field should be the * + empty string. * + 2. The value of the copied field should be the * + empty string. */ START_TEST(rec_field_dup_empty) { rec_field_t field; rec_field_t field_copy; const char *field_name; const char *field_value; /* Create a field */ field_name = ""; field = rec_field_new (field_name, ""); fail_if(field == NULL); /* Create a copy of the field */ field_copy = rec_field_dup (field); fail_if(field_copy == NULL); /* Get the attributes of the copy */ field_name = rec_field_name (field_copy); field_value = rec_field_value (field_copy); /* Validate the attributes */ fail_if(strcmp (field_name, "") != 0); fail_if(strcmp (field_value, "") != 0); rec_field_destroy (field); rec_field_destroy (field_copy); } END_TEST /*- * Test: rec_field_dup_non_empty * Unit: rec_field_dup * Description: * + Dup a field with non-empty name and non-empty value. * + * + 1. The name of the copied field should be the * + appropriate. * + 2. The value of the copied field should be the * + appropriate. */ START_TEST(rec_field_dup_nonempty) { rec_field_t field; rec_field_t field_copy; const char *field_name; const char *field_value; /* Create a field */ field_name = "name"; field = rec_field_new (field_name, "value"); fail_if(field == NULL); /* Create a copy of the field */ field_copy = rec_field_dup (field); fail_if(field_copy == NULL); /* Get the attributes of the copy */ field_name = rec_field_name (field_copy); field_value = rec_field_value (field_copy); /* Validate the attributes */ fail_if(strcmp (field_name, "name") != 0); fail_if(strcmp (field_value, "value") != 0); rec_field_destroy (field); rec_field_destroy (field_copy); } END_TEST /* * Test case creation function */ TCase * test_rec_field_dup (void) { TCase *tc = tcase_create("rec_field_dup"); tcase_add_test (tc, rec_field_dup_empty); tcase_add_test (tc, rec_field_dup_nonempty); return tc; } /* End of rec-field-dup.c */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-field/rec-field-set-value.c������������������������������������������������0000644�0000000�0000000�00000004716�14226563465�017370� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-field-set-value.c * Date: Sun Mar 1 17:04:00 2009 * * GNU recutils - rec_field_set_value unit tests * */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <check.h> #include <rec.h> /*- * Test: rec_field_set_value_empty * Unit: rec_field_set_value * Description: * + Set the value of a field to the empty string * + * + 1. The call should not produce an error. * + 2. The value of the field should be properly * + set. */ START_TEST(rec_field_set_value_empty) { rec_field_t field; const char *fname; const char *field_value; fname = ""; field = rec_field_new (fname, ""); fail_if(field == NULL); rec_field_set_value (field, ""); field_value = rec_field_value (field); fail_if(strcmp (field_value, "") != 0); rec_field_destroy (field); } END_TEST /*- * Test: rec_field_set_value_nonempty * Unit: rec_field_set_value * Description: * + Set the value of a field to a non-empty value * + * + 1. The call should not produce an error. * + 2. The value of the field should be properly * + set. */ START_TEST(rec_field_set_value_nonempty) { rec_field_t field; const char *fname; const char *field_value; fname = ""; field = rec_field_new (fname, "foo"); fail_if(field == NULL); rec_field_set_value (field, "foo"); field_value = rec_field_value (field); fail_if(strcmp (field_value, "foo") != 0); rec_field_destroy (field); } END_TEST /* * Test case creation function */ TCase * test_rec_field_set_value (void) { TCase *tc = tcase_create("rec_field_set_value"); tcase_add_test (tc, rec_field_set_value_empty); tcase_add_test (tc, rec_field_set_value_nonempty); return tc; } /* End of rec-field-set-value.c */ ��������������������������������������������������recutils-1.9/torture/rec-parser/��������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�013751� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-parser/rec-parser-error.c��������������������������������������������������0000644�0000000�0000000�00000003230�14226563465�017224� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parser-error.c * Date: Sat Nov 13 22:28:22 2010 * * GNU recutils - rec_parser_error unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_parser_error_nominal * Unit: rec_parser_error * Description: * + Check for the error status of a rec parser. */ START_TEST(rec_parser_error_nominal) { rec_parser_t parser; rec_field_t field; char *str; str = "invalid field"; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (rec_parser_error (parser)); fail_if (rec_parse_field (parser, &field)); fail_if (!rec_parser_error (parser)); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parser_error (void) { TCase *tc = tcase_create ("rec_parser_error"); tcase_add_test (tc, rec_parser_error_nominal); return tc; } /* End of rec-parser-error.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-parser/rec-parser-eof.c����������������������������������������������������0000644�0000000�0000000�00000003201�14226563465�016642� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parser-eof.c * Date: Sat Nov 13 22:21:31 2010 * * GNU recutils - rec_parser_eof unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_parser_eof_nominal * Unit: rec_parser_eof * Description: * + Check for EOF in a parser operating a stream. */ START_TEST(rec_parser_eof_nominal) { rec_parser_t parser; rec_field_t field; char *str; str = "foo: bar"; parser = rec_parser_new_str (str, "dummy"); fail_if (rec_parser_eof (parser)); fail_if (!rec_parse_field (parser, &field)); fail_if (!rec_parser_eof (parser)); rec_field_destroy (field); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parser_eof (void) { TCase *tc = tcase_create ("rec_parser_eof"); tcase_add_test (tc, rec_parser_eof_nominal); return tc; } /* End of rec-parser-eof.c */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-parser/rec-parse-rset.c����������������������������������������������������0000644�0000000�0000000�00000005522�14226563465�016674� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parse-rset.c * Date: Sat Nov 13 21:30:44 2010 * * GNU recutils - rec_parse_rset unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_parse_rset_nominal * Unit: rec_parse_rset * Description: * + Parse valid record sets. */ START_TEST(rec_parse_rset_nominal) { rec_parser_t parser; rec_rset_t rset; char *str; str = "foo1: bar1\n\nfoo2: bar2\n\nfoo3: bar3"; parser = rec_parser_new_str (str, "dummy"); fail_if (!rec_parse_rset (parser, &rset)); fail_if (rec_rset_num_records (rset) != 3); rec_rset_destroy (rset); rec_parser_destroy (parser); str = "%rec: foo\n\nfoo1: bar1\n\nfoo2: bar2\n\nfoo3: bar3"; parser = rec_parser_new_str (str, "dummy"); fail_if (!rec_parse_rset (parser, &rset)); fail_if (rec_rset_num_records (rset) != 3); rec_rset_destroy (rset); rec_parser_destroy (parser); str = "foo1: bar1\n\n#foo2: bar2\n\nfoo3: bar3"; parser = rec_parser_new_str (str, "dummy"); fail_if (!rec_parse_rset (parser, &rset)); fail_if (rec_rset_num_elems (rset) != 3); fail_if (rec_rset_num_comments (rset) != 1); fail_if (rec_rset_num_records (rset) != 2); rec_rset_destroy (rset); rec_parser_destroy (parser); } END_TEST /*- * Test: rec_parse_rset_invalid * Unit: rec_parse_rset * Description: * + Try to parse invalid record sets. */ START_TEST(rec_parse_rset_invalid) { rec_parser_t parser; rec_rset_t rset; char *str; str = " "; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (rec_parse_rset (parser, &rset)); rec_parser_destroy (parser); /* A record set shall have at least one record. */ str = "#foo1: bar1\n\n#foo2: bar2\n\n#foo3: bar3"; parser = rec_parser_new_str (str, "dummy"); fail_if (rec_parse_rset (parser, &rset)); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parse_rset (void) { TCase *tc = tcase_create ("rec_parse_rset"); tcase_add_test (tc, rec_parse_rset_nominal); tcase_add_test (tc, rec_parse_rset_invalid); return tc; } /* End of rec-parse-rset.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-parser/rec-parse-db.c������������������������������������������������������0000644�0000000�0000000�00000003555�14226563465�016310� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parse-db.c * Date: Sat Nov 13 21:59:40 2010 * * GNU recutils - rec_parse_db unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_parse_db_nominal * Unit: rec_parse_db * Description: * + Parse valid databases. */ START_TEST(rec_parse_db_nominal) { rec_parser_t parser; rec_db_t db; char *str; str = "%rec: foo\n\nfoo: bar\n\n%rec: bar\n\nfoo: bar\n\nfoo: bar"; parser = rec_parser_new_str (str, "dummy"); fail_if (!rec_parse_db (parser, &db)); fail_if (rec_db_size (db) != 2); rec_db_destroy (db); rec_parser_destroy (parser); } END_TEST /*- * Test: rec_parse_db_invalid * Unit: rec_parse_db * Description: * + Try to parse invalid databases. */ START_TEST(rec_parse_db_invalid) { /* Nothing here, since the empty string is a valid (empty) database. */ } END_TEST /* * Test creation function */ TCase * test_rec_parse_db (void) { TCase *tc = tcase_create ("rec_parse_db"); tcase_add_test (tc, rec_parse_db_nominal); tcase_add_test (tc, rec_parse_db_invalid); return tc; } /* End of rec-parse-db.c */ ���������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-parser/rec-parse-field.c���������������������������������������������������0000644�0000000�0000000�00000012267�14226563465�017006� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parse-field.c * Date: Sat Nov 13 17:37:11 2010 * * GNU recutils - rec_parse_field unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_parse_field_nominal * Unit: rec_parse_field * Description: * + Parse valid fields. */ START_TEST(rec_parse_field_nominal) { rec_parser_t parser; rec_field_t field; char *fname; char *str; str = "foo: bar"; fname = rec_parse_field_name_str ("foo"); fail_if (fname == NULL); parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_field (parser, &field)); fail_if (strcmp (rec_field_value (field), "bar") != 0); free (fname); rec_field_destroy (field); rec_parser_destroy (parser); str = "foo: bar"; fname = rec_parse_field_name_str ("foo"); fail_if (fname == NULL); parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_field (parser, &field)); fail_if (strcmp (rec_field_value (field), " bar") != 0); free (fname); rec_field_destroy (field); rec_parser_destroy (parser); str = "foo: bar "; fname = rec_parse_field_name_str ("foo"); fail_if (fname == NULL); parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_field (parser, &field)); fail_if (strcmp (rec_field_value (field), "bar ") != 0); free (fname); rec_field_destroy (field); rec_parser_destroy (parser); str = "foo:\n"; fname = rec_parse_field_name_str ("foo"); fail_if (fname == NULL); parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_field (parser, &field)); fail_if (strcmp (rec_field_value (field), "") != 0); free (fname); rec_field_destroy (field); rec_parser_destroy (parser); str = "foo:\n+ bar"; fname = rec_parse_field_name_str ("foo"); fail_if (fname == NULL); parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_field (parser, &field)); fail_if (strcmp (rec_field_value (field), "\nbar") != 0); free (fname); rec_field_destroy (field); rec_parser_destroy (parser); str = "foo:\n+bar"; fname = rec_parse_field_name_str ("foo"); fail_if (fname == NULL); parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_field (parser, &field)); fail_if (strcmp (rec_field_value (field), "\nbar") != 0); free (fname); rec_field_destroy (field); rec_parser_destroy (parser); str = "foo: bar\n+baz"; fname = rec_parse_field_name_str ("foo"); fail_if (fname == NULL); parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_field (parser, &field)); fail_if (strcmp (rec_field_value (field), "bar\nbaz") != 0); free (fname); rec_field_destroy (field); rec_parser_destroy (parser); str = "foo: one\n+\n+ \n+ two"; fname = rec_parse_field_name_str ("foo"); fail_if (fname == NULL); parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_field (parser, &field)); fail_if (strcmp (rec_field_value (field), "one\n\n\ntwo") != 0); free (fname); rec_field_destroy (field); rec_parser_destroy (parser); str = "foo: bar \\\nbaz"; fname = rec_parse_field_name_str ("foo"); fail_if (fname == NULL); parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_field (parser, &field)); fail_if (strcmp (rec_field_value (field), "bar baz") != 0); free (fname); rec_field_destroy (field); rec_parser_destroy (parser); /* str = "foo:"; stm = fmemopen (str, strlen (str), "r"); fail_if (stm == NULL); parser = rec_parser_new (stm, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_field (parser, &field)); rec_parser_destroy (parser); fclose (stm); */ } END_TEST /*- * Test: rec_parse_field_invalid * Unit: rec_parse_field * Description: * + Try to parse invalid fields. */ START_TEST(rec_parse_field_invalid) { rec_parser_t parser; rec_field_t field; char *str; str = " "; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (rec_parse_field (parser, &field)); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parse_field (void) { TCase *tc = tcase_create ("rec_parse_field"); tcase_add_test (tc, rec_parse_field_nominal); tcase_add_test (tc, rec_parse_field_invalid); return tc; } /* End of rec-parse-field.c */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-parser/tsuite-rec-parser.c�������������������������������������������������0000644�0000000�0000000�00000004775�14226563465�017427� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: tsuite-rec-parser.c * Date: Sat Nov 13 15:20:44 2010 * * GNU recutils - rec_parser test suite * */ /* Copyright (C) 2009-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> extern TCase *test_rec_parser_new (void); extern TCase *test_rec_parser_new_str (void); extern TCase *test_rec_parser_new_mem (void); extern TCase *test_rec_parser_destroy (void); extern TCase *test_rec_parse_field_name_str (void); extern TCase *test_rec_parse_field_name (void); extern TCase *test_rec_parse_field (void); extern TCase *test_rec_parse_record (void); extern TCase *test_rec_parse_record_str (void); extern TCase *test_rec_parse_rset (void); extern TCase *test_rec_parse_db (void); extern TCase *test_rec_parser_eof (void); extern TCase *test_rec_parser_error (void); extern TCase *test_rec_parser_reset (void); extern TCase *test_rec_parser_perror (void); extern TCase *test_rec_parser_seek_mem (void); Suite * tsuite_rec_parser () { Suite *s; s = suite_create ("rec-parser"); suite_add_tcase (s, test_rec_parser_new ()); suite_add_tcase (s, test_rec_parser_new_str ()); suite_add_tcase (s, test_rec_parser_new_mem ()); suite_add_tcase (s, test_rec_parser_destroy ()); suite_add_tcase (s, test_rec_parse_field_name_str ()); suite_add_tcase (s, test_rec_parse_field_name ()); suite_add_tcase (s, test_rec_parse_field ()); suite_add_tcase (s, test_rec_parse_record ()); suite_add_tcase (s, test_rec_parse_record_str ()); suite_add_tcase (s, test_rec_parse_rset ()); suite_add_tcase (s, test_rec_parse_db ()); suite_add_tcase (s, test_rec_parser_eof ()); suite_add_tcase (s, test_rec_parser_error ()); suite_add_tcase (s, test_rec_parser_reset ()); suite_add_tcase (s, test_rec_parser_perror ()); suite_add_tcase (s, test_rec_parser_seek_mem ()); return s; } /* End of tsuite-rec-parser.c */ ���recutils-1.9/torture/rec-parser/rec-parser-perror.c�������������������������������������������������0000644�0000000�0000000�00000003316�14226563465�017411� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parser-perror.c * Date: Sat Nov 13 22:37:26 2010 * * GNU recutils - rec_parser_perror unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> #include <rec.h> /*- * Test: rec_parser_perror_nominal * Unit: rec_parser_perror * Description: * + Print the error message associated with a failed * + parsing. */ START_TEST(rec_parser_perror_nominal) { rec_parser_t parser; rec_field_t field; char *str; str = "invalid field"; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (rec_parser_error (parser)); fail_if (rec_parse_field (parser, &field)); fail_if (!rec_parser_error (parser)); rec_parser_perror (parser, "expected error while parsing: "); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parser_perror (void) { TCase *tc = tcase_create ("rec_parser_perror"); tcase_add_test (tc, rec_parser_perror_nominal); return tc; } /* End of rec-parser-perror.c */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-parser/rec-parse-field-name-str.c������������������������������������������0000644�0000000�0000000�00000004720�14226563465�020525� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parse-field-name-str.c * Date: Sat Nov 13 15:42:21 2010 * * GNU recutils - rec_parse_field_name_str unit tests. * */ /* Copyright (C) 2009-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_parse_field_name_str_nominal * Unit: rec_parse_field_name_str * Description: * + Parse valid field names. */ START_TEST(rec_parse_field_name_str_nominal) { char *fname; fname = rec_parse_field_name_str ("foo"); fail_if (fname == NULL); fail_if (strcmp (fname, "foo") != 0); free (fname); fname = rec_parse_field_name_str ("foo:"); fail_if (fname == NULL); fail_if (strcmp (fname, "foo") != 0); free (fname); } END_TEST /*- * Test: rec_parse_field_name_str_invalid * Unit: rec_parse_field_name_str * Description: * + Try to parse invalid field names. */ START_TEST(rec_parse_field_name_str_invalid) { char *fname; fname = rec_parse_field_name_str (""); fail_if (fname != NULL); fname = rec_parse_field_name_str ("fo!o"); fail_if (fname != NULL); fname = rec_parse_field_name_str ("foo::"); fail_if (fname != NULL); fname = rec_parse_field_name_str (":foo"); fail_if (fname != NULL); fname = rec_parse_field_name_str ("foobar baz"); fail_if (fname != NULL); fname = rec_parse_field_name_str ("foo:bar:baz"); fail_if (fname != NULL); fname = rec_parse_field_name_str ("foo:baz!!#"); fail_if (fname != NULL); } END_TEST /* * Test creation function */ TCase * test_rec_parse_field_name_str (void) { TCase *tc = tcase_create ("rec_parse_field_name_str"); tcase_add_test (tc, rec_parse_field_name_str_nominal); tcase_add_test (tc, rec_parse_field_name_str_invalid); return tc; } /* rec-parse-field-name-str.c */ ������������������������������������������������recutils-1.9/torture/rec-parser/rec-parse-record-str.c����������������������������������������������0000644�0000000�0000000�00000004406�14226563465�020003� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parse-record-str.c * Date: Sat Nov 13 20:16:11 2010 * * GNU recutils - rec_parse_record_str unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_parse_record_str_nominal * Unit: rec_parse_record_str * Description: * + Parse valid records from strings. */ START_TEST(rec_parse_record_str_nominal) { rec_record_t record; rec_field_t field; char *fname; record = rec_parse_record_str ("foo: bar"); fail_if (record == NULL); fname = rec_parse_field_name_str ("foo"); fail_if (fname == NULL); field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 0); fail_if (strcmp (rec_field_value (field), "bar") != 0); fail_if (!rec_field_name_equal_p (fname, rec_field_name (field))); free (fname); rec_record_destroy (record); } END_TEST /*- * Test: rec_parse_record_str_invalid * Unit: rec_parse_record_str * Description: * + Try to parse invalid records from strings. */ START_TEST(rec_parse_record_str_invalid) { rec_record_t record; record = rec_parse_record_str (""); fail_if (record != NULL); record = rec_parse_record_str (" "); fail_if (record != NULL); } END_TEST /* * Test creation function. */ TCase * test_rec_parse_record_str (void) { TCase *tc = tcase_create ("rec_parse_record_str"); tcase_add_test (tc, rec_parse_record_str_nominal); tcase_add_test (tc, rec_parse_record_str_invalid); return tc; } /* End of rec-parse-record-str.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-parser/rec-parser-new-mem.c������������������������������������������������0000644�0000000�0000000�00000003502�14226563465�017442� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parser-new-mem.c * Date: Fri May 25 11:14:05 2012 * * GNU recutils - rec_parser_new_mem unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* Copyright (C) 2012-2015 MichaÅ‚ MasÅ‚owski */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /* Based on rec_parse_rset unit tests. */ /*- * Test: rec_parser_new_mem_nominal * Unit: rec_parser_new_mem * Description: * + Parse a valid truncated record set. */ START_TEST(rec_parser_new_mem_nominal) { rec_parser_t parser; rec_rset_t rset; char *str; char *short_str; str = "foo1: bar1\n\nfoo2: bar2\n\nfoo3: bar3"; short_str = "foo1: bar1\n\nfoo2: bar2"; parser = rec_parser_new_mem (str, strlen(short_str), "dummy"); fail_if (!rec_parse_rset (parser, &rset)); fail_if (rec_rset_num_records (rset) != 2); rec_rset_destroy (rset); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parser_new_mem (void) { TCase *tc = tcase_create ("rec_parser_new_mem"); tcase_add_test (tc, rec_parser_new_mem_nominal); return tc; } /* End of rec-parser-new-mem.c */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-parser/rec-parser-destroy.c������������������������������������������������0000644�0000000�0000000�00000002735�14226563465�017575� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parser-destroy.c * Date: Sat Nov 13 15:29:18 2010 * * GNU recutils - rec_parser_destroy unit tests. * */ /* Copyright (C) 2009-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_parser_destroy_nominal * Unit: rec_parser_destroy * Description: * + Destroy a rec parser. */ START_TEST(rec_parser_destroy_nominal) { rec_parser_t parser; parser = rec_parser_new (stdin, "stdin"); fail_if (parser == NULL); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parser_destroy (void) { TCase *tc = tcase_create ("rec_parser_destroy"); tcase_add_test (tc, rec_parser_destroy_nominal); return tc; } /* End of rec-parser-destroy.c */ �����������������������������������recutils-1.9/torture/rec-parser/rec-parser-seek-mem.c�����������������������������������������������0000644�0000000�0000000�00000006037�14226563465�017606� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parser-seek-mem.c * Date: Fri May 25 15:13:53 2012 * * GNU recutils - rec_parser_seek unit tests using memory buffers. * */ /* Copyright (C) 2012-2022 MichaÅ‚ MasÅ‚owski */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_parser_seek_mem_tell * Unit: rec_parser_seek_mem * Description: * + Check that tell gives the same position as seeked to. */ START_TEST(rec_parser_seek_mem_tell) { rec_parser_t parser; char *str; size_t position; str = "foo1: bar1\n\nfoo2: bar2\n\nfoo3: bar3"; position = strlen ("foo1: bar\n\n"); parser = rec_parser_new_mem (str, strlen (str), "dummy"); fail_if (!parser); fail_if (rec_parser_tell (parser) != 0); fail_if (!rec_parser_seek (parser, 3, position)); fail_if (rec_parser_tell (parser) != position); rec_parser_destroy (parser); } END_TEST /*- * Test: rec_parser_seek_mem_skip * Unit: rec_parser_seek_mem * Description: * + Check that seek might skip a part of a record. */ START_TEST(rec_parser_seek_mem_skip) { rec_parser_t parser; rec_record_t record; char *str; size_t position; str = "foo1: bar1\nfoo2: bar2\n\nfoo3: bar3"; position = strlen ("foo1: bar1\n"); parser = rec_parser_new_mem (str, strlen (str), "dummy"); fail_if (!parser); fail_if (!rec_parser_seek (parser, 2, position)); fail_if (!rec_parse_record (parser, &record)); fail_if (rec_record_num_fields (record) != 1); fail_if (rec_record_location (record) != 2); rec_record_destroy (record); rec_parser_destroy (parser); } END_TEST /*- * Test: rec_parser_seek_mem_fail * Unit: rec_parser_seek_mem * Description: * + Check that seek outside the file fails. */ START_TEST(rec_parser_seek_mem_fail) { rec_parser_t parser; char *str; size_t position; str = "foo1: bar1\n\nfoo2: bar2\n\nfoo3: bar3"; position = strlen (str) + 100; parser = rec_parser_new_mem (str, strlen (str), "dummy"); fail_if (!parser); fail_if (rec_parser_seek (parser, 20, position)); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parser_seek_mem (void) { TCase *tc = tcase_create ("rec_parser_seek_mem"); tcase_add_test (tc, rec_parser_seek_mem_tell); tcase_add_test (tc, rec_parser_seek_mem_skip); tcase_add_test (tc, rec_parser_seek_mem_fail); return tc; } /* End of rec-parser-seek-mem.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-parser/rec-parse-field-name.c����������������������������������������������0000644�0000000�0000000�00000006007�14226563465�017717� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parse-field-name.c * Date: Sat Nov 13 16:31:54 2010 * * GNU recutils - rec_parse_field_name unit tests. * */ /* Copyright (C) 2009-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <stdlib.h> #include <check.h> #include <rec.h> /*- * Test: rec_parse_field_name_nominal * Unit: rec_parse_field_name * Description: * + Parse valid field names. */ START_TEST(rec_parse_field_name_nominal) { rec_parser_t parser; char *fname; char *str; str = "foo:"; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_field_name (parser, &fname)); fail_if (strcmp (fname, "foo") != 0); free (fname); rec_parser_destroy (parser); str = "%foo:"; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_field_name (parser, &fname)); fail_if (strcmp (fname, "%foo") != 0); free (fname); rec_parser_destroy (parser); } END_TEST /*- * Test: rec_parse_field_name_invalid * Unit: rec_parse_field_name * Description: * + Try to parse invalid field names. */ START_TEST(rec_parse_field_name_invalid) { rec_parser_t parser; char *fname; char *str; str = " "; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (rec_parse_field_name (parser, &fname)); rec_parser_destroy (parser); str = "foo"; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (rec_parse_field_name (parser, &fname)); rec_parser_destroy (parser); str = ":foo"; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (rec_parse_field_name (parser, &fname)); rec_parser_destroy (parser); str = "fo!o"; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (rec_parse_field_name (parser, &fname)); rec_parser_destroy (parser); str = "%%foo"; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (rec_parse_field_name (parser, &fname)); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parse_field_name (void) { TCase *tc = tcase_create ("rec_parse_field_name"); tcase_add_test (tc, rec_parse_field_name_nominal); tcase_add_test (tc, rec_parse_field_name_invalid); return tc; } /* End of rec-parse-field-name.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-parser/rec-parse-record.c��������������������������������������������������0000644�0000000�0000000�00000010417�14226563465�017174� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parse-record.c * Date: Sat Nov 13 19:17:40 2010 * * GNU recutils - rec_parse_record unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_parse_record_nominal * Unit: rec_parse_record * Description: * + Parse valid records. */ START_TEST(rec_parse_record_nominal) { rec_parser_t parser; rec_record_t record; rec_field_t field; char *fname; char *str; str = "foo: bar"; fname = rec_parse_field_name_str ("foo"); parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_record (parser, &record)); field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 0); fail_if (strcmp (rec_field_value (field), "bar") != 0); fail_if (!rec_field_name_equal_p (fname, rec_field_name (field))); rec_record_destroy (record); rec_parser_destroy (parser); free (fname); str = "foo: bar\nfoo2: bar2"; fname = rec_parse_field_name_str ("foo"); parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_record (parser, &record)); field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 0); fail_if (strcmp (rec_field_value (field), "bar") != 0); fail_if (!rec_field_name_equal_p (fname, rec_field_name (field))); free (fname); fname = rec_parse_field_name_str ("foo2"); field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 1); fail_if (strcmp (rec_field_value (field), "bar2") != 0); fail_if (!rec_field_name_equal_p (fname, rec_field_name (field))); free (fname); rec_record_destroy (record); rec_parser_destroy (parser); str = "foo: bar\nfoo2:\nfoo3: bar3"; fname = rec_parse_field_name_str ("foo"); parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (!rec_parse_record (parser, &record)); field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 0); fail_if (strcmp (rec_field_value (field), "bar") != 0); fail_if (!rec_field_name_equal_p (fname, rec_field_name (field))); free (fname); fname = rec_parse_field_name_str ("foo2"); field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 1); fail_if (strcmp (rec_field_value (field), "") != 0); fail_if (!rec_field_name_equal_p (fname, rec_field_name (field))); free (fname); fname = rec_parse_field_name_str ("foo3"); field = (rec_field_t) rec_mset_get_at (rec_record_mset (record), MSET_FIELD, 2); fail_if (strcmp (rec_field_value (field), "bar3") != 0); fail_if (!rec_field_name_equal_p (fname, rec_field_name (field))); free (fname); rec_record_destroy (record); rec_parser_destroy (parser); } END_TEST /*- * Test: rec_parse_record_invalid * Unit: rec_parse_record * Description: * + Try to parse invalid records. */ START_TEST(rec_parse_record_invalid) { rec_parser_t parser; rec_record_t record; char *str; str = " "; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (rec_parse_record (parser, &record)); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parse_record (void) { TCase *tc = tcase_create ("rec_parse_record"); tcase_add_test (tc, rec_parse_record_nominal); tcase_add_test (tc, rec_parse_record_invalid); return tc; } /* End of rec-parse-record.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/torture/rec-parser/rec-parser-new-str.c������������������������������������������������0000644�0000000�0000000�00000002775�14226563465�017507� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parser-new-str.c * Date: Sat Nov 13 15:23:03 2010 * * GNU recutils - rec_parser_new_str unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_parser_new_str_nominal * Unit: rec_parser_new_str * Description: * + Create a rec parser. */ START_TEST(rec_parser_new_str_nominal) { rec_parser_t parser; char *buffer = "foo: bar"; parser = rec_parser_new_str (buffer, "buffer"); fail_if (parser == NULL); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parser_new_str (void) { TCase *tc = tcase_create ("rec_parser_new_str"); tcase_add_test (tc, rec_parser_new_str_nominal); return tc; } /* End of rec-parser-new-str.c */ ���recutils-1.9/torture/rec-parser/rec-parser-new.c����������������������������������������������������0000644�0000000�0000000�00000002666�14226563465�016700� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parser-new.c * Date: Sat Nov 13 15:23:03 2010 * * GNU recutils - rec_parser_new unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdio.h> #include <check.h> #include <rec.h> /*- * Test: rec_parser_new_nominal * Unit: rec_parser_new * Description: * + Create a rec parser. */ START_TEST(rec_parser_new_nominal) { rec_parser_t parser; parser = rec_parser_new (stdin, "stdin"); fail_if (parser == NULL); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parser_new (void) { TCase *tc = tcase_create ("rec_parser_new"); tcase_add_test (tc, rec_parser_new_nominal); return tc; } /* End of rec-parser-new.c */ ��������������������������������������������������������������������������recutils-1.9/torture/rec-parser/rec-parser-reset.c��������������������������������������������������0000644�0000000�0000000�00000003235�14226563465�017222� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-parser-reset.c * Date: Sat Nov 13 22:34:36 2010 * * GNU recutils - rec_parser_reset unit tests. * */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <check.h> #include <rec.h> /*- * Test: rec_parser_reset_nominal * Unit: rec_parser_reset * Description: * + Reset a rec parser. */ START_TEST(rec_parser_reset_nominal) { rec_parser_t parser; rec_field_t field; char *str; str = "invalid field"; parser = rec_parser_new_str (str, "dummy"); fail_if (parser == NULL); fail_if (rec_parser_error (parser)); fail_if (rec_parse_field (parser, &field)); fail_if (!rec_parser_error (parser)); rec_parser_reset (parser); fail_if (rec_parser_error (parser)); rec_parser_destroy (parser); } END_TEST /* * Test creation function */ TCase * test_rec_parser_reset (void) { TCase *tc = tcase_create ("rec_parser_reset"); tcase_add_test (tc, rec_parser_reset_nominal); return tc; } /* End of rec-parser-reset.c */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/README���������������������������������������������������������������������������������0000644�0000000�0000000�00000005011�14226563465�010776� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������This is the README file for the GNU recutils distribution. The GNU recutils are a set of libraries and utilities supporting the Rec format: a human-readable, text-based format to store little to medium sized databases. Copyright (C) 1992, 1993, 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2004, 2005, 2006, 2010, 2020, 2022 Free Software Foundation, Inc. Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2020, 2022 Jose E. Marchesi Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. See the files ./INSTALL* for building and installation instructions. Primary distribution point: ftp://ftp.gnu.org/gnu/recutils/ automatic redirection: http://ftpmirror.gnu.org/recutils list of mirrors for manual selection: http://www.gnu.org/prep/ftp.html Home page: http://www.gnu.org/software/recutils/ Mailing list: bug-recutils@gnu.org - please use this list for all discussion: bug reports, enhancements, etc. - archived at: http://lists.gnu.org/pipermail/bug-recutils - anyone is welcome to join the list; to do so, visit http://lists.gnu.org/mailman/listinfo/bug-recutils - there is no corresponding newsgroup. Bug reports: Please include enough information for the maintainers to reproduce the problem. Gnerally speaking, that means: - the contents of any input files necessary to reproduce the bug and command line invocations of the program(s) involved (crucial!). - a description of the problem and any samples of the erroneous output. - the version number of the program(s) involved (use --version). - hardware, operating system, and compiler versions (uname -a). - unusual options you gave to configure, if any (see config.status). - anything else that you think would be helpful. Patches are most welcome; if possible, please make them with diff -c and include ChangeLog entries. See README-dev for information on the development environment -- any interested parties are welcome. If you're a programmer and wish to contribute, this should get you started. If you're not a programmer, your help in writing test cases, checking the documentation against the implementation, translating the program strings to other languages, etc., would still be very much appreciated. GNU Recutils is free software. See the file COPYING for copying conditions. For any copyright year range specified as YYYY-ZZZZ in this package note that the range specifies every single year in that closed interval. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/COPYING��������������������������������������������������������������������������������0000644�0000000�0000000�00000104513�13253164723�011151� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������ GNU GENERAL PUBLIC LICENSE Version 3, 29 June 2007 Copyright (C) 2007 Free Software Foundation, Inc. <http://fsf.org/> Everyone is permitted to copy and distribute verbatim copies of this license document, but changing it is not allowed. Preamble The GNU General Public License is a free, copyleft license for software and other kinds of works. The licenses for most software and other practical works are designed to take away your freedom to share and change the works. By contrast, the GNU General Public License is intended to guarantee your freedom to share and change all versions of a program--to make sure it remains free software for all its users. We, the Free Software Foundation, use the GNU General Public License for most of our software; it applies also to any other work released this way by its authors. You can apply it to your programs, too. When we speak of free software, we are referring to freedom, not price. Our General Public Licenses are designed to make sure that you have the freedom to distribute copies of free software (and charge for them if you wish), that you receive source code or can get it if you want it, that you can change the software or use pieces of it in new free programs, and that you know you can do these things. To protect your rights, we need to prevent others from denying you these rights or asking you to surrender the rights. Therefore, you have certain responsibilities if you distribute copies of the software, or if you modify it: responsibilities to respect the freedom of others. For example, if you distribute copies of such a program, whether gratis or for a fee, you must pass on to the recipients the same freedoms that you received. You must make sure that they, too, receive or can get the source code. And you must show them these terms so they know their rights. Developers that use the GNU GPL protect your rights with two steps: (1) assert copyright on the software, and (2) offer you this License giving you legal permission to copy, distribute and/or modify it. For the developers' and authors' protection, the GPL clearly explains that there is no warranty for this free software. For both users' and authors' sake, the GPL requires that modified versions be marked as changed, so that their problems will not be attributed erroneously to authors of previous versions. Some devices are designed to deny users access to install or run modified versions of the software inside them, although the manufacturer can do so. This is fundamentally incompatible with the aim of protecting users' freedom to change the software. The systematic pattern of such abuse occurs in the area of products for individuals to use, which is precisely where it is most unacceptable. Therefore, we have designed this version of the GPL to prohibit the practice for those products. If such problems arise substantially in other domains, we stand ready to extend this provision to those domains in future versions of the GPL, as needed to protect the freedom of users. Finally, every program is threatened constantly by software patents. States should not allow patents to restrict development and use of software on general-purpose computers, but in those that do, we wish to avoid the special danger that patents applied to a free program could make it effectively proprietary. To prevent this, the GPL assures that patents cannot be used to render the program non-free. The precise terms and conditions for copying, distribution and modification follow. TERMS AND CONDITIONS 0. Definitions. "This License" refers to version 3 of the GNU General Public License. "Copyright" also means copyright-like laws that apply to other kinds of works, such as semiconductor masks. "The Program" refers to any copyrightable work licensed under this License. Each licensee is addressed as "you". "Licensees" and "recipients" may be individuals or organizations. To "modify" a work means to copy from or adapt all or part of the work in a fashion requiring copyright permission, other than the making of an exact copy. The resulting work is called a "modified version" of the earlier work or a work "based on" the earlier work. A "covered work" means either the unmodified Program or a work based on the Program. To "propagate" a work means to do anything with it that, without permission, would make you directly or secondarily liable for infringement under applicable copyright law, except executing it on a computer or modifying a private copy. Propagation includes copying, distribution (with or without modification), making available to the public, and in some countries other activities as well. To "convey" a work means any kind of propagation that enables other parties to make or receive copies. Mere interaction with a user through a computer network, with no transfer of a copy, is not conveying. An interactive user interface displays "Appropriate Legal Notices" to the extent that it includes a convenient and prominently visible feature that (1) displays an appropriate copyright notice, and (2) tells the user that there is no warranty for the work (except to the extent that warranties are provided), that licensees may convey the work under this License, and how to view a copy of this License. If the interface presents a list of user commands or options, such as a menu, a prominent item in the list meets this criterion. 1. Source Code. The "source code" for a work means the preferred form of the work for making modifications to it. "Object code" means any non-source form of a work. A "Standard Interface" means an interface that either is an official standard defined by a recognized standards body, or, in the case of interfaces specified for a particular programming language, one that is widely used among developers working in that language. The "System Libraries" of an executable work include anything, other than the work as a whole, that (a) is included in the normal form of packaging a Major Component, but which is not part of that Major Component, and (b) serves only to enable use of the work with that Major Component, or to implement a Standard Interface for which an implementation is available to the public in source code form. A "Major Component", in this context, means a major essential component (kernel, window system, and so on) of the specific operating system (if any) on which the executable work runs, or a compiler used to produce the work, or an object code interpreter used to run it. The "Corresponding Source" for a work in object code form means all the source code needed to generate, install, and (for an executable work) run the object code and to modify the work, including scripts to control those activities. However, it does not include the work's System Libraries, or general-purpose tools or generally available free programs which are used unmodified in performing those activities but which are not part of the work. For example, Corresponding Source includes interface definition files associated with source files for the work, and the source code for shared libraries and dynamically linked subprograms that the work is specifically designed to require, such as by intimate data communication or control flow between those subprograms and other parts of the work. The Corresponding Source need not include anything that users can regenerate automatically from other parts of the Corresponding Source. The Corresponding Source for a work in source code form is that same work. 2. Basic Permissions. All rights granted under this License are granted for the term of copyright on the Program, and are irrevocable provided the stated conditions are met. This License explicitly affirms your unlimited permission to run the unmodified Program. The output from running a covered work is covered by this License only if the output, given its content, constitutes a covered work. This License acknowledges your rights of fair use or other equivalent, as provided by copyright law. You may make, run and propagate covered works that you do not convey, without conditions so long as your license otherwise remains in force. You may convey covered works to others for the sole purpose of having them make modifications exclusively for you, or provide you with facilities for running those works, provided that you comply with the terms of this License in conveying all material for which you do not control copyright. Those thus making or running the covered works for you must do so exclusively on your behalf, under your direction and control, on terms that prohibit them from making any copies of your copyrighted material outside their relationship with you. Conveying under any other circumstances is permitted solely under the conditions stated below. Sublicensing is not allowed; section 10 makes it unnecessary. 3. Protecting Users' Legal Rights From Anti-Circumvention Law. No covered work shall be deemed part of an effective technological measure under any applicable law fulfilling obligations under article 11 of the WIPO copyright treaty adopted on 20 December 1996, or similar laws prohibiting or restricting circumvention of such measures. When you convey a covered work, you waive any legal power to forbid circumvention of technological measures to the extent such circumvention is effected by exercising rights under this License with respect to the covered work, and you disclaim any intention to limit operation or modification of the work as a means of enforcing, against the work's users, your or third parties' legal rights to forbid circumvention of technological measures. 4. Conveying Verbatim Copies. You may convey verbatim copies of the Program's source code as you receive it, in any medium, provided that you conspicuously and appropriately publish on each copy an appropriate copyright notice; keep intact all notices stating that this License and any non-permissive terms added in accord with section 7 apply to the code; keep intact all notices of the absence of any warranty; and give all recipients a copy of this License along with the Program. You may charge any price or no price for each copy that you convey, and you may offer support or warranty protection for a fee. 5. Conveying Modified Source Versions. You may convey a work based on the Program, or the modifications to produce it from the Program, in the form of source code under the terms of section 4, provided that you also meet all of these conditions: a) The work must carry prominent notices stating that you modified it, and giving a relevant date. b) The work must carry prominent notices stating that it is released under this License and any conditions added under section 7. This requirement modifies the requirement in section 4 to "keep intact all notices". c) You must license the entire work, as a whole, under this License to anyone who comes into possession of a copy. This License will therefore apply, along with any applicable section 7 additional terms, to the whole of the work, and all its parts, regardless of how they are packaged. This License gives no permission to license the work in any other way, but it does not invalidate such permission if you have separately received it. d) If the work has interactive user interfaces, each must display Appropriate Legal Notices; however, if the Program has interactive interfaces that do not display Appropriate Legal Notices, your work need not make them do so. A compilation of a covered work with other separate and independent works, which are not by their nature extensions of the covered work, and which are not combined with it such as to form a larger program, in or on a volume of a storage or distribution medium, is called an "aggregate" if the compilation and its resulting copyright are not used to limit the access or legal rights of the compilation's users beyond what the individual works permit. Inclusion of a covered work in an aggregate does not cause this License to apply to the other parts of the aggregate. 6. Conveying Non-Source Forms. You may convey a covered work in object code form under the terms of sections 4 and 5, provided that you also convey the machine-readable Corresponding Source under the terms of this License, in one of these ways: a) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by the Corresponding Source fixed on a durable physical medium customarily used for software interchange. b) Convey the object code in, or embodied in, a physical product (including a physical distribution medium), accompanied by a written offer, valid for at least three years and valid for as long as you offer spare parts or customer support for that product model, to give anyone who possesses the object code either (1) a copy of the Corresponding Source for all the software in the product that is covered by this License, on a durable physical medium customarily used for software interchange, for a price no more than your reasonable cost of physically performing this conveying of source, or (2) access to copy the Corresponding Source from a network server at no charge. c) Convey individual copies of the object code with a copy of the written offer to provide the Corresponding Source. This alternative is allowed only occasionally and noncommercially, and only if you received the object code with such an offer, in accord with subsection 6b. d) Convey the object code by offering access from a designated place (gratis or for a charge), and offer equivalent access to the Corresponding Source in the same way through the same place at no further charge. You need not require recipients to copy the Corresponding Source along with the object code. If the place to copy the object code is a network server, the Corresponding Source may be on a different server (operated by you or a third party) that supports equivalent copying facilities, provided you maintain clear directions next to the object code saying where to find the Corresponding Source. Regardless of what server hosts the Corresponding Source, you remain obligated to ensure that it is available for as long as needed to satisfy these requirements. e) Convey the object code using peer-to-peer transmission, provided you inform other peers where the object code and Corresponding Source of the work are being offered to the general public at no charge under subsection 6d. A separable portion of the object code, whose source code is excluded from the Corresponding Source as a System Library, need not be included in conveying the object code work. A "User Product" is either (1) a "consumer product", which means any tangible personal property which is normally used for personal, family, or household purposes, or (2) anything designed or sold for incorporation into a dwelling. In determining whether a product is a consumer product, doubtful cases shall be resolved in favor of coverage. For a particular product received by a particular user, "normally used" refers to a typical or common use of that class of product, regardless of the status of the particular user or of the way in which the particular user actually uses, or expects or is expected to use, the product. A product is a consumer product regardless of whether the product has substantial commercial, industrial or non-consumer uses, unless such uses represent the only significant mode of use of the product. "Installation Information" for a User Product means any methods, procedures, authorization keys, or other information required to install and execute modified versions of a covered work in that User Product from a modified version of its Corresponding Source. The information must suffice to ensure that the continued functioning of the modified object code is in no case prevented or interfered with solely because modification has been made. If you convey an object code work under this section in, or with, or specifically for use in, a User Product, and the conveying occurs as part of a transaction in which the right of possession and use of the User Product is transferred to the recipient in perpetuity or for a fixed term (regardless of how the transaction is characterized), the Corresponding Source conveyed under this section must be accompanied by the Installation Information. But this requirement does not apply if neither you nor any third party retains the ability to install modified object code on the User Product (for example, the work has been installed in ROM). The requirement to provide Installation Information does not include a requirement to continue to provide support service, warranty, or updates for a work that has been modified or installed by the recipient, or for the User Product in which it has been modified or installed. Access to a network may be denied when the modification itself materially and adversely affects the operation of the network or violates the rules and protocols for communication across the network. Corresponding Source conveyed, and Installation Information provided, in accord with this section must be in a format that is publicly documented (and with an implementation available to the public in source code form), and must require no special password or key for unpacking, reading or copying. 7. Additional Terms. "Additional permissions" are terms that supplement the terms of this License by making exceptions from one or more of its conditions. Additional permissions that are applicable to the entire Program shall be treated as though they were included in this License, to the extent that they are valid under applicable law. If additional permissions apply only to part of the Program, that part may be used separately under those permissions, but the entire Program remains governed by this License without regard to the additional permissions. When you convey a copy of a covered work, you may at your option remove any additional permissions from that copy, or from any part of it. (Additional permissions may be written to require their own removal in certain cases when you modify the work.) You may place additional permissions on material, added by you to a covered work, for which you have or can give appropriate copyright permission. Notwithstanding any other provision of this License, for material you add to a covered work, you may (if authorized by the copyright holders of that material) supplement the terms of this License with terms: a) Disclaiming warranty or limiting liability differently from the terms of sections 15 and 16 of this License; or b) Requiring preservation of specified reasonable legal notices or author attributions in that material or in the Appropriate Legal Notices displayed by works containing it; or c) Prohibiting misrepresentation of the origin of that material, or requiring that modified versions of such material be marked in reasonable ways as different from the original version; or d) Limiting the use for publicity purposes of names of licensors or authors of the material; or e) Declining to grant rights under trademark law for use of some trade names, trademarks, or service marks; or f) Requiring indemnification of licensors and authors of that material by anyone who conveys the material (or modified versions of it) with contractual assumptions of liability to the recipient, for any liability that these contractual assumptions directly impose on those licensors and authors. All other non-permissive additional terms are considered "further restrictions" within the meaning of section 10. If the Program as you received it, or any part of it, contains a notice stating that it is governed by this License along with a term that is a further restriction, you may remove that term. If a license document contains a further restriction but permits relicensing or conveying under this License, you may add to a covered work material governed by the terms of that license document, provided that the further restriction does not survive such relicensing or conveying. If you add terms to a covered work in accord with this section, you must place, in the relevant source files, a statement of the additional terms that apply to those files, or a notice indicating where to find the applicable terms. Additional terms, permissive or non-permissive, may be stated in the form of a separately written license, or stated as exceptions; the above requirements apply either way. 8. Termination. You may not propagate or modify a covered work except as expressly provided under this License. Any attempt otherwise to propagate or modify it is void, and will automatically terminate your rights under this License (including any patent licenses granted under the third paragraph of section 11). However, if you cease all violation of this License, then your license from a particular copyright holder is reinstated (a) provisionally, unless and until the copyright holder explicitly and finally terminates your license, and (b) permanently, if the copyright holder fails to notify you of the violation by some reasonable means prior to 60 days after the cessation. Moreover, your license from a particular copyright holder is reinstated permanently if the copyright holder notifies you of the violation by some reasonable means, this is the first time you have received notice of violation of this License (for any work) from that copyright holder, and you cure the violation prior to 30 days after your receipt of the notice. Termination of your rights under this section does not terminate the licenses of parties who have received copies or rights from you under this License. If your rights have been terminated and not permanently reinstated, you do not qualify to receive new licenses for the same material under section 10. 9. Acceptance Not Required for Having Copies. You are not required to accept this License in order to receive or run a copy of the Program. Ancillary propagation of a covered work occurring solely as a consequence of using peer-to-peer transmission to receive a copy likewise does not require acceptance. However, nothing other than this License grants you permission to propagate or modify any covered work. These actions infringe copyright if you do not accept this License. Therefore, by modifying or propagating a covered work, you indicate your acceptance of this License to do so. 10. Automatic Licensing of Downstream Recipients. Each time you convey a covered work, the recipient automatically receives a license from the original licensors, to run, modify and propagate that work, subject to this License. You are not responsible for enforcing compliance by third parties with this License. An "entity transaction" is a transaction transferring control of an organization, or substantially all assets of one, or subdividing an organization, or merging organizations. If propagation of a covered work results from an entity transaction, each party to that transaction who receives a copy of the work also receives whatever licenses to the work the party's predecessor in interest had or could give under the previous paragraph, plus a right to possession of the Corresponding Source of the work from the predecessor in interest, if the predecessor has it or can get it with reasonable efforts. You may not impose any further restrictions on the exercise of the rights granted or affirmed under this License. For example, you may not impose a license fee, royalty, or other charge for exercise of rights granted under this License, and you may not initiate litigation (including a cross-claim or counterclaim in a lawsuit) alleging that any patent claim is infringed by making, using, selling, offering for sale, or importing the Program or any portion of it. 11. Patents. A "contributor" is a copyright holder who authorizes use under this License of the Program or a work on which the Program is based. The work thus licensed is called the contributor's "contributor version". A contributor's "essential patent claims" are all patent claims owned or controlled by the contributor, whether already acquired or hereafter acquired, that would be infringed by some manner, permitted by this License, of making, using, or selling its contributor version, but do not include claims that would be infringed only as a consequence of further modification of the contributor version. For purposes of this definition, "control" includes the right to grant patent sublicenses in a manner consistent with the requirements of this License. Each contributor grants you a non-exclusive, worldwide, royalty-free patent license under the contributor's essential patent claims, to make, use, sell, offer for sale, import and otherwise run, modify and propagate the contents of its contributor version. In the following three paragraphs, a "patent license" is any express agreement or commitment, however denominated, not to enforce a patent (such as an express permission to practice a patent or covenant not to sue for patent infringement). To "grant" such a patent license to a party means to make such an agreement or commitment not to enforce a patent against the party. If you convey a covered work, knowingly relying on a patent license, and the Corresponding Source of the work is not available for anyone to copy, free of charge and under the terms of this License, through a publicly available network server or other readily accessible means, then you must either (1) cause the Corresponding Source to be so available, or (2) arrange to deprive yourself of the benefit of the patent license for this particular work, or (3) arrange, in a manner consistent with the requirements of this License, to extend the patent license to downstream recipients. "Knowingly relying" means you have actual knowledge that, but for the patent license, your conveying the covered work in a country, or your recipient's use of the covered work in a country, would infringe one or more identifiable patents in that country that you have reason to believe are valid. If, pursuant to or in connection with a single transaction or arrangement, you convey, or propagate by procuring conveyance of, a covered work, and grant a patent license to some of the parties receiving the covered work authorizing them to use, propagate, modify or convey a specific copy of the covered work, then the patent license you grant is automatically extended to all recipients of the covered work and works based on it. A patent license is "discriminatory" if it does not include within the scope of its coverage, prohibits the exercise of, or is conditioned on the non-exercise of one or more of the rights that are specifically granted under this License. You may not convey a covered work if you are a party to an arrangement with a third party that is in the business of distributing software, under which you make payment to the third party based on the extent of your activity of conveying the work, and under which the third party grants, to any of the parties who would receive the covered work from you, a discriminatory patent license (a) in connection with copies of the covered work conveyed by you (or copies made from those copies), or (b) primarily for and in connection with specific products or compilations that contain the covered work, unless you entered into that arrangement, or that patent license was granted, prior to 28 March 2007. Nothing in this License shall be construed as excluding or limiting any implied license or other defenses to infringement that may otherwise be available to you under applicable patent law. 12. No Surrender of Others' Freedom. If conditions are imposed on you (whether by court order, agreement or otherwise) that contradict the conditions of this License, they do not excuse you from the conditions of this License. If you cannot convey a covered work so as to satisfy simultaneously your obligations under this License and any other pertinent obligations, then as a consequence you may not convey it at all. For example, if you agree to terms that obligate you to collect a royalty for further conveying from those to whom you convey the Program, the only way you could satisfy both those terms and this License would be to refrain entirely from conveying the Program. 13. Use with the GNU Affero General Public License. Notwithstanding any other provision of this License, you have permission to link or combine any covered work with a work licensed under version 3 of the GNU Affero General Public License into a single combined work, and to convey the resulting work. The terms of this License will continue to apply to the part which is the covered work, but the special requirements of the GNU Affero General Public License, section 13, concerning interaction through a network will apply to the combination as such. 14. Revised Versions of this License. The Free Software Foundation may publish revised and/or new versions of the GNU General Public License from time to time. Such new versions will be similar in spirit to the present version, but may differ in detail to address new problems or concerns. Each version is given a distinguishing version number. If the Program specifies that a certain numbered version of the GNU General Public License "or any later version" applies to it, you have the option of following the terms and conditions either of that numbered version or of any later version published by the Free Software Foundation. If the Program does not specify a version number of the GNU General Public License, you may choose any version ever published by the Free Software Foundation. If the Program specifies that a proxy can decide which future versions of the GNU General Public License can be used, that proxy's public statement of acceptance of a version permanently authorizes you to choose that version for the Program. Later license versions may give you additional or different permissions. However, no additional obligations are imposed on any author or copyright holder as a result of your choosing to follow a later version. 15. Disclaimer of Warranty. THERE IS NO WARRANTY FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES PROVIDE THE PROGRAM "AS IS" WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING, REPAIR OR CORRECTION. 16. Limitation of Liability. IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MODIFIES AND/OR CONVEYS THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES, INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE POSSIBILITY OF SUCH DAMAGES. 17. Interpretation of Sections 15 and 16. If the disclaimer of warranty and limitation of liability provided above cannot be given local legal effect according to their terms, reviewing courts shall apply local law that most closely approximates an absolute waiver of all civil liability in connection with the Program, unless a warranty or assumption of liability accompanies a copy of the Program in return for a fee. END OF TERMS AND CONDITIONS How to Apply These Terms to Your New Programs If you develop a new program, and you want it to be of the greatest possible use to the public, the best way to achieve this is to make it free software which everyone can redistribute and change under these terms. To do so, attach the following notices to the program. It is safest to attach them to the start of each source file to most effectively state the exclusion of warranty; and each file should have at least the "copyright" line and a pointer to where the full notice is found. <one line to give the program's name and a brief idea of what it does.> Copyright (C) <year> <name of author> This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. Also add information on how to contact you by electronic and paper mail. If the program does terminal interaction, make it output a short notice like this when it starts in an interactive mode: <program> Copyright (C) <year> <name of author> This program comes with ABSOLUTELY NO WARRANTY; for details type `show w'. This is free software, and you are welcome to redistribute it under certain conditions; type `show c' for details. The hypothetical commands `show w' and `show c' should show the appropriate parts of the General Public License. Of course, your program's commands might be different; for a GUI interface, you would use an "about box". You should also get your employer (if you work as a programmer) or school, if any, to sign a "copyright disclaimer" for the program, if necessary. For more information on this, and how to apply and follow the GNU GPL, see <http://www.gnu.org/licenses/>. The GNU General Public License does not permit incorporating your program into proprietary programs. If your program is a subroutine library, you may consider it more useful to permit linking proprietary applications with the library. If this is what you want to do, use the GNU Lesser General Public License instead of this License. But first, please read <http://www.gnu.org/philosophy/why-not-lgpl.html>. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/ABOUT-NLS������������������������������������������������������������������������������0000644�0000000�0000000�00000267474�13253176007�011363� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������1 Notes on the Free Translation Project *************************************** Free software is going international! The Free Translation Project is a way to get maintainers of free software, translators, and users all together, so that free software will gradually become able to speak many languages. A few packages already provide translations for their messages. If you found this 'ABOUT-NLS' file inside a distribution, you may assume that the distributed package does use GNU 'gettext' internally, itself available at your nearest GNU archive site. But you do _not_ need to install GNU 'gettext' prior to configuring, installing or using this package with messages translated. Installers will find here some useful hints. These notes also explain how users should proceed for getting the programs to use the available translations. They tell how people wanting to contribute and work on translations can contact the appropriate team. 1.1 INSTALL Matters =================== Some packages are "localizable" when properly installed; the programs they contain can be made to speak your own native language. Most such packages use GNU 'gettext'. Other packages have their own ways to internationalization, predating GNU 'gettext'. By default, this package will be installed to allow translation of messages. It will automatically detect whether the system already provides the GNU 'gettext' functions. Installers may use special options at configuration time for changing the default behaviour. The command: ./configure --disable-nls will _totally_ disable translation of messages. When you already have GNU 'gettext' installed on your system and run configure without an option for your new package, 'configure' will probably detect the previously built and installed 'libintl' library and will decide to use it. If not, you may have to to use the '--with-libintl-prefix' option to tell 'configure' where to look for it. Internationalized packages usually have many 'po/LL.po' files, where LL gives an ISO 639 two-letter code identifying the language. Unless translations have been forbidden at 'configure' time by using the '--disable-nls' switch, all available translations are installed together with the package. However, the environment variable 'LINGUAS' may be set, prior to configuration, to limit the installed set. 'LINGUAS' should then contain a space separated list of two-letter codes, stating which languages are allowed. 1.2 Using This Package ====================== As a user, if your language has been installed for this package, you only have to set the 'LANG' environment variable to the appropriate 'LL_CC' combination. If you happen to have the 'LC_ALL' or some other 'LC_xxx' environment variables set, you should unset them before setting 'LANG', otherwise the setting of 'LANG' will not have the desired effect. Here 'LL' is an ISO 639 two-letter language code, and 'CC' is an ISO 3166 two-letter country code. For example, let's suppose that you speak German and live in Germany. At the shell prompt, merely execute 'setenv LANG de_DE' (in 'csh'), 'export LANG; LANG=de_DE' (in 'sh') or 'export LANG=de_DE' (in 'bash'). This can be done from your '.login' or '.profile' file, once and for all. You might think that the country code specification is redundant. But in fact, some languages have dialects in different countries. For example, 'de_AT' is used for Austria, and 'pt_BR' for Brazil. The country code serves to distinguish the dialects. The locale naming convention of 'LL_CC', with 'LL' denoting the language and 'CC' denoting the country, is the one use on systems based on GNU libc. On other systems, some variations of this scheme are used, such as 'LL' or 'LL_CC.ENCODING'. You can get the list of locales supported by your system for your language by running the command 'locale -a | grep '^LL''. Not all programs have translations for all languages. By default, an English message is shown in place of a nonexistent translation. If you understand other languages, you can set up a priority list of languages. This is done through a different environment variable, called 'LANGUAGE'. GNU 'gettext' gives preference to 'LANGUAGE' over 'LANG' for the purpose of message handling, but you still need to have 'LANG' set to the primary language; this is required by other parts of the system libraries. For example, some Swedish users who would rather read translations in German than English for when Swedish is not available, set 'LANGUAGE' to 'sv:de' while leaving 'LANG' to 'sv_SE'. Special advice for Norwegian users: The language code for Norwegian bokma*l changed from 'no' to 'nb' recently (in 2003). During the transition period, while some message catalogs for this language are installed under 'nb' and some older ones under 'no', it's recommended for Norwegian users to set 'LANGUAGE' to 'nb:no' so that both newer and older translations are used. In the 'LANGUAGE' environment variable, but not in the 'LANG' environment variable, 'LL_CC' combinations can be abbreviated as 'LL' to denote the language's main dialect. For example, 'de' is equivalent to 'de_DE' (German as spoken in Germany), and 'pt' to 'pt_PT' (Portuguese as spoken in Portugal) in this context. 1.3 Translating Teams ===================== For the Free Translation Project to be a success, we need interested people who like their own language and write it well, and who are also able to synergize with other translators speaking the same language. Each translation team has its own mailing list. The up-to-date list of teams can be found at the Free Translation Project's homepage, 'http://translationproject.org/', in the "Teams" area. If you'd like to volunteer to _work_ at translating messages, you should become a member of the translating team for your own language. The subscribing address is _not_ the same as the list itself, it has '-request' appended. For example, speakers of Swedish can send a message to 'sv-request@li.org', having this message body: subscribe Keep in mind that team members are expected to participate _actively_ in translations, or at solving translational difficulties, rather than merely lurking around. If your team does not exist yet and you want to start one, or if you are unsure about what to do or how to get started, please write to 'coordinator@translationproject.org' to reach the coordinator for all translator teams. The English team is special. It works at improving and uniformizing the terminology in use. Proven linguistic skills are praised more than programming skills, here. 1.4 Available Packages ====================== Languages are not equally supported in all packages. The following matrix shows the current state of internationalization, as of Jun 2014. The matrix shows, in regard of each package, for which languages PO files have been submitted to translation coordination, with a translation percentage of at least 50%. Ready PO files af am an ar as ast az be bg bn bn_IN bs ca crh cs +---------------------------------------------------+ a2ps | [] [] [] | aegis | | anubis | | aspell | [] [] [] | bash | [] [] [] | bfd | | binutils | [] | bison | | bison-runtime | [] | buzztrax | [] | ccd2cue | | ccide | | cflow | | clisp | | coreutils | [] [] | cpio | | cppi | | cpplib | [] | cryptsetup | [] | datamash | | denemo | [] [] | dfarc | [] | dialog | [] [] [] | dico | | diffutils | [] | dink | [] | direvent | | doodle | [] | dos2unix | | dos2unix-man | | e2fsprogs | [] [] | enscript | [] | exif | [] | fetchmail | [] [] | findutils | [] | flex | [] | freedink | [] [] | fusionforge | | gas | | gawk | [] | gcal | [] | gcc | | gdbm | | gettext-examples | [] [] [] [] [] | gettext-runtime | [] [] [] | gettext-tools | [] [] | gjay | | glunarclock | [] [] [] | gnubiff | [] | gnubik | [] | gnucash | () () [] | gnuchess | | gnulib | [] | gnunet | | gnunet-gtk | | gold | | gphoto2 | [] | gprof | [] | gramadoir | | grep | [] [] [] | grub | [] | gsasl | | gss | | gst-plugins-bad | [] [] | gst-plugins-base | [] [] [] | gst-plugins-good | [] [] [] | gst-plugins-ugly | [] [] [] | gstreamer | [] [] [] [] | gtick | [] | gtkam | [] [] | gtkspell | [] [] [] [] [] | guix | | guix-packages | | gutenprint | [] | hello | [] | help2man | | help2man-texi | | hylafax | | idutils | | iso_15924 | [] | iso_3166 | [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | | iso_4217 | [] | iso_639 | [] [] [] [] [] [] [] [] [] | iso_639_3 | [] [] | iso_639_5 | | jwhois | | kbd | [] | klavaro | [] [] [] [] [] | ld | [] | leafpad | [] [] [] [] | libc | [] [] [] | libexif | () | libextractor | | libgnutls | [] | libgphoto2 | [] | libgphoto2_port | [] | libgsasl | | libiconv | [] [] | libidn | [] | liferea | [] [] [] [] | lilypond | [] [] | lordsawar | [] | lprng | | lynx | [] [] | m4 | [] | mailfromd | | mailutils | | make | [] | man-db | [] [] | man-db-manpages | | midi-instruments | [] [] [] | minicom | [] | mkisofs | [] | myserver | [] | nano | [] [] [] | opcodes | | parted | [] | pies | | pnmixer | | popt | [] | procps-ng | | procps-ng-man | | psmisc | [] | pspp | [] | pushover | [] | pwdutils | | pyspread | | radius | [] | recode | [] [] [] | recutils | | rpm | | rush | | sarg | | sed | [] [] [] [] | sharutils | [] | shishi | | skribilo | | solfege | [] [] | solfege-manual | | spotmachine | | sudo | [] [] | sudoers | [] [] | sysstat | [] | tar | [] [] [] | texinfo | [] [] | texinfo_document | [] [] | tigervnc | [] | tin | | tin-man | | tracgoogleappsa... | | trader | | util-linux | [] | ve | | vice | | vmm | | vorbis-tools | [] | wastesedge | | wcd | | wcd-man | | wdiff | [] [] | wget | [] | wyslij-po | | xboard | | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +---------------------------------------------------+ af am an ar as ast az be bg bn bn_IN bs ca crh cs 4 0 2 5 3 11 0 8 25 3 3 1 55 4 74 da de el en en_GB en_ZA eo es et eu fa fi fr +--------------------------------------------------+ a2ps | [] [] [] [] [] [] [] [] [] | aegis | [] [] [] [] | anubis | [] [] [] [] [] | aspell | [] [] [] [] [] [] [] | bash | [] [] [] | bfd | [] [] [] [] | binutils | [] [] [] | bison | [] [] [] [] [] [] [] [] | bison-runtime | [] [] [] [] [] [] [] [] | buzztrax | [] [] [] [] | ccd2cue | [] [] [] [] | ccide | [] [] [] [] [] [] | cflow | [] [] [] [] [] | clisp | [] [] [] [] [] | coreutils | [] [] [] [] [] | cpio | [] [] [] [] [] | cppi | [] [] [] [] [] | cpplib | [] [] [] [] [] [] | cryptsetup | [] [] [] [] [] | datamash | [] [] [] [] | denemo | [] | dfarc | [] [] [] [] [] [] | dialog | [] [] [] [] [] [] [] [] [] | dico | [] [] [] [] | diffutils | [] [] [] [] [] [] | dink | [] [] [] [] [] [] | direvent | [] [] [] [] | doodle | [] [] [] [] | dos2unix | [] [] [] [] [] | dos2unix-man | [] [] [] | e2fsprogs | [] [] [] [] [] | enscript | [] [] [] [] [] [] | exif | [] [] [] [] [] [] | fetchmail | [] () [] [] [] [] [] | findutils | [] [] [] [] [] [] [] [] | flex | [] [] [] [] [] [] | freedink | [] [] [] [] [] [] [] [] | fusionforge | [] [] [] | gas | [] [] [] | gawk | [] [] [] [] [] | gcal | [] [] [] [] | gcc | [] | gdbm | [] [] [] [] [] | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] | gjay | [] [] [] [] | glunarclock | [] [] [] [] [] | gnubiff | () [] [] () | gnubik | [] [] [] [] [] | gnucash | [] () () () () () () | gnuchess | [] [] [] [] | gnulib | [] [] [] [] [] [] [] | gnunet | [] | gnunet-gtk | [] | gold | [] [] [] | gphoto2 | [] () [] [] | gprof | [] [] [] [] [] [] | gramadoir | [] [] [] [] [] | grep | [] [] [] [] [] [] [] | grub | [] [] [] [] [] | gsasl | [] [] [] [] [] | gss | [] [] [] [] [] | gst-plugins-bad | [] [] [] | gst-plugins-base | [] [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] [] [] | gstreamer | [] [] [] [] [] [] [] | gtick | [] () [] [] [] | gtkam | [] () [] [] [] [] | gtkspell | [] [] [] [] [] [] [] [] | guix | [] [] | guix-packages | | gutenprint | [] [] [] [] | hello | [] [] [] [] [] [] [] [] | help2man | [] [] [] [] [] [] [] | help2man-texi | [] [] [] | hylafax | [] [] | idutils | [] [] [] [] [] | iso_15924 | [] () [] [] () [] () | iso_3166 | [] () [] [] [] [] () [] () | iso_3166_2 | [] () () () | iso_4217 | [] () [] [] [] () [] () | iso_639 | [] () [] [] () [] () | iso_639_3 | () () () | iso_639_5 | () () () | jwhois | [] [] [] [] [] | kbd | [] [] [] [] [] [] | klavaro | [] [] [] [] [] [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] [] [] | libc | [] [] [] [] [] | libexif | [] [] () [] [] | libextractor | [] | libgnutls | [] [] [] [] | libgphoto2 | [] () [] | libgphoto2_port | [] () [] [] [] [] | libgsasl | [] [] [] [] [] | libiconv | [] [] [] [] [] [] [] | libidn | [] [] [] [] [] | liferea | [] () [] [] [] [] [] | lilypond | [] [] [] [] [] [] | lordsawar | [] [] | lprng | | lynx | [] [] [] [] [] [] | m4 | [] [] [] [] [] [] | mailfromd | [] | mailutils | [] [] [] [] | make | [] [] [] [] [] | man-db | [] [] [] [] | man-db-manpages | [] [] | midi-instruments | [] [] [] [] [] [] [] [] [] | minicom | [] [] [] [] [] | mkisofs | [] [] [] | myserver | [] [] [] [] | nano | [] [] [] [] [] [] [] | opcodes | [] [] [] [] [] | parted | [] [] [] | pies | [] | pnmixer | [] [] | popt | [] [] [] [] [] [] | procps-ng | [] [] | procps-ng-man | [] [] | psmisc | [] [] [] [] [] [] [] | pspp | [] [] [] | pushover | () [] [] [] | pwdutils | [] [] [] | pyspread | [] [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] | recutils | [] [] [] [] | rpm | [] [] [] [] [] | rush | [] [] [] | sarg | [] [] | sed | [] [] [] [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] [] [] | skribilo | [] [] [] | solfege | [] [] [] [] [] [] [] [] | solfege-manual | [] [] [] [] [] | spotmachine | [] [] [] [] [] | sudo | [] [] [] [] [] [] | sudoers | [] [] [] [] [] [] | sysstat | [] [] [] [] [] [] | tar | [] [] [] [] [] [] [] | texinfo | [] [] [] [] [] | texinfo_document | [] [] [] [] | tigervnc | [] [] [] [] [] [] | tin | [] [] [] [] | tin-man | [] | tracgoogleappsa... | [] [] [] [] [] | trader | [] [] [] [] [] [] | util-linux | [] [] [] [] | ve | [] [] [] [] [] | vice | () () () | vmm | [] [] | vorbis-tools | [] [] [] [] | wastesedge | [] | wcd | [] [] [] [] | wcd-man | [] | wdiff | [] [] [] [] [] [] [] | wget | [] [] [] [] [] [] | wyslij-po | [] [] [] [] | xboard | [] [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] [] [] | +--------------------------------------------------+ da de el en en_GB en_ZA eo es et eu fa fi fr 119 131 32 1 6 0 94 95 22 13 4 102 139 ga gd gl gu he hi hr hu hy ia id is it ja ka kk +-------------------------------------------------+ a2ps | [] [] [] [] | aegis | [] | anubis | [] [] [] [] | aspell | [] [] [] [] [] | bash | [] [] [] [] | bfd | [] [] | binutils | [] [] [] | bison | [] | bison-runtime | [] [] [] [] [] [] [] [] | buzztrax | | ccd2cue | [] | ccide | [] [] | cflow | [] [] [] | clisp | | coreutils | [] [] | cpio | [] [] [] [] [] [] | cppi | [] [] [] [] [] | cpplib | [] [] | cryptsetup | [] | datamash | | denemo | [] | dfarc | [] [] [] | dialog | [] [] [] [] [] [] [] [] [] [] | dico | | diffutils | [] [] [] [] | dink | [] | direvent | [] | doodle | [] [] | dos2unix | [] [] | dos2unix-man | | e2fsprogs | [] [] | enscript | [] [] [] | exif | [] [] [] [] [] [] | fetchmail | [] [] [] | findutils | [] [] [] [] [] [] [] | flex | [] | freedink | [] [] [] [] | fusionforge | | gas | [] | gawk | [] () [] | gcal | | gcc | | gdbm | | gettext-examples | [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] | gettext-tools | [] [] [] | gjay | [] | glunarclock | [] [] [] [] [] [] | gnubiff | [] [] () | gnubik | [] [] [] | gnucash | () () () () () | gnuchess | | gnulib | [] [] [] [] [] | gnunet | | gnunet-gtk | | gold | [] [] | gphoto2 | [] [] [] [] | gprof | [] [] [] [] | gramadoir | [] [] [] | grep | [] [] [] [] [] [] [] | grub | [] [] [] | gsasl | [] [] [] [] [] | gss | [] [] [] [] [] | gst-plugins-bad | [] [] [] | gst-plugins-base | [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] [] [] | gtkam | [] [] [] [] [] | gtkspell | [] [] [] [] [] [] [] [] [] [] | guix | | guix-packages | | gutenprint | [] [] [] | hello | [] [] [] [] [] | help2man | [] [] [] | help2man-texi | | hylafax | [] | idutils | [] [] | iso_15924 | [] [] [] [] [] [] | iso_3166 | [] [] [] [] [] [] [] [] [] [] [] [] [] | iso_3166_2 | [] [] | iso_4217 | [] [] [] [] [] [] | iso_639 | [] [] [] [] [] [] [] [] [] | iso_639_3 | [] [] | iso_639_5 | | jwhois | [] [] [] [] | kbd | [] [] [] | klavaro | [] [] [] [] [] | ld | [] [] [] [] | leafpad | [] [] [] [] [] [] [] () | libc | [] [] [] [] [] | libexif | [] | libextractor | | libgnutls | [] | libgphoto2 | [] [] | libgphoto2_port | [] [] | libgsasl | [] [] [] [] | libiconv | [] [] [] [] [] [] [] | libidn | [] [] [] [] | liferea | [] [] [] [] [] | lilypond | [] | lordsawar | | lprng | [] | lynx | [] [] [] [] | m4 | [] [] [] [] [] | mailfromd | | mailutils | | make | [] [] [] [] | man-db | [] [] | man-db-manpages | [] [] | midi-instruments | [] [] [] [] [] [] [] [] [] | minicom | [] [] [] | mkisofs | [] [] | myserver | [] | nano | [] [] [] [] [] [] | opcodes | [] [] [] | parted | [] [] [] [] [] | pies | | pnmixer | [] [] | popt | [] [] [] [] [] [] [] [] [] [] | procps-ng | | procps-ng-man | | psmisc | [] [] [] [] | pspp | [] [] | pushover | [] | pwdutils | [] | pyspread | | radius | [] | recode | [] [] [] [] [] [] [] | recutils | | rpm | [] | rush | [] | sarg | | sed | [] [] [] [] [] [] [] | sharutils | | shishi | | skribilo | [] | solfege | [] [] | solfege-manual | | spotmachine | | sudo | [] [] [] [] | sudoers | [] [] [] | sysstat | [] [] [] [] | tar | [] [] [] [] [] [] | texinfo | [] [] [] | texinfo_document | [] [] [] | tigervnc | | tin | | tin-man | | tracgoogleappsa... | [] [] [] [] | trader | [] [] | util-linux | [] | ve | [] | vice | () () | vmm | | vorbis-tools | [] [] | wastesedge | [] | wcd | | wcd-man | | wdiff | [] [] [] | wget | [] [] [] [] | wyslij-po | [] [] [] | xboard | | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] [] [] | +-------------------------------------------------+ ga gd gl gu he hi hr hu hy ia id is it ja ka kk 35 2 47 4 8 2 60 71 2 6 81 11 87 57 0 3 kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl +--------------------------------------------------+ a2ps | [] [] | aegis | [] | anubis | [] [] [] | aspell | [] [] | bash | [] [] | bfd | | binutils | | bison | [] | bison-runtime | [] [] [] [] [] [] | buzztrax | | ccd2cue | | ccide | [] [] | cflow | [] | clisp | [] | coreutils | [] [] | cpio | [] | cppi | | cpplib | [] | cryptsetup | [] | datamash | [] [] | denemo | | dfarc | [] [] | dialog | [] [] [] [] [] [] | dico | | diffutils | [] [] [] | dink | [] | direvent | [] | doodle | [] | dos2unix | [] [] | dos2unix-man | [] | e2fsprogs | [] | enscript | [] | exif | [] [] [] | fetchmail | [] | findutils | [] [] | flex | [] | freedink | [] [] | fusionforge | | gas | | gawk | [] | gcal | | gcc | | gdbm | | gettext-examples | [] [] [] [] [] [] | gettext-runtime | [] [] [] | gettext-tools | [] | gjay | | glunarclock | [] [] | gnubiff | [] | gnubik | [] [] | gnucash | () () () () () () () [] | gnuchess | [] [] | gnulib | [] | gnunet | | gnunet-gtk | | gold | | gphoto2 | [] | gprof | [] [] | gramadoir | [] | grep | [] [] | grub | [] [] [] | gsasl | [] | gss | | gst-plugins-bad | [] [] [] | gst-plugins-base | [] [] [] | gst-plugins-good | [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | [] [] [] | gtick | [] | gtkam | [] [] | gtkspell | [] [] [] [] [] [] [] | guix | | guix-packages | | gutenprint | [] | hello | [] [] [] | help2man | [] | help2man-texi | | hylafax | [] | idutils | [] | iso_15924 | () [] [] | iso_3166 | [] [] [] () [] [] [] [] [] [] | iso_3166_2 | () [] | iso_4217 | () [] [] [] | iso_639 | [] [] () [] [] [] [] | iso_639_3 | [] () [] | iso_639_5 | () | jwhois | [] [] | kbd | [] | klavaro | [] [] | ld | | leafpad | [] [] [] [] [] | libc | [] [] | libexif | [] | libextractor | [] | libgnutls | [] [] | libgphoto2 | [] | libgphoto2_port | [] | libgsasl | [] | libiconv | [] [] | libidn | [] | liferea | [] [] [] | lilypond | [] | lordsawar | | lprng | | lynx | [] | m4 | [] | mailfromd | | mailutils | | make | [] [] | man-db | [] | man-db-manpages | [] | midi-instruments | [] [] [] [] [] [] [] | minicom | [] | mkisofs | [] | myserver | | nano | [] [] [] | opcodes | [] | parted | [] [] | pies | | pnmixer | [] | popt | [] [] [] [] [] | procps-ng | | procps-ng-man | | psmisc | [] | pspp | [] [] | pushover | | pwdutils | [] | pyspread | | radius | [] | recode | [] [] | recutils | [] | rpm | [] | rush | [] | sarg | | sed | [] [] | sharutils | [] | shishi | | skribilo | | solfege | [] [] | solfege-manual | [] | spotmachine | [] | sudo | [] [] [] | sudoers | [] [] [] | sysstat | [] [] | tar | [] [] [] | texinfo | [] | texinfo_document | [] | tigervnc | [] | tin | | tin-man | | tracgoogleappsa... | [] [] [] | trader | [] | util-linux | [] | ve | [] | vice | [] | vmm | [] | vorbis-tools | [] | wastesedge | [] | wcd | [] | wcd-man | [] | wdiff | [] | wget | [] [] | wyslij-po | [] | xboard | [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] | +--------------------------------------------------+ kn ko ku ky lg lt lv mk ml mn mr ms mt nb ne nl 5 15 4 6 0 13 23 3 3 3 4 11 2 42 1 125 nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr +------------------------------------------------+ a2ps | [] [] [] [] [] [] [] | aegis | [] [] | anubis | [] [] [] | aspell | [] [] [] [] [] [] [] | bash | [] [] [] [] [] [] | bfd | [] [] | binutils | [] [] | bison | [] [] [] | bison-runtime | [] [] [] [] [] [] [] [] | buzztrax | [] | ccd2cue | [] [] | ccide | [] [] [] | cflow | [] [] [] | clisp | [] | coreutils | [] [] [] [] | cpio | [] [] [] | cppi | [] [] [] | cpplib | [] [] [] | cryptsetup | [] [] [] | datamash | [] [] | denemo | | dfarc | [] [] [] | dialog | [] [] [] [] [] [] [] | dico | [] | diffutils | [] [] [] | dink | | direvent | [] [] [] | doodle | [] [] | dos2unix | [] [] [] [] | dos2unix-man | [] [] | e2fsprogs | [] | enscript | [] [] [] [] [] [] | exif | [] [] [] [] [] [] | fetchmail | [] [] [] | findutils | [] [] [] [] [] [] | flex | [] [] [] [] [] | freedink | [] [] [] [] [] | fusionforge | | gas | | gawk | [] | gcal | | gcc | | gdbm | [] [] [] | gettext-examples | [] [] [] [] [] [] [] [] | gettext-runtime | [] [] [] [] [] [] [] [] [] | gettext-tools | [] [] [] [] [] [] [] | gjay | [] | glunarclock | [] [] [] [] [] [] | gnubiff | [] | gnubik | [] [] [] [] | gnucash | () () () () () [] | gnuchess | [] [] | gnulib | [] [] [] [] [] | gnunet | | gnunet-gtk | | gold | | gphoto2 | [] [] [] [] [] | gprof | [] [] [] [] | gramadoir | [] [] | grep | [] [] [] [] [] [] | grub | [] [] [] [] [] | gsasl | [] [] [] | gss | [] [] [] [] | gst-plugins-bad | [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] [] [] | gstreamer | [] [] [] [] [] [] [] | gtick | [] [] [] [] [] | gtkam | [] [] [] [] [] [] | gtkspell | [] [] [] [] [] [] [] [] [] | guix | | guix-packages | | gutenprint | [] [] | hello | [] [] [] [] [] [] | help2man | [] [] [] [] | help2man-texi | [] | hylafax | | idutils | [] [] [] | iso_15924 | [] () [] [] [] [] | iso_3166 | [] [] [] [] () [] [] [] [] [] [] [] [] | iso_3166_2 | [] () [] | iso_4217 | [] [] () [] [] [] [] [] | iso_639 | [] [] [] () [] [] [] [] [] [] | iso_639_3 | [] () | iso_639_5 | () [] | jwhois | [] [] [] [] | kbd | [] [] | klavaro | [] [] [] [] [] | ld | | leafpad | [] [] [] [] [] [] [] [] | libc | [] [] [] | libexif | [] () [] | libextractor | [] | libgnutls | [] | libgphoto2 | [] | libgphoto2_port | [] [] [] [] [] | libgsasl | [] [] [] [] | libiconv | [] [] [] [] [] | libidn | [] [] [] | liferea | [] [] [] [] () [] [] | lilypond | | lordsawar | | lprng | [] | lynx | [] [] | m4 | [] [] [] [] [] | mailfromd | [] | mailutils | [] | make | [] [] [] | man-db | [] [] [] | man-db-manpages | [] [] [] | midi-instruments | [] [] [] [] [] [] [] [] | minicom | [] [] [] [] | mkisofs | [] [] [] | myserver | [] [] | nano | [] [] [] [] [] [] | opcodes | | parted | [] [] [] [] [] [] | pies | [] | pnmixer | [] | popt | [] [] [] [] [] [] | procps-ng | [] | procps-ng-man | [] | psmisc | [] [] [] [] | pspp | [] [] | pushover | | pwdutils | [] | pyspread | [] [] | radius | [] [] | recode | [] [] [] [] [] [] [] [] | recutils | [] [] | rpm | [] | rush | [] [] [] | sarg | [] [] | sed | [] [] [] [] [] [] [] [] | sharutils | [] [] [] | shishi | [] [] | skribilo | [] | solfege | [] [] [] | solfege-manual | [] [] | spotmachine | [] [] | sudo | [] [] [] [] [] [] | sudoers | [] [] [] [] | sysstat | [] [] [] [] [] | tar | [] [] [] [] [] | texinfo | [] [] [] | texinfo_document | [] [] | tigervnc | [] [] [] | tin | [] | tin-man | | tracgoogleappsa... | [] [] [] [] | trader | [] [] | util-linux | [] [] | ve | [] [] [] | vice | | vmm | | vorbis-tools | [] [] [] | wastesedge | | wcd | | wcd-man | | wdiff | [] [] [] [] [] | wget | [] [] [] [] [] | wyslij-po | [] [] [] [] | xboard | [] [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] | +------------------------------------------------+ nn or pa pl ps pt pt_BR ro ru rw sk sl sq sr 7 3 6 114 1 12 88 32 82 3 40 45 7 101 sv sw ta te tg th tr uk ur vi wa wo zh_CN +----------------------------------------------+ a2ps | [] [] [] [] [] | aegis | [] | anubis | [] [] [] [] | aspell | [] [] [] [] [] | bash | [] [] [] [] | bfd | [] [] [] | binutils | [] [] [] | bison | [] [] [] [] | bison-runtime | [] [] [] [] [] [] | buzztrax | [] [] [] | ccd2cue | [] [] [] | ccide | [] [] [] [] | cflow | [] [] [] [] | clisp | | coreutils | [] [] [] | cpio | [] [] [] [] [] | cppi | [] [] [] [] | cpplib | [] [] [] [] [] | cryptsetup | [] [] [] | datamash | [] [] [] | denemo | [] | dfarc | [] [] | dialog | [] [] [] [] [] [] | dico | [] | diffutils | [] [] [] [] [] | dink | [] | direvent | [] [] | doodle | [] [] | dos2unix | [] [] [] [] | dos2unix-man | [] [] [] | e2fsprogs | [] [] [] [] | enscript | [] [] [] [] | exif | [] [] [] [] [] | fetchmail | [] [] [] [] | findutils | [] [] [] [] [] | flex | [] [] [] [] | freedink | [] [] [] | fusionforge | | gas | [] | gawk | [] [] [] | gcal | [] [] [] | gcc | [] | gdbm | [] [] | gettext-examples | [] [] [] [] [] | gettext-runtime | [] [] [] [] [] | gettext-tools | [] [] [] [] [] | gjay | [] [] [] | glunarclock | [] [] [] [] | gnubiff | [] [] | gnubik | [] [] [] [] | gnucash | () () () () [] | gnuchess | [] [] [] | gnulib | [] [] [] [] | gnunet | | gnunet-gtk | | gold | [] [] | gphoto2 | [] [] [] [] | gprof | [] [] [] [] | gramadoir | [] [] [] | grep | [] [] [] [] [] | grub | [] [] [] [] | gsasl | [] [] [] [] | gss | [] [] [] | gst-plugins-bad | [] [] [] [] [] | gst-plugins-base | [] [] [] [] [] | gst-plugins-good | [] [] [] [] [] | gst-plugins-ugly | [] [] [] [] [] | gstreamer | [] [] [] [] [] | gtick | [] [] [] | gtkam | [] [] [] [] | gtkspell | [] [] [] [] [] [] [] | guix | | guix-packages | | gutenprint | [] [] [] [] | hello | [] [] [] [] [] [] | help2man | [] [] [] | help2man-texi | [] | hylafax | [] | idutils | [] [] [] | iso_15924 | [] () [] [] () [] | iso_3166 | [] [] () [] [] () [] [] | iso_3166_2 | () [] [] () [] | iso_4217 | [] () [] [] () [] | iso_639 | [] [] [] () [] [] () [] [] | iso_639_3 | [] () [] [] () | iso_639_5 | () [] () | jwhois | [] [] [] [] | kbd | [] [] [] [] | klavaro | [] [] [] [] [] [] | ld | [] [] [] [] [] | leafpad | [] [] [] [] [] [] | libc | [] [] [] [] [] | libexif | [] [] () | libextractor | [] [] | libgnutls | [] [] [] [] | libgphoto2 | [] [] [] | libgphoto2_port | [] [] [] [] | libgsasl | [] [] [] [] | libiconv | [] [] [] [] [] | libidn | () [] [] [] | liferea | [] [] [] [] [] | lilypond | [] | lordsawar | | lprng | [] | lynx | [] [] [] [] | m4 | [] [] [] | mailfromd | [] [] | mailutils | [] | make | [] [] [] [] | man-db | [] [] [] | man-db-manpages | [] [] | midi-instruments | [] [] [] [] [] [] | minicom | [] [] | mkisofs | [] [] [] | myserver | [] | nano | [] [] [] [] | opcodes | [] [] [] | parted | [] [] [] [] [] | pies | [] [] | pnmixer | [] [] [] | popt | [] [] [] [] [] [] [] | procps-ng | [] [] | procps-ng-man | [] | psmisc | [] [] [] [] | pspp | [] [] [] | pushover | [] | pwdutils | [] [] | pyspread | [] | radius | [] [] | recode | [] [] [] [] | recutils | [] [] [] | rpm | [] [] [] [] | rush | [] [] | sarg | | sed | [] [] [] [] [] | sharutils | [] [] [] [] | shishi | [] [] | skribilo | [] [] | solfege | [] [] [] [] | solfege-manual | [] | spotmachine | [] [] [] | sudo | [] [] [] [] [] | sudoers | [] [] [] [] | sysstat | [] [] [] [] [] | tar | [] [] [] [] [] | texinfo | [] [] [] | texinfo_document | [] | tigervnc | [] [] [] | tin | [] | tin-man | | tracgoogleappsa... | [] [] [] [] [] | trader | [] | util-linux | [] [] [] [] | ve | [] [] [] [] | vice | () () | vmm | | vorbis-tools | [] [] | wastesedge | | wcd | [] [] [] | wcd-man | [] | wdiff | [] [] [] [] | wget | [] [] [] | wyslij-po | [] [] | xboard | [] [] | xdg-user-dirs | [] [] [] [] [] [] [] [] | xkeyboard-config | [] [] [] [] | +----------------------------------------------+ sv sw ta te tg th tr uk ur vi wa wo zh_CN 106 1 4 3 0 13 51 115 1 125 7 1 100 zh_HK zh_TW +-------------+ a2ps | | 30 aegis | | 9 anubis | | 19 aspell | | 29 bash | [] | 23 bfd | | 11 binutils | | 12 bison | [] | 18 bison-runtime | [] | 38 buzztrax | | 9 ccd2cue | | 10 ccide | | 17 cflow | | 16 clisp | | 10 coreutils | | 18 cpio | | 20 cppi | | 17 cpplib | [] | 19 cryptsetup | | 14 datamash | | 11 denemo | | 5 dfarc | | 17 dialog | [] | 42 dico | | 6 diffutils | | 22 dink | | 10 direvent | | 11 doodle | | 12 dos2unix | [] | 18 dos2unix-man | | 9 e2fsprogs | | 15 enscript | | 21 exif | | 27 fetchmail | | 19 findutils | | 29 flex | [] | 19 freedink | | 24 fusionforge | | 3 gas | | 5 gawk | | 13 gcal | | 8 gcc | | 2 gdbm | | 10 gettext-examples | [] [] | 40 gettext-runtime | [] [] | 35 gettext-tools | [] | 24 gjay | | 9 glunarclock | [] | 27 gnubiff | | 9 gnubik | | 19 gnucash | () | 6 gnuchess | | 11 gnulib | | 23 gnunet | | 1 gnunet-gtk | | 1 gold | | 7 gphoto2 | [] | 19 gprof | | 21 gramadoir | | 14 grep | [] | 31 grub | | 21 gsasl | [] | 19 gss | | 17 gst-plugins-bad | | 21 gst-plugins-base | | 27 gst-plugins-good | | 32 gst-plugins-ugly | | 34 gstreamer | [] | 32 gtick | | 19 gtkam | | 24 gtkspell | [] [] | 48 guix | | 2 guix-packages | | 0 gutenprint | | 15 hello | [] | 30 help2man | | 18 help2man-texi | | 5 hylafax | | 5 idutils | | 14 iso_15924 | [] | 23 iso_3166 | [] [] | 58 iso_3166_2 | | 9 iso_4217 | [] [] | 28 iso_639 | [] [] | 46 iso_639_3 | | 10 iso_639_5 | | 2 jwhois | [] | 20 kbd | | 17 klavaro | | 30 ld | [] | 15 leafpad | [] | 39 libc | [] | 24 libexif | | 10 libextractor | | 5 libgnutls | | 13 libgphoto2 | | 10 libgphoto2_port | [] | 19 libgsasl | | 18 libiconv | [] | 29 libidn | | 17 liferea | | 29 lilypond | | 11 lordsawar | | 3 lprng | | 3 lynx | | 19 m4 | [] | 22 mailfromd | | 4 mailutils | | 6 make | | 19 man-db | | 15 man-db-manpages | | 10 midi-instruments | [] | 43 minicom | [] | 17 mkisofs | | 13 myserver | | 9 nano | [] | 30 opcodes | | 12 parted | [] | 23 pies | | 4 pnmixer | | 9 popt | [] | 36 procps-ng | | 5 procps-ng-man | | 4 psmisc | [] | 22 pspp | | 13 pushover | | 6 pwdutils | | 8 pyspread | | 6 radius | | 9 recode | | 31 recutils | | 10 rpm | [] | 13 rush | | 10 sarg | | 4 sed | [] | 35 sharutils | | 13 shishi | | 7 skribilo | | 7 solfege | | 21 solfege-manual | | 9 spotmachine | | 11 sudo | | 26 sudoers | | 22 sysstat | | 23 tar | [] | 30 texinfo | | 17 texinfo_document | | 13 tigervnc | | 14 tin | [] | 7 tin-man | | 1 tracgoogleappsa... | [] | 22 trader | | 12 util-linux | | 13 ve | | 14 vice | | 1 vmm | | 3 vorbis-tools | | 13 wastesedge | | 3 wcd | | 8 wcd-man | | 3 wdiff | [] | 23 wget | | 21 wyslij-po | | 14 xboard | | 10 xdg-user-dirs | [] [] | 68 xkeyboard-config | [] | 28 +-------------+ 89 teams zh_HK zh_TW 166 domains 7 42 2809 Some counters in the preceding matrix are higher than the number of visible blocks let us expect. This is because a few extra PO files are used for implementing regional variants of languages, or language dialects. For a PO file in the matrix above to be effective, the package to which it applies should also have been internationalized and distributed as such by its maintainer. There might be an observable lag between the mere existence a PO file and its wide availability in a distribution. If Jun 2014 seems to be old, you may fetch a more recent copy of this 'ABOUT-NLS' file on most GNU archive sites. The most up-to-date matrix with full percentage details can be found at 'http://translationproject.org/extra/matrix.html'. 1.5 Using 'gettext' in new packages =================================== If you are writing a freely available program and want to internationalize it you are welcome to use GNU 'gettext' in your package. Of course you have to respect the GNU Lesser General Public License which covers the use of the GNU 'gettext' library. This means in particular that even non-free programs can use 'libintl' as a shared library, whereas only free software can use 'libintl' as a static library or use modified versions of 'libintl'. Once the sources are changed appropriately and the setup can handle the use of 'gettext' the only thing missing are the translations. The Free Translation Project is also available for packages which are not developed inside the GNU project. Therefore the information given above applies also for every other Free Software Project. Contact 'coordinator@translationproject.org' to make the '.pot' files available to the translation teams. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/�����������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577414�010746� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stddef.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000012034�14226564451�012712� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for POSIX 2008 <stddef.h>, for platforms that have issues. Copyright (C) 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ /* * POSIX 2008 <stddef.h> for platforms that have issues. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stddef.h.html> */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_wchar_t || defined __need_size_t \ || defined __need_ptrdiff_t || defined __need_NULL \ || defined __need_wint_t /* Special invocation convention inside gcc header files. In particular, gcc provides a version of <stddef.h> that blindly redefines NULL even when __need_wint_t was defined, even though wint_t is not normally provided by <stddef.h>. Hence, we must remember if special invocation has ever been used to obtain wint_t, in which case we need to clean up NULL yet again. */ # if !(defined _@GUARD_PREFIX@_STDDEF_H && defined _GL_STDDEF_WINT_T) # ifdef __need_wint_t # define _GL_STDDEF_WINT_T # endif # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ /* On TinyCC, make sure that the macros that indicate the special invocation convention get undefined. */ # undef __need_wchar_t # undef __need_size_t # undef __need_ptrdiff_t # undef __need_NULL # undef __need_wint_t # endif #else /* Normal invocation convention. */ # ifndef _@GUARD_PREFIX@_STDDEF_H /* On AIX 7.2, with xlc in 64-bit mode, <stddef.h> defines max_align_t to a type with alignment 4, but 'long' has alignment 8. */ # if defined _AIX && defined __LP64__ # if !GNULIB_defined_max_align_t # ifdef _MAX_ALIGN_T /* /usr/include/stddef.h has already defined max_align_t. Override it. */ typedef long rpl_max_align_t; # define max_align_t rpl_max_align_t # else /* Prevent /usr/include/stddef.h from defining max_align_t. */ typedef long max_align_t; # define _MAX_ALIGN_T # endif # define GNULIB_defined_max_align_t 1 # endif # endif /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDDEF_H@ /* On NetBSD 5.0, the definition of NULL lacks proper parentheses. */ # if (@REPLACE_NULL@ \ && (!defined _@GUARD_PREFIX@_STDDEF_H || defined _GL_STDDEF_WINT_T)) # undef NULL # ifdef __cplusplus /* ISO C++ says that the macro NULL must expand to an integer constant expression, hence '((void *) 0)' is not allowed in C++. */ # if __GNUG__ >= 3 /* GNU C++ has a __null macro that behaves like an integer ('int' or 'long') but has the same size as a pointer. Use that, to avoid warnings. */ # define NULL __null # else # define NULL 0L # endif # else # define NULL ((void *) 0) # endif # endif # ifndef _@GUARD_PREFIX@_STDDEF_H # define _@GUARD_PREFIX@_STDDEF_H /* Some platforms lack wchar_t. */ #if !@HAVE_WCHAR_T@ # define wchar_t int #endif /* Some platforms lack max_align_t. The check for _GCC_MAX_ALIGN_T is a hack in case the configure-time test was done with g++ even though we are currently compiling with gcc. On MSVC, max_align_t is defined only in C++ mode, after <cstddef> was included. Its definition is good since it has an alignment of 8 (on x86 and x86_64). Similarly on OS/2 kLIBC. */ #if (defined _MSC_VER || (defined __KLIBC__ && !defined __LIBCN__)) \ && defined __cplusplus # include <cstddef> #else # if ! (@HAVE_MAX_ALIGN_T@ || (defined _GCC_MAX_ALIGN_T && !defined __clang__)) # if !GNULIB_defined_max_align_t /* On the x86, the maximum storage alignment of double, long, etc. is 4, but GCC's C11 ABI for x86 says that max_align_t has an alignment of 8, and the C11 standard allows this. Work around this problem by using __alignof__ (which returns 8 for double) rather than _Alignof (which returns 4), and align each union member accordingly. */ # if defined __GNUC__ || (__clang_major__ >= 4) # define _GL_STDDEF_ALIGNAS(type) \ __attribute__ ((__aligned__ (__alignof__ (type)))) # else # define _GL_STDDEF_ALIGNAS(type) /* */ # endif typedef union { char *__p _GL_STDDEF_ALIGNAS (char *); double __d _GL_STDDEF_ALIGNAS (double); long double __ld _GL_STDDEF_ALIGNAS (long double); long int __i _GL_STDDEF_ALIGNAS (long int); } rpl_max_align_t; # define max_align_t rpl_max_align_t # define GNULIB_defined_max_align_t 1 # endif # endif #endif # endif /* _@GUARD_PREFIX@_STDDEF_H */ # endif /* _@GUARD_PREFIX@_STDDEF_H */ #endif /* __need_XXX */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/Makefile.am������������������������������������������������������������������������0000644�0000000�0000000�00000442443�14226564500�012725� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������## DO NOT EDIT! GENERATED AUTOMATICALLY! ## Process this file with automake to produce Makefile.in. # Copyright (C) 2002-2022 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: # gnulib-tool --import --local-dir=gl \ # --lib=librecutils \ # --source-base=lib \ # --m4-base=m4 \ # --doc-base=doc \ # --tests-base=tests \ # --aux-dir=build-aux \ # --no-conditional-dependencies \ # --libtool \ # --macro-prefix=gl \ # acl \ # alloca \ # announce-gen \ # array-list \ # autobuild \ # base64 \ # btowc \ # c-ctype \ # closeout \ # copy-file \ # crc \ # euidaccess \ # execute \ # extensions \ # flock \ # floor \ # fprintf-posix \ # fwriting \ # gendocs \ # getdelim \ # getopt-gnu \ # getpass-gnu \ # gettext-h \ # gnupload \ # list \ # localcharset \ # maintainer-makefile \ # mbrlen \ # mbrtowc \ # mbsinit \ # memchr \ # minmax \ # mkostemp \ # mkstemp \ # obstack \ # parse-datetime \ # pathmax \ # printf-posix \ # progname \ # random_r \ # read-file \ # readline \ # regex \ # regexprops-generic \ # remove \ # rename \ # selinux-h \ # signal-h \ # ssize_t \ # stat-macros \ # stdbool \ # stdint \ # strcasestr \ # strerror \ # strsep \ # strverscmp \ # tempname \ # threadlib \ # tmpdir \ # unlocked-io \ # update-copyright \ # vasnprintf-posix \ # vasprintf \ # vasprintf-posix \ # verify \ # version-etc-fsf \ # wcrtomb \ # wctob AUTOMAKE_OPTIONS = 1.14 gnits subdir-objects SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = EXTRA_DIST = BUILT_SOURCES = SUFFIXES = MOSTLYCLEANFILES = core *.stackdump MOSTLYCLEANDIRS = CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = noinst_LTLIBRARIES += librecutils.la librecutils_la_SOURCES = librecutils_la_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS) librecutils_la_LIBADD = $(gl_LTLIBOBJS) librecutils_la_DEPENDENCIES = $(gl_LTLIBOBJS) EXTRA_librecutils_la_SOURCES = librecutils_la_LDFLAGS = $(AM_LDFLAGS) librecutils_la_LDFLAGS += -no-undefined librecutils_la_LDFLAGS += $(FLOOR_LIBM) librecutils_la_LDFLAGS += $(LIBTHREAD) librecutils_la_LDFLAGS += $(LIB_ACL) librecutils_la_LDFLAGS += $(LIB_CLOCK_GETTIME) librecutils_la_LDFLAGS += $(LIB_EACCESS) librecutils_la_LDFLAGS += $(LIB_GETRANDOM) librecutils_la_LDFLAGS += $(LIB_HARD_LOCALE) librecutils_la_LDFLAGS += $(LIB_MBRTOWC) librecutils_la_LDFLAGS += $(LIB_POSIX_SPAWN) librecutils_la_LDFLAGS += $(LIB_SELINUX) librecutils_la_LDFLAGS += $(LIB_SETLOCALE_NULL) librecutils_la_LDFLAGS += $(LTLIBINTL) librecutils_la_LDFLAGS += $(LTLIBREADLINE) ## begin gnulib module absolute-header # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || __clang__ || 60000000 <= __DECC_VER) ## end gnulib module absolute-header ## begin gnulib module access if GL_COND_OBJ_ACCESS librecutils_la_SOURCES += access.c endif ## end gnulib module access ## begin gnulib module acl librecutils_la_SOURCES += copy-acl.c set-acl.c ## end gnulib module acl ## begin gnulib module acl-permissions librecutils_la_SOURCES += acl-errno-valid.c acl-internal.c get-permissions.c set-permissions.c EXTRA_DIST += acl-internal.h acl.h acl_entries.c EXTRA_librecutils_la_SOURCES += acl_entries.c ## end gnulib module acl-permissions ## begin gnulib module alignof EXTRA_DIST += alignof.h ## end gnulib module alignof ## begin gnulib module alloca librecutils_la_LIBADD += @LTALLOCA@ librecutils_la_DEPENDENCIES += @LTALLOCA@ EXTRA_DIST += alloca.c EXTRA_librecutils_la_SOURCES += alloca.c ## end gnulib module alloca ## begin gnulib module alloca-opt BUILT_SOURCES += $(ALLOCA_H) # We need the following in order to create <alloca.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_ALLOCA_H alloca.h: alloca.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' \ $(srcdir)/alloca.in.h > $@-t $(AM_V_at)mv $@-t $@ else alloca.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += alloca.h alloca.h-t EXTRA_DIST += alloca.in.h ## end gnulib module alloca-opt ## begin gnulib module announce-gen EXTRA_DIST += $(top_srcdir)/build-aux/announce-gen ## end gnulib module announce-gen ## begin gnulib module array-list librecutils_la_SOURCES += gl_array_list.h gl_array_list.c ## end gnulib module array-list ## begin gnulib module assure EXTRA_DIST += assure.h ## end gnulib module assure ## begin gnulib module at-internal librecutils_la_SOURCES += openat-priv.h openat-proc.c ## end gnulib module at-internal ## begin gnulib module attribute EXTRA_DIST += attribute.h ## end gnulib module attribute ## begin gnulib module base64 librecutils_la_SOURCES += base64.h base64.c ## end gnulib module base64 ## begin gnulib module basename-lgpl librecutils_la_SOURCES += basename-lgpl.c EXTRA_DIST += basename-lgpl.h ## end gnulib module basename-lgpl ## begin gnulib module binary-io librecutils_la_SOURCES += binary-io.h binary-io.c ## end gnulib module binary-io ## begin gnulib module bison # See the comments in bison.m4. ## end gnulib module bison ## begin gnulib module bitrotate librecutils_la_SOURCES += bitrotate.h bitrotate.c ## end gnulib module bitrotate ## begin gnulib module btowc if GL_COND_OBJ_BTOWC librecutils_la_SOURCES += btowc.c endif ## end gnulib module btowc ## begin gnulib module c-ctype librecutils_la_SOURCES += c-ctype.h c-ctype.c ## end gnulib module c-ctype ## begin gnulib module c-strcase librecutils_la_SOURCES += c-strcase.h c-strcasecmp.c c-strncasecmp.c ## end gnulib module c-strcase ## begin gnulib module c-strcaseeq EXTRA_DIST += c-strcaseeq.h ## end gnulib module c-strcaseeq ## begin gnulib module calloc-gnu EXTRA_DIST += calloc.c EXTRA_librecutils_la_SOURCES += calloc.c ## end gnulib module calloc-gnu ## begin gnulib module calloc-posix EXTRA_DIST += calloc.c EXTRA_librecutils_la_SOURCES += calloc.c ## end gnulib module calloc-posix ## begin gnulib module canonicalize librecutils_la_SOURCES += canonicalize.c EXTRA_DIST += canonicalize.h ## end gnulib module canonicalize ## begin gnulib module canonicalize-lgpl if GL_COND_OBJ_CANONICALIZE_LGPL librecutils_la_SOURCES += canonicalize-lgpl.c endif ## end gnulib module canonicalize-lgpl ## begin gnulib module chdir-long if GL_COND_OBJ_CHDIR_LONG librecutils_la_SOURCES += chdir-long.c endif EXTRA_DIST += chdir-long.h ## end gnulib module chdir-long ## begin gnulib module cloexec librecutils_la_SOURCES += cloexec.c EXTRA_DIST += cloexec.h ## end gnulib module cloexec ## begin gnulib module close if GL_COND_OBJ_CLOSE librecutils_la_SOURCES += close.c endif ## end gnulib module close ## begin gnulib module close-stream librecutils_la_SOURCES += close-stream.c EXTRA_DIST += close-stream.h ## end gnulib module close-stream ## begin gnulib module closedir if GL_COND_OBJ_CLOSEDIR librecutils_la_SOURCES += closedir.c endif EXTRA_DIST += dirent-private.h ## end gnulib module closedir ## begin gnulib module closeout librecutils_la_SOURCES += closeout.c EXTRA_DIST += closeout.h ## end gnulib module closeout ## begin gnulib module concat-filename librecutils_la_SOURCES += concat-filename.c EXTRA_DIST += concat-filename.h ## end gnulib module concat-filename ## begin gnulib module copy-file librecutils_la_SOURCES += copy-file.h copy-file.c ## end gnulib module copy-file ## begin gnulib module copy-file-range if GL_COND_OBJ_COPY_FILE_RANGE librecutils_la_SOURCES += copy-file-range.c endif ## end gnulib module copy-file-range ## begin gnulib module crc librecutils_la_SOURCES += crc.c EXTRA_DIST += crc.h ## end gnulib module crc ## begin gnulib module dirent BUILT_SOURCES += dirent.h # We need the following in order to create <dirent.h> when the system # doesn't have one that works with the given compiler. dirent.h: dirent.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_DIRENT_H''@|$(HAVE_DIRENT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \ -e 's/@''GNULIB_OPENDIR''@/$(GL_GNULIB_OPENDIR)/g' \ -e 's/@''GNULIB_READDIR''@/$(GL_GNULIB_READDIR)/g' \ -e 's/@''GNULIB_REWINDDIR''@/$(GL_GNULIB_REWINDDIR)/g' \ -e 's/@''GNULIB_CLOSEDIR''@/$(GL_GNULIB_CLOSEDIR)/g' \ -e 's/@''GNULIB_DIRFD''@/$(GL_GNULIB_DIRFD)/g' \ -e 's/@''GNULIB_FDOPENDIR''@/$(GL_GNULIB_FDOPENDIR)/g' \ -e 's/@''GNULIB_SCANDIR''@/$(GL_GNULIB_SCANDIR)/g' \ -e 's/@''GNULIB_ALPHASORT''@/$(GL_GNULIB_ALPHASORT)/g' \ -e 's/@''HAVE_OPENDIR''@/$(HAVE_OPENDIR)/g' \ -e 's/@''HAVE_READDIR''@/$(HAVE_READDIR)/g' \ -e 's/@''HAVE_REWINDDIR''@/$(HAVE_REWINDDIR)/g' \ -e 's/@''HAVE_CLOSEDIR''@/$(HAVE_CLOSEDIR)/g' \ -e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|g' \ -e 's|@''HAVE_DECL_FDOPENDIR''@|$(HAVE_DECL_FDOPENDIR)|g' \ -e 's|@''HAVE_FDOPENDIR''@|$(HAVE_FDOPENDIR)|g' \ -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \ -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \ -e 's|@''REPLACE_OPENDIR''@|$(REPLACE_OPENDIR)|g' \ -e 's|@''REPLACE_CLOSEDIR''@|$(REPLACE_CLOSEDIR)|g' \ -e 's|@''REPLACE_DIRFD''@|$(REPLACE_DIRFD)|g' \ -e 's|@''REPLACE_FDOPENDIR''@|$(REPLACE_FDOPENDIR)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/dirent.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += dirent.h dirent.h-t EXTRA_DIST += dirent.in.h ## end gnulib module dirent ## begin gnulib module dirfd if GL_COND_OBJ_DIRFD librecutils_la_SOURCES += dirfd.c endif ## end gnulib module dirfd ## begin gnulib module dirname-lgpl librecutils_la_SOURCES += dirname-lgpl.c stripslash.c EXTRA_DIST += dirname.h ## end gnulib module dirname-lgpl ## begin gnulib module dup if GL_COND_OBJ_DUP librecutils_la_SOURCES += dup.c endif ## end gnulib module dup ## begin gnulib module dup2 if GL_COND_OBJ_DUP2 librecutils_la_SOURCES += dup2.c endif ## end gnulib module dup2 ## begin gnulib module dynarray BUILT_SOURCES += malloc/dynarray.gl.h malloc/dynarray-skeleton.gl.h malloc/dynarray.gl.h: malloc/dynarray.h $(AM_V_GEN)$(MKDIR_P) '%reldir%/malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e '/libc_hidden_proto/d' \ $(srcdir)/malloc/dynarray.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += malloc/dynarray.gl.h malloc/dynarray.gl.h-t malloc/dynarray-skeleton.gl.h: malloc/dynarray-skeleton.c $(AM_V_GEN)$(MKDIR_P) '%reldir%/malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|<malloc/dynarray\.h>|<malloc/dynarray.gl.h>|g' \ -e 's|__attribute_maybe_unused__|_GL_ATTRIBUTE_MAYBE_UNUSED|g' \ -e 's|__attribute_nonnull__|_GL_ATTRIBUTE_NONNULL|g' \ -e 's|__attribute_warn_unused_result__|_GL_ATTRIBUTE_NODISCARD|g' \ -e 's|__glibc_likely|_GL_LIKELY|g' \ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ $(srcdir)/malloc/dynarray-skeleton.c > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += malloc/dynarray-skeleton.gl.h malloc/dynarray-skeleton.gl.h-t librecutils_la_SOURCES += malloc/dynarray_at_failure.c malloc/dynarray_emplace_enlarge.c malloc/dynarray_finalize.c malloc/dynarray_resize.c malloc/dynarray_resize_clear.c EXTRA_DIST += dynarray.h malloc/dynarray-skeleton.c malloc/dynarray.h EXTRA_librecutils_la_SOURCES += malloc/dynarray-skeleton.c ## end gnulib module dynarray ## begin gnulib module eloop-threshold EXTRA_DIST += eloop-threshold.h ## end gnulib module eloop-threshold ## begin gnulib module errno BUILT_SOURCES += $(ERRNO_H) # We need the following in order to create <errno.h> when the system # doesn't have one that is POSIX compliant. if GL_GENERATE_ERRNO_H errno.h: errno.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ $(srcdir)/errno.in.h > $@-t $(AM_V_at)mv $@-t $@ else errno.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += errno.h errno.h-t EXTRA_DIST += errno.in.h ## end gnulib module errno ## begin gnulib module error if GL_COND_OBJ_ERROR librecutils_la_SOURCES += error.c endif EXTRA_DIST += error.h ## end gnulib module error ## begin gnulib module euidaccess if GL_COND_OBJ_EUIDACCESS librecutils_la_SOURCES += euidaccess.c endif ## end gnulib module euidaccess ## begin gnulib module execute librecutils_la_SOURCES += execute.h execute.c ## end gnulib module execute ## begin gnulib module exitfail librecutils_la_SOURCES += exitfail.c EXTRA_DIST += exitfail.h ## end gnulib module exitfail ## begin gnulib module explicit_bzero if GL_COND_OBJ_EXPLICIT_BZERO librecutils_la_SOURCES += explicit_bzero.c endif ## end gnulib module explicit_bzero ## begin gnulib module fatal-signal librecutils_la_SOURCES += fatal-signal.h fatal-signal.c ## end gnulib module fatal-signal ## begin gnulib module fchdir if GL_COND_OBJ_FCHDIR librecutils_la_SOURCES += fchdir.c endif ## end gnulib module fchdir ## begin gnulib module fcntl if GL_COND_OBJ_FCNTL librecutils_la_SOURCES += fcntl.c endif ## end gnulib module fcntl ## begin gnulib module fcntl-h BUILT_SOURCES += fcntl.h # We need the following in order to create <fcntl.h> when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_CREAT''@/$(GL_GNULIB_CREAT)/g' \ -e 's/@''GNULIB_FCNTL''@/$(GL_GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GL_GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GL_GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GL_GNULIB_OPENAT)/g' \ -e 's/@''GNULIB_MDA_CREAT''@/$(GL_GNULIB_MDA_CREAT)/g' \ -e 's/@''GNULIB_MDA_OPEN''@/$(GL_GNULIB_MDA_OPEN)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/fcntl.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += fcntl.h fcntl.h-t EXTRA_DIST += fcntl.in.h ## end gnulib module fcntl-h ## begin gnulib module fd-hook librecutils_la_SOURCES += fd-hook.c EXTRA_DIST += fd-hook.h ## end gnulib module fd-hook ## begin gnulib module fd-safer-flag librecutils_la_SOURCES += fd-safer-flag.c dup-safer-flag.c ## end gnulib module fd-safer-flag ## begin gnulib module fdopendir if GL_COND_OBJ_FDOPENDIR librecutils_la_SOURCES += fdopendir.c endif ## end gnulib module fdopendir ## begin gnulib module file-set librecutils_la_SOURCES += file-set.c EXTRA_DIST += file-set.h ## end gnulib module file-set ## begin gnulib module filename EXTRA_DIST += filename.h ## end gnulib module filename ## begin gnulib module filenamecat-lgpl librecutils_la_SOURCES += filenamecat-lgpl.c EXTRA_DIST += filenamecat.h ## end gnulib module filenamecat-lgpl ## begin gnulib module findprog-in librecutils_la_SOURCES += findprog.h findprog-in.c ## end gnulib module findprog-in ## begin gnulib module flexmember EXTRA_DIST += flexmember.h ## end gnulib module flexmember ## begin gnulib module float BUILT_SOURCES += $(FLOAT_H) # We need the following in order to create <float.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_FLOAT_H float.h: float.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ $(srcdir)/float.in.h > $@-t $(AM_V_at)mv $@-t $@ else float.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += float.h float.h-t if GL_COND_OBJ_FLOAT librecutils_la_SOURCES += float.c endif if GL_COND_OBJ_ITOLD librecutils_la_SOURCES += itold.c endif EXTRA_DIST += float.in.h ## end gnulib module float ## begin gnulib module flock if GL_COND_OBJ_FLOCK librecutils_la_SOURCES += flock.c endif ## end gnulib module flock ## begin gnulib module floor if GL_COND_OBJ_FLOOR librecutils_la_SOURCES += floor.c endif ## end gnulib module floor ## begin gnulib module fopen EXTRA_DIST += fopen.c EXTRA_librecutils_la_SOURCES += fopen.c ## end gnulib module fopen ## begin gnulib module fopen-gnu EXTRA_DIST += fopen.c EXTRA_librecutils_la_SOURCES += fopen.c ## end gnulib module fopen-gnu ## begin gnulib module fpending if GL_COND_OBJ_FPENDING librecutils_la_SOURCES += fpending.c endif EXTRA_DIST += fpending.h stdio-impl.h ## end gnulib module fpending ## begin gnulib module fprintf-posix EXTRA_DIST += fprintf.c EXTRA_librecutils_la_SOURCES += fprintf.c ## end gnulib module fprintf-posix ## begin gnulib module fpucw EXTRA_DIST += fpucw.h ## end gnulib module fpucw ## begin gnulib module free-posix if GL_COND_OBJ_FREE librecutils_la_SOURCES += free.c endif ## end gnulib module free-posix ## begin gnulib module frexp-nolibm EXTRA_DIST += frexp.c EXTRA_librecutils_la_SOURCES += frexp.c ## end gnulib module frexp-nolibm ## begin gnulib module frexpl-nolibm EXTRA_DIST += frexp.c frexpl.c EXTRA_librecutils_la_SOURCES += frexp.c frexpl.c ## end gnulib module frexpl-nolibm ## begin gnulib module fseek if GL_COND_OBJ_FSEEK librecutils_la_SOURCES += fseek.c endif ## end gnulib module fseek ## begin gnulib module fseeko if GL_COND_OBJ_FSEEKO librecutils_la_SOURCES += fseeko.c endif EXTRA_DIST += stdio-impl.h ## end gnulib module fseeko ## begin gnulib module fseterr if GL_COND_OBJ_FSETERR librecutils_la_SOURCES += fseterr.c endif EXTRA_DIST += fseterr.h stdio-impl.h ## end gnulib module fseterr ## begin gnulib module fstat if GL_COND_OBJ_FSTAT librecutils_la_SOURCES += fstat.c endif EXTRA_DIST += stat-w32.c stat-w32.h EXTRA_librecutils_la_SOURCES += stat-w32.c ## end gnulib module fstat ## begin gnulib module fstatat if GL_COND_OBJ_FSTATAT librecutils_la_SOURCES += fstatat.c endif EXTRA_DIST += at-func.c EXTRA_librecutils_la_SOURCES += at-func.c ## end gnulib module fstatat ## begin gnulib module ftell if GL_COND_OBJ_FTELL librecutils_la_SOURCES += ftell.c endif ## end gnulib module ftell ## begin gnulib module ftello if GL_COND_OBJ_FTELLO librecutils_la_SOURCES += ftello.c endif EXTRA_DIST += stdio-impl.h ## end gnulib module ftello ## begin gnulib module full-write librecutils_la_SOURCES += full-write.h full-write.c ## end gnulib module full-write ## begin gnulib module fwriting if GL_COND_OBJ_FWRITING librecutils_la_SOURCES += fwriting.c endif EXTRA_DIST += fwriting.h stdio-impl.h ## end gnulib module fwriting ## begin gnulib module gen-header # In 'sed', replace the pattern space with a "DO NOT EDIT" comment. SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */, # '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT". SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G # '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading # "DO_NOT_EDIT". Although this could be done more simply via: # SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t # the -n and 'w' avoid a fork+exec, at least when GNU Make is used. SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t' # Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that gl_V_at = $(AM_V_GEN) ## end gnulib module gen-header ## begin gnulib module gendocs EXTRA_DIST += $(top_srcdir)/build-aux/gendocs.sh ## end gnulib module gendocs ## begin gnulib module getcwd if GL_COND_OBJ_GETCWD librecutils_la_SOURCES += getcwd.c endif ## end gnulib module getcwd ## begin gnulib module getcwd-lgpl if GL_COND_OBJ_GETCWD_LGPL librecutils_la_SOURCES += getcwd-lgpl.c endif ## end gnulib module getcwd-lgpl ## begin gnulib module getdelim if GL_COND_OBJ_GETDELIM librecutils_la_SOURCES += getdelim.c endif ## end gnulib module getdelim ## begin gnulib module getdtablesize if GL_COND_OBJ_GETDTABLESIZE librecutils_la_SOURCES += getdtablesize.c endif ## end gnulib module getdtablesize ## begin gnulib module getgroups if GL_COND_OBJ_GETGROUPS librecutils_la_SOURCES += getgroups.c endif ## end gnulib module getgroups ## begin gnulib module getline if GL_COND_OBJ_GETLINE librecutils_la_SOURCES += getline.c endif ## end gnulib module getline ## begin gnulib module getopt-posix BUILT_SOURCES += $(GETOPT_H) $(GETOPT_CDEFS_H) # We need the following in order to create <getopt.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_GETOPT_H getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ $(srcdir)/getopt.in.h > $@-t $(AM_V_at)mv $@-t $@ else getopt.h: $(top_builddir)/config.status rm -f $@ endif if GL_GENERATE_GETOPT_CDEFS_H getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status $(AM_V_GEN)$(SED_HEADER_STDOUT) \ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ $(srcdir)/getopt-cdefs.in.h > $@-t $(AM_V_at)mv $@-t $@ else getopt-cdefs.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += getopt.h getopt.h-t getopt-cdefs.h getopt-cdefs.h-t if GL_COND_OBJ_GETOPT librecutils_la_SOURCES += getopt.c getopt1.c endif EXTRA_DIST += getopt-cdefs.in.h getopt-core.h getopt-ext.h getopt-pfx-core.h getopt-pfx-ext.h getopt.in.h getopt_int.h ## end gnulib module getopt-posix ## begin gnulib module getpass EXTRA_DIST += getpass.c getpass.h EXTRA_librecutils_la_SOURCES += getpass.c ## end gnulib module getpass ## begin gnulib module getpass-gnu EXTRA_DIST += getpass.c getpass.h EXTRA_librecutils_la_SOURCES += getpass.c ## end gnulib module getpass-gnu ## begin gnulib module getprogname librecutils_la_SOURCES += getprogname.h getprogname.c ## end gnulib module getprogname ## begin gnulib module getrandom if GL_COND_OBJ_GETRANDOM librecutils_la_SOURCES += getrandom.c endif ## end gnulib module getrandom ## begin gnulib module gettext-h librecutils_la_SOURCES += gettext.h ## end gnulib module gettext-h ## begin gnulib module gettime librecutils_la_SOURCES += gettime.c ## end gnulib module gettime ## begin gnulib module gettimeofday if GL_COND_OBJ_GETTIMEOFDAY librecutils_la_SOURCES += gettimeofday.c endif ## end gnulib module gettimeofday ## begin gnulib module gnumakefile EXTRA_DIST += $(top_srcdir)/GNUmakefile distclean-local: clean-GNUmakefile clean-GNUmakefile: test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile ## end gnulib module gnumakefile ## begin gnulib module gnupload EXTRA_DIST += $(top_srcdir)/build-aux/gnupload ## end gnulib module gnupload ## begin gnulib module group-member if GL_COND_OBJ_GROUP_MEMBER librecutils_la_SOURCES += group-member.c endif ## end gnulib module group-member ## begin gnulib module hard-locale librecutils_la_SOURCES += hard-locale.c EXTRA_DIST += hard-locale.h ## end gnulib module hard-locale ## begin gnulib module hash librecutils_la_SOURCES += hash.c EXTRA_DIST += hash.h ## end gnulib module hash ## begin gnulib module hash-pjw librecutils_la_SOURCES += hash-pjw.h hash-pjw.c ## end gnulib module hash-pjw ## begin gnulib module hash-triple-simple librecutils_la_SOURCES += hash-triple-simple.c EXTRA_DIST += hash-triple.h ## end gnulib module hash-triple-simple ## begin gnulib module havelib EXTRA_DIST += $(top_srcdir)/build-aux/config.rpath ## end gnulib module havelib ## begin gnulib module ialloc librecutils_la_SOURCES += ialloc.c EXTRA_DIST += ialloc.h ## end gnulib module ialloc ## begin gnulib module idx librecutils_la_SOURCES += idx.h ## end gnulib module idx ## begin gnulib module ignore-value EXTRA_DIST += ignore-value.h ## end gnulib module ignore-value ## begin gnulib module intprops EXTRA_DIST += intprops.h ## end gnulib module intprops ## begin gnulib module inttypes-incomplete BUILT_SOURCES += inttypes.h # We need the following in order to create <inttypes.h> when the system # doesn't have one that works with the given compiler. inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ -e 's/@''GNULIB_IMAXABS''@/$(GL_GNULIB_IMAXABS)/g' \ -e 's/@''GNULIB_IMAXDIV''@/$(GL_GNULIB_IMAXDIV)/g' \ -e 's/@''GNULIB_STRTOIMAX''@/$(GL_GNULIB_STRTOIMAX)/g' \ -e 's/@''GNULIB_STRTOUMAX''@/$(GL_GNULIB_STRTOUMAX)/g' \ -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/inttypes.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += inttypes.h inttypes.h-t EXTRA_DIST += inttypes.in.h ## end gnulib module inttypes-incomplete ## begin gnulib module isnand-nolibm EXTRA_DIST += float+.h isnan.c isnand-nolibm.h isnand.c EXTRA_librecutils_la_SOURCES += isnan.c isnand.c ## end gnulib module isnand-nolibm ## begin gnulib module isnanf-nolibm EXTRA_DIST += float+.h isnan.c isnanf-nolibm.h isnanf.c EXTRA_librecutils_la_SOURCES += isnan.c isnanf.c ## end gnulib module isnanf-nolibm ## begin gnulib module isnanl-nolibm EXTRA_DIST += float+.h isnan.c isnanl-nolibm.h isnanl.c EXTRA_librecutils_la_SOURCES += isnan.c isnanl.c ## end gnulib module isnanl-nolibm ## begin gnulib module langinfo BUILT_SOURCES += langinfo.h # We need the following in order to create an empty placeholder for # <langinfo.h> when the system doesn't have one. langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ -e 's/@''GNULIB_NL_LANGINFO''@/$(GL_GNULIB_NL_LANGINFO)/g' \ -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ -e 's|@''HAVE_LANGINFO_ALTMON''@|$(HAVE_LANGINFO_ALTMON)|g' \ -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/langinfo.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += langinfo.h langinfo.h-t EXTRA_DIST += langinfo.in.h ## end gnulib module langinfo ## begin gnulib module libc-config EXTRA_DIST += cdefs.h libc-config.h ## end gnulib module libc-config ## begin gnulib module limits-h BUILT_SOURCES += $(LIMITS_H) # We need the following in order to create <limits.h> when the system # doesn't have one that is compatible with GNU. if GL_GENERATE_LIMITS_H limits.h: limits.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ $(srcdir)/limits.in.h > $@-t $(AM_V_at)mv $@-t $@ else limits.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += limits.h limits.h-t EXTRA_DIST += limits.in.h ## end gnulib module limits-h ## begin gnulib module list librecutils_la_SOURCES += gl_list.h gl_list.c ## end gnulib module list ## begin gnulib module localcharset librecutils_la_SOURCES += localcharset.c EXTRA_DIST += localcharset.h ## end gnulib module localcharset ## begin gnulib module locale BUILT_SOURCES += locale.h # We need the following in order to create <locale.h> when the system # doesn't have one that provides all definitions. locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ -e 's/@''GNULIB_LOCALECONV''@/$(GL_GNULIB_LOCALECONV)/g' \ -e 's/@''GNULIB_SETLOCALE''@/$(GL_GNULIB_SETLOCALE)/g' \ -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GL_GNULIB_SETLOCALE_NULL)/g' \ -e 's/@''GNULIB_DUPLOCALE''@/$(GL_GNULIB_DUPLOCALE)/g' \ -e 's/@''GNULIB_LOCALENAME''@/$(GL_GNULIB_LOCALENAME)/g' \ -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \ -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \ -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \ -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ -e 's|@''LOCALENAME_ENHANCE_LOCALE_FUNCS''@|$(LOCALENAME_ENHANCE_LOCALE_FUNCS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/locale.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += locale.h locale.h-t EXTRA_DIST += locale.in.h ## end gnulib module locale ## begin gnulib module localeconv if GL_COND_OBJ_LOCALECONV librecutils_la_SOURCES += localeconv.c endif ## end gnulib module localeconv ## begin gnulib module lock librecutils_la_SOURCES += glthread/lock.h glthread/lock.c ## end gnulib module lock ## begin gnulib module lseek if GL_COND_OBJ_LSEEK librecutils_la_SOURCES += lseek.c endif ## end gnulib module lseek ## begin gnulib module lstat if GL_COND_OBJ_LSTAT librecutils_la_SOURCES += lstat.c endif ## end gnulib module lstat ## begin gnulib module maintainer-makefile EXTRA_DIST += $(top_srcdir)/maint.mk ## end gnulib module maintainer-makefile ## begin gnulib module malloc-gnu EXTRA_DIST += malloc.c EXTRA_librecutils_la_SOURCES += malloc.c ## end gnulib module malloc-gnu ## begin gnulib module malloc-posix EXTRA_DIST += malloc.c EXTRA_librecutils_la_SOURCES += malloc.c ## end gnulib module malloc-posix ## begin gnulib module malloca librecutils_la_SOURCES += malloca.c EXTRA_DIST += malloca.h ## end gnulib module malloca ## begin gnulib module math BUILT_SOURCES += math.h librecutils_la_SOURCES += math.c # We need the following in order to create <math.h> when the system # doesn't have one that works with the given compiler. math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ -e 's/@''GNULIB_ACOSF''@/$(GL_GNULIB_ACOSF)/g' \ -e 's/@''GNULIB_ACOSL''@/$(GL_GNULIB_ACOSL)/g' \ -e 's/@''GNULIB_ASINF''@/$(GL_GNULIB_ASINF)/g' \ -e 's/@''GNULIB_ASINL''@/$(GL_GNULIB_ASINL)/g' \ -e 's/@''GNULIB_ATANF''@/$(GL_GNULIB_ATANF)/g' \ -e 's/@''GNULIB_ATANL''@/$(GL_GNULIB_ATANL)/g' \ -e 's/@''GNULIB_ATAN2F''@/$(GL_GNULIB_ATAN2F)/g' \ -e 's/@''GNULIB_CBRT''@/$(GL_GNULIB_CBRT)/g' \ -e 's/@''GNULIB_CBRTF''@/$(GL_GNULIB_CBRTF)/g' \ -e 's/@''GNULIB_CBRTL''@/$(GL_GNULIB_CBRTL)/g' \ -e 's/@''GNULIB_CEIL''@/$(GL_GNULIB_CEIL)/g' \ -e 's/@''GNULIB_CEILF''@/$(GL_GNULIB_CEILF)/g' \ -e 's/@''GNULIB_CEILL''@/$(GL_GNULIB_CEILL)/g' \ -e 's/@''GNULIB_COPYSIGN''@/$(GL_GNULIB_COPYSIGN)/g' \ -e 's/@''GNULIB_COPYSIGNF''@/$(GL_GNULIB_COPYSIGNF)/g' \ -e 's/@''GNULIB_COPYSIGNL''@/$(GL_GNULIB_COPYSIGNL)/g' \ -e 's/@''GNULIB_COSF''@/$(GL_GNULIB_COSF)/g' \ -e 's/@''GNULIB_COSL''@/$(GL_GNULIB_COSL)/g' \ -e 's/@''GNULIB_COSHF''@/$(GL_GNULIB_COSHF)/g' \ -e 's/@''GNULIB_EXPF''@/$(GL_GNULIB_EXPF)/g' \ -e 's/@''GNULIB_EXPL''@/$(GL_GNULIB_EXPL)/g' \ -e 's/@''GNULIB_EXP2''@/$(GL_GNULIB_EXP2)/g' \ -e 's/@''GNULIB_EXP2F''@/$(GL_GNULIB_EXP2F)/g' \ -e 's/@''GNULIB_EXP2L''@/$(GL_GNULIB_EXP2L)/g' \ -e 's/@''GNULIB_EXPM1''@/$(GL_GNULIB_EXPM1)/g' \ -e 's/@''GNULIB_EXPM1F''@/$(GL_GNULIB_EXPM1F)/g' \ -e 's/@''GNULIB_EXPM1L''@/$(GL_GNULIB_EXPM1L)/g' \ -e 's/@''GNULIB_FABSF''@/$(GL_GNULIB_FABSF)/g' \ -e 's/@''GNULIB_FABSL''@/$(GL_GNULIB_FABSL)/g' \ -e 's/@''GNULIB_FLOOR''@/$(GL_GNULIB_FLOOR)/g' \ -e 's/@''GNULIB_FLOORF''@/$(GL_GNULIB_FLOORF)/g' \ -e 's/@''GNULIB_FLOORL''@/$(GL_GNULIB_FLOORL)/g' \ -e 's/@''GNULIB_FMA''@/$(GL_GNULIB_FMA)/g' \ -e 's/@''GNULIB_FMAF''@/$(GL_GNULIB_FMAF)/g' \ -e 's/@''GNULIB_FMAL''@/$(GL_GNULIB_FMAL)/g' \ -e 's/@''GNULIB_FMOD''@/$(GL_GNULIB_FMOD)/g' \ -e 's/@''GNULIB_FMODF''@/$(GL_GNULIB_FMODF)/g' \ -e 's/@''GNULIB_FMODL''@/$(GL_GNULIB_FMODL)/g' \ -e 's/@''GNULIB_FREXPF''@/$(GL_GNULIB_FREXPF)/g' \ -e 's/@''GNULIB_FREXP''@/$(GL_GNULIB_FREXP)/g' \ -e 's/@''GNULIB_FREXPL''@/$(GL_GNULIB_FREXPL)/g' \ -e 's/@''GNULIB_HYPOT''@/$(GL_GNULIB_HYPOT)/g' \ -e 's/@''GNULIB_HYPOTF''@/$(GL_GNULIB_HYPOTF)/g' \ -e 's/@''GNULIB_HYPOTL''@/$(GL_GNULIB_HYPOTL)/g' \ < $(srcdir)/math.in.h | \ sed -e 's/@''GNULIB_ILOGB''@/$(GL_GNULIB_ILOGB)/g' \ -e 's/@''GNULIB_ILOGBF''@/$(GL_GNULIB_ILOGBF)/g' \ -e 's/@''GNULIB_ILOGBL''@/$(GL_GNULIB_ILOGBL)/g' \ -e 's/@''GNULIB_ISFINITE''@/$(GL_GNULIB_ISFINITE)/g' \ -e 's/@''GNULIB_ISINF''@/$(GL_GNULIB_ISINF)/g' \ -e 's/@''GNULIB_ISNAN''@/$(GL_GNULIB_ISNAN)/g' \ -e 's/@''GNULIB_ISNANF''@/$(GL_GNULIB_ISNANF)/g' \ -e 's/@''GNULIB_ISNAND''@/$(GL_GNULIB_ISNAND)/g' \ -e 's/@''GNULIB_ISNANL''@/$(GL_GNULIB_ISNANL)/g' \ -e 's/@''GNULIB_LDEXPF''@/$(GL_GNULIB_LDEXPF)/g' \ -e 's/@''GNULIB_LDEXPL''@/$(GL_GNULIB_LDEXPL)/g' \ -e 's/@''GNULIB_LOG''@/$(GL_GNULIB_LOG)/g' \ -e 's/@''GNULIB_LOGF''@/$(GL_GNULIB_LOGF)/g' \ -e 's/@''GNULIB_LOGL''@/$(GL_GNULIB_LOGL)/g' \ -e 's/@''GNULIB_LOG10''@/$(GL_GNULIB_LOG10)/g' \ -e 's/@''GNULIB_LOG10F''@/$(GL_GNULIB_LOG10F)/g' \ -e 's/@''GNULIB_LOG10L''@/$(GL_GNULIB_LOG10L)/g' \ -e 's/@''GNULIB_LOG1P''@/$(GL_GNULIB_LOG1P)/g' \ -e 's/@''GNULIB_LOG1PF''@/$(GL_GNULIB_LOG1PF)/g' \ -e 's/@''GNULIB_LOG1PL''@/$(GL_GNULIB_LOG1PL)/g' \ -e 's/@''GNULIB_LOG2''@/$(GL_GNULIB_LOG2)/g' \ -e 's/@''GNULIB_LOG2F''@/$(GL_GNULIB_LOG2F)/g' \ -e 's/@''GNULIB_LOG2L''@/$(GL_GNULIB_LOG2L)/g' \ -e 's/@''GNULIB_LOGB''@/$(GL_GNULIB_LOGB)/g' \ -e 's/@''GNULIB_LOGBF''@/$(GL_GNULIB_LOGBF)/g' \ -e 's/@''GNULIB_LOGBL''@/$(GL_GNULIB_LOGBL)/g' \ -e 's/@''GNULIB_MODF''@/$(GL_GNULIB_MODF)/g' \ -e 's/@''GNULIB_MODFF''@/$(GL_GNULIB_MODFF)/g' \ -e 's/@''GNULIB_MODFL''@/$(GL_GNULIB_MODFL)/g' \ -e 's/@''GNULIB_POWF''@/$(GL_GNULIB_POWF)/g' \ -e 's/@''GNULIB_REMAINDER''@/$(GL_GNULIB_REMAINDER)/g' \ -e 's/@''GNULIB_REMAINDERF''@/$(GL_GNULIB_REMAINDERF)/g' \ -e 's/@''GNULIB_REMAINDERL''@/$(GL_GNULIB_REMAINDERL)/g' \ -e 's/@''GNULIB_RINT''@/$(GL_GNULIB_RINT)/g' \ -e 's/@''GNULIB_RINTF''@/$(GL_GNULIB_RINTF)/g' \ -e 's/@''GNULIB_RINTL''@/$(GL_GNULIB_RINTL)/g' \ -e 's/@''GNULIB_ROUND''@/$(GL_GNULIB_ROUND)/g' \ -e 's/@''GNULIB_ROUNDF''@/$(GL_GNULIB_ROUNDF)/g' \ -e 's/@''GNULIB_ROUNDL''@/$(GL_GNULIB_ROUNDL)/g' \ -e 's/@''GNULIB_SIGNBIT''@/$(GL_GNULIB_SIGNBIT)/g' \ -e 's/@''GNULIB_SINF''@/$(GL_GNULIB_SINF)/g' \ -e 's/@''GNULIB_SINL''@/$(GL_GNULIB_SINL)/g' \ -e 's/@''GNULIB_SINHF''@/$(GL_GNULIB_SINHF)/g' \ -e 's/@''GNULIB_SQRTF''@/$(GL_GNULIB_SQRTF)/g' \ -e 's/@''GNULIB_SQRTL''@/$(GL_GNULIB_SQRTL)/g' \ -e 's/@''GNULIB_TANF''@/$(GL_GNULIB_TANF)/g' \ -e 's/@''GNULIB_TANL''@/$(GL_GNULIB_TANL)/g' \ -e 's/@''GNULIB_TANHF''@/$(GL_GNULIB_TANHF)/g' \ -e 's/@''GNULIB_TRUNC''@/$(GL_GNULIB_TRUNC)/g' \ -e 's/@''GNULIB_TRUNCF''@/$(GL_GNULIB_TRUNCF)/g' \ -e 's/@''GNULIB_TRUNCL''@/$(GL_GNULIB_TRUNCL)/g' \ -e 's/@''GNULIB_MDA_J0''@/$(GL_GNULIB_MDA_J0)/g' \ -e 's/@''GNULIB_MDA_J1''@/$(GL_GNULIB_MDA_J1)/g' \ -e 's/@''GNULIB_MDA_JN''@/$(GL_GNULIB_MDA_JN)/g' \ -e 's/@''GNULIB_MDA_Y0''@/$(GL_GNULIB_MDA_Y0)/g' \ -e 's/@''GNULIB_MDA_Y1''@/$(GL_GNULIB_MDA_Y1)/g' \ -e 's/@''GNULIB_MDA_YN''@/$(GL_GNULIB_MDA_YN)/g' \ | \ sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \ -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \ -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \ -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \ -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \ -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \ -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \ -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \ -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \ -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \ -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \ -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \ -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \ -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \ -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \ -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \ -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \ -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \ -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \ -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \ -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \ -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \ -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \ -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \ -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \ -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \ -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \ -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \ -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \ -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \ -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \ -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \ -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \ -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \ -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \ -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \ -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \ -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \ -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \ -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \ -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \ -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \ -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \ -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \ -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \ -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \ -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \ -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \ -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \ -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \ -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \ -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \ -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \ -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \ -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \ -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \ -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \ -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \ -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \ -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \ -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \ -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \ -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \ -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \ -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \ -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \ -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \ -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \ -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \ -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \ -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \ -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \ -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \ -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \ -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \ -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \ -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \ -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \ -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \ -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ | \ sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ -e 's|@''REPLACE_EXPL''@|$(REPLACE_EXPL)|g' \ -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ -e 's|@''REPLACE_EXPM1L''@|$(REPLACE_EXPM1L)|g' \ -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \ -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \ -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \ -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \ -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \ -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \ -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \ -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \ -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \ -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \ -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \ -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \ -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \ -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \ -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \ -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \ -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \ -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \ -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \ -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \ -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \ -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \ -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \ -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \ -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \ -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \ -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \ -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \ -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ -e 's|@''REPLACE_RINTL''@|$(REPLACE_RINTL)|g' \ -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ -e 's|@''REPLACE_SIGNBIT_USING_BUILTINS''@|$(REPLACE_SIGNBIT_USING_BUILTINS)|g' \ -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += math.h math.h-t EXTRA_DIST += math.in.h ## end gnulib module math ## begin gnulib module mbrlen if GL_COND_OBJ_MBRLEN librecutils_la_SOURCES += mbrlen.c endif ## end gnulib module mbrlen ## begin gnulib module mbrtowc if GL_COND_OBJ_MBRTOWC librecutils_la_SOURCES += mbrtowc.c endif EXTRA_DIST += lc-charset-dispatch.c lc-charset-dispatch.h mbrtowc-impl-utf8.h mbrtowc-impl.h mbtowc-lock.c mbtowc-lock.h windows-initguard.h EXTRA_librecutils_la_SOURCES += lc-charset-dispatch.c mbtowc-lock.c ## end gnulib module mbrtowc ## begin gnulib module mbsinit if GL_COND_OBJ_MBSINIT librecutils_la_SOURCES += mbsinit.c endif ## end gnulib module mbsinit ## begin gnulib module mbtowc if GL_COND_OBJ_MBTOWC librecutils_la_SOURCES += mbtowc.c endif EXTRA_DIST += mbtowc-impl.h ## end gnulib module mbtowc ## begin gnulib module memchr if GL_COND_OBJ_MEMCHR librecutils_la_SOURCES += memchr.c endif EXTRA_DIST += memchr.valgrind ## end gnulib module memchr ## begin gnulib module mempcpy if GL_COND_OBJ_MEMPCPY librecutils_la_SOURCES += mempcpy.c endif ## end gnulib module mempcpy ## begin gnulib module memrchr if GL_COND_OBJ_MEMRCHR librecutils_la_SOURCES += memrchr.c endif ## end gnulib module memrchr ## begin gnulib module minmax librecutils_la_SOURCES += minmax.h ## end gnulib module minmax ## begin gnulib module mkdir if GL_COND_OBJ_MKDIR librecutils_la_SOURCES += mkdir.c endif ## end gnulib module mkdir ## begin gnulib module mkostemp if GL_COND_OBJ_MKOSTEMP librecutils_la_SOURCES += mkostemp.c endif ## end gnulib module mkostemp ## begin gnulib module mkstemp if GL_COND_OBJ_MKSTEMP librecutils_la_SOURCES += mkstemp.c endif ## end gnulib module mkstemp ## begin gnulib module mktime EXTRA_DIST += mktime-internal.h mktime.c EXTRA_librecutils_la_SOURCES += mktime.c ## end gnulib module mktime ## begin gnulib module mktime-internal EXTRA_DIST += mktime-internal.h mktime.c EXTRA_librecutils_la_SOURCES += mktime.c ## end gnulib module mktime-internal ## begin gnulib module msvc-inval if GL_COND_OBJ_MSVC_INVAL librecutils_la_SOURCES += msvc-inval.c endif EXTRA_DIST += msvc-inval.h ## end gnulib module msvc-inval ## begin gnulib module msvc-nothrow if GL_COND_OBJ_MSVC_NOTHROW librecutils_la_SOURCES += msvc-nothrow.c endif EXTRA_DIST += msvc-nothrow.h ## end gnulib module msvc-nothrow ## begin gnulib module nl_langinfo if GL_COND_OBJ_NL_LANGINFO librecutils_la_SOURCES += nl_langinfo.c endif if GL_COND_OBJ_NL_LANGINFO_LOCK librecutils_la_SOURCES += nl_langinfo-lock.c endif EXTRA_DIST += windows-initguard.h ## end gnulib module nl_langinfo ## begin gnulib module nstrftime librecutils_la_SOURCES += nstrftime.c EXTRA_DIST += strftime.h ## end gnulib module nstrftime ## begin gnulib module obstack if GL_COND_OBJ_OBSTACK librecutils_la_SOURCES += obstack.c endif EXTRA_DIST += obstack.h ## end gnulib module obstack ## begin gnulib module open if GL_COND_OBJ_OPEN librecutils_la_SOURCES += open.c endif ## end gnulib module open ## begin gnulib module openat if GL_COND_OBJ_OPENAT librecutils_la_SOURCES += openat.c endif ## end gnulib module openat ## begin gnulib module openat-die librecutils_la_SOURCES += openat-die.c ## end gnulib module openat-die ## begin gnulib module openat-h EXTRA_DIST += openat.h ## end gnulib module openat-h ## begin gnulib module opendir if GL_COND_OBJ_OPENDIR librecutils_la_SOURCES += opendir.c endif EXTRA_DIST += dirent-private.h ## end gnulib module opendir ## begin gnulib module parse-datetime # The Automake generated .y.c rule is broken: When executed in a VPATH build, # - The .c file gets generated in the build directory. But since it requires # special tools to rebuild it, we need to distribute it in the tarballs, # and by the GNU Coding Standards # <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html> # the file should be generated in the source directory. # - The #line directives in the .c file refer to a nonexistent file once it # has been moved from the build directory to the source directory. This # leads to error if 'lcov' is used later. # Additionally, here we assume GNU Bison and therefore don't need the ylwrap # script. # Therefore we override this rule. # Since this is a rule that produces multiple files, we apply the idiom from # <https://lists.gnu.org/archive/html/bug-make/2020-09/msg00008.html>, so that # it works also in parallel 'make'. generate-parse-datetime: $(AM_V_YACC)$(PARSE_DATETIME_BISON) -d $(YFLAGS) $(AM_YFLAGS) $(srcdir)/parse-datetime.y \ && test ':' = '$(PARSE_DATETIME_BISON)' || { \ sed -e 's|".*/parse-datetime\.y"|"parse-datetime.y"|' \ -e 's|"parse-datetime\.tab\.c"|"parse-datetime.c"|' \ -e 's|"parse-datetime\.tab\.h"|"parse-datetime-gen.h"|' \ < parse-datetime.tab.c > parse-datetime.c-tmp \ && sed -e 's|".*/parse-datetime\.y"|"parse-datetime.y"|' \ -e 's|"parse-datetime\.tab\.h"|"parse-datetime-gen.h"|' \ < parse-datetime.tab.h > parse-datetime-gen.h-tmp \ && rm -f parse-datetime.tab.c parse-datetime.tab.h \ && mv parse-datetime.c-tmp $(srcdir)/parse-datetime.c \ && mv parse-datetime-gen.h-tmp $(srcdir)/parse-datetime-gen.h; \ } .PHONY: generate-parse-datetime # The above rule will generate files with time stamp order # parse-datetime.y <= parse-datetime.c <= parse-datetime-gen.h. parse-datetime.c: parse-datetime.y @{ test -f $(srcdir)/parse-datetime.c && test ! $(srcdir)/parse-datetime.c -ot $(srcdir)/parse-datetime.y; } || $(MAKE) generate-parse-datetime parse-datetime-gen.h: parse-datetime.c @{ test -f $(srcdir)/parse-datetime-gen.h && test ! $(srcdir)/parse-datetime-gen.h -ot $(srcdir)/parse-datetime.c; } || $(MAKE) generate-parse-datetime librecutils_la_SOURCES += parse-datetime.y BUILT_SOURCES += parse-datetime.c parse-datetime-gen.h MOSTLYCLEANFILES += parse-datetime.tab.c parse-datetime.tab.h parse-datetime.c-tmp parse-datetime-gen.h-tmp MAINTAINERCLEANFILES += parse-datetime.c parse-datetime-gen.h EXTRA_DIST += parse-datetime.c parse-datetime-gen.h EXTRA_DIST += parse-datetime.h ## end gnulib module parse-datetime ## begin gnulib module pathmax EXTRA_DIST += pathmax.h ## end gnulib module pathmax ## begin gnulib module pipe-posix if GL_COND_OBJ_PIPE librecutils_la_SOURCES += pipe.c endif ## end gnulib module pipe-posix ## begin gnulib module posix_spawn if GL_COND_OBJ_SPAWN librecutils_la_SOURCES += spawn.c endif ## end gnulib module posix_spawn ## begin gnulib module posix_spawn-internal if GL_COND_OBJ_SPAWNI librecutils_la_SOURCES += spawni.c endif EXTRA_DIST += spawn_int.h ## end gnulib module posix_spawn-internal ## begin gnulib module posix_spawn_file_actions_addchdir if GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR librecutils_la_SOURCES += spawn_faction_addchdir.c endif EXTRA_DIST += spawn_int.h ## end gnulib module posix_spawn_file_actions_addchdir ## begin gnulib module posix_spawn_file_actions_addopen if GL_COND_OBJ_SPAWN_FACTION_ADDOPEN librecutils_la_SOURCES += spawn_faction_addopen.c endif EXTRA_DIST += spawn_int.h ## end gnulib module posix_spawn_file_actions_addopen ## begin gnulib module posix_spawn_file_actions_destroy if GL_COND_OBJ_SPAWN_FACTION_DESTROY librecutils_la_SOURCES += spawn_faction_destroy.c endif ## end gnulib module posix_spawn_file_actions_destroy ## begin gnulib module posix_spawn_file_actions_init if GL_COND_OBJ_SPAWN_FACTION_INIT librecutils_la_SOURCES += spawn_faction_init.c endif EXTRA_DIST += spawn_int.h ## end gnulib module posix_spawn_file_actions_init ## begin gnulib module posix_spawnattr_destroy if GL_COND_OBJ_SPAWNATTR_DESTROY librecutils_la_SOURCES += spawnattr_destroy.c endif ## end gnulib module posix_spawnattr_destroy ## begin gnulib module posix_spawnattr_init if GL_COND_OBJ_SPAWNATTR_INIT librecutils_la_SOURCES += spawnattr_init.c endif ## end gnulib module posix_spawnattr_init ## begin gnulib module posix_spawnattr_setflags if GL_COND_OBJ_SPAWNATTR_SETFLAGS librecutils_la_SOURCES += spawnattr_setflags.c endif ## end gnulib module posix_spawnattr_setflags ## begin gnulib module posix_spawnattr_setsigmask if GL_COND_OBJ_SPAWNATTR_SETSIGMASK librecutils_la_SOURCES += spawnattr_setsigmask.c endif ## end gnulib module posix_spawnattr_setsigmask ## begin gnulib module posix_spawnp if GL_COND_OBJ_SPAWNP librecutils_la_SOURCES += spawnp.c endif ## end gnulib module posix_spawnp ## begin gnulib module printf-frexp librecutils_la_SOURCES += printf-frexp.c EXTRA_DIST += printf-frexp.h ## end gnulib module printf-frexp ## begin gnulib module printf-frexpl librecutils_la_SOURCES += printf-frexpl.c EXTRA_DIST += printf-frexp.c printf-frexpl.h EXTRA_librecutils_la_SOURCES += printf-frexp.c ## end gnulib module printf-frexpl ## begin gnulib module printf-posix EXTRA_DIST += printf.c EXTRA_librecutils_la_SOURCES += printf.c ## end gnulib module printf-posix ## begin gnulib module progname librecutils_la_SOURCES += progname.h progname.c ## end gnulib module progname ## begin gnulib module qcopy-acl librecutils_la_SOURCES += qcopy-acl.c ## end gnulib module qcopy-acl ## begin gnulib module qset-acl librecutils_la_SOURCES += qset-acl.c ## end gnulib module qset-acl ## begin gnulib module quote EXTRA_DIST += quote.h ## end gnulib module quote ## begin gnulib module quotearg librecutils_la_SOURCES += quotearg.c EXTRA_DIST += quote.h quotearg.h ## end gnulib module quotearg ## begin gnulib module raise if GL_COND_OBJ_RAISE librecutils_la_SOURCES += raise.c endif ## end gnulib module raise ## begin gnulib module random_r if GL_COND_OBJ_RANDOM_R librecutils_la_SOURCES += random_r.c endif ## end gnulib module random_r ## begin gnulib module rawmemchr if GL_COND_OBJ_RAWMEMCHR librecutils_la_SOURCES += rawmemchr.c endif EXTRA_DIST += rawmemchr.valgrind ## end gnulib module rawmemchr ## begin gnulib module read if GL_COND_OBJ_READ librecutils_la_SOURCES += read.c endif ## end gnulib module read ## begin gnulib module read-file librecutils_la_SOURCES += read-file.c EXTRA_DIST += read-file.h ## end gnulib module read-file ## begin gnulib module readdir if GL_COND_OBJ_READDIR librecutils_la_SOURCES += readdir.c endif EXTRA_DIST += dirent-private.h ## end gnulib module readdir ## begin gnulib module readline if GL_COND_OBJ_READLINE librecutils_la_SOURCES += readline.c endif EXTRA_DIST += readline.h ## end gnulib module readline ## begin gnulib module readlink if GL_COND_OBJ_READLINK librecutils_la_SOURCES += readlink.c endif ## end gnulib module readlink ## begin gnulib module realloc-gnu EXTRA_DIST += realloc.c EXTRA_librecutils_la_SOURCES += realloc.c ## end gnulib module realloc-gnu ## begin gnulib module realloc-posix EXTRA_DIST += realloc.c EXTRA_librecutils_la_SOURCES += realloc.c ## end gnulib module realloc-posix ## begin gnulib module reallocarray if GL_COND_OBJ_REALLOCARRAY librecutils_la_SOURCES += reallocarray.c endif ## end gnulib module reallocarray ## begin gnulib module regex if GL_COND_OBJ_REGEX librecutils_la_SOURCES += regex.c endif EXTRA_DIST += regcomp.c regex.h regex_internal.c regex_internal.h regexec.c EXTRA_librecutils_la_SOURCES += regcomp.c regex_internal.c regexec.c ## end gnulib module regex ## begin gnulib module remove if GL_COND_OBJ_REMOVE librecutils_la_SOURCES += remove.c endif ## end gnulib module remove ## begin gnulib module rename if GL_COND_OBJ_RENAME librecutils_la_SOURCES += rename.c endif ## end gnulib module rename ## begin gnulib module rewinddir if GL_COND_OBJ_REWINDDIR librecutils_la_SOURCES += rewinddir.c endif EXTRA_DIST += dirent-private.h ## end gnulib module rewinddir ## begin gnulib module rmdir if GL_COND_OBJ_RMDIR librecutils_la_SOURCES += rmdir.c endif ## end gnulib module rmdir ## begin gnulib module root-uid EXTRA_DIST += root-uid.h ## end gnulib module root-uid ## begin gnulib module safe-read librecutils_la_SOURCES += safe-read.c EXTRA_DIST += safe-read.h sys-limits.h ## end gnulib module safe-read ## begin gnulib module safe-write librecutils_la_SOURCES += safe-write.c EXTRA_DIST += safe-read.c safe-write.h sys-limits.h EXTRA_librecutils_la_SOURCES += safe-read.c ## end gnulib module safe-write ## begin gnulib module same-inode EXTRA_DIST += same-inode.h ## end gnulib module same-inode ## begin gnulib module save-cwd librecutils_la_SOURCES += save-cwd.c EXTRA_DIST += save-cwd.h ## end gnulib module save-cwd ## begin gnulib module sched BUILT_SOURCES += sched.h # We need the following in order to create a replacement for <sched.h> when # the system doesn't have one. sched.h: sched.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \ -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \ -e 's/@''GNULIB_SCHED_YIELD''@/$(GL_GNULIB_SCHED_YIELD)/g' \ -e 's|@''HAVE_SCHED_YIELD''@|$(HAVE_SCHED_YIELD)|g' \ -e 's|@''REPLACE_SCHED_YIELD''@|$(REPLACE_SCHED_YIELD)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sched.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sched.h sched.h-t EXTRA_DIST += sched.in.h ## end gnulib module sched ## begin gnulib module scratch_buffer BUILT_SOURCES += malloc/scratch_buffer.gl.h malloc/scratch_buffer.gl.h: malloc/scratch_buffer.h $(AM_V_GEN)$(MKDIR_P) '%reldir%/malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|__always_inline|inline _GL_ATTRIBUTE_ALWAYS_INLINE|g' \ -e 's|__glibc_likely|_GL_LIKELY|g' \ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ -e '/libc_hidden_proto/d' \ $(srcdir)/malloc/scratch_buffer.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += malloc/scratch_buffer.gl.h malloc/scratch_buffer.gl.h-t librecutils_la_SOURCES += malloc/scratch_buffer_dupfree.c malloc/scratch_buffer_grow.c malloc/scratch_buffer_grow_preserve.c malloc/scratch_buffer_set_array_size.c EXTRA_DIST += malloc/scratch_buffer.h scratch_buffer.h ## end gnulib module scratch_buffer ## begin gnulib module secure_getenv if GL_COND_OBJ_SECURE_GETENV librecutils_la_SOURCES += secure_getenv.c endif ## end gnulib module secure_getenv ## begin gnulib module selinux-h BUILT_SOURCES += selinux/selinux.h selinux/selinux.h: se-selinux.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) '%reldir%/selinux' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SELINUX_SELINUX_H''@|$(NEXT_SELINUX_SELINUX_H)|g' \ $(srcdir)/se-selinux.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += selinux/selinux.h selinux/selinux.h-t BUILT_SOURCES += $(SELINUX_CONTEXT_H) if GL_GENERATE_SELINUX_CONTEXT_H selinux/context.h: se-context.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) '%reldir%/selinux' $(AM_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/se-context.in.h $(AM_V_at)mv $@-t $@ else selinux/context.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += selinux/context.h selinux/context.h-t BUILT_SOURCES += $(SELINUX_LABEL_H) if GL_GENERATE_SELINUX_LABEL_H selinux/label.h: se-label.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) '%reldir%/selinux' $(AM_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/se-label.in.h $(AM_V_at)mv $@-t $@ else selinux/label.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += selinux/label.h selinux/label.h-t MOSTLYCLEANDIRS += selinux if GL_COND_OBJ_GETFILECON librecutils_la_SOURCES += getfilecon.c endif librecutils_la_SOURCES += se-context.in.h se-label.in.h se-selinux.in.h se-context.c se-label.c se-selinux.c ## end gnulib module selinux-h ## begin gnulib module setenv if GL_COND_OBJ_SETENV librecutils_la_SOURCES += setenv.c endif ## end gnulib module setenv ## begin gnulib module setlocale-null librecutils_la_SOURCES += setlocale_null.c if GL_COND_OBJ_SETLOCALE_LOCK librecutils_la_SOURCES += setlocale-lock.c endif EXTRA_DIST += setlocale_null.h windows-initguard.h ## end gnulib module setlocale-null ## begin gnulib module sigaction if GL_COND_OBJ_SIGACTION librecutils_la_SOURCES += sigaction.c endif librecutils_la_SOURCES += sig-handler.c EXTRA_DIST += sig-handler.h ## end gnulib module sigaction ## begin gnulib module signal-h BUILT_SOURCES += signal.h # We need the following in order to create <signal.h> when the system # doesn't have a complete one. signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GL_GNULIB_PTHREAD_SIGMASK)/g' \ -e 's/@''GNULIB_RAISE''@/$(GL_GNULIB_RAISE)/g' \ -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GL_GNULIB_SIGNAL_H_SIGPIPE)/g' \ -e 's/@''GNULIB_SIGPROCMASK''@/$(GL_GNULIB_SIGPROCMASK)/g' \ -e 's/@''GNULIB_SIGACTION''@/$(GL_GNULIB_SIGACTION)/g' \ -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \ -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \ -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \ -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \ -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/signal.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += signal.h signal.h-t EXTRA_DIST += signal.in.h ## end gnulib module signal-h ## begin gnulib module signbit if GL_COND_OBJ_SIGNBIT3 librecutils_la_SOURCES += signbitf.c signbitd.c signbitl.c endif EXTRA_DIST += float+.h ## end gnulib module signbit ## begin gnulib module sigprocmask if GL_COND_OBJ_SIGPROCMASK librecutils_la_SOURCES += sigprocmask.c endif ## end gnulib module sigprocmask ## begin gnulib module size_max librecutils_la_SOURCES += size_max.h ## end gnulib module size_max ## begin gnulib module snippet/_Noreturn # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H=$(srcdir)/_Noreturn.h EXTRA_DIST += _Noreturn.h ## end gnulib module snippet/_Noreturn ## begin gnulib module snippet/arg-nonnull # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H=$(srcdir)/arg-nonnull.h EXTRA_DIST += arg-nonnull.h ## end gnulib module snippet/arg-nonnull ## begin gnulib module snippet/c++defs # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H=$(srcdir)/c++defs.h EXTRA_DIST += c++defs.h ## end gnulib module snippet/c++defs ## begin gnulib module snippet/warn-on-use # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H=$(srcdir)/warn-on-use.h EXTRA_DIST += warn-on-use.h ## end gnulib module snippet/warn-on-use ## begin gnulib module spawn BUILT_SOURCES += spawn.h # We need the following in order to create a replacement for <spawn.h> when # the system doesn't have one. spawn.h: spawn.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_SPAWN_H''@|$(HAVE_SPAWN_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SPAWN_H''@|$(NEXT_SPAWN_H)|g' \ -e 's/@''GNULIB_POSIX_SPAWN''@/$(GL_GNULIB_POSIX_SPAWN)/g' \ -e 's/@''GNULIB_POSIX_SPAWNP''@/$(GL_GNULIB_POSIX_SPAWNP)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_INIT''@/$(GL_GNULIB_POSIX_SPAWNATTR_INIT)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETFLAGS''@/$(GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETFLAGS''@/$(GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETPGROUP''@/$(GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETPGROUP''@/$(GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM''@/$(GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM''@/$(GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY''@/$(GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY''@/$(GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT''@/$(GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT''@/$(GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGMASK''@/$(GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGMASK''@/$(GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_DESTROY''@/$(GL_GNULIB_POSIX_SPAWNATTR_DESTROY)/g' \ -e 's|@''HAVE_POSIX_SPAWN''@|$(HAVE_POSIX_SPAWN)|g' \ -e 's|@''HAVE_POSIX_SPAWNATTR_T''@|$(HAVE_POSIX_SPAWNATTR_T)|g' \ -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_T''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_T)|g' \ -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \ -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)|g' \ -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/spawn.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += spawn.h spawn.h-t EXTRA_DIST += spawn.in.h ## end gnulib module spawn ## begin gnulib module stat if GL_COND_OBJ_STAT librecutils_la_SOURCES += stat.c endif EXTRA_DIST += stat-w32.c stat-w32.h EXTRA_librecutils_la_SOURCES += stat-w32.c ## end gnulib module stat ## begin gnulib module stat-macros EXTRA_DIST += stat-macros.h ## end gnulib module stat-macros ## begin gnulib module stat-time librecutils_la_SOURCES += stat-time.c EXTRA_DIST += stat-time.h ## end gnulib module stat-time ## begin gnulib module stdalign BUILT_SOURCES += $(STDALIGN_H) # We need the following in order to create <stdalign.h> when the system # doesn't have one that works. if GL_GENERATE_STDALIGN_H stdalign.h: stdalign.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/stdalign.in.h $(AM_V_at)mv $@-t $@ else stdalign.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdalign.h stdalign.h-t EXTRA_DIST += stdalign.in.h ## end gnulib module stdalign ## begin gnulib module stdarg BUILT_SOURCES += $(STDARG_H) # We need the following in order to create <stdarg.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDARG_H stdarg.h: stdarg.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ $(srcdir)/stdarg.in.h > $@-t $(AM_V_at)mv $@-t $@ else stdarg.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdarg.h stdarg.h-t EXTRA_DIST += stdarg.in.h ## end gnulib module stdarg ## begin gnulib module stdbool BUILT_SOURCES += $(STDBOOL_H) # We need the following in order to create <stdbool.h> when the system # doesn't have one that works. if GL_GENERATE_STDBOOL_H stdbool.h: stdbool.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' \ $(srcdir)/stdbool.in.h > $@-t $(AM_V_at)mv $@-t $@ else stdbool.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdbool.h stdbool.h-t EXTRA_DIST += stdbool.in.h ## end gnulib module stdbool ## begin gnulib module stddef BUILT_SOURCES += $(STDDEF_H) # We need the following in order to create <stddef.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDDEF_H stddef.h: stddef.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ $(srcdir)/stddef.in.h > $@-t $(AM_V_at)mv $@-t $@ else stddef.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stddef.h stddef.h-t EXTRA_DIST += stddef.in.h ## end gnulib module stddef ## begin gnulib module stdint BUILT_SOURCES += $(STDINT_H) # We need the following in order to create <stdint.h> when the system # doesn't have one that works with the given compiler. if GL_GENERATE_STDINT_H stdint.h: stdint.in.h $(top_builddir)/config.status $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ $(srcdir)/stdint.in.h > $@-t $(AM_V_at)mv $@-t $@ else stdint.h: $(top_builddir)/config.status rm -f $@ endif MOSTLYCLEANFILES += stdint.h stdint.h-t EXTRA_DIST += stdint.in.h ## end gnulib module stdint ## begin gnulib module stdio BUILT_SOURCES += stdio.h # We need the following in order to create <stdio.h> when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GL_GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GL_GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GL_GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GL_GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GL_GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GL_GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GL_GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FOPEN_GNU''@/$(GL_GNULIB_FOPEN_GNU)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GL_GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GL_GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GL_GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GL_GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GL_GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GL_GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GL_GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GL_GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GL_GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GL_GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GL_GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GL_GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GL_GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GL_GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GL_GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GL_GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GL_GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GL_GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GL_GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GL_GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GL_GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GL_GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GL_GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GL_GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GL_GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GL_GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GL_GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GL_GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GL_GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GL_GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GL_GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GL_GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GL_GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GL_GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GL_GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GL_GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GL_GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GL_GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GL_GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GL_GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GL_GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GL_GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GL_GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GL_GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GL_GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GL_GNULIB_VSPRINTF_POSIX)/g' \ -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GL_GNULIB_MDA_FCLOSEALL)/g' \ -e 's/@''GNULIB_MDA_FDOPEN''@/$(GL_GNULIB_MDA_FDOPEN)/g' \ -e 's/@''GNULIB_MDA_FILENO''@/$(GL_GNULIB_MDA_FILENO)/g' \ -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \ < $(srcdir)/stdio.in.h | \ sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FOPEN_FOR_FOPEN_GNU''@|$(REPLACE_FOPEN_FOR_FOPEN_GNU)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += stdio.h stdio.h-t if GL_COND_OBJ_STDIO_READ librecutils_la_SOURCES += stdio-read.c endif if GL_COND_OBJ_STDIO_WRITE librecutils_la_SOURCES += stdio-write.c endif EXTRA_DIST += stdio.in.h ## end gnulib module stdio ## begin gnulib module stdlib BUILT_SOURCES += stdlib.h # We need the following in order to create <stdlib.h> when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GL_GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GL_GNULIB_ALIGNED_ALLOC)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GL_GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_GNU''@/$(GL_GNULIB_CALLOC_GNU)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GL_GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GL_GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GL_GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GL_GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GL_GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_GNU''@/$(GL_GNULIB_MALLOC_GNU)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GL_GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GL_GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GL_GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GL_GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GL_GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GL_GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GL_GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GL_GNULIB_POSIX_MEMALIGN)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GL_GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GL_GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GL_GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GL_GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GL_GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GL_GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GL_GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_GNU''@/$(GL_GNULIB_REALLOC_GNU)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GL_GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GL_GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GL_GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GL_GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GL_GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GL_GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GL_GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOL''@/$(GL_GNULIB_STRTOL)/g' \ -e 's/@''GNULIB_STRTOLD''@/$(GL_GNULIB_STRTOLD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GL_GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOUL''@/$(GL_GNULIB_STRTOUL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GL_GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GL_GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GL_GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GL_GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GL_GNULIB_WCTOMB)/g' \ -e 's/@''GNULIB_MDA_ECVT''@/$(GL_GNULIB_MDA_ECVT)/g' \ -e 's/@''GNULIB_MDA_FCVT''@/$(GL_GNULIB_MDA_FCVT)/g' \ -e 's/@''GNULIB_MDA_GCVT''@/$(GL_GNULIB_MDA_GCVT)/g' \ -e 's/@''GNULIB_MDA_MKTEMP''@/$(GL_GNULIB_MDA_MKTEMP)/g' \ -e 's/@''GNULIB_MDA_PUTENV''@/$(GL_GNULIB_MDA_PUTENV)/g' \ < $(srcdir)/stdlib.in.h | \ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ALIGNED_ALLOC''@|$(HAVE_ALIGNED_ALLOC)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_ECVT''@|$(HAVE_DECL_ECVT)|g' \ -e 's|@''HAVE_DECL_FCVT''@|$(HAVE_DECL_FCVT)|g' \ -e 's|@''HAVE_DECL_GCVT''@|$(HAVE_DECL_GCVT)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_MEMALIGN''@|$(HAVE_POSIX_MEMALIGN)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOL''@|$(HAVE_STRTOL)|g' \ -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOUL''@|$(HAVE_STRTOUL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_GNU''@|$(REPLACE_CALLOC_FOR_CALLOC_GNU)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_POSIX''@|$(REPLACE_CALLOC_FOR_CALLOC_POSIX)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_GNU''@|$(REPLACE_MALLOC_FOR_MALLOC_GNU)|g' \ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_POSIX''@|$(REPLACE_MALLOC_FOR_MALLOC_POSIX)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_POSIX_MEMALIGN''@|$(REPLACE_POSIX_MEMALIGN)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_GNU''@|$(REPLACE_REALLOC_FOR_REALLOC_GNU)|g' \ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_POSIX''@|$(REPLACE_REALLOC_FOR_REALLOC_POSIX)|g' \ -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_STRTOL''@|$(REPLACE_STRTOL)|g' \ -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \ -e 's|@''REPLACE_STRTOLL''@|$(REPLACE_STRTOLL)|g' \ -e 's|@''REPLACE_STRTOUL''@|$(REPLACE_STRTOUL)|g' \ -e 's|@''REPLACE_STRTOULL''@|$(REPLACE_STRTOULL)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += stdlib.h stdlib.h-t EXTRA_DIST += stdlib.in.h ## end gnulib module stdlib ## begin gnulib module stpcpy if GL_COND_OBJ_STPCPY librecutils_la_SOURCES += stpcpy.c endif ## end gnulib module stpcpy ## begin gnulib module strcase if GL_COND_OBJ_STRCASECMP librecutils_la_SOURCES += strcasecmp.c endif if GL_COND_OBJ_STRNCASECMP librecutils_la_SOURCES += strncasecmp.c endif ## end gnulib module strcase ## begin gnulib module strcasestr EXTRA_DIST += strcasestr.c EXTRA_librecutils_la_SOURCES += strcasestr.c ## end gnulib module strcasestr ## begin gnulib module strcasestr-simple EXTRA_DIST += str-two-way.h strcasestr.c EXTRA_librecutils_la_SOURCES += strcasestr.c ## end gnulib module strcasestr-simple ## begin gnulib module strchrnul if GL_COND_OBJ_STRCHRNUL librecutils_la_SOURCES += strchrnul.c endif EXTRA_DIST += strchrnul.valgrind ## end gnulib module strchrnul ## begin gnulib module strdup-posix if GL_COND_OBJ_STRDUP librecutils_la_SOURCES += strdup.c endif ## end gnulib module strdup-posix ## begin gnulib module streq EXTRA_DIST += streq.h ## end gnulib module streq ## begin gnulib module strerror if GL_COND_OBJ_STRERROR librecutils_la_SOURCES += strerror.c endif ## end gnulib module strerror ## begin gnulib module strerror-override if GL_COND_OBJ_STRERROR_OVERRIDE librecutils_la_SOURCES += strerror-override.c endif EXTRA_DIST += strerror-override.h ## end gnulib module strerror-override ## begin gnulib module string BUILT_SOURCES += string.h # We need the following in order to create <string.h> when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GL_GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GL_GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GL_GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GL_GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GL_GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GL_GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GL_GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GL_GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GL_GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GL_GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GL_GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GL_GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GL_GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GL_GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GL_GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GL_GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GL_GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GL_GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GL_GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GL_GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GL_GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GL_GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GL_GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GL_GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GL_GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GL_GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GL_GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GL_GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GL_GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GL_GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GL_GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GL_GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GL_GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GL_GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GL_GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GL_GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GL_GNULIB_STRERRORNAME_NP)/g' \ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GL_GNULIB_SIGABBREV_NP)/g' \ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GL_GNULIB_SIGDESCR_NP)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GL_GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GL_GNULIB_STRVERSCMP)/g' \ -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GL_GNULIB_MDA_MEMCCPY)/g' \ -e 's/@''GNULIB_MDA_STRDUP''@/$(GL_GNULIB_MDA_STRDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \ -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \ -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_FFSLL''@|$(REPLACE_FFSLL)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += string.h string.h-t EXTRA_DIST += string.in.h ## end gnulib module string ## begin gnulib module strings BUILT_SOURCES += strings.h # We need the following in order to create <strings.h> when the system # doesn't have one that works with the given compiler. strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ -e 's/@''GNULIB_FFS''@/$(GL_GNULIB_FFS)/g' \ -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/strings.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += strings.h strings.h-t EXTRA_DIST += strings.in.h ## end gnulib module strings ## begin gnulib module strsep if GL_COND_OBJ_STRSEP librecutils_la_SOURCES += strsep.c endif ## end gnulib module strsep ## begin gnulib module strverscmp if GL_COND_OBJ_STRVERSCMP librecutils_la_SOURCES += strverscmp.c endif ## end gnulib module strverscmp ## begin gnulib module sys_file BUILT_SOURCES += sys/file.h # We need the following in order to create <sys/file.h> when the system # has one that is incomplete. sys/file.h: sys_file.in.h $(top_builddir)/config.status $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_SYS_FILE_H''@/$(HAVE_SYS_FILE_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_FILE_H''@|$(NEXT_SYS_FILE_H)|g' \ -e 's/@''HAVE_FLOCK''@/$(HAVE_FLOCK)/g' \ -e 's/@''GNULIB_FLOCK''@/$(GL_GNULIB_FLOCK)/g' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_file.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/file.h sys/file.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_file.in.h ## end gnulib module sys_file ## begin gnulib module sys_random BUILT_SOURCES += sys/random.h # We need the following in order to create <sys/random.h> when the system # doesn't have one. sys/random.h: sys_random.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_RANDOM_H''@|$(NEXT_SYS_RANDOM_H)|g' \ -e 's|@''HAVE_SYS_RANDOM_H''@|$(HAVE_SYS_RANDOM_H)|g' \ -e 's/@''GNULIB_GETRANDOM''@/$(GL_GNULIB_GETRANDOM)/g' \ -e 's/@''HAVE_GETRANDOM''@/$(HAVE_GETRANDOM)/g' \ -e 's/@''REPLACE_GETRANDOM''@/$(REPLACE_GETRANDOM)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_random.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/random.h sys/random.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_random.in.h ## end gnulib module sys_random ## begin gnulib module sys_stat BUILT_SOURCES += sys/stat.h # We need the following in order to create <sys/stat.h> when the system # has one that is incomplete. sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ -e 's/@''GNULIB_FCHMODAT''@/$(GL_GNULIB_FCHMODAT)/g' \ -e 's/@''GNULIB_FSTAT''@/$(GL_GNULIB_FSTAT)/g' \ -e 's/@''GNULIB_FSTATAT''@/$(GL_GNULIB_FSTATAT)/g' \ -e 's/@''GNULIB_FUTIMENS''@/$(GL_GNULIB_FUTIMENS)/g' \ -e 's/@''GNULIB_GETUMASK''@/$(GL_GNULIB_GETUMASK)/g' \ -e 's/@''GNULIB_LCHMOD''@/$(GL_GNULIB_LCHMOD)/g' \ -e 's/@''GNULIB_LSTAT''@/$(GL_GNULIB_LSTAT)/g' \ -e 's/@''GNULIB_MKDIR''@/$(GL_GNULIB_MKDIR)/g' \ -e 's/@''GNULIB_MKDIRAT''@/$(GL_GNULIB_MKDIRAT)/g' \ -e 's/@''GNULIB_MKFIFO''@/$(GL_GNULIB_MKFIFO)/g' \ -e 's/@''GNULIB_MKFIFOAT''@/$(GL_GNULIB_MKFIFOAT)/g' \ -e 's/@''GNULIB_MKNOD''@/$(GL_GNULIB_MKNOD)/g' \ -e 's/@''GNULIB_MKNODAT''@/$(GL_GNULIB_MKNODAT)/g' \ -e 's/@''GNULIB_STAT''@/$(GL_GNULIB_STAT)/g' \ -e 's/@''GNULIB_UTIMENSAT''@/$(GL_GNULIB_UTIMENSAT)/g' \ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GL_GNULIB_OVERRIDES_STRUCT_STAT)/g' \ -e 's/@''GNULIB_MDA_CHMOD''@/$(GL_GNULIB_MDA_CHMOD)/g' \ -e 's/@''GNULIB_MDA_MKDIR''@/$(GL_GNULIB_MDA_MKDIR)/g' \ -e 's/@''GNULIB_MDA_UMASK''@/$(GL_GNULIB_MDA_UMASK)/g' \ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ -e 's|@''HAVE_GETUMASK''@|$(HAVE_GETUMASK)|g' \ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ -e 's|@''REPLACE_FCHMODAT''@|$(REPLACE_FCHMODAT)|g' \ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ -e 's|@''REPLACE_MKFIFOAT''@|$(REPLACE_MKFIFOAT)|g' \ -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ -e 's|@''REPLACE_MKNODAT''@|$(REPLACE_MKNODAT)|g' \ -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_stat.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/stat.h sys/stat.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_stat.in.h ## end gnulib module sys_stat ## begin gnulib module sys_time BUILT_SOURCES += sys/time.h # We need the following in order to create <sys/time.h> when the system # doesn't have one that works with the given compiler. sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GL_GNULIB_GETTIMEOFDAY)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_time.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/time.h sys/time.h-t EXTRA_DIST += sys_time.in.h ## end gnulib module sys_time ## begin gnulib module sys_types BUILT_SOURCES += sys/types.h # We need the following in order to create <sys/types.h> when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ $(srcdir)/sys_types.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/types.h sys/types.h-t EXTRA_DIST += sys_types.in.h ## end gnulib module sys_types ## begin gnulib module sys_wait BUILT_SOURCES += sys/wait.h # We need the following in order to create <sys/wait.h> when the system # has one that is incomplete. sys/wait.h: sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) '%reldir%/sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ -e 's/@''GNULIB_WAITPID''@/$(GL_GNULIB_WAITPID)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_wait.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += sys/wait.h sys/wait.h-t MOSTLYCLEANDIRS += sys EXTRA_DIST += sys_wait.in.h ## end gnulib module sys_wait ## begin gnulib module tempname librecutils_la_SOURCES += tempname.c EXTRA_DIST += tempname.h ## end gnulib module tempname ## begin gnulib module thread-optim EXTRA_DIST += thread-optim.h ## end gnulib module thread-optim ## begin gnulib module threadlib librecutils_la_SOURCES += glthread/threadlib.c ## end gnulib module threadlib ## begin gnulib module time BUILT_SOURCES += time.h # We need the following in order to create <time.h> when the system # doesn't have one that works with the given compiler. time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ -e 's/@''GNULIB_CTIME''@/$(GL_GNULIB_CTIME)/g' \ -e 's/@''GNULIB_LOCALTIME''@/$(GL_GNULIB_LOCALTIME)/g' \ -e 's/@''GNULIB_MKTIME''@/$(GL_GNULIB_MKTIME)/g' \ -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \ -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \ -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GL_GNULIB_TIME_R)/g' \ -e 's/@''GNULIB_TIME_RZ''@/$(GL_GNULIB_TIME_RZ)/g' \ -e 's/@''GNULIB_TZSET''@/$(GL_GNULIB_TZSET)/g' \ -e 's/@''GNULIB_MDA_TZSET''@/$(GL_GNULIB_MDA_TZSET)/g' \ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ -e 's|@''HAVE_TIMESPEC_GET''@|$(HAVE_TIMESPEC_GET)|g' \ -e 's|@''HAVE_TIMESPEC_GETRES''@|$(HAVE_TIMESPEC_GETRES)|g' \ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_TIME_UTC''@|$(TIME_H_DEFINES_TIME_UTC)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/time.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += time.h time.h-t EXTRA_DIST += time.in.h ## end gnulib module time ## begin gnulib module time_r if GL_COND_OBJ_TIME_R librecutils_la_SOURCES += time_r.c endif ## end gnulib module time_r ## begin gnulib module time_rz if GL_COND_OBJ_TIME_RZ librecutils_la_SOURCES += time_rz.c endif EXTRA_DIST += time-internal.h ## end gnulib module time_rz ## begin gnulib module timegm if GL_COND_OBJ_TIMEGM librecutils_la_SOURCES += timegm.c endif EXTRA_DIST += mktime-internal.h ## end gnulib module timegm ## begin gnulib module timespec librecutils_la_SOURCES += timespec.c EXTRA_DIST += timespec.h ## end gnulib module timespec ## begin gnulib module tmpdir librecutils_la_SOURCES += tmpdir.h tmpdir.c ## end gnulib module tmpdir ## begin gnulib module tzset if GL_COND_OBJ_TZSET librecutils_la_SOURCES += tzset.c endif ## end gnulib module tzset ## begin gnulib module unistd BUILT_SOURCES += unistd.h librecutils_la_SOURCES += unistd.c # We need the following in order to create an empty placeholder for # <unistd.h> when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_ACCESS''@/$(GL_GNULIB_ACCESS)/g' \ -e 's/@''GNULIB_CHDIR''@/$(GL_GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GL_GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GL_GNULIB_COPY_FILE_RANGE)/g' \ -e 's/@''GNULIB_DUP''@/$(GL_GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GL_GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GL_GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GL_GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GL_GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_EXECL''@/$(GL_GNULIB_EXECL)/g' \ -e 's/@''GNULIB_EXECLE''@/$(GL_GNULIB_EXECLE)/g' \ -e 's/@''GNULIB_EXECLP''@/$(GL_GNULIB_EXECLP)/g' \ -e 's/@''GNULIB_EXECV''@/$(GL_GNULIB_EXECV)/g' \ -e 's/@''GNULIB_EXECVE''@/$(GL_GNULIB_EXECVE)/g' \ -e 's/@''GNULIB_EXECVP''@/$(GL_GNULIB_EXECVP)/g' \ -e 's/@''GNULIB_EXECVPE''@/$(GL_GNULIB_EXECVPE)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GL_GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GL_GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GL_GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GL_GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GL_GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GL_GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GL_GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GL_GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GL_GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETENTROPY''@/$(GL_GNULIB_GETENTROPY)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GL_GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GL_GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GL_GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GL_GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETOPT_POSIX''@/$(GL_GNULIB_GETOPT_POSIX)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GL_GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETPASS''@/$(GL_GNULIB_GETPASS)/g' \ -e 's/@''GNULIB_GETPASS_GNU''@/$(GL_GNULIB_GETPASS_GNU)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GL_GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GL_GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GL_GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GL_GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GL_GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GL_GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GL_GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GL_GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GL_GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GL_GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GL_GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GL_GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GL_GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GL_GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GL_GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GL_GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GL_GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GL_GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GL_GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GL_GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GL_GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GL_GNULIB_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GL_GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GL_GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GL_GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GL_GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GL_GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GL_GNULIB_WRITE)/g' \ -e 's/@''GNULIB_MDA_ACCESS''@/$(GL_GNULIB_MDA_ACCESS)/g' \ -e 's/@''GNULIB_MDA_CHDIR''@/$(GL_GNULIB_MDA_CHDIR)/g' \ -e 's/@''GNULIB_MDA_CLOSE''@/$(GL_GNULIB_MDA_CLOSE)/g' \ -e 's/@''GNULIB_MDA_DUP''@/$(GL_GNULIB_MDA_DUP)/g' \ -e 's/@''GNULIB_MDA_DUP2''@/$(GL_GNULIB_MDA_DUP2)/g' \ -e 's/@''GNULIB_MDA_EXECL''@/$(GL_GNULIB_MDA_EXECL)/g' \ -e 's/@''GNULIB_MDA_EXECLE''@/$(GL_GNULIB_MDA_EXECLE)/g' \ -e 's/@''GNULIB_MDA_EXECLP''@/$(GL_GNULIB_MDA_EXECLP)/g' \ -e 's/@''GNULIB_MDA_EXECV''@/$(GL_GNULIB_MDA_EXECV)/g' \ -e 's/@''GNULIB_MDA_EXECVE''@/$(GL_GNULIB_MDA_EXECVE)/g' \ -e 's/@''GNULIB_MDA_EXECVP''@/$(GL_GNULIB_MDA_EXECVP)/g' \ -e 's/@''GNULIB_MDA_EXECVPE''@/$(GL_GNULIB_MDA_EXECVPE)/g' \ -e 's/@''GNULIB_MDA_GETCWD''@/$(GL_GNULIB_MDA_GETCWD)/g' \ -e 's/@''GNULIB_MDA_GETPID''@/$(GL_GNULIB_MDA_GETPID)/g' \ -e 's/@''GNULIB_MDA_ISATTY''@/$(GL_GNULIB_MDA_ISATTY)/g' \ -e 's/@''GNULIB_MDA_LSEEK''@/$(GL_GNULIB_MDA_LSEEK)/g' \ -e 's/@''GNULIB_MDA_READ''@/$(GL_GNULIB_MDA_READ)/g' \ -e 's/@''GNULIB_MDA_RMDIR''@/$(GL_GNULIB_MDA_RMDIR)/g' \ -e 's/@''GNULIB_MDA_SWAB''@/$(GL_GNULIB_MDA_SWAB)/g' \ -e 's/@''GNULIB_MDA_UNLINK''@/$(GL_GNULIB_MDA_UNLINK)/g' \ -e 's/@''GNULIB_MDA_WRITE''@/$(GL_GNULIB_MDA_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_EXECVPE''@|$(HAVE_EXECVPE)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETENTROPY''@|$(HAVE_GETENTROPY)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_EXECVPE''@|$(HAVE_DECL_EXECVPE)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_COPY_FILE_RANGE''@|$(REPLACE_COPY_FILE_RANGE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_EXECL''@|$(REPLACE_EXECL)|g' \ -e 's|@''REPLACE_EXECLE''@|$(REPLACE_EXECLE)|g' \ -e 's|@''REPLACE_EXECLP''@|$(REPLACE_EXECLP)|g' \ -e 's|@''REPLACE_EXECV''@|$(REPLACE_EXECV)|g' \ -e 's|@''REPLACE_EXECVE''@|$(REPLACE_EXECVE)|g' \ -e 's|@''REPLACE_EXECVP''@|$(REPLACE_EXECVP)|g' \ -e 's|@''REPLACE_EXECVPE''@|$(REPLACE_EXECVPE)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ -e 's|@''REPLACE_GETPASS_FOR_GETPASS_GNU''@|$(REPLACE_GETPASS_FOR_GETPASS_GNU)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_SYS_RANDOM_H''@|$(UNISTD_H_HAVE_SYS_RANDOM_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += unistd.h unistd.h-t EXTRA_DIST += unistd.in.h ## end gnulib module unistd ## begin gnulib module unistd-safer librecutils_la_SOURCES += dup-safer.c fd-safer.c pipe-safer.c EXTRA_DIST += unistd--.h unistd-safer.h ## end gnulib module unistd-safer ## begin gnulib module unlink if GL_COND_OBJ_UNLINK librecutils_la_SOURCES += unlink.c endif ## end gnulib module unlink ## begin gnulib module unlocked-io-internal EXTRA_DIST += unlocked-io.h ## end gnulib module unlocked-io-internal ## begin gnulib module unsetenv if GL_COND_OBJ_UNSETENV librecutils_la_SOURCES += unsetenv.c endif ## end gnulib module unsetenv ## begin gnulib module update-copyright EXTRA_DIST += $(top_srcdir)/build-aux/update-copyright ## end gnulib module update-copyright ## begin gnulib module useless-if-before-free EXTRA_DIST += $(top_srcdir)/build-aux/useless-if-before-free ## end gnulib module useless-if-before-free ## begin gnulib module utime if GL_COND_OBJ_UTIME librecutils_la_SOURCES += utime.c endif ## end gnulib module utime ## begin gnulib module utime-h BUILT_SOURCES += utime.h # We need the following in order to create <utime.h> when the system # doesn't have one that works with the given compiler. utime.h: utime.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_UTIME_H''@/$(HAVE_UTIME_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UTIME_H''@|$(NEXT_UTIME_H)|g' \ -e 's/@''GNULIB_UTIME''@/$(GL_GNULIB_UTIME)/g' \ -e 's/@''GNULIB_MDA_UTIME''@/$(GL_GNULIB_MDA_UTIME)/g' \ -e 's|@''HAVE_UTIME''@|$(HAVE_UTIME)|g' \ -e 's|@''REPLACE_UTIME''@|$(REPLACE_UTIME)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/utime.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += utime.h utime.h-t EXTRA_DIST += utime.in.h ## end gnulib module utime-h ## begin gnulib module utimens librecutils_la_SOURCES += utimens.c EXTRA_DIST += utimens.h ## end gnulib module utimens ## begin gnulib module vasnprintf EXTRA_DIST += asnprintf.c float+.h printf-args.c printf-args.h printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h EXTRA_librecutils_la_SOURCES += asnprintf.c printf-args.c printf-parse.c vasnprintf.c ## end gnulib module vasnprintf ## begin gnulib module vasprintf EXTRA_DIST += asprintf.c vasprintf.c EXTRA_librecutils_la_SOURCES += asprintf.c vasprintf.c ## end gnulib module vasprintf ## begin gnulib module vc-list-files EXTRA_DIST += $(top_srcdir)/build-aux/vc-list-files ## end gnulib module vc-list-files ## begin gnulib module verify EXTRA_DIST += verify.h ## end gnulib module verify ## begin gnulib module version-etc librecutils_la_SOURCES += version-etc.h version-etc.c ## end gnulib module version-etc ## begin gnulib module version-etc-fsf librecutils_la_SOURCES += version-etc-fsf.c ## end gnulib module version-etc-fsf ## begin gnulib module vfprintf-posix EXTRA_DIST += vfprintf.c EXTRA_librecutils_la_SOURCES += vfprintf.c ## end gnulib module vfprintf-posix ## begin gnulib module wait-process librecutils_la_SOURCES += wait-process.h wait-process.c ## end gnulib module wait-process ## begin gnulib module waitpid if GL_COND_OBJ_WAITPID librecutils_la_SOURCES += waitpid.c endif ## end gnulib module waitpid ## begin gnulib module wchar BUILT_SOURCES += wchar.h # We need the following in order to create <wchar.h> when the system # version does not work standalone. wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GL_GNULIB_MBSINIT)/g' \ -e 's/@''GNULIB_MBRTOWC''@/$(GL_GNULIB_MBRTOWC)/g' \ -e 's/@''GNULIB_MBRLEN''@/$(GL_GNULIB_MBRLEN)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_WCRTOMB''@/$(GL_GNULIB_WCRTOMB)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \ -e 's/@''GNULIB_WMEMCHR''@/$(GL_GNULIB_WMEMCHR)/g' \ -e 's/@''GNULIB_WMEMCMP''@/$(GL_GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GL_GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GL_GNULIB_WMEMMOVE)/g' \ -e 's/@''GNULIB_WMEMPCPY''@/$(GL_GNULIB_WMEMPCPY)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GL_GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GL_GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GL_GNULIB_WCSNLEN)/g' \ -e 's/@''GNULIB_WCSCPY''@/$(GL_GNULIB_WCSCPY)/g' \ -e 's/@''GNULIB_WCPCPY''@/$(GL_GNULIB_WCPCPY)/g' \ -e 's/@''GNULIB_WCSNCPY''@/$(GL_GNULIB_WCSNCPY)/g' \ -e 's/@''GNULIB_WCPNCPY''@/$(GL_GNULIB_WCPNCPY)/g' \ -e 's/@''GNULIB_WCSCAT''@/$(GL_GNULIB_WCSCAT)/g' \ -e 's/@''GNULIB_WCSNCAT''@/$(GL_GNULIB_WCSNCAT)/g' \ -e 's/@''GNULIB_WCSCMP''@/$(GL_GNULIB_WCSCMP)/g' \ -e 's/@''GNULIB_WCSNCMP''@/$(GL_GNULIB_WCSNCMP)/g' \ -e 's/@''GNULIB_WCSCASECMP''@/$(GL_GNULIB_WCSCASECMP)/g' \ -e 's/@''GNULIB_WCSNCASECMP''@/$(GL_GNULIB_WCSNCASECMP)/g' \ -e 's/@''GNULIB_WCSCOLL''@/$(GL_GNULIB_WCSCOLL)/g' \ -e 's/@''GNULIB_WCSXFRM''@/$(GL_GNULIB_WCSXFRM)/g' \ -e 's/@''GNULIB_WCSDUP''@/$(GL_GNULIB_WCSDUP)/g' \ -e 's/@''GNULIB_WCSCHR''@/$(GL_GNULIB_WCSCHR)/g' \ -e 's/@''GNULIB_WCSRCHR''@/$(GL_GNULIB_WCSRCHR)/g' \ -e 's/@''GNULIB_WCSCSPN''@/$(GL_GNULIB_WCSCSPN)/g' \ -e 's/@''GNULIB_WCSSPN''@/$(GL_GNULIB_WCSSPN)/g' \ -e 's/@''GNULIB_WCSPBRK''@/$(GL_GNULIB_WCSPBRK)/g' \ -e 's/@''GNULIB_WCSSTR''@/$(GL_GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GL_GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCSFTIME''@/$(GL_GNULIB_WCSFTIME)/g' \ -e 's/@''GNULIB_MDA_WCSDUP''@/$(GL_GNULIB_MDA_WCSDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ < $(srcdir)/wchar.in.h | \ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ -e 's|@''HAVE_WMEMPCPY''@|$(HAVE_WMEMPCPY)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCSDUP''@|$(HAVE_DECL_WCSDUP)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ | \ sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += wchar.h wchar.h-t EXTRA_DIST += wchar.in.h ## end gnulib module wchar ## begin gnulib module wcrtomb if GL_COND_OBJ_WCRTOMB librecutils_la_SOURCES += wcrtomb.c endif ## end gnulib module wcrtomb ## begin gnulib module wctob if GL_COND_OBJ_WCTOB librecutils_la_SOURCES += wctob.c endif ## end gnulib module wctob ## begin gnulib module wctomb if GL_COND_OBJ_WCTOMB librecutils_la_SOURCES += wctomb.c endif EXTRA_DIST += wctomb-impl.h ## end gnulib module wctomb ## begin gnulib module wctype-h BUILT_SOURCES += wctype.h librecutils_la_SOURCES += wctype-h.c # We need the following in order to create <wctype.h> when the system # doesn't have one that works with the given compiler. wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_ISWBLANK''@/$(GL_GNULIB_ISWBLANK)/g' \ -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \ -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \ -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \ -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \ -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/wctype.in.h > $@-t $(AM_V_at)mv $@-t $@ MOSTLYCLEANFILES += wctype.h wctype.h-t EXTRA_DIST += wctype.in.h ## end gnulib module wctype-h ## begin gnulib module windows-mutex if GL_COND_OBJ_WINDOWS_MUTEX librecutils_la_SOURCES += windows-mutex.c endif EXTRA_DIST += windows-initguard.h windows-mutex.h ## end gnulib module windows-mutex ## begin gnulib module windows-once if GL_COND_OBJ_WINDOWS_ONCE librecutils_la_SOURCES += windows-once.c endif EXTRA_DIST += windows-once.h ## end gnulib module windows-once ## begin gnulib module windows-recmutex if GL_COND_OBJ_WINDOWS_RECMUTEX librecutils_la_SOURCES += windows-recmutex.c endif EXTRA_DIST += windows-initguard.h windows-recmutex.h ## end gnulib module windows-recmutex ## begin gnulib module windows-rwlock if GL_COND_OBJ_WINDOWS_RWLOCK librecutils_la_SOURCES += windows-rwlock.c endif EXTRA_DIST += windows-initguard.h windows-rwlock.h ## end gnulib module windows-rwlock ## begin gnulib module windows-spawn if GL_COND_OBJ_WINDOWS_SPAWN librecutils_la_SOURCES += windows-spawn.c endif EXTRA_DIST += windows-spawn.h ## end gnulib module windows-spawn ## begin gnulib module write if GL_COND_OBJ_WRITE librecutils_la_SOURCES += write.c endif ## end gnulib module write ## begin gnulib module xalloc librecutils_la_SOURCES += xmalloc.c EXTRA_DIST += xalloc.h ## end gnulib module xalloc ## begin gnulib module xalloc-die librecutils_la_SOURCES += xalloc-die.c EXTRA_DIST += xalloc.h ## end gnulib module xalloc-die ## begin gnulib module xalloc-oversized EXTRA_DIST += xalloc-oversized.h ## end gnulib module xalloc-oversized ## begin gnulib module xsize librecutils_la_SOURCES += xsize.h xsize.c ## end gnulib module xsize mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : distclean-local: distclean-gnulib-libobjs distclean-gnulib-libobjs: -rm -f @gl_LIBOBJDEPS@ maintainer-clean-local: distclean-gnulib-libobjs �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/openat.c���������������������������������������������������������������������������0000644�0000000�0000000�00000022327�14226564447�012330� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a replacement openat function Copyright (C) 2004-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ /* If the user's config.h happens to include <fcntl.h>, let it include only the system's <fcntl.h> here, so that orig_openat doesn't recurse to rpl_openat. */ #define __need_system_fcntl_h #include <config.h> /* Get the original definition of open. It might be defined as a macro. */ #include <fcntl.h> #include <sys/types.h> #undef __need_system_fcntl_h #if HAVE_OPENAT static int orig_openat (int fd, char const *filename, int flags, mode_t mode) { return openat (fd, filename, flags, mode); } #endif /* Write "fcntl.h" here, not <fcntl.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <fcntl.h> above. */ #include "fcntl.h" #include "openat.h" #include "cloexec.h" #include <stdarg.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include <errno.h> #if HAVE_OPENAT /* Like openat, but support O_CLOEXEC and work around Solaris 9 bugs with trailing slash. */ int rpl_openat (int dfd, char const *filename, int flags, ...) { /* 0 = unknown, 1 = yes, -1 = no. */ #if GNULIB_defined_O_CLOEXEC int have_cloexec = -1; #else static int have_cloexec; #endif mode_t mode; int fd; mode = 0; if (flags & O_CREAT) { va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); } # if OPEN_TRAILING_SLASH_BUG /* Fail if one of O_CREAT, O_WRONLY, O_RDWR is specified and the filename ends in a slash, as POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file already exists as a directory, then - if O_CREAT is specified, open() must fail because of the semantics of O_CREAT, - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/openat.html> says that it fails with errno = EISDIR in this case. If the named file does not exist or does not name a directory, then - if O_CREAT is specified, open() must fail since open() cannot create directories, - if O_WRONLY or O_RDWR is specified, open() must fail because the file does not contain a '.' directory. */ if ((flags & O_CREAT) || (flags & O_ACCMODE) == O_RDWR || (flags & O_ACCMODE) == O_WRONLY) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { errno = EISDIR; return -1; } } # endif fd = orig_openat (dfd, filename, flags & ~(have_cloexec < 0 ? O_CLOEXEC : 0), mode); if (flags & O_CLOEXEC) { if (! have_cloexec) { if (0 <= fd) have_cloexec = 1; else if (errno == EINVAL) { fd = orig_openat (dfd, filename, flags & ~O_CLOEXEC, mode); have_cloexec = -1; } } if (have_cloexec < 0 && 0 <= fd) set_cloexec_flag (fd, true); } # if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and fd does not refer to a directory, then fail. Rationale: POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file without the slash is not a directory, open() must fail with ENOTDIR. */ if (fd >= 0) { /* We know len is positive, since open did not fail with ENOENT. */ size_t len = strlen (filename); if (filename[len - 1] == '/') { struct stat statbuf; if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { close (fd); errno = ENOTDIR; return -1; } } } # endif return fd; } #else /* !HAVE_OPENAT */ # include "filename.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ # include "openat-priv.h" # include "save-cwd.h" /* Replacement for Solaris' openat function. <https://www.google.com/search?q=openat+site:docs.oracle.com> First, try to simulate it via open ("/proc/self/fd/FD/FILE"). Failing that, simulate it by doing save_cwd/fchdir/open/restore_cwd. If either the save_cwd or the restore_cwd fails (relatively unlikely), then give a diagnostic and exit nonzero. Otherwise, upon failure, set errno and return -1, as openat does. Upon successful completion, return a file descriptor. */ int openat (int fd, char const *file, int flags, ...) { mode_t mode = 0; if (flags & O_CREAT) { va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); } return openat_permissive (fd, file, flags, mode, NULL); } /* Like openat (FD, FILE, FLAGS, MODE), but if CWD_ERRNO is nonnull, set *CWD_ERRNO to an errno value if unable to save or restore the initial working directory. This is needed only the first time remove.c's remove_dir opens a command-line directory argument. If a previous attempt to restore the current working directory failed, then we must not even try to access a '.'-relative name. It is the caller's responsibility not to call this function in that case. */ int openat_permissive (int fd, char const *file, int flags, mode_t mode, int *cwd_errno) { struct saved_cwd saved_cwd; int saved_errno; int err; bool save_ok; if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file)) return open (file, flags, mode); { char buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (buf, fd, file); if (proc_file) { int open_result = open (proc_file, flags, mode); int open_errno = errno; if (proc_file != buf) free (proc_file); /* If the syscall succeeds, or if it fails with an unexpected errno value, then return right away. Otherwise, fall through and resort to using save_cwd/restore_cwd. */ if (0 <= open_result || ! EXPECTED_ERRNO (open_errno)) { errno = open_errno; return open_result; } } } save_ok = (save_cwd (&saved_cwd) == 0); if (! save_ok) { if (! cwd_errno) openat_save_fail (errno); *cwd_errno = errno; } if (0 <= fd && fd == saved_cwd.desc) { /* If saving the working directory collides with the user's requested fd, then the user's fd must have been closed to begin with. */ free_cwd (&saved_cwd); errno = EBADF; return -1; } err = fchdir (fd); saved_errno = errno; if (! err) { err = open (file, flags, mode); saved_errno = errno; if (save_ok && restore_cwd (&saved_cwd) != 0) { if (! cwd_errno) { /* Don't write a message to just-created fd 2. */ saved_errno = errno; if (err == STDERR_FILENO) close (err); openat_restore_fail (saved_errno); } *cwd_errno = errno; } } free_cwd (&saved_cwd); errno = saved_errno; return err; } /* Return true if our openat implementation must resort to using save_cwd and restore_cwd. */ bool openat_needs_fchdir (void) { bool needs_fchdir = true; int fd = open ("/", O_SEARCH | O_CLOEXEC); if (0 <= fd) { char buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (buf, fd, "."); if (proc_file) { needs_fchdir = false; if (proc_file != buf) free (proc_file); } close (fd); } return needs_fchdir; } #endif /* !HAVE_OPENAT */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/safe-read.h������������������������������������������������������������������������0000644�0000000�0000000�00000003456�14226564450�012672� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to read() that retries after interrupts. Copyright (C) 2002, 2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Some system calls may be interrupted and fail with errno = EINTR in the following situations: - The process is stopped and restarted (signal SIGSTOP and SIGCONT, user types Ctrl-Z) on some platforms: Mac OS X. - The process receives a signal for which a signal handler was installed with sigaction() with an sa_flags field that does not contain SA_RESTART. - The process receives a signal for which a signal handler was installed with signal() and for which no call to siginterrupt(sig,0) was done, on some platforms: AIX, HP-UX, IRIX, OSF/1, Solaris. This module provides a wrapper around read() that handles EINTR. */ #include <stddef.h> #ifdef __cplusplus extern "C" { #endif #define SAFE_READ_ERROR ((size_t) -1) /* Read up to COUNT bytes at BUF from descriptor FD, retrying if interrupted. Return the actual number of bytes read, zero for EOF, or SAFE_READ_ERROR upon error. */ extern size_t safe_read (int fd, void *buf, size_t count); #ifdef __cplusplus } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/windows-rwlock.c�������������������������������������������������������������������0000644�0000000�0000000�00000027273�14226564451�014033� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read-write locks (native Windows implementation). Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-rwlock.h" #include <errno.h> #include <stdlib.h> /* Don't assume that UNICODE is not defined. */ #undef CreateEvent #define CreateEvent CreateEventA /* In this file, the waitqueues are implemented as circular arrays. */ #define glwthread_waitqueue_t glwthread_carray_waitqueue_t static void glwthread_waitqueue_init (glwthread_waitqueue_t *wq) { wq->array = NULL; wq->count = 0; wq->alloc = 0; wq->offset = 0; } /* Enqueues the current thread, represented by an event, in a wait queue. Returns INVALID_HANDLE_VALUE if an allocation failure occurs. */ static HANDLE glwthread_waitqueue_add (glwthread_waitqueue_t *wq) { HANDLE event; unsigned int index; if (wq->count == wq->alloc) { unsigned int new_alloc = 2 * wq->alloc + 1; HANDLE *new_array = (HANDLE *) realloc (wq->array, new_alloc * sizeof (HANDLE)); if (new_array == NULL) /* No more memory. */ return INVALID_HANDLE_VALUE; /* Now is a good opportunity to rotate the array so that its contents starts at offset 0. */ if (wq->offset > 0) { unsigned int old_count = wq->count; unsigned int old_alloc = wq->alloc; unsigned int old_offset = wq->offset; unsigned int i; if (old_offset + old_count > old_alloc) { unsigned int limit = old_offset + old_count - old_alloc; for (i = 0; i < limit; i++) new_array[old_alloc + i] = new_array[i]; } for (i = 0; i < old_count; i++) new_array[i] = new_array[old_offset + i]; wq->offset = 0; } wq->array = new_array; wq->alloc = new_alloc; } /* Whether the created event is a manual-reset one or an auto-reset one, does not matter, since we will wait on it only once. */ event = CreateEvent (NULL, TRUE, FALSE, NULL); if (event == INVALID_HANDLE_VALUE) /* No way to allocate an event. */ return INVALID_HANDLE_VALUE; index = wq->offset + wq->count; if (index >= wq->alloc) index -= wq->alloc; wq->array[index] = event; wq->count++; return event; } /* Notifies the first thread from a wait queue and dequeues it. */ static void glwthread_waitqueue_notify_first (glwthread_waitqueue_t *wq) { SetEvent (wq->array[wq->offset + 0]); wq->offset++; wq->count--; if (wq->count == 0 || wq->offset == wq->alloc) wq->offset = 0; } /* Notifies all threads from a wait queue and dequeues them all. */ static void glwthread_waitqueue_notify_all (glwthread_waitqueue_t *wq) { unsigned int i; for (i = 0; i < wq->count; i++) { unsigned int index = wq->offset + i; if (index >= wq->alloc) index -= wq->alloc; SetEvent (wq->array[index]); } wq->count = 0; wq->offset = 0; } void glwthread_rwlock_init (glwthread_rwlock_t *lock) { InitializeCriticalSection (&lock->lock); glwthread_waitqueue_init (&lock->waiting_readers); glwthread_waitqueue_init (&lock->waiting_writers); lock->runcount = 0; lock->guard.done = 1; } int glwthread_rwlock_rdlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ HANDLE event = glwthread_waitqueue_add (&lock->waiting_readers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_readers, incremented lock->runcount. */ if (!(lock->runcount > 0)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount + 1 > 0)); } } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_wrlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ HANDLE event = glwthread_waitqueue_add (&lock->waiting_writers); if (event != INVALID_HANDLE_VALUE) { DWORD result; LeaveCriticalSection (&lock->lock); /* Wait until another thread signals this event. */ result = WaitForSingleObject (event, INFINITE); if (result == WAIT_FAILED || result == WAIT_TIMEOUT) abort (); CloseHandle (event); /* The thread which signalled the event already did the bookkeeping: removed us from the waiting_writers, set lock->runcount = -1. */ if (!(lock->runcount == -1)) abort (); return 0; } else { /* Allocation failure. Weird. */ do { LeaveCriticalSection (&lock->lock); Sleep (1); EnterCriticalSection (&lock->lock); } while (!(lock->runcount == 0)); } } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } /* It's OK to wait for this critical section, because it is never taken for a long time. */ EnterCriticalSection (&lock->lock); /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (!(lock->runcount + 1 > 0 && lock->waiting_writers.count == 0)) { /* This thread would have to wait for a while. Return instead. */ LeaveCriticalSection (&lock->lock); return EBUSY; } lock->runcount++; LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) { if (InterlockedIncrement (&lock->guard.started) == 0) /* This thread is the first one to need this lock. Initialize it. */ glwthread_rwlock_init (lock); else { /* Don't let lock->guard.started grow and wrap around. */ InterlockedDecrement (&lock->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this lock. */ while (!lock->guard.done) Sleep (0); } } /* It's OK to wait for this critical section, because it is never taken for a long time. */ EnterCriticalSection (&lock->lock); /* Test whether no readers or writers are currently running. */ if (!(lock->runcount == 0)) { /* This thread would have to wait for a while. Return instead. */ LeaveCriticalSection (&lock->lock); return EBUSY; } lock->runcount--; /* runcount becomes -1 */ LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_unlock (glwthread_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; EnterCriticalSection (&lock->lock); if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) abort (); lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { LeaveCriticalSection (&lock->lock); return EPERM; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers.count > 0) { /* Wake up one of the waiting writers. */ lock->runcount--; glwthread_waitqueue_notify_first (&lock->waiting_writers); } else { /* Wake up all waiting readers. */ lock->runcount += lock->waiting_readers.count; glwthread_waitqueue_notify_all (&lock->waiting_readers); } } LeaveCriticalSection (&lock->lock); return 0; } int glwthread_rwlock_destroy (glwthread_rwlock_t *lock) { if (!lock->guard.done) return EINVAL; if (lock->runcount != 0) return EBUSY; DeleteCriticalSection (&lock->lock); if (lock->waiting_readers.array != NULL) free (lock->waiting_readers.array); if (lock->waiting_writers.array != NULL) free (lock->waiting_writers.array); lock->guard.done = 0; return 0; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getopt-core.h����������������������������������������������������������������������0000644�0000000�0000000�00000007132�14226564450�013266� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt (basic, portable features only). Copyright (C) 1989-2022 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_CORE_H #define _GETOPT_CORE_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. Unlike most bits headers, it does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ __BEGIN_DECLS /* For communication from 'getopt' to the caller. When 'getopt' finds an option that takes an argument, the argument value is returned here. Also, when 'ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ extern char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to 'getopt'. On entry to 'getopt', zero means this is the first call; initialize. When 'getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, 'optind' communicates from one call to the next how much of ARGV has been scanned so far. */ extern int optind; /* Callers store zero here to inhibit the error message 'getopt' prints for unrecognized options. */ extern int opterr; /* Set to an option character which was unrecognized. */ extern int optopt; /* Get definitions and prototypes for functions to process the arguments in ARGV (ARGC of them, minus the program name) for options given in OPTS. Return the option character from OPTS just read. Return -1 when there are no more options. For unrecognized options, or options missing arguments, 'optopt' is set to the option letter, and '?' is returned. The OPTS string is a list of characters which are recognized option letters, optionally followed by colons, specifying that that letter takes an argument, to be placed in 'optarg'. If a letter in OPTS is followed by two colons, its argument is optional. This behavior is specific to the GNU 'getopt'. The argument '--' causes premature termination of argument scanning, explicitly telling 'getopt' that there are no more options. If OPTS begins with '-', then non-option arguments are treated as arguments to the option '\1'. This behavior is specific to the GNU 'getopt'. If OPTS begins with '+', or POSIXLY_CORRECT is set in the environment, then do not permute arguments. For standards compliance, the 'argv' argument has the type char *const *, but this is inaccurate; if argument permutation is enabled, the argv array (not the strings it points to) must be writable. */ extern int getopt (int ___argc, char *const *___argv, const char *__shortopts) __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS #endif /* _GETOPT_CORE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/concat-filename.c������������������������������������������������������������������0000644�0000000�0000000�00000004774�14226564446�014074� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Construct a full filename from a directory and a relative filename. Copyright (C) 2001-2004, 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <haible@clisp.cons.org>. */ #include <config.h> /* Specification. */ #include "concat-filename.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include "filename.h" /* Concatenate a directory filename, a relative filename and an optional suffix. The directory may end with the directory separator. The second argument may not start with the directory separator (it is relative). Return a freshly allocated filename. Return NULL and set errno upon memory allocation failure. */ char * concatenated_filename (const char *directory, const char *filename, const char *suffix) { char *result; char *p; if (strcmp (directory, ".") == 0) { /* No need to prepend the directory. */ result = (char *) malloc (strlen (filename) + (suffix != NULL ? strlen (suffix) : 0) + 1); if (result == NULL) return NULL; /* errno is set here */ p = result; } else { size_t directory_len = strlen (directory); int need_slash = (directory_len > FILE_SYSTEM_PREFIX_LEN (directory) && !ISSLASH (directory[directory_len - 1])); result = (char *) malloc (directory_len + need_slash + strlen (filename) + (suffix != NULL ? strlen (suffix) : 0) + 1); if (result == NULL) return NULL; /* errno is set here */ memcpy (result, directory, directory_len); p = result + directory_len; if (need_slash) *p++ = '/'; } p = stpcpy (p, filename); if (suffix != NULL) stpcpy (p, suffix); return result; } ����recutils-1.9/lib/get-permissions.c������������������������������������������������������������������0000644�0000000�0000000�00000020176�14226564447�014172� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Get permissions of a file. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include <config.h> #include <string.h> #include "acl.h" #include "acl-internal.h" /* Read the permissions of a file into CTX. If DESC is a valid file descriptor, use file descriptor operations, else use filename based operations on NAME. MODE is the file mode obtained from a previous stat call. Return 0 if successful. Return -1 and set errno upon failure. */ int get_permissions (const char *name, int desc, mode_t mode, struct permission_context *ctx) { memset (ctx, 0, sizeof *ctx); ctx->mode = mode; #if USE_ACL && HAVE_ACL_GET_FILE /* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ # if !HAVE_ACL_TYPE_EXTENDED /* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ if (HAVE_ACL_GET_FD && desc != -1) ctx->acl = acl_get_fd (desc); else ctx->acl = acl_get_file (name, ACL_TYPE_ACCESS); if (ctx->acl == NULL) return acl_errno_valid (errno) ? -1 : 0; /* With POSIX ACLs, a file cannot have "no" acl; a file without extended permissions has a "minimal" acl which is equivalent to the file mode. */ if (S_ISDIR (mode)) { ctx->default_acl = acl_get_file (name, ACL_TYPE_DEFAULT); if (ctx->default_acl == NULL) return -1; } # if HAVE_ACL_TYPE_NFS4 /* FreeBSD */ /* TODO (see set_permissions). */ # endif # else /* HAVE_ACL_TYPE_EXTENDED */ /* Mac OS X */ /* On Mac OS X, acl_get_file (name, ACL_TYPE_ACCESS) and acl_get_file (name, ACL_TYPE_DEFAULT) always return NULL / EINVAL. You have to use acl_get_file (name, ACL_TYPE_EXTENDED) or acl_get_fd (open (name, ...)) to retrieve an ACL. On the other hand, acl_set_file (name, ACL_TYPE_ACCESS, acl) and acl_set_file (name, ACL_TYPE_DEFAULT, acl) have the same effect as acl_set_file (name, ACL_TYPE_EXTENDED, acl): Each of these calls sets the file's ACL. */ if (HAVE_ACL_GET_FD && desc != -1) ctx->acl = acl_get_fd (desc); else ctx->acl = acl_get_file (name, ACL_TYPE_EXTENDED); if (ctx->acl == NULL) return acl_errno_valid (errno) ? -1 : 0; # endif #elif USE_ACL && defined GETACL /* Solaris, Cygwin, not HP-UX */ /* Solaris 2.5 through Solaris 10, Cygwin, and contemporaneous versions of Unixware. The acl() call returns the access and default ACL both at once. */ # ifdef ACE_GETACL /* Solaris also has a different variant of ACLs, used in ZFS and NFSv4 file systems (whereas the other ones are used in UFS file systems). There is an API pathconf (name, _PC_ACL_ENABLED) fpathconf (desc, _PC_ACL_ENABLED) that allows us to determine which of the two kinds of ACLs is supported for the given file. But some file systems may implement this call incorrectly, so better not use it. When fetching the source ACL, we simply fetch both ACL types. When setting the destination ACL, we try either ACL types, assuming that the kernel will translate the ACL from one form to the other. (See in <https://docs.oracle.com/cd/E86824_01/html/E54765/acl-2.html> the description of ENOTSUP.) */ for (;;) { int ret; if (desc != -1) ret = facl (desc, ACE_GETACLCNT, 0, NULL); else ret = acl (name, ACE_GETACLCNT, 0, NULL); if (ret < 0) { if (errno == ENOSYS || errno == EINVAL) ret = 0; else return -1; } ctx->ace_count = ret; if (ctx->ace_count == 0) break; ctx->ace_entries = (ace_t *) malloc (ctx->ace_count * sizeof (ace_t)); if (ctx->ace_entries == NULL) { errno = ENOMEM; return -1; } if (desc != -1) ret = facl (desc, ACE_GETACL, ctx->ace_count, ctx->ace_entries); else ret = acl (name, ACE_GETACL, ctx->ace_count, ctx->ace_entries); if (ret < 0) { if (errno == ENOSYS || errno == EINVAL) { free (ctx->ace_entries); ctx->ace_entries = NULL; ctx->ace_count = 0; break; } else return -1; } if (ret <= ctx->ace_count) { ctx->ace_count = ret; break; } /* Huh? The number of ACL entries has increased since the last call. Repeat. */ free (ctx->ace_entries); ctx->ace_entries = NULL; } # endif for (;;) { int ret; if (desc != -1) ret = facl (desc, GETACLCNT, 0, NULL); else ret = acl (name, GETACLCNT, 0, NULL); if (ret < 0) { if (errno == ENOSYS || errno == ENOTSUP || errno == EOPNOTSUPP) ret = 0; else return -1; } ctx->count = ret; if (ctx->count == 0) break; ctx->entries = (aclent_t *) malloc (ctx->count * sizeof (aclent_t)); if (ctx->entries == NULL) { errno = ENOMEM; return -1; } if (desc != -1) ret = facl (desc, GETACL, ctx->count, ctx->entries); else ret = acl (name, GETACL, ctx->count, ctx->entries); if (ret < 0) { if (errno == ENOSYS || errno == ENOTSUP || errno == EOPNOTSUPP) { free (ctx->entries); ctx->entries = NULL; ctx->count = 0; break; } else return -1; } if (ret <= ctx->count) { ctx->count = ret; break; } /* Huh? The number of ACL entries has increased since the last call. Repeat. */ free (ctx->entries); ctx->entries = NULL; } #elif USE_ACL && HAVE_GETACL /* HP-UX */ { int ret; if (desc != -1) ret = fgetacl (desc, NACLENTRIES, ctx->entries); else ret = getacl (name, NACLENTRIES, ctx->entries); if (ret < 0) { if (errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP) ret = 0; else return -1; } else if (ret > NACLENTRIES) /* If NACLENTRIES cannot be trusted, use dynamic memory allocation. */ abort (); ctx->count = ret; # if HAVE_ACLV_H ret = acl ((char *) name, ACL_GET, NACLVENTRIES, ctx->aclv_entries); if (ret < 0) { if (errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) ret = 0; else return -2; } else if (ret > NACLVENTRIES) /* If NACLVENTRIES cannot be trusted, use dynamic memory allocation. */ abort (); ctx->aclv_count = ret; # endif } #elif USE_ACL && HAVE_ACLX_GET && ACL_AIX_WIP /* AIX */ /* TODO (see set_permissions). */ #elif USE_ACL && HAVE_STATACL /* older AIX */ { int ret; if (desc != -1) ret = fstatacl (desc, STX_NORMAL, &ctx->u.a, sizeof ctx->u); else ret = statacl ((char *) name, STX_NORMAL, &ctx->u.a, sizeof ctx->u); if (ret == 0) ctx->have_u = true; } #elif USE_ACL && HAVE_ACLSORT /* NonStop Kernel */ { int ret = acl ((char *) name, ACL_GET, NACLENTRIES, ctx->entries); if (ret < 0) return -1; else if (ret > NACLENTRIES) /* If NACLENTRIES cannot be trusted, use dynamic memory allocation. */ abort (); ctx->count = ret; } #endif return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/save-cwd.c�������������������������������������������������������������������������0000644�0000000�0000000�00000005751�14226564447�012555� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* save-cwd.c -- Save and restore current working directory. Copyright (C) 1995, 1997-1998, 2003-2006, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> #include "save-cwd.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include "chdir-long.h" #include "unistd--.h" #if GNULIB_FCNTL_SAFER # include "fcntl--.h" #else # define GNULIB_FCNTL_SAFER 0 #endif /* Record the location of the current working directory in CWD so that the program may change to other directories and later use restore_cwd to return to the recorded location. This function may allocate space using malloc (via getcwd) or leave a file descriptor open; use free_cwd to perform the necessary free or close. Upon failure, no memory is allocated, any locally opened file descriptors are closed; return non-zero -- in that case, free_cwd need not be called, but doing so is ok. Otherwise, return zero. The _raison d'etre_ for this interface is that the working directory is sometimes inaccessible, and getcwd is not robust or as efficient. So, we prefer to use the open/fchdir approach, but fall back on getcwd if necessary. This module works for most cases with just the getcwd-lgpl module, but to be truly robust, use the getcwd module. Some systems lack fchdir altogether: e.g., OS/2, pre-2001 Cygwin, SCO Xenix. Also, SunOS 4 and Irix 5.3 provide the function, yet it doesn't work for partitions on which auditing is enabled. If you're still using an obsolete system with these problems, please send email to the maintainer of this code. */ int save_cwd (struct saved_cwd *cwd) { cwd->name = NULL; cwd->desc = open (".", O_SEARCH | O_CLOEXEC); if (!GNULIB_FCNTL_SAFER) cwd->desc = fd_safer_flag (cwd->desc, O_CLOEXEC); if (cwd->desc < 0) { cwd->name = getcwd (NULL, 0); return cwd->name ? 0 : -1; } return 0; } /* Change to recorded location, CWD, in directory hierarchy. Upon failure, return -1 (errno is set by chdir or fchdir). Upon success, return zero. */ int restore_cwd (const struct saved_cwd *cwd) { if (0 <= cwd->desc) return fchdir (cwd->desc); else return chdir_long (cwd->name); } void free_cwd (struct saved_cwd *cwd) { if (cwd->desc >= 0) close (cwd->desc); free (cwd->name); } �����������������������recutils-1.9/lib/getdtablesize.c��������������������������������������������������������������������0000644�0000000�0000000�00000006565�14226564450�013670� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getdtablesize() function: Return maximum possible file descriptor value + 1. Copyright (C) 2008-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <stdio.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int _setmaxstdio_nothrow (int newmax) { int result; TRY_MSVC_INVAL { result = _setmaxstdio (newmax); } CATCH_MSVC_INVAL { result = -1; } DONE_MSVC_INVAL; return result; } # else # define _setmaxstdio_nothrow _setmaxstdio # endif /* Cache for the previous getdtablesize () result. Safe to cache because Windows also lacks setrlimit. */ static int dtablesize; int getdtablesize (void) { if (dtablesize == 0) { /* We are looking for the number N such that the valid file descriptors are 0..N-1. It can be obtained through a loop as follows: { int fd; for (fd = 3; fd < 65536; fd++) if (dup2 (0, fd) == -1) break; return fd; } On Windows XP, the result is 2048. The drawback of this loop is that it allocates memory for a libc internal array that is never freed. The number N can also be obtained as the upper bound for _getmaxstdio (). _getmaxstdio () returns the maximum number of open FILE objects. The sanity check in _setmaxstdio reveals the maximum number of file descriptors. This too allocates memory, but it is freed when we call _setmaxstdio with the original value. */ int orig_max_stdio = _getmaxstdio (); unsigned int bound; for (bound = 0x10000; _setmaxstdio_nothrow (bound) < 0; bound = bound / 2) ; _setmaxstdio_nothrow (orig_max_stdio); dtablesize = bound; } return dtablesize; } #else # include <limits.h> # include <sys/resource.h> # ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY # endif # ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY # endif # ifdef __CYGWIN__ /* Cygwin 1.7.25 auto-increases the RLIMIT_NOFILE soft limit until it hits the compile-time constant hard limit of 3200. We might as well just report the hard limit. */ # define rlim_cur rlim_max # endif int getdtablesize (void) { struct rlimit lim; if (getrlimit (RLIMIT_NOFILE, &lim) == 0 && 0 <= lim.rlim_cur && lim.rlim_cur <= INT_MAX && lim.rlim_cur != RLIM_INFINITY && lim.rlim_cur != RLIM_SAVED_CUR && lim.rlim_cur != RLIM_SAVED_MAX) return lim.rlim_cur; return INT_MAX; } #endif �������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fstat.c����������������������������������������������������������������������������0000644�0000000�0000000�00000005153�14226564447�012161� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fstat() replacement. Copyright (C) 2011-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_fstat doesn't recurse to rpl_fstat. */ #define __need_system_sys_stat_h #include <config.h> /* Get the original definition of fstat. It might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> #undef __need_system_sys_stat_h #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #if !defined WINDOWS_NATIVE static int orig_fstat (int fd, struct stat *buf) { return fstat (fd, buf); } #endif /* Specification. */ #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include "stat-time.h" #include <errno.h> #include <unistd.h> #ifdef WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # include "stat-w32.h" #endif int rpl_fstat (int fd, struct stat *buf) { #if REPLACE_FCHDIR && REPLACE_OPEN_DIRECTORY /* Handle the case when rpl_open() used a dummy file descriptor to work around an open() that can't normally visit directories. */ const char *name = _gl_directory_name (fd); if (name != NULL) return stat (name, buf); #endif #ifdef WINDOWS_NATIVE /* Fill the fields ourselves, because the original fstat function returns values for st_atime, st_mtime, st_ctime that depend on the current time zone. See <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */ HANDLE h = (HANDLE) _get_osfhandle (fd); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } return _gl_fstat_by_handle (h, NULL, buf); #else return stat_time_normalize (orig_fstat (fd, buf), buf); #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/isnan.c����������������������������������������������������������������������������0000644�0000000�0000000�00000015627�14226564450�012151� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #include <config.h> /* Specification. */ #ifdef USE_LONG_DOUBLE /* Specification found in math.h or isnanl-nolibm.h. */ extern int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; #elif ! defined USE_FLOAT /* Specification found in math.h or isnand-nolibm.h. */ extern int rpl_isnand (double x); #else /* defined USE_FLOAT */ /* Specification found in math.h or isnanf-nolibm.h. */ extern int rpl_isnanf (float x); #endif #include <float.h> #include <string.h> #include "float+.h" #ifdef USE_LONG_DOUBLE # define FUNC rpl_isnanl # define DOUBLE long double # define MAX_EXP LDBL_MAX_EXP # define MIN_EXP LDBL_MIN_EXP # if defined LDBL_EXPBIT0_WORD && defined LDBL_EXPBIT0_BIT # define KNOWN_EXPBIT0_LOCATION # define EXPBIT0_WORD LDBL_EXPBIT0_WORD # define EXPBIT0_BIT LDBL_EXPBIT0_BIT # endif # define SIZE SIZEOF_LDBL # define L_(literal) literal##L #elif ! defined USE_FLOAT # define FUNC rpl_isnand # define DOUBLE double # define MAX_EXP DBL_MAX_EXP # define MIN_EXP DBL_MIN_EXP # if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT # define KNOWN_EXPBIT0_LOCATION # define EXPBIT0_WORD DBL_EXPBIT0_WORD # define EXPBIT0_BIT DBL_EXPBIT0_BIT # endif # define SIZE SIZEOF_DBL # define L_(literal) literal #else /* defined USE_FLOAT */ # define FUNC rpl_isnanf # define DOUBLE float # define MAX_EXP FLT_MAX_EXP # define MIN_EXP FLT_MIN_EXP # if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT # define KNOWN_EXPBIT0_LOCATION # define EXPBIT0_WORD FLT_EXPBIT0_WORD # define EXPBIT0_BIT FLT_EXPBIT0_BIT # endif # define SIZE SIZEOF_FLT # define L_(literal) literal##f #endif #define EXP_MASK ((MAX_EXP - MIN_EXP) | 7) #define NWORDS \ ((sizeof (DOUBLE) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { DOUBLE value; unsigned int word[NWORDS]; } memory_double; /* Most hosts nowadays use IEEE floating point, so they use IEC 60559 representations, have infinities and NaNs, and do not trap on exceptions. Define IEEE_FLOATING_POINT if this host is one of the typical ones. The C11 macro __STDC_IEC_559__ is close to what is wanted here, but is not quite right because this file does not require all the features of C11 Annex F (and does not require C11 at all, for that matter). */ #define IEEE_FLOATING_POINT (FLT_RADIX == 2 && FLT_MANT_DIG == 24 \ && FLT_MIN_EXP == -125 && FLT_MAX_EXP == 128) int FUNC (DOUBLE x) { #if defined KNOWN_EXPBIT0_LOCATION && IEEE_FLOATING_POINT # if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Special CPU dependent code is needed to treat bit patterns outside the IEEE 754 specification (such as Pseudo-NaNs, Pseudo-Infinities, Pseudo-Zeroes, Unnormalized Numbers, and Pseudo-Denormals) as NaNs. These bit patterns are: - exponent = 0x0001..0x7FFF, mantissa bit 63 = 0, - exponent = 0x0000, mantissa bit 63 = 1. The NaN bit pattern is: - exponent = 0x7FFF, mantissa >= 0x8000000000000001. */ memory_double m; unsigned int exponent; m.value = x; exponent = (m.word[EXPBIT0_WORD] >> EXPBIT0_BIT) & EXP_MASK; # ifdef WORDS_BIGENDIAN /* Big endian: EXPBIT0_WORD = 0, EXPBIT0_BIT = 16. */ if (exponent == 0) return 1 & (m.word[0] >> 15); else if (exponent == EXP_MASK) return (((m.word[0] ^ 0x8000U) << 16) | m.word[1] | (m.word[2] >> 16)) != 0; else return 1 & ~(m.word[0] >> 15); # else /* Little endian: EXPBIT0_WORD = 2, EXPBIT0_BIT = 0. */ if (exponent == 0) return (m.word[1] >> 31); else if (exponent == EXP_MASK) return ((m.word[1] ^ 0x80000000U) | m.word[0]) != 0; else return (m.word[1] >> 31) ^ 1; # endif # else /* Be careful to not do any floating-point operation on x, such as x == x, because x may be a signaling NaN. */ # if defined __SUNPRO_C || defined __ICC || defined _MSC_VER \ || defined __DECC || defined __TINYC__ \ || (defined __sgi && !defined __GNUC__) /* The Sun C 5.0, Intel ICC 10.0, Microsoft Visual C/C++ 9.0, Compaq (ex-DEC) 6.4, and TinyCC compilers don't recognize the initializers as constant expressions. The Compaq compiler also fails when constant-folding 0.0 / 0.0 even when constant-folding is not required. The Microsoft Visual C/C++ compiler also fails when constant-folding 1.0 / 0.0 even when constant-folding is not required. The SGI MIPSpro C compiler complains about "floating-point operation result is out of range". */ static DOUBLE zero = L_(0.0); memory_double nan; DOUBLE plus_inf = L_(1.0) / zero; DOUBLE minus_inf = -L_(1.0) / zero; nan.value = zero / zero; # else static memory_double nan = { L_(0.0) / L_(0.0) }; static DOUBLE plus_inf = L_(1.0) / L_(0.0); static DOUBLE minus_inf = -L_(1.0) / L_(0.0); # endif { memory_double m; /* A NaN can be recognized through its exponent. But exclude +Infinity and -Infinity, which have the same exponent. */ m.value = x; if (((m.word[EXPBIT0_WORD] ^ nan.word[EXPBIT0_WORD]) & (EXP_MASK << EXPBIT0_BIT)) == 0) return (memcmp (&m.value, &plus_inf, SIZE) != 0 && memcmp (&m.value, &minus_inf, SIZE) != 0); else return 0; } # endif #else /* The configuration did not find sufficient information, or does not use IEEE floating point. Give up about the signaling NaNs; handle only the quiet NaNs. */ if (x == x) { # if defined USE_LONG_DOUBLE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Detect any special bit patterns that pass ==; see comment above. */ memory_double m1; memory_double m2; memset (&m1.value, 0, SIZE); memset (&m2.value, 0, SIZE); m1.value = x; m2.value = x + (x ? 0.0L : -0.0L); if (memcmp (&m1.value, &m2.value, SIZE) != 0) return 1; # endif return 0; } else return 1; #endif } ���������������������������������������������������������������������������������������������������������recutils-1.9/lib/utime.c����������������������������������������������������������������������������0000644�0000000�0000000�00000021016�14226564451�012152� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around platform bugs in utime. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible. */ #include <config.h> /* Specification. */ #include <utime.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <stdbool.h> # include <windows.h> # include "filename.h" # include "malloca.h" /* Don't assume that UNICODE is not defined. */ # undef CreateFile # define CreateFile CreateFileA # undef GetFileAttributes # define GetFileAttributes GetFileAttributesA int _gl_utimens_windows (const char *name, struct timespec ts[2]) { /* POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13> specifies: "More than two leading <slash> characters shall be treated as a single <slash> character." */ if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2])) { name += 2; while (ISSLASH (name[1])) name++; } size_t len = strlen (name); size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0); /* Remove trailing slashes (except the very first one, at position drive_prefix_len), but remember their presence. */ size_t rlen; bool check_dir = false; rlen = len; while (rlen > drive_prefix_len && ISSLASH (name[rlen-1])) { check_dir = true; if (rlen == drive_prefix_len + 1) break; rlen--; } const char *rname; char *malloca_rname; if (rlen == len) { rname = name; malloca_rname = NULL; } else { malloca_rname = malloca (rlen + 1); if (malloca_rname == NULL) { errno = ENOMEM; return -1; } memcpy (malloca_rname, name, rlen); malloca_rname[rlen] = '\0'; rname = malloca_rname; } DWORD error; /* Open a handle to the file. CreateFile <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea> <https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files> */ HANDLE handle = CreateFile (rname, FILE_READ_ATTRIBUTES | FILE_WRITE_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only in case as different) makes sense only when applied to *all* filesystem operations. */ FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */, NULL); if (handle == INVALID_HANDLE_VALUE) { error = GetLastError (); goto failed; } if (check_dir) { /* GetFileAttributes <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesa> */ DWORD attributes = GetFileAttributes (rname); if (attributes == INVALID_FILE_ATTRIBUTES) { error = GetLastError (); CloseHandle (handle); goto failed; } if ((attributes & FILE_ATTRIBUTE_DIRECTORY) == 0) { CloseHandle (handle); if (malloca_rname != NULL) freea (malloca_rname); errno = ENOTDIR; return -1; } } { /* Use SetFileTime(). See <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-setfiletime> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ FILETIME last_access_time; FILETIME last_write_time; if (ts == NULL) { /* GetSystemTimeAsFileTime is the same as GetSystemTime followed by SystemTimeToFileTime. <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimeasfiletime>. It would be overkill to use GetSystemTimePreciseAsFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime>. */ FILETIME current_time; GetSystemTimeAsFileTime (¤t_time); last_access_time = current_time; last_write_time = current_time; } else { { ULONGLONG time_since_16010101 = (ULONGLONG) ts[0].tv_sec * 10000000 + ts[0].tv_nsec / 100 + 116444736000000000LL; last_access_time.dwLowDateTime = (DWORD) time_since_16010101; last_access_time.dwHighDateTime = time_since_16010101 >> 32; } { ULONGLONG time_since_16010101 = (ULONGLONG) ts[1].tv_sec * 10000000 + ts[1].tv_nsec / 100 + 116444736000000000LL; last_write_time.dwLowDateTime = (DWORD) time_since_16010101; last_write_time.dwHighDateTime = time_since_16010101 >> 32; } } if (SetFileTime (handle, NULL, &last_access_time, &last_write_time)) { CloseHandle (handle); if (malloca_rname != NULL) freea (malloca_rname); return 0; } else { #if 0 DWORD sft_error = GetLastError (); fprintf (stderr, "utimens SetFileTime error 0x%x\n", (unsigned int) sft_error); #endif CloseHandle (handle); if (malloca_rname != NULL) freea (malloca_rname); errno = EINVAL; return -1; } } failed: { #if 0 fprintf (stderr, "utimens CreateFile/GetFileAttributes error 0x%x\n", (unsigned int) error); #endif if (malloca_rname != NULL) freea (malloca_rname); switch (error) { /* Some of these errors probably cannot happen with the specific flags that we pass to CreateFile. But who knows... */ case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */ case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */ case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */ case ERROR_BAD_NETPATH: /* rname is such as '\\nonexistentserver\share'. */ case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */ case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */ case ERROR_DIRECTORY: errno = ENOENT; break; case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */ case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys'. */ errno = (ts != NULL ? EPERM : EACCES); break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_PROTECT: errno = EROFS; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: errno = ENAMETOOLONG; break; case ERROR_DELETE_PENDING: /* XXX map to EACCES or EPERM? */ errno = EPERM; break; default: errno = EINVAL; break; } return -1; } } int utime (const char *name, const struct utimbuf *ts) { if (ts == NULL) return _gl_utimens_windows (name, NULL); else { struct timespec ts_with_nanoseconds[2]; ts_with_nanoseconds[0].tv_sec = ts->actime; ts_with_nanoseconds[0].tv_nsec = 0; ts_with_nanoseconds[1].tv_sec = ts->modtime; ts_with_nanoseconds[1].tv_nsec = 0; return _gl_utimens_windows (name, ts_with_nanoseconds); } } #else # include <errno.h> # include <sys/stat.h> # include "filename.h" int utime (const char *name, const struct utimbuf *ts) #undef utime { # if REPLACE_FUNC_UTIME_FILE /* macOS 10.13 mistakenly succeeds when given a symbolic link to a non-directory with a trailing slash. */ size_t len = strlen (name); if (len > 0 && ISSLASH (name[len - 1])) { struct stat buf; if (stat (name, &buf) == -1 && errno != EOVERFLOW) return -1; } # endif /* REPLACE_FUNC_UTIME_FILE */ return utime (name, ts); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getopt-pfx-core.h������������������������������������������������������������������0000644�0000000�0000000�00000005024�14226564450�014057� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt (basic, portable features) gnulib wrapper header. Copyright (C) 1989-2022 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_PFX_CORE_H #define _GETOPT_PFX_CORE_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. Systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #ifdef __GETOPT_PREFIX # ifndef __GETOPT_ID # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # endif # undef getopt # undef optarg # undef opterr # undef optind # undef optopt # define getopt __GETOPT_ID (getopt) # define optarg __GETOPT_ID (optarg) # define opterr __GETOPT_ID (opterr) # define optind __GETOPT_ID (optind) # define optopt __GETOPT_ID (optopt) /* Work around a a problem on macOS, which declares getopt with a trailing __DARWIN_ALIAS(getopt) that would expand to something like __asm("_" "rpl_getopt" "$UNIX2003") were it not for the following hack to suppress the macOS declaration <https://bugs.gnu.org/40205>. */ # ifdef __APPLE__ # define _GETOPT # endif /* The system's getopt.h may have already included getopt-core.h to declare the unprefixed identifiers. Undef _GETOPT_CORE_H so that getopt-core.h declares them with prefixes. */ # undef _GETOPT_CORE_H #endif #include <getopt-core.h> #endif /* _GETOPT_PFX_CORE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/regex_internal.c�������������������������������������������������������������������0000644�0000000�0000000�00000136737�14226564450�014055� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ static void re_string_construct_common (const char *str, Idx len, re_string_t *pstr, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa); static re_dfastate_t *create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, re_hashval_t hash); static re_dfastate_t *create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context, re_hashval_t hash); static reg_errcode_t re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len); static void build_wcs_buffer (re_string_t *pstr); static reg_errcode_t build_wcs_upper_buffer (re_string_t *pstr); static void build_upper_buffer (re_string_t *pstr); static void re_string_translate_buffer (re_string_t *pstr); static unsigned int re_string_context_at (const re_string_t *input, Idx idx, int eflags) __attribute__ ((pure)); /* Functions for string operation. */ /* This function allocate the buffers. It is necessary to call re_string_reconstruct before using the object. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_allocate (re_string_t *pstr, const char *str, Idx len, Idx init_len, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { reg_errcode_t ret; Idx init_buf_len; /* Ensure at least one character fits into the buffers. */ if (init_len < dfa->mb_cur_max) init_len = dfa->mb_cur_max; init_buf_len = (len + 1 < init_len) ? len + 1: init_len; re_string_construct_common (str, len, pstr, trans, icase, dfa); ret = re_string_realloc_buffers (pstr, init_buf_len); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; pstr->word_char = dfa->word_char; pstr->word_ops_used = dfa->word_ops_used; pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; pstr->valid_len = (pstr->mbs_allocated || dfa->mb_cur_max > 1) ? 0 : len; pstr->valid_raw_len = pstr->valid_len; return REG_NOERROR; } /* This function allocate the buffers, and initialize them. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_construct (re_string_t *pstr, const char *str, Idx len, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { reg_errcode_t ret; memset (pstr, '\0', sizeof (re_string_t)); re_string_construct_common (str, len, pstr, trans, icase, dfa); if (len > 0) { ret = re_string_realloc_buffers (pstr, len + 1); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } pstr->mbs = pstr->mbs_allocated ? pstr->mbs : (unsigned char *) str; if (icase) { if (dfa->mb_cur_max > 1) { while (1) { ret = build_wcs_upper_buffer (pstr); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; if (pstr->valid_raw_len >= len) break; if (pstr->bufs_len > pstr->valid_len + dfa->mb_cur_max) break; ret = re_string_realloc_buffers (pstr, pstr->bufs_len * 2); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } } else build_upper_buffer (pstr); } else { if (dfa->mb_cur_max > 1) build_wcs_buffer (pstr); else { if (trans != NULL) re_string_translate_buffer (pstr); else { pstr->valid_len = pstr->bufs_len; pstr->valid_raw_len = pstr->bufs_len; } } } return REG_NOERROR; } /* Helper functions for re_string_allocate, and re_string_construct. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_realloc_buffers (re_string_t *pstr, Idx new_buf_len) { if (pstr->mb_cur_max > 1) { wint_t *new_wcs; /* Avoid overflow in realloc. */ const size_t max_object_size = MAX (sizeof (wint_t), sizeof (Idx)); if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < new_buf_len)) return REG_ESPACE; new_wcs = re_realloc (pstr->wcs, wint_t, new_buf_len); if (__glibc_unlikely (new_wcs == NULL)) return REG_ESPACE; pstr->wcs = new_wcs; if (pstr->offsets != NULL) { Idx *new_offsets = re_realloc (pstr->offsets, Idx, new_buf_len); if (__glibc_unlikely (new_offsets == NULL)) return REG_ESPACE; pstr->offsets = new_offsets; } } if (pstr->mbs_allocated) { unsigned char *new_mbs = re_realloc (pstr->mbs, unsigned char, new_buf_len); if (__glibc_unlikely (new_mbs == NULL)) return REG_ESPACE; pstr->mbs = new_mbs; } pstr->bufs_len = new_buf_len; return REG_NOERROR; } static void re_string_construct_common (const char *str, Idx len, re_string_t *pstr, RE_TRANSLATE_TYPE trans, bool icase, const re_dfa_t *dfa) { pstr->raw_mbs = (const unsigned char *) str; pstr->len = len; pstr->raw_len = len; pstr->trans = trans; pstr->icase = icase; pstr->mbs_allocated = (trans != NULL || icase); pstr->mb_cur_max = dfa->mb_cur_max; pstr->is_utf8 = dfa->is_utf8; pstr->map_notascii = dfa->map_notascii; pstr->stop = pstr->len; pstr->raw_stop = pstr->stop; } /* Build wide character buffer PSTR->WCS. If the byte sequence of the string are: <mb1>(0), <mb1>(1), <mb2>(0), <mb2>(1), <sb3> Then wide character buffer will be: <wc1> , WEOF , <wc2> , WEOF , <wc3> We use WEOF for padding, they indicate that the position isn't a first byte of a multibyte character. Note that this function assumes PSTR->VALID_LEN elements are already built and starts from PSTR->VALID_LEN. */ static void build_wcs_buffer (re_string_t *pstr) { #ifdef _LIBC unsigned char buf[MB_LEN_MAX]; DEBUG_ASSERT (MB_LEN_MAX >= pstr->mb_cur_max); #else unsigned char buf[64]; #endif mbstate_t prev_st; Idx byte_idx, end_idx, remain_len; size_t mbclen; /* Build the buffers from pstr->valid_len to either pstr->len or pstr->bufs_len. */ end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (byte_idx = pstr->valid_len; byte_idx < end_idx;) { wchar_t wc; const char *p; remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; /* Apply the translation if we need. */ if (__glibc_unlikely (pstr->trans != NULL)) { int i, ch; for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) { ch = pstr->raw_mbs [pstr->raw_mbs_idx + byte_idx + i]; buf[i] = pstr->mbs[byte_idx + i] = pstr->trans[ch]; } p = (const char *) buf; } else p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx; mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); if (__glibc_unlikely (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len))) { /* We treat these cases as a singlebyte character. */ mbclen = 1; wc = (wchar_t) pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; if (__glibc_unlikely (pstr->trans != NULL)) wc = pstr->trans[wc]; pstr->cur_state = prev_st; } else if (__glibc_unlikely (mbclen == (size_t) -2)) { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } /* Write wide character and padding. */ pstr->wcs[byte_idx++] = wc; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } pstr->valid_len = byte_idx; pstr->valid_raw_len = byte_idx; } /* Build wide character buffer PSTR->WCS like build_wcs_buffer, but for REG_ICASE. */ static reg_errcode_t __attribute_warn_unused_result__ build_wcs_upper_buffer (re_string_t *pstr) { mbstate_t prev_st; Idx src_idx, byte_idx, end_idx, remain_len; size_t mbclen; #ifdef _LIBC char buf[MB_LEN_MAX]; DEBUG_ASSERT (pstr->mb_cur_max <= MB_LEN_MAX); #else char buf[64]; #endif byte_idx = pstr->valid_len; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; /* The following optimization assumes that ASCII characters can be mapped to wide characters with a simple cast. */ if (! pstr->map_notascii && pstr->trans == NULL && !pstr->offsets_needed) { while (byte_idx < end_idx) { wchar_t wc; unsigned char ch = pstr->raw_mbs[pstr->raw_mbs_idx + byte_idx]; if (isascii (ch) && mbsinit (&pstr->cur_state)) { /* The next step uses the assumption that wchar_t is encoded ASCII-safe: all ASCII values can be converted like this. */ wchar_t wcu = __towupper (ch); if (isascii (wcu)) { pstr->mbs[byte_idx] = wcu; pstr->wcs[byte_idx] = wcu; byte_idx++; continue; } } remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; mbclen = __mbrtowc (&wc, ((const char *) pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx), remain_len, &pstr->cur_state); if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2)) { wchar_t wcu = __towupper (wc); if (wcu != wc) { size_t mbcdlen; mbcdlen = __wcrtomb (buf, wcu, &prev_st); if (__glibc_likely (mbclen == mbcdlen)) memcpy (pstr->mbs + byte_idx, buf, mbclen); else { src_idx = byte_idx; goto offsets_needed; } } else memcpy (pstr->mbs + byte_idx, pstr->raw_mbs + pstr->raw_mbs_idx + byte_idx, mbclen); pstr->wcs[byte_idx++] = wcu; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } else if (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) { /* It is an invalid character, an incomplete character at the end of the string, or '\0'. Just use the byte. */ pstr->mbs[byte_idx] = ch; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; if (__glibc_unlikely (mbclen == (size_t) -1)) pstr->cur_state = prev_st; } else { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } } pstr->valid_len = byte_idx; pstr->valid_raw_len = byte_idx; return REG_NOERROR; } else for (src_idx = pstr->valid_raw_len; byte_idx < end_idx;) { wchar_t wc; const char *p; offsets_needed: remain_len = end_idx - byte_idx; prev_st = pstr->cur_state; if (__glibc_unlikely (pstr->trans != NULL)) { int i, ch; for (i = 0; i < pstr->mb_cur_max && i < remain_len; ++i) { ch = pstr->raw_mbs [pstr->raw_mbs_idx + src_idx + i]; buf[i] = pstr->trans[ch]; } p = (const char *) buf; } else p = (const char *) pstr->raw_mbs + pstr->raw_mbs_idx + src_idx; mbclen = __mbrtowc (&wc, p, remain_len, &pstr->cur_state); if (__glibc_likely (0 < mbclen && mbclen < (size_t) -2)) { wchar_t wcu = __towupper (wc); if (wcu != wc) { size_t mbcdlen; mbcdlen = __wcrtomb ((char *) buf, wcu, &prev_st); if (__glibc_likely (mbclen == mbcdlen)) memcpy (pstr->mbs + byte_idx, buf, mbclen); else if (mbcdlen != (size_t) -1) { size_t i; if (byte_idx + mbcdlen > pstr->bufs_len) { pstr->cur_state = prev_st; break; } if (pstr->offsets == NULL) { pstr->offsets = re_malloc (Idx, pstr->bufs_len); if (pstr->offsets == NULL) return REG_ESPACE; } if (!pstr->offsets_needed) { for (i = 0; i < (size_t) byte_idx; ++i) pstr->offsets[i] = i; pstr->offsets_needed = 1; } memcpy (pstr->mbs + byte_idx, buf, mbcdlen); pstr->wcs[byte_idx] = wcu; pstr->offsets[byte_idx] = src_idx; for (i = 1; i < mbcdlen; ++i) { pstr->offsets[byte_idx + i] = src_idx + (i < mbclen ? i : mbclen - 1); pstr->wcs[byte_idx + i] = WEOF; } pstr->len += mbcdlen - mbclen; if (pstr->raw_stop > src_idx) pstr->stop += mbcdlen - mbclen; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; byte_idx += mbcdlen; src_idx += mbclen; continue; } else memcpy (pstr->mbs + byte_idx, p, mbclen); } else memcpy (pstr->mbs + byte_idx, p, mbclen); if (__glibc_unlikely (pstr->offsets_needed != 0)) { size_t i; for (i = 0; i < mbclen; ++i) pstr->offsets[byte_idx + i] = src_idx + i; } src_idx += mbclen; pstr->wcs[byte_idx++] = wcu; /* Write paddings. */ for (remain_len = byte_idx + mbclen - 1; byte_idx < remain_len ;) pstr->wcs[byte_idx++] = WEOF; } else if (mbclen == (size_t) -1 || mbclen == 0 || (mbclen == (size_t) -2 && pstr->bufs_len >= pstr->len)) { /* It is an invalid character or '\0'. Just use the byte. */ int ch = pstr->raw_mbs[pstr->raw_mbs_idx + src_idx]; if (__glibc_unlikely (pstr->trans != NULL)) ch = pstr->trans [ch]; pstr->mbs[byte_idx] = ch; if (__glibc_unlikely (pstr->offsets_needed != 0)) pstr->offsets[byte_idx] = src_idx; ++src_idx; /* And also cast it to wide char. */ pstr->wcs[byte_idx++] = (wchar_t) ch; if (__glibc_unlikely (mbclen == (size_t) -1)) pstr->cur_state = prev_st; } else { /* The buffer doesn't have enough space, finish to build. */ pstr->cur_state = prev_st; break; } } pstr->valid_len = byte_idx; pstr->valid_raw_len = src_idx; return REG_NOERROR; } /* Skip characters until the index becomes greater than NEW_RAW_IDX. Return the index. */ static Idx re_string_skip_chars (re_string_t *pstr, Idx new_raw_idx, wint_t *last_wc) { mbstate_t prev_st; Idx rawbuf_idx; size_t mbclen; wint_t wc = WEOF; /* Skip the characters which are not necessary to check. */ for (rawbuf_idx = pstr->raw_mbs_idx + pstr->valid_raw_len; rawbuf_idx < new_raw_idx;) { wchar_t wc2; Idx remain_len = pstr->raw_len - rawbuf_idx; prev_st = pstr->cur_state; mbclen = __mbrtowc (&wc2, (const char *) pstr->raw_mbs + rawbuf_idx, remain_len, &pstr->cur_state); if (__glibc_unlikely (mbclen == (size_t) -2 || mbclen == (size_t) -1 || mbclen == 0)) { /* We treat these cases as a single byte character. */ if (mbclen == 0 || remain_len == 0) wc = L'\0'; else wc = *(unsigned char *) (pstr->raw_mbs + rawbuf_idx); mbclen = 1; pstr->cur_state = prev_st; } else wc = wc2; /* Then proceed the next character. */ rawbuf_idx += mbclen; } *last_wc = wc; return rawbuf_idx; } /* Build the buffer PSTR->MBS, and apply the translation if we need. This function is used in case of REG_ICASE. */ static void build_upper_buffer (re_string_t *pstr) { Idx char_idx, end_idx; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (char_idx = pstr->valid_len; char_idx < end_idx; ++char_idx) { int ch = pstr->raw_mbs[pstr->raw_mbs_idx + char_idx]; if (__glibc_unlikely (pstr->trans != NULL)) ch = pstr->trans[ch]; pstr->mbs[char_idx] = toupper (ch); } pstr->valid_len = char_idx; pstr->valid_raw_len = char_idx; } /* Apply TRANS to the buffer in PSTR. */ static void re_string_translate_buffer (re_string_t *pstr) { Idx buf_idx, end_idx; end_idx = (pstr->bufs_len > pstr->len) ? pstr->len : pstr->bufs_len; for (buf_idx = pstr->valid_len; buf_idx < end_idx; ++buf_idx) { int ch = pstr->raw_mbs[pstr->raw_mbs_idx + buf_idx]; pstr->mbs[buf_idx] = pstr->trans[ch]; } pstr->valid_len = buf_idx; pstr->valid_raw_len = buf_idx; } /* This function re-construct the buffers. Concretely, convert to wide character in case of pstr->mb_cur_max > 1, convert to upper case in case of REG_ICASE, apply translation. */ static reg_errcode_t __attribute_warn_unused_result__ re_string_reconstruct (re_string_t *pstr, Idx idx, int eflags) { Idx offset; if (__glibc_unlikely (pstr->raw_mbs_idx <= idx)) offset = idx - pstr->raw_mbs_idx; else { /* Reset buffer. */ if (pstr->mb_cur_max > 1) memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); pstr->len = pstr->raw_len; pstr->stop = pstr->raw_stop; pstr->valid_len = 0; pstr->raw_mbs_idx = 0; pstr->valid_raw_len = 0; pstr->offsets_needed = 0; pstr->tip_context = ((eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF); if (!pstr->mbs_allocated) pstr->mbs = (unsigned char *) pstr->raw_mbs; offset = idx; } if (__glibc_likely (offset != 0)) { /* Should the already checked characters be kept? */ if (__glibc_likely (offset < pstr->valid_raw_len)) { /* Yes, move them to the front of the buffer. */ if (__glibc_unlikely (pstr->offsets_needed)) { Idx low = 0, high = pstr->valid_len, mid; do { mid = (high + low) / 2; if (pstr->offsets[mid] > offset) high = mid; else if (pstr->offsets[mid] < offset) low = mid + 1; else break; } while (low < high); if (pstr->offsets[mid] < offset) ++mid; pstr->tip_context = re_string_context_at (pstr, mid - 1, eflags); /* This can be quite complicated, so handle specially only the common and easy case where the character with different length representation of lower and upper case is present at or after offset. */ if (pstr->valid_len > offset && mid == offset && pstr->offsets[mid] == offset) { memmove (pstr->wcs, pstr->wcs + offset, (pstr->valid_len - offset) * sizeof (wint_t)); memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); pstr->valid_len -= offset; pstr->valid_raw_len -= offset; for (low = 0; low < pstr->valid_len; low++) pstr->offsets[low] = pstr->offsets[low + offset] - offset; } else { /* Otherwise, just find out how long the partial multibyte character at offset is and fill it with WEOF/255. */ pstr->len = pstr->raw_len - idx + offset; pstr->stop = pstr->raw_stop - idx + offset; pstr->offsets_needed = 0; while (mid > 0 && pstr->offsets[mid - 1] == offset) --mid; while (mid < pstr->valid_len) if (pstr->wcs[mid] != WEOF) break; else ++mid; if (mid == pstr->valid_len) pstr->valid_len = 0; else { pstr->valid_len = pstr->offsets[mid] - offset; if (pstr->valid_len) { for (low = 0; low < pstr->valid_len; ++low) pstr->wcs[low] = WEOF; memset (pstr->mbs, 255, pstr->valid_len); } } pstr->valid_raw_len = pstr->valid_len; } } else { pstr->tip_context = re_string_context_at (pstr, offset - 1, eflags); if (pstr->mb_cur_max > 1) memmove (pstr->wcs, pstr->wcs + offset, (pstr->valid_len - offset) * sizeof (wint_t)); if (__glibc_unlikely (pstr->mbs_allocated)) memmove (pstr->mbs, pstr->mbs + offset, pstr->valid_len - offset); pstr->valid_len -= offset; pstr->valid_raw_len -= offset; DEBUG_ASSERT (pstr->valid_len > 0); } } else { /* No, skip all characters until IDX. */ Idx prev_valid_len = pstr->valid_len; if (__glibc_unlikely (pstr->offsets_needed)) { pstr->len = pstr->raw_len - idx + offset; pstr->stop = pstr->raw_stop - idx + offset; pstr->offsets_needed = 0; } pstr->valid_len = 0; if (pstr->mb_cur_max > 1) { Idx wcs_idx; wint_t wc = WEOF; if (pstr->is_utf8) { const unsigned char *raw, *p, *end; /* Special case UTF-8. Multi-byte chars start with any byte other than 0x80 - 0xbf. */ raw = pstr->raw_mbs + pstr->raw_mbs_idx; end = raw + (offset - pstr->mb_cur_max); if (end < pstr->raw_mbs) end = pstr->raw_mbs; p = raw + offset - 1; #ifdef _LIBC /* We know the wchar_t encoding is UCS4, so for the simple case, ASCII characters, skip the conversion step. */ if (isascii (*p) && __glibc_likely (pstr->trans == NULL)) { memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); /* pstr->valid_len = 0; */ wc = (wchar_t) *p; } else #endif for (; p >= end; --p) if ((*p & 0xc0) != 0x80) { mbstate_t cur_state; wchar_t wc2; Idx mlen = raw + pstr->len - p; unsigned char buf[6]; size_t mbclen; const unsigned char *pp = p; if (__glibc_unlikely (pstr->trans != NULL)) { int i = mlen < 6 ? mlen : 6; while (--i >= 0) buf[i] = pstr->trans[p[i]]; pp = buf; } /* XXX Don't use mbrtowc, we know which conversion to use (UTF-8 -> UCS4). */ memset (&cur_state, 0, sizeof (cur_state)); mbclen = __mbrtowc (&wc2, (const char *) pp, mlen, &cur_state); if (raw + offset - p <= mbclen && mbclen < (size_t) -2) { memset (&pstr->cur_state, '\0', sizeof (mbstate_t)); pstr->valid_len = mbclen - (raw + offset - p); wc = wc2; } break; } } if (wc == WEOF) pstr->valid_len = re_string_skip_chars (pstr, idx, &wc) - idx; if (wc == WEOF) pstr->tip_context = re_string_context_at (pstr, prev_valid_len - 1, eflags); else pstr->tip_context = ((__glibc_unlikely (pstr->word_ops_used != 0) && IS_WIDE_WORD_CHAR (wc)) ? CONTEXT_WORD : ((IS_WIDE_NEWLINE (wc) && pstr->newline_anchor) ? CONTEXT_NEWLINE : 0)); if (__glibc_unlikely (pstr->valid_len)) { for (wcs_idx = 0; wcs_idx < pstr->valid_len; ++wcs_idx) pstr->wcs[wcs_idx] = WEOF; if (pstr->mbs_allocated) memset (pstr->mbs, 255, pstr->valid_len); } pstr->valid_raw_len = pstr->valid_len; } else { int c = pstr->raw_mbs[pstr->raw_mbs_idx + offset - 1]; pstr->valid_raw_len = 0; if (pstr->trans) c = pstr->trans[c]; pstr->tip_context = (bitset_contain (pstr->word_char, c) ? CONTEXT_WORD : ((IS_NEWLINE (c) && pstr->newline_anchor) ? CONTEXT_NEWLINE : 0)); } } if (!__glibc_unlikely (pstr->mbs_allocated)) pstr->mbs += offset; } pstr->raw_mbs_idx = idx; pstr->len -= offset; pstr->stop -= offset; /* Then build the buffers. */ if (pstr->mb_cur_max > 1) { if (pstr->icase) { reg_errcode_t ret = build_wcs_upper_buffer (pstr); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } else build_wcs_buffer (pstr); } else if (__glibc_unlikely (pstr->mbs_allocated)) { if (pstr->icase) build_upper_buffer (pstr); else if (pstr->trans != NULL) re_string_translate_buffer (pstr); } else pstr->valid_len = pstr->len; pstr->cur_idx = 0; return REG_NOERROR; } static unsigned char __attribute__ ((pure)) re_string_peek_byte_case (const re_string_t *pstr, Idx idx) { int ch; Idx off; /* Handle the common (easiest) cases first. */ if (__glibc_likely (!pstr->mbs_allocated)) return re_string_peek_byte (pstr, idx); if (pstr->mb_cur_max > 1 && ! re_string_is_single_byte_char (pstr, pstr->cur_idx + idx)) return re_string_peek_byte (pstr, idx); off = pstr->cur_idx + idx; if (pstr->offsets_needed) off = pstr->offsets[off]; ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; /* Ensure that e.g. for tr_TR.UTF-8 BACKSLASH DOTLESS SMALL LETTER I this function returns CAPITAL LETTER I instead of first byte of DOTLESS SMALL LETTER I. The latter would confuse the parser, since peek_byte_case doesn't advance cur_idx in any way. */ if (pstr->offsets_needed && !isascii (ch)) return re_string_peek_byte (pstr, idx); return ch; } static unsigned char re_string_fetch_byte_case (re_string_t *pstr) { if (__glibc_likely (!pstr->mbs_allocated)) return re_string_fetch_byte (pstr); if (pstr->offsets_needed) { Idx off; int ch; /* For tr_TR.UTF-8 [[:islower:]] there is [[: CAPITAL LETTER I WITH DOT lower:]] in mbs. Skip in that case the whole multi-byte character and return the original letter. On the other side, with [[: DOTLESS SMALL LETTER I return [[:I, as doing anything else would complicate things too much. */ if (!re_string_first_byte (pstr, pstr->cur_idx)) return re_string_fetch_byte (pstr); off = pstr->offsets[pstr->cur_idx]; ch = pstr->raw_mbs[pstr->raw_mbs_idx + off]; if (! isascii (ch)) return re_string_fetch_byte (pstr); re_string_skip_bytes (pstr, re_string_char_size_at (pstr, pstr->cur_idx)); return ch; } return pstr->raw_mbs[pstr->raw_mbs_idx + pstr->cur_idx++]; } static void re_string_destruct (re_string_t *pstr) { re_free (pstr->wcs); re_free (pstr->offsets); if (pstr->mbs_allocated) re_free (pstr->mbs); } /* Return the context at IDX in INPUT. */ static unsigned int re_string_context_at (const re_string_t *input, Idx idx, int eflags) { int c; if (__glibc_unlikely (idx < 0)) /* In this case, we use the value stored in input->tip_context, since we can't know the character in input->mbs[-1] here. */ return input->tip_context; if (__glibc_unlikely (idx == input->len)) return ((eflags & REG_NOTEOL) ? CONTEXT_ENDBUF : CONTEXT_NEWLINE | CONTEXT_ENDBUF); if (input->mb_cur_max > 1) { wint_t wc; Idx wc_idx = idx; while(input->wcs[wc_idx] == WEOF) { DEBUG_ASSERT (wc_idx >= 0); --wc_idx; if (wc_idx < 0) return input->tip_context; } wc = input->wcs[wc_idx]; if (__glibc_unlikely (input->word_ops_used != 0) && IS_WIDE_WORD_CHAR (wc)) return CONTEXT_WORD; return (IS_WIDE_NEWLINE (wc) && input->newline_anchor ? CONTEXT_NEWLINE : 0); } else { c = re_string_byte_at (input, idx); if (bitset_contain (input->word_char, c)) return CONTEXT_WORD; return IS_NEWLINE (c) && input->newline_anchor ? CONTEXT_NEWLINE : 0; } } /* Functions for set operation. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_alloc (re_node_set *set, Idx size) { set->alloc = size; set->nelem = 0; set->elems = re_malloc (Idx, size); if (__glibc_unlikely (set->elems == NULL) && (MALLOC_0_IS_NONNULL || size != 0)) return REG_ESPACE; return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_1 (re_node_set *set, Idx elem) { set->alloc = 1; set->nelem = 1; set->elems = re_malloc (Idx, 1); if (__glibc_unlikely (set->elems == NULL)) { set->alloc = set->nelem = 0; return REG_ESPACE; } set->elems[0] = elem; return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_2 (re_node_set *set, Idx elem1, Idx elem2) { set->alloc = 2; set->elems = re_malloc (Idx, 2); if (__glibc_unlikely (set->elems == NULL)) return REG_ESPACE; if (elem1 == elem2) { set->nelem = 1; set->elems[0] = elem1; } else { set->nelem = 2; if (elem1 < elem2) { set->elems[0] = elem1; set->elems[1] = elem2; } else { set->elems[0] = elem2; set->elems[1] = elem1; } } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_copy (re_node_set *dest, const re_node_set *src) { dest->nelem = src->nelem; if (src->nelem > 0) { dest->alloc = dest->nelem; dest->elems = re_malloc (Idx, dest->alloc); if (__glibc_unlikely (dest->elems == NULL)) { dest->alloc = dest->nelem = 0; return REG_ESPACE; } memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); } else re_node_set_init_empty (dest); return REG_NOERROR; } /* Calculate the intersection of the sets SRC1 and SRC2. And merge it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. Note: We assume dest->elems is NULL, when dest->alloc is 0. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_add_intersect (re_node_set *dest, const re_node_set *src1, const re_node_set *src2) { Idx i1, i2, is, id, delta, sbase; if (src1->nelem == 0 || src2->nelem == 0) return REG_NOERROR; /* We need dest->nelem + 2 * elems_in_intersection; this is a conservative estimate. */ if (src1->nelem + src2->nelem + dest->nelem > dest->alloc) { Idx new_alloc = src1->nelem + src2->nelem + dest->alloc; Idx *new_elems = re_realloc (dest->elems, Idx, new_alloc); if (__glibc_unlikely (new_elems == NULL)) return REG_ESPACE; dest->elems = new_elems; dest->alloc = new_alloc; } /* Find the items in the intersection of SRC1 and SRC2, and copy into the top of DEST those that are not already in DEST itself. */ sbase = dest->nelem + src1->nelem + src2->nelem; i1 = src1->nelem - 1; i2 = src2->nelem - 1; id = dest->nelem - 1; for (;;) { if (src1->elems[i1] == src2->elems[i2]) { /* Try to find the item in DEST. Maybe we could binary search? */ while (id >= 0 && dest->elems[id] > src1->elems[i1]) --id; if (id < 0 || dest->elems[id] != src1->elems[i1]) dest->elems[--sbase] = src1->elems[i1]; if (--i1 < 0 || --i2 < 0) break; } /* Lower the highest of the two items. */ else if (src1->elems[i1] < src2->elems[i2]) { if (--i2 < 0) break; } else { if (--i1 < 0) break; } } id = dest->nelem - 1; is = dest->nelem + src1->nelem + src2->nelem - 1; delta = is - sbase + 1; /* Now copy. When DELTA becomes zero, the remaining DEST elements are already in place; this is more or less the same loop that is in re_node_set_merge. */ dest->nelem += delta; if (delta > 0 && id >= 0) for (;;) { if (dest->elems[is] > dest->elems[id]) { /* Copy from the top. */ dest->elems[id + delta--] = dest->elems[is--]; if (delta == 0) break; } else { /* Slide from the bottom. */ dest->elems[id + delta] = dest->elems[id]; if (--id < 0) break; } } /* Copy remaining SRC elements. */ memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); return REG_NOERROR; } /* Calculate the union set of the sets SRC1 and SRC2. And store it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_init_union (re_node_set *dest, const re_node_set *src1, const re_node_set *src2) { Idx i1, i2, id; if (src1 != NULL && src1->nelem > 0 && src2 != NULL && src2->nelem > 0) { dest->alloc = src1->nelem + src2->nelem; dest->elems = re_malloc (Idx, dest->alloc); if (__glibc_unlikely (dest->elems == NULL)) return REG_ESPACE; } else { if (src1 != NULL && src1->nelem > 0) return re_node_set_init_copy (dest, src1); else if (src2 != NULL && src2->nelem > 0) return re_node_set_init_copy (dest, src2); else re_node_set_init_empty (dest); return REG_NOERROR; } for (i1 = i2 = id = 0 ; i1 < src1->nelem && i2 < src2->nelem ;) { if (src1->elems[i1] > src2->elems[i2]) { dest->elems[id++] = src2->elems[i2++]; continue; } if (src1->elems[i1] == src2->elems[i2]) ++i2; dest->elems[id++] = src1->elems[i1++]; } if (i1 < src1->nelem) { memcpy (dest->elems + id, src1->elems + i1, (src1->nelem - i1) * sizeof (Idx)); id += src1->nelem - i1; } else if (i2 < src2->nelem) { memcpy (dest->elems + id, src2->elems + i2, (src2->nelem - i2) * sizeof (Idx)); id += src2->nelem - i2; } dest->nelem = id; return REG_NOERROR; } /* Calculate the union set of the sets DEST and SRC. And store it to DEST. Return value indicate the error code or REG_NOERROR if succeeded. */ static reg_errcode_t __attribute_warn_unused_result__ re_node_set_merge (re_node_set *dest, const re_node_set *src) { Idx is, id, sbase, delta; if (src == NULL || src->nelem == 0) return REG_NOERROR; if (dest->alloc < 2 * src->nelem + dest->nelem) { Idx new_alloc = 2 * (src->nelem + dest->alloc); Idx *new_buffer = re_realloc (dest->elems, Idx, new_alloc); if (__glibc_unlikely (new_buffer == NULL)) return REG_ESPACE; dest->elems = new_buffer; dest->alloc = new_alloc; } if (__glibc_unlikely (dest->nelem == 0)) { /* Although we already guaranteed above that dest->alloc != 0 and therefore dest->elems != NULL, add a debug assertion to pacify GCC 11.2.1's -fanalyzer. */ DEBUG_ASSERT (dest->elems); dest->nelem = src->nelem; memcpy (dest->elems, src->elems, src->nelem * sizeof (Idx)); return REG_NOERROR; } /* Copy into the top of DEST the items of SRC that are not found in DEST. Maybe we could binary search in DEST? */ for (sbase = dest->nelem + 2 * src->nelem, is = src->nelem - 1, id = dest->nelem - 1; is >= 0 && id >= 0; ) { if (dest->elems[id] == src->elems[is]) is--, id--; else if (dest->elems[id] < src->elems[is]) dest->elems[--sbase] = src->elems[is--]; else /* if (dest->elems[id] > src->elems[is]) */ --id; } if (is >= 0) { /* If DEST is exhausted, the remaining items of SRC must be unique. */ sbase -= is + 1; memcpy (dest->elems + sbase, src->elems, (is + 1) * sizeof (Idx)); } id = dest->nelem - 1; is = dest->nelem + 2 * src->nelem - 1; delta = is - sbase + 1; if (delta == 0) return REG_NOERROR; /* Now copy. When DELTA becomes zero, the remaining DEST elements are already in place. */ dest->nelem += delta; for (;;) { if (dest->elems[is] > dest->elems[id]) { /* Copy from the top. */ dest->elems[id + delta--] = dest->elems[is--]; if (delta == 0) break; } else { /* Slide from the bottom. */ dest->elems[id + delta] = dest->elems[id]; if (--id < 0) { /* Copy remaining SRC elements. */ memcpy (dest->elems, dest->elems + sbase, delta * sizeof (Idx)); break; } } } return REG_NOERROR; } /* Insert the new element ELEM to the re_node_set* SET. SET should not already have ELEM. Return true if successful. */ static bool __attribute_warn_unused_result__ re_node_set_insert (re_node_set *set, Idx elem) { Idx idx; /* In case the set is empty. */ if (set->alloc == 0) return __glibc_likely (re_node_set_init_1 (set, elem) == REG_NOERROR); if (__glibc_unlikely (set->nelem) == 0) { /* Although we already guaranteed above that set->alloc != 0 and therefore set->elems != NULL, add a debug assertion to pacify GCC 11.2 -fanalyzer. */ DEBUG_ASSERT (set->elems); set->elems[0] = elem; ++set->nelem; return true; } /* Realloc if we need. */ if (set->alloc == set->nelem) { Idx *new_elems; set->alloc = set->alloc * 2; new_elems = re_realloc (set->elems, Idx, set->alloc); if (__glibc_unlikely (new_elems == NULL)) return false; set->elems = new_elems; } /* Move the elements which follows the new element. Test the first element separately to skip a check in the inner loop. */ if (elem < set->elems[0]) { for (idx = set->nelem; idx > 0; idx--) set->elems[idx] = set->elems[idx - 1]; } else { for (idx = set->nelem; set->elems[idx - 1] > elem; idx--) set->elems[idx] = set->elems[idx - 1]; DEBUG_ASSERT (set->elems[idx - 1] < elem); } /* Insert the new element. */ set->elems[idx] = elem; ++set->nelem; return true; } /* Insert the new element ELEM to the re_node_set* SET. SET should not already have any element greater than or equal to ELEM. Return true if successful. */ static bool __attribute_warn_unused_result__ re_node_set_insert_last (re_node_set *set, Idx elem) { /* Realloc if we need. */ if (set->alloc == set->nelem) { Idx *new_elems; set->alloc = (set->alloc + 1) * 2; new_elems = re_realloc (set->elems, Idx, set->alloc); if (__glibc_unlikely (new_elems == NULL)) return false; set->elems = new_elems; } /* Insert the new element. */ set->elems[set->nelem++] = elem; return true; } /* Compare two node sets SET1 and SET2. Return true if SET1 and SET2 are equivalent. */ static bool __attribute__ ((pure)) re_node_set_compare (const re_node_set *set1, const re_node_set *set2) { Idx i; if (set1 == NULL || set2 == NULL || set1->nelem != set2->nelem) return false; for (i = set1->nelem ; --i >= 0 ; ) if (set1->elems[i] != set2->elems[i]) return false; return true; } /* Return (idx + 1) if SET contains the element ELEM, return 0 otherwise. */ static Idx __attribute__ ((pure)) re_node_set_contains (const re_node_set *set, Idx elem) { __re_size_t idx, right, mid; if (set->nelem <= 0) return 0; /* Binary search the element. */ idx = 0; right = set->nelem - 1; while (idx < right) { mid = (idx + right) / 2; if (set->elems[mid] < elem) idx = mid + 1; else right = mid; } return set->elems[idx] == elem ? idx + 1 : 0; } static void re_node_set_remove_at (re_node_set *set, Idx idx) { if (idx < 0 || idx >= set->nelem) return; --set->nelem; for (; idx < set->nelem; idx++) set->elems[idx] = set->elems[idx + 1]; } /* Add the token TOKEN to dfa->nodes, and return the index of the token. Or return -1 if an error occurred. */ static Idx re_dfa_add_node (re_dfa_t *dfa, re_token_t token) { if (__glibc_unlikely (dfa->nodes_len >= dfa->nodes_alloc)) { size_t new_nodes_alloc = dfa->nodes_alloc * 2; Idx *new_nexts, *new_indices; re_node_set *new_edests, *new_eclosures; re_token_t *new_nodes; /* Avoid overflows in realloc. */ const size_t max_object_size = MAX (sizeof (re_token_t), MAX (sizeof (re_node_set), sizeof (Idx))); if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < new_nodes_alloc)) return -1; new_nodes = re_realloc (dfa->nodes, re_token_t, new_nodes_alloc); if (__glibc_unlikely (new_nodes == NULL)) return -1; dfa->nodes = new_nodes; dfa->nodes_alloc = new_nodes_alloc; new_nexts = re_realloc (dfa->nexts, Idx, new_nodes_alloc); if (new_nexts != NULL) dfa->nexts = new_nexts; new_indices = re_realloc (dfa->org_indices, Idx, new_nodes_alloc); if (new_indices != NULL) dfa->org_indices = new_indices; new_edests = re_realloc (dfa->edests, re_node_set, new_nodes_alloc); if (new_edests != NULL) dfa->edests = new_edests; new_eclosures = re_realloc (dfa->eclosures, re_node_set, new_nodes_alloc); if (new_eclosures != NULL) dfa->eclosures = new_eclosures; if (__glibc_unlikely (new_nexts == NULL || new_indices == NULL || new_edests == NULL || new_eclosures == NULL)) return -1; } dfa->nodes[dfa->nodes_len] = token; dfa->nodes[dfa->nodes_len].constraint = 0; dfa->nodes[dfa->nodes_len].accept_mb = ((token.type == OP_PERIOD && dfa->mb_cur_max > 1) || token.type == COMPLEX_BRACKET); dfa->nexts[dfa->nodes_len] = -1; re_node_set_init_empty (dfa->edests + dfa->nodes_len); re_node_set_init_empty (dfa->eclosures + dfa->nodes_len); return dfa->nodes_len++; } static re_hashval_t calc_state_hash (const re_node_set *nodes, unsigned int context) { re_hashval_t hash = nodes->nelem + context; Idx i; for (i = 0 ; i < nodes->nelem ; i++) hash += nodes->elems[i]; return hash; } /* Search for the state whose node_set is equivalent to NODES. Return the pointer to the state, if we found it in the DFA. Otherwise create the new one and return it. In case of an error return NULL and set the error code in ERR. Note: - We assume NULL as the invalid state, then it is possible that return value is NULL and ERR is REG_NOERROR. - We never return non-NULL value in case of any errors, it is for optimization. */ static re_dfastate_t * __attribute_warn_unused_result__ re_acquire_state (reg_errcode_t *err, const re_dfa_t *dfa, const re_node_set *nodes) { re_hashval_t hash; re_dfastate_t *new_state; struct re_state_table_entry *spot; Idx i; #if defined GCC_LINT || defined lint /* Suppress bogus uninitialized-variable warnings. */ *err = REG_NOERROR; #endif if (__glibc_unlikely (nodes->nelem == 0)) { *err = REG_NOERROR; return NULL; } hash = calc_state_hash (nodes, 0); spot = dfa->state_table + (hash & dfa->state_hash_mask); for (i = 0 ; i < spot->num ; i++) { re_dfastate_t *state = spot->array[i]; if (hash != state->hash) continue; if (re_node_set_compare (&state->nodes, nodes)) return state; } /* There are no appropriate state in the dfa, create the new one. */ new_state = create_ci_newstate (dfa, nodes, hash); if (__glibc_unlikely (new_state == NULL)) *err = REG_ESPACE; return new_state; } /* Search for the state whose node_set is equivalent to NODES and whose context is equivalent to CONTEXT. Return the pointer to the state, if we found it in the DFA. Otherwise create the new one and return it. In case of an error return NULL and set the error code in ERR. Note: - We assume NULL as the invalid state, then it is possible that return value is NULL and ERR is REG_NOERROR. - We never return non-NULL value in case of any errors, it is for optimization. */ static re_dfastate_t * __attribute_warn_unused_result__ re_acquire_state_context (reg_errcode_t *err, const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context) { re_hashval_t hash; re_dfastate_t *new_state; struct re_state_table_entry *spot; Idx i; #if defined GCC_LINT || defined lint /* Suppress bogus uninitialized-variable warnings. */ *err = REG_NOERROR; #endif if (nodes->nelem == 0) { *err = REG_NOERROR; return NULL; } hash = calc_state_hash (nodes, context); spot = dfa->state_table + (hash & dfa->state_hash_mask); for (i = 0 ; i < spot->num ; i++) { re_dfastate_t *state = spot->array[i]; if (state->hash == hash && state->context == context && re_node_set_compare (state->entrance_nodes, nodes)) return state; } /* There are no appropriate state in 'dfa', create the new one. */ new_state = create_cd_newstate (dfa, nodes, context, hash); if (__glibc_unlikely (new_state == NULL)) *err = REG_ESPACE; return new_state; } /* Finish initialization of the new state NEWSTATE, and using its hash value HASH put in the appropriate bucket of DFA's state table. Return value indicates the error code if failed. */ static reg_errcode_t __attribute_warn_unused_result__ register_state (const re_dfa_t *dfa, re_dfastate_t *newstate, re_hashval_t hash) { struct re_state_table_entry *spot; reg_errcode_t err; Idx i; newstate->hash = hash; err = re_node_set_alloc (&newstate->non_eps_nodes, newstate->nodes.nelem); if (__glibc_unlikely (err != REG_NOERROR)) return REG_ESPACE; for (i = 0; i < newstate->nodes.nelem; i++) { Idx elem = newstate->nodes.elems[i]; if (!IS_EPSILON_NODE (dfa->nodes[elem].type)) if (! re_node_set_insert_last (&newstate->non_eps_nodes, elem)) return REG_ESPACE; } spot = dfa->state_table + (hash & dfa->state_hash_mask); if (__glibc_unlikely (spot->alloc <= spot->num)) { Idx new_alloc = 2 * spot->num + 2; re_dfastate_t **new_array = re_realloc (spot->array, re_dfastate_t *, new_alloc); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; spot->array = new_array; spot->alloc = new_alloc; } spot->array[spot->num++] = newstate; return REG_NOERROR; } static void free_state (re_dfastate_t *state) { re_node_set_free (&state->non_eps_nodes); re_node_set_free (&state->inveclosure); if (state->entrance_nodes != &state->nodes) { re_node_set_free (state->entrance_nodes); re_free (state->entrance_nodes); } re_node_set_free (&state->nodes); re_free (state->word_trtable); re_free (state->trtable); re_free (state); } /* Create the new state which is independent of contexts. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * __attribute_warn_unused_result__ create_ci_newstate (const re_dfa_t *dfa, const re_node_set *nodes, re_hashval_t hash) { Idx i; reg_errcode_t err; re_dfastate_t *newstate; newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); if (__glibc_unlikely (newstate == NULL)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_free (newstate); return NULL; } newstate->entrance_nodes = &newstate->nodes; for (i = 0 ; i < nodes->nelem ; i++) { re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; if (type == CHARACTER && !node->constraint) continue; newstate->accept_mb |= node->accept_mb; /* If the state has the halt node, the state is a halt state. */ if (type == END_OF_RE) newstate->halt = 1; else if (type == OP_BACK_REF) newstate->has_backref = 1; else if (type == ANCHOR || node->constraint) newstate->has_constraint = 1; } err = register_state (dfa, newstate, hash); if (__glibc_unlikely (err != REG_NOERROR)) { free_state (newstate); newstate = NULL; } return newstate; } /* Create the new state which is depend on the context CONTEXT. Return the new state if succeeded, otherwise return NULL. */ static re_dfastate_t * __attribute_warn_unused_result__ create_cd_newstate (const re_dfa_t *dfa, const re_node_set *nodes, unsigned int context, re_hashval_t hash) { Idx i, nctx_nodes = 0; reg_errcode_t err; re_dfastate_t *newstate; newstate = (re_dfastate_t *) calloc (sizeof (re_dfastate_t), 1); if (__glibc_unlikely (newstate == NULL)) return NULL; err = re_node_set_init_copy (&newstate->nodes, nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_free (newstate); return NULL; } newstate->context = context; newstate->entrance_nodes = &newstate->nodes; for (i = 0 ; i < nodes->nelem ; i++) { re_token_t *node = dfa->nodes + nodes->elems[i]; re_token_type_t type = node->type; unsigned int constraint = node->constraint; if (type == CHARACTER && !constraint) continue; newstate->accept_mb |= node->accept_mb; /* If the state has the halt node, the state is a halt state. */ if (type == END_OF_RE) newstate->halt = 1; else if (type == OP_BACK_REF) newstate->has_backref = 1; if (constraint) { if (newstate->entrance_nodes == &newstate->nodes) { re_node_set *entrance_nodes = re_malloc (re_node_set, 1); if (__glibc_unlikely (entrance_nodes == NULL)) { free_state (newstate); return NULL; } newstate->entrance_nodes = entrance_nodes; if (re_node_set_init_copy (newstate->entrance_nodes, nodes) != REG_NOERROR) { free_state (newstate); return NULL; } nctx_nodes = 0; newstate->has_constraint = 1; } if (NOT_SATISFY_PREV_CONSTRAINT (constraint,context)) { re_node_set_remove_at (&newstate->nodes, i - nctx_nodes); ++nctx_nodes; } } } err = register_state (dfa, newstate, hash); if (__glibc_unlikely (err != REG_NOERROR)) { free_state (newstate); newstate = NULL; } return newstate; } ���������������������������������recutils-1.9/lib/fchdir.c���������������������������������������������������������������������������0000644�0000000�0000000�00000013412�14226564446�012273� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fchdir replacement. Copyright (C) 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <dirent.h> #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include "assure.h" #include "filename.h" #include "filenamecat.h" #ifndef REPLACE_OPEN_DIRECTORY # define REPLACE_OPEN_DIRECTORY 0 #endif /* This replacement assumes that a directory is not renamed while opened through a file descriptor. FIXME: On mingw, this would be possible to enforce if we were to also open a HANDLE to each directory currently visited by a file descriptor, since mingw refuses to rename any in-use file system object. */ /* Array of file descriptors opened. If REPLACE_OPEN_DIRECTORY or if it points to a directory, it stores info about this directory. */ typedef struct { char *name; /* Absolute name of the directory, or NULL. */ /* FIXME - add a DIR* member to make dirfd possible on mingw? */ } dir_info_t; static dir_info_t *dirs; static size_t dirs_allocated; /* Try to ensure dirs has enough room for a slot at index fd; free any contents already in that slot. Return false and set errno to ENOMEM on allocation failure. */ static bool ensure_dirs_slot (size_t fd) { if (fd < dirs_allocated) free (dirs[fd].name); else { size_t new_allocated; dir_info_t *new_dirs; new_allocated = 2 * dirs_allocated + 1; if (new_allocated <= fd) new_allocated = fd + 1; new_dirs = (dirs != NULL ? (dir_info_t *) realloc (dirs, new_allocated * sizeof *dirs) : (dir_info_t *) malloc (new_allocated * sizeof *dirs)); if (new_dirs == NULL) return false; memset (new_dirs + dirs_allocated, 0, (new_allocated - dirs_allocated) * sizeof *dirs); dirs = new_dirs; dirs_allocated = new_allocated; } return true; } /* Return an absolute name of DIR in malloc'd storage. Upon failure, return NULL with errno set. */ static char * get_name (char const *dir) { char *cwd; char *result; if (IS_ABSOLUTE_FILE_NAME (dir)) return strdup (dir); /* We often encounter "."; treat it as a special case. */ cwd = getcwd (NULL, 0); if (!cwd || (dir[0] == '.' && dir[1] == '\0')) return cwd; result = mfile_name_concat (cwd, dir, NULL); free (cwd); return result; } /* Hook into the gnulib replacements for open() and close() to keep track of the open file descriptors. */ /* Close FD, cleaning up any fd to name mapping if fd was visiting a directory. */ void _gl_unregister_fd (int fd) { if (fd >= 0 && fd < dirs_allocated) { free (dirs[fd].name); dirs[fd].name = NULL; } } /* Mark FD as visiting FILENAME. FD must be non-negative, and refer to an open file descriptor. If REPLACE_OPEN_DIRECTORY is non-zero, this should only be called if FD is visiting a directory. Close FD and return -1 with errno set if there is insufficient memory to track the directory name; otherwise return FD. */ int _gl_register_fd (int fd, const char *filename) { struct stat statbuf; assure (0 <= fd); if (REPLACE_OPEN_DIRECTORY || (fstat (fd, &statbuf) == 0 && S_ISDIR (statbuf.st_mode))) { if (!ensure_dirs_slot (fd) || (dirs[fd].name = get_name (filename)) == NULL) { int saved_errno = errno; close (fd); errno = saved_errno; return -1; } } return fd; } /* Mark NEWFD as a duplicate of OLDFD; useful from dup, dup2, dup3, and fcntl. Both arguments must be valid and distinct file descriptors. Close NEWFD and return -1 if OLDFD is tracking a directory, but there is insufficient memory to track the same directory in NEWFD; otherwise return NEWFD. */ int _gl_register_dup (int oldfd, int newfd) { assure (0 <= oldfd && 0 <= newfd && oldfd != newfd); if (oldfd < dirs_allocated && dirs[oldfd].name) { /* Duplicated a directory; must ensure newfd is allocated. */ if (!ensure_dirs_slot (newfd) || (dirs[newfd].name = strdup (dirs[oldfd].name)) == NULL) { int saved_errno = errno; close (newfd); errno = saved_errno; newfd = -1; } } else if (newfd < dirs_allocated) { /* Duplicated a non-directory; ensure newfd is cleared. */ free (dirs[newfd].name); dirs[newfd].name = NULL; } return newfd; } /* If FD is currently visiting a directory, then return the name of that directory. Otherwise, return NULL and set errno. */ const char * _gl_directory_name (int fd) { if (0 <= fd && fd < dirs_allocated && dirs[fd].name != NULL) return dirs[fd].name; /* At this point, fd is either invalid, or open but not a directory. If dup2 fails, errno is correctly EBADF. */ if (0 <= fd) { if (dup2 (fd, fd) == fd) errno = ENOTDIR; } else errno = EBADF; return NULL; } /* Implement fchdir() in terms of chdir(). */ int fchdir (int fd) { const char *name = _gl_directory_name (fd); return name ? chdir (name) : -1; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stat-macros.h����������������������������������������������������������������������0000644�0000000�0000000�00000001545�14226564451�013276� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stat-related macros Copyright (C) 1993-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* All the mode bits that can be affected by chmod. */ #define CHMOD_MODE_BITS \ (S_ISUID | S_ISGID | S_ISVTX | S_IRWXU | S_IRWXG | S_IRWXO) �����������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/sys_wait.in.h����������������������������������������������������������������������0000644�0000000�0000000�00000007602�14226564451�013310� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX-like <sys/wait.h>. Copyright (C) 2001-2003, 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_SYS_WAIT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if !(defined _WIN32 && ! defined __CYGWIN__) # @INCLUDE_NEXT@ @NEXT_SYS_WAIT_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_WAIT_H #define _@GUARD_PREFIX@_SYS_WAIT_H /* Get pid_t. */ #include <sys/types.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if !(defined _WIN32 && ! defined __CYGWIN__) /* Unix API. */ /* The following macros apply to an argument x, that is a status of a process, as returned by waitpid(). On nearly all systems, including Linux/x86, WEXITSTATUS are bits 15..8 and WTERMSIG are bits 7..0, while BeOS uses the opposite. Therefore programs have to use the abstract macros. */ /* For valid x, exactly one of WIFSIGNALED(x), WIFEXITED(x), WIFSTOPPED(x) is true. */ # ifndef WIFSIGNALED # define WIFSIGNALED(x) (WTERMSIG (x) != 0 && WTERMSIG(x) != 0x7f) # endif # ifndef WIFEXITED # define WIFEXITED(x) (WTERMSIG (x) == 0) # endif # ifndef WIFSTOPPED # define WIFSTOPPED(x) (WTERMSIG (x) == 0x7f) # endif /* The termination signal. Only to be accessed if WIFSIGNALED(x) is true. */ # ifndef WTERMSIG # define WTERMSIG(x) ((x) & 0x7f) # endif /* The exit status. Only to be accessed if WIFEXITED(x) is true. */ # ifndef WEXITSTATUS # define WEXITSTATUS(x) (((x) >> 8) & 0xff) # endif /* The stopping signal. Only to be accessed if WIFSTOPPED(x) is true. */ # ifndef WSTOPSIG # define WSTOPSIG(x) (((x) >> 8) & 0x7f) # endif /* True if the process dumped core. Not standardized by POSIX. */ # ifndef WCOREDUMP # define WCOREDUMP(x) ((x) & 0x80) # endif #else /* Native Windows API. */ # include <signal.h> /* for SIGTERM */ /* The following macros apply to an argument x, that is a status of a process, as returned by waitpid() or, equivalently, _cwait() or GetExitCodeProcess(). This value is simply an 'int', not composed of bit fields. */ /* When an unhandled fatal signal terminates a process, the exit code is 3. */ # define WIFSIGNALED(x) ((x) == 3) # define WIFEXITED(x) ((x) != 3) # define WIFSTOPPED(x) 0 /* The signal that terminated a process is not known posthum. */ # define WTERMSIG(x) SIGTERM # define WEXITSTATUS(x) (x) /* There are no stopping signals. */ # define WSTOPSIG(x) 0 /* There are no core dumps. */ # define WCOREDUMP(x) 0 #endif /* Declarations of functions. */ #if @GNULIB_WAITPID@ # if defined _WIN32 && ! defined __CYGWIN__ _GL_FUNCDECL_SYS (waitpid, pid_t, (pid_t pid, int *statusp, int options)); # endif /* Need to cast, because on Cygwin, the second parameter is __wait_status_ptr_t statusp. */ _GL_CXXALIAS_SYS_CAST (waitpid, pid_t, (pid_t pid, int *statusp, int options)); _GL_CXXALIASWARN (waitpid); #elif defined GNULIB_POSIXCHECK # undef waitpid # if HAVE_RAW_DECL_WAITPID _GL_WARN_ON_USE (waitpid, "waitpid is unportable - " "use gnulib module sys_wait for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_WAIT_H */ #endif /* _@GUARD_PREFIX@_SYS_WAIT_H */ ������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/rawmemchr.c������������������������������������������������������������������������0000644�0000000�0000000�00000011526�14226564450�013020� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching in a string. Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> /* A function definition is only needed if HAVE_RAWMEMCHR is not defined. */ #if !HAVE_RAWMEMCHR # include <limits.h> # include <stdalign.h> # include <stdint.h> # include "verify.h" /* Find the first occurrence of C in S. */ void * rawmemchr (const void *s, int c_in) { /* Change this typedef to experiment with performance. */ typedef uintptr_t longword; /* If you change the "uintptr_t", you should change UINTPTR_WIDTH to match. This verifies that the type does not have padding bits. */ verify (UINTPTR_WIDTH == UCHAR_WIDTH * sizeof (longword)); const unsigned char *char_ptr; unsigned char c = c_in; /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; (uintptr_t) char_ptr % alignof (longword) != 0; ++char_ptr) if (*char_ptr == c) return (void *) char_ptr; longword const *longword_ptr = s = char_ptr; /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ longword repeated_one = (longword) -1 / UCHAR_MAX; longword repeated_c = repeated_one * c; longword repeated_hibit = repeated_one * (UCHAR_MAX / 2 + 1); /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if any of the bytes in the longword in question are equal to c. We first use an xor with repeated_c. This reduces the task to testing whether any of the bytes in longword1 is zero. (The following comments assume 8-bit bytes, as POSIX requires; the code's use of UCHAR_MAX should work even if bytes have more than 8 bits.) We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one * 0x80). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. The test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. This test can read beyond the end of a string, depending on where C_IN is encountered. However, this is considered safe since the initialization phase ensured that the read will be aligned, therefore, the read will not cross page boundaries and will not cause a fault. */ while (1) { longword longword1 = *longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & repeated_hibit) != 0) break; longword_ptr++; } char_ptr = s = longword_ptr; /* At this point, we know that one of the sizeof (longword) bytes starting at char_ptr is == c. If we knew endianness, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. However, the following simple and portable code does not attempt this potential optimization. */ while (*char_ptr != c) char_ptr++; return (void *) char_ptr; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/localeconv.c�����������������������������������������������������������������������0000644�0000000�0000000�00000006604�14226564450�013161� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query locale dependent information for formatting numbers. Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <locale.h> #if HAVE_STRUCT_LCONV_DECIMAL_POINT /* Override for platforms where 'struct lconv' lacks the int_p_*, int_n_* members. */ struct lconv * localeconv (void) { static struct lconv result; # undef lconv # undef localeconv struct lconv *sys_result = localeconv (); result.decimal_point = sys_result->decimal_point; result.thousands_sep = sys_result->thousands_sep; result.grouping = sys_result->grouping; result.mon_decimal_point = sys_result->mon_decimal_point; result.mon_thousands_sep = sys_result->mon_thousands_sep; result.mon_grouping = sys_result->mon_grouping; result.positive_sign = sys_result->positive_sign; result.negative_sign = sys_result->negative_sign; result.currency_symbol = sys_result->currency_symbol; result.frac_digits = sys_result->frac_digits; result.p_cs_precedes = sys_result->p_cs_precedes; result.p_sign_posn = sys_result->p_sign_posn; result.p_sep_by_space = sys_result->p_sep_by_space; result.n_cs_precedes = sys_result->n_cs_precedes; result.n_sign_posn = sys_result->n_sign_posn; result.n_sep_by_space = sys_result->n_sep_by_space; result.int_curr_symbol = sys_result->int_curr_symbol; result.int_frac_digits = sys_result->int_frac_digits; result.int_p_cs_precedes = sys_result->p_cs_precedes; result.int_p_sign_posn = sys_result->p_sign_posn; result.int_p_sep_by_space = sys_result->p_sep_by_space; result.int_n_cs_precedes = sys_result->n_cs_precedes; result.int_n_sign_posn = sys_result->n_sign_posn; result.int_n_sep_by_space = sys_result->n_sep_by_space; return &result; } #else /* Override for platforms where 'struct lconv' is a dummy. */ # include <limits.h> struct lconv * localeconv (void) { static /*const*/ struct lconv result = { /* decimal_point */ ".", /* thousands_sep */ "", /* grouping */ "", /* mon_decimal_point */ "", /* mon_thousands_sep */ "", /* mon_grouping */ "", /* positive_sign */ "", /* negative_sign */ "", /* currency_symbol */ "", /* frac_digits */ CHAR_MAX, /* p_cs_precedes */ CHAR_MAX, /* p_sign_posn */ CHAR_MAX, /* p_sep_by_space */ CHAR_MAX, /* n_cs_precedes */ CHAR_MAX, /* n_sign_posn */ CHAR_MAX, /* n_sep_by_space */ CHAR_MAX, /* int_curr_symbol */ "", /* int_frac_digits */ CHAR_MAX, /* int_p_cs_precedes */ CHAR_MAX, /* int_p_sign_posn */ CHAR_MAX, /* int_p_sep_by_space */ CHAR_MAX, /* int_n_cs_precedes */ CHAR_MAX, /* int_n_sign_posn */ CHAR_MAX, /* int_n_sep_by_space */ CHAR_MAX }; return &result; } #endif ����������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/copy-file-range.c������������������������������������������������������������������0000644�0000000�0000000�00000004241�14226564447�014016� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stub for copy_file_range Copyright 2019-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include <errno.h> #if defined __linux__ && HAVE_COPY_FILE_RANGE # include <sys/utsname.h> #endif ssize_t copy_file_range (int infd, off_t *pinoff, int outfd, off_t *poutoff, size_t length, unsigned int flags) { #undef copy_file_range #if defined __linux__ && HAVE_COPY_FILE_RANGE /* The implementation of copy_file_range (which first appeared in Linux kernel release 4.5) had many issues before release 5.3 <https://lwn.net/Articles/789527/>, so fail with ENOSYS for Linux kernels 5.2 and earlier. This workaround, and the configure-time check for Linux, can be removed when such kernels (released March 2016 through September 2019) are no longer a consideration. As of January 2021, the furthest-future planned kernel EOL is December 2024 for kernel release 4.19. */ static signed char ok; if (! ok) { struct utsname name; uname (&name); char *p = name.release; ok = ((p[1] != '.' || '5' < p[0] || (p[0] == '5' && (p[3] != '.' || '2' < p[2]))) ? 1 : -1); } if (0 < ok) return copy_file_range (infd, pinoff, outfd, poutoff, length, flags); #endif /* There is little need to emulate copy_file_range with read+write, since programs that use copy_file_range must fall back on read+write anyway. */ errno = ENOSYS; return -1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/xalloc.h���������������������������������������������������������������������������0000644�0000000�0000000�00000015315�14226564451�012323� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xalloc.h -- malloc with out-of-memory checking Copyright (C) 1990-2000, 2003-2004, 2006-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef XALLOC_H_ #define XALLOC_H_ #include <stddef.h> #include <stdlib.h> #include <stdint.h> #if GNULIB_XALLOC # include "idx.h" # include "intprops.h" #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef XALLOC_INLINE # define XALLOC_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif #if GNULIB_XALLOC_DIE /* This function is always triggered when memory is exhausted. It must be defined by the application, either explicitly or by using gnulib's xalloc-die module. This is the function to call when one wants the program to die because of a memory allocation failure. */ /*extern*/ _Noreturn void xalloc_die (void); #endif /* GNULIB_XALLOC_DIE */ #if GNULIB_XALLOC void *xmalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *ximalloc (idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xinmalloc (idx_t n, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xzalloc (size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xizalloc (idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xcalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xicalloc (idx_t n, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xrealloc (void *p, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)); void *xirealloc (void *p, idx_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xreallocarray (void *p, size_t n, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); void *xireallocarray (void *p, idx_t n, idx_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *x2realloc (void *p, size_t *ps) /* superseded by xpalloc */ _GL_ATTRIBUTE_RETURNS_NONNULL; void *x2nrealloc (void *p, size_t *pn, size_t s) /* superseded by xpalloc */ _GL_ATTRIBUTE_RETURNS_NONNULL; void *xpalloc (void *pa, idx_t *pn, idx_t n_incr_min, ptrdiff_t n_max, idx_t s) _GL_ATTRIBUTE_RETURNS_NONNULL; void *xmemdup (void const *p, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; void *ximemdup (void const *p, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((2)) _GL_ATTRIBUTE_RETURNS_NONNULL; char *ximemdup0 (void const *p, idx_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; char *xstrdup (char const *str) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* In the following macros, T must be an elementary or structure/union or typedef'ed type, or a pointer to such a type. To apply one of the following macros to a function pointer or array type, you need to typedef it first and use the typedef name. */ /* Allocate an object of type T dynamically, with error checking. */ /* extern t *XMALLOC (typename t); */ # define XMALLOC(t) ((t *) xmalloc (sizeof (t))) /* Allocate memory for N elements of type T, with error checking. */ /* extern t *XNMALLOC (size_t n, typename t); */ # define XNMALLOC(n, t) \ ((t *) (sizeof (t) == 1 ? xmalloc (n) : xnmalloc (n, sizeof (t)))) /* Allocate an object of type T dynamically, with error checking, and zero it. */ /* extern t *XZALLOC (typename t); */ # define XZALLOC(t) ((t *) xzalloc (sizeof (t))) /* Allocate memory for N elements of type T, with error checking, and zero it. */ /* extern t *XCALLOC (size_t n, typename t); */ # define XCALLOC(n, t) \ ((t *) (sizeof (t) == 1 ? xzalloc (n) : xcalloc (n, sizeof (t)))) /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. */ void *xnmalloc (size_t n, size_t s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1, 2)) _GL_ATTRIBUTE_RETURNS_NONNULL; /* FIXME: Deprecate this in favor of xreallocarray? */ /* Change the size of an allocated block of memory P to an array of N objects each of S bytes, with error checking. S must be nonzero. */ XALLOC_INLINE void *xnrealloc (void *p, size_t n, size_t s) _GL_ATTRIBUTE_ALLOC_SIZE ((2, 3)); XALLOC_INLINE void * xnrealloc (void *p, size_t n, size_t s) { return xreallocarray (p, n, s); } /* Return a pointer to a new buffer of N bytes. This is like xmalloc, except it returns char *. */ char *xcharalloc (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_ALLOC_SIZE ((1)) _GL_ATTRIBUTE_RETURNS_NONNULL; #endif /* GNULIB_XALLOC */ #ifdef __cplusplus } #endif #if GNULIB_XALLOC && defined __cplusplus /* C++ does not allow conversions from void * to other pointer types without a cast. Use templates to work around the problem when possible. */ template <typename T> inline T * xrealloc (T *p, size_t s) { return (T *) xrealloc ((void *) p, s); } template <typename T> inline T * xreallocarray (T *p, size_t n, size_t s) { return (T *) xreallocarray ((void *) p, n, s); } /* FIXME: Deprecate this in favor of xreallocarray? */ template <typename T> inline T * xnrealloc (T *p, size_t n, size_t s) { return xreallocarray (p, n, s); } template <typename T> inline T * x2realloc (T *p, size_t *pn) { return (T *) x2realloc ((void *) p, pn); } template <typename T> inline T * x2nrealloc (T *p, size_t *pn, size_t s) { return (T *) x2nrealloc ((void *) p, pn, s); } template <typename T> inline T * xmemdup (T const *p, size_t s) { return (T *) xmemdup ((void const *) p, s); } #endif /* GNULIB_XALLOC && C++ */ _GL_INLINE_HEADER_END #endif /* !XALLOC_H_ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/assure.h���������������������������������������������������������������������������0000644�0000000�0000000�00000003621�14226564446�012344� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Run-time assert-like macros. Copyright (C) 2014-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef _GL_ASSURE_H #define _GL_ASSURE_H #include <assert.h> #include "verify.h" /* Evaluate an assertion E that is guaranteed to be true. If NDEBUG is not defined, abort the program if E is false. If NDEBUG is defined, the compiler can assume E and behavior is undefined if E is false, fails to evaluate, or has side effects. Unlike standard 'assert', this macro evaluates E even when NDEBUG is defined, so as to catch typos, avoid some GCC warnings, and improve performance when E is simple enough. Also see the documentation for 'assume' in verify.h. */ #ifdef NDEBUG # define affirm(E) assume (E) #else # define affirm(E) assert (E) #endif /* Check E's value at runtime, and report an error and abort if not. However, do nothing if NDEBUG is defined. Unlike standard 'assert', this macro compiles E even when NDEBUG is defined, so as to catch typos and avoid some GCC warnings. Unlike 'affirm', it is OK for E to use hard-to-optimize features, since E is not executed if NDEBUG is defined. */ #ifdef NDEBUG # define assure(E) ((void) (0 && (E))) #else # define assure(E) assert (E) #endif #endif ���������������������������������������������������������������������������������������������������������������recutils-1.9/lib/acl-internal.h���������������������������������������������������������������������0000644�0000000�0000000�00000021604�14226564447�013415� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internal implementation of access control lists. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include "acl.h" #include <stdbool.h> #include <stdlib.h> /* All systems define the ACL related API in <sys/acl.h>. */ #if HAVE_SYS_ACL_H # include <sys/acl.h> #endif #if defined HAVE_FACL && ! defined GETACLCNT && defined ACL_CNT # define GETACLCNT ACL_CNT #endif /* On Linux and Cygwin >= 2.5, additional ACL related API is available in <acl/libacl.h>. */ #ifdef HAVE_ACL_LIBACL_H # include <acl/libacl.h> #endif /* On HP-UX >= 11.11, additional ACL API is available in <aclv.h>. */ #if HAVE_ACLV_H # include <sys/types.h> # include <aclv.h> /* HP-UX 11.11 lacks these declarations. */ extern int acl (char *, int, int, struct acl *); extern int aclsort (int, int, struct acl *); #endif #include <errno.h> #include <limits.h> #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif #ifndef HAVE_FCHMOD # define HAVE_FCHMOD false # define fchmod(fd, mode) (-1) #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef ACL_INTERNAL_INLINE # define ACL_INTERNAL_INLINE _GL_INLINE #endif #if USE_ACL # if HAVE_ACL_GET_FILE /* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ # ifndef MIN_ACL_ENTRIES # define MIN_ACL_ENTRIES 4 # endif /* POSIX 1003.1e (draft 17) */ # ifdef HAVE_ACL_GET_FD /* Most platforms have a 1-argument acl_get_fd, only OSF/1 has a 2-argument macro(!). */ # if HAVE_ACL_FREE_TEXT /* OSF/1 */ ACL_INTERNAL_INLINE acl_t rpl_acl_get_fd (int fd) { return acl_get_fd (fd, ACL_TYPE_ACCESS); } # undef acl_get_fd # define acl_get_fd rpl_acl_get_fd # endif # else # define HAVE_ACL_GET_FD false # undef acl_get_fd # define acl_get_fd(fd) (NULL) # endif /* POSIX 1003.1e (draft 17) */ # ifdef HAVE_ACL_SET_FD /* Most platforms have a 2-argument acl_set_fd, only OSF/1 has a 3-argument macro(!). */ # if HAVE_ACL_FREE_TEXT /* OSF/1 */ ACL_INTERNAL_INLINE int rpl_acl_set_fd (int fd, acl_t acl) { return acl_set_fd (fd, ACL_TYPE_ACCESS, acl); } # undef acl_set_fd # define acl_set_fd rpl_acl_set_fd # endif # else # define HAVE_ACL_SET_FD false # undef acl_set_fd # define acl_set_fd(fd, acl) (-1) # endif /* POSIX 1003.1e (draft 13) */ # if ! HAVE_ACL_FREE_TEXT # define acl_free_text(buf) acl_free (buf) # endif /* Linux-specific */ /* Cygwin >= 2.5 implements this function, but it returns 1 for all directories, thus is unusable. */ # if !defined HAVE_ACL_EXTENDED_FILE || defined __CYGWIN__ # undef HAVE_ACL_EXTENDED_FILE # define HAVE_ACL_EXTENDED_FILE false # define acl_extended_file(name) (-1) # endif # if ! defined HAVE_ACL_FROM_MODE && ! defined HAVE_ACL_FROM_TEXT # define acl_from_mode (NULL) # endif /* Set to 0 if a file's mode is stored independently from the ACL. */ # if (HAVE_ACL_COPY_EXT_NATIVE && HAVE_ACL_CREATE_ENTRY_NP) || defined __sgi /* Mac OS X, IRIX */ # define MODE_INSIDE_ACL 0 # endif /* Return the number of entries in ACL. Return -1 and set errno upon failure to determine it. */ /* Define a replacement for acl_entries if needed. (Only Linux has it.) */ # if !HAVE_ACL_ENTRIES # define acl_entries rpl_acl_entries extern int acl_entries (acl_t); # endif # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ /* ACL is an ACL, from a file, stored as type ACL_TYPE_EXTENDED. Return 1 if the given ACL is non-trivial. Return 0 if it is trivial. */ extern int acl_extended_nontrivial (acl_t); # else /* ACL is an ACL, from a file, stored as type ACL_TYPE_ACCESS. Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. Return -1 and set errno upon failure to determine it. */ extern int acl_access_nontrivial (acl_t); /* ACL is an ACL, from a file, stored as type ACL_TYPE_DEFAULT. Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. Return -1 and set errno upon failure to determine it. */ extern int acl_default_nontrivial (acl_t); # endif # elif HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ /* Set to 0 if a file's mode is stored independently from the ACL. */ # if defined __CYGWIN__ /* Cygwin */ # define MODE_INSIDE_ACL 0 # endif /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int acl_nontrivial (int count, aclent_t *entries) _GL_ATTRIBUTE_PURE; # ifdef ACE_GETACL /* Solaris 10 */ /* Test an ACL retrieved with ACE_GETACL. Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int acl_ace_nontrivial (int count, ace_t *entries) _GL_ATTRIBUTE_PURE; /* Definitions for when the built executable is executed on Solaris 10 (newer version) or Solaris 11. */ /* For a_type. */ # define OLD_ALLOW 0 # define OLD_DENY 1 # define NEW_ACE_ACCESS_ALLOWED_ACE_TYPE 0 /* replaces ALLOW */ # define NEW_ACE_ACCESS_DENIED_ACE_TYPE 1 /* replaces DENY */ /* For a_flags. */ # define OLD_ACE_OWNER 0x0100 # define OLD_ACE_GROUP 0x0200 # define OLD_ACE_OTHER 0x0400 # define NEW_ACE_OWNER 0x1000 # define NEW_ACE_GROUP 0x2000 # define NEW_ACE_IDENTIFIER_GROUP 0x0040 # define NEW_ACE_EVERYONE 0x4000 /* For a_access_mask. */ # define NEW_ACE_READ_DATA 0x001 /* corresponds to 'r' */ # define NEW_ACE_WRITE_DATA 0x002 /* corresponds to 'w' */ # define NEW_ACE_APPEND_DATA 0x004 # define NEW_ACE_READ_NAMED_ATTRS 0x008 # define NEW_ACE_WRITE_NAMED_ATTRS 0x010 # define NEW_ACE_EXECUTE 0x020 # define NEW_ACE_DELETE_CHILD 0x040 # define NEW_ACE_READ_ATTRIBUTES 0x080 # define NEW_ACE_WRITE_ATTRIBUTES 0x100 # define NEW_ACE_DELETE 0x10000 # define NEW_ACE_READ_ACL 0x20000 # define NEW_ACE_WRITE_ACL 0x40000 # define NEW_ACE_WRITE_OWNER 0x80000 # define NEW_ACE_SYNCHRONIZE 0x100000 # endif # elif HAVE_GETACL /* HP-UX */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int acl_nontrivial (int count, struct acl_entry *entries); # if HAVE_ACLV_H /* HP-UX >= 11.11 */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int aclv_nontrivial (int count, struct acl *entries); # endif # elif HAVE_ACLX_GET && 0 /* AIX */ /* TODO */ # elif HAVE_STATACL /* older AIX */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int acl_nontrivial (struct acl *a); # elif HAVE_ACLSORT /* NonStop Kernel */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ extern int acl_nontrivial (int count, struct acl *entries); # endif /* Set to 1 if a file's mode is implicit by the ACL. */ # ifndef MODE_INSIDE_ACL # define MODE_INSIDE_ACL 1 # endif #endif struct permission_context { mode_t mode; #if USE_ACL # if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ acl_t acl; # if !HAVE_ACL_TYPE_EXTENDED acl_t default_acl; # endif bool acls_not_supported; # elif defined GETACL /* Solaris, Cygwin < 2.5 */ int count; aclent_t *entries; # ifdef ACE_GETACL int ace_count; ace_t *ace_entries; # endif # elif HAVE_GETACL /* HP-UX */ struct acl_entry entries[NACLENTRIES]; int count; # if HAVE_ACLV_H struct acl aclv_entries[NACLVENTRIES]; int aclv_count; # endif # elif HAVE_STATACL /* older AIX */ union { struct acl a; char room[4096]; } u; bool have_u; # elif HAVE_ACLSORT /* NonStop Kernel */ struct acl entries[NACLENTRIES]; int count; # endif #endif }; int get_permissions (const char *, int, mode_t, struct permission_context *); int set_permissions (struct permission_context *, const char *, int); void free_permission_context (struct permission_context *); _GL_INLINE_HEADER_END ����������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stripslash.c�����������������������������������������������������������������������0000644�0000000�0000000�00000003063�14226564451�013225� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stripslash.c -- remove redundant trailing slashes from a file name Copyright (C) 1990, 2001, 2003-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "dirname.h" /* Remove trailing slashes from FILE. Return true if a trailing slash was removed. This is useful when using file name completion from a shell that adds a "/" after directory names (such as tcsh and bash), because on symlinks to directories, several system calls have different semantics according to whether a trailing slash is present. */ bool strip_trailing_slashes (char *file) { char *base = last_component (file); char *base_lim; bool had_slash; /* last_component returns "" for file system roots, but we need to turn "///" into "/". */ if (! *base) base = file; base_lim = base + base_len (base); had_slash = (*base_lim != '\0'); *base_lim = '\0'; return had_slash; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/float+.h���������������������������������������������������������������������������0000644�0000000�0000000�00000013007�14226564447�012222� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Supplemental information about the floating-point formats. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _FLOATPLUS_H #define _FLOATPLUS_H #include <float.h> #include <limits.h> /* Number of bits in the mantissa of a floating-point number, including the "hidden bit". */ #if FLT_RADIX == 2 # define FLT_MANT_BIT FLT_MANT_DIG # define DBL_MANT_BIT DBL_MANT_DIG # define LDBL_MANT_BIT LDBL_MANT_DIG #elif FLT_RADIX == 4 # define FLT_MANT_BIT (FLT_MANT_DIG * 2) # define DBL_MANT_BIT (DBL_MANT_DIG * 2) # define LDBL_MANT_BIT (LDBL_MANT_DIG * 2) #elif FLT_RADIX == 16 # define FLT_MANT_BIT (FLT_MANT_DIG * 4) # define DBL_MANT_BIT (DBL_MANT_DIG * 4) # define LDBL_MANT_BIT (LDBL_MANT_DIG * 4) #endif /* Bit mask that can be used to mask the exponent, as an unsigned number. */ #define FLT_EXP_MASK ((FLT_MAX_EXP - FLT_MIN_EXP) | 7) #define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) #define LDBL_EXP_MASK ((LDBL_MAX_EXP - LDBL_MIN_EXP) | 7) /* Number of bits used for the exponent of a floating-point number, including the exponent's sign. */ #define FLT_EXP_BIT \ (FLT_EXP_MASK < 0x100 ? 8 : \ FLT_EXP_MASK < 0x200 ? 9 : \ FLT_EXP_MASK < 0x400 ? 10 : \ FLT_EXP_MASK < 0x800 ? 11 : \ FLT_EXP_MASK < 0x1000 ? 12 : \ FLT_EXP_MASK < 0x2000 ? 13 : \ FLT_EXP_MASK < 0x4000 ? 14 : \ FLT_EXP_MASK < 0x8000 ? 15 : \ FLT_EXP_MASK < 0x10000 ? 16 : \ FLT_EXP_MASK < 0x20000 ? 17 : \ FLT_EXP_MASK < 0x40000 ? 18 : \ FLT_EXP_MASK < 0x80000 ? 19 : \ FLT_EXP_MASK < 0x100000 ? 20 : \ FLT_EXP_MASK < 0x200000 ? 21 : \ FLT_EXP_MASK < 0x400000 ? 22 : \ FLT_EXP_MASK < 0x800000 ? 23 : \ FLT_EXP_MASK < 0x1000000 ? 24 : \ FLT_EXP_MASK < 0x2000000 ? 25 : \ FLT_EXP_MASK < 0x4000000 ? 26 : \ FLT_EXP_MASK < 0x8000000 ? 27 : \ FLT_EXP_MASK < 0x10000000 ? 28 : \ FLT_EXP_MASK < 0x20000000 ? 29 : \ FLT_EXP_MASK < 0x40000000 ? 30 : \ FLT_EXP_MASK <= 0x7fffffff ? 31 : \ 32) #define DBL_EXP_BIT \ (DBL_EXP_MASK < 0x100 ? 8 : \ DBL_EXP_MASK < 0x200 ? 9 : \ DBL_EXP_MASK < 0x400 ? 10 : \ DBL_EXP_MASK < 0x800 ? 11 : \ DBL_EXP_MASK < 0x1000 ? 12 : \ DBL_EXP_MASK < 0x2000 ? 13 : \ DBL_EXP_MASK < 0x4000 ? 14 : \ DBL_EXP_MASK < 0x8000 ? 15 : \ DBL_EXP_MASK < 0x10000 ? 16 : \ DBL_EXP_MASK < 0x20000 ? 17 : \ DBL_EXP_MASK < 0x40000 ? 18 : \ DBL_EXP_MASK < 0x80000 ? 19 : \ DBL_EXP_MASK < 0x100000 ? 20 : \ DBL_EXP_MASK < 0x200000 ? 21 : \ DBL_EXP_MASK < 0x400000 ? 22 : \ DBL_EXP_MASK < 0x800000 ? 23 : \ DBL_EXP_MASK < 0x1000000 ? 24 : \ DBL_EXP_MASK < 0x2000000 ? 25 : \ DBL_EXP_MASK < 0x4000000 ? 26 : \ DBL_EXP_MASK < 0x8000000 ? 27 : \ DBL_EXP_MASK < 0x10000000 ? 28 : \ DBL_EXP_MASK < 0x20000000 ? 29 : \ DBL_EXP_MASK < 0x40000000 ? 30 : \ DBL_EXP_MASK <= 0x7fffffff ? 31 : \ 32) #define LDBL_EXP_BIT \ (LDBL_EXP_MASK < 0x100 ? 8 : \ LDBL_EXP_MASK < 0x200 ? 9 : \ LDBL_EXP_MASK < 0x400 ? 10 : \ LDBL_EXP_MASK < 0x800 ? 11 : \ LDBL_EXP_MASK < 0x1000 ? 12 : \ LDBL_EXP_MASK < 0x2000 ? 13 : \ LDBL_EXP_MASK < 0x4000 ? 14 : \ LDBL_EXP_MASK < 0x8000 ? 15 : \ LDBL_EXP_MASK < 0x10000 ? 16 : \ LDBL_EXP_MASK < 0x20000 ? 17 : \ LDBL_EXP_MASK < 0x40000 ? 18 : \ LDBL_EXP_MASK < 0x80000 ? 19 : \ LDBL_EXP_MASK < 0x100000 ? 20 : \ LDBL_EXP_MASK < 0x200000 ? 21 : \ LDBL_EXP_MASK < 0x400000 ? 22 : \ LDBL_EXP_MASK < 0x800000 ? 23 : \ LDBL_EXP_MASK < 0x1000000 ? 24 : \ LDBL_EXP_MASK < 0x2000000 ? 25 : \ LDBL_EXP_MASK < 0x4000000 ? 26 : \ LDBL_EXP_MASK < 0x8000000 ? 27 : \ LDBL_EXP_MASK < 0x10000000 ? 28 : \ LDBL_EXP_MASK < 0x20000000 ? 29 : \ LDBL_EXP_MASK < 0x40000000 ? 30 : \ LDBL_EXP_MASK <= 0x7fffffff ? 31 : \ 32) /* Number of bits used for a floating-point number: the mantissa (not counting the "hidden bit", since it may or may not be explicit), the exponent, and the sign. */ #define FLT_TOTAL_BIT ((FLT_MANT_BIT - 1) + FLT_EXP_BIT + 1) #define DBL_TOTAL_BIT ((DBL_MANT_BIT - 1) + DBL_EXP_BIT + 1) #define LDBL_TOTAL_BIT ((LDBL_MANT_BIT - 1) + LDBL_EXP_BIT + 1) /* Number of bytes used for a floating-point number. This can be smaller than the 'sizeof'. For example, on i386 systems, 'long double' most often have LDBL_MANT_BIT = 64, LDBL_EXP_BIT = 16, hence LDBL_TOTAL_BIT = 80 bits, i.e. 10 bytes of consecutive memory, but sizeof (long double) = 12 or = 16. */ #define SIZEOF_FLT ((FLT_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) #define SIZEOF_DBL ((DBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) #define SIZEOF_LDBL ((LDBL_TOTAL_BIT + CHAR_BIT - 1) / CHAR_BIT) /* Verify that SIZEOF_FLT <= sizeof (float) etc. */ typedef int verify_sizeof_flt[SIZEOF_FLT <= sizeof (float) ? 1 : -1]; typedef int verify_sizeof_dbl[SIZEOF_DBL <= sizeof (double) ? 1 : - 1]; typedef int verify_sizeof_ldbl[SIZEOF_LDBL <= sizeof (long double) ? 1 : - 1]; #endif /* _FLOATPLUS_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/nl_langinfo.c����������������������������������������������������������������������0000644�0000000�0000000�00000036544�14226564450�013330� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* nl_langinfo() replacement: query locale dependent information. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <langinfo.h> #include <locale.h> #include <stdlib.h> #include <string.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include <stdio.h> #endif #if REPLACE_NL_LANGINFO && !NL_LANGINFO_MTSAFE # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif #endif /* nl_langinfo() must be multithread-safe. To achieve this without using thread-local storage: 1. We use a specific static buffer for each possible argument. So that different threads can call nl_langinfo with different arguments, without interfering. 2. We use a simple strcpy or memcpy to fill this static buffer. Filling it through, for example, strcpy + strcat would not be guaranteed to leave the buffer's contents intact if another thread is currently accessing it. If necessary, the contents is first assembled in a stack-allocated buffer. */ #if !REPLACE_NL_LANGINFO || GNULIB_defined_CODESET /* Return the codeset of the current locale, if this is easily deducible. Otherwise, return "". */ static char * ctype_codeset (void) { static char result[2 + 10 + 1]; char buf[2 + 10 + 1]; char locale[SETLOCALE_NULL_MAX]; char *codeset; size_t codesetlen; if (setlocale_null_r (LC_CTYPE, locale, sizeof (locale))) locale[0] = '\0'; codeset = buf; codeset[0] = '\0'; if (locale[0]) { /* If the locale name contains an encoding after the dot, return it. */ char *dot = strchr (locale, '.'); if (dot) { /* Look for the possible @... trailer and remove it, if any. */ char *codeset_start = dot + 1; char const *modifier = strchr (codeset_start, '@'); if (! modifier) codeset = codeset_start; else { codesetlen = modifier - codeset_start; if (codesetlen < sizeof buf) { codeset = memcpy (buf, codeset_start, codesetlen); codeset[codesetlen] = '\0'; } } } } # if defined _WIN32 && ! defined __CYGWIN__ /* If setlocale is successful, it returns the number of the codepage, as a string. Otherwise, fall back on Windows API GetACP, which returns the locale's codepage as a number (although this doesn't change according to what the 'setlocale' call specified). Either way, prepend "CP" to make it a valid codeset name. */ codesetlen = strlen (codeset); if (0 < codesetlen && codesetlen < sizeof buf - 2) memmove (buf + 2, codeset, codesetlen + 1); else sprintf (buf + 2, "%u", GetACP ()); /* For a locale name such as "French_France.65001", in Windows 10, setlocale now returns "French_France.utf8" instead. */ if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) return (char *) "UTF-8"; else { memcpy (buf, "CP", 2); strcpy (result, buf); return result; } # else strcpy (result, codeset); return result; #endif } #endif #if REPLACE_NL_LANGINFO /* Override nl_langinfo with support for added nl_item values. */ # undef nl_langinfo /* Without locking, on Solaris 11.3, test-nl_langinfo-mt fails, with message "thread5 disturbed by threadN!", even when threadN invokes only nl_langinfo (CODESET); nl_langinfo (CRNCYSTR); Similarly on Solaris 10. */ # if !NL_LANGINFO_MTSAFE /* Solaris */ # define ITEMS (MAXSTRMSG + 1) # define MAX_RESULT_LEN 80 static char * nl_langinfo_unlocked (nl_item item) { static char result[ITEMS][MAX_RESULT_LEN]; /* The result of nl_langinfo is in storage that can be overwritten by other calls to nl_langinfo. */ char *tmp = nl_langinfo (item); if (item >= 0 && item < ITEMS && tmp != NULL) { size_t tmp_len = strlen (tmp); if (tmp_len < MAX_RESULT_LEN) strcpy (result[item], tmp); else { /* Produce a truncated result. Oh well... */ result[item][MAX_RESULT_LEN - 1] = '\0'; memcpy (result[item], tmp, MAX_RESULT_LEN - 1); } return result[item]; } else return tmp; } /* Use a lock, so that no two threads can invoke nl_langinfo_unlocked at the same time. */ /* Prohibit renaming this symbol. */ # undef gl_get_nl_langinfo_lock # if defined _WIN32 && !defined __CYGWIN__ extern __declspec(dllimport) CRITICAL_SECTION *gl_get_nl_langinfo_lock (void); static char * nl_langinfo_with_lock (nl_item item) { CRITICAL_SECTION *lock = gl_get_nl_langinfo_lock (); char *ret; EnterCriticalSection (lock); ret = nl_langinfo_unlocked (item); LeaveCriticalSection (lock); return ret; } # elif HAVE_PTHREAD_API extern # if defined _WIN32 || defined __CYGWIN__ __declspec(dllimport) # endif pthread_mutex_t *gl_get_nl_langinfo_lock (void); # if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */ /* Avoid the need to link with '-lpthread'. */ # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock /* Determine whether libpthread is in use. */ # pragma weak pthread_mutexattr_gettype /* See the comments in lock.h. */ # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # else # define pthread_in_use() 1 # endif static char * nl_langinfo_with_lock (nl_item item) { if (pthread_in_use()) { pthread_mutex_t *lock = gl_get_nl_langinfo_lock (); char *ret; if (pthread_mutex_lock (lock)) abort (); ret = nl_langinfo_unlocked (item); if (pthread_mutex_unlock (lock)) abort (); return ret; } else return nl_langinfo_unlocked (item); } # elif HAVE_THREADS_H extern mtx_t *gl_get_nl_langinfo_lock (void); static char * nl_langinfo_with_lock (nl_item item) { mtx_t *lock = gl_get_nl_langinfo_lock (); char *ret; if (mtx_lock (lock) != thrd_success) abort (); ret = nl_langinfo_unlocked (item); if (mtx_unlock (lock) != thrd_success) abort (); return ret; } # endif # else /* On other platforms, no lock is needed. */ # define nl_langinfo_with_lock nl_langinfo # endif char * rpl_nl_langinfo (nl_item item) { switch (item) { # if GNULIB_defined_CODESET case CODESET: return ctype_codeset (); # endif # if GNULIB_defined_T_FMT_AMPM case T_FMT_AMPM: return (char *) "%I:%M:%S %p"; # endif # if GNULIB_defined_ALTMON case ALTMON_1: case ALTMON_2: case ALTMON_3: case ALTMON_4: case ALTMON_5: case ALTMON_6: case ALTMON_7: case ALTMON_8: case ALTMON_9: case ALTMON_10: case ALTMON_11: case ALTMON_12: /* We don't ship the appropriate localizations with gnulib. Therefore, treat ALTMON_i like MON_i. */ item = item - ALTMON_1 + MON_1; break; # endif # if GNULIB_defined_ERA case ERA: /* The format is not standardized. In glibc it is a sequence of strings of the form "direction:offset:start_date:end_date:era_name:era_format" with an empty string at the end. */ return (char *) ""; case ERA_D_FMT: /* The %Ex conversion in strftime behaves like %x if the locale does not have an alternative time format. */ item = D_FMT; break; case ERA_D_T_FMT: /* The %Ec conversion in strftime behaves like %c if the locale does not have an alternative time format. */ item = D_T_FMT; break; case ERA_T_FMT: /* The %EX conversion in strftime behaves like %X if the locale does not have an alternative time format. */ item = T_FMT; break; case ALT_DIGITS: /* The format is not standardized. In glibc it is a sequence of 10 strings, appended in memory. */ return (char *) "\0\0\0\0\0\0\0\0\0\0"; # endif # if GNULIB_defined_YESEXPR || !FUNC_NL_LANGINFO_YESEXPR_WORKS case YESEXPR: return (char *) "^[yY]"; case NOEXPR: return (char *) "^[nN]"; # endif default: break; } return nl_langinfo_with_lock (item); } #else /* Provide nl_langinfo from scratch, either for native MS-Windows, or for old Unix platforms without locales, such as Linux libc5 or BeOS. */ # include <time.h> char * nl_langinfo (nl_item item) { char buf[100]; struct tm tmm = { 0 }; switch (item) { /* nl_langinfo items of the LC_CTYPE category */ case CODESET: { char *codeset = ctype_codeset (); if (*codeset) return codeset; } # ifdef __BEOS__ return (char *) "UTF-8"; # else return (char *) "ISO-8859-1"; # endif /* nl_langinfo items of the LC_NUMERIC category */ case RADIXCHAR: return localeconv () ->decimal_point; case THOUSEP: return localeconv () ->thousands_sep; # ifdef GROUPING case GROUPING: return localeconv () ->grouping; # endif /* nl_langinfo items of the LC_TIME category. TODO: Really use the locale. */ case D_T_FMT: case ERA_D_T_FMT: return (char *) "%a %b %e %H:%M:%S %Y"; case D_FMT: case ERA_D_FMT: return (char *) "%m/%d/%y"; case T_FMT: case ERA_T_FMT: return (char *) "%H:%M:%S"; case T_FMT_AMPM: return (char *) "%I:%M:%S %p"; case AM_STR: { static char result[80]; if (!strftime (buf, sizeof result, "%p", &tmm)) return (char *) "AM"; strcpy (result, buf); return result; } case PM_STR: { static char result[80]; tmm.tm_hour = 12; if (!strftime (buf, sizeof result, "%p", &tmm)) return (char *) "PM"; strcpy (result, buf); return result; } case DAY_1: case DAY_2: case DAY_3: case DAY_4: case DAY_5: case DAY_6: case DAY_7: { static char result[7][50]; static char const days[][sizeof "Wednesday"] = { "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday" }; tmm.tm_wday = item - DAY_1; if (!strftime (buf, sizeof result[0], "%A", &tmm)) return (char *) days[item - DAY_1]; strcpy (result[item - DAY_1], buf); return result[item - DAY_1]; } case ABDAY_1: case ABDAY_2: case ABDAY_3: case ABDAY_4: case ABDAY_5: case ABDAY_6: case ABDAY_7: { static char result[7][30]; static char const abdays[][sizeof "Sun"] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; tmm.tm_wday = item - ABDAY_1; if (!strftime (buf, sizeof result[0], "%a", &tmm)) return (char *) abdays[item - ABDAY_1]; strcpy (result[item - ABDAY_1], buf); return result[item - ABDAY_1]; } { static char const months[][sizeof "September"] = { "January", "February", "March", "April", "May", "June", "July", "September", "October", "November", "December" }; case MON_1: case MON_2: case MON_3: case MON_4: case MON_5: case MON_6: case MON_7: case MON_8: case MON_9: case MON_10: case MON_11: case MON_12: { static char result[12][50]; tmm.tm_mon = item - MON_1; if (!strftime (buf, sizeof result[0], "%B", &tmm)) return (char *) months[item - MON_1]; strcpy (result[item - MON_1], buf); return result[item - MON_1]; } case ALTMON_1: case ALTMON_2: case ALTMON_3: case ALTMON_4: case ALTMON_5: case ALTMON_6: case ALTMON_7: case ALTMON_8: case ALTMON_9: case ALTMON_10: case ALTMON_11: case ALTMON_12: { static char result[12][50]; tmm.tm_mon = item - ALTMON_1; /* The platforms without nl_langinfo() don't support strftime with %OB. We don't even need to try. */ #if 0 if (!strftime (buf, sizeof result[0], "%OB", &tmm)) #endif if (!strftime (buf, sizeof result[0], "%B", &tmm)) return (char *) months[item - ALTMON_1]; strcpy (result[item - ALTMON_1], buf); return result[item - ALTMON_1]; } } case ABMON_1: case ABMON_2: case ABMON_3: case ABMON_4: case ABMON_5: case ABMON_6: case ABMON_7: case ABMON_8: case ABMON_9: case ABMON_10: case ABMON_11: case ABMON_12: { static char result[12][30]; static char const abmonths[][sizeof "Jan"] = { "Jan", "Feb", "Mar", "Apr", "May", "Jun", "Jul", "Sep", "Oct", "Nov", "Dec" }; tmm.tm_mon = item - ABMON_1; if (!strftime (buf, sizeof result[0], "%b", &tmm)) return (char *) abmonths[item - ABMON_1]; strcpy (result[item - ABMON_1], buf); return result[item - ABMON_1]; } case ERA: return (char *) ""; case ALT_DIGITS: return (char *) "\0\0\0\0\0\0\0\0\0\0"; /* nl_langinfo items of the LC_MONETARY category. */ case CRNCYSTR: return localeconv () ->currency_symbol; # ifdef INT_CURR_SYMBOL case INT_CURR_SYMBOL: return localeconv () ->int_curr_symbol; case MON_DECIMAL_POINT: return localeconv () ->mon_decimal_point; case MON_THOUSANDS_SEP: return localeconv () ->mon_thousands_sep; case MON_GROUPING: return localeconv () ->mon_grouping; case POSITIVE_SIGN: return localeconv () ->positive_sign; case NEGATIVE_SIGN: return localeconv () ->negative_sign; case FRAC_DIGITS: return & localeconv () ->frac_digits; case INT_FRAC_DIGITS: return & localeconv () ->int_frac_digits; case P_CS_PRECEDES: return & localeconv () ->p_cs_precedes; case N_CS_PRECEDES: return & localeconv () ->n_cs_precedes; case P_SEP_BY_SPACE: return & localeconv () ->p_sep_by_space; case N_SEP_BY_SPACE: return & localeconv () ->n_sep_by_space; case P_SIGN_POSN: return & localeconv () ->p_sign_posn; case N_SIGN_POSN: return & localeconv () ->n_sign_posn; # endif /* nl_langinfo items of the LC_MESSAGES category TODO: Really use the locale. */ case YESEXPR: return (char *) "^[yY]"; case NOEXPR: return (char *) "^[nN]"; default: return (char *) ""; } } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/printf.c���������������������������������������������������������������������������0000644�0000000�0000000�00000002242�14226564450�012330� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2007, 2010-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <stdarg.h> /* Print formatted output to standard output. Return string length of formatted string. On error, return a negative value. */ int printf (const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfprintf (stdout, format, args); va_end (args); return retval; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/memchr.valgrind��������������������������������������������������������������������0000644�0000000�0000000�00000002163�14226564450�013667� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in memchr(). # Copyright (C) 2009-2022 Free Software Foundation, Inc. # # This file is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation; either version 2.1 of the # License, or (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # POSIX states that when the character is found, memchr must not read extra # bytes in an overestimated length (for example, where memchr is used to # implement strnlen). However, we use a safe word read to provide a speedup. { memchr-value4 Memcheck:Value4 fun:rpl_memchr } { memchr-value8 Memcheck:Value8 fun:rpl_memchr } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/strings.in.h�����������������������������������������������������������������������0000644�0000000�0000000�00000007720�14226564451�013140� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute <strings.h>. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_STRINGS_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Minix 3.1.8 has a bug: <sys/types.h> must be included before <strings.h>. But avoid namespace pollution on glibc systems. */ #if defined __minix && !defined __GLIBC__ # include <sys/types.h> #endif /* The include_next requires a split double-inclusion guard. */ #if @HAVE_STRINGS_H@ # @INCLUDE_NEXT@ @NEXT_STRINGS_H@ #endif #ifndef _@GUARD_PREFIX@_STRINGS_H #define _@GUARD_PREFIX@_STRINGS_H #if ! @HAVE_DECL_STRNCASECMP@ /* Get size_t. */ # include <stddef.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #ifdef __cplusplus extern "C" { #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFS@ # if !@HAVE_FFS@ _GL_FUNCDECL_SYS (ffs, int, (int i)); # endif _GL_CXXALIAS_SYS (ffs, int, (int i)); _GL_CXXALIASWARN (ffs); #elif defined GNULIB_POSIXCHECK # undef ffs # if HAVE_RAW_DECL_FFS _GL_WARN_ON_USE (ffs, "ffs is not portable - use the ffs module"); # endif #endif /* Compare strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function does not work in multibyte locales. */ #if ! @HAVE_STRCASECMP@ extern int strcasecmp (char const *s1, char const *s2) _GL_ARG_NONNULL ((1, 2)); #endif #if defined GNULIB_POSIXCHECK /* strcasecmp() does not work with multibyte strings: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strcasecmp # if HAVE_RAW_DECL_STRCASECMP _GL_WARN_ON_USE (strcasecmp, "strcasecmp cannot work correctly on character " "strings in multibyte locales - " "use mbscasecmp if you care about " "internationalization, or use c_strcasecmp , " "gnulib module c-strcase) if you want a locale " "independent function"); # endif #endif /* Compare no more than N bytes of strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function cannot work correctly in multibyte locales. */ #if ! @HAVE_DECL_STRNCASECMP@ extern int strncasecmp (char const *s1, char const *s2, size_t n) _GL_ARG_NONNULL ((1, 2)); #endif #if defined GNULIB_POSIXCHECK /* strncasecmp() does not work with multibyte strings: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strncasecmp # if HAVE_RAW_DECL_STRNCASECMP _GL_WARN_ON_USE (strncasecmp, "strncasecmp cannot work correctly on character " "strings in multibyte locales - " "use mbsncasecmp or mbspcasecmp if you care about " "internationalization, or use c_strncasecmp , " "gnulib module c-strcase) if you want a locale " "independent function"); # endif #endif #ifdef __cplusplus } #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ ������������������������������������������������recutils-1.9/lib/spawni.c���������������������������������������������������������������������������0000644�0000000�0000000�00000071575�14226564451�012347� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Guts of POSIX spawn interface. Generic POSIX.1 version. Copyright (C) 2000-2006, 2008-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include "spawn_int.h" #include <alloca.h> #include <errno.h> #include <fcntl.h> #ifndef O_LARGEFILE # define O_LARGEFILE 0 #endif #if _LIBC || HAVE_PATHS_H # include <paths.h> #else # define _PATH_BSHELL BOURNE_SHELL #endif #include <signal.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if _LIBC # include <not-cancel.h> #else # define close_not_cancel close # define open_not_cancel open #endif #if _LIBC # include <local-setxid.h> #else # if !HAVE_SETEUID # define seteuid(id) setresuid (-1, id, -1) # endif # if !HAVE_SETEGID # define setegid(id) setresgid (-1, id, -1) # endif # define local_seteuid(id) seteuid (id) # define local_setegid(id) setegid (id) #endif #if _LIBC # define alloca __alloca # define execve __execve # define dup2 __dup2 # define fork __fork # define getgid __getgid # define getuid __getuid # define sched_setparam __sched_setparam # define sched_setscheduler __sched_setscheduler # define setpgid __setpgid # define sigaction __sigaction # define sigismember __sigismember # define sigprocmask __sigprocmask # define strchrnul __strchrnul # define vfork __vfork #endif /* The Unix standard contains a long explanation of the way to signal an error after the fork() was successful. Since no new wait status was wanted there is no way to signal an error using one of the available methods. The committee chose to signal an error by a normal program exit with the exit code 127. */ #define SPAWN_ERROR 127 #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include <stdbool.h> # include <stdio.h> # include "filename.h" # include "concat-filename.h" # include "findprog.h" # include "malloca.h" # include "windows-spawn.h" /* Don't assume that UNICODE is not defined. */ # undef CreateFile # define CreateFile CreateFileA # undef STARTUPINFO # define STARTUPINFO STARTUPINFOA # undef CreateProcess # define CreateProcess CreateProcessA /* Grows inh_handles->count so that it becomes > newfd. Returns 0 upon success. In case of failure, -1 is returned, with errno set. */ static int grow_inheritable_handles (struct inheritable_handles *inh_handles, int newfd) { if (inh_handles->allocated <= newfd) { size_t new_allocated = 2 * inh_handles->allocated + 1; if (new_allocated <= newfd) new_allocated = newfd + 1; HANDLE *new_handles_array = (HANDLE *) realloc (inh_handles->handles, new_allocated * sizeof (HANDLE)); if (new_handles_array == NULL) { errno = ENOMEM; return -1; } unsigned char *new_flags_array = (unsigned char *) realloc (inh_handles->flags, new_allocated * sizeof (unsigned char)); if (new_flags_array == NULL) { free (new_handles_array); errno = ENOMEM; return -1; } inh_handles->allocated = new_allocated; inh_handles->handles = new_handles_array; inh_handles->flags = new_flags_array; } HANDLE *handles = inh_handles->handles; for (; inh_handles->count <= newfd; inh_handles->count++) handles[inh_handles->count] = INVALID_HANDLE_VALUE; return 0; } /* Reduces inh_handles->count to the minimum needed. */ static void shrink_inheritable_handles (struct inheritable_handles *inh_handles) { HANDLE *handles = inh_handles->handles; while (inh_handles->count > 3 && handles[inh_handles->count - 1] == INVALID_HANDLE_VALUE) inh_handles->count--; } /* Closes all handles in inh_handles. */ static void close_inheritable_handles (struct inheritable_handles *inh_handles) { HANDLE *handles = inh_handles->handles; size_t handles_count = inh_handles->count; unsigned int fd; for (fd = 0; fd < handles_count; fd++) { HANDLE handle = handles[fd]; if (handle != INVALID_HANDLE_VALUE) CloseHandle (handle); } } /* Tests whether a memory region, starting at P and N bytes long, contains only zeroes. */ static bool memiszero (const void *p, size_t n) { const char *cp = p; for (; n > 0; cp++, n--) if (*cp != 0) return 0; return 1; } /* Tests whether *S contains no signals. */ static bool sigisempty (const sigset_t *s) { return memiszero (s, sizeof (sigset_t)); } /* Opens a HANDLE to a file. Upon failure, returns INVALID_HANDLE_VALUE with errno set. */ static HANDLE open_handle (const char *name, int flags, mode_t mode) { /* To ease portability. Like in open.c. */ if (strcmp (name, "/dev/null") == 0) name = "NUL"; /* POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13> specifies: "More than two leading <slash> characters shall be treated as a single <slash> character." */ if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2])) { name += 2; while (ISSLASH (name[1])) name++; } size_t len = strlen (name); size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0); /* Remove trailing slashes (except the very first one, at position drive_prefix_len), but remember their presence. */ size_t rlen; bool check_dir = false; rlen = len; while (rlen > drive_prefix_len && ISSLASH (name[rlen-1])) { check_dir = true; if (rlen == drive_prefix_len + 1) break; rlen--; } /* Handle '' and 'C:'. */ if (!check_dir && rlen == drive_prefix_len) { errno = ENOENT; return INVALID_HANDLE_VALUE; } /* Handle '\\'. */ if (rlen == 1 && ISSLASH (name[0]) && len >= 2) { errno = ENOENT; return INVALID_HANDLE_VALUE; } const char *rname; char *malloca_rname; if (rlen == len) { rname = name; malloca_rname = NULL; } else { malloca_rname = malloca (rlen + 1); if (malloca_rname == NULL) { errno = ENOMEM; return INVALID_HANDLE_VALUE; } memcpy (malloca_rname, name, rlen); malloca_rname[rlen] = '\0'; rname = malloca_rname; } /* For the meaning of the flags, see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/open-wopen> */ /* Open a handle to the file. CreateFile <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea> <https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files> */ HANDLE handle = CreateFile (rname, ((flags & (O_WRONLY | O_RDWR)) != 0 ? GENERIC_READ | GENERIC_WRITE : GENERIC_READ), FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, ((flags & O_CREAT) != 0 ? ((flags & O_EXCL) != 0 ? CREATE_NEW : ((flags & O_TRUNC) != 0 ? CREATE_ALWAYS : OPEN_ALWAYS)) : ((flags & O_TRUNC) != 0 ? TRUNCATE_EXISTING : OPEN_EXISTING)), /* FILE_FLAG_BACKUP_SEMANTICS is useful for opening directories, which is out-of-scope here. */ /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only in case as different) makes sense only when applied to *all* filesystem operations. */ /* FILE_FLAG_BACKUP_SEMANTICS | FILE_FLAG_POSIX_SEMANTICS */ FILE_ATTRIBUTE_NORMAL | ((flags & O_TEMPORARY) != 0 ? FILE_FLAG_DELETE_ON_CLOSE : 0) | ((flags & O_SEQUENTIAL ) != 0 ? FILE_FLAG_SEQUENTIAL_SCAN : 0) | ((flags & O_RANDOM) != 0 ? FILE_FLAG_RANDOM_ACCESS : 0), NULL); if (handle == INVALID_HANDLE_VALUE) switch (GetLastError ()) { /* Some of these errors probably cannot happen with the specific flags that we pass to CreateFile. But who knows... */ case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */ case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */ case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */ case ERROR_BAD_NETPATH: /* rname is such as '\\nonexistentserver\share'. */ case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */ case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */ case ERROR_DIRECTORY: errno = ENOENT; break; case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */ case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys'. */ /* XXX map to EACCES or EPERM? */ errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_PROTECT: errno = EROFS; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: errno = ENAMETOOLONG; break; case ERROR_DELETE_PENDING: /* XXX map to EACCES or EPERM? */ errno = EPERM; break; default: errno = EINVAL; break; } if (malloca_rname != NULL) { int saved_errno = errno; freea (malloca_rname); errno = saved_errno; } return handle; } /* Executes an 'open' action. Returns 0 upon success. In case of failure, -1 is returned, with errno set. */ static int do_open (struct inheritable_handles *inh_handles, int newfd, const char *filename, const char *directory, int flags, mode_t mode, HANDLE curr_process) { if (!(newfd >= 0 && newfd < _getmaxstdio ())) { errno = EBADF; return -1; } if (grow_inheritable_handles (inh_handles, newfd) < 0) return -1; if (inh_handles->handles[newfd] != INVALID_HANDLE_VALUE && !CloseHandle (inh_handles->handles[newfd])) { errno = EIO; return -1; } if (filename == NULL) { errno = EINVAL; return -1; } char *filename_to_free = NULL; if (directory != NULL && IS_RELATIVE_FILE_NAME (filename)) { char *real_filename = concatenated_filename (directory, filename, NULL); if (real_filename == NULL) { errno = ENOMEM; return -1; } filename = real_filename; filename_to_free = real_filename; } HANDLE handle = open_handle (filename, flags, mode); if (handle == INVALID_HANDLE_VALUE) { free (filename_to_free); return -1; } free (filename_to_free); /* Duplicate the handle, so that it becomes inheritable. */ if (!DuplicateHandle (curr_process, handle, curr_process, &inh_handles->handles[newfd], 0, TRUE, DUPLICATE_CLOSE_SOURCE | DUPLICATE_SAME_ACCESS)) { errno = EBADF; /* arbitrary */ return -1; } inh_handles->flags[newfd] = ((flags & O_APPEND) != 0 ? 32 : 0); return 0; } /* Executes a 'dup2' action. Returns 0 upon success. In case of failure, -1 is returned, with errno set. */ static int do_dup2 (struct inheritable_handles *inh_handles, int oldfd, int newfd, HANDLE curr_process) { if (!(oldfd >= 0 && oldfd < inh_handles->count && inh_handles->handles[oldfd] != INVALID_HANDLE_VALUE)) { errno = EBADF; return -1; } if (!(newfd >= 0 && newfd < _getmaxstdio ())) { errno = EBADF; return -1; } if (newfd != oldfd) { if (grow_inheritable_handles (inh_handles, newfd) < 0) return -1; if (inh_handles->handles[newfd] != INVALID_HANDLE_VALUE && !CloseHandle (inh_handles->handles[newfd])) { errno = EIO; return -1; } /* Duplicate the handle, so that it a forthcoming do_close action on oldfd has no effect on newfd. */ if (!DuplicateHandle (curr_process, inh_handles->handles[oldfd], curr_process, &inh_handles->handles[newfd], 0, TRUE, DUPLICATE_SAME_ACCESS)) { errno = EBADF; /* arbitrary */ return -1; } inh_handles->flags[newfd] = 0; } return 0; } /* Executes a 'close' action. Returns 0 upon success. In case of failure, -1 is returned, with errno set. */ static int do_close (struct inheritable_handles *inh_handles, int fd) { if (!(fd >= 0 && fd < inh_handles->count && inh_handles->handles[fd] != INVALID_HANDLE_VALUE)) { errno = EBADF; return -1; } if (!CloseHandle (inh_handles->handles[fd])) { errno = EIO; return -1; } inh_handles->handles[fd] = INVALID_HANDLE_VALUE; return 0; } int __spawni (pid_t *pid, const char *prog_filename, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, const char *const prog_argv[], const char *const envp[], int use_path) { /* Validate the arguments. */ if (prog_filename == NULL || (attrp != NULL && ((attrp->_flags & ~POSIX_SPAWN_SETPGROUP) != 0 || attrp->_pgrp != 0 || ! sigisempty (&attrp->_sd) || ! sigisempty (&attrp->_ss) || attrp->_sp.sched_priority != 0 || attrp->_policy != 0))) return EINVAL; /* Process group handling: Native Windows does not have the concept of process group, but it has the concept of a console attached to a process. So, we interpret the three cases as follows: - Flag POSIX_SPAWN_SETPGROUP not set: Means, the child process is in the same process group as the parent process. We interpret this as a request to reuse the same console. - Flag POSIX_SPAWN_SETPGROUP set with attrp->_pgrp == 0: Means the child process starts a process group of its own. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_getpgroup.html> <https://pubs.opengroup.org/onlinepubs/9699919799/functions/setpgrp.html> We interpret this as a request to detach from the current console. - Flag POSIX_SPAWN_SETPGROUP set with attrp->_pgrp != 0: Means the child process joins another, existing process group. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/posix_spawnattr_getpgroup.html> <https://pubs.opengroup.org/onlinepubs/9699919799/functions/setpgid.html> We don't support this case; it produces error EINVAL above. */ /* <https://docs.microsoft.com/en-us/windows/win32/procthread/process-creation-flags> */ DWORD process_creation_flags = (attrp != NULL && (attrp->_flags & POSIX_SPAWN_SETPGROUP) != 0 ? DETACHED_PROCESS : 0); char *argv_mem_to_free; const char **argv = prepare_spawn (prog_argv, &argv_mem_to_free); if (argv == NULL) return errno; /* errno is set here */ argv++; /* Compose the command. */ char *command = compose_command (argv); if (command == NULL) { free (argv_mem_to_free); return ENOMEM; } /* Copy *ENVP into a contiguous block of memory. */ char *envblock; if (envp == NULL) envblock = NULL; else { envblock = compose_envblock (envp); if (envblock == NULL) { free (command); free (argv_mem_to_free); return ENOMEM; } } /* Set up the array of handles to inherit. Duplicate each handle, so that a spawn_do_close action (below) has no effect on the file descriptors of the current process. Alternatively, we could store, for each handle, a bit that tells whether it is shared with the current process. But this is simpler. */ struct inheritable_handles inh_handles; if (init_inheritable_handles (&inh_handles, true) < 0) goto failed_1; /* Directory in which to execute the new process. */ const char *directory = NULL; /* Execute the file_actions, modifying the inh_handles instead of the file descriptors of the current process. */ if (file_actions != NULL) { HANDLE curr_process = GetCurrentProcess (); int cnt; for (cnt = 0; cnt < file_actions->_used; ++cnt) { struct __spawn_action *action = &file_actions->_actions[cnt]; switch (action->tag) { case spawn_do_close: { int fd = action->action.close_action.fd; if (do_close (&inh_handles, fd) < 0) goto failed_2; } break; case spawn_do_open: { int newfd = action->action.open_action.fd; const char *filename = action->action.open_action.path; int flags = action->action.open_action.oflag; mode_t mode = action->action.open_action.mode; if (do_open (&inh_handles, newfd, filename, directory, flags, mode, curr_process) < 0) goto failed_2; } break; case spawn_do_dup2: { int oldfd = action->action.dup2_action.fd; int newfd = action->action.dup2_action.newfd; if (do_dup2 (&inh_handles, oldfd, newfd, curr_process) < 0) goto failed_2; } break; case spawn_do_chdir: { char *newdir = action->action.chdir_action.path; if (directory != NULL && IS_RELATIVE_FILE_NAME (newdir)) { newdir = concatenated_filename (directory, newdir, NULL); if (newdir == NULL) { errno = ENOMEM; goto failed_2; } } directory = newdir; } break; case spawn_do_fchdir: /* Not supported in this implementation. */ errno = EINVAL; goto failed_2; } } } /* Reduce inh_handles.count to the minimum needed. */ shrink_inheritable_handles (&inh_handles); /* CreateProcess <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa> */ /* STARTUPINFO <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa> */ STARTUPINFO sinfo; sinfo.cb = sizeof (STARTUPINFO); sinfo.lpReserved = NULL; sinfo.lpDesktop = NULL; sinfo.lpTitle = NULL; if (compose_handles_block (&inh_handles, &sinfo) < 0) goto failed_2; /* Perform the PATH search now, considering the final DIRECTORY. */ char *resolved_prog_filename_to_free = NULL; { const char *resolved_prog_filename = find_in_given_path (prog_filename, use_path ? getenv ("PATH") : "", directory, false); if (resolved_prog_filename == NULL) goto failed_3; if (resolved_prog_filename != prog_filename) resolved_prog_filename_to_free = (char *) resolved_prog_filename; prog_filename = resolved_prog_filename; } PROCESS_INFORMATION pinfo; if (!CreateProcess (prog_filename, command, NULL, NULL, TRUE, process_creation_flags, envblock, directory, &sinfo, &pinfo)) { DWORD error = GetLastError (); free (resolved_prog_filename_to_free); free (sinfo.lpReserved2); close_inheritable_handles (&inh_handles); free_inheritable_handles (&inh_handles); free (envblock); free (command); free (argv_mem_to_free); return convert_CreateProcess_error (error); } if (pinfo.hThread) CloseHandle (pinfo.hThread); free (resolved_prog_filename_to_free); free (sinfo.lpReserved2); close_inheritable_handles (&inh_handles); free_inheritable_handles (&inh_handles); free (envblock); free (command); free (argv_mem_to_free); if (pid != NULL) *pid = (intptr_t) pinfo.hProcess; return 0; failed_3: { int saved_errno = errno; free (sinfo.lpReserved2); close_inheritable_handles (&inh_handles); free_inheritable_handles (&inh_handles); free (envblock); free (command); free (argv_mem_to_free); return saved_errno; } failed_2: { int saved_errno = errno; close_inheritable_handles (&inh_handles); free_inheritable_handles (&inh_handles); free (envblock); free (command); free (argv_mem_to_free); return saved_errno; } failed_1: free (envblock); free (command); free (argv_mem_to_free); return errno; } #else /* Spawn a new process executing PATH with the attributes describes in *ATTRP. Before running the process perform the actions described in FILE-ACTIONS. */ int __spawni (pid_t *pid, const char *file, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, const char *const argv[], const char *const envp[], int use_path) { pid_t new_pid; char *path, *p, *name; size_t len; size_t pathlen; /* Do this once. */ short int flags = attrp == NULL ? 0 : attrp->_flags; /* Avoid gcc warning "variable 'flags' might be clobbered by 'longjmp' or 'vfork'" */ (void) &flags; /* Generate the new process. */ #if HAVE_VFORK if ((flags & POSIX_SPAWN_USEVFORK) != 0 /* If no major work is done, allow using vfork. Note that we might perform the path searching. But this would be done by a call to execvp(), too, and such a call must be OK according to POSIX. */ || ((flags & (POSIX_SPAWN_SETSIGMASK | POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER | POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_RESETIDS)) == 0 && file_actions == NULL)) new_pid = vfork (); else #endif new_pid = fork (); if (new_pid != 0) { if (new_pid < 0) return errno; /* The call was successful. Store the PID if necessary. */ if (pid != NULL) *pid = new_pid; return 0; } /* Set signal mask. */ if ((flags & POSIX_SPAWN_SETSIGMASK) != 0 && sigprocmask (SIG_SETMASK, &attrp->_ss, NULL) != 0) _exit (SPAWN_ERROR); /* Set signal default action. */ if ((flags & POSIX_SPAWN_SETSIGDEF) != 0) { /* We have to iterate over all signals. This could possibly be done better but it requires system specific solutions since the sigset_t data type can be very different on different architectures. */ int sig; struct sigaction sa; memset (&sa, '\0', sizeof (sa)); sa.sa_handler = SIG_DFL; for (sig = 1; sig <= NSIG; ++sig) if (sigismember (&attrp->_sd, sig) != 0 && sigaction (sig, &sa, NULL) != 0) _exit (SPAWN_ERROR); } #if (_LIBC ? defined _POSIX_PRIORITY_SCHEDULING : HAVE_SCHED_SETPARAM && HAVE_SCHED_SETSCHEDULER) /* Set the scheduling algorithm and parameters. */ if ((flags & (POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER)) == POSIX_SPAWN_SETSCHEDPARAM) { if (sched_setparam (0, &attrp->_sp) == -1) _exit (SPAWN_ERROR); } else if ((flags & POSIX_SPAWN_SETSCHEDULER) != 0) { if (sched_setscheduler (0, attrp->_policy, (flags & POSIX_SPAWN_SETSCHEDPARAM) != 0 ? &attrp->_sp : NULL) == -1) _exit (SPAWN_ERROR); } #endif /* Set the process group ID. */ if ((flags & POSIX_SPAWN_SETPGROUP) != 0 && setpgid (0, attrp->_pgrp) != 0) _exit (SPAWN_ERROR); /* Set the effective user and group IDs. */ if ((flags & POSIX_SPAWN_RESETIDS) != 0 && (local_seteuid (getuid ()) != 0 || local_setegid (getgid ()) != 0)) _exit (SPAWN_ERROR); /* Execute the file actions. */ if (file_actions != NULL) { int cnt; for (cnt = 0; cnt < file_actions->_used; ++cnt) { struct __spawn_action *action = &file_actions->_actions[cnt]; switch (action->tag) { case spawn_do_close: if (close_not_cancel (action->action.close_action.fd) != 0) /* Signal the error. */ _exit (SPAWN_ERROR); break; case spawn_do_open: { int new_fd = open_not_cancel (action->action.open_action.path, action->action.open_action.oflag | O_LARGEFILE, action->action.open_action.mode); if (new_fd == -1) /* The 'open' call failed. */ _exit (SPAWN_ERROR); /* Make sure the desired file descriptor is used. */ if (new_fd != action->action.open_action.fd) { if (dup2 (new_fd, action->action.open_action.fd) != action->action.open_action.fd) /* The 'dup2' call failed. */ _exit (SPAWN_ERROR); if (close_not_cancel (new_fd) != 0) /* The 'close' call failed. */ _exit (SPAWN_ERROR); } } break; case spawn_do_dup2: if (dup2 (action->action.dup2_action.fd, action->action.dup2_action.newfd) != action->action.dup2_action.newfd) /* The 'dup2' call failed. */ _exit (SPAWN_ERROR); break; case spawn_do_chdir: if (chdir (action->action.chdir_action.path) < 0) /* The 'chdir' call failed. */ _exit (SPAWN_ERROR); break; case spawn_do_fchdir: if (fchdir (action->action.fchdir_action.fd) < 0) /* The 'fchdir' call failed. */ _exit (SPAWN_ERROR); break; } } } if (! use_path || strchr (file, '/') != NULL) { /* The FILE parameter is actually a path. */ execve (file, (char * const *) argv, (char * const *) envp); /* Oh, oh. 'execve' returns. This is bad. */ _exit (SPAWN_ERROR); } /* We have to search for FILE on the path. */ path = getenv ("PATH"); if (path == NULL) { #if HAVE_CONFSTR /* There is no 'PATH' in the environment. The default search path is the current directory followed by the path 'confstr' returns for '_CS_PATH'. */ len = confstr (_CS_PATH, (char *) NULL, 0); path = (char *) alloca (1 + len); path[0] = ':'; (void) confstr (_CS_PATH, path + 1, len); #else /* Pretend that the PATH contains only the current directory. */ path = ""; #endif } len = strlen (file) + 1; pathlen = strlen (path); name = alloca (pathlen + len + 1); /* Copy the file name at the top. */ name = (char *) memcpy (name + pathlen + 1, file, len); /* And add the slash. */ *--name = '/'; p = path; do { char *startp; path = p; p = strchrnul (path, ':'); if (p == path) /* Two adjacent colons, or a colon at the beginning or the end of 'PATH' means to search the current directory. */ startp = name + 1; else startp = (char *) memcpy (name - (p - path), path, p - path); /* Try to execute this name. If it works, execv will not return. */ execve (startp, (char * const *) argv, (char * const *) envp); switch (errno) { case EACCES: case ENOENT: case ESTALE: case ENOTDIR: /* Those errors indicate the file is missing or not executable by us, in which case we want to just try the next path directory. */ break; default: /* Some other error means we found an executable file, but something went wrong executing it; return the error to our caller. */ _exit (SPAWN_ERROR); } } while (*p++ != '\0'); /* Return with an error. */ _exit (SPAWN_ERROR); } #endif �����������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/mbtowc-lock.c����������������������������������������������������������������������0000644�0000000�0000000�00000010446�14226564450�013254� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the internal lock used by mbrtowc and mbrtoc32. Copyright (C) 2019-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */ #include <config.h> /* When it is known that the gl_get_mbtowc_lock function is defined by a dependency library, it should not be defined here. */ #if OMIT_MBTOWC_LOCK /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #else /* This file defines the internal lock used by mbrtowc and mbrtoc32. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ # undef gl_get_mbtowc_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ # ifndef DLL_EXPORTED # if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ # define DLL_EXPORTED __attribute__((__visibility__("default"))) # elif defined _WIN32 || defined __CYGWIN__ # define DLL_EXPORTED __declspec(dllexport) # else # define DLL_EXPORTED # endif # endif # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ /* Make sure the function gets exported from DLLs. */ DLL_EXPORTED CRITICAL_SECTION *gl_get_mbtowc_lock (void); static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; static CRITICAL_SECTION lock; /* Returns the internal lock used by mbrtowc and mbrtoc32. */ CRITICAL_SECTION * gl_get_mbtowc_lock (void) { if (!guard.done) { if (InterlockedIncrement (&guard.started) == 0) { /* This thread is the first one to need the lock. Initialize it. */ InitializeCriticalSection (&lock); guard.done = 1; } else { /* Don't let guard.started grow and wrap around. */ InterlockedDecrement (&guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!guard.done) Sleep (0); } } return &lock; } # elif HAVE_PTHREAD_API # include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED pthread_mutex_t *gl_get_mbtowc_lock (void); /* Returns the internal lock used by mbrtowc and mbrtoc32. */ pthread_mutex_t * gl_get_mbtowc_lock (void) { return &mutex; } # elif HAVE_THREADS_H # include <threads.h> # include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; static mtx_t mutex; static void atomic_init (void) { if (mtx_init (&mutex, mtx_plain) != thrd_success) abort (); init_needed = 0; } /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED mtx_t *gl_get_mbtowc_lock (void); /* Returns the internal lock used by mbrtowc and mbrtoc32. */ mtx_t * gl_get_mbtowc_lock (void) { if (init_needed) call_once (&init_once, atomic_init); return &mutex; } # endif # if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER /* Make sure the '__declspec(dllimport)' in mbrtowc.c and mbrtoc32.c does not cause a link failure when no DLLs are involved. */ # if defined _WIN64 || defined _LP64 # define IMP(x) __imp_##x # else # define IMP(x) _imp__##x # endif void * IMP(gl_get_mbtowc_lock) = &gl_get_mbtowc_lock; # endif #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/crc.c������������������������������������������������������������������������������0000644�0000000�0000000�00000011441�14226564447�011604� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* crc.c -- cyclic redundancy checks Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson. */ #include <config.h> #include "crc.h" /* Table of CRCs of all 8-bit messages. Generated by running code from RFC 1952 modified to print out the table. */ static const uint32_t crc32_table[256] = { 0x00000000, 0x77073096, 0xee0e612c, 0x990951ba, 0x076dc419, 0x706af48f, 0xe963a535, 0x9e6495a3, 0x0edb8832, 0x79dcb8a4, 0xe0d5e91e, 0x97d2d988, 0x09b64c2b, 0x7eb17cbd, 0xe7b82d07, 0x90bf1d91, 0x1db71064, 0x6ab020f2, 0xf3b97148, 0x84be41de, 0x1adad47d, 0x6ddde4eb, 0xf4d4b551, 0x83d385c7, 0x136c9856, 0x646ba8c0, 0xfd62f97a, 0x8a65c9ec, 0x14015c4f, 0x63066cd9, 0xfa0f3d63, 0x8d080df5, 0x3b6e20c8, 0x4c69105e, 0xd56041e4, 0xa2677172, 0x3c03e4d1, 0x4b04d447, 0xd20d85fd, 0xa50ab56b, 0x35b5a8fa, 0x42b2986c, 0xdbbbc9d6, 0xacbcf940, 0x32d86ce3, 0x45df5c75, 0xdcd60dcf, 0xabd13d59, 0x26d930ac, 0x51de003a, 0xc8d75180, 0xbfd06116, 0x21b4f4b5, 0x56b3c423, 0xcfba9599, 0xb8bda50f, 0x2802b89e, 0x5f058808, 0xc60cd9b2, 0xb10be924, 0x2f6f7c87, 0x58684c11, 0xc1611dab, 0xb6662d3d, 0x76dc4190, 0x01db7106, 0x98d220bc, 0xefd5102a, 0x71b18589, 0x06b6b51f, 0x9fbfe4a5, 0xe8b8d433, 0x7807c9a2, 0x0f00f934, 0x9609a88e, 0xe10e9818, 0x7f6a0dbb, 0x086d3d2d, 0x91646c97, 0xe6635c01, 0x6b6b51f4, 0x1c6c6162, 0x856530d8, 0xf262004e, 0x6c0695ed, 0x1b01a57b, 0x8208f4c1, 0xf50fc457, 0x65b0d9c6, 0x12b7e950, 0x8bbeb8ea, 0xfcb9887c, 0x62dd1ddf, 0x15da2d49, 0x8cd37cf3, 0xfbd44c65, 0x4db26158, 0x3ab551ce, 0xa3bc0074, 0xd4bb30e2, 0x4adfa541, 0x3dd895d7, 0xa4d1c46d, 0xd3d6f4fb, 0x4369e96a, 0x346ed9fc, 0xad678846, 0xda60b8d0, 0x44042d73, 0x33031de5, 0xaa0a4c5f, 0xdd0d7cc9, 0x5005713c, 0x270241aa, 0xbe0b1010, 0xc90c2086, 0x5768b525, 0x206f85b3, 0xb966d409, 0xce61e49f, 0x5edef90e, 0x29d9c998, 0xb0d09822, 0xc7d7a8b4, 0x59b33d17, 0x2eb40d81, 0xb7bd5c3b, 0xc0ba6cad, 0xedb88320, 0x9abfb3b6, 0x03b6e20c, 0x74b1d29a, 0xead54739, 0x9dd277af, 0x04db2615, 0x73dc1683, 0xe3630b12, 0x94643b84, 0x0d6d6a3e, 0x7a6a5aa8, 0xe40ecf0b, 0x9309ff9d, 0x0a00ae27, 0x7d079eb1, 0xf00f9344, 0x8708a3d2, 0x1e01f268, 0x6906c2fe, 0xf762575d, 0x806567cb, 0x196c3671, 0x6e6b06e7, 0xfed41b76, 0x89d32be0, 0x10da7a5a, 0x67dd4acc, 0xf9b9df6f, 0x8ebeeff9, 0x17b7be43, 0x60b08ed5, 0xd6d6a3e8, 0xa1d1937e, 0x38d8c2c4, 0x4fdff252, 0xd1bb67f1, 0xa6bc5767, 0x3fb506dd, 0x48b2364b, 0xd80d2bda, 0xaf0a1b4c, 0x36034af6, 0x41047a60, 0xdf60efc3, 0xa867df55, 0x316e8eef, 0x4669be79, 0xcb61b38c, 0xbc66831a, 0x256fd2a0, 0x5268e236, 0xcc0c7795, 0xbb0b4703, 0x220216b9, 0x5505262f, 0xc5ba3bbe, 0xb2bd0b28, 0x2bb45a92, 0x5cb36a04, 0xc2d7ffa7, 0xb5d0cf31, 0x2cd99e8b, 0x5bdeae1d, 0x9b64c2b0, 0xec63f226, 0x756aa39c, 0x026d930a, 0x9c0906a9, 0xeb0e363f, 0x72076785, 0x05005713, 0x95bf4a82, 0xe2b87a14, 0x7bb12bae, 0x0cb61b38, 0x92d28e9b, 0xe5d5be0d, 0x7cdcefb7, 0x0bdbdf21, 0x86d3d2d4, 0xf1d4e242, 0x68ddb3f8, 0x1fda836e, 0x81be16cd, 0xf6b9265b, 0x6fb077e1, 0x18b74777, 0x88085ae6, 0xff0f6a70, 0x66063bca, 0x11010b5c, 0x8f659eff, 0xf862ae69, 0x616bffd3, 0x166ccf45, 0xa00ae278, 0xd70dd2ee, 0x4e048354, 0x3903b3c2, 0xa7672661, 0xd06016f7, 0x4969474d, 0x3e6e77db, 0xaed16a4a, 0xd9d65adc, 0x40df0b66, 0x37d83bf0, 0xa9bcae53, 0xdebb9ec5, 0x47b2cf7f, 0x30b5ffe9, 0xbdbdf21c, 0xcabac28a, 0x53b39330, 0x24b4a3a6, 0xbad03605, 0xcdd70693, 0x54de5729, 0x23d967bf, 0xb3667a2e, 0xc4614ab8, 0x5d681b02, 0x2a6f2b94, 0xb40bbe37, 0xc30c8ea1, 0x5a05df1b, 0x2d02ef8d }; /* * The following function was extracted from RFC 1952 by Simon * Josefsson. It was modified to avoid initial and final XOR, to use * size_t for the buffer length, and to use the const keyword. */ uint32_t crc32_update_no_xor (uint32_t crc, const char *buf, size_t len) { size_t n; for (n = 0; n < len; n++) crc = crc32_table[(crc ^ buf[n]) & 0xff] ^ (crc >> 8); return crc; } uint32_t crc32_no_xor (const char *buf, size_t len) { return crc32_update_no_xor (0L, buf, len); } uint32_t crc32_update (uint32_t crc, const char *buf, size_t len) { return crc32_update_no_xor (crc ^ 0xffffffff, buf, len) ^ 0xffffffff; } uint32_t crc32 (const char *buf, size_t len) { return crc32_update (0L, buf, len); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/ftell.c����������������������������������������������������������������������������0000644�0000000�0000000�00000002177�14226564447�012151� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An ftell() function that works around platform bugs. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> long ftell (FILE *fp) { /* Use the replacement ftello function with all its workarounds. */ off_t offset = ftello (fp); if (LONG_MIN <= offset && offset <= LONG_MAX) return /* (long) */ offset; else { errno = EOVERFLOW; return -1; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/hash-pjw.h�������������������������������������������������������������������������0000644�0000000�0000000�00000002154�14226564446�012563� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash-pjw.h -- declaration for a simple hash function Copyright (C) 2001, 2003, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stddef.h> /* Compute a hash code for a NUL-terminated string starting at X, and return the hash code modulo TABLESIZE. The result is platform dependent: it depends on the size of the 'size_t' type and on the signedness of the 'char' type. */ extern size_t hash_pjw (void const *x, size_t tablesize) _GL_ATTRIBUTE_PURE; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/printf-frexp.h���������������������������������������������������������������������0000644�0000000�0000000�00000002102�14226564450�013452� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a double into fraction and mantissa, for hexadecimal printf. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Write a finite, positive number x as x = mantissa * 2^exp where exp >= DBL_MIN_EXP - 1, mantissa < 2.0, if x is not a denormalized number then mantissa >= 1.0. Store exp in *EXPPTR and return mantissa. */ extern double printf_frexp (double x, int *expptr); ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/_Noreturn.h������������������������������������������������������������������������0000644�0000000�0000000�00000004146�14226564447�013021� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for declaring that a function does not return. Copyright (C) 2011-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ && (4 < __GNUC__ + (7 <= __GNUC_MINOR__) \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))))) /* _Noreturn works as-is. */ # elif (2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ \ || 0x5110 <= __SUNPRO_C) # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/close-stream.h���������������������������������������������������������������������0000644�0000000�0000000�00000001457�14226564447�013446� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close a stream, with nicer error checking than fclose's. Copyright (C) 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stdio.h> int close_stream (FILE *stream); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fcntl.in.h�������������������������������������������������������������������������0000644�0000000�0000000�00000031331�14226564447�012555� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like <fcntl.h>, but with non-working flags defined to 0. Copyright (C) 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_fcntl_h /* Special invocation convention. */ /* Needed before <sys/stat.h>. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* On some systems other than glibc, <sys/stat.h> is a prerequisite of <fcntl.h>. On glibc systems, we would like to avoid namespace pollution. But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden <sys/stat.h> from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include <sys/stat.h> #endif #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ /* Native Windows platforms declare open(), creat() in <io.h>. */ #if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_FCNTL_H /* Needed before <sys/stat.h>. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* On some systems other than glibc, <sys/stat.h> is a prerequisite of <fcntl.h>. On glibc systems, we would like to avoid namespace pollution. But on glibc systems, <fcntl.h> includes <sys/stat.h> inside an extern "C" { ... } block, which leads to errors in C++ mode with the overridden <sys/stat.h> from gnulib. These errors are known to be gone with g++ version >= 4.3. */ #if !(defined __GLIBC__ || defined __UCLIBC__) || (defined __cplusplus && defined GNULIB_NAMESPACE && (defined __ICC || !(__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 3)))) # include <sys/stat.h> #endif /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FCNTL_H@ /* Native Windows platforms declare open(), creat() in <io.h>. */ #if (@GNULIB_CREAT@ || @GNULIB_OPEN@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif #ifndef _@GUARD_PREFIX@_FCNTL_H #define _@GUARD_PREFIX@_FCNTL_H #ifndef __GLIBC__ /* Avoid namespace pollution on glibc systems. */ # include <unistd.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_CREAT@ # if @REPLACE_CREAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat rpl_creat # endif _GL_FUNCDECL_RPL (creat, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (creat, int, (const char *filename, mode_t mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat _creat # endif _GL_CXXALIAS_MDA (creat, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (creat); #elif defined GNULIB_POSIXCHECK # undef creat /* Assume creat is always declared. */ _GL_WARN_ON_USE (creat, "creat is not always POSIX compliant - " "use gnulib module creat for portability"); #elif @GNULIB_MDA_CREAT@ /* On native Windows, map 'creat' to '_creat', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::creat always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef creat # define creat _creat # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (creat, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (creat, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (creat); #endif #if @GNULIB_FCNTL@ # if @REPLACE_FCNTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcntl # define fcntl rpl_fcntl # endif _GL_FUNCDECL_RPL (fcntl, int, (int fd, int action, ...)); _GL_CXXALIAS_RPL (fcntl, int, (int fd, int action, ...)); # if !GNULIB_defined_rpl_fcntl # define GNULIB_defined_rpl_fcntl 1 # endif # else # if !@HAVE_FCNTL@ _GL_FUNCDECL_SYS (fcntl, int, (int fd, int action, ...)); # if !GNULIB_defined_fcntl # define GNULIB_defined_fcntl 1 # endif # endif _GL_CXXALIAS_SYS (fcntl, int, (int fd, int action, ...)); # endif _GL_CXXALIASWARN (fcntl); #elif defined GNULIB_POSIXCHECK # undef fcntl # if HAVE_RAW_DECL_FCNTL _GL_WARN_ON_USE (fcntl, "fcntl is not always POSIX compliant - " "use gnulib module fcntl for portability"); # endif #endif #if @GNULIB_OPEN@ # if @REPLACE_OPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open rpl_open # endif _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open _open # endif _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); # else _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); # endif /* On HP-UX 11, in C++ mode, open() is defined as an inline function with a default argument. _GL_CXXALIASWARN does not work in this case. */ # if !defined __hpux _GL_CXXALIASWARN (open); # endif #elif defined GNULIB_POSIXCHECK # undef open /* Assume open is always declared. */ _GL_WARN_ON_USE (open, "open is not always POSIX compliant - " "use gnulib module open for portability"); #elif @GNULIB_MDA_OPEN@ /* On native Windows, map 'open' to '_open', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::open always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef open # define open _open # endif _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); # else _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); # endif # if !defined __hpux _GL_CXXALIASWARN (open); # endif #endif #if @GNULIB_OPENAT@ # if @REPLACE_OPENAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef openat # define openat rpl_openat # endif _GL_FUNCDECL_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # else # if !@HAVE_OPENAT@ _GL_FUNCDECL_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (openat, int, (int fd, char const *file, int flags, /* mode_t mode */ ...)); # endif _GL_CXXALIASWARN (openat); #elif defined GNULIB_POSIXCHECK # undef openat # if HAVE_RAW_DECL_OPENAT _GL_WARN_ON_USE (openat, "openat is not portable - " "use gnulib module openat for portability"); # endif #endif /* Fix up the FD_* macros, only known to be missing on mingw. */ #ifndef FD_CLOEXEC # define FD_CLOEXEC 1 #endif /* Fix up the supported F_* macros. Intentionally leave other F_* macros undefined. Only known to be missing on mingw. */ #ifndef F_DUPFD_CLOEXEC # define F_DUPFD_CLOEXEC 0x40000000 /* Witness variable: 1 if gnulib defined F_DUPFD_CLOEXEC, 0 otherwise. */ # define GNULIB_defined_F_DUPFD_CLOEXEC 1 #else # define GNULIB_defined_F_DUPFD_CLOEXEC 0 #endif #ifndef F_DUPFD # define F_DUPFD 1 #endif #ifndef F_GETFD # define F_GETFD 2 #endif /* Fix up the O_* macros. */ /* AIX 7.1 with XL C 12.1 defines O_CLOEXEC, O_NOFOLLOW, and O_TTY_INIT to values outside 'int' range, so omit these misdefinitions. But avoid namespace pollution on non-AIX systems. */ #ifdef _AIX # include <limits.h> # if defined O_CLOEXEC && ! (INT_MIN <= O_CLOEXEC && O_CLOEXEC <= INT_MAX) # undef O_CLOEXEC # endif # if defined O_NOFOLLOW && ! (INT_MIN <= O_NOFOLLOW && O_NOFOLLOW <= INT_MAX) # undef O_NOFOLLOW # endif # if defined O_TTY_INIT && ! (INT_MIN <= O_TTY_INIT && O_TTY_INIT <= INT_MAX) # undef O_TTY_INIT # endif #endif #if !defined O_DIRECT && defined O_DIRECTIO /* Tru64 spells it 'O_DIRECTIO'. */ # define O_DIRECT O_DIRECTIO #endif #if !defined O_CLOEXEC && defined O_NOINHERIT /* Mingw spells it 'O_NOINHERIT'. */ # define O_CLOEXEC O_NOINHERIT #endif #ifndef O_CLOEXEC # define O_CLOEXEC 0x40000000 /* Try to not collide with system O_* flags. */ # define GNULIB_defined_O_CLOEXEC 1 #else # define GNULIB_defined_O_CLOEXEC 0 #endif #ifndef O_DIRECT # define O_DIRECT 0 #endif #ifndef O_DIRECTORY # define O_DIRECTORY 0 #endif #ifndef O_DSYNC # define O_DSYNC 0 #endif #ifndef O_EXEC # define O_EXEC O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_IGNORE_CTTY # define O_IGNORE_CTTY 0 #endif #ifndef O_NDELAY # define O_NDELAY 0 #endif #ifndef O_NOATIME # define O_NOATIME 0 #endif #ifndef O_NONBLOCK # define O_NONBLOCK O_NDELAY #endif /* If the gnulib module 'nonblocking' is in use, guarantee a working non-zero value of O_NONBLOCK. Otherwise, O_NONBLOCK is defined (above) to O_NDELAY or to 0 as fallback. */ #if @GNULIB_NONBLOCKING@ # if O_NONBLOCK # define GNULIB_defined_O_NONBLOCK 0 # else # define GNULIB_defined_O_NONBLOCK 1 # undef O_NONBLOCK # define O_NONBLOCK 0x40000000 # endif #endif #ifndef O_NOCTTY # define O_NOCTTY 0 #endif #ifndef O_NOFOLLOW # define O_NOFOLLOW 0 #endif #ifndef O_NOLINK # define O_NOLINK 0 #endif #ifndef O_NOLINKS # define O_NOLINKS 0 #endif #ifndef O_NOTRANS # define O_NOTRANS 0 #endif #ifndef O_RSYNC # define O_RSYNC 0 #endif #ifndef O_SEARCH # define O_SEARCH O_RDONLY /* This is often close enough in older systems. */ #endif #ifndef O_SYNC # define O_SYNC 0 #endif #ifndef O_TTY_INIT # define O_TTY_INIT 0 #endif #if ~O_ACCMODE & (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) # undef O_ACCMODE # define O_ACCMODE (O_RDONLY | O_WRONLY | O_RDWR | O_EXEC | O_SEARCH) #endif /* For systems that distinguish between text and binary I/O. O_BINARY is usually declared in fcntl.h */ #if !defined O_BINARY && defined _O_BINARY /* For MSC-compatible compilers. */ # define O_BINARY _O_BINARY # define O_TEXT _O_TEXT #endif #if defined __BEOS__ || defined __HAIKU__ /* BeOS 5 and Haiku have O_BINARY and O_TEXT, but they have no effect. */ # undef O_BINARY # undef O_TEXT #endif #ifndef O_BINARY # define O_BINARY 0 # define O_TEXT 0 #endif /* Fix up the AT_* macros. */ /* Work around a bug in Solaris 9 and 10: AT_FDCWD is positive. Its value exceeds INT_MAX, so its use as an int doesn't conform to the C standard, and GCC and Sun C complain in some cases. If the bug is present, undef AT_FDCWD here, so it can be redefined below. */ #if 0 < AT_FDCWD && AT_FDCWD == 0xffd19553 # undef AT_FDCWD #endif /* Use the same bit pattern as Solaris 9, but with the proper signedness. The bit pattern is important, in case this actually is Solaris with the above workaround. */ #ifndef AT_FDCWD # define AT_FDCWD (-3041965) #endif /* Use the same values as Solaris 9. This shouldn't matter, but there's no real reason to differ. */ #ifndef AT_SYMLINK_NOFOLLOW # define AT_SYMLINK_NOFOLLOW 4096 #endif #ifndef AT_REMOVEDIR # define AT_REMOVEDIR 1 #endif /* Solaris 9 lacks these two, so just pick unique values. */ #ifndef AT_SYMLINK_FOLLOW # define AT_SYMLINK_FOLLOW 2 #endif #ifndef AT_EACCESS # define AT_EACCESS 4 #endif /* Ignore this flag if not supported. */ #ifndef AT_NO_AUTOMOUNT # define AT_NO_AUTOMOUNT 0 #endif #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif /* _@GUARD_PREFIX@_FCNTL_H */ #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/se-selinux.c�����������������������������������������������������������������������0000644�0000000�0000000�00000001546�14226564450�013130� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacements for <selinux/selinux.h> functions. Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define SE_SELINUX_INLINE _GL_EXTERN_INLINE #include <selinux/selinux.h> ����������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/ignore-value.h���������������������������������������������������������������������0000644�0000000�0000000�00000004362�14226564450�013435� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ignore a function return without a compiler warning. -*- coding: utf-8 -*- Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering, Eric Blake and Pádraig Brady. */ /* Use "ignore_value" to avoid a warning when using a function declared with gcc's warn_unused_result attribute, but for which you really do want to ignore the result. Traditionally, people have used a "(void)" cast to indicate that a function's return value is deliberately unused. However, if the function is declared with __attribute__((warn_unused_result)), gcc issues a warning even with the cast. Caution: most of the time, you really should heed gcc's warning, and check the return value. However, in those exceptional cases in which you're sure you know what you're doing, use this function. For the record, here's one of the ignorable warnings: "copy.c:233: warning: ignoring return value of 'fchown', declared with attribute warn_unused_result". */ #ifndef _GL_IGNORE_VALUE_H #define _GL_IGNORE_VALUE_H /* Normally casting an expression to void discards its value, but GCC versions 3.4 and newer have __attribute__ ((__warn_unused_result__)) which may cause unwanted diagnostics in that case. Use __typeof__ and __extension__ to work around the problem, if the workaround is known to be needed. The workaround is not needed with clang. */ #if (3 < __GNUC__ + (4 <= __GNUC_MINOR__)) && !defined __clang__ # define ignore_value(x) \ (__extension__ ({ __typeof__ (x) __x = (x); (void) __x; })) #else # define ignore_value(x) ((void) (x)) #endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/mbrtowc-impl-utf8.h����������������������������������������������������������������0000644�0000000�0000000�00000012255�14226564450�014340� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ /* This file contains the part of the body of the mbrtowc and mbrtoc32 functions that handles the special case of the UTF-8 encoding. */ /* Cf. unistr/u8-mbtouc.c. */ unsigned char c = (unsigned char) p[0]; if (c < 0x80) { if (pwc != NULL) *pwc = c; res = (c == 0 ? 0 : 1); goto success; } if (c >= 0xc2) { if (c < 0xe0) { if (m == 1) goto incomplete; else /* m >= 2 */ { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40) { if (pwc != NULL) *pwc = ((unsigned int) (c & 0x1f) << 6) | (unsigned int) (c2 ^ 0x80); res = 2; goto success; } } } else if (c < 0xf0) { if (m == 1) goto incomplete; else { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40 && (c >= 0xe1 || c2 >= 0xa0) && (c != 0xed || c2 < 0xa0)) { if (m == 2) goto incomplete; else /* m >= 3 */ { unsigned char c3 = (unsigned char) p[2]; if ((c3 ^ 0x80) < 0x40) { unsigned int wc = (((unsigned int) (c & 0x0f) << 12) | ((unsigned int) (c2 ^ 0x80) << 6) | (unsigned int) (c3 ^ 0x80)); if (FITS_IN_CHAR_TYPE (wc)) { if (pwc != NULL) *pwc = wc; res = 3; goto success; } } } } } } else if (c <= 0xf4) { if (m == 1) goto incomplete; else { unsigned char c2 = (unsigned char) p[1]; if ((c2 ^ 0x80) < 0x40 && (c >= 0xf1 || c2 >= 0x90) && (c < 0xf4 || (/* c == 0xf4 && */ c2 < 0x90))) { if (m == 2) goto incomplete; else { unsigned char c3 = (unsigned char) p[2]; if ((c3 ^ 0x80) < 0x40) { if (m == 3) goto incomplete; else /* m >= 4 */ { unsigned char c4 = (unsigned char) p[3]; if ((c4 ^ 0x80) < 0x40) { unsigned int wc = (((unsigned int) (c & 0x07) << 18) | ((unsigned int) (c2 ^ 0x80) << 12) | ((unsigned int) (c3 ^ 0x80) << 6) | (unsigned int) (c4 ^ 0x80)); if (FITS_IN_CHAR_TYPE (wc)) { if (pwc != NULL) *pwc = wc; res = 4; goto success; } } } } } } } } } goto invalid; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/time-internal.h��������������������������������������������������������������������0000644�0000000�0000000�00000003627�14226564451�013614� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Time internal interface Copyright 2015-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* A time zone rule. */ struct tm_zone { /* More abbreviations, should they be needed. Their TZ_IS_SET members are zero. */ struct tm_zone *next; #if HAVE_TZNAME && !HAVE_STRUCT_TM_TM_ZONE /* Copies of recent strings taken from tzname[0] and tzname[1]. The copies are in ABBRS, so that they survive tzset. Null if unknown. */ char *tzname_copy[2]; #endif /* If nonzero, the rule represents the TZ environment variable set to the first "abbreviation" (this may be the empty string). Otherwise, it represents an unset TZ. */ char tz_is_set; /* A sequence of null-terminated strings packed next to each other. The strings are followed by an extra null byte. If TZ_IS_SET, there must be at least one string and the first string (which is actually a TZ environment value) may be empty. Otherwise all strings must be nonempty. Abbreviations are stored here because otherwise the values of tm_zone and/or tzname would be dead after changing TZ and calling tzset. Abbreviations never move once allocated, and are live until tzfree is called. */ char abbrs[FLEXIBLE_ARRAY_MEMBER]; }; ���������������������������������������������������������������������������������������������������������recutils-1.9/lib/fopen.c����������������������������������������������������������������������������0000644�0000000�0000000�00000014544�14226564447�012153� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a stream to a file. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ /* If the user's config.h happens to include <stdio.h>, let it include only the system's <stdio.h> here, so that orig_fopen doesn't recurse to rpl_fopen. */ #define _GL_ALREADY_INCLUDING_STDIO_H #include <config.h> /* Get the original definition of fopen. It might be defined as a macro. */ #include <stdio.h> #undef _GL_ALREADY_INCLUDING_STDIO_H static FILE * orig_fopen (const char *filename, const char *mode) { return fopen (filename, mode); } /* Specification. */ /* Write "stdio.h" here, not <stdio.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <stdio.h> above. */ #include "stdio.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/stat.h> FILE * rpl_fopen (const char *filename, const char *mode) { int open_direction; int open_flags; #if GNULIB_FOPEN_GNU bool open_flags_gnu; # define BUF_SIZE 80 char fdopen_mode_buf[BUF_SIZE + 1]; #endif #if defined _WIN32 && ! defined __CYGWIN__ if (strcmp (filename, "/dev/null") == 0) filename = "NUL"; #endif /* Parse the mode. */ open_direction = 0; open_flags = 0; #if GNULIB_FOPEN_GNU open_flags_gnu = false; #endif { const char *p = mode; #if GNULIB_FOPEN_GNU char *q = fdopen_mode_buf; #endif for (; *p != '\0'; p++) { switch (*p) { case 'r': open_direction = O_RDONLY; #if GNULIB_FOPEN_GNU if (q < fdopen_mode_buf + BUF_SIZE) *q++ = *p; #endif continue; case 'w': open_direction = O_WRONLY; open_flags |= O_CREAT | O_TRUNC; #if GNULIB_FOPEN_GNU if (q < fdopen_mode_buf + BUF_SIZE) *q++ = *p; #endif continue; case 'a': open_direction = O_WRONLY; open_flags |= O_CREAT | O_APPEND; #if GNULIB_FOPEN_GNU if (q < fdopen_mode_buf + BUF_SIZE) *q++ = *p; #endif continue; case 'b': /* While it is non-standard, O_BINARY is guaranteed by gnulib <fcntl.h>. We can also assume that orig_fopen supports the 'b' flag. */ open_flags |= O_BINARY; #if GNULIB_FOPEN_GNU if (q < fdopen_mode_buf + BUF_SIZE) *q++ = *p; #endif continue; case '+': open_direction = O_RDWR; #if GNULIB_FOPEN_GNU if (q < fdopen_mode_buf + BUF_SIZE) *q++ = *p; #endif continue; #if GNULIB_FOPEN_GNU case 'x': open_flags |= O_EXCL; open_flags_gnu = true; continue; case 'e': open_flags |= O_CLOEXEC; open_flags_gnu = true; continue; #endif default: break; } #if GNULIB_FOPEN_GNU /* The rest of the mode string can be a platform-dependent extension. Copy it unmodified. */ { size_t len = strlen (p); if (len > fdopen_mode_buf + BUF_SIZE - q) len = fdopen_mode_buf + BUF_SIZE - q; memcpy (q, p, len); q += len; } #endif break; } #if GNULIB_FOPEN_GNU *q = '\0'; #endif } #if FOPEN_TRAILING_SLASH_BUG /* Fail if the mode requires write access and the filename ends in a slash, as POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file already exists as a directory, then if a mode that requires write access is specified, fopen() must fail because POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fopen.html> says that it fails with errno = EISDIR in this case. If the named file does not exist or does not name a directory, then fopen() must fail since the file does not contain a '.' directory. */ { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { int fd; struct stat statbuf; FILE *fp; if (open_direction != O_RDONLY) { errno = EISDIR; return NULL; } fd = open (filename, open_direction | open_flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if (fd < 0) return NULL; if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { close (fd); errno = ENOTDIR; return NULL; } # if GNULIB_FOPEN_GNU fp = fdopen (fd, fdopen_mode_buf); # else fp = fdopen (fd, mode); # endif if (fp == NULL) { int saved_errno = errno; close (fd); errno = saved_errno; } return fp; } } #endif #if GNULIB_FOPEN_GNU if (open_flags_gnu) { int fd; FILE *fp; fd = open (filename, open_direction | open_flags, S_IRUSR | S_IWUSR | S_IRGRP | S_IWGRP | S_IROTH | S_IWOTH); if (fd < 0) return NULL; fp = fdopen (fd, fdopen_mode_buf); if (fp == NULL) { int saved_errno = errno; close (fd); errno = saved_errno; } return fp; } #endif return orig_fopen (filename, mode); } ������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/se-context.c�����������������������������������������������������������������������0000644�0000000�0000000�00000001546�14226564450�013125� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacements for <selinux/context.h> functions. Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define SE_CONTEXT_INLINE _GL_EXTERN_INLINE #include <selinux/context.h> ����������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/windows-initguard.h����������������������������������������������������������������0000644�0000000�0000000�00000002316�14226564451�014514� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Init guards, somewhat like spinlocks (native Windows implementation). Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_INITGUARD_H #define _WINDOWS_INITGUARD_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> typedef struct { volatile int done; volatile LONG started; } glwthread_initguard_t; #define GLWTHREAD_INITGUARD_INIT { 0, -1 } #endif /* _WINDOWS_INITGUARD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/realloc.c��������������������������������������������������������������������������0000644�0000000�0000000�00000003131�14226564450�012445� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* realloc() function that is glibc compatible. Copyright (C) 1997, 2003-2004, 2006-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #include <config.h> #include <stdlib.h> #include <errno.h> #include "xalloc-oversized.h" /* Call the system's realloc below. This file does not define _GL_USE_STDLIB_ALLOC because it needs Gnulib's malloc if present. */ #undef realloc /* Change the size of an allocated block of memory P to N bytes, with error checking. If P is NULL, use malloc. Otherwise if N is zero, free P and return NULL. */ void * rpl_realloc (void *p, size_t n) { if (p == NULL) return malloc (n); if (n == 0) { free (p); return NULL; } if (xalloc_oversized (n, 1)) { errno = ENOMEM; return NULL; } void *result = realloc (p, n); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/lstat.c����������������������������������������������������������������������������0000644�0000000�0000000�00000007236�14226564450�012165� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around a bug of lstat on some systems Copyright (C) 1997-2006, 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_lstat doesn't recurse to rpl_lstat. */ #define __need_system_sys_stat_h #include <config.h> #if !HAVE_LSTAT /* On systems that lack symlinks, our replacement <sys/stat.h> already defined lstat as stat, so there is nothing further to do other than avoid an empty file. */ typedef int dummy; #else /* HAVE_LSTAT */ /* Get the original definition of lstat. It might be defined as a macro. */ # include <sys/types.h> # include <sys/stat.h> # undef __need_system_sys_stat_h static int orig_lstat (const char *filename, struct stat *buf) { return lstat (filename, buf); } /* Specification. */ # ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" # else # include <sys/stat.h> # endif # include "stat-time.h" # include <string.h> # include <errno.h> /* lstat works differently on Linux and Solaris systems. POSIX (see "pathname resolution" in the glossary) requires that programs like 'ls' take into consideration the fact that FILE has a trailing slash when FILE is a symbolic link. On Linux and Solaris 10 systems, the lstat function already has the desired semantics (in treating 'lstat ("symlink/", sbuf)' just like 'lstat ("symlink/.", sbuf)', but on Solaris 9 and earlier it does not. If FILE has a trailing slash and specifies a symbolic link, then use stat() to get more info on the referent of FILE. If the referent is a non-directory, then set errno to ENOTDIR and return -1. Otherwise, return stat's result. */ int rpl_lstat (const char *file, struct stat *sbuf) { int result = orig_lstat (file, sbuf); /* This replacement file can blindly check against '/' rather than using the ISSLASH macro, because all platforms with '\\' either lack symlinks (mingw) or have working lstat (cygwin) and thus do not compile this file. 0 len should have already been filtered out above, with a failure return of ENOENT. */ if (result == 0) { if (S_ISDIR (sbuf->st_mode) || file[strlen (file) - 1] != '/') result = stat_time_normalize (result, sbuf); else { /* At this point, a trailing slash is permitted only on symlink-to-dir; but it should have found information on the directory, not the symlink. Call 'stat' to get info about the link's referent. Our replacement stat guarantees valid results, even if the symlink is not pointing to a directory. */ if (!S_ISLNK (sbuf->st_mode)) { errno = ENOTDIR; return -1; } result = stat (file, sbuf); } } return result; } #endif /* HAVE_LSTAT */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/utimens.c��������������������������������������������������������������������������0000644�0000000�0000000�00000052540�14226564451�012521� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set file access and modification times. Copyright (C) 2003-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* derived from a function in touch.c */ #include <config.h> #define _GL_UTIMENS_INLINE _GL_EXTERN_INLINE #include "utimens.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <string.h> #include <sys/stat.h> #include <sys/time.h> #include <unistd.h> #include <utime.h> #include "stat-time.h" #include "timespec.h" /* On native Windows, use SetFileTime; but avoid this when compiling GNU Emacs, which arranges for this in some other way and which defines WIN32_LEAN_AND_MEAN itself. */ #if defined _WIN32 && ! defined __CYGWIN__ && ! defined EMACS_CONFIGURATION # define USE_SETFILETIME # define WIN32_LEAN_AND_MEAN # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #endif /* Avoid recursion with rpl_futimens or rpl_utimensat. */ #undef futimens #if !HAVE_NEARLY_WORKING_UTIMENSAT # undef utimensat #endif /* Solaris 9 mistakenly succeeds when given a non-directory with a trailing slash. Force the use of rpl_stat for a fix. */ #ifndef REPLACE_FUNC_STAT_FILE # define REPLACE_FUNC_STAT_FILE 0 #endif #if HAVE_UTIMENSAT || HAVE_FUTIMENS /* Cache variables for whether the utimensat syscall works; used to avoid calling the syscall if we know it will just fail with ENOSYS, and to avoid unnecessary work in massaging timestamps if the syscall will work. Multiple variables are needed, to distinguish between the following scenarios on Linux: utimensat doesn't exist, or is in glibc but kernel 2.6.18 fails with ENOSYS kernel 2.6.22 and earlier rejects AT_SYMLINK_NOFOLLOW kernel 2.6.25 and earlier reject UTIME_NOW/UTIME_OMIT with non-zero tv_sec kernel 2.6.32 used with xfs or ntfs-3g fail to honor UTIME_OMIT utimensat completely works For each cache variable: 0 = unknown, 1 = yes, -1 = no. */ static int utimensat_works_really; static int lutimensat_works_really; #endif /* HAVE_UTIMENSAT || HAVE_FUTIMENS */ /* Validate the requested timestamps. Return 0 if the resulting timespec can be used for utimensat (after possibly modifying it to work around bugs in utimensat). Return a positive value if the timespec needs further adjustment based on stat results: 1 if any adjustment is needed for utimes, and 2 if any adjustment is needed for Linux utimensat. Return -1, with errno set to EINVAL, if timespec is out of range. */ static int validate_timespec (struct timespec timespec[2]) { int result = 0; int utime_omit_count = 0; if ((timespec[0].tv_nsec != UTIME_NOW && timespec[0].tv_nsec != UTIME_OMIT && ! (0 <= timespec[0].tv_nsec && timespec[0].tv_nsec < TIMESPEC_HZ)) || (timespec[1].tv_nsec != UTIME_NOW && timespec[1].tv_nsec != UTIME_OMIT && ! (0 <= timespec[1].tv_nsec && timespec[1].tv_nsec < TIMESPEC_HZ))) { errno = EINVAL; return -1; } /* Work around Linux kernel 2.6.25 bug, where utimensat fails with EINVAL if tv_sec is not 0 when using the flag values of tv_nsec. Flag a Linux kernel 2.6.32 bug, where an mtime of UTIME_OMIT fails to bump ctime. */ if (timespec[0].tv_nsec == UTIME_NOW || timespec[0].tv_nsec == UTIME_OMIT) { timespec[0].tv_sec = 0; result = 1; if (timespec[0].tv_nsec == UTIME_OMIT) utime_omit_count++; } if (timespec[1].tv_nsec == UTIME_NOW || timespec[1].tv_nsec == UTIME_OMIT) { timespec[1].tv_sec = 0; result = 1; if (timespec[1].tv_nsec == UTIME_OMIT) utime_omit_count++; } return result + (utime_omit_count == 1); } /* Normalize any UTIME_NOW or UTIME_OMIT values in (*TS)[0] and (*TS)[1], using STATBUF to obtain the current timestamps of the file. If both times are UTIME_NOW, set *TS to NULL (as this can avoid some permissions issues). If both times are UTIME_OMIT, return true (nothing further beyond the prior collection of STATBUF is necessary); otherwise return false. */ static bool update_timespec (struct stat const *statbuf, struct timespec **ts) { struct timespec *timespec = *ts; if (timespec[0].tv_nsec == UTIME_OMIT && timespec[1].tv_nsec == UTIME_OMIT) return true; if (timespec[0].tv_nsec == UTIME_NOW && timespec[1].tv_nsec == UTIME_NOW) { *ts = NULL; return false; } if (timespec[0].tv_nsec == UTIME_OMIT) timespec[0] = get_stat_atime (statbuf); else if (timespec[0].tv_nsec == UTIME_NOW) gettime (×pec[0]); if (timespec[1].tv_nsec == UTIME_OMIT) timespec[1] = get_stat_mtime (statbuf); else if (timespec[1].tv_nsec == UTIME_NOW) gettime (×pec[1]); return false; } /* Set the access and modification timestamps of FD (a.k.a. FILE) to be TIMESPEC[0] and TIMESPEC[1], respectively. FD must be either negative -- in which case it is ignored -- or a file descriptor that is open on FILE. If FD is nonnegative, then FILE can be NULL, which means use just futimes (or equivalent) instead of utimes (or equivalent), and fail if on an old system without futimes (or equivalent). If TIMESPEC is null, set the timestamps to the current time. Return 0 on success, -1 (setting errno) on failure. */ int fdutimens (int fd, char const *file, struct timespec const timespec[2]) { struct timespec adjusted_timespec[2]; struct timespec *ts = timespec ? adjusted_timespec : NULL; int adjustment_needed = 0; struct stat st; if (ts) { adjusted_timespec[0] = timespec[0]; adjusted_timespec[1] = timespec[1]; adjustment_needed = validate_timespec (ts); } if (adjustment_needed < 0) return -1; /* Require that at least one of FD or FILE are potentially valid, to avoid a Linux bug where futimens (AT_FDCWD, NULL) changes "." rather than failing. */ if (fd < 0 && !file) { errno = EBADF; return -1; } /* Some Linux-based NFS clients are buggy, and mishandle timestamps of files in NFS file systems in some cases. We have no configure-time test for this, but please see <https://bugs.gentoo.org/show_bug.cgi?id=132673> for references to some of the problems with Linux 2.6.16. If this affects you, compile with -DHAVE_BUGGY_NFS_TIME_STAMPS; this is reported to help in some cases, albeit at a cost in performance. But you really should upgrade your kernel to a fixed version, since the problem affects many applications. */ #if HAVE_BUGGY_NFS_TIME_STAMPS if (fd < 0) sync (); else fsync (fd); #endif /* POSIX 2008 added two interfaces to set file timestamps with nanosecond resolution; newer Linux implements both functions via a single syscall. We provide a fallback for ENOSYS (for example, compiling against Linux 2.6.25 kernel headers and glibc 2.7, but running on Linux 2.6.18 kernel). */ #if HAVE_UTIMENSAT || HAVE_FUTIMENS if (0 <= utimensat_works_really) { int result; # if __linux__ || __sun /* As recently as Linux kernel 2.6.32 (Dec 2009), several file systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT, but work if both times are either explicitly specified or UTIME_NOW. Work around it with a preparatory [f]stat prior to calling futimens/utimensat; fortunately, there is not much timing impact due to the extra syscall even on file systems where UTIME_OMIT would have worked. The same bug occurs in Solaris 11.1 (Apr 2013). FIXME: Simplify this for Linux in 2016 and for Solaris in 2024, when file system bugs are no longer common. */ if (adjustment_needed == 2) { if (fd < 0 ? stat (file, &st) : fstat (fd, &st)) return -1; if (ts[0].tv_nsec == UTIME_OMIT) ts[0] = get_stat_atime (&st); else if (ts[1].tv_nsec == UTIME_OMIT) ts[1] = get_stat_mtime (&st); /* Note that st is good, in case utimensat gives ENOSYS. */ adjustment_needed++; } # endif # if HAVE_UTIMENSAT if (fd < 0) { # if defined __APPLE__ && defined __MACH__ size_t len = strlen (file); if (len > 0 && file[len - 1] == '/') { struct stat statbuf; if (stat (file, &statbuf) < 0) return -1; if (!S_ISDIR (statbuf.st_mode)) { errno = ENOTDIR; return -1; } } # endif result = utimensat (AT_FDCWD, file, ts, 0); # ifdef __linux__ /* Work around a kernel bug: https://bugzilla.redhat.com/show_bug.cgi?id=442352 https://bugzilla.redhat.com/show_bug.cgi?id=449910 It appears that utimensat can mistakenly return 280 rather than -1 upon ENOSYS failure. FIXME: remove in 2010 or whenever the offending kernels are no longer in common use. */ if (0 < result) errno = ENOSYS; # endif /* __linux__ */ if (result == 0 || errno != ENOSYS) { utimensat_works_really = 1; return result; } } # endif /* HAVE_UTIMENSAT */ # if HAVE_FUTIMENS if (0 <= fd) { result = futimens (fd, ts); # ifdef __linux__ /* Work around the same bug as above. */ if (0 < result) errno = ENOSYS; # endif /* __linux__ */ if (result == 0 || errno != ENOSYS) { utimensat_works_really = 1; return result; } } # endif /* HAVE_FUTIMENS */ } utimensat_works_really = -1; lutimensat_works_really = -1; #endif /* HAVE_UTIMENSAT || HAVE_FUTIMENS */ #ifdef USE_SETFILETIME /* On native Windows, use SetFileTime(). See <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-setfiletime> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ if (0 <= fd) { HANDLE handle; FILETIME current_time; FILETIME last_access_time; FILETIME last_write_time; handle = (HANDLE) _get_osfhandle (fd); if (handle == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } if (ts == NULL || ts[0].tv_nsec == UTIME_NOW || ts[1].tv_nsec == UTIME_NOW) { /* GetSystemTimeAsFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimeasfiletime>. It would be overkill to use GetSystemTimePreciseAsFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime>. */ GetSystemTimeAsFileTime (¤t_time); } if (ts == NULL || ts[0].tv_nsec == UTIME_NOW) { last_access_time = current_time; } else if (ts[0].tv_nsec == UTIME_OMIT) { last_access_time.dwLowDateTime = 0; last_access_time.dwHighDateTime = 0; } else { ULONGLONG time_since_16010101 = (ULONGLONG) ts[0].tv_sec * 10000000 + ts[0].tv_nsec / 100 + 116444736000000000LL; last_access_time.dwLowDateTime = (DWORD) time_since_16010101; last_access_time.dwHighDateTime = time_since_16010101 >> 32; } if (ts == NULL || ts[1].tv_nsec == UTIME_NOW) { last_write_time = current_time; } else if (ts[1].tv_nsec == UTIME_OMIT) { last_write_time.dwLowDateTime = 0; last_write_time.dwHighDateTime = 0; } else { ULONGLONG time_since_16010101 = (ULONGLONG) ts[1].tv_sec * 10000000 + ts[1].tv_nsec / 100 + 116444736000000000LL; last_write_time.dwLowDateTime = (DWORD) time_since_16010101; last_write_time.dwHighDateTime = time_since_16010101 >> 32; } if (SetFileTime (handle, NULL, &last_access_time, &last_write_time)) return 0; else { DWORD sft_error = GetLastError (); #if 0 fprintf (stderr, "fdutimens SetFileTime error 0x%x\n", (unsigned int) sft_error); #endif switch (sft_error) { case ERROR_ACCESS_DENIED: /* fd was opened without O_RDWR */ errno = EACCES; /* not specified by POSIX */ break; default: errno = EINVAL; break; } return -1; } } #endif /* The platform lacks an interface to set file timestamps with nanosecond resolution, so do the best we can, discarding any fractional part of the timestamp. */ if (adjustment_needed || (REPLACE_FUNC_STAT_FILE && fd < 0)) { if (adjustment_needed != 3 && (fd < 0 ? stat (file, &st) : fstat (fd, &st))) return -1; if (ts && update_timespec (&st, &ts)) return 0; } { #if HAVE_FUTIMESAT || HAVE_WORKING_UTIMES struct timeval timeval[2]; struct timeval *t; if (ts) { timeval[0].tv_sec = ts[0].tv_sec; timeval[0].tv_usec = ts[0].tv_nsec / 1000; timeval[1].tv_sec = ts[1].tv_sec; timeval[1].tv_usec = ts[1].tv_nsec / 1000; t = timeval; } else t = NULL; if (fd < 0) { # if HAVE_FUTIMESAT return futimesat (AT_FDCWD, file, t); # endif } else { /* If futimesat or futimes fails here, don't try to speed things up by returning right away. glibc can incorrectly fail with errno == ENOENT if /proc isn't mounted. Also, Mandrake 10.0 in high security mode doesn't allow ordinary users to read /proc/self, so glibc incorrectly fails with errno == EACCES. If errno == EIO, EPERM, or EROFS, it's probably safe to fail right away, but these cases are rare enough that they're not worth optimizing, and who knows what other messed-up systems are out there? So play it safe and fall back on the code below. */ # if (HAVE_FUTIMESAT && !FUTIMESAT_NULL_BUG) || HAVE_FUTIMES # if HAVE_FUTIMESAT && !FUTIMESAT_NULL_BUG # undef futimes # define futimes(fd, t) futimesat (fd, NULL, t) # endif if (futimes (fd, t) == 0) { # if __linux__ && __GLIBC__ /* Work around a longstanding glibc bug, still present as of 2010-12-27. On older Linux kernels that lack both utimensat and utimes, glibc's futimes rounds instead of truncating when falling back on utime. The same bug occurs in futimesat with a null 2nd arg. */ if (t) { bool abig = 500000 <= t[0].tv_usec; bool mbig = 500000 <= t[1].tv_usec; if ((abig | mbig) && fstat (fd, &st) == 0) { /* If these two subtractions overflow, they'll track the overflows inside the buggy glibc. */ time_t adiff = st.st_atime - t[0].tv_sec; time_t mdiff = st.st_mtime - t[1].tv_sec; struct timeval *tt = NULL; struct timeval truncated_timeval[2]; truncated_timeval[0] = t[0]; truncated_timeval[1] = t[1]; if (abig && adiff == 1 && get_stat_atime_ns (&st) == 0) { tt = truncated_timeval; tt[0].tv_usec = 0; } if (mbig && mdiff == 1 && get_stat_mtime_ns (&st) == 0) { tt = truncated_timeval; tt[1].tv_usec = 0; } if (tt) futimes (fd, tt); } } # endif return 0; } # endif } #endif /* HAVE_FUTIMESAT || HAVE_WORKING_UTIMES */ if (!file) { #if ! ((HAVE_FUTIMESAT && !FUTIMESAT_NULL_BUG) \ || (HAVE_WORKING_UTIMES && HAVE_FUTIMES)) errno = ENOSYS; #endif return -1; } #ifdef USE_SETFILETIME return _gl_utimens_windows (file, ts); #elif HAVE_WORKING_UTIMES return utimes (file, t); #else { struct utimbuf utimbuf; struct utimbuf *ut; if (ts) { utimbuf.actime = ts[0].tv_sec; utimbuf.modtime = ts[1].tv_sec; ut = &utimbuf; } else ut = NULL; return utime (file, ut); } #endif /* !HAVE_WORKING_UTIMES */ } } /* Set the access and modification timestamps of FILE to be TIMESPEC[0] and TIMESPEC[1], respectively. */ int utimens (char const *file, struct timespec const timespec[2]) { return fdutimens (-1, file, timespec); } /* Set the access and modification timestamps of FILE to be TIMESPEC[0] and TIMESPEC[1], respectively, without dereferencing symlinks. Fail with ENOSYS if the platform does not support changing symlink timestamps, but FILE was a symlink. */ int lutimens (char const *file, struct timespec const timespec[2]) { struct timespec adjusted_timespec[2]; struct timespec *ts = timespec ? adjusted_timespec : NULL; int adjustment_needed = 0; struct stat st; if (ts) { adjusted_timespec[0] = timespec[0]; adjusted_timespec[1] = timespec[1]; adjustment_needed = validate_timespec (ts); } if (adjustment_needed < 0) return -1; /* The Linux kernel did not support symlink timestamps until utimensat, in version 2.6.22, so we don't need to mimic fdutimens' worry about buggy NFS clients. But we do have to worry about bogus return values. */ #if HAVE_UTIMENSAT if (0 <= lutimensat_works_really) { int result; # if __linux__ || __sun /* As recently as Linux kernel 2.6.32 (Dec 2009), several file systems (xfs, ntfs-3g) have bugs with a single UTIME_OMIT, but work if both times are either explicitly specified or UTIME_NOW. Work around it with a preparatory lstat prior to calling utimensat; fortunately, there is not much timing impact due to the extra syscall even on file systems where UTIME_OMIT would have worked. The same bug occurs in Solaris 11.1 (Apr 2013). FIXME: Simplify this for Linux in 2016 and for Solaris in 2024, when file system bugs are no longer common. */ if (adjustment_needed == 2) { if (lstat (file, &st)) return -1; if (ts[0].tv_nsec == UTIME_OMIT) ts[0] = get_stat_atime (&st); else if (ts[1].tv_nsec == UTIME_OMIT) ts[1] = get_stat_mtime (&st); /* Note that st is good, in case utimensat gives ENOSYS. */ adjustment_needed++; } # endif result = utimensat (AT_FDCWD, file, ts, AT_SYMLINK_NOFOLLOW); # ifdef __linux__ /* Work around a kernel bug: https://bugzilla.redhat.com/show_bug.cgi?id=442352 https://bugzilla.redhat.com/show_bug.cgi?id=449910 It appears that utimensat can mistakenly return 280 rather than -1 upon ENOSYS failure. FIXME: remove in 2010 or whenever the offending kernels are no longer in common use. */ if (0 < result) errno = ENOSYS; # endif if (result == 0 || errno != ENOSYS) { utimensat_works_really = 1; lutimensat_works_really = 1; return result; } } lutimensat_works_really = -1; #endif /* HAVE_UTIMENSAT */ /* The platform lacks an interface to set file timestamps with nanosecond resolution, so do the best we can, discarding any fractional part of the timestamp. */ if (adjustment_needed || REPLACE_FUNC_STAT_FILE) { if (adjustment_needed != 3 && lstat (file, &st)) return -1; if (ts && update_timespec (&st, &ts)) return 0; } /* On Linux, lutimes is a thin wrapper around utimensat, so there is no point trying lutimes if utimensat failed with ENOSYS. */ #if HAVE_LUTIMES && !HAVE_UTIMENSAT { struct timeval timeval[2]; struct timeval *t; int result; if (ts) { timeval[0].tv_sec = ts[0].tv_sec; timeval[0].tv_usec = ts[0].tv_nsec / 1000; timeval[1].tv_sec = ts[1].tv_sec; timeval[1].tv_usec = ts[1].tv_nsec / 1000; t = timeval; } else t = NULL; result = lutimes (file, t); if (result == 0 || errno != ENOSYS) return result; } #endif /* HAVE_LUTIMES && !HAVE_UTIMENSAT */ /* Out of luck for symlinks, but we still handle regular files. */ if (!(adjustment_needed || REPLACE_FUNC_STAT_FILE) && lstat (file, &st)) return -1; if (!S_ISLNK (st.st_mode)) return fdutimens (-1, file, ts); errno = ENOSYS; return -1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/hash-pjw.c�������������������������������������������������������������������������0000644�0000000�0000000�00000002360�14226564446�012555� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash-pjw.c -- compute a hash value from a NUL-terminated string. Copyright (C) 2001, 2003, 2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "hash-pjw.h" #include <limits.h> #define SIZE_BITS (sizeof (size_t) * CHAR_BIT) /* A hash function for NUL-terminated char* strings using the method described by Bruno Haible. See https://www.haible.de/bruno/hashfunc.html. */ size_t hash_pjw (const void *x, size_t tablesize) { const char *s; size_t h = 0; for (s = x; *s; s++) h = *s + ((h << 9) | (h >> (SIZE_BITS - 9))); return h % tablesize; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/hash.h�����������������������������������������������������������������������������0000644�0000000�0000000�00000026773�14226564446�012002� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash - hashing table processing. Copyright (C) 1998-1999, 2001, 2003, 2009-2022 Free Software Foundation, Inc. Written by Jim Meyering <meyering@ascend.com>, 1998. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* A generic hash table package. */ /* Make sure USE_OBSTACK is defined to 1 if you want the allocator to use obstacks instead of malloc, and recompile 'hash.c' with same setting. */ #ifndef HASH_H_ # define HASH_H_ # include <stdio.h> # include <stdbool.h> # ifdef __cplusplus extern "C" { # endif struct hash_tuning { /* This structure is mainly used for 'hash_initialize', see the block documentation of 'hash_reset_tuning' for more complete comments. */ float shrink_threshold; /* ratio of used buckets to trigger a shrink */ float shrink_factor; /* ratio of new smaller size to original size */ float growth_threshold; /* ratio of used buckets to trigger a growth */ float growth_factor; /* ratio of new bigger size to original size */ bool is_n_buckets; /* if CANDIDATE really means table size */ }; typedef struct hash_tuning Hash_tuning; struct hash_table; typedef struct hash_table Hash_table; /* * Information and lookup. */ /* The following few functions provide information about the overall hash table organization: the number of entries, number of buckets and maximum length of buckets. */ /* Return the number of buckets in the hash table. The table size, the total number of buckets (used plus unused), or the maximum number of slots, are the same quantity. */ extern size_t hash_get_n_buckets (const Hash_table *table) _GL_ATTRIBUTE_PURE; /* Return the number of slots in use (non-empty buckets). */ extern size_t hash_get_n_buckets_used (const Hash_table *table) _GL_ATTRIBUTE_PURE; /* Return the number of active entries. */ extern size_t hash_get_n_entries (const Hash_table *table) _GL_ATTRIBUTE_PURE; /* Return the length of the longest chain (bucket). */ extern size_t hash_get_max_bucket_length (const Hash_table *table) _GL_ATTRIBUTE_PURE; /* Do a mild validation of a hash table, by traversing it and checking two statistics. */ extern bool hash_table_ok (const Hash_table *table) _GL_ATTRIBUTE_PURE; extern void hash_print_statistics (const Hash_table *table, FILE *stream); /* If ENTRY matches an entry already in the hash table, return the entry from the table. Otherwise, return NULL. */ extern void *hash_lookup (const Hash_table *table, const void *entry); /* * Walking. */ /* The functions in this page traverse the hash table and process the contained entries. For the traversal to work properly, the hash table should not be resized nor modified while any particular entry is being processed. In particular, entries should not be added, and an entry may be removed only if there is no shrink threshold and the entry being removed has already been passed to hash_get_next. */ /* Return the first data in the table, or NULL if the table is empty. */ extern void *hash_get_first (const Hash_table *table) _GL_ATTRIBUTE_PURE; /* Return the user data for the entry following ENTRY, where ENTRY has been returned by a previous call to either 'hash_get_first' or 'hash_get_next'. Return NULL if there are no more entries. */ extern void *hash_get_next (const Hash_table *table, const void *entry); /* Fill BUFFER with pointers to active user entries in the hash table, then return the number of pointers copied. Do not copy more than BUFFER_SIZE pointers. */ extern size_t hash_get_entries (const Hash_table *table, void **buffer, size_t buffer_size); typedef bool (*Hash_processor) (void *entry, void *processor_data); /* Call a PROCESSOR function for each entry of a hash table, and return the number of entries for which the processor function returned success. A pointer to some PROCESSOR_DATA which will be made available to each call to the processor function. The PROCESSOR accepts two arguments: the first is the user entry being walked into, the second is the value of PROCESSOR_DATA as received. The walking continue for as long as the PROCESSOR function returns nonzero. When it returns zero, the walking is interrupted. */ extern size_t hash_do_for_each (const Hash_table *table, Hash_processor processor, void *processor_data); /* * Allocation and clean-up. */ /* Return a hash index for a NUL-terminated STRING between 0 and N_BUCKETS-1. This is a convenience routine for constructing other hashing functions. */ extern size_t hash_string (const char *string, size_t n_buckets) _GL_ATTRIBUTE_PURE; extern void hash_reset_tuning (Hash_tuning *tuning); typedef size_t (*Hash_hasher) (const void *entry, size_t table_size); typedef bool (*Hash_comparator) (const void *entry1, const void *entry2); typedef void (*Hash_data_freer) (void *entry); /* Reclaim all storage associated with a hash table. If a data_freer function has been supplied by the user when the hash table was created, this function applies it to the data of each entry before freeing that entry. */ extern void hash_free (Hash_table *table); /* Allocate and return a new hash table, or NULL upon failure. The initial number of buckets is automatically selected so as to _guarantee_ that you may insert at least CANDIDATE different user entries before any growth of the hash table size occurs. So, if have a reasonably tight a-priori upper bound on the number of entries you intend to insert in the hash table, you may save some table memory and insertion time, by specifying it here. If the IS_N_BUCKETS field of the TUNING structure is true, the CANDIDATE argument has its meaning changed to the wanted number of buckets. TUNING points to a structure of user-supplied values, in case some fine tuning is wanted over the default behavior of the hasher. If TUNING is NULL, the default tuning parameters are used instead. If TUNING is provided but the values requested are out of bounds or might cause rounding errors, return NULL. The user-supplied HASHER function, when not NULL, accepts two arguments ENTRY and TABLE_SIZE. It computes, by hashing ENTRY contents, a slot number for that entry which should be in the range 0..TABLE_SIZE-1. This slot number is then returned. The user-supplied COMPARATOR function, when not NULL, accepts two arguments pointing to user data, it then returns true for a pair of entries that compare equal, or false otherwise. This function is internally called on entries which are already known to hash to the same bucket index, but which are distinct pointers. The user-supplied DATA_FREER function, when not NULL, may be later called with the user data as an argument, just before the entry containing the data gets freed. This happens from within 'hash_free' or 'hash_clear'. You should specify this function only if you want these functions to free all of your 'data' data. This is typically the case when your data is simply an auxiliary struct that you have malloc'd to aggregate several values. */ _GL_ATTRIBUTE_NODISCARD extern Hash_table *hash_initialize (size_t candidate, const Hash_tuning *tuning, Hash_hasher hasher, Hash_comparator comparator, Hash_data_freer data_freer) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (hash_free, 1); /* Same as hash_initialize, but invokes xalloc_die on memory exhaustion. */ /* This function is defined by module 'xhash'. */ _GL_ATTRIBUTE_NODISCARD extern Hash_table *hash_xinitialize (size_t candidate, const Hash_tuning *tuning, Hash_hasher hasher, Hash_comparator comparator, Hash_data_freer data_freer) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (hash_free, 1) _GL_ATTRIBUTE_RETURNS_NONNULL; /* Make all buckets empty, placing any chained entries on the free list. Apply the user-specified function data_freer (if any) to the datas of any affected entries. */ extern void hash_clear (Hash_table *table); /* * Insertion and deletion. */ /* For an already existing hash table, change the number of buckets through specifying CANDIDATE. The contents of the hash table are preserved. The new number of buckets is automatically selected so as to _guarantee_ that the table may receive at least CANDIDATE different user entries, including those already in the table, before any other growth of the hash table size occurs. If TUNING->IS_N_BUCKETS is true, then CANDIDATE specifies the exact number of buckets desired. Return true iff the rehash succeeded. */ _GL_ATTRIBUTE_NODISCARD extern bool hash_rehash (Hash_table *table, size_t candidate); /* If ENTRY matches an entry already in the hash table, return the pointer to the entry from the table. Otherwise, insert ENTRY and return ENTRY. Return NULL if the storage required for insertion cannot be allocated. This implementation does not support duplicate entries or insertion of NULL. */ _GL_ATTRIBUTE_NODISCARD extern void *hash_insert (Hash_table *table, const void *entry); /* Same as hash_insert, but invokes xalloc_die on memory exhaustion. */ /* This function is defined by module 'xhash'. */ extern void *hash_xinsert (Hash_table *table, const void *entry); /* Insert ENTRY into hash TABLE if there is not already a matching entry. Return -1 upon memory allocation failure. Return 1 if insertion succeeded. Return 0 if there is already a matching entry in the table, and in that case, if MATCHED_ENT is non-NULL, set *MATCHED_ENT to that entry. This interface is easier to use than hash_insert when you must distinguish between the latter two cases. More importantly, hash_insert is unusable for some types of ENTRY values. When using hash_insert, the only way to distinguish those cases is to compare the return value and ENTRY. That works only when you can have two different ENTRY values that point to data that compares "equal". Thus, when the ENTRY value is a simple scalar, you must use hash_insert_if_absent. ENTRY must not be NULL. */ extern int hash_insert_if_absent (Hash_table *table, const void *entry, const void **matched_ent); /* If ENTRY is already in the table, remove it and return the just-deleted data (the user may want to deallocate its storage). If ENTRY is not in the table, don't modify the table and return NULL. */ extern void *hash_remove (Hash_table *table, const void *entry); /* Same as hash_remove. This interface is deprecated. FIXME: Remove in 2022. */ _GL_ATTRIBUTE_DEPRECATED extern void *hash_delete (Hash_table *table, const void *entry); # ifdef __cplusplus } # endif #endif �����recutils-1.9/lib/error.c����������������������������������������������������������������������������0000644�0000000�0000000�00000024751�14226564447�012176� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Error handler for noninteractive utilities Copyright (C) 1990-1998, 2000-2007, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by David MacKenzie <djm@gnu.ai.mit.edu>. */ #if !_LIBC # include <config.h> #endif #include "error.h" #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #if !_LIBC && ENABLE_NLS # include "gettext.h" # define _(msgid) gettext (msgid) #endif #ifdef _LIBC # include <libintl.h> # include <stdbool.h> # include <stdint.h> # include <wchar.h> # define mbsrtowcs __mbsrtowcs # define USE_UNLOCKED_IO 0 # define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(a, b) # define _GL_ARG_NONNULL(a) #else # include "getprogname.h" #endif #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #ifndef _ # define _(String) String #endif /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ unsigned int error_message_count; #ifdef _LIBC /* In the GNU C library, there is a predefined variable for this. */ # define program_name program_invocation_name # include <errno.h> # include <limits.h> # include <libio/libioP.h> /* In GNU libc we want do not want to use the common name 'error' directly. Instead make it a weak alias. */ extern void __error (int status, int errnum, const char *message, ...) __attribute__ ((__format__ (__printf__, 3, 4))); extern void __error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) __attribute__ ((__format__ (__printf__, 5, 6))); # define error __error # define error_at_line __error_at_line # include <libio/iolibio.h> # define fflush(s) _IO_fflush (s) # undef putc # define putc(c, fp) _IO_putc (c, fp) # include <bits/libc-lock.h> #else /* not _LIBC */ # include <fcntl.h> # include <unistd.h> # if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # endif /* The gnulib override of fcntl is not needed in this file. */ # undef fcntl # if !(GNULIB_STRERROR_R_POSIX || HAVE_DECL_STRERROR_R) # ifndef HAVE_DECL_STRERROR_R "this configure-time declaration test was not run" # endif # if STRERROR_R_CHAR_P char *strerror_r (int errnum, char *buf, size_t buflen); # else int strerror_r (int errnum, char *buf, size_t buflen); # endif # endif # define program_name getprogname () # if GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r # define __strerror_r strerror_r # endif /* GNULIB_STRERROR_R_POSIX || HAVE_STRERROR_R || defined strerror_r */ #endif /* not _LIBC */ #if !_LIBC /* Return non-zero if FD is open. */ static int is_open (int fd) { # if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows: The initial state of unassigned standard file descriptors is that they are open but point to an INVALID_HANDLE_VALUE. There is no fcntl, and the gnulib replacement fcntl does not support F_GETFL. */ return (HANDLE) _get_osfhandle (fd) != INVALID_HANDLE_VALUE; # else # ifndef F_GETFL # error Please port fcntl to your platform # endif return 0 <= fcntl (fd, F_GETFL); # endif } #endif static void flush_stdout (void) { #if !_LIBC int stdout_fd; # if GNULIB_FREOPEN_SAFER /* Use of gnulib's freopen-safer module normally ensures that fileno (stdout) == 1 whenever stdout is open. */ stdout_fd = STDOUT_FILENO; # else /* POSIX states that fileno (stdout) after fclose is unspecified. But in practice it is not a problem, because stdout is statically allocated and the fd of a FILE stream is stored as a field in its allocated memory. */ stdout_fd = fileno (stdout); # endif /* POSIX states that fflush (stdout) after fclose is unspecified; it is safe in glibc, but not on all other platforms. fflush (NULL) is always defined, but too draconian. */ if (0 <= stdout_fd && is_open (stdout_fd)) #endif fflush (stdout); } static void print_errno_message (int errnum) { char const *s; #if _LIBC || GNULIB_STRERROR_R_POSIX || defined HAVE_STRERROR_R char errbuf[1024]; # if _LIBC || (!GNULIB_STRERROR_R_POSIX && STRERROR_R_CHAR_P) s = __strerror_r (errnum, errbuf, sizeof errbuf); # else if (__strerror_r (errnum, errbuf, sizeof errbuf) == 0) s = errbuf; else s = 0; # endif #else s = strerror (errnum); #endif #if !_LIBC if (! s) s = _("Unknown system error"); #endif #if _LIBC __fxprintf (NULL, ": %s", s); #else fprintf (stderr, ": %s", s); #endif } static void _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3)) error_tail (int status, int errnum, const char *message, va_list args) { #if _LIBC if (_IO_fwide (stderr, 0) > 0) { size_t len = strlen (message) + 1; wchar_t *wmessage = NULL; mbstate_t st; size_t res; const char *tmp; bool use_malloc = false; while (1) { if (__libc_use_alloca (len * sizeof (wchar_t))) wmessage = (wchar_t *) alloca (len * sizeof (wchar_t)); else { if (!use_malloc) wmessage = NULL; wchar_t *p = (wchar_t *) realloc (wmessage, len * sizeof (wchar_t)); if (p == NULL) { free (wmessage); fputws_unlocked (L"out of memory\n", stderr); return; } wmessage = p; use_malloc = true; } memset (&st, '\0', sizeof (st)); tmp = message; res = mbsrtowcs (wmessage, &tmp, len, &st); if (res != len) break; if (__builtin_expect (len >= SIZE_MAX / sizeof (wchar_t) / 2, 0)) { /* This really should not happen if everything is fine. */ res = (size_t) -1; break; } len *= 2; } if (res == (size_t) -1) { /* The string cannot be converted. */ if (use_malloc) { free (wmessage); use_malloc = false; } wmessage = (wchar_t *) L"???"; } __vfwprintf (stderr, wmessage, args); if (use_malloc) free (wmessage); } else #endif vfprintf (stderr, message, args); ++error_message_count; if (errnum) print_errno_message (errnum); #if _LIBC __fxprintf (NULL, "\n"); #else putc ('\n', stderr); #endif fflush (stderr); if (status) exit (status); } /* Print the program name and error message MESSAGE, which is a printf-style format string with optional args. If ERRNUM is nonzero, print its corresponding system error message. Exit with status STATUS if it is nonzero. */ void error (int status, int errnum, const char *message, ...) { va_list args; #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s: ", program_name); #else fprintf (stderr, "%s: ", program_name); #endif } va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ int error_one_per_line; void error_at_line (int status, int errnum, const char *file_name, unsigned int line_number, const char *message, ...) { va_list args; if (error_one_per_line) { static const char *old_file_name; static unsigned int old_line_number; if (old_line_number == line_number && (file_name == old_file_name || (old_file_name != NULL && file_name != NULL && strcmp (old_file_name, file_name) == 0))) /* Simply return and print nothing. */ return; old_file_name = file_name; old_line_number = line_number; } #if defined _LIBC && defined __libc_ptf_call /* We do not want this call to be cut short by a thread cancellation. Therefore disable cancellation for now. */ int state = PTHREAD_CANCEL_ENABLE; __libc_ptf_call (pthread_setcancelstate, (PTHREAD_CANCEL_DISABLE, &state), 0); #endif flush_stdout (); #ifdef _LIBC _IO_flockfile (stderr); #endif if (error_print_progname) (*error_print_progname) (); else { #if _LIBC __fxprintf (NULL, "%s:", program_name); #else fprintf (stderr, "%s:", program_name); #endif } #if _LIBC __fxprintf (NULL, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #else fprintf (stderr, file_name != NULL ? "%s:%u: " : " ", file_name, line_number); #endif va_start (args, message); error_tail (status, errnum, message, args); va_end (args); #ifdef _LIBC _IO_funlockfile (stderr); # ifdef __libc_ptf_call __libc_ptf_call (pthread_setcancelstate, (state, NULL), 0); # endif #endif } #ifdef _LIBC /* Make the weak alias. */ # undef error # undef error_at_line weak_alias (__error, error) weak_alias (__error_at_line, error_at_line) #endif �����������������������recutils-1.9/lib/mkstemp.c��������������������������������������������������������������������������0000644�0000000�0000000�00000003027�14226564450�012510� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2022 Free Software Foundation, Inc. This file is derived from the one in the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if !_LIBC # include <config.h> #endif #include <stdlib.h> #if !_LIBC # include "tempname.h" # define __gen_tempname gen_tempname # ifndef __GT_FILE # define __GT_FILE GT_FILE # endif #endif #include <stdio.h> #ifndef __GT_FILE # define __GT_FILE 0 #endif /* Generate a unique temporary file name from XTEMPLATE. The last six characters of XTEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. Then open the file and return a fd. If you are creating temporary files which will later be removed, consider using the clean-temp module, which avoids several pitfalls of using mkstemp directly. */ int mkstemp (char *xtemplate) { return __gen_tempname (xtemplate, 0, 0, __GT_FILE); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/free.c�����������������������������������������������������������������������������0000644�0000000�0000000�00000002772�14226564446�011764� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Make free() preserve errno. Copyright (C) 2003, 2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ #include <config.h> /* Specification. */ #include <stdlib.h> /* A function definition is only needed if HAVE_FREE_POSIX is not defined. */ #if !HAVE_FREE_POSIX # include <errno.h> void rpl_free (void *p) # undef free { # if defined __GNUC__ && !defined __clang__ /* An invalid GCC optimization <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98396> would optimize away the assignments in the code below, when link-time optimization (LTO) is enabled. Make the code more complicated, so that GCC does not grok how to optimize it. */ int err[2]; err[0] = errno; err[1] = errno; errno = 0; free (p); errno = err[errno == 0]; # else int err = errno; free (p); errno = err; # endif } #endif ������recutils-1.9/lib/qset-acl.c�������������������������������������������������������������������������0000644�0000000�0000000�00000003226�14226564450�012542� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* qset-acl.c - set access control list equivalent to a mode Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert and Andreas Gruenbacher, and Bruno Haible. */ #include <config.h> #define ACL_INTERNAL_INLINE _GL_EXTERN_INLINE #include <string.h> #include "acl.h" #include "acl-internal.h" /* Set the access control lists of a file. If DESC is a valid file descriptor, use file descriptor operations where available, else use filename based operations on NAME. If access control lists are not available, fchmod the target file to MODE. Also sets the non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX) to those from MODE if any are set. Return 0 if successful. Return -1 and set errno upon failure. */ int qset_acl (char const *name, int desc, mode_t mode) { struct permission_context ctx; int ret; memset (&ctx, 0, sizeof ctx); ctx.mode = mode; ret = set_permissions (&ctx, name, desc); free_permission_context (&ctx); return ret; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/safe-write.c�����������������������������������������������������������������������0000644�0000000�0000000�00000001474�14226564450�013102� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to write that retries after interrupts. Copyright (C) 2002, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #define SAFE_WRITE #include "safe-read.c" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/lc-charset-dispatch.c��������������������������������������������������������������0000644�0000000�0000000�00000005220�14226564450�014647� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dispatching based on the current locale's character encoding. Copyright (C) 2018-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2018. */ #include <config.h> /* Specification. */ #include "lc-charset-dispatch.h" #if GNULIB_defined_mbstate_t # include "localcharset.h" # include "streq.h" # if GNULIB_WCHAR_SINGLE_LOCALE /* When we know that the locale does not change, provide a speedup by caching the value of locale_encoding_classification. */ # define locale_encoding_classification_cached locale_encoding_classification # else /* By default, don't make assumptions, hence no caching. */ # define locale_encoding_classification_uncached locale_encoding_classification # endif # if GNULIB_WCHAR_SINGLE_LOCALE static inline # endif enc_t locale_encoding_classification_uncached (void) { const char *encoding = locale_charset (); if (STREQ_OPT (encoding, "UTF-8", 'U', 'T', 'F', '-', '8', 0, 0, 0, 0)) return enc_utf8; if (STREQ_OPT (encoding, "EUC-JP", 'E', 'U', 'C', '-', 'J', 'P', 0, 0, 0)) return enc_eucjp; if (STREQ_OPT (encoding, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) || STREQ_OPT (encoding, "GB2312", 'G', 'B', '2', '3', '1', '2', 0, 0, 0) || STREQ_OPT (encoding, "BIG5", 'B', 'I', 'G', '5', 0, 0, 0, 0, 0)) return enc_94; if (STREQ_OPT (encoding, "EUC-TW", 'E', 'U', 'C', '-', 'T', 'W', 0, 0, 0)) return enc_euctw; if (STREQ_OPT (encoding, "GB18030", 'G', 'B', '1', '8', '0', '3', '0', 0, 0)) return enc_gb18030; if (STREQ_OPT (encoding, "SJIS", 'S', 'J', 'I', 'S', 0, 0, 0, 0, 0)) return enc_sjis; return enc_other; } # if GNULIB_WCHAR_SINGLE_LOCALE static int cached_locale_enc = -1; enc_t locale_encoding_classification_cached (void) { if (cached_locale_enc < 0) cached_locale_enc = locale_encoding_classification_uncached (); return cached_locale_enc; } # endif #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/tzset.c����������������������������������������������������������������������������0000644�0000000�0000000�00000005433�14226564451�012205� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide tzset for systems that don't have it or for which it's broken. Copyright (C) 2001-2003, 2005-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> /* Specification. */ #include <time.h> #include <stdlib.h> #include <string.h> void rpl_tzset (void) #undef tzset { #if defined _WIN32 && ! defined __CYGWIN__ /* Rectify the value of the environment variable TZ. There are four possible kinds of such values: - Traditional US time zone names, e.g. "PST8PDT". Syntax: see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> - Time zone names based on geography, that contain one or more slashes, e.g. "Europe/Moscow". - Time zone names based on geography, without slashes, e.g. "Singapore". - Time zone names that contain explicit DST rules. Syntax: see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> The Microsoft CRT understands only the first kind. It produces incorrect results if the value of TZ is of the other kinds. But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value of the second kind for most geographies, or of the first kind in a few other geographies. If it is of the second kind, neutralize it. For the Microsoft CRT, an absent or empty TZ means the time zone that the user has set in the Windows Control Panel. If the value of TZ is of the third or fourth kind -- Cygwin programs understand these syntaxes as well --, it does not matter whether we neutralize it or not, since these values occur only when a Cygwin user has set TZ explicitly; this case is 1. rare and 2. under the user's responsibility. */ const char *tz = getenv ("TZ"); if (tz != NULL && strchr (tz, '/') != NULL) _putenv ("TZ="); /* On native Windows, tzset() is deprecated. Use _tzset() instead. See <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/posix-tzset> <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> */ _tzset (); #else tzset (); #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/spawnattr_setsigmask.c�������������������������������������������������������������0000644�0000000�0000000�00000002176�14226564451�015312� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <string.h> /* Set signal mask for the new process in ATTR to SIGMASK. */ int posix_spawnattr_setsigmask (posix_spawnattr_t *attr, const sigset_t *sigmask) { /* Copy the sigset_t data to the user buffer. */ memcpy (&attr->_ss, sigmask, sizeof (sigset_t)); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/float.in.h�������������������������������������������������������������������������0000644�0000000�0000000�00000017310�14226564447�012555� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A correct <float.h>. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_FLOAT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_FLOAT_H@ #ifndef _@GUARD_PREFIX@_FLOAT_H #define _@GUARD_PREFIX@_FLOAT_H /* 'long double' properties. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) /* Number of mantissa units, in base FLT_RADIX. */ # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 /* Number of decimal digits that is sufficient for representing a number. */ # undef LDBL_DIG # define LDBL_DIG 18 /* x-1 where x is the smallest representable number > 1. */ # undef LDBL_EPSILON # define LDBL_EPSILON 1.0842021724855044340E-19L /* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) /* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 /* Minimum positive normalized number. */ # undef LDBL_MIN # define LDBL_MIN 3.3621031431120935063E-4932L /* Maximum representable finite number. */ # undef LDBL_MAX # define LDBL_MAX 1.1897314953572317650E+4932L /* Minimum e such that 10^e is in the range of normalized numbers. */ # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP (-4931) /* Maximum e such that 10^e is in the range of representable finite numbers. */ # undef LDBL_MAX_10_EXP # define LDBL_MAX_10_EXP 4932 #endif /* On FreeBSD/x86 6.4, the 'long double' type really has only 53 bits of precision in the compiler but 64 bits of precision at runtime. See <https://lists.gnu.org/r/bug-gnulib/2008-07/msg00063.html>. */ #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) /* Number of mantissa units, in base FLT_RADIX. */ # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 64 /* Number of decimal digits that is sufficient for representing a number. */ # undef LDBL_DIG # define LDBL_DIG 18 /* x-1 where x is the smallest representable number > 1. */ # undef LDBL_EPSILON # define LDBL_EPSILON 1.084202172485504434007452800869941711426e-19L /* 2^-63 */ /* Minimum e such that FLT_RADIX^(e-1) is a normalized number. */ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) /* Maximum e such that FLT_RADIX^(e-1) is a representable finite number. */ # undef LDBL_MAX_EXP # define LDBL_MAX_EXP 16384 /* Minimum positive normalized number. */ # undef LDBL_MIN # define LDBL_MIN 3.362103143112093506262677817321752E-4932L /* = 0x1p-16382L */ /* Maximum representable finite number. */ # undef LDBL_MAX /* LDBL_MAX is represented as { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }. But the largest literal that GCC allows us to write is 0x0.fffffffffffff8p16384L = { 0xFFFFF800, 0xFFFFFFFF, 32766 }. So, define it like this through a reference to an external variable const unsigned int LDBL_MAX[3] = { 0xFFFFFFFF, 0xFFFFFFFF, 32766 }; extern const long double LDBL_MAX; Unfortunately, this is not a constant expression. */ # if !GNULIB_defined_long_double_union union gl_long_double_union { struct { unsigned int lo; unsigned int hi; unsigned int exponent; } xd; long double ld; }; # define GNULIB_defined_long_double_union 1 # endif extern const union gl_long_double_union gl_LDBL_MAX; # define LDBL_MAX (gl_LDBL_MAX.ld) /* Minimum e such that 10^e is in the range of normalized numbers. */ # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP (-4931) /* Maximum e such that 10^e is in the range of representable finite numbers. */ # undef LDBL_MAX_10_EXP # define LDBL_MAX_10_EXP 4932 #endif /* On AIX 7.1 with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_MAX are wrong. On Linux/PowerPC with gcc 4.4, the value of LDBL_MAX is wrong. */ #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP DBL_MIN_10_EXP # undef LDBL_MIN # define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ #endif #if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MAX /* LDBL_MAX is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xFFFFFFFF }. It is not easy to define: #define LDBL_MAX 1.79769313486231580793728971405302307166e308L is too small, whereas #define LDBL_MAX 1.79769313486231580793728971405302307167e308L is too large. Apparently a bug in GCC decimal-to-binary conversion. Also, I can't get values larger than #define LDBL63 ((long double) (1ULL << 63)) #define LDBL882 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL945 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL1008 (LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63 * LDBL63) #define LDBL_MAX (LDBL1008 * 65535.0L + LDBL945 * (long double) 9223372036821221375ULL + LDBL882 * (long double) 4611686018427387904ULL) which is represented as { 0x7FEFFFFF, 0xFFFFFFFF, 0x7C8FFFFF, 0xF8000000 }. So, define it like this through a reference to an external variable const double LDBL_MAX[2] = { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }; extern const long double LDBL_MAX; or through a pointer cast #define LDBL_MAX \ (*(const long double *) (double[]) { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL }) Unfortunately, this is not a constant expression, and the latter expression does not work well when GCC is optimizing.. */ # if !GNULIB_defined_long_double_union union gl_long_double_union { struct { double hi; double lo; } dd; long double ld; }; # define GNULIB_defined_long_double_union 1 # endif extern const union gl_long_double_union gl_LDBL_MAX; # define LDBL_MAX (gl_LDBL_MAX.ld) #endif /* On IRIX 6.5, with cc, the value of LDBL_MANT_DIG is wrong. On IRIX 6.5, with gcc 4.2, the values of LDBL_MIN_EXP, LDBL_MIN, LDBL_EPSILON are wrong. */ #if defined __sgi && (LDBL_MANT_DIG >= 106) # undef LDBL_MANT_DIG # define LDBL_MANT_DIG 106 # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # undef LDBL_MIN_10_EXP # define LDBL_MIN_10_EXP DBL_MIN_10_EXP # undef LDBL_MIN # define LDBL_MIN 2.22507385850720138309023271733240406422e-308L /* DBL_MIN = 2^-1022 */ # undef LDBL_EPSILON # define LDBL_EPSILON 2.46519032881566189191165176650870696773e-32L /* 2^-105 */ # endif #endif #if @REPLACE_ITOLD@ /* Pull in a function that fixes the 'int' to 'long double' conversion of glibc 2.7. */ extern # ifdef __cplusplus "C" # endif void _Qp_itoq (long double *, int); static void (*_gl_float_fix_itold) (long double *, int) = _Qp_itoq; #endif #endif /* _@GUARD_PREFIX@_FLOAT_H */ #endif /* _@GUARD_PREFIX@_FLOAT_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/copy-acl.c�������������������������������������������������������������������������0000644�0000000�0000000�00000003674�14226564447�012555� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy access control list from one file to file. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include <config.h> #include "acl.h" #include <errno.h> #include "quote.h" #include "error.h" #include "gettext.h" #define _(msgid) gettext (msgid) /* Copy access control lists from one file to another. If SOURCE_DESC is a valid file descriptor, use file descriptor operations, else use filename based operations on SRC_NAME. Likewise for DEST_DESC and DST_NAME. If access control lists are not available, fchmod the target file to MODE. Also sets the non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX) to those from MODE if any are set. Return 0 if successful, otherwise output a diagnostic and return a negative error code. */ int copy_acl (const char *src_name, int source_desc, const char *dst_name, int dest_desc, mode_t mode) { int ret = qcopy_acl (src_name, source_desc, dst_name, dest_desc, mode); switch (ret) { case -2: error (0, errno, "%s", quote (src_name)); break; case -1: error (0, errno, _("preserving permissions for %s"), quote (dst_name)); break; default: break; } return ret; } ��������������������������������������������������������������������recutils-1.9/lib/ialloc.h���������������������������������������������������������������������������0000644�0000000�0000000�00000004463�14226564446�012312� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ialloc.h -- malloc with idx_t rather than size_t Copyright 2021-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef IALLOC_H_ #define IALLOC_H_ #include "idx.h" #include <errno.h> #include <stdint.h> #include <stdlib.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef IALLOC_INLINE # define IALLOC_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif IALLOC_INLINE void * _GL_ATTRIBUTE_COLD _gl_alloc_nomem (void) { errno = ENOMEM; return NULL; } IALLOC_INLINE _GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * imalloc (idx_t s) { return s <= SIZE_MAX ? malloc (s) : _gl_alloc_nomem (); } IALLOC_INLINE /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * irealloc (void *p, idx_t s) { /* Work around GNU realloc glitch by treating a zero size as if it were 1, so that returning NULL is equivalent to failing. */ return s <= SIZE_MAX ? realloc (p, s | !s) : _gl_alloc_nomem (); } IALLOC_INLINE _GL_ATTRIBUTE_MALLOC /*_GL_ATTRIBUTE_DEALLOC_FREE*/ void * icalloc (idx_t n, idx_t s) { if (SIZE_MAX < n) { if (s != 0) return _gl_alloc_nomem (); n = 0; } if (SIZE_MAX < s) { if (n != 0) return _gl_alloc_nomem (); s = 0; } return calloc (n, s); } IALLOC_INLINE void * ireallocarray (void *p, idx_t n, idx_t s) { /* Work around GNU reallocarray glitch by treating a zero size as if it were 1, so that returning NULL is equivalent to failing. */ if (n == 0 || s == 0) n = s = 1; return (n <= SIZE_MAX && s <= SIZE_MAX ? reallocarray (p, n, s) : _gl_alloc_nomem ()); } #ifdef __cplusplus } #endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getopt_int.h�����������������������������������������������������������������������0000644�0000000�0000000�00000010112�14226564450�013202� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internal declarations for getopt. Copyright (C) 1989-2022 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_INT_H #define _GETOPT_INT_H 1 #include <getopt.h> extern int _getopt_internal (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, int __posixly_correct); /* Reentrant versions which can handle parsing multiple argument vectors at the same time. */ /* Describe how to deal with options that follow non-option ARGV-elements. REQUIRE_ORDER means don't recognize them as options; stop option processing when the first non-option is seen. This is what POSIX specifies should happen. PERMUTE means permute the contents of ARGV as we scan, so that eventually all the non-options are at the end. This allows options to be given in any order, even with programs that were not written to expect this. RETURN_IN_ORDER is an option available to programs that were written to expect options and other ARGV-elements in any order and that care about the ordering of the two. We describe each non-option ARGV-element as if it were the argument of an option with character code 1. The special argument '--' forces an end of option-scanning regardless of the value of 'ordering'. In the case of RETURN_IN_ORDER, only '--' can cause 'getopt' to return -1 with 'optind' != ARGC. */ enum __ord { REQUIRE_ORDER, PERMUTE, RETURN_IN_ORDER }; /* Data type for reentrant functions. */ struct _getopt_data { /* These have exactly the same meaning as the corresponding global variables, except that they are used for the reentrant versions of getopt. */ int optind; int opterr; int optopt; char *optarg; /* Internal members. */ /* True if the internal members have been initialized. */ int __initialized; /* The next char to be scanned in the option-element in which the last option character we returned was found. This allows us to pick up the scan where we left off. If this is zero, or a null string, it means resume the scan by advancing to the next ARGV-element. */ char *__nextchar; /* See __ord above. */ enum __ord __ordering; /* Handle permutation of arguments. */ /* Describe the part of ARGV that contains non-options that have been skipped. 'first_nonopt' is the index in ARGV of the first of them; 'last_nonopt' is the index after the last of them. */ int __first_nonopt; int __last_nonopt; }; /* The initializer is necessary to set OPTIND and OPTERR to their default values and to clear the initialization flag. */ #define _GETOPT_DATA_INITIALIZER { 1, 1 } extern int _getopt_internal_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, int __long_only, struct _getopt_data *__data, int __posixly_correct); extern int _getopt_long_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); extern int _getopt_long_only_r (int ___argc, char **___argv, const char *__shortopts, const struct option *__longopts, int *__longind, struct _getopt_data *__data); #endif /* getopt_int.h */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fseterr.c��������������������������������������������������������������������������0000644�0000000�0000000�00000006026�14226564447�012512� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the error indicator of a stream. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "fseterr.h" #include <errno.h> #include "stdio-impl.h" /* This file is not used on systems that have the __fseterr function, namely musl libc. */ void fseterr (FILE *fp) { /* Most systems provide FILE as a struct and the necessary bitmask in <stdio.h>, because they need it for implementing getc() and putc() as fast macros. */ #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ fp->_flags |= _IO_ERR_SEEN; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ fp_->_flags |= __SERR; #elif defined __EMX__ /* emx+gcc */ fp->_flags |= _IOERR; #elif defined __minix /* Minix */ fp->_flags |= _IOERR; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ fp_->_flag |= _IOERR; #elif defined __UCLIBC__ /* uClibc */ fp->__modeflags |= __FLAG_ERROR; #elif defined __QNX__ /* QNX */ fp->_Mode |= 0x200 /* _MERR */; #elif defined __MINT__ /* Atari FreeMiNT */ fp->__error = 1; #elif defined EPLAN9 /* Plan9 */ if (fp->state != 0 /* CLOSED */) fp->state = 5 /* ERR */; #elif 0 /* unknown */ /* Portable fallback, based on an idea by Rich Felker. Wow! 6 system calls for something that is just a bit operation! Not activated on any system, because there is no way to repair FP when the sequence of system calls fails, and library code should not call abort(). */ int saved_errno; int fd; int fd2; saved_errno = errno; fflush (fp); fd = fileno (fp); fd2 = dup (fd); if (fd2 >= 0) { close (fd); fputc ('\0', fp); /* This should set the error indicator. */ fflush (fp); /* Or this. */ if (dup2 (fd2, fd) < 0) /* Whee... we botched the stream and now cannot restore it! */ abort (); close (fd2); } errno = saved_errno; #else #error "Please port gnulib fseterr.c to your platform! Look at the definitions of ferror and clearerr on your system, then report this to bug-gnulib." #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fwriting.h�������������������������������������������������������������������������0000644�0000000�0000000�00000003622�14226564447�012675� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stdbool.h> #include <stdio.h> /* Return true if the stream STREAM is opened write-only or append-only, or if the last operation on the stream was a write operation. Return false if the stream is opened read-only, or if it supports reading and there is no current write operation (such as fputc). freading and fwriting will never both be true. If STREAM supports both reads and writes, then: - both freading and fwriting might be false when the stream is first opened, after read encounters EOF, or after fflush, - freading might be false or true and fwriting might be false after repositioning (such as fseek, fsetpos, or rewind), depending on the underlying implementation. STREAM must not be wide-character oriented. */ #if HAVE___FWRITING /* glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 29, musl libc */ # if HAVE_STDIO_EXT_H # include <stdio_ext.h> # endif # define fwriting(stream) (__fwriting (stream) != 0) #else # ifdef __cplusplus extern "C" { # endif extern bool fwriting (FILE *stream) _GL_ATTRIBUTE_PURE; # ifdef __cplusplus } # endif #endif ��������������������������������������������������������������������������������������������������������������recutils-1.9/lib/canonicalize.h���������������������������������������������������������������������0000644�0000000�0000000�00000003631�14226564446�013502� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the canonical absolute name of a given file. Copyright (C) 1996-2007, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef CANONICALIZE_H_ # define CANONICALIZE_H_ #include <stdlib.h> /* for canonicalize_file_name */ #define CAN_MODE_MASK (CAN_EXISTING | CAN_ALL_BUT_LAST | CAN_MISSING) #ifdef __cplusplus extern "C" { #endif enum canonicalize_mode_t { /* All components must exist. */ CAN_EXISTING = 0, /* All components excluding last one must exist. */ CAN_ALL_BUT_LAST = 1, /* No requirements on components existence. */ CAN_MISSING = 2, /* Don't expand symlinks. */ CAN_NOLINKS = 4 }; typedef enum canonicalize_mode_t canonicalize_mode_t; /* Return the canonical absolute name of file NAME, while treating missing elements according to CAN_MODE. A canonical name does not contain any `.', `..' components nor any repeated file name separators ('/') or, depending on other CAN_MODE flags, symlinks. Whether components must exist or not depends on canonicalize mode. The result is malloc'd. Upon failure, return NULL with errno set. */ char *canonicalize_filename_mode (const char *, canonicalize_mode_t) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #ifdef __cplusplus } #endif #endif /* !CANONICALIZE_H_ */ �������������������������������������������������������������������������������������������������������recutils-1.9/lib/c++defs.h��������������������������������������������������������������������������0000644�0000000�0000000�00000035577�14226564447�012274� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* C++ compatible function declaration macros. Copyright (C) 2010-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_CXXDEFS_H #define _GL_CXXDEFS_H /* Begin/end the GNULIB_NAMESPACE namespace. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_BEGIN_NAMESPACE namespace GNULIB_NAMESPACE { # define _GL_END_NAMESPACE } #else # define _GL_BEGIN_NAMESPACE # define _GL_END_NAMESPACE #endif /* The three most frequent use cases of these macros are: * For providing a substitute for a function that is missing on some platforms, but is declared and works fine on the platforms on which it exists: #if @GNULIB_FOO@ # if !@HAVE_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on all platforms, but is broken/insufficient and needs to be replaced on some platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif * For providing a replacement for a function that exists on some platforms but is broken/insufficient and needs to be replaced on some of them and is additionally either missing or undeclared on some other platforms: #if @GNULIB_FOO@ # if @REPLACE_FOO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef foo # define foo rpl_foo # endif _GL_FUNCDECL_RPL (foo, ...); _GL_CXXALIAS_RPL (foo, ...); # else # if !@HAVE_FOO@ or if !@HAVE_DECL_FOO@ _GL_FUNCDECL_SYS (foo, ...); # endif _GL_CXXALIAS_SYS (foo, ...); # endif _GL_CXXALIASWARN (foo); #elif defined GNULIB_POSIXCHECK ... #endif */ /* _GL_EXTERN_C declaration; performs the declaration with C linkage. */ #if defined __cplusplus # define _GL_EXTERN_C extern "C" #else # define _GL_EXTERN_C extern #endif /* _GL_FUNCDECL_RPL (func, rettype, parameters_and_attributes); declares a replacement function, named rpl_func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_RPL (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_RPL(func,rettype,parameters_and_attributes) \ _GL_FUNCDECL_RPL_1 (rpl_##func, rettype, parameters_and_attributes) #define _GL_FUNCDECL_RPL_1(rpl_func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype rpl_func parameters_and_attributes /* _GL_FUNCDECL_SYS (func, rettype, parameters_and_attributes); declares the system function, named func, with the given prototype, consisting of return type, parameters, and attributes. Example: _GL_FUNCDECL_SYS (open, int, (const char *filename, int flags, ...) _GL_ARG_NONNULL ((1))); */ #define _GL_FUNCDECL_SYS(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C rettype func parameters_and_attributes /* _GL_CXXALIAS_RPL (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to rpl_func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_RPL (open, int, (const char *filename, int flags, ...)); Wrapping rpl_func in an object with an inline conversion operator avoids a reference to rpl_func unless GNULIB_NAMESPACE::func is actually used in the program. */ #define _GL_CXXALIAS_RPL(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, rpl_##func, rettype, parameters) #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::rpl_func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_MDA (func, rettype, parameters); is to be used when func is a Microsoft deprecated alias, on native Windows. It declares a C++ alias called GNULIB_NAMESPACE::func that redirects to _func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_MDA (open, int, (const char *filename, int flags, ...)); */ #define _GL_CXXALIAS_MDA(func,rettype,parameters) \ _GL_CXXALIAS_RPL_1 (func, _##func, rettype, parameters) /* _GL_CXXALIAS_RPL_CAST_1 (func, rpl_func, rettype, parameters); is like _GL_CXXALIAS_RPL_1 (func, rpl_func, rettype, parameters); except that the C function rpl_func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>(::rpl_func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_RPL_CAST_1(func,rpl_func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_MDA_CAST (func, rettype, parameters); is like _GL_CXXALIAS_MDA (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #define _GL_CXXALIAS_MDA_CAST(func,rettype,parameters) \ _GL_CXXALIAS_RPL_CAST_1 (func, _##func, rettype, parameters) /* _GL_CXXALIAS_SYS (func, rettype, parameters); declares a C++ alias called GNULIB_NAMESPACE::func that redirects to the system provided function func, if GNULIB_NAMESPACE is defined. Example: _GL_CXXALIAS_SYS (open, int, (const char *filename, int flags, ...)); Wrapping func in an object with an inline conversion operator avoids a reference to func unless GNULIB_NAMESPACE::func is actually used in the program. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return ::func; \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST (func, rettype, parameters); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function func may have a slightly different declaration. A cast is used to silence the "invalid conversion" error that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>(::func); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST(func,rettype,parameters) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIAS_SYS_CAST2 (func, rettype, parameters, rettype2, parameters2); is like _GL_CXXALIAS_SYS (func, rettype, parameters); except that the C function is picked among a set of overloaded functions, namely the one with rettype2 and parameters2. Two consecutive casts are used to silence the "cannot find a match" and "invalid conversion" errors that would otherwise occur. */ #if defined __cplusplus && defined GNULIB_NAMESPACE /* The outer cast must be a reinterpret_cast. The inner cast: When the function is defined as a set of overloaded functions, it works as a static_cast<>, choosing the designated variant. When the function is defined as a single variant, it works as a reinterpret_cast<>. The parenthesized cast syntax works both ways. */ # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ namespace GNULIB_NAMESPACE \ { \ static const struct _gl_ ## func ## _wrapper \ { \ typedef rettype (*type) parameters; \ \ inline operator type () const \ { \ return reinterpret_cast<type>((rettype2 (*) parameters2)(::func)); \ } \ } func = {}; \ } \ _GL_EXTERN_C int _gl_cxxalias_dummy #else # define _GL_CXXALIAS_SYS_CAST2(func,rettype,parameters,rettype2,parameters2) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN (func); causes a warning to be emitted when ::func is used but not when GNULIB_NAMESPACE::func is used. func must be defined without overloaded variants. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN(func) \ _GL_CXXALIASWARN_1 (func, GNULIB_NAMESPACE) # define _GL_CXXALIASWARN_1(func,namespace) \ _GL_CXXALIASWARN_2 (func, namespace) /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, we enable the warning only when not optimizing. */ # if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_WARN_ON_USE (func, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING # define _GL_CXXALIASWARN_2(func,namespace) \ extern __typeof__ (func) func # else # define _GL_CXXALIASWARN_2(func,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN(func) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif /* _GL_CXXALIASWARN1 (func, rettype, parameters_and_attributes); causes a warning to be emitted when the given overloaded variant of ::func is used but not when GNULIB_NAMESPACE::func is used. */ #if defined __cplusplus && defined GNULIB_NAMESPACE # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_CXXALIASWARN1_1 (func, rettype, parameters_and_attributes, \ GNULIB_NAMESPACE) # define _GL_CXXALIASWARN1_1(func,rettype,parameters_and_attributes,namespace) \ _GL_CXXALIASWARN1_2 (func, rettype, parameters_and_attributes, namespace) /* To work around GCC bug <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=43881>, we enable the warning only when not optimizing. */ # if !(defined __GNUC__ && !defined __clang__ && __OPTIMIZE__) # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_WARN_ON_USE_CXX (func, rettype, rettype, parameters_and_attributes, \ "The symbol ::" #func " refers to the system function. " \ "Use " #namespace "::" #func " instead.") # else # define _GL_CXXALIASWARN1_2(func,rettype,parameters_and_attributes,namespace) \ _GL_EXTERN_C int _gl_cxxalias_dummy # endif #else # define _GL_CXXALIASWARN1(func,rettype,parameters_and_attributes) \ _GL_EXTERN_C int _gl_cxxalias_dummy #endif #endif /* _GL_CXXDEFS_H */ ���������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/printf-parse.c���������������������������������������������������������������������0000644�0000000�0000000�00000052473�14226564450�013453� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999-2000, 2002-2003, 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* This file can be parametrized with the following macros: CHAR_T The element type of the format string. CHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. DIRECTIVE Structure denoting a format directive. Depends on CHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on CHAR_T. PRINTF_PARSE Function that parses a format string. Depends on CHAR_T. STATIC Set to 'static' to declare the function static. ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. */ #ifndef PRINTF_PARSE # include <config.h> #endif /* Specification. */ #ifndef PRINTF_PARSE # include "printf-parse.h" #endif /* Default parameters. */ #ifndef PRINTF_PARSE # define PRINTF_PARSE printf_parse # define CHAR_T char # define DIRECTIVE char_directive # define DIRECTIVES char_directives #endif /* Get size_t, NULL. */ #include <stddef.h> /* Get intmax_t. */ #include <stdint.h> /* malloc(), realloc(), free(). */ #include <stdlib.h> /* memcpy(). */ #include <string.h> /* errno. */ #include <errno.h> /* Checked size_t computations. */ #include "xsize.h" #if CHAR_T_ONLY_ASCII /* c_isascii(). */ # include "c-ctype.h" #endif #ifdef STATIC STATIC #endif int PRINTF_PARSE (const CHAR_T *format, DIRECTIVES *d, arguments *a) { const CHAR_T *cp = format; /* pointer into format */ size_t arg_posn = 0; /* number of regular arguments consumed */ size_t d_allocated; /* allocated elements of d->dir */ size_t a_allocated; /* allocated elements of a->arg */ size_t max_width_length = 0; size_t max_precision_length = 0; d->count = 0; d_allocated = N_DIRECT_ALLOC_DIRECTIVES; d->dir = d->direct_alloc_dir; a->count = 0; a_allocated = N_DIRECT_ALLOC_ARGUMENTS; a->arg = a->direct_alloc_arg; #define REGISTER_ARG(_index_,_type_) \ { \ size_t n = (_index_); \ if (n >= a_allocated) \ { \ size_t memory_size; \ argument *memory; \ \ a_allocated = xtimes (a_allocated, 2); \ if (a_allocated <= n) \ a_allocated = xsum (n, 1); \ memory_size = xtimes (a_allocated, sizeof (argument)); \ if (size_overflow_p (memory_size)) \ /* Overflow, would lead to out of memory. */ \ goto out_of_memory; \ memory = (argument *) (a->arg != a->direct_alloc_arg \ ? realloc (a->arg, memory_size) \ : malloc (memory_size)); \ if (memory == NULL) \ /* Out of memory. */ \ goto out_of_memory; \ if (a->arg == a->direct_alloc_arg) \ memcpy (memory, a->arg, a->count * sizeof (argument)); \ a->arg = memory; \ } \ while (a->count <= n) \ a->arg[a->count++].type = TYPE_NONE; \ if (a->arg[n].type == TYPE_NONE) \ a->arg[n].type = (_type_); \ else if (a->arg[n].type != (_type_)) \ /* Ambiguous type for positional argument. */ \ goto error; \ } while (*cp != '\0') { CHAR_T c = *cp++; if (c == '%') { size_t arg_index = ARG_NONE; DIRECTIVE *dp = &d->dir[d->count]; /* pointer to next directive */ /* Initialize the next directive. */ dp->dir_start = cp - 1; dp->flags = 0; dp->width_start = NULL; dp->width_end = NULL; dp->width_arg_index = ARG_NONE; dp->precision_start = NULL; dp->precision_end = NULL; dp->precision_arg_index = ARG_NONE; dp->arg_index = ARG_NONE; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; arg_index = n - 1; cp = np + 1; } } /* Read the flags. */ for (;;) { if (*cp == '\'') { dp->flags |= FLAG_GROUP; cp++; } else if (*cp == '-') { dp->flags |= FLAG_LEFT; cp++; } else if (*cp == '+') { dp->flags |= FLAG_SHOWSIGN; cp++; } else if (*cp == ' ') { dp->flags |= FLAG_SPACE; cp++; } else if (*cp == '#') { dp->flags |= FLAG_ALT; cp++; } else if (*cp == '0') { dp->flags |= FLAG_ZERO; cp++; } #if __GLIBC__ >= 2 && !defined __UCLIBC__ else if (*cp == 'I') { dp->flags |= FLAG_LOCALIZED; cp++; } #endif else break; } /* Parse the field width. */ if (*cp == '*') { dp->width_start = cp; cp++; dp->width_end = cp; if (max_width_length < 1) max_width_length = 1; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->width_arg_index = n - 1; cp = np + 1; } } if (dp->width_arg_index == ARG_NONE) { dp->width_arg_index = arg_posn++; if (dp->width_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->width_arg_index, TYPE_INT); } else if (*cp >= '0' && *cp <= '9') { size_t width_length; dp->width_start = cp; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->width_end = cp; width_length = dp->width_end - dp->width_start; if (max_width_length < width_length) max_width_length = width_length; } /* Parse the precision. */ if (*cp == '.') { cp++; if (*cp == '*') { dp->precision_start = cp - 1; cp++; dp->precision_end = cp; if (max_precision_length < 2) max_precision_length = 2; /* Test for positional argument. */ if (*cp >= '0' && *cp <= '9') { const CHAR_T *np; for (np = cp; *np >= '0' && *np <= '9'; np++) ; if (*np == '$') { size_t n = 0; for (np = cp; *np >= '0' && *np <= '9'; np++) n = xsum (xtimes (n, 10), *np - '0'); if (n == 0) /* Positional argument 0. */ goto error; if (size_overflow_p (n)) /* n too large, would lead to out of memory later. */ goto error; dp->precision_arg_index = n - 1; cp = np + 1; } } if (dp->precision_arg_index == ARG_NONE) { dp->precision_arg_index = arg_posn++; if (dp->precision_arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->precision_arg_index, TYPE_INT); } else { size_t precision_length; dp->precision_start = cp - 1; for (; *cp >= '0' && *cp <= '9'; cp++) ; dp->precision_end = cp; precision_length = dp->precision_end - dp->precision_start; if (max_precision_length < precision_length) max_precision_length = precision_length; } } { arg_type type; /* Parse argument type/size specifiers. */ { int flags = 0; for (;;) { if (*cp == 'h') { flags |= (1 << (flags & 1)); cp++; } else if (*cp == 'L') { flags |= 4; cp++; } else if (*cp == 'l') { flags += 8; cp++; } else if (*cp == 'j') { if (sizeof (intmax_t) > sizeof (long)) { /* intmax_t = long long */ flags += 16; } else if (sizeof (intmax_t) > sizeof (int)) { /* intmax_t = long */ flags += 8; } cp++; } else if (*cp == 'z' || *cp == 'Z') { /* 'z' is standardized in ISO C 99, but glibc uses 'Z' because the warning facility in gcc-2.95.2 understands only 'Z' (see gcc-2.95.2/gcc/c-common.c:1784). */ if (sizeof (size_t) > sizeof (long)) { /* size_t = long long */ flags += 16; } else if (sizeof (size_t) > sizeof (int)) { /* size_t = long */ flags += 8; } cp++; } else if (*cp == 't') { if (sizeof (ptrdiff_t) > sizeof (long)) { /* ptrdiff_t = long long */ flags += 16; } else if (sizeof (ptrdiff_t) > sizeof (int)) { /* ptrdiff_t = long */ flags += 8; } cp++; } #if defined __APPLE__ && defined __MACH__ /* On Mac OS X 10.3, PRIdMAX is defined as "qd". We cannot change it to "lld" because PRIdMAX must also be understood by the system's printf routines. */ else if (*cp == 'q') { if (64 / 8 > sizeof (long)) { /* int64_t = long long */ flags += 16; } else { /* int64_t = long */ flags += 8; } cp++; } #endif #if defined _WIN32 && ! defined __CYGWIN__ /* On native Windows, PRIdMAX is defined as "I64d". We cannot change it to "lld" because PRIdMAX must also be understood by the system's printf routines. */ else if (*cp == 'I' && cp[1] == '6' && cp[2] == '4') { if (64 / 8 > sizeof (long)) { /* __int64 = long long */ flags += 16; } else { /* __int64 = long */ flags += 8; } cp += 3; } #endif else break; } /* Read the conversion character. */ c = *cp++; switch (c) { case 'd': case 'i': /* If 'long long' is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_LONGLONGINT; else /* If 'long long' is the same as 'long', we parse "lld" into TYPE_LONGINT. */ if (flags >= 8) type = TYPE_LONGINT; else if (flags & 2) type = TYPE_SCHAR; else if (flags & 1) type = TYPE_SHORT; else type = TYPE_INT; break; case 'o': case 'u': case 'x': case 'X': /* If 'unsigned long long' is larger than 'unsigned long': */ if (flags >= 16 || (flags & 4)) type = TYPE_ULONGLONGINT; else /* If 'unsigned long long' is the same as 'unsigned long', we parse "llu" into TYPE_ULONGINT. */ if (flags >= 8) type = TYPE_ULONGINT; else if (flags & 2) type = TYPE_UCHAR; else if (flags & 1) type = TYPE_USHORT; else type = TYPE_UINT; break; case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': if (flags >= 16 || (flags & 4)) type = TYPE_LONGDOUBLE; else type = TYPE_DOUBLE; break; case 'c': if (flags >= 8) #if HAVE_WINT_T type = TYPE_WIDE_CHAR; #else goto error; #endif else type = TYPE_CHAR; break; #if HAVE_WINT_T case 'C': type = TYPE_WIDE_CHAR; c = 'c'; break; #endif case 's': if (flags >= 8) #if HAVE_WCHAR_T type = TYPE_WIDE_STRING; #else goto error; #endif else type = TYPE_STRING; break; #if HAVE_WCHAR_T case 'S': type = TYPE_WIDE_STRING; c = 's'; break; #endif case 'p': type = TYPE_POINTER; break; case 'n': /* If 'long long' is larger than 'long': */ if (flags >= 16 || (flags & 4)) type = TYPE_COUNT_LONGLONGINT_POINTER; else /* If 'long long' is the same as 'long', we parse "lln" into TYPE_COUNT_LONGINT_POINTER. */ if (flags >= 8) type = TYPE_COUNT_LONGINT_POINTER; else if (flags & 2) type = TYPE_COUNT_SCHAR_POINTER; else if (flags & 1) type = TYPE_COUNT_SHORT_POINTER; else type = TYPE_COUNT_INT_POINTER; break; #if ENABLE_UNISTDIO /* The unistdio extensions. */ case 'U': if (flags >= 16) type = TYPE_U32_STRING; else if (flags >= 8) type = TYPE_U16_STRING; else type = TYPE_U8_STRING; break; #endif case '%': type = TYPE_NONE; break; default: /* Unknown conversion character. */ goto error; } } if (type != TYPE_NONE) { dp->arg_index = arg_index; if (dp->arg_index == ARG_NONE) { dp->arg_index = arg_posn++; if (dp->arg_index == ARG_NONE) /* arg_posn wrapped around. */ goto error; } REGISTER_ARG (dp->arg_index, type); } dp->conversion = c; dp->dir_end = cp; } d->count++; if (d->count >= d_allocated) { size_t memory_size; DIRECTIVE *memory; d_allocated = xtimes (d_allocated, 2); memory_size = xtimes (d_allocated, sizeof (DIRECTIVE)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ goto out_of_memory; memory = (DIRECTIVE *) (d->dir != d->direct_alloc_dir ? realloc (d->dir, memory_size) : malloc (memory_size)); if (memory == NULL) /* Out of memory. */ goto out_of_memory; if (d->dir == d->direct_alloc_dir) memcpy (memory, d->dir, d->count * sizeof (DIRECTIVE)); d->dir = memory; } } #if CHAR_T_ONLY_ASCII else if (!c_isascii (c)) { /* Non-ASCII character. Not supported. */ goto error; } #endif } d->dir[d->count].dir_start = cp; d->max_width_length = max_width_length; d->max_precision_length = max_precision_length; return 0; error: if (a->arg != a->direct_alloc_arg) free (a->arg); if (d->dir != d->direct_alloc_dir) free (d->dir); errno = EINVAL; return -1; out_of_memory: if (a->arg != a->direct_alloc_arg) free (a->arg); if (d->dir != d->direct_alloc_dir) free (d->dir); errno = ENOMEM; return -1; } #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef CHAR_T_ONLY_ASCII #undef CHAR_T �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/gl_list.h��������������������������������������������������������������������������0000644�0000000�0000000�00000114531�14226564450�012475� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract sequential list data type. -*- coding: utf-8 -*- Copyright (C) 2006-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_LIST_H #define _GL_LIST_H #include <stdbool.h> #include <stddef.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef GL_LIST_INLINE # define GL_LIST_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* gl_list is an abstract list data type. It can contain any number of objects ('void *' or 'const void *' pointers) in any given order. Duplicates are allowed, but can optionally be forbidden. There are several implementations of this list datatype, optimized for different operations or for memory. You can start using the simplest list implementation, GL_ARRAY_LIST, and switch to a different implementation later, when you realize which operations are performed the most frequently. The API of the different implementations is exactly the same; when switching to a different implementation, you only have to change the gl_list_create call. The implementations are: GL_ARRAY_LIST a growable array GL_CARRAY_LIST a growable circular array GL_LINKED_LIST a linked list GL_AVLTREE_LIST a binary tree (AVL tree) GL_RBTREE_LIST a binary tree (red-black tree) GL_LINKEDHASH_LIST a hash table with a linked list GL_AVLTREEHASH_LIST a hash table with a binary tree (AVL tree) GL_RBTREEHASH_LIST a hash table with a binary tree (red-black tree) The memory consumption is asymptotically the same: O(1) for every object in the list. When looking more closely at the average memory consumed for an object, GL_ARRAY_LIST is the most compact representation, and GL_LINKEDHASH_LIST and GL_TREEHASH_LIST need more memory. The guaranteed average performance of the operations is, for a list of n elements: Operation ARRAY LINKED TREE LINKEDHASH TREEHASH CARRAY with|without with|without duplicates duplicates gl_list_size O(1) O(1) O(1) O(1) O(1) gl_list_node_value O(1) O(1) O(1) O(1) O(1) gl_list_node_set_value O(1) O(1) O(1) O(1) O((log n)²)/O(1) gl_list_next_node O(1) O(1) O(log n) O(1) O(log n) gl_list_previous_node O(1) O(1) O(log n) O(1) O(log n) gl_list_first_node O(1) O(1) O(log n) O(1) O(log n) gl_list_last_node O(1) O(1) O(log n) O(1) O(log n) gl_list_get_at O(1) O(n) O(log n) O(n) O(log n) gl_list_get_first O(1) O(1) O(log n) O(1) O(log n) gl_list_get_last O(1) O(1) O(log n) O(1) O(log n) gl_list_set_at O(1) O(n) O(log n) O(n) O((log n)²)/O(log n) gl_list_set_first O(1) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) gl_list_set_last O(1) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) gl_list_search O(n) O(n) O(n) O(n)/O(1) O(log n)/O(1) gl_list_search_from O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) gl_list_search_from_to O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) gl_list_indexof O(n) O(n) O(n) O(n) O(log n) gl_list_indexof_from O(n) O(n) O(n) O(n) O((log n)²)/O(log n) gl_list_indexof_from_to O(n) O(n) O(n) O(n) O((log n)²)/O(log n) gl_list_add_first O(n)/O(1) O(1) O(log n) O(1) O((log n)²)/O(log n) gl_list_add_last O(1) O(1) O(log n) O(1) O((log n)²)/O(log n) gl_list_add_before O(n) O(1) O(log n) O(1) O((log n)²)/O(log n) gl_list_add_after O(n) O(1) O(log n) O(1) O((log n)²)/O(log n) gl_list_add_at O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) gl_list_remove_node O(n) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) gl_list_remove_at O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) gl_list_remove_first O(n)/O(1) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) gl_list_remove_last O(1) O(1) O(log n) O(n)/O(1) O((log n)²)/O(log n) gl_list_remove O(n) O(n) O(n) O(n)/O(1) O((log n)²)/O(log n) gl_list_iterator O(1) O(1) O(log n) O(1) O(log n) gl_list_iterator_from_to O(1) O(n) O(log n) O(n) O(log n) gl_list_iterator_next O(1) O(1) O(log n) O(1) O(log n) gl_sortedlist_search O(log n) O(n) O(log n) O(n) O(log n) gl_sortedlist_search_from O(log n) O(n) O(log n) O(n) O(log n) gl_sortedlist_indexof O(log n) O(n) O(log n) O(n) O(log n) gl_sortedlist_indexof_fro O(log n) O(n) O(log n) O(n) O(log n) gl_sortedlist_add O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) gl_sortedlist_remove O(n) O(n) O(log n) O(n) O((log n)²)/O(log n) */ /* -------------------------- gl_list_t Data Type -------------------------- */ /* Type of function used to compare two elements. NULL denotes pointer comparison. */ typedef bool (*gl_listelement_equals_fn) (const void *elt1, const void *elt2); /* Type of function used to compute a hash code. NULL denotes a function that depends only on the pointer itself. */ typedef size_t (*gl_listelement_hashcode_fn) (const void *elt); /* Type of function used to dispose an element once it's removed from a list. NULL denotes a no-op. */ typedef void (*gl_listelement_dispose_fn) (const void *elt); struct gl_list_impl; /* Type representing an entire list. */ typedef struct gl_list_impl * gl_list_t; struct gl_list_node_impl; /* Type representing the position of an element in the list, in a way that is more adapted to the list implementation than a plain index. Note: It is invalidated by insertions and removals! */ typedef struct gl_list_node_impl * gl_list_node_t; struct gl_list_implementation; /* Type representing a list datatype implementation. */ typedef const struct gl_list_implementation * gl_list_implementation_t; #if 0 /* Unless otherwise specified, these are defined inline below. */ /* Creates an empty list. IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, GL_RBTREEHASH_LIST. EQUALS_FN is an element comparison function or NULL. HASHCODE_FN is an element hash code function or NULL. DISPOSE_FN is an element disposal function or NULL. ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in the list. The implementation may verify this at runtime. */ /* declared in gl_xlist.h */ extern gl_list_t gl_list_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; /* Likewise. Returns NULL upon out-of-memory. */ extern gl_list_t gl_list_nx_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/; /* Creates a list with given contents. IMPLEMENTATION is one of GL_ARRAY_LIST, GL_CARRAY_LIST, GL_LINKED_LIST, GL_AVLTREE_LIST, GL_RBTREE_LIST, GL_LINKEDHASH_LIST, GL_AVLTREEHASH_LIST, GL_RBTREEHASH_LIST. EQUALS_FN is an element comparison function or NULL. HASHCODE_FN is an element hash code function or NULL. DISPOSE_FN is an element disposal function or NULL. ALLOW_DUPLICATES is false if duplicate elements shall not be allowed in the list. The implementation may verify this at runtime. COUNT is the number of initial elements. CONTENTS[0..COUNT-1] is the initial contents. */ /* declared in gl_xlist.h */ extern gl_list_t gl_list_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ _GL_ATTRIBUTE_RETURNS_NONNULL; /* Likewise. Returns NULL upon out-of-memory. */ extern gl_list_t gl_list_nx_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/; /* Returns the current number of elements in a list. */ extern size_t gl_list_size (gl_list_t list); /* Returns the element value represented by a list node. */ extern const void * gl_list_node_value (gl_list_t list, gl_list_node_t node); /* Replaces the element value represented by a list node. */ /* declared in gl_xlist.h */ extern void gl_list_node_set_value (gl_list_t list, gl_list_node_t node, const void *elt); /* Likewise. Returns 0 upon success, -1 upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern int gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node, const void *elt); /* Returns the node immediately after the given node in the list, or NULL if the given node is the last (rightmost) one in the list. */ extern gl_list_node_t gl_list_next_node (gl_list_t list, gl_list_node_t node); /* Returns the node immediately before the given node in the list, or NULL if the given node is the first (leftmost) one in the list. */ extern gl_list_node_t gl_list_previous_node (gl_list_t list, gl_list_node_t node); /* Returns the first node in the list, or NULL if the list is empty. This function is useful for iterating through the list like this: gl_list_node_t node; for (node = gl_list_first_node (list); node != NULL; node = gl_list_next_node (node)) ... */ extern gl_list_node_t gl_list_first_node (gl_list_t list); /* Returns the last node in the list, or NULL if the list is empty. This function is useful for iterating through the list in backward order, like this: gl_list_node_t node; for (node = gl_list_last_node (list); node != NULL; node = gl_list_previous_node (node)) ... */ extern gl_list_node_t gl_list_last_node (gl_list_t list); /* Returns the element at a given position in the list. POSITION must be >= 0 and < gl_list_size (list). */ extern const void * gl_list_get_at (gl_list_t list, size_t position); /* Returns the element at the first position in the list. The list must be non-empty. */ extern const void * gl_list_get_first (gl_list_t list); /* Returns the element at the last position in the list. The list must be non-empty. */ extern const void * gl_list_get_last (gl_list_t list); /* Replaces the element at a given position in the list. POSITION must be >= 0 and < gl_list_size (list). Returns its node. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_set_at (gl_list_t list, size_t position, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_set_at (gl_list_t list, size_t position, const void *elt); /* Replaces the element at the first position in the list. Returns its node. The list must be non-empty. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_set_first (gl_list_t list, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_set_first (gl_list_t list, const void *elt); /* Replaces the element at the last position in the list. Returns its node. The list must be non-empty. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_set_last (gl_list_t list, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_set_last (gl_list_t list, const void *elt); /* Searches whether an element is already in the list. Returns its node if found, or NULL if not present in the list. */ extern gl_list_node_t gl_list_search (gl_list_t list, const void *elt); /* Searches whether an element is already in the list, at a position >= START_INDEX. Returns its node if found, or NULL if not present in the list. */ extern gl_list_node_t gl_list_search_from (gl_list_t list, size_t start_index, const void *elt); /* Searches whether an element is already in the list, at a position >= START_INDEX and < END_INDEX. Returns its node if found, or NULL if not present in the list. */ extern gl_list_node_t gl_list_search_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt); /* Searches whether an element is already in the list. Returns its position if found, or (size_t)(-1) if not present in the list. */ extern size_t gl_list_indexof (gl_list_t list, const void *elt); /* Searches whether an element is already in the list, at a position >= START_INDEX. Returns its position if found, or (size_t)(-1) if not present in the list. */ extern size_t gl_list_indexof_from (gl_list_t list, size_t start_index, const void *elt); /* Searches whether an element is already in the list, at a position >= START_INDEX and < END_INDEX. Returns its position if found, or (size_t)(-1) if not present in the list. */ extern size_t gl_list_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt); /* Adds an element as the first element of the list. Returns its node. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_first (gl_list_t list, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_add_first (gl_list_t list, const void *elt); /* Adds an element as the last element of the list. Returns its node. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_last (gl_list_t list, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_add_last (gl_list_t list, const void *elt); /* Adds an element before a given element node of the list. Returns its node. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_before (gl_list_t list, gl_list_node_t node, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt); /* Adds an element after a given element node of the list. Returns its node. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_after (gl_list_t list, gl_list_node_t node, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt); /* Adds an element at a given position in the list. POSITION must be >= 0 and <= gl_list_size (list). */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_list_add_at (gl_list_t list, size_t position, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_list_nx_add_at (gl_list_t list, size_t position, const void *elt); /* Removes an element from the list. Returns true. */ extern bool gl_list_remove_node (gl_list_t list, gl_list_node_t node); /* Removes an element at a given position from the list. POSITION must be >= 0 and < gl_list_size (list). Returns true. */ extern bool gl_list_remove_at (gl_list_t list, size_t position); /* Removes the element at the first position from the list. Returns true if it was found and removed, or false if the list was empty. */ extern bool gl_list_remove_first (gl_list_t list); /* Removes the element at the last position from the list. Returns true if it was found and removed, or false if the list was empty. */ extern bool gl_list_remove_last (gl_list_t list); /* Searches and removes an element from the list. Returns true if it was found and removed. */ extern bool gl_list_remove (gl_list_t list, const void *elt); /* Frees an entire list. (But this call does not free the elements of the list. It only invokes the DISPOSE_FN on each of the elements of the list, and only if the list is not a sublist.) */ extern void gl_list_free (gl_list_t list); #endif /* End of inline and gl_xlist.h-defined functions. */ /* --------------------- gl_list_iterator_t Data Type --------------------- */ /* Functions for iterating through a list. */ /* Type of an iterator that traverses a list. This is a fixed-size struct, so that creation of an iterator doesn't need memory allocation on the heap. */ typedef struct { /* For fast dispatch of gl_list_iterator_next. */ const struct gl_list_implementation *vtable; /* For detecting whether the last returned element was removed. */ gl_list_t list; size_t count; /* Other, implementation-private fields. */ void *p; void *q; size_t i; size_t j; } gl_list_iterator_t; #if 0 /* These are defined inline below. */ /* Creates an iterator traversing a list. The list contents must not be modified while the iterator is in use, except for replacing or removing the last returned element. */ extern gl_list_iterator_t gl_list_iterator (gl_list_t list); /* Creates an iterator traversing the element with indices i, start_index <= i < end_index, of a list. The list contents must not be modified while the iterator is in use, except for replacing or removing the last returned element. */ extern gl_list_iterator_t gl_list_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index); /* If there is a next element, stores the next element in *ELTP, stores its node in *NODEP if NODEP is non-NULL, advances the iterator and returns true. Otherwise, returns false. */ extern bool gl_list_iterator_next (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep); /* Frees an iterator. */ extern void gl_list_iterator_free (gl_list_iterator_t *iterator); #endif /* End of inline functions. */ /* ---------------------- Sorted gl_list_t Data Type ---------------------- */ /* The following functions are for lists without duplicates where the order is given by a sort criterion. */ /* Type of function used to compare two elements. Same as for qsort(). NULL denotes pointer comparison. */ typedef int (*gl_listelement_compar_fn) (const void *elt1, const void *elt2); #if 0 /* Unless otherwise specified, these are defined inline below. */ /* Searches whether an element is already in the list. The list is assumed to be sorted with COMPAR. Returns its node if found, or NULL if not present in the list. If the list contains several copies of ELT, the node of the leftmost one is returned. */ extern gl_list_node_t gl_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); /* Searches whether an element is already in the list. The list is assumed to be sorted with COMPAR. Only list elements with indices >= START_INDEX and < END_INDEX are considered; the implementation uses these bounds to minimize the number of COMPAR invocations. Returns its node if found, or NULL if not present in the list. If the list contains several copies of ELT, the node of the leftmost one is returned. */ extern gl_list_node_t gl_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt); /* Searches whether an element is already in the list. The list is assumed to be sorted with COMPAR. Returns its position if found, or (size_t)(-1) if not present in the list. If the list contains several copies of ELT, the position of the leftmost one is returned. */ extern size_t gl_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); /* Searches whether an element is already in the list. The list is assumed to be sorted with COMPAR. Only list elements with indices >= START_INDEX and < END_INDEX are considered; the implementation uses these bounds to minimize the number of COMPAR invocations. Returns its position if found, or (size_t)(-1) if not present in the list. If the list contains several copies of ELT, the position of the leftmost one is returned. */ extern size_t gl_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt); /* Adds an element at the appropriate position in the list. The list is assumed to be sorted with COMPAR. Returns its node. */ /* declared in gl_xlist.h */ extern gl_list_node_t gl_sortedlist_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); /* Likewise. Returns NULL upon out-of-memory. */ _GL_ATTRIBUTE_NODISCARD extern gl_list_node_t gl_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); /* Searches and removes an element from the list. The list is assumed to be sorted with COMPAR. Returns true if it was found and removed. If the list contains several copies of ELT, only the leftmost one is removed. */ extern bool gl_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); #endif /* End of inline and gl_xlist.h-defined functions. */ /* ------------------------ Implementation Details ------------------------ */ struct gl_list_implementation { /* gl_list_t functions. */ gl_list_t (*nx_create_empty) (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates); gl_list_t (*nx_create) (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents); size_t (*size) (gl_list_t list); const void * (*node_value) (gl_list_t list, gl_list_node_t node); int (*node_nx_set_value) (gl_list_t list, gl_list_node_t node, const void *elt); gl_list_node_t (*next_node) (gl_list_t list, gl_list_node_t node); gl_list_node_t (*previous_node) (gl_list_t list, gl_list_node_t node); gl_list_node_t (*first_node) (gl_list_t list); gl_list_node_t (*last_node) (gl_list_t list); const void * (*get_at) (gl_list_t list, size_t position); gl_list_node_t (*nx_set_at) (gl_list_t list, size_t position, const void *elt); gl_list_node_t (*search_from_to) (gl_list_t list, size_t start_index, size_t end_index, const void *elt); size_t (*indexof_from_to) (gl_list_t list, size_t start_index, size_t end_index, const void *elt); gl_list_node_t (*nx_add_first) (gl_list_t list, const void *elt); gl_list_node_t (*nx_add_last) (gl_list_t list, const void *elt); gl_list_node_t (*nx_add_before) (gl_list_t list, gl_list_node_t node, const void *elt); gl_list_node_t (*nx_add_after) (gl_list_t list, gl_list_node_t node, const void *elt); gl_list_node_t (*nx_add_at) (gl_list_t list, size_t position, const void *elt); bool (*remove_node) (gl_list_t list, gl_list_node_t node); bool (*remove_at) (gl_list_t list, size_t position); bool (*remove_elt) (gl_list_t list, const void *elt); void (*list_free) (gl_list_t list); /* gl_list_iterator_t functions. */ gl_list_iterator_t (*iterator) (gl_list_t list); gl_list_iterator_t (*iterator_from_to) (gl_list_t list, size_t start_index, size_t end_index); bool (*iterator_next) (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep); void (*iterator_free) (gl_list_iterator_t *iterator); /* Sorted gl_list_t functions. */ gl_list_node_t (*sortedlist_search) (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); gl_list_node_t (*sortedlist_search_from_to) (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt); size_t (*sortedlist_indexof) (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); size_t (*sortedlist_indexof_from_to) (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt); gl_list_node_t (*sortedlist_nx_add) (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); bool (*sortedlist_remove) (gl_list_t list, gl_listelement_compar_fn compar, const void *elt); }; struct gl_list_impl_base { const struct gl_list_implementation *vtable; gl_listelement_equals_fn equals_fn; gl_listelement_hashcode_fn hashcode_fn; gl_listelement_dispose_fn dispose_fn; bool allow_duplicates; }; /* Define all functions of this file as accesses to the struct gl_list_implementation. */ GL_LIST_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ gl_list_t gl_list_nx_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) { return implementation->nx_create_empty (implementation, equals_fn, hashcode_fn, dispose_fn, allow_duplicates); } GL_LIST_INLINE /*_GL_ATTRIBUTE_DEALLOC (gl_list_free, 1)*/ gl_list_t gl_list_nx_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) { return implementation->nx_create (implementation, equals_fn, hashcode_fn, dispose_fn, allow_duplicates, count, contents); } GL_LIST_INLINE size_t gl_list_size (gl_list_t list) { return ((const struct gl_list_impl_base *) list)->vtable ->size (list); } GL_LIST_INLINE const void * gl_list_node_value (gl_list_t list, gl_list_node_t node) { return ((const struct gl_list_impl_base *) list)->vtable ->node_value (list, node); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE int gl_list_node_nx_set_value (gl_list_t list, gl_list_node_t node, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->node_nx_set_value (list, node, elt); } GL_LIST_INLINE gl_list_node_t gl_list_next_node (gl_list_t list, gl_list_node_t node) { return ((const struct gl_list_impl_base *) list)->vtable ->next_node (list, node); } GL_LIST_INLINE gl_list_node_t gl_list_previous_node (gl_list_t list, gl_list_node_t node) { return ((const struct gl_list_impl_base *) list)->vtable ->previous_node (list, node); } GL_LIST_INLINE gl_list_node_t gl_list_first_node (gl_list_t list) { return ((const struct gl_list_impl_base *) list)->vtable ->first_node (list); } GL_LIST_INLINE gl_list_node_t gl_list_last_node (gl_list_t list) { return ((const struct gl_list_impl_base *) list)->vtable ->last_node (list); } GL_LIST_INLINE const void * gl_list_get_at (gl_list_t list, size_t position) { return ((const struct gl_list_impl_base *) list)->vtable ->get_at (list, position); } GL_LIST_INLINE const void * gl_list_get_first (gl_list_t list) { return gl_list_get_at (list, 0); } GL_LIST_INLINE const void * gl_list_get_last (gl_list_t list) { return gl_list_get_at (list, gl_list_size (list) - 1); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_set_at (gl_list_t list, size_t position, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->nx_set_at (list, position, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_set_first (gl_list_t list, const void *elt) { return gl_list_nx_set_at (list, 0, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_set_last (gl_list_t list, const void *elt) { return gl_list_nx_set_at (list, gl_list_size (list) - 1, elt); } GL_LIST_INLINE gl_list_node_t gl_list_search (gl_list_t list, const void *elt) { size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); return ((const struct gl_list_impl_base *) list)->vtable ->search_from_to (list, 0, size, elt); } GL_LIST_INLINE gl_list_node_t gl_list_search_from (gl_list_t list, size_t start_index, const void *elt) { size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); return ((const struct gl_list_impl_base *) list)->vtable ->search_from_to (list, start_index, size, elt); } GL_LIST_INLINE gl_list_node_t gl_list_search_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->search_from_to (list, start_index, end_index, elt); } GL_LIST_INLINE size_t gl_list_indexof (gl_list_t list, const void *elt) { size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); return ((const struct gl_list_impl_base *) list)->vtable ->indexof_from_to (list, 0, size, elt); } GL_LIST_INLINE size_t gl_list_indexof_from (gl_list_t list, size_t start_index, const void *elt) { size_t size = ((const struct gl_list_impl_base *) list)->vtable->size (list); return ((const struct gl_list_impl_base *) list)->vtable ->indexof_from_to (list, start_index, size, elt); } GL_LIST_INLINE size_t gl_list_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->indexof_from_to (list, start_index, end_index, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_add_first (gl_list_t list, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->nx_add_first (list, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_add_last (gl_list_t list, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->nx_add_last (list, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->nx_add_before (list, node, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->nx_add_after (list, node, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_list_nx_add_at (gl_list_t list, size_t position, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->nx_add_at (list, position, elt); } GL_LIST_INLINE bool gl_list_remove_node (gl_list_t list, gl_list_node_t node) { return ((const struct gl_list_impl_base *) list)->vtable ->remove_node (list, node); } GL_LIST_INLINE bool gl_list_remove_at (gl_list_t list, size_t position) { return ((const struct gl_list_impl_base *) list)->vtable ->remove_at (list, position); } GL_LIST_INLINE bool gl_list_remove_first (gl_list_t list) { size_t size = gl_list_size (list); if (size > 0) return gl_list_remove_at (list, 0); else return false; } GL_LIST_INLINE bool gl_list_remove_last (gl_list_t list) { size_t size = gl_list_size (list); if (size > 0) return gl_list_remove_at (list, size - 1); else return false; } GL_LIST_INLINE bool gl_list_remove (gl_list_t list, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->remove_elt (list, elt); } GL_LIST_INLINE void gl_list_free (gl_list_t list) { ((const struct gl_list_impl_base *) list)->vtable->list_free (list); } GL_LIST_INLINE gl_list_iterator_t gl_list_iterator (gl_list_t list) { return ((const struct gl_list_impl_base *) list)->vtable ->iterator (list); } GL_LIST_INLINE gl_list_iterator_t gl_list_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) { return ((const struct gl_list_impl_base *) list)->vtable ->iterator_from_to (list, start_index, end_index); } GL_LIST_INLINE bool gl_list_iterator_next (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep) { return iterator->vtable->iterator_next (iterator, eltp, nodep); } GL_LIST_INLINE void gl_list_iterator_free (gl_list_iterator_t *iterator) { iterator->vtable->iterator_free (iterator); } GL_LIST_INLINE gl_list_node_t gl_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->sortedlist_search (list, compar, elt); } GL_LIST_INLINE gl_list_node_t gl_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->sortedlist_search_from_to (list, compar, start_index, end_index, elt); } GL_LIST_INLINE size_t gl_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->sortedlist_indexof (list, compar, elt); } GL_LIST_INLINE size_t gl_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t start_index, size_t end_index, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->sortedlist_indexof_from_to (list, compar, start_index, end_index, elt); } _GL_ATTRIBUTE_NODISCARD GL_LIST_INLINE gl_list_node_t gl_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->sortedlist_nx_add (list, compar, elt); } GL_LIST_INLINE bool gl_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { return ((const struct gl_list_impl_base *) list)->vtable ->sortedlist_remove (list, compar, elt); } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* _GL_LIST_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/time_rz.c��������������������������������������������������������������������������0000644�0000000�0000000�00000020652�14226564451�012505� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Time zone functions such as tzalloc and localtime_rz Copyright 2015-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* Although this module is not thread-safe, any races should be fairly rare and reasonably benign. For complete thread-safety, use a C library with a working timezone_t type, so that this module is not needed. */ #include <config.h> #include <time.h> #include <errno.h> #include <stdbool.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include "flexmember.h" #include "idx.h" #include "time-internal.h" /* The approximate size to use for small allocation requests. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; /* Minimum size of the ABBRS member of struct tm_zone. ABBRS is larger only in the unlikely case where an abbreviation longer than this is used. */ enum { ABBR_SIZE_MIN = DEFAULT_MXFAST - offsetof (struct tm_zone, abbrs) }; /* Magic cookie timezone_t value, for local time. It differs from NULL and from all other timezone_t values. Only the address matters; the pointer is never dereferenced. */ static timezone_t const local_tz = (timezone_t) 1; /* Copy to ABBRS the abbreviation at ABBR with size ABBR_SIZE (this includes its trailing null byte). Append an extra null byte to mark the end of ABBRS. */ static void extend_abbrs (char *abbrs, char const *abbr, size_t abbr_size) { memcpy (abbrs, abbr, abbr_size); abbrs[abbr_size] = '\0'; } /* Return a newly allocated time zone for NAME, or NULL on failure. A null NAME stands for wall clock time (which is like unset TZ). */ timezone_t tzalloc (char const *name) { size_t name_size = name ? strlen (name) + 1 : 0; size_t abbr_size = name_size < ABBR_SIZE_MIN ? ABBR_SIZE_MIN : name_size + 1; timezone_t tz = malloc (FLEXSIZEOF (struct tm_zone, abbrs, abbr_size)); if (tz) { tz->next = NULL; #if HAVE_TZNAME && !HAVE_STRUCT_TM_TM_ZONE tz->tzname_copy[0] = tz->tzname_copy[1] = NULL; #endif tz->tz_is_set = !!name; tz->abbrs[0] = '\0'; if (name) extend_abbrs (tz->abbrs, name, name_size); } return tz; } /* Save into TZ any nontrivial time zone abbreviation used by TM, and update *TM (if HAVE_STRUCT_TM_TM_ZONE) or *TZ (if !HAVE_STRUCT_TM_TM_ZONE && HAVE_TZNAME) if they use the abbreviation. Return true if successful, false (setting errno) otherwise. */ static bool save_abbr (timezone_t tz, struct tm *tm) { #if HAVE_STRUCT_TM_TM_ZONE || HAVE_TZNAME char const *zone = NULL; char *zone_copy = (char *) ""; # if HAVE_TZNAME int tzname_index = -1; # endif # if HAVE_STRUCT_TM_TM_ZONE zone = tm->tm_zone; # endif # if HAVE_TZNAME if (! (zone && *zone) && 0 <= tm->tm_isdst) { tzname_index = tm->tm_isdst != 0; zone = tzname[tzname_index]; } # endif /* No need to replace null zones, or zones within the struct tm. */ if (!zone || ((char *) tm <= zone && zone < (char *) (tm + 1))) return true; if (*zone) { zone_copy = tz->abbrs; while (strcmp (zone_copy, zone) != 0) { if (! (*zone_copy || (zone_copy == tz->abbrs && tz->tz_is_set))) { idx_t zone_size = strlen (zone) + 1; if (zone_size < tz->abbrs + ABBR_SIZE_MIN - zone_copy) extend_abbrs (zone_copy, zone, zone_size); else { tz = tz->next = tzalloc (zone); if (!tz) return false; tz->tz_is_set = 0; zone_copy = tz->abbrs; } break; } zone_copy += strlen (zone_copy) + 1; if (!*zone_copy && tz->next) { tz = tz->next; zone_copy = tz->abbrs; } } } /* Replace the zone name so that its lifetime matches that of TZ. */ # if HAVE_STRUCT_TM_TM_ZONE tm->tm_zone = zone_copy; # else if (0 <= tzname_index) tz->tzname_copy[tzname_index] = zone_copy; # endif #endif return true; } /* Free a time zone. */ void tzfree (timezone_t tz) { if (tz != local_tz) while (tz) { timezone_t next = tz->next; free (tz); tz = next; } } /* Get and set the TZ environment variable. These functions can be overridden by programs like Emacs that manage their own environment. */ #ifndef getenv_TZ static char * getenv_TZ (void) { return getenv ("TZ"); } #endif #ifndef setenv_TZ static int setenv_TZ (char const *tz) { return tz ? setenv ("TZ", tz, 1) : unsetenv ("TZ"); } #endif /* Change the environment to match the specified timezone_t value. Return true if successful, false (setting errno) otherwise. */ static bool change_env (timezone_t tz) { if (setenv_TZ (tz->tz_is_set ? tz->abbrs : NULL) != 0) return false; tzset (); return true; } /* Temporarily set the time zone to TZ, which must not be null. Return LOCAL_TZ if the time zone setting is already correct. Otherwise return a newly allocated time zone representing the old setting, or NULL (setting errno) on failure. */ static timezone_t set_tz (timezone_t tz) { char *env_tz = getenv_TZ (); if (env_tz ? tz->tz_is_set && strcmp (tz->abbrs, env_tz) == 0 : !tz->tz_is_set) return local_tz; else { timezone_t old_tz = tzalloc (env_tz); if (!old_tz) return old_tz; if (! change_env (tz)) { int saved_errno = errno; tzfree (old_tz); errno = saved_errno; return NULL; } return old_tz; } } /* Restore an old setting returned by set_tz. It must not be null. Return true (preserving errno) if successful, false (setting errno) otherwise. */ static bool revert_tz (timezone_t tz) { if (tz == local_tz) return true; else { int saved_errno = errno; bool ok = change_env (tz); if (!ok) saved_errno = errno; tzfree (tz); errno = saved_errno; return ok; } } /* Use time zone TZ to compute localtime_r (T, TM). */ struct tm * localtime_rz (timezone_t tz, time_t const *t, struct tm *tm) { #ifdef HAVE_LOCALTIME_INFLOOP_BUG /* The -67768038400665599 comes from: https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html On affected platforms the greatest POSIX-compatible time_t value that could return nonnull is 67768036191766798 (when TZ="XXX24:59:59" it resolves to the year 2**31 - 1 + 1900, on 12-31 at 23:59:59), so test for that too while we're in the neighborhood. */ if (! (-67768038400665599 <= *t && *t <= 67768036191766798)) { errno = EOVERFLOW; return NULL; } #endif if (!tz) return gmtime_r (t, tm); else { timezone_t old_tz = set_tz (tz); if (old_tz) { bool abbr_saved = localtime_r (t, tm) && save_abbr (tz, tm); if (revert_tz (old_tz) && abbr_saved) return tm; } return NULL; } } /* Use time zone TZ to compute mktime (TM). */ time_t mktime_z (timezone_t tz, struct tm *tm) { if (!tz) return timegm (tm); else { timezone_t old_tz = set_tz (tz); if (old_tz) { struct tm tm_1; tm_1.tm_sec = tm->tm_sec; tm_1.tm_min = tm->tm_min; tm_1.tm_hour = tm->tm_hour; tm_1.tm_mday = tm->tm_mday; tm_1.tm_mon = tm->tm_mon; tm_1.tm_year = tm->tm_year; tm_1.tm_yday = -1; tm_1.tm_isdst = tm->tm_isdst; time_t t = mktime (&tm_1); bool ok = 0 <= tm_1.tm_yday; #if HAVE_STRUCT_TM_TM_ZONE || HAVE_TZNAME ok = ok && save_abbr (tz, &tm_1); #endif if (revert_tz (old_tz) && ok) { *tm = tm_1; return t; } } return -1; } } ��������������������������������������������������������������������������������������recutils-1.9/lib/timespec.c�������������������������������������������������������������������������0000644�0000000�0000000�00000001522�14226564451�012640� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <timespec.h>. Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define _GL_TIMESPEC_INLINE _GL_EXTERN_INLINE #include "timespec.h" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/dirname-lgpl.c���������������������������������������������������������������������0000644�0000000�0000000�00000006142�14226564447�013412� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* dirname.c -- return all but the last element in a file name Copyright (C) 1990, 1998, 2000-2001, 2003-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "dirname.h" #include <stdlib.h> #include <string.h> /* Return the length of the prefix of FILE that will be used by dir_name. If FILE is in the working directory, this returns zero even though 'dir_name (FILE)' will return ".". Works properly even if there are trailing slashes (by effectively ignoring them). */ size_t dir_len (char const *file) { size_t prefix_length = FILE_SYSTEM_PREFIX_LEN (file); size_t length; /* Advance prefix_length beyond important leading slashes. */ prefix_length += (prefix_length != 0 ? (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && ISSLASH (file[prefix_length])) : (ISSLASH (file[0]) ? ((DOUBLE_SLASH_IS_DISTINCT_ROOT && ISSLASH (file[1]) && ! ISSLASH (file[2]) ? 2 : 1)) : 0)); /* Strip the basename and any redundant slashes before it. */ for (length = last_component (file) - file; prefix_length < length; length--) if (! ISSLASH (file[length - 1])) break; return length; } /* In general, we can't use the builtin 'dirname' function if available, since it has different meanings in different environments. In some environments the builtin 'dirname' modifies its argument. Return the leading directories part of FILE, allocated with malloc. Works properly even if there are trailing slashes (by effectively ignoring them). Return NULL on failure. If lstat (FILE) would succeed, then { chdir (dir_name (FILE)); lstat (base_name (FILE)); } will access the same file. Likewise, if the sequence { chdir (dir_name (FILE)); rename (base_name (FILE), "foo"); } succeeds, you have renamed FILE to "foo" in the same directory FILE was in. */ char * mdir_name (char const *file) { size_t length = dir_len (file); bool append_dot = (length == 0 || (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && length == FILE_SYSTEM_PREFIX_LEN (file) && file[2] != '\0' && ! ISSLASH (file[2]))); char *dir = malloc (length + append_dot + 1); if (!dir) return NULL; memcpy (dir, file, length); if (append_dot) dir[length++] = '.'; dir[length] = '\0'; return dir; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/printf-args.c����������������������������������������������������������������������0000644�0000000�0000000�00000014600�14226564450�013263� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2005-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be defined. STATIC Set to 'static' to declare the function static. */ #ifndef PRINTF_FETCHARGS # include <config.h> #endif /* Specification. */ #ifndef PRINTF_FETCHARGS # include "printf-args.h" #endif #ifdef STATIC STATIC #endif int PRINTF_FETCHARGS (va_list args, arguments *a) { size_t i; argument *ap; for (i = 0, ap = &a->arg[0]; i < a->count; i++, ap++) switch (ap->type) { case TYPE_SCHAR: ap->a.a_schar = va_arg (args, /*signed char*/ int); break; case TYPE_UCHAR: ap->a.a_uchar = va_arg (args, /*unsigned char*/ int); break; case TYPE_SHORT: ap->a.a_short = va_arg (args, /*short*/ int); break; case TYPE_USHORT: ap->a.a_ushort = va_arg (args, /*unsigned short*/ int); break; case TYPE_INT: ap->a.a_int = va_arg (args, int); break; case TYPE_UINT: ap->a.a_uint = va_arg (args, unsigned int); break; case TYPE_LONGINT: ap->a.a_longint = va_arg (args, long int); break; case TYPE_ULONGINT: ap->a.a_ulongint = va_arg (args, unsigned long int); break; case TYPE_LONGLONGINT: ap->a.a_longlongint = va_arg (args, long long int); break; case TYPE_ULONGLONGINT: ap->a.a_ulonglongint = va_arg (args, unsigned long long int); break; case TYPE_DOUBLE: ap->a.a_double = va_arg (args, double); break; case TYPE_LONGDOUBLE: ap->a.a_longdouble = va_arg (args, long double); break; case TYPE_CHAR: ap->a.a_char = va_arg (args, int); break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: /* Although ISO C 99 7.24.1.(2) says that wint_t is "unchanged by default argument promotions", this is not the case in mingw32, where wint_t is 'unsigned short'. */ ap->a.a_wide_char = (sizeof (wint_t) < sizeof (int) ? (wint_t) va_arg (args, int) : va_arg (args, wint_t)); break; #endif case TYPE_STRING: ap->a.a_string = va_arg (args, const char *); /* A null pointer is an invalid argument for "%s", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_string == NULL) ap->a.a_string = "(NULL)"; break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: ap->a.a_wide_string = va_arg (args, const wchar_t *); /* A null pointer is an invalid argument for "%ls", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_wide_string == NULL) { static const wchar_t wide_null_string[] = { (wchar_t)'(', (wchar_t)'N', (wchar_t)'U', (wchar_t)'L', (wchar_t)'L', (wchar_t)')', (wchar_t)0 }; ap->a.a_wide_string = wide_null_string; } break; #endif case TYPE_POINTER: ap->a.a_pointer = va_arg (args, void *); break; case TYPE_COUNT_SCHAR_POINTER: ap->a.a_count_schar_pointer = va_arg (args, signed char *); break; case TYPE_COUNT_SHORT_POINTER: ap->a.a_count_short_pointer = va_arg (args, short *); break; case TYPE_COUNT_INT_POINTER: ap->a.a_count_int_pointer = va_arg (args, int *); break; case TYPE_COUNT_LONGINT_POINTER: ap->a.a_count_longint_pointer = va_arg (args, long int *); break; case TYPE_COUNT_LONGLONGINT_POINTER: ap->a.a_count_longlongint_pointer = va_arg (args, long long int *); break; #if ENABLE_UNISTDIO /* The unistdio extensions. */ case TYPE_U8_STRING: ap->a.a_u8_string = va_arg (args, const uint8_t *); /* A null pointer is an invalid argument for "%U", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u8_string == NULL) { static const uint8_t u8_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u8_string = u8_null_string; } break; case TYPE_U16_STRING: ap->a.a_u16_string = va_arg (args, const uint16_t *); /* A null pointer is an invalid argument for "%lU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u16_string == NULL) { static const uint16_t u16_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u16_string = u16_null_string; } break; case TYPE_U32_STRING: ap->a.a_u32_string = va_arg (args, const uint32_t *); /* A null pointer is an invalid argument for "%llU", but in practice it occurs quite frequently in printf statements that produce debug output. Use a fallback in this case. */ if (ap->a.a_u32_string == NULL) { static const uint32_t u32_null_string[] = { '(', 'N', 'U', 'L', 'L', ')', 0 }; ap->a.a_u32_string = u32_null_string; } break; #endif default: /* Unknown type. */ return -1; } return 0; } ��������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/sigaction.c������������������������������������������������������������������������0000644�0000000�0000000�00000016136�14226564451�013016� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible signal blocking. Copyright (C) 2008-2022 Free Software Foundation, Inc. Written by Eric Blake <ebb9@byu.net>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <signal.h> #include <errno.h> #include <stdint.h> #include <stdlib.h> /* This implementation of sigaction is tailored to native Windows behavior: signal() has SysV semantics (ie. the handler is uninstalled before it is invoked). This is an inherent data race if an asynchronous signal is sent twice in a row before we can reinstall our handler, but there's nothing we can do about it. Meanwhile, sigprocmask() is not present, and while we can use the gnulib replacement to provide critical sections, it too suffers from potential data races in the face of an ill-timed asynchronous signal. And we compound the situation by reading static storage in a signal handler, which POSIX warns is not generically async-signal-safe. Oh well. Additionally: - We don't implement SA_NOCLDSTOP or SA_NOCLDWAIT, because SIGCHLD is not defined. - We don't implement SA_ONSTACK, because sigaltstack() is not present. - We ignore SA_RESTART, because blocking native Windows API calls are not interrupted anyway when an asynchronous signal occurs, and the MSVCRT runtime never sets errno to EINTR. - We don't implement SA_SIGINFO because it is impossible to do so portably. POSIX states that an application should not mix signal() and sigaction(). We support the use of signal() within the gnulib sigprocmask() substitute, but all other application code linked with this module should stick with only sigaction(). */ /* Check some of our assumptions. */ #if defined SIGCHLD || defined HAVE_SIGALTSTACK || defined HAVE_SIGINTERRUPT # error "Revisit the assumptions made in the sigaction module" #endif /* Out-of-range substitutes make a good fallback for uncatchable signals. */ #ifndef SIGKILL # define SIGKILL (-1) #endif #ifndef SIGSTOP # define SIGSTOP (-1) #endif /* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias for the signal SIGABRT. Only one signal handler is stored for both SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */ #if defined _WIN32 && ! defined __CYGWIN__ # undef SIGABRT_COMPAT # define SIGABRT_COMPAT 6 #endif /* A signal handler. */ typedef void (*handler_t) (int signal); /* Set of current actions. If sa_handler for an entry is NULL, then that signal is not currently handled by the sigaction handler. */ static struct sigaction volatile action_array[NSIG] /* = 0 */; /* Signal handler that is installed for signals. */ static void sigaction_handler (int sig) { handler_t handler; sigset_t mask; sigset_t oldmask; int saved_errno = errno; if (sig < 0 || NSIG <= sig || !action_array[sig].sa_handler) { /* Unexpected situation; be careful to avoid recursive abort. */ if (sig == SIGABRT) signal (SIGABRT, SIG_DFL); abort (); } /* Reinstall the signal handler when required; otherwise update the bookkeeping so that the user's handler may call sigaction and get accurate results. We know the signal isn't currently blocked, or we wouldn't be in its handler, therefore we know that we are not interrupting a sigaction() call. There is a race where any asynchronous instance of the same signal occurring before we reinstall the handler will trigger the default handler; oh well. */ handler = action_array[sig].sa_handler; if ((action_array[sig].sa_flags & SA_RESETHAND) == 0) signal (sig, sigaction_handler); else action_array[sig].sa_handler = NULL; /* Block appropriate signals. */ mask = action_array[sig].sa_mask; if ((action_array[sig].sa_flags & SA_NODEFER) == 0) sigaddset (&mask, sig); sigprocmask (SIG_BLOCK, &mask, &oldmask); /* Invoke the user's handler, then restore prior mask. */ errno = saved_errno; handler (sig); saved_errno = errno; sigprocmask (SIG_SETMASK, &oldmask, NULL); errno = saved_errno; } /* Change and/or query the action that will be taken on delivery of signal SIG. If not NULL, ACT describes the new behavior. If not NULL, OACT is set to the prior behavior. Return 0 on success, or set errno and return -1 on failure. */ int sigaction (int sig, const struct sigaction *restrict act, struct sigaction *restrict oact) { sigset_t mask; sigset_t oldmask; int saved_errno; if (sig < 0 || NSIG <= sig || sig == SIGKILL || sig == SIGSTOP || (act && act->sa_handler == SIG_ERR)) { errno = EINVAL; return -1; } #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif /* POSIX requires sigaction() to be async-signal-safe. In other words, if an asynchronous signal can occur while we are anywhere inside this function, the user's handler could then call sigaction() recursively and expect consistent results. We meet this rule by using sigprocmask to block all signals before modifying any data structure that could be read from a signal handler; this works since we know that the gnulib sigprocmask replacement does not try to use sigaction() from its handler. */ if (!act && !oact) return 0; sigfillset (&mask); sigprocmask (SIG_BLOCK, &mask, &oldmask); if (oact) { if (action_array[sig].sa_handler) *oact = action_array[sig]; else { /* Safe to change the handler at will here, since all signals are currently blocked. */ oact->sa_handler = signal (sig, SIG_DFL); if (oact->sa_handler == SIG_ERR) goto failure; signal (sig, oact->sa_handler); oact->sa_flags = SA_RESETHAND | SA_NODEFER; sigemptyset (&oact->sa_mask); } } if (act) { /* Safe to install the handler before updating action_array, since all signals are currently blocked. */ if (act->sa_handler == SIG_DFL || act->sa_handler == SIG_IGN) { if (signal (sig, act->sa_handler) == SIG_ERR) goto failure; action_array[sig].sa_handler = NULL; } else { if (signal (sig, sigaction_handler) == SIG_ERR) goto failure; action_array[sig] = *act; } } sigprocmask (SIG_SETMASK, &oldmask, NULL); return 0; failure: saved_errno = errno; sigprocmask (SIG_SETMASK, &oldmask, NULL); errno = saved_errno; return -1; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fd-safer.c�������������������������������������������������������������������������0000644�0000000�0000000�00000003003�14226564446�012516� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return a safer copy of a file descriptor. Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include "unistd-safer.h" #include <errno.h> #include <unistd.h> /* Return FD, unless FD would be a copy of standard input, output, or error; in that case, return a duplicate of FD, closing FD. On failure to duplicate, close FD, set errno, and return -1. Preserve errno if FD is negative, so that the caller can always inspect errno when the returned value is negative. This function is usefully wrapped around functions that return file descriptors, e.g., fd_safer (open ("file", O_RDONLY)). */ int fd_safer (int fd) { if (STDIN_FILENO <= fd && fd <= STDERR_FILENO) { int f = dup_safer (fd); int e = errno; close (fd); errno = e; fd = f; } return fd; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/parse-datetime.h�������������������������������������������������������������������0000644�0000000�0000000�00000002400�14226564450�013733� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse a string into an internal timestamp. Copyright (C) 1995, 1997-1998, 2003-2004, 2007, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stdbool.h> #include <time.h> bool parse_datetime (struct timespec *restrict, char const *, struct timespec const *); /* parse_datetime2 flag: if set, print debug/progress information to STDERR */ #define PARSE_DATETIME_DEBUG 1 /* same as above, supporting additional flags */ bool parse_datetime2 (struct timespec *restrict, char const *, struct timespec const *, unsigned int flags, timezone_t, char const *); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fd-hook.h��������������������������������������������������������������������������0000644�0000000�0000000�00000011364�14226564447�012375� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hook for making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef FD_HOOK_H #define FD_HOOK_H #ifdef __cplusplus extern "C" { #endif /* Currently, this entire code is only needed for the handling of sockets on native Windows platforms. */ #if WINDOWS_SOCKETS /* Type of function that closes FD. */ typedef int (*gl_close_fn) (int fd); /* Type of function that applies a control request to FD. */ typedef int (*gl_ioctl_fn) (int fd, int request, void *arg); /* An element of the list of file descriptor hooks. In CLOS (Common Lisp Object System) speak, it consists of an "around" method for the close() function and an "around" method for the ioctl() function. The fields of this structure are considered private. */ struct fd_hook { /* Doubly linked list. */ struct fd_hook *private_next; struct fd_hook *private_prev; /* Function that treats the types of FD that it knows about and calls execute_close_hooks (REMAINING_LIST, PRIMARY, FD) as a fallback. */ int (*private_close_fn) (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Function that treats the types of FD that it knows about and calls execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) as a fallback. */ int (*private_ioctl_fn) (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); }; /* This type of function closes FD, applying special knowledge for the FD types it knows about, and calls execute_close_hooks (REMAINING_LIST, PRIMARY, FD) for the other FD types. In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, and PRIMARY is the "primary" method for close(). */ typedef int (*close_hook_fn) (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Execute the close hooks in REMAINING_LIST, with PRIMARY as "primary" method. Return 0 or -1, like close() would do. */ extern int execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, int fd); /* Execute all close hooks, with PRIMARY as "primary" method. Return 0 or -1, like close() would do. */ extern int execute_all_close_hooks (gl_close_fn primary, int fd); /* This type of function applies a control request to FD, applying special knowledge for the FD types it knows about, and calls execute_ioctl_hooks (REMAINING_LIST, PRIMARY, FD, REQUEST, ARG) for the other FD types. In CLOS speak, REMAINING_LIST is the remaining list of "around" methods, and PRIMARY is the "primary" method for ioctl(). */ typedef int (*ioctl_hook_fn) (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); /* Execute the ioctl hooks in REMAINING_LIST, with PRIMARY as "primary" method. Return 0 or -1, like ioctl() would do. */ extern int execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg); /* Execute all ioctl hooks, with PRIMARY as "primary" method. Return 0 or -1, like ioctl() would do. */ extern int execute_all_ioctl_hooks (gl_ioctl_fn primary, int fd, int request, void *arg); /* Add a function pair to the list of file descriptor hooks. CLOSE_HOOK and IOCTL_HOOK may be NULL, indicating no change. The LINK variable points to a piece of memory which is guaranteed to be accessible until the corresponding call to unregister_fd_hook. */ extern void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link); /* Removes a hook from the list of file descriptor hooks. */ extern void unregister_fd_hook (struct fd_hook *link); #endif #ifdef __cplusplus } #endif #endif /* FD_HOOK_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/version-etc.h����������������������������������������������������������������������0000644�0000000�0000000�00000005340�14226564451�013274� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Print --version and bug-reporting information in a consistent format. Copyright (C) 1999, 2003, 2005, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #ifndef VERSION_ETC_H # define VERSION_ETC_H 1 # include <stdarg.h> # include <stdio.h> # ifdef __cplusplus extern "C" { # endif extern const char version_etc_copyright[]; /* The three functions below display the --version information in the standard way: command and package names, package version, followed by a short GPLv3+ notice and a list of up to 10 author names. If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of the program. The formats are therefore: PACKAGE VERSION or COMMAND_NAME (PACKAGE) VERSION. The functions differ in the way they are passed author names: */ /* N_AUTHORS names are supplied in array AUTHORS. */ extern void version_etc_arn (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors, size_t n_authors); /* Names are passed in the NULL-terminated array AUTHORS. */ extern void version_etc_ar (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors); /* Names are passed in the NULL-terminated va_list. */ extern void version_etc_va (FILE *stream, const char *command_name, const char *package, const char *version, va_list authors); /* Names are passed as separate arguments, with an additional NULL argument at the end. */ extern void version_etc (FILE *stream, const char *command_name, const char *package, const char *version, /* const char *author1, ..., NULL */ ...) _GL_ATTRIBUTE_SENTINEL ((0)); /* Display the usual "Report bugs to" stanza. */ extern void emit_bug_reporting_address (void); # ifdef __cplusplus } # endif #endif /* VERSION_ETC_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/wctomb.c���������������������������������������������������������������������������0000644�0000000�0000000�00000001645�14226564451�012330� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. Copyright (C) 2011-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include "wctomb-impl.h" �������������������������������������������������������������������������������������������recutils-1.9/lib/full-write.h�����������������������������������������������������������������������0000644�0000000�0000000�00000002210�14226564447�013126� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to write() that writes all it is asked to write. Copyright (C) 2002-2003, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stddef.h> #ifdef __cplusplus extern "C" { #endif /* Write COUNT bytes at BUF to descriptor FD, retrying if interrupted or if partial writes occur. Return the number of bytes successfully written, setting errno if that is less than COUNT. */ extern size_t full_write (int fd, const void *buf, size_t count); #ifdef __cplusplus } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fwriting.c�������������������������������������������������������������������������0000644�0000000�0000000�00000005435�14226564447�012674� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Retrieve information about a FILE stream. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "fwriting.h" #include "stdio-impl.h" /* This file is not used on systems that have the __fwriting function, namely glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 29, musl libc. */ bool fwriting (FILE *fp) { /* Most systems provide FILE as a struct and the necessary bitmask in <stdio.h>, because they need it for implementing getc() and putc() as fast macros. */ #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ return (fp->_flags & (_IO_NO_READS | _IO_CURRENTLY_PUTTING)) != 0; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ return (fp_->_flags & __SWR) != 0; #elif defined __EMX__ /* emx+gcc */ return (fp->_flags & _IOWRT) != 0; #elif defined __minix /* Minix */ return (fp->_flags & _IOWRITING) != 0; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ return (fp_->_flag & _IOWRT) != 0; #elif defined __UCLIBC__ /* uClibc */ return (fp->__modeflags & __FLAG_WRITING) != 0; #elif defined __QNX__ /* QNX */ return ((fp->_Mode & 0x1 /* _MOPENR */) == 0 || (fp->_Mode & 0x2000 /* _MWRITE */) != 0); #elif defined __MINT__ /* Atari FreeMiNT */ if (!fp->__mode.__read) return 1; if (!fp->__mode.__write) return 0; # ifdef _IO_CURRENTLY_PUTTING /* Flag added on 2009-02-28 */ return (fp->__flags & _IO_CURRENTLY_PUTTING) != 0; # else return (fp->__buffer < fp->__put_limit /*|| fp->__bufp == fp->__get_limit ??*/); # endif #elif defined EPLAN9 /* Plan9 */ if (fp->state == 0 /* CLOSED */ || fp->state == 3 /* RD */) return 0; return (fp->state == 4 /* WR */ && (fp->bufl == 0 || fp->wp < fp->rp)); #else # error "Please port gnulib fwriting.c to your platform!" #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/hash.c�����������������������������������������������������������������������������0000644�0000000�0000000�00000100127�14226564446�011757� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hash - hashing table processing. Copyright (C) 1998-2004, 2006-2007, 2009-2022 Free Software Foundation, Inc. Written by Jim Meyering, 1992. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* A generic hash table package. */ /* Define USE_OBSTACK to 1 if you want the allocator to use obstacks instead of malloc. If you change USE_OBSTACK, you have to recompile! */ #include <config.h> #include "hash.h" #include "bitrotate.h" #include "xalloc-oversized.h" #include <stdint.h> #include <stdio.h> #include <stdlib.h> #if USE_OBSTACK # include "obstack.h" # ifndef obstack_chunk_alloc # define obstack_chunk_alloc malloc # endif # ifndef obstack_chunk_free # define obstack_chunk_free free # endif #endif struct hash_entry { void *data; struct hash_entry *next; }; struct hash_table { /* The array of buckets starts at BUCKET and extends to BUCKET_LIMIT-1, for a possibility of N_BUCKETS. Among those, N_BUCKETS_USED buckets are not empty, there are N_ENTRIES active entries in the table. */ struct hash_entry *bucket; struct hash_entry const *bucket_limit; size_t n_buckets; size_t n_buckets_used; size_t n_entries; /* Tuning arguments, kept in a physically separate structure. */ const Hash_tuning *tuning; /* Three functions are given to 'hash_initialize', see the documentation block for this function. In a word, HASHER randomizes a user entry into a number up from 0 up to some maximum minus 1; COMPARATOR returns true if two user entries compare equally; and DATA_FREER is the cleanup function for a user entry. */ Hash_hasher hasher; Hash_comparator comparator; Hash_data_freer data_freer; /* A linked list of freed struct hash_entry structs. */ struct hash_entry *free_entry_list; #if USE_OBSTACK /* Whenever obstacks are used, it is possible to allocate all overflowed entries into a single stack, so they all can be freed in a single operation. It is not clear if the speedup is worth the trouble. */ struct obstack entry_stack; #endif }; /* A hash table contains many internal entries, each holding a pointer to some user-provided data (also called a user entry). An entry indistinctly refers to both the internal entry and its associated user entry. A user entry contents may be hashed by a randomization function (the hashing function, or just "hasher" for short) into a number (or "slot") between 0 and the current table size. At each slot position in the hash table, starts a linked chain of entries for which the user data all hash to this slot. A bucket is the collection of all entries hashing to the same slot. A good "hasher" function will distribute entries rather evenly in buckets. In the ideal case, the length of each bucket is roughly the number of entries divided by the table size. Finding the slot for a data is usually done in constant time by the "hasher", and the later finding of a precise entry is linear in time with the size of the bucket. Consequently, a larger hash table size (that is, a larger number of buckets) is prone to yielding shorter chains, *given* the "hasher" function behaves properly. Long buckets slow down the lookup algorithm. One might use big hash table sizes in hope to reduce the average length of buckets, but this might become inordinate, as unused slots in the hash table take some space. The best bet is to make sure you are using a good "hasher" function (beware that those are not that easy to write! :-), and to use a table size larger than the actual number of entries. */ /* If an insertion makes the ratio of nonempty buckets to table size larger than the growth threshold (a number between 0.0 and 1.0), then increase the table size by multiplying by the growth factor (a number greater than 1.0). The growth threshold defaults to 0.8, and the growth factor defaults to 1.414, meaning that the table will have doubled its size every second time 80% of the buckets get used. */ #define DEFAULT_GROWTH_THRESHOLD 0.8f #define DEFAULT_GROWTH_FACTOR 1.414f /* If a deletion empties a bucket and causes the ratio of used buckets to table size to become smaller than the shrink threshold (a number between 0.0 and 1.0), then shrink the table by multiplying by the shrink factor (a number greater than the shrink threshold but smaller than 1.0). The shrink threshold and factor default to 0.0 and 1.0, meaning that the table never shrinks. */ #define DEFAULT_SHRINK_THRESHOLD 0.0f #define DEFAULT_SHRINK_FACTOR 1.0f /* Use this to initialize or reset a TUNING structure to some sensible values. */ static const Hash_tuning default_tuning = { DEFAULT_SHRINK_THRESHOLD, DEFAULT_SHRINK_FACTOR, DEFAULT_GROWTH_THRESHOLD, DEFAULT_GROWTH_FACTOR, false }; /* Information and lookup. */ size_t hash_get_n_buckets (const Hash_table *table) { return table->n_buckets; } size_t hash_get_n_buckets_used (const Hash_table *table) { return table->n_buckets_used; } size_t hash_get_n_entries (const Hash_table *table) { return table->n_entries; } size_t hash_get_max_bucket_length (const Hash_table *table) { struct hash_entry const *bucket; size_t max_bucket_length = 0; for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { struct hash_entry const *cursor = bucket; size_t bucket_length = 1; while (cursor = cursor->next, cursor) bucket_length++; if (bucket_length > max_bucket_length) max_bucket_length = bucket_length; } } return max_bucket_length; } bool hash_table_ok (const Hash_table *table) { struct hash_entry const *bucket; size_t n_buckets_used = 0; size_t n_entries = 0; for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { struct hash_entry const *cursor = bucket; /* Count bucket head. */ n_buckets_used++; n_entries++; /* Count bucket overflow. */ while (cursor = cursor->next, cursor) n_entries++; } } if (n_buckets_used == table->n_buckets_used && n_entries == table->n_entries) return true; return false; } void hash_print_statistics (const Hash_table *table, FILE *stream) { size_t n_entries = hash_get_n_entries (table); size_t n_buckets = hash_get_n_buckets (table); size_t n_buckets_used = hash_get_n_buckets_used (table); size_t max_bucket_length = hash_get_max_bucket_length (table); fprintf (stream, "# entries: %lu\n", (unsigned long int) n_entries); fprintf (stream, "# buckets: %lu\n", (unsigned long int) n_buckets); fprintf (stream, "# buckets used: %lu (%.2f%%)\n", (unsigned long int) n_buckets_used, (100.0 * n_buckets_used) / n_buckets); fprintf (stream, "max bucket length: %lu\n", (unsigned long int) max_bucket_length); } /* Hash KEY and return a pointer to the selected bucket. If TABLE->hasher misbehaves, abort. */ static struct hash_entry * safe_hasher (const Hash_table *table, const void *key) { size_t n = table->hasher (key, table->n_buckets); if (! (n < table->n_buckets)) abort (); return table->bucket + n; } void * hash_lookup (const Hash_table *table, const void *entry) { struct hash_entry const *bucket = safe_hasher (table, entry); struct hash_entry const *cursor; if (bucket->data == NULL) return NULL; for (cursor = bucket; cursor; cursor = cursor->next) if (entry == cursor->data || table->comparator (entry, cursor->data)) return cursor->data; return NULL; } /* Walking. */ void * hash_get_first (const Hash_table *table) { struct hash_entry const *bucket; if (table->n_entries == 0) return NULL; for (bucket = table->bucket; ; bucket++) if (! (bucket < table->bucket_limit)) abort (); else if (bucket->data) return bucket->data; } void * hash_get_next (const Hash_table *table, const void *entry) { struct hash_entry const *bucket = safe_hasher (table, entry); struct hash_entry const *cursor; /* Find next entry in the same bucket. */ cursor = bucket; do { if (cursor->data == entry && cursor->next) return cursor->next->data; cursor = cursor->next; } while (cursor != NULL); /* Find first entry in any subsequent bucket. */ while (++bucket < table->bucket_limit) if (bucket->data) return bucket->data; /* None found. */ return NULL; } size_t hash_get_entries (const Hash_table *table, void **buffer, size_t buffer_size) { size_t counter = 0; struct hash_entry const *bucket; struct hash_entry const *cursor; for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { for (cursor = bucket; cursor; cursor = cursor->next) { if (counter >= buffer_size) return counter; buffer[counter++] = cursor->data; } } } return counter; } size_t hash_do_for_each (const Hash_table *table, Hash_processor processor, void *processor_data) { size_t counter = 0; struct hash_entry const *bucket; struct hash_entry const *cursor; for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { for (cursor = bucket; cursor; cursor = cursor->next) { if (! processor (cursor->data, processor_data)) return counter; counter++; } } } return counter; } /* Allocation and clean-up. */ #if USE_DIFF_HASH /* About hashings, Paul Eggert writes to me (FP), on 1994-01-01: "Please see B. J. McKenzie, R. Harries & T. Bell, Selecting a hashing algorithm, Software--practice & experience 20, 2 (Feb 1990), 209-224. Good hash algorithms tend to be domain-specific, so what's good for [diffutils'] io.c may not be good for your application." */ size_t hash_string (const char *string, size_t n_buckets) { # define HASH_ONE_CHAR(Value, Byte) \ ((Byte) + rotl_sz (Value, 7)) size_t value = 0; unsigned char ch; for (; (ch = *string); string++) value = HASH_ONE_CHAR (value, ch); return value % n_buckets; # undef HASH_ONE_CHAR } #else /* not USE_DIFF_HASH */ /* This one comes from 'recode', and performs a bit better than the above as per a few experiments. It is inspired from a hashing routine found in the very old Cyber 'snoop', itself written in typical Greg Mansfield style. (By the way, what happened to this excellent man? Is he still alive?) */ size_t hash_string (const char *string, size_t n_buckets) { size_t value = 0; unsigned char ch; for (; (ch = *string); string++) value = (value * 31 + ch) % n_buckets; return value; } #endif /* not USE_DIFF_HASH */ /* Return true if CANDIDATE is a prime number. CANDIDATE should be an odd number at least equal to 11. */ static bool _GL_ATTRIBUTE_CONST is_prime (size_t candidate) { size_t divisor = 3; size_t square = divisor * divisor; while (square < candidate && (candidate % divisor)) { divisor++; square += 4 * divisor; divisor++; } return (candidate % divisor ? true : false); } /* Round a given CANDIDATE number up to the nearest prime, and return that prime. Primes lower than 10 are merely skipped. */ static size_t _GL_ATTRIBUTE_CONST next_prime (size_t candidate) { /* Skip small primes. */ if (candidate < 10) candidate = 10; /* Make it definitely odd. */ candidate |= 1; while (SIZE_MAX != candidate && !is_prime (candidate)) candidate += 2; return candidate; } void hash_reset_tuning (Hash_tuning *tuning) { *tuning = default_tuning; } /* If the user passes a NULL hasher, we hash the raw pointer. */ static size_t raw_hasher (const void *data, size_t n) { /* When hashing unique pointers, it is often the case that they were generated by malloc and thus have the property that the low-order bits are 0. As this tends to give poorer performance with small tables, we rotate the pointer value before performing division, in an attempt to improve hash quality. */ size_t val = rotr_sz ((size_t) data, 3); return val % n; } /* If the user passes a NULL comparator, we use pointer comparison. */ static bool raw_comparator (const void *a, const void *b) { return a == b; } /* For the given hash TABLE, check the user supplied tuning structure for reasonable values, and return true if there is no gross error with it. Otherwise, definitively reset the TUNING field to some acceptable default in the hash table (that is, the user loses the right of further modifying tuning arguments), and return false. */ static bool check_tuning (Hash_table *table) { const Hash_tuning *tuning = table->tuning; float epsilon; if (tuning == &default_tuning) return true; /* Be a bit stricter than mathematics would require, so that rounding errors in size calculations do not cause allocations to fail to grow or shrink as they should. The smallest allocation is 11 (due to next_prime's algorithm), so an epsilon of 0.1 should be good enough. */ epsilon = 0.1f; if (epsilon < tuning->growth_threshold && tuning->growth_threshold < 1 - epsilon && 1 + epsilon < tuning->growth_factor && 0 <= tuning->shrink_threshold && tuning->shrink_threshold + epsilon < tuning->shrink_factor && tuning->shrink_factor <= 1 && tuning->shrink_threshold + epsilon < tuning->growth_threshold) return true; table->tuning = &default_tuning; return false; } /* Compute the size of the bucket array for the given CANDIDATE and TUNING, or return 0 if there is no possible way to allocate that many entries. */ static size_t _GL_ATTRIBUTE_PURE compute_bucket_size (size_t candidate, const Hash_tuning *tuning) { if (!tuning->is_n_buckets) { float new_candidate = candidate / tuning->growth_threshold; if ((float) SIZE_MAX <= new_candidate) return 0; candidate = new_candidate; } candidate = next_prime (candidate); if (xalloc_oversized (candidate, sizeof (struct hash_entry *))) return 0; return candidate; } Hash_table * hash_initialize (size_t candidate, const Hash_tuning *tuning, Hash_hasher hasher, Hash_comparator comparator, Hash_data_freer data_freer) { Hash_table *table; if (hasher == NULL) hasher = raw_hasher; if (comparator == NULL) comparator = raw_comparator; table = malloc (sizeof *table); if (table == NULL) return NULL; if (!tuning) tuning = &default_tuning; table->tuning = tuning; if (!check_tuning (table)) { /* Fail if the tuning options are invalid. This is the only occasion when the user gets some feedback about it. Once the table is created, if the user provides invalid tuning options, we silently revert to using the defaults, and ignore further request to change the tuning options. */ goto fail; } table->n_buckets = compute_bucket_size (candidate, tuning); if (!table->n_buckets) goto fail; table->bucket = calloc (table->n_buckets, sizeof *table->bucket); if (table->bucket == NULL) goto fail; table->bucket_limit = table->bucket + table->n_buckets; table->n_buckets_used = 0; table->n_entries = 0; table->hasher = hasher; table->comparator = comparator; table->data_freer = data_freer; table->free_entry_list = NULL; #if USE_OBSTACK obstack_init (&table->entry_stack); #endif return table; fail: free (table); return NULL; } void hash_clear (Hash_table *table) { struct hash_entry *bucket; for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { struct hash_entry *cursor; struct hash_entry *next; /* Free the bucket overflow. */ for (cursor = bucket->next; cursor; cursor = next) { if (table->data_freer) table->data_freer (cursor->data); cursor->data = NULL; next = cursor->next; /* Relinking is done one entry at a time, as it is to be expected that overflows are either rare or short. */ cursor->next = table->free_entry_list; table->free_entry_list = cursor; } /* Free the bucket head. */ if (table->data_freer) table->data_freer (bucket->data); bucket->data = NULL; bucket->next = NULL; } } table->n_buckets_used = 0; table->n_entries = 0; } void hash_free (Hash_table *table) { struct hash_entry *bucket; struct hash_entry *cursor; struct hash_entry *next; /* Call the user data_freer function. */ if (table->data_freer && table->n_entries) { for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { if (bucket->data) { for (cursor = bucket; cursor; cursor = cursor->next) table->data_freer (cursor->data); } } } #if USE_OBSTACK obstack_free (&table->entry_stack, NULL); #else /* Free all bucket overflowed entries. */ for (bucket = table->bucket; bucket < table->bucket_limit; bucket++) { for (cursor = bucket->next; cursor; cursor = next) { next = cursor->next; free (cursor); } } /* Also reclaim the internal list of previously freed entries. */ for (cursor = table->free_entry_list; cursor; cursor = next) { next = cursor->next; free (cursor); } #endif /* Free the remainder of the hash table structure. */ free (table->bucket); free (table); } /* Insertion and deletion. */ /* Get a new hash entry for a bucket overflow, possibly by recycling a previously freed one. If this is not possible, allocate a new one. */ static struct hash_entry * allocate_entry (Hash_table *table) { struct hash_entry *new; if (table->free_entry_list) { new = table->free_entry_list; table->free_entry_list = new->next; } else { #if USE_OBSTACK new = obstack_alloc (&table->entry_stack, sizeof *new); #else new = malloc (sizeof *new); #endif } return new; } /* Free a hash entry which was part of some bucket overflow, saving it for later recycling. */ static void free_entry (Hash_table *table, struct hash_entry *entry) { entry->data = NULL; entry->next = table->free_entry_list; table->free_entry_list = entry; } /* This private function is used to help with insertion and deletion. When ENTRY matches an entry in the table, return a pointer to the corresponding user data and set *BUCKET_HEAD to the head of the selected bucket. Otherwise, return NULL. When DELETE is true and ENTRY matches an entry in the table, unlink the matching entry. */ static void * hash_find_entry (Hash_table *table, const void *entry, struct hash_entry **bucket_head, bool delete) { struct hash_entry *bucket = safe_hasher (table, entry); struct hash_entry *cursor; *bucket_head = bucket; /* Test for empty bucket. */ if (bucket->data == NULL) return NULL; /* See if the entry is the first in the bucket. */ if (entry == bucket->data || table->comparator (entry, bucket->data)) { void *data = bucket->data; if (delete) { if (bucket->next) { struct hash_entry *next = bucket->next; /* Bump the first overflow entry into the bucket head, then save the previous first overflow entry for later recycling. */ *bucket = *next; free_entry (table, next); } else { bucket->data = NULL; } } return data; } /* Scan the bucket overflow. */ for (cursor = bucket; cursor->next; cursor = cursor->next) { if (entry == cursor->next->data || table->comparator (entry, cursor->next->data)) { void *data = cursor->next->data; if (delete) { struct hash_entry *next = cursor->next; /* Unlink the entry to delete, then save the freed entry for later recycling. */ cursor->next = next->next; free_entry (table, next); } return data; } } /* No entry found. */ return NULL; } /* Internal helper, to move entries from SRC to DST. Both tables must share the same free entry list. If SAFE, only move overflow entries, saving bucket heads for later, so that no allocations will occur. Return false if the free entry list is exhausted and an allocation fails. */ static bool transfer_entries (Hash_table *dst, Hash_table *src, bool safe) { struct hash_entry *bucket; struct hash_entry *cursor; struct hash_entry *next; for (bucket = src->bucket; bucket < src->bucket_limit; bucket++) if (bucket->data) { void *data; struct hash_entry *new_bucket; /* Within each bucket, transfer overflow entries first and then the bucket head, to minimize memory pressure. After all, the only time we might allocate is when moving the bucket head, but moving overflow entries first may create free entries that can be recycled by the time we finally get to the bucket head. */ for (cursor = bucket->next; cursor; cursor = next) { data = cursor->data; new_bucket = safe_hasher (dst, data); next = cursor->next; if (new_bucket->data) { /* Merely relink an existing entry, when moving from a bucket overflow into a bucket overflow. */ cursor->next = new_bucket->next; new_bucket->next = cursor; } else { /* Free an existing entry, when moving from a bucket overflow into a bucket header. */ new_bucket->data = data; dst->n_buckets_used++; free_entry (dst, cursor); } } /* Now move the bucket head. Be sure that if we fail due to allocation failure that the src table is in a consistent state. */ data = bucket->data; bucket->next = NULL; if (safe) continue; new_bucket = safe_hasher (dst, data); if (new_bucket->data) { /* Allocate or recycle an entry, when moving from a bucket header into a bucket overflow. */ struct hash_entry *new_entry = allocate_entry (dst); if (new_entry == NULL) return false; new_entry->data = data; new_entry->next = new_bucket->next; new_bucket->next = new_entry; } else { /* Move from one bucket header to another. */ new_bucket->data = data; dst->n_buckets_used++; } bucket->data = NULL; src->n_buckets_used--; } return true; } bool hash_rehash (Hash_table *table, size_t candidate) { Hash_table storage; Hash_table *new_table; size_t new_size = compute_bucket_size (candidate, table->tuning); if (!new_size) return false; if (new_size == table->n_buckets) return true; new_table = &storage; new_table->bucket = calloc (new_size, sizeof *new_table->bucket); if (new_table->bucket == NULL) return false; new_table->n_buckets = new_size; new_table->bucket_limit = new_table->bucket + new_size; new_table->n_buckets_used = 0; new_table->n_entries = 0; new_table->tuning = table->tuning; new_table->hasher = table->hasher; new_table->comparator = table->comparator; new_table->data_freer = table->data_freer; /* In order for the transfer to successfully complete, we need additional overflow entries when distinct buckets in the old table collide into a common bucket in the new table. The worst case possible is a hasher that gives a good spread with the old size, but returns a constant with the new size; if we were to guarantee table->n_buckets_used-1 free entries in advance, then the transfer would be guaranteed to not allocate memory. However, for large tables, a guarantee of no further allocation introduces a lot of extra memory pressure, all for an unlikely corner case (most rehashes reduce, rather than increase, the number of overflow entries needed). So, we instead ensure that the transfer process can be reversed if we hit a memory allocation failure mid-transfer. */ /* Merely reuse the extra old space into the new table. */ #if USE_OBSTACK new_table->entry_stack = table->entry_stack; #endif new_table->free_entry_list = table->free_entry_list; if (transfer_entries (new_table, table, false)) { /* Entries transferred successfully; tie up the loose ends. */ free (table->bucket); table->bucket = new_table->bucket; table->bucket_limit = new_table->bucket_limit; table->n_buckets = new_table->n_buckets; table->n_buckets_used = new_table->n_buckets_used; table->free_entry_list = new_table->free_entry_list; /* table->n_entries and table->entry_stack already hold their value. */ return true; } /* We've allocated new_table->bucket (and possibly some entries), exhausted the free list, and moved some but not all entries into new_table. We must undo the partial move before returning failure. The only way to get into this situation is if new_table uses fewer buckets than the old table, so we will reclaim some free entries as overflows in the new table are put back into distinct buckets in the old table. There are some pathological cases where a single pass through the table requires more intermediate overflow entries than using two passes. Two passes give worse cache performance and takes longer, but at this point, we're already out of memory, so slow and safe is better than failure. */ table->free_entry_list = new_table->free_entry_list; if (! (transfer_entries (table, new_table, true) && transfer_entries (table, new_table, false))) abort (); /* table->n_entries already holds its value. */ free (new_table->bucket); return false; } int hash_insert_if_absent (Hash_table *table, void const *entry, void const **matched_ent) { void *data; struct hash_entry *bucket; /* The caller cannot insert a NULL entry, since hash_lookup returns NULL to indicate "not found", and hash_find_entry uses "bucket->data == NULL" to indicate an empty bucket. */ if (! entry) abort (); /* If there's a matching entry already in the table, return that. */ if ((data = hash_find_entry (table, entry, &bucket, false)) != NULL) { if (matched_ent) *matched_ent = data; return 0; } /* If the growth threshold of the buckets in use has been reached, increase the table size and rehash. There's no point in checking the number of entries: if the hashing function is ill-conditioned, rehashing is not likely to improve it. */ if (table->n_buckets_used > table->tuning->growth_threshold * table->n_buckets) { /* Check more fully, before starting real work. If tuning arguments became invalid, the second check will rely on proper defaults. */ check_tuning (table); if (table->n_buckets_used > table->tuning->growth_threshold * table->n_buckets) { const Hash_tuning *tuning = table->tuning; float candidate = (tuning->is_n_buckets ? (table->n_buckets * tuning->growth_factor) : (table->n_buckets * tuning->growth_factor * tuning->growth_threshold)); if ((float) SIZE_MAX <= candidate) return -1; /* If the rehash fails, arrange to return NULL. */ if (!hash_rehash (table, candidate)) return -1; /* Update the bucket we are interested in. */ if (hash_find_entry (table, entry, &bucket, false) != NULL) abort (); } } /* ENTRY is not matched, it should be inserted. */ if (bucket->data) { struct hash_entry *new_entry = allocate_entry (table); if (new_entry == NULL) return -1; /* Add ENTRY in the overflow of the bucket. */ new_entry->data = (void *) entry; new_entry->next = bucket->next; bucket->next = new_entry; table->n_entries++; return 1; } /* Add ENTRY right in the bucket head. */ bucket->data = (void *) entry; table->n_entries++; table->n_buckets_used++; return 1; } void * hash_insert (Hash_table *table, void const *entry) { void const *matched_ent; int err = hash_insert_if_absent (table, entry, &matched_ent); return (err == -1 ? NULL : (void *) (err == 0 ? matched_ent : entry)); } void * hash_remove (Hash_table *table, const void *entry) { void *data; struct hash_entry *bucket; data = hash_find_entry (table, entry, &bucket, true); if (!data) return NULL; table->n_entries--; if (!bucket->data) { table->n_buckets_used--; /* If the shrink threshold of the buckets in use has been reached, rehash into a smaller table. */ if (table->n_buckets_used < table->tuning->shrink_threshold * table->n_buckets) { /* Check more fully, before starting real work. If tuning arguments became invalid, the second check will rely on proper defaults. */ check_tuning (table); if (table->n_buckets_used < table->tuning->shrink_threshold * table->n_buckets) { const Hash_tuning *tuning = table->tuning; size_t candidate = (tuning->is_n_buckets ? table->n_buckets * tuning->shrink_factor : (table->n_buckets * tuning->shrink_factor * tuning->growth_threshold)); if (!hash_rehash (table, candidate)) { /* Failure to allocate memory in an attempt to shrink the table is not fatal. But since memory is low, we can at least be kind and free any spare entries, rather than keeping them tied up in the free entry list. */ #if ! USE_OBSTACK struct hash_entry *cursor = table->free_entry_list; struct hash_entry *next; while (cursor) { next = cursor->next; free (cursor); cursor = next; } table->free_entry_list = NULL; #endif } } } } return data; } void * hash_delete (Hash_table *table, const void *entry) { return hash_remove (table, entry); } /* Testing. */ #if TESTING void hash_print (const Hash_table *table) { struct hash_entry *bucket = (struct hash_entry *) table->bucket; for ( ; bucket < table->bucket_limit; bucket++) { struct hash_entry *cursor; if (bucket) printf ("%lu:\n", (unsigned long int) (bucket - table->bucket)); for (cursor = bucket; cursor; cursor = cursor->next) { char const *s = cursor->data; /* FIXME */ if (s) printf (" %s\n", s); } } } #endif /* TESTING */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/concat-filename.h������������������������������������������������������������������0000644�0000000�0000000�00000003257�14226564446�014074� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Construct a full filename from a directory and a relative filename. Copyright (C) 2001-2004, 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _CONCAT_FILENAME_H #define _CONCAT_FILENAME_H #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif /* Concatenate a directory filename, a relative filename and an optional suffix. Return a freshly allocated filename. Return NULL and set errno upon memory allocation failure. */ extern char *concatenated_filename (const char *directory, const char *filename, const char *suffix) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; /* Concatenate a directory filename, a relative filename and an optional suffix. Return a freshly allocated filename. */ extern char *xconcatenated_filename (const char *directory, const char *filename, const char *suffix) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; #ifdef __cplusplus } #endif #endif /* _CONCAT_FILENAME_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/spawn.c����������������������������������������������������������������������������0000644�0000000�0000000�00000002521�14226564447�012164� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include "spawn_int.h" /* Spawn a new process executing PATH with the attributes describes in *ATTRP. Before running the process perform the actions described in FILE-ACTIONS. */ int posix_spawn (pid_t *pid, const char *path, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, char *const argv[], char *const envp[]) { return __spawni (pid, path, file_actions, attrp, (const char * const *) argv, (const char * const *) envp, 0); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/tmpdir.h���������������������������������������������������������������������������0000644�0000000�0000000�00000002377�14226564451�012344� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a temporary directory. Copyright (C) 2001-2002, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stdbool.h> #include <stddef.h> /* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is non-null and exists, uses it; otherwise uses the first of $TMPDIR, P_tmpdir, /tmp that exists. Copies into TMPL a template suitable for use with mk[s]temp. Will fail (-1) if DIR is non-null and doesn't exist, none of the searched dirs exists, or there's not enough space in TMPL. */ extern int path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, bool try_tmpdir); �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/sys-limits.h�����������������������������������������������������������������������0000644�0000000�0000000�00000003227�14226564451�013155� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* System call limits Copyright 2018-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_SYS_LIMITS_H #define _GL_SYS_LIMITS_H #include <limits.h> /* Maximum number of bytes to read or write in a single system call. This can be useful for system calls like sendfile on GNU/Linux, which do not handle more than MAX_RW_COUNT bytes correctly. The Linux kernel MAX_RW_COUNT is at least INT_MAX >> 20 << 20, where the 20 comes from the Hexagon port with 1 MiB pages; use that as an approximation, as the exact value may not be available to us. Using this also works around a serious Linux bug before 2.6.16; see <https://bugzilla.redhat.com/show_bug.cgi?id=612839>. Using this also works around a Tru64 5.1 bug, where attempting to read INT_MAX bytes fails with errno == EINVAL. See <https://lists.gnu.org/r/bug-gnu-utils/2002-04/msg00010.html>. Using this is likely to work around similar bugs in other operating systems. */ enum { SYS_BUFSIZE_MAX = INT_MAX >> 20 << 20 }; #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/execute.c��������������������������������������������������������������������������0000644�0000000�0000000�00000027162�14226564447�012506� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creation of autonomous subprocesses. Copyright (C) 2001-2004, 2006-2022 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "execute.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> #include "canonicalize.h" #include "error.h" #include "fatal-signal.h" #include "filename.h" #include "findprog.h" #include "wait-process.h" #include "xalloc.h" #include "gettext.h" #define _(str) gettext (str) /* Choice of implementation for native Windows. - Define to 0 to use the posix_spawn facility (modules 'posix_spawn' and 'posix_spawnp'), that is based on the module 'windows-spawn'. - Define to 1 to use the older code, that uses the module 'windows-spawn' directly. You can set this macro from a Makefile or at configure time, from the CPPFLAGS. */ #ifndef EXECUTE_IMPL_AVOID_POSIX_SPAWN # define EXECUTE_IMPL_AVOID_POSIX_SPAWN 0 #endif #if (defined _WIN32 && !defined __CYGWIN__) && EXECUTE_IMPL_AVOID_POSIX_SPAWN /* Native Windows API. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # include <process.h> # include "windows-spawn.h" #else /* Unix API. */ # include <spawn.h> #endif #if defined EINTR && (defined _WIN32 && !defined __CYGWIN__) && EXECUTE_IMPL_AVOID_POSIX_SPAWN /* EINTR handling for close(), open(). These functions can return -1/EINTR even though we don't have any signal handlers set up, namely when we get interrupted via SIGSTOP. */ static int nonintr_close (int fd) { int retval; do retval = close (fd); while (retval < 0 && errno == EINTR); return retval; } #undef close /* avoid warning related to gnulib module unistd */ #define close nonintr_close static int nonintr_open (const char *pathname, int oflag, mode_t mode) { int retval; do retval = open (pathname, oflag, mode); while (retval < 0 && errno == EINTR); return retval; } #undef open /* avoid warning on VMS */ #define open nonintr_open #endif int execute (const char *progname, const char *prog_path, const char * const *prog_argv, const char *directory, bool ignore_sigpipe, bool null_stdin, bool null_stdout, bool null_stderr, bool slave_process, bool exit_on_error, int *termsigp) { int saved_errno; char *prog_path_to_free = NULL; if (directory != NULL) { /* If a change of directory is requested, make sure PROG_PATH is absolute before we do so. This is needed because - posix_spawn and posix_spawnp are required to resolve a relative PROG_PATH *after* changing the directory. See <https://www.austingroupbugs.net/view.php?id=1208>: "if this pathname does not start with a <slash> it shall be interpreted relative to the working directory of the child process _after_ all file_actions have been performed." But this would be a surprising application behaviour, possibly even security relevant. - For the Windows CreateProcess() function, it is unspecified whether a relative file name is interpreted to the parent's current directory or to the specified directory. See <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa> */ if (! IS_ABSOLUTE_FILE_NAME (prog_path)) { const char *resolved_prog = find_in_given_path (prog_path, getenv ("PATH"), NULL, false); if (resolved_prog == NULL) goto fail_with_errno; if (resolved_prog != prog_path) prog_path_to_free = (char *) resolved_prog; prog_path = resolved_prog; if (! IS_ABSOLUTE_FILE_NAME (prog_path)) { char *absolute_prog = canonicalize_filename_mode (prog_path, CAN_MISSING | CAN_NOLINKS); if (absolute_prog == NULL) { free (prog_path_to_free); goto fail_with_errno; } free (prog_path_to_free); prog_path_to_free = absolute_prog; prog_path = absolute_prog; if (! IS_ABSOLUTE_FILE_NAME (prog_path)) abort (); } } } #if (defined _WIN32 && !defined __CYGWIN__) && EXECUTE_IMPL_AVOID_POSIX_SPAWN /* Native Windows API. */ char *argv_mem_to_free; const char **argv = prepare_spawn (prog_argv, &argv_mem_to_free); if (argv == NULL) xalloc_die (); int exitcode = -1; /* Create standard file handles of child process. */ int nullinfd = -1; int nulloutfd = -1; if ((!null_stdin || (nullinfd = open ("NUL", O_RDONLY, 0)) >= 0) && (!(null_stdout || null_stderr) || (nulloutfd = open ("NUL", O_RDWR, 0)) >= 0)) /* Pass the environment explicitly. This is needed if the program has modified the environment using putenv() or [un]setenv(). On Windows, processes have two environments, one in the "environment block" of the process and managed through SetEnvironmentVariable(), and one inside the process, in the location retrieved by the 'environ' macro. If we were to pass NULL, the child process would inherit a copy of the environment block - ignoring the effects of putenv() and [un]setenv(). */ { HANDLE stdin_handle = (HANDLE) _get_osfhandle (null_stdin ? nullinfd : STDIN_FILENO); HANDLE stdout_handle = (HANDLE) _get_osfhandle (null_stdout ? nulloutfd : STDOUT_FILENO); HANDLE stderr_handle = (HANDLE) _get_osfhandle (null_stderr ? nulloutfd : STDERR_FILENO); exitcode = spawnpvech (P_WAIT, prog_path, argv + 1, (const char * const *) environ, directory, stdin_handle, stdout_handle, stderr_handle); # if 0 /* Executing arbitrary files as shell scripts is unsecure. */ if (exitcode == -1 && errno == ENOEXEC) { /* prog is not a native executable. Try to execute it as a shell script. Note that prepare_spawn() has already prepended a hidden element "sh.exe" to argv. */ argv[1] = prog_path; exitcode = spawnpvech (P_WAIT, argv[0], argv, (const char * const *) environ, directory, stdin_handle, stdout_handle, stderr_handle); } # endif } if (exitcode == -1) saved_errno = errno; if (nulloutfd >= 0) close (nulloutfd); if (nullinfd >= 0) close (nullinfd); free (argv); free (argv_mem_to_free); free (prog_path_to_free); /* Treat failure and signalled child processes like wait_subprocess() does. */ if (termsigp != NULL) *termsigp = 0; if (exitcode == -1) goto fail_with_saved_errno; if (WIFSIGNALED (exitcode)) { if (termsigp != NULL) *termsigp = WTERMSIG (exitcode); saved_errno = 0; goto fail_with_saved_errno; } return exitcode; #else /* Unix API. */ /* Note about 127: Some errors during posix_spawnp() cause the function posix_spawnp() to return an error code; some other errors cause the subprocess to exit with return code 127. It is implementation dependent which error is reported which way. We treat both cases as equivalent. */ sigset_t blocked_signals; posix_spawn_file_actions_t actions; bool actions_allocated; posix_spawnattr_t attrs; bool attrs_allocated; int err; pid_t child; if (slave_process) { sigprocmask (SIG_SETMASK, NULL, &blocked_signals); block_fatal_signals (); } actions_allocated = false; attrs_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (null_stdin && (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, "/dev/null", O_RDONLY, 0)) != 0) || (null_stdout && (err = posix_spawn_file_actions_addopen (&actions, STDOUT_FILENO, "/dev/null", O_RDWR, 0)) != 0) || (null_stderr && (err = posix_spawn_file_actions_addopen (&actions, STDERR_FILENO, "/dev/null", O_RDWR, 0)) != 0) || (directory != NULL && (err = posix_spawn_file_actions_addchdir (&actions, directory))) # if !(defined _WIN32 && !defined __CYGWIN__) || (slave_process && ((err = posix_spawnattr_init (&attrs)) != 0 || (attrs_allocated = true, (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0))) # endif || (err = (directory != NULL ? posix_spawn (&child, prog_path, &actions, attrs_allocated ? &attrs : NULL, (char * const *) prog_argv, environ) : posix_spawnp (&child, prog_path, &actions, attrs_allocated ? &attrs : NULL, (char * const *) prog_argv, environ))) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); if (slave_process) unblock_fatal_signals (); free (prog_path_to_free); if (termsigp != NULL) *termsigp = 0; saved_errno = err; goto fail_with_saved_errno; } posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); if (slave_process) { register_slave_subprocess (child); unblock_fatal_signals (); } free (prog_path_to_free); return wait_subprocess (child, progname, ignore_sigpipe, null_stderr, slave_process, exit_on_error, termsigp); #endif fail_with_errno: saved_errno = errno; fail_with_saved_errno: if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, saved_errno, _("%s subprocess failed"), progname); return 127; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/sys_random.in.h��������������������������������������������������������������������0000644�0000000�0000000�00000006075�14226564451�013627� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for <sys/random.h>. Copyright (C) 2020-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ # if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ # endif @PRAGMA_COLUMNS@ #ifndef _@GUARD_PREFIX@_SYS_RANDOM_H #if @HAVE_SYS_RANDOM_H@ /* On uClibc < 1.0.35, <sys/random.h> assumes prior inclusion of <stddef.h>. Do not use __UCLIBC__ here, as it might not be defined yet. But avoid namespace pollution on glibc systems. */ # ifndef __GLIBC__ # include <stddef.h> # endif /* On Mac OS X 10.5, <sys/random.h> assumes prior inclusion of <sys/types.h>. On Max OS X 10.13, <sys/random.h> assumes prior inclusion of a file that includes <Availability.h>, such as <stdlib.h> or <unistd.h>. */ # if defined __APPLE__ && defined __MACH__ /* Mac OS X */ # include <sys/types.h> # include <stdlib.h> # endif /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_SYS_RANDOM_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_RANDOM_H #define _@GUARD_PREFIX@_SYS_RANDOM_H #include <sys/types.h> /* Define the GRND_* constants. */ #ifndef GRND_NONBLOCK # define GRND_NONBLOCK 1 # define GRND_RANDOM 2 #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_GETRANDOM@ /* Fill a buffer with random bytes. */ # if @REPLACE_GETRANDOM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getrandom # define getrandom rpl_getrandom # endif _GL_FUNCDECL_RPL (getrandom, ssize_t, (void *buffer, size_t length, unsigned int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getrandom, ssize_t, (void *buffer, size_t length, unsigned int flags)); # else # if !@HAVE_GETRANDOM@ _GL_FUNCDECL_SYS (getrandom, ssize_t, (void *buffer, size_t length, unsigned int flags) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getrandom, ssize_t, (void *buffer, size_t length, unsigned int flags)); # endif _GL_CXXALIASWARN (getrandom); #elif defined GNULIB_POSIXCHECK # undef getrandom # if HAVE_RAW_DECL_GETRANDOM _GL_WARN_ON_USE (getrandom, "getrandom is unportable - " "use gnulib module getrandom for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_RANDOM_H */ #endif /* _@GUARD_PREFIX@_SYS_RANDOM_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/rename.c���������������������������������������������������������������������������0000644�0000000�0000000�00000032163�14226564450�012302� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around rename bugs in some systems. Copyright (C) 2001-2003, 2005-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Volker Borchert, Eric Blake. */ #include <config.h> #include <stdio.h> #undef rename #if defined _WIN32 && ! defined __CYGWIN__ /* The mingw rename has problems with trailing slashes; it also requires use of native Windows calls to allow atomic renames over existing files. */ # include <errno.h> # include <stdbool.h> # include <stdlib.h> # include <sys/stat.h> # include <unistd.h> # define WIN32_LEAN_AND_MEAN # include <windows.h> # include "dirname.h" /* Don't assume that UNICODE is not defined. */ # undef MoveFileEx # define MoveFileEx MoveFileExA /* Rename the file SRC to DST. This replacement is necessary on Windows, on which the system rename function will not replace an existing DST. */ int rpl_rename (char const *src, char const *dst) { int error; size_t src_len = strlen (src); size_t dst_len = strlen (dst); char *src_base = last_component (src); char *dst_base = last_component (dst); bool src_slash; bool dst_slash; bool dst_exists; struct stat src_st; struct stat dst_st; /* Filter out dot as last component. */ if (!src_len || !dst_len) { errno = ENOENT; return -1; } if (*src_base == '.') { size_t len = base_len (src_base); if (len == 1 || (len == 2 && src_base[1] == '.')) { errno = EINVAL; return -1; } } if (*dst_base == '.') { size_t len = base_len (dst_base); if (len == 1 || (len == 2 && dst_base[1] == '.')) { errno = EINVAL; return -1; } } /* Presence of a trailing slash requires directory semantics. If the source does not exist, or if the destination cannot be turned into a directory, give up now. Otherwise, strip trailing slashes before calling rename. There are no symlinks on mingw, so stat works instead of lstat. */ src_slash = ISSLASH (src[src_len - 1]); dst_slash = ISSLASH (dst[dst_len - 1]); if (stat (src, &src_st)) return -1; if (stat (dst, &dst_st)) { if (errno != ENOENT || (!S_ISDIR (src_st.st_mode) && dst_slash)) return -1; dst_exists = false; } else { if (S_ISDIR (dst_st.st_mode) != S_ISDIR (src_st.st_mode)) { errno = S_ISDIR (dst_st.st_mode) ? EISDIR : ENOTDIR; return -1; } dst_exists = true; } /* There are no symlinks, so if a file existed with a trailing slash, it must be a directory, and we don't have to worry about stripping strip trailing slash. However, mingw refuses to replace an existing empty directory, so we have to help it out. And canonicalize_file_name is not yet ported to mingw; however, for directories, getcwd works as a viable alternative. Ensure that we can get back to where we started before using it; later attempts to return are fatal. Note that we can end up losing a directory if rename then fails, but it was empty, so not much damage was done. */ if (dst_exists && S_ISDIR (dst_st.st_mode)) { char *cwd = getcwd (NULL, 0); char *src_temp; char *dst_temp; if (!cwd || chdir (cwd)) return -1; if (IS_ABSOLUTE_FILE_NAME (src)) { dst_temp = chdir (dst) ? NULL : getcwd (NULL, 0); src_temp = chdir (src) ? NULL : getcwd (NULL, 0); } else { src_temp = chdir (src) ? NULL : getcwd (NULL, 0); if (!IS_ABSOLUTE_FILE_NAME (dst) && chdir (cwd)) abort (); dst_temp = chdir (dst) ? NULL : getcwd (NULL, 0); } if (chdir (cwd)) abort (); free (cwd); if (!src_temp || !dst_temp) { free (src_temp); free (dst_temp); errno = ENOMEM; return -1; } src_len = strlen (src_temp); if (strncmp (src_temp, dst_temp, src_len) == 0 && (ISSLASH (dst_temp[src_len]) || dst_temp[src_len] == '\0')) { error = dst_temp[src_len]; free (src_temp); free (dst_temp); if (error) { errno = EINVAL; return -1; } return 0; } if (rmdir (dst)) { free (src_temp); free (dst_temp); return -1; } free (src_temp); free (dst_temp); } /* MoveFileEx works if SRC is a directory without any flags, but fails with MOVEFILE_REPLACE_EXISTING, so try without flags first. Thankfully, MoveFileEx handles hard links correctly, even though rename() does not. */ if (MoveFileEx (src, dst, 0)) return 0; /* Retry with MOVEFILE_REPLACE_EXISTING if the move failed due to the destination already existing. */ error = GetLastError (); if (error == ERROR_FILE_EXISTS || error == ERROR_ALREADY_EXISTS) { if (MoveFileEx (src, dst, MOVEFILE_REPLACE_EXISTING)) return 0; error = GetLastError (); } switch (error) { case ERROR_FILE_NOT_FOUND: case ERROR_PATH_NOT_FOUND: case ERROR_BAD_PATHNAME: case ERROR_DIRECTORY: errno = ENOENT; break; case ERROR_ACCESS_DENIED: case ERROR_SHARING_VIOLATION: errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_CURRENT_DIRECTORY: errno = EBUSY; break; case ERROR_NOT_SAME_DEVICE: errno = EXDEV; break; case ERROR_WRITE_PROTECT: errno = EROFS; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; case ERROR_HANDLE_DISK_FULL: case ERROR_DISK_FULL: case ERROR_DISK_TOO_FRAGMENTED: errno = ENOSPC; break; case ERROR_FILE_EXISTS: case ERROR_ALREADY_EXISTS: errno = EEXIST; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: errno = ENAMETOOLONG; break; case ERROR_INVALID_NAME: case ERROR_DELETE_PENDING: errno = EPERM; /* ? */ break; # ifndef ERROR_FILE_TOO_LARGE /* This value is documented but not defined in all versions of windows.h. */ # define ERROR_FILE_TOO_LARGE 223 # endif case ERROR_FILE_TOO_LARGE: errno = EFBIG; break; default: errno = EINVAL; break; } return -1; } #else /* ! W32 platform */ # include <errno.h> # include <stdio.h> # include <stdlib.h> # include <string.h> # include <sys/stat.h> # include <unistd.h> # include "dirname.h" # include "same-inode.h" /* Rename the file SRC to DST, fixing any trailing slash bugs. */ int rpl_rename (char const *src, char const *dst) { size_t src_len = strlen (src); size_t dst_len = strlen (dst); char *src_temp = (char *) src; char *dst_temp = (char *) dst; bool src_slash; bool dst_slash; _GL_UNUSED bool dst_exists; int ret_val = -1; int rename_errno = ENOTDIR; struct stat src_st; struct stat dst_st; if (!src_len || !dst_len) return rename (src, dst); /* Let strace see the ENOENT failure. */ # if RENAME_DEST_EXISTS_BUG { char *src_base = last_component (src); char *dst_base = last_component (dst); if (*src_base == '.') { size_t len = base_len (src_base); if (len == 1 || (len == 2 && src_base[1] == '.')) { errno = EINVAL; return -1; } } if (*dst_base == '.') { size_t len = base_len (dst_base); if (len == 1 || (len == 2 && dst_base[1] == '.')) { errno = EINVAL; return -1; } } } # endif /* RENAME_DEST_EXISTS_BUG */ src_slash = src[src_len - 1] == '/'; dst_slash = dst[dst_len - 1] == '/'; # if !RENAME_HARD_LINK_BUG && !RENAME_DEST_EXISTS_BUG /* If there are no trailing slashes, then trust the native implementation unless we also suspect issues with hard link detection or file/directory conflicts. */ if (!src_slash && !dst_slash) return rename (src, dst); # endif /* !RENAME_HARD_LINK_BUG && !RENAME_DEST_EXISTS_BUG */ /* Presence of a trailing slash requires directory semantics. If the source does not exist, or if the destination cannot be turned into a directory, give up now. Otherwise, strip trailing slashes before calling rename. */ if (lstat (src, &src_st)) return -1; if (lstat (dst, &dst_st)) { if (errno != ENOENT || (!S_ISDIR (src_st.st_mode) && dst_slash)) return -1; dst_exists = false; } else { if (S_ISDIR (dst_st.st_mode) != S_ISDIR (src_st.st_mode)) { errno = S_ISDIR (dst_st.st_mode) ? EISDIR : ENOTDIR; return -1; } # if RENAME_HARD_LINK_BUG if (SAME_INODE (src_st, dst_st)) return 0; # endif /* RENAME_HARD_LINK_BUG */ dst_exists = true; } # if (RENAME_TRAILING_SLASH_SOURCE_BUG || RENAME_DEST_EXISTS_BUG \ || RENAME_HARD_LINK_BUG) /* If the only bug was that a trailing slash was allowed on a non-existing file destination, as in Solaris 10, then we've already covered that situation. But if there is any problem with a trailing slash on an existing source or destination, as in Solaris 9, or if a directory can overwrite a symlink, as on Cygwin 1.5, or if directories cannot be created with trailing slash, as on NetBSD 1.6, then we must strip the offending slash and check that we have not encountered a symlink instead of a directory. Stripping a trailing slash interferes with POSIX semantics, where rename behavior on a symlink with a trailing slash operates on the corresponding target directory. We prefer the GNU semantics of rejecting any use of a symlink with trailing slash, but do not enforce them, since Solaris 10 is able to obey POSIX semantics and there might be clients expecting it, as counter-intuitive as those semantics are. Technically, we could also follow the POSIX behavior by chasing a readlink trail, but that is harder to implement. */ if (src_slash) { src_temp = strdup (src); if (!src_temp) { /* Rather than rely on strdup-posix, we set errno ourselves. */ rename_errno = ENOMEM; goto out; } strip_trailing_slashes (src_temp); if (lstat (src_temp, &src_st)) { rename_errno = errno; goto out; } if (S_ISLNK (src_st.st_mode)) goto out; } if (dst_slash) { dst_temp = strdup (dst); if (!dst_temp) { rename_errno = ENOMEM; goto out; } strip_trailing_slashes (dst_temp); if (lstat (dst_temp, &dst_st)) { if (errno != ENOENT) { rename_errno = errno; goto out; } } else if (S_ISLNK (dst_st.st_mode)) goto out; } # endif /* RENAME_TRAILING_SLASH_SOURCE_BUG || RENAME_DEST_EXISTS_BUG || RENAME_HARD_LINK_BUG */ # if RENAME_DEST_EXISTS_BUG /* Cygwin 1.5 sometimes behaves oddly when moving a non-empty directory on top of an empty one (the old directory name can reappear if the new directory tree is removed). Work around this by removing the target first, but don't remove the target if it is a subdirectory of the source. Note that we can end up losing a directory if rename then fails, but it was empty, so not much damage was done. */ if (dst_exists && S_ISDIR (dst_st.st_mode)) { if (src_st.st_dev != dst_st.st_dev) { rename_errno = EXDEV; goto out; } if (src_temp != src) free (src_temp); src_temp = canonicalize_file_name (src); if (dst_temp != dst) free (dst_temp); dst_temp = canonicalize_file_name (dst); if (!src_temp || !dst_temp) { rename_errno = ENOMEM; goto out; } src_len = strlen (src_temp); if (strncmp (src_temp, dst_temp, src_len) == 0 && dst_temp[src_len] == '/') { rename_errno = EINVAL; goto out; } if (rmdir (dst)) { rename_errno = errno; goto out; } } # endif /* RENAME_DEST_EXISTS_BUG */ ret_val = rename (src_temp, dst_temp); rename_errno = errno; out: _GL_UNUSED_LABEL; if (src_temp != src) free (src_temp); if (dst_temp != dst) free (dst_temp); errno = rename_errno; return ret_val; } #endif /* ! W32 platform */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/printf-frexp.c���������������������������������������������������������������������0000644�0000000�0000000�00000012340�14226564450�013452� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a double into fraction and mantissa, for hexadecimal printf. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #ifdef USE_LONG_DOUBLE # include "printf-frexpl.h" #else # include "printf-frexp.h" #endif #include <float.h> #include <math.h> #ifdef USE_LONG_DOUBLE # include "fpucw.h" #endif /* This file assumes FLT_RADIX = 2. If FLT_RADIX is a power of 2 greater than 2, or not even a power of 2, some rounding errors can occur, so that then the returned mantissa is only guaranteed to be <= 2.0, not < 2.0. */ #ifdef USE_LONG_DOUBLE # define FUNC printf_frexpl # define DOUBLE long double # define MIN_EXP LDBL_MIN_EXP # if HAVE_FREXPL_IN_LIBC && HAVE_LDEXPL_IN_LIBC # define USE_FREXP_LDEXP # define FREXP frexpl # define LDEXP ldexpl # endif # define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING # define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING () # define END_ROUNDING() END_LONG_DOUBLE_ROUNDING () # define L_(literal) literal##L #else # define FUNC printf_frexp # define DOUBLE double # define MIN_EXP DBL_MIN_EXP # if HAVE_FREXP_IN_LIBC && HAVE_LDEXP_IN_LIBC # define USE_FREXP_LDEXP # define FREXP frexp # define LDEXP ldexp # endif # define DECL_ROUNDING # define BEGIN_ROUNDING() # define END_ROUNDING() # define L_(literal) literal #endif DOUBLE FUNC (DOUBLE x, int *expptr) { int exponent; DECL_ROUNDING BEGIN_ROUNDING (); #ifdef USE_FREXP_LDEXP /* frexp and ldexp are usually faster than the loop below. */ x = FREXP (x, &exponent); x = x + x; exponent -= 1; if (exponent < MIN_EXP - 1) { x = LDEXP (x, exponent - (MIN_EXP - 1)); exponent = MIN_EXP - 1; } #else { /* Since the exponent is an 'int', it fits in 64 bits. Therefore the loops are executed no more than 64 times. */ DOUBLE pow2[64]; /* pow2[i] = 2^2^i */ DOUBLE powh[64]; /* powh[i] = 2^-2^i */ int i; exponent = 0; if (x >= L_(1.0)) { /* A nonnegative exponent. */ { DOUBLE pow2_i; /* = pow2[i] */ DOUBLE powh_i; /* = powh[i] */ /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, x * 2^exponent = argument, x >= 1.0. */ for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); ; i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) { if (x >= pow2_i) { exponent += (1 << i); x *= powh_i; } else break; pow2[i] = pow2_i; powh[i] = powh_i; } } /* Here 1.0 <= x < 2^2^i. */ } else { /* A negative exponent. */ { DOUBLE pow2_i; /* = pow2[i] */ DOUBLE powh_i; /* = powh[i] */ /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, x * 2^exponent = argument, x < 1.0, exponent >= MIN_EXP - 1. */ for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); ; i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) { if (exponent - (1 << i) < MIN_EXP - 1) break; exponent -= (1 << i); x *= pow2_i; if (x >= L_(1.0)) break; pow2[i] = pow2_i; powh[i] = powh_i; } } /* Here either x < 1.0 and exponent - 2^i < MIN_EXP - 1 <= exponent, or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ if (x < L_(1.0)) /* Invariants: x * 2^exponent = argument, x < 1.0 and exponent - 2^i < MIN_EXP - 1 <= exponent. */ while (i > 0) { i--; if (exponent - (1 << i) >= MIN_EXP - 1) { exponent -= (1 << i); x *= pow2[i]; if (x >= L_(1.0)) break; } } /* Here either x < 1.0 and exponent = MIN_EXP - 1, or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ } /* Invariants: x * 2^exponent = argument, and either x < 1.0 and exponent = MIN_EXP - 1, or 1.0 <= x < 2^2^i and exponent >= MIN_EXP - 1. */ while (i > 0) { i--; if (x >= pow2[i]) { exponent += (1 << i); x *= powh[i]; } } /* Here either x < 1.0 and exponent = MIN_EXP - 1, or 1.0 <= x < 2.0 and exponent >= MIN_EXP - 1. */ } #endif END_ROUNDING (); *expptr = exponent; return x; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getopt-pfx-ext.h�������������������������������������������������������������������0000644�0000000�0000000�00000005365�14226564450�013737� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt (GNU extensions) gnulib wrapper header. Copyright (C) 1989-2022 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_PFX_EXT_H #define _GETOPT_PFX_EXT_H 1 /* This header should not be used directly; include getopt.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. Systematically rename identifiers so that they do not collide with the system functions and variables. Renaming avoids problems with some compilers and linkers. */ #ifdef __GETOPT_PREFIX # ifndef __GETOPT_ID # define __GETOPT_CONCAT(x, y) x ## y # define __GETOPT_XCONCAT(x, y) __GETOPT_CONCAT (x, y) # define __GETOPT_ID(y) __GETOPT_XCONCAT (__GETOPT_PREFIX, y) # endif # undef getopt_long # undef getopt_long_only # undef option # undef _getopt_internal # define getopt_long __GETOPT_ID (getopt_long) # define getopt_long_only __GETOPT_ID (getopt_long_only) # define option __GETOPT_ID (option) # define _getopt_internal __GETOPT_ID (getopt_internal) /* The system's getopt.h may have already included getopt-ext.h to declare the unprefixed identifiers. Undef _GETOPT_EXT_H so that getopt-ext.h declares them with prefixes. */ # undef _GETOPT_EXT_H #endif /* Standalone applications get correct prototypes for getopt_long and getopt_long_only; they declare "char **argv". For backward compatibility with old applications, if __GETOPT_PREFIX is not defined, we supply GNU-libc-compatible, but incorrect, prototypes using "char *const *argv". (GNU libc is stuck with the incorrect prototypes, as they are baked into older versions of LSB.) */ #ifndef __getopt_argv_const # if defined __GETOPT_PREFIX # define __getopt_argv_const /* empty */ # else # define __getopt_argv_const const # endif #endif #include <getopt-ext.h> #endif /* _GETOPT_PFX_EXT_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/windows-once.h���������������������������������������������������������������������0000644�0000000�0000000�00000002602�14226564451�013450� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Once-only control (native Windows implementation). Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_ONCE_H #define _WINDOWS_ONCE_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> typedef struct { volatile int inited; volatile LONG started; CRITICAL_SECTION lock; } glwthread_once_t; #define GLWTHREAD_ONCE_INIT { -1, -1 } #ifdef __cplusplus extern "C" { #endif extern void glwthread_once (glwthread_once_t *once_control, void (*initfunction) (void)); #ifdef __cplusplus } #endif #endif /* _WINDOWS_ONCE_H */ ������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/filenamecat-lgpl.c�����������������������������������������������������������������0000644�0000000�0000000�00000005411�14226564446�014240� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two arbitrary file names. Copyright (C) 1996-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> /* Specification. */ #include "filenamecat.h" #include <stdlib.h> #include <string.h> #include "basename-lgpl.h" #include "filename.h" #if ! HAVE_MEMPCPY && ! defined mempcpy # define mempcpy(D, S, N) ((void *) ((char *) memcpy (D, S, N) + (N))) #endif /* Concatenate two file name components, DIR and BASE, in newly-allocated storage and return the result. The resulting file name F is such that the commands "ls F" and "(cd DIR; ls ./BASE)" refer to the same file. If necessary, put a separator between DIR and BASE in the result. Typically this separator is "/", but in rare cases it might be ".". In any case, if BASE_IN_RESULT is non-NULL, set *BASE_IN_RESULT to point to the copy of BASE at the end of the returned concatenation. If malloc fails, return NULL with errno set. */ char * mfile_name_concat (char const *dir, char const *base, char **base_in_result) { char const *dirbase = last_component (dir); size_t dirbaselen = base_len (dirbase); size_t dirlen = dirbase - dir + dirbaselen; size_t baselen = strlen (base); char sep = '\0'; if (dirbaselen) { /* DIR is not a file system root, so separate with / if needed. */ if (! ISSLASH (dir[dirlen - 1]) && ! ISSLASH (*base)) sep = '/'; } else if (ISSLASH (*base)) { /* DIR is a file system root and BASE begins with a slash, so separate with ".". For example, if DIR is "/" and BASE is "/foo" then return "/./foo", as "//foo" would be wrong on some POSIX systems. A fancier algorithm could omit "." in some cases but is not worth the trouble. */ sep = '.'; } char *p_concat = malloc (dirlen + (sep != '\0') + baselen + 1); if (p_concat == NULL) return NULL; { char *p; p = mempcpy (p_concat, dir, dirlen); *p = sep; p += sep != '\0'; if (base_in_result) *base_in_result = p; p = mempcpy (p, base, baselen); *p = '\0'; } return p_concat; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/crc.h������������������������������������������������������������������������������0000644�0000000�0000000�00000003667�14226564447�011624� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* crc.h -- cyclic redundancy checks Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson. */ #ifndef CRC_H # define CRC_H 1 #include <stddef.h> #include <stdint.h> /* Compute CRC-32 value of LEN bytes long BUF, and return it. */ extern uint32_t crc32 (const char *buf, size_t len); /* Incrementally update CRC-32 value CRC using LEN bytes long BUF. In the first call, use 0 as the value for CRC. Return the updated CRC-32 value. */ extern uint32_t crc32_update (uint32_t crc, const char *buf, size_t len); /* Compute modified-CRC-32 value of LEN bytes long BUF, and return it. The "modification" is to avoid the initial and final XOR operation. Due to historic implementation errors, this variant is sometimes used (i.e., in RFC 3961). */ extern uint32_t crc32_no_xor (const char *buf, size_t len); /* Incrementally update modified-CRC-32 value CRC using LEN bytes long BUF. In the first call, use 0 as the value for CRC. Return the updated modified-CRC-32 value. The "modification" is to avoid the initial and final XOR operation. Due to historic implementation errors, this variant is sometimes used (i.e., in RFC 3961). */ extern uint32_t crc32_update_no_xor (uint32_t crc, const char *buf, size_t len); #endif /* CRC_H */ �������������������������������������������������������������������������recutils-1.9/lib/write.c����������������������������������������������������������������������������0000644�0000000�0000000�00000012377�14226564451�012173� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible write() function. Copyright (C) 2008-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> /* On native Windows platforms, SIGPIPE does not exist. When write() is called on a pipe with no readers, WriteFile() fails with error GetLastError() = ERROR_NO_DATA, and write() in consequence fails with error EINVAL. */ #if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <signal.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA # undef write # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static ssize_t write_nothrow (int fd, const void *buf, size_t count) { ssize_t result; TRY_MSVC_INVAL { result = _write (fd, buf, count); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define write_nothrow _write # endif ssize_t rpl_write (int fd, const void *buf, size_t count) { for (;;) { ssize_t ret = write_nothrow (fd, buf, count); if (ret < 0) { # if GNULIB_NONBLOCKING if (errno == ENOSPC) { HANDLE h = (HANDLE) _get_osfhandle (fd); if (GetFileType (h) == FILE_TYPE_PIPE) { /* h is a pipe or socket. */ DWORD state; if (GetNamedPipeHandleState (h, &state, NULL, NULL, NULL, NULL, 0) && (state & PIPE_NOWAIT) != 0) { /* h is a pipe in non-blocking mode. We can get here in four situations: 1. When the pipe buffer is full. 2. When count <= pipe_buf_size and the number of free bytes in the pipe buffer is < count. 3. When count > pipe_buf_size and the number of free bytes in the pipe buffer is > 0, < pipe_buf_size. 4. When count > pipe_buf_size and the pipe buffer is entirely empty. The cases 1 and 2 are POSIX compliant. In cases 3 and 4 POSIX specifies that write() must split the request and succeed with a partial write. We fix case 4. We don't fix case 3 because it is not essential for programs. */ DWORD out_size; /* size of the buffer for outgoing data */ DWORD in_size; /* size of the buffer for incoming data */ if (GetNamedPipeInfo (h, NULL, &out_size, &in_size, NULL)) { size_t reduced_count = count; /* In theory we need only one of out_size, in_size. But I don't know which of the two. The description is ambiguous. */ if (out_size != 0 && out_size < reduced_count) reduced_count = out_size; if (in_size != 0 && in_size < reduced_count) reduced_count = in_size; if (reduced_count < count) { /* Attempt to write only the first part. */ count = reduced_count; continue; } } /* Change errno from ENOSPC to EAGAIN. */ errno = EAGAIN; } } } else # endif { # if GNULIB_SIGPIPE if (GetLastError () == ERROR_NO_DATA && GetFileType ((HANDLE) _get_osfhandle (fd)) == FILE_TYPE_PIPE) { /* Try to raise signal SIGPIPE. */ raise (SIGPIPE); /* If it is currently blocked or ignored, change errno from EINVAL to EPIPE. */ errno = EPIPE; } # endif } } return ret; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/execute.h��������������������������������������������������������������������������0000644�0000000�0000000�00000005412�14226564447�012505� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Creation of autonomous subprocesses. Copyright (C) 2001-2003, 2008-2022 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _EXECUTE_H #define _EXECUTE_H #include <stdbool.h> /* Execute a command, optionally redirecting any of the three standard file descriptors to /dev/null. Return its exit code. If it didn't terminate correctly, exit if exit_on_error is true, otherwise return 127. progname is the name of the program to be executed by the subprocess, used for error messages. prog_path is the file name of the program to be executed by the subprocess. If it contains no slashes, a search is conducted in $PATH. An operating system dependent suffix is added, if necessary. prog_argv is the array of strings that the subprocess shall receive in argv[]. It is a NULL-terminated array. prog_argv[0] should normally be identical to prog_path. If directory is not NULL, the command is executed in that directory. If prog_path is a relative file name, it resolved before changing to that directory. The current directory of the current process remains unchanged. If ignore_sigpipe is true, consider a subprocess termination due to SIGPIPE as equivalent to a success. This is suitable for processes whose only purpose is to write to standard output. If slave_process is true, the child process will be terminated when its creator receives a catchable fatal signal. If termsigp is not NULL, *termsig will be set to the signal that terminated the subprocess (if supported by the platform: not on native Windows platforms), otherwise 0. It is recommended that no signal is blocked or ignored while execute() is called. See spawn-pipe.h for the reason. */ extern int execute (const char *progname, const char *prog_path, const char * const *prog_argv, const char *directory, bool ignore_sigpipe, bool null_stdin, bool null_stdout, bool null_stderr, bool slave_process, bool exit_on_error, int *termsigp); #endif /* _EXECUTE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/mktime.c���������������������������������������������������������������������������0000644�0000000�0000000�00000045347�14226564450�012331� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert a 'struct tm' to a time_t value. Copyright (C) 1993-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Eggert <eggert@twinsun.com>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* The following macros influence what gets defined when this file is compiled: Macro/expression Which gnulib module This compilation unit should define _LIBC (glibc proper) mktime NEED_MKTIME_WORKING mktime rpl_mktime || NEED_MKTIME_WINDOWS NEED_MKTIME_INTERNAL mktime-internal mktime_internal */ #ifndef _LIBC # include <libc-config.h> #endif /* Assume that leap seconds are possible, unless told otherwise. If the host has a 'zic' command with a '-L leapsecondfilename' option, then it supports leap seconds; otherwise it probably doesn't. */ #ifndef LEAP_SECONDS_POSSIBLE # define LEAP_SECONDS_POSSIBLE 1 #endif #include <time.h> #include <errno.h> #include <limits.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <intprops.h> #include <verify.h> #ifndef NEED_MKTIME_INTERNAL # define NEED_MKTIME_INTERNAL 0 #endif #ifndef NEED_MKTIME_WINDOWS # define NEED_MKTIME_WINDOWS 0 #endif #ifndef NEED_MKTIME_WORKING # define NEED_MKTIME_WORKING 0 #endif #include "mktime-internal.h" #if !defined _LIBC && (NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS) static void my_tzset (void) { # if NEED_MKTIME_WINDOWS /* Rectify the value of the environment variable TZ. There are four possible kinds of such values: - Traditional US time zone names, e.g. "PST8PDT". Syntax: see <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/tzset> - Time zone names based on geography, that contain one or more slashes, e.g. "Europe/Moscow". - Time zone names based on geography, without slashes, e.g. "Singapore". - Time zone names that contain explicit DST rules. Syntax: see <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03> The Microsoft CRT understands only the first kind. It produces incorrect results if the value of TZ is of the other kinds. But in a Cygwin environment, /etc/profile.d/tzset.sh sets TZ to a value of the second kind for most geographies, or of the first kind in a few other geographies. If it is of the second kind, neutralize it. For the Microsoft CRT, an absent or empty TZ means the time zone that the user has set in the Windows Control Panel. If the value of TZ is of the third or fourth kind -- Cygwin programs understand these syntaxes as well --, it does not matter whether we neutralize it or not, since these values occur only when a Cygwin user has set TZ explicitly; this case is 1. rare and 2. under the user's responsibility. */ const char *tz = getenv ("TZ"); if (tz != NULL && strchr (tz, '/') != NULL) _putenv ("TZ="); # else tzset (); # endif } # undef __tzset # define __tzset() my_tzset () #endif #if defined _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_INTERNAL /* A signed type that can represent an integer number of years multiplied by four times the number of seconds in a year. It is needed when converting a tm_year value times the number of seconds in a year. The factor of four comes because these products need to be subtracted from each other, and sometimes with an offset added to them, and then with another timestamp added, without worrying about overflow. Much of the code uses long_int to represent __time64_t values, to lessen the hassle of dealing with platforms where __time64_t is unsigned, and because long_int should suffice to represent all __time64_t values that mktime can generate even on platforms where __time64_t is wider than the int components of struct tm. */ #if INT_MAX <= LONG_MAX / 4 / 366 / 24 / 60 / 60 typedef long int long_int; #else typedef long long int long_int; #endif verify (INT_MAX <= TYPE_MAXIMUM (long_int) / 4 / 366 / 24 / 60 / 60); /* Shift A right by B bits portably, by dividing A by 2**B and truncating towards minus infinity. B should be in the range 0 <= B <= LONG_INT_BITS - 2, where LONG_INT_BITS is the number of useful bits in a long_int. LONG_INT_BITS is at least 32. ISO C99 says that A >> B is implementation-defined if A < 0. Some implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift right in the usual way when A < 0, so SHR falls back on division if ordinary A >> B doesn't seem to be the usual signed shift. */ static long_int shr (long_int a, int b) { long_int one = 1; return (-one >> 1 == -1 ? a >> b : (a + (a < 0)) / (one << b) - (a < 0)); } /* Bounds for the intersection of __time64_t and long_int. */ static long_int const mktime_min = ((TYPE_SIGNED (__time64_t) && TYPE_MINIMUM (__time64_t) < TYPE_MINIMUM (long_int)) ? TYPE_MINIMUM (long_int) : TYPE_MINIMUM (__time64_t)); static long_int const mktime_max = (TYPE_MAXIMUM (long_int) < TYPE_MAXIMUM (__time64_t) ? TYPE_MAXIMUM (long_int) : TYPE_MAXIMUM (__time64_t)); #define EPOCH_YEAR 1970 #define TM_YEAR_BASE 1900 verify (TM_YEAR_BASE % 100 == 0); /* Is YEAR + TM_YEAR_BASE a leap year? */ static bool leapyear (long_int year) { /* Don't add YEAR to TM_YEAR_BASE, as that might overflow. Also, work even if YEAR is negative. */ return ((year & 3) == 0 && (year % 100 != 0 || ((year / 100) & 3) == (- (TM_YEAR_BASE / 100) & 3))); } /* How many days come before each month (0-12). */ #ifndef _LIBC static #endif const unsigned short int __mon_yday[2][13] = { /* Normal years. */ { 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334, 365 }, /* Leap years. */ { 0, 31, 60, 91, 121, 152, 182, 213, 244, 274, 305, 335, 366 } }; /* Do the values A and B differ according to the rules for tm_isdst? A and B differ if one is zero and the other positive. */ static bool isdst_differ (int a, int b) { return (!a != !b) && (0 <= a) && (0 <= b); } /* Return an integer value measuring (YEAR1-YDAY1 HOUR1:MIN1:SEC1) - (YEAR0-YDAY0 HOUR0:MIN0:SEC0) in seconds, assuming that the clocks were not adjusted between the timestamps. The YEAR values uses the same numbering as TP->tm_year. Values need not be in the usual range. However, YEAR1 - YEAR0 must not overflow even when multiplied by three times the number of seconds in a year, and likewise for YDAY1 - YDAY0 and three times the number of seconds in a day. */ static long_int ydhms_diff (long_int year1, long_int yday1, int hour1, int min1, int sec1, int year0, int yday0, int hour0, int min0, int sec0) { verify (-1 / 2 == 0); /* Compute intervening leap days correctly even if year is negative. Take care to avoid integer overflow here. */ int a4 = shr (year1, 2) + shr (TM_YEAR_BASE, 2) - ! (year1 & 3); int b4 = shr (year0, 2) + shr (TM_YEAR_BASE, 2) - ! (year0 & 3); int a100 = (a4 + (a4 < 0)) / 25 - (a4 < 0); int b100 = (b4 + (b4 < 0)) / 25 - (b4 < 0); int a400 = shr (a100, 2); int b400 = shr (b100, 2); int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); /* Compute the desired time without overflowing. */ long_int years = year1 - year0; long_int days = 365 * years + yday1 - yday0 + intervening_leap_days; long_int hours = 24 * days + hour1 - hour0; long_int minutes = 60 * hours + min1 - min0; long_int seconds = 60 * minutes + sec1 - sec0; return seconds; } /* Return the average of A and B, even if A + B would overflow. Round toward positive infinity. */ static long_int long_int_avg (long_int a, long_int b) { return shr (a, 1) + shr (b, 1) + ((a | b) & 1); } /* Return a long_int value corresponding to (YEAR-YDAY HOUR:MIN:SEC) minus *TP seconds, assuming no clock adjustments occurred between the two timestamps. YEAR and YDAY must not be so large that multiplying them by three times the number of seconds in a year (or day, respectively) would overflow long_int. *TP should be in the usual range. */ static long_int tm_diff (long_int year, long_int yday, int hour, int min, int sec, struct tm const *tp) { return ydhms_diff (year, yday, hour, min, sec, tp->tm_year, tp->tm_yday, tp->tm_hour, tp->tm_min, tp->tm_sec); } /* Use CONVERT to convert T to a struct tm value in *TM. T must be in range for __time64_t. Return TM if successful, NULL (setting errno) on failure. */ static struct tm * convert_time (struct tm *(*convert) (const __time64_t *, struct tm *), long_int t, struct tm *tm) { __time64_t x = t; return convert (&x, tm); } /* Use CONVERT to convert *T to a broken down time in *TP. If *T is out of range for conversion, adjust it so that it is the nearest in-range value and then convert that. A value is in range if it fits in both __time64_t and long_int. Return TP on success, NULL (setting errno) on failure. */ static struct tm * ranged_convert (struct tm *(*convert) (const __time64_t *, struct tm *), long_int *t, struct tm *tp) { long_int t1 = (*t < mktime_min ? mktime_min : *t <= mktime_max ? *t : mktime_max); struct tm *r = convert_time (convert, t1, tp); if (r) { *t = t1; return r; } if (errno != EOVERFLOW) return NULL; long_int bad = t1; long_int ok = 0; struct tm oktm; oktm.tm_sec = -1; /* BAD is a known out-of-range value, and OK is a known in-range one. Use binary search to narrow the range between BAD and OK until they differ by 1. */ while (true) { long_int mid = long_int_avg (ok, bad); if (mid == ok || mid == bad) break; if (convert_time (convert, mid, tp)) ok = mid, oktm = *tp; else if (errno != EOVERFLOW) return NULL; else bad = mid; } if (oktm.tm_sec < 0) return NULL; *t = ok; *tp = oktm; return tp; } /* Convert *TP to a __time64_t value, inverting the monotonic and mostly-unit-linear conversion function CONVERT. Use *OFFSET to keep track of a guess at the offset of the result, compared to what the result would be for UTC without leap seconds. If *OFFSET's guess is correct, only one CONVERT call is needed. If successful, set *TP to the canonicalized struct tm; otherwise leave *TP alone, return ((time_t) -1) and set errno. This function is external because it is used also by timegm.c. */ __time64_t __mktime_internal (struct tm *tp, struct tm *(*convert) (const __time64_t *, struct tm *), mktime_offset_t *offset) { struct tm tm; /* The maximum number of probes (calls to CONVERT) should be enough to handle any combinations of time zone rule changes, solar time, leap seconds, and oscillations around a spring-forward gap. POSIX.1 prohibits leap seconds, but some hosts have them anyway. */ int remaining_probes = 6; /* Time requested. Copy it in case CONVERT modifies *TP; this can occur if TP is localtime's returned value and CONVERT is localtime. */ int sec = tp->tm_sec; int min = tp->tm_min; int hour = tp->tm_hour; int mday = tp->tm_mday; int mon = tp->tm_mon; int year_requested = tp->tm_year; int isdst = tp->tm_isdst; /* 1 if the previous probe was DST. */ int dst2 = 0; /* Ensure that mon is in range, and set year accordingly. */ int mon_remainder = mon % 12; int negative_mon_remainder = mon_remainder < 0; int mon_years = mon / 12 - negative_mon_remainder; long_int lyear_requested = year_requested; long_int year = lyear_requested + mon_years; /* The other values need not be in range: the remaining code handles overflows correctly. */ /* Calculate day of year from year, month, and day of month. The result need not be in range. */ int mon_yday = ((__mon_yday[leapyear (year)] [mon_remainder + 12 * negative_mon_remainder]) - 1); long_int lmday = mday; long_int yday = mon_yday + lmday; mktime_offset_t off = *offset; int negative_offset_guess; int sec_requested = sec; if (LEAP_SECONDS_POSSIBLE) { /* Handle out-of-range seconds specially, since ydhms_diff assumes every minute has 60 seconds. */ if (sec < 0) sec = 0; if (59 < sec) sec = 59; } /* Invert CONVERT by probing. First assume the same offset as last time. */ INT_SUBTRACT_WRAPV (0, off, &negative_offset_guess); long_int t0 = ydhms_diff (year, yday, hour, min, sec, EPOCH_YEAR - TM_YEAR_BASE, 0, 0, 0, negative_offset_guess); long_int t = t0, t1 = t0, t2 = t0; /* Repeatedly use the error to improve the guess. */ while (true) { if (! ranged_convert (convert, &t, &tm)) return -1; long_int dt = tm_diff (year, yday, hour, min, sec, &tm); if (dt == 0) break; if (t == t1 && t != t2 && (tm.tm_isdst < 0 || (isdst < 0 ? dst2 <= (tm.tm_isdst != 0) : (isdst != 0) != (tm.tm_isdst != 0)))) /* We can't possibly find a match, as we are oscillating between two values. The requested time probably falls within a spring-forward gap of size DT. Follow the common practice in this case, which is to return a time that is DT away from the requested time, preferring a time whose tm_isdst differs from the requested value. (If no tm_isdst was requested and only one of the two values has a nonzero tm_isdst, prefer that value.) In practice, this is more useful than returning -1. */ goto offset_found; remaining_probes--; if (remaining_probes == 0) { __set_errno (EOVERFLOW); return -1; } t1 = t2, t2 = t, t += dt, dst2 = tm.tm_isdst != 0; } /* We have a match. Check whether tm.tm_isdst has the requested value, if any. */ if (isdst_differ (isdst, tm.tm_isdst)) { /* tm.tm_isdst has the wrong value. Look for a neighboring time with the right value, and use its UTC offset. Heuristic: probe the adjacent timestamps in both directions, looking for the desired isdst. If none is found within a reasonable duration bound, assume a one-hour DST difference. This should work for all real time zone histories in the tz database. */ /* +1 if we wanted standard time but got DST, -1 if the reverse. */ int dst_difference = (isdst == 0) - (tm.tm_isdst == 0); /* Distance between probes when looking for a DST boundary. In tzdata2003a, the shortest period of DST is 601200 seconds (e.g., America/Recife starting 2000-10-08 01:00), and the shortest period of non-DST surrounded by DST is 694800 seconds (Africa/Tunis starting 1943-04-17 01:00). Use the minimum of these two values, so we don't miss these short periods when probing. */ int stride = 601200; /* In TZDB 2021e, the longest period of DST (or of non-DST), in which the DST (or adjacent DST) difference is not one hour, is 457243209 seconds: e.g., America/Cambridge_Bay with leap seconds, starting 1965-10-31 00:00 in a switch from double-daylight time (-05) to standard time (-07), and continuing to 1980-04-27 02:00 in a switch from standard time (-07) to daylight time (-06). */ int duration_max = 457243209; /* Search in both directions, so the maximum distance is half the duration; add the stride to avoid off-by-1 problems. */ int delta_bound = duration_max / 2 + stride; int delta, direction; for (delta = stride; delta < delta_bound; delta += stride) for (direction = -1; direction <= 1; direction += 2) { long_int ot; if (! INT_ADD_WRAPV (t, delta * direction, &ot)) { struct tm otm; if (! ranged_convert (convert, &ot, &otm)) return -1; if (! isdst_differ (isdst, otm.tm_isdst)) { /* We found the desired tm_isdst. Extrapolate back to the desired time. */ long_int gt = ot + tm_diff (year, yday, hour, min, sec, &otm); if (mktime_min <= gt && gt <= mktime_max) { if (convert_time (convert, gt, &tm)) { t = gt; goto offset_found; } if (errno != EOVERFLOW) return -1; } } } } /* No unusual DST offset was found nearby. Assume one-hour DST. */ t += 60 * 60 * dst_difference; if (mktime_min <= t && t <= mktime_max && convert_time (convert, t, &tm)) goto offset_found; __set_errno (EOVERFLOW); return -1; } offset_found: /* Set *OFFSET to the low-order bits of T - T0 - NEGATIVE_OFFSET_GUESS. This is just a heuristic to speed up the next mktime call, and correctness is unaffected if integer overflow occurs here. */ INT_SUBTRACT_WRAPV (t, t0, offset); INT_SUBTRACT_WRAPV (*offset, negative_offset_guess, offset); if (LEAP_SECONDS_POSSIBLE && sec_requested != tm.tm_sec) { /* Adjust time to reflect the tm_sec requested, not the normalized value. Also, repair any damage from a false match due to a leap second. */ long_int sec_adjustment = sec == 0 && tm.tm_sec == 60; sec_adjustment -= sec; sec_adjustment += sec_requested; if (INT_ADD_WRAPV (t, sec_adjustment, &t) || ! (mktime_min <= t && t <= mktime_max)) { __set_errno (EOVERFLOW); return -1; } if (! convert_time (convert, t, &tm)) return -1; } *tp = tm; return t; } #endif /* _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_INTERNAL */ #if defined _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS /* Convert *TP to a __time64_t value. */ __time64_t __mktime64 (struct tm *tp) { /* POSIX.1 8.1.1 requires that whenever mktime() is called, the time zone names contained in the external variable 'tzname' shall be set as if the tzset() function had been called. */ __tzset (); # if defined _LIBC || NEED_MKTIME_WORKING static mktime_offset_t localtime_offset; return __mktime_internal (tp, __localtime64_r, &localtime_offset); # else # undef mktime return mktime (tp); # endif } #endif /* _LIBC || NEED_MKTIME_WORKING || NEED_MKTIME_WINDOWS */ #if defined _LIBC && __TIMESIZE != 64 libc_hidden_def (__mktime64) time_t mktime (struct tm *tp) { struct tm tm = *tp; __time64_t t = __mktime64 (&tm); if (in_time_t_range (t)) { *tp = tm; return t; } else { __set_errno (EOVERFLOW); return -1; } } #endif weak_alias (mktime, timelocal) libc_hidden_def (mktime) libc_hidden_weak (timelocal) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/mbtowc-impl.h����������������������������������������������������������������������0000644�0000000�0000000�00000002650�14226564450�013270� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 2011-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* We don't need a static internal state, because the encoding is not state dependent, and when mbrtowc returns (size_t)(-2). we throw the result away. */ int mbtowc (wchar_t *pwc, const char *s, size_t n) { if (s == NULL) return 0; else { mbstate_t state; wchar_t wc; size_t result; memset (&state, 0, sizeof (mbstate_t)); result = mbrtowc (&wc, s, n, &state); if (result == (size_t)-1 || result == (size_t)-2) { errno = EILSEQ; return -1; } if (pwc != NULL) *pwc = wc; return (wc == 0 ? 0 : result); } } ����������������������������������������������������������������������������������������recutils-1.9/lib/langinfo.in.h����������������������������������������������������������������������0000644�0000000�0000000�00000015124�14226564450�013240� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <langinfo.h>. Copyright (C) 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* * POSIX <langinfo.h> for platforms that lack it or have an incomplete one. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/langinfo.h.html> */ #ifndef _@GUARD_PREFIX@_LANGINFO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_LANGINFO_H@ # @INCLUDE_NEXT@ @NEXT_LANGINFO_H@ #endif #ifndef _@GUARD_PREFIX@_LANGINFO_H #define _@GUARD_PREFIX@_LANGINFO_H #if !@HAVE_LANGINFO_H@ /* A platform that lacks <langinfo.h>. */ /* Assume that it also lacks <nl_types.h> and the nl_item type. */ # if !GNULIB_defined_nl_item typedef int nl_item; # define GNULIB_defined_nl_item 1 # endif /* nl_langinfo items of the LC_CTYPE category */ # define CODESET 10000 /* nl_langinfo items of the LC_NUMERIC category */ # define RADIXCHAR 10001 # define DECIMAL_POINT RADIXCHAR # define THOUSEP 10002 # define THOUSANDS_SEP THOUSEP # define GROUPING 10114 /* nl_langinfo items of the LC_TIME category */ # define D_T_FMT 10003 # define D_FMT 10004 # define T_FMT 10005 # define T_FMT_AMPM 10006 # define AM_STR 10007 # define PM_STR 10008 # define DAY_1 10009 # define DAY_2 (DAY_1 + 1) # define DAY_3 (DAY_1 + 2) # define DAY_4 (DAY_1 + 3) # define DAY_5 (DAY_1 + 4) # define DAY_6 (DAY_1 + 5) # define DAY_7 (DAY_1 + 6) # define ABDAY_1 10016 # define ABDAY_2 (ABDAY_1 + 1) # define ABDAY_3 (ABDAY_1 + 2) # define ABDAY_4 (ABDAY_1 + 3) # define ABDAY_5 (ABDAY_1 + 4) # define ABDAY_6 (ABDAY_1 + 5) # define ABDAY_7 (ABDAY_1 + 6) # define MON_1 10023 # define MON_2 (MON_1 + 1) # define MON_3 (MON_1 + 2) # define MON_4 (MON_1 + 3) # define MON_5 (MON_1 + 4) # define MON_6 (MON_1 + 5) # define MON_7 (MON_1 + 6) # define MON_8 (MON_1 + 7) # define MON_9 (MON_1 + 8) # define MON_10 (MON_1 + 9) # define MON_11 (MON_1 + 10) # define MON_12 (MON_1 + 11) # define ALTMON_1 10200 # define ALTMON_2 (ALTMON_1 + 1) # define ALTMON_3 (ALTMON_1 + 2) # define ALTMON_4 (ALTMON_1 + 3) # define ALTMON_5 (ALTMON_1 + 4) # define ALTMON_6 (ALTMON_1 + 5) # define ALTMON_7 (ALTMON_1 + 6) # define ALTMON_8 (ALTMON_1 + 7) # define ALTMON_9 (ALTMON_1 + 8) # define ALTMON_10 (ALTMON_1 + 9) # define ALTMON_11 (ALTMON_1 + 10) # define ALTMON_12 (ALTMON_1 + 11) # define ABMON_1 10035 # define ABMON_2 (ABMON_1 + 1) # define ABMON_3 (ABMON_1 + 2) # define ABMON_4 (ABMON_1 + 3) # define ABMON_5 (ABMON_1 + 4) # define ABMON_6 (ABMON_1 + 5) # define ABMON_7 (ABMON_1 + 6) # define ABMON_8 (ABMON_1 + 7) # define ABMON_9 (ABMON_1 + 8) # define ABMON_10 (ABMON_1 + 9) # define ABMON_11 (ABMON_1 + 10) # define ABMON_12 (ABMON_1 + 11) # define ERA 10047 # define ERA_D_FMT 10048 # define ERA_D_T_FMT 10049 # define ERA_T_FMT 10050 # define ALT_DIGITS 10051 /* nl_langinfo items of the LC_MONETARY category */ # define CRNCYSTR 10052 # define CURRENCY_SYMBOL CRNCYSTR # define INT_CURR_SYMBOL 10100 # define MON_DECIMAL_POINT 10101 # define MON_THOUSANDS_SEP 10102 # define MON_GROUPING 10103 # define POSITIVE_SIGN 10104 # define NEGATIVE_SIGN 10105 # define FRAC_DIGITS 10106 # define INT_FRAC_DIGITS 10107 # define P_CS_PRECEDES 10108 # define N_CS_PRECEDES 10109 # define P_SEP_BY_SPACE 10110 # define N_SEP_BY_SPACE 10111 # define P_SIGN_POSN 10112 # define N_SIGN_POSN 10113 /* nl_langinfo items of the LC_MESSAGES category */ # define YESEXPR 10053 # define NOEXPR 10054 #else /* A platform that has <langinfo.h>. */ # if !@HAVE_LANGINFO_CODESET@ # define CODESET 10000 # define GNULIB_defined_CODESET 1 # endif # if !@HAVE_LANGINFO_T_FMT_AMPM@ # define T_FMT_AMPM 10006 # define GNULIB_defined_T_FMT_AMPM 1 # endif # if !@HAVE_LANGINFO_ALTMON@ # define ALTMON_1 10200 # define ALTMON_2 (ALTMON_1 + 1) # define ALTMON_3 (ALTMON_1 + 2) # define ALTMON_4 (ALTMON_1 + 3) # define ALTMON_5 (ALTMON_1 + 4) # define ALTMON_6 (ALTMON_1 + 5) # define ALTMON_7 (ALTMON_1 + 6) # define ALTMON_8 (ALTMON_1 + 7) # define ALTMON_9 (ALTMON_1 + 8) # define ALTMON_10 (ALTMON_1 + 9) # define ALTMON_11 (ALTMON_1 + 10) # define ALTMON_12 (ALTMON_1 + 11) # define GNULIB_defined_ALTMON 1 # endif # if !@HAVE_LANGINFO_ERA@ # define ERA 10047 # define ERA_D_FMT 10048 # define ERA_D_T_FMT 10049 # define ERA_T_FMT 10050 # define ALT_DIGITS 10051 # define GNULIB_defined_ERA 1 # endif # if !@HAVE_LANGINFO_YESEXPR@ # define YESEXPR 10053 # define NOEXPR 10054 # define GNULIB_defined_YESEXPR 1 # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ /* Return a piece of locale dependent information. Note: The difference between nl_langinfo (CODESET) and locale_charset () is that the latter normalizes the encoding names to GNU conventions. */ #if @GNULIB_NL_LANGINFO@ # if @REPLACE_NL_LANGINFO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef nl_langinfo # define nl_langinfo rpl_nl_langinfo # endif _GL_FUNCDECL_RPL (nl_langinfo, char *, (nl_item item)); _GL_CXXALIAS_RPL (nl_langinfo, char *, (nl_item item)); # else # if !@HAVE_NL_LANGINFO@ _GL_FUNCDECL_SYS (nl_langinfo, char *, (nl_item item)); # endif _GL_CXXALIAS_SYS (nl_langinfo, char *, (nl_item item)); # endif _GL_CXXALIASWARN (nl_langinfo); #elif defined GNULIB_POSIXCHECK # undef nl_langinfo # if HAVE_RAW_DECL_NL_LANGINFO _GL_WARN_ON_USE (nl_langinfo, "nl_langinfo is not portable - " "use gnulib module nl_langinfo for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_LANGINFO_H */ #endif /* _@GUARD_PREFIX@_LANGINFO_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/gl_list.c��������������������������������������������������������������������������0000644�0000000�0000000�00000001517�14226564450�012467� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Abstract sequential list data type. Copyright (C) 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define GL_LIST_INLINE _GL_EXTERN_INLINE #include "gl_list.h" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/binary-io.h������������������������������������������������������������������������0000644�0000000�0000000�00000004620�14226564447�012734� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Binary mode I/O. Copyright (C) 2001, 2003, 2005, 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _BINARY_H #define _BINARY_H /* For systems that distinguish between text and binary I/O. O_BINARY is guaranteed by the gnulib <fcntl.h>. */ #include <fcntl.h> /* The MSVC7 <stdio.h> doesn't like to be included after '#define fileno ...', so we include it here first. */ #include <stdio.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef BINARY_IO_INLINE # define BINARY_IO_INLINE _GL_INLINE #endif #if O_BINARY # if defined __EMX__ || defined __DJGPP__ || defined __CYGWIN__ # include <io.h> /* declares setmode() */ # define __gl_setmode setmode # else # define __gl_setmode _setmode # undef fileno # define fileno _fileno # endif #else /* On reasonable systems, binary I/O is the only choice. */ /* Use a function rather than a macro, to avoid gcc warnings "warning: statement with no effect". */ BINARY_IO_INLINE int __gl_setmode (_GL_UNUSED int fd, _GL_UNUSED int mode) { return O_BINARY; } #endif /* Set FD's mode to MODE, which should be either O_TEXT or O_BINARY. Return the old mode if successful, -1 (setting errno) on failure. Ordinarily this function would be called 'setmode', since that is its old name on MS-Windows, but it is called 'set_binary_mode' here to avoid colliding with a BSD function of another name. */ #if defined __DJGPP__ || defined __EMX__ extern int set_binary_mode (int fd, int mode); #else BINARY_IO_INLINE int set_binary_mode (int fd, int mode) { return __gl_setmode (fd, mode); } #endif /* This macro is obsolescent. */ #define SET_BINARY(fd) ((void) set_binary_mode (fd, O_BINARY)) _GL_INLINE_HEADER_END #endif /* _BINARY_H */ ����������������������������������������������������������������������������������������������������������������recutils-1.9/lib/thread-optim.h���������������������������������������������������������������������0000644�0000000�0000000�00000004241�14226564451�013432� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Optimization of multithreaded code. Copyright (C) 2020-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2020. */ #ifndef _THREAD_OPTIM_H #define _THREAD_OPTIM_H /* This file defines a way to optimize multithreaded code for the single-thread case, based on the variable '__libc_single_threaded', defined in glibc >= 2.32. */ /* Typical use: In a block or function, use bool mt = gl_multithreaded (); ... if (mt) if (pthread_mutex_lock (&lock)) abort (); ... if (mt) if (pthread_mutex_unlock (&lock)) abort (); The gl_multithreaded () invocation determines whether the program currently is multithreaded. if (mt) STATEMENT executes STATEMENT in the multithreaded case, and skips it in the single-threaded case. The code between the gl_multithreaded () invocation and any use of the variable 'mt' must not create threads or invoke functions that may indirectly create threads (e.g. 'dlopen' may, indirectly through C++ initializers of global variables in the shared library being opened, create threads). The lock here is meant to synchronize threads in the same process. The same optimization cannot be applied to locks that synchronize different processes (e.g. through shared memory mappings). */ #if HAVE_SYS_SINGLE_THREADED_H /* glibc >= 2.32 */ # include <sys/single_threaded.h> # define gl_multithreaded() !__libc_single_threaded #else # define gl_multithreaded() 1 #endif #endif /* _THREAD_OPTIM_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getfilecon.c�����������������������������������������������������������������������0000644�0000000�0000000�00000004564�14226564450�013156� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* wrap getfilecon, lgetfilecon, and fgetfilecon Copyright (C) 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> #include <selinux/selinux.h> #include <sys/types.h> #include <errno.h> #include <string.h> /* FIXME: remove this once there is an errno-gnu module that guarantees the definition of ENODATA. */ #ifndef ENODATA # define ENODATA ENOTSUP #endif #undef getfilecon #undef lgetfilecon #undef fgetfilecon int getfilecon (char const *file, char **con); int lgetfilecon (char const *file, char **con); int fgetfilecon (int fd, char **con); /* getfilecon, lgetfilecon, and fgetfilecon can all misbehave, be it via an old version of libselinux where these would return 0 and set the result context to NULL, or via a modern kernel+lib operating on a file from a disk whose attributes were set by a kernel from around 2006. In that latter case, the functions return a length of 10 for the "unlabeled" context. Map both failures to a return value of -1, and set errno to ENOTSUP in the first case, and ENODATA in the latter. */ static int map_to_failure (int ret, char **con) { if (ret == 0) { errno = ENOTSUP; return -1; } if (ret == 10 && strcmp (*con, "unlabeled") == 0) { freecon (*con); *con = NULL; errno = ENODATA; return -1; } return ret; } int rpl_getfilecon (char const *file, char **con) { int ret = getfilecon (file, con); return map_to_failure (ret, con); } int rpl_lgetfilecon (char const *file, char **con) { int ret = lgetfilecon (file, con); return map_to_failure (ret, con); } int rpl_fgetfilecon (int fd, char**con) { int ret = fgetfilecon (fd, con); return map_to_failure (ret, con); } ��������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/memchr.c���������������������������������������������������������������������������0000644�0000000�0000000�00000013455�14226564450�012311� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2004, 2006, 2008-2022 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and commentary by Jim Blandy (jimb@ai.mit.edu); adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), and implemented by Roland McGrath (roland@ai.mit.edu). NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif #include <string.h> #include <stddef.h> #if defined _LIBC # include <memcopy.h> #else # define reg_char char #endif #include <limits.h> #if HAVE_BP_SYM_H || defined _LIBC # include <bp-sym.h> #else # define BP_SYM(sym) sym #endif #undef __memchr #ifdef _LIBC # undef memchr #endif #ifndef weak_alias # define __memchr memchr #endif /* Search no more than N bytes of S for C. */ void * __memchr (void const *s, int c_in, size_t n) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned reg_char c; c = (unsigned char) c_in; /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; n > 0 && (size_t) char_ptr % sizeof (longword) != 0; --n, ++char_ptr) if (*char_ptr == c) return (void *) char_ptr; longword_ptr = (const longword *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 is zero. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. So, the test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. */ while (n >= sizeof (longword)) { longword longword1 = *longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & (repeated_one << 7)) != 0) break; longword_ptr++; n -= sizeof (longword); } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that either n < sizeof (longword), or one of the sizeof (longword) bytes starting at char_ptr is == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ for (; n > 0; --n, ++char_ptr) { if (*char_ptr == c) return (void *) char_ptr; } return NULL; } #ifdef weak_alias weak_alias (__memchr, BP_SYM (memchr)) #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloca.h��������������������������������������������������������������������������0000644�0000000�0000000�00000010773�14226564450�012453� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation. Copyright (C) 2003-2007, 2009-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _MALLOCA_H #define _MALLOCA_H #include <alloca.h> #include <stddef.h> #include <stdlib.h> #include <stdint.h> #include "xalloc-oversized.h" #ifdef __cplusplus extern "C" { #endif /* safe_alloca(N) is equivalent to alloca(N) when it is safe to call alloca(N); otherwise it returns NULL. It either returns N bytes of memory allocated on the stack, that lasts until the function returns, or NULL. Use of safe_alloca should be avoided: - inside arguments of function calls - undefined behaviour, - in inline functions - the allocation may actually last until the calling function returns. */ #if HAVE_ALLOCA /* The OS usually guarantees only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely allocate anything larger than 4096 bytes. Also care for the possibility of a few compiler-allocated temporary stack slots. This must be a macro, not a function. */ # define safe_alloca(N) ((N) < 4032 ? alloca (N) : NULL) #else # define safe_alloca(N) ((void) (N), NULL) #endif /* Free a block of memory allocated through malloca(). */ #if HAVE_ALLOCA extern void freea (void *p); #else # define freea free #endif /* malloca(N) is a safe variant of alloca(N). It allocates N bytes of memory allocated on the stack, that must be freed using freea() before the function returns. Upon failure, it returns NULL. */ #if HAVE_ALLOCA # define malloca(N) \ ((N) < 4032 - (2 * sa_alignment_max - 1) \ ? (void *) (((uintptr_t) (char *) alloca ((N) + 2 * sa_alignment_max - 1) \ + (2 * sa_alignment_max - 1)) \ & ~(uintptr_t)(2 * sa_alignment_max - 1)) \ : mmalloca (N)) #else # define malloca(N) \ mmalloca (N) #endif extern void *mmalloca (size_t n) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (freea, 1) _GL_ATTRIBUTE_ALLOC_SIZE ((1)); /* nmalloca(N,S) is an overflow-safe variant of malloca (N * S). It allocates an array of N objects, each with S bytes of memory, on the stack. N and S should be nonnegative and free of side effects. The array must be freed using freea() before the function returns. */ #define nmalloca(n, s) \ (xalloc_oversized (n, s) ? NULL : malloca ((n) * (size_t) (s))) #ifdef __cplusplus } #endif /* ------------------- Auxiliary, non-public definitions ------------------- */ /* Determine the alignment of a type at compile time. */ #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ # define sa_alignof __alignof__ #elif defined __cplusplus template <class type> struct sa_alignof_helper { char __slot1; type __slot2; }; # define sa_alignof(type) offsetof (sa_alignof_helper<type>, __slot2) #elif defined __hpux /* Work around a HP-UX 10.20 cc bug with enums constants defined as offsetof values. */ # define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) #elif defined _AIX /* Work around an AIX 3.2.5 xlc bug with enums constants defined as offsetof values. */ # define sa_alignof(type) (sizeof (type) <= 4 ? 4 : 8) #else # define sa_alignof(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) #endif enum { /* The desired alignment of memory allocations is the maximum alignment among all elementary types. */ sa_alignment_long = sa_alignof (long), sa_alignment_double = sa_alignof (double), sa_alignment_longlong = sa_alignof (long long), sa_alignment_longdouble = sa_alignof (long double), sa_alignment_max = ((sa_alignment_long - 1) | (sa_alignment_double - 1) | (sa_alignment_longlong - 1) | (sa_alignment_longdouble - 1) ) + 1 }; #endif /* _MALLOCA_H */ �����recutils-1.9/lib/parse-datetime.c�������������������������������������������������������������������0000644�0000000�0000000�00000400733�14226565137�013744� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 3.6.2. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.6.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* First part of user prologue. */ #line 1 "parse-datetime.y" /* Parse a string into an internal timestamp. Copyright (C) 1999-2000, 2002-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Originally written by Steven M. Bellovin <smb@research.att.com> while at the University of North Carolina at Chapel Hill. Later tweaked by a couple of people on Usenet. Completely overhauled by Rich $alz <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990. Modified by Assaf Gordon <assafgordon@gmail.com> in 2016 to add debug output. Modified by Paul Eggert <eggert@twinsun.com> in 1999 to do the right thing about local DST. Also modified by Paul Eggert <eggert@cs.ucla.edu> in 2004 to support nanosecond-resolution timestamps, in 2004 to support TZ strings in dates, and in 2017 and 2020 to check for integer overflow and to support longer-than-'long' 'time_t' and 'tv_nsec'. */ #include <config.h> #include "parse-datetime.h" #include "idx.h" #include "intprops.h" #include "timespec.h" #include "verify.h" #include "strftime.h" /* There's no need to extend the stack, so there's no need to involve alloca. */ #define YYSTACK_USE_ALLOCA 0 /* Tell Bison how much stack space is needed. 20 should be plenty for this grammar, which is not right recursive. Beware setting it too high, since that might cause problems on machines whose implementations have lame stack-overflow checking. */ #define YYMAXDEPTH 20 #define YYINITDEPTH YYMAXDEPTH /* Since the code of parse-datetime.y is not included in the Emacs executable itself, there is no need to #define static in this file. Even if the code were included in the Emacs executable, it probably wouldn't do any harm to #undef it here; this will only cause problems if we try to write to a static variable, which I don't think this code needs to do. */ #ifdef emacs # undef static #endif #include <inttypes.h> #include <c-ctype.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "gettext.h" #define _(str) gettext (str) /* Bison's skeleton tests _STDLIB_H, while some stdlib.h headers use _STDLIB_H_ as witness. Map the latter to the one bison uses. */ /* FIXME: this is temporary. Remove when we have a mechanism to ensure that the version we're using is fixed, too. */ #ifdef _STDLIB_H_ # undef _STDLIB_H # define _STDLIB_H 1 #endif /* Shift A right by B bits portably, by dividing A by 2**B and truncating towards minus infinity. A and B should be free of side effects, and B should be in the range 0 <= B <= INT_BITS - 2, where INT_BITS is the number of useful bits in an int. GNU code can assume that INT_BITS is at least 32. ISO C99 says that A >> B is implementation-defined if A < 0. Some implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift right in the usual way when A < 0, so SHR falls back on division if ordinary A >> B doesn't seem to be the usual signed shift. */ #define SHR(a, b) \ (-1 >> 1 == -1 \ ? (a) >> (b) \ : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0)) #define HOUR(x) (60 * 60 * (x)) #define STREQ(a, b) (strcmp (a, b) == 0) /* Verify that time_t is an integer as POSIX requires, and that every time_t value fits in intmax_t. Please file a bug report if these assumptions are false on your platform. */ verify (TYPE_IS_INTEGER (time_t)); verify (!TYPE_SIGNED (time_t) || INTMAX_MIN <= TYPE_MINIMUM (time_t)); verify (TYPE_MAXIMUM (time_t) <= INTMAX_MAX); /* True if N is out of range for time_t. */ static bool time_overflow (intmax_t n) { return ! ((TYPE_SIGNED (time_t) ? TYPE_MINIMUM (time_t) <= n : 0 <= n) && n <= TYPE_MAXIMUM (time_t)); } /* Convert a possibly-signed character to an unsigned character. This is a bit safer than casting to unsigned char, since it catches some type errors that the cast doesn't. */ static unsigned char to_uchar (char ch) { return ch; } static void _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2)) dbg_printf (char const *msg, ...) { va_list args; /* TODO: use gnulib's 'program_name' instead? */ fputs ("date: ", stderr); va_start (args, msg); vfprintf (stderr, msg, args); va_end (args); } /* An integer value, and the number of digits in its textual representation. */ typedef struct { bool negative; intmax_t value; idx_t digits; } textint; /* An entry in the lexical lookup table. */ typedef struct { char const *name; int type; int value; } table; /* Meridian: am, pm, or 24-hour style. */ enum { MERam, MERpm, MER24 }; /* A reasonable upper bound for the buffer used in debug output. */ enum { DBGBUFSIZE = 100 }; enum { BILLION = 1000000000, LOG10_BILLION = 9 }; /* Relative times. */ typedef struct { /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ intmax_t year; intmax_t month; intmax_t day; intmax_t hour; intmax_t minutes; intmax_t seconds; int ns; } relative_time; #if HAVE_COMPOUND_LITERALS # define RELATIVE_TIME_0 ((relative_time) { 0, 0, 0, 0, 0, 0, 0 }) #else static relative_time const RELATIVE_TIME_0; #endif /* Information passed to and from the parser. */ typedef struct { /* The input string remaining to be parsed. */ const char *input; /* N, if this is the Nth Tuesday. */ intmax_t day_ordinal; /* Day of week; Sunday is 0. */ int day_number; /* tm_isdst flag for the local zone. */ int local_isdst; /* Time zone, in seconds east of UT. */ int time_zone; /* Style used for time. */ int meridian; /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds. */ textint year; intmax_t month; intmax_t day; intmax_t hour; intmax_t minutes; struct timespec seconds; /* includes nanoseconds */ /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ relative_time rel; /* Presence or counts of nonterminals of various flavors parsed so far. */ bool timespec_seen; bool rels_seen; idx_t dates_seen; idx_t days_seen; idx_t local_zones_seen; idx_t dsts_seen; idx_t times_seen; idx_t zones_seen; bool year_seen; #ifdef GNULIB_PARSE_DATETIME2 /* Print debugging output to stderr. */ bool parse_datetime_debug; #endif /* Which of the 'seen' parts have been printed when debugging. */ bool debug_dates_seen; bool debug_days_seen; bool debug_local_zones_seen; bool debug_times_seen; bool debug_zones_seen; bool debug_year_seen; /* The user specified explicit ordinal day value. */ bool debug_ordinal_day_seen; /* Table of local time zone abbreviations, terminated by a null entry. */ table local_time_zone_table[3]; } parser_control; static bool debugging (parser_control const *pc) { #ifdef GNULIB_PARSE_DATETIME2 return pc->parse_datetime_debug; #else return false; #endif } union YYSTYPE; static int yylex (union YYSTYPE *, parser_control *); static int yyerror (parser_control const *, char const *); static bool time_zone_hhmm (parser_control *, textint, intmax_t); /* Extract into *PC any date and time info from a string of digits of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY, YYYY, ...). */ static void digits_to_date_time (parser_control *pc, textint text_int) { if (pc->dates_seen && ! pc->year.digits && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits)) { pc->year_seen = true; pc->year = text_int; } else { if (4 < text_int.digits) { pc->dates_seen++; pc->day = text_int.value % 100; pc->month = (text_int.value / 100) % 100; pc->year.value = text_int.value / 10000; pc->year.digits = text_int.digits - 4; } else { pc->times_seen++; if (text_int.digits <= 2) { pc->hour = text_int.value; pc->minutes = 0; } else { pc->hour = text_int.value / 100; pc->minutes = text_int.value % 100; } pc->seconds.tv_sec = 0; pc->seconds.tv_nsec = 0; pc->meridian = MER24; } } } /* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1). Return true if successful, false if an overflow occurred. */ static bool apply_relative_time (parser_control *pc, relative_time rel, int factor) { if (factor < 0 ? (INT_SUBTRACT_WRAPV (pc->rel.ns, rel.ns, &pc->rel.ns) | INT_SUBTRACT_WRAPV (pc->rel.seconds, rel.seconds, &pc->rel.seconds) | INT_SUBTRACT_WRAPV (pc->rel.minutes, rel.minutes, &pc->rel.minutes) | INT_SUBTRACT_WRAPV (pc->rel.hour, rel.hour, &pc->rel.hour) | INT_SUBTRACT_WRAPV (pc->rel.day, rel.day, &pc->rel.day) | INT_SUBTRACT_WRAPV (pc->rel.month, rel.month, &pc->rel.month) | INT_SUBTRACT_WRAPV (pc->rel.year, rel.year, &pc->rel.year)) : (INT_ADD_WRAPV (pc->rel.ns, rel.ns, &pc->rel.ns) | INT_ADD_WRAPV (pc->rel.seconds, rel.seconds, &pc->rel.seconds) | INT_ADD_WRAPV (pc->rel.minutes, rel.minutes, &pc->rel.minutes) | INT_ADD_WRAPV (pc->rel.hour, rel.hour, &pc->rel.hour) | INT_ADD_WRAPV (pc->rel.day, rel.day, &pc->rel.day) | INT_ADD_WRAPV (pc->rel.month, rel.month, &pc->rel.month) | INT_ADD_WRAPV (pc->rel.year, rel.year, &pc->rel.year))) return false; pc->rels_seen = true; return true; } /* Set PC-> hour, minutes, seconds and nanoseconds members from arguments. */ static void set_hhmmss (parser_control *pc, intmax_t hour, intmax_t minutes, time_t sec, int nsec) { pc->hour = hour; pc->minutes = minutes; pc->seconds.tv_sec = sec; pc->seconds.tv_nsec = nsec; } /* Return a textual representation of the day ordinal/number values in the parser_control struct (e.g., "last wed", "this tues", "thu"). */ static const char * str_days (parser_control *pc, char *buffer, int n) { /* TODO: use relative_time_table for reverse lookup. */ static char const ordinal_values[][11] = { "last", "this", "next/first", "(SECOND)", /* SECOND is commented out in relative_time_table. */ "third", "fourth", "fifth", "sixth", "seventh", "eight", "ninth", "tenth", "eleventh", "twelfth" }; static char const days_values[][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; int len; /* Don't add an ordinal prefix if the user didn't specify it (e.g., "this wed" vs "wed"). */ if (pc->debug_ordinal_day_seen) { /* Use word description if possible (e.g., -1 = last, 3 = third). */ len = (-1 <= pc->day_ordinal && pc->day_ordinal <= 12 ? snprintf (buffer, n, "%s", ordinal_values[pc->day_ordinal + 1]) : snprintf (buffer, n, "%"PRIdMAX, pc->day_ordinal)); } else { buffer[0] = '\0'; len = 0; } /* Add the day name */ if (0 <= pc->day_number && pc->day_number <= 6 && 0 <= len && len < n) snprintf (buffer + len, n - len, &" %s"[len == 0], days_values[pc->day_number]); else { /* invalid day_number value - should never happen */ } return buffer; } /* Convert a time zone to its string representation. */ enum { TIME_ZONE_BUFSIZE = INT_STRLEN_BOUND (intmax_t) + sizeof ":MM:SS" } ; static char const * time_zone_str (int time_zone, char time_zone_buf[TIME_ZONE_BUFSIZE]) { char *p = time_zone_buf; char sign = time_zone < 0 ? '-' : '+'; int hour = abs (time_zone / (60 * 60)); p += sprintf (time_zone_buf, "%c%02d", sign, hour); int offset_from_hour = abs (time_zone % (60 * 60)); if (offset_from_hour != 0) { int mm = offset_from_hour / 60; int ss = offset_from_hour % 60; *p++ = ':'; *p++ = '0' + mm / 10; *p++ = '0' + mm % 10; if (ss) { *p++ = ':'; *p++ = '0' + ss / 10; *p++ = '0' + ss % 10; } *p = '\0'; } return time_zone_buf; } /* debugging: print the current time in the parser_control structure. The parser will increment "*_seen" members for those which were parsed. This function will print only newly seen parts. */ static void debug_print_current_time (char const *item, parser_control *pc) { bool space = false; if (!debugging (pc)) return; /* no newline, more items printed below */ dbg_printf (_("parsed %s part: "), item); if (pc->dates_seen && !pc->debug_dates_seen) { /*TODO: use pc->year.negative? */ fprintf (stderr, "(Y-M-D) %04"PRIdMAX"-%02"PRIdMAX"-%02"PRIdMAX, pc->year.value, pc->month, pc->day); pc->debug_dates_seen = true; space = true; } if (pc->year_seen != pc->debug_year_seen) { if (space) fputc (' ', stderr); fprintf (stderr, _("year: %04"PRIdMAX), pc->year.value); pc->debug_year_seen = pc->year_seen; space = true; } if (pc->times_seen && !pc->debug_times_seen) { intmax_t sec = pc->seconds.tv_sec; fprintf (stderr, &" %02"PRIdMAX":%02"PRIdMAX":%02"PRIdMAX[!space], pc->hour, pc->minutes, sec); if (pc->seconds.tv_nsec != 0) { int nsec = pc->seconds.tv_nsec; fprintf (stderr, ".%09d", nsec); } if (pc->meridian == MERpm) fputs ("pm", stderr); pc->debug_times_seen = true; space = true; } if (pc->days_seen && !pc->debug_days_seen) { if (space) fputc (' ', stderr); char tmp[DBGBUFSIZE]; fprintf (stderr, _("%s (day ordinal=%"PRIdMAX" number=%d)"), str_days (pc, tmp, sizeof tmp), pc->day_ordinal, pc->day_number); pc->debug_days_seen = true; space = true; } /* local zone strings only change the DST settings, not the timezone value. If seen, inform about the DST. */ if (pc->local_zones_seen && !pc->debug_local_zones_seen) { fprintf (stderr, &" isdst=%d%s"[!space], pc->local_isdst, pc->dsts_seen ? " DST" : ""); pc->debug_local_zones_seen = true; space = true; } if (pc->zones_seen && !pc->debug_zones_seen) { char time_zone_buf[TIME_ZONE_BUFSIZE]; fprintf (stderr, &" UTC%s"[!space], time_zone_str (pc->time_zone, time_zone_buf)); pc->debug_zones_seen = true; space = true; } if (pc->timespec_seen) { intmax_t sec = pc->seconds.tv_sec; if (space) fputc (' ', stderr); fprintf (stderr, _("number of seconds: %"PRIdMAX), sec); } fputc ('\n', stderr); } /* Debugging: print the current relative values. */ static bool print_rel_part (bool space, intmax_t val, char const *name) { if (val == 0) return space; fprintf (stderr, &" %+"PRIdMAX" %s"[!space], val, name); return true; } static void debug_print_relative_time (char const *item, parser_control const *pc) { bool space = false; if (!debugging (pc)) return; /* no newline, more items printed below */ dbg_printf (_("parsed %s part: "), item); if (pc->rel.year == 0 && pc->rel.month == 0 && pc->rel.day == 0 && pc->rel.hour == 0 && pc->rel.minutes == 0 && pc->rel.seconds == 0 && pc->rel.ns == 0) { /* Special case: relative time of this/today/now */ fputs (_("today/this/now\n"), stderr); return; } space = print_rel_part (space, pc->rel.year, "year(s)"); space = print_rel_part (space, pc->rel.month, "month(s)"); space = print_rel_part (space, pc->rel.day, "day(s)"); space = print_rel_part (space, pc->rel.hour, "hour(s)"); space = print_rel_part (space, pc->rel.minutes, "minutes"); space = print_rel_part (space, pc->rel.seconds, "seconds"); print_rel_part (space, pc->rel.ns, "nanoseconds"); fputc ('\n', stderr); } #line 636 "parse-datetime.c" # ifndef YY_CAST # ifdef __cplusplus # define YY_CAST(Type, Val) static_cast<Type> (Val) # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) # else # define YY_CAST(Type, Val) ((Type) (Val)) # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) # endif # endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # else # define YY_NULLPTR ((void*)0) # endif # endif /* Use api.header.include to #include this header instead of duplicating it here. */ #ifndef YY_YY_PARSE_DATETIME_TAB_H_INCLUDED # define YY_YY_PARSE_DATETIME_TAB_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int yydebug; #endif /* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { YYEMPTY = -2, YYEOF = 0, /* "end of file" */ YYerror = 256, /* error */ YYUNDEF = 257, /* "invalid token" */ tAGO = 258, /* tAGO */ tDST = 259, /* tDST */ tYEAR_UNIT = 260, /* tYEAR_UNIT */ tMONTH_UNIT = 261, /* tMONTH_UNIT */ tHOUR_UNIT = 262, /* tHOUR_UNIT */ tMINUTE_UNIT = 263, /* tMINUTE_UNIT */ tSEC_UNIT = 264, /* tSEC_UNIT */ tDAY_UNIT = 265, /* tDAY_UNIT */ tDAY_SHIFT = 266, /* tDAY_SHIFT */ tDAY = 267, /* tDAY */ tDAYZONE = 268, /* tDAYZONE */ tLOCAL_ZONE = 269, /* tLOCAL_ZONE */ tMERIDIAN = 270, /* tMERIDIAN */ tMONTH = 271, /* tMONTH */ tORDINAL = 272, /* tORDINAL */ tZONE = 273, /* tZONE */ tSNUMBER = 274, /* tSNUMBER */ tUNUMBER = 275, /* tUNUMBER */ tSDECIMAL_NUMBER = 276, /* tSDECIMAL_NUMBER */ tUDECIMAL_NUMBER = 277 /* tUDECIMAL_NUMBER */ }; typedef enum yytokentype yytoken_kind_t; #endif /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { #line 576 "parse-datetime.y" intmax_t intval; textint textintval; struct timespec timespec; relative_time rel; #line 715 "parse-datetime.c" }; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif int yyparse (parser_control *pc); #endif /* !YY_YY_PARSE_DATETIME_TAB_H_INCLUDED */ /* Symbol kind. */ enum yysymbol_kind_t { YYSYMBOL_YYEMPTY = -2, YYSYMBOL_YYEOF = 0, /* "end of file" */ YYSYMBOL_YYerror = 1, /* error */ YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ YYSYMBOL_tAGO = 3, /* tAGO */ YYSYMBOL_tDST = 4, /* tDST */ YYSYMBOL_tYEAR_UNIT = 5, /* tYEAR_UNIT */ YYSYMBOL_tMONTH_UNIT = 6, /* tMONTH_UNIT */ YYSYMBOL_tHOUR_UNIT = 7, /* tHOUR_UNIT */ YYSYMBOL_tMINUTE_UNIT = 8, /* tMINUTE_UNIT */ YYSYMBOL_tSEC_UNIT = 9, /* tSEC_UNIT */ YYSYMBOL_tDAY_UNIT = 10, /* tDAY_UNIT */ YYSYMBOL_tDAY_SHIFT = 11, /* tDAY_SHIFT */ YYSYMBOL_tDAY = 12, /* tDAY */ YYSYMBOL_tDAYZONE = 13, /* tDAYZONE */ YYSYMBOL_tLOCAL_ZONE = 14, /* tLOCAL_ZONE */ YYSYMBOL_tMERIDIAN = 15, /* tMERIDIAN */ YYSYMBOL_tMONTH = 16, /* tMONTH */ YYSYMBOL_tORDINAL = 17, /* tORDINAL */ YYSYMBOL_tZONE = 18, /* tZONE */ YYSYMBOL_tSNUMBER = 19, /* tSNUMBER */ YYSYMBOL_tUNUMBER = 20, /* tUNUMBER */ YYSYMBOL_tSDECIMAL_NUMBER = 21, /* tSDECIMAL_NUMBER */ YYSYMBOL_tUDECIMAL_NUMBER = 22, /* tUDECIMAL_NUMBER */ YYSYMBOL_23_ = 23, /* '@' */ YYSYMBOL_24_T_ = 24, /* 'T' */ YYSYMBOL_25_ = 25, /* ':' */ YYSYMBOL_26_ = 26, /* ',' */ YYSYMBOL_27_ = 27, /* '/' */ YYSYMBOL_YYACCEPT = 28, /* $accept */ YYSYMBOL_spec = 29, /* spec */ YYSYMBOL_timespec = 30, /* timespec */ YYSYMBOL_items = 31, /* items */ YYSYMBOL_item = 32, /* item */ YYSYMBOL_datetime = 33, /* datetime */ YYSYMBOL_iso_8601_datetime = 34, /* iso_8601_datetime */ YYSYMBOL_time = 35, /* time */ YYSYMBOL_iso_8601_time = 36, /* iso_8601_time */ YYSYMBOL_o_zone_offset = 37, /* o_zone_offset */ YYSYMBOL_zone_offset = 38, /* zone_offset */ YYSYMBOL_local_zone = 39, /* local_zone */ YYSYMBOL_zone = 40, /* zone */ YYSYMBOL_day = 41, /* day */ YYSYMBOL_date = 42, /* date */ YYSYMBOL_iso_8601_date = 43, /* iso_8601_date */ YYSYMBOL_rel = 44, /* rel */ YYSYMBOL_relunit = 45, /* relunit */ YYSYMBOL_relunit_snumber = 46, /* relunit_snumber */ YYSYMBOL_dayshift = 47, /* dayshift */ YYSYMBOL_seconds = 48, /* seconds */ YYSYMBOL_signed_seconds = 49, /* signed_seconds */ YYSYMBOL_unsigned_seconds = 50, /* unsigned_seconds */ YYSYMBOL_number = 51, /* number */ YYSYMBOL_hybrid = 52, /* hybrid */ YYSYMBOL_o_colon_minutes = 53 /* o_colon_minutes */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; #ifdef short # undef short #endif /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure <limits.h> and (if available) <stdint.h> are included so that the code can choose integer types of a good width. */ #ifndef __PTRDIFF_MAX__ # include <limits.h> /* INFRINGES ON USER NAME SPACE */ # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include <stdint.h> /* INFRINGES ON USER NAME SPACE */ # define YY_STDINT_H # endif #endif /* Narrow types that promote to a signed type and that can represent a signed or unsigned integer of at least N bits. In tables they can save space and decrease cache pressure. Promoting to a signed type helps avoid bugs in integer arithmetic. */ #ifdef __INT_LEAST8_MAX__ typedef __INT_LEAST8_TYPE__ yytype_int8; #elif defined YY_STDINT_H typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef __INT_LEAST16_MAX__ typedef __INT_LEAST16_TYPE__ yytype_int16; #elif defined YY_STDINT_H typedef int_least16_t yytype_int16; #else typedef short yytype_int16; #endif #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ typedef __UINT_LEAST8_TYPE__ yytype_uint8; #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ && UINT_LEAST8_MAX <= INT_MAX) typedef uint_least8_t yytype_uint8; #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX typedef unsigned char yytype_uint8; #else typedef short yytype_uint8; #endif #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ typedef __UINT_LEAST16_TYPE__ yytype_uint16; #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ && UINT_LEAST16_MAX <= INT_MAX) typedef uint_least16_t yytype_uint16; #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX typedef unsigned short yytype_uint16; #else typedef int yytype_uint16; #endif #ifndef YYPTRDIFF_T # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ # define YYPTRDIFF_T __PTRDIFF_TYPE__ # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ # elif defined PTRDIFF_MAX # ifndef ptrdiff_t # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # endif # define YYPTRDIFF_T ptrdiff_t # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX # else # define YYPTRDIFF_T long # define YYPTRDIFF_MAXIMUM LONG_MAX # endif #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned # endif #endif #define YYSIZE_MAXIMUM \ YY_CAST (YYPTRDIFF_T, \ (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ ? YYPTRDIFF_MAXIMUM \ : YY_CAST (YYSIZE_T, -1))) #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) /* Stored state numbers (used for stacks). */ typedef yytype_int8 yy_state_t; /* State numbers in computations. */ typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif #ifndef YY_ATTRIBUTE_PURE # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define YY_ATTRIBUTE_PURE # endif #endif #ifndef YY_ATTRIBUTE_UNUSED # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define YY_ATTRIBUTE_UNUSED # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ # define YY_IGNORE_USELESS_CAST_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") # define YY_IGNORE_USELESS_CAST_END \ _Pragma ("GCC diagnostic pop") #endif #ifndef YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_END #endif #define YY_ASSERT(E) ((void) (0 && (E))) #if !defined yyoverflow /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* !defined yyoverflow */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 12 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 112 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 28 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 26 /* YYNRULES -- Number of rules. */ #define YYNRULES 91 /* YYNSTATES -- Number of states. */ #define YYNSTATES 114 #define YYMAXUTOK 277 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ (0 <= (YYX) && (YYX) <= YYMAXUTOK \ ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ : YYSYMBOL_YYUNDEF) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 26, 2, 2, 27, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 25, 2, 2, 2, 2, 2, 23, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 24, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22 }; #if YYDEBUG /* YYRLINEYYN -- Source line where rule number YYN was defined. */ static const yytype_int16 yyrline[] = { 0, 603, 603, 604, 608, 616, 618, 622, 627, 632, 637, 642, 647, 652, 656, 660, 667, 671, 675, 680, 685, 690, 694, 699, 704, 711, 713, 717, 742, 744, 754, 756, 758, 763, 768, 771, 773, 778, 783, 788, 794, 803, 808, 841, 849, 857, 862, 868, 873, 879, 883, 893, 895, 897, 902, 904, 906, 908, 910, 912, 914, 917, 920, 922, 924, 926, 928, 930, 932, 934, 936, 938, 940, 942, 944, 948, 950, 952, 955, 957, 959, 964, 968, 968, 971, 972, 978, 979, 985, 990, 1001, 1002 }; #endif /** Accessing symbol of state STATE. */ #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) #if YYDEBUG || 0 /* The user-facing name of the symbol whose (internal) number is YYSYMBOL. No bounds checking. */ static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "\"end of file\"", "error", "\"invalid token\"", "tAGO", "tDST", "tYEAR_UNIT", "tMONTH_UNIT", "tHOUR_UNIT", "tMINUTE_UNIT", "tSEC_UNIT", "tDAY_UNIT", "tDAY_SHIFT", "tDAY", "tDAYZONE", "tLOCAL_ZONE", "tMERIDIAN", "tMONTH", "tORDINAL", "tZONE", "tSNUMBER", "tUNUMBER", "tSDECIMAL_NUMBER", "tUDECIMAL_NUMBER", "'@'", "'T'", "':'", "','", "'/'", "$accept", "spec", "timespec", "items", "item", "datetime", "iso_8601_datetime", "time", "iso_8601_time", "o_zone_offset", "zone_offset", "local_zone", "zone", "day", "date", "iso_8601_date", "rel", "relunit", "relunit_snumber", "dayshift", "seconds", "signed_seconds", "unsigned_seconds", "number", "hybrid", "o_colon_minutes", YY_NULLPTR }; static const char * yysymbol_name (yysymbol_kind_t yysymbol) { return yytname[yysymbol]; } #endif #ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 64, 84, 58, 44, 47 }; #endif #define YYPACT_NINF (-93) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) #define YYTABLE_NINF (-1) #define yytable_value_is_error(Yyn) \ 0 /* YYPACTSTATE-NUM -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int8 yypact[] = { 38, 27, 77, -93, 46, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, 62, -93, 82, -3, 66, 3, 74, -4, 83, 84, 75, -93, -93, -93, -93, -93, -93, -93, -93, -93, 71, -93, 93, -93, -93, -93, -93, -93, -93, 78, 72, -93, -93, -93, -93, -93, -93, -93, -93, 25, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, -93, 21, 19, 79, 80, -93, -93, -93, -93, -93, 81, -93, -93, 85, 86, -93, -93, -93, -93, -93, -6, 76, 17, -93, -93, -93, -93, 87, 69, -93, -93, 88, 89, -1, -93, 18, -93, -93, 69, 91 }; /* YYDEFACTSTATE-NUM -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_int8 yydefact[] = { 5, 0, 0, 2, 3, 85, 87, 84, 86, 4, 82, 83, 1, 56, 59, 65, 68, 73, 62, 81, 37, 35, 28, 0, 0, 30, 0, 88, 0, 0, 31, 6, 7, 16, 8, 21, 9, 10, 12, 11, 49, 13, 52, 74, 53, 14, 15, 38, 29, 0, 45, 54, 57, 63, 66, 69, 60, 39, 36, 90, 32, 75, 76, 78, 79, 80, 77, 55, 58, 64, 67, 70, 61, 40, 18, 47, 90, 0, 0, 22, 89, 71, 72, 33, 0, 51, 44, 0, 0, 34, 43, 48, 50, 27, 25, 41, 0, 17, 46, 91, 19, 90, 0, 23, 26, 0, 0, 25, 42, 25, 20, 24, 0, 25 }; /* YYPGOTONTERM-NUM. */ static const yytype_int8 yypgoto[] = { -93, -93, -93, -93, -93, -93, -93, -93, 20, -68, -27, -93, -93, -93, -93, -93, -93, -93, 60, -93, -93, -93, -92, -93, -93, 43 }; /* YYDEFGOTONTERM-NUM. */ static const yytype_int8 yydefgoto[] = { -1, 2, 3, 4, 31, 32, 33, 34, 35, 103, 104, 36, 37, 38, 39, 40, 41, 42, 43, 44, 9, 10, 11, 45, 46, 93 }; /* YYTABLEYYPACT[STATE-NUM] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int8 yytable[] = { 79, 67, 68, 69, 70, 71, 72, 58, 73, 100, 107, 74, 75, 101, 110, 76, 49, 50, 101, 102, 113, 77, 59, 78, 61, 62, 63, 64, 65, 66, 61, 62, 63, 64, 65, 66, 101, 101, 92, 111, 90, 91, 106, 112, 88, 111, 5, 6, 7, 8, 88, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 1, 23, 24, 25, 26, 27, 28, 29, 79, 30, 51, 52, 53, 54, 55, 56, 12, 57, 61, 62, 63, 64, 65, 66, 60, 48, 80, 47, 6, 83, 8, 81, 82, 26, 84, 85, 86, 87, 94, 95, 96, 89, 105, 97, 98, 99, 0, 108, 109, 101, 0, 88 }; static const yytype_int8 yycheck[] = { 27, 5, 6, 7, 8, 9, 10, 4, 12, 15, 102, 15, 16, 19, 15, 19, 19, 20, 19, 25, 112, 25, 19, 27, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8, 9, 10, 19, 19, 19, 107, 19, 20, 25, 25, 25, 113, 19, 20, 21, 22, 25, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 23, 16, 17, 18, 19, 20, 21, 22, 96, 24, 5, 6, 7, 8, 9, 10, 0, 12, 5, 6, 7, 8, 9, 10, 25, 4, 27, 26, 20, 30, 22, 9, 9, 19, 24, 3, 19, 26, 20, 20, 20, 59, 27, 84, 20, 20, -1, 20, 20, 19, -1, 25 }; /* YYSTOSSTATE-NUM -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_int8 yystos[] = { 0, 23, 29, 30, 31, 19, 20, 21, 22, 48, 49, 50, 0, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 16, 17, 18, 19, 20, 21, 22, 24, 32, 33, 34, 35, 36, 39, 40, 41, 42, 43, 44, 45, 46, 47, 51, 52, 26, 4, 19, 20, 5, 6, 7, 8, 9, 10, 12, 4, 19, 46, 5, 6, 7, 8, 9, 10, 5, 6, 7, 8, 9, 10, 12, 15, 16, 19, 25, 27, 38, 46, 9, 9, 46, 24, 3, 19, 26, 25, 53, 19, 20, 19, 53, 20, 20, 20, 36, 20, 20, 15, 19, 25, 37, 38, 27, 25, 50, 20, 20, 15, 37, 25, 50 }; /* YYR1YYN -- Symbol number of symbol that rule YYN derives. */ static const yytype_int8 yyr1[] = { 0, 28, 29, 29, 30, 31, 31, 32, 32, 32, 32, 32, 32, 32, 32, 32, 33, 34, 35, 35, 35, 35, 36, 36, 36, 37, 37, 38, 39, 39, 40, 40, 40, 40, 40, 40, 40, 41, 41, 41, 41, 42, 42, 42, 42, 42, 42, 42, 42, 42, 43, 44, 44, 44, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 45, 46, 46, 46, 46, 46, 46, 47, 48, 48, 49, 49, 50, 50, 51, 52, 53, 53 }; /* YYR2YYN -- Number of symbols on the right hand side of rule YYN. */ static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 2, 0, 2, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 3, 2, 4, 6, 1, 2, 4, 6, 0, 1, 2, 1, 2, 1, 1, 2, 2, 3, 1, 2, 1, 2, 2, 2, 3, 5, 3, 3, 2, 4, 2, 3, 1, 3, 2, 1, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 1, 2, 2, 2, 2, 1, 1, 2, 2, 2, 2, 2, 2, 1, 1, 1, 1, 1, 1, 1, 1, 2, 0, 2 }; enum { YYENOMEM = -2 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (pc, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Backward compatibility with an undocumented macro. Use YYerror or YYUNDEF. */ #define YYERRCODE YYUNDEF /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) /* This macro is provided for backward compatibility. */ # ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Kind, Value, pc); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*-----------------------------------. | Print this symbol's value on YYO. | `-----------------------------------*/ static void yy_symbol_value_print (FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, parser_control *pc) { FILE *yyoutput = yyo; YYUSE (yyoutput); YYUSE (pc); if (!yyvaluep) return; # ifdef YYPRINT if (yykind < YYNTOKENS) YYPRINT (yyo, yytoknum[yykind], *yyvaluep); # endif YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*---------------------------. | Print this symbol on YYO. | `---------------------------*/ static void yy_symbol_print (FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, parser_control *pc) { YYFPRINTF (yyo, "%s %s (", yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); yy_symbol_value_print (yyo, yykind, yyvaluep, pc); YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule, parser_control *pc) { int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), &yyvsp[(yyi + 1) - (yynrhs)], pc); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, Rule, pc); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) ((void) 0) # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, yysymbol_kind_t yykind, YYSTYPE *yyvaluep, parser_control *pc) { YYUSE (yyvaluep); YYUSE (pc); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*----------. | yyparse. | `----------*/ int yyparse (parser_control *pc) { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ YY_INITIAL_VALUE (static YYSTYPE yyval_default;) YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Number of syntax errors so far. */ int yynerrs; yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* Their size. */ YYPTRDIFF_T yystacksize; /* The state stack. */ yy_state_t yyssa[YYINITDEPTH]; yy_state_t *yyss; yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; int yyn; /* The return value of yyparse. */ int yyresult; /* Lookahead token as an internal (translated) token number. */ yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yynerrs = 0; yystate = 0; yyerrstatus = 0; yystacksize = YYINITDEPTH; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; YYDPRINTF ((stderr, "Starting parse\n")); yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. | yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; /*--------------------------------------------------------------------. | yysetstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: YYDPRINTF ((stderr, "Entering state %d\n", yystate)); YY_ASSERT (0 <= yystate && yystate < YYNSTATES); YY_IGNORE_USELESS_CAST_BEGIN *yyssp = YY_CAST (yy_state_t, yystate); YY_IGNORE_USELESS_CAST_END YY_STACK_PRINT (yyss, yyssp); if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE goto yyexhaustedlab; #else { /* Get the current used size of the three stacks, in elements. */ YYPTRDIFF_T yysize = yyssp - yyss + 1; # if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * YYSIZEOF (*yyssp), &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } # else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yy_state_t *yyss1 = yyss; union yyalloc *yyptr = YY_CAST (union yyalloc *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YY_IGNORE_USELESS_CAST_BEGIN YYDPRINTF ((stderr, "Stack size increased to %ld\n", YY_CAST (long, yystacksize))); YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token\n")); yychar = yylex (&yylval, pc); } if (yychar <= YYEOF) { yychar = YYEOF; yytoken = YYSYMBOL_YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else if (yychar == YYerror) { /* The scanner already issued an error message, process directly to error recovery. But do not keep the error token as lookahead, it is too special and may lead us to an endless loop in error recovery. */ yychar = YYUNDEF; yytoken = YYSYMBOL_YYerror; goto yyerrlab1; } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Discard the shifted token. */ yychar = YYEMPTY; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 4: #line 609 "parse-datetime.y" { pc->seconds = (yyvsp[0].timespec); pc->timespec_seen = true; debug_print_current_time (_("number of seconds"), pc); } #line 1848 "parse-datetime.c" break; case 7: #line 623 "parse-datetime.y" { pc->times_seen++; pc->dates_seen++; debug_print_current_time (_("datetime"), pc); } #line 1857 "parse-datetime.c" break; case 8: #line 628 "parse-datetime.y" { pc->times_seen++; debug_print_current_time (_("time"), pc); } #line 1866 "parse-datetime.c" break; case 9: #line 633 "parse-datetime.y" { pc->local_zones_seen++; debug_print_current_time (_("local_zone"), pc); } #line 1875 "parse-datetime.c" break; case 10: #line 638 "parse-datetime.y" { pc->zones_seen++; debug_print_current_time (_("zone"), pc); } #line 1884 "parse-datetime.c" break; case 11: #line 643 "parse-datetime.y" { pc->dates_seen++; debug_print_current_time (_("date"), pc); } #line 1893 "parse-datetime.c" break; case 12: #line 648 "parse-datetime.y" { pc->days_seen++; debug_print_current_time (_("day"), pc); } #line 1902 "parse-datetime.c" break; case 13: #line 653 "parse-datetime.y" { debug_print_relative_time (_("relative"), pc); } #line 1910 "parse-datetime.c" break; case 14: #line 657 "parse-datetime.y" { debug_print_current_time (_("number"), pc); } #line 1918 "parse-datetime.c" break; case 15: #line 661 "parse-datetime.y" { debug_print_relative_time (_("hybrid"), pc); } #line 1926 "parse-datetime.c" break; case 18: #line 676 "parse-datetime.y" { set_hhmmss (pc, (yyvsp[-1].textintval).value, 0, 0, 0); pc->meridian = (yyvsp[0].intval); } #line 1935 "parse-datetime.c" break; case 19: #line 681 "parse-datetime.y" { set_hhmmss (pc, (yyvsp[-3].textintval).value, (yyvsp[-1].textintval).value, 0, 0); pc->meridian = (yyvsp[0].intval); } #line 1944 "parse-datetime.c" break; case 20: #line 686 "parse-datetime.y" { set_hhmmss (pc, (yyvsp[-5].textintval).value, (yyvsp[-3].textintval).value, (yyvsp[-1].timespec).tv_sec, (yyvsp[-1].timespec).tv_nsec); pc->meridian = (yyvsp[0].intval); } #line 1953 "parse-datetime.c" break; case 22: #line 695 "parse-datetime.y" { set_hhmmss (pc, (yyvsp[-1].textintval).value, 0, 0, 0); pc->meridian = MER24; } #line 1962 "parse-datetime.c" break; case 23: #line 700 "parse-datetime.y" { set_hhmmss (pc, (yyvsp[-3].textintval).value, (yyvsp[-1].textintval).value, 0, 0); pc->meridian = MER24; } #line 1971 "parse-datetime.c" break; case 24: #line 705 "parse-datetime.y" { set_hhmmss (pc, (yyvsp[-5].textintval).value, (yyvsp[-3].textintval).value, (yyvsp[-1].timespec).tv_sec, (yyvsp[-1].timespec).tv_nsec); pc->meridian = MER24; } #line 1980 "parse-datetime.c" break; case 27: #line 718 "parse-datetime.y" { pc->zones_seen++; if (! time_zone_hhmm (pc, (yyvsp[-1].textintval), (yyvsp[0].intval))) YYABORT; } #line 1989 "parse-datetime.c" break; case 28: #line 743 "parse-datetime.y" { pc->local_isdst = (yyvsp[0].intval); } #line 1995 "parse-datetime.c" break; case 29: #line 745 "parse-datetime.y" { pc->local_isdst = 1; pc->dsts_seen++; } #line 2004 "parse-datetime.c" break; case 30: #line 755 "parse-datetime.y" { pc->time_zone = (yyvsp[0].intval); } #line 2010 "parse-datetime.c" break; case 31: #line 757 "parse-datetime.y" { pc->time_zone = -HOUR (7); } #line 2016 "parse-datetime.c" break; case 32: #line 759 "parse-datetime.y" { pc->time_zone = (yyvsp[-1].intval); if (! apply_relative_time (pc, (yyvsp[0].rel), 1)) YYABORT; debug_print_relative_time (_("relative"), pc); } #line 2025 "parse-datetime.c" break; case 33: #line 764 "parse-datetime.y" { pc->time_zone = -HOUR (7); if (! apply_relative_time (pc, (yyvsp[0].rel), 1)) YYABORT; debug_print_relative_time (_("relative"), pc); } #line 2034 "parse-datetime.c" break; case 34: #line 769 "parse-datetime.y" { if (! time_zone_hhmm (pc, (yyvsp[-1].textintval), (yyvsp[0].intval))) YYABORT; if (INT_ADD_WRAPV (pc->time_zone, (yyvsp[-2].intval), &pc->time_zone)) YYABORT; } #line 2041 "parse-datetime.c" break; case 35: #line 772 "parse-datetime.y" { pc->time_zone = (yyvsp[0].intval) + 60 * 60; } #line 2047 "parse-datetime.c" break; case 36: #line 774 "parse-datetime.y" { pc->time_zone = (yyvsp[-1].intval) + 60 * 60; } #line 2053 "parse-datetime.c" break; case 37: #line 779 "parse-datetime.y" { pc->day_ordinal = 0; pc->day_number = (yyvsp[0].intval); } #line 2062 "parse-datetime.c" break; case 38: #line 784 "parse-datetime.y" { pc->day_ordinal = 0; pc->day_number = (yyvsp[-1].intval); } #line 2071 "parse-datetime.c" break; case 39: #line 789 "parse-datetime.y" { pc->day_ordinal = (yyvsp[-1].intval); pc->day_number = (yyvsp[0].intval); pc->debug_ordinal_day_seen = true; } #line 2081 "parse-datetime.c" break; case 40: #line 795 "parse-datetime.y" { pc->day_ordinal = (yyvsp[-1].textintval).value; pc->day_number = (yyvsp[0].intval); pc->debug_ordinal_day_seen = true; } #line 2091 "parse-datetime.c" break; case 41: #line 804 "parse-datetime.y" { pc->month = (yyvsp[-2].textintval).value; pc->day = (yyvsp[0].textintval).value; } #line 2100 "parse-datetime.c" break; case 42: #line 809 "parse-datetime.y" { /* Interpret as YYYY/MM/DD if the first value has 4 or more digits, otherwise as MM/DD/YY. The goal in recognizing YYYY/MM/DD is solely to support legacy machine-generated dates like those in an RCS log listing. If you want portability, use the ISO 8601 format. */ if (4 <= (yyvsp[-4].textintval).digits) { if (debugging (pc)) { intmax_t digits = (yyvsp[-4].textintval).digits; dbg_printf (_("warning: value %"PRIdMAX" has %"PRIdMAX" digits. " "Assuming YYYY/MM/DD\n"), (yyvsp[-4].textintval).value, digits); } pc->year = (yyvsp[-4].textintval); pc->month = (yyvsp[-2].textintval).value; pc->day = (yyvsp[0].textintval).value; } else { if (debugging (pc)) dbg_printf (_("warning: value %"PRIdMAX" has less than 4 digits. " "Assuming MM/DD/YY[YY]\n"), (yyvsp[-4].textintval).value); pc->month = (yyvsp[-4].textintval).value; pc->day = (yyvsp[-2].textintval).value; pc->year = (yyvsp[0].textintval); } } #line 2137 "parse-datetime.c" break; case 43: #line 842 "parse-datetime.y" { /* E.g., 17-JUN-1992. */ pc->day = (yyvsp[-2].textintval).value; pc->month = (yyvsp[-1].intval); if (INT_SUBTRACT_WRAPV (0, (yyvsp[0].textintval).value, &pc->year.value)) YYABORT; pc->year.digits = (yyvsp[0].textintval).digits; } #line 2149 "parse-datetime.c" break; case 44: #line 850 "parse-datetime.y" { /* E.g., JUN-17-1992. */ pc->month = (yyvsp[-2].intval); if (INT_SUBTRACT_WRAPV (0, (yyvsp[-1].textintval).value, &pc->day)) YYABORT; if (INT_SUBTRACT_WRAPV (0, (yyvsp[0].textintval).value, &pc->year.value)) YYABORT; pc->year.digits = (yyvsp[0].textintval).digits; } #line 2161 "parse-datetime.c" break; case 45: #line 858 "parse-datetime.y" { pc->month = (yyvsp[-1].intval); pc->day = (yyvsp[0].textintval).value; } #line 2170 "parse-datetime.c" break; case 46: #line 863 "parse-datetime.y" { pc->month = (yyvsp[-3].intval); pc->day = (yyvsp[-2].textintval).value; pc->year = (yyvsp[0].textintval); } #line 2180 "parse-datetime.c" break; case 47: #line 869 "parse-datetime.y" { pc->day = (yyvsp[-1].textintval).value; pc->month = (yyvsp[0].intval); } #line 2189 "parse-datetime.c" break; case 48: #line 874 "parse-datetime.y" { pc->day = (yyvsp[-2].textintval).value; pc->month = (yyvsp[-1].intval); pc->year = (yyvsp[0].textintval); } #line 2199 "parse-datetime.c" break; case 50: #line 884 "parse-datetime.y" { /* ISO 8601 format. YYYY-MM-DD. */ pc->year = (yyvsp[-2].textintval); if (INT_SUBTRACT_WRAPV (0, (yyvsp[-1].textintval).value, &pc->month)) YYABORT; if (INT_SUBTRACT_WRAPV (0, (yyvsp[0].textintval).value, &pc->day)) YYABORT; } #line 2210 "parse-datetime.c" break; case 51: #line 894 "parse-datetime.y" { if (! apply_relative_time (pc, (yyvsp[-1].rel), (yyvsp[0].intval))) YYABORT; } #line 2216 "parse-datetime.c" break; case 52: #line 896 "parse-datetime.y" { if (! apply_relative_time (pc, (yyvsp[0].rel), 1)) YYABORT; } #line 2222 "parse-datetime.c" break; case 53: #line 898 "parse-datetime.y" { if (! apply_relative_time (pc, (yyvsp[0].rel), 1)) YYABORT; } #line 2228 "parse-datetime.c" break; case 54: #line 903 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = (yyvsp[-1].intval); } #line 2234 "parse-datetime.c" break; case 55: #line 905 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = (yyvsp[-1].textintval).value; } #line 2240 "parse-datetime.c" break; case 56: #line 907 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = 1; } #line 2246 "parse-datetime.c" break; case 57: #line 909 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = (yyvsp[-1].intval); } #line 2252 "parse-datetime.c" break; case 58: #line 911 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = (yyvsp[-1].textintval).value; } #line 2258 "parse-datetime.c" break; case 59: #line 913 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = 1; } #line 2264 "parse-datetime.c" break; case 60: #line 915 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; if (INT_MULTIPLY_WRAPV ((yyvsp[-1].intval), (yyvsp[0].intval), &(yyval.rel).day)) YYABORT; } #line 2271 "parse-datetime.c" break; case 61: #line 918 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; if (INT_MULTIPLY_WRAPV ((yyvsp[-1].textintval).value, (yyvsp[0].intval), &(yyval.rel).day)) YYABORT; } #line 2278 "parse-datetime.c" break; case 62: #line 921 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[0].intval); } #line 2284 "parse-datetime.c" break; case 63: #line 923 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = (yyvsp[-1].intval); } #line 2290 "parse-datetime.c" break; case 64: #line 925 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = (yyvsp[-1].textintval).value; } #line 2296 "parse-datetime.c" break; case 65: #line 927 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = 1; } #line 2302 "parse-datetime.c" break; case 66: #line 929 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = (yyvsp[-1].intval); } #line 2308 "parse-datetime.c" break; case 67: #line 931 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = (yyvsp[-1].textintval).value; } #line 2314 "parse-datetime.c" break; case 68: #line 933 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = 1; } #line 2320 "parse-datetime.c" break; case 69: #line 935 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[-1].intval); } #line 2326 "parse-datetime.c" break; case 70: #line 937 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[-1].textintval).value; } #line 2332 "parse-datetime.c" break; case 71: #line 939 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[-1].timespec).tv_sec; (yyval.rel).ns = (yyvsp[-1].timespec).tv_nsec; } #line 2338 "parse-datetime.c" break; case 72: #line 941 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[-1].timespec).tv_sec; (yyval.rel).ns = (yyvsp[-1].timespec).tv_nsec; } #line 2344 "parse-datetime.c" break; case 73: #line 943 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = 1; } #line 2350 "parse-datetime.c" break; case 75: #line 949 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).year = (yyvsp[-1].textintval).value; } #line 2356 "parse-datetime.c" break; case 76: #line 951 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).month = (yyvsp[-1].textintval).value; } #line 2362 "parse-datetime.c" break; case 77: #line 953 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; if (INT_MULTIPLY_WRAPV ((yyvsp[-1].textintval).value, (yyvsp[0].intval), &(yyval.rel).day)) YYABORT; } #line 2369 "parse-datetime.c" break; case 78: #line 956 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).hour = (yyvsp[-1].textintval).value; } #line 2375 "parse-datetime.c" break; case 79: #line 958 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).minutes = (yyvsp[-1].textintval).value; } #line 2381 "parse-datetime.c" break; case 80: #line 960 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).seconds = (yyvsp[-1].textintval).value; } #line 2387 "parse-datetime.c" break; case 81: #line 965 "parse-datetime.y" { (yyval.rel) = RELATIVE_TIME_0; (yyval.rel).day = (yyvsp[0].intval); } #line 2393 "parse-datetime.c" break; case 85: #line 973 "parse-datetime.y" { if (time_overflow ((yyvsp[0].textintval).value)) YYABORT; (yyval.timespec).tv_sec = (yyvsp[0].textintval).value; (yyval.timespec).tv_nsec = 0; } #line 2400 "parse-datetime.c" break; case 87: #line 980 "parse-datetime.y" { if (time_overflow ((yyvsp[0].textintval).value)) YYABORT; (yyval.timespec).tv_sec = (yyvsp[0].textintval).value; (yyval.timespec).tv_nsec = 0; } #line 2407 "parse-datetime.c" break; case 88: #line 986 "parse-datetime.y" { digits_to_date_time (pc, (yyvsp[0].textintval)); } #line 2413 "parse-datetime.c" break; case 89: #line 991 "parse-datetime.y" { /* Hybrid all-digit and relative offset, so that we accept e.g., "YYYYMMDD +N days" as well as "YYYYMMDD N days". */ digits_to_date_time (pc, (yyvsp[-1].textintval)); if (! apply_relative_time (pc, (yyvsp[0].rel), 1)) YYABORT; } #line 2424 "parse-datetime.c" break; case 90: #line 1001 "parse-datetime.y" { (yyval.intval) = -1; } #line 2430 "parse-datetime.c" break; case 91: #line 1003 "parse-datetime.y" { (yyval.intval) = (yyvsp[0].textintval).value; } #line 2436 "parse-datetime.c" break; #line 2440 "parse-datetime.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; *++yyvsp = yyval; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ { const int yylhs = yyr1[yyn] - YYNTOKENS; const int yyi = yypgoto[yylhs] + *yyssp; yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; yyerror (pc, YY_("syntax error")); } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, pc); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ /* Pop stack until we find a state that shifts the error token. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYSYMBOL_YYerror; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", YY_ACCESSING_SYMBOL (yystate), yyvsp, pc); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (pc, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif /*-----------------------------------------------------. | yyreturn -- parsing is finished, return the result. | `-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, pc); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, pc); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif return yyresult; } #line 1006 "parse-datetime.y" static table const meridian_table[] = { { "AM", tMERIDIAN, MERam }, { "A.M.", tMERIDIAN, MERam }, { "PM", tMERIDIAN, MERpm }, { "P.M.", tMERIDIAN, MERpm }, { NULL, 0, 0 } }; static table const dst_table[] = { { "DST", tDST, 0 } }; static table const month_and_day_table[] = { { "JANUARY", tMONTH, 1 }, { "FEBRUARY", tMONTH, 2 }, { "MARCH", tMONTH, 3 }, { "APRIL", tMONTH, 4 }, { "MAY", tMONTH, 5 }, { "JUNE", tMONTH, 6 }, { "JULY", tMONTH, 7 }, { "AUGUST", tMONTH, 8 }, { "SEPTEMBER",tMONTH, 9 }, { "SEPT", tMONTH, 9 }, { "OCTOBER", tMONTH, 10 }, { "NOVEMBER", tMONTH, 11 }, { "DECEMBER", tMONTH, 12 }, { "SUNDAY", tDAY, 0 }, { "MONDAY", tDAY, 1 }, { "TUESDAY", tDAY, 2 }, { "TUES", tDAY, 2 }, { "WEDNESDAY",tDAY, 3 }, { "WEDNES", tDAY, 3 }, { "THURSDAY", tDAY, 4 }, { "THUR", tDAY, 4 }, { "THURS", tDAY, 4 }, { "FRIDAY", tDAY, 5 }, { "SATURDAY", tDAY, 6 }, { NULL, 0, 0 } }; static table const time_units_table[] = { { "YEAR", tYEAR_UNIT, 1 }, { "MONTH", tMONTH_UNIT, 1 }, { "FORTNIGHT",tDAY_UNIT, 14 }, { "WEEK", tDAY_UNIT, 7 }, { "DAY", tDAY_UNIT, 1 }, { "HOUR", tHOUR_UNIT, 1 }, { "MINUTE", tMINUTE_UNIT, 1 }, { "MIN", tMINUTE_UNIT, 1 }, { "SECOND", tSEC_UNIT, 1 }, { "SEC", tSEC_UNIT, 1 }, { NULL, 0, 0 } }; /* Assorted relative-time words. */ static table const relative_time_table[] = { { "TOMORROW", tDAY_SHIFT, 1 }, { "YESTERDAY",tDAY_SHIFT, -1 }, { "TODAY", tDAY_SHIFT, 0 }, { "NOW", tDAY_SHIFT, 0 }, { "LAST", tORDINAL, -1 }, { "THIS", tORDINAL, 0 }, { "NEXT", tORDINAL, 1 }, { "FIRST", tORDINAL, 1 }, /*{ "SECOND", tORDINAL, 2 }, */ { "THIRD", tORDINAL, 3 }, { "FOURTH", tORDINAL, 4 }, { "FIFTH", tORDINAL, 5 }, { "SIXTH", tORDINAL, 6 }, { "SEVENTH", tORDINAL, 7 }, { "EIGHTH", tORDINAL, 8 }, { "NINTH", tORDINAL, 9 }, { "TENTH", tORDINAL, 10 }, { "ELEVENTH", tORDINAL, 11 }, { "TWELFTH", tORDINAL, 12 }, { "AGO", tAGO, -1 }, { "HENCE", tAGO, 1 }, { NULL, 0, 0 } }; /* The universal time zone table. These labels can be used even for timestamps that would not otherwise be valid, e.g., GMT timestamps oin London during summer. */ static table const universal_time_zone_table[] = { { "GMT", tZONE, HOUR ( 0) }, /* Greenwich Mean */ { "UT", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */ { "UTC", tZONE, HOUR ( 0) }, { NULL, 0, 0 } }; /* The time zone table. This table is necessarily incomplete, as time zone abbreviations are ambiguous; e.g., Australians interpret "EST" as Eastern time in Australia, not as US Eastern Standard Time. You cannot rely on parse_datetime to handle arbitrary time zone abbreviations; use numeric abbreviations like "-0500" instead. */ static table const time_zone_table[] = { { "WET", tZONE, HOUR ( 0) }, /* Western European */ { "WEST", tDAYZONE, HOUR ( 0) }, /* Western European Summer */ { "BST", tDAYZONE, HOUR ( 0) }, /* British Summer */ { "ART", tZONE, -HOUR ( 3) }, /* Argentina */ { "BRT", tZONE, -HOUR ( 3) }, /* Brazil */ { "BRST", tDAYZONE, -HOUR ( 3) }, /* Brazil Summer */ { "NST", tZONE, -(HOUR ( 3) + 30 * 60) }, /* Newfoundland Standard */ { "NDT", tDAYZONE,-(HOUR ( 3) + 30 * 60) }, /* Newfoundland Daylight */ { "AST", tZONE, -HOUR ( 4) }, /* Atlantic Standard */ { "ADT", tDAYZONE, -HOUR ( 4) }, /* Atlantic Daylight */ { "CLT", tZONE, -HOUR ( 4) }, /* Chile */ { "CLST", tDAYZONE, -HOUR ( 4) }, /* Chile Summer */ { "EST", tZONE, -HOUR ( 5) }, /* Eastern Standard */ { "EDT", tDAYZONE, -HOUR ( 5) }, /* Eastern Daylight */ { "CST", tZONE, -HOUR ( 6) }, /* Central Standard */ { "CDT", tDAYZONE, -HOUR ( 6) }, /* Central Daylight */ { "MST", tZONE, -HOUR ( 7) }, /* Mountain Standard */ { "MDT", tDAYZONE, -HOUR ( 7) }, /* Mountain Daylight */ { "PST", tZONE, -HOUR ( 8) }, /* Pacific Standard */ { "PDT", tDAYZONE, -HOUR ( 8) }, /* Pacific Daylight */ { "AKST", tZONE, -HOUR ( 9) }, /* Alaska Standard */ { "AKDT", tDAYZONE, -HOUR ( 9) }, /* Alaska Daylight */ { "HST", tZONE, -HOUR (10) }, /* Hawaii Standard */ { "HAST", tZONE, -HOUR (10) }, /* Hawaii-Aleutian Standard */ { "HADT", tDAYZONE, -HOUR (10) }, /* Hawaii-Aleutian Daylight */ { "SST", tZONE, -HOUR (12) }, /* Samoa Standard */ { "WAT", tZONE, HOUR ( 1) }, /* West Africa */ { "CET", tZONE, HOUR ( 1) }, /* Central European */ { "CEST", tDAYZONE, HOUR ( 1) }, /* Central European Summer */ { "MET", tZONE, HOUR ( 1) }, /* Middle European */ { "MEZ", tZONE, HOUR ( 1) }, /* Middle European */ { "MEST", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ { "MESZ", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ { "EET", tZONE, HOUR ( 2) }, /* Eastern European */ { "EEST", tDAYZONE, HOUR ( 2) }, /* Eastern European Summer */ { "CAT", tZONE, HOUR ( 2) }, /* Central Africa */ { "SAST", tZONE, HOUR ( 2) }, /* South Africa Standard */ { "EAT", tZONE, HOUR ( 3) }, /* East Africa */ { "MSK", tZONE, HOUR ( 3) }, /* Moscow */ { "MSD", tDAYZONE, HOUR ( 3) }, /* Moscow Daylight */ { "IST", tZONE, (HOUR ( 5) + 30 * 60) }, /* India Standard */ { "SGT", tZONE, HOUR ( 8) }, /* Singapore */ { "KST", tZONE, HOUR ( 9) }, /* Korea Standard */ { "JST", tZONE, HOUR ( 9) }, /* Japan Standard */ { "GST", tZONE, HOUR (10) }, /* Guam Standard */ { "NZST", tZONE, HOUR (12) }, /* New Zealand Standard */ { "NZDT", tDAYZONE, HOUR (12) }, /* New Zealand Daylight */ { NULL, 0, 0 } }; /* Military time zone table. RFC 822 got these backwards, but RFC 5322 makes the incorrect treatment optional, so do them the right way here. Note 'T' is a special case, as it is used as the separator in ISO 8601 date and time of day representation. */ static table const military_table[] = { { "A", tZONE, HOUR ( 1) }, { "B", tZONE, HOUR ( 2) }, { "C", tZONE, HOUR ( 3) }, { "D", tZONE, HOUR ( 4) }, { "E", tZONE, HOUR ( 5) }, { "F", tZONE, HOUR ( 6) }, { "G", tZONE, HOUR ( 7) }, { "H", tZONE, HOUR ( 8) }, { "I", tZONE, HOUR ( 9) }, { "K", tZONE, HOUR (10) }, { "L", tZONE, HOUR (11) }, { "M", tZONE, HOUR (12) }, { "N", tZONE, -HOUR ( 1) }, { "O", tZONE, -HOUR ( 2) }, { "P", tZONE, -HOUR ( 3) }, { "Q", tZONE, -HOUR ( 4) }, { "R", tZONE, -HOUR ( 5) }, { "S", tZONE, -HOUR ( 6) }, { "T", 'T', 0 }, { "U", tZONE, -HOUR ( 8) }, { "V", tZONE, -HOUR ( 9) }, { "W", tZONE, -HOUR (10) }, { "X", tZONE, -HOUR (11) }, { "Y", tZONE, -HOUR (12) }, { "Z", tZONE, HOUR ( 0) }, { NULL, 0, 0 } }; /* Convert a time zone expressed as HH:MM into an integer count of seconds. If MM is negative, then S is of the form HHMM and needs to be picked apart; otherwise, S is of the form HH. As specified in https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03, allow only valid TZ range, and consider first two digits as hours, if no minutes specified. Return true if successful. */ static bool time_zone_hhmm (parser_control *pc, textint s, intmax_t mm) { intmax_t n_minutes; bool overflow = false; /* If the length of S is 1 or 2 and no minutes are specified, interpret it as a number of hours. */ if (s.digits <= 2 && mm < 0) s.value *= 100; if (mm < 0) n_minutes = (s.value / 100) * 60 + s.value % 100; else { overflow |= INT_MULTIPLY_WRAPV (s.value, 60, &n_minutes); overflow |= (s.negative ? INT_SUBTRACT_WRAPV (n_minutes, mm, &n_minutes) : INT_ADD_WRAPV (n_minutes, mm, &n_minutes)); } if (overflow || ! (-24 * 60 <= n_minutes && n_minutes <= 24 * 60)) return false; pc->time_zone = n_minutes * 60; return true; } static int to_hour (intmax_t hours, int meridian) { switch (meridian) { default: /* Pacify GCC. */ case MER24: return 0 <= hours && hours < 24 ? hours : -1; case MERam: return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1; case MERpm: return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1; } } enum { TM_YEAR_BASE = 1900 }; enum { TM_YEAR_BUFSIZE = INT_BUFSIZE_BOUND (int) + 1 }; /* Convert TM_YEAR, a year minus 1900, to a string that is numerically correct even if subtracting 1900 would overflow. */ static char const * tm_year_str (int tm_year, char buf[TM_YEAR_BUFSIZE]) { verify (TM_YEAR_BASE % 100 == 0); sprintf (buf, &"-%02d%02d"[-TM_YEAR_BASE <= tm_year], abs (tm_year / 100 + TM_YEAR_BASE / 100), abs (tm_year % 100)); return buf; } /* Convert a text year number to a year minus 1900, working correctly even if the input is in the range INT_MAX .. INT_MAX + 1900 - 1. */ static bool to_tm_year (textint textyear, bool debug, int *tm_year) { intmax_t year = textyear.value; /* XPG4 suggests that years 00-68 map to 2000-2068, and years 69-99 map to 1969-1999. */ if (0 <= year && textyear.digits == 2) { year += year < 69 ? 2000 : 1900; if (debug) dbg_printf (_("warning: adjusting year value %"PRIdMAX " to %"PRIdMAX"\n"), textyear.value, year); } if (year < 0 ? INT_SUBTRACT_WRAPV (-TM_YEAR_BASE, year, tm_year) : INT_SUBTRACT_WRAPV (year, TM_YEAR_BASE, tm_year)) { if (debug) dbg_printf (_("error: out-of-range year %"PRIdMAX"\n"), year); return false; } return true; } static table const * _GL_ATTRIBUTE_PURE lookup_zone (parser_control const *pc, char const *name) { table const *tp; for (tp = universal_time_zone_table; tp->name; tp++) if (strcmp (name, tp->name) == 0) return tp; /* Try local zone abbreviations before those in time_zone_table, as the local ones are more likely to be right. */ for (tp = pc->local_time_zone_table; tp->name; tp++) if (strcmp (name, tp->name) == 0) return tp; for (tp = time_zone_table; tp->name; tp++) if (strcmp (name, tp->name) == 0) return tp; return NULL; } #if ! HAVE_TM_GMTOFF /* Yield the difference between *A and *B, measured in seconds, ignoring leap seconds. The body of this function is taken directly from the GNU C Library; see strftime.c. */ static int tm_diff (const struct tm *a, const struct tm *b) { /* Compute intervening leap days correctly even if year is negative. Take care to avoid int overflow in leap day calculations, but it's OK to assume that A and B are close to each other. */ int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); int a100 = a4 / 25 - (a4 % 25 < 0); int b100 = b4 / 25 - (b4 % 25 < 0); int a400 = SHR (a100, 2); int b400 = SHR (b100, 2); int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); int years = a->tm_year - b->tm_year; int days = (365 * years + intervening_leap_days + (a->tm_yday - b->tm_yday)); return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + (a->tm_min - b->tm_min)) + (a->tm_sec - b->tm_sec)); } #endif /* ! HAVE_TM_GMTOFF */ static table const * lookup_word (parser_control const *pc, char *word) { char *p; char *q; idx_t wordlen; table const *tp; bool period_found; bool abbrev; /* Make it uppercase. */ for (p = word; *p; p++) *p = c_toupper (to_uchar (*p)); for (tp = meridian_table; tp->name; tp++) if (strcmp (word, tp->name) == 0) return tp; /* See if we have an abbreviation for a month. */ wordlen = strlen (word); abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.'); for (tp = month_and_day_table; tp->name; tp++) if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0) return tp; if ((tp = lookup_zone (pc, word))) return tp; if (strcmp (word, dst_table[0].name) == 0) return dst_table; for (tp = time_units_table; tp->name; tp++) if (strcmp (word, tp->name) == 0) return tp; /* Strip off any plural and try the units table again. */ if (word[wordlen - 1] == 'S') { word[wordlen - 1] = '\0'; for (tp = time_units_table; tp->name; tp++) if (strcmp (word, tp->name) == 0) return tp; word[wordlen - 1] = 'S'; /* For "this" in relative_time_table. */ } for (tp = relative_time_table; tp->name; tp++) if (strcmp (word, tp->name) == 0) return tp; /* Military time zones. */ if (wordlen == 1) for (tp = military_table; tp->name; tp++) if (word[0] == tp->name[0]) return tp; /* Drop out any periods and try the time zone table again. */ for (period_found = false, p = q = word; (*p = *q); q++) if (*q == '.') period_found = true; else p++; if (period_found && (tp = lookup_zone (pc, word))) return tp; return NULL; } static int yylex (union YYSTYPE *lvalp, parser_control *pc) { unsigned char c; for (;;) { while (c = *pc->input, c_isspace (c)) pc->input++; if (c_isdigit (c) || c == '-' || c == '+') { char const *p = pc->input; int sign; if (c == '-' || c == '+') { sign = c == '-' ? -1 : 1; while (c = *(pc->input = ++p), c_isspace (c)) continue; if (! c_isdigit (c)) /* skip the '-' sign */ continue; } else sign = 0; time_t value = 0; do { if (INT_MULTIPLY_WRAPV (value, 10, &value)) return '?'; if (INT_ADD_WRAPV (value, sign < 0 ? '0' - c : c - '0', &value)) return '?'; c = *++p; } while (c_isdigit (c)); if ((c == '.' || c == ',') && c_isdigit (p[1])) { time_t s = value; int digits; /* Accumulate fraction, to ns precision. */ p++; int ns = *p++ - '0'; for (digits = 2; digits <= LOG10_BILLION; digits++) { ns *= 10; if (c_isdigit (*p)) ns += *p++ - '0'; } /* Skip excess digits, truncating toward -Infinity. */ if (sign < 0) for (; c_isdigit (*p); p++) if (*p != '0') { ns++; break; } while (c_isdigit (*p)) p++; /* Adjust to the timespec convention, which is that tv_nsec is always a positive offset even if tv_sec is negative. */ if (sign < 0 && ns) { if (INT_SUBTRACT_WRAPV (s, 1, &s)) return '?'; ns = BILLION - ns; } lvalp->timespec.tv_sec = s; lvalp->timespec.tv_nsec = ns; pc->input = p; return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER; } else { lvalp->textintval.negative = sign < 0; lvalp->textintval.value = value; lvalp->textintval.digits = p - pc->input; pc->input = p; return sign ? tSNUMBER : tUNUMBER; } } if (c_isalpha (c)) { char buff[20]; char *p = buff; table const *tp; do { if (p < buff + sizeof buff - 1) *p++ = c; c = *++pc->input; } while (c_isalpha (c) || c == '.'); *p = '\0'; tp = lookup_word (pc, buff); if (! tp) { if (debugging (pc)) dbg_printf (_("error: unknown word '%s'\n"), buff); return '?'; } lvalp->intval = tp->value; return tp->type; } if (c != '(') return to_uchar (*pc->input++); idx_t count = 0; do { c = *pc->input++; if (c == '\0') return c; if (c == '(') count++; else if (c == ')') count--; } while (count != 0); } } /* Do nothing if the parser reports an error. */ static int yyerror (_GL_UNUSED parser_control const *pc, _GL_UNUSED char const *s) { return 0; } /* If *TM0 is the old and *TM1 is the new value of a struct tm after passing it to mktime_z, return true if it's OK. It's not OK if mktime failed or if *TM0 has out-of-range mainline members. The caller should set TM1->tm_wday to -1 before calling mktime, as a negative tm_wday is how mktime failure is inferred. */ static bool mktime_ok (struct tm const *tm0, struct tm const *tm1) { if (tm1->tm_wday < 0) return false; return ! ((tm0->tm_sec ^ tm1->tm_sec) | (tm0->tm_min ^ tm1->tm_min) | (tm0->tm_hour ^ tm1->tm_hour) | (tm0->tm_mday ^ tm1->tm_mday) | (tm0->tm_mon ^ tm1->tm_mon) | (tm0->tm_year ^ tm1->tm_year)); } /* Debugging: format a 'struct tm' into a buffer, taking the parser's timezone information into account (if pc != NULL). */ static char const * debug_strfdatetime (struct tm const *tm, parser_control const *pc, char *buf, int n) { /* TODO: 1. find an optimal way to print date string in a clear and unambiguous format. Currently, always add '(Y-M-D)' prefix. Consider '2016y01m10d' or 'year(2016) month(01) day(10)'. If the user needs debug printing, it means he/she already having issues with the parsing - better to avoid formats that could be mis-interpreted (e.g., just YYYY-MM-DD). 2. Can strftime be used instead? depends if it is portable and can print invalid dates on all systems. 3. Print timezone information ? 4. Print DST information ? 5. Print nanosecond information ? NOTE: Printed date/time values might not be valid, e.g., '2016-02-31' or '2016-19-2016' . These are the values as parsed from the user string, before validation. */ int m = nstrftime (buf, n, "(Y-M-D) %Y-%m-%d %H:%M:%S", tm, 0, 0); /* If parser_control information was provided (for timezone), and there's enough space in the buffer, add timezone info. */ if (pc && m < n && pc->zones_seen) { int tz = pc->time_zone; /* Account for DST if tLOCAL_ZONE was seen. */ if (pc->local_zones_seen && !pc->zones_seen && 0 < pc->local_isdst) tz += 60 * 60; char time_zone_buf[TIME_ZONE_BUFSIZE]; snprintf (&buf[m], n - m, " TZ=%s", time_zone_str (tz, time_zone_buf)); } return buf; } static char const * debug_strfdate (struct tm const *tm, char *buf, int n) { char tm_year_buf[TM_YEAR_BUFSIZE]; snprintf (buf, n, "(Y-M-D) %s-%02d-%02d", tm_year_str (tm->tm_year, tm_year_buf), tm->tm_mon + 1, tm->tm_mday); return buf; } static char const * debug_strftime (struct tm const *tm, char *buf, int n) { snprintf (buf, n, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec); return buf; } /* If mktime_ok failed, display the failed time values, and provide possible hints. Example output: date: error: invalid date/time value: date: user provided time: '(Y-M-D) 2006-04-02 02:45:00' date: normalized time: '(Y-M-D) 2006-04-02 03:45:00' date: __ date: possible reasons: date: non-existing due to daylight-saving time; date: numeric values overflow; date: missing timezone; */ static void debug_mktime_not_ok (struct tm const *tm0, struct tm const *tm1, parser_control const *pc, bool time_zone_seen) { /* TODO: handle t == -1 (as in 'mktime_ok'). */ char tmp[DBGBUFSIZE]; int i; const bool eq_sec = (tm0->tm_sec == tm1->tm_sec); const bool eq_min = (tm0->tm_min == tm1->tm_min); const bool eq_hour = (tm0->tm_hour == tm1->tm_hour); const bool eq_mday = (tm0->tm_mday == tm1->tm_mday); const bool eq_month = (tm0->tm_mon == tm1->tm_mon); const bool eq_year = (tm0->tm_year == tm1->tm_year); const bool dst_shift = eq_sec && eq_min && !eq_hour && eq_mday && eq_month && eq_year; if (!debugging (pc)) return; dbg_printf (_("error: invalid date/time value:\n")); dbg_printf (_(" user provided time: '%s'\n"), debug_strfdatetime (tm0, pc, tmp, sizeof tmp)); dbg_printf (_(" normalized time: '%s'\n"), debug_strfdatetime (tm1, pc, tmp, sizeof tmp)); /* The format must be aligned with debug_strfdatetime and the two DEBUG statements above. This string is not translated. */ i = snprintf (tmp, sizeof tmp, " %4s %2s %2s %2s %2s %2s", eq_year ? "" : "----", eq_month ? "" : "--", eq_mday ? "" : "--", eq_hour ? "" : "--", eq_min ? "" : "--", eq_sec ? "" : "--"); /* Trim trailing whitespace. */ if (0 <= i) { if (sizeof tmp - 1 < i) i = sizeof tmp - 1; while (0 < i && tmp[i - 1] == ' ') --i; tmp[i] = '\0'; } dbg_printf ("%s\n", tmp); dbg_printf (_(" possible reasons:\n")); if (dst_shift) dbg_printf (_(" non-existing due to daylight-saving time;\n")); if (!eq_mday && !eq_month) dbg_printf (_(" invalid day/month combination;\n")); dbg_printf (_(" numeric values overflow;\n")); dbg_printf (" %s\n", (time_zone_seen ? _("incorrect timezone") : _("missing timezone"))); } /* Parse a date/time string, storing the resulting time value into *RESULT. The string itself is pointed to by P. Return true if successful. P can be an incomplete or relative time specification; if so, use *NOW as the basis for the returned time. Default to timezone TZDEFAULT, which corresponds to tzalloc (TZSTRING). */ static bool parse_datetime_body (struct timespec *result, char const *p, struct timespec const *now, unsigned int flags, timezone_t tzdefault, char const *tzstring) { struct tm tm; struct tm tm0; char time_zone_buf[TIME_ZONE_BUFSIZE]; char dbg_tm[DBGBUFSIZE]; bool ok = false; char const *input_sentinel = p + strlen (p); char *tz1alloc = NULL; /* A reasonable upper bound for the size of ordinary TZ strings. Use heap allocation if TZ's length exceeds this. */ enum { TZBUFSIZE = 100 }; char tz1buf[TZBUFSIZE]; struct timespec gettime_buffer; if (! now) { gettime (&gettime_buffer); now = &gettime_buffer; } time_t Start = now->tv_sec; int Start_ns = now->tv_nsec; unsigned char c; while (c = *p, c_isspace (c)) p++; timezone_t tz = tzdefault; /* Store a local copy prior to first "goto". Without this, a prior use below of RELATIVE_TIME_0 on the RHS might translate to an assignment- to-temporary, which would trigger a -Wjump-misses-init warning. */ const relative_time rel_time_0 = RELATIVE_TIME_0; if (strncmp (p, "TZ=\"", 4) == 0) { char const *tzbase = p + 4; idx_t tzsize = 1; char const *s; for (s = tzbase; *s; s++, tzsize++) if (*s == '\\') { s++; if (! (*s == '\\' || *s == '"')) break; } else if (*s == '"') { timezone_t tz1; char *tz1string = tz1buf; char *z; if (TZBUFSIZE < tzsize) { tz1alloc = malloc (tzsize); if (!tz1alloc) goto fail; tz1string = tz1alloc; } z = tz1string; for (s = tzbase; *s != '"'; s++) *z++ = *(s += *s == '\\'); *z = '\0'; tz1 = tzalloc (tz1string); if (!tz1) goto fail; tz = tz1; tzstring = tz1string; p = s + 1; while (c = *p, c_isspace (c)) p++; break; } } struct tm tmp; if (! localtime_rz (tz, &now->tv_sec, &tmp)) goto fail; /* As documented, be careful to treat the empty string just like a date string of "0". Without this, an empty string would be declared invalid when parsed during a DST transition. */ if (*p == '\0') p = "0"; parser_control pc; pc.input = p; #ifdef GNULIB_PARSE_DATETIME2 pc.parse_datetime_debug = (flags & PARSE_DATETIME_DEBUG) != 0; #endif if (INT_ADD_WRAPV (tmp.tm_year, TM_YEAR_BASE, &pc.year.value)) { if (debugging (&pc)) dbg_printf (_("error: initial year out of range\n")); goto fail; } pc.year.digits = 0; pc.month = tmp.tm_mon + 1; pc.day = tmp.tm_mday; pc.hour = tmp.tm_hour; pc.minutes = tmp.tm_min; pc.seconds.tv_sec = tmp.tm_sec; pc.seconds.tv_nsec = Start_ns; tm.tm_isdst = tmp.tm_isdst; pc.meridian = MER24; pc.rel = rel_time_0; pc.timespec_seen = false; pc.rels_seen = false; pc.dates_seen = 0; pc.days_seen = 0; pc.times_seen = 0; pc.local_zones_seen = 0; pc.dsts_seen = 0; pc.zones_seen = 0; pc.year_seen = false; pc.debug_dates_seen = false; pc.debug_days_seen = false; pc.debug_times_seen = false; pc.debug_local_zones_seen = false; pc.debug_zones_seen = false; pc.debug_year_seen = false; pc.debug_ordinal_day_seen = false; #if HAVE_STRUCT_TM_TM_ZONE pc.local_time_zone_table[0].name = tmp.tm_zone; pc.local_time_zone_table[0].type = tLOCAL_ZONE; pc.local_time_zone_table[0].value = tmp.tm_isdst; pc.local_time_zone_table[1].name = NULL; /* Probe the names used in the next three calendar quarters, looking for a tm_isdst different from the one we already have. */ { int quarter; for (quarter = 1; quarter <= 3; quarter++) { time_t probe; if (INT_ADD_WRAPV (Start, quarter * (90 * 24 * 60 * 60), &probe)) break; struct tm probe_tm; if (localtime_rz (tz, &probe, &probe_tm) && probe_tm.tm_zone && probe_tm.tm_isdst != pc.local_time_zone_table[0].value) { { pc.local_time_zone_table[1].name = probe_tm.tm_zone; pc.local_time_zone_table[1].type = tLOCAL_ZONE; pc.local_time_zone_table[1].value = probe_tm.tm_isdst; pc.local_time_zone_table[2].name = NULL; } break; } } } #else #if HAVE_TZNAME { # if !HAVE_DECL_TZNAME extern char *tzname[]; # endif int i; for (i = 0; i < 2; i++) { pc.local_time_zone_table[i].name = tzname[i]; pc.local_time_zone_table[i].type = tLOCAL_ZONE; pc.local_time_zone_table[i].value = i; } pc.local_time_zone_table[i].name = NULL; } #else pc.local_time_zone_table[0].name = NULL; #endif #endif if (pc.local_time_zone_table[0].name && pc.local_time_zone_table[1].name && ! strcmp (pc.local_time_zone_table[0].name, pc.local_time_zone_table[1].name)) { /* This locale uses the same abbreviation for standard and daylight times. So if we see that abbreviation, we don't know whether it's daylight time. */ pc.local_time_zone_table[0].value = -1; pc.local_time_zone_table[1].name = NULL; } if (yyparse (&pc) != 0) { if (debugging (&pc)) dbg_printf ((input_sentinel <= pc.input ? _("error: parsing failed\n") : _("error: parsing failed, stopped at '%s'\n")), pc.input); goto fail; } /* Determine effective timezone source. */ if (debugging (&pc)) { dbg_printf (_("input timezone: ")); if (pc.timespec_seen) fprintf (stderr, _("'@timespec' - always UTC")); else if (pc.zones_seen) fprintf (stderr, _("parsed date/time string")); else if (tzstring) { if (tz != tzdefault) fprintf (stderr, _("TZ=\"%s\" in date string"), tzstring); else if (STREQ (tzstring, "UTC0")) { /* Special case: 'date -u' sets TZ="UTC0". */ fprintf (stderr, _("TZ=\"UTC0\" environment value or -u")); } else fprintf (stderr, _("TZ=\"%s\" environment value"), tzstring); } else fprintf (stderr, _("system default")); /* Account for DST changes if tLOCAL_ZONE was seen. local timezone only changes DST and is relative to the default timezone.*/ if (pc.local_zones_seen && !pc.zones_seen && 0 < pc.local_isdst) fprintf (stderr, ", dst"); if (pc.zones_seen) fprintf (stderr, " (%s)", time_zone_str (pc.time_zone, time_zone_buf)); fputc ('\n', stderr); } if (pc.timespec_seen) *result = pc.seconds; else { if (1 < (pc.times_seen | pc.dates_seen | pc.days_seen | pc.dsts_seen | (pc.local_zones_seen + pc.zones_seen))) { if (debugging (&pc)) { if (pc.times_seen > 1) dbg_printf ("error: seen multiple time parts\n"); if (pc.dates_seen > 1) dbg_printf ("error: seen multiple date parts\n"); if (pc.days_seen > 1) dbg_printf ("error: seen multiple days parts\n"); if (pc.dsts_seen > 1) dbg_printf ("error: seen multiple daylight-saving parts\n"); if ((pc.local_zones_seen + pc.zones_seen) > 1) dbg_printf ("error: seen multiple time-zone parts\n"); } goto fail; } if (! to_tm_year (pc.year, debugging (&pc), &tm.tm_year) || INT_ADD_WRAPV (pc.month, -1, &tm.tm_mon) || INT_ADD_WRAPV (pc.day, 0, &tm.tm_mday)) { if (debugging (&pc)) dbg_printf (_("error: year, month, or day overflow\n")); goto fail; } if (pc.times_seen || (pc.rels_seen && ! pc.dates_seen && ! pc.days_seen)) { tm.tm_hour = to_hour (pc.hour, pc.meridian); if (tm.tm_hour < 0) { char const *mrd = (pc.meridian == MERam ? "am" : pc.meridian == MERpm ?"pm" : ""); if (debugging (&pc)) dbg_printf (_("error: invalid hour %"PRIdMAX"%s\n"), pc.hour, mrd); goto fail; } tm.tm_min = pc.minutes; tm.tm_sec = pc.seconds.tv_sec; if (debugging (&pc)) dbg_printf ((pc.times_seen ? _("using specified time as starting value: '%s'\n") : _("using current time as starting value: '%s'\n")), debug_strftime (&tm, dbg_tm, sizeof dbg_tm)); } else { tm.tm_hour = tm.tm_min = tm.tm_sec = 0; pc.seconds.tv_nsec = 0; if (debugging (&pc)) dbg_printf ("warning: using midnight as starting time: 00:00:00\n"); } /* Let mktime deduce tm_isdst if we have an absolute timestamp. */ if (pc.dates_seen | pc.days_seen | pc.times_seen) tm.tm_isdst = -1; /* But if the input explicitly specifies local time with or without DST, give mktime that information. */ if (pc.local_zones_seen) tm.tm_isdst = pc.local_isdst; tm0.tm_sec = tm.tm_sec; tm0.tm_min = tm.tm_min; tm0.tm_hour = tm.tm_hour; tm0.tm_mday = tm.tm_mday; tm0.tm_mon = tm.tm_mon; tm0.tm_year = tm.tm_year; tm0.tm_isdst = tm.tm_isdst; tm.tm_wday = -1; Start = mktime_z (tz, &tm); if (! mktime_ok (&tm0, &tm)) { bool repaired = false; bool time_zone_seen = pc.zones_seen != 0; if (time_zone_seen) { /* Guard against falsely reporting errors near the time_t boundaries when parsing times in other time zones. For example, suppose the input string "1969-12-31 23:00:00 -0100", the current time zone is 8 hours ahead of UTC, and the min time_t value is 1970-01-01 00:00:00 UTC. Then the min localtime value is 1970-01-01 08:00:00, and mktime will therefore fail on 1969-12-31 23:00:00. To work around the problem, set the time zone to 1 hour behind UTC temporarily by setting TZ="XXX1:00" and try mktime again. */ char tz2buf[sizeof "XXX" - 1 + TIME_ZONE_BUFSIZE]; tz2buf[0] = tz2buf[1] = tz2buf[2] = 'X'; time_zone_str (pc.time_zone, &tz2buf[3]); timezone_t tz2 = tzalloc (tz2buf); if (!tz2) { if (debugging (&pc)) dbg_printf (_("error: tzalloc (\"%s\") failed\n"), tz2buf); goto fail; } tm.tm_sec = tm0.tm_sec; tm.tm_min = tm0.tm_min; tm.tm_hour = tm0.tm_hour; tm.tm_mday = tm0.tm_mday; tm.tm_mon = tm0.tm_mon; tm.tm_year = tm0.tm_year; tm.tm_isdst = tm0.tm_isdst; tm.tm_wday = -1; Start = mktime_z (tz2, &tm); repaired = mktime_ok (&tm0, &tm); tzfree (tz2); } if (! repaired) { debug_mktime_not_ok (&tm0, &tm, &pc, time_zone_seen); goto fail; } } char dbg_ord[DBGBUFSIZE]; if (pc.days_seen && ! pc.dates_seen) { intmax_t dayincr; tm.tm_yday = -1; if (! (INT_MULTIPLY_WRAPV ((pc.day_ordinal - (0 < pc.day_ordinal && tm.tm_wday != pc.day_number)), 7, &dayincr) || INT_ADD_WRAPV ((pc.day_number - tm.tm_wday + 7) % 7, dayincr, &dayincr) || INT_ADD_WRAPV (dayincr, tm.tm_mday, &tm.tm_mday))) { tm.tm_isdst = -1; Start = mktime_z (tz, &tm); } if (tm.tm_yday < 0) { if (debugging (&pc)) dbg_printf (_("error: day '%s' " "(day ordinal=%"PRIdMAX" number=%d) " "resulted in an invalid date: '%s'\n"), str_days (&pc, dbg_ord, sizeof dbg_ord), pc.day_ordinal, pc.day_number, debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); goto fail; } if (debugging (&pc)) dbg_printf (_("new start date: '%s' is '%s'\n"), str_days (&pc, dbg_ord, sizeof dbg_ord), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); } if (debugging (&pc)) { if (!pc.dates_seen && !pc.days_seen) dbg_printf (_("using current date as starting value: '%s'\n"), debug_strfdate (&tm, dbg_tm, sizeof dbg_tm)); if (pc.days_seen && pc.dates_seen) dbg_printf (_("warning: day (%s) ignored when explicit dates " "are given\n"), str_days (&pc, dbg_ord, sizeof dbg_ord)); dbg_printf (_("starting date/time: '%s'\n"), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); } /* Add relative date. */ if (pc.rel.year | pc.rel.month | pc.rel.day) { if (debugging (&pc)) { if ((pc.rel.year != 0 || pc.rel.month != 0) && tm.tm_mday != 15) dbg_printf (_("warning: when adding relative months/years, " "it is recommended to specify the 15th of the " "months\n")); if (pc.rel.day != 0 && tm.tm_hour != 12) dbg_printf (_("warning: when adding relative days, " "it is recommended to specify noon\n")); } int year, month, day; if (INT_ADD_WRAPV (tm.tm_year, pc.rel.year, &year) || INT_ADD_WRAPV (tm.tm_mon, pc.rel.month, &month) || INT_ADD_WRAPV (tm.tm_mday, pc.rel.day, &day)) { if (debugging (&pc)) dbg_printf (_("error: %s:%d\n"), __FILE__, __LINE__); goto fail; } tm.tm_year = year; tm.tm_mon = month; tm.tm_mday = day; tm.tm_hour = tm0.tm_hour; tm.tm_min = tm0.tm_min; tm.tm_sec = tm0.tm_sec; tm.tm_isdst = tm0.tm_isdst; tm.tm_wday = -1; Start = mktime_z (tz, &tm); if (tm.tm_wday < 0) { if (debugging (&pc)) dbg_printf (_("error: adding relative date resulted " "in an invalid date: '%s'\n"), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); goto fail; } if (debugging (&pc)) { dbg_printf (_("after date adjustment " "(%+"PRIdMAX" years, %+"PRIdMAX" months, " "%+"PRIdMAX" days),\n"), pc.rel.year, pc.rel.month, pc.rel.day); dbg_printf (_(" new date/time = '%s'\n"), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); /* Warn about crossing DST due to time adjustment. Example: https://bugs.gnu.org/8357 env TZ=Europe/Helsinki \ date --debug \ -d 'Mon Mar 28 00:36:07 2011 EEST 1 day ago' This case is different than DST changes due to time adjustment, i.e., "1 day ago" vs "24 hours ago" are calculated in different places. 'tm0.tm_isdst' contains the DST of the input date, 'tm.tm_isdst' is the normalized result after calling mktime (&tm). */ if (tm0.tm_isdst != -1 && tm.tm_isdst != tm0.tm_isdst) dbg_printf (_("warning: daylight saving time changed after " "date adjustment\n")); /* Warn if the user did not ask to adjust days but mday changed, or user did not ask to adjust months/days but the month changed. Example for first case: 2016-05-31 + 1 month => 2016-06-31 => 2016-07-01. User asked to adjust month, but the day changed from 31 to 01. Example for second case: 2016-02-29 + 1 year => 2017-02-29 => 2017-03-01. User asked to adjust year, but the month changed from 02 to 03. */ if (pc.rel.day == 0 && (tm.tm_mday != day || (pc.rel.month == 0 && tm.tm_mon != month))) { dbg_printf (_("warning: month/year adjustment resulted in " "shifted dates:\n")); char tm_year_buf[TM_YEAR_BUFSIZE]; dbg_printf (_(" adjusted Y M D: %s %02d %02d\n"), tm_year_str (year, tm_year_buf), month + 1, day); dbg_printf (_(" normalized Y M D: %s %02d %02d\n"), tm_year_str (tm.tm_year, tm_year_buf), tm.tm_mon + 1, tm.tm_mday); } } } /* The only "output" of this if-block is an updated Start value, so this block must follow others that clobber Start. */ if (pc.zones_seen) { bool overflow = false; #ifdef HAVE_TM_GMTOFF long int utcoff = tm.tm_gmtoff; #else time_t t = Start; struct tm gmt; int utcoff = (gmtime_r (&t, &gmt) ? tm_diff (&tm, &gmt) : (overflow = true, 0)); #endif intmax_t delta; overflow |= INT_SUBTRACT_WRAPV (pc.time_zone, utcoff, &delta); time_t t1; overflow |= INT_SUBTRACT_WRAPV (Start, delta, &t1); if (overflow) { if (debugging (&pc)) dbg_printf (_("error: timezone %d caused time_t overflow\n"), pc.time_zone); goto fail; } Start = t1; } if (debugging (&pc)) { intmax_t Starti = Start; dbg_printf (_("'%s' = %"PRIdMAX" epoch-seconds\n"), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm), Starti); } /* Add relative hours, minutes, and seconds. On hosts that support leap seconds, ignore the possibility of leap seconds; e.g., "+ 10 minutes" adds 600 seconds, even if one of them is a leap second. Typically this is not what the user wants, but it's too hard to do it the other way, because the time zone indicator must be applied before relative times, and if mktime is applied again the time zone will be lost. */ { intmax_t orig_ns = pc.seconds.tv_nsec; intmax_t sum_ns = orig_ns + pc.rel.ns; int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION; int d4 = (sum_ns - normalized_ns) / BILLION; intmax_t d1, t1, d2, t2, t3; time_t t4; if (INT_MULTIPLY_WRAPV (pc.rel.hour, 60 * 60, &d1) || INT_ADD_WRAPV (Start, d1, &t1) || INT_MULTIPLY_WRAPV (pc.rel.minutes, 60, &d2) || INT_ADD_WRAPV (t1, d2, &t2) || INT_ADD_WRAPV (t2, pc.rel.seconds, &t3) || INT_ADD_WRAPV (t3, d4, &t4)) { if (debugging (&pc)) dbg_printf (_("error: adding relative time caused an " "overflow\n")); goto fail; } result->tv_sec = t4; result->tv_nsec = normalized_ns; if (debugging (&pc) && (pc.rel.hour | pc.rel.minutes | pc.rel.seconds | pc.rel.ns)) { dbg_printf (_("after time adjustment (%+"PRIdMAX" hours, " "%+"PRIdMAX" minutes, " "%+"PRIdMAX" seconds, %+d ns),\n"), pc.rel.hour, pc.rel.minutes, pc.rel.seconds, pc.rel.ns); intmax_t t4i = t4; dbg_printf (_(" new time = %"PRIdMAX" epoch-seconds\n"), t4i); /* Warn about crossing DST due to time adjustment. Example: https://bugs.gnu.org/8357 env TZ=Europe/Helsinki \ date --debug \ -d 'Mon Mar 28 00:36:07 2011 EEST 24 hours ago' This case is different than DST changes due to days adjustment, i.e., "1 day ago" vs "24 hours ago" are calculated in different places. 'tm.tm_isdst' contains the date after date adjustment. */ struct tm lmt; if (tm.tm_isdst != -1 && localtime_rz (tz, &result->tv_sec, &lmt) && tm.tm_isdst != lmt.tm_isdst) dbg_printf (_("warning: daylight saving time changed after " "time adjustment\n")); } } } if (debugging (&pc)) { /* Special case: using 'date -u' simply set TZ=UTC0 */ if (! tzstring) dbg_printf (_("timezone: system default\n")); else if (STREQ (tzstring, "UTC0")) dbg_printf (_("timezone: Universal Time\n")); else dbg_printf (_("timezone: TZ=\"%s\" environment value\n"), tzstring); intmax_t sec = result->tv_sec; int nsec = result->tv_nsec; dbg_printf (_("final: %"PRIdMAX".%09d (epoch-seconds)\n"), sec, nsec); struct tm gmt, lmt; bool got_utc = !!gmtime_r (&result->tv_sec, &gmt); if (got_utc) dbg_printf (_("final: %s (UTC)\n"), debug_strfdatetime (&gmt, NULL, dbg_tm, sizeof dbg_tm)); if (localtime_rz (tz, &result->tv_sec, &lmt)) { #ifdef HAVE_TM_GMTOFF bool got_utcoff = true; long int utcoff = lmt.tm_gmtoff; #else bool got_utcoff = got_utc; int utcoff; if (got_utcoff) utcoff = tm_diff (&lmt, &gmt); #endif if (got_utcoff) dbg_printf (_("final: %s (UTC%s)\n"), debug_strfdatetime (&lmt, NULL, dbg_tm, sizeof dbg_tm), time_zone_str (utcoff, time_zone_buf)); else dbg_printf (_("final: %s (unknown time zone offset)\n"), debug_strfdatetime (&lmt, NULL, dbg_tm, sizeof dbg_tm)); } } ok = true; fail: if (tz != tzdefault) tzfree (tz); free (tz1alloc); return ok; } #ifdef GNULIB_PARSE_DATETIME2 /* Parse a date/time string, storing the resulting time value into *RESULT. The string itself is pointed to by P. Return true if successful. P can be an incomplete or relative time specification; if so, use *NOW as the basis for the returned time. Default to timezone TZDEFAULT, which corresponds to tzalloc (TZSTRING). */ bool parse_datetime2 (struct timespec *result, char const *p, struct timespec const *now, unsigned int flags, timezone_t tzdefault, char const *tzstring) { return parse_datetime_body (result, p, now, flags, tzdefault, tzstring); } #endif /* The plain interface: run with debug=false and the default timezone. */ bool parse_datetime (struct timespec *result, char const *p, struct timespec const *now) { char const *tzstring = getenv ("TZ"); timezone_t tz = tzalloc (tzstring); if (!tz) return false; bool ok = parse_datetime_body (result, p, now, 0, tz, tzstring); tzfree (tz); return ok; } #if TEST int main (int ac, char **av) { char buff[BUFSIZ]; printf ("Enter date, or blank line to exit.\n\t> "); fflush (stdout); buff[BUFSIZ - 1] = '\0'; while (fgets (buff, BUFSIZ - 1, stdin) && buff[0]) { struct timespec d; struct tm const *tm; if (! parse_datetime (&d, buff, NULL)) printf ("Bad format - couldn't convert.\n"); else if (! (tm = localtime (&d.tv_sec))) { intmax_t sec = d.tv_sec; printf ("localtime (%"PRIdMAX") failed\n", sec); } else { int ns = d.tv_nsec; char tm_year_buf[TM_YEAR_BUFSIZE]; printf ("%s-%02d-%02d %02d:%02d:%02d.%09d\n", tm_year_str (tm->tm_year, tm_year_buf), tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, ns); } printf ("\t> "); fflush (stdout); } return 0; } #endif /* TEST */ �������������������������������������recutils-1.9/lib/mbsinit.c��������������������������������������������������������������������������0000644�0000000�0000000�00000004547�14226564450�012505� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for initial conversion state. Copyright (C) 2008-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include "verify.h" #if GNULIB_defined_mbstate_t /* Platforms that lack mbsinit() also lack mbrlen(), mbrtowc(), mbsrtowcs() and wcrtomb(), wcsrtombs(). We assume that - sizeof (mbstate_t) >= 4, - only stateless encodings are supported (such as UTF-8 and EUC-JP, but not ISO-2022 variants), - for each encoding, the number of bytes for a wide character is <= 4. (This maximum is attained for UTF-8, GB18030, EUC-TW.) We define the meaning of mbstate_t as follows: - In mb -> wc direction, mbstate_t's first byte contains the number of buffered bytes (in the range 0..3), followed by up to 3 buffered bytes. See mbrtowc.c. - In wc -> mb direction, mbstate_t contains no information. In other words, it is always in the initial state. */ verify (sizeof (mbstate_t) >= 4); int mbsinit (const mbstate_t *ps) { const char *pstate = (const char *)ps; return pstate == NULL || pstate[0] == 0; } #else int mbsinit (const mbstate_t *ps) { # if defined _WIN32 && !defined __CYGWIN__ /* Native Windows. */ /* MSVC defines 'mbstate_t' as an 8-byte struct; the first 4 bytes matter. On mingw, 'mbstate_t' is sometimes defined as 'int', sometimes defined as an 8-byte struct, of which the first 4 bytes matter. */ return ps == NULL || *(const unsigned int *)ps == 0; # else /* Minix, HP-UX 11.00, Solaris 2.6, Interix, ... */ /* Maybe this definition works, maybe not... */ return ps == NULL || *(const char *)ps == 0; # endif } #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/at-func.c��������������������������������������������������������������������������0000644�0000000�0000000�00000010470�14226564446�012372� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Define at-style functions like fstatat, unlinkat, fchownat, etc. Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include "filename.h" /* solely for definition of IS_ABSOLUTE_FILE_NAME */ #ifdef GNULIB_SUPPORT_ONLY_AT_FDCWD # include <errno.h> # ifndef ENOTSUP # define ENOTSUP EINVAL # endif #else # include "openat.h" # include "openat-priv.h" # include "save-cwd.h" #endif #ifdef AT_FUNC_USE_F1_COND # define CALL_FUNC(F) \ (flag == AT_FUNC_USE_F1_COND \ ? AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS) \ : AT_FUNC_F2 (F AT_FUNC_POST_FILE_ARGS)) # define VALIDATE_FLAG(F) \ if (flag & ~AT_FUNC_USE_F1_COND) \ { \ errno = EINVAL; \ return FUNC_FAIL; \ } #else # define CALL_FUNC(F) (AT_FUNC_F1 (F AT_FUNC_POST_FILE_ARGS)) # define VALIDATE_FLAG(F) /* empty */ #endif #ifdef AT_FUNC_RESULT # define FUNC_RESULT AT_FUNC_RESULT #else # define FUNC_RESULT int #endif #ifdef AT_FUNC_FAIL # define FUNC_FAIL AT_FUNC_FAIL #else # define FUNC_FAIL -1 #endif /* Call AT_FUNC_F1 to operate on FILE, which is in the directory open on descriptor FD. If AT_FUNC_USE_F1_COND is defined to a value, AT_FUNC_POST_FILE_PARAM_DECLS must include a parameter named flag; call AT_FUNC_F2 if FLAG is 0 or fail if FLAG contains more bits than AT_FUNC_USE_F1_COND. Return int and fail with -1 unless AT_FUNC_RESULT or AT_FUNC_FAIL are defined. If possible, do it without changing the working directory. Otherwise, resort to using save_cwd/fchdir, then AT_FUNC_F?/restore_cwd. If either the save_cwd or the restore_cwd fails, then give a diagnostic and exit nonzero. */ FUNC_RESULT AT_FUNC_NAME (int fd, char const *file AT_FUNC_POST_FILE_PARAM_DECLS) { VALIDATE_FLAG (flag); if (fd == AT_FDCWD || IS_ABSOLUTE_FILE_NAME (file)) return CALL_FUNC (file); #ifdef GNULIB_SUPPORT_ONLY_AT_FDCWD errno = ENOTSUP; return FUNC_FAIL; #else { /* Be careful to choose names unlikely to conflict with AT_FUNC_POST_FILE_PARAM_DECLS. */ struct saved_cwd saved_cwd; int saved_errno; FUNC_RESULT err; { char proc_buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (proc_buf, fd, file); if (proc_file) { FUNC_RESULT proc_result = CALL_FUNC (proc_file); int proc_errno = errno; if (proc_file != proc_buf) free (proc_file); /* If the syscall succeeds, or if it fails with an unexpected errno value, then return right away. Otherwise, fall through and resort to using save_cwd/restore_cwd. */ if (FUNC_FAIL != proc_result) return proc_result; if (! EXPECTED_ERRNO (proc_errno)) { errno = proc_errno; return proc_result; } } } if (save_cwd (&saved_cwd) != 0) openat_save_fail (errno); if (0 <= fd && fd == saved_cwd.desc) { /* If saving the working directory collides with the user's requested fd, then the user's fd must have been closed to begin with. */ free_cwd (&saved_cwd); errno = EBADF; return FUNC_FAIL; } if (fchdir (fd) != 0) { saved_errno = errno; free_cwd (&saved_cwd); errno = saved_errno; return FUNC_FAIL; } err = CALL_FUNC (file); saved_errno = (err == FUNC_FAIL ? errno : 0); if (restore_cwd (&saved_cwd) != 0) openat_restore_fail (errno); free_cwd (&saved_cwd); if (saved_errno) errno = saved_errno; return err; } #endif } #undef CALL_FUNC #undef FUNC_RESULT #undef FUNC_FAIL ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fpucw.h����������������������������������������������������������������������������0000644�0000000�0000000�00000011365�14226564447�012173� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Manipulating the FPU control word. -*- coding: utf-8 -*- Copyright (C) 2007-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2007. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _FPUCW_H #define _FPUCW_H /* The i386 floating point hardware (the 387 compatible FPU, not the modern SSE/SSE2 hardware) has a controllable rounding precision. It is specified through the 'PC' bits in the FPU control word ('fctrl' register). (See the GNU libc i386 <fpu_control.h> header for details.) On some platforms, such as Linux or Solaris, the default precision setting is set to "extended precision". This means that 'long double' instructions operate correctly, but 'double' computations often produce slightly different results as on strictly IEEE 754 conforming systems. On some platforms, such as NetBSD, the default precision is set to "double precision". This means that 'long double' instructions will operate only as 'double', i.e. lead to wrong results. Similarly on FreeBSD 6.4, at least for the division of 'long double' numbers. The FPU control word is under control of the application, i.e. it is not required to be set either way by the ABI. (In fact, the i386 ABI https://www.linux-mips.org/pub/linux/mips/doc/ABI/abi386-4.pdf page 3-12 = page 38 is not clear about it. But in any case, gcc treats the control word like a "preserved" register: it emits code that assumes that the control word is preserved across calls, and it restores the control word at the end of functions that modify it.) See Vincent Lefèvre's page https://www.vinc17.net/research/extended.en.html for a good explanation. See https://web.archive.org/web/20060905133417/http://www.uwsg.iu.edu/hypermail/linux/kernel/0103.0/0453.html some argumentation which setting should be the default. */ /* This header file provides the following facilities: fpucw_t integral type holding the value of 'fctrl' FPU_PC_MASK bit mask denoting the precision control FPU_PC_DOUBLE precision control for 53 bits mantissa FPU_PC_EXTENDED precision control for 64 bits mantissa GET_FPUCW () yields the current FPU control word SET_FPUCW (word) sets the FPU control word DECL_LONG_DOUBLE_ROUNDING variable declaration for BEGIN/END_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING () starts a sequence of instructions with 'long double' safe operation precision END_LONG_DOUBLE_ROUNDING () ends a sequence of instructions with 'long double' safe operation precision */ /* Inline assembler like this works only with GNU C and clang. */ #if (defined __i386__ || defined __x86_64__) && (defined __GNUC__ || defined __clang__) typedef unsigned short fpucw_t; /* glibc calls this fpu_control_t */ # define FPU_PC_MASK 0x0300 # define FPU_PC_DOUBLE 0x200 /* glibc calls this _FPU_DOUBLE */ # define FPU_PC_EXTENDED 0x300 /* glibc calls this _FPU_EXTENDED */ # define GET_FPUCW() __extension__ \ ({ fpucw_t _cw; \ __asm__ __volatile__ ("fnstcw %0" : "=m" (*&_cw)); \ _cw; \ }) # define SET_FPUCW(word) __extension__ \ (void)({ fpucw_t _ncw = (word); \ __asm__ __volatile__ ("fldcw %0" : : "m" (*&_ncw)); \ }) # define DECL_LONG_DOUBLE_ROUNDING \ fpucw_t oldcw; # define BEGIN_LONG_DOUBLE_ROUNDING() \ (void)(oldcw = GET_FPUCW (), \ SET_FPUCW ((oldcw & ~FPU_PC_MASK) | FPU_PC_EXTENDED)) # define END_LONG_DOUBLE_ROUNDING() \ SET_FPUCW (oldcw) #else typedef unsigned int fpucw_t; # define FPU_PC_MASK 0 # define FPU_PC_DOUBLE 0 # define FPU_PC_EXTENDED 0 # define GET_FPUCW() 0 # define SET_FPUCW(word) (void)(word) # define DECL_LONG_DOUBLE_ROUNDING # define BEGIN_LONG_DOUBLE_ROUNDING() # define END_LONG_DOUBLE_ROUNDING() #endif #endif /* _FPUCW_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/sig-handler.h����������������������������������������������������������������������0000644�0000000�0000000�00000003563�14226564450�013237� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience declarations when working with <signal.h>. Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_SIG_HANDLER_H #define _GL_SIG_HANDLER_H #include <signal.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef SIG_HANDLER_INLINE # define SIG_HANDLER_INLINE _GL_INLINE #endif /* Convenience type when working with signal handlers. */ typedef void (*sa_handler_t) (int); /* Return the handler of a signal, as a sa_handler_t value regardless of its true type. The resulting function can be compared to special values like SIG_IGN but it is not portable to call it. */ SIG_HANDLER_INLINE sa_handler_t _GL_ATTRIBUTE_PURE get_handler (struct sigaction const *a) { /* POSIX says that special values like SIG_IGN can only occur when action.sa_flags does not contain SA_SIGINFO. But in Linux 2.4, for example, sa_sigaction and sa_handler are aliases and a signal is ignored if sa_sigaction (after casting) equals SIG_IGN. In this case, this implementation relies on the fact that the two are aliases, and simply returns sa_handler. */ return a->sa_handler; } _GL_INLINE_HEADER_END #endif /* _GL_SIG_HANDLER_H */ ���������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/save-cwd.h�������������������������������������������������������������������������0000644�0000000�0000000�00000002046�14226564447�012554� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Save and restore current working directory. Copyright (C) 1995, 1997-1998, 2003, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #ifndef SAVE_CWD_H # define SAVE_CWD_H 1 struct saved_cwd { int desc; char *name; }; int save_cwd (struct saved_cwd *cwd); int restore_cwd (const struct saved_cwd *cwd); void free_cwd (struct saved_cwd *cwd); #endif /* SAVE_CWD_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/rewinddir.c������������������������������������������������������������������������0000644�0000000�0000000�00000003062�14226564447�013024� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Restart reading the entries of a directory from the beginning. Copyright (C) 2011-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <dirent.h> #include <errno.h> #include "dirent-private.h" /* Don't assume that UNICODE is not defined. */ #undef FindFirstFile #define FindFirstFile FindFirstFileA void rewinddir (DIR *dirp) { /* Like in closedir(). */ if (dirp->current != INVALID_HANDLE_VALUE) FindClose (dirp->current); /* Like in opendir(). */ dirp->status = -1; dirp->current = FindFirstFile (dirp->dir_name_mask, &dirp->entry); if (dirp->current == INVALID_HANDLE_VALUE) { switch (GetLastError ()) { case ERROR_FILE_NOT_FOUND: dirp->status = -2; break; default: /* Save the error code for the next readdir() call. */ dirp->status = ENOENT; break; } } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/frexpl.c���������������������������������������������������������������������������0000644�0000000�0000000�00000002000�14226564447�012324� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a 'long double' into fraction and mantissa. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Specification. */ # include <math.h> long double frexpl (long double x, int *expptr) { return frexp (x, expptr); } #else # define USE_LONG_DOUBLE # include "frexp.c" #endif recutils-1.9/lib/alloca.c���������������������������������������������������������������������������0000644�0000000�0000000�00000013035�14226564447�012271� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* alloca.c -- allocate automatically reclaimed memory This file is in the public domain. */ /* (Mostly) portable implementation -- D A Gwyn This implementation of the PWB library alloca function, which is used to allocate space off the run-time stack so that it is automatically reclaimed upon procedure exit, was inspired by discussions with J. Q. Johnson of Cornell. J.Otto Tennant <jot@cray.com> contributed the Cray support. There are some preprocessor constants that can be defined when compiling for your specific system, for improved efficiency; however, the defaults should be okay. The general concept of this implementation is to keep track of all alloca-allocated blocks, and reclaim any that are found to be deeper in the stack than the current invocation. This heuristic does not reclaim storage as soon as it becomes invalid, but it will do so eventually. As a special case, alloca(0) reclaims storage without allocating any. It is a good idea to use alloca(0) in your main control loop, etc. to force garbage collection. */ #include <config.h> #include <alloca.h> #include <string.h> #include <stdlib.h> #ifdef emacs # include "lisp.h" # include "blockinput.h" # ifdef EMACS_FREE # undef free # define free EMACS_FREE # endif #else # define memory_full() abort () #endif /* If compiling with GCC or clang, this file is not needed. */ #if !(defined __GNUC__ || defined __clang__) /* If someone has defined alloca as a macro, there must be some other way alloca is supposed to work. */ # ifndef alloca # ifdef emacs # ifdef static /* actually, only want this if static is defined as "" -- this is for usg, in which emacs must undefine static in order to make unexec workable */ # ifndef STACK_DIRECTION you lose -- must know STACK_DIRECTION at compile-time /* Using #error here is not wise since this file should work for old and obscure compilers. */ # endif /* STACK_DIRECTION undefined */ # endif /* static */ # endif /* emacs */ /* Define STACK_DIRECTION if you know the direction of stack growth for your system; otherwise it will be automatically deduced at run-time. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ # ifndef STACK_DIRECTION # define STACK_DIRECTION 0 /* Direction unknown. */ # endif # if STACK_DIRECTION != 0 # define STACK_DIR STACK_DIRECTION /* Known at compile-time. */ # else /* STACK_DIRECTION == 0; need run-time code. */ static int stack_dir; /* 1 or -1 once known. */ # define STACK_DIR stack_dir static int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } # endif /* STACK_DIRECTION == 0 */ /* An "alloca header" is used to: (a) chain together all alloca'ed blocks; (b) keep track of stack depth. It is very important that sizeof(header) agree with malloc alignment chunk size. The following default should work okay. */ # ifndef ALIGN_SIZE # define ALIGN_SIZE sizeof(double) # endif typedef union hdr { char align[ALIGN_SIZE]; /* To force sizeof(header). */ struct { union hdr *next; /* For chaining headers. */ char *deep; /* For stack depth measure. */ } h; } header; static header *last_alloca_header = NULL; /* -> last alloca header. */ /* Return a pointer to at least SIZE bytes of storage, which will be automatically reclaimed upon exit from the procedure that called alloca. Originally, this space was supposed to be taken from the current stack frame of the caller, but that method cannot be made to work for some implementations of C, for example under Gould's UTX/32. */ void * alloca (size_t size) { auto char probe; /* Probes stack depth: */ register char *depth = &probe; # if STACK_DIRECTION == 0 if (STACK_DIR == 0) /* Unknown growth direction. */ STACK_DIR = find_stack_direction (NULL, (size & 1) + 20); # endif /* Reclaim garbage, defined as all alloca'd storage that was allocated from deeper in the stack than currently. */ { register header *hp; /* Traverses linked list. */ # ifdef emacs BLOCK_INPUT; # endif for (hp = last_alloca_header; hp != NULL;) if ((STACK_DIR > 0 && hp->h.deep > depth) || (STACK_DIR < 0 && hp->h.deep < depth)) { register header *np = hp->h.next; free (hp); /* Collect garbage. */ hp = np; /* -> next header. */ } else break; /* Rest are not deeper. */ last_alloca_header = hp; /* -> last valid storage. */ # ifdef emacs UNBLOCK_INPUT; # endif } if (size == 0) return NULL; /* No allocation required. */ /* Allocate combined header + user data storage. */ { /* Address of header. */ register header *new; size_t combined_size = sizeof (header) + size; if (combined_size < sizeof (header)) memory_full (); new = malloc (combined_size); if (! new) memory_full (); new->h.next = last_alloca_header; new->h.deep = depth; last_alloca_header = new; /* User storage begins just after header. */ return (void *) (new + 1); } } # endif /* no alloca */ #endif /* not GCC || clang */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloc/����������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577414�012215� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloc/dynarray_finalize.c���������������������������������������������������������0000644�0000000�0000000�00000004230�14226564446�016013� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy the dynamically-allocated area to an explicitly-sized heap allocation. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <stdlib.h> #include <string.h> bool __libc_dynarray_finalize (struct dynarray_header *list, void *scratch, size_t element_size, struct dynarray_finalize_result *result) { if (__dynarray_error (list)) /* The caller will reported the deferred error. */ return false; size_t used = list->used; /* Empty list. */ if (used == 0) { /* An empty list could still be backed by a heap-allocated array. Free it if necessary. */ if (list->array != scratch) free (list->array); *result = (struct dynarray_finalize_result) { NULL, 0 }; return true; } size_t allocation_size = used * element_size; void *heap_array = malloc (allocation_size); if (heap_array != NULL) { /* The new array takes ownership of the strings. */ if (list->array != NULL) memcpy (heap_array, list->array, allocation_size); if (list->array != scratch) free (list->array); *result = (struct dynarray_finalize_result) { .array = heap_array, .length = used }; return true; } else /* The caller will perform the freeing operation. */ return false; } libc_hidden_def (__libc_dynarray_finalize) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloc/dynarray_at_failure.c�������������������������������������������������������0000644�0000000�0000000�00000002415�14226564446�016330� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report an dynamic array index out of bounds condition. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> # include <stdlib.h> #endif #include <dynarray.h> #include <stdio.h> void __libc_dynarray_at_failure (size_t size, size_t index) { #ifdef _LIBC char buf[200]; __snprintf (buf, sizeof (buf), "Fatal glibc error: " "array index %zu not less than array length %zu\n", index, size); __libc_fatal (buf); #else abort (); #endif } libc_hidden_def (__libc_dynarray_at_failure) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloc/scratch_buffer_dupfree.c����������������������������������������������������0000644�0000000�0000000�00000002511�14226564447�016774� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable-sized buffer with on-stack default allocation. Copyright (C) 2020-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <scratch_buffer.h> #include <string.h> void * __libc_scratch_buffer_dupfree (struct scratch_buffer *buffer, size_t size) { void *data = buffer->data; if (data == buffer->__space.__c) { void *copy = malloc (size); return copy != NULL ? memcpy (copy, data, size) : NULL; } else { void *copy = realloc (data, size); return copy != NULL ? copy : data; } } libc_hidden_def (__libc_scratch_buffer_dupfree) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloc/scratch_buffer_grow.c�������������������������������������������������������0000644�0000000�0000000�00000003145�14226564447�016324� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable-sized buffer with on-stack default allocation. Copyright (C) 2015-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <scratch_buffer.h> #include <errno.h> bool __libc_scratch_buffer_grow (struct scratch_buffer *buffer) { void *new_ptr; size_t new_length = buffer->length * 2; /* Discard old buffer. */ scratch_buffer_free (buffer); /* Check for overflow. */ if (__glibc_likely (new_length >= buffer->length)) new_ptr = malloc (new_length); else { __set_errno (ENOMEM); new_ptr = NULL; } if (__glibc_unlikely (new_ptr == NULL)) { /* Buffer must remain valid to free. */ scratch_buffer_init (buffer); return false; } /* Install new heap-based buffer. */ buffer->data = new_ptr; buffer->length = new_length; return true; } libc_hidden_def (__libc_scratch_buffer_grow) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloc/dynarray_resize.c�����������������������������������������������������������0000644�0000000�0000000�00000004112�14226564446�015512� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Increase the size of a dynamic array. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <errno.h> #include <intprops.h> #include <stdlib.h> #include <string.h> bool __libc_dynarray_resize (struct dynarray_header *list, size_t size, void *scratch, size_t element_size) { /* The existing allocation provides sufficient room. */ if (size <= list->allocated) { list->used = size; return true; } /* Otherwise, use size as the new allocation size. The caller is expected to provide the final size of the array, so there is no over-allocation here. */ size_t new_size_bytes; if (INT_MULTIPLY_WRAPV (size, element_size, &new_size_bytes)) { /* Overflow. */ __set_errno (ENOMEM); return false; } void *new_array; if (list->array == scratch) { /* The previous array was not heap-allocated. */ new_array = malloc (new_size_bytes); if (new_array != NULL && list->array != NULL) memcpy (new_array, list->array, list->used * element_size); } else new_array = realloc (list->array, new_size_bytes); if (new_array == NULL) return false; list->array = new_array; list->allocated = size; list->used = size; return true; } libc_hidden_def (__libc_dynarray_resize) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloc/dynarray.h������������������������������������������������������������������0000644�0000000�0000000�00000014244�14226564446�014145� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe arrays which grow dynamically. Shared definitions. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* To use the dynarray facility, you need to include <malloc/dynarray-skeleton.c> and define the parameter macros documented in that file. A minimal example which provides a growing list of integers can be defined like this: struct int_array { // Pointer to result array followed by its length, // as required by DYNARRAY_FINAL_TYPE. int *array; size_t length; }; #define DYNARRAY_STRUCT dynarray_int #define DYNARRAY_ELEMENT int #define DYNARRAY_PREFIX dynarray_int_ #define DYNARRAY_FINAL_TYPE struct int_array #include <malloc/dynarray-skeleton.c> To create a three-element array with elements 1, 2, 3, use this code: struct dynarray_int dyn; dynarray_int_init (&dyn); for (int i = 1; i <= 3; ++i) { int *place = dynarray_int_emplace (&dyn); assert (place != NULL); *place = i; } struct int_array result; bool ok = dynarray_int_finalize (&dyn, &result); assert (ok); assert (result.length == 3); assert (result.array[0] == 1); assert (result.array[1] == 2); assert (result.array[2] == 3); free (result.array); If the elements contain resources which must be freed, define DYNARRAY_ELEMENT_FREE appropriately, like this: struct str_array { char **array; size_t length; }; #define DYNARRAY_STRUCT dynarray_str #define DYNARRAY_ELEMENT char * #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr) #define DYNARRAY_PREFIX dynarray_str_ #define DYNARRAY_FINAL_TYPE struct str_array #include <malloc/dynarray-skeleton.c> Compared to scratch buffers, dynamic arrays have the following features: - They have an element type, and are not just an untyped buffer of bytes. - When growing, previously stored elements are preserved. (It is expected that scratch_buffer_grow_preserve and scratch_buffer_set_array_size eventually go away because all current users are moved to dynamic arrays.) - Scratch buffers have a more aggressive growth policy because growing them typically means a retry of an operation (across an NSS service module boundary), which is expensive. - For the same reason, scratch buffers have a much larger initial stack allocation. */ #ifndef _DYNARRAY_H #define _DYNARRAY_H #include <stdbool.h> #include <stddef.h> #include <string.h> struct dynarray_header { size_t used; size_t allocated; void *array; }; /* Marker used in the allocated member to indicate that an error was encountered. */ static inline size_t __dynarray_error_marker (void) { return -1; } /* Internal function. See the has_failed function in dynarray-skeleton.c. */ static inline bool __dynarray_error (struct dynarray_header *list) { return list->allocated == __dynarray_error_marker (); } /* Internal function. Enlarge the dynamically allocated area of the array to make room for one more element. SCRATCH is a pointer to the scratch area (which is not heap-allocated and must not be freed). ELEMENT_SIZE is the size, in bytes, of one element. Return false on failure, true on success. */ bool __libc_dynarray_emplace_enlarge (struct dynarray_header *, void *scratch, size_t element_size); /* Internal function. Enlarge the dynamically allocated area of the array to make room for at least SIZE elements (which must be larger than the existing used part of the dynamic array). SCRATCH is a pointer to the scratch area (which is not heap-allocated and must not be freed). ELEMENT_SIZE is the size, in bytes, of one element. Return false on failure, true on success. */ bool __libc_dynarray_resize (struct dynarray_header *, size_t size, void *scratch, size_t element_size); /* Internal function. Like __libc_dynarray_resize, but clear the new part of the dynamic array. */ bool __libc_dynarray_resize_clear (struct dynarray_header *, size_t size, void *scratch, size_t element_size); /* Internal type. */ struct dynarray_finalize_result { void *array; size_t length; }; /* Internal function. Copy the dynamically-allocated area to an explicitly-sized heap allocation. SCRATCH is a pointer to the embedded scratch space. ELEMENT_SIZE is the size, in bytes, of the element type. On success, true is returned, and pointer and length are written to *RESULT. On failure, false is returned. The caller has to take care of some of the memory management; this function is expected to be called from dynarray-skeleton.c. */ bool __libc_dynarray_finalize (struct dynarray_header *list, void *scratch, size_t element_size, struct dynarray_finalize_result *result); /* Internal function. Terminate the process after an index error. SIZE is the number of elements of the dynamic array. INDEX is the lookup index which triggered the failure. */ _Noreturn void __libc_dynarray_at_failure (size_t size, size_t index); #ifndef _ISOMAC libc_hidden_proto (__libc_dynarray_emplace_enlarge) libc_hidden_proto (__libc_dynarray_resize) libc_hidden_proto (__libc_dynarray_resize_clear) libc_hidden_proto (__libc_dynarray_finalize) libc_hidden_proto (__libc_dynarray_at_failure) #endif #endif /* _DYNARRAY_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloc/scratch_buffer.h������������������������������������������������������������0000644�0000000�0000000�00000013145�14226564447�015274� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable-sized buffer with on-stack default allocation. Copyright (C) 2015-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _SCRATCH_BUFFER_H #define _SCRATCH_BUFFER_H /* Scratch buffers with a default stack allocation and fallback to heap allocation. It is expected that this function is used in this way: struct scratch_buffer tmpbuf; scratch_buffer_init (&tmpbuf); while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) if (!scratch_buffer_grow (&tmpbuf)) return -1; scratch_buffer_free (&tmpbuf); return 0; The allocation functions (scratch_buffer_grow, scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make sure that the heap allocation, if any, is freed, so that the code above does not have a memory leak. The buffer still remains in a state that can be deallocated using scratch_buffer_free, so a loop like this is valid as well: struct scratch_buffer tmpbuf; scratch_buffer_init (&tmpbuf); while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) if (!scratch_buffer_grow (&tmpbuf)) break; scratch_buffer_free (&tmpbuf); scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed to grow the buffer by at least 512 bytes. This means that when using the scratch buffer as a backing store for a non-character array whose element size, in bytes, is 512 or smaller, the scratch buffer only has to grow once to make room for at least one more element. */ #include <stdbool.h> #include <stddef.h> #include <stdlib.h> /* Scratch buffer. Must be initialized with scratch_buffer_init before its use. */ struct scratch_buffer { void *data; /* Pointer to the beginning of the scratch area. */ size_t length; /* Allocated space at the data pointer, in bytes. */ union { max_align_t __align; char __c[1024]; } __space; }; /* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space and BUFFER->length reflects the available space. */ static inline void scratch_buffer_init (struct scratch_buffer *buffer) { buffer->data = buffer->__space.__c; buffer->length = sizeof (buffer->__space); } /* Deallocates *BUFFER (if it was heap-allocated). */ static inline void scratch_buffer_free (struct scratch_buffer *buffer) { if (buffer->data != buffer->__space.__c) free (buffer->data); } /* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT preserved. Return true on success, false on allocation failure (in which case the old buffer is freed). On success, the new buffer is larger than the previous size. On failure, *BUFFER is deallocated, but remains in a free-able state, and errno is set. */ bool __libc_scratch_buffer_grow (struct scratch_buffer *buffer); libc_hidden_proto (__libc_scratch_buffer_grow) /* Alias for __libc_scratch_buffer_grow. */ static __always_inline bool scratch_buffer_grow (struct scratch_buffer *buffer) { return __glibc_likely (__libc_scratch_buffer_grow (buffer)); } /* Like __libc_scratch_buffer_grow, but preserve the old buffer contents on success, as a prefix of the new buffer. */ bool __libc_scratch_buffer_grow_preserve (struct scratch_buffer *buffer); libc_hidden_proto (__libc_scratch_buffer_grow_preserve) /* Alias for __libc_scratch_buffer_grow_preserve. */ static __always_inline bool scratch_buffer_grow_preserve (struct scratch_buffer *buffer) { return __glibc_likely (__libc_scratch_buffer_grow_preserve (buffer)); } /* Grow *BUFFER so that it can store at least NELEM elements of SIZE bytes. The buffer contents are NOT preserved. Both NELEM and SIZE can be zero. Return true on success, false on allocation failure (in which case the old buffer is freed, but *BUFFER remains in a free-able state, and errno is set). It is unspecified whether this function can reduce the array size. */ bool __libc_scratch_buffer_set_array_size (struct scratch_buffer *buffer, size_t nelem, size_t size); libc_hidden_proto (__libc_scratch_buffer_set_array_size) /* Alias for __libc_scratch_set_array_size. */ static __always_inline bool scratch_buffer_set_array_size (struct scratch_buffer *buffer, size_t nelem, size_t size) { return __glibc_likely (__libc_scratch_buffer_set_array_size (buffer, nelem, size)); } /* Return a copy of *BUFFER's first SIZE bytes as a heap-allocated block, deallocating *BUFFER if it was heap-allocated. SIZE must be at most *BUFFER's size. Return NULL (setting errno) on memory exhaustion. */ void *__libc_scratch_buffer_dupfree (struct scratch_buffer *buffer, size_t size); libc_hidden_proto (__libc_scratch_buffer_dupfree) /* Alias for __libc_scratch_dupfree. */ static __always_inline void * scratch_buffer_dupfree (struct scratch_buffer *buffer, size_t size) { void *r = __libc_scratch_buffer_dupfree (buffer, size); return __glibc_likely (r != NULL) ? r : NULL; } #endif /* _SCRATCH_BUFFER_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloc/dynarray_emplace_enlarge.c��������������������������������������������������0000644�0000000�0000000�00000004521�14226564446�017320� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Increase the size of a dynamic array in preparation of an emplace operation. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <errno.h> #include <intprops.h> #include <stdlib.h> #include <string.h> bool __libc_dynarray_emplace_enlarge (struct dynarray_header *list, void *scratch, size_t element_size) { size_t new_allocated; if (list->allocated == 0) { /* No scratch buffer provided. Choose a reasonable default size. */ if (element_size < 4) new_allocated = 16; else if (element_size < 8) new_allocated = 8; else new_allocated = 4; } else /* Increase the allocated size, using an exponential growth policy. */ { new_allocated = list->allocated + list->allocated / 2 + 1; if (new_allocated <= list->allocated) { /* Overflow. */ __set_errno (ENOMEM); return false; } } size_t new_size; if (INT_MULTIPLY_WRAPV (new_allocated, element_size, &new_size)) return false; void *new_array; if (list->array == scratch) { /* The previous array was not heap-allocated. */ new_array = malloc (new_size); if (new_array != NULL && list->array != NULL) memcpy (new_array, list->array, list->used * element_size); } else new_array = realloc (list->array, new_size); if (new_array == NULL) return false; list->array = new_array; list->allocated = new_allocated; return true; } libc_hidden_def (__libc_dynarray_emplace_enlarge) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloc/dynarray-skeleton.c���������������������������������������������������������0000644�0000000�0000000�00000043551�14226564446�015765� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe arrays which grow dynamically. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* Pre-processor macros which act as parameters: DYNARRAY_STRUCT The struct tag of dynamic array to be defined. DYNARRAY_ELEMENT The type name of the element type. Elements are copied as if by memcpy, and can change address as the dynamic array grows. DYNARRAY_PREFIX The prefix of the functions which are defined. The following parameters are optional: DYNARRAY_ELEMENT_FREE DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the contents of elements. E is of type DYNARRAY_ELEMENT *. DYNARRAY_ELEMENT_INIT DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new element. E is of type DYNARRAY_ELEMENT *. If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is defined, new elements are automatically zero-initialized. Otherwise, new elements have undefined contents. DYNARRAY_INITIAL_SIZE The size of the statically allocated array (default: at least 2, more elements if they fit into 128 bytes). Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0, there is no statically allocated array at, and all non-empty arrays are heap-allocated. DYNARRAY_FINAL_TYPE The name of the type which holds the final array. If not defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE must be a struct type, with members of type DYNARRAY_ELEMENT and size_t at the start (in this order). These macros are undefined after this header file has been included. The following types are provided (their members are private to the dynarray implementation): struct DYNARRAY_STRUCT The following functions are provided: void DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *); void DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *); bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *); void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *); size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *, size_t); void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *, DYNARRAY_ELEMENT); DYNARRAY_ELEMENT *DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *); bool DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *, size_t); void DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *); void DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *); The following functions are provided are provided if the prerequisites are met: bool DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *, DYNARRAY_FINAL_TYPE *); (if DYNARRAY_FINAL_TYPE is defined) DYNARRAY_ELEMENT *DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *, size_t *); (if DYNARRAY_FINAL_TYPE is not defined) */ #include <malloc/dynarray.h> #include <errno.h> #include <stdlib.h> #include <string.h> #ifndef DYNARRAY_STRUCT # error "DYNARRAY_STRUCT must be defined" #endif #ifndef DYNARRAY_ELEMENT # error "DYNARRAY_ELEMENT must be defined" #endif #ifndef DYNARRAY_PREFIX # error "DYNARRAY_PREFIX must be defined" #endif #ifdef DYNARRAY_INITIAL_SIZE # if DYNARRAY_INITIAL_SIZE < 0 # error "DYNARRAY_INITIAL_SIZE must be non-negative" # endif # if DYNARRAY_INITIAL_SIZE > 0 # define DYNARRAY_HAVE_SCRATCH 1 # else # define DYNARRAY_HAVE_SCRATCH 0 # endif #else /* Provide a reasonable default which limits the size of DYNARRAY_STRUCT. */ # define DYNARRAY_INITIAL_SIZE \ (sizeof (DYNARRAY_ELEMENT) > 64 ? 2 : 128 / sizeof (DYNARRAY_ELEMENT)) # define DYNARRAY_HAVE_SCRATCH 1 #endif /* Public type definitions. */ /* All fields of this struct are private to the implementation. */ struct DYNARRAY_STRUCT { union { struct dynarray_header dynarray_abstract; struct { /* These fields must match struct dynarray_header. */ size_t used; size_t allocated; DYNARRAY_ELEMENT *array; } dynarray_header; } u; #if DYNARRAY_HAVE_SCRATCH /* Initial inline allocation. */ DYNARRAY_ELEMENT scratch[DYNARRAY_INITIAL_SIZE]; #endif }; /* Internal use only: Helper macros. */ /* Ensure macro-expansion of DYNARRAY_PREFIX. */ #define DYNARRAY_CONCAT0(prefix, name) prefix##name #define DYNARRAY_CONCAT1(prefix, name) DYNARRAY_CONCAT0(prefix, name) #define DYNARRAY_NAME(name) DYNARRAY_CONCAT1(DYNARRAY_PREFIX, name) /* Use DYNARRAY_FREE instead of DYNARRAY_NAME (free), so that Gnulib does not change 'free' to 'rpl_free'. */ #define DYNARRAY_FREE DYNARRAY_CONCAT1 (DYNARRAY_NAME (f), ree) /* Address of the scratch buffer if any. */ #if DYNARRAY_HAVE_SCRATCH # define DYNARRAY_SCRATCH(list) (list)->scratch #else # define DYNARRAY_SCRATCH(list) NULL #endif /* Internal use only: Helper functions. */ /* Internal function. Call DYNARRAY_ELEMENT_FREE with the array elements. Name mangling needed due to the DYNARRAY_ELEMENT_FREE macro expansion. */ static inline void DYNARRAY_NAME (free__elements__) (DYNARRAY_ELEMENT *__dynarray_array, size_t __dynarray_used) { #ifdef DYNARRAY_ELEMENT_FREE for (size_t __dynarray_i = 0; __dynarray_i < __dynarray_used; ++__dynarray_i) DYNARRAY_ELEMENT_FREE (&__dynarray_array[__dynarray_i]); #endif /* DYNARRAY_ELEMENT_FREE */ } /* Internal function. Free the non-scratch array allocation. */ static inline void DYNARRAY_NAME (free__array__) (struct DYNARRAY_STRUCT *list) { #if DYNARRAY_HAVE_SCRATCH if (list->u.dynarray_header.array != list->scratch) free (list->u.dynarray_header.array); #else free (list->u.dynarray_header.array); #endif } /* Public functions. */ /* Initialize a dynamic array object. This must be called before any use of the object. */ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (init) (struct DYNARRAY_STRUCT *list) { list->u.dynarray_header.used = 0; list->u.dynarray_header.allocated = DYNARRAY_INITIAL_SIZE; list->u.dynarray_header.array = DYNARRAY_SCRATCH (list); } /* Deallocate the dynamic array and its elements. */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static void DYNARRAY_FREE (struct DYNARRAY_STRUCT *list) { DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array, list->u.dynarray_header.used); DYNARRAY_NAME (free__array__) (list); DYNARRAY_NAME (init) (list); } /* Return true if the dynamic array is in an error state. */ __attribute_nonnull__ ((1)) static inline bool DYNARRAY_NAME (has_failed) (const struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.allocated == __dynarray_error_marker (); } /* Mark the dynamic array as failed. All elements are deallocated as a side effect. */ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (mark_failed) (struct DYNARRAY_STRUCT *list) { DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array, list->u.dynarray_header.used); DYNARRAY_NAME (free__array__) (list); list->u.dynarray_header.array = DYNARRAY_SCRATCH (list); list->u.dynarray_header.used = 0; list->u.dynarray_header.allocated = __dynarray_error_marker (); } /* Return the number of elements which have been added to the dynamic array. */ __attribute_nonnull__ ((1)) static inline size_t DYNARRAY_NAME (size) (const struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.used; } /* Return a pointer to the array element at INDEX. Terminate the process if INDEX is out of bounds. */ __attribute_nonnull__ ((1)) static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (at) (struct DYNARRAY_STRUCT *list, size_t index) { if (__glibc_unlikely (index >= DYNARRAY_NAME (size) (list))) __libc_dynarray_at_failure (DYNARRAY_NAME (size) (list), index); return list->u.dynarray_header.array + index; } /* Return a pointer to the first array element, if any. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ __attribute_nonnull__ ((1)) static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (begin) (struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.array; } /* Return a pointer one element past the last array element. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ __attribute_nonnull__ ((1)) static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (end) (struct DYNARRAY_STRUCT *list) { return list->u.dynarray_header.array + list->u.dynarray_header.used; } /* Internal function. Slow path for the add function below. */ static void DYNARRAY_NAME (add__) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item) { if (__glibc_unlikely (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)))) { DYNARRAY_NAME (mark_failed) (list); return; } /* Copy the new element and increase the array length. */ list->u.dynarray_header.array[list->u.dynarray_header.used++] = item; } /* Add ITEM at the end of the array, enlarging it by one element. Mark *LIST as failed if the dynamic array allocation size cannot be increased. */ __attribute_nonnull__ ((1)) static inline void DYNARRAY_NAME (add) (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item) { /* Do nothing in case of previous error. */ if (DYNARRAY_NAME (has_failed) (list)) return; /* Enlarge the array if necessary. */ if (__glibc_unlikely (list->u.dynarray_header.used == list->u.dynarray_header.allocated)) { DYNARRAY_NAME (add__) (list, item); return; } /* Copy the new element and increase the array length. */ list->u.dynarray_header.array[list->u.dynarray_header.used++] = item; } /* Internal function. Building block for the emplace functions below. Assumes space for one more element in *LIST. */ static inline DYNARRAY_ELEMENT * DYNARRAY_NAME (emplace__tail__) (struct DYNARRAY_STRUCT *list) { DYNARRAY_ELEMENT *result = &list->u.dynarray_header.array[list->u.dynarray_header.used]; ++list->u.dynarray_header.used; #if defined (DYNARRAY_ELEMENT_INIT) DYNARRAY_ELEMENT_INIT (result); #elif defined (DYNARRAY_ELEMENT_FREE) memset (result, 0, sizeof (*result)); #endif return result; } /* Internal function. Slow path for the emplace function below. */ static DYNARRAY_ELEMENT * DYNARRAY_NAME (emplace__) (struct DYNARRAY_STRUCT *list) { if (__glibc_unlikely (!__libc_dynarray_emplace_enlarge (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)))) { DYNARRAY_NAME (mark_failed) (list); return NULL; } return DYNARRAY_NAME (emplace__tail__) (list); } /* Allocate a place for a new element in *LIST and return a pointer to it. The pointer can be NULL if the dynamic array cannot be enlarged due to a memory allocation failure. */ __attribute_maybe_unused__ __attribute_warn_unused_result__ __attribute_nonnull__ ((1)) static /* Avoid inlining with the larger initialization code. */ #if !(defined (DYNARRAY_ELEMENT_INIT) || defined (DYNARRAY_ELEMENT_FREE)) inline #endif DYNARRAY_ELEMENT * DYNARRAY_NAME (emplace) (struct DYNARRAY_STRUCT *list) { /* Do nothing in case of previous error. */ if (DYNARRAY_NAME (has_failed) (list)) return NULL; /* Enlarge the array if necessary. */ if (__glibc_unlikely (list->u.dynarray_header.used == list->u.dynarray_header.allocated)) return (DYNARRAY_NAME (emplace__) (list)); return DYNARRAY_NAME (emplace__tail__) (list); } /* Change the size of *LIST to SIZE. If SIZE is larger than the existing size, new elements are added (which can be initialized). Otherwise, the list is truncated, and elements are freed. Return false on memory allocation failure (and mark *LIST as failed). */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static bool DYNARRAY_NAME (resize) (struct DYNARRAY_STRUCT *list, size_t size) { if (size > list->u.dynarray_header.used) { bool ok; #if defined (DYNARRAY_ELEMENT_INIT) /* The new elements have to be initialized. */ size_t old_size = list->u.dynarray_header.used; ok = __libc_dynarray_resize (&list->u.dynarray_abstract, size, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); if (ok) for (size_t i = old_size; i < size; ++i) { DYNARRAY_ELEMENT_INIT (&list->u.dynarray_header.array[i]); } #elif defined (DYNARRAY_ELEMENT_FREE) /* Zero initialization is needed so that the elements can be safely freed. */ ok = __libc_dynarray_resize_clear (&list->u.dynarray_abstract, size, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); #else ok = __libc_dynarray_resize (&list->u.dynarray_abstract, size, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT)); #endif if (__glibc_unlikely (!ok)) DYNARRAY_NAME (mark_failed) (list); return ok; } else { /* The list has shrunk in size. Free the removed elements. */ DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array + size, list->u.dynarray_header.used - size); list->u.dynarray_header.used = size; return true; } } /* Remove the last element of LIST if it is present. */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (remove_last) (struct DYNARRAY_STRUCT *list) { /* used > 0 implies that the array is the non-failed state. */ if (list->u.dynarray_header.used > 0) { size_t new_length = list->u.dynarray_header.used - 1; #ifdef DYNARRAY_ELEMENT_FREE DYNARRAY_ELEMENT_FREE (&list->u.dynarray_header.array[new_length]); #endif list->u.dynarray_header.used = new_length; } } /* Remove all elements from the list. The elements are freed, but the list itself is not. */ __attribute_maybe_unused__ __attribute_nonnull__ ((1)) static void DYNARRAY_NAME (clear) (struct DYNARRAY_STRUCT *list) { /* free__elements__ does nothing if the list is in the failed state. */ DYNARRAY_NAME (free__elements__) (list->u.dynarray_header.array, list->u.dynarray_header.used); list->u.dynarray_header.used = 0; } #ifdef DYNARRAY_FINAL_TYPE /* Transfer the dynamic array to a permanent location at *RESULT. Returns true on success on false on allocation failure. In either case, *LIST is re-initialized and can be reused. A NULL pointer is stored in *RESULT if LIST refers to an empty list. On success, the pointer in *RESULT is heap-allocated and must be deallocated using free. */ __attribute_maybe_unused__ __attribute_warn_unused_result__ __attribute_nonnull__ ((1, 2)) static bool DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, DYNARRAY_FINAL_TYPE *result) { struct dynarray_finalize_result res; if (__libc_dynarray_finalize (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT), &res)) { /* On success, the result owns all the data. */ DYNARRAY_NAME (init) (list); *result = (DYNARRAY_FINAL_TYPE) { res.array, res.length }; return true; } else { /* On error, we need to free all data. */ DYNARRAY_FREE (list); errno = ENOMEM; return false; } } #else /* !DYNARRAY_FINAL_TYPE */ /* Transfer the dynamic array to a heap-allocated array and return a pointer to it. The pointer is NULL if memory allocation fails, or if the array is empty, so this function should be used only for arrays which are known not be empty (usually because they always have a sentinel at the end). If LENGTHP is not NULL, the array length is written to *LENGTHP. *LIST is re-initialized and can be reused. */ __attribute_maybe_unused__ __attribute_warn_unused_result__ __attribute_nonnull__ ((1)) static DYNARRAY_ELEMENT * DYNARRAY_NAME (finalize) (struct DYNARRAY_STRUCT *list, size_t *lengthp) { struct dynarray_finalize_result res; if (__libc_dynarray_finalize (&list->u.dynarray_abstract, DYNARRAY_SCRATCH (list), sizeof (DYNARRAY_ELEMENT), &res)) { /* On success, the result owns all the data. */ DYNARRAY_NAME (init) (list); if (lengthp != NULL) *lengthp = res.length; return res.array; } else { /* On error, we need to free all data. */ DYNARRAY_FREE (list); errno = ENOMEM; return NULL; } } #endif /* !DYNARRAY_FINAL_TYPE */ /* Undo macro definitions. */ #undef DYNARRAY_CONCAT0 #undef DYNARRAY_CONCAT1 #undef DYNARRAY_NAME #undef DYNARRAY_SCRATCH #undef DYNARRAY_HAVE_SCRATCH #undef DYNARRAY_STRUCT #undef DYNARRAY_ELEMENT #undef DYNARRAY_PREFIX #undef DYNARRAY_ELEMENT_FREE #undef DYNARRAY_ELEMENT_INIT #undef DYNARRAY_INITIAL_SIZE #undef DYNARRAY_FINAL_TYPE �������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloc/dynarray_resize_clear.c�����������������������������������������������������0000644�0000000�0000000�00000002660�14226564446�016666� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Increase the size of a dynamic array and clear the new part. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <dynarray.h> #include <string.h> bool __libc_dynarray_resize_clear (struct dynarray_header *list, size_t size, void *scratch, size_t element_size) { size_t old_size = list->used; if (!__libc_dynarray_resize (list, size, scratch, element_size)) return false; /* __libc_dynarray_resize already checked for overflow. */ char *array = list->array; memset (array + (old_size * element_size), 0, (size - old_size) * element_size); return true; } libc_hidden_def (__libc_dynarray_resize_clear) ��������������������������������������������������������������������������������recutils-1.9/lib/malloc/scratch_buffer_grow_preserve.c����������������������������������������������0000644�0000000�0000000�00000003754�14226564447�020245� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable-sized buffer with on-stack default allocation. Copyright (C) 2015-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <scratch_buffer.h> #include <errno.h> #include <string.h> bool __libc_scratch_buffer_grow_preserve (struct scratch_buffer *buffer) { size_t new_length = 2 * buffer->length; void *new_ptr; if (buffer->data == buffer->__space.__c) { /* Move buffer to the heap. No overflow is possible because buffer->length describes a small buffer on the stack. */ new_ptr = malloc (new_length); if (new_ptr == NULL) return false; memcpy (new_ptr, buffer->__space.__c, buffer->length); } else { /* Buffer was already on the heap. Check for overflow. */ if (__glibc_likely (new_length >= buffer->length)) new_ptr = realloc (buffer->data, new_length); else { __set_errno (ENOMEM); new_ptr = NULL; } if (__glibc_unlikely (new_ptr == NULL)) { /* Deallocate, but buffer must remain valid to free. */ free (buffer->data); scratch_buffer_init (buffer); return false; } } /* Install new heap-based buffer. */ buffer->data = new_ptr; buffer->length = new_length; return true; } libc_hidden_def (__libc_scratch_buffer_grow_preserve) ��������������������recutils-1.9/lib/malloc/scratch_buffer_set_array_size.c���������������������������������������������0000644�0000000�0000000�00000003653�14226564447�020375� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable-sized buffer with on-stack default allocation. Copyright (C) 2015-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <scratch_buffer.h> #include <errno.h> #include <limits.h> bool __libc_scratch_buffer_set_array_size (struct scratch_buffer *buffer, size_t nelem, size_t size) { size_t new_length = nelem * size; /* Avoid overflow check if both values are small. */ if ((nelem | size) >> (sizeof (size_t) * CHAR_BIT / 2) != 0 && nelem != 0 && size != new_length / nelem) { /* Overflow. Discard the old buffer, but it must remain valid to free. */ scratch_buffer_free (buffer); scratch_buffer_init (buffer); __set_errno (ENOMEM); return false; } if (new_length <= buffer->length) return true; /* Discard old buffer. */ scratch_buffer_free (buffer); char *new_ptr = malloc (new_length); if (new_ptr == NULL) { /* Buffer must remain valid to free. */ scratch_buffer_init (buffer); return false; } /* Install new heap-based buffer. */ buffer->data = new_ptr; buffer->length = new_length; return true; } libc_hidden_def (__libc_scratch_buffer_set_array_size) �������������������������������������������������������������������������������������recutils-1.9/lib/spawn_faction_addopen.c������������������������������������������������������������0000644�0000000�0000000�00000005041�14226564451�015354� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #if !_LIBC # define __sysconf(open_max) getdtablesize () #endif #if REPLACE_POSIX_SPAWN # include "spawn_int.h" #endif /* Add an action to FILE-ACTIONS which tells the implementation to call 'open' for the given file during the 'spawn' call. */ int posix_spawn_file_actions_addopen (posix_spawn_file_actions_t *file_actions, int fd, const char *path, int oflag, mode_t mode) #undef posix_spawn_file_actions_addopen { int maxfd = __sysconf (_SC_OPEN_MAX); /* Test for the validity of the file descriptor. */ if (fd < 0 || fd >= maxfd) return EBADF; #if !REPLACE_POSIX_SPAWN return posix_spawn_file_actions_addopen (file_actions, fd, path, oflag, mode); #else { /* Copy PATH, because the caller may free it before calling posix_spawn() or posix_spawnp(). */ char *path_copy = strdup (path); if (path_copy == NULL) return ENOMEM; /* Allocate more memory if needed. */ if (file_actions->_used == file_actions->_allocated && __posix_spawn_file_actions_realloc (file_actions) != 0) { /* This can only mean we ran out of memory. */ free (path_copy); return ENOMEM; } { struct __spawn_action *rec; /* Add the new value. */ rec = &file_actions->_actions[file_actions->_used]; rec->tag = spawn_do_open; rec->action.open_action.fd = fd; rec->action.open_action.path = path_copy; rec->action.open_action.oflag = oflag; rec->action.open_action.mode = mode; /* Account for the new entry. */ ++file_actions->_used; return 0; } } #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/random_r.c�������������������������������������������������������������������������0000644�0000000�0000000�00000033657�14226564450�012645� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1995-2022 Free Software Foundation, Inc. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* Copyright (C) 1983 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: 1. Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer. 2. Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution. 4. Neither the name of the University nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission. THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, 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.*/ /* * This is derived from the Berkeley source: * @(#)random.c 5.5 (Berkeley) 7/6/88 * It was reworked for the GNU C Library by Roland McGrath. * Rewritten to be reentrant by Ulrich Drepper, 1995 */ #ifndef _LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the buf == NULL, arg_state == NULL, result == NULL tests below. */ # define _GL_ARG_NONNULL(params) # include <libc-config.h> # define __srandom_r srandom_r # define __initstate_r initstate_r # define __setstate_r setstate_r # define __random_r random_r #endif /* Specification. */ #include <stdlib.h> #include <errno.h> #include <stddef.h> #include <string.h> /* An improved random number generation package. In addition to the standard rand()/srand() like interface, this package also has a special state info interface. The initstate() routine is called with a seed, an array of bytes, and a count of how many bytes are being passed in; this array is then initialized to contain information for random number generation with that much state information. Good sizes for the amount of state information are 32, 64, 128, and 256 bytes. The state can be switched by calling the setstate() function with the same array as was initialized with initstate(). By default, the package runs with 128 bytes of state information and generates far better random numbers than a linear congruential generator. If the amount of state information is less than 32 bytes, a simple linear congruential R.N.G. is used. Internally, the state information is treated as an array of longs; the zeroth element of the array is the type of R.N.G. being used (small integer); the remainder of the array is the state information for the R.N.G. Thus, 32 bytes of state information will give 7 longs worth of state information, which will allow a degree seven polynomial. (Note: The zeroth word of state information also has some other information stored in it; see setstate for details). The random number generation technique is a linear feedback shift register approach, employing trinomials (since there are fewer terms to sum up that way). In this approach, the least significant bit of all the numbers in the state table will act as a linear feedback shift register, and will have period 2^deg - 1 (where deg is the degree of the polynomial being used, assuming that the polynomial is irreducible and primitive). The higher order bits will have longer periods, since their values are also influenced by pseudo-random carries out of the lower bits. The total period of the generator is approximately deg*(2**deg - 1); thus doubling the amount of state information has a vast influence on the period of the generator. Note: The deg*(2**deg - 1) is an approximation only good for large deg, when the period of the shift register is the dominant factor. With deg equal to seven, the period is actually much longer than the 7*(2**7 - 1) predicted by this formula. */ /* For each of the currently supported random number generators, we have a break value on the amount of state information (you need at least this many bytes of state info to support this random number generator), a degree for the polynomial (actually a trinomial) that the R.N.G. is based on, and separation between the two lower order coefficients of the trinomial. */ /* Linear congruential. */ #define TYPE_0 0 #define BREAK_0 8 #define DEG_0 0 #define SEP_0 0 /* x**7 + x**3 + 1. */ #define TYPE_1 1 #define BREAK_1 32 #define DEG_1 7 #define SEP_1 3 /* x**15 + x + 1. */ #define TYPE_2 2 #define BREAK_2 64 #define DEG_2 15 #define SEP_2 1 /* x**31 + x**3 + 1. */ #define TYPE_3 3 #define BREAK_3 128 #define DEG_3 31 #define SEP_3 3 /* x**63 + x + 1. */ #define TYPE_4 4 #define BREAK_4 256 #define DEG_4 63 #define SEP_4 1 /* Array versions of the above information to make code run faster. Relies on fact that TYPE_i == i. */ #define MAX_TYPES 5 /* Max number of types above. */ struct random_poly_info { int seps[MAX_TYPES]; int degrees[MAX_TYPES]; }; static const struct random_poly_info random_poly_info = { { SEP_0, SEP_1, SEP_2, SEP_3, SEP_4 }, { DEG_0, DEG_1, DEG_2, DEG_3, DEG_4 } }; static int32_t get_int32 (void *p) { int32_t v; memcpy (&v, p, sizeof v); return v; } static void set_int32 (void *p, int32_t v) { memcpy (p, &v, sizeof v); } /* Initialize the random number generator based on the given seed. If the type is the trivial no-state-information type, just remember the seed. Otherwise, initializes state[] based on the given "seed" via a linear congruential generator. Then, the pointers are set to known locations that are exactly rand_sep places apart. Lastly, it cycles the state information a given number of times to get rid of any initial dependencies introduced by the L.C.R.N.G. Note that the initialization of randtbl[] for default usage relies on values produced by this routine. */ int __srandom_r (unsigned int seed, struct random_data *buf) { int type; int32_t *state; long int i; int32_t word; int32_t *dst; int kc; if (buf == NULL) goto fail; type = buf->rand_type; if ((unsigned int) type >= MAX_TYPES) goto fail; state = buf->state; /* We must make sure the seed is not 0. Take arbitrarily 1 in this case. */ if (seed == 0) seed = 1; set_int32 (&state[0], seed); if (type == TYPE_0) goto done; dst = state; word = seed; kc = buf->rand_deg; for (i = 1; i < kc; ++i) { /* This does: state[i] = (16807 * state[i - 1]) % 2147483647; but avoids overflowing 31 bits. */ long int hi = word / 127773; long int lo = word % 127773; word = 16807 * lo - 2836 * hi; if (word < 0) word += 2147483647; set_int32 (++dst, word); } buf->fptr = &state[buf->rand_sep]; buf->rptr = &state[0]; kc *= 10; while (--kc >= 0) { int32_t discard; (void) __random_r (buf, &discard); } done: return 0; fail: return -1; } weak_alias (__srandom_r, srandom_r) /* Initialize the state information in the given array of N bytes for future random number generation. Based on the number of bytes we are given, and the break values for the different R.N.G.'s, we choose the best (largest) one we can and set things up for it. srandom is then called to initialize the state information. Note that on return from srandom, we set state[-1] to be the type multiplexed with the current value of the rear pointer; this is so successive calls to initstate won't lose this information and will be able to restart with setstate. Note: The first thing we do is save the current state, if any, just like setstate so that it doesn't matter when initstate is called. Returns 0 on success, non-zero on failure. */ int __initstate_r (unsigned int seed, char *arg_state, size_t n, struct random_data *buf) { if (buf == NULL) goto fail; int32_t *old_state = buf->state; if (old_state != NULL) { int old_type = buf->rand_type; set_int32 (&old_state[-1], (old_type == TYPE_0 ? TYPE_0 : (MAX_TYPES * (buf->rptr - old_state)) + old_type)); } int type; if (n >= BREAK_3) type = n < BREAK_4 ? TYPE_3 : TYPE_4; else if (n < BREAK_1) { if (n < BREAK_0) goto fail; type = TYPE_0; } else type = n < BREAK_2 ? TYPE_1 : TYPE_2; int degree = random_poly_info.degrees[type]; int separation = random_poly_info.seps[type]; buf->rand_type = type; buf->rand_sep = separation; buf->rand_deg = degree; int32_t *state = &((int32_t *) arg_state)[1]; /* First location. */ /* Must set END_PTR before srandom. */ buf->end_ptr = &state[degree]; buf->state = state; __srandom_r (seed, buf); set_int32 (&state[-1], type == TYPE_0 ? TYPE_0 : (buf->rptr - state) * MAX_TYPES + type); return 0; fail: __set_errno (EINVAL); return -1; } weak_alias (__initstate_r, initstate_r) /* Restore the state from the given state array. Note: It is important that we also remember the locations of the pointers in the current state information, and restore the locations of the pointers from the old state information. This is done by multiplexing the pointer location into the zeroth word of the state information. Note that due to the order in which things are done, it is OK to call setstate with the same state as the current state Returns 0 on success, non-zero on failure. */ int __setstate_r (char *arg_state, struct random_data *buf) { int32_t *new_state = 1 + (int32_t *) arg_state; int type; int old_type; int32_t *old_state; int degree; int separation; if (arg_state == NULL || buf == NULL) goto fail; old_type = buf->rand_type; old_state = buf->state; set_int32 (&old_state[-1], (old_type == TYPE_0 ? TYPE_0 : (MAX_TYPES * (buf->rptr - old_state)) + old_type)); type = get_int32 (&new_state[-1]) % MAX_TYPES; if (type < TYPE_0 || type > TYPE_4) goto fail; buf->rand_deg = degree = random_poly_info.degrees[type]; buf->rand_sep = separation = random_poly_info.seps[type]; buf->rand_type = type; if (type != TYPE_0) { int rear = get_int32 (&new_state[-1]) / MAX_TYPES; buf->rptr = &new_state[rear]; buf->fptr = &new_state[(rear + separation) % degree]; } buf->state = new_state; /* Set end_ptr too. */ buf->end_ptr = &new_state[degree]; return 0; fail: __set_errno (EINVAL); return -1; } weak_alias (__setstate_r, setstate_r) /* If we are using the trivial TYPE_0 R.N.G., just do the old linear congruential bit. Otherwise, we do our fancy trinomial stuff, which is the same in all the other cases due to all the global variables that have been set up. The basic operation is to add the number at the rear pointer into the one at the front pointer. Then both pointers are advanced to the next location cyclically in the table. The value returned is the sum generated, reduced to 31 bits by throwing away the "least random" low bit. Note: The code takes advantage of the fact that both the front and rear pointers can't wrap on the same call by not testing the rear pointer if the front one has wrapped. Returns a 31-bit random number. */ int __random_r (struct random_data *buf, int32_t *result) { int32_t *state; if (buf == NULL || result == NULL) goto fail; state = buf->state; if (buf->rand_type == TYPE_0) { int32_t val = (((get_int32 (&state[0]) * 1103515245U) + 12345U) & 0x7fffffff); set_int32 (&state[0], val); *result = val; } else { int32_t *fptr = buf->fptr; int32_t *rptr = buf->rptr; int32_t *end_ptr = buf->end_ptr; /* F and R are unsigned int, not uint32_t, to avoid undefined overflow behavior on platforms where INT_MAX == UINT32_MAX. */ unsigned int f = get_int32 (fptr); unsigned int r = get_int32 (rptr); uint32_t val = f + r; set_int32 (fptr, val); /* Chucking least random bit. */ *result = val >> 1; ++fptr; if (fptr >= end_ptr) { fptr = state; ++rptr; } else { ++rptr; if (rptr >= end_ptr) rptr = state; } buf->fptr = fptr; buf->rptr = rptr; } return 0; fail: __set_errno (EINVAL); return -1; } weak_alias (__random_r, random_r) ���������������������������������������������������������������������������������recutils-1.9/lib/fcntl.c����������������������������������������������������������������������������0000644�0000000�0000000�00000044621�14226564447�012151� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide file descriptor control. Copyright (C) 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake <ebb9@byu.net>. */ #include <config.h> /* Specification. */ #include <fcntl.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include <unistd.h> #ifdef __KLIBC__ # define INCL_DOS # include <os2.h> #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Upper bound on getdtablesize(). See lib/getdtablesize.c. */ # define OPEN_MAX_MAX 0x10000 /* Duplicate OLDFD into the first available slot of at least NEWFD, which must be positive, with FLAGS determining whether the duplicate will be inheritable. */ static int dupfd (int oldfd, int newfd, int flags) { /* Mingw has no way to create an arbitrary fd. Iterate until all file descriptors less than newfd are filled up. */ HANDLE curr_process = GetCurrentProcess (); HANDLE old_handle = (HANDLE) _get_osfhandle (oldfd); unsigned char fds_to_close[OPEN_MAX_MAX / CHAR_BIT]; unsigned int fds_to_close_bound = 0; int result; BOOL inherit = flags & O_CLOEXEC ? FALSE : TRUE; int mode; if (newfd < 0 || getdtablesize () <= newfd) { errno = EINVAL; return -1; } if (old_handle == INVALID_HANDLE_VALUE || (mode = _setmode (oldfd, O_BINARY)) == -1) { /* oldfd is not open, or is an unassigned standard file descriptor. */ errno = EBADF; return -1; } _setmode (oldfd, mode); flags |= mode; for (;;) { HANDLE new_handle; int duplicated_fd; unsigned int index; if (!DuplicateHandle (curr_process, /* SourceProcessHandle */ old_handle, /* SourceHandle */ curr_process, /* TargetProcessHandle */ (PHANDLE) &new_handle, /* TargetHandle */ (DWORD) 0, /* DesiredAccess */ inherit, /* InheritHandle */ DUPLICATE_SAME_ACCESS)) /* Options */ { switch (GetLastError ()) { case ERROR_TOO_MANY_OPEN_FILES: errno = EMFILE; break; case ERROR_INVALID_HANDLE: case ERROR_INVALID_TARGET_HANDLE: case ERROR_DIRECT_ACCESS_HANDLE: errno = EBADF; break; case ERROR_INVALID_PARAMETER: case ERROR_INVALID_FUNCTION: case ERROR_INVALID_ACCESS: errno = EINVAL; break; default: errno = EACCES; break; } result = -1; break; } duplicated_fd = _open_osfhandle ((intptr_t) new_handle, flags); if (duplicated_fd < 0) { CloseHandle (new_handle); result = -1; break; } if (newfd <= duplicated_fd) { result = duplicated_fd; break; } /* Set the bit duplicated_fd in fds_to_close[]. */ index = (unsigned int) duplicated_fd / CHAR_BIT; if (fds_to_close_bound <= index) { if (sizeof fds_to_close <= index) /* Need to increase OPEN_MAX_MAX. */ abort (); memset (fds_to_close + fds_to_close_bound, '\0', index + 1 - fds_to_close_bound); fds_to_close_bound = index + 1; } fds_to_close[index] |= 1 << ((unsigned int) duplicated_fd % CHAR_BIT); } /* Close the previous fds that turned out to be too small. */ { int saved_errno = errno; unsigned int duplicated_fd; for (duplicated_fd = 0; duplicated_fd < fds_to_close_bound * CHAR_BIT; duplicated_fd++) if ((fds_to_close[duplicated_fd / CHAR_BIT] >> (duplicated_fd % CHAR_BIT)) & 1) close (duplicated_fd); errno = saved_errno; } # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (oldfd, result); # endif return result; } #endif /* W32 */ /* Forward declarations, because we '#undef fcntl' in the middle of this compilation unit. */ /* Our implementation of fcntl (fd, F_DUPFD, target). */ static int rpl_fcntl_DUPFD (int fd, int target); /* Our implementation of fcntl (fd, F_DUPFD_CLOEXEC, target). */ static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target); #ifdef __KLIBC__ /* Adds support for fcntl on directories. */ static int klibc_fcntl (int fd, int action, /* arg */...); #endif /* Perform the specified ACTION on the file descriptor FD, possibly using the argument ARG further described below. This replacement handles the following actions, and forwards all others on to the native fcntl. An unrecognized ACTION returns -1 with errno set to EINVAL. F_DUPFD - duplicate FD, with int ARG being the minimum target fd. If successful, return the duplicate, which will be inheritable; otherwise return -1 and set errno. F_DUPFD_CLOEXEC - duplicate FD, with int ARG being the minimum target fd. If successful, return the duplicate, which will not be inheritable; otherwise return -1 and set errno. F_GETFD - ARG need not be present. If successful, return a non-negative value containing the descriptor flags of FD (only FD_CLOEXEC is portable, but other flags may be present); otherwise return -1 and set errno. */ int fcntl (int fd, int action, /* arg */...) #undef fcntl #ifdef __KLIBC__ # define fcntl klibc_fcntl #endif { va_list arg; int result = -1; va_start (arg, action); switch (action) { case F_DUPFD: { int target = va_arg (arg, int); result = rpl_fcntl_DUPFD (fd, target); break; } case F_DUPFD_CLOEXEC: { int target = va_arg (arg, int); result = rpl_fcntl_DUPFD_CLOEXEC (fd, target); break; } #if !HAVE_FCNTL case F_GETFD: { # if defined _WIN32 && ! defined __CYGWIN__ HANDLE handle = (HANDLE) _get_osfhandle (fd); DWORD flags; if (handle == INVALID_HANDLE_VALUE || GetHandleInformation (handle, &flags) == 0) errno = EBADF; else result = (flags & HANDLE_FLAG_INHERIT) ? 0 : FD_CLOEXEC; # else /* !W32 */ /* Use dup2 to reject invalid file descriptors. No way to access this information, so punt. */ if (0 <= dup2 (fd, fd)) result = 0; # endif /* !W32 */ break; } /* F_GETFD */ #endif /* !HAVE_FCNTL */ /* Implementing F_SETFD on mingw is not trivial - there is no API for changing the O_NOINHERIT bit on an fd, and merely changing the HANDLE_FLAG_INHERIT bit on the underlying handle can lead to odd state. It may be possible by duplicating the handle, using _open_osfhandle with the right flags, then using dup2 to move the duplicate onto the original, but that is not supported for now. */ default: { #if HAVE_FCNTL switch (action) { #ifdef F_BARRIERFSYNC /* macOS */ case F_BARRIERFSYNC: #endif #ifdef F_CHKCLEAN /* macOS */ case F_CHKCLEAN: #endif #ifdef F_CLOSEM /* NetBSD, HP-UX */ case F_CLOSEM: #endif #ifdef F_FLUSH_DATA /* macOS */ case F_FLUSH_DATA: #endif #ifdef F_FREEZE_FS /* macOS */ case F_FREEZE_FS: #endif #ifdef F_FULLFSYNC /* macOS */ case F_FULLFSYNC: #endif #ifdef F_GETCONFINED /* macOS */ case F_GETCONFINED: #endif #ifdef F_GETDEFAULTPROTLEVEL /* macOS */ case F_GETDEFAULTPROTLEVEL: #endif #ifdef F_GETFD /* POSIX */ case F_GETFD: #endif #ifdef F_GETFL /* POSIX */ case F_GETFL: #endif #ifdef F_GETLEASE /* Linux */ case F_GETLEASE: #endif #ifdef F_GETNOSIGPIPE /* macOS */ case F_GETNOSIGPIPE: #endif #ifdef F_GETOWN /* POSIX */ case F_GETOWN: #endif #ifdef F_GETPIPE_SZ /* Linux */ case F_GETPIPE_SZ: #endif #ifdef F_GETPROTECTIONCLASS /* macOS */ case F_GETPROTECTIONCLASS: #endif #ifdef F_GETPROTECTIONLEVEL /* macOS */ case F_GETPROTECTIONLEVEL: #endif #ifdef F_GET_SEALS /* Linux */ case F_GET_SEALS: #endif #ifdef F_GETSIG /* Linux */ case F_GETSIG: #endif #ifdef F_MAXFD /* NetBSD */ case F_MAXFD: #endif #ifdef F_RECYCLE /* macOS */ case F_RECYCLE: #endif #ifdef F_SETFIFOENH /* HP-UX */ case F_SETFIFOENH: #endif #ifdef F_THAW_FS /* macOS */ case F_THAW_FS: #endif /* These actions take no argument. */ result = fcntl (fd, action); break; #ifdef F_ADD_SEALS /* Linux */ case F_ADD_SEALS: #endif #ifdef F_BADFD /* Solaris */ case F_BADFD: #endif #ifdef F_CHECK_OPENEVT /* macOS */ case F_CHECK_OPENEVT: #endif #ifdef F_DUP2FD /* FreeBSD, AIX, Solaris */ case F_DUP2FD: #endif #ifdef F_DUP2FD_CLOEXEC /* FreeBSD, Solaris */ case F_DUP2FD_CLOEXEC: #endif #ifdef F_DUP2FD_CLOFORK /* Solaris */ case F_DUP2FD_CLOFORK: #endif #ifdef F_DUPFD /* POSIX */ case F_DUPFD: #endif #ifdef F_DUPFD_CLOEXEC /* POSIX */ case F_DUPFD_CLOEXEC: #endif #ifdef F_DUPFD_CLOFORK /* Solaris */ case F_DUPFD_CLOFORK: #endif #ifdef F_GETXFL /* Solaris */ case F_GETXFL: #endif #ifdef F_GLOBAL_NOCACHE /* macOS */ case F_GLOBAL_NOCACHE: #endif #ifdef F_MAKECOMPRESSED /* macOS */ case F_MAKECOMPRESSED: #endif #ifdef F_MOVEDATAEXTENTS /* macOS */ case F_MOVEDATAEXTENTS: #endif #ifdef F_NOCACHE /* macOS */ case F_NOCACHE: #endif #ifdef F_NODIRECT /* macOS */ case F_NODIRECT: #endif #ifdef F_NOTIFY /* Linux */ case F_NOTIFY: #endif #ifdef F_OPLKACK /* IRIX */ case F_OPLKACK: #endif #ifdef F_OPLKREG /* IRIX */ case F_OPLKREG: #endif #ifdef F_RDAHEAD /* macOS */ case F_RDAHEAD: #endif #ifdef F_SETBACKINGSTORE /* macOS */ case F_SETBACKINGSTORE: #endif #ifdef F_SETCONFINED /* macOS */ case F_SETCONFINED: #endif #ifdef F_SETFD /* POSIX */ case F_SETFD: #endif #ifdef F_SETFL /* POSIX */ case F_SETFL: #endif #ifdef F_SETLEASE /* Linux */ case F_SETLEASE: #endif #ifdef F_SETNOSIGPIPE /* macOS */ case F_SETNOSIGPIPE: #endif #ifdef F_SETOWN /* POSIX */ case F_SETOWN: #endif #ifdef F_SETPIPE_SZ /* Linux */ case F_SETPIPE_SZ: #endif #ifdef F_SETPROTECTIONCLASS /* macOS */ case F_SETPROTECTIONCLASS: #endif #ifdef F_SETSIG /* Linux */ case F_SETSIG: #endif #ifdef F_SINGLE_WRITER /* macOS */ case F_SINGLE_WRITER: #endif /* These actions take an 'int' argument. */ { int x = va_arg (arg, int); result = fcntl (fd, action, x); } break; default: /* Other actions take a pointer argument. */ { void *p = va_arg (arg, void *); result = fcntl (fd, action, p); } break; } #else errno = EINVAL; #endif break; } } va_end (arg); return result; } static int rpl_fcntl_DUPFD (int fd, int target) { int result; #if !HAVE_FCNTL result = dupfd (fd, target, 0); #elif FCNTL_DUPFD_BUGGY || REPLACE_FCHDIR /* Detect invalid target; needed for cygwin 1.5.x. */ if (target < 0 || getdtablesize () <= target) { result = -1; errno = EINVAL; } else { /* Haiku alpha 2 loses fd flags on original. */ int flags = fcntl (fd, F_GETFD); if (flags < 0) result = -1; else { result = fcntl (fd, F_DUPFD, target); if (0 <= result && fcntl (fd, F_SETFD, flags) == -1) { int saved_errno = errno; close (result); result = -1; errno = saved_errno; } # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif } } #else result = fcntl (fd, F_DUPFD, target); #endif return result; } static int rpl_fcntl_DUPFD_CLOEXEC (int fd, int target) { int result; #if !HAVE_FCNTL result = dupfd (fd, target, O_CLOEXEC); #else /* HAVE_FCNTL */ # if defined __NetBSD__ || defined __HAIKU__ /* On NetBSD 9.0, the system fcntl (fd, F_DUPFD_CLOEXEC, target) has only the same effect as fcntl (fd, F_DUPFD, target). */ /* On Haiku, the system fcntl (fd, F_DUPFD_CLOEXEC, target) sets the FD_CLOEXEC flag on fd, not on target. Therefore avoid the system fcntl in this case. */ # define have_dupfd_cloexec -1 # else /* Try the system call first, if the headers claim it exists (that is, if GNULIB_defined_F_DUPFD_CLOEXEC is 0), since we may be running with a glibc that has the macro but with an older kernel that does not support it. Cache the information on whether the system call really works, but avoid caching failure if the corresponding F_DUPFD fails for any reason. 0 = unknown, 1 = yes, -1 = no. */ static int have_dupfd_cloexec = GNULIB_defined_F_DUPFD_CLOEXEC ? -1 : 0; if (0 <= have_dupfd_cloexec) { result = fcntl (fd, F_DUPFD_CLOEXEC, target); if (0 <= result || errno != EINVAL) { have_dupfd_cloexec = 1; # if REPLACE_FCHDIR if (0 <= result) result = _gl_register_dup (fd, result); # endif } else { result = rpl_fcntl_DUPFD (fd, target); if (result >= 0) have_dupfd_cloexec = -1; } } else # endif result = rpl_fcntl_DUPFD (fd, target); if (0 <= result && have_dupfd_cloexec == -1) { int flags = fcntl (result, F_GETFD); if (flags < 0 || fcntl (result, F_SETFD, flags | FD_CLOEXEC) == -1) { int saved_errno = errno; close (result); errno = saved_errno; result = -1; } } #endif /* HAVE_FCNTL */ return result; } #undef fcntl #ifdef __KLIBC__ static int klibc_fcntl (int fd, int action, /* arg */...) { va_list arg_ptr; int arg; struct stat sbuf; int result; va_start (arg_ptr, action); arg = va_arg (arg_ptr, int); result = fcntl (fd, action, arg); /* EPERM for F_DUPFD, ENOTSUP for others */ if (result == -1 && (errno == EPERM || errno == ENOTSUP) && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { ULONG ulMode; switch (action) { case F_DUPFD: /* Find available fd */ while (fcntl (arg, F_GETFL) != -1 || errno != EBADF) arg++; result = dup2 (fd, arg); break; /* Using underlying APIs is right ? */ case F_GETFD: if (DosQueryFHState (fd, &ulMode)) break; result = (ulMode & OPEN_FLAGS_NOINHERIT) ? FD_CLOEXEC : 0; break; case F_SETFD: if (arg & ~FD_CLOEXEC) break; if (DosQueryFHState (fd, &ulMode)) break; if (arg & FD_CLOEXEC) ulMode |= OPEN_FLAGS_NOINHERIT; else ulMode &= ~OPEN_FLAGS_NOINHERIT; /* Filter supported flags. */ ulMode &= (OPEN_FLAGS_WRITE_THROUGH | OPEN_FLAGS_FAIL_ON_ERROR | OPEN_FLAGS_NO_CACHE | OPEN_FLAGS_NOINHERIT); if (DosSetFHState (fd, ulMode)) break; result = 0; break; case F_GETFL: result = 0; break; case F_SETFL: if (arg != 0) break; result = 0; break; default: errno = EINVAL; break; } } va_end (arg_ptr); return result; } #endif ���������������������������������������������������������������������������������������������������������������recutils-1.9/lib/lc-charset-dispatch.h��������������������������������������������������������������0000644�0000000�0000000�00000002572�14226564450�014663� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Dispatching based on the current locale's character encoding. Copyright (C) 2018-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2018. */ #include <wchar.h> #if GNULIB_defined_mbstate_t /* A classification of special values of the encoding of the current locale. */ typedef enum { enc_other, /* other */ enc_utf8, /* UTF-8 */ enc_eucjp, /* EUC-JP */ enc_94, /* EUC-KR, GB2312, BIG5 */ enc_euctw, /* EUC-TW */ enc_gb18030, /* GB18030 */ enc_sjis /* SJIS */ } enc_t; /* Returns a classification of special values of the encoding of the current locale. */ extern enc_t locale_encoding_classification (void); #endif ��������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/signbitf.c�������������������������������������������������������������������������0000644�0000000�0000000�00000004121�14226564451�012632� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* signbit() macro: Determine the sign bit of a floating-point number. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> #include <string.h> #include "isnanf-nolibm.h" #include "float+.h" #ifdef gl_signbitf_OPTIMIZED_MACRO # undef gl_signbitf #endif int gl_signbitf (float arg) { #if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT /* The use of a union to extract the bits of the representation of a 'long double' is safe in practice, despite of the "aliasing rules" of C99, because the GCC docs say "Even with '-fstrict-aliasing', type-punning is allowed, provided the memory is accessed through the union type." and similarly for other compilers. */ # define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { float value; unsigned int word[NWORDS]; } m; m.value = arg; return (m.word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; #elif HAVE_COPYSIGNF_IN_LIBC return copysignf (1.0f, arg) < 0; #else /* This does not do the right thing for NaN, but this is irrelevant for most use cases. */ if (isnanf (arg)) return 0; if (arg < 0.0f) return 1; else if (arg == 0.0f) { /* Distinguish 0.0f and -0.0f. */ static float plus_zero = 0.0f; float arg_mem = arg; return (memcmp (&plus_zero, &arg_mem, SIZEOF_FLT) != 0); } else return 0; #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/str-two-way.h����������������������������������������������������������������������0000644�0000000�0000000�00000042232�14226564451�013254� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Byte-wise substring search, using the Two-Way algorithm. Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. Written by Eric Blake <ebb9@byu.net>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Before including this file, you need to include <config.h> and <string.h>, and define: RETURN_TYPE A macro that expands to the return type. AVAILABLE(h, h_l, j, n_l) A macro that returns nonzero if there are at least N_L bytes left starting at H[J]. H is 'unsigned char *', H_L, J, and N_L are 'size_t'; H_L is an lvalue. For NUL-terminated searches, H_L can be modified each iteration to avoid having to compute the end of H up front. For case-insensitivity, you may optionally define: CMP_FUNC(p1, p2, l) A macro that returns 0 iff the first L characters of P1 and P2 are equal. CANON_ELEMENT(c) A macro that canonicalizes an element right after it has been fetched from one of the two strings. The argument is an 'unsigned char'; the result must be an 'unsigned char' as well. This file undefines the macros documented above, and defines LONG_NEEDLE_THRESHOLD. */ #include <limits.h> #include <stdint.h> /* We use the Two-Way string matching algorithm (also known as Chrochemore-Perrin), which guarantees linear complexity with constant space. Additionally, for long needles, we also use a bad character shift table similar to the Boyer-Moore algorithm to achieve improved (potentially sub-linear) performance. See https://www-igm.univ-mlv.fr/~lecroq/string/node26.html#SECTION00260, https://en.wikipedia.org/wiki/Boyer-Moore_string_search_algorithm, https://citeseerx.ist.psu.edu/viewdoc/download?doi=10.1.1.34.6641&rep=rep1&type=pdf */ /* Point at which computing a bad-byte shift table is likely to be worthwhile. Small needles should not compute a table, since it adds (1 << CHAR_BIT) + NEEDLE_LEN computations of preparation for a speedup no greater than a factor of NEEDLE_LEN. The larger the needle, the better the potential performance gain. On the other hand, on non-POSIX systems with CHAR_BIT larger than eight, the memory required for the table is prohibitive. */ #if CHAR_BIT < 10 # define LONG_NEEDLE_THRESHOLD 32U #else # define LONG_NEEDLE_THRESHOLD SIZE_MAX #endif #ifndef MAX # define MAX(a, b) ((a < b) ? (b) : (a)) #endif #ifndef CANON_ELEMENT # define CANON_ELEMENT(c) c #endif #ifndef CMP_FUNC # define CMP_FUNC memcmp #endif /* Perform a critical factorization of NEEDLE, of length NEEDLE_LEN. Return the index of the first byte in the right half, and set *PERIOD to the global period of the right half. The global period of a string is the smallest index (possibly its length) at which all remaining bytes in the string are repetitions of the prefix (the last repetition may be a subset of the prefix). When NEEDLE is factored into two halves, a local period is the length of the smallest word that shares a suffix with the left half and shares a prefix with the right half. All factorizations of a non-empty NEEDLE have a local period of at least 1 and no greater than NEEDLE_LEN. A critical factorization has the property that the local period equals the global period. All strings have at least one critical factorization with the left half smaller than the global period. And while some strings have more than one critical factorization, it is provable that with an ordered alphabet, at least one of the critical factorizations corresponds to a maximal suffix. Given an ordered alphabet, a critical factorization can be computed in linear time, with 2 * NEEDLE_LEN comparisons, by computing the shorter of two ordered maximal suffixes. The ordered maximal suffixes are determined by lexicographic comparison while tracking periodicity. */ static size_t critical_factorization (const unsigned char *needle, size_t needle_len, size_t *period) { /* Index of last byte of left half, or SIZE_MAX. */ size_t max_suffix, max_suffix_rev; size_t j; /* Index into NEEDLE for current candidate suffix. */ size_t k; /* Offset into current period. */ size_t p; /* Intermediate period. */ unsigned char a, b; /* Current comparison bytes. */ /* Special case NEEDLE_LEN of 1 or 2 (all callers already filtered out 0-length needles. */ if (needle_len < 3) { *period = 1; return needle_len - 1; } /* Invariants: 0 <= j < NEEDLE_LEN - 1 -1 <= max_suffix{,_rev} < j (treating SIZE_MAX as if it were signed) min(max_suffix, max_suffix_rev) < global period of NEEDLE 1 <= p <= global period of NEEDLE p == global period of the substring NEEDLE[max_suffix{,_rev}+1...j] 1 <= k <= p */ /* Perform lexicographic search. */ max_suffix = SIZE_MAX; j = 0; k = p = 1; while (j + k < needle_len) { a = CANON_ELEMENT (needle[j + k]); b = CANON_ELEMENT (needle[max_suffix + k]); if (a < b) { /* Suffix is smaller, period is entire prefix so far. */ j += k; k = 1; p = j - max_suffix; } else if (a == b) { /* Advance through repetition of the current period. */ if (k != p) ++k; else { j += p; k = 1; } } else /* b < a */ { /* Suffix is larger, start over from current location. */ max_suffix = j++; k = p = 1; } } *period = p; /* Perform reverse lexicographic search. */ max_suffix_rev = SIZE_MAX; j = 0; k = p = 1; while (j + k < needle_len) { a = CANON_ELEMENT (needle[j + k]); b = CANON_ELEMENT (needle[max_suffix_rev + k]); if (b < a) { /* Suffix is smaller, period is entire prefix so far. */ j += k; k = 1; p = j - max_suffix_rev; } else if (a == b) { /* Advance through repetition of the current period. */ if (k != p) ++k; else { j += p; k = 1; } } else /* a < b */ { /* Suffix is larger, start over from current location. */ max_suffix_rev = j++; k = p = 1; } } /* Choose the shorter suffix. Return the index of the first byte of the right half, rather than the last byte of the left half. For some examples, 'banana' has two critical factorizations, both exposed by the two lexicographic extreme suffixes of 'anana' and 'nana', where both suffixes have a period of 2. On the other hand, with 'aab' and 'bba', both strings have a single critical factorization of the last byte, with the suffix having a period of 1. While the maximal lexicographic suffix of 'aab' is 'b', the maximal lexicographic suffix of 'bba' is 'ba', which is not a critical factorization. Conversely, the maximal reverse lexicographic suffix of 'a' works for 'bba', but not 'ab' for 'aab'. The shorter suffix of the two will always be a critical factorization. */ if (max_suffix_rev + 1 < max_suffix + 1) return max_suffix + 1; *period = p; return max_suffix_rev + 1; } /* Return the first location of non-empty NEEDLE within HAYSTACK, or NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This method is optimized for NEEDLE_LEN < LONG_NEEDLE_THRESHOLD. Performance is guaranteed to be linear, with an initialization cost of 2 * NEEDLE_LEN comparisons. If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching. */ static RETURN_TYPE two_way_short_needle (const unsigned char *haystack, size_t haystack_len, const unsigned char *needle, size_t needle_len) { size_t i; /* Index into current byte of NEEDLE. */ size_t j; /* Index into current window of HAYSTACK. */ size_t period; /* The period of the right half of needle. */ size_t suffix; /* The index of the right half of needle. */ /* Factor the needle into two halves, such that the left half is smaller than the global period, and the right half is periodic (with a period as large as NEEDLE_LEN - suffix). */ suffix = critical_factorization (needle, needle_len, &period); /* Perform the search. Each iteration compares the right half first. */ if (CMP_FUNC (needle, needle + period, suffix) == 0) { /* Entire needle is periodic; a mismatch in the left half can only advance by the period, so use memory to avoid rescanning known occurrences of the period in the right half. */ size_t memory = 0; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Scan for matches in right half. */ i = MAX (suffix, memory); while (i < needle_len && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (memory < i + 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i + 1 < memory + 1) return (RETURN_TYPE) (haystack + j); /* No match, so remember how many repetitions of period on the right half were scanned. */ j += period; memory = needle_len - period; } else { j += i - suffix + 1; memory = 0; } } } else { /* The two halves of needle are distinct; no extra memory is required, and any mismatch results in a maximal shift. */ period = MAX (suffix, needle_len - suffix) + 1; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Scan for matches in right half. */ i = suffix; while (i < needle_len && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i == SIZE_MAX) return (RETURN_TYPE) (haystack + j); j += period; } else j += i - suffix + 1; } } return NULL; } /* Return the first location of non-empty NEEDLE within HAYSTACK, or NULL. HAYSTACK_LEN is the minimum known length of HAYSTACK. This method is optimized for LONG_NEEDLE_THRESHOLD <= NEEDLE_LEN. Performance is guaranteed to be linear, with an initialization cost of 3 * NEEDLE_LEN + (1 << CHAR_BIT) operations. If AVAILABLE does not modify HAYSTACK_LEN (as in memmem), then at most 2 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and sublinear performance O(HAYSTACK_LEN / NEEDLE_LEN) is possible. If AVAILABLE modifies HAYSTACK_LEN (as in strstr), then at most 3 * HAYSTACK_LEN - NEEDLE_LEN comparisons occur in searching, and sublinear performance is not possible. */ static RETURN_TYPE two_way_long_needle (const unsigned char *haystack, size_t haystack_len, const unsigned char *needle, size_t needle_len) { size_t i; /* Index into current byte of NEEDLE. */ size_t j; /* Index into current window of HAYSTACK. */ size_t period; /* The period of the right half of needle. */ size_t suffix; /* The index of the right half of needle. */ size_t shift_table[1U << CHAR_BIT]; /* See below. */ /* Factor the needle into two halves, such that the left half is smaller than the global period, and the right half is periodic (with a period as large as NEEDLE_LEN - suffix). */ suffix = critical_factorization (needle, needle_len, &period); /* Populate shift_table. For each possible byte value c, shift_table[c] is the distance from the last occurrence of c to the end of NEEDLE, or NEEDLE_LEN if c is absent from the NEEDLE. shift_table[NEEDLE[NEEDLE_LEN - 1]] contains the only 0. */ for (i = 0; i < 1U << CHAR_BIT; i++) shift_table[i] = needle_len; for (i = 0; i < needle_len; i++) shift_table[CANON_ELEMENT (needle[i])] = needle_len - i - 1; /* Perform the search. Each iteration compares the right half first. */ if (CMP_FUNC (needle, needle + period, suffix) == 0) { /* Entire needle is periodic; a mismatch in the left half can only advance by the period, so use memory to avoid rescanning known occurrences of the period in the right half. */ size_t memory = 0; size_t shift; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Check the last byte first; if it does not match, then shift to the next possible match location. */ shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; if (0 < shift) { if (memory && shift < period) { /* Since needle is periodic, but the last period has a byte out of place, there can be no match until after the mismatch. */ shift = needle_len - period; } memory = 0; j += shift; continue; } /* Scan for matches in right half. The last byte has already been matched, by virtue of the shift table. */ i = MAX (suffix, memory); while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len - 1 <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (memory < i + 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i + 1 < memory + 1) return (RETURN_TYPE) (haystack + j); /* No match, so remember how many repetitions of period on the right half were scanned. */ j += period; memory = needle_len - period; } else { j += i - suffix + 1; memory = 0; } } } else { /* The two halves of needle are distinct; no extra memory is required, and any mismatch results in a maximal shift. */ size_t shift; period = MAX (suffix, needle_len - suffix) + 1; j = 0; while (AVAILABLE (haystack, haystack_len, j, needle_len)) { /* Check the last byte first; if it does not match, then shift to the next possible match location. */ shift = shift_table[CANON_ELEMENT (haystack[j + needle_len - 1])]; if (0 < shift) { j += shift; continue; } /* Scan for matches in right half. The last byte has already been matched, by virtue of the shift table. */ i = suffix; while (i < needle_len - 1 && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) ++i; if (needle_len - 1 <= i) { /* Scan for matches in left half. */ i = suffix - 1; while (i != SIZE_MAX && (CANON_ELEMENT (needle[i]) == CANON_ELEMENT (haystack[i + j]))) --i; if (i == SIZE_MAX) return (RETURN_TYPE) (haystack + j); j += period; } else j += i - suffix + 1; } } return NULL; } #undef AVAILABLE #undef CANON_ELEMENT #undef CMP_FUNC #undef MAX #undef RETURN_TYPE ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/obstack.h��������������������������������������������������������������������������0000644�0000000�0000000�00000054400�14226564450�012464� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* obstack.h - object stack macros Copyright (C) 1988-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Summary: All the apparent functions defined here are macros. The idea is that you would use these pre-tested macros to solve a very specific set of problems, and they would run fast. Caution: no side-effects in arguments please!! They may be evaluated MANY times!! These macros operate a stack of objects. Each object starts life small, and may grow to maturity. (Consider building a word syllable by syllable.) An object can move while it is growing. Once it has been "finished" it never changes address again. So the "top of the stack" is typically an immature growing object, while the rest of the stack is of mature, fixed size and fixed address objects. These routines grab large chunks of memory, using a function you supply, called 'obstack_chunk_alloc'. On occasion, they free chunks, by calling 'obstack_chunk_free'. You must define them and declare them before using any obstack macros. Each independent stack is represented by a 'struct obstack'. Each of the obstack macros expects a pointer to such a structure as the first argument. One motivation for this package is the problem of growing char strings in symbol tables. Unless you are "fascist pig with a read-only mind" --Gosper's immortal quote from HAKMEM item 154, out of context--you would not like to put any arbitrary upper limit on the length of your symbols. In practice this often means you will build many short symbols and a few long symbols. At the time you are reading a symbol you don't know how long it is. One traditional method is to read a symbol into a buffer, realloc()ating the buffer every time you try to read a symbol that is longer than the buffer. This is beaut, but you still will want to copy the symbol from the buffer to a more permanent symbol-table entry say about half the time. With obstacks, you can work differently. Use one obstack for all symbol names. As you read a symbol, grow the name in the obstack gradually. When the name is complete, finalize it. Then, if the symbol exists already, free the newly read name. The way we do this is to take a large chunk, allocating memory from low addresses. When you want to build a symbol in the chunk you just add chars above the current "high water mark" in the chunk. When you have finished adding chars, because you got to the end of the symbol, you know how long the chars are, and you can create a new object. Mostly the chars will not burst over the highest address of the chunk, because you would typically expect a chunk to be (say) 100 times as long as an average object. In case that isn't clear, when we have enough chars to make up the object, THEY ARE ALREADY CONTIGUOUS IN THE CHUNK (guaranteed) so we just point to it where it lies. No moving of chars is needed and this is the second win: potentially long strings need never be explicitly shuffled. Once an object is formed, it does not change its address during its lifetime. When the chars burst over a chunk boundary, we allocate a larger chunk, and then copy the partly formed object from the end of the old chunk to the beginning of the new larger chunk. We then carry on accreting characters to the end of the object as we normally would. A special macro is provided to add a single char at a time to a growing object. This allows the use of register variables, which break the ordinary 'growth' macro. Summary: We allocate large chunks. We carve out one object at a time from the current chunk. Once carved, an object never moves. We are free to append data of any size to the currently growing object. Exactly one object is growing in an obstack at any one time. You can run one obstack per control block. You may have as many control blocks as you dare. Because of the way we do it, you can "unwind" an obstack back to a previous state. (You may remove objects much as you would with a stack.) */ /* Don't do the contents of this file more than once. */ #ifndef _OBSTACK_H #define _OBSTACK_H 1 #ifndef _OBSTACK_INTERFACE_VERSION # define _OBSTACK_INTERFACE_VERSION 2 #endif #include <stddef.h> /* For size_t and ptrdiff_t. */ #include <string.h> /* For __GNU_LIBRARY__, and memcpy. */ #if __STDC_VERSION__ < 199901L || defined __HP_cc # define __FLEXIBLE_ARRAY_MEMBER 1 #else # define __FLEXIBLE_ARRAY_MEMBER #endif #if _OBSTACK_INTERFACE_VERSION == 1 /* For binary compatibility with obstack version 1, which used "int" and "long" for these two types. */ # define _OBSTACK_SIZE_T unsigned int # define _CHUNK_SIZE_T unsigned long # define _OBSTACK_CAST(type, expr) ((type) (expr)) #else /* Version 2 with sane types, especially for 64-bit hosts. */ # define _OBSTACK_SIZE_T size_t # define _CHUNK_SIZE_T size_t # define _OBSTACK_CAST(type, expr) (expr) #endif /* If B is the base of an object addressed by P, return the result of aligning P to the next multiple of A + 1. B and P must be of type char *. A + 1 must be a power of 2. */ #define __BPTR_ALIGN(B, P, A) ((B) + (((P) - (B) + (A)) & ~(A))) /* Similar to __BPTR_ALIGN (B, P, A), except optimize the common case where pointers can be converted to integers, aligned as integers, and converted back again. If ptrdiff_t is narrower than a pointer (e.g., the AS/400), play it safe and compute the alignment relative to B. Otherwise, use the faster strategy of computing the alignment relative to 0. */ #define __PTR_ALIGN(B, P, A) \ __BPTR_ALIGN (sizeof (ptrdiff_t) < sizeof (void *) ? (B) : (char *) 0, \ P, A) #ifndef __attribute_pure__ # define __attribute_pure__ _GL_ATTRIBUTE_PURE #endif /* Not the same as _Noreturn, since it also works with function pointers. */ #ifndef __attribute_noreturn__ # if 2 < __GNUC__ + (8 <= __GNUC_MINOR__) || defined __clang__ || 0x5110 <= __SUNPRO_C # define __attribute_noreturn__ __attribute__ ((__noreturn__)) # else # define __attribute_noreturn__ # endif #endif #ifdef __cplusplus extern "C" { #endif struct _obstack_chunk /* Lives at front of each chunk. */ { char *limit; /* 1 past end of this chunk */ struct _obstack_chunk *prev; /* address of prior chunk or NULL */ char contents[__FLEXIBLE_ARRAY_MEMBER]; /* objects begin here */ }; struct obstack /* control current object in current chunk */ { _CHUNK_SIZE_T chunk_size; /* preferred size to allocate chunks in */ struct _obstack_chunk *chunk; /* address of current struct obstack_chunk */ char *object_base; /* address of object we are building */ char *next_free; /* where to add next char to current object */ char *chunk_limit; /* address of char after current chunk */ union { _OBSTACK_SIZE_T i; void *p; } temp; /* Temporary for some macros. */ _OBSTACK_SIZE_T alignment_mask; /* Mask of alignment for each object. */ /* These prototypes vary based on 'use_extra_arg'. */ union { void *(*plain) (size_t); void *(*extra) (void *, size_t); } chunkfun; union { void (*plain) (void *); void (*extra) (void *, void *); } freefun; void *extra_arg; /* first arg for chunk alloc/dealloc funcs */ unsigned use_extra_arg : 1; /* chunk alloc/dealloc funcs take extra arg */ unsigned maybe_empty_object : 1; /* There is a possibility that the current chunk contains a zero-length object. This prevents freeing the chunk if we allocate a bigger chunk to replace it. */ unsigned alloc_failed : 1; /* No longer used, as we now call the failed handler on error, but retained for binary compatibility. */ }; /* Declare the external functions we use; they are in obstack.c. */ extern void _obstack_newchunk (struct obstack *, _OBSTACK_SIZE_T); extern void _obstack_free (struct obstack *, void *); extern int _obstack_begin (struct obstack *, _OBSTACK_SIZE_T, _OBSTACK_SIZE_T, void *(*) (size_t), void (*) (void *)); extern int _obstack_begin_1 (struct obstack *, _OBSTACK_SIZE_T, _OBSTACK_SIZE_T, void *(*) (void *, size_t), void (*) (void *, void *), void *); extern _OBSTACK_SIZE_T _obstack_memory_used (struct obstack *) __attribute_pure__; /* Error handler called when 'obstack_chunk_alloc' failed to allocate more memory. This can be set to a user defined function which should either abort gracefully or use longjump - but shouldn't return. The default action is to print a message and abort. */ extern __attribute_noreturn__ void (*obstack_alloc_failed_handler) (void); /* Exit value used when 'print_and_abort' is used. */ extern int obstack_exit_failure; /* Pointer to beginning of object being allocated or to be allocated next. Note that this might not be the final address of the object because a new chunk might be needed to hold the final size. */ #define obstack_base(h) ((void *) (h)->object_base) /* Size for allocating ordinary chunks. */ #define obstack_chunk_size(h) ((h)->chunk_size) /* Pointer to next byte not yet allocated in current chunk. */ #define obstack_next_free(h) ((void *) (h)->next_free) /* Mask specifying low bits that should be clear in address of an object. */ #define obstack_alignment_mask(h) ((h)->alignment_mask) /* To prevent prototype warnings provide complete argument list. */ #define obstack_init(h) \ _obstack_begin ((h), 0, 0, \ _OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc), \ _OBSTACK_CAST (void (*) (void *), obstack_chunk_free)) #define obstack_begin(h, size) \ _obstack_begin ((h), (size), 0, \ _OBSTACK_CAST (void *(*) (size_t), obstack_chunk_alloc), \ _OBSTACK_CAST (void (*) (void *), obstack_chunk_free)) #define obstack_specify_allocation(h, size, alignment, chunkfun, freefun) \ _obstack_begin ((h), (size), (alignment), \ _OBSTACK_CAST (void *(*) (size_t), chunkfun), \ _OBSTACK_CAST (void (*) (void *), freefun)) #define obstack_specify_allocation_with_arg(h, size, alignment, chunkfun, freefun, arg) \ _obstack_begin_1 ((h), (size), (alignment), \ _OBSTACK_CAST (void *(*) (void *, size_t), chunkfun), \ _OBSTACK_CAST (void (*) (void *, void *), freefun), arg) #define obstack_chunkfun(h, newchunkfun) \ ((void) ((h)->chunkfun.extra = (void *(*) (void *, size_t)) (newchunkfun))) #define obstack_freefun(h, newfreefun) \ ((void) ((h)->freefun.extra = (void *(*) (void *, void *)) (newfreefun))) #define obstack_1grow_fast(h, achar) ((void) (*((h)->next_free)++ = (achar))) #define obstack_blank_fast(h, n) ((void) ((h)->next_free += (n))) #define obstack_memory_used(h) _obstack_memory_used (h) #if defined __GNUC__ || defined __clang__ # if !(defined __GNUC_MINOR__ && __GNUC__ * 1000 + __GNUC_MINOR__ >= 2008 \ || defined __clang__) # define __extension__ # endif /* For GNU C, if not -traditional, we can define these macros to compute all args only once without using a global variable. Also, we can avoid using the 'temp' slot, to make faster code. */ # define obstack_object_size(OBSTACK) \ __extension__ \ ({ struct obstack const *__o = (OBSTACK); \ (_OBSTACK_SIZE_T) (__o->next_free - __o->object_base); }) /* The local variable is named __o1 to avoid a shadowed variable warning when invoked from other obstack macros. */ # define obstack_room(OBSTACK) \ __extension__ \ ({ struct obstack const *__o1 = (OBSTACK); \ (_OBSTACK_SIZE_T) (__o1->chunk_limit - __o1->next_free); }) # define obstack_make_room(OBSTACK, length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ _OBSTACK_SIZE_T __len = (length); \ if (obstack_room (__o) < __len) \ _obstack_newchunk (__o, __len); \ (void) 0; }) # define obstack_empty_p(OBSTACK) \ __extension__ \ ({ struct obstack const *__o = (OBSTACK); \ (__o->chunk->prev == 0 \ && __o->next_free == __PTR_ALIGN ((char *) __o->chunk, \ __o->chunk->contents, \ __o->alignment_mask)); }) # define obstack_grow(OBSTACK, where, length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ _OBSTACK_SIZE_T __len = (length); \ if (obstack_room (__o) < __len) \ _obstack_newchunk (__o, __len); \ memcpy (__o->next_free, where, __len); \ __o->next_free += __len; \ (void) 0; }) # define obstack_grow0(OBSTACK, where, length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ _OBSTACK_SIZE_T __len = (length); \ if (obstack_room (__o) < __len + 1) \ _obstack_newchunk (__o, __len + 1); \ memcpy (__o->next_free, where, __len); \ __o->next_free += __len; \ *(__o->next_free)++ = 0; \ (void) 0; }) # define obstack_1grow(OBSTACK, datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (obstack_room (__o) < 1) \ _obstack_newchunk (__o, 1); \ obstack_1grow_fast (__o, datum); }) /* These assume that the obstack alignment is good enough for pointers or ints, and that the data added so far to the current object shares that much alignment. */ # define obstack_ptr_grow(OBSTACK, datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (obstack_room (__o) < sizeof (void *)) \ _obstack_newchunk (__o, sizeof (void *)); \ obstack_ptr_grow_fast (__o, datum); }) # define obstack_int_grow(OBSTACK, datum) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ if (obstack_room (__o) < sizeof (int)) \ _obstack_newchunk (__o, sizeof (int)); \ obstack_int_grow_fast (__o, datum); }) # define obstack_ptr_grow_fast(OBSTACK, aptr) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ void *__p1 = __o1->next_free; \ *(const void **) __p1 = (aptr); \ __o1->next_free += sizeof (const void *); \ (void) 0; }) # define obstack_int_grow_fast(OBSTACK, aint) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ void *__p1 = __o1->next_free; \ *(int *) __p1 = (aint); \ __o1->next_free += sizeof (int); \ (void) 0; }) # define obstack_blank(OBSTACK, length) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ _OBSTACK_SIZE_T __len = (length); \ if (obstack_room (__o) < __len) \ _obstack_newchunk (__o, __len); \ obstack_blank_fast (__o, __len); }) # define obstack_alloc(OBSTACK, length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ obstack_blank (__h, (length)); \ obstack_finish (__h); }) # define obstack_copy(OBSTACK, where, length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ obstack_grow (__h, (where), (length)); \ obstack_finish (__h); }) # define obstack_copy0(OBSTACK, where, length) \ __extension__ \ ({ struct obstack *__h = (OBSTACK); \ obstack_grow0 (__h, (where), (length)); \ obstack_finish (__h); }) /* The local variable is named __o1 to avoid a shadowed variable warning when invoked from other obstack macros, typically obstack_free. */ # define obstack_finish(OBSTACK) \ __extension__ \ ({ struct obstack *__o1 = (OBSTACK); \ void *__value = (void *) __o1->object_base; \ if (__o1->next_free == __value) \ __o1->maybe_empty_object = 1; \ __o1->next_free \ = __PTR_ALIGN (__o1->object_base, __o1->next_free, \ __o1->alignment_mask); \ if ((size_t) (__o1->next_free - (char *) __o1->chunk) \ > (size_t) (__o1->chunk_limit - (char *) __o1->chunk)) \ __o1->next_free = __o1->chunk_limit; \ __o1->object_base = __o1->next_free; \ __value; }) # define obstack_free(OBSTACK, OBJ) \ __extension__ \ ({ struct obstack *__o = (OBSTACK); \ void *__obj = (void *) (OBJ); \ if (__obj > (void *) __o->chunk && __obj < (void *) __o->chunk_limit) \ __o->next_free = __o->object_base = (char *) __obj; \ else \ _obstack_free (__o, __obj); }) #else /* not __GNUC__ */ # define obstack_object_size(h) \ ((_OBSTACK_SIZE_T) ((h)->next_free - (h)->object_base)) # define obstack_room(h) \ ((_OBSTACK_SIZE_T) ((h)->chunk_limit - (h)->next_free)) # define obstack_empty_p(h) \ ((h)->chunk->prev == 0 \ && (h)->next_free == __PTR_ALIGN ((char *) (h)->chunk, \ (h)->chunk->contents, \ (h)->alignment_mask)) /* Note that the call to _obstack_newchunk is enclosed in (..., 0) so that we can avoid having void expressions in the arms of the conditional expression. Casting the third operand to void was tried before, but some compilers won't accept it. */ # define obstack_make_room(h, length) \ ((h)->temp.i = (length), \ ((obstack_room (h) < (h)->temp.i) \ ? (_obstack_newchunk (h, (h)->temp.i), 0) : 0), \ (void) 0) # define obstack_grow(h, where, length) \ ((h)->temp.i = (length), \ ((obstack_room (h) < (h)->temp.i) \ ? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0), \ memcpy ((h)->next_free, where, (h)->temp.i), \ (h)->next_free += (h)->temp.i, \ (void) 0) # define obstack_grow0(h, where, length) \ ((h)->temp.i = (length), \ ((obstack_room (h) < (h)->temp.i + 1) \ ? (_obstack_newchunk ((h), (h)->temp.i + 1), 0) : 0), \ memcpy ((h)->next_free, where, (h)->temp.i), \ (h)->next_free += (h)->temp.i, \ *((h)->next_free)++ = 0, \ (void) 0) # define obstack_1grow(h, datum) \ (((obstack_room (h) < 1) \ ? (_obstack_newchunk ((h), 1), 0) : 0), \ obstack_1grow_fast (h, datum)) # define obstack_ptr_grow(h, datum) \ (((obstack_room (h) < sizeof (char *)) \ ? (_obstack_newchunk ((h), sizeof (char *)), 0) : 0), \ obstack_ptr_grow_fast (h, datum)) # define obstack_int_grow(h, datum) \ (((obstack_room (h) < sizeof (int)) \ ? (_obstack_newchunk ((h), sizeof (int)), 0) : 0), \ obstack_int_grow_fast (h, datum)) # define obstack_ptr_grow_fast(h, aptr) \ (((const void **) ((h)->next_free += sizeof (void *)))[-1] = (aptr), \ (void) 0) # define obstack_int_grow_fast(h, aint) \ (((int *) ((h)->next_free += sizeof (int)))[-1] = (aint), \ (void) 0) # define obstack_blank(h, length) \ ((h)->temp.i = (length), \ ((obstack_room (h) < (h)->temp.i) \ ? (_obstack_newchunk ((h), (h)->temp.i), 0) : 0), \ obstack_blank_fast (h, (h)->temp.i)) # define obstack_alloc(h, length) \ (obstack_blank ((h), (length)), obstack_finish ((h))) # define obstack_copy(h, where, length) \ (obstack_grow ((h), (where), (length)), obstack_finish ((h))) # define obstack_copy0(h, where, length) \ (obstack_grow0 ((h), (where), (length)), obstack_finish ((h))) # define obstack_finish(h) \ (((h)->next_free == (h)->object_base \ ? (((h)->maybe_empty_object = 1), 0) \ : 0), \ (h)->temp.p = (h)->object_base, \ (h)->next_free \ = __PTR_ALIGN ((h)->object_base, (h)->next_free, \ (h)->alignment_mask), \ (((size_t) ((h)->next_free - (char *) (h)->chunk) \ > (size_t) ((h)->chunk_limit - (char *) (h)->chunk)) \ ? ((h)->next_free = (h)->chunk_limit) : 0), \ (h)->object_base = (h)->next_free, \ (h)->temp.p) # define obstack_free(h, obj) \ ((h)->temp.p = (void *) (obj), \ (((h)->temp.p > (void *) (h)->chunk \ && (h)->temp.p < (void *) (h)->chunk_limit) \ ? (void) ((h)->next_free = (h)->object_base = (char *) (h)->temp.p) \ : _obstack_free ((h), (h)->temp.p))) #endif /* not __GNUC__ */ #ifdef __cplusplus } /* C++ */ #endif #endif /* _OBSTACK_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/tempname.h�������������������������������������������������������������������������0000644�0000000�0000000�00000005313�14226564451�012644� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a temporary file or directory. Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* header written by Eric Blake */ #ifndef GL_TEMPNAME_H # define GL_TEMPNAME_H # include <stdio.h> # ifdef __GT_FILE # define GT_FILE __GT_FILE # define GT_DIR __GT_DIR # define GT_NOCREATE __GT_NOCREATE # else # define GT_FILE 0 # define GT_DIR 1 # define GT_NOCREATE 2 # endif #ifdef __cplusplus extern "C" { #endif /* Generate a temporary file name based on TMPL. TMPL must match the rules for mk[s]temp (i.e. end in "XXXXXX", possibly with a suffix). The name constructed does not exist at the time of the call to gen_tempname. TMPL is overwritten with the result. KIND may be one of: GT_NOCREATE: simply verify that the name does not exist at the time of the call. GT_FILE: create a large file using open(O_CREAT|O_EXCL) and return a read-write fd. The file is mode 0600. GT_DIR: create a directory, which will be mode 0700. We use a clever algorithm to get hard-to-predict names. */ extern int gen_tempname (char *tmpl, int suffixlen, int flags, int kind); /* Similar, except X_SUFFIX_LEN gives the number of Xs. */ extern int gen_tempname_len (char *tmpl, int suffixlen, int flags, int kind, size_t x_suffix_len); /* Similar to gen_tempname, but TRYFUNC is called for each temporary name to try. If TRYFUNC returns a non-negative number, TRY_GEN_TEMPNAME returns with this value. Otherwise, if errno is set to EEXIST, another name is tried, or else TRY_GEN_TEMPNAME returns -1. */ extern int try_tempname (char *tmpl, int suffixlen, void *args, int (*tryfunc) (char *, void *)); /* Similar, except X_SUFFIX_LEN gives the number of Xs. */ extern int try_tempname_len (char *tmpl, int suffixlen, void *args, int (*tryfunc) (char *, void *), size_t x_suffix_len); #ifdef __cplusplus } #endif #endif /* GL_TEMPNAME_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stat-w32.h�������������������������������������������������������������������������0000644�0000000�0000000�00000003107�14226564451�012421� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Core of implementation of fstat and stat for native Windows. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _STAT_W32_H #define _STAT_W32_H 1 /* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ #if _GL_WINDOWS_STAT_TIMESPEC extern struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft); #else extern time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft); #endif /* Fill *BUF with information about the file designated by H. PATH is the file name, if known, otherwise NULL. Return 0 if successful, or -1 with errno set upon failure. */ extern int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf); /* Bitmasks for st_mode. */ #define S_IREAD_UGO (_S_IREAD | (_S_IREAD >> 3) | (_S_IREAD >> 6)) #define S_IWRITE_UGO (_S_IWRITE | (_S_IWRITE >> 3) | (_S_IWRITE >> 6)) #define S_IEXEC_UGO (_S_IEXEC | (_S_IEXEC >> 3) | (_S_IEXEC >> 6)) #endif /* _STAT_W32_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/msvc-nothrow.h���������������������������������������������������������������������0000644�0000000�0000000�00000003023�14226564450�013477� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _MSVC_NOTHROW_H #define _MSVC_NOTHROW_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines wrappers that turn such an invalid parameter notification into an error code. */ #if defined _WIN32 && ! defined __CYGWIN__ /* Get original declaration of _get_osfhandle. */ # include <io.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Override _get_osfhandle. */ extern intptr_t _gl_nothrow_get_osfhandle (int fd); # define _get_osfhandle _gl_nothrow_get_osfhandle # endif #endif #endif /* _MSVC_NOTHROW_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/asnprintf.c������������������������������������������������������������������������0000644�0000000�0000000�00000002110�14226564447�013032� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "vasnprintf.h" #include <stdarg.h> char * asnprintf (char *resultbuf, size_t *lengthp, const char *format, ...) { va_list args; char *result; va_start (args, format); result = vasnprintf (resultbuf, lengthp, format, args); va_end (args); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/strdup.c���������������������������������������������������������������������������0000644�0000000�0000000�00000002532�14226564451�012352� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991, 1996-1998, 2002-2004, 2006-2007, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif /* Get specification. */ #include <string.h> #include <stdlib.h> #undef __strdup #ifdef _LIBC # undef strdup #endif #ifndef weak_alias # define __strdup strdup #endif /* Duplicate S, returning an identical malloc'd string. */ char * __strdup (const char *s) { size_t len = strlen (s) + 1; void *new = malloc (len); if (new == NULL) return NULL; return (char *) memcpy (new, s, len); } #ifdef libc_hidden_def libc_hidden_def (__strdup) #endif #ifdef weak_alias weak_alias (__strdup, strdup) #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stat.c�����������������������������������������������������������������������������0000644�0000000�0000000�00000032765�14226564451�012017� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around platform bugs in stat. Copyright (C) 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake and Bruno Haible. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_stat doesn't recurse to rpl_stat. */ #define __need_system_sys_stat_h #include <config.h> /* Get the original definition of stat. It might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> #undef __need_system_sys_stat_h #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE #endif #if !defined WINDOWS_NATIVE static int orig_stat (const char *filename, struct stat *buf) { return stat (filename, buf); } #endif /* Specification. */ #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include "stat-time.h" #include <errno.h> #include <limits.h> #include <stdbool.h> #include <string.h> #include "filename.h" #include "malloca.h" #include "verify.h" #ifdef WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> # include "stat-w32.h" /* Don't assume that UNICODE is not defined. */ # undef WIN32_FIND_DATA # define WIN32_FIND_DATA WIN32_FIND_DATAA # undef CreateFile # define CreateFile CreateFileA # undef FindFirstFile # define FindFirstFile FindFirstFileA #endif #ifdef WINDOWS_NATIVE /* Return TRUE if the given file name denotes an UNC root. */ static BOOL is_unc_root (const char *rname) { /* Test whether it has the syntax '\\server\share'. */ if (ISSLASH (rname[0]) && ISSLASH (rname[1])) { /* It starts with two slashes. Find the next slash. */ const char *p = rname + 2; const char *q = p; while (*q != '\0' && !ISSLASH (*q)) q++; if (q > p && *q != '\0') { /* Found the next slash at q. */ q++; const char *r = q; while (*r != '\0' && !ISSLASH (*r)) r++; if (r > q && *r == '\0') return TRUE; } } return FALSE; } #endif /* Store information about NAME into ST. Work around bugs with trailing slashes. Mingw has other bugs (such as st_ino always being 0 on success) which this wrapper does not work around. But at least this implementation provides the ability to emulate fchdir correctly. */ int rpl_stat (char const *name, struct stat *buf) { #ifdef WINDOWS_NATIVE /* Fill the fields ourselves, because the original stat function returns values for st_atime, st_mtime, st_ctime that depend on the current time zone. See <https://lists.gnu.org/r/bug-gnulib/2017-04/msg00134.html> */ /* XXX Should we convert to wchar_t* and prepend '\\?\', in order to work around length limitations <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file> ? */ /* POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13> specifies: "More than two leading <slash> characters shall be treated as a single <slash> character." */ if (ISSLASH (name[0]) && ISSLASH (name[1]) && ISSLASH (name[2])) { name += 2; while (ISSLASH (name[1])) name++; } size_t len = strlen (name); size_t drive_prefix_len = (HAS_DEVICE (name) ? 2 : 0); /* Remove trailing slashes (except the very first one, at position drive_prefix_len), but remember their presence. */ size_t rlen; bool check_dir = false; rlen = len; while (rlen > drive_prefix_len && ISSLASH (name[rlen-1])) { check_dir = true; if (rlen == drive_prefix_len + 1) break; rlen--; } /* Handle '' and 'C:'. */ if (!check_dir && rlen == drive_prefix_len) { errno = ENOENT; return -1; } /* Handle '\\'. */ if (rlen == 1 && ISSLASH (name[0]) && len >= 2) { errno = ENOENT; return -1; } const char *rname; char *malloca_rname; if (rlen == len) { rname = name; malloca_rname = NULL; } else { malloca_rname = malloca (rlen + 1); if (malloca_rname == NULL) { errno = ENOMEM; return -1; } memcpy (malloca_rname, name, rlen); malloca_rname[rlen] = '\0'; rname = malloca_rname; } /* There are two ways to get at the requested information: - by scanning the parent directory and examining the relevant directory entry, - by opening the file directly. The first approach fails for root directories (e.g. 'C:\') and UNC root directories (e.g. '\\server\share'). The second approach fails for some system files (e.g. 'C:\pagefile.sys' and 'C:\hiberfil.sys'): ERROR_SHARING_VIOLATION. The second approach gives more information (in particular, correct st_dev, st_ino, st_nlink fields). So we use the second approach and, as a fallback except for root and UNC root directories, also the first approach. */ { int ret; { /* Approach based on the file. */ /* Open a handle to the file. CreateFile <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-createfilea> <https://docs.microsoft.com/en-us/windows/desktop/FileIO/creating-and-opening-files> */ HANDLE h = CreateFile (rname, FILE_READ_ATTRIBUTES, FILE_SHARE_READ | FILE_SHARE_WRITE | FILE_SHARE_DELETE, NULL, OPEN_EXISTING, /* FILE_FLAG_POSIX_SEMANTICS (treat file names that differ only in case as different) makes sense only when applied to *all* filesystem operations. */ FILE_FLAG_BACKUP_SEMANTICS /* | FILE_FLAG_POSIX_SEMANTICS */, NULL); if (h != INVALID_HANDLE_VALUE) { ret = _gl_fstat_by_handle (h, rname, buf); CloseHandle (h); goto done; } } /* Test for root and UNC root directories. */ if ((rlen == drive_prefix_len + 1 && ISSLASH (rname[drive_prefix_len])) || is_unc_root (rname)) goto failed; /* Fallback. */ { /* Approach based on the directory entry. */ if (strchr (rname, '?') != NULL || strchr (rname, '*') != NULL) { /* Other Windows API functions would fail with error ERROR_INVALID_NAME. */ if (malloca_rname != NULL) freea (malloca_rname); errno = ENOENT; return -1; } /* Get the details about the directory entry. This can be done through FindFirstFile <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfilea> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa> or through FindFirstFileEx with argument FindExInfoBasic <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-findfirstfileexa> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ne-minwinbase-findex_info_levels> <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-_win32_find_dataa> */ WIN32_FIND_DATA info; HANDLE h = FindFirstFile (rname, &info); if (h == INVALID_HANDLE_VALUE) goto failed; /* Test for error conditions before starting to fill *buf. */ if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) { FindClose (h); if (malloca_rname != NULL) freea (malloca_rname); errno = EOVERFLOW; return -1; } # if _GL_WINDOWS_STAT_INODES buf->st_dev = 0; # if _GL_WINDOWS_STAT_INODES == 2 buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; # else /* _GL_WINDOWS_STAT_INODES == 1 */ buf->st_ino = 0; # endif # else /* st_ino is not wide enough for identifying a file on a device. Without st_ino, st_dev is pointless. */ buf->st_dev = 0; buf->st_ino = 0; # endif /* st_mode. */ unsigned int mode = /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) | S_IREAD_UGO | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { /* Determine whether the file is executable by looking at the file name suffix. */ if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) { const char *last_dot = NULL; const char *p; for (p = info.cFileName; *p != '\0'; p++) if (*p == '.') last_dot = p; if (last_dot != NULL) { const char *suffix = last_dot + 1; if (_stricmp (suffix, "exe") == 0 || _stricmp (suffix, "bat") == 0 || _stricmp (suffix, "cmd") == 0 || _stricmp (suffix, "com") == 0) mode |= S_IEXEC_UGO; } } } buf->st_mode = mode; /* st_nlink. Ignore hard links here. */ buf->st_nlink = 1; /* There's no easy way to map the Windows SID concept to an integer. */ buf->st_uid = 0; buf->st_gid = 0; /* st_rdev is irrelevant for normal files and directories. */ buf->st_rdev = 0; /* st_size. */ if (sizeof (buf->st_size) <= 4) /* Range check already done above. */ buf->st_size = info.nFileSizeLow; else buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; /* st_atime, st_mtime, st_ctime. */ # if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); # else buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); # endif FindClose (h); ret = 0; } done: if (ret >= 0 && check_dir && !S_ISDIR (buf->st_mode)) { errno = ENOTDIR; ret = -1; } if (malloca_rname != NULL) { int saved_errno = errno; freea (malloca_rname); errno = saved_errno; } return ret; } failed: { DWORD error = GetLastError (); #if 0 fprintf (stderr, "rpl_stat error 0x%x\n", (unsigned int) error); #endif if (malloca_rname != NULL) freea (malloca_rname); switch (error) { /* Some of these errors probably cannot happen with the specific flags that we pass to CreateFile. But who knows... */ case ERROR_FILE_NOT_FOUND: /* The last component of rname does not exist. */ case ERROR_PATH_NOT_FOUND: /* Some directory component in rname does not exist. */ case ERROR_BAD_PATHNAME: /* rname is such as '\\server'. */ case ERROR_BAD_NET_NAME: /* rname is such as '\\server\nonexistentshare'. */ case ERROR_INVALID_NAME: /* rname contains wildcards, misplaced colon, etc. */ case ERROR_DIRECTORY: errno = ENOENT; break; case ERROR_ACCESS_DENIED: /* rname is such as 'C:\System Volume Information\foo'. */ case ERROR_SHARING_VIOLATION: /* rname is such as 'C:\pagefile.sys' (second approach only). */ /* XXX map to EACCES or EPERM? */ errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_PROTECT: errno = EROFS; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: errno = ENAMETOOLONG; break; case ERROR_DELETE_PENDING: /* XXX map to EACCES or EPERM? */ errno = EPERM; break; default: errno = EINVAL; break; } return -1; } #else int result = orig_stat (name, buf); if (result == 0) { # if REPLACE_FUNC_STAT_FILE /* Solaris 9 mistakenly succeeds when given a non-directory with a trailing slash. */ if (!S_ISDIR (buf->st_mode)) { size_t len = strlen (name); if (ISSLASH (name[len - 1])) { errno = ENOTDIR; return -1; } } # endif /* REPLACE_FUNC_STAT_FILE */ result = stat_time_normalize (result, buf); } return result; #endif } �����������recutils-1.9/lib/ftello.c���������������������������������������������������������������������������0000644�0000000�0000000�00000010114�14226564447�012316� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An ftello() function that works around platform bugs. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> #include <errno.h> #include "intprops.h" /* Get lseek. */ #include <unistd.h> #include "stdio-impl.h" off_t ftello (FILE *fp) #undef ftello #if !HAVE_FTELLO # undef ftell # define ftello ftell #endif #if _GL_WINDOWS_64_BIT_OFF_T # undef ftello # if HAVE__FTELLI64 /* msvc, mingw64 */ # define ftello _ftelli64 # else /* mingw */ # define ftello ftello64 # endif #endif { #if FTELLO_BROKEN_AFTER_UNGETC /* macOS >= 10.15 */ /* The system's ftello() is completely broken, because it calls __sflush, which makes side effects on the stream. */ /* Handle non-seekable files first. */ if (fp->_file < 0 || fp->_seek == NULL) { errno = ESPIPE; return -1; } /* Determine the current offset, ignoring buffered and pushed-back bytes. */ off_t pos; if (fp->_flags & __SOFF) pos = fp->_offset; else { pos = fp->_seek (fp->_cookie, 0, SEEK_CUR); if (pos < 0) return -1; if (fp->_flags & __SOPT) { fp->_offset = pos; fp->_flags |= __SOFF; } } if (fp->_flags & __SRD) { /* Now consider buffered and pushed-back bytes from ungetc. */ if (fp->_ub._base != NULL) /* Considering the buffered bytes, we are at position pos - fp->_ur. Considering also the pushed-back bytes, we are at position pos - fp->_ur - fp->_r. */ pos = pos - fp->_ur - fp->_r; else /* Considering the buffered bytes, we are at position pos - fp->_r. */ pos = pos - fp->_r; if (pos < 0) { errno = EIO; return -1; } } else if ((fp->_flags & __SWR) && fp->_p != NULL) { /* Consider the buffered bytes. */ off_t buffered = fp->_p - fp->_bf._base; /* Compute pos + buffered, with overflow check. */ off_t sum; if (! INT_ADD_OK (pos, buffered, &sum)) { errno = EOVERFLOW; return -1; } pos = sum; } return pos; #else # if LSEEK_PIPE_BROKEN /* mingw gives bogus answers rather than failure on non-seekable files. */ if (lseek (fileno (fp), 0, SEEK_CUR) == -1) return -1; # endif # if FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE /* Solaris */ /* The Solaris stdio leaves the _IOREAD flag set after reading from a file reaches EOF and the program then starts writing to the file. ftello gets confused by this. */ if (fp_->_flag & _IOWRT) { off_t pos; /* Call ftello nevertheless, for the side effects that it does on fp. */ ftello (fp); /* Compute the file position ourselves. */ pos = lseek (fileno (fp), (off_t) 0, SEEK_CUR); if (pos >= 0) { if ((fp_->_flag & _IONBF) == 0 && fp_->_base != NULL) pos += fp_->_ptr - fp_->_base; } return pos; } # endif # if defined __SL64 && defined __SCLE /* Cygwin */ if ((fp->_flags & __SL64) == 0) { /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit mode; but has an ftello that requires 64-bit mode. */ FILE *tmp = fopen ("/dev/null", "r"); if (!tmp) return -1; fp->_flags |= __SL64; fp->_seek64 = tmp->_seek64; fclose (tmp); } # endif return ftello (fp); #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/xsize.c����������������������������������������������������������������������������0000644�0000000�0000000�00000001504�14226564451�012171� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Checked size_t computations. Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define XSIZE_INLINE _GL_EXTERN_INLINE #include "xsize.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/close-stream.c���������������������������������������������������������������������0000644�0000000�0000000�00000005747�14226564447�013447� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close a stream, with nicer error checking than fclose's. Copyright (C) 1998-2002, 2004, 2006-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "close-stream.h" #include <errno.h> #include <stdbool.h> #include "fpending.h" #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif /* Close STREAM. Return 0 if successful, EOF (setting errno) otherwise. A failure might set errno to 0 if the error number cannot be determined. A failure with errno set to EPIPE may or may not indicate an error situation worth signaling to the user. See the documentation of the close_stdout_set_ignore_EPIPE function for details. If a program writes *anything* to STREAM, that program should close STREAM and make sure that it succeeds before exiting. Otherwise, suppose that you go to the extreme of checking the return status of every function that does an explicit write to STREAM. The last printf can succeed in writing to the internal stream buffer, and yet the fclose(STREAM) could still fail (due e.g., to a disk full error) when it tries to write out that buffered data. Thus, you would be left with an incomplete output file and the offending program would exit successfully. Even calling fflush is not always sufficient, since some file systems (NFS and CODA) buffer written/flushed data until an actual close call. Besides, it's wasteful to check the return value from every call that writes to STREAM -- just let the internal stream state record the failure. That's what the ferror test is checking below. */ int close_stream (FILE *stream) { const bool some_pending = (__fpending (stream) != 0); const bool prev_fail = (ferror (stream) != 0); const bool fclose_fail = (fclose (stream) != 0); /* Return an error indication if there was a previous failure or if fclose failed, with one exception: ignore an fclose failure if there was no previous error, no data remains to be flushed, and fclose failed with EBADF. That can happen when a program like cp is invoked like this 'cp a b >&-' (i.e., with standard output closed) and doesn't generate any output (hence no previous error and nothing to be flushed). */ if (prev_fail || (fclose_fail && (some_pending || errno != EBADF))) { if (! fclose_fail) errno = 0; return EOF; } return 0; } �������������������������recutils-1.9/lib/access.c���������������������������������������������������������������������������0000644�0000000�0000000�00000001744�14226564446�012302� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test the access rights of a file. Copyright (C) 2019-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <fcntl.h> #include <io.h> int access (const char *file, int mode) { if ((mode & X_OK) != 0) mode = (mode & ~X_OK) | R_OK; return _access (file, mode); } ����������������������������recutils-1.9/lib/unlink.c���������������������������������������������������������������������������0000644�0000000�0000000�00000006644�14226564451�012341� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around unlink bugs. Copyright (C) 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include <sys/stat.h> #include "filename.h" #undef unlink #if defined _WIN32 && !defined __CYGWIN__ # define unlink _unlink #endif /* Remove file NAME. Return 0 if successful, -1 if not. */ int rpl_unlink (char const *name) { /* Work around Solaris 9 bug where unlink("file/") succeeds. */ size_t len = strlen (name); int result = 0; if (len && ISSLASH (name[len - 1])) { /* We can't unlink(2) something if it doesn't exist. If it does exist, then it resolved to a directory, due to the trailing slash, and POSIX requires that the unlink attempt to remove that directory (which would leave the symlink dangling). Unfortunately, Solaris 9 is one of the platforms where the root user can unlink directories, and we don't want to cripple this behavior on real directories, even if it is seldom needed (at any rate, it's nicer to let coreutils' unlink(1) give the correct errno for non-root users). But we don't know whether name was an actual directory, or a symlink to a directory; and due to the bug of ignoring trailing slash, Solaris 9 would end up successfully unlinking the symlink instead of the directory. Technically, we could use realpath to find the canonical directory name to attempt deletion on. But that is a lot of work for a corner case; so we instead just use an lstat on the shortened name, and reject symlinks with trailing slashes. The root user of unlink(1) will just have to live with the rule that they can't delete a directory via a symlink. */ struct stat st; result = lstat (name, &st); if (result == 0 || errno == EOVERFLOW) { /* Trailing NUL will overwrite the trailing slash. */ char *short_name = malloc (len); if (!short_name) return -1; memcpy (short_name, name, len); while (len && ISSLASH (short_name[len - 1])) short_name[--len] = '\0'; if (len && (lstat (short_name, &st) || S_ISLNK (st.st_mode))) { free (short_name); errno = EPERM; return -1; } free (short_name); result = 0; } } if (!result) { #if UNLINK_PARENT_BUG if (len >= 2 && name[len - 1] == '.' && name[len - 2] == '.' && (len == 2 || ISSLASH (name[len - 3]))) { errno = EISDIR; /* could also use EPERM */ return -1; } #endif result = unlink (name); } return result; } ��������������������������������������������������������������������������������������������recutils-1.9/lib/root-uid.h�������������������������������������������������������������������������0000644�0000000�0000000�00000002003�14226564450�012570� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* The user ID that always has appropriate privileges in the POSIX sense. Copyright 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef ROOT_UID_H_ #define ROOT_UID_H_ /* The user ID that always has appropriate privileges in the POSIX sense. */ #ifdef __TANDEM # define ROOT_UID 65535 #else # define ROOT_UID 0 #endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/signal.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000036303�14226564451�012723� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <signal.h>. Copyright (C) 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_sig_atomic_t || defined __need_sigset_t || defined _GL_ALREADY_INCLUDING_SIGNAL_H || (defined _SIGNAL_H && !defined __SIZEOF_PTHREAD_MUTEX_T) /* Special invocation convention: - Inside glibc header files. - On glibc systems we have a sequence of nested includes <signal.h> -> <ucontext.h> -> <signal.h>. In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. - On glibc systems with GCC 4.3 we have a sequence of nested includes <csignal> -> </usr/include/signal.h> -> <sys/ucontext.h> -> <signal.h>. In this situation, some of the functions are not yet declared, therefore we cannot provide the C++ aliases. */ # @INCLUDE_NEXT@ @NEXT_SIGNAL_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SIGNAL_H #define _GL_ALREADY_INCLUDING_SIGNAL_H /* Define pid_t, uid_t. Also, mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. On Solaris 10, <signal.h> includes <sys/types.h>, which eventually includes us; so include <sys/types.h> now, before the second inclusion guard. */ #include <sys/types.h> /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_SIGNAL_H@ #undef _GL_ALREADY_INCLUDING_SIGNAL_H #ifndef _@GUARD_PREFIX@_SIGNAL_H #define _@GUARD_PREFIX@_SIGNAL_H /* Mac OS X 10.3, FreeBSD 6.4, OpenBSD 3.8, OSF/1 4.0, Solaris 2.6, Android, OS/2 kLIBC declare pthread_sigmask in <pthread.h>, not in <signal.h>. But avoid namespace pollution on glibc systems.*/ #if (@GNULIB_PTHREAD_SIGMASK@ || defined GNULIB_POSIXCHECK) \ && ((defined __APPLE__ && defined __MACH__) \ || defined __FreeBSD__ || defined __OpenBSD__ || defined __osf__ \ || defined __sun || defined __ANDROID__ || defined __KLIBC__) \ && ! defined __GLIBC__ # include <pthread.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* On AIX, sig_atomic_t already includes volatile. C99 requires that 'volatile sig_atomic_t' ignore the extra modifier, but C89 did not. Hence, redefine this to a non-volatile type as needed. */ #if ! @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ # if !GNULIB_defined_sig_atomic_t typedef int rpl_sig_atomic_t; # undef sig_atomic_t # define sig_atomic_t rpl_sig_atomic_t # define GNULIB_defined_sig_atomic_t 1 # endif #endif /* A set or mask of signals. */ #if !@HAVE_SIGSET_T@ # if !GNULIB_defined_sigset_t typedef unsigned int sigset_t; # define GNULIB_defined_sigset_t 1 # endif #endif /* Define sighandler_t, the type of signal handlers. A GNU extension. */ #if !@HAVE_SIGHANDLER_T@ # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_sighandler_t typedef void (*sighandler_t) (int); # define GNULIB_defined_sighandler_t 1 # endif # ifdef __cplusplus } # endif #endif #if @GNULIB_SIGNAL_H_SIGPIPE@ # ifndef SIGPIPE /* Define SIGPIPE to a value that does not overlap with other signals. */ # define SIGPIPE 13 # define GNULIB_defined_SIGPIPE 1 /* To actually use SIGPIPE, you also need the gnulib modules 'sigprocmask', 'write', 'stdio'. */ # endif #endif /* Maximum signal number + 1. */ #ifndef NSIG # if defined __TANDEM # define NSIG 32 # endif #endif #if @GNULIB_PTHREAD_SIGMASK@ # if @REPLACE_PTHREAD_SIGMASK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pthread_sigmask # define pthread_sigmask rpl_pthread_sigmask # endif _GL_FUNCDECL_RPL (pthread_sigmask, int, (int how, const sigset_t *restrict new_mask, sigset_t *restrict old_mask)); _GL_CXXALIAS_RPL (pthread_sigmask, int, (int how, const sigset_t *restrict new_mask, sigset_t *restrict old_mask)); # else # if !(@HAVE_PTHREAD_SIGMASK@ || defined pthread_sigmask) _GL_FUNCDECL_SYS (pthread_sigmask, int, (int how, const sigset_t *restrict new_mask, sigset_t *restrict old_mask)); # endif _GL_CXXALIAS_SYS (pthread_sigmask, int, (int how, const sigset_t *restrict new_mask, sigset_t *restrict old_mask)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (pthread_sigmask); # endif #elif defined GNULIB_POSIXCHECK # undef pthread_sigmask # if HAVE_RAW_DECL_PTHREAD_SIGMASK _GL_WARN_ON_USE (pthread_sigmask, "pthread_sigmask is not portable - " "use gnulib module pthread_sigmask for portability"); # endif #endif #if @GNULIB_RAISE@ # if @REPLACE_RAISE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef raise # define raise rpl_raise # endif _GL_FUNCDECL_RPL (raise, int, (int sig)); _GL_CXXALIAS_RPL (raise, int, (int sig)); # else # if !@HAVE_RAISE@ _GL_FUNCDECL_SYS (raise, int, (int sig)); # endif _GL_CXXALIAS_SYS (raise, int, (int sig)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (raise); # endif #elif defined GNULIB_POSIXCHECK # undef raise /* Assume raise is always declared. */ _GL_WARN_ON_USE (raise, "raise can crash on native Windows - " "use gnulib module raise for portability"); #endif #if @GNULIB_SIGPROCMASK@ # if !@HAVE_POSIX_SIGNALBLOCKING@ # ifndef GNULIB_defined_signal_blocking # define GNULIB_defined_signal_blocking 1 # endif /* Maximum signal number + 1. */ # ifndef NSIG # define NSIG 32 # endif /* This code supports only 32 signals. */ # if !GNULIB_defined_verify_NSIG_constraint typedef int verify_NSIG_constraint[NSIG <= 32 ? 1 : -1]; # define GNULIB_defined_verify_NSIG_constraint 1 # endif # endif /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && (defined __i386__ || defined __x86_64__)) # undef sigaddset # undef sigdelset # undef sigemptyset # undef sigfillset # undef sigismember #endif /* Test whether a given signal is contained in a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigismember # endif # else _GL_FUNCDECL_SYS (sigismember, int, (const sigset_t *set, int sig) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigismember, int, (const sigset_t *set, int sig)); _GL_CXXALIASWARN (sigismember); /* Initialize a signal set to the empty set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigemptyset # endif # else _GL_FUNCDECL_SYS (sigemptyset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigemptyset, int, (sigset_t *set)); _GL_CXXALIASWARN (sigemptyset); /* Add a signal to a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigaddset # endif # else _GL_FUNCDECL_SYS (sigaddset, int, (sigset_t *set, int sig) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigaddset, int, (sigset_t *set, int sig)); _GL_CXXALIASWARN (sigaddset); /* Remove a signal from a signal set. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigdelset # endif # else _GL_FUNCDECL_SYS (sigdelset, int, (sigset_t *set, int sig) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigdelset, int, (sigset_t *set, int sig)); _GL_CXXALIASWARN (sigdelset); /* Fill a signal set with all possible signals. */ # if @HAVE_POSIX_SIGNALBLOCKING@ /* This function is defined as a macro on Mac OS X. */ # if defined __cplusplus && defined GNULIB_NAMESPACE # undef sigfillset # endif # else _GL_FUNCDECL_SYS (sigfillset, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigfillset, int, (sigset_t *set)); _GL_CXXALIASWARN (sigfillset); /* Return the set of those blocked signals that are pending. */ # if !@HAVE_POSIX_SIGNALBLOCKING@ _GL_FUNCDECL_SYS (sigpending, int, (sigset_t *set) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (sigpending, int, (sigset_t *set)); _GL_CXXALIASWARN (sigpending); /* If OLD_SET is not NULL, put the current set of blocked signals in *OLD_SET. Then, if SET is not NULL, affect the current set of blocked signals by combining it with *SET as indicated in OPERATION. In this implementation, you are not allowed to change a signal handler while the signal is blocked. */ # if !@HAVE_POSIX_SIGNALBLOCKING@ # define SIG_BLOCK 0 /* blocked_set = blocked_set | *set; */ # define SIG_SETMASK 1 /* blocked_set = *set; */ # define SIG_UNBLOCK 2 /* blocked_set = blocked_set & ~*set; */ _GL_FUNCDECL_SYS (sigprocmask, int, (int operation, const sigset_t *restrict set, sigset_t *restrict old_set)); # endif _GL_CXXALIAS_SYS (sigprocmask, int, (int operation, const sigset_t *restrict set, sigset_t *restrict old_set)); _GL_CXXALIASWARN (sigprocmask); /* Install the handler FUNC for signal SIG, and return the previous handler. */ # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_function_taking_int_returning_void_t typedef void (*_gl_function_taking_int_returning_void_t) (int); # define GNULIB_defined_function_taking_int_returning_void_t 1 # endif # ifdef __cplusplus } # endif # if !@HAVE_POSIX_SIGNALBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define signal rpl_signal # endif _GL_FUNCDECL_RPL (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); _GL_CXXALIAS_RPL (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # else /* On OpenBSD, the declaration of 'signal' may not be present at this point, because it occurs in <sys/signal.h>, not <signal.h> directly. */ # if defined __OpenBSD__ _GL_FUNCDECL_SYS (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # endif _GL_CXXALIAS_SYS (signal, _gl_function_taking_int_returning_void_t, (int sig, _gl_function_taking_int_returning_void_t func)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (signal); # endif # if !@HAVE_POSIX_SIGNALBLOCKING@ && GNULIB_defined_SIGPIPE /* Raise signal SIGPIPE. */ _GL_EXTERN_C int _gl_raise_SIGPIPE (void); # endif #elif defined GNULIB_POSIXCHECK # undef sigaddset # if HAVE_RAW_DECL_SIGADDSET _GL_WARN_ON_USE (sigaddset, "sigaddset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigdelset # if HAVE_RAW_DECL_SIGDELSET _GL_WARN_ON_USE (sigdelset, "sigdelset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigemptyset # if HAVE_RAW_DECL_SIGEMPTYSET _GL_WARN_ON_USE (sigemptyset, "sigemptyset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigfillset # if HAVE_RAW_DECL_SIGFILLSET _GL_WARN_ON_USE (sigfillset, "sigfillset is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigismember # if HAVE_RAW_DECL_SIGISMEMBER _GL_WARN_ON_USE (sigismember, "sigismember is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigpending # if HAVE_RAW_DECL_SIGPENDING _GL_WARN_ON_USE (sigpending, "sigpending is unportable - " "use the gnulib module sigprocmask for portability"); # endif # undef sigprocmask # if HAVE_RAW_DECL_SIGPROCMASK _GL_WARN_ON_USE (sigprocmask, "sigprocmask is unportable - " "use the gnulib module sigprocmask for portability"); # endif #endif /* @GNULIB_SIGPROCMASK@ */ #if @GNULIB_SIGACTION@ # if !@HAVE_SIGACTION@ # if !@HAVE_SIGINFO_T@ # if !GNULIB_defined_siginfo_types /* Present to allow compilation, but unsupported by gnulib. */ union sigval { int sival_int; void *sival_ptr; }; /* Present to allow compilation, but unsupported by gnulib. */ struct siginfo_t { int si_signo; int si_code; int si_errno; pid_t si_pid; uid_t si_uid; void *si_addr; int si_status; long si_band; union sigval si_value; }; typedef struct siginfo_t siginfo_t; # define GNULIB_defined_siginfo_types 1 # endif # endif /* !@HAVE_SIGINFO_T@ */ /* We assume that platforms which lack the sigaction() function also lack the 'struct sigaction' type, and vice versa. */ # if !GNULIB_defined_struct_sigaction struct sigaction { union { void (*_sa_handler) (int); /* Present to allow compilation, but unsupported by gnulib. POSIX says that implementations may, but not must, make sa_sigaction overlap with sa_handler, but we know of no implementation where they do not overlap. */ void (*_sa_sigaction) (int, siginfo_t *, void *); } _sa_func; sigset_t sa_mask; /* Not all POSIX flags are supported. */ int sa_flags; }; # define sa_handler _sa_func._sa_handler # define sa_sigaction _sa_func._sa_sigaction /* Unsupported flags are not present. */ # define SA_RESETHAND 1 # define SA_NODEFER 2 # define SA_RESTART 4 # define GNULIB_defined_struct_sigaction 1 # endif _GL_FUNCDECL_SYS (sigaction, int, (int, const struct sigaction *restrict, struct sigaction *restrict)); # elif !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ # define sa_sigaction sa_handler # endif /* !@HAVE_SIGACTION@, !@HAVE_STRUCT_SIGACTION_SA_SIGACTION@ */ _GL_CXXALIAS_SYS (sigaction, int, (int, const struct sigaction *restrict, struct sigaction *restrict)); _GL_CXXALIASWARN (sigaction); #elif defined GNULIB_POSIXCHECK # undef sigaction # if HAVE_RAW_DECL_SIGACTION _GL_WARN_ON_USE (sigaction, "sigaction is unportable - " "use the gnulib module sigaction for portability"); # endif #endif /* Some systems don't have SA_NODEFER. */ #ifndef SA_NODEFER # define SA_NODEFER 0 #endif #endif /* _@GUARD_PREFIX@_SIGNAL_H */ #endif /* _@GUARD_PREFIX@_SIGNAL_H */ #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/string.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000137733�14226564451�012765� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <string.h>. Copyright (C) 1995-1996, 2001-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_STRING_H /* Special invocation convention: - On OS X/NetBSD we have a sequence of nested includes <string.h> -> <strings.h> -> "string.h" In this situation system _chk variants due to -D_FORTIFY_SOURCE might be used after any replacements defined here. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STRING_H #define _GL_ALREADY_INCLUDING_STRING_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STRING_H@ #undef _GL_ALREADY_INCLUDING_STRING_H #ifndef _@GUARD_PREFIX@_STRING_H #define _@GUARD_PREFIX@_STRING_H /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* MirBSD defines mbslen as a macro. */ #if @GNULIB_MBSLEN@ && defined __MirBSD__ # include <wchar.h> #endif /* NetBSD 5.0 declares strsignal in <unistd.h>, not in <string.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_STRSIGNAL@ || defined GNULIB_POSIXCHECK) && defined __NetBSD__ \ && ! defined __GLIBC__ # include <unistd.h> #endif /* AIX 7.2 declares ffsl and ffsll in <strings.h>, not in <string.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if ((@GNULIB_FFSL@ || @GNULIB_FFSLL@ || defined GNULIB_POSIXCHECK) \ && defined _AIX) \ && ! defined __GLIBC__ # include <strings.h> #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have been included yet. */ #if @GNULIB_FREE_POSIX@ # if (@REPLACE_FREE@ && !defined free \ && !(defined __cplusplus && defined GNULIB_NAMESPACE)) /* We can't do '#define free rpl_free' here. */ _GL_EXTERN_C void rpl_free (void *); # undef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1) # else # if defined _MSC_VER _GL_EXTERN_C void __cdecl free (void *); # else # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void free (void *) throw (); # else _GL_EXTERN_C void free (void *); # endif # endif # endif #else # if defined _MSC_VER _GL_EXTERN_C void __cdecl free (void *); # else # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void free (void *) throw (); # else _GL_EXTERN_C void free (void *); # endif # endif #endif /* Clear a block of memory. The compiler will not delete a call to this function, even if the block is dead after the call. */ #if @GNULIB_EXPLICIT_BZERO@ # if ! @HAVE_EXPLICIT_BZERO@ _GL_FUNCDECL_SYS (explicit_bzero, void, (void *__dest, size_t __n) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (explicit_bzero, void, (void *__dest, size_t __n)); _GL_CXXALIASWARN (explicit_bzero); #elif defined GNULIB_POSIXCHECK # undef explicit_bzero # if HAVE_RAW_DECL_EXPLICIT_BZERO _GL_WARN_ON_USE (explicit_bzero, "explicit_bzero is unportable - " "use gnulib module explicit_bzero for portability"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSL@ # if !@HAVE_FFSL@ _GL_FUNCDECL_SYS (ffsl, int, (long int i)); # endif _GL_CXXALIAS_SYS (ffsl, int, (long int i)); _GL_CXXALIASWARN (ffsl); #elif defined GNULIB_POSIXCHECK # undef ffsl # if HAVE_RAW_DECL_FFSL _GL_WARN_ON_USE (ffsl, "ffsl is not portable - use the ffsl module"); # endif #endif /* Find the index of the least-significant set bit. */ #if @GNULIB_FFSLL@ # if @REPLACE_FFSLL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define ffsll rpl_ffsll # endif _GL_FUNCDECL_RPL (ffsll, int, (long long int i)); _GL_CXXALIAS_RPL (ffsll, int, (long long int i)); # else # if !@HAVE_FFSLL@ _GL_FUNCDECL_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIAS_SYS (ffsll, int, (long long int i)); # endif _GL_CXXALIASWARN (ffsll); #elif defined GNULIB_POSIXCHECK # undef ffsll # if HAVE_RAW_DECL_FFSLL _GL_WARN_ON_USE (ffsll, "ffsll is not portable - use the ffsll module"); # endif #endif #if @GNULIB_MDA_MEMCCPY@ /* On native Windows, map 'memccpy' to '_memccpy', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::memccpy always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef memccpy # define memccpy _memccpy # endif _GL_CXXALIAS_MDA (memccpy, void *, (void *dest, const void *src, int c, size_t n)); # else _GL_CXXALIAS_SYS (memccpy, void *, (void *dest, const void *src, int c, size_t n)); # endif _GL_CXXALIASWARN (memccpy); #endif /* Return the first instance of C within N bytes of S, or NULL. */ #if @GNULIB_MEMCHR@ # if @REPLACE_MEMCHR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef memchr # define memchr rpl_memchr # endif _GL_FUNCDECL_RPL (memchr, void *, (void const *__s, int __c, size_t __n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (memchr, void *, (void const *__s, int __c, size_t __n)); # else /* On some systems, this function is defined as an overloaded function: extern "C" { const void * std::memchr (const void *, int, size_t); } extern "C++" { void * std::memchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memchr, void *, (void const *__s, int __c, size_t __n), void const *, (void const *__s, int __c, size_t __n)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (memchr, void *, (void *__s, int __c, size_t __n) throw ()); _GL_CXXALIASWARN1 (memchr, void const *, (void const *__s, int __c, size_t __n) throw ()); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (memchr); # endif #elif defined GNULIB_POSIXCHECK # undef memchr /* Assume memchr is always declared. */ _GL_WARN_ON_USE (memchr, "memchr has platform-specific bugs - " "use gnulib module memchr for portability" ); #endif /* Return the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_MEMMEM@ # if @REPLACE_MEMMEM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define memmem rpl_memmem # endif _GL_FUNCDECL_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # else # if ! @HAVE_DECL_MEMMEM@ _GL_FUNCDECL_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (memmem, void *, (void const *__haystack, size_t __haystack_len, void const *__needle, size_t __needle_len)); # endif _GL_CXXALIASWARN (memmem); #elif defined GNULIB_POSIXCHECK # undef memmem # if HAVE_RAW_DECL_MEMMEM _GL_WARN_ON_USE (memmem, "memmem is unportable and often quadratic - " "use gnulib module memmem-simple for portability, " "and module memmem for speed" ); # endif #endif /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ #if @GNULIB_MEMPCPY@ # if ! @HAVE_MEMPCPY@ _GL_FUNCDECL_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (mempcpy, void *, (void *restrict __dest, void const *restrict __src, size_t __n)); _GL_CXXALIASWARN (mempcpy); #elif defined GNULIB_POSIXCHECK # undef mempcpy # if HAVE_RAW_DECL_MEMPCPY _GL_WARN_ON_USE (mempcpy, "mempcpy is unportable - " "use gnulib module mempcpy for portability"); # endif #endif /* Search backwards through a block for a byte (specified as an int). */ #if @GNULIB_MEMRCHR@ # if ! @HAVE_DECL_MEMRCHR@ _GL_FUNCDECL_SYS (memrchr, void *, (void const *, int, size_t) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::memrchr (const void *, int, size_t); } extern "C++" { void * std::memrchr (void *, int, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (memrchr, void *, (void const *, int, size_t), void const *, (void const *, int, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (memrchr, void *, (void *, int, size_t) throw ()); _GL_CXXALIASWARN1 (memrchr, void const *, (void const *, int, size_t) throw ()); # else _GL_CXXALIASWARN (memrchr); # endif #elif defined GNULIB_POSIXCHECK # undef memrchr # if HAVE_RAW_DECL_MEMRCHR _GL_WARN_ON_USE (memrchr, "memrchr is unportable - " "use gnulib module memrchr for portability"); # endif #endif /* Find the first occurrence of C in S. More efficient than memchr(S,C,N), at the expense of undefined behavior if C does not occur within N bytes. */ #if @GNULIB_RAWMEMCHR@ # if ! @HAVE_RAWMEMCHR@ _GL_FUNCDECL_SYS (rawmemchr, void *, (void const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const void * std::rawmemchr (const void *, int); } extern "C++" { void * std::rawmemchr (void *, int); } */ _GL_CXXALIAS_SYS_CAST2 (rawmemchr, void *, (void const *__s, int __c_in), void const *, (void const *__s, int __c_in)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (rawmemchr, void *, (void *__s, int __c_in) throw ()); _GL_CXXALIASWARN1 (rawmemchr, void const *, (void const *__s, int __c_in) throw ()); # else _GL_CXXALIASWARN (rawmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef rawmemchr # if HAVE_RAW_DECL_RAWMEMCHR _GL_WARN_ON_USE (rawmemchr, "rawmemchr is unportable - " "use gnulib module rawmemchr for portability"); # endif #endif /* Copy SRC to DST, returning the address of the terminating '\0' in DST. */ #if @GNULIB_STPCPY@ # if ! @HAVE_STPCPY@ _GL_FUNCDECL_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpcpy, char *, (char *restrict __dst, char const *restrict __src)); _GL_CXXALIASWARN (stpcpy); #elif defined GNULIB_POSIXCHECK # undef stpcpy # if HAVE_RAW_DECL_STPCPY _GL_WARN_ON_USE (stpcpy, "stpcpy is unportable - " "use gnulib module stpcpy for portability"); # endif #endif /* Copy no more than N bytes of SRC to DST, returning a pointer past the last non-NUL byte written into DST. */ #if @GNULIB_STPNCPY@ # if @REPLACE_STPNCPY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef stpncpy # define stpncpy rpl_stpncpy # endif _GL_FUNCDECL_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # else # if ! @HAVE_STPNCPY@ _GL_FUNCDECL_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (stpncpy, char *, (char *restrict __dst, char const *restrict __src, size_t __n)); # endif _GL_CXXALIASWARN (stpncpy); #elif defined GNULIB_POSIXCHECK # undef stpncpy # if HAVE_RAW_DECL_STPNCPY _GL_WARN_ON_USE (stpncpy, "stpncpy is unportable - " "use gnulib module stpncpy for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strchr /* Assume strchr is always declared. */ _GL_WARN_ON_USE_CXX (strchr, const char *, char *, (const char *, int), "strchr cannot work correctly on character strings " "in some multibyte locales - " "use mbschr if you care about internationalization"); #endif /* Find the first occurrence of C in S or the final NUL byte. */ #if @GNULIB_STRCHRNUL@ # if @REPLACE_STRCHRNUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strchrnul rpl_strchrnul # endif _GL_FUNCDECL_RPL (strchrnul, char *, (const char *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strchrnul, char *, (const char *str, int ch)); # else # if ! @HAVE_STRCHRNUL@ _GL_FUNCDECL_SYS (strchrnul, char *, (char const *__s, int __c_in) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * std::strchrnul (const char *, int); } extern "C++" { char * std::strchrnul (char *, int); } */ _GL_CXXALIAS_SYS_CAST2 (strchrnul, char *, (char const *__s, int __c_in), char const *, (char const *__s, int __c_in)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (strchrnul, char *, (char *__s, int __c_in) throw ()); _GL_CXXALIASWARN1 (strchrnul, char const *, (char const *__s, int __c_in) throw ()); # else _GL_CXXALIASWARN (strchrnul); # endif #elif defined GNULIB_POSIXCHECK # undef strchrnul # if HAVE_RAW_DECL_STRCHRNUL _GL_WARN_ON_USE (strchrnul, "strchrnul is unportable - " "use gnulib module strchrnul for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_STRDUP@ # if @REPLACE_STRDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup rpl_strdup # endif _GL_FUNCDECL_RPL (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (strdup, char *, (char const *__s)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup _strdup # endif _GL_CXXALIAS_MDA (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup /* strdup exists as a function and as a macro. Get rid of the macro. */ # undef strdup # endif # if (!@HAVE_DECL_STRDUP@ || __GNUC__ >= 11) && !defined strdup _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); #else # if __GNUC__ >= 11 && !defined strdup /* For -Wmismatched-dealloc: Associate strdup with free or rpl_free. */ _GL_FUNCDECL_SYS (strdup, char *, (char const *__s) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef strdup # if HAVE_RAW_DECL_STRDUP _GL_WARN_ON_USE (strdup, "strdup is unportable - " "use gnulib module strdup for portability"); # endif # elif @GNULIB_MDA_STRDUP@ /* On native Windows, map 'creat' to '_creat', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::strdup always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strdup # define strdup _strdup # endif _GL_CXXALIAS_MDA (strdup, char *, (char const *__s)); # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined strdup # undef strdup # endif _GL_CXXALIAS_SYS (strdup, char *, (char const *__s)); # endif _GL_CXXALIASWARN (strdup); # endif #endif /* Append no more than N characters from SRC onto DEST. */ #if @GNULIB_STRNCAT@ # if @REPLACE_STRNCAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strncat # define strncat rpl_strncat # endif _GL_FUNCDECL_RPL (strncat, char *, (char *restrict dest, const char *restrict src, size_t n) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strncat, char *, (char *restrict dest, const char *restrict src, size_t n)); # else _GL_CXXALIAS_SYS (strncat, char *, (char *restrict dest, const char *restrict src, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strncat); # endif #elif defined GNULIB_POSIXCHECK # undef strncat # if HAVE_RAW_DECL_STRNCAT _GL_WARN_ON_USE (strncat, "strncat is unportable - " "use gnulib module strncat for portability"); # endif #endif /* Return a newly allocated copy of at most N bytes of STRING. */ #if @GNULIB_STRNDUP@ # if @REPLACE_STRNDUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strndup # define strndup rpl_strndup # endif _GL_FUNCDECL_RPL (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (strndup, char *, (char const *__s, size_t __n)); # else # if !@HAVE_DECL_STRNDUP@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (strndup, char *, (char const *__s, size_t __n)); # endif _GL_CXXALIASWARN (strndup); #else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate strndup with free or rpl_free. */ _GL_FUNCDECL_SYS (strndup, char *, (char const *__s, size_t __n) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef strndup # if HAVE_RAW_DECL_STRNDUP _GL_WARN_ON_USE (strndup, "strndup is unportable - " "use gnulib module strndup for portability"); # endif # endif #endif /* Find the length (number of bytes) of STRING, but scan at most MAXLEN bytes. If no '\0' terminator is found in that many bytes, return MAXLEN. */ #if @GNULIB_STRNLEN@ # if @REPLACE_STRNLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strnlen # define strnlen rpl_strnlen # endif _GL_FUNCDECL_RPL (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strnlen, size_t, (char const *__s, size_t __maxlen)); # else # if ! @HAVE_DECL_STRNLEN@ _GL_FUNCDECL_SYS (strnlen, size_t, (char const *__s, size_t __maxlen) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strnlen, size_t, (char const *__s, size_t __maxlen)); # endif _GL_CXXALIASWARN (strnlen); #elif defined GNULIB_POSIXCHECK # undef strnlen # if HAVE_RAW_DECL_STRNLEN _GL_WARN_ON_USE (strnlen, "strnlen is unportable - " "use gnulib module strnlen for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strcspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strcspn /* Assume strcspn is always declared. */ _GL_WARN_ON_USE (strcspn, "strcspn cannot work correctly on character strings " "in multibyte locales - " "use mbscspn if you care about internationalization"); #endif /* Find the first occurrence in S of any character in ACCEPT. */ #if @GNULIB_STRPBRK@ # if ! @HAVE_STRPBRK@ _GL_FUNCDECL_SYS (strpbrk, char *, (char const *__s, char const *__accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C" { const char * strpbrk (const char *, const char *); } extern "C++" { char * strpbrk (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strpbrk, char *, (char const *__s, char const *__accept), const char *, (char const *__s, char const *__accept)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (strpbrk, char *, (char *__s, char const *__accept) throw ()); _GL_CXXALIASWARN1 (strpbrk, char const *, (char const *__s, char const *__accept) throw ()); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strpbrk); # endif # if defined GNULIB_POSIXCHECK /* strpbrk() assumes the second argument is a list of single-byte characters. Even in this simple case, it does not work with multibyte strings if the locale encoding is GB18030 and one of the characters to be searched is a digit. */ # undef strpbrk _GL_WARN_ON_USE_CXX (strpbrk, const char *, char *, (const char *, const char *), "strpbrk cannot work correctly on character strings " "in multibyte locales - " "use mbspbrk if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strpbrk # if HAVE_RAW_DECL_STRPBRK _GL_WARN_ON_USE_CXX (strpbrk, const char *, char *, (const char *, const char *), "strpbrk is unportable - " "use gnulib module strpbrk for portability"); # endif #endif #if defined GNULIB_POSIXCHECK /* strspn() assumes the second argument is a list of single-byte characters. Even in this simple case, it cannot work with multibyte strings. */ # undef strspn /* Assume strspn is always declared. */ _GL_WARN_ON_USE (strspn, "strspn cannot work correctly on character strings " "in multibyte locales - " "use mbsspn if you care about internationalization"); #endif #if defined GNULIB_POSIXCHECK /* strrchr() does not work with multibyte strings if the locale encoding is GB18030 and the character to be searched is a digit. */ # undef strrchr /* Assume strrchr is always declared. */ _GL_WARN_ON_USE_CXX (strrchr, const char *, char *, (const char *, int), "strrchr cannot work correctly on character strings " "in some multibyte locales - " "use mbsrchr if you care about internationalization"); #endif /* Search the next delimiter (char listed in DELIM) starting at *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next char after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of strtok() that is multithread-safe and supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strtok_r(). */ #if @GNULIB_STRSEP@ # if ! @HAVE_STRSEP@ _GL_FUNCDECL_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strsep, char *, (char **restrict __stringp, char const *restrict __delim)); _GL_CXXALIASWARN (strsep); # if defined GNULIB_POSIXCHECK # undef strsep _GL_WARN_ON_USE (strsep, "strsep cannot work correctly on character strings " "in multibyte locales - " "use mbssep if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strsep # if HAVE_RAW_DECL_STRSEP _GL_WARN_ON_USE (strsep, "strsep is unportable - " "use gnulib module strsep for portability"); # endif #endif #if @GNULIB_STRSTR@ # if @REPLACE_STRSTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strstr rpl_strstr # endif _GL_FUNCDECL_RPL (strstr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strstr, char *, (const char *haystack, const char *needle)); # else /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strstr (const char *, const char *); } extern "C++" { char * strstr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strstr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (strstr, char *, (char *haystack, const char *needle) throw ()); _GL_CXXALIASWARN1 (strstr, const char *, (const char *haystack, const char *needle) throw ()); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (strstr); # endif #elif defined GNULIB_POSIXCHECK /* strstr() does not work with multibyte strings if the locale encoding is different from UTF-8: POSIX says that it operates on "strings", and "string" in POSIX is defined as a sequence of bytes, not of characters. */ # undef strstr /* Assume strstr is always declared. */ _GL_WARN_ON_USE (strstr, "strstr is quadratic on many systems, and cannot " "work correctly on character strings in most " "multibyte locales - " "use mbsstr if you care about internationalization, " "or use strstr if you care about speed"); #endif /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. */ #if @GNULIB_STRCASESTR@ # if @REPLACE_STRCASESTR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strcasestr rpl_strcasestr # endif _GL_FUNCDECL_RPL (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (strcasestr, char *, (const char *haystack, const char *needle)); # else # if ! @HAVE_STRCASESTR@ _GL_FUNCDECL_SYS (strcasestr, char *, (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const char * strcasestr (const char *, const char *); } extern "C++" { char * strcasestr (char *, const char *); } */ _GL_CXXALIAS_SYS_CAST2 (strcasestr, char *, (const char *haystack, const char *needle), const char *, (const char *haystack, const char *needle)); # endif # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) \ || defined __clang__) _GL_CXXALIASWARN1 (strcasestr, char *, (char *haystack, const char *needle) throw ()); _GL_CXXALIASWARN1 (strcasestr, const char *, (const char *haystack, const char *needle) throw ()); # else _GL_CXXALIASWARN (strcasestr); # endif #elif defined GNULIB_POSIXCHECK /* strcasestr() does not work with multibyte strings: It is a glibc extension, and glibc implements it only for unibyte locales. */ # undef strcasestr # if HAVE_RAW_DECL_STRCASESTR _GL_WARN_ON_USE (strcasestr, "strcasestr does work correctly on character " "strings in multibyte locales - " "use mbscasestr if you care about " "internationalization, or use c-strcasestr if you want " "a locale independent function"); # endif #endif /* Parse S into tokens separated by characters in DELIM. If S is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = strtok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = strtok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = strtok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" This is a variant of strtok() that is multithread-safe. For the POSIX documentation for this function, see: https://pubs.opengroup.org/onlinepubs/9699919799/functions/strtok.html Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. Caveat: It doesn't work with multibyte strings unless all of the delimiter characters are ASCII characters < 0x30. See also strsep(). */ #if @GNULIB_STRTOK_R@ # if @REPLACE_STRTOK_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtok_r # define strtok_r rpl_strtok_r # endif _GL_FUNCDECL_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # else # if @UNDEFINE_STRTOK_R@ || defined GNULIB_POSIXCHECK # undef strtok_r # endif # if ! @HAVE_DECL_STRTOK_R@ _GL_FUNCDECL_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (strtok_r, char *, (char *restrict s, char const *restrict delim, char **restrict save_ptr)); # endif _GL_CXXALIASWARN (strtok_r); # if defined GNULIB_POSIXCHECK _GL_WARN_ON_USE (strtok_r, "strtok_r cannot work correctly on character " "strings in multibyte locales - " "use mbstok_r if you care about internationalization"); # endif #elif defined GNULIB_POSIXCHECK # undef strtok_r # if HAVE_RAW_DECL_STRTOK_R _GL_WARN_ON_USE (strtok_r, "strtok_r is unportable - " "use gnulib module strtok_r for portability"); # endif #endif /* The following functions are not specified by POSIX. They are gnulib extensions. */ #if @GNULIB_MBSLEN@ /* Return the number of multibyte characters in the character string STRING. This considers multibyte characters, unlike strlen, which counts bytes. */ # ifdef __MirBSD__ /* MirBSD defines mbslen as a macro. Override it. */ # undef mbslen # endif # if @HAVE_MBSLEN@ /* AIX, OSF/1, MirBSD define mbslen already in libc. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbslen rpl_mbslen # endif _GL_FUNCDECL_RPL (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbslen, size_t, (const char *string)); # else _GL_FUNCDECL_SYS (mbslen, size_t, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbslen, size_t, (const char *string)); # endif _GL_CXXALIASWARN (mbslen); #endif #if @GNULIB_MBSNLEN@ /* Return the number of multibyte characters in the character string starting at STRING and ending at STRING + LEN. */ _GL_EXTERN_C size_t mbsnlen (const char *string, size_t len) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1)); #endif #if @GNULIB_MBSCHR@ /* Locate the first single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbschr rpl_mbschr /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbschr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbschr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbschr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbschr); #endif #if @GNULIB_MBSRCHR@ /* Locate the last single-byte character C in the character string STRING, and return a pointer to it. Return NULL if C is not found in STRING. Unlike strrchr(), this function works correctly in multibyte locales with encodings such as GB18030. */ # if defined __hpux || defined __INTERIX # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbsrchr rpl_mbsrchr /* avoid collision with system function */ # endif _GL_FUNCDECL_RPL (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mbsrchr, char *, (const char *string, int c)); # else _GL_FUNCDECL_SYS (mbsrchr, char *, (const char *string, int c) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (mbsrchr, char *, (const char *string, int c)); # endif _GL_CXXALIASWARN (mbsrchr); #endif #if @GNULIB_MBSSTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK. Return NULL if NEEDLE is not found in HAYSTACK. Unlike strstr(), this function works correctly in multibyte locales with encodings different from UTF-8. */ _GL_EXTERN_C char * mbsstr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASECMP@ /* Compare the character strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function may, in multibyte locales, return 0 for strings of different lengths! Unlike strcasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C int mbscasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSNCASECMP@ /* Compare the initial segment of the character string S1 consisting of at most N characters with the initial segment of the character string S2 consisting of at most N characters, ignoring case, returning less than, equal to or greater than zero if the initial segment of S1 is lexicographically less than, equal to or greater than the initial segment of S2. Note: This function may, in multibyte locales, return 0 for initial segments of different lengths! Unlike strncasecmp(), this function works correctly in multibyte locales. But beware that N is not a byte count but a character count! */ _GL_EXTERN_C int mbsncasecmp (const char *s1, const char *s2, size_t n) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPCASECMP@ /* Compare the initial segment of the character string STRING consisting of at most mbslen (PREFIX) characters with the character string PREFIX, ignoring case. If the two match, return a pointer to the first byte after this prefix in STRING. Otherwise, return NULL. Note: This function may, in multibyte locales, return non-NULL if STRING is of smaller length than PREFIX! Unlike strncasecmp(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbspcasecmp (const char *string, const char *prefix) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCASESTR@ /* Find the first occurrence of the character string NEEDLE in the character string HAYSTACK, using case-insensitive comparison. Note: This function may, in multibyte locales, return success even if strlen (haystack) < strlen (needle) ! Unlike strcasestr(), this function works correctly in multibyte locales. */ _GL_EXTERN_C char * mbscasestr (const char *haystack, const char *needle) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSCSPN@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strcspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbscspn (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSPBRK@ /* Find the first occurrence in the character string STRING of any character in the character string ACCEPT. Return the pointer to it, or NULL if none exists. Unlike strpbrk(), this function works correctly in multibyte locales. */ # if defined __hpux # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mbspbrk rpl_mbspbrk /* avoid collision with HP-UX function */ # endif _GL_FUNCDECL_RPL (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (mbspbrk, char *, (const char *string, const char *accept)); # else _GL_FUNCDECL_SYS (mbspbrk, char *, (const char *string, const char *accept) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_SYS (mbspbrk, char *, (const char *string, const char *accept)); # endif _GL_CXXALIASWARN (mbspbrk); #endif #if @GNULIB_MBSSPN@ /* Find the first occurrence in the character string STRING of any character not in the character string REJECT. Return the number of bytes from the beginning of the string to this occurrence, or to the end of the string if none exists. Unlike strspn(), this function works correctly in multibyte locales. */ _GL_EXTERN_C size_t mbsspn (const char *string, const char *reject) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSSEP@ /* Search the next delimiter (multibyte character listed in the character string DELIM) starting at the character string *STRINGP. If one is found, overwrite it with a NUL, and advance *STRINGP to point to the next multibyte character after it. Otherwise, set *STRINGP to NULL. If *STRINGP was already NULL, nothing happens. Return the old value of *STRINGP. This is a variant of mbstok_r() that supports empty fields. Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbstok_r(). */ _GL_EXTERN_C char * mbssep (char **stringp, const char *delim) _GL_ARG_NONNULL ((1, 2)); #endif #if @GNULIB_MBSTOK_R@ /* Parse the character string STRING into tokens separated by characters in the character string DELIM. If STRING is NULL, the saved pointer in SAVE_PTR is used as the next starting point. For example: char s[] = "-abc-=-def"; char *sp; x = mbstok_r(s, "-", &sp); // x = "abc", sp = "=-def" x = mbstok_r(NULL, "-=", &sp); // x = "def", sp = NULL x = mbstok_r(NULL, "=", &sp); // x = NULL // s = "abc\0-def\0" Caveat: It modifies the original string. Caveat: These functions cannot be used on constant strings. Caveat: The identity of the delimiting character is lost. See also mbssep(). */ _GL_EXTERN_C char * mbstok_r (char *restrict string, const char *delim, char **save_ptr) _GL_ARG_NONNULL ((2, 3)); #endif /* Map any int, typically from errno, into an error message. */ #if @GNULIB_STRERROR@ # if @REPLACE_STRERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror # define strerror rpl_strerror # endif _GL_FUNCDECL_RPL (strerror, char *, (int)); _GL_CXXALIAS_RPL (strerror, char *, (int)); # else _GL_CXXALIAS_SYS (strerror, char *, (int)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strerror); # endif #elif defined GNULIB_POSIXCHECK # undef strerror /* Assume strerror is always declared. */ _GL_WARN_ON_USE (strerror, "strerror is unportable - " "use gnulib module strerror to guarantee non-NULL result"); #endif /* Map any int, typically from errno, into an error message. Multithread-safe. Uses the POSIX declaration, not the glibc declaration. */ #if @GNULIB_STRERROR_R@ # if @REPLACE_STRERROR_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerror_r # define strerror_r rpl_strerror_r # endif _GL_FUNCDECL_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (strerror_r, int, (int errnum, char *buf, size_t buflen)); # else # if !@HAVE_DECL_STRERROR_R@ _GL_FUNCDECL_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (strerror_r, int, (int errnum, char *buf, size_t buflen)); # endif # if @HAVE_DECL_STRERROR_R@ _GL_CXXALIASWARN (strerror_r); # endif #elif defined GNULIB_POSIXCHECK # undef strerror_r # if HAVE_RAW_DECL_STRERROR_R _GL_WARN_ON_USE (strerror_r, "strerror_r is unportable - " "use gnulib module strerror_r-posix for portability"); # endif #endif /* Return the name of the system error code ERRNUM. */ #if @GNULIB_STRERRORNAME_NP@ # if @REPLACE_STRERRORNAME_NP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strerrorname_np # define strerrorname_np rpl_strerrorname_np # endif _GL_FUNCDECL_RPL (strerrorname_np, const char *, (int errnum)); _GL_CXXALIAS_RPL (strerrorname_np, const char *, (int errnum)); # else # if !@HAVE_STRERRORNAME_NP@ _GL_FUNCDECL_SYS (strerrorname_np, const char *, (int errnum)); # endif _GL_CXXALIAS_SYS (strerrorname_np, const char *, (int errnum)); # endif _GL_CXXALIASWARN (strerrorname_np); #elif defined GNULIB_POSIXCHECK # undef strerrorname_np # if HAVE_RAW_DECL_STRERRORNAME_NP _GL_WARN_ON_USE (strerrorname_np, "strerrorname_np is unportable - " "use gnulib module strerrorname_np for portability"); # endif #endif /* Return an abbreviation string for the signal number SIG. */ #if @GNULIB_SIGABBREV_NP@ # if ! @HAVE_SIGABBREV_NP@ _GL_FUNCDECL_SYS (sigabbrev_np, const char *, (int sig)); # endif _GL_CXXALIAS_SYS (sigabbrev_np, const char *, (int sig)); _GL_CXXALIASWARN (sigabbrev_np); #elif defined GNULIB_POSIXCHECK # undef sigabbrev_np # if HAVE_RAW_DECL_SIGABBREV_NP _GL_WARN_ON_USE (sigabbrev_np, "sigabbrev_np is unportable - " "use gnulib module sigabbrev_np for portability"); # endif #endif /* Return an English description string for the signal number SIG. */ #if @GNULIB_SIGDESCR_NP@ # if ! @HAVE_SIGDESCR_NP@ _GL_FUNCDECL_SYS (sigdescr_np, const char *, (int sig)); # endif _GL_CXXALIAS_SYS (sigdescr_np, const char *, (int sig)); _GL_CXXALIASWARN (sigdescr_np); #elif defined GNULIB_POSIXCHECK # undef sigdescr_np # if HAVE_RAW_DECL_SIGDESCR_NP _GL_WARN_ON_USE (sigdescr_np, "sigdescr_np is unportable - " "use gnulib module sigdescr_np for portability"); # endif #endif #if @GNULIB_STRSIGNAL@ # if @REPLACE_STRSIGNAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strsignal rpl_strsignal # endif _GL_FUNCDECL_RPL (strsignal, char *, (int __sig)); _GL_CXXALIAS_RPL (strsignal, char *, (int __sig)); # else # if ! @HAVE_DECL_STRSIGNAL@ _GL_FUNCDECL_SYS (strsignal, char *, (int __sig)); # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is 'const char *'. */ _GL_CXXALIAS_SYS_CAST (strsignal, char *, (int __sig)); # endif _GL_CXXALIASWARN (strsignal); #elif defined GNULIB_POSIXCHECK # undef strsignal # if HAVE_RAW_DECL_STRSIGNAL _GL_WARN_ON_USE (strsignal, "strsignal is unportable - " "use gnulib module strsignal for portability"); # endif #endif #if @GNULIB_STRVERSCMP@ # if !@HAVE_STRVERSCMP@ _GL_FUNCDECL_SYS (strverscmp, int, (const char *, const char *) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (strverscmp, int, (const char *, const char *)); _GL_CXXALIASWARN (strverscmp); #elif defined GNULIB_POSIXCHECK # undef strverscmp # if HAVE_RAW_DECL_STRVERSCMP _GL_WARN_ON_USE (strverscmp, "strverscmp is unportable - " "use gnulib module strverscmp for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_STRING_H */ #endif /* _@GUARD_PREFIX@_STRING_H */ #endif �������������������������������������recutils-1.9/lib/sigprocmask.c����������������������������������������������������������������������0000644�0000000�0000000�00000020622�14226564451�013353� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible signal blocking. Copyright (C) 2006-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <signal.h> #include <errno.h> #include <stdint.h> #include <stdlib.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif /* We assume that a platform without POSIX signal blocking functions also does not have the POSIX sigaction() function, only the signal() function. We also assume signal() has SysV semantics, where any handler is uninstalled prior to being invoked. This is true for native Windows platforms. */ /* We use raw signal(), but also provide a wrapper rpl_signal() so that applications can query or change a blocked signal. */ #undef signal /* Provide invalid signal numbers as fallbacks if the uncatchable signals are not defined. */ #ifndef SIGKILL # define SIGKILL (-1) #endif #ifndef SIGSTOP # define SIGSTOP (-1) #endif /* On native Windows, as of 2008, the signal SIGABRT_COMPAT is an alias for the signal SIGABRT. Only one signal handler is stored for both SIGABRT and SIGABRT_COMPAT. SIGABRT_COMPAT is not a signal of its own. */ #if defined _WIN32 && ! defined __CYGWIN__ # undef SIGABRT_COMPAT # define SIGABRT_COMPAT 6 #endif #ifdef SIGABRT_COMPAT # define SIGABRT_COMPAT_MASK (1U << SIGABRT_COMPAT) #else # define SIGABRT_COMPAT_MASK 0 #endif typedef void (*handler_t) (int); #if HAVE_MSVC_INVALID_PARAMETER_HANDLER static handler_t signal_nothrow (int sig, handler_t handler) { handler_t result; TRY_MSVC_INVAL { result = signal (sig, handler); } CATCH_MSVC_INVAL { result = SIG_ERR; errno = EINVAL; } DONE_MSVC_INVAL; return result; } # define signal signal_nothrow #endif /* Handling of gnulib defined signals. */ #if GNULIB_defined_SIGPIPE static handler_t SIGPIPE_handler = SIG_DFL; #endif #if GNULIB_defined_SIGPIPE static handler_t ext_signal (int sig, handler_t handler) { switch (sig) { case SIGPIPE: { handler_t old_handler = SIGPIPE_handler; SIGPIPE_handler = handler; return old_handler; } default: /* System defined signal */ return signal (sig, handler); } } # undef signal # define signal ext_signal #endif int sigismember (const sigset_t *set, int sig) { if (sig >= 0 && sig < NSIG) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif return (*set >> sig) & 1; } else return 0; } int sigemptyset (sigset_t *set) { *set = 0; return 0; } int sigaddset (sigset_t *set, int sig) { if (sig >= 0 && sig < NSIG) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif *set |= 1U << sig; return 0; } else { errno = EINVAL; return -1; } } int sigdelset (sigset_t *set, int sig) { if (sig >= 0 && sig < NSIG) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif *set &= ~(1U << sig); return 0; } else { errno = EINVAL; return -1; } } int sigfillset (sigset_t *set) { *set = ((2U << (NSIG - 1)) - 1) & ~ SIGABRT_COMPAT_MASK; return 0; } /* Set of currently blocked signals. */ static volatile sigset_t blocked_set /* = 0 */; /* Set of currently blocked and pending signals. */ static volatile sig_atomic_t pending_array[NSIG] /* = { 0 } */; /* Signal handler that is installed for blocked signals. */ static void blocked_handler (int sig) { /* Reinstall the handler, in case the signal occurs multiple times while blocked. There is an inherent race where an asynchronous signal in between when the kernel uninstalled the handler and when we reinstall it will trigger the default handler; oh well. */ signal (sig, blocked_handler); if (sig >= 0 && sig < NSIG) pending_array[sig] = 1; } int sigpending (sigset_t *set) { sigset_t pending = 0; int sig; for (sig = 0; sig < NSIG; sig++) if (pending_array[sig]) pending |= 1U << sig; *set = pending; return 0; } /* The previous signal handlers. Only the array elements corresponding to blocked signals are relevant. */ static volatile handler_t old_handlers[NSIG]; int sigprocmask (int operation, const sigset_t *set, sigset_t *old_set) { if (old_set != NULL) *old_set = blocked_set; if (set != NULL) { sigset_t new_blocked_set; sigset_t to_unblock; sigset_t to_block; switch (operation) { case SIG_BLOCK: new_blocked_set = blocked_set | *set; break; case SIG_SETMASK: new_blocked_set = *set; break; case SIG_UNBLOCK: new_blocked_set = blocked_set & ~*set; break; default: errno = EINVAL; return -1; } to_unblock = blocked_set & ~new_blocked_set; to_block = new_blocked_set & ~blocked_set; if (to_block != 0) { int sig; for (sig = 0; sig < NSIG; sig++) if ((to_block >> sig) & 1) { pending_array[sig] = 0; if ((old_handlers[sig] = signal (sig, blocked_handler)) != SIG_ERR) blocked_set |= 1U << sig; } } if (to_unblock != 0) { sig_atomic_t received[NSIG]; int sig; for (sig = 0; sig < NSIG; sig++) if ((to_unblock >> sig) & 1) { if (signal (sig, old_handlers[sig]) != blocked_handler) /* The application changed a signal handler while the signal was blocked, bypassing our rpl_signal replacement. We don't support this. */ abort (); received[sig] = pending_array[sig]; blocked_set &= ~(1U << sig); pending_array[sig] = 0; } else received[sig] = 0; for (sig = 0; sig < NSIG; sig++) if (received[sig]) raise (sig); } } return 0; } /* Install the handler FUNC for signal SIG, and return the previous handler. */ handler_t rpl_signal (int sig, handler_t handler) { /* We must provide a wrapper, so that a user can query what handler they installed even if that signal is currently blocked. */ if (sig >= 0 && sig < NSIG && sig != SIGKILL && sig != SIGSTOP && handler != SIG_ERR) { #ifdef SIGABRT_COMPAT if (sig == SIGABRT_COMPAT) sig = SIGABRT; #endif if (blocked_set & (1U << sig)) { /* POSIX states that sigprocmask and signal are both async-signal-safe. This is not true of our implementation - there is a slight data race where an asynchronous interrupt on signal A can occur after we install blocked_handler but before we have updated old_handlers for signal B, such that handler A can see stale information if it calls signal(B). Oh well - signal handlers really shouldn't try to manipulate the installed handlers of unrelated signals. */ handler_t result = old_handlers[sig]; old_handlers[sig] = handler; return result; } else return signal (sig, handler); } else { errno = EINVAL; return SIG_ERR; } } #if GNULIB_defined_SIGPIPE /* Raise the signal SIGPIPE. */ int _gl_raise_SIGPIPE (void) { if (blocked_set & (1U << SIGPIPE)) pending_array[SIGPIPE] = 1; else { handler_t handler = SIGPIPE_handler; if (handler == SIG_DFL) exit (128 + SIGPIPE); else if (handler != SIG_IGN) (*handler) (SIGPIPE); } return 0; } #endif ��������������������������������������������������������������������������������������������������������������recutils-1.9/lib/signbitd.c�������������������������������������������������������������������������0000644�0000000�0000000�00000004110�14226564451�012626� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* signbit() macro: Determine the sign bit of a floating-point number. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> #include <string.h> #include "isnand-nolibm.h" #include "float+.h" #ifdef gl_signbitd_OPTIMIZED_MACRO # undef gl_signbitd #endif int gl_signbitd (double arg) { #if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT /* The use of a union to extract the bits of the representation of a 'long double' is safe in practice, despite of the "aliasing rules" of C99, because the GCC docs say "Even with '-fstrict-aliasing', type-punning is allowed, provided the memory is accessed through the union type." and similarly for other compilers. */ # define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { double value; unsigned int word[NWORDS]; } m; m.value = arg; return (m.word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; #elif HAVE_COPYSIGN_IN_LIBC return copysign (1.0, arg) < 0; #else /* This does not do the right thing for NaN, but this is irrelevant for most use cases. */ if (isnand (arg)) return 0; if (arg < 0.0) return 1; else if (arg == 0.0) { /* Distinguish 0.0 and -0.0. */ static double plus_zero = 0.0; double arg_mem = arg; return (memcmp (&plus_zero, &arg_mem, SIZEOF_DBL) != 0); } else return 0; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/pathmax.h��������������������������������������������������������������������������0000644�0000000�0000000�00000005630�14226564450�012501� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Define PATH_MAX somehow. Requires sys/types.h. Copyright (C) 1992, 1999, 2001, 2003, 2005, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _PATHMAX_H # define _PATHMAX_H /* POSIX:2008 defines PATH_MAX to be the maximum number of bytes in a filename, including the terminating NUL byte. <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/limits.h.html> PATH_MAX is not defined on systems which have no limit on filename length, such as GNU/Hurd. This file does *not* define PATH_MAX always. Programs that use this file can handle the GNU/Hurd case in several ways: - Either with a package-wide handling, or with a per-file handling, - Either through a #ifdef PATH_MAX or through a fallback like #ifndef PATH_MAX # define PATH_MAX 8192 #endif or through a fallback like #ifndef PATH_MAX # define PATH_MAX pathconf ("/", _PC_PATH_MAX) #endif */ # include <unistd.h> # include <limits.h> # ifndef _POSIX_PATH_MAX # define _POSIX_PATH_MAX 256 # endif /* Don't include sys/param.h if it already has been. */ # if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> # endif # if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN # endif # ifdef __hpux /* On HP-UX, PATH_MAX designates the maximum number of bytes in a filename, *not* including the terminating NUL byte, and is set to 1023. Additionally, when _XOPEN_SOURCE is defined to 500 or more, PATH_MAX is not defined at all any more. */ # undef PATH_MAX # define PATH_MAX 1024 # endif # if defined _WIN32 && ! defined __CYGWIN__ /* The page "Naming Files, Paths, and Namespaces" on msdn.microsoft.com, section "Maximum Path Length Limitation", <https://docs.microsoft.com/en-us/windows/desktop/FileIO/naming-a-file#maximum-path-length-limitation> explains that the maximum size of a filename, including the terminating NUL byte, is 260 = 3 + 256 + 1. This is the same value as - FILENAME_MAX in <stdio.h>, - _MAX_PATH in <stdlib.h>, - MAX_PATH in <windef.h>. Undefine the original value, because mingw's <limits.h> gets it wrong. */ # undef PATH_MAX # define PATH_MAX 260 # endif #endif /* _PATHMAX_H */ ��������������������������������������������������������������������������������������������������������recutils-1.9/lib/fdopendir.c������������������������������������������������������������������������0000644�0000000�0000000�00000015035�14226564446�013011� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a replacement fdopendir function Copyright (C) 2004-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> #include <dirent.h> #include <stdlib.h> #include <unistd.h> #if !HAVE_FDOPENDIR # include "openat.h" # include "openat-priv.h" # include "save-cwd.h" # if GNULIB_DIRENT_SAFER # include "dirent--.h" # endif # ifndef REPLACE_FCHDIR # define REPLACE_FCHDIR 0 # endif static DIR *fdopendir_with_dup (int, int, struct saved_cwd const *); static DIR *fd_clone_opendir (int, struct saved_cwd const *); /* Replacement for POSIX fdopendir. First, try to simulate it via opendir ("/proc/self/fd/..."). Failing that, simulate it by using fchdir metadata, or by doing save_cwd/fchdir/opendir(".")/restore_cwd. If either the save_cwd or the restore_cwd fails (relatively unlikely), then give a diagnostic and exit nonzero. If successful, the resulting stream is based on FD in implementations where streams are based on file descriptors and in applications where no other thread or signal handler allocates or frees file descriptors. In other cases, consult dirfd on the result to find out whether FD is still being used. Otherwise, this function works just like POSIX fdopendir. W A R N I N G: Unlike other fd-related functions, this one places constraints on FD. If this function returns successfully, FD is under control of the dirent.h system, and the caller should not close or modify the state of FD other than by the dirent.h functions. */ # ifdef __KLIBC__ # include <InnoTekLIBC/backend.h> DIR * fdopendir (int fd) { char path[_MAX_PATH]; DIR *dirp; /* Get a path from fd */ if (__libc_Back_ioFHToPath (fd, path, sizeof (path))) return NULL; dirp = opendir (path); if (!dirp) return NULL; /* Unregister fd registered by opendir() */ _gl_unregister_dirp_fd (dirfd (dirp)); /* Register our fd */ if (_gl_register_dirp_fd (fd, dirp)) { int saved_errno = errno; closedir (dirp); errno = saved_errno; dirp = NULL; } return dirp; } # else DIR * fdopendir (int fd) { DIR *dir = fdopendir_with_dup (fd, -1, NULL); if (! REPLACE_FCHDIR && ! dir) { int saved_errno = errno; if (EXPECTED_ERRNO (saved_errno)) { struct saved_cwd cwd; if (save_cwd (&cwd) != 0) openat_save_fail (errno); dir = fdopendir_with_dup (fd, -1, &cwd); saved_errno = errno; free_cwd (&cwd); errno = saved_errno; } } return dir; } # endif /* Like fdopendir, except that if OLDER_DUPFD is not -1, it is known to be a dup of FD which is less than FD - 1 and which will be closed by the caller and not otherwise used by the caller. This function makes sure that FD is closed and all file descriptors less than FD are open, and then calls fd_clone_opendir on a dup of FD. That way, barring race conditions, fd_clone_opendir returns a stream whose file descriptor is FD. If REPLACE_FCHDIR or CWD is null, use opendir ("/proc/self/fd/...", falling back on fchdir metadata. Otherwise, CWD is a saved version of the working directory; use fchdir/opendir(".")/restore_cwd(CWD). */ static DIR * fdopendir_with_dup (int fd, int older_dupfd, struct saved_cwd const *cwd) { int dupfd = dup (fd); if (dupfd < 0 && errno == EMFILE) dupfd = older_dupfd; if (dupfd < 0) return NULL; else { DIR *dir; int saved_errno; if (dupfd < fd - 1 && dupfd != older_dupfd) { dir = fdopendir_with_dup (fd, dupfd, cwd); saved_errno = errno; } else { close (fd); dir = fd_clone_opendir (dupfd, cwd); saved_errno = errno; if (! dir) { int fd1 = dup (dupfd); if (fd1 != fd) openat_save_fail (fd1 < 0 ? errno : EBADF); } } if (dupfd != older_dupfd) close (dupfd); errno = saved_errno; return dir; } } /* Like fdopendir, except the result controls a clone of FD. It is the caller's responsibility both to close FD and (if the result is not null) to closedir the result. */ static DIR * fd_clone_opendir (int fd, struct saved_cwd const *cwd) { if (REPLACE_FCHDIR || ! cwd) { DIR *dir = NULL; int saved_errno = EOPNOTSUPP; char buf[OPENAT_BUFFER_SIZE]; char *proc_file = openat_proc_name (buf, fd, "."); if (proc_file) { dir = opendir (proc_file); saved_errno = errno; if (proc_file != buf) free (proc_file); } # if REPLACE_FCHDIR if (! dir && EXPECTED_ERRNO (saved_errno)) { char const *name = _gl_directory_name (fd); DIR *dp = name ? opendir (name) : NULL; /* The caller has done an elaborate dance to arrange for opendir to consume just the right file descriptor. If dirfd returns -1, though, we're on a system like mingw where opendir does not consume a file descriptor. Consume it via 'dup' instead. */ if (dp && dirfd (dp) < 0) dup (fd); return dp; } # endif errno = saved_errno; return dir; } else { if (fchdir (fd) != 0) return NULL; else { DIR *dir = opendir ("."); int saved_errno = errno; if (restore_cwd (cwd) != 0) openat_restore_fail (errno); errno = saved_errno; return dir; } } } #else /* HAVE_FDOPENDIR */ # include <errno.h> # include <sys/stat.h> # undef fdopendir /* Like fdopendir, but work around GNU/Hurd bug by validating FD. */ DIR * rpl_fdopendir (int fd) { struct stat st; if (fstat (fd, &st)) return NULL; if (!S_ISDIR (st.st_mode)) { errno = ENOTDIR; return NULL; } return fdopendir (fd); } #endif /* HAVE_FDOPENDIR */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/localcharset.h���������������������������������������������������������������������0000644�0000000�0000000�00000014316�14226564450�013504� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2003, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU CHARSET Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LOCALCHARSET_H #define _LOCALCHARSET_H #ifdef __cplusplus extern "C" { #endif /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed below. The result must not be freed; it is statically allocated. The result becomes invalid when setlocale() is used to change the global locale, or when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG is changed; threads in multithreaded programs should not do this. If the canonical name cannot be determined, the result is a non-canonical name. */ extern const char * locale_charset (void); /* About GNU canonical names for character encodings: Every canonical name must be supported by GNU libiconv. Support by GNU libc is also desirable. The name is case insensitive. Usually an upper case MIME charset name is preferred. The current list of these GNU canonical names is: name MIME? used by which systems (darwin = Mac OS X, windows = native Windows) ASCII, ANSI_X3.4-1968 glibc solaris freebsd netbsd darwin minix cygwin ISO-8859-1 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-2 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-3 Y glibc solaris cygwin ISO-8859-4 Y hpux osf solaris freebsd netbsd openbsd darwin ISO-8859-5 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-6 Y glibc aix hpux solaris cygwin ISO-8859-7 Y glibc aix hpux irix osf solaris freebsd netbsd openbsd darwin cygwin zos ISO-8859-8 Y glibc aix hpux osf solaris cygwin zos ISO-8859-9 Y glibc aix hpux irix osf solaris freebsd darwin cygwin zos ISO-8859-13 glibc hpux solaris freebsd netbsd openbsd darwin cygwin ISO-8859-14 glibc cygwin ISO-8859-15 glibc aix irix osf solaris freebsd netbsd openbsd darwin cygwin KOI8-R Y glibc hpux solaris freebsd netbsd openbsd darwin KOI8-U Y glibc freebsd netbsd openbsd darwin cygwin KOI8-T glibc CP437 dos CP775 dos CP850 aix osf dos CP852 dos CP855 dos CP856 aix CP857 dos CP861 dos CP862 dos CP864 dos CP865 dos CP866 freebsd netbsd openbsd darwin dos CP869 dos CP874 windows dos CP922 aix CP932 aix cygwin windows dos CP943 aix zos CP949 osf darwin windows dos CP950 windows dos CP1046 aix CP1124 aix CP1125 dos CP1129 aix CP1131 freebsd darwin CP1250 windows CP1251 glibc hpux solaris freebsd netbsd openbsd darwin cygwin windows CP1252 aix windows CP1253 windows CP1254 windows CP1255 glibc windows CP1256 windows CP1257 windows GB2312 Y glibc aix hpux irix solaris freebsd netbsd darwin cygwin zos EUC-JP Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin EUC-KR Y glibc aix hpux irix osf solaris freebsd netbsd darwin cygwin zos EUC-TW glibc aix hpux irix osf solaris netbsd BIG5 Y glibc aix hpux osf solaris freebsd netbsd darwin cygwin zos BIG5-HKSCS glibc hpux solaris netbsd darwin GBK glibc aix osf solaris freebsd darwin cygwin windows dos GB18030 glibc hpux solaris freebsd netbsd darwin SHIFT_JIS Y hpux osf solaris freebsd netbsd darwin JOHAB glibc solaris windows TIS-620 glibc aix hpux osf solaris cygwin zos VISCII Y glibc TCVN5712-1 glibc ARMSCII-8 glibc freebsd netbsd darwin GEORGIAN-PS glibc cygwin PT154 glibc netbsd cygwin HP-ROMAN8 hpux HP-ARABIC8 hpux HP-GREEK8 hpux HP-HEBREW8 hpux HP-TURKISH8 hpux HP-KANA8 hpux DEC-KANJI osf DEC-HANYU osf UTF-8 Y glibc aix hpux osf solaris netbsd darwin cygwin zos Note: Names which are not marked as being a MIME name should not be used in Internet protocols for information interchange (mail, news, etc.). Note: ASCII and ANSI_X3.4-1968 are synonymous canonical names. Applications must understand both names and treat them as equivalent. */ #ifdef __cplusplus } #endif #endif /* _LOCALCHARSET_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/dynarray.h�������������������������������������������������������������������������0000644�0000000�0000000�00000022307�14226564446�012675� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Type-safe arrays which grow dynamically. Copyright 2021-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Bruno Haible, 2021. */ #ifndef _GL_DYNARRAY_H #define _GL_DYNARRAY_H /* Before including this file, you need to define: DYNARRAY_STRUCT The struct tag of dynamic array to be defined. DYNARRAY_ELEMENT The type name of the element type. Elements are copied as if by memcpy, and can change address as the dynamic array grows. DYNARRAY_PREFIX The prefix of the functions which are defined. The following parameters are optional: DYNARRAY_ELEMENT_FREE DYNARRAY_ELEMENT_FREE (E) is evaluated to deallocate the contents of elements. E is of type DYNARRAY_ELEMENT *. DYNARRAY_ELEMENT_INIT DYNARRAY_ELEMENT_INIT (E) is evaluated to initialize a new element. E is of type DYNARRAY_ELEMENT *. If DYNARRAY_ELEMENT_FREE but not DYNARRAY_ELEMENT_INIT is defined, new elements are automatically zero-initialized. Otherwise, new elements have undefined contents. DYNARRAY_INITIAL_SIZE The size of the statically allocated array (default: at least 2, more elements if they fit into 128 bytes). Must be a preprocessor constant. If DYNARRAY_INITIAL_SIZE is 0, there is no statically allocated array at, and all non-empty arrays are heap-allocated. DYNARRAY_FINAL_TYPE The name of the type which holds the final array. If not defined, is PREFIX##finalize not provided. DYNARRAY_FINAL_TYPE must be a struct type, with members of type DYNARRAY_ELEMENT and size_t at the start (in this order). These macros are undefined after this header file has been included. The following types are provided (their members are private to the dynarray implementation): struct DYNARRAY_STRUCT The following functions are provided: */ /* Initialize a dynamic array object. This must be called before any use of the object. */ #if 0 static void DYNARRAY_PREFIX##init (struct DYNARRAY_STRUCT *list); #endif /* Deallocate the dynamic array and its elements. */ #if 0 static void DYNARRAY_PREFIX##free (struct DYNARRAY_STRUCT *list); #endif /* Return true if the dynamic array is in an error state. */ #if 0 static bool DYNARRAY_PREFIX##has_failed (const struct DYNARRAY_STRUCT *list); #endif /* Mark the dynamic array as failed. All elements are deallocated as a side effect. */ #if 0 static void DYNARRAY_PREFIX##mark_failed (struct DYNARRAY_STRUCT *list); #endif /* Return the number of elements which have been added to the dynamic array. */ #if 0 static size_t DYNARRAY_PREFIX##size (const struct DYNARRAY_STRUCT *list); #endif /* Return a pointer to the first array element, if any. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##begin (const struct DYNARRAY_STRUCT *list); #endif /* Return a pointer one element past the last array element. For a zero-length array, the pointer can be NULL even though the dynamic array has not entered the failure state. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##end (const struct DYNARRAY_STRUCT *list); #endif /* Return a pointer to the array element at INDEX. Terminate the process if INDEX is out of bounds. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##at (struct DYNARRAY_STRUCT *list, size_t index); #endif /* Add ITEM at the end of the array, enlarging it by one element. Mark *LIST as failed if the dynamic array allocation size cannot be increased. */ #if 0 static void DYNARRAY_PREFIX##add (struct DYNARRAY_STRUCT *list, DYNARRAY_ELEMENT item); #endif /* Allocate a place for a new element in *LIST and return a pointer to it. The pointer can be NULL if the dynamic array cannot be enlarged due to a memory allocation failure. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##emplace (struct DYNARRAY_STRUCT *list); #endif /* Change the size of *LIST to SIZE. If SIZE is larger than the existing size, new elements are added (which can be initialized). Otherwise, the list is truncated, and elements are freed. Return false on memory allocation failure (and mark *LIST as failed). */ #if 0 static bool DYNARRAY_PREFIX##resize (struct DYNARRAY_STRUCT *list, size_t size); #endif /* Remove the last element of LIST if it is present. */ #if 0 static void DYNARRAY_PREFIX##remove_last (struct DYNARRAY_STRUCT *list); #endif /* Remove all elements from the list. The elements are freed, but the list itself is not. */ #if 0 static void DYNARRAY_PREFIX##clear (struct DYNARRAY_STRUCT *list); #endif #if defined DYNARRAY_FINAL_TYPE /* Transfer the dynamic array to a permanent location at *RESULT. Returns true on success on false on allocation failure. In either case, *LIST is re-initialized and can be reused. A NULL pointer is stored in *RESULT if LIST refers to an empty list. On success, the pointer in *RESULT is heap-allocated and must be deallocated using free. */ #if 0 static bool DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *list, DYNARRAY_FINAL_TYPE *result); #endif #else /* !defined DYNARRAY_FINAL_TYPE */ /* Transfer the dynamic array to a heap-allocated array and return a pointer to it. The pointer is NULL if memory allocation fails, or if the array is empty, so this function should be used only for arrays which are known not be empty (usually because they always have a sentinel at the end). If LENGTHP is not NULL, the array length is written to *LENGTHP. *LIST is re-initialized and can be reused. */ #if 0 static DYNARRAY_ELEMENT * DYNARRAY_PREFIX##finalize (struct DYNARRAY_STRUCT *list, size_t *lengthp); #endif #endif /* A minimal example which provides a growing list of integers can be defined like this: struct int_array { // Pointer to result array followed by its length, // as required by DYNARRAY_FINAL_TYPE. int *array; size_t length; }; #define DYNARRAY_STRUCT dynarray_int #define DYNARRAY_ELEMENT int #define DYNARRAY_PREFIX dynarray_int_ #define DYNARRAY_FINAL_TYPE struct int_array #include <malloc/dynarray-skeleton.c> To create a three-element array with elements 1, 2, 3, use this code: struct dynarray_int dyn; dynarray_int_init (&dyn); for (int i = 1; i <= 3; ++i) { int *place = dynarray_int_emplace (&dyn); assert (place != NULL); *place = i; } struct int_array result; bool ok = dynarray_int_finalize (&dyn, &result); assert (ok); assert (result.length == 3); assert (result.array[0] == 1); assert (result.array[1] == 2); assert (result.array[2] == 3); free (result.array); If the elements contain resources which must be freed, define DYNARRAY_ELEMENT_FREE appropriately, like this: struct str_array { char **array; size_t length; }; #define DYNARRAY_STRUCT dynarray_str #define DYNARRAY_ELEMENT char * #define DYNARRAY_ELEMENT_FREE(ptr) free (*ptr) #define DYNARRAY_PREFIX dynarray_str_ #define DYNARRAY_FINAL_TYPE struct str_array #include <malloc/dynarray-skeleton.c> */ /* The implementation is imported from glibc. */ /* Avoid possible conflicts with symbols exported by the GNU libc. */ #define __libc_dynarray_at_failure gl_dynarray_at_failure #define __libc_dynarray_emplace_enlarge gl_dynarray_emplace_enlarge #define __libc_dynarray_finalize gl_dynarray_finalize #define __libc_dynarray_resize_clear gl_dynarray_resize_clear #define __libc_dynarray_resize gl_dynarray_resize #if defined DYNARRAY_STRUCT || defined DYNARRAY_ELEMENT || defined DYNARRAY_PREFIX # ifndef _GL_LIKELY /* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */ # define _GL_LIKELY(cond) __builtin_expect ((cond), 1) # define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0) # endif /* Define auxiliary structs and declare auxiliary functions, common to all instantiations of dynarray. */ # include <malloc/dynarray.gl.h> /* Define the instantiation, specified through DYNARRAY_STRUCT DYNARRAY_ELEMENT DYNARRAY_PREFIX etc. */ # include <malloc/dynarray-skeleton.gl.h> #else /* This file is being included from one of the malloc/dynarray_*.c files. */ # include <malloc/dynarray.h> #endif #endif /* _GL_DYNARRAY_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/spawn_int.h������������������������������������������������������������������������0000644�0000000�0000000�00000003570�14226564451�013043� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2008-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <sys/types.h> /* Data structure to contain the action information. */ struct __spawn_action { enum { spawn_do_close, spawn_do_dup2, spawn_do_open, spawn_do_chdir, spawn_do_fchdir } tag; union { struct { int fd; } close_action; struct { int fd; int newfd; } dup2_action; struct { int fd; char *path; int oflag; mode_t mode; } open_action; struct { char *path; } chdir_action; struct { int fd; } fchdir_action; } action; }; #if !_LIBC # define __posix_spawn_file_actions_realloc gl_posix_spawn_file_actions_realloc #endif extern int __posix_spawn_file_actions_realloc (posix_spawn_file_actions_t * file_actions); #if !_LIBC # define __spawni gl_posix_spawn_internal #endif extern int __spawni (pid_t *pid, const char *path, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, const char *const argv[], const char *const envp[], int use_path); ����������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stpcpy.c���������������������������������������������������������������������������0000644�0000000�0000000�00000002605�14226564447�012361� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stpcpy.c -- copy a string and return pointer to end of new string Copyright (C) 1992, 1995, 1997-1998, 2006, 2009-2022 Free Software Foundation, Inc. NOTE: The canonical source of this file is maintained with the GNU C Library. Bugs can be reported to bug-glibc@prep.ai.mit.edu. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #undef __stpcpy #ifdef _LIBC # undef stpcpy #endif #ifndef weak_alias # define __stpcpy stpcpy #endif /* Copy SRC to DEST, returning the address of the terminating '\0' in DEST. */ char * __stpcpy (char *dest, const char *src) { register char *d = dest; register const char *s = src; do *d++ = *s; while (*s++ != '\0'); return d - 1; } #ifdef weak_alias weak_alias (__stpcpy, stpcpy) #endif ���������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/readdir.c��������������������������������������������������������������������������0000644�0000000�0000000�00000006072�14226564447�012453� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read the next entry of a directory. Copyright (C) 2011-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <dirent.h> #include <errno.h> #include <stddef.h> #include "dirent-private.h" /* Don't assume that UNICODE is not defined. */ #undef FindNextFile #define FindNextFile FindNextFileA struct dirent * readdir (DIR *dirp) { char type; struct dirent *result; /* There is no need to add code to produce entries for "." and "..". According to the POSIX:2008 section "4.12 Pathname Resolution" <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html> "." and ".." are syntactic entities. POSIX also says: "If entries for dot or dot-dot exist, one entry shall be returned for dot and one entry shall be returned for dot-dot; otherwise, they shall not be returned." */ switch (dirp->status) { case -2: /* End of directory already reached. */ return NULL; case -1: break; case 0: if (!FindNextFile (dirp->current, &dirp->entry)) { switch (GetLastError ()) { case ERROR_NO_MORE_FILES: dirp->status = -2; return NULL; default: errno = EIO; return NULL; } } break; default: errno = dirp->status; return NULL; } dirp->status = 0; if (dirp->entry.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) type = DT_DIR; else if (dirp->entry.dwFileAttributes & FILE_ATTRIBUTE_REPARSE_POINT) type = DT_LNK; else if ((dirp->entry.dwFileAttributes & ~(FILE_ATTRIBUTE_READONLY | FILE_ATTRIBUTE_HIDDEN | FILE_ATTRIBUTE_SYSTEM | FILE_ATTRIBUTE_ARCHIVE | FILE_ATTRIBUTE_NORMAL | FILE_ATTRIBUTE_TEMPORARY | FILE_ATTRIBUTE_SPARSE_FILE | FILE_ATTRIBUTE_COMPRESSED | FILE_ATTRIBUTE_NOT_CONTENT_INDEXED | FILE_ATTRIBUTE_ENCRYPTED)) == 0) /* Devices like COM1, LPT1, NUL would also have the attributes 0x20 but they cannot occur here. */ type = DT_REG; else type = DT_UNKNOWN; /* Reuse the memory of dirp->entry for the result. */ result = (struct dirent *) ((char *) dirp->entry.cFileName - offsetof (struct dirent, d_name[0])); result->d_type = type; return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fpending.h�������������������������������������������������������������������������0000644�0000000�0000000�00000001676�14226564447�012645� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declare __fpending. Copyright (C) 2000, 2003, 2005-2006, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Written by Jim Meyering. */ #include <stddef.h> #include <stdio.h> #if HAVE_STDIO_EXT_H # include <stdio_ext.h> #endif #if !HAVE_DECL___FPENDING size_t __fpending (FILE *) _GL_ATTRIBUTE_PURE; #endif ������������������������������������������������������������������recutils-1.9/lib/safe-read.c������������������������������������������������������������������������0000644�0000000�0000000�00000003511�14226564450�012655� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to read and write that retries after interrupts. Copyright (C) 1993-1994, 1998, 2002-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #ifdef SAFE_WRITE # include "safe-write.h" #else # include "safe-read.h" #endif /* Get ssize_t. */ #include <sys/types.h> #include <unistd.h> #include <errno.h> #ifdef EINTR # define IS_EINTR(x) ((x) == EINTR) #else # define IS_EINTR(x) 0 #endif #include "sys-limits.h" #ifdef SAFE_WRITE # define safe_rw safe_write # define rw write #else # define safe_rw safe_read # define rw read # undef const # define const /* empty */ #endif /* Read(write) up to COUNT bytes at BUF from(to) descriptor FD, retrying if interrupted. Return the actual number of bytes read(written), zero for EOF, or SAFE_READ_ERROR(SAFE_WRITE_ERROR) upon error. */ size_t safe_rw (int fd, void const *buf, size_t count) { for (;;) { ssize_t result = rw (fd, buf, count); if (0 <= result) return result; else if (IS_EINTR (errno)) continue; else if (errno == EINVAL && SYS_BUFSIZE_MAX < count) count = SYS_BUFSIZE_MAX; else return result; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fseterr.h��������������������������������������������������������������������������0000644�0000000�0000000�00000002374�14226564447�012521� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set the error indicator of a stream. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _FSETERR_H #define _FSETERR_H #include <stdio.h> /* Set the error indicator of the stream FP. The "error indicator" is set when an I/O operation on the stream fails, and is cleared (together with the "end-of-file" indicator) by clearerr (FP). */ #if HAVE___FSETERR /* musl libc */ # include <stdio_ext.h> # define fseterr(fp) __fseterr (fp) #else # ifdef __cplusplus extern "C" { # endif extern void fseterr (FILE *fp); # ifdef __cplusplus } # endif #endif #endif /* _FSETERR_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/se-selinux.in.h��������������������������������������������������������������������0000644�0000000�0000000�00000010741�14226564450�013537� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacement <selinux/selinux.h> for platforms that lack it. Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if HAVE_SELINUX_SELINUX_H #@INCLUDE_NEXT@ @NEXT_SELINUX_SELINUX_H@ #else # if !defined _@GUARD_PREFIX@_SELINUX_SELINUX_H # define _@GUARD_PREFIX@_SELINUX_SELINUX_H # include <sys/types.h> # include <errno.h> # ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." # endif _GL_INLINE_HEADER_BEGIN # ifndef SE_SELINUX_INLINE # define SE_SELINUX_INLINE _GL_INLINE # endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ # ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # if 0 /* no GCC or clang version supports this yet */ # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # elif defined __GNUC__ || defined __clang__ # define _GL_ATTRIBUTE_MAYBE_UNUSED __attribute__ ((__unused__)) # else # define _GL_ATTRIBUTE_MAYBE_UNUSED # endif # endif # if !GNULIB_defined_security_types typedef unsigned short security_class_t; struct selinux_opt; # define is_selinux_enabled() 0 SE_SELINUX_INLINE int getcon (_GL_ATTRIBUTE_MAYBE_UNUSED char **con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE void freecon (_GL_ATTRIBUTE_MAYBE_UNUSED char *con) {} SE_SELINUX_INLINE int getfscreatecon (_GL_ATTRIBUTE_MAYBE_UNUSED char **con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int setfscreatecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int matchpathcon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file, _GL_ATTRIBUTE_MAYBE_UNUSED mode_t m, _GL_ATTRIBUTE_MAYBE_UNUSED char **con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int getfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file, _GL_ATTRIBUTE_MAYBE_UNUSED char **con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int lgetfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file, _GL_ATTRIBUTE_MAYBE_UNUSED char **con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int fgetfilecon (int fd,_GL_ATTRIBUTE_MAYBE_UNUSED char **con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int setfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file, _GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int lsetfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *file, _GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int fsetfilecon (_GL_ATTRIBUTE_MAYBE_UNUSED int fd, _GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int security_check_context (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int security_check_context_raw (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int setexeccon (_GL_ATTRIBUTE_MAYBE_UNUSED char const *con) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE int security_compute_create (_GL_ATTRIBUTE_MAYBE_UNUSED char const *scon, _GL_ATTRIBUTE_MAYBE_UNUSED char const *tcon, _GL_ATTRIBUTE_MAYBE_UNUSED security_class_t tclass, _GL_ATTRIBUTE_MAYBE_UNUSED char **newcon) { errno = ENOTSUP; return -1; } SE_SELINUX_INLINE security_class_t string_to_security_class (char const *name) { errno = ENOTSUP; return 0; } SE_SELINUX_INLINE int matchpathcon_init_prefix (_GL_ATTRIBUTE_MAYBE_UNUSED char const *path, _GL_ATTRIBUTE_MAYBE_UNUSED char const *prefix) { errno = ENOTSUP; return -1; } # define GNULIB_defined_security_types 1 # endif _GL_INLINE_HEADER_END # endif #endif �������������������������������recutils-1.9/lib/c-strncasecmp.c��������������������������������������������������������������������0000644�0000000�0000000�00000003130�14226564447�013573� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strncasecmp.c -- case insensitive string comparator in C locale Copyright (C) 1998-1999, 2005-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "c-strcase.h" #include <limits.h> #include "c-ctype.h" int c_strncasecmp (const char *s1, const char *s2, size_t n) { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2 || n == 0) return 0; do { c1 = c_tolower (*p1); c2 = c_tolower (*p2); if (--n == 0 || c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/scratch_buffer.h�������������������������������������������������������������������0000644�0000000�0000000�00000011456�14226564447�014030� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable-sized buffer with on-stack default allocation. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert, 2017. */ #ifndef _GL_SCRATCH_BUFFER_H #define _GL_SCRATCH_BUFFER_H /* Scratch buffers with a default stack allocation and fallback to heap allocation. It is expected that this function is used in this way: struct scratch_buffer tmpbuf; scratch_buffer_init (&tmpbuf); while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) if (!scratch_buffer_grow (&tmpbuf)) return -1; scratch_buffer_free (&tmpbuf); return 0; The allocation functions (scratch_buffer_grow, scratch_buffer_grow_preserve, scratch_buffer_set_array_size) make sure that the heap allocation, if any, is freed, so that the code above does not have a memory leak. The buffer still remains in a state that can be deallocated using scratch_buffer_free, so a loop like this is valid as well: struct scratch_buffer tmpbuf; scratch_buffer_init (&tmpbuf); while (!function_that_uses_buffer (tmpbuf.data, tmpbuf.length)) if (!scratch_buffer_grow (&tmpbuf)) break; scratch_buffer_free (&tmpbuf); scratch_buffer_grow and scratch_buffer_grow_preserve are guaranteed to grow the buffer by at least 512 bytes. This means that when using the scratch buffer as a backing store for a non-character array whose element size, in bytes, is 512 or smaller, the scratch buffer only has to grow once to make room for at least one more element. */ /* Scratch buffer. Must be initialized with scratch_buffer_init before its use. */ struct scratch_buffer; /* Initializes *BUFFER so that BUFFER->data points to BUFFER->__space and BUFFER->length reflects the available space. */ #if 0 extern void scratch_buffer_init (struct scratch_buffer *buffer); #endif /* Deallocates *BUFFER (if it was heap-allocated). */ #if 0 extern void scratch_buffer_free (struct scratch_buffer *buffer); #endif /* Grow *BUFFER by some arbitrary amount. The buffer contents is NOT preserved. Return true on success, false on allocation failure (in which case the old buffer is freed). On success, the new buffer is larger than the previous size. On failure, *BUFFER is deallocated, but remains in a free-able state, and errno is set. */ #if 0 extern bool scratch_buffer_grow (struct scratch_buffer *buffer); #endif /* Like scratch_buffer_grow, but preserve the old buffer contents on success, as a prefix of the new buffer. */ #if 0 extern bool scratch_buffer_grow_preserve (struct scratch_buffer *buffer); #endif /* Grow *BUFFER so that it can store at least NELEM elements of SIZE bytes. The buffer contents are NOT preserved. Both NELEM and SIZE can be zero. Return true on success, false on allocation failure (in which case the old buffer is freed, but *BUFFER remains in a free-able state, and errno is set). It is unspecified whether this function can reduce the array size. */ #if 0 extern bool scratch_buffer_set_array_size (struct scratch_buffer *buffer, size_t nelem, size_t size); #endif /* Return a copy of *BUFFER's first SIZE bytes as a heap-allocated block, deallocating *BUFFER if it was heap-allocated. SIZE must be at most *BUFFER's size. Return NULL (setting errno) on memory exhaustion. */ #if 0 extern void *scratch_buffer_dupfree (struct scratch_buffer *buffer, size_t size); #endif /* The implementation is imported from glibc. */ /* Avoid possible conflicts with symbols exported by the GNU libc. */ #define __libc_scratch_buffer_dupfree gl_scratch_buffer_dupfree #define __libc_scratch_buffer_grow gl_scratch_buffer_grow #define __libc_scratch_buffer_grow_preserve gl_scratch_buffer_grow_preserve #define __libc_scratch_buffer_set_array_size gl_scratch_buffer_set_array_size #ifndef _GL_LIKELY /* Rely on __builtin_expect, as provided by the module 'builtin-expect'. */ # define _GL_LIKELY(cond) __builtin_expect ((cond), 1) # define _GL_UNLIKELY(cond) __builtin_expect ((cond), 0) #endif #include <malloc/scratch_buffer.gl.h> #endif /* _GL_SCRATCH_BUFFER_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/windows-recmutex.h�����������������������������������������������������������������0000644�0000000�0000000�00000003675�14226564451�014373� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain recursive mutexes (native Windows implementation). Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_RECMUTEX_H #define _WINDOWS_RECMUTEX_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include "windows-initguard.h" /* The native Windows documentation says that CRITICAL_SECTION already implements a recursive lock. But we need not rely on it: It's easy to implement a recursive lock without this assumption. */ typedef struct { glwthread_initguard_t guard; /* protects the initialization */ DWORD owner; unsigned long depth; CRITICAL_SECTION lock; } glwthread_recmutex_t; #define GLWTHREAD_RECMUTEX_INIT { GLWTHREAD_INITGUARD_INIT, 0, 0 } #ifdef __cplusplus extern "C" { #endif extern void glwthread_recmutex_init (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_lock (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_trylock (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_unlock (glwthread_recmutex_t *mutex); extern int glwthread_recmutex_destroy (glwthread_recmutex_t *mutex); #ifdef __cplusplus } #endif #endif /* _WINDOWS_RECMUTEX_H */ �������������������������������������������������������������������recutils-1.9/lib/asprintf.c�������������������������������������������������������������������������0000644�0000000�0000000�00000002143�14226564447�012662� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #ifdef IN_LIBASPRINTF # include "vasprintf.h" #else # include <stdio.h> #endif #include <stdarg.h> int asprintf (char **resultp, const char *format, ...) { va_list args; int result; va_start (args, format); result = vasprintf (resultp, format, args); va_end (args); return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/secure_getenv.c��������������������������������������������������������������������0000644�0000000�0000000�00000003771�14226564450�013674� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Look up an environment variable, returning NULL in insecure situations. Copyright 2013-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #if !HAVE___SECURE_GETENV # if HAVE_ISSETUGID || (HAVE_GETUID && HAVE_GETEUID && HAVE_GETGID && HAVE_GETEGID) # include <unistd.h> # endif #endif char * secure_getenv (char const *name) { #if HAVE___SECURE_GETENV /* glibc */ return __secure_getenv (name); #elif HAVE_ISSETUGID /* OS X, FreeBSD, NetBSD, OpenBSD */ if (issetugid ()) return NULL; return getenv (name); #elif HAVE_GETUID && HAVE_GETEUID && HAVE_GETGID && HAVE_GETEGID /* other Unix */ if (geteuid () != getuid () || getegid () != getgid ()) return NULL; return getenv (name); #elif defined _WIN32 && ! defined __CYGWIN__ /* native Windows */ /* On native Windows, there is no such concept as setuid or setgid binaries. - Programs launched as system services have high privileges, but they don't inherit environment variables from a user. - Programs launched by a user with "Run as Administrator" have high privileges and use the environment variables, but the user has been asked whether he agrees. - Programs launched by a user without "Run as Administrator" cannot gain high privileges, therefore there is no risk. */ return getenv (name); #else return NULL; #endif } �������recutils-1.9/lib/quote.h����������������������������������������������������������������������������0000644�0000000�0000000�00000003503�14226564450�012171� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* quote.h - prototypes for quote.c Copyright (C) 1998-2001, 2003, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef QUOTE_H_ # define QUOTE_H_ 1 # include <stddef.h> /* The quoting options used by quote_n and quote. Its type is incomplete, so it's useful only in expressions like '"e_quoting_options'. */ extern struct quoting_options quote_quoting_options; /* Return an unambiguous printable representation of ARG (of size ARGSIZE), allocated in slot N, suitable for diagnostics. If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE. */ char const *quote_n_mem (int n, char const *arg, size_t argsize); /* Return an unambiguous printable representation of ARG (of size ARGSIZE), suitable for diagnostics. If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE. */ char const *quote_mem (char const *arg, size_t argsize); /* Return an unambiguous printable representation of ARG, allocated in slot N, suitable for diagnostics. */ char const *quote_n (int n, char const *arg); /* Return an unambiguous printable representation of ARG, suitable for diagnostics. */ char const *quote (char const *arg); #endif /* !QUOTE_H_ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/isnanl.c���������������������������������������������������������������������������0000644�0000000�0000000�00000001547�14226564450�012321� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #define USE_LONG_DOUBLE #include "isnan.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/xsize.h����������������������������������������������������������������������������0000644�0000000�0000000�00000006757�14226564451�012215� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xsize.h -- Checked size_t computations. Copyright (C) 2003, 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _XSIZE_H #define _XSIZE_H /* Get size_t. */ #include <stddef.h> /* Get SIZE_MAX. */ #include <limits.h> #if HAVE_STDINT_H # include <stdint.h> #endif /* Get ATTRIBUTE_PURE. */ #include "attribute.h" #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef XSIZE_INLINE # define XSIZE_INLINE _GL_INLINE #endif /* The size of memory objects is often computed through expressions of type size_t. Example: void* p = malloc (header_size + n * element_size). These computations can lead to overflow. When this happens, malloc() returns a piece of memory that is way too small, and the program then crashes while attempting to fill the memory. To avoid this, the functions and macros in this file check for overflow. The convention is that SIZE_MAX represents overflow. malloc (SIZE_MAX) is not guaranteed to fail -- think of a malloc implementation that uses mmap --, it's recommended to use size_overflow_p() or size_in_bounds_p() before invoking malloc(). The example thus becomes: size_t size = xsum (header_size, xtimes (n, element_size)); void *p = (size_in_bounds_p (size) ? malloc (size) : NULL); */ /* Convert an arbitrary value >= 0 to type size_t. */ #define xcast_size_t(N) \ ((N) <= SIZE_MAX ? (size_t) (N) : SIZE_MAX) /* Sum of two sizes, with overflow check. */ XSIZE_INLINE size_t ATTRIBUTE_PURE xsum (size_t size1, size_t size2) { size_t sum = size1 + size2; return (sum >= size1 ? sum : SIZE_MAX); } /* Sum of three sizes, with overflow check. */ XSIZE_INLINE size_t ATTRIBUTE_PURE xsum3 (size_t size1, size_t size2, size_t size3) { return xsum (xsum (size1, size2), size3); } /* Sum of four sizes, with overflow check. */ XSIZE_INLINE size_t ATTRIBUTE_PURE xsum4 (size_t size1, size_t size2, size_t size3, size_t size4) { return xsum (xsum (xsum (size1, size2), size3), size4); } /* Maximum of two sizes, with overflow check. */ XSIZE_INLINE size_t ATTRIBUTE_PURE xmax (size_t size1, size_t size2) { /* No explicit check is needed here, because for any n: max (SIZE_MAX, n) == SIZE_MAX and max (n, SIZE_MAX) == SIZE_MAX. */ return (size1 >= size2 ? size1 : size2); } /* Multiplication of a count with an element size, with overflow check. The count must be >= 0 and the element size must be > 0. This is a macro, not a function, so that it works correctly even when N is of a wider type and N > SIZE_MAX. */ #define xtimes(N, ELSIZE) \ ((N) <= SIZE_MAX / (ELSIZE) ? (size_t) (N) * (ELSIZE) : SIZE_MAX) /* Check for overflow. */ #define size_overflow_p(SIZE) \ ((SIZE) == SIZE_MAX) /* Check against overflow. */ #define size_in_bounds_p(SIZE) \ ((SIZE) != SIZE_MAX) _GL_INLINE_HEADER_END #endif /* _XSIZE_H */ �����������������recutils-1.9/lib/xmalloc.c��������������������������������������������������������������������������0000644�0000000�0000000�00000020315�14226564451�012467� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xmalloc.c -- malloc with out of memory checking Copyright (C) 1990-2000, 2002-2006, 2008-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define XALLOC_INLINE _GL_EXTERN_INLINE #include "xalloc.h" #include "ialloc.h" #include "intprops.h" #include "minmax.h" #include <stdlib.h> #include <string.h> static void * _GL_ATTRIBUTE_PURE nonnull (void *p) { if (!p) xalloc_die (); return p; } /* Allocate S bytes of memory dynamically, with error checking. */ void * xmalloc (size_t s) { return nonnull (malloc (s)); } void * ximalloc (idx_t s) { return nonnull (imalloc (s)); } char * xcharalloc (size_t n) { return XNMALLOC (n, char); } /* Change the size of an allocated block of memory P to S bytes, with error checking. */ void * xrealloc (void *p, size_t s) { void *r = realloc (p, s); if (!r && (!p || s)) xalloc_die (); return r; } void * xirealloc (void *p, idx_t s) { return nonnull (irealloc (p, s)); } /* Change the size of an allocated block of memory P to an array of N objects each of S bytes, with error checking. */ void * xreallocarray (void *p, size_t n, size_t s) { void *r = reallocarray (p, n, s); if (!r && (!p || (n && s))) xalloc_die (); return r; } void * xireallocarray (void *p, idx_t n, idx_t s) { return nonnull (ireallocarray (p, n, s)); } /* Allocate an array of N objects, each with S bytes of memory, dynamically, with error checking. S must be nonzero. */ void * xnmalloc (size_t n, size_t s) { return xreallocarray (NULL, n, s); } void * xinmalloc (idx_t n, idx_t s) { return xireallocarray (NULL, n, s); } /* If P is null, allocate a block of at least *PS bytes; otherwise, reallocate P so that it contains more than *PS bytes. *PS must be nonzero unless P is null. Set *PS to the new block's size, and return the pointer to the new block. *PS is never set to zero, and the returned pointer is never null. */ void * x2realloc (void *p, size_t *ps) { return x2nrealloc (p, ps, 1); } /* If P is null, allocate a block of at least *PN such objects; otherwise, reallocate P so that it contains more than *PN objects each of S bytes. S must be nonzero. Set *PN to the new number of objects, and return the pointer to the new block. *PN is never set to zero, and the returned pointer is never null. Repeated reallocations are guaranteed to make progress, either by allocating an initial block with a nonzero size, or by allocating a larger block. In the following implementation, nonzero sizes are increased by a factor of approximately 1.5 so that repeated reallocations have O(N) overall cost rather than O(N**2) cost, but the specification for this function does not guarantee that rate. Here is an example of use: int *p = NULL; size_t used = 0; size_t allocated = 0; void append_int (int value) { if (used == allocated) p = x2nrealloc (p, &allocated, sizeof *p); p[used++] = value; } This causes x2nrealloc to allocate a block of some nonzero size the first time it is called. To have finer-grained control over the initial size, set *PN to a nonzero value before calling this function with P == NULL. For example: int *p = NULL; size_t used = 0; size_t allocated = 0; size_t allocated1 = 1000; void append_int (int value) { if (used == allocated) { p = x2nrealloc (p, &allocated1, sizeof *p); allocated = allocated1; } p[used++] = value; } */ void * x2nrealloc (void *p, size_t *pn, size_t s) { size_t n = *pn; if (! p) { if (! n) { /* The approximate size to use for initial small allocation requests, when the invoking code specifies an old size of zero. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; n = DEFAULT_MXFAST / s; n += !n; } } else { /* Set N = floor (1.5 * N) + 1 to make progress even if N == 0. */ if (INT_ADD_WRAPV (n, (n >> 1) + 1, &n)) xalloc_die (); } p = xreallocarray (p, n, s); *pn = n; return p; } /* Grow PA, which points to an array of *PN items, and return the location of the reallocated array, updating *PN to reflect its new size. The new array will contain at least N_INCR_MIN more items, but will not contain more than N_MAX items total. S is the size of each item, in bytes. S and N_INCR_MIN must be positive. *PN must be nonnegative. If N_MAX is -1, it is treated as if it were infinity. If PA is null, then allocate a new array instead of reallocating the old one. Thus, to grow an array A without saving its old contents, do { free (A); A = xpalloc (NULL, &AITEMS, ...); }. */ void * xpalloc (void *pa, idx_t *pn, idx_t n_incr_min, ptrdiff_t n_max, idx_t s) { idx_t n0 = *pn; /* The approximate size to use for initial small allocation requests. This is the largest "small" request for the GNU C library malloc. */ enum { DEFAULT_MXFAST = 64 * sizeof (size_t) / 4 }; /* If the array is tiny, grow it to about (but no greater than) DEFAULT_MXFAST bytes. Otherwise, grow it by about 50%. Adjust the growth according to three constraints: N_INCR_MIN, N_MAX, and what the C language can represent safely. */ idx_t n; if (INT_ADD_WRAPV (n0, n0 >> 1, &n)) n = IDX_MAX; if (0 <= n_max && n_max < n) n = n_max; /* NBYTES is of a type suitable for holding the count of bytes in an object. This is typically idx_t, but it should be size_t on (theoretical?) platforms where SIZE_MAX < IDX_MAX so xpalloc does not pass values greater than SIZE_MAX to xrealloc. */ #if IDX_MAX <= SIZE_MAX idx_t nbytes; #else size_t nbytes; #endif idx_t adjusted_nbytes = (INT_MULTIPLY_WRAPV (n, s, &nbytes) ? MIN (IDX_MAX, SIZE_MAX) : nbytes < DEFAULT_MXFAST ? DEFAULT_MXFAST : 0); if (adjusted_nbytes) { n = adjusted_nbytes / s; nbytes = adjusted_nbytes - adjusted_nbytes % s; } if (! pa) *pn = 0; if (n - n0 < n_incr_min && (INT_ADD_WRAPV (n0, n_incr_min, &n) || (0 <= n_max && n_max < n) || INT_MULTIPLY_WRAPV (n, s, &nbytes))) xalloc_die (); pa = xrealloc (pa, nbytes); *pn = n; return pa; } /* Allocate S bytes of zeroed memory dynamically, with error checking. There's no need for xnzalloc (N, S), since it would be equivalent to xcalloc (N, S). */ void * xzalloc (size_t s) { return xcalloc (s, 1); } void * xizalloc (idx_t s) { return xicalloc (s, 1); } /* Allocate zeroed memory for N elements of S bytes, with error checking. S must be nonzero. */ void * xcalloc (size_t n, size_t s) { return nonnull (calloc (n, s)); } void * xicalloc (idx_t n, idx_t s) { return nonnull (icalloc (n, s)); } /* Clone an object P of size S, with error checking. There's no need for xnmemdup (P, N, S), since xmemdup (P, N * S) works without any need for an arithmetic overflow check. */ void * xmemdup (void const *p, size_t s) { return memcpy (xmalloc (s), p, s); } void * ximemdup (void const *p, idx_t s) { return memcpy (ximalloc (s), p, s); } /* Clone an object P of size S, with error checking. Append a terminating NUL byte. */ char * ximemdup0 (void const *p, idx_t s) { char *result = ximalloc (s + 1); result[s] = 0; return memcpy (result, p, s); } /* Clone STRING. */ char * xstrdup (char const *string) { return xmemdup (string, strlen (string) + 1); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/minmax.h���������������������������������������������������������������������������0000644�0000000�0000000�00000004532�14226564450�012330� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* MIN, MAX macros. Copyright (C) 1995, 1998, 2001, 2003, 2005, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _MINMAX_H #define _MINMAX_H /* Note: MIN, MAX are also defined in <sys/param.h> on some systems (glibc, IRIX, HP-UX, OSF/1). Therefore you might get warnings about MIN, MAX macro redefinitions on some systems; the workaround is to #include this file as the last one among the #include list. */ /* Before we define the following symbols we get the <limits.h> file since otherwise we get redefinitions on some systems if <limits.h> is included after this file. Likewise for <sys/param.h>. If more than one of these system headers define MIN and MAX, pick just one of the headers (because the definitions most likely are the same). */ #if HAVE_MINMAX_IN_LIMITS_H # include <limits.h> #elif HAVE_MINMAX_IN_SYS_PARAM_H # include <sys/param.h> #endif /* Note: MIN and MAX should be used with two arguments of the same type. They might not return the minimum and maximum of their two arguments, if the arguments have different types or have unusual floating-point values. For example, on a typical host with 32-bit 'int', 64-bit 'long long', and 64-bit IEEE 754 'double' types: MAX (-1, 2147483648) returns 4294967295. MAX (9007199254740992.0, 9007199254740993) returns 9007199254740992.0. MAX (NaN, 0.0) returns 0.0. MAX (+0.0, -0.0) returns -0.0. and in each case the answer is in some sense bogus. */ /* MAX(a,b) returns the maximum of A and B. */ #ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) #endif /* MIN(a,b) returns the minimum of A and B. */ #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #endif /* _MINMAX_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stdlib.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000152710�14226564451�012730� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <stdlib.h>. Copyright (C) 1995, 2001-2004, 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_stdlib_h || defined __need_malloc_and_calloc /* Special invocation conventions inside some gnulib header files, and inside some glibc header files, respectively. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDLIB_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDLIB_H@ #ifndef _@GUARD_PREFIX@_STDLIB_H #define _@GUARD_PREFIX@_STDLIB_H /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* MirBSD 10 defines WEXITSTATUS in <sys/wait.h>, not in <stdlib.h>. */ #if @GNULIB_SYSTEM_POSIX@ && !defined WEXITSTATUS # include <sys/wait.h> #endif /* Solaris declares getloadavg() in <sys/loadavg.h>. */ #if (@GNULIB_GETLOADAVG@ || defined GNULIB_POSIXCHECK) && @HAVE_SYS_LOADAVG_H@ /* OpenIndiana has a bug: <sys/time.h> must be included before <sys/loadavg.h>. */ # include <sys/time.h> # include <sys/loadavg.h> #endif /* Native Windows platforms declare _mktemp() in <io.h>. */ #if defined _WIN32 && !defined __CYGWIN__ # include <io.h> #endif #if @GNULIB_RANDOM_R@ /* OSF/1 5.1 declares 'struct random_data' in <random.h>, which is included from <stdlib.h> if _REENTRANT is defined. Include it whenever we need 'struct random_data'. */ # if @HAVE_RANDOM_H@ # include <random.h> # endif # if !@HAVE_STRUCT_RANDOM_DATA@ || @REPLACE_RANDOM_R@ || !@HAVE_RANDOM_R@ # include <stdint.h> # endif # if !@HAVE_STRUCT_RANDOM_DATA@ /* Define 'struct random_data'. But allow multiple gnulib generated <stdlib.h> replacements to coexist. */ # if !GNULIB_defined_struct_random_data struct random_data { int32_t *fptr; /* Front pointer. */ int32_t *rptr; /* Rear pointer. */ int32_t *state; /* Array of state values. */ int rand_type; /* Type of random number generator. */ int rand_deg; /* Degree of random number generator. */ int rand_sep; /* Distance between front and rear. */ int32_t *end_ptr; /* Pointer behind state table. */ }; # define GNULIB_defined_struct_random_data 1 # endif # endif #endif #if (@GNULIB_MKSTEMP@ || @GNULIB_MKSTEMPS@ || @GNULIB_MKOSTEMP@ || @GNULIB_MKOSTEMPS@ || @GNULIB_GETSUBOPT@ || defined GNULIB_POSIXCHECK) && ! defined __GLIBC__ && !(defined _WIN32 && ! defined __CYGWIN__) /* On Mac OS X 10.3, only <unistd.h> declares mkstemp. */ /* On Mac OS X 10.5, only <unistd.h> declares mkstemps. */ /* On Mac OS X 10.13, only <unistd.h> declares mkostemp and mkostemps. */ /* On Cygwin 1.7.1, only <unistd.h> declares getsubopt. */ /* But avoid namespace pollution on glibc systems and native Windows. */ # include <unistd.h> #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definition of _Noreturn is copied here. */ /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Some systems do not define EXIT_*, despite otherwise supporting C89. */ #ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 #endif /* Tandem/NSK and other platforms that define EXIT_FAILURE as -1 interfere with proper operation of xargs. */ #ifndef EXIT_FAILURE # define EXIT_FAILURE 1 #elif EXIT_FAILURE != 1 # undef EXIT_FAILURE # define EXIT_FAILURE 1 #endif #if @GNULIB__EXIT@ /* Terminate the current process with the given return code, without running the 'atexit' handlers. */ # if !@HAVE__EXIT@ _GL_FUNCDECL_SYS (_Exit, _Noreturn void, (int status)); # endif _GL_CXXALIAS_SYS (_Exit, void, (int status)); _GL_CXXALIASWARN (_Exit); #elif defined GNULIB_POSIXCHECK # undef _Exit # if HAVE_RAW_DECL__EXIT _GL_WARN_ON_USE (_Exit, "_Exit is unportable - " "use gnulib module _Exit for portability"); # endif #endif #if @GNULIB_FREE_POSIX@ # if @REPLACE_FREE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef free # define free rpl_free # endif _GL_FUNCDECL_RPL (free, void, (void *ptr)); _GL_CXXALIAS_RPL (free, void, (void *ptr)); # else _GL_CXXALIAS_SYS (free, void, (void *ptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (free); # endif #elif defined GNULIB_POSIXCHECK # undef free /* Assume free is always declared. */ _GL_WARN_ON_USE (free, "free is not future POSIX compliant everywhere - " "use gnulib module free for portability"); #endif /* Allocate memory with indefinite extent and specified alignment. */ #if @GNULIB_ALIGNED_ALLOC@ # if @REPLACE_ALIGNED_ALLOC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef aligned_alloc # define aligned_alloc rpl_aligned_alloc # endif _GL_FUNCDECL_RPL (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (aligned_alloc, void *, (size_t alignment, size_t size)); # else # if @HAVE_ALIGNED_ALLOC@ # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */ _GL_FUNCDECL_SYS (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (aligned_alloc, void *, (size_t alignment, size_t size)); # endif # endif # if @HAVE_ALIGNED_ALLOC@ _GL_CXXALIASWARN (aligned_alloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined aligned_alloc /* For -Wmismatched-dealloc: Associate aligned_alloc with free or rpl_free. */ _GL_FUNCDECL_SYS (aligned_alloc, void *, (size_t alignment, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef aligned_alloc # if HAVE_RAW_DECL_ALIGNED_ALLOC _GL_WARN_ON_USE (aligned_alloc, "aligned_alloc is not portable - " "use gnulib module aligned_alloc for portability"); # endif # endif #endif #if @GNULIB_ATOLL@ /* Parse a signed decimal integer. Returns the value of the integer. Errors are not detected. */ # if !@HAVE_ATOLL@ _GL_FUNCDECL_SYS (atoll, long long, (const char *string) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (atoll, long long, (const char *string)); _GL_CXXALIASWARN (atoll); #elif defined GNULIB_POSIXCHECK # undef atoll # if HAVE_RAW_DECL_ATOLL _GL_WARN_ON_USE (atoll, "atoll is unportable - " "use gnulib module atoll for portability"); # endif #endif #if @GNULIB_CALLOC_POSIX@ # if (@GNULIB_CALLOC_POSIX@ && @REPLACE_CALLOC_FOR_CALLOC_POSIX@) \ || (@GNULIB_CALLOC_GNU@ && @REPLACE_CALLOC_FOR_CALLOC_GNU@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef calloc # define calloc rpl_calloc # endif _GL_FUNCDECL_RPL (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (calloc, void *, (size_t nmemb, size_t size)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */ _GL_FUNCDECL_SYS (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (calloc, void *, (size_t nmemb, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (calloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined calloc /* For -Wmismatched-dealloc: Associate calloc with free or rpl_free. */ _GL_FUNCDECL_SYS (calloc, void *, (size_t nmemb, size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef calloc /* Assume calloc is always declared. */ _GL_WARN_ON_USE (calloc, "calloc is not POSIX compliant everywhere - " "use gnulib module calloc-posix for portability"); # endif #endif #if @GNULIB_CANONICALIZE_FILE_NAME@ # if @REPLACE_CANONICALIZE_FILE_NAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define canonicalize_file_name rpl_canonicalize_file_name # endif _GL_FUNCDECL_RPL (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (canonicalize_file_name, char *, (const char *name)); # else # if !@HAVE_CANONICALIZE_FILE_NAME@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (canonicalize_file_name, char *, (const char *name)); # endif # ifndef GNULIB_defined_canonicalize_file_name # define GNULIB_defined_canonicalize_file_name \ (!@HAVE_CANONICALIZE_FILE_NAME@ || @REPLACE_CANONICALIZE_FILE_NAME@) # endif _GL_CXXALIASWARN (canonicalize_file_name); #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined canonicalize_file_name /* For -Wmismatched-dealloc: Associate canonicalize_file_name with free or rpl_free. */ _GL_FUNCDECL_SYS (canonicalize_file_name, char *, (const char *name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef canonicalize_file_name # if HAVE_RAW_DECL_CANONICALIZE_FILE_NAME _GL_WARN_ON_USE (canonicalize_file_name, "canonicalize_file_name is unportable - " "use gnulib module canonicalize-lgpl for portability"); # endif # endif #endif #if @GNULIB_MDA_ECVT@ /* On native Windows, map 'ecvt' to '_ecvt', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::ecvt on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ecvt # define ecvt _ecvt # endif _GL_CXXALIAS_MDA (ecvt, char *, (double number, int ndigits, int *decptp, int *signp)); # else # if @HAVE_DECL_ECVT@ _GL_CXXALIAS_SYS (ecvt, char *, (double number, int ndigits, int *decptp, int *signp)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_ECVT@ _GL_CXXALIASWARN (ecvt); # endif #endif #if @GNULIB_MDA_FCVT@ /* On native Windows, map 'fcvt' to '_fcvt', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fcvt on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcvt # define fcvt _fcvt # endif _GL_CXXALIAS_MDA (fcvt, char *, (double number, int ndigits, int *decptp, int *signp)); # else # if @HAVE_DECL_FCVT@ _GL_CXXALIAS_SYS (fcvt, char *, (double number, int ndigits, int *decptp, int *signp)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_FCVT@ _GL_CXXALIASWARN (fcvt); # endif #endif #if @GNULIB_MDA_GCVT@ /* On native Windows, map 'gcvt' to '_gcvt', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::gcvt on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gcvt # define gcvt _gcvt # endif _GL_CXXALIAS_MDA (gcvt, char *, (double number, int ndigits, char *buf)); # else # if @HAVE_DECL_GCVT@ _GL_CXXALIAS_SYS (gcvt, char *, (double number, int ndigits, char *buf)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_GCVT@ _GL_CXXALIASWARN (gcvt); # endif #endif #if @GNULIB_GETLOADAVG@ /* Store max(NELEM,3) load average numbers in LOADAVG[]. The three numbers are the load average of the last 1 minute, the last 5 minutes, and the last 15 minutes, respectively. LOADAVG is an array of NELEM numbers. */ # if !@HAVE_DECL_GETLOADAVG@ _GL_FUNCDECL_SYS (getloadavg, int, (double loadavg[], int nelem) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getloadavg, int, (double loadavg[], int nelem)); _GL_CXXALIASWARN (getloadavg); #elif defined GNULIB_POSIXCHECK # undef getloadavg # if HAVE_RAW_DECL_GETLOADAVG _GL_WARN_ON_USE (getloadavg, "getloadavg is not portable - " "use gnulib module getloadavg for portability"); # endif #endif #if @GNULIB_GETSUBOPT@ /* Assuming *OPTIONP is a comma separated list of elements of the form "token" or "token=value", getsubopt parses the first of these elements. If the first element refers to a "token" that is member of the given NULL-terminated array of tokens: - It replaces the comma with a NUL byte, updates *OPTIONP to point past the first option and the comma, sets *VALUEP to the value of the element (or NULL if it doesn't contain an "=" sign), - It returns the index of the "token" in the given array of tokens. Otherwise it returns -1, and *OPTIONP and *VALUEP are undefined. For more details see the POSIX specification. https://pubs.opengroup.org/onlinepubs/9699919799/functions/getsubopt.html */ # if !@HAVE_GETSUBOPT@ _GL_FUNCDECL_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getsubopt, int, (char **optionp, char *const *tokens, char **valuep)); _GL_CXXALIASWARN (getsubopt); #elif defined GNULIB_POSIXCHECK # undef getsubopt # if HAVE_RAW_DECL_GETSUBOPT _GL_WARN_ON_USE (getsubopt, "getsubopt is unportable - " "use gnulib module getsubopt for portability"); # endif #endif #if @GNULIB_GRANTPT@ /* Change the ownership and access permission of the slave side of the pseudo-terminal whose master side is specified by FD. */ # if !@HAVE_GRANTPT@ _GL_FUNCDECL_SYS (grantpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (grantpt, int, (int fd)); _GL_CXXALIASWARN (grantpt); #elif defined GNULIB_POSIXCHECK # undef grantpt # if HAVE_RAW_DECL_GRANTPT _GL_WARN_ON_USE (grantpt, "grantpt is not portable - " "use gnulib module grantpt for portability"); # endif #endif /* If _GL_USE_STDLIB_ALLOC is nonzero, the including module does not rely on GNU or POSIX semantics for malloc and realloc (for example, by never specifying a zero size), so it does not need malloc or realloc to be redefined. */ #if @GNULIB_MALLOC_POSIX@ # if (@GNULIB_MALLOC_POSIX@ && @REPLACE_MALLOC_FOR_MALLOC_POSIX@) \ || (@GNULIB_MALLOC_GNU@ && @REPLACE_MALLOC_FOR_MALLOC_GNU@) # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef malloc # define malloc rpl_malloc # endif _GL_FUNCDECL_RPL (malloc, void *, (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (malloc, void *, (size_t size)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */ _GL_FUNCDECL_SYS (malloc, void *, (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (malloc, void *, (size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (malloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined malloc /* For -Wmismatched-dealloc: Associate malloc with free or rpl_free. */ _GL_FUNCDECL_SYS (malloc, void *, (size_t size) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef malloc /* Assume malloc is always declared. */ _GL_WARN_ON_USE (malloc, "malloc is not POSIX compliant everywhere - " "use gnulib module malloc-posix for portability"); # endif #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBTOWC@ # if @REPLACE_MBTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbtowc # define mbtowc rpl_mbtowc # endif _GL_FUNCDECL_RPL (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); _GL_CXXALIAS_RPL (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); # else # if !@HAVE_MBTOWC@ _GL_FUNCDECL_SYS (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); # endif _GL_CXXALIAS_SYS (mbtowc, int, (wchar_t *restrict pwc, const char *restrict s, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbtowc); # endif #elif defined GNULIB_POSIXCHECK # undef mbtowc # if HAVE_RAW_DECL_MBTOWC _GL_WARN_ON_USE (mbtowc, "mbtowc is not portable - " "use gnulib module mbtowc for portability"); # endif #endif #if @GNULIB_MKDTEMP@ /* Create a unique temporary directory from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the directory name unique. Returns TEMPLATE, or a null pointer if it cannot get a unique name. The directory is created mode 700. */ # if !@HAVE_MKDTEMP@ _GL_FUNCDECL_SYS (mkdtemp, char *, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkdtemp, char *, (char * /*template*/)); _GL_CXXALIASWARN (mkdtemp); #elif defined GNULIB_POSIXCHECK # undef mkdtemp # if HAVE_RAW_DECL_MKDTEMP _GL_WARN_ON_USE (mkdtemp, "mkdtemp is unportable - " "use gnulib module mkdtemp for portability"); # endif #endif #if @GNULIB_MKOSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKOSTEMP@ _GL_FUNCDECL_SYS (mkostemp, int, (char * /*template*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemp, int, (char * /*template*/, int /*flags*/)); _GL_CXXALIASWARN (mkostemp); #elif defined GNULIB_POSIXCHECK # undef mkostemp # if HAVE_RAW_DECL_MKOSTEMP _GL_WARN_ON_USE (mkostemp, "mkostemp is unportable - " "use gnulib module mkostemp for portability"); # endif #endif #if @GNULIB_MKOSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE before a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). The file is then created, with the specified flags, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKOSTEMPS@ _GL_FUNCDECL_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkostemps, int, (char * /*template*/, int /*suffixlen*/, int /*flags*/)); _GL_CXXALIASWARN (mkostemps); #elif defined GNULIB_POSIXCHECK # undef mkostemps # if HAVE_RAW_DECL_MKOSTEMPS _GL_WARN_ON_USE (mkostemps, "mkostemps is unportable - " "use gnulib module mkostemps for portability"); # endif #endif #if @GNULIB_MKSTEMP@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if @REPLACE_MKSTEMP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mkstemp rpl_mkstemp # endif _GL_FUNCDECL_RPL (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkstemp, int, (char * /*template*/)); # else # if ! @HAVE_MKSTEMP@ _GL_FUNCDECL_SYS (mkstemp, int, (char * /*template*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemp, int, (char * /*template*/)); # endif _GL_CXXALIASWARN (mkstemp); #elif defined GNULIB_POSIXCHECK # undef mkstemp # if HAVE_RAW_DECL_MKSTEMP _GL_WARN_ON_USE (mkstemp, "mkstemp is unportable - " "use gnulib module mkstemp for portability"); # endif #endif #if @GNULIB_MKSTEMPS@ /* Create a unique temporary file from TEMPLATE. The last six characters of TEMPLATE prior to a suffix of length SUFFIXLEN must be "XXXXXX"; they are replaced with a string that makes the file name unique. The file is then created, ensuring it didn't exist before. The file is created read-write (mask at least 0600 & ~umask), but it may be world-readable and world-writable (mask 0666 & ~umask), depending on the implementation. Returns the open file descriptor if successful, otherwise -1 and errno set. */ # if !@HAVE_MKSTEMPS@ _GL_FUNCDECL_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkstemps, int, (char * /*template*/, int /*suffixlen*/)); _GL_CXXALIASWARN (mkstemps); #elif defined GNULIB_POSIXCHECK # undef mkstemps # if HAVE_RAW_DECL_MKSTEMPS _GL_WARN_ON_USE (mkstemps, "mkstemps is unportable - " "use gnulib module mkstemps for portability"); # endif #endif #if @GNULIB_MDA_MKTEMP@ /* On native Windows, map 'mktemp' to '_mktemp', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::mktemp always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mktemp # define mktemp _mktemp # endif _GL_CXXALIAS_MDA (mktemp, char *, (char * /*template*/)); # else _GL_CXXALIAS_SYS (mktemp, char *, (char * /*template*/)); # endif _GL_CXXALIASWARN (mktemp); #endif /* Allocate memory with indefinite extent and specified alignment. */ #if @GNULIB_POSIX_MEMALIGN@ # if @REPLACE_POSIX_MEMALIGN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef posix_memalign # define posix_memalign rpl_posix_memalign # endif _GL_FUNCDECL_RPL (posix_memalign, int, (void **memptr, size_t alignment, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_memalign, int, (void **memptr, size_t alignment, size_t size)); # else # if @HAVE_POSIX_MEMALIGN@ _GL_CXXALIAS_SYS (posix_memalign, int, (void **memptr, size_t alignment, size_t size)); # endif # endif # if @HAVE_POSIX_MEMALIGN@ _GL_CXXALIASWARN (posix_memalign); # endif #elif defined GNULIB_POSIXCHECK # undef posix_memalign # if HAVE_RAW_DECL_POSIX_MEMALIGN _GL_WARN_ON_USE (posix_memalign, "posix_memalign is not portable - " "use gnulib module posix_memalign for portability"); # endif #endif #if @GNULIB_POSIX_OPENPT@ /* Return an FD open to the master side of a pseudo-terminal. Flags should include O_RDWR, and may also include O_NOCTTY. */ # if !@HAVE_POSIX_OPENPT@ _GL_FUNCDECL_SYS (posix_openpt, int, (int flags)); # endif _GL_CXXALIAS_SYS (posix_openpt, int, (int flags)); _GL_CXXALIASWARN (posix_openpt); #elif defined GNULIB_POSIXCHECK # undef posix_openpt # if HAVE_RAW_DECL_POSIX_OPENPT _GL_WARN_ON_USE (posix_openpt, "posix_openpt is not portable - " "use gnulib module posix_openpt for portability"); # endif #endif #if @GNULIB_PTSNAME@ /* Return the pathname of the pseudo-terminal slave associated with the master FD is open on, or NULL on errors. */ # if @REPLACE_PTSNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname # define ptsname rpl_ptsname # endif _GL_FUNCDECL_RPL (ptsname, char *, (int fd)); _GL_CXXALIAS_RPL (ptsname, char *, (int fd)); # else # if !@HAVE_PTSNAME@ _GL_FUNCDECL_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIAS_SYS (ptsname, char *, (int fd)); # endif _GL_CXXALIASWARN (ptsname); #elif defined GNULIB_POSIXCHECK # undef ptsname # if HAVE_RAW_DECL_PTSNAME _GL_WARN_ON_USE (ptsname, "ptsname is not portable - " "use gnulib module ptsname for portability"); # endif #endif #if @GNULIB_PTSNAME_R@ /* Set the pathname of the pseudo-terminal slave associated with the master FD is open on and return 0, or set errno and return non-zero on errors. */ # if @REPLACE_PTSNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ptsname_r # define ptsname_r rpl_ptsname_r # endif _GL_FUNCDECL_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); _GL_CXXALIAS_RPL (ptsname_r, int, (int fd, char *buf, size_t len)); # else # if !@HAVE_PTSNAME_R@ _GL_FUNCDECL_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif _GL_CXXALIAS_SYS (ptsname_r, int, (int fd, char *buf, size_t len)); # endif # ifndef GNULIB_defined_ptsname_r # define GNULIB_defined_ptsname_r (!@HAVE_PTSNAME_R@ || @REPLACE_PTSNAME_R@) # endif _GL_CXXALIASWARN (ptsname_r); #elif defined GNULIB_POSIXCHECK # undef ptsname_r # if HAVE_RAW_DECL_PTSNAME_R _GL_WARN_ON_USE (ptsname_r, "ptsname_r is not portable - " "use gnulib module ptsname_r for portability"); # endif #endif #if @GNULIB_PUTENV@ # if @REPLACE_PUTENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv rpl_putenv # endif _GL_FUNCDECL_RPL (putenv, int, (char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (putenv, int, (char *string)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv _putenv # endif _GL_CXXALIAS_MDA (putenv, int, (char *string)); # else _GL_CXXALIAS_SYS (putenv, int, (char *string)); # endif _GL_CXXALIASWARN (putenv); #elif @GNULIB_MDA_PUTENV@ /* On native Windows, map 'putenv' to '_putenv', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::putenv always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putenv # define putenv _putenv # endif /* Need to cast, because on mingw, the parameter is either 'const char *string' or 'char *string'. */ _GL_CXXALIAS_MDA_CAST (putenv, int, (char *string)); # else _GL_CXXALIAS_SYS (putenv, int, (char *string)); # endif _GL_CXXALIASWARN (putenv); #endif #if @GNULIB_QSORT_R@ /* Sort an array of NMEMB elements, starting at address BASE, each element occupying SIZE bytes, in ascending order according to the comparison function COMPARE. */ # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_qsort_r_fn_types typedef int (*_gl_qsort_r_compar_fn) (void const *, void const *, void *); # define GNULIB_defined_qsort_r_fn_types 1 # endif # ifdef __cplusplus } # endif # if @REPLACE_QSORT_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef qsort_r # define qsort_r rpl_qsort_r # endif _GL_FUNCDECL_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg)); # else # if !@HAVE_QSORT_R@ _GL_FUNCDECL_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg) _GL_ARG_NONNULL ((1, 4))); # endif _GL_CXXALIAS_SYS (qsort_r, void, (void *base, size_t nmemb, size_t size, _gl_qsort_r_compar_fn compare, void *arg)); # endif _GL_CXXALIASWARN (qsort_r); #elif defined GNULIB_POSIXCHECK # undef qsort_r # if HAVE_RAW_DECL_QSORT_R _GL_WARN_ON_USE (qsort_r, "qsort_r is not portable - " "use gnulib module qsort_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if !@HAVE_RANDOM_R@ # ifndef RAND_MAX # define RAND_MAX 2147483647 # endif # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_RANDOM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef random # define random rpl_random # endif _GL_FUNCDECL_RPL (random, long, (void)); _GL_CXXALIAS_RPL (random, long, (void)); # else # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (random, long, (void)); # endif /* Need to cast, because on Haiku, the return type is int. */ _GL_CXXALIAS_SYS_CAST (random, long, (void)); # endif _GL_CXXALIASWARN (random); #elif defined GNULIB_POSIXCHECK # undef random # if HAVE_RAW_DECL_RANDOM _GL_WARN_ON_USE (random, "random is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_RANDOM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef srandom # define srandom rpl_srandom # endif _GL_FUNCDECL_RPL (srandom, void, (unsigned int seed)); _GL_CXXALIAS_RPL (srandom, void, (unsigned int seed)); # else # if !@HAVE_RANDOM@ _GL_FUNCDECL_SYS (srandom, void, (unsigned int seed)); # endif /* Need to cast, because on FreeBSD, the first parameter is unsigned long seed. */ _GL_CXXALIAS_SYS_CAST (srandom, void, (unsigned int seed)); # endif _GL_CXXALIASWARN (srandom); #elif defined GNULIB_POSIXCHECK # undef srandom # if HAVE_RAW_DECL_SRANDOM _GL_WARN_ON_USE (srandom, "srandom is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_INITSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef initstate # define initstate rpl_initstate # endif _GL_FUNCDECL_RPL (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (initstate, char *, (unsigned int seed, char *buf, size_t buf_size)); # else # if !@HAVE_INITSTATE@ || !@HAVE_DECL_INITSTATE@ _GL_FUNCDECL_SYS (initstate, char *, (unsigned int seed, char *buf, size_t buf_size) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on FreeBSD, the first parameter is unsigned long seed. */ _GL_CXXALIAS_SYS_CAST (initstate, char *, (unsigned int seed, char *buf, size_t buf_size)); # endif _GL_CXXALIASWARN (initstate); #elif defined GNULIB_POSIXCHECK # undef initstate # if HAVE_RAW_DECL_INITSTATE _GL_WARN_ON_USE (initstate, "initstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM@ # if @REPLACE_SETSTATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setstate # define setstate rpl_setstate # endif _GL_FUNCDECL_RPL (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (setstate, char *, (char *arg_state)); # else # if !@HAVE_SETSTATE@ || !@HAVE_DECL_SETSTATE@ _GL_FUNCDECL_SYS (setstate, char *, (char *arg_state) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Mac OS X 10.13, HP-UX, Solaris the first parameter is const char *arg_state. */ _GL_CXXALIAS_SYS_CAST (setstate, char *, (char *arg_state)); # endif _GL_CXXALIASWARN (setstate); #elif defined GNULIB_POSIXCHECK # undef setstate # if HAVE_RAW_DECL_SETSTATE _GL_WARN_ON_USE (setstate, "setstate is unportable - " "use gnulib module random for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef random_r # define random_r rpl_random_r # endif _GL_FUNCDECL_RPL (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (random_r, int, (struct random_data *buf, int32_t *result)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (random_r, int, (struct random_data *buf, int32_t *result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (random_r, int, (struct random_data *buf, int32_t *result)); # endif _GL_CXXALIASWARN (random_r); #elif defined GNULIB_POSIXCHECK # undef random_r # if HAVE_RAW_DECL_RANDOM_R _GL_WARN_ON_USE (random_r, "random_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef srandom_r # define srandom_r rpl_srandom_r # endif _GL_FUNCDECL_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (srandom_r, int, (unsigned int seed, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (srandom_r); #elif defined GNULIB_POSIXCHECK # undef srandom_r # if HAVE_RAW_DECL_SRANDOM_R _GL_WARN_ON_USE (srandom_r, "srandom_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef initstate_r # define initstate_r rpl_initstate_r # endif _GL_FUNCDECL_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state) _GL_ARG_NONNULL ((2, 4))); # endif /* Need to cast, because on Haiku, the third parameter is unsigned long buf_size. */ _GL_CXXALIAS_SYS_CAST (initstate_r, int, (unsigned int seed, char *buf, size_t buf_size, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (initstate_r); #elif defined GNULIB_POSIXCHECK # undef initstate_r # if HAVE_RAW_DECL_INITSTATE_R _GL_WARN_ON_USE (initstate_r, "initstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_RANDOM_R@ # if @REPLACE_RANDOM_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setstate_r # define setstate_r rpl_setstate_r # endif _GL_FUNCDECL_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # else # if !@HAVE_RANDOM_R@ _GL_FUNCDECL_SYS (setstate_r, int, (char *arg_state, struct random_data *rand_state) _GL_ARG_NONNULL ((1, 2))); # endif /* Need to cast, because on Haiku, the first parameter is void *arg_state. */ _GL_CXXALIAS_SYS_CAST (setstate_r, int, (char *arg_state, struct random_data *rand_state)); # endif _GL_CXXALIASWARN (setstate_r); #elif defined GNULIB_POSIXCHECK # undef setstate_r # if HAVE_RAW_DECL_SETSTATE_R _GL_WARN_ON_USE (setstate_r, "setstate_r is unportable - " "use gnulib module random_r for portability"); # endif #endif #if @GNULIB_REALLOC_POSIX@ # if (@GNULIB_REALLOC_POSIX@ && @REPLACE_REALLOC_FOR_REALLOC_POSIX@) \ || (@GNULIB_REALLOC_GNU@ && @REPLACE_REALLOC_FOR_REALLOC_GNU@) # if !((defined __cplusplus && defined GNULIB_NAMESPACE) \ || _GL_USE_STDLIB_ALLOC) # undef realloc # define realloc rpl_realloc # endif _GL_FUNCDECL_RPL (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); _GL_CXXALIAS_RPL (realloc, void *, (void *ptr, size_t size)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */ _GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (realloc, void *, (void *ptr, size_t size)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (realloc); # endif #else # if @GNULIB_FREE_POSIX@ && __GNUC__ >= 11 && !defined realloc /* For -Wmismatched-dealloc: Associate realloc with free or rpl_free. */ _GL_FUNCDECL_SYS (realloc, void *, (void *ptr, size_t size) _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK && !_GL_USE_STDLIB_ALLOC # undef realloc /* Assume realloc is always declared. */ _GL_WARN_ON_USE (realloc, "realloc is not POSIX compliant everywhere - " "use gnulib module realloc-posix for portability"); # endif #endif #if @GNULIB_REALLOCARRAY@ # if @REPLACE_REALLOCARRAY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef reallocarray # define reallocarray rpl_reallocarray # endif _GL_FUNCDECL_RPL (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); _GL_CXXALIAS_RPL (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # else # if ! @HAVE_REALLOCARRAY@ _GL_FUNCDECL_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # endif _GL_CXXALIAS_SYS (reallocarray, void *, (void *ptr, size_t nmemb, size_t size)); # endif _GL_CXXALIASWARN (reallocarray); #elif defined GNULIB_POSIXCHECK # undef reallocarray # if HAVE_RAW_DECL_REALLOCARRAY _GL_WARN_ON_USE (reallocarray, "reallocarray is not portable - " "use gnulib module reallocarray for portability"); # endif #endif #if @GNULIB_REALPATH@ # if @REPLACE_REALPATH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define realpath rpl_realpath # endif _GL_FUNCDECL_RPL (realpath, char *, (const char *restrict name, char *restrict resolved) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (realpath, char *, (const char *restrict name, char *restrict resolved)); # else # if !@HAVE_REALPATH@ _GL_FUNCDECL_SYS (realpath, char *, (const char *restrict name, char *restrict resolved) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (realpath, char *, (const char *restrict name, char *restrict resolved)); # endif _GL_CXXALIASWARN (realpath); #elif defined GNULIB_POSIXCHECK # undef realpath # if HAVE_RAW_DECL_REALPATH _GL_WARN_ON_USE (realpath, "realpath is unportable - use gnulib module " "canonicalize or canonicalize-lgpl for portability"); # endif #endif #if @GNULIB_RPMATCH@ /* Test a user response to a question. Return 1 if it is affirmative, 0 if it is negative, or -1 if not clear. */ # if !@HAVE_RPMATCH@ _GL_FUNCDECL_SYS (rpmatch, int, (const char *response) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (rpmatch, int, (const char *response)); _GL_CXXALIASWARN (rpmatch); #elif defined GNULIB_POSIXCHECK # undef rpmatch # if HAVE_RAW_DECL_RPMATCH _GL_WARN_ON_USE (rpmatch, "rpmatch is unportable - " "use gnulib module rpmatch for portability"); # endif #endif #if @GNULIB_SECURE_GETENV@ /* Look up NAME in the environment, returning 0 in insecure situations. */ # if !@HAVE_SECURE_GETENV@ _GL_FUNCDECL_SYS (secure_getenv, char *, (char const *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (secure_getenv, char *, (char const *name)); _GL_CXXALIASWARN (secure_getenv); #elif defined GNULIB_POSIXCHECK # undef secure_getenv # if HAVE_RAW_DECL_SECURE_GETENV _GL_WARN_ON_USE (secure_getenv, "secure_getenv is unportable - " "use gnulib module secure_getenv for portability"); # endif #endif #if @GNULIB_SETENV@ /* Set NAME to VALUE in the environment. If REPLACE is nonzero, overwrite an existing value. */ # if @REPLACE_SETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setenv # define setenv rpl_setenv # endif _GL_FUNCDECL_RPL (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (setenv, int, (const char *name, const char *value, int replace)); # else # if !@HAVE_DECL_SETENV@ _GL_FUNCDECL_SYS (setenv, int, (const char *name, const char *value, int replace) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (setenv, int, (const char *name, const char *value, int replace)); # endif # if !(@REPLACE_SETENV@ && !@HAVE_DECL_SETENV@) _GL_CXXALIASWARN (setenv); # endif #elif defined GNULIB_POSIXCHECK # undef setenv # if HAVE_RAW_DECL_SETENV _GL_WARN_ON_USE (setenv, "setenv is unportable - " "use gnulib module setenv for portability"); # endif #endif #if @GNULIB_STRTOD@ /* Parse a double from STRING, updating ENDP if appropriate. */ # if @REPLACE_STRTOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtod rpl_strtod # endif # define GNULIB_defined_strtod_function 1 _GL_FUNCDECL_RPL (strtod, double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtod, double, (const char *restrict str, char **restrict endp)); # else # if !@HAVE_STRTOD@ _GL_FUNCDECL_SYS (strtod, double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtod, double, (const char *restrict str, char **restrict endp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strtod); # endif #elif defined GNULIB_POSIXCHECK # undef strtod # if HAVE_RAW_DECL_STRTOD _GL_WARN_ON_USE (strtod, "strtod is unportable - " "use gnulib module strtod for portability"); # endif #endif #if @GNULIB_STRTOLD@ /* Parse a 'long double' from STRING, updating ENDP if appropriate. */ # if @REPLACE_STRTOLD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtold rpl_strtold # endif # define GNULIB_defined_strtold_function 1 _GL_FUNCDECL_RPL (strtold, long double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtold, long double, (const char *restrict str, char **restrict endp)); # else # if !@HAVE_STRTOLD@ _GL_FUNCDECL_SYS (strtold, long double, (const char *restrict str, char **restrict endp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtold, long double, (const char *restrict str, char **restrict endp)); # endif _GL_CXXALIASWARN (strtold); #elif defined GNULIB_POSIXCHECK # undef strtold # if HAVE_RAW_DECL_STRTOLD _GL_WARN_ON_USE (strtold, "strtold is unportable - " "use gnulib module strtold for portability"); # endif #endif #if @GNULIB_STRTOL@ /* Parse a signed integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is LONG_MAX or LONG_MIN, and errno is set to ERANGE. */ # if @REPLACE_STRTOL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtol rpl_strtol # endif # define GNULIB_defined_strtol_function 1 _GL_FUNCDECL_RPL (strtol, long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtol, long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOL@ _GL_FUNCDECL_SYS (strtol, long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtol, long, (const char *restrict string, char **restrict endptr, int base)); # endif _GL_CXXALIASWARN (strtol); #elif defined GNULIB_POSIXCHECK # undef strtol # if HAVE_RAW_DECL_STRTOL _GL_WARN_ON_USE (strtol, "strtol is unportable - " "use gnulib module strtol for portability"); # endif #endif #if @GNULIB_STRTOLL@ /* Parse a signed integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is LLONG_MAX or LLONG_MIN, and errno is set to ERANGE. */ # if @REPLACE_STRTOLL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtoll rpl_strtoll # endif # define GNULIB_defined_strtoll_function 1 _GL_FUNCDECL_RPL (strtoll, long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoll, long long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOLL@ _GL_FUNCDECL_SYS (strtoll, long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoll, long long, (const char *restrict string, char **restrict endptr, int base)); # endif _GL_CXXALIASWARN (strtoll); #elif defined GNULIB_POSIXCHECK # undef strtoll # if HAVE_RAW_DECL_STRTOLL _GL_WARN_ON_USE (strtoll, "strtoll is unportable - " "use gnulib module strtoll for portability"); # endif #endif #if @GNULIB_STRTOUL@ /* Parse an unsigned integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is ULONG_MAX, and errno is set to ERANGE. */ # if @REPLACE_STRTOUL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtoul rpl_strtoul # endif # define GNULIB_defined_strtoul_function 1 _GL_FUNCDECL_RPL (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOUL@ _GL_FUNCDECL_SYS (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoul, unsigned long, (const char *restrict string, char **restrict endptr, int base)); # endif _GL_CXXALIASWARN (strtoul); #elif defined GNULIB_POSIXCHECK # undef strtoul # if HAVE_RAW_DECL_STRTOUL _GL_WARN_ON_USE (strtoul, "strtoul is unportable - " "use gnulib module strtoul for portability"); # endif #endif #if @GNULIB_STRTOULL@ /* Parse an unsigned integer whose textual representation starts at STRING. The integer is expected to be in base BASE (2 <= BASE <= 36); if BASE == 0, it may be decimal or octal (with prefix "0") or hexadecimal (with prefix "0x"). If ENDPTR is not NULL, the address of the first byte after the integer is stored in *ENDPTR. Upon overflow, the return value is ULLONG_MAX, and errno is set to ERANGE. */ # if @REPLACE_STRTOULL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strtoull rpl_strtoull # endif # define GNULIB_defined_strtoull_function 1 _GL_FUNCDECL_RPL (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base)); # else # if !@HAVE_STRTOULL@ _GL_FUNCDECL_SYS (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoull, unsigned long long, (const char *restrict string, char **restrict endptr, int base)); # endif _GL_CXXALIASWARN (strtoull); #elif defined GNULIB_POSIXCHECK # undef strtoull # if HAVE_RAW_DECL_STRTOULL _GL_WARN_ON_USE (strtoull, "strtoull is unportable - " "use gnulib module strtoull for portability"); # endif #endif #if @GNULIB_UNLOCKPT@ /* Unlock the slave side of the pseudo-terminal whose master side is specified by FD, so that it can be opened. */ # if !@HAVE_UNLOCKPT@ _GL_FUNCDECL_SYS (unlockpt, int, (int fd)); # endif _GL_CXXALIAS_SYS (unlockpt, int, (int fd)); _GL_CXXALIASWARN (unlockpt); #elif defined GNULIB_POSIXCHECK # undef unlockpt # if HAVE_RAW_DECL_UNLOCKPT _GL_WARN_ON_USE (unlockpt, "unlockpt is not portable - " "use gnulib module unlockpt for portability"); # endif #endif #if @GNULIB_UNSETENV@ /* Remove the variable NAME from the environment. */ # if @REPLACE_UNSETENV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unsetenv # define unsetenv rpl_unsetenv # endif _GL_FUNCDECL_RPL (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unsetenv, int, (const char *name)); # else # if !@HAVE_DECL_UNSETENV@ _GL_FUNCDECL_SYS (unsetenv, int, (const char *name) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (unsetenv, int, (const char *name)); # endif # if !(@REPLACE_UNSETENV@ && !@HAVE_DECL_UNSETENV@) _GL_CXXALIASWARN (unsetenv); # endif #elif defined GNULIB_POSIXCHECK # undef unsetenv # if HAVE_RAW_DECL_UNSETENV _GL_WARN_ON_USE (unsetenv, "unsetenv is unportable - " "use gnulib module unsetenv for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCTOMB@ # if @REPLACE_WCTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctomb # define wctomb rpl_wctomb # endif _GL_FUNCDECL_RPL (wctomb, int, (char *s, wchar_t wc)); _GL_CXXALIAS_RPL (wctomb, int, (char *s, wchar_t wc)); # else _GL_CXXALIAS_SYS (wctomb, int, (char *s, wchar_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctomb); # endif #endif #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif /* _@GUARD_PREFIX@_STDLIB_H */ #endif ��������������������������������������������������������recutils-1.9/lib/regexec.c��������������������������������������������������������������������������0000644�0000000�0000000�00000372232�14226564450�012461� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ static reg_errcode_t match_ctx_init (re_match_context_t *cache, int eflags, Idx n); static void match_ctx_clean (re_match_context_t *mctx); static void match_ctx_free (re_match_context_t *cache); static reg_errcode_t match_ctx_add_entry (re_match_context_t *cache, Idx node, Idx str_idx, Idx from, Idx to); static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx); static reg_errcode_t match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx); static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx); static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx); static reg_errcode_t re_search_internal (const regex_t *preg, const char *string, Idx length, Idx start, Idx last_start, Idx stop, size_t nmatch, regmatch_t pmatch[], int eflags); static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop, bool ret_len); static regoff_t re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, Idx stop, struct re_registers *regs, bool ret_len); static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, int regs_allocated); static reg_errcode_t prune_impossible_nodes (re_match_context_t *mctx); static Idx check_matching (re_match_context_t *mctx, bool fl_longest_match, Idx *p_match_first); static Idx check_halt_state_context (const re_match_context_t *mctx, const re_dfastate_t *state, Idx idx); static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch); static reg_errcode_t push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, re_node_set *eps_via_nodes); static reg_errcode_t set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, regmatch_t *pmatch, bool fl_backtrack); static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs); static int sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx node_idx, Idx str_idx, Idx max_str_idx); static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx); static reg_errcode_t build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *cur_dest); static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *dest_nodes); static reg_errcode_t add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates); static bool check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx); static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, Idx subexp_idx, Idx from_node, Idx bkref_idx); static int check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, Idx subexp_idx, Idx node, Idx str_idx, Idx bkref_idx); static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates, re_node_set *limits, struct re_backref_cache_entry *bkref_ents, Idx str_idx); static reg_errcode_t sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, const re_node_set *candidates); static reg_errcode_t merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, Idx num); static re_dfastate_t *find_recover_state (reg_errcode_t *err, re_match_context_t *mctx); static re_dfastate_t *transit_state (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state); static re_dfastate_t *merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *next_state); static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, Idx str_idx); #if 0 static re_dfastate_t *transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *pstate); #endif static reg_errcode_t transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate); static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes); static reg_errcode_t get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx); static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str); static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, Idx subexp_idx, int type); static reg_errcode_t check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, Idx top_str, Idx last_node, Idx last_str, int type); static reg_errcode_t check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, re_node_set *cur_nodes, re_node_set *next_nodes); static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, Idx ex_subexp, int type); static reg_errcode_t check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, Idx target, Idx ex_subexp, int type); static reg_errcode_t expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, Idx cur_str, Idx subexp_num, int type); static bool build_trtable (const re_dfa_t *dfa, re_dfastate_t *state); static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, const re_string_t *input, Idx idx); #ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t name_len); #endif static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, re_node_set *states_node, bitset_t *states_ch); static bool check_node_accept (const re_match_context_t *mctx, const re_token_t *node, Idx idx); static reg_errcode_t extend_buffers (re_match_context_t *mctx, int min_len); /* Entry point for POSIX code. */ /* regexec searches for a given pattern, specified by PREG, in the string STRING. If NMATCH is zero or REG_NOSUB was set in the cflags argument to 'regcomp', we ignore PMATCH. Otherwise, we assume PMATCH has at least NMATCH elements, and we set them to the offsets of the corresponding matched substrings. EFLAGS specifies "execution flags" which affect matching: if REG_NOTBOL is set, then ^ does not match at the beginning of the string; if REG_NOTEOL is set, then $ does not match at the end. Return 0 if a match is found, REG_NOMATCH if not, REG_BADPAT if EFLAGS is invalid. */ int regexec (const regex_t *__restrict preg, const char *__restrict string, size_t nmatch, regmatch_t pmatch[_REGEX_NELTS (nmatch)], int eflags) { reg_errcode_t err; Idx start, length; re_dfa_t *dfa = preg->buffer; if (eflags & ~(REG_NOTBOL | REG_NOTEOL | REG_STARTEND)) return REG_BADPAT; if (eflags & REG_STARTEND) { start = pmatch[0].rm_so; length = pmatch[0].rm_eo; } else { start = 0; length = strlen (string); } lock_lock (dfa->lock); if (preg->no_sub) err = re_search_internal (preg, string, length, start, length, length, 0, NULL, eflags); else err = re_search_internal (preg, string, length, start, length, length, nmatch, pmatch, eflags); lock_unlock (dfa->lock); return err != REG_NOERROR; } #ifdef _LIBC libc_hidden_def (__regexec) # include <shlib-compat.h> versioned_symbol (libc, __regexec, regexec, GLIBC_2_3_4); # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3_4) __typeof__ (__regexec) __compat_regexec; int attribute_compat_text_section __compat_regexec (const regex_t *__restrict preg, const char *__restrict string, size_t nmatch, regmatch_t pmatch[_REGEX_NELTS (nmatch)], int eflags) { return regexec (preg, string, nmatch, pmatch, eflags & (REG_NOTBOL | REG_NOTEOL)); } compat_symbol (libc, __compat_regexec, regexec, GLIBC_2_0); # endif #endif /* Entry points for GNU code. */ /* re_match, re_search, re_match_2, re_search_2 The former two functions operate on STRING with length LENGTH, while the later two operate on concatenation of STRING1 and STRING2 with lengths LENGTH1 and LENGTH2, respectively. re_match() matches the compiled pattern in BUFP against the string, starting at index START. re_search() first tries matching at index START, then it tries to match starting from index START + 1, and so on. The last start position tried is START + RANGE. (Thus RANGE = 0 forces re_search to operate the same way as re_match().) The parameter STOP of re_{match,search}_2 specifies that no match exceeding the first STOP characters of the concatenation of the strings should be concerned. If REGS is not NULL, and BUFP->no_sub is not set, the offsets of the match and all groups is stored in REGS. (For the "_2" variants, the offsets are computed relative to the concatenation, not relative to the individual strings.) On success, re_match* functions return the length of the match, re_search* return the position of the start of the match. They return -1 on match failure, -2 on error. */ regoff_t re_match (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, struct re_registers *regs) { return re_search_stub (bufp, string, length, start, 0, length, regs, true); } #ifdef _LIBC weak_alias (__re_match, re_match) #endif regoff_t re_search (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, struct re_registers *regs) { return re_search_stub (bufp, string, length, start, range, length, regs, false); } #ifdef _LIBC weak_alias (__re_search, re_search) #endif regoff_t re_match_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, struct re_registers *regs, Idx stop) { return re_search_2_stub (bufp, string1, length1, string2, length2, start, 0, regs, stop, true); } #ifdef _LIBC weak_alias (__re_match_2, re_match_2) #endif regoff_t re_search_2 (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop) { return re_search_2_stub (bufp, string1, length1, string2, length2, start, range, regs, stop, false); } #ifdef _LIBC weak_alias (__re_search_2, re_search_2) #endif static regoff_t re_search_2_stub (struct re_pattern_buffer *bufp, const char *string1, Idx length1, const char *string2, Idx length2, Idx start, regoff_t range, struct re_registers *regs, Idx stop, bool ret_len) { const char *str; regoff_t rval; Idx len; char *s = NULL; if (__glibc_unlikely ((length1 < 0 || length2 < 0 || stop < 0 || INT_ADD_WRAPV (length1, length2, &len)))) return -2; /* Concatenate the strings. */ if (length2 > 0) if (length1 > 0) { s = re_malloc (char, len); if (__glibc_unlikely (s == NULL)) return -2; #ifdef _LIBC memcpy (__mempcpy (s, string1, length1), string2, length2); #else memcpy (s, string1, length1); memcpy (s + length1, string2, length2); #endif str = s; } else str = string2; else str = string1; rval = re_search_stub (bufp, str, len, start, range, stop, regs, ret_len); re_free (s); return rval; } /* The parameters have the same meaning as those of re_search. Additional parameters: If RET_LEN is true the length of the match is returned (re_match style); otherwise the position of the match is returned. */ static regoff_t re_search_stub (struct re_pattern_buffer *bufp, const char *string, Idx length, Idx start, regoff_t range, Idx stop, struct re_registers *regs, bool ret_len) { reg_errcode_t result; regmatch_t *pmatch; Idx nregs; regoff_t rval; int eflags = 0; re_dfa_t *dfa = bufp->buffer; Idx last_start = start + range; /* Check for out-of-range. */ if (__glibc_unlikely (start < 0 || start > length)) return -1; if (__glibc_unlikely (length < last_start || (0 <= range && last_start < start))) last_start = length; else if (__glibc_unlikely (last_start < 0 || (range < 0 && start <= last_start))) last_start = 0; lock_lock (dfa->lock); eflags |= (bufp->not_bol) ? REG_NOTBOL : 0; eflags |= (bufp->not_eol) ? REG_NOTEOL : 0; /* Compile fastmap if we haven't yet. */ if (start < last_start && bufp->fastmap != NULL && !bufp->fastmap_accurate) re_compile_fastmap (bufp); if (__glibc_unlikely (bufp->no_sub)) regs = NULL; /* We need at least 1 register. */ if (regs == NULL) nregs = 1; else if (__glibc_unlikely (bufp->regs_allocated == REGS_FIXED && regs->num_regs <= bufp->re_nsub)) { nregs = regs->num_regs; if (__glibc_unlikely (nregs < 1)) { /* Nothing can be copied to regs. */ regs = NULL; nregs = 1; } } else nregs = bufp->re_nsub + 1; pmatch = re_malloc (regmatch_t, nregs); if (__glibc_unlikely (pmatch == NULL)) { rval = -2; goto out; } result = re_search_internal (bufp, string, length, start, last_start, stop, nregs, pmatch, eflags); rval = 0; /* I hope we needn't fill their regs with -1's when no match was found. */ if (result != REG_NOERROR) rval = result == REG_NOMATCH ? -1 : -2; else if (regs != NULL) { /* If caller wants register contents data back, copy them. */ bufp->regs_allocated = re_copy_regs (regs, pmatch, nregs, bufp->regs_allocated); if (__glibc_unlikely (bufp->regs_allocated == REGS_UNALLOCATED)) rval = -2; } if (__glibc_likely (rval == 0)) { if (ret_len) { DEBUG_ASSERT (pmatch[0].rm_so == start); rval = pmatch[0].rm_eo - start; } else rval = pmatch[0].rm_so; } re_free (pmatch); out: lock_unlock (dfa->lock); return rval; } static unsigned re_copy_regs (struct re_registers *regs, regmatch_t *pmatch, Idx nregs, int regs_allocated) { int rval = REGS_REALLOCATE; Idx i; Idx need_regs = nregs + 1; /* We need one extra element beyond 'num_regs' for the '-1' marker GNU code uses. */ /* Have the register data arrays been allocated? */ if (regs_allocated == REGS_UNALLOCATED) { /* No. So allocate them with malloc. */ regs->start = re_malloc (regoff_t, need_regs); if (__glibc_unlikely (regs->start == NULL)) return REGS_UNALLOCATED; regs->end = re_malloc (regoff_t, need_regs); if (__glibc_unlikely (regs->end == NULL)) { re_free (regs->start); return REGS_UNALLOCATED; } regs->num_regs = need_regs; } else if (regs_allocated == REGS_REALLOCATE) { /* Yes. If we need more elements than were already allocated, reallocate them. If we need fewer, just leave it alone. */ if (__glibc_unlikely (need_regs > regs->num_regs)) { regoff_t *new_start = re_realloc (regs->start, regoff_t, need_regs); regoff_t *new_end; if (__glibc_unlikely (new_start == NULL)) return REGS_UNALLOCATED; new_end = re_realloc (regs->end, regoff_t, need_regs); if (__glibc_unlikely (new_end == NULL)) { re_free (new_start); return REGS_UNALLOCATED; } regs->start = new_start; regs->end = new_end; regs->num_regs = need_regs; } } else { DEBUG_ASSERT (regs_allocated == REGS_FIXED); /* This function may not be called with REGS_FIXED and nregs too big. */ DEBUG_ASSERT (nregs <= regs->num_regs); rval = REGS_FIXED; } /* Copy the regs. */ for (i = 0; i < nregs; ++i) { regs->start[i] = pmatch[i].rm_so; regs->end[i] = pmatch[i].rm_eo; } for ( ; i < regs->num_regs; ++i) regs->start[i] = regs->end[i] = -1; return rval; } /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using PATTERN_BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated using the malloc library routine, and must each be at least NUM_REGS * sizeof (regoff_t) bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using PATTERN_BUFFER will allocate its own register data, without freeing the old data. */ void re_set_registers (struct re_pattern_buffer *bufp, struct re_registers *regs, __re_size_t num_regs, regoff_t *starts, regoff_t *ends) { if (num_regs) { bufp->regs_allocated = REGS_REALLOCATE; regs->num_regs = num_regs; regs->start = starts; regs->end = ends; } else { bufp->regs_allocated = REGS_UNALLOCATED; regs->num_regs = 0; regs->start = regs->end = NULL; } } #ifdef _LIBC weak_alias (__re_set_registers, re_set_registers) #endif /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC int # ifdef _LIBC weak_function # endif re_exec (const char *s) { return 0 == regexec (&re_comp_buf, s, 0, NULL, 0); } #endif /* _REGEX_RE_COMP */ /* Internal entry point. */ /* Searches for a compiled pattern PREG in the string STRING, whose length is LENGTH. NMATCH, PMATCH, and EFLAGS have the same meaning as with regexec. LAST_START is START + RANGE, where START and RANGE have the same meaning as with re_search. Return REG_NOERROR if we find a match, and REG_NOMATCH if not, otherwise return the error code. Note: We assume front end functions already check ranges. (0 <= LAST_START && LAST_START <= LENGTH) */ static reg_errcode_t __attribute_warn_unused_result__ re_search_internal (const regex_t *preg, const char *string, Idx length, Idx start, Idx last_start, Idx stop, size_t nmatch, regmatch_t pmatch[], int eflags) { reg_errcode_t err; const re_dfa_t *dfa = preg->buffer; Idx left_lim, right_lim; int incr; bool fl_longest_match; int match_kind; Idx match_first; Idx match_last = -1; Idx extra_nmatch; bool sb; int ch; re_match_context_t mctx = { .dfa = dfa }; char *fastmap = ((preg->fastmap != NULL && preg->fastmap_accurate && start != last_start && !preg->can_be_null) ? preg->fastmap : NULL); RE_TRANSLATE_TYPE t = preg->translate; extra_nmatch = (nmatch > preg->re_nsub) ? nmatch - (preg->re_nsub + 1) : 0; nmatch -= extra_nmatch; /* Check if the DFA haven't been compiled. */ if (__glibc_unlikely (preg->used == 0 || dfa->init_state == NULL || dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL)) return REG_NOMATCH; /* We assume front-end functions already check them. */ DEBUG_ASSERT (0 <= last_start && last_start <= length); /* If initial states with non-begbuf contexts have no elements, the regex must be anchored. If preg->newline_anchor is set, we'll never use init_state_nl, so do not check it. */ if (dfa->init_state->nodes.nelem == 0 && dfa->init_state_word->nodes.nelem == 0 && (dfa->init_state_nl->nodes.nelem == 0 || !preg->newline_anchor)) { if (start != 0 && last_start != 0) return REG_NOMATCH; start = last_start = 0; } /* We must check the longest matching, if nmatch > 0. */ fl_longest_match = (nmatch != 0 || dfa->nbackref); err = re_string_allocate (&mctx.input, string, length, dfa->nodes_len + 1, preg->translate, (preg->syntax & RE_ICASE) != 0, dfa); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; mctx.input.stop = stop; mctx.input.raw_stop = stop; mctx.input.newline_anchor = preg->newline_anchor; err = match_ctx_init (&mctx, eflags, dfa->nbackref * 2); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* We will log all the DFA states through which the dfa pass, if nmatch > 1, or this dfa has "multibyte node", which is a back-reference or a node which can accept multibyte character or multi character collating element. */ if (nmatch > 1 || dfa->has_mb_node) { /* Avoid overflow. */ if (__glibc_unlikely ((MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) <= mctx.input.bufs_len))) { err = REG_ESPACE; goto free_return; } mctx.state_log = re_malloc (re_dfastate_t *, mctx.input.bufs_len + 1); if (__glibc_unlikely (mctx.state_log == NULL)) { err = REG_ESPACE; goto free_return; } } match_first = start; mctx.input.tip_context = (eflags & REG_NOTBOL) ? CONTEXT_BEGBUF : CONTEXT_NEWLINE | CONTEXT_BEGBUF; /* Check incrementally whether the input string matches. */ incr = (last_start < start) ? -1 : 1; left_lim = (last_start < start) ? last_start : start; right_lim = (last_start < start) ? start : last_start; sb = dfa->mb_cur_max == 1; match_kind = (fastmap ? ((sb || !(preg->syntax & RE_ICASE || t) ? 4 : 0) | (start <= last_start ? 2 : 0) | (t != NULL ? 1 : 0)) : 8); for (;; match_first += incr) { err = REG_NOMATCH; if (match_first < left_lim || right_lim < match_first) goto free_return; /* Advance as rapidly as possible through the string, until we find a plausible place to start matching. This may be done with varying efficiency, so there are various possibilities: only the most common of them are specialized, in order to save on code size. We use a switch statement for speed. */ switch (match_kind) { case 8: /* No fastmap. */ break; case 7: /* Fastmap with single-byte translation, match forward. */ while (__glibc_likely (match_first < right_lim) && !fastmap[t[(unsigned char) string[match_first]]]) ++match_first; goto forward_match_found_start_or_reached_end; case 6: /* Fastmap without translation, match forward. */ while (__glibc_likely (match_first < right_lim) && !fastmap[(unsigned char) string[match_first]]) ++match_first; forward_match_found_start_or_reached_end: if (__glibc_unlikely (match_first == right_lim)) { ch = match_first >= length ? 0 : (unsigned char) string[match_first]; if (!fastmap[t ? t[ch] : ch]) goto free_return; } break; case 4: case 5: /* Fastmap without multi-byte translation, match backwards. */ while (match_first >= left_lim) { ch = match_first >= length ? 0 : (unsigned char) string[match_first]; if (fastmap[t ? t[ch] : ch]) break; --match_first; } if (match_first < left_lim) goto free_return; break; default: /* In this case, we can't determine easily the current byte, since it might be a component byte of a multibyte character. Then we use the constructed buffer instead. */ for (;;) { /* If MATCH_FIRST is out of the valid range, reconstruct the buffers. */ __re_size_t offset = match_first - mctx.input.raw_mbs_idx; if (__glibc_unlikely (offset >= (__re_size_t) mctx.input.valid_raw_len)) { err = re_string_reconstruct (&mctx.input, match_first, eflags); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; offset = match_first - mctx.input.raw_mbs_idx; } /* Use buffer byte if OFFSET is in buffer, otherwise '\0'. */ ch = (offset < mctx.input.valid_len ? re_string_byte_at (&mctx.input, offset) : 0); if (fastmap[ch]) break; match_first += incr; if (match_first < left_lim || match_first > right_lim) { err = REG_NOMATCH; goto free_return; } } break; } /* Reconstruct the buffers so that the matcher can assume that the matching starts from the beginning of the buffer. */ err = re_string_reconstruct (&mctx.input, match_first, eflags); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* Don't consider this char as a possible match start if it part, yet isn't the head, of a multibyte character. */ if (!sb && !re_string_first_byte (&mctx.input, 0)) continue; /* It seems to be appropriate one, then use the matcher. */ /* We assume that the matching starts from 0. */ mctx.state_log_top = mctx.nbkref_ents = mctx.max_mb_elem_len = 0; match_last = check_matching (&mctx, fl_longest_match, start <= last_start ? &match_first : NULL); if (match_last != -1) { if (__glibc_unlikely (match_last == -2)) { err = REG_ESPACE; goto free_return; } else { mctx.match_last = match_last; if ((!preg->no_sub && nmatch > 1) || dfa->nbackref) { re_dfastate_t *pstate = mctx.state_log[match_last]; mctx.last_node = check_halt_state_context (&mctx, pstate, match_last); } if ((!preg->no_sub && nmatch > 1 && dfa->has_plural_match) || dfa->nbackref) { err = prune_impossible_nodes (&mctx); if (err == REG_NOERROR) break; if (__glibc_unlikely (err != REG_NOMATCH)) goto free_return; match_last = -1; } else break; /* We found a match. */ } } match_ctx_clean (&mctx); } DEBUG_ASSERT (match_last != -1); DEBUG_ASSERT (err == REG_NOERROR); /* Set pmatch[] if we need. */ if (nmatch > 0) { Idx reg_idx; /* Initialize registers. */ for (reg_idx = 1; reg_idx < nmatch; ++reg_idx) pmatch[reg_idx].rm_so = pmatch[reg_idx].rm_eo = -1; /* Set the points where matching start/end. */ pmatch[0].rm_so = 0; pmatch[0].rm_eo = mctx.match_last; /* FIXME: This function should fail if mctx.match_last exceeds the maximum possible regoff_t value. We need a new error code REG_OVERFLOW. */ if (!preg->no_sub && nmatch > 1) { err = set_regs (preg, &mctx, nmatch, pmatch, dfa->has_plural_match && dfa->nbackref > 0); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } /* At last, add the offset to each register, since we slid the buffers so that we could assume that the matching starts from 0. */ for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so != -1) { if (__glibc_unlikely (mctx.input.offsets_needed != 0)) { pmatch[reg_idx].rm_so = (pmatch[reg_idx].rm_so == mctx.input.valid_len ? mctx.input.valid_raw_len : mctx.input.offsets[pmatch[reg_idx].rm_so]); pmatch[reg_idx].rm_eo = (pmatch[reg_idx].rm_eo == mctx.input.valid_len ? mctx.input.valid_raw_len : mctx.input.offsets[pmatch[reg_idx].rm_eo]); } pmatch[reg_idx].rm_so += match_first; pmatch[reg_idx].rm_eo += match_first; } for (reg_idx = 0; reg_idx < extra_nmatch; ++reg_idx) { pmatch[nmatch + reg_idx].rm_so = -1; pmatch[nmatch + reg_idx].rm_eo = -1; } if (dfa->subexp_map) for (reg_idx = 0; reg_idx + 1 < nmatch; reg_idx++) if (dfa->subexp_map[reg_idx] != reg_idx) { pmatch[reg_idx + 1].rm_so = pmatch[dfa->subexp_map[reg_idx] + 1].rm_so; pmatch[reg_idx + 1].rm_eo = pmatch[dfa->subexp_map[reg_idx] + 1].rm_eo; } } free_return: re_free (mctx.state_log); if (dfa->nbackref) match_ctx_free (&mctx); re_string_destruct (&mctx.input); return err; } static reg_errcode_t __attribute_warn_unused_result__ prune_impossible_nodes (re_match_context_t *mctx) { const re_dfa_t *const dfa = mctx->dfa; Idx halt_node, match_last; reg_errcode_t ret; re_dfastate_t **sifted_states; re_dfastate_t **lim_states = NULL; re_sift_context_t sctx; DEBUG_ASSERT (mctx->state_log != NULL); match_last = mctx->match_last; halt_node = mctx->last_node; /* Avoid overflow. */ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) <= match_last)) return REG_ESPACE; sifted_states = re_malloc (re_dfastate_t *, match_last + 1); if (__glibc_unlikely (sifted_states == NULL)) { ret = REG_ESPACE; goto free_return; } if (dfa->nbackref) { lim_states = re_malloc (re_dfastate_t *, match_last + 1); if (__glibc_unlikely (lim_states == NULL)) { ret = REG_ESPACE; goto free_return; } while (1) { memset (lim_states, '\0', sizeof (re_dfastate_t *) * (match_last + 1)); sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); ret = sift_states_backward (mctx, &sctx); re_node_set_free (&sctx.limits); if (__glibc_unlikely (ret != REG_NOERROR)) goto free_return; if (sifted_states[0] != NULL || lim_states[0] != NULL) break; do { --match_last; if (match_last < 0) { ret = REG_NOMATCH; goto free_return; } } while (mctx->state_log[match_last] == NULL || !mctx->state_log[match_last]->halt); halt_node = check_halt_state_context (mctx, mctx->state_log[match_last], match_last); } ret = merge_state_array (dfa, sifted_states, lim_states, match_last + 1); re_free (lim_states); lim_states = NULL; if (__glibc_unlikely (ret != REG_NOERROR)) goto free_return; } else { sift_ctx_init (&sctx, sifted_states, lim_states, halt_node, match_last); ret = sift_states_backward (mctx, &sctx); re_node_set_free (&sctx.limits); if (__glibc_unlikely (ret != REG_NOERROR)) goto free_return; if (sifted_states[0] == NULL) { ret = REG_NOMATCH; goto free_return; } } re_free (mctx->state_log); mctx->state_log = sifted_states; sifted_states = NULL; mctx->last_node = halt_node; mctx->match_last = match_last; ret = REG_NOERROR; free_return: re_free (sifted_states); re_free (lim_states); return ret; } /* Acquire an initial state and return it. We must select appropriate initial state depending on the context, since initial states may have constraints like "\<", "^", etc.. */ static __always_inline re_dfastate_t * acquire_init_state_context (reg_errcode_t *err, const re_match_context_t *mctx, Idx idx) { const re_dfa_t *const dfa = mctx->dfa; if (dfa->init_state->has_constraint) { unsigned int context; context = re_string_context_at (&mctx->input, idx - 1, mctx->eflags); if (IS_WORD_CONTEXT (context)) return dfa->init_state_word; else if (IS_ORDINARY_CONTEXT (context)) return dfa->init_state; else if (IS_BEGBUF_CONTEXT (context) && IS_NEWLINE_CONTEXT (context)) return dfa->init_state_begbuf; else if (IS_NEWLINE_CONTEXT (context)) return dfa->init_state_nl; else if (IS_BEGBUF_CONTEXT (context)) { /* It is relatively rare case, then calculate on demand. */ return re_acquire_state_context (err, dfa, dfa->init_state->entrance_nodes, context); } else /* Must not happen? */ return dfa->init_state; } else return dfa->init_state; } /* Check whether the regular expression match input string INPUT or not, and return the index where the matching end. Return -1 if there is no match, and return -2 in case of an error. FL_LONGEST_MATCH means we want the POSIX longest matching. If P_MATCH_FIRST is not NULL, and the match fails, it is set to the next place where we may want to try matching. Note that the matcher assumes that the matching starts from the current index of the buffer. */ static Idx __attribute_warn_unused_result__ check_matching (re_match_context_t *mctx, bool fl_longest_match, Idx *p_match_first) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx match = 0; Idx match_last = -1; Idx cur_str_idx = re_string_cur_idx (&mctx->input); re_dfastate_t *cur_state; bool at_init_state = p_match_first != NULL; Idx next_start_idx = cur_str_idx; err = REG_NOERROR; cur_state = acquire_init_state_context (&err, mctx, cur_str_idx); /* An initial state must not be NULL (invalid). */ if (__glibc_unlikely (cur_state == NULL)) { DEBUG_ASSERT (err == REG_ESPACE); return -2; } if (mctx->state_log != NULL) { mctx->state_log[cur_str_idx] = cur_state; /* Check OP_OPEN_SUBEXP in the initial state in case that we use them later. E.g. Processing back references. */ if (__glibc_unlikely (dfa->nbackref)) { at_init_state = false; err = check_subexp_matching_top (mctx, &cur_state->nodes, 0); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (cur_state->has_backref) { err = transit_state_bkref (mctx, &cur_state->nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } } /* If the RE accepts NULL string. */ if (__glibc_unlikely (cur_state->halt)) { if (!cur_state->has_constraint || check_halt_state_context (mctx, cur_state, cur_str_idx)) { if (!fl_longest_match) return cur_str_idx; else { match_last = cur_str_idx; match = 1; } } } while (!re_string_eoi (&mctx->input)) { re_dfastate_t *old_state = cur_state; Idx next_char_idx = re_string_cur_idx (&mctx->input) + 1; if ((__glibc_unlikely (next_char_idx >= mctx->input.bufs_len) && mctx->input.bufs_len < mctx->input.len) || (__glibc_unlikely (next_char_idx >= mctx->input.valid_len) && mctx->input.valid_len < mctx->input.len)) { err = extend_buffers (mctx, next_char_idx + 1); if (__glibc_unlikely (err != REG_NOERROR)) { DEBUG_ASSERT (err == REG_ESPACE); return -2; } } cur_state = transit_state (&err, mctx, cur_state); if (mctx->state_log != NULL) cur_state = merge_state_with_log (&err, mctx, cur_state); if (cur_state == NULL) { /* Reached the invalid state or an error. Try to recover a valid state using the state log, if available and if we have not already found a valid (even if not the longest) match. */ if (__glibc_unlikely (err != REG_NOERROR)) return -2; if (mctx->state_log == NULL || (match && !fl_longest_match) || (cur_state = find_recover_state (&err, mctx)) == NULL) break; } if (__glibc_unlikely (at_init_state)) { if (old_state == cur_state) next_start_idx = next_char_idx; else at_init_state = false; } if (cur_state->halt) { /* Reached a halt state. Check the halt state can satisfy the current context. */ if (!cur_state->has_constraint || check_halt_state_context (mctx, cur_state, re_string_cur_idx (&mctx->input))) { /* We found an appropriate halt state. */ match_last = re_string_cur_idx (&mctx->input); match = 1; /* We found a match, do not modify match_first below. */ p_match_first = NULL; if (!fl_longest_match) break; } } } if (p_match_first) *p_match_first += next_start_idx; return match_last; } /* Check NODE match the current context. */ static bool check_halt_node_context (const re_dfa_t *dfa, Idx node, unsigned int context) { re_token_type_t type = dfa->nodes[node].type; unsigned int constraint = dfa->nodes[node].constraint; if (type != END_OF_RE) return false; if (!constraint) return true; if (NOT_SATISFY_NEXT_CONSTRAINT (constraint, context)) return false; return true; } /* Check the halt state STATE match the current context. Return 0 if not match, if the node, STATE has, is a halt node and match the context, return the node. */ static Idx check_halt_state_context (const re_match_context_t *mctx, const re_dfastate_t *state, Idx idx) { Idx i; unsigned int context; DEBUG_ASSERT (state->halt); context = re_string_context_at (&mctx->input, idx, mctx->eflags); for (i = 0; i < state->nodes.nelem; ++i) if (check_halt_node_context (mctx->dfa, state->nodes.elems[i], context)) return state->nodes.elems[i]; return 0; } /* Compute the next node to which "NFA" transit from NODE("NFA" is a NFA corresponding to the DFA). Return the destination node, and update EPS_VIA_NODES; return -1 on match failure, -2 on error. */ static Idx proceed_next_node (const re_match_context_t *mctx, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, Idx *pidx, Idx node, re_node_set *eps_via_nodes, struct re_fail_stack_t *fs) { const re_dfa_t *const dfa = mctx->dfa; if (IS_EPSILON_NODE (dfa->nodes[node].type)) { re_node_set *cur_nodes = &mctx->state_log[*pidx]->nodes; re_node_set *edests = &dfa->edests[node]; if (! re_node_set_contains (eps_via_nodes, node)) { bool ok = re_node_set_insert (eps_via_nodes, node); if (__glibc_unlikely (! ok)) return -2; } /* Pick a valid destination, or return -1 if none is found. */ Idx dest_node = -1; for (Idx i = 0; i < edests->nelem; i++) { Idx candidate = edests->elems[i]; if (!re_node_set_contains (cur_nodes, candidate)) continue; if (dest_node == -1) dest_node = candidate; else { /* In order to avoid infinite loop like "(a*)*", return the second epsilon-transition if the first was already considered. */ if (re_node_set_contains (eps_via_nodes, dest_node)) return candidate; /* Otherwise, push the second epsilon-transition on the fail stack. */ else if (fs != NULL && push_fail_stack (fs, *pidx, candidate, nregs, regs, prevregs, eps_via_nodes)) return -2; /* We know we are going to exit. */ break; } } return dest_node; } else { Idx naccepted = 0; re_token_type_t type = dfa->nodes[node].type; if (dfa->nodes[node].accept_mb) naccepted = check_node_accept_bytes (dfa, node, &mctx->input, *pidx); else if (type == OP_BACK_REF) { Idx subexp_idx = dfa->nodes[node].opr.idx + 1; if (subexp_idx < nregs) naccepted = regs[subexp_idx].rm_eo - regs[subexp_idx].rm_so; if (fs != NULL) { if (subexp_idx >= nregs || regs[subexp_idx].rm_so == -1 || regs[subexp_idx].rm_eo == -1) return -1; else if (naccepted) { char *buf = (char *) re_string_get_buffer (&mctx->input); if (mctx->input.valid_len - *pidx < naccepted || (memcmp (buf + regs[subexp_idx].rm_so, buf + *pidx, naccepted) != 0)) return -1; } } if (naccepted == 0) { Idx dest_node; bool ok = re_node_set_insert (eps_via_nodes, node); if (__glibc_unlikely (! ok)) return -2; dest_node = dfa->edests[node].elems[0]; if (re_node_set_contains (&mctx->state_log[*pidx]->nodes, dest_node)) return dest_node; } } if (naccepted != 0 || check_node_accept (mctx, dfa->nodes + node, *pidx)) { Idx dest_node = dfa->nexts[node]; *pidx = (naccepted == 0) ? *pidx + 1 : *pidx + naccepted; if (fs && (*pidx > mctx->match_last || mctx->state_log[*pidx] == NULL || !re_node_set_contains (&mctx->state_log[*pidx]->nodes, dest_node))) return -1; re_node_set_empty (eps_via_nodes); return dest_node; } } return -1; } static reg_errcode_t __attribute_warn_unused_result__ push_fail_stack (struct re_fail_stack_t *fs, Idx str_idx, Idx dest_node, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, re_node_set *eps_via_nodes) { reg_errcode_t err; Idx num = fs->num; if (num == fs->alloc) { struct re_fail_stack_ent_t *new_array; new_array = re_realloc (fs->stack, struct re_fail_stack_ent_t, fs->alloc * 2); if (new_array == NULL) return REG_ESPACE; fs->alloc *= 2; fs->stack = new_array; } fs->stack[num].idx = str_idx; fs->stack[num].node = dest_node; fs->stack[num].regs = re_malloc (regmatch_t, 2 * nregs); if (fs->stack[num].regs == NULL) return REG_ESPACE; fs->num = num + 1; memcpy (fs->stack[num].regs, regs, sizeof (regmatch_t) * nregs); memcpy (fs->stack[num].regs + nregs, prevregs, sizeof (regmatch_t) * nregs); err = re_node_set_init_copy (&fs->stack[num].eps_via_nodes, eps_via_nodes); return err; } static Idx pop_fail_stack (struct re_fail_stack_t *fs, Idx *pidx, Idx nregs, regmatch_t *regs, regmatch_t *prevregs, re_node_set *eps_via_nodes) { if (fs == NULL || fs->num == 0) return -1; Idx num = --fs->num; *pidx = fs->stack[num].idx; memcpy (regs, fs->stack[num].regs, sizeof (regmatch_t) * nregs); memcpy (prevregs, fs->stack[num].regs + nregs, sizeof (regmatch_t) * nregs); re_node_set_free (eps_via_nodes); re_free (fs->stack[num].regs); *eps_via_nodes = fs->stack[num].eps_via_nodes; DEBUG_ASSERT (0 <= fs->stack[num].node); return fs->stack[num].node; } #define DYNARRAY_STRUCT regmatch_list #define DYNARRAY_ELEMENT regmatch_t #define DYNARRAY_PREFIX regmatch_list_ #include <malloc/dynarray-skeleton.c> /* Set the positions where the subexpressions are starts/ends to registers PMATCH. Note: We assume that pmatch[0] is already set, and pmatch[i].rm_so == pmatch[i].rm_eo == -1 for 0 < i < nmatch. */ static reg_errcode_t __attribute_warn_unused_result__ set_regs (const regex_t *preg, const re_match_context_t *mctx, size_t nmatch, regmatch_t *pmatch, bool fl_backtrack) { const re_dfa_t *dfa = preg->buffer; Idx idx, cur_node; re_node_set eps_via_nodes; struct re_fail_stack_t *fs; struct re_fail_stack_t fs_body = { 0, 2, NULL }; struct regmatch_list prev_match; regmatch_list_init (&prev_match); DEBUG_ASSERT (nmatch > 1); DEBUG_ASSERT (mctx->state_log != NULL); if (fl_backtrack) { fs = &fs_body; fs->stack = re_malloc (struct re_fail_stack_ent_t, fs->alloc); if (fs->stack == NULL) return REG_ESPACE; } else fs = NULL; cur_node = dfa->init_node; re_node_set_init_empty (&eps_via_nodes); if (!regmatch_list_resize (&prev_match, nmatch)) { regmatch_list_free (&prev_match); free_fail_stack_return (fs); return REG_ESPACE; } regmatch_t *prev_idx_match = regmatch_list_begin (&prev_match); memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); for (idx = pmatch[0].rm_so; idx <= pmatch[0].rm_eo ;) { update_regs (dfa, pmatch, prev_idx_match, cur_node, idx, nmatch); if ((idx == pmatch[0].rm_eo && cur_node == mctx->last_node) || (fs && re_node_set_contains (&eps_via_nodes, cur_node))) { Idx reg_idx; cur_node = -1; if (fs) { for (reg_idx = 0; reg_idx < nmatch; ++reg_idx) if (pmatch[reg_idx].rm_so > -1 && pmatch[reg_idx].rm_eo == -1) { cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, prev_idx_match, &eps_via_nodes); break; } } if (cur_node < 0) { re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); return free_fail_stack_return (fs); } } /* Proceed to next node. */ cur_node = proceed_next_node (mctx, nmatch, pmatch, prev_idx_match, &idx, cur_node, &eps_via_nodes, fs); if (__glibc_unlikely (cur_node < 0)) { if (__glibc_unlikely (cur_node == -2)) { re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); free_fail_stack_return (fs); return REG_ESPACE; } cur_node = pop_fail_stack (fs, &idx, nmatch, pmatch, prev_idx_match, &eps_via_nodes); if (cur_node < 0) { re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); free_fail_stack_return (fs); return REG_NOMATCH; } } } re_node_set_free (&eps_via_nodes); regmatch_list_free (&prev_match); return free_fail_stack_return (fs); } static reg_errcode_t free_fail_stack_return (struct re_fail_stack_t *fs) { if (fs) { Idx fs_idx; for (fs_idx = 0; fs_idx < fs->num; ++fs_idx) { re_node_set_free (&fs->stack[fs_idx].eps_via_nodes); re_free (fs->stack[fs_idx].regs); } re_free (fs->stack); } return REG_NOERROR; } static void update_regs (const re_dfa_t *dfa, regmatch_t *pmatch, regmatch_t *prev_idx_match, Idx cur_node, Idx cur_idx, Idx nmatch) { int type = dfa->nodes[cur_node].type; if (type == OP_OPEN_SUBEXP) { Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; /* We are at the first node of this sub expression. */ if (reg_num < nmatch) { pmatch[reg_num].rm_so = cur_idx; pmatch[reg_num].rm_eo = -1; } } else if (type == OP_CLOSE_SUBEXP) { /* We are at the last node of this sub expression. */ Idx reg_num = dfa->nodes[cur_node].opr.idx + 1; if (reg_num < nmatch) { if (pmatch[reg_num].rm_so < cur_idx) { pmatch[reg_num].rm_eo = cur_idx; /* This is a non-empty match or we are not inside an optional subexpression. Accept this right away. */ memcpy (prev_idx_match, pmatch, sizeof (regmatch_t) * nmatch); } else { if (dfa->nodes[cur_node].opt_subexp && prev_idx_match[reg_num].rm_so != -1) /* We transited through an empty match for an optional subexpression, like (a?)*, and this is not the subexp's first match. Copy back the old content of the registers so that matches of an inner subexpression are undone as well, like in ((a?))*. */ memcpy (pmatch, prev_idx_match, sizeof (regmatch_t) * nmatch); else /* We completed a subexpression, but it may be part of an optional one, so do not update PREV_IDX_MATCH. */ pmatch[reg_num].rm_eo = cur_idx; } } } } /* This function checks the STATE_LOG from the SCTX->last_str_idx to 0 and sift the nodes in each states according to the following rules. Updated state_log will be wrote to STATE_LOG. Rules: We throw away the Node 'a' in the STATE_LOG[STR_IDX] if... 1. When STR_IDX == MATCH_LAST(the last index in the state_log): If 'a' isn't the LAST_NODE and 'a' can't epsilon transit to the LAST_NODE, we throw away the node 'a'. 2. When 0 <= STR_IDX < MATCH_LAST and 'a' accepts string 's' and transit to 'b': i. If 'b' isn't in the STATE_LOG[STR_IDX+strlen('s')], we throw away the node 'a'. ii. If 'b' is in the STATE_LOG[STR_IDX+strlen('s')] but 'b' is thrown away, we throw away the node 'a'. 3. When 0 <= STR_IDX < MATCH_LAST and 'a' epsilon transit to 'b': i. If 'b' isn't in the STATE_LOG[STR_IDX], we throw away the node 'a'. ii. If 'b' is in the STATE_LOG[STR_IDX] but 'b' is thrown away, we throw away the node 'a'. */ #define STATE_NODE_CONTAINS(state,node) \ ((state) != NULL && re_node_set_contains (&(state)->nodes, node)) static reg_errcode_t sift_states_backward (const re_match_context_t *mctx, re_sift_context_t *sctx) { reg_errcode_t err; int null_cnt = 0; Idx str_idx = sctx->last_str_idx; re_node_set cur_dest; DEBUG_ASSERT (mctx->state_log != NULL && mctx->state_log[str_idx] != NULL); /* Build sifted state_log[str_idx]. It has the nodes which can epsilon transit to the last_node and the last_node itself. */ err = re_node_set_init_1 (&cur_dest, sctx->last_node); if (__glibc_unlikely (err != REG_NOERROR)) return err; err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* Then check each states in the state_log. */ while (str_idx > 0) { /* Update counters. */ null_cnt = (sctx->sifted_states[str_idx] == NULL) ? null_cnt + 1 : 0; if (null_cnt > mctx->max_mb_elem_len) { memset (sctx->sifted_states, '\0', sizeof (re_dfastate_t *) * str_idx); re_node_set_free (&cur_dest); return REG_NOERROR; } re_node_set_empty (&cur_dest); --str_idx; if (mctx->state_log[str_idx]) { err = build_sifted_states (mctx, sctx, str_idx, &cur_dest); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } /* Add all the nodes which satisfy the following conditions: - It can epsilon transit to a node in CUR_DEST. - It is in CUR_SRC. And update state_log. */ err = update_cur_sifted_state (mctx, sctx, str_idx, &cur_dest); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } err = REG_NOERROR; free_return: re_node_set_free (&cur_dest); return err; } static reg_errcode_t __attribute_warn_unused_result__ build_sifted_states (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *cur_dest) { const re_dfa_t *const dfa = mctx->dfa; const re_node_set *cur_src = &mctx->state_log[str_idx]->non_eps_nodes; Idx i; /* Then build the next sifted state. We build the next sifted state on 'cur_dest', and update 'sifted_states[str_idx]' with 'cur_dest'. Note: 'cur_dest' is the sifted state from 'state_log[str_idx + 1]'. 'cur_src' points the node_set of the old 'state_log[str_idx]' (with the epsilon nodes pre-filtered out). */ for (i = 0; i < cur_src->nelem; i++) { Idx prev_node = cur_src->elems[i]; int naccepted = 0; bool ok; DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[prev_node].type)); /* If the node may accept "multi byte". */ if (dfa->nodes[prev_node].accept_mb) naccepted = sift_states_iter_mb (mctx, sctx, prev_node, str_idx, sctx->last_str_idx); /* We don't check backreferences here. See update_cur_sifted_state(). */ if (!naccepted && check_node_accept (mctx, dfa->nodes + prev_node, str_idx) && STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + 1], dfa->nexts[prev_node])) naccepted = 1; if (naccepted == 0) continue; if (sctx->limits.nelem) { Idx to_idx = str_idx + naccepted; if (check_dst_limits (mctx, &sctx->limits, dfa->nexts[prev_node], to_idx, prev_node, str_idx)) continue; } ok = re_node_set_insert (cur_dest, prev_node); if (__glibc_unlikely (! ok)) return REG_ESPACE; } return REG_NOERROR; } /* Helper functions. */ static reg_errcode_t clean_state_log_if_needed (re_match_context_t *mctx, Idx next_state_log_idx) { Idx top = mctx->state_log_top; if ((next_state_log_idx >= mctx->input.bufs_len && mctx->input.bufs_len < mctx->input.len) || (next_state_log_idx >= mctx->input.valid_len && mctx->input.valid_len < mctx->input.len)) { reg_errcode_t err; err = extend_buffers (mctx, next_state_log_idx + 1); if (__glibc_unlikely (err != REG_NOERROR)) return err; } if (top < next_state_log_idx) { DEBUG_ASSERT (mctx->state_log != NULL); memset (mctx->state_log + top + 1, '\0', sizeof (re_dfastate_t *) * (next_state_log_idx - top)); mctx->state_log_top = next_state_log_idx; } return REG_NOERROR; } static reg_errcode_t merge_state_array (const re_dfa_t *dfa, re_dfastate_t **dst, re_dfastate_t **src, Idx num) { Idx st_idx; reg_errcode_t err; for (st_idx = 0; st_idx < num; ++st_idx) { if (dst[st_idx] == NULL) dst[st_idx] = src[st_idx]; else if (src[st_idx] != NULL) { re_node_set merged_set; err = re_node_set_init_union (&merged_set, &dst[st_idx]->nodes, &src[st_idx]->nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; dst[st_idx] = re_acquire_state (&err, dfa, &merged_set); re_node_set_free (&merged_set); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } return REG_NOERROR; } static reg_errcode_t update_cur_sifted_state (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, re_node_set *dest_nodes) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err = REG_NOERROR; const re_node_set *candidates; candidates = ((mctx->state_log[str_idx] == NULL) ? NULL : &mctx->state_log[str_idx]->nodes); if (dest_nodes->nelem == 0) sctx->sifted_states[str_idx] = NULL; else { if (candidates) { /* At first, add the nodes which can epsilon transit to a node in DEST_NODE. */ err = add_epsilon_src_nodes (dfa, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* Then, check the limitations in the current sift_context. */ if (sctx->limits.nelem) { err = check_subexp_limits (dfa, dest_nodes, candidates, &sctx->limits, mctx->bkref_ents, str_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } sctx->sifted_states[str_idx] = re_acquire_state (&err, dfa, dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } if (candidates && mctx->state_log[str_idx]->has_backref) { err = sift_states_bkref (mctx, sctx, str_idx, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ add_epsilon_src_nodes (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates) { reg_errcode_t err = REG_NOERROR; Idx i; re_dfastate_t *state = re_acquire_state (&err, dfa, dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (!state->inveclosure.alloc) { err = re_node_set_alloc (&state->inveclosure, dest_nodes->nelem); if (__glibc_unlikely (err != REG_NOERROR)) return REG_ESPACE; for (i = 0; i < dest_nodes->nelem; i++) { err = re_node_set_merge (&state->inveclosure, dfa->inveclosures + dest_nodes->elems[i]); if (__glibc_unlikely (err != REG_NOERROR)) return REG_ESPACE; } } return re_node_set_add_intersect (dest_nodes, candidates, &state->inveclosure); } static reg_errcode_t sub_epsilon_src_nodes (const re_dfa_t *dfa, Idx node, re_node_set *dest_nodes, const re_node_set *candidates) { Idx ecl_idx; reg_errcode_t err; re_node_set *inv_eclosure = dfa->inveclosures + node; re_node_set except_nodes; re_node_set_init_empty (&except_nodes); for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) { Idx cur_node = inv_eclosure->elems[ecl_idx]; if (cur_node == node) continue; if (IS_EPSILON_NODE (dfa->nodes[cur_node].type)) { Idx edst1 = dfa->edests[cur_node].elems[0]; Idx edst2 = ((dfa->edests[cur_node].nelem > 1) ? dfa->edests[cur_node].elems[1] : -1); if ((!re_node_set_contains (inv_eclosure, edst1) && re_node_set_contains (dest_nodes, edst1)) || (edst2 > 0 && !re_node_set_contains (inv_eclosure, edst2) && re_node_set_contains (dest_nodes, edst2))) { err = re_node_set_add_intersect (&except_nodes, candidates, dfa->inveclosures + cur_node); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&except_nodes); return err; } } } } for (ecl_idx = 0; ecl_idx < inv_eclosure->nelem; ++ecl_idx) { Idx cur_node = inv_eclosure->elems[ecl_idx]; if (!re_node_set_contains (&except_nodes, cur_node)) { Idx idx = re_node_set_contains (dest_nodes, cur_node) - 1; re_node_set_remove_at (dest_nodes, idx); } } re_node_set_free (&except_nodes); return REG_NOERROR; } static bool check_dst_limits (const re_match_context_t *mctx, const re_node_set *limits, Idx dst_node, Idx dst_idx, Idx src_node, Idx src_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx lim_idx, src_pos, dst_pos; Idx dst_bkref_idx = search_cur_bkref_entry (mctx, dst_idx); Idx src_bkref_idx = search_cur_bkref_entry (mctx, src_idx); for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) { Idx subexp_idx; struct re_backref_cache_entry *ent; ent = mctx->bkref_ents + limits->elems[lim_idx]; subexp_idx = dfa->nodes[ent->node].opr.idx; dst_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], subexp_idx, dst_node, dst_idx, dst_bkref_idx); src_pos = check_dst_limits_calc_pos (mctx, limits->elems[lim_idx], subexp_idx, src_node, src_idx, src_bkref_idx); /* In case of: <src> <dst> ( <subexp> ) ( <subexp> ) <src> <dst> ( <subexp1> <src> <subexp2> <dst> <subexp3> ) */ if (src_pos == dst_pos) continue; /* This is unrelated limitation. */ else return true; } return false; } static int check_dst_limits_calc_pos_1 (const re_match_context_t *mctx, int boundaries, Idx subexp_idx, Idx from_node, Idx bkref_idx) { const re_dfa_t *const dfa = mctx->dfa; const re_node_set *eclosures = dfa->eclosures + from_node; Idx node_idx; /* Else, we are on the boundary: examine the nodes on the epsilon closure. */ for (node_idx = 0; node_idx < eclosures->nelem; ++node_idx) { Idx node = eclosures->elems[node_idx]; switch (dfa->nodes[node].type) { case OP_BACK_REF: if (bkref_idx != -1) { struct re_backref_cache_entry *ent = mctx->bkref_ents + bkref_idx; do { Idx dst; int cpos; if (ent->node != node) continue; if (subexp_idx < BITSET_WORD_BITS && !(ent->eps_reachable_subexps_map & ((bitset_word_t) 1 << subexp_idx))) continue; /* Recurse trying to reach the OP_OPEN_SUBEXP and OP_CLOSE_SUBEXP cases below. But, if the destination node is the same node as the source node, don't recurse because it would cause an infinite loop: a regex that exhibits this behavior is ()\1*\1* */ dst = dfa->edests[node].elems[0]; if (dst == from_node) { if (boundaries & 1) return -1; else /* if (boundaries & 2) */ return 0; } cpos = check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, dst, bkref_idx); if (cpos == -1 /* && (boundaries & 1) */) return -1; if (cpos == 0 && (boundaries & 2)) return 0; if (subexp_idx < BITSET_WORD_BITS) ent->eps_reachable_subexps_map &= ~((bitset_word_t) 1 << subexp_idx); } while (ent++->more); } break; case OP_OPEN_SUBEXP: if ((boundaries & 1) && subexp_idx == dfa->nodes[node].opr.idx) return -1; break; case OP_CLOSE_SUBEXP: if ((boundaries & 2) && subexp_idx == dfa->nodes[node].opr.idx) return 0; break; default: break; } } return (boundaries & 2) ? 1 : 0; } static int check_dst_limits_calc_pos (const re_match_context_t *mctx, Idx limit, Idx subexp_idx, Idx from_node, Idx str_idx, Idx bkref_idx) { struct re_backref_cache_entry *lim = mctx->bkref_ents + limit; int boundaries; /* If we are outside the range of the subexpression, return -1 or 1. */ if (str_idx < lim->subexp_from) return -1; if (lim->subexp_to < str_idx) return 1; /* If we are within the subexpression, return 0. */ boundaries = (str_idx == lim->subexp_from); boundaries |= (str_idx == lim->subexp_to) << 1; if (boundaries == 0) return 0; /* Else, examine epsilon closure. */ return check_dst_limits_calc_pos_1 (mctx, boundaries, subexp_idx, from_node, bkref_idx); } /* Check the limitations of sub expressions LIMITS, and remove the nodes which are against limitations from DEST_NODES. */ static reg_errcode_t check_subexp_limits (const re_dfa_t *dfa, re_node_set *dest_nodes, const re_node_set *candidates, re_node_set *limits, struct re_backref_cache_entry *bkref_ents, Idx str_idx) { reg_errcode_t err; Idx node_idx, lim_idx; for (lim_idx = 0; lim_idx < limits->nelem; ++lim_idx) { Idx subexp_idx; struct re_backref_cache_entry *ent; ent = bkref_ents + limits->elems[lim_idx]; if (str_idx <= ent->subexp_from || ent->str_idx < str_idx) continue; /* This is unrelated limitation. */ subexp_idx = dfa->nodes[ent->node].opr.idx; if (ent->subexp_to == str_idx) { Idx ops_node = -1; Idx cls_node = -1; for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; re_token_type_t type = dfa->nodes[node].type; if (type == OP_OPEN_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx) ops_node = node; else if (type == OP_CLOSE_SUBEXP && subexp_idx == dfa->nodes[node].opr.idx) cls_node = node; } /* Check the limitation of the open subexpression. */ /* Note that (ent->subexp_to = str_idx != ent->subexp_from). */ if (ops_node >= 0) { err = sub_epsilon_src_nodes (dfa, ops_node, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; } /* Check the limitation of the close subexpression. */ if (cls_node >= 0) for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; if (!re_node_set_contains (dfa->inveclosures + node, cls_node) && !re_node_set_contains (dfa->eclosures + node, cls_node)) { /* It is against this limitation. Remove it form the current sifted state. */ err = sub_epsilon_src_nodes (dfa, node, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; --node_idx; } } } else /* (ent->subexp_to != str_idx) */ { for (node_idx = 0; node_idx < dest_nodes->nelem; ++node_idx) { Idx node = dest_nodes->elems[node_idx]; re_token_type_t type = dfa->nodes[node].type; if (type == OP_CLOSE_SUBEXP || type == OP_OPEN_SUBEXP) { if (subexp_idx != dfa->nodes[node].opr.idx) continue; /* It is against this limitation. Remove it form the current sifted state. */ err = sub_epsilon_src_nodes (dfa, node, dest_nodes, candidates); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } } } return REG_NOERROR; } static reg_errcode_t __attribute_warn_unused_result__ sift_states_bkref (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx str_idx, const re_node_set *candidates) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx node_idx, node; re_sift_context_t local_sctx; Idx first_idx = search_cur_bkref_entry (mctx, str_idx); if (first_idx == -1) return REG_NOERROR; local_sctx.sifted_states = NULL; /* Mark that it hasn't been initialized. */ for (node_idx = 0; node_idx < candidates->nelem; ++node_idx) { Idx enabled_idx; re_token_type_t type; struct re_backref_cache_entry *entry; node = candidates->elems[node_idx]; type = dfa->nodes[node].type; /* Avoid infinite loop for the REs like "()\1+". */ if (node == sctx->last_node && str_idx == sctx->last_str_idx) continue; if (type != OP_BACK_REF) continue; entry = mctx->bkref_ents + first_idx; enabled_idx = first_idx; do { Idx subexp_len; Idx to_idx; Idx dst_node; bool ok; re_dfastate_t *cur_state; if (entry->node != node) continue; subexp_len = entry->subexp_to - entry->subexp_from; to_idx = str_idx + subexp_len; dst_node = (subexp_len ? dfa->nexts[node] : dfa->edests[node].elems[0]); if (to_idx > sctx->last_str_idx || sctx->sifted_states[to_idx] == NULL || !STATE_NODE_CONTAINS (sctx->sifted_states[to_idx], dst_node) || check_dst_limits (mctx, &sctx->limits, node, str_idx, dst_node, to_idx)) continue; if (local_sctx.sifted_states == NULL) { local_sctx = *sctx; err = re_node_set_init_copy (&local_sctx.limits, &sctx->limits); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } local_sctx.last_node = node; local_sctx.last_str_idx = str_idx; ok = re_node_set_insert (&local_sctx.limits, enabled_idx); if (__glibc_unlikely (! ok)) { err = REG_ESPACE; goto free_return; } cur_state = local_sctx.sifted_states[str_idx]; err = sift_states_backward (mctx, &local_sctx); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; if (sctx->limited_states != NULL) { err = merge_state_array (dfa, sctx->limited_states, local_sctx.sifted_states, str_idx + 1); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } local_sctx.sifted_states[str_idx] = cur_state; re_node_set_remove (&local_sctx.limits, enabled_idx); /* mctx->bkref_ents may have changed, reload the pointer. */ entry = mctx->bkref_ents + enabled_idx; } while (enabled_idx++, entry++->more); } err = REG_NOERROR; free_return: if (local_sctx.sifted_states != NULL) { re_node_set_free (&local_sctx.limits); } return err; } static int sift_states_iter_mb (const re_match_context_t *mctx, re_sift_context_t *sctx, Idx node_idx, Idx str_idx, Idx max_str_idx) { const re_dfa_t *const dfa = mctx->dfa; int naccepted; /* Check the node can accept "multi byte". */ naccepted = check_node_accept_bytes (dfa, node_idx, &mctx->input, str_idx); if (naccepted > 0 && str_idx + naccepted <= max_str_idx && !STATE_NODE_CONTAINS (sctx->sifted_states[str_idx + naccepted], dfa->nexts[node_idx])) /* The node can't accept the "multi byte", or the destination was already thrown away, then the node couldn't accept the current input "multi byte". */ naccepted = 0; /* Otherwise, it is sure that the node could accept 'naccepted' bytes input. */ return naccepted; } /* Functions for state transition. */ /* Return the next state to which the current state STATE will transit by accepting the current input byte, and update STATE_LOG if necessary. Return NULL on failure. If STATE can accept a multibyte char/collating element/back reference update the destination of STATE_LOG. */ static re_dfastate_t * __attribute_warn_unused_result__ transit_state (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state) { re_dfastate_t **trtable; unsigned char ch; /* If the current state can accept multibyte. */ if (__glibc_unlikely (state->accept_mb)) { *err = transit_state_mb (mctx, state); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; } /* Then decide the next state with the single byte. */ #if 0 if (0) /* don't use transition table */ return transit_state_sb (err, mctx, state); #endif /* Use transition table */ ch = re_string_fetch_byte (&mctx->input); for (;;) { trtable = state->trtable; if (__glibc_likely (trtable != NULL)) return trtable[ch]; trtable = state->word_trtable; if (__glibc_likely (trtable != NULL)) { unsigned int context; context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input) - 1, mctx->eflags); if (IS_WORD_CONTEXT (context)) return trtable[ch + SBC_MAX]; else return trtable[ch]; } if (!build_trtable (mctx->dfa, state)) { *err = REG_ESPACE; return NULL; } /* Retry, we now have a transition table. */ } } /* Update the state_log if we need */ static re_dfastate_t * merge_state_with_log (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *next_state) { const re_dfa_t *const dfa = mctx->dfa; Idx cur_idx = re_string_cur_idx (&mctx->input); if (cur_idx > mctx->state_log_top) { mctx->state_log[cur_idx] = next_state; mctx->state_log_top = cur_idx; } else if (mctx->state_log[cur_idx] == 0) { mctx->state_log[cur_idx] = next_state; } else { re_dfastate_t *pstate; unsigned int context; re_node_set next_nodes, *log_nodes, *table_nodes = NULL; /* If (state_log[cur_idx] != 0), it implies that cur_idx is the destination of a multibyte char/collating element/ back reference. Then the next state is the union set of these destinations and the results of the transition table. */ pstate = mctx->state_log[cur_idx]; log_nodes = pstate->entrance_nodes; if (next_state != NULL) { table_nodes = next_state->entrance_nodes; *err = re_node_set_init_union (&next_nodes, table_nodes, log_nodes); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; } else next_nodes = *log_nodes; /* Note: We already add the nodes of the initial state, then we don't need to add them here. */ context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input) - 1, mctx->eflags); next_state = mctx->state_log[cur_idx] = re_acquire_state_context (err, dfa, &next_nodes, context); /* We don't need to check errors here, since the return value of this function is next_state and ERR is already set. */ if (table_nodes != NULL) re_node_set_free (&next_nodes); } if (__glibc_unlikely (dfa->nbackref) && next_state != NULL) { /* Check OP_OPEN_SUBEXP in the current state in case that we use them later. We must check them here, since the back references in the next state might use them. */ *err = check_subexp_matching_top (mctx, &next_state->nodes, cur_idx); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; /* If the next state has back references. */ if (next_state->has_backref) { *err = transit_state_bkref (mctx, &next_state->nodes); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; next_state = mctx->state_log[cur_idx]; } } return next_state; } /* Skip bytes in the input that correspond to part of a multi-byte match, then look in the log for a state from which to restart matching. */ static re_dfastate_t * find_recover_state (reg_errcode_t *err, re_match_context_t *mctx) { re_dfastate_t *cur_state; do { Idx max = mctx->state_log_top; Idx cur_str_idx = re_string_cur_idx (&mctx->input); do { if (++cur_str_idx > max) return NULL; re_string_skip_bytes (&mctx->input, 1); } while (mctx->state_log[cur_str_idx] == NULL); cur_state = merge_state_with_log (err, mctx, NULL); } while (*err == REG_NOERROR && cur_state == NULL); return cur_state; } /* Helper functions for transit_state. */ /* From the node set CUR_NODES, pick up the nodes whose types are OP_OPEN_SUBEXP and which have corresponding back references in the regular expression. And register them to use them later for evaluating the corresponding back references. */ static reg_errcode_t check_subexp_matching_top (re_match_context_t *mctx, re_node_set *cur_nodes, Idx str_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx node_idx; reg_errcode_t err; /* TODO: This isn't efficient. Because there might be more than one nodes whose types are OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all nodes. E.g. RE: (a){2} */ for (node_idx = 0; node_idx < cur_nodes->nelem; ++node_idx) { Idx node = cur_nodes->elems[node_idx]; if (dfa->nodes[node].type == OP_OPEN_SUBEXP && dfa->nodes[node].opr.idx < BITSET_WORD_BITS && (dfa->used_bkref_map & ((bitset_word_t) 1 << dfa->nodes[node].opr.idx))) { err = match_ctx_add_subtop (mctx, node, str_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; } } return REG_NOERROR; } #if 0 /* Return the next state to which the current state STATE will transit by accepting the current input byte. Return NULL on failure. */ static re_dfastate_t * transit_state_sb (reg_errcode_t *err, re_match_context_t *mctx, re_dfastate_t *state) { const re_dfa_t *const dfa = mctx->dfa; re_node_set next_nodes; re_dfastate_t *next_state; Idx node_cnt, cur_str_idx = re_string_cur_idx (&mctx->input); unsigned int context; *err = re_node_set_alloc (&next_nodes, state->nodes.nelem + 1); if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; for (node_cnt = 0; node_cnt < state->nodes.nelem; ++node_cnt) { Idx cur_node = state->nodes.elems[node_cnt]; if (check_node_accept (mctx, dfa->nodes + cur_node, cur_str_idx)) { *err = re_node_set_merge (&next_nodes, dfa->eclosures + dfa->nexts[cur_node]); if (__glibc_unlikely (*err != REG_NOERROR)) { re_node_set_free (&next_nodes); return NULL; } } } context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); next_state = re_acquire_state_context (err, dfa, &next_nodes, context); /* We don't need to check errors here, since the return value of this function is next_state and ERR is already set. */ re_node_set_free (&next_nodes); re_string_skip_bytes (&mctx->input, 1); return next_state; } #endif static reg_errcode_t transit_state_mb (re_match_context_t *mctx, re_dfastate_t *pstate) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx i; for (i = 0; i < pstate->nodes.nelem; ++i) { re_node_set dest_nodes, *new_nodes; Idx cur_node_idx = pstate->nodes.elems[i]; int naccepted; Idx dest_idx; unsigned int context; re_dfastate_t *dest_state; if (!dfa->nodes[cur_node_idx].accept_mb) continue; if (dfa->nodes[cur_node_idx].constraint) { context = re_string_context_at (&mctx->input, re_string_cur_idx (&mctx->input), mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (dfa->nodes[cur_node_idx].constraint, context)) continue; } /* How many bytes the node can accept? */ naccepted = check_node_accept_bytes (dfa, cur_node_idx, &mctx->input, re_string_cur_idx (&mctx->input)); if (naccepted == 0) continue; /* The node can accepts 'naccepted' bytes. */ dest_idx = re_string_cur_idx (&mctx->input) + naccepted; mctx->max_mb_elem_len = ((mctx->max_mb_elem_len < naccepted) ? naccepted : mctx->max_mb_elem_len); err = clean_state_log_if_needed (mctx, dest_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; DEBUG_ASSERT (dfa->nexts[cur_node_idx] != -1); new_nodes = dfa->eclosures + dfa->nexts[cur_node_idx]; dest_state = mctx->state_log[dest_idx]; if (dest_state == NULL) dest_nodes = *new_nodes; else { err = re_node_set_init_union (&dest_nodes, dest_state->entrance_nodes, new_nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } context = re_string_context_at (&mctx->input, dest_idx - 1, mctx->eflags); mctx->state_log[dest_idx] = re_acquire_state_context (&err, dfa, &dest_nodes, context); if (dest_state != NULL) re_node_set_free (&dest_nodes); if (__glibc_unlikely (mctx->state_log[dest_idx] == NULL && err != REG_NOERROR)) return err; } return REG_NOERROR; } static reg_errcode_t transit_state_bkref (re_match_context_t *mctx, const re_node_set *nodes) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx i; Idx cur_str_idx = re_string_cur_idx (&mctx->input); for (i = 0; i < nodes->nelem; ++i) { Idx dest_str_idx, prev_nelem, bkc_idx; Idx node_idx = nodes->elems[i]; unsigned int context; const re_token_t *node = dfa->nodes + node_idx; re_node_set *new_dest_nodes; /* Check whether 'node' is a backreference or not. */ if (node->type != OP_BACK_REF) continue; if (node->constraint) { context = re_string_context_at (&mctx->input, cur_str_idx, mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) continue; } /* 'node' is a backreference. Check the substring which the substring matched. */ bkc_idx = mctx->nbkref_ents; err = get_subexp (mctx, node_idx, cur_str_idx); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; /* And add the epsilon closures (which is 'new_dest_nodes') of the backreference to appropriate state_log. */ DEBUG_ASSERT (dfa->nexts[node_idx] != -1); for (; bkc_idx < mctx->nbkref_ents; ++bkc_idx) { Idx subexp_len; re_dfastate_t *dest_state; struct re_backref_cache_entry *bkref_ent; bkref_ent = mctx->bkref_ents + bkc_idx; if (bkref_ent->node != node_idx || bkref_ent->str_idx != cur_str_idx) continue; subexp_len = bkref_ent->subexp_to - bkref_ent->subexp_from; new_dest_nodes = (subexp_len == 0 ? dfa->eclosures + dfa->edests[node_idx].elems[0] : dfa->eclosures + dfa->nexts[node_idx]); dest_str_idx = (cur_str_idx + bkref_ent->subexp_to - bkref_ent->subexp_from); context = re_string_context_at (&mctx->input, dest_str_idx - 1, mctx->eflags); dest_state = mctx->state_log[dest_str_idx]; prev_nelem = ((mctx->state_log[cur_str_idx] == NULL) ? 0 : mctx->state_log[cur_str_idx]->nodes.nelem); /* Add 'new_dest_node' to state_log. */ if (dest_state == NULL) { mctx->state_log[dest_str_idx] = re_acquire_state_context (&err, dfa, new_dest_nodes, context); if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR)) goto free_return; } else { re_node_set dest_nodes; err = re_node_set_init_union (&dest_nodes, dest_state->entrance_nodes, new_dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&dest_nodes); goto free_return; } mctx->state_log[dest_str_idx] = re_acquire_state_context (&err, dfa, &dest_nodes, context); re_node_set_free (&dest_nodes); if (__glibc_unlikely (mctx->state_log[dest_str_idx] == NULL && err != REG_NOERROR)) goto free_return; } /* We need to check recursively if the backreference can epsilon transit. */ if (subexp_len == 0 && mctx->state_log[cur_str_idx]->nodes.nelem > prev_nelem) { err = check_subexp_matching_top (mctx, new_dest_nodes, cur_str_idx); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; err = transit_state_bkref (mctx, new_dest_nodes); if (__glibc_unlikely (err != REG_NOERROR)) goto free_return; } } } err = REG_NOERROR; free_return: return err; } /* Enumerate all the candidates which the backreference BKREF_NODE can match at BKREF_STR_IDX, and register them by match_ctx_add_entry(). Note that we might collect inappropriate candidates here. However, the cost of checking them strictly here is too high, then we delay these checking for prune_impossible_nodes(). */ static reg_errcode_t __attribute_warn_unused_result__ get_subexp (re_match_context_t *mctx, Idx bkref_node, Idx bkref_str_idx) { const re_dfa_t *const dfa = mctx->dfa; Idx subexp_num, sub_top_idx; const char *buf = (const char *) re_string_get_buffer (&mctx->input); /* Return if we have already checked BKREF_NODE at BKREF_STR_IDX. */ Idx cache_idx = search_cur_bkref_entry (mctx, bkref_str_idx); if (cache_idx != -1) { const struct re_backref_cache_entry *entry = mctx->bkref_ents + cache_idx; do if (entry->node == bkref_node) return REG_NOERROR; /* We already checked it. */ while (entry++->more); } subexp_num = dfa->nodes[bkref_node].opr.idx; /* For each sub expression */ for (sub_top_idx = 0; sub_top_idx < mctx->nsub_tops; ++sub_top_idx) { reg_errcode_t err; re_sub_match_top_t *sub_top = mctx->sub_tops[sub_top_idx]; re_sub_match_last_t *sub_last; Idx sub_last_idx, sl_str, bkref_str_off; if (dfa->nodes[sub_top->node].opr.idx != subexp_num) continue; /* It isn't related. */ sl_str = sub_top->str_idx; bkref_str_off = bkref_str_idx; /* At first, check the last node of sub expressions we already evaluated. */ for (sub_last_idx = 0; sub_last_idx < sub_top->nlasts; ++sub_last_idx) { regoff_t sl_str_diff; sub_last = sub_top->lasts[sub_last_idx]; sl_str_diff = sub_last->str_idx - sl_str; /* The matched string by the sub expression match with the substring at the back reference? */ if (sl_str_diff > 0) { if (__glibc_unlikely (bkref_str_off + sl_str_diff > mctx->input.valid_len)) { /* Not enough chars for a successful match. */ if (bkref_str_off + sl_str_diff > mctx->input.len) break; err = clean_state_log_if_needed (mctx, bkref_str_off + sl_str_diff); if (__glibc_unlikely (err != REG_NOERROR)) return err; buf = (const char *) re_string_get_buffer (&mctx->input); } if (memcmp (buf + bkref_str_off, buf + sl_str, sl_str_diff) != 0) /* We don't need to search this sub expression any more. */ break; } bkref_str_off += sl_str_diff; sl_str += sl_str_diff; err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, bkref_str_idx); /* Reload buf, since the preceding call might have reallocated the buffer. */ buf = (const char *) re_string_get_buffer (&mctx->input); if (err == REG_NOMATCH) continue; if (__glibc_unlikely (err != REG_NOERROR)) return err; } if (sub_last_idx < sub_top->nlasts) continue; if (sub_last_idx > 0) ++sl_str; /* Then, search for the other last nodes of the sub expression. */ for (; sl_str <= bkref_str_idx; ++sl_str) { Idx cls_node; regoff_t sl_str_off; const re_node_set *nodes; sl_str_off = sl_str - sub_top->str_idx; /* The matched string by the sub expression match with the substring at the back reference? */ if (sl_str_off > 0) { if (__glibc_unlikely (bkref_str_off >= mctx->input.valid_len)) { /* If we are at the end of the input, we cannot match. */ if (bkref_str_off >= mctx->input.len) break; err = extend_buffers (mctx, bkref_str_off + 1); if (__glibc_unlikely (err != REG_NOERROR)) return err; buf = (const char *) re_string_get_buffer (&mctx->input); } if (buf [bkref_str_off++] != buf[sl_str - 1]) break; /* We don't need to search this sub expression any more. */ } if (mctx->state_log[sl_str] == NULL) continue; /* Does this state have a ')' of the sub expression? */ nodes = &mctx->state_log[sl_str]->nodes; cls_node = find_subexp_node (dfa, nodes, subexp_num, OP_CLOSE_SUBEXP); if (cls_node == -1) continue; /* No. */ if (sub_top->path == NULL) { sub_top->path = calloc (sizeof (state_array_t), sl_str - sub_top->str_idx + 1); if (sub_top->path == NULL) return REG_ESPACE; } /* Can the OP_OPEN_SUBEXP node arrive the OP_CLOSE_SUBEXP node in the current context? */ err = check_arrival (mctx, sub_top->path, sub_top->node, sub_top->str_idx, cls_node, sl_str, OP_CLOSE_SUBEXP); if (err == REG_NOMATCH) continue; if (__glibc_unlikely (err != REG_NOERROR)) return err; sub_last = match_ctx_add_sublast (sub_top, cls_node, sl_str); if (__glibc_unlikely (sub_last == NULL)) return REG_ESPACE; err = get_subexp_sub (mctx, sub_top, sub_last, bkref_node, bkref_str_idx); buf = (const char *) re_string_get_buffer (&mctx->input); if (err == REG_NOMATCH) continue; if (__glibc_unlikely (err != REG_NOERROR)) return err; } } return REG_NOERROR; } /* Helper functions for get_subexp(). */ /* Check SUB_LAST can arrive to the back reference BKREF_NODE at BKREF_STR. If it can arrive, register the sub expression expressed with SUB_TOP and SUB_LAST. */ static reg_errcode_t get_subexp_sub (re_match_context_t *mctx, const re_sub_match_top_t *sub_top, re_sub_match_last_t *sub_last, Idx bkref_node, Idx bkref_str) { reg_errcode_t err; Idx to_idx; /* Can the subexpression arrive the back reference? */ err = check_arrival (mctx, &sub_last->path, sub_last->node, sub_last->str_idx, bkref_node, bkref_str, OP_OPEN_SUBEXP); if (err != REG_NOERROR) return err; err = match_ctx_add_entry (mctx, bkref_node, bkref_str, sub_top->str_idx, sub_last->str_idx); if (__glibc_unlikely (err != REG_NOERROR)) return err; to_idx = bkref_str + sub_last->str_idx - sub_top->str_idx; return clean_state_log_if_needed (mctx, to_idx); } /* Find the first node which is '(' or ')' and whose index is SUBEXP_IDX. Search '(' if FL_OPEN, or search ')' otherwise. TODO: This function isn't efficient... Because there might be more than one nodes whose types are OP_OPEN_SUBEXP and whose index is SUBEXP_IDX, we must check all nodes. E.g. RE: (a){2} */ static Idx find_subexp_node (const re_dfa_t *dfa, const re_node_set *nodes, Idx subexp_idx, int type) { Idx cls_idx; for (cls_idx = 0; cls_idx < nodes->nelem; ++cls_idx) { Idx cls_node = nodes->elems[cls_idx]; const re_token_t *node = dfa->nodes + cls_node; if (node->type == type && node->opr.idx == subexp_idx) return cls_node; } return -1; } /* Check whether the node TOP_NODE at TOP_STR can arrive to the node LAST_NODE at LAST_STR. We record the path onto PATH since it will be heavily reused. Return REG_NOERROR if it can arrive, REG_NOMATCH if it cannot, REG_ESPACE if memory is exhausted. */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival (re_match_context_t *mctx, state_array_t *path, Idx top_node, Idx top_str, Idx last_node, Idx last_str, int type) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err = REG_NOERROR; Idx subexp_num, backup_cur_idx, str_idx, null_cnt; re_dfastate_t *cur_state = NULL; re_node_set *cur_nodes, next_nodes; re_dfastate_t **backup_state_log; unsigned int context; subexp_num = dfa->nodes[top_node].opr.idx; /* Extend the buffer if we need. */ if (__glibc_unlikely (path->alloc < last_str + mctx->max_mb_elem_len + 1)) { re_dfastate_t **new_array; Idx old_alloc = path->alloc; Idx incr_alloc = last_str + mctx->max_mb_elem_len + 1; Idx new_alloc; if (__glibc_unlikely (IDX_MAX - old_alloc < incr_alloc)) return REG_ESPACE; new_alloc = old_alloc + incr_alloc; if (__glibc_unlikely (SIZE_MAX / sizeof (re_dfastate_t *) < new_alloc)) return REG_ESPACE; new_array = re_realloc (path->array, re_dfastate_t *, new_alloc); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; path->array = new_array; path->alloc = new_alloc; memset (new_array + old_alloc, '\0', sizeof (re_dfastate_t *) * (path->alloc - old_alloc)); } str_idx = path->next_idx ? path->next_idx : top_str; /* Temporary modify MCTX. */ backup_state_log = mctx->state_log; backup_cur_idx = mctx->input.cur_idx; mctx->state_log = path->array; mctx->input.cur_idx = str_idx; /* Setup initial node set. */ context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); if (str_idx == top_str) { err = re_node_set_init_1 (&next_nodes, top_node); if (__glibc_unlikely (err != REG_NOERROR)) return err; err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } else { cur_state = mctx->state_log[str_idx]; if (cur_state && cur_state->has_backref) { err = re_node_set_init_copy (&next_nodes, &cur_state->nodes); if (__glibc_unlikely (err != REG_NOERROR)) return err; } else re_node_set_init_empty (&next_nodes); } if (str_idx == top_str || (cur_state && cur_state->has_backref)) { if (next_nodes.nelem) { err = expand_bkref_cache (mctx, &next_nodes, str_idx, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } mctx->state_log[str_idx] = cur_state; } for (null_cnt = 0; str_idx < last_str && null_cnt <= mctx->max_mb_elem_len;) { re_node_set_empty (&next_nodes); if (mctx->state_log[str_idx + 1]) { err = re_node_set_merge (&next_nodes, &mctx->state_log[str_idx + 1]->nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } if (cur_state) { err = check_arrival_add_next_nodes (mctx, str_idx, &cur_state->non_eps_nodes, &next_nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } ++str_idx; if (next_nodes.nelem) { err = check_arrival_expand_ecl (dfa, &next_nodes, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } err = expand_bkref_cache (mctx, &next_nodes, str_idx, subexp_num, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } } context = re_string_context_at (&mctx->input, str_idx - 1, mctx->eflags); cur_state = re_acquire_state_context (&err, dfa, &next_nodes, context); if (__glibc_unlikely (cur_state == NULL && err != REG_NOERROR)) { re_node_set_free (&next_nodes); return err; } mctx->state_log[str_idx] = cur_state; null_cnt = cur_state == NULL ? null_cnt + 1 : 0; } re_node_set_free (&next_nodes); cur_nodes = (mctx->state_log[last_str] == NULL ? NULL : &mctx->state_log[last_str]->nodes); path->next_idx = str_idx; /* Fix MCTX. */ mctx->state_log = backup_state_log; mctx->input.cur_idx = backup_cur_idx; /* Then check the current node set has the node LAST_NODE. */ if (cur_nodes != NULL && re_node_set_contains (cur_nodes, last_node)) return REG_NOERROR; return REG_NOMATCH; } /* Helper functions for check_arrival. */ /* Calculate the destination nodes of CUR_NODES at STR_IDX, and append them to NEXT_NODES. TODO: This function is similar to the functions transit_state*(), however this function has many additional works. Can't we unify them? */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival_add_next_nodes (re_match_context_t *mctx, Idx str_idx, re_node_set *cur_nodes, re_node_set *next_nodes) { const re_dfa_t *const dfa = mctx->dfa; bool ok; Idx cur_idx; reg_errcode_t err = REG_NOERROR; re_node_set union_set; re_node_set_init_empty (&union_set); for (cur_idx = 0; cur_idx < cur_nodes->nelem; ++cur_idx) { int naccepted = 0; Idx cur_node = cur_nodes->elems[cur_idx]; DEBUG_ASSERT (!IS_EPSILON_NODE (dfa->nodes[cur_node].type)); /* If the node may accept "multi byte". */ if (dfa->nodes[cur_node].accept_mb) { naccepted = check_node_accept_bytes (dfa, cur_node, &mctx->input, str_idx); if (naccepted > 1) { re_dfastate_t *dest_state; Idx next_node = dfa->nexts[cur_node]; Idx next_idx = str_idx + naccepted; dest_state = mctx->state_log[next_idx]; re_node_set_empty (&union_set); if (dest_state) { err = re_node_set_merge (&union_set, &dest_state->nodes); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&union_set); return err; } } ok = re_node_set_insert (&union_set, next_node); if (__glibc_unlikely (! ok)) { re_node_set_free (&union_set); return REG_ESPACE; } mctx->state_log[next_idx] = re_acquire_state (&err, dfa, &union_set); if (__glibc_unlikely (mctx->state_log[next_idx] == NULL && err != REG_NOERROR)) { re_node_set_free (&union_set); return err; } } } if (naccepted || check_node_accept (mctx, dfa->nodes + cur_node, str_idx)) { ok = re_node_set_insert (next_nodes, dfa->nexts[cur_node]); if (__glibc_unlikely (! ok)) { re_node_set_free (&union_set); return REG_ESPACE; } } } re_node_set_free (&union_set); return REG_NOERROR; } /* For all the nodes in CUR_NODES, add the epsilon closures of them to CUR_NODES, however exclude the nodes which are: - inside the sub expression whose number is EX_SUBEXP, if FL_OPEN. - out of the sub expression whose number is EX_SUBEXP, if !FL_OPEN. */ static reg_errcode_t check_arrival_expand_ecl (const re_dfa_t *dfa, re_node_set *cur_nodes, Idx ex_subexp, int type) { reg_errcode_t err; Idx idx, outside_node; re_node_set new_nodes; DEBUG_ASSERT (cur_nodes->nelem); err = re_node_set_alloc (&new_nodes, cur_nodes->nelem); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* Create a new node set NEW_NODES with the nodes which are epsilon closures of the node in CUR_NODES. */ for (idx = 0; idx < cur_nodes->nelem; ++idx) { Idx cur_node = cur_nodes->elems[idx]; const re_node_set *eclosure = dfa->eclosures + cur_node; outside_node = find_subexp_node (dfa, eclosure, ex_subexp, type); if (outside_node == -1) { /* There are no problematic nodes, just merge them. */ err = re_node_set_merge (&new_nodes, eclosure); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&new_nodes); return err; } } else { /* There are problematic nodes, re-calculate incrementally. */ err = check_arrival_expand_ecl_sub (dfa, &new_nodes, cur_node, ex_subexp, type); if (__glibc_unlikely (err != REG_NOERROR)) { re_node_set_free (&new_nodes); return err; } } } re_node_set_free (cur_nodes); *cur_nodes = new_nodes; return REG_NOERROR; } /* Helper function for check_arrival_expand_ecl. Check incrementally the epsilon closure of TARGET, and if it isn't problematic append it to DST_NODES. */ static reg_errcode_t __attribute_warn_unused_result__ check_arrival_expand_ecl_sub (const re_dfa_t *dfa, re_node_set *dst_nodes, Idx target, Idx ex_subexp, int type) { Idx cur_node; for (cur_node = target; !re_node_set_contains (dst_nodes, cur_node);) { bool ok; if (dfa->nodes[cur_node].type == type && dfa->nodes[cur_node].opr.idx == ex_subexp) { if (type == OP_CLOSE_SUBEXP) { ok = re_node_set_insert (dst_nodes, cur_node); if (__glibc_unlikely (! ok)) return REG_ESPACE; } break; } ok = re_node_set_insert (dst_nodes, cur_node); if (__glibc_unlikely (! ok)) return REG_ESPACE; if (dfa->edests[cur_node].nelem == 0) break; if (dfa->edests[cur_node].nelem == 2) { reg_errcode_t err; err = check_arrival_expand_ecl_sub (dfa, dst_nodes, dfa->edests[cur_node].elems[1], ex_subexp, type); if (__glibc_unlikely (err != REG_NOERROR)) return err; } cur_node = dfa->edests[cur_node].elems[0]; } return REG_NOERROR; } /* For all the back references in the current state, calculate the destination of the back references by the appropriate entry in MCTX->BKREF_ENTS. */ static reg_errcode_t __attribute_warn_unused_result__ expand_bkref_cache (re_match_context_t *mctx, re_node_set *cur_nodes, Idx cur_str, Idx subexp_num, int type) { const re_dfa_t *const dfa = mctx->dfa; reg_errcode_t err; Idx cache_idx_start = search_cur_bkref_entry (mctx, cur_str); struct re_backref_cache_entry *ent; if (cache_idx_start == -1) return REG_NOERROR; restart: ent = mctx->bkref_ents + cache_idx_start; do { Idx to_idx, next_node; /* Is this entry ENT is appropriate? */ if (!re_node_set_contains (cur_nodes, ent->node)) continue; /* No. */ to_idx = cur_str + ent->subexp_to - ent->subexp_from; /* Calculate the destination of the back reference, and append it to MCTX->STATE_LOG. */ if (to_idx == cur_str) { /* The backreference did epsilon transit, we must re-check all the node in the current state. */ re_node_set new_dests; reg_errcode_t err2, err3; next_node = dfa->edests[ent->node].elems[0]; if (re_node_set_contains (cur_nodes, next_node)) continue; err = re_node_set_init_1 (&new_dests, next_node); err2 = check_arrival_expand_ecl (dfa, &new_dests, subexp_num, type); err3 = re_node_set_merge (cur_nodes, &new_dests); re_node_set_free (&new_dests); if (__glibc_unlikely (err != REG_NOERROR || err2 != REG_NOERROR || err3 != REG_NOERROR)) { err = (err != REG_NOERROR ? err : (err2 != REG_NOERROR ? err2 : err3)); return err; } /* TODO: It is still inefficient... */ goto restart; } else { re_node_set union_set; next_node = dfa->nexts[ent->node]; if (mctx->state_log[to_idx]) { bool ok; if (re_node_set_contains (&mctx->state_log[to_idx]->nodes, next_node)) continue; err = re_node_set_init_copy (&union_set, &mctx->state_log[to_idx]->nodes); ok = re_node_set_insert (&union_set, next_node); if (__glibc_unlikely (err != REG_NOERROR || ! ok)) { re_node_set_free (&union_set); err = err != REG_NOERROR ? err : REG_ESPACE; return err; } } else { err = re_node_set_init_1 (&union_set, next_node); if (__glibc_unlikely (err != REG_NOERROR)) return err; } mctx->state_log[to_idx] = re_acquire_state (&err, dfa, &union_set); re_node_set_free (&union_set); if (__glibc_unlikely (mctx->state_log[to_idx] == NULL && err != REG_NOERROR)) return err; } } while (ent++->more); return REG_NOERROR; } /* Build transition table for the state. Return true if successful. */ static bool __attribute_noinline__ build_trtable (const re_dfa_t *dfa, re_dfastate_t *state) { reg_errcode_t err; Idx i, j; int ch; bool need_word_trtable = false; bitset_word_t elem, mask; Idx ndests; /* Number of the destination states from 'state'. */ re_dfastate_t **trtable; re_dfastate_t *dest_states[SBC_MAX]; re_dfastate_t *dest_states_word[SBC_MAX]; re_dfastate_t *dest_states_nl[SBC_MAX]; re_node_set follows; bitset_t acceptable; /* We build DFA states which corresponds to the destination nodes from 'state'. 'dests_node[i]' represents the nodes which i-th destination state contains, and 'dests_ch[i]' represents the characters which i-th destination state accepts. */ re_node_set dests_node[SBC_MAX]; bitset_t dests_ch[SBC_MAX]; /* Initialize transition table. */ state->word_trtable = state->trtable = NULL; /* At first, group all nodes belonging to 'state' into several destinations. */ ndests = group_nodes_into_DFAstates (dfa, state, dests_node, dests_ch); if (__glibc_unlikely (ndests <= 0)) { /* Return false in case of an error, true otherwise. */ if (ndests == 0) { state->trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); if (__glibc_unlikely (state->trtable == NULL)) return false; return true; } return false; } err = re_node_set_alloc (&follows, ndests + 1); if (__glibc_unlikely (err != REG_NOERROR)) { out_free: re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); return false; } bitset_empty (acceptable); /* Then build the states for all destinations. */ for (i = 0; i < ndests; ++i) { Idx next_node; re_node_set_empty (&follows); /* Merge the follows of this destination states. */ for (j = 0; j < dests_node[i].nelem; ++j) { next_node = dfa->nexts[dests_node[i].elems[j]]; if (next_node != -1) { err = re_node_set_merge (&follows, dfa->eclosures + next_node); if (__glibc_unlikely (err != REG_NOERROR)) goto out_free; } } dest_states[i] = re_acquire_state_context (&err, dfa, &follows, 0); if (__glibc_unlikely (dest_states[i] == NULL && err != REG_NOERROR)) goto out_free; /* If the new state has context constraint, build appropriate states for these contexts. */ if (dest_states[i]->has_constraint) { dest_states_word[i] = re_acquire_state_context (&err, dfa, &follows, CONTEXT_WORD); if (__glibc_unlikely (dest_states_word[i] == NULL && err != REG_NOERROR)) goto out_free; if (dest_states[i] != dest_states_word[i] && dfa->mb_cur_max > 1) need_word_trtable = true; dest_states_nl[i] = re_acquire_state_context (&err, dfa, &follows, CONTEXT_NEWLINE); if (__glibc_unlikely (dest_states_nl[i] == NULL && err != REG_NOERROR)) goto out_free; } else { dest_states_word[i] = dest_states[i]; dest_states_nl[i] = dest_states[i]; } bitset_merge (acceptable, dests_ch[i]); } if (!__glibc_unlikely (need_word_trtable)) { /* We don't care about whether the following character is a word character, or we are in a single-byte character set so we can discern by looking at the character code: allocate a 256-entry transition table. */ trtable = state->trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), SBC_MAX); if (__glibc_unlikely (trtable == NULL)) goto out_free; /* For all characters ch...: */ for (i = 0; i < BITSET_WORDS; ++i) for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; elem; mask <<= 1, elem >>= 1, ++ch) if (__glibc_unlikely (elem & 1)) { /* There must be exactly one destination which accepts character ch. See group_nodes_into_DFAstates. */ for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) ; /* j-th destination accepts the word character ch. */ if (dfa->word_char[i] & mask) trtable[ch] = dest_states_word[j]; else trtable[ch] = dest_states[j]; } } else { /* We care about whether the following character is a word character, and we are in a multi-byte character set: discern by looking at the character code: build two 256-entry transition tables, one starting at trtable[0] and one starting at trtable[SBC_MAX]. */ trtable = state->word_trtable = (re_dfastate_t **) calloc (sizeof (re_dfastate_t *), 2 * SBC_MAX); if (__glibc_unlikely (trtable == NULL)) goto out_free; /* For all characters ch...: */ for (i = 0; i < BITSET_WORDS; ++i) for (ch = i * BITSET_WORD_BITS, elem = acceptable[i], mask = 1; elem; mask <<= 1, elem >>= 1, ++ch) if (__glibc_unlikely (elem & 1)) { /* There must be exactly one destination which accepts character ch. See group_nodes_into_DFAstates. */ for (j = 0; (dests_ch[j][i] & mask) == 0; ++j) ; /* j-th destination accepts the word character ch. */ trtable[ch] = dest_states[j]; trtable[ch + SBC_MAX] = dest_states_word[j]; } } /* new line */ if (bitset_contain (acceptable, NEWLINE_CHAR)) { /* The current state accepts newline character. */ for (j = 0; j < ndests; ++j) if (bitset_contain (dests_ch[j], NEWLINE_CHAR)) { /* k-th destination accepts newline character. */ trtable[NEWLINE_CHAR] = dest_states_nl[j]; if (need_word_trtable) trtable[NEWLINE_CHAR + SBC_MAX] = dest_states_nl[j]; /* There must be only one destination which accepts newline. See group_nodes_into_DFAstates. */ break; } } re_node_set_free (&follows); for (i = 0; i < ndests; ++i) re_node_set_free (dests_node + i); return true; } /* Group all nodes belonging to STATE into several destinations. Then for all destinations, set the nodes belonging to the destination to DESTS_NODE[i] and set the characters accepted by the destination to DEST_CH[i]. Return the number of destinations if successful, -1 on internal error. */ static Idx group_nodes_into_DFAstates (const re_dfa_t *dfa, const re_dfastate_t *state, re_node_set *dests_node, bitset_t *dests_ch) { reg_errcode_t err; bool ok; Idx i, j, k; Idx ndests; /* Number of the destinations from 'state'. */ bitset_t accepts; /* Characters a node can accept. */ const re_node_set *cur_nodes = &state->nodes; bitset_empty (accepts); ndests = 0; /* For all the nodes belonging to 'state', */ for (i = 0; i < cur_nodes->nelem; ++i) { re_token_t *node = &dfa->nodes[cur_nodes->elems[i]]; re_token_type_t type = node->type; unsigned int constraint = node->constraint; /* Enumerate all single byte character this node can accept. */ if (type == CHARACTER) bitset_set (accepts, node->opr.c); else if (type == SIMPLE_BRACKET) { bitset_merge (accepts, node->opr.sbcset); } else if (type == OP_PERIOD) { if (dfa->mb_cur_max > 1) bitset_merge (accepts, dfa->sb_char); else bitset_set_all (accepts); if (!(dfa->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); if (dfa->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } else if (type == OP_UTF8_PERIOD) { if (ASCII_CHARS % BITSET_WORD_BITS == 0) memset (accepts, -1, ASCII_CHARS / CHAR_BIT); else bitset_merge (accepts, utf8_sb_map); if (!(dfa->syntax & RE_DOT_NEWLINE)) bitset_clear (accepts, '\n'); if (dfa->syntax & RE_DOT_NOT_NULL) bitset_clear (accepts, '\0'); } else continue; /* Check the 'accepts' and sift the characters which are not match it the context. */ if (constraint) { if (constraint & NEXT_NEWLINE_CONSTRAINT) { bool accepts_newline = bitset_contain (accepts, NEWLINE_CHAR); bitset_empty (accepts); if (accepts_newline) bitset_set (accepts, NEWLINE_CHAR); else continue; } if (constraint & NEXT_ENDBUF_CONSTRAINT) { bitset_empty (accepts); continue; } if (constraint & NEXT_WORD_CONSTRAINT) { bitset_word_t any_set = 0; if (type == CHARACTER && !node->word_char) { bitset_empty (accepts); continue; } if (dfa->mb_cur_max > 1) for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= (dfa->word_char[j] | ~dfa->sb_char[j])); else for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= dfa->word_char[j]); if (!any_set) continue; } if (constraint & NEXT_NOTWORD_CONSTRAINT) { bitset_word_t any_set = 0; if (type == CHARACTER && node->word_char) { bitset_empty (accepts); continue; } if (dfa->mb_cur_max > 1) for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= ~(dfa->word_char[j] & dfa->sb_char[j])); else for (j = 0; j < BITSET_WORDS; ++j) any_set |= (accepts[j] &= ~dfa->word_char[j]); if (!any_set) continue; } } /* Then divide 'accepts' into DFA states, or create a new state. Above, we make sure that accepts is not empty. */ for (j = 0; j < ndests; ++j) { bitset_t intersec; /* Intersection sets, see below. */ bitset_t remains; /* Flags, see below. */ bitset_word_t has_intersec, not_subset, not_consumed; /* Optimization, skip if this state doesn't accept the character. */ if (type == CHARACTER && !bitset_contain (dests_ch[j], node->opr.c)) continue; /* Enumerate the intersection set of this state and 'accepts'. */ has_intersec = 0; for (k = 0; k < BITSET_WORDS; ++k) has_intersec |= intersec[k] = accepts[k] & dests_ch[j][k]; /* And skip if the intersection set is empty. */ if (!has_intersec) continue; /* Then check if this state is a subset of 'accepts'. */ not_subset = not_consumed = 0; for (k = 0; k < BITSET_WORDS; ++k) { not_subset |= remains[k] = ~accepts[k] & dests_ch[j][k]; not_consumed |= accepts[k] = accepts[k] & ~dests_ch[j][k]; } /* If this state isn't a subset of 'accepts', create a new group state, which has the 'remains'. */ if (not_subset) { bitset_copy (dests_ch[ndests], remains); bitset_copy (dests_ch[j], intersec); err = re_node_set_init_copy (dests_node + ndests, &dests_node[j]); if (__glibc_unlikely (err != REG_NOERROR)) goto error_return; ++ndests; } /* Put the position in the current group. */ ok = re_node_set_insert (&dests_node[j], cur_nodes->elems[i]); if (__glibc_unlikely (! ok)) goto error_return; /* If all characters are consumed, go to next node. */ if (!not_consumed) break; } /* Some characters remain, create a new group. */ if (j == ndests) { bitset_copy (dests_ch[ndests], accepts); err = re_node_set_init_1 (dests_node + ndests, cur_nodes->elems[i]); if (__glibc_unlikely (err != REG_NOERROR)) goto error_return; ++ndests; bitset_empty (accepts); } } assume (ndests <= SBC_MAX); return ndests; error_return: for (j = 0; j < ndests; ++j) re_node_set_free (dests_node + j); return -1; } /* Check how many bytes the node 'dfa->nodes[node_idx]' accepts. Return the number of the bytes the node accepts. STR_IDX is the current index of the input string. This function handles the nodes which can accept one character, or one collating element like '.', '[a-z]', opposite to the other nodes can only accept one byte. */ #ifdef _LIBC # include <locale/weight.h> #endif static int check_node_accept_bytes (const re_dfa_t *dfa, Idx node_idx, const re_string_t *input, Idx str_idx) { const re_token_t *node = dfa->nodes + node_idx; int char_len, elem_len; Idx i; if (__glibc_unlikely (node->type == OP_UTF8_PERIOD)) { unsigned char c = re_string_byte_at (input, str_idx), d; if (__glibc_likely (c < 0xc2)) return 0; if (str_idx + 2 > input->len) return 0; d = re_string_byte_at (input, str_idx + 1); if (c < 0xe0) return (d < 0x80 || d > 0xbf) ? 0 : 2; else if (c < 0xf0) { char_len = 3; if (c == 0xe0 && d < 0xa0) return 0; } else if (c < 0xf8) { char_len = 4; if (c == 0xf0 && d < 0x90) return 0; } else if (c < 0xfc) { char_len = 5; if (c == 0xf8 && d < 0x88) return 0; } else if (c < 0xfe) { char_len = 6; if (c == 0xfc && d < 0x84) return 0; } else return 0; if (str_idx + char_len > input->len) return 0; for (i = 1; i < char_len; ++i) { d = re_string_byte_at (input, str_idx + i); if (d < 0x80 || d > 0xbf) return 0; } return char_len; } char_len = re_string_char_size_at (input, str_idx); if (node->type == OP_PERIOD) { if (char_len <= 1) return 0; /* FIXME: I don't think this if is needed, as both '\n' and '\0' are char_len == 1. */ /* '.' accepts any one character except the following two cases. */ if ((!(dfa->syntax & RE_DOT_NEWLINE) && re_string_byte_at (input, str_idx) == '\n') || ((dfa->syntax & RE_DOT_NOT_NULL) && re_string_byte_at (input, str_idx) == '\0')) return 0; return char_len; } elem_len = re_string_elem_size_at (input, str_idx); if ((elem_len <= 1 && char_len <= 1) || char_len == 0) return 0; if (node->type == COMPLEX_BRACKET) { const re_charset_t *cset = node->opr.mbcset; #ifdef _LIBC const unsigned char *pin = ((const unsigned char *) re_string_get_buffer (input) + str_idx); Idx j; uint32_t nrules; #endif int match_len = 0; wchar_t wc = ((cset->nranges || cset->nchar_classes || cset->nmbchars) ? re_string_wchar_at (input, str_idx) : 0); /* match with multibyte character? */ for (i = 0; i < cset->nmbchars; ++i) if (wc == cset->mbchars[i]) { match_len = char_len; goto check_node_accept_bytes_match; } /* match with character_class? */ for (i = 0; i < cset->nchar_classes; ++i) { wctype_t wt = cset->char_classes[i]; if (__iswctype (wc, wt)) { match_len = char_len; goto check_node_accept_bytes_match; } } #ifdef _LIBC nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { unsigned int in_collseq = 0; const int32_t *table, *indirect; const unsigned char *weights, *extra; const char *collseqwc; /* match with collating_symbol? */ if (cset->ncoll_syms) extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); for (i = 0; i < cset->ncoll_syms; ++i) { const unsigned char *coll_sym = extra + cset->coll_syms[i]; /* Compare the length of input collating element and the length of current collating element. */ if (*coll_sym != elem_len) continue; /* Compare each bytes. */ for (j = 0; j < *coll_sym; j++) if (pin[j] != coll_sym[1 + j]) break; if (j == *coll_sym) { /* Match if every bytes is equal. */ match_len = j; goto check_node_accept_bytes_match; } } if (cset->nranges) { if (elem_len <= char_len) { collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); in_collseq = __collseq_table_lookup (collseqwc, wc); } else in_collseq = find_collation_sequence_value (pin, elem_len); } /* match with range expression? */ /* FIXME: Implement rational ranges here, too. */ for (i = 0; i < cset->nranges; ++i) if (cset->range_starts[i] <= in_collseq && in_collseq <= cset->range_ends[i]) { match_len = elem_len; goto check_node_accept_bytes_match; } /* match with equivalence_class? */ if (cset->nequiv_classes) { const unsigned char *cp = pin; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); int32_t idx = findidx (table, indirect, extra, &cp, elem_len); int32_t rule = idx >> 24; idx &= 0xffffff; if (idx > 0) { size_t weight_len = weights[idx]; for (i = 0; i < cset->nequiv_classes; ++i) { int32_t equiv_class_idx = cset->equiv_classes[i]; int32_t equiv_class_rule = equiv_class_idx >> 24; equiv_class_idx &= 0xffffff; if (weights[equiv_class_idx] == weight_len && equiv_class_rule == rule && memcmp (weights + idx + 1, weights + equiv_class_idx + 1, weight_len) == 0) { match_len = elem_len; goto check_node_accept_bytes_match; } } } } } else #endif /* _LIBC */ { /* match with range expression? */ for (i = 0; i < cset->nranges; ++i) { if (cset->range_starts[i] <= wc && wc <= cset->range_ends[i]) { match_len = char_len; goto check_node_accept_bytes_match; } } } check_node_accept_bytes_match: if (!cset->non_match) return match_len; else { if (match_len > 0) return 0; else return (elem_len > char_len) ? elem_len : char_len; } } return 0; } #ifdef _LIBC static unsigned int find_collation_sequence_value (const unsigned char *mbs, size_t mbs_len) { uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules == 0) { if (mbs_len == 1) { /* No valid character. Match it as a single byte character. */ const unsigned char *collseq = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); return collseq[mbs[0]]; } return UINT_MAX; } else { int32_t idx; const unsigned char *extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); int32_t extrasize = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB + 1) - extra; for (idx = 0; idx < extrasize;) { int mbs_cnt; bool found = false; int32_t elem_mbs_len; /* Skip the name of collating element name. */ idx = idx + extra[idx] + 1; elem_mbs_len = extra[idx++]; if (mbs_len == elem_mbs_len) { for (mbs_cnt = 0; mbs_cnt < elem_mbs_len; ++mbs_cnt) if (extra[idx + mbs_cnt] != mbs[mbs_cnt]) break; if (mbs_cnt == elem_mbs_len) /* Found the entry. */ found = true; } /* Skip the byte sequence of the collating element. */ idx += elem_mbs_len; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; /* Skip the collation sequence value. */ idx += sizeof (uint32_t); /* Skip the wide char sequence of the collating element. */ idx = idx + sizeof (uint32_t) * (*(int32_t *) (extra + idx) + 1); /* If we found the entry, return the sequence value. */ if (found) return *(uint32_t *) (extra + idx); /* Skip the collation sequence value. */ idx += sizeof (uint32_t); } return UINT_MAX; } } #endif /* _LIBC */ /* Check whether the node accepts the byte which is IDX-th byte of the INPUT. */ static bool check_node_accept (const re_match_context_t *mctx, const re_token_t *node, Idx idx) { unsigned char ch; ch = re_string_byte_at (&mctx->input, idx); switch (node->type) { case CHARACTER: if (node->opr.c != ch) return false; break; case SIMPLE_BRACKET: if (!bitset_contain (node->opr.sbcset, ch)) return false; break; case OP_UTF8_PERIOD: if (ch >= ASCII_CHARS) return false; FALLTHROUGH; case OP_PERIOD: if ((ch == '\n' && !(mctx->dfa->syntax & RE_DOT_NEWLINE)) || (ch == '\0' && (mctx->dfa->syntax & RE_DOT_NOT_NULL))) return false; break; default: return false; } if (node->constraint) { /* The node has constraints. Check whether the current context satisfies the constraints. */ unsigned int context = re_string_context_at (&mctx->input, idx, mctx->eflags); if (NOT_SATISFY_NEXT_CONSTRAINT (node->constraint, context)) return false; } return true; } /* Extend the buffers, if the buffers have run out. */ static reg_errcode_t __attribute_warn_unused_result__ extend_buffers (re_match_context_t *mctx, int min_len) { reg_errcode_t ret; re_string_t *pstr = &mctx->input; /* Avoid overflow. */ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / sizeof (re_dfastate_t *)) / 2 <= pstr->bufs_len)) return REG_ESPACE; /* Double the lengths of the buffers, but allocate at least MIN_LEN. */ ret = re_string_realloc_buffers (pstr, MAX (min_len, MIN (pstr->len, pstr->bufs_len * 2))); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; if (mctx->state_log != NULL) { /* And double the length of state_log. */ /* XXX We have no indication of the size of this buffer. If this allocation fail we have no indication that the state_log array does not have the right size. */ re_dfastate_t **new_array = re_realloc (mctx->state_log, re_dfastate_t *, pstr->bufs_len + 1); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; mctx->state_log = new_array; } /* Then reconstruct the buffers. */ if (pstr->icase) { if (pstr->mb_cur_max > 1) { ret = build_wcs_upper_buffer (pstr); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; } else build_upper_buffer (pstr); } else { if (pstr->mb_cur_max > 1) build_wcs_buffer (pstr); else { if (pstr->trans != NULL) re_string_translate_buffer (pstr); } } return REG_NOERROR; } /* Functions for matching context. */ /* Initialize MCTX. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_init (re_match_context_t *mctx, int eflags, Idx n) { mctx->eflags = eflags; mctx->match_last = -1; if (n > 0) { /* Avoid overflow. */ size_t max_object_size = MAX (sizeof (struct re_backref_cache_entry), sizeof (re_sub_match_top_t *)); if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) < n)) return REG_ESPACE; mctx->bkref_ents = re_malloc (struct re_backref_cache_entry, n); mctx->sub_tops = re_malloc (re_sub_match_top_t *, n); if (__glibc_unlikely (mctx->bkref_ents == NULL || mctx->sub_tops == NULL)) return REG_ESPACE; } /* Already zero-ed by the caller. else mctx->bkref_ents = NULL; mctx->nbkref_ents = 0; mctx->nsub_tops = 0; */ mctx->abkref_ents = n; mctx->max_mb_elem_len = 1; mctx->asub_tops = n; return REG_NOERROR; } /* Clean the entries which depend on the current input in MCTX. This function must be invoked when the matcher changes the start index of the input, or changes the input string. */ static void match_ctx_clean (re_match_context_t *mctx) { Idx st_idx; for (st_idx = 0; st_idx < mctx->nsub_tops; ++st_idx) { Idx sl_idx; re_sub_match_top_t *top = mctx->sub_tops[st_idx]; for (sl_idx = 0; sl_idx < top->nlasts; ++sl_idx) { re_sub_match_last_t *last = top->lasts[sl_idx]; re_free (last->path.array); re_free (last); } re_free (top->lasts); if (top->path) { re_free (top->path->array); re_free (top->path); } re_free (top); } mctx->nsub_tops = 0; mctx->nbkref_ents = 0; } /* Free all the memory associated with MCTX. */ static void match_ctx_free (re_match_context_t *mctx) { /* First, free all the memory associated with MCTX->SUB_TOPS. */ match_ctx_clean (mctx); re_free (mctx->sub_tops); re_free (mctx->bkref_ents); } /* Add a new backreference entry to MCTX. Note that we assume that caller never call this function with duplicate entry, and call with STR_IDX which isn't smaller than any existing entry. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_add_entry (re_match_context_t *mctx, Idx node, Idx str_idx, Idx from, Idx to) { if (mctx->nbkref_ents >= mctx->abkref_ents) { struct re_backref_cache_entry* new_entry; new_entry = re_realloc (mctx->bkref_ents, struct re_backref_cache_entry, mctx->abkref_ents * 2); if (__glibc_unlikely (new_entry == NULL)) { re_free (mctx->bkref_ents); return REG_ESPACE; } mctx->bkref_ents = new_entry; memset (mctx->bkref_ents + mctx->nbkref_ents, '\0', sizeof (struct re_backref_cache_entry) * mctx->abkref_ents); mctx->abkref_ents *= 2; } if (mctx->nbkref_ents > 0 && mctx->bkref_ents[mctx->nbkref_ents - 1].str_idx == str_idx) mctx->bkref_ents[mctx->nbkref_ents - 1].more = 1; mctx->bkref_ents[mctx->nbkref_ents].node = node; mctx->bkref_ents[mctx->nbkref_ents].str_idx = str_idx; mctx->bkref_ents[mctx->nbkref_ents].subexp_from = from; mctx->bkref_ents[mctx->nbkref_ents].subexp_to = to; /* This is a cache that saves negative results of check_dst_limits_calc_pos. If bit N is clear, means that this entry won't epsilon-transition to an OP_OPEN_SUBEXP or OP_CLOSE_SUBEXP for the N+1-th subexpression. If it is set, check_dst_limits_calc_pos_1 will recurse and try to find one such node. A backreference does not epsilon-transition unless it is empty, so set to all zeros if FROM != TO. */ mctx->bkref_ents[mctx->nbkref_ents].eps_reachable_subexps_map = (from == to ? -1 : 0); mctx->bkref_ents[mctx->nbkref_ents++].more = 0; if (mctx->max_mb_elem_len < to - from) mctx->max_mb_elem_len = to - from; return REG_NOERROR; } /* Return the first entry with the same str_idx, or -1 if none is found. Note that MCTX->BKREF_ENTS is already sorted by MCTX->STR_IDX. */ static Idx search_cur_bkref_entry (const re_match_context_t *mctx, Idx str_idx) { Idx left, right, mid, last; last = right = mctx->nbkref_ents; for (left = 0; left < right;) { mid = (left + right) / 2; if (mctx->bkref_ents[mid].str_idx < str_idx) left = mid + 1; else right = mid; } if (left < last && mctx->bkref_ents[left].str_idx == str_idx) return left; else return -1; } /* Register the node NODE, whose type is OP_OPEN_SUBEXP, and which matches at STR_IDX. */ static reg_errcode_t __attribute_warn_unused_result__ match_ctx_add_subtop (re_match_context_t *mctx, Idx node, Idx str_idx) { DEBUG_ASSERT (mctx->sub_tops != NULL); DEBUG_ASSERT (mctx->asub_tops > 0); if (__glibc_unlikely (mctx->nsub_tops == mctx->asub_tops)) { Idx new_asub_tops = mctx->asub_tops * 2; re_sub_match_top_t **new_array = re_realloc (mctx->sub_tops, re_sub_match_top_t *, new_asub_tops); if (__glibc_unlikely (new_array == NULL)) return REG_ESPACE; mctx->sub_tops = new_array; mctx->asub_tops = new_asub_tops; } mctx->sub_tops[mctx->nsub_tops] = calloc (1, sizeof (re_sub_match_top_t)); if (__glibc_unlikely (mctx->sub_tops[mctx->nsub_tops] == NULL)) return REG_ESPACE; mctx->sub_tops[mctx->nsub_tops]->node = node; mctx->sub_tops[mctx->nsub_tops++]->str_idx = str_idx; return REG_NOERROR; } /* Register the node NODE, whose type is OP_CLOSE_SUBEXP, and which matches at STR_IDX, whose corresponding OP_OPEN_SUBEXP is SUB_TOP. Return the new entry if successful, NULL if memory is exhausted. */ static re_sub_match_last_t * match_ctx_add_sublast (re_sub_match_top_t *subtop, Idx node, Idx str_idx) { re_sub_match_last_t *new_entry; if (__glibc_unlikely (subtop->nlasts == subtop->alasts)) { Idx new_alasts = 2 * subtop->alasts + 1; re_sub_match_last_t **new_array = re_realloc (subtop->lasts, re_sub_match_last_t *, new_alasts); if (__glibc_unlikely (new_array == NULL)) return NULL; subtop->lasts = new_array; subtop->alasts = new_alasts; } new_entry = calloc (1, sizeof (re_sub_match_last_t)); if (__glibc_likely (new_entry != NULL)) { subtop->lasts[subtop->nlasts] = new_entry; new_entry->node = node; new_entry->str_idx = str_idx; ++subtop->nlasts; } return new_entry; } static void sift_ctx_init (re_sift_context_t *sctx, re_dfastate_t **sifted_sts, re_dfastate_t **limited_sts, Idx last_node, Idx last_str_idx) { sctx->sifted_states = sifted_sts; sctx->limited_states = limited_sts; sctx->last_node = last_node; sctx->last_str_idx = last_str_idx; re_node_set_init_empty (&sctx->limits); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/filename.h�������������������������������������������������������������������������0000644�0000000�0000000�00000011106�14226564447�012620� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Basic filename support macros. Copyright (C) 2001-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* From Paul Eggert and Jim Meyering. */ #ifndef _FILENAME_H #define _FILENAME_H #include <string.h> #ifdef __cplusplus extern "C" { #endif /* Filename support. ISSLASH(C) tests whether C is a directory separator character. HAS_DEVICE(Filename) tests whether Filename contains a device specification. FILE_SYSTEM_PREFIX_LEN(Filename) length of the device specification at the beginning of Filename, index of the part consisting of alternating components and slashes. FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 when a non-empty device specification can be followed by an empty or relative part, 0 when a non-empty device specification must be followed by a slash, 0 when device specification don't exist. IS_ABSOLUTE_FILE_NAME(Filename) tests whether Filename is independent of any notion of "current directory". IS_RELATIVE_FILE_NAME(Filename) tests whether Filename may be concatenated to a directory filename. Note: On native Windows, OS/2, DOS, "c:" is neither an absolute nor a relative file name! IS_FILE_NAME_WITH_DIR(Filename) tests whether Filename contains a device or directory specification. */ #if defined _WIN32 || defined __CYGWIN__ \ || defined __EMX__ || defined __MSDOS__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') /* Internal macro: Tests whether a character is a drive letter. */ # define _IS_DRIVE_LETTER(C) \ (((C) >= 'A' && (C) <= 'Z') || ((C) >= 'a' && (C) <= 'z')) /* Help the compiler optimizing it. This assumes ASCII. */ # undef _IS_DRIVE_LETTER # define _IS_DRIVE_LETTER(C) \ (((unsigned int) (C) | ('a' - 'A')) - 'a' <= 'z' - 'a') # define HAS_DEVICE(Filename) \ (_IS_DRIVE_LETTER ((Filename)[0]) && (Filename)[1] == ':') # define FILE_SYSTEM_PREFIX_LEN(Filename) (HAS_DEVICE (Filename) ? 2 : 0) # ifdef __CYGWIN__ # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 # else /* On native Windows, OS/2, DOS, the system has the notion of a "current directory" on each drive. */ # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 1 # endif # if FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE # define IS_ABSOLUTE_FILE_NAME(Filename) \ ISSLASH ((Filename)[FILE_SYSTEM_PREFIX_LEN (Filename)]) # else # define IS_ABSOLUTE_FILE_NAME(Filename) \ (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename)) # endif # define IS_RELATIVE_FILE_NAME(Filename) \ (! (ISSLASH ((Filename)[0]) || HAS_DEVICE (Filename))) # define IS_FILE_NAME_WITH_DIR(Filename) \ (strchr ((Filename), '/') != NULL || strchr ((Filename), '\\') != NULL \ || HAS_DEVICE (Filename)) #else /* Unix */ # define ISSLASH(C) ((C) == '/') # define HAS_DEVICE(Filename) ((void) (Filename), 0) # define FILE_SYSTEM_PREFIX_LEN(Filename) ((void) (Filename), 0) # define FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE 0 # define IS_ABSOLUTE_FILE_NAME(Filename) ISSLASH ((Filename)[0]) # define IS_RELATIVE_FILE_NAME(Filename) (! ISSLASH ((Filename)[0])) # define IS_FILE_NAME_WITH_DIR(Filename) (strchr ((Filename), '/') != NULL) #endif /* Deprecated macros. For backward compatibility with old users of the 'filename' module. */ #define IS_ABSOLUTE_PATH IS_ABSOLUTE_FILE_NAME #define IS_PATH_WITH_DIR IS_FILE_NAME_WITH_DIR #ifdef __cplusplus } #endif #endif /* _FILENAME_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/Makefile.in������������������������������������������������������������������������0000644�0000000�0000000�00002124252�14226573150�012734� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Copyright (C) 2002-2022 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # Reproduce by: # gnulib-tool --import --local-dir=gl \ # --lib=librecutils \ # --source-base=lib \ # --m4-base=m4 \ # --doc-base=doc \ # --tests-base=tests \ # --aux-dir=build-aux \ # --no-conditional-dependencies \ # --libtool \ # --macro-prefix=gl \ # acl \ # alloca \ # announce-gen \ # array-list \ # autobuild \ # base64 \ # btowc \ # c-ctype \ # closeout \ # copy-file \ # crc \ # euidaccess \ # execute \ # extensions \ # flock \ # floor \ # fprintf-posix \ # fwriting \ # gendocs \ # getdelim \ # getopt-gnu \ # getpass-gnu \ # gettext-h \ # gnupload \ # list \ # localcharset \ # maintainer-makefile \ # mbrlen \ # mbrtowc \ # mbsinit \ # memchr \ # minmax \ # mkostemp \ # mkstemp \ # obstack \ # parse-datetime \ # pathmax \ # printf-posix \ # progname \ # random_r \ # read-file \ # readline \ # regex \ # regexprops-generic \ # remove \ # rename \ # selinux-h \ # signal-h \ # ssize_t \ # stat-macros \ # stdbool \ # stdint \ # strcasestr \ # strerror \ # strsep \ # strverscmp \ # tempname \ # threadlib \ # tmpdir \ # unlocked-io \ # update-copyright \ # vasnprintf-posix \ # vasprintf \ # vasprintf-posix \ # verify \ # version-etc-fsf \ # wcrtomb \ # wctob VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @GL_COND_OBJ_ACCESS_TRUE@am__append_1 = access.c @GL_COND_OBJ_BTOWC_TRUE@am__append_2 = btowc.c @GL_COND_OBJ_CANONICALIZE_LGPL_TRUE@am__append_3 = canonicalize-lgpl.c @GL_COND_OBJ_CHDIR_LONG_TRUE@am__append_4 = chdir-long.c @GL_COND_OBJ_CLOSE_TRUE@am__append_5 = close.c @GL_COND_OBJ_CLOSEDIR_TRUE@am__append_6 = closedir.c @GL_COND_OBJ_COPY_FILE_RANGE_TRUE@am__append_7 = copy-file-range.c @GL_COND_OBJ_DIRFD_TRUE@am__append_8 = dirfd.c @GL_COND_OBJ_DUP_TRUE@am__append_9 = dup.c @GL_COND_OBJ_DUP2_TRUE@am__append_10 = dup2.c @GL_COND_OBJ_ERROR_TRUE@am__append_11 = error.c @GL_COND_OBJ_EUIDACCESS_TRUE@am__append_12 = euidaccess.c @GL_COND_OBJ_EXPLICIT_BZERO_TRUE@am__append_13 = explicit_bzero.c @GL_COND_OBJ_FCHDIR_TRUE@am__append_14 = fchdir.c @GL_COND_OBJ_FCNTL_TRUE@am__append_15 = fcntl.c @GL_COND_OBJ_FDOPENDIR_TRUE@am__append_16 = fdopendir.c @GL_COND_OBJ_FLOAT_TRUE@am__append_17 = float.c @GL_COND_OBJ_ITOLD_TRUE@am__append_18 = itold.c @GL_COND_OBJ_FLOCK_TRUE@am__append_19 = flock.c @GL_COND_OBJ_FLOOR_TRUE@am__append_20 = floor.c @GL_COND_OBJ_FPENDING_TRUE@am__append_21 = fpending.c @GL_COND_OBJ_FREE_TRUE@am__append_22 = free.c @GL_COND_OBJ_FSEEK_TRUE@am__append_23 = fseek.c @GL_COND_OBJ_FSEEKO_TRUE@am__append_24 = fseeko.c @GL_COND_OBJ_FSETERR_TRUE@am__append_25 = fseterr.c @GL_COND_OBJ_FSTAT_TRUE@am__append_26 = fstat.c @GL_COND_OBJ_FSTATAT_TRUE@am__append_27 = fstatat.c @GL_COND_OBJ_FTELL_TRUE@am__append_28 = ftell.c @GL_COND_OBJ_FTELLO_TRUE@am__append_29 = ftello.c @GL_COND_OBJ_FWRITING_TRUE@am__append_30 = fwriting.c @GL_COND_OBJ_GETCWD_TRUE@am__append_31 = getcwd.c @GL_COND_OBJ_GETCWD_LGPL_TRUE@am__append_32 = getcwd-lgpl.c @GL_COND_OBJ_GETDELIM_TRUE@am__append_33 = getdelim.c @GL_COND_OBJ_GETDTABLESIZE_TRUE@am__append_34 = getdtablesize.c @GL_COND_OBJ_GETGROUPS_TRUE@am__append_35 = getgroups.c @GL_COND_OBJ_GETLINE_TRUE@am__append_36 = getline.c @GL_COND_OBJ_GETOPT_TRUE@am__append_37 = getopt.c getopt1.c @GL_COND_OBJ_GETRANDOM_TRUE@am__append_38 = getrandom.c @GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__append_39 = gettimeofday.c @GL_COND_OBJ_GROUP_MEMBER_TRUE@am__append_40 = group-member.c @GL_COND_OBJ_LOCALECONV_TRUE@am__append_41 = localeconv.c @GL_COND_OBJ_LSEEK_TRUE@am__append_42 = lseek.c @GL_COND_OBJ_LSTAT_TRUE@am__append_43 = lstat.c @GL_COND_OBJ_MBRLEN_TRUE@am__append_44 = mbrlen.c @GL_COND_OBJ_MBRTOWC_TRUE@am__append_45 = mbrtowc.c @GL_COND_OBJ_MBSINIT_TRUE@am__append_46 = mbsinit.c @GL_COND_OBJ_MBTOWC_TRUE@am__append_47 = mbtowc.c @GL_COND_OBJ_MEMCHR_TRUE@am__append_48 = memchr.c @GL_COND_OBJ_MEMPCPY_TRUE@am__append_49 = mempcpy.c @GL_COND_OBJ_MEMRCHR_TRUE@am__append_50 = memrchr.c @GL_COND_OBJ_MKDIR_TRUE@am__append_51 = mkdir.c @GL_COND_OBJ_MKOSTEMP_TRUE@am__append_52 = mkostemp.c @GL_COND_OBJ_MKSTEMP_TRUE@am__append_53 = mkstemp.c @GL_COND_OBJ_MSVC_INVAL_TRUE@am__append_54 = msvc-inval.c @GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__append_55 = msvc-nothrow.c @GL_COND_OBJ_NL_LANGINFO_TRUE@am__append_56 = nl_langinfo.c @GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE@am__append_57 = nl_langinfo-lock.c @GL_COND_OBJ_OBSTACK_TRUE@am__append_58 = obstack.c @GL_COND_OBJ_OPEN_TRUE@am__append_59 = open.c @GL_COND_OBJ_OPENAT_TRUE@am__append_60 = openat.c @GL_COND_OBJ_OPENDIR_TRUE@am__append_61 = opendir.c @GL_COND_OBJ_PIPE_TRUE@am__append_62 = pipe.c @GL_COND_OBJ_SPAWN_TRUE@am__append_63 = spawn.c @GL_COND_OBJ_SPAWNI_TRUE@am__append_64 = spawni.c @GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR_TRUE@am__append_65 = spawn_faction_addchdir.c @GL_COND_OBJ_SPAWN_FACTION_ADDOPEN_TRUE@am__append_66 = spawn_faction_addopen.c @GL_COND_OBJ_SPAWN_FACTION_DESTROY_TRUE@am__append_67 = spawn_faction_destroy.c @GL_COND_OBJ_SPAWN_FACTION_INIT_TRUE@am__append_68 = spawn_faction_init.c @GL_COND_OBJ_SPAWNATTR_DESTROY_TRUE@am__append_69 = spawnattr_destroy.c @GL_COND_OBJ_SPAWNATTR_INIT_TRUE@am__append_70 = spawnattr_init.c @GL_COND_OBJ_SPAWNATTR_SETFLAGS_TRUE@am__append_71 = spawnattr_setflags.c @GL_COND_OBJ_SPAWNATTR_SETSIGMASK_TRUE@am__append_72 = spawnattr_setsigmask.c @GL_COND_OBJ_SPAWNP_TRUE@am__append_73 = spawnp.c @GL_COND_OBJ_RAISE_TRUE@am__append_74 = raise.c @GL_COND_OBJ_RANDOM_R_TRUE@am__append_75 = random_r.c @GL_COND_OBJ_RAWMEMCHR_TRUE@am__append_76 = rawmemchr.c @GL_COND_OBJ_READ_TRUE@am__append_77 = read.c @GL_COND_OBJ_READDIR_TRUE@am__append_78 = readdir.c @GL_COND_OBJ_READLINE_TRUE@am__append_79 = readline.c @GL_COND_OBJ_READLINK_TRUE@am__append_80 = readlink.c @GL_COND_OBJ_REALLOCARRAY_TRUE@am__append_81 = reallocarray.c @GL_COND_OBJ_REGEX_TRUE@am__append_82 = regex.c @GL_COND_OBJ_REMOVE_TRUE@am__append_83 = remove.c @GL_COND_OBJ_RENAME_TRUE@am__append_84 = rename.c @GL_COND_OBJ_REWINDDIR_TRUE@am__append_85 = rewinddir.c @GL_COND_OBJ_RMDIR_TRUE@am__append_86 = rmdir.c @GL_COND_OBJ_SECURE_GETENV_TRUE@am__append_87 = secure_getenv.c @GL_COND_OBJ_GETFILECON_TRUE@am__append_88 = getfilecon.c @GL_COND_OBJ_SETENV_TRUE@am__append_89 = setenv.c @GL_COND_OBJ_SETLOCALE_LOCK_TRUE@am__append_90 = setlocale-lock.c @GL_COND_OBJ_SIGACTION_TRUE@am__append_91 = sigaction.c @GL_COND_OBJ_SIGNBIT3_TRUE@am__append_92 = signbitf.c signbitd.c signbitl.c @GL_COND_OBJ_SIGPROCMASK_TRUE@am__append_93 = sigprocmask.c @GL_COND_OBJ_STAT_TRUE@am__append_94 = stat.c @GL_COND_OBJ_STDIO_READ_TRUE@am__append_95 = stdio-read.c @GL_COND_OBJ_STDIO_WRITE_TRUE@am__append_96 = stdio-write.c @GL_COND_OBJ_STPCPY_TRUE@am__append_97 = stpcpy.c @GL_COND_OBJ_STRCASECMP_TRUE@am__append_98 = strcasecmp.c @GL_COND_OBJ_STRNCASECMP_TRUE@am__append_99 = strncasecmp.c @GL_COND_OBJ_STRCHRNUL_TRUE@am__append_100 = strchrnul.c @GL_COND_OBJ_STRDUP_TRUE@am__append_101 = strdup.c @GL_COND_OBJ_STRERROR_TRUE@am__append_102 = strerror.c @GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__append_103 = strerror-override.c @GL_COND_OBJ_STRSEP_TRUE@am__append_104 = strsep.c @GL_COND_OBJ_STRVERSCMP_TRUE@am__append_105 = strverscmp.c @GL_COND_OBJ_TIME_R_TRUE@am__append_106 = time_r.c @GL_COND_OBJ_TIME_RZ_TRUE@am__append_107 = time_rz.c @GL_COND_OBJ_TIMEGM_TRUE@am__append_108 = timegm.c @GL_COND_OBJ_TZSET_TRUE@am__append_109 = tzset.c @GL_COND_OBJ_UNLINK_TRUE@am__append_110 = unlink.c @GL_COND_OBJ_UNSETENV_TRUE@am__append_111 = unsetenv.c @GL_COND_OBJ_UTIME_TRUE@am__append_112 = utime.c @GL_COND_OBJ_WAITPID_TRUE@am__append_113 = waitpid.c @GL_COND_OBJ_WCRTOMB_TRUE@am__append_114 = wcrtomb.c @GL_COND_OBJ_WCTOB_TRUE@am__append_115 = wctob.c @GL_COND_OBJ_WCTOMB_TRUE@am__append_116 = wctomb.c @GL_COND_OBJ_WINDOWS_MUTEX_TRUE@am__append_117 = windows-mutex.c @GL_COND_OBJ_WINDOWS_ONCE_TRUE@am__append_118 = windows-once.c @GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE@am__append_119 = windows-recmutex.c @GL_COND_OBJ_WINDOWS_RWLOCK_TRUE@am__append_120 = windows-rwlock.c @GL_COND_OBJ_WINDOWS_SPAWN_TRUE@am__append_121 = windows-spawn.c @GL_COND_OBJ_WRITE_TRUE@am__append_122 = write.c subdir = lib ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 \ $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/calloc.m4 \ $(top_srcdir)/m4/canonicalize.m4 \ $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/clock_time.m4 \ $(top_srcdir)/m4/close.m4 $(top_srcdir)/m4/closedir.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/copy-file-range.m4 \ $(top_srcdir)/m4/copy-file.m4 $(top_srcdir)/m4/d-ino.m4 \ $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup.m4 \ $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eaccess.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ $(top_srcdir)/m4/explicit_bzero.m4 \ $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 \ $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fchdir.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \ $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \ $(top_srcdir)/m4/filenamecat.m4 \ $(top_srcdir)/m4/findprog-in.m4 $(top_srcdir)/m4/flexmember.m4 \ $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/flock.m4 \ $(top_srcdir)/m4/floor.m4 $(top_srcdir)/m4/fopen.m4 \ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ $(top_srcdir)/m4/fseek.m4 $(top_srcdir)/m4/fseeko.m4 \ $(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \ $(top_srcdir)/m4/fstatat.m4 $(top_srcdir)/m4/ftell.m4 \ $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ $(top_srcdir)/m4/getcwd-abort-bug.m4 \ $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \ $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \ $(top_srcdir)/m4/getpass.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/getrandom.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/group-member.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexpl.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrlen.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/minmax.m4 \ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkostemp.m4 \ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \ $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/opendir.m4 \ $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ $(top_srcdir)/m4/posix_spawn_faction_addchdir.m4 \ $(top_srcdir)/m4/printf-frexp.m4 \ $(top_srcdir)/m4/printf-frexpl.m4 \ $(top_srcdir)/m4/printf-posix-rpl.m4 \ $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readdir.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/remove.m4 \ $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rewinddir.m4 \ $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/safe-read.m4 \ $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/save-cwd.m4 \ $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ $(top_srcdir)/m4/selinux-context-h.m4 \ $(top_srcdir)/m4/selinux-label-h.m4 \ $(top_srcdir)/m4/selinux-selinux-h.m4 \ $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/setlocale_null.m4 \ $(top_srcdir)/m4/sh-filename.m4 \ $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ $(top_srcdir)/m4/signal_h.m4 \ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/stdio_h.m4 \ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/stpcpy.m4 \ $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ $(top_srcdir)/m4/sys_random_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink.m4 \ $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utime.m4 \ $(top_srcdir)/m4/utime_h.m4 $(top_srcdir)/m4/utimens.m4 \ $(top_srcdir)/m4/utimes.m4 \ $(top_srcdir)/m4/vasnprintf-posix.m4 \ $(top_srcdir)/m4/vasnprintf.m4 \ $(top_srcdir)/m4/vasprintf-posix.m4 \ $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ $(top_srcdir)/m4/vfprintf-posix.m4 \ $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/write.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/year2038.m4 \ $(top_srcdir)/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(noinst_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LIBRARIES = $(noinst_LIBRARIES) LTLIBRARIES = $(noinst_LTLIBRARIES) am__DEPENDENCIES_1 = am__librecutils_la_SOURCES_DIST = access.c copy-acl.c set-acl.c \ acl-errno-valid.c acl-internal.c get-permissions.c \ set-permissions.c gl_array_list.h gl_array_list.c \ openat-priv.h openat-proc.c base64.h base64.c basename-lgpl.c \ binary-io.h binary-io.c bitrotate.h bitrotate.c btowc.c \ c-ctype.h c-ctype.c c-strcase.h c-strcasecmp.c c-strncasecmp.c \ canonicalize.c canonicalize-lgpl.c chdir-long.c cloexec.c \ close.c close-stream.c closedir.c closeout.c concat-filename.c \ copy-file.h copy-file.c copy-file-range.c crc.c dirfd.c \ dirname-lgpl.c stripslash.c dup.c dup2.c \ malloc/dynarray_at_failure.c malloc/dynarray_emplace_enlarge.c \ malloc/dynarray_finalize.c malloc/dynarray_resize.c \ malloc/dynarray_resize_clear.c error.c euidaccess.c execute.h \ execute.c exitfail.c explicit_bzero.c fatal-signal.h \ fatal-signal.c fchdir.c fcntl.c fd-hook.c fd-safer-flag.c \ dup-safer-flag.c fdopendir.c file-set.c filenamecat-lgpl.c \ findprog.h findprog-in.c float.c itold.c flock.c floor.c \ fpending.c free.c fseek.c fseeko.c fseterr.c fstat.c fstatat.c \ ftell.c ftello.c full-write.h full-write.c fwriting.c getcwd.c \ getcwd-lgpl.c getdelim.c getdtablesize.c getgroups.c getline.c \ getopt.c getopt1.c getprogname.h getprogname.c getrandom.c \ gettext.h gettime.c gettimeofday.c group-member.c \ hard-locale.c hash.c hash-pjw.h hash-pjw.c \ hash-triple-simple.c ialloc.c idx.h gl_list.h gl_list.c \ localcharset.c localeconv.c glthread/lock.h glthread/lock.c \ lseek.c lstat.c malloca.c math.c mbrlen.c mbrtowc.c mbsinit.c \ mbtowc.c memchr.c mempcpy.c memrchr.c minmax.h mkdir.c \ mkostemp.c mkstemp.c msvc-inval.c msvc-nothrow.c nl_langinfo.c \ nl_langinfo-lock.c nstrftime.c obstack.c open.c openat.c \ openat-die.c opendir.c parse-datetime.y pipe.c spawn.c \ spawni.c spawn_faction_addchdir.c spawn_faction_addopen.c \ spawn_faction_destroy.c spawn_faction_init.c \ spawnattr_destroy.c spawnattr_init.c spawnattr_setflags.c \ spawnattr_setsigmask.c spawnp.c printf-frexp.c printf-frexpl.c \ progname.h progname.c qcopy-acl.c qset-acl.c quotearg.c \ raise.c random_r.c rawmemchr.c read.c read-file.c readdir.c \ readline.c readlink.c reallocarray.c regex.c remove.c rename.c \ rewinddir.c rmdir.c safe-read.c safe-write.c save-cwd.c \ malloc/scratch_buffer_dupfree.c malloc/scratch_buffer_grow.c \ malloc/scratch_buffer_grow_preserve.c \ malloc/scratch_buffer_set_array_size.c secure_getenv.c \ getfilecon.c se-context.in.h se-label.in.h se-selinux.in.h \ se-context.c se-label.c se-selinux.c setenv.c setlocale_null.c \ setlocale-lock.c sigaction.c sig-handler.c signbitf.c \ signbitd.c signbitl.c sigprocmask.c size_max.h stat.c \ stat-time.c stdio-read.c stdio-write.c stpcpy.c strcasecmp.c \ strncasecmp.c strchrnul.c strdup.c strerror.c \ strerror-override.c strsep.c strverscmp.c tempname.c \ glthread/threadlib.c time_r.c time_rz.c timegm.c timespec.c \ tmpdir.h tmpdir.c tzset.c unistd.c dup-safer.c fd-safer.c \ pipe-safer.c unlink.c unsetenv.c utime.c utimens.c \ version-etc.h version-etc.c version-etc-fsf.c wait-process.h \ wait-process.c waitpid.c wcrtomb.c wctob.c wctomb.c wctype-h.c \ windows-mutex.c windows-once.c windows-recmutex.c \ windows-rwlock.c windows-spawn.c write.c xmalloc.c \ xalloc-die.c xsize.h xsize.c @GL_COND_OBJ_ACCESS_TRUE@am__objects_1 = librecutils_la-access.lo @GL_COND_OBJ_BTOWC_TRUE@am__objects_2 = librecutils_la-btowc.lo @GL_COND_OBJ_CANONICALIZE_LGPL_TRUE@am__objects_3 = librecutils_la-canonicalize-lgpl.lo @GL_COND_OBJ_CHDIR_LONG_TRUE@am__objects_4 = \ @GL_COND_OBJ_CHDIR_LONG_TRUE@ librecutils_la-chdir-long.lo @GL_COND_OBJ_CLOSE_TRUE@am__objects_5 = librecutils_la-close.lo @GL_COND_OBJ_CLOSEDIR_TRUE@am__objects_6 = librecutils_la-closedir.lo @GL_COND_OBJ_COPY_FILE_RANGE_TRUE@am__objects_7 = librecutils_la-copy-file-range.lo @GL_COND_OBJ_DIRFD_TRUE@am__objects_8 = librecutils_la-dirfd.lo @GL_COND_OBJ_DUP_TRUE@am__objects_9 = librecutils_la-dup.lo @GL_COND_OBJ_DUP2_TRUE@am__objects_10 = librecutils_la-dup2.lo am__dirstamp = $(am__leading_dot)dirstamp @GL_COND_OBJ_ERROR_TRUE@am__objects_11 = librecutils_la-error.lo @GL_COND_OBJ_EUIDACCESS_TRUE@am__objects_12 = \ @GL_COND_OBJ_EUIDACCESS_TRUE@ librecutils_la-euidaccess.lo @GL_COND_OBJ_EXPLICIT_BZERO_TRUE@am__objects_13 = librecutils_la-explicit_bzero.lo @GL_COND_OBJ_FCHDIR_TRUE@am__objects_14 = librecutils_la-fchdir.lo @GL_COND_OBJ_FCNTL_TRUE@am__objects_15 = librecutils_la-fcntl.lo @GL_COND_OBJ_FDOPENDIR_TRUE@am__objects_16 = \ @GL_COND_OBJ_FDOPENDIR_TRUE@ librecutils_la-fdopendir.lo @GL_COND_OBJ_FLOAT_TRUE@am__objects_17 = librecutils_la-float.lo @GL_COND_OBJ_ITOLD_TRUE@am__objects_18 = librecutils_la-itold.lo @GL_COND_OBJ_FLOCK_TRUE@am__objects_19 = librecutils_la-flock.lo @GL_COND_OBJ_FLOOR_TRUE@am__objects_20 = librecutils_la-floor.lo @GL_COND_OBJ_FPENDING_TRUE@am__objects_21 = \ @GL_COND_OBJ_FPENDING_TRUE@ librecutils_la-fpending.lo @GL_COND_OBJ_FREE_TRUE@am__objects_22 = librecutils_la-free.lo @GL_COND_OBJ_FSEEK_TRUE@am__objects_23 = librecutils_la-fseek.lo @GL_COND_OBJ_FSEEKO_TRUE@am__objects_24 = librecutils_la-fseeko.lo @GL_COND_OBJ_FSETERR_TRUE@am__objects_25 = librecutils_la-fseterr.lo @GL_COND_OBJ_FSTAT_TRUE@am__objects_26 = librecutils_la-fstat.lo @GL_COND_OBJ_FSTATAT_TRUE@am__objects_27 = librecutils_la-fstatat.lo @GL_COND_OBJ_FTELL_TRUE@am__objects_28 = librecutils_la-ftell.lo @GL_COND_OBJ_FTELLO_TRUE@am__objects_29 = librecutils_la-ftello.lo @GL_COND_OBJ_FWRITING_TRUE@am__objects_30 = \ @GL_COND_OBJ_FWRITING_TRUE@ librecutils_la-fwriting.lo @GL_COND_OBJ_GETCWD_TRUE@am__objects_31 = librecutils_la-getcwd.lo @GL_COND_OBJ_GETCWD_LGPL_TRUE@am__objects_32 = \ @GL_COND_OBJ_GETCWD_LGPL_TRUE@ librecutils_la-getcwd-lgpl.lo @GL_COND_OBJ_GETDELIM_TRUE@am__objects_33 = \ @GL_COND_OBJ_GETDELIM_TRUE@ librecutils_la-getdelim.lo @GL_COND_OBJ_GETDTABLESIZE_TRUE@am__objects_34 = librecutils_la-getdtablesize.lo @GL_COND_OBJ_GETGROUPS_TRUE@am__objects_35 = \ @GL_COND_OBJ_GETGROUPS_TRUE@ librecutils_la-getgroups.lo @GL_COND_OBJ_GETLINE_TRUE@am__objects_36 = librecutils_la-getline.lo @GL_COND_OBJ_GETOPT_TRUE@am__objects_37 = librecutils_la-getopt.lo \ @GL_COND_OBJ_GETOPT_TRUE@ librecutils_la-getopt1.lo @GL_COND_OBJ_GETRANDOM_TRUE@am__objects_38 = \ @GL_COND_OBJ_GETRANDOM_TRUE@ librecutils_la-getrandom.lo @GL_COND_OBJ_GETTIMEOFDAY_TRUE@am__objects_39 = \ @GL_COND_OBJ_GETTIMEOFDAY_TRUE@ librecutils_la-gettimeofday.lo @GL_COND_OBJ_GROUP_MEMBER_TRUE@am__objects_40 = \ @GL_COND_OBJ_GROUP_MEMBER_TRUE@ librecutils_la-group-member.lo @GL_COND_OBJ_LOCALECONV_TRUE@am__objects_41 = \ @GL_COND_OBJ_LOCALECONV_TRUE@ librecutils_la-localeconv.lo @GL_COND_OBJ_LSEEK_TRUE@am__objects_42 = librecutils_la-lseek.lo @GL_COND_OBJ_LSTAT_TRUE@am__objects_43 = librecutils_la-lstat.lo @GL_COND_OBJ_MBRLEN_TRUE@am__objects_44 = librecutils_la-mbrlen.lo @GL_COND_OBJ_MBRTOWC_TRUE@am__objects_45 = librecutils_la-mbrtowc.lo @GL_COND_OBJ_MBSINIT_TRUE@am__objects_46 = librecutils_la-mbsinit.lo @GL_COND_OBJ_MBTOWC_TRUE@am__objects_47 = librecutils_la-mbtowc.lo @GL_COND_OBJ_MEMCHR_TRUE@am__objects_48 = librecutils_la-memchr.lo @GL_COND_OBJ_MEMPCPY_TRUE@am__objects_49 = librecutils_la-mempcpy.lo @GL_COND_OBJ_MEMRCHR_TRUE@am__objects_50 = librecutils_la-memrchr.lo @GL_COND_OBJ_MKDIR_TRUE@am__objects_51 = librecutils_la-mkdir.lo @GL_COND_OBJ_MKOSTEMP_TRUE@am__objects_52 = \ @GL_COND_OBJ_MKOSTEMP_TRUE@ librecutils_la-mkostemp.lo @GL_COND_OBJ_MKSTEMP_TRUE@am__objects_53 = librecutils_la-mkstemp.lo @GL_COND_OBJ_MSVC_INVAL_TRUE@am__objects_54 = \ @GL_COND_OBJ_MSVC_INVAL_TRUE@ librecutils_la-msvc-inval.lo @GL_COND_OBJ_MSVC_NOTHROW_TRUE@am__objects_55 = \ @GL_COND_OBJ_MSVC_NOTHROW_TRUE@ librecutils_la-msvc-nothrow.lo @GL_COND_OBJ_NL_LANGINFO_TRUE@am__objects_56 = \ @GL_COND_OBJ_NL_LANGINFO_TRUE@ librecutils_la-nl_langinfo.lo @GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE@am__objects_57 = librecutils_la-nl_langinfo-lock.lo @GL_COND_OBJ_OBSTACK_TRUE@am__objects_58 = librecutils_la-obstack.lo @GL_COND_OBJ_OPEN_TRUE@am__objects_59 = librecutils_la-open.lo @GL_COND_OBJ_OPENAT_TRUE@am__objects_60 = librecutils_la-openat.lo @GL_COND_OBJ_OPENDIR_TRUE@am__objects_61 = librecutils_la-opendir.lo @GL_COND_OBJ_PIPE_TRUE@am__objects_62 = librecutils_la-pipe.lo @GL_COND_OBJ_SPAWN_TRUE@am__objects_63 = librecutils_la-spawn.lo @GL_COND_OBJ_SPAWNI_TRUE@am__objects_64 = librecutils_la-spawni.lo @GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR_TRUE@am__objects_65 = librecutils_la-spawn_faction_addchdir.lo @GL_COND_OBJ_SPAWN_FACTION_ADDOPEN_TRUE@am__objects_66 = librecutils_la-spawn_faction_addopen.lo @GL_COND_OBJ_SPAWN_FACTION_DESTROY_TRUE@am__objects_67 = librecutils_la-spawn_faction_destroy.lo @GL_COND_OBJ_SPAWN_FACTION_INIT_TRUE@am__objects_68 = librecutils_la-spawn_faction_init.lo @GL_COND_OBJ_SPAWNATTR_DESTROY_TRUE@am__objects_69 = librecutils_la-spawnattr_destroy.lo @GL_COND_OBJ_SPAWNATTR_INIT_TRUE@am__objects_70 = librecutils_la-spawnattr_init.lo @GL_COND_OBJ_SPAWNATTR_SETFLAGS_TRUE@am__objects_71 = librecutils_la-spawnattr_setflags.lo @GL_COND_OBJ_SPAWNATTR_SETSIGMASK_TRUE@am__objects_72 = librecutils_la-spawnattr_setsigmask.lo @GL_COND_OBJ_SPAWNP_TRUE@am__objects_73 = librecutils_la-spawnp.lo @GL_COND_OBJ_RAISE_TRUE@am__objects_74 = librecutils_la-raise.lo @GL_COND_OBJ_RANDOM_R_TRUE@am__objects_75 = \ @GL_COND_OBJ_RANDOM_R_TRUE@ librecutils_la-random_r.lo @GL_COND_OBJ_RAWMEMCHR_TRUE@am__objects_76 = \ @GL_COND_OBJ_RAWMEMCHR_TRUE@ librecutils_la-rawmemchr.lo @GL_COND_OBJ_READ_TRUE@am__objects_77 = librecutils_la-read.lo @GL_COND_OBJ_READDIR_TRUE@am__objects_78 = librecutils_la-readdir.lo @GL_COND_OBJ_READLINE_TRUE@am__objects_79 = \ @GL_COND_OBJ_READLINE_TRUE@ librecutils_la-readline.lo @GL_COND_OBJ_READLINK_TRUE@am__objects_80 = \ @GL_COND_OBJ_READLINK_TRUE@ librecutils_la-readlink.lo @GL_COND_OBJ_REALLOCARRAY_TRUE@am__objects_81 = \ @GL_COND_OBJ_REALLOCARRAY_TRUE@ librecutils_la-reallocarray.lo @GL_COND_OBJ_REGEX_TRUE@am__objects_82 = librecutils_la-regex.lo @GL_COND_OBJ_REMOVE_TRUE@am__objects_83 = librecutils_la-remove.lo @GL_COND_OBJ_RENAME_TRUE@am__objects_84 = librecutils_la-rename.lo @GL_COND_OBJ_REWINDDIR_TRUE@am__objects_85 = \ @GL_COND_OBJ_REWINDDIR_TRUE@ librecutils_la-rewinddir.lo @GL_COND_OBJ_RMDIR_TRUE@am__objects_86 = librecutils_la-rmdir.lo @GL_COND_OBJ_SECURE_GETENV_TRUE@am__objects_87 = librecutils_la-secure_getenv.lo @GL_COND_OBJ_GETFILECON_TRUE@am__objects_88 = \ @GL_COND_OBJ_GETFILECON_TRUE@ librecutils_la-getfilecon.lo @GL_COND_OBJ_SETENV_TRUE@am__objects_89 = librecutils_la-setenv.lo @GL_COND_OBJ_SETLOCALE_LOCK_TRUE@am__objects_90 = librecutils_la-setlocale-lock.lo @GL_COND_OBJ_SIGACTION_TRUE@am__objects_91 = \ @GL_COND_OBJ_SIGACTION_TRUE@ librecutils_la-sigaction.lo @GL_COND_OBJ_SIGNBIT3_TRUE@am__objects_92 = \ @GL_COND_OBJ_SIGNBIT3_TRUE@ librecutils_la-signbitf.lo \ @GL_COND_OBJ_SIGNBIT3_TRUE@ librecutils_la-signbitd.lo \ @GL_COND_OBJ_SIGNBIT3_TRUE@ librecutils_la-signbitl.lo @GL_COND_OBJ_SIGPROCMASK_TRUE@am__objects_93 = \ @GL_COND_OBJ_SIGPROCMASK_TRUE@ librecutils_la-sigprocmask.lo @GL_COND_OBJ_STAT_TRUE@am__objects_94 = librecutils_la-stat.lo @GL_COND_OBJ_STDIO_READ_TRUE@am__objects_95 = \ @GL_COND_OBJ_STDIO_READ_TRUE@ librecutils_la-stdio-read.lo @GL_COND_OBJ_STDIO_WRITE_TRUE@am__objects_96 = \ @GL_COND_OBJ_STDIO_WRITE_TRUE@ librecutils_la-stdio-write.lo @GL_COND_OBJ_STPCPY_TRUE@am__objects_97 = librecutils_la-stpcpy.lo @GL_COND_OBJ_STRCASECMP_TRUE@am__objects_98 = \ @GL_COND_OBJ_STRCASECMP_TRUE@ librecutils_la-strcasecmp.lo @GL_COND_OBJ_STRNCASECMP_TRUE@am__objects_99 = \ @GL_COND_OBJ_STRNCASECMP_TRUE@ librecutils_la-strncasecmp.lo @GL_COND_OBJ_STRCHRNUL_TRUE@am__objects_100 = \ @GL_COND_OBJ_STRCHRNUL_TRUE@ librecutils_la-strchrnul.lo @GL_COND_OBJ_STRDUP_TRUE@am__objects_101 = librecutils_la-strdup.lo @GL_COND_OBJ_STRERROR_TRUE@am__objects_102 = \ @GL_COND_OBJ_STRERROR_TRUE@ librecutils_la-strerror.lo @GL_COND_OBJ_STRERROR_OVERRIDE_TRUE@am__objects_103 = librecutils_la-strerror-override.lo @GL_COND_OBJ_STRSEP_TRUE@am__objects_104 = librecutils_la-strsep.lo @GL_COND_OBJ_STRVERSCMP_TRUE@am__objects_105 = \ @GL_COND_OBJ_STRVERSCMP_TRUE@ librecutils_la-strverscmp.lo @GL_COND_OBJ_TIME_R_TRUE@am__objects_106 = librecutils_la-time_r.lo @GL_COND_OBJ_TIME_RZ_TRUE@am__objects_107 = librecutils_la-time_rz.lo @GL_COND_OBJ_TIMEGM_TRUE@am__objects_108 = librecutils_la-timegm.lo @GL_COND_OBJ_TZSET_TRUE@am__objects_109 = librecutils_la-tzset.lo @GL_COND_OBJ_UNLINK_TRUE@am__objects_110 = librecutils_la-unlink.lo @GL_COND_OBJ_UNSETENV_TRUE@am__objects_111 = \ @GL_COND_OBJ_UNSETENV_TRUE@ librecutils_la-unsetenv.lo @GL_COND_OBJ_UTIME_TRUE@am__objects_112 = librecutils_la-utime.lo @GL_COND_OBJ_WAITPID_TRUE@am__objects_113 = librecutils_la-waitpid.lo @GL_COND_OBJ_WCRTOMB_TRUE@am__objects_114 = librecutils_la-wcrtomb.lo @GL_COND_OBJ_WCTOB_TRUE@am__objects_115 = librecutils_la-wctob.lo @GL_COND_OBJ_WCTOMB_TRUE@am__objects_116 = librecutils_la-wctomb.lo @GL_COND_OBJ_WINDOWS_MUTEX_TRUE@am__objects_117 = librecutils_la-windows-mutex.lo @GL_COND_OBJ_WINDOWS_ONCE_TRUE@am__objects_118 = \ @GL_COND_OBJ_WINDOWS_ONCE_TRUE@ librecutils_la-windows-once.lo @GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE@am__objects_119 = librecutils_la-windows-recmutex.lo @GL_COND_OBJ_WINDOWS_RWLOCK_TRUE@am__objects_120 = librecutils_la-windows-rwlock.lo @GL_COND_OBJ_WINDOWS_SPAWN_TRUE@am__objects_121 = librecutils_la-windows-spawn.lo @GL_COND_OBJ_WRITE_TRUE@am__objects_122 = librecutils_la-write.lo am_librecutils_la_OBJECTS = $(am__objects_1) \ librecutils_la-copy-acl.lo librecutils_la-set-acl.lo \ librecutils_la-acl-errno-valid.lo \ librecutils_la-acl-internal.lo \ librecutils_la-get-permissions.lo \ librecutils_la-set-permissions.lo \ librecutils_la-gl_array_list.lo librecutils_la-openat-proc.lo \ librecutils_la-base64.lo librecutils_la-basename-lgpl.lo \ librecutils_la-binary-io.lo librecutils_la-bitrotate.lo \ $(am__objects_2) librecutils_la-c-ctype.lo \ librecutils_la-c-strcasecmp.lo librecutils_la-c-strncasecmp.lo \ librecutils_la-canonicalize.lo $(am__objects_3) \ $(am__objects_4) librecutils_la-cloexec.lo $(am__objects_5) \ librecutils_la-close-stream.lo $(am__objects_6) \ librecutils_la-closeout.lo librecutils_la-concat-filename.lo \ librecutils_la-copy-file.lo $(am__objects_7) \ librecutils_la-crc.lo $(am__objects_8) \ librecutils_la-dirname-lgpl.lo librecutils_la-stripslash.lo \ $(am__objects_9) $(am__objects_10) \ malloc/librecutils_la-dynarray_at_failure.lo \ malloc/librecutils_la-dynarray_emplace_enlarge.lo \ malloc/librecutils_la-dynarray_finalize.lo \ malloc/librecutils_la-dynarray_resize.lo \ malloc/librecutils_la-dynarray_resize_clear.lo \ $(am__objects_11) $(am__objects_12) librecutils_la-execute.lo \ librecutils_la-exitfail.lo $(am__objects_13) \ librecutils_la-fatal-signal.lo $(am__objects_14) \ $(am__objects_15) librecutils_la-fd-hook.lo \ librecutils_la-fd-safer-flag.lo \ librecutils_la-dup-safer-flag.lo $(am__objects_16) \ librecutils_la-file-set.lo librecutils_la-filenamecat-lgpl.lo \ librecutils_la-findprog-in.lo $(am__objects_17) \ $(am__objects_18) $(am__objects_19) $(am__objects_20) \ $(am__objects_21) $(am__objects_22) $(am__objects_23) \ $(am__objects_24) $(am__objects_25) $(am__objects_26) \ $(am__objects_27) $(am__objects_28) $(am__objects_29) \ librecutils_la-full-write.lo $(am__objects_30) \ $(am__objects_31) $(am__objects_32) $(am__objects_33) \ $(am__objects_34) $(am__objects_35) $(am__objects_36) \ $(am__objects_37) librecutils_la-getprogname.lo \ $(am__objects_38) librecutils_la-gettime.lo $(am__objects_39) \ $(am__objects_40) librecutils_la-hard-locale.lo \ librecutils_la-hash.lo librecutils_la-hash-pjw.lo \ librecutils_la-hash-triple-simple.lo librecutils_la-ialloc.lo \ librecutils_la-gl_list.lo librecutils_la-localcharset.lo \ $(am__objects_41) glthread/librecutils_la-lock.lo \ $(am__objects_42) $(am__objects_43) librecutils_la-malloca.lo \ librecutils_la-math.lo $(am__objects_44) $(am__objects_45) \ $(am__objects_46) $(am__objects_47) $(am__objects_48) \ $(am__objects_49) $(am__objects_50) $(am__objects_51) \ $(am__objects_52) $(am__objects_53) $(am__objects_54) \ $(am__objects_55) $(am__objects_56) $(am__objects_57) \ librecutils_la-nstrftime.lo $(am__objects_58) \ $(am__objects_59) $(am__objects_60) \ librecutils_la-openat-die.lo $(am__objects_61) \ librecutils_la-parse-datetime.lo $(am__objects_62) \ $(am__objects_63) $(am__objects_64) $(am__objects_65) \ $(am__objects_66) $(am__objects_67) $(am__objects_68) \ $(am__objects_69) $(am__objects_70) $(am__objects_71) \ $(am__objects_72) $(am__objects_73) \ librecutils_la-printf-frexp.lo librecutils_la-printf-frexpl.lo \ librecutils_la-progname.lo librecutils_la-qcopy-acl.lo \ librecutils_la-qset-acl.lo librecutils_la-quotearg.lo \ $(am__objects_74) $(am__objects_75) $(am__objects_76) \ $(am__objects_77) librecutils_la-read-file.lo \ $(am__objects_78) $(am__objects_79) $(am__objects_80) \ $(am__objects_81) $(am__objects_82) $(am__objects_83) \ $(am__objects_84) $(am__objects_85) $(am__objects_86) \ librecutils_la-safe-read.lo librecutils_la-safe-write.lo \ librecutils_la-save-cwd.lo \ malloc/librecutils_la-scratch_buffer_dupfree.lo \ malloc/librecutils_la-scratch_buffer_grow.lo \ malloc/librecutils_la-scratch_buffer_grow_preserve.lo \ malloc/librecutils_la-scratch_buffer_set_array_size.lo \ $(am__objects_87) $(am__objects_88) \ librecutils_la-se-context.lo librecutils_la-se-label.lo \ librecutils_la-se-selinux.lo $(am__objects_89) \ librecutils_la-setlocale_null.lo $(am__objects_90) \ $(am__objects_91) librecutils_la-sig-handler.lo \ $(am__objects_92) $(am__objects_93) $(am__objects_94) \ librecutils_la-stat-time.lo $(am__objects_95) \ $(am__objects_96) $(am__objects_97) $(am__objects_98) \ $(am__objects_99) $(am__objects_100) $(am__objects_101) \ $(am__objects_102) $(am__objects_103) $(am__objects_104) \ $(am__objects_105) librecutils_la-tempname.lo \ glthread/librecutils_la-threadlib.lo $(am__objects_106) \ $(am__objects_107) $(am__objects_108) \ librecutils_la-timespec.lo librecutils_la-tmpdir.lo \ $(am__objects_109) librecutils_la-unistd.lo \ librecutils_la-dup-safer.lo librecutils_la-fd-safer.lo \ librecutils_la-pipe-safer.lo $(am__objects_110) \ $(am__objects_111) $(am__objects_112) \ librecutils_la-utimens.lo librecutils_la-version-etc.lo \ librecutils_la-version-etc-fsf.lo \ librecutils_la-wait-process.lo $(am__objects_113) \ $(am__objects_114) $(am__objects_115) $(am__objects_116) \ librecutils_la-wctype-h.lo $(am__objects_117) \ $(am__objects_118) $(am__objects_119) $(am__objects_120) \ $(am__objects_121) $(am__objects_122) \ librecutils_la-xmalloc.lo librecutils_la-xalloc-die.lo \ librecutils_la-xsize.lo librecutils_la_OBJECTS = $(am_librecutils_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = librecutils_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC \ $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=link $(CCLD) \ $(librecutils_la_CFLAGS) $(CFLAGS) $(librecutils_la_LDFLAGS) \ $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/alloca.Plo \ ./$(DEPDIR)/librecutils_la-access.Plo \ ./$(DEPDIR)/librecutils_la-acl-errno-valid.Plo \ ./$(DEPDIR)/librecutils_la-acl-internal.Plo \ ./$(DEPDIR)/librecutils_la-acl_entries.Plo \ ./$(DEPDIR)/librecutils_la-alloca.Plo \ ./$(DEPDIR)/librecutils_la-asnprintf.Plo \ ./$(DEPDIR)/librecutils_la-asprintf.Plo \ ./$(DEPDIR)/librecutils_la-at-func.Plo \ ./$(DEPDIR)/librecutils_la-base64.Plo \ ./$(DEPDIR)/librecutils_la-basename-lgpl.Plo \ ./$(DEPDIR)/librecutils_la-binary-io.Plo \ ./$(DEPDIR)/librecutils_la-bitrotate.Plo \ ./$(DEPDIR)/librecutils_la-btowc.Plo \ ./$(DEPDIR)/librecutils_la-c-ctype.Plo \ ./$(DEPDIR)/librecutils_la-c-strcasecmp.Plo \ ./$(DEPDIR)/librecutils_la-c-strncasecmp.Plo \ ./$(DEPDIR)/librecutils_la-calloc.Plo \ ./$(DEPDIR)/librecutils_la-canonicalize-lgpl.Plo \ ./$(DEPDIR)/librecutils_la-canonicalize.Plo \ ./$(DEPDIR)/librecutils_la-chdir-long.Plo \ ./$(DEPDIR)/librecutils_la-cloexec.Plo \ ./$(DEPDIR)/librecutils_la-close-stream.Plo \ ./$(DEPDIR)/librecutils_la-close.Plo \ ./$(DEPDIR)/librecutils_la-closedir.Plo \ ./$(DEPDIR)/librecutils_la-closeout.Plo \ ./$(DEPDIR)/librecutils_la-concat-filename.Plo \ ./$(DEPDIR)/librecutils_la-copy-acl.Plo \ ./$(DEPDIR)/librecutils_la-copy-file-range.Plo \ ./$(DEPDIR)/librecutils_la-copy-file.Plo \ ./$(DEPDIR)/librecutils_la-crc.Plo \ ./$(DEPDIR)/librecutils_la-dirfd.Plo \ ./$(DEPDIR)/librecutils_la-dirname-lgpl.Plo \ ./$(DEPDIR)/librecutils_la-dup-safer-flag.Plo \ ./$(DEPDIR)/librecutils_la-dup-safer.Plo \ ./$(DEPDIR)/librecutils_la-dup.Plo \ ./$(DEPDIR)/librecutils_la-dup2.Plo \ ./$(DEPDIR)/librecutils_la-error.Plo \ ./$(DEPDIR)/librecutils_la-euidaccess.Plo \ ./$(DEPDIR)/librecutils_la-execute.Plo \ ./$(DEPDIR)/librecutils_la-exitfail.Plo \ ./$(DEPDIR)/librecutils_la-explicit_bzero.Plo \ ./$(DEPDIR)/librecutils_la-fatal-signal.Plo \ ./$(DEPDIR)/librecutils_la-fchdir.Plo \ ./$(DEPDIR)/librecutils_la-fcntl.Plo \ ./$(DEPDIR)/librecutils_la-fd-hook.Plo \ ./$(DEPDIR)/librecutils_la-fd-safer-flag.Plo \ ./$(DEPDIR)/librecutils_la-fd-safer.Plo \ ./$(DEPDIR)/librecutils_la-fdopendir.Plo \ ./$(DEPDIR)/librecutils_la-file-set.Plo \ ./$(DEPDIR)/librecutils_la-filenamecat-lgpl.Plo \ ./$(DEPDIR)/librecutils_la-findprog-in.Plo \ ./$(DEPDIR)/librecutils_la-float.Plo \ ./$(DEPDIR)/librecutils_la-flock.Plo \ ./$(DEPDIR)/librecutils_la-floor.Plo \ ./$(DEPDIR)/librecutils_la-fopen.Plo \ ./$(DEPDIR)/librecutils_la-fpending.Plo \ ./$(DEPDIR)/librecutils_la-fprintf.Plo \ ./$(DEPDIR)/librecutils_la-free.Plo \ ./$(DEPDIR)/librecutils_la-frexp.Plo \ ./$(DEPDIR)/librecutils_la-frexpl.Plo \ ./$(DEPDIR)/librecutils_la-fseek.Plo \ ./$(DEPDIR)/librecutils_la-fseeko.Plo \ ./$(DEPDIR)/librecutils_la-fseterr.Plo \ ./$(DEPDIR)/librecutils_la-fstat.Plo \ ./$(DEPDIR)/librecutils_la-fstatat.Plo \ ./$(DEPDIR)/librecutils_la-ftell.Plo \ ./$(DEPDIR)/librecutils_la-ftello.Plo \ ./$(DEPDIR)/librecutils_la-full-write.Plo \ ./$(DEPDIR)/librecutils_la-fwriting.Plo \ ./$(DEPDIR)/librecutils_la-get-permissions.Plo \ ./$(DEPDIR)/librecutils_la-getcwd-lgpl.Plo \ ./$(DEPDIR)/librecutils_la-getcwd.Plo \ ./$(DEPDIR)/librecutils_la-getdelim.Plo \ ./$(DEPDIR)/librecutils_la-getdtablesize.Plo \ ./$(DEPDIR)/librecutils_la-getfilecon.Plo \ ./$(DEPDIR)/librecutils_la-getgroups.Plo \ ./$(DEPDIR)/librecutils_la-getline.Plo \ ./$(DEPDIR)/librecutils_la-getopt.Plo \ ./$(DEPDIR)/librecutils_la-getopt1.Plo \ ./$(DEPDIR)/librecutils_la-getpass.Plo \ ./$(DEPDIR)/librecutils_la-getprogname.Plo \ ./$(DEPDIR)/librecutils_la-getrandom.Plo \ ./$(DEPDIR)/librecutils_la-gettime.Plo \ ./$(DEPDIR)/librecutils_la-gettimeofday.Plo \ ./$(DEPDIR)/librecutils_la-gl_array_list.Plo \ ./$(DEPDIR)/librecutils_la-gl_list.Plo \ ./$(DEPDIR)/librecutils_la-group-member.Plo \ ./$(DEPDIR)/librecutils_la-hard-locale.Plo \ ./$(DEPDIR)/librecutils_la-hash-pjw.Plo \ ./$(DEPDIR)/librecutils_la-hash-triple-simple.Plo \ ./$(DEPDIR)/librecutils_la-hash.Plo \ ./$(DEPDIR)/librecutils_la-ialloc.Plo \ ./$(DEPDIR)/librecutils_la-isnan.Plo \ ./$(DEPDIR)/librecutils_la-isnand.Plo \ ./$(DEPDIR)/librecutils_la-isnanf.Plo \ ./$(DEPDIR)/librecutils_la-isnanl.Plo \ ./$(DEPDIR)/librecutils_la-itold.Plo \ ./$(DEPDIR)/librecutils_la-lc-charset-dispatch.Plo \ ./$(DEPDIR)/librecutils_la-localcharset.Plo \ ./$(DEPDIR)/librecutils_la-localeconv.Plo \ ./$(DEPDIR)/librecutils_la-lseek.Plo \ ./$(DEPDIR)/librecutils_la-lstat.Plo \ ./$(DEPDIR)/librecutils_la-malloc.Plo \ ./$(DEPDIR)/librecutils_la-malloca.Plo \ ./$(DEPDIR)/librecutils_la-math.Plo \ ./$(DEPDIR)/librecutils_la-mbrlen.Plo \ ./$(DEPDIR)/librecutils_la-mbrtowc.Plo \ ./$(DEPDIR)/librecutils_la-mbsinit.Plo \ ./$(DEPDIR)/librecutils_la-mbtowc-lock.Plo \ ./$(DEPDIR)/librecutils_la-mbtowc.Plo \ ./$(DEPDIR)/librecutils_la-memchr.Plo \ ./$(DEPDIR)/librecutils_la-mempcpy.Plo \ ./$(DEPDIR)/librecutils_la-memrchr.Plo \ ./$(DEPDIR)/librecutils_la-mkdir.Plo \ ./$(DEPDIR)/librecutils_la-mkostemp.Plo \ ./$(DEPDIR)/librecutils_la-mkstemp.Plo \ ./$(DEPDIR)/librecutils_la-mktime.Plo \ ./$(DEPDIR)/librecutils_la-msvc-inval.Plo \ ./$(DEPDIR)/librecutils_la-msvc-nothrow.Plo \ ./$(DEPDIR)/librecutils_la-nl_langinfo-lock.Plo \ ./$(DEPDIR)/librecutils_la-nl_langinfo.Plo \ ./$(DEPDIR)/librecutils_la-nstrftime.Plo \ ./$(DEPDIR)/librecutils_la-obstack.Plo \ ./$(DEPDIR)/librecutils_la-open.Plo \ ./$(DEPDIR)/librecutils_la-openat-die.Plo \ ./$(DEPDIR)/librecutils_la-openat-proc.Plo \ ./$(DEPDIR)/librecutils_la-openat.Plo \ ./$(DEPDIR)/librecutils_la-opendir.Plo \ ./$(DEPDIR)/librecutils_la-parse-datetime.Plo \ ./$(DEPDIR)/librecutils_la-pipe-safer.Plo \ ./$(DEPDIR)/librecutils_la-pipe.Plo \ ./$(DEPDIR)/librecutils_la-printf-args.Plo \ ./$(DEPDIR)/librecutils_la-printf-frexp.Plo \ ./$(DEPDIR)/librecutils_la-printf-frexpl.Plo \ ./$(DEPDIR)/librecutils_la-printf-parse.Plo \ ./$(DEPDIR)/librecutils_la-printf.Plo \ ./$(DEPDIR)/librecutils_la-progname.Plo \ ./$(DEPDIR)/librecutils_la-qcopy-acl.Plo \ ./$(DEPDIR)/librecutils_la-qset-acl.Plo \ ./$(DEPDIR)/librecutils_la-quotearg.Plo \ ./$(DEPDIR)/librecutils_la-raise.Plo \ ./$(DEPDIR)/librecutils_la-random_r.Plo \ ./$(DEPDIR)/librecutils_la-rawmemchr.Plo \ ./$(DEPDIR)/librecutils_la-read-file.Plo \ ./$(DEPDIR)/librecutils_la-read.Plo \ ./$(DEPDIR)/librecutils_la-readdir.Plo \ ./$(DEPDIR)/librecutils_la-readline.Plo \ ./$(DEPDIR)/librecutils_la-readlink.Plo \ ./$(DEPDIR)/librecutils_la-realloc.Plo \ ./$(DEPDIR)/librecutils_la-reallocarray.Plo \ ./$(DEPDIR)/librecutils_la-regcomp.Plo \ ./$(DEPDIR)/librecutils_la-regex.Plo \ ./$(DEPDIR)/librecutils_la-regex_internal.Plo \ ./$(DEPDIR)/librecutils_la-regexec.Plo \ ./$(DEPDIR)/librecutils_la-remove.Plo \ ./$(DEPDIR)/librecutils_la-rename.Plo \ ./$(DEPDIR)/librecutils_la-rewinddir.Plo \ ./$(DEPDIR)/librecutils_la-rmdir.Plo \ ./$(DEPDIR)/librecutils_la-safe-read.Plo \ ./$(DEPDIR)/librecutils_la-safe-write.Plo \ ./$(DEPDIR)/librecutils_la-save-cwd.Plo \ ./$(DEPDIR)/librecutils_la-se-context.Plo \ ./$(DEPDIR)/librecutils_la-se-label.Plo \ ./$(DEPDIR)/librecutils_la-se-selinux.Plo \ ./$(DEPDIR)/librecutils_la-secure_getenv.Plo \ ./$(DEPDIR)/librecutils_la-set-acl.Plo \ ./$(DEPDIR)/librecutils_la-set-permissions.Plo \ ./$(DEPDIR)/librecutils_la-setenv.Plo \ ./$(DEPDIR)/librecutils_la-setlocale-lock.Plo \ ./$(DEPDIR)/librecutils_la-setlocale_null.Plo \ ./$(DEPDIR)/librecutils_la-sig-handler.Plo \ ./$(DEPDIR)/librecutils_la-sigaction.Plo \ ./$(DEPDIR)/librecutils_la-signbitd.Plo \ ./$(DEPDIR)/librecutils_la-signbitf.Plo \ ./$(DEPDIR)/librecutils_la-signbitl.Plo \ ./$(DEPDIR)/librecutils_la-sigprocmask.Plo \ ./$(DEPDIR)/librecutils_la-spawn.Plo \ ./$(DEPDIR)/librecutils_la-spawn_faction_addchdir.Plo \ ./$(DEPDIR)/librecutils_la-spawn_faction_addopen.Plo \ ./$(DEPDIR)/librecutils_la-spawn_faction_destroy.Plo \ ./$(DEPDIR)/librecutils_la-spawn_faction_init.Plo \ ./$(DEPDIR)/librecutils_la-spawnattr_destroy.Plo \ ./$(DEPDIR)/librecutils_la-spawnattr_init.Plo \ ./$(DEPDIR)/librecutils_la-spawnattr_setflags.Plo \ ./$(DEPDIR)/librecutils_la-spawnattr_setsigmask.Plo \ ./$(DEPDIR)/librecutils_la-spawni.Plo \ ./$(DEPDIR)/librecutils_la-spawnp.Plo \ ./$(DEPDIR)/librecutils_la-stat-time.Plo \ ./$(DEPDIR)/librecutils_la-stat-w32.Plo \ ./$(DEPDIR)/librecutils_la-stat.Plo \ ./$(DEPDIR)/librecutils_la-stdio-read.Plo \ ./$(DEPDIR)/librecutils_la-stdio-write.Plo \ ./$(DEPDIR)/librecutils_la-stpcpy.Plo \ ./$(DEPDIR)/librecutils_la-strcasecmp.Plo \ ./$(DEPDIR)/librecutils_la-strcasestr.Plo \ ./$(DEPDIR)/librecutils_la-strchrnul.Plo \ ./$(DEPDIR)/librecutils_la-strdup.Plo \ ./$(DEPDIR)/librecutils_la-strerror-override.Plo \ ./$(DEPDIR)/librecutils_la-strerror.Plo \ ./$(DEPDIR)/librecutils_la-stripslash.Plo \ ./$(DEPDIR)/librecutils_la-strncasecmp.Plo \ ./$(DEPDIR)/librecutils_la-strsep.Plo \ ./$(DEPDIR)/librecutils_la-strverscmp.Plo \ ./$(DEPDIR)/librecutils_la-tempname.Plo \ ./$(DEPDIR)/librecutils_la-time_r.Plo \ ./$(DEPDIR)/librecutils_la-time_rz.Plo \ ./$(DEPDIR)/librecutils_la-timegm.Plo \ ./$(DEPDIR)/librecutils_la-timespec.Plo \ ./$(DEPDIR)/librecutils_la-tmpdir.Plo \ ./$(DEPDIR)/librecutils_la-tzset.Plo \ ./$(DEPDIR)/librecutils_la-unistd.Plo \ ./$(DEPDIR)/librecutils_la-unlink.Plo \ ./$(DEPDIR)/librecutils_la-unsetenv.Plo \ ./$(DEPDIR)/librecutils_la-utime.Plo \ ./$(DEPDIR)/librecutils_la-utimens.Plo \ ./$(DEPDIR)/librecutils_la-vasnprintf.Plo \ ./$(DEPDIR)/librecutils_la-vasprintf.Plo \ ./$(DEPDIR)/librecutils_la-version-etc-fsf.Plo \ ./$(DEPDIR)/librecutils_la-version-etc.Plo \ ./$(DEPDIR)/librecutils_la-vfprintf.Plo \ ./$(DEPDIR)/librecutils_la-wait-process.Plo \ ./$(DEPDIR)/librecutils_la-waitpid.Plo \ ./$(DEPDIR)/librecutils_la-wcrtomb.Plo \ ./$(DEPDIR)/librecutils_la-wctob.Plo \ ./$(DEPDIR)/librecutils_la-wctomb.Plo \ ./$(DEPDIR)/librecutils_la-wctype-h.Plo \ ./$(DEPDIR)/librecutils_la-windows-mutex.Plo \ ./$(DEPDIR)/librecutils_la-windows-once.Plo \ ./$(DEPDIR)/librecutils_la-windows-recmutex.Plo \ ./$(DEPDIR)/librecutils_la-windows-rwlock.Plo \ ./$(DEPDIR)/librecutils_la-windows-spawn.Plo \ ./$(DEPDIR)/librecutils_la-write.Plo \ ./$(DEPDIR)/librecutils_la-xalloc-die.Plo \ ./$(DEPDIR)/librecutils_la-xmalloc.Plo \ ./$(DEPDIR)/librecutils_la-xsize.Plo \ glthread/$(DEPDIR)/librecutils_la-lock.Plo \ glthread/$(DEPDIR)/librecutils_la-threadlib.Plo \ malloc/$(DEPDIR)/librecutils_la-dynarray-skeleton.Plo \ malloc/$(DEPDIR)/librecutils_la-dynarray_at_failure.Plo \ malloc/$(DEPDIR)/librecutils_la-dynarray_emplace_enlarge.Plo \ malloc/$(DEPDIR)/librecutils_la-dynarray_finalize.Plo \ malloc/$(DEPDIR)/librecutils_la-dynarray_resize.Plo \ malloc/$(DEPDIR)/librecutils_la-dynarray_resize_clear.Plo \ malloc/$(DEPDIR)/librecutils_la-scratch_buffer_dupfree.Plo \ malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow.Plo \ malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow_preserve.Plo \ malloc/$(DEPDIR)/librecutils_la-scratch_buffer_set_array_size.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) AM_V_YACC = $(am__v_YACC_@AM_V@) am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) am__v_YACC_0 = @echo " YACC " $@; am__v_YACC_1 = YLWRAP = $(top_srcdir)/build-aux/ylwrap SOURCES = $(librecutils_la_SOURCES) $(EXTRA_librecutils_la_SOURCES) DIST_SOURCES = $(am__librecutils_la_SOURCES_DIST) \ $(EXTRA_librecutils_la_SOURCES) RECURSIVE_TARGETS = all-recursive check-recursive cscopelist-recursive \ ctags-recursive dvi-recursive html-recursive info-recursive \ install-data-recursive install-dvi-recursive \ install-exec-recursive install-html-recursive \ install-info-recursive install-pdf-recursive \ install-ps-recursive install-recursive installcheck-recursive \ installdirs-recursive pdf-recursive ps-recursive \ tags-recursive uninstall-recursive am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(noinst_HEADERS) RECURSIVE_CLEAN_TARGETS = mostlyclean-recursive clean-recursive \ distclean-recursive maintainer-clean-recursive am__recursive_targets = \ $(RECURSIVE_TARGETS) \ $(RECURSIVE_CLEAN_TARGETS) \ $(am__extra_recursive_targets) AM_RECURSIVE_TARGETS = $(am__recursive_targets:-recursive=) TAGS CTAGS \ distdir distdir-am am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` DIST_SUBDIRS = $(SUBDIRS) am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap \ alloca.c parse-datetime.c DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) am__relativize = \ dir0=`pwd`; \ sed_first='s,^\([^/]*\)/.*$$,\1,'; \ sed_rest='s,^[^/]*/*,,'; \ sed_last='s,^.*/\([^/]*\)$$,\1,'; \ sed_butlast='s,/*[^/]*$$,,'; \ while test -n "$$dir1"; do \ first=`echo "$$dir1" | sed -e "$$sed_first"`; \ if test "$$first" != "."; then \ if test "$$first" = ".."; then \ dir2=`echo "$$dir0" | sed -e "$$sed_last"`/"$$dir2"; \ dir0=`echo "$$dir0" | sed -e "$$sed_butlast"`; \ else \ first2=`echo "$$dir2" | sed -e "$$sed_first"`; \ if test "$$first2" = "$$first"; then \ dir2=`echo "$$dir2" | sed -e "$$sed_rest"`; \ else \ dir2="../$$dir2"; \ fi; \ dir0="$$dir0"/"$$first"; \ fi; \ fi; \ dir1=`echo "$$dir1" | sed -e "$$sed_rest"`; \ done; \ reldir="$$dir2" ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_HEADERS = @BASH_HEADERS@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CURLLIBS = @CURLLIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ FLOOR_LIBM = @FLOOR_LIBM@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POSIX_SPAWN = @GL_GNULIB_POSIX_SPAWN@ GL_GNULIB_POSIX_SPAWNATTR_DESTROY = @GL_GNULIB_POSIX_SPAWNATTR_DESTROY@ GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ GL_GNULIB_POSIX_SPAWNATTR_INIT = @GL_GNULIB_POSIX_SPAWNATTR_INIT@ GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ GL_GNULIB_POSIX_SPAWNP = @GL_GNULIB_POSIX_SPAWNP@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIME = @GL_GNULIB_UTIME@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FLOCK = @HAVE_FLOCK@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SPAWN_H = @HAVE_SPAWN_H@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIME = @HAVE_UTIME@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_UTIME_H = @HAVE_UTIME_H@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGCRYPT = @LIBGCRYPT@ LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIB_ACL = @LIB_ACL@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ LIB_EACCESS = @LIB_EACCESS@ LIB_GETRANDOM = @LIB_GETRANDOM@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELINUX = @LIB_SELINUX@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBGCRYPT = @LTLIBGCRYPT@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBREADLINE = @LTLIBREADLINE@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MDBLIBS = @MDBLIBS@ MDB_DATETIME = @MDB_DATETIME@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_UTIME_H = @NEXT_AS_FIRST_DIRECTIVE_UTIME_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_SPAWN_H = @NEXT_SPAWN_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_UTIME_H = @NEXT_UTIME_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PARSE_DATETIME_BISON = @PARSE_DATETIME_BISON@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIME = @REPLACE_UTIME@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ SELINUX_LABEL_H = @SELINUX_LABEL_H@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_ACL = @USE_ACL@ USE_NLS = @USE_NLS@ UUIDLIBS = @UUIDLIBS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ crypt_support = @crypt_support@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ have_uuid = @have_uuid@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ AUTOMAKE_OPTIONS = 1.14 gnits subdir-objects SUBDIRS = noinst_HEADERS = noinst_LIBRARIES = noinst_LTLIBRARIES = librecutils.la EXTRA_DIST = acl-internal.h acl.h acl_entries.c alignof.h alloca.c \ alloca.in.h $(top_srcdir)/build-aux/announce-gen assure.h \ attribute.h basename-lgpl.h c-strcaseeq.h calloc.c calloc.c \ canonicalize.h chdir-long.h cloexec.h close-stream.h \ dirent-private.h closeout.h concat-filename.h crc.h \ dirent.in.h dirname.h dynarray.h malloc/dynarray-skeleton.c \ malloc/dynarray.h eloop-threshold.h errno.in.h error.h \ exitfail.h fcntl.in.h fd-hook.h file-set.h filename.h \ filenamecat.h flexmember.h float.in.h fopen.c fopen.c \ fpending.h stdio-impl.h fprintf.c fpucw.h frexp.c frexp.c \ frexpl.c stdio-impl.h fseterr.h stdio-impl.h stat-w32.c \ stat-w32.h at-func.c stdio-impl.h fwriting.h stdio-impl.h \ $(top_srcdir)/build-aux/gendocs.sh getopt-cdefs.in.h \ getopt-core.h getopt-ext.h getopt-pfx-core.h getopt-pfx-ext.h \ getopt.in.h getopt_int.h getpass.c getpass.h getpass.c \ getpass.h $(top_srcdir)/GNUmakefile \ $(top_srcdir)/build-aux/gnupload hard-locale.h hash.h \ hash-triple.h $(top_srcdir)/build-aux/config.rpath ialloc.h \ ignore-value.h intprops.h inttypes.in.h float+.h isnan.c \ isnand-nolibm.h isnand.c float+.h isnan.c isnanf-nolibm.h \ isnanf.c float+.h isnan.c isnanl-nolibm.h isnanl.c \ langinfo.in.h cdefs.h libc-config.h limits.in.h localcharset.h \ locale.in.h $(top_srcdir)/maint.mk malloc.c malloc.c malloca.h \ math.in.h lc-charset-dispatch.c lc-charset-dispatch.h \ mbrtowc-impl-utf8.h mbrtowc-impl.h mbtowc-lock.c mbtowc-lock.h \ windows-initguard.h mbtowc-impl.h memchr.valgrind \ mktime-internal.h mktime.c mktime-internal.h mktime.c \ msvc-inval.h msvc-nothrow.h windows-initguard.h strftime.h \ obstack.h openat.h dirent-private.h parse-datetime.c \ parse-datetime-gen.h parse-datetime.h pathmax.h spawn_int.h \ spawn_int.h spawn_int.h spawn_int.h printf-frexp.h \ printf-frexp.c printf-frexpl.h printf.c quote.h quote.h \ quotearg.h rawmemchr.valgrind read-file.h dirent-private.h \ readline.h realloc.c realloc.c regcomp.c regex.h \ regex_internal.c regex_internal.h regexec.c dirent-private.h \ root-uid.h safe-read.h sys-limits.h safe-read.c safe-write.h \ sys-limits.h same-inode.h save-cwd.h sched.in.h \ malloc/scratch_buffer.h scratch_buffer.h setlocale_null.h \ windows-initguard.h sig-handler.h signal.in.h float+.h \ _Noreturn.h arg-nonnull.h c++defs.h warn-on-use.h spawn.in.h \ stat-w32.c stat-w32.h stat-macros.h stat-time.h stdalign.in.h \ stdarg.in.h stdbool.in.h stddef.in.h stdint.in.h stdio.in.h \ stdlib.in.h strcasestr.c str-two-way.h strcasestr.c \ strchrnul.valgrind streq.h strerror-override.h string.in.h \ strings.in.h sys_file.in.h sys_random.in.h sys_stat.in.h \ sys_time.in.h sys_types.in.h sys_wait.in.h tempname.h \ thread-optim.h time.in.h time-internal.h mktime-internal.h \ timespec.h unistd.in.h unistd--.h unistd-safer.h unlocked-io.h \ $(top_srcdir)/build-aux/update-copyright \ $(top_srcdir)/build-aux/useless-if-before-free utime.in.h \ utimens.h asnprintf.c float+.h printf-args.c printf-args.h \ printf-parse.c printf-parse.h vasnprintf.c vasnprintf.h \ asprintf.c vasprintf.c $(top_srcdir)/build-aux/vc-list-files \ verify.h vfprintf.c wchar.in.h wctomb-impl.h wctype.in.h \ windows-initguard.h windows-mutex.h windows-once.h \ windows-initguard.h windows-recmutex.h windows-initguard.h \ windows-rwlock.h windows-spawn.h xalloc.h xalloc.h \ xalloc-oversized.h BUILT_SOURCES = $(ALLOCA_H) dirent.h malloc/dynarray.gl.h \ malloc/dynarray-skeleton.gl.h $(ERRNO_H) fcntl.h $(FLOAT_H) \ $(GETOPT_H) $(GETOPT_CDEFS_H) inttypes.h langinfo.h \ $(LIMITS_H) locale.h math.h parse-datetime.c \ parse-datetime-gen.h sched.h malloc/scratch_buffer.gl.h \ selinux/selinux.h $(SELINUX_CONTEXT_H) $(SELINUX_LABEL_H) \ signal.h spawn.h $(STDALIGN_H) $(STDARG_H) $(STDBOOL_H) \ $(STDDEF_H) $(STDINT_H) stdio.h stdlib.h string.h strings.h \ sys/file.h sys/random.h sys/stat.h sys/time.h sys/types.h \ sys/wait.h time.h unistd.h utime.h wchar.h wctype.h SUFFIXES = MOSTLYCLEANFILES = core *.stackdump alloca.h alloca.h-t dirent.h \ dirent.h-t malloc/dynarray.gl.h malloc/dynarray.gl.h-t \ malloc/dynarray-skeleton.gl.h malloc/dynarray-skeleton.gl.h-t \ errno.h errno.h-t fcntl.h fcntl.h-t float.h float.h-t getopt.h \ getopt.h-t getopt-cdefs.h getopt-cdefs.h-t inttypes.h \ inttypes.h-t langinfo.h langinfo.h-t limits.h limits.h-t \ locale.h locale.h-t math.h math.h-t parse-datetime.tab.c \ parse-datetime.tab.h parse-datetime.c-tmp \ parse-datetime-gen.h-tmp sched.h sched.h-t \ malloc/scratch_buffer.gl.h malloc/scratch_buffer.gl.h-t \ selinux/selinux.h selinux/selinux.h-t selinux/context.h \ selinux/context.h-t selinux/label.h selinux/label.h-t signal.h \ signal.h-t spawn.h spawn.h-t stdalign.h stdalign.h-t stdarg.h \ stdarg.h-t stdbool.h stdbool.h-t stddef.h stddef.h-t stdint.h \ stdint.h-t stdio.h stdio.h-t stdlib.h stdlib.h-t string.h \ string.h-t strings.h strings.h-t sys/file.h sys/file.h-t \ sys/random.h sys/random.h-t sys/stat.h sys/stat.h-t sys/time.h \ sys/time.h-t sys/types.h sys/types.h-t sys/wait.h sys/wait.h-t \ time.h time.h-t unistd.h unistd.h-t utime.h utime.h-t wchar.h \ wchar.h-t wctype.h wctype.h-t MOSTLYCLEANDIRS = selinux sys sys sys sys CLEANFILES = DISTCLEANFILES = MAINTAINERCLEANFILES = parse-datetime.c parse-datetime-gen.h # No GNU Make output. AM_CPPFLAGS = AM_CFLAGS = # See the comments in bison.m4. librecutils_la_SOURCES = $(am__append_1) copy-acl.c set-acl.c \ acl-errno-valid.c acl-internal.c get-permissions.c \ set-permissions.c gl_array_list.h gl_array_list.c \ openat-priv.h openat-proc.c base64.h base64.c basename-lgpl.c \ binary-io.h binary-io.c bitrotate.h bitrotate.c \ $(am__append_2) c-ctype.h c-ctype.c c-strcase.h c-strcasecmp.c \ c-strncasecmp.c canonicalize.c $(am__append_3) $(am__append_4) \ cloexec.c $(am__append_5) close-stream.c $(am__append_6) \ closeout.c concat-filename.c copy-file.h copy-file.c \ $(am__append_7) crc.c $(am__append_8) dirname-lgpl.c \ stripslash.c $(am__append_9) $(am__append_10) \ malloc/dynarray_at_failure.c malloc/dynarray_emplace_enlarge.c \ malloc/dynarray_finalize.c malloc/dynarray_resize.c \ malloc/dynarray_resize_clear.c $(am__append_11) \ $(am__append_12) execute.h execute.c exitfail.c \ $(am__append_13) fatal-signal.h fatal-signal.c \ $(am__append_14) $(am__append_15) fd-hook.c fd-safer-flag.c \ dup-safer-flag.c $(am__append_16) file-set.c \ filenamecat-lgpl.c findprog.h findprog-in.c $(am__append_17) \ $(am__append_18) $(am__append_19) $(am__append_20) \ $(am__append_21) $(am__append_22) $(am__append_23) \ $(am__append_24) $(am__append_25) $(am__append_26) \ $(am__append_27) $(am__append_28) $(am__append_29) \ full-write.h full-write.c $(am__append_30) $(am__append_31) \ $(am__append_32) $(am__append_33) $(am__append_34) \ $(am__append_35) $(am__append_36) $(am__append_37) \ getprogname.h getprogname.c $(am__append_38) gettext.h \ gettime.c $(am__append_39) $(am__append_40) hard-locale.c \ hash.c hash-pjw.h hash-pjw.c hash-triple-simple.c ialloc.c \ idx.h gl_list.h gl_list.c localcharset.c $(am__append_41) \ glthread/lock.h glthread/lock.c $(am__append_42) \ $(am__append_43) malloca.c math.c $(am__append_44) \ $(am__append_45) $(am__append_46) $(am__append_47) \ $(am__append_48) $(am__append_49) $(am__append_50) minmax.h \ $(am__append_51) $(am__append_52) $(am__append_53) \ $(am__append_54) $(am__append_55) $(am__append_56) \ $(am__append_57) nstrftime.c $(am__append_58) $(am__append_59) \ $(am__append_60) openat-die.c $(am__append_61) \ parse-datetime.y $(am__append_62) $(am__append_63) \ $(am__append_64) $(am__append_65) $(am__append_66) \ $(am__append_67) $(am__append_68) $(am__append_69) \ $(am__append_70) $(am__append_71) $(am__append_72) \ $(am__append_73) printf-frexp.c printf-frexpl.c progname.h \ progname.c qcopy-acl.c qset-acl.c quotearg.c $(am__append_74) \ $(am__append_75) $(am__append_76) $(am__append_77) read-file.c \ $(am__append_78) $(am__append_79) $(am__append_80) \ $(am__append_81) $(am__append_82) $(am__append_83) \ $(am__append_84) $(am__append_85) $(am__append_86) safe-read.c \ safe-write.c save-cwd.c malloc/scratch_buffer_dupfree.c \ malloc/scratch_buffer_grow.c \ malloc/scratch_buffer_grow_preserve.c \ malloc/scratch_buffer_set_array_size.c $(am__append_87) \ $(am__append_88) se-context.in.h se-label.in.h se-selinux.in.h \ se-context.c se-label.c se-selinux.c $(am__append_89) \ setlocale_null.c $(am__append_90) $(am__append_91) \ sig-handler.c $(am__append_92) $(am__append_93) size_max.h \ $(am__append_94) stat-time.c $(am__append_95) $(am__append_96) \ $(am__append_97) $(am__append_98) $(am__append_99) \ $(am__append_100) $(am__append_101) $(am__append_102) \ $(am__append_103) $(am__append_104) $(am__append_105) \ tempname.c glthread/threadlib.c $(am__append_106) \ $(am__append_107) $(am__append_108) timespec.c tmpdir.h \ tmpdir.c $(am__append_109) unistd.c dup-safer.c fd-safer.c \ pipe-safer.c $(am__append_110) $(am__append_111) \ $(am__append_112) utimens.c version-etc.h version-etc.c \ version-etc-fsf.c wait-process.h wait-process.c \ $(am__append_113) $(am__append_114) $(am__append_115) \ $(am__append_116) wctype-h.c $(am__append_117) \ $(am__append_118) $(am__append_119) $(am__append_120) \ $(am__append_121) $(am__append_122) xmalloc.c xalloc-die.c \ xsize.h xsize.c librecutils_la_CFLAGS = $(AM_CFLAGS) $(GL_CFLAG_GNULIB_WARNINGS) librecutils_la_LIBADD = $(gl_LTLIBOBJS) @LTALLOCA@ librecutils_la_DEPENDENCIES = $(gl_LTLIBOBJS) @LTALLOCA@ EXTRA_librecutils_la_SOURCES = acl_entries.c alloca.c calloc.c \ calloc.c malloc/dynarray-skeleton.c fopen.c fopen.c fprintf.c \ frexp.c frexp.c frexpl.c stat-w32.c at-func.c getpass.c \ getpass.c isnan.c isnand.c isnan.c isnanf.c isnan.c isnanl.c \ malloc.c malloc.c lc-charset-dispatch.c mbtowc-lock.c mktime.c \ mktime.c printf-frexp.c printf.c realloc.c realloc.c regcomp.c \ regex_internal.c regexec.c safe-read.c stat-w32.c strcasestr.c \ strcasestr.c asnprintf.c printf-args.c printf-parse.c \ vasnprintf.c asprintf.c vasprintf.c vfprintf.c librecutils_la_LDFLAGS = $(AM_LDFLAGS) -no-undefined $(FLOOR_LIBM) \ $(LIBTHREAD) $(LIB_ACL) $(LIB_CLOCK_GETTIME) $(LIB_EACCESS) \ $(LIB_GETRANDOM) $(LIB_HARD_LOCALE) $(LIB_MBRTOWC) \ $(LIB_POSIX_SPAWN) $(LIB_SELINUX) $(LIB_SETLOCALE_NULL) \ $(LTLIBINTL) $(LTLIBREADLINE) # Use this preprocessor expression to decide whether #include_next works. # Do not rely on a 'configure'-time test for this, since the expression # might appear in an installed header, which is used by some other compiler. HAVE_INCLUDE_NEXT = (__GNUC__ || __clang__ || 60000000 <= __DECC_VER) # In 'sed', replace the pattern space with a "DO NOT EDIT" comment. SED_HEADER_NOEDIT = s,.*,/* DO NOT EDIT! GENERATED AUTOMATICALLY! */, # '$(SED_HEADER_STDOUT) -e "..."' runs 'sed' but first outputs "DO NOT EDIT". SED_HEADER_STDOUT = sed -e 1h -e '1$(SED_HEADER_NOEDIT)' -e 1G # '$(SED_HEADER_TO_AT_t) FILE' copies FILE to $@-t, prepending a leading # "DO_NOT_EDIT". Although this could be done more simply via: # SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) > $@-t # the -n and 'w' avoid a fork+exec, at least when GNU Make is used. SED_HEADER_TO_AT_t = $(SED_HEADER_STDOUT) -n -e 'w $@-t' # Use $(gl_V_at) instead of $(AM_V_GEN) or $(AM_V_at) on a line that gl_V_at = $(AM_V_GEN) # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. _NORETURN_H = $(srcdir)/_Noreturn.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. ARG_NONNULL_H = $(srcdir)/arg-nonnull.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. CXXDEFS_H = $(srcdir)/c++defs.h # Because this Makefile snippet defines a variable used by other # gnulib Makefile snippets, it must be present in all makefiles that # need it. This is ensured by the applicability 'all' defined above. WARN_ON_USE_H = $(srcdir)/warn-on-use.h all: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) all-recursive .SUFFIXES: .SUFFIXES: .c .lo .o .obj .y $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnits lib/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnits lib/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLIBRARIES: -test -z "$(noinst_LIBRARIES)" || rm -f $(noinst_LIBRARIES) clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } malloc/$(am__dirstamp): @$(MKDIR_P) malloc @: > malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) malloc/$(DEPDIR) @: > malloc/$(DEPDIR)/$(am__dirstamp) malloc/librecutils_la-dynarray_at_failure.lo: malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) malloc/librecutils_la-dynarray_emplace_enlarge.lo: \ malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp) malloc/librecutils_la-dynarray_finalize.lo: malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) malloc/librecutils_la-dynarray_resize.lo: malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) malloc/librecutils_la-dynarray_resize_clear.lo: \ malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp) glthread/$(am__dirstamp): @$(MKDIR_P) glthread @: > glthread/$(am__dirstamp) glthread/$(DEPDIR)/$(am__dirstamp): @$(MKDIR_P) glthread/$(DEPDIR) @: > glthread/$(DEPDIR)/$(am__dirstamp) glthread/librecutils_la-lock.lo: glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) malloc/librecutils_la-scratch_buffer_dupfree.lo: \ malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp) malloc/librecutils_la-scratch_buffer_grow.lo: malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) malloc/librecutils_la-scratch_buffer_grow_preserve.lo: \ malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp) malloc/librecutils_la-scratch_buffer_set_array_size.lo: \ malloc/$(am__dirstamp) malloc/$(DEPDIR)/$(am__dirstamp) glthread/librecutils_la-threadlib.lo: glthread/$(am__dirstamp) \ glthread/$(DEPDIR)/$(am__dirstamp) malloc/librecutils_la-dynarray-skeleton.lo: malloc/$(am__dirstamp) \ malloc/$(DEPDIR)/$(am__dirstamp) librecutils.la: $(librecutils_la_OBJECTS) $(librecutils_la_DEPENDENCIES) $(EXTRA_librecutils_la_DEPENDENCIES) $(AM_V_CCLD)$(librecutils_la_LINK) $(librecutils_la_OBJECTS) $(librecutils_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) -rm -f glthread/*.$(OBJEXT) -rm -f glthread/*.lo -rm -f malloc/*.$(OBJEXT) -rm -f malloc/*.lo distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/alloca.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-access.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-acl-errno-valid.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-acl-internal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-acl_entries.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-alloca.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-asnprintf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-asprintf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-at-func.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-base64.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-basename-lgpl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-binary-io.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-bitrotate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-btowc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-c-ctype.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-c-strcasecmp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-c-strncasecmp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-calloc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-canonicalize-lgpl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-canonicalize.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-chdir-long.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-cloexec.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-close-stream.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-close.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-closedir.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-closeout.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-concat-filename.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-copy-acl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-copy-file-range.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-copy-file.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-crc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-dirfd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-dirname-lgpl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-dup-safer-flag.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-dup-safer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-dup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-dup2.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-error.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-euidaccess.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-execute.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-exitfail.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-explicit_bzero.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fatal-signal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fchdir.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fcntl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fd-hook.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fd-safer-flag.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fd-safer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fdopendir.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-file-set.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-filenamecat-lgpl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-findprog-in.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-float.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-flock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-floor.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fopen.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fpending.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fprintf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-free.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-frexp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-frexpl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fseek.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fseeko.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fseterr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fstat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fstatat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-ftell.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-ftello.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-full-write.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-fwriting.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-get-permissions.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-getcwd-lgpl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-getcwd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-getdelim.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-getdtablesize.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-getfilecon.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-getgroups.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-getline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-getopt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-getopt1.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-getpass.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-getprogname.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-getrandom.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-gettime.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-gettimeofday.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-gl_array_list.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-gl_list.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-group-member.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-hard-locale.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-hash-pjw.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-hash-triple-simple.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-hash.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-ialloc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-isnan.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-isnand.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-isnanf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-isnanl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-itold.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-lc-charset-dispatch.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-localcharset.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-localeconv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-lseek.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-lstat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-malloc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-malloca.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-math.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-mbrlen.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-mbrtowc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-mbsinit.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-mbtowc-lock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-mbtowc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-memchr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-mempcpy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-memrchr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-mkdir.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-mkostemp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-mkstemp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-mktime.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-msvc-inval.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-msvc-nothrow.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-nl_langinfo-lock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-nl_langinfo.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-nstrftime.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-obstack.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-open.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-openat-die.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-openat-proc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-openat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-opendir.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-parse-datetime.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-pipe-safer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-pipe.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-printf-args.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-printf-frexp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-printf-frexpl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-printf-parse.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-printf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-progname.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-qcopy-acl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-qset-acl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-quotearg.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-raise.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-random_r.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-rawmemchr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-read-file.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-read.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-readdir.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-readline.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-readlink.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-realloc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-reallocarray.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-regcomp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-regex.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-regex_internal.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-regexec.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-remove.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-rename.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-rewinddir.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-rmdir.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-safe-read.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-safe-write.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-save-cwd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-se-context.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-se-label.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-se-selinux.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-secure_getenv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-set-acl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-set-permissions.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-setenv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-setlocale-lock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-setlocale_null.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-sig-handler.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-sigaction.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-signbitd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-signbitf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-signbitl.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-sigprocmask.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-spawn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-spawn_faction_addchdir.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-spawn_faction_addopen.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-spawn_faction_destroy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-spawn_faction_init.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-spawnattr_destroy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-spawnattr_init.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-spawnattr_setflags.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-spawnattr_setsigmask.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-spawni.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-spawnp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-stat-time.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-stat-w32.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-stat.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-stdio-read.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-stdio-write.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-stpcpy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-strcasecmp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-strcasestr.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-strchrnul.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-strdup.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-strerror-override.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-strerror.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-stripslash.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-strncasecmp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-strsep.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-strverscmp.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-tempname.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-time_r.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-time_rz.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-timegm.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-timespec.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-tmpdir.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-tzset.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-unistd.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-unlink.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-unsetenv.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-utime.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-utimens.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-vasnprintf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-vasprintf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-version-etc-fsf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-version-etc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-vfprintf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-wait-process.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-waitpid.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-wcrtomb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-wctob.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-wctomb.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-wctype-h.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-windows-mutex.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-windows-once.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-windows-recmutex.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-windows-rwlock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-windows-spawn.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-write.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-xalloc-die.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-xmalloc.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/librecutils_la-xsize.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/librecutils_la-lock.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@glthread/$(DEPDIR)/librecutils_la-threadlib.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/librecutils_la-dynarray-skeleton.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/librecutils_la-dynarray_at_failure.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/librecutils_la-dynarray_emplace_enlarge.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/librecutils_la-dynarray_finalize.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/librecutils_la-dynarray_resize.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/librecutils_la-dynarray_resize_clear.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/librecutils_la-scratch_buffer_dupfree.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow_preserve.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@malloc/$(DEPDIR)/librecutils_la-scratch_buffer_set_array_size.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< librecutils_la-access.lo: access.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-access.lo -MD -MP -MF $(DEPDIR)/librecutils_la-access.Tpo -c -o librecutils_la-access.lo `test -f 'access.c' || echo '$(srcdir)/'`access.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-access.Tpo $(DEPDIR)/librecutils_la-access.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='access.c' object='librecutils_la-access.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-access.lo `test -f 'access.c' || echo '$(srcdir)/'`access.c librecutils_la-copy-acl.lo: copy-acl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-copy-acl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-copy-acl.Tpo -c -o librecutils_la-copy-acl.lo `test -f 'copy-acl.c' || echo '$(srcdir)/'`copy-acl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-copy-acl.Tpo $(DEPDIR)/librecutils_la-copy-acl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='copy-acl.c' object='librecutils_la-copy-acl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-copy-acl.lo `test -f 'copy-acl.c' || echo '$(srcdir)/'`copy-acl.c librecutils_la-set-acl.lo: set-acl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-set-acl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-set-acl.Tpo -c -o librecutils_la-set-acl.lo `test -f 'set-acl.c' || echo '$(srcdir)/'`set-acl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-set-acl.Tpo $(DEPDIR)/librecutils_la-set-acl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='set-acl.c' object='librecutils_la-set-acl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-set-acl.lo `test -f 'set-acl.c' || echo '$(srcdir)/'`set-acl.c librecutils_la-acl-errno-valid.lo: acl-errno-valid.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-acl-errno-valid.lo -MD -MP -MF $(DEPDIR)/librecutils_la-acl-errno-valid.Tpo -c -o librecutils_la-acl-errno-valid.lo `test -f 'acl-errno-valid.c' || echo '$(srcdir)/'`acl-errno-valid.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-acl-errno-valid.Tpo $(DEPDIR)/librecutils_la-acl-errno-valid.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='acl-errno-valid.c' object='librecutils_la-acl-errno-valid.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-acl-errno-valid.lo `test -f 'acl-errno-valid.c' || echo '$(srcdir)/'`acl-errno-valid.c librecutils_la-acl-internal.lo: acl-internal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-acl-internal.lo -MD -MP -MF $(DEPDIR)/librecutils_la-acl-internal.Tpo -c -o librecutils_la-acl-internal.lo `test -f 'acl-internal.c' || echo '$(srcdir)/'`acl-internal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-acl-internal.Tpo $(DEPDIR)/librecutils_la-acl-internal.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='acl-internal.c' object='librecutils_la-acl-internal.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-acl-internal.lo `test -f 'acl-internal.c' || echo '$(srcdir)/'`acl-internal.c librecutils_la-get-permissions.lo: get-permissions.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-get-permissions.lo -MD -MP -MF $(DEPDIR)/librecutils_la-get-permissions.Tpo -c -o librecutils_la-get-permissions.lo `test -f 'get-permissions.c' || echo '$(srcdir)/'`get-permissions.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-get-permissions.Tpo $(DEPDIR)/librecutils_la-get-permissions.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='get-permissions.c' object='librecutils_la-get-permissions.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-get-permissions.lo `test -f 'get-permissions.c' || echo '$(srcdir)/'`get-permissions.c librecutils_la-set-permissions.lo: set-permissions.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-set-permissions.lo -MD -MP -MF $(DEPDIR)/librecutils_la-set-permissions.Tpo -c -o librecutils_la-set-permissions.lo `test -f 'set-permissions.c' || echo '$(srcdir)/'`set-permissions.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-set-permissions.Tpo $(DEPDIR)/librecutils_la-set-permissions.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='set-permissions.c' object='librecutils_la-set-permissions.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-set-permissions.lo `test -f 'set-permissions.c' || echo '$(srcdir)/'`set-permissions.c librecutils_la-gl_array_list.lo: gl_array_list.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-gl_array_list.lo -MD -MP -MF $(DEPDIR)/librecutils_la-gl_array_list.Tpo -c -o librecutils_la-gl_array_list.lo `test -f 'gl_array_list.c' || echo '$(srcdir)/'`gl_array_list.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-gl_array_list.Tpo $(DEPDIR)/librecutils_la-gl_array_list.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gl_array_list.c' object='librecutils_la-gl_array_list.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-gl_array_list.lo `test -f 'gl_array_list.c' || echo '$(srcdir)/'`gl_array_list.c librecutils_la-openat-proc.lo: openat-proc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-openat-proc.lo -MD -MP -MF $(DEPDIR)/librecutils_la-openat-proc.Tpo -c -o librecutils_la-openat-proc.lo `test -f 'openat-proc.c' || echo '$(srcdir)/'`openat-proc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-openat-proc.Tpo $(DEPDIR)/librecutils_la-openat-proc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openat-proc.c' object='librecutils_la-openat-proc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-openat-proc.lo `test -f 'openat-proc.c' || echo '$(srcdir)/'`openat-proc.c librecutils_la-base64.lo: base64.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-base64.lo -MD -MP -MF $(DEPDIR)/librecutils_la-base64.Tpo -c -o librecutils_la-base64.lo `test -f 'base64.c' || echo '$(srcdir)/'`base64.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-base64.Tpo $(DEPDIR)/librecutils_la-base64.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='base64.c' object='librecutils_la-base64.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-base64.lo `test -f 'base64.c' || echo '$(srcdir)/'`base64.c librecutils_la-basename-lgpl.lo: basename-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-basename-lgpl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-basename-lgpl.Tpo -c -o librecutils_la-basename-lgpl.lo `test -f 'basename-lgpl.c' || echo '$(srcdir)/'`basename-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-basename-lgpl.Tpo $(DEPDIR)/librecutils_la-basename-lgpl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='basename-lgpl.c' object='librecutils_la-basename-lgpl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-basename-lgpl.lo `test -f 'basename-lgpl.c' || echo '$(srcdir)/'`basename-lgpl.c librecutils_la-binary-io.lo: binary-io.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-binary-io.lo -MD -MP -MF $(DEPDIR)/librecutils_la-binary-io.Tpo -c -o librecutils_la-binary-io.lo `test -f 'binary-io.c' || echo '$(srcdir)/'`binary-io.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-binary-io.Tpo $(DEPDIR)/librecutils_la-binary-io.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='binary-io.c' object='librecutils_la-binary-io.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-binary-io.lo `test -f 'binary-io.c' || echo '$(srcdir)/'`binary-io.c librecutils_la-bitrotate.lo: bitrotate.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-bitrotate.lo -MD -MP -MF $(DEPDIR)/librecutils_la-bitrotate.Tpo -c -o librecutils_la-bitrotate.lo `test -f 'bitrotate.c' || echo '$(srcdir)/'`bitrotate.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-bitrotate.Tpo $(DEPDIR)/librecutils_la-bitrotate.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='bitrotate.c' object='librecutils_la-bitrotate.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-bitrotate.lo `test -f 'bitrotate.c' || echo '$(srcdir)/'`bitrotate.c librecutils_la-btowc.lo: btowc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-btowc.lo -MD -MP -MF $(DEPDIR)/librecutils_la-btowc.Tpo -c -o librecutils_la-btowc.lo `test -f 'btowc.c' || echo '$(srcdir)/'`btowc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-btowc.Tpo $(DEPDIR)/librecutils_la-btowc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='btowc.c' object='librecutils_la-btowc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-btowc.lo `test -f 'btowc.c' || echo '$(srcdir)/'`btowc.c librecutils_la-c-ctype.lo: c-ctype.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-c-ctype.lo -MD -MP -MF $(DEPDIR)/librecutils_la-c-ctype.Tpo -c -o librecutils_la-c-ctype.lo `test -f 'c-ctype.c' || echo '$(srcdir)/'`c-ctype.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-c-ctype.Tpo $(DEPDIR)/librecutils_la-c-ctype.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c-ctype.c' object='librecutils_la-c-ctype.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-c-ctype.lo `test -f 'c-ctype.c' || echo '$(srcdir)/'`c-ctype.c librecutils_la-c-strcasecmp.lo: c-strcasecmp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-c-strcasecmp.lo -MD -MP -MF $(DEPDIR)/librecutils_la-c-strcasecmp.Tpo -c -o librecutils_la-c-strcasecmp.lo `test -f 'c-strcasecmp.c' || echo '$(srcdir)/'`c-strcasecmp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-c-strcasecmp.Tpo $(DEPDIR)/librecutils_la-c-strcasecmp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c-strcasecmp.c' object='librecutils_la-c-strcasecmp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-c-strcasecmp.lo `test -f 'c-strcasecmp.c' || echo '$(srcdir)/'`c-strcasecmp.c librecutils_la-c-strncasecmp.lo: c-strncasecmp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-c-strncasecmp.lo -MD -MP -MF $(DEPDIR)/librecutils_la-c-strncasecmp.Tpo -c -o librecutils_la-c-strncasecmp.lo `test -f 'c-strncasecmp.c' || echo '$(srcdir)/'`c-strncasecmp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-c-strncasecmp.Tpo $(DEPDIR)/librecutils_la-c-strncasecmp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='c-strncasecmp.c' object='librecutils_la-c-strncasecmp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-c-strncasecmp.lo `test -f 'c-strncasecmp.c' || echo '$(srcdir)/'`c-strncasecmp.c librecutils_la-canonicalize.lo: canonicalize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-canonicalize.lo -MD -MP -MF $(DEPDIR)/librecutils_la-canonicalize.Tpo -c -o librecutils_la-canonicalize.lo `test -f 'canonicalize.c' || echo '$(srcdir)/'`canonicalize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-canonicalize.Tpo $(DEPDIR)/librecutils_la-canonicalize.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='canonicalize.c' object='librecutils_la-canonicalize.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-canonicalize.lo `test -f 'canonicalize.c' || echo '$(srcdir)/'`canonicalize.c librecutils_la-canonicalize-lgpl.lo: canonicalize-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-canonicalize-lgpl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-canonicalize-lgpl.Tpo -c -o librecutils_la-canonicalize-lgpl.lo `test -f 'canonicalize-lgpl.c' || echo '$(srcdir)/'`canonicalize-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-canonicalize-lgpl.Tpo $(DEPDIR)/librecutils_la-canonicalize-lgpl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='canonicalize-lgpl.c' object='librecutils_la-canonicalize-lgpl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-canonicalize-lgpl.lo `test -f 'canonicalize-lgpl.c' || echo '$(srcdir)/'`canonicalize-lgpl.c librecutils_la-chdir-long.lo: chdir-long.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-chdir-long.lo -MD -MP -MF $(DEPDIR)/librecutils_la-chdir-long.Tpo -c -o librecutils_la-chdir-long.lo `test -f 'chdir-long.c' || echo '$(srcdir)/'`chdir-long.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-chdir-long.Tpo $(DEPDIR)/librecutils_la-chdir-long.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='chdir-long.c' object='librecutils_la-chdir-long.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-chdir-long.lo `test -f 'chdir-long.c' || echo '$(srcdir)/'`chdir-long.c librecutils_la-cloexec.lo: cloexec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-cloexec.lo -MD -MP -MF $(DEPDIR)/librecutils_la-cloexec.Tpo -c -o librecutils_la-cloexec.lo `test -f 'cloexec.c' || echo '$(srcdir)/'`cloexec.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-cloexec.Tpo $(DEPDIR)/librecutils_la-cloexec.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='cloexec.c' object='librecutils_la-cloexec.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-cloexec.lo `test -f 'cloexec.c' || echo '$(srcdir)/'`cloexec.c librecutils_la-close.lo: close.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-close.lo -MD -MP -MF $(DEPDIR)/librecutils_la-close.Tpo -c -o librecutils_la-close.lo `test -f 'close.c' || echo '$(srcdir)/'`close.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-close.Tpo $(DEPDIR)/librecutils_la-close.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='close.c' object='librecutils_la-close.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-close.lo `test -f 'close.c' || echo '$(srcdir)/'`close.c librecutils_la-close-stream.lo: close-stream.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-close-stream.lo -MD -MP -MF $(DEPDIR)/librecutils_la-close-stream.Tpo -c -o librecutils_la-close-stream.lo `test -f 'close-stream.c' || echo '$(srcdir)/'`close-stream.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-close-stream.Tpo $(DEPDIR)/librecutils_la-close-stream.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='close-stream.c' object='librecutils_la-close-stream.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-close-stream.lo `test -f 'close-stream.c' || echo '$(srcdir)/'`close-stream.c librecutils_la-closedir.lo: closedir.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-closedir.lo -MD -MP -MF $(DEPDIR)/librecutils_la-closedir.Tpo -c -o librecutils_la-closedir.lo `test -f 'closedir.c' || echo '$(srcdir)/'`closedir.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-closedir.Tpo $(DEPDIR)/librecutils_la-closedir.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='closedir.c' object='librecutils_la-closedir.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-closedir.lo `test -f 'closedir.c' || echo '$(srcdir)/'`closedir.c librecutils_la-closeout.lo: closeout.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-closeout.lo -MD -MP -MF $(DEPDIR)/librecutils_la-closeout.Tpo -c -o librecutils_la-closeout.lo `test -f 'closeout.c' || echo '$(srcdir)/'`closeout.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-closeout.Tpo $(DEPDIR)/librecutils_la-closeout.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='closeout.c' object='librecutils_la-closeout.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-closeout.lo `test -f 'closeout.c' || echo '$(srcdir)/'`closeout.c librecutils_la-concat-filename.lo: concat-filename.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-concat-filename.lo -MD -MP -MF $(DEPDIR)/librecutils_la-concat-filename.Tpo -c -o librecutils_la-concat-filename.lo `test -f 'concat-filename.c' || echo '$(srcdir)/'`concat-filename.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-concat-filename.Tpo $(DEPDIR)/librecutils_la-concat-filename.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='concat-filename.c' object='librecutils_la-concat-filename.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-concat-filename.lo `test -f 'concat-filename.c' || echo '$(srcdir)/'`concat-filename.c librecutils_la-copy-file.lo: copy-file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-copy-file.lo -MD -MP -MF $(DEPDIR)/librecutils_la-copy-file.Tpo -c -o librecutils_la-copy-file.lo `test -f 'copy-file.c' || echo '$(srcdir)/'`copy-file.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-copy-file.Tpo $(DEPDIR)/librecutils_la-copy-file.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='copy-file.c' object='librecutils_la-copy-file.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-copy-file.lo `test -f 'copy-file.c' || echo '$(srcdir)/'`copy-file.c librecutils_la-copy-file-range.lo: copy-file-range.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-copy-file-range.lo -MD -MP -MF $(DEPDIR)/librecutils_la-copy-file-range.Tpo -c -o librecutils_la-copy-file-range.lo `test -f 'copy-file-range.c' || echo '$(srcdir)/'`copy-file-range.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-copy-file-range.Tpo $(DEPDIR)/librecutils_la-copy-file-range.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='copy-file-range.c' object='librecutils_la-copy-file-range.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-copy-file-range.lo `test -f 'copy-file-range.c' || echo '$(srcdir)/'`copy-file-range.c librecutils_la-crc.lo: crc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-crc.lo -MD -MP -MF $(DEPDIR)/librecutils_la-crc.Tpo -c -o librecutils_la-crc.lo `test -f 'crc.c' || echo '$(srcdir)/'`crc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-crc.Tpo $(DEPDIR)/librecutils_la-crc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='crc.c' object='librecutils_la-crc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-crc.lo `test -f 'crc.c' || echo '$(srcdir)/'`crc.c librecutils_la-dirfd.lo: dirfd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-dirfd.lo -MD -MP -MF $(DEPDIR)/librecutils_la-dirfd.Tpo -c -o librecutils_la-dirfd.lo `test -f 'dirfd.c' || echo '$(srcdir)/'`dirfd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-dirfd.Tpo $(DEPDIR)/librecutils_la-dirfd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirfd.c' object='librecutils_la-dirfd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-dirfd.lo `test -f 'dirfd.c' || echo '$(srcdir)/'`dirfd.c librecutils_la-dirname-lgpl.lo: dirname-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-dirname-lgpl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-dirname-lgpl.Tpo -c -o librecutils_la-dirname-lgpl.lo `test -f 'dirname-lgpl.c' || echo '$(srcdir)/'`dirname-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-dirname-lgpl.Tpo $(DEPDIR)/librecutils_la-dirname-lgpl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dirname-lgpl.c' object='librecutils_la-dirname-lgpl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-dirname-lgpl.lo `test -f 'dirname-lgpl.c' || echo '$(srcdir)/'`dirname-lgpl.c librecutils_la-stripslash.lo: stripslash.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-stripslash.lo -MD -MP -MF $(DEPDIR)/librecutils_la-stripslash.Tpo -c -o librecutils_la-stripslash.lo `test -f 'stripslash.c' || echo '$(srcdir)/'`stripslash.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-stripslash.Tpo $(DEPDIR)/librecutils_la-stripslash.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stripslash.c' object='librecutils_la-stripslash.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-stripslash.lo `test -f 'stripslash.c' || echo '$(srcdir)/'`stripslash.c librecutils_la-dup.lo: dup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-dup.lo -MD -MP -MF $(DEPDIR)/librecutils_la-dup.Tpo -c -o librecutils_la-dup.lo `test -f 'dup.c' || echo '$(srcdir)/'`dup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-dup.Tpo $(DEPDIR)/librecutils_la-dup.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup.c' object='librecutils_la-dup.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-dup.lo `test -f 'dup.c' || echo '$(srcdir)/'`dup.c librecutils_la-dup2.lo: dup2.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-dup2.lo -MD -MP -MF $(DEPDIR)/librecutils_la-dup2.Tpo -c -o librecutils_la-dup2.lo `test -f 'dup2.c' || echo '$(srcdir)/'`dup2.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-dup2.Tpo $(DEPDIR)/librecutils_la-dup2.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup2.c' object='librecutils_la-dup2.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-dup2.lo `test -f 'dup2.c' || echo '$(srcdir)/'`dup2.c malloc/librecutils_la-dynarray_at_failure.lo: malloc/dynarray_at_failure.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT malloc/librecutils_la-dynarray_at_failure.lo -MD -MP -MF malloc/$(DEPDIR)/librecutils_la-dynarray_at_failure.Tpo -c -o malloc/librecutils_la-dynarray_at_failure.lo `test -f 'malloc/dynarray_at_failure.c' || echo '$(srcdir)/'`malloc/dynarray_at_failure.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/librecutils_la-dynarray_at_failure.Tpo malloc/$(DEPDIR)/librecutils_la-dynarray_at_failure.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_at_failure.c' object='malloc/librecutils_la-dynarray_at_failure.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o malloc/librecutils_la-dynarray_at_failure.lo `test -f 'malloc/dynarray_at_failure.c' || echo '$(srcdir)/'`malloc/dynarray_at_failure.c malloc/librecutils_la-dynarray_emplace_enlarge.lo: malloc/dynarray_emplace_enlarge.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT malloc/librecutils_la-dynarray_emplace_enlarge.lo -MD -MP -MF malloc/$(DEPDIR)/librecutils_la-dynarray_emplace_enlarge.Tpo -c -o malloc/librecutils_la-dynarray_emplace_enlarge.lo `test -f 'malloc/dynarray_emplace_enlarge.c' || echo '$(srcdir)/'`malloc/dynarray_emplace_enlarge.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/librecutils_la-dynarray_emplace_enlarge.Tpo malloc/$(DEPDIR)/librecutils_la-dynarray_emplace_enlarge.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_emplace_enlarge.c' object='malloc/librecutils_la-dynarray_emplace_enlarge.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o malloc/librecutils_la-dynarray_emplace_enlarge.lo `test -f 'malloc/dynarray_emplace_enlarge.c' || echo '$(srcdir)/'`malloc/dynarray_emplace_enlarge.c malloc/librecutils_la-dynarray_finalize.lo: malloc/dynarray_finalize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT malloc/librecutils_la-dynarray_finalize.lo -MD -MP -MF malloc/$(DEPDIR)/librecutils_la-dynarray_finalize.Tpo -c -o malloc/librecutils_la-dynarray_finalize.lo `test -f 'malloc/dynarray_finalize.c' || echo '$(srcdir)/'`malloc/dynarray_finalize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/librecutils_la-dynarray_finalize.Tpo malloc/$(DEPDIR)/librecutils_la-dynarray_finalize.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_finalize.c' object='malloc/librecutils_la-dynarray_finalize.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o malloc/librecutils_la-dynarray_finalize.lo `test -f 'malloc/dynarray_finalize.c' || echo '$(srcdir)/'`malloc/dynarray_finalize.c malloc/librecutils_la-dynarray_resize.lo: malloc/dynarray_resize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT malloc/librecutils_la-dynarray_resize.lo -MD -MP -MF malloc/$(DEPDIR)/librecutils_la-dynarray_resize.Tpo -c -o malloc/librecutils_la-dynarray_resize.lo `test -f 'malloc/dynarray_resize.c' || echo '$(srcdir)/'`malloc/dynarray_resize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/librecutils_la-dynarray_resize.Tpo malloc/$(DEPDIR)/librecutils_la-dynarray_resize.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_resize.c' object='malloc/librecutils_la-dynarray_resize.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o malloc/librecutils_la-dynarray_resize.lo `test -f 'malloc/dynarray_resize.c' || echo '$(srcdir)/'`malloc/dynarray_resize.c malloc/librecutils_la-dynarray_resize_clear.lo: malloc/dynarray_resize_clear.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT malloc/librecutils_la-dynarray_resize_clear.lo -MD -MP -MF malloc/$(DEPDIR)/librecutils_la-dynarray_resize_clear.Tpo -c -o malloc/librecutils_la-dynarray_resize_clear.lo `test -f 'malloc/dynarray_resize_clear.c' || echo '$(srcdir)/'`malloc/dynarray_resize_clear.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/librecutils_la-dynarray_resize_clear.Tpo malloc/$(DEPDIR)/librecutils_la-dynarray_resize_clear.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray_resize_clear.c' object='malloc/librecutils_la-dynarray_resize_clear.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o malloc/librecutils_la-dynarray_resize_clear.lo `test -f 'malloc/dynarray_resize_clear.c' || echo '$(srcdir)/'`malloc/dynarray_resize_clear.c librecutils_la-error.lo: error.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-error.lo -MD -MP -MF $(DEPDIR)/librecutils_la-error.Tpo -c -o librecutils_la-error.lo `test -f 'error.c' || echo '$(srcdir)/'`error.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-error.Tpo $(DEPDIR)/librecutils_la-error.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='error.c' object='librecutils_la-error.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-error.lo `test -f 'error.c' || echo '$(srcdir)/'`error.c librecutils_la-euidaccess.lo: euidaccess.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-euidaccess.lo -MD -MP -MF $(DEPDIR)/librecutils_la-euidaccess.Tpo -c -o librecutils_la-euidaccess.lo `test -f 'euidaccess.c' || echo '$(srcdir)/'`euidaccess.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-euidaccess.Tpo $(DEPDIR)/librecutils_la-euidaccess.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='euidaccess.c' object='librecutils_la-euidaccess.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-euidaccess.lo `test -f 'euidaccess.c' || echo '$(srcdir)/'`euidaccess.c librecutils_la-execute.lo: execute.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-execute.lo -MD -MP -MF $(DEPDIR)/librecutils_la-execute.Tpo -c -o librecutils_la-execute.lo `test -f 'execute.c' || echo '$(srcdir)/'`execute.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-execute.Tpo $(DEPDIR)/librecutils_la-execute.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='execute.c' object='librecutils_la-execute.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-execute.lo `test -f 'execute.c' || echo '$(srcdir)/'`execute.c librecutils_la-exitfail.lo: exitfail.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-exitfail.lo -MD -MP -MF $(DEPDIR)/librecutils_la-exitfail.Tpo -c -o librecutils_la-exitfail.lo `test -f 'exitfail.c' || echo '$(srcdir)/'`exitfail.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-exitfail.Tpo $(DEPDIR)/librecutils_la-exitfail.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='exitfail.c' object='librecutils_la-exitfail.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-exitfail.lo `test -f 'exitfail.c' || echo '$(srcdir)/'`exitfail.c librecutils_la-explicit_bzero.lo: explicit_bzero.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-explicit_bzero.lo -MD -MP -MF $(DEPDIR)/librecutils_la-explicit_bzero.Tpo -c -o librecutils_la-explicit_bzero.lo `test -f 'explicit_bzero.c' || echo '$(srcdir)/'`explicit_bzero.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-explicit_bzero.Tpo $(DEPDIR)/librecutils_la-explicit_bzero.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='explicit_bzero.c' object='librecutils_la-explicit_bzero.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-explicit_bzero.lo `test -f 'explicit_bzero.c' || echo '$(srcdir)/'`explicit_bzero.c librecutils_la-fatal-signal.lo: fatal-signal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fatal-signal.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fatal-signal.Tpo -c -o librecutils_la-fatal-signal.lo `test -f 'fatal-signal.c' || echo '$(srcdir)/'`fatal-signal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fatal-signal.Tpo $(DEPDIR)/librecutils_la-fatal-signal.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fatal-signal.c' object='librecutils_la-fatal-signal.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fatal-signal.lo `test -f 'fatal-signal.c' || echo '$(srcdir)/'`fatal-signal.c librecutils_la-fchdir.lo: fchdir.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fchdir.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fchdir.Tpo -c -o librecutils_la-fchdir.lo `test -f 'fchdir.c' || echo '$(srcdir)/'`fchdir.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fchdir.Tpo $(DEPDIR)/librecutils_la-fchdir.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fchdir.c' object='librecutils_la-fchdir.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fchdir.lo `test -f 'fchdir.c' || echo '$(srcdir)/'`fchdir.c librecutils_la-fcntl.lo: fcntl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fcntl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fcntl.Tpo -c -o librecutils_la-fcntl.lo `test -f 'fcntl.c' || echo '$(srcdir)/'`fcntl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fcntl.Tpo $(DEPDIR)/librecutils_la-fcntl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fcntl.c' object='librecutils_la-fcntl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fcntl.lo `test -f 'fcntl.c' || echo '$(srcdir)/'`fcntl.c librecutils_la-fd-hook.lo: fd-hook.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fd-hook.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fd-hook.Tpo -c -o librecutils_la-fd-hook.lo `test -f 'fd-hook.c' || echo '$(srcdir)/'`fd-hook.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fd-hook.Tpo $(DEPDIR)/librecutils_la-fd-hook.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-hook.c' object='librecutils_la-fd-hook.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fd-hook.lo `test -f 'fd-hook.c' || echo '$(srcdir)/'`fd-hook.c librecutils_la-fd-safer-flag.lo: fd-safer-flag.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fd-safer-flag.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fd-safer-flag.Tpo -c -o librecutils_la-fd-safer-flag.lo `test -f 'fd-safer-flag.c' || echo '$(srcdir)/'`fd-safer-flag.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fd-safer-flag.Tpo $(DEPDIR)/librecutils_la-fd-safer-flag.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-safer-flag.c' object='librecutils_la-fd-safer-flag.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fd-safer-flag.lo `test -f 'fd-safer-flag.c' || echo '$(srcdir)/'`fd-safer-flag.c librecutils_la-dup-safer-flag.lo: dup-safer-flag.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-dup-safer-flag.lo -MD -MP -MF $(DEPDIR)/librecutils_la-dup-safer-flag.Tpo -c -o librecutils_la-dup-safer-flag.lo `test -f 'dup-safer-flag.c' || echo '$(srcdir)/'`dup-safer-flag.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-dup-safer-flag.Tpo $(DEPDIR)/librecutils_la-dup-safer-flag.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup-safer-flag.c' object='librecutils_la-dup-safer-flag.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-dup-safer-flag.lo `test -f 'dup-safer-flag.c' || echo '$(srcdir)/'`dup-safer-flag.c librecutils_la-fdopendir.lo: fdopendir.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fdopendir.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fdopendir.Tpo -c -o librecutils_la-fdopendir.lo `test -f 'fdopendir.c' || echo '$(srcdir)/'`fdopendir.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fdopendir.Tpo $(DEPDIR)/librecutils_la-fdopendir.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fdopendir.c' object='librecutils_la-fdopendir.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fdopendir.lo `test -f 'fdopendir.c' || echo '$(srcdir)/'`fdopendir.c librecutils_la-file-set.lo: file-set.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-file-set.lo -MD -MP -MF $(DEPDIR)/librecutils_la-file-set.Tpo -c -o librecutils_la-file-set.lo `test -f 'file-set.c' || echo '$(srcdir)/'`file-set.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-file-set.Tpo $(DEPDIR)/librecutils_la-file-set.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='file-set.c' object='librecutils_la-file-set.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-file-set.lo `test -f 'file-set.c' || echo '$(srcdir)/'`file-set.c librecutils_la-filenamecat-lgpl.lo: filenamecat-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-filenamecat-lgpl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-filenamecat-lgpl.Tpo -c -o librecutils_la-filenamecat-lgpl.lo `test -f 'filenamecat-lgpl.c' || echo '$(srcdir)/'`filenamecat-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-filenamecat-lgpl.Tpo $(DEPDIR)/librecutils_la-filenamecat-lgpl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='filenamecat-lgpl.c' object='librecutils_la-filenamecat-lgpl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-filenamecat-lgpl.lo `test -f 'filenamecat-lgpl.c' || echo '$(srcdir)/'`filenamecat-lgpl.c librecutils_la-findprog-in.lo: findprog-in.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-findprog-in.lo -MD -MP -MF $(DEPDIR)/librecutils_la-findprog-in.Tpo -c -o librecutils_la-findprog-in.lo `test -f 'findprog-in.c' || echo '$(srcdir)/'`findprog-in.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-findprog-in.Tpo $(DEPDIR)/librecutils_la-findprog-in.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='findprog-in.c' object='librecutils_la-findprog-in.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-findprog-in.lo `test -f 'findprog-in.c' || echo '$(srcdir)/'`findprog-in.c librecutils_la-float.lo: float.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-float.lo -MD -MP -MF $(DEPDIR)/librecutils_la-float.Tpo -c -o librecutils_la-float.lo `test -f 'float.c' || echo '$(srcdir)/'`float.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-float.Tpo $(DEPDIR)/librecutils_la-float.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='float.c' object='librecutils_la-float.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-float.lo `test -f 'float.c' || echo '$(srcdir)/'`float.c librecutils_la-itold.lo: itold.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-itold.lo -MD -MP -MF $(DEPDIR)/librecutils_la-itold.Tpo -c -o librecutils_la-itold.lo `test -f 'itold.c' || echo '$(srcdir)/'`itold.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-itold.Tpo $(DEPDIR)/librecutils_la-itold.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='itold.c' object='librecutils_la-itold.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-itold.lo `test -f 'itold.c' || echo '$(srcdir)/'`itold.c librecutils_la-flock.lo: flock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-flock.lo -MD -MP -MF $(DEPDIR)/librecutils_la-flock.Tpo -c -o librecutils_la-flock.lo `test -f 'flock.c' || echo '$(srcdir)/'`flock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-flock.Tpo $(DEPDIR)/librecutils_la-flock.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='flock.c' object='librecutils_la-flock.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-flock.lo `test -f 'flock.c' || echo '$(srcdir)/'`flock.c librecutils_la-floor.lo: floor.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-floor.lo -MD -MP -MF $(DEPDIR)/librecutils_la-floor.Tpo -c -o librecutils_la-floor.lo `test -f 'floor.c' || echo '$(srcdir)/'`floor.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-floor.Tpo $(DEPDIR)/librecutils_la-floor.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='floor.c' object='librecutils_la-floor.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-floor.lo `test -f 'floor.c' || echo '$(srcdir)/'`floor.c librecutils_la-fpending.lo: fpending.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fpending.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fpending.Tpo -c -o librecutils_la-fpending.lo `test -f 'fpending.c' || echo '$(srcdir)/'`fpending.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fpending.Tpo $(DEPDIR)/librecutils_la-fpending.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fpending.c' object='librecutils_la-fpending.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fpending.lo `test -f 'fpending.c' || echo '$(srcdir)/'`fpending.c librecutils_la-free.lo: free.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-free.lo -MD -MP -MF $(DEPDIR)/librecutils_la-free.Tpo -c -o librecutils_la-free.lo `test -f 'free.c' || echo '$(srcdir)/'`free.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-free.Tpo $(DEPDIR)/librecutils_la-free.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='free.c' object='librecutils_la-free.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-free.lo `test -f 'free.c' || echo '$(srcdir)/'`free.c librecutils_la-fseek.lo: fseek.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fseek.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fseek.Tpo -c -o librecutils_la-fseek.lo `test -f 'fseek.c' || echo '$(srcdir)/'`fseek.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fseek.Tpo $(DEPDIR)/librecutils_la-fseek.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fseek.c' object='librecutils_la-fseek.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fseek.lo `test -f 'fseek.c' || echo '$(srcdir)/'`fseek.c librecutils_la-fseeko.lo: fseeko.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fseeko.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fseeko.Tpo -c -o librecutils_la-fseeko.lo `test -f 'fseeko.c' || echo '$(srcdir)/'`fseeko.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fseeko.Tpo $(DEPDIR)/librecutils_la-fseeko.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fseeko.c' object='librecutils_la-fseeko.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fseeko.lo `test -f 'fseeko.c' || echo '$(srcdir)/'`fseeko.c librecutils_la-fseterr.lo: fseterr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fseterr.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fseterr.Tpo -c -o librecutils_la-fseterr.lo `test -f 'fseterr.c' || echo '$(srcdir)/'`fseterr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fseterr.Tpo $(DEPDIR)/librecutils_la-fseterr.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fseterr.c' object='librecutils_la-fseterr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fseterr.lo `test -f 'fseterr.c' || echo '$(srcdir)/'`fseterr.c librecutils_la-fstat.lo: fstat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fstat.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fstat.Tpo -c -o librecutils_la-fstat.lo `test -f 'fstat.c' || echo '$(srcdir)/'`fstat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fstat.Tpo $(DEPDIR)/librecutils_la-fstat.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstat.c' object='librecutils_la-fstat.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fstat.lo `test -f 'fstat.c' || echo '$(srcdir)/'`fstat.c librecutils_la-fstatat.lo: fstatat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fstatat.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fstatat.Tpo -c -o librecutils_la-fstatat.lo `test -f 'fstatat.c' || echo '$(srcdir)/'`fstatat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fstatat.Tpo $(DEPDIR)/librecutils_la-fstatat.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fstatat.c' object='librecutils_la-fstatat.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fstatat.lo `test -f 'fstatat.c' || echo '$(srcdir)/'`fstatat.c librecutils_la-ftell.lo: ftell.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-ftell.lo -MD -MP -MF $(DEPDIR)/librecutils_la-ftell.Tpo -c -o librecutils_la-ftell.lo `test -f 'ftell.c' || echo '$(srcdir)/'`ftell.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-ftell.Tpo $(DEPDIR)/librecutils_la-ftell.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ftell.c' object='librecutils_la-ftell.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-ftell.lo `test -f 'ftell.c' || echo '$(srcdir)/'`ftell.c librecutils_la-ftello.lo: ftello.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-ftello.lo -MD -MP -MF $(DEPDIR)/librecutils_la-ftello.Tpo -c -o librecutils_la-ftello.lo `test -f 'ftello.c' || echo '$(srcdir)/'`ftello.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-ftello.Tpo $(DEPDIR)/librecutils_la-ftello.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ftello.c' object='librecutils_la-ftello.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-ftello.lo `test -f 'ftello.c' || echo '$(srcdir)/'`ftello.c librecutils_la-full-write.lo: full-write.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-full-write.lo -MD -MP -MF $(DEPDIR)/librecutils_la-full-write.Tpo -c -o librecutils_la-full-write.lo `test -f 'full-write.c' || echo '$(srcdir)/'`full-write.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-full-write.Tpo $(DEPDIR)/librecutils_la-full-write.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='full-write.c' object='librecutils_la-full-write.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-full-write.lo `test -f 'full-write.c' || echo '$(srcdir)/'`full-write.c librecutils_la-fwriting.lo: fwriting.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fwriting.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fwriting.Tpo -c -o librecutils_la-fwriting.lo `test -f 'fwriting.c' || echo '$(srcdir)/'`fwriting.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fwriting.Tpo $(DEPDIR)/librecutils_la-fwriting.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fwriting.c' object='librecutils_la-fwriting.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fwriting.lo `test -f 'fwriting.c' || echo '$(srcdir)/'`fwriting.c librecutils_la-getcwd.lo: getcwd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-getcwd.lo -MD -MP -MF $(DEPDIR)/librecutils_la-getcwd.Tpo -c -o librecutils_la-getcwd.lo `test -f 'getcwd.c' || echo '$(srcdir)/'`getcwd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-getcwd.Tpo $(DEPDIR)/librecutils_la-getcwd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getcwd.c' object='librecutils_la-getcwd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-getcwd.lo `test -f 'getcwd.c' || echo '$(srcdir)/'`getcwd.c librecutils_la-getcwd-lgpl.lo: getcwd-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-getcwd-lgpl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-getcwd-lgpl.Tpo -c -o librecutils_la-getcwd-lgpl.lo `test -f 'getcwd-lgpl.c' || echo '$(srcdir)/'`getcwd-lgpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-getcwd-lgpl.Tpo $(DEPDIR)/librecutils_la-getcwd-lgpl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getcwd-lgpl.c' object='librecutils_la-getcwd-lgpl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-getcwd-lgpl.lo `test -f 'getcwd-lgpl.c' || echo '$(srcdir)/'`getcwd-lgpl.c librecutils_la-getdelim.lo: getdelim.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-getdelim.lo -MD -MP -MF $(DEPDIR)/librecutils_la-getdelim.Tpo -c -o librecutils_la-getdelim.lo `test -f 'getdelim.c' || echo '$(srcdir)/'`getdelim.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-getdelim.Tpo $(DEPDIR)/librecutils_la-getdelim.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdelim.c' object='librecutils_la-getdelim.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-getdelim.lo `test -f 'getdelim.c' || echo '$(srcdir)/'`getdelim.c librecutils_la-getdtablesize.lo: getdtablesize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-getdtablesize.lo -MD -MP -MF $(DEPDIR)/librecutils_la-getdtablesize.Tpo -c -o librecutils_la-getdtablesize.lo `test -f 'getdtablesize.c' || echo '$(srcdir)/'`getdtablesize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-getdtablesize.Tpo $(DEPDIR)/librecutils_la-getdtablesize.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getdtablesize.c' object='librecutils_la-getdtablesize.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-getdtablesize.lo `test -f 'getdtablesize.c' || echo '$(srcdir)/'`getdtablesize.c librecutils_la-getgroups.lo: getgroups.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-getgroups.lo -MD -MP -MF $(DEPDIR)/librecutils_la-getgroups.Tpo -c -o librecutils_la-getgroups.lo `test -f 'getgroups.c' || echo '$(srcdir)/'`getgroups.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-getgroups.Tpo $(DEPDIR)/librecutils_la-getgroups.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getgroups.c' object='librecutils_la-getgroups.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-getgroups.lo `test -f 'getgroups.c' || echo '$(srcdir)/'`getgroups.c librecutils_la-getline.lo: getline.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-getline.lo -MD -MP -MF $(DEPDIR)/librecutils_la-getline.Tpo -c -o librecutils_la-getline.lo `test -f 'getline.c' || echo '$(srcdir)/'`getline.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-getline.Tpo $(DEPDIR)/librecutils_la-getline.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getline.c' object='librecutils_la-getline.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-getline.lo `test -f 'getline.c' || echo '$(srcdir)/'`getline.c librecutils_la-getopt.lo: getopt.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-getopt.lo -MD -MP -MF $(DEPDIR)/librecutils_la-getopt.Tpo -c -o librecutils_la-getopt.lo `test -f 'getopt.c' || echo '$(srcdir)/'`getopt.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-getopt.Tpo $(DEPDIR)/librecutils_la-getopt.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getopt.c' object='librecutils_la-getopt.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-getopt.lo `test -f 'getopt.c' || echo '$(srcdir)/'`getopt.c librecutils_la-getopt1.lo: getopt1.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-getopt1.lo -MD -MP -MF $(DEPDIR)/librecutils_la-getopt1.Tpo -c -o librecutils_la-getopt1.lo `test -f 'getopt1.c' || echo '$(srcdir)/'`getopt1.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-getopt1.Tpo $(DEPDIR)/librecutils_la-getopt1.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getopt1.c' object='librecutils_la-getopt1.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-getopt1.lo `test -f 'getopt1.c' || echo '$(srcdir)/'`getopt1.c librecutils_la-getprogname.lo: getprogname.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-getprogname.lo -MD -MP -MF $(DEPDIR)/librecutils_la-getprogname.Tpo -c -o librecutils_la-getprogname.lo `test -f 'getprogname.c' || echo '$(srcdir)/'`getprogname.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-getprogname.Tpo $(DEPDIR)/librecutils_la-getprogname.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getprogname.c' object='librecutils_la-getprogname.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-getprogname.lo `test -f 'getprogname.c' || echo '$(srcdir)/'`getprogname.c librecutils_la-getrandom.lo: getrandom.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-getrandom.lo -MD -MP -MF $(DEPDIR)/librecutils_la-getrandom.Tpo -c -o librecutils_la-getrandom.lo `test -f 'getrandom.c' || echo '$(srcdir)/'`getrandom.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-getrandom.Tpo $(DEPDIR)/librecutils_la-getrandom.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getrandom.c' object='librecutils_la-getrandom.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-getrandom.lo `test -f 'getrandom.c' || echo '$(srcdir)/'`getrandom.c librecutils_la-gettime.lo: gettime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-gettime.lo -MD -MP -MF $(DEPDIR)/librecutils_la-gettime.Tpo -c -o librecutils_la-gettime.lo `test -f 'gettime.c' || echo '$(srcdir)/'`gettime.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-gettime.Tpo $(DEPDIR)/librecutils_la-gettime.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gettime.c' object='librecutils_la-gettime.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-gettime.lo `test -f 'gettime.c' || echo '$(srcdir)/'`gettime.c librecutils_la-gettimeofday.lo: gettimeofday.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-gettimeofday.lo -MD -MP -MF $(DEPDIR)/librecutils_la-gettimeofday.Tpo -c -o librecutils_la-gettimeofday.lo `test -f 'gettimeofday.c' || echo '$(srcdir)/'`gettimeofday.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-gettimeofday.Tpo $(DEPDIR)/librecutils_la-gettimeofday.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gettimeofday.c' object='librecutils_la-gettimeofday.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-gettimeofday.lo `test -f 'gettimeofday.c' || echo '$(srcdir)/'`gettimeofday.c librecutils_la-group-member.lo: group-member.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-group-member.lo -MD -MP -MF $(DEPDIR)/librecutils_la-group-member.Tpo -c -o librecutils_la-group-member.lo `test -f 'group-member.c' || echo '$(srcdir)/'`group-member.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-group-member.Tpo $(DEPDIR)/librecutils_la-group-member.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='group-member.c' object='librecutils_la-group-member.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-group-member.lo `test -f 'group-member.c' || echo '$(srcdir)/'`group-member.c librecutils_la-hard-locale.lo: hard-locale.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-hard-locale.lo -MD -MP -MF $(DEPDIR)/librecutils_la-hard-locale.Tpo -c -o librecutils_la-hard-locale.lo `test -f 'hard-locale.c' || echo '$(srcdir)/'`hard-locale.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-hard-locale.Tpo $(DEPDIR)/librecutils_la-hard-locale.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hard-locale.c' object='librecutils_la-hard-locale.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-hard-locale.lo `test -f 'hard-locale.c' || echo '$(srcdir)/'`hard-locale.c librecutils_la-hash.lo: hash.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-hash.lo -MD -MP -MF $(DEPDIR)/librecutils_la-hash.Tpo -c -o librecutils_la-hash.lo `test -f 'hash.c' || echo '$(srcdir)/'`hash.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-hash.Tpo $(DEPDIR)/librecutils_la-hash.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hash.c' object='librecutils_la-hash.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-hash.lo `test -f 'hash.c' || echo '$(srcdir)/'`hash.c librecutils_la-hash-pjw.lo: hash-pjw.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-hash-pjw.lo -MD -MP -MF $(DEPDIR)/librecutils_la-hash-pjw.Tpo -c -o librecutils_la-hash-pjw.lo `test -f 'hash-pjw.c' || echo '$(srcdir)/'`hash-pjw.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-hash-pjw.Tpo $(DEPDIR)/librecutils_la-hash-pjw.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hash-pjw.c' object='librecutils_la-hash-pjw.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-hash-pjw.lo `test -f 'hash-pjw.c' || echo '$(srcdir)/'`hash-pjw.c librecutils_la-hash-triple-simple.lo: hash-triple-simple.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-hash-triple-simple.lo -MD -MP -MF $(DEPDIR)/librecutils_la-hash-triple-simple.Tpo -c -o librecutils_la-hash-triple-simple.lo `test -f 'hash-triple-simple.c' || echo '$(srcdir)/'`hash-triple-simple.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-hash-triple-simple.Tpo $(DEPDIR)/librecutils_la-hash-triple-simple.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='hash-triple-simple.c' object='librecutils_la-hash-triple-simple.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-hash-triple-simple.lo `test -f 'hash-triple-simple.c' || echo '$(srcdir)/'`hash-triple-simple.c librecutils_la-ialloc.lo: ialloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-ialloc.lo -MD -MP -MF $(DEPDIR)/librecutils_la-ialloc.Tpo -c -o librecutils_la-ialloc.lo `test -f 'ialloc.c' || echo '$(srcdir)/'`ialloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-ialloc.Tpo $(DEPDIR)/librecutils_la-ialloc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='ialloc.c' object='librecutils_la-ialloc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-ialloc.lo `test -f 'ialloc.c' || echo '$(srcdir)/'`ialloc.c librecutils_la-gl_list.lo: gl_list.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-gl_list.lo -MD -MP -MF $(DEPDIR)/librecutils_la-gl_list.Tpo -c -o librecutils_la-gl_list.lo `test -f 'gl_list.c' || echo '$(srcdir)/'`gl_list.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-gl_list.Tpo $(DEPDIR)/librecutils_la-gl_list.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='gl_list.c' object='librecutils_la-gl_list.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-gl_list.lo `test -f 'gl_list.c' || echo '$(srcdir)/'`gl_list.c librecutils_la-localcharset.lo: localcharset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-localcharset.lo -MD -MP -MF $(DEPDIR)/librecutils_la-localcharset.Tpo -c -o librecutils_la-localcharset.lo `test -f 'localcharset.c' || echo '$(srcdir)/'`localcharset.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-localcharset.Tpo $(DEPDIR)/librecutils_la-localcharset.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='localcharset.c' object='librecutils_la-localcharset.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-localcharset.lo `test -f 'localcharset.c' || echo '$(srcdir)/'`localcharset.c librecutils_la-localeconv.lo: localeconv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-localeconv.lo -MD -MP -MF $(DEPDIR)/librecutils_la-localeconv.Tpo -c -o librecutils_la-localeconv.lo `test -f 'localeconv.c' || echo '$(srcdir)/'`localeconv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-localeconv.Tpo $(DEPDIR)/librecutils_la-localeconv.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='localeconv.c' object='librecutils_la-localeconv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-localeconv.lo `test -f 'localeconv.c' || echo '$(srcdir)/'`localeconv.c glthread/librecutils_la-lock.lo: glthread/lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT glthread/librecutils_la-lock.lo -MD -MP -MF glthread/$(DEPDIR)/librecutils_la-lock.Tpo -c -o glthread/librecutils_la-lock.lo `test -f 'glthread/lock.c' || echo '$(srcdir)/'`glthread/lock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/librecutils_la-lock.Tpo glthread/$(DEPDIR)/librecutils_la-lock.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/lock.c' object='glthread/librecutils_la-lock.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o glthread/librecutils_la-lock.lo `test -f 'glthread/lock.c' || echo '$(srcdir)/'`glthread/lock.c librecutils_la-lseek.lo: lseek.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-lseek.lo -MD -MP -MF $(DEPDIR)/librecutils_la-lseek.Tpo -c -o librecutils_la-lseek.lo `test -f 'lseek.c' || echo '$(srcdir)/'`lseek.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-lseek.Tpo $(DEPDIR)/librecutils_la-lseek.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lseek.c' object='librecutils_la-lseek.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-lseek.lo `test -f 'lseek.c' || echo '$(srcdir)/'`lseek.c librecutils_la-lstat.lo: lstat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-lstat.lo -MD -MP -MF $(DEPDIR)/librecutils_la-lstat.Tpo -c -o librecutils_la-lstat.lo `test -f 'lstat.c' || echo '$(srcdir)/'`lstat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-lstat.Tpo $(DEPDIR)/librecutils_la-lstat.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lstat.c' object='librecutils_la-lstat.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-lstat.lo `test -f 'lstat.c' || echo '$(srcdir)/'`lstat.c librecutils_la-malloca.lo: malloca.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-malloca.lo -MD -MP -MF $(DEPDIR)/librecutils_la-malloca.Tpo -c -o librecutils_la-malloca.lo `test -f 'malloca.c' || echo '$(srcdir)/'`malloca.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-malloca.Tpo $(DEPDIR)/librecutils_la-malloca.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloca.c' object='librecutils_la-malloca.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-malloca.lo `test -f 'malloca.c' || echo '$(srcdir)/'`malloca.c librecutils_la-math.lo: math.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-math.lo -MD -MP -MF $(DEPDIR)/librecutils_la-math.Tpo -c -o librecutils_la-math.lo `test -f 'math.c' || echo '$(srcdir)/'`math.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-math.Tpo $(DEPDIR)/librecutils_la-math.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='math.c' object='librecutils_la-math.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-math.lo `test -f 'math.c' || echo '$(srcdir)/'`math.c librecutils_la-mbrlen.lo: mbrlen.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-mbrlen.lo -MD -MP -MF $(DEPDIR)/librecutils_la-mbrlen.Tpo -c -o librecutils_la-mbrlen.lo `test -f 'mbrlen.c' || echo '$(srcdir)/'`mbrlen.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-mbrlen.Tpo $(DEPDIR)/librecutils_la-mbrlen.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbrlen.c' object='librecutils_la-mbrlen.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-mbrlen.lo `test -f 'mbrlen.c' || echo '$(srcdir)/'`mbrlen.c librecutils_la-mbrtowc.lo: mbrtowc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-mbrtowc.lo -MD -MP -MF $(DEPDIR)/librecutils_la-mbrtowc.Tpo -c -o librecutils_la-mbrtowc.lo `test -f 'mbrtowc.c' || echo '$(srcdir)/'`mbrtowc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-mbrtowc.Tpo $(DEPDIR)/librecutils_la-mbrtowc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbrtowc.c' object='librecutils_la-mbrtowc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-mbrtowc.lo `test -f 'mbrtowc.c' || echo '$(srcdir)/'`mbrtowc.c librecutils_la-mbsinit.lo: mbsinit.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-mbsinit.lo -MD -MP -MF $(DEPDIR)/librecutils_la-mbsinit.Tpo -c -o librecutils_la-mbsinit.lo `test -f 'mbsinit.c' || echo '$(srcdir)/'`mbsinit.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-mbsinit.Tpo $(DEPDIR)/librecutils_la-mbsinit.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbsinit.c' object='librecutils_la-mbsinit.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-mbsinit.lo `test -f 'mbsinit.c' || echo '$(srcdir)/'`mbsinit.c librecutils_la-mbtowc.lo: mbtowc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-mbtowc.lo -MD -MP -MF $(DEPDIR)/librecutils_la-mbtowc.Tpo -c -o librecutils_la-mbtowc.lo `test -f 'mbtowc.c' || echo '$(srcdir)/'`mbtowc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-mbtowc.Tpo $(DEPDIR)/librecutils_la-mbtowc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc.c' object='librecutils_la-mbtowc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-mbtowc.lo `test -f 'mbtowc.c' || echo '$(srcdir)/'`mbtowc.c librecutils_la-memchr.lo: memchr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-memchr.lo -MD -MP -MF $(DEPDIR)/librecutils_la-memchr.Tpo -c -o librecutils_la-memchr.lo `test -f 'memchr.c' || echo '$(srcdir)/'`memchr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-memchr.Tpo $(DEPDIR)/librecutils_la-memchr.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memchr.c' object='librecutils_la-memchr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-memchr.lo `test -f 'memchr.c' || echo '$(srcdir)/'`memchr.c librecutils_la-mempcpy.lo: mempcpy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-mempcpy.lo -MD -MP -MF $(DEPDIR)/librecutils_la-mempcpy.Tpo -c -o librecutils_la-mempcpy.lo `test -f 'mempcpy.c' || echo '$(srcdir)/'`mempcpy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-mempcpy.Tpo $(DEPDIR)/librecutils_la-mempcpy.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mempcpy.c' object='librecutils_la-mempcpy.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-mempcpy.lo `test -f 'mempcpy.c' || echo '$(srcdir)/'`mempcpy.c librecutils_la-memrchr.lo: memrchr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-memrchr.lo -MD -MP -MF $(DEPDIR)/librecutils_la-memrchr.Tpo -c -o librecutils_la-memrchr.lo `test -f 'memrchr.c' || echo '$(srcdir)/'`memrchr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-memrchr.Tpo $(DEPDIR)/librecutils_la-memrchr.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='memrchr.c' object='librecutils_la-memrchr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-memrchr.lo `test -f 'memrchr.c' || echo '$(srcdir)/'`memrchr.c librecutils_la-mkdir.lo: mkdir.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-mkdir.lo -MD -MP -MF $(DEPDIR)/librecutils_la-mkdir.Tpo -c -o librecutils_la-mkdir.lo `test -f 'mkdir.c' || echo '$(srcdir)/'`mkdir.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-mkdir.Tpo $(DEPDIR)/librecutils_la-mkdir.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkdir.c' object='librecutils_la-mkdir.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-mkdir.lo `test -f 'mkdir.c' || echo '$(srcdir)/'`mkdir.c librecutils_la-mkostemp.lo: mkostemp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-mkostemp.lo -MD -MP -MF $(DEPDIR)/librecutils_la-mkostemp.Tpo -c -o librecutils_la-mkostemp.lo `test -f 'mkostemp.c' || echo '$(srcdir)/'`mkostemp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-mkostemp.Tpo $(DEPDIR)/librecutils_la-mkostemp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkostemp.c' object='librecutils_la-mkostemp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-mkostemp.lo `test -f 'mkostemp.c' || echo '$(srcdir)/'`mkostemp.c librecutils_la-mkstemp.lo: mkstemp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-mkstemp.lo -MD -MP -MF $(DEPDIR)/librecutils_la-mkstemp.Tpo -c -o librecutils_la-mkstemp.lo `test -f 'mkstemp.c' || echo '$(srcdir)/'`mkstemp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-mkstemp.Tpo $(DEPDIR)/librecutils_la-mkstemp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mkstemp.c' object='librecutils_la-mkstemp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-mkstemp.lo `test -f 'mkstemp.c' || echo '$(srcdir)/'`mkstemp.c librecutils_la-msvc-inval.lo: msvc-inval.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-msvc-inval.lo -MD -MP -MF $(DEPDIR)/librecutils_la-msvc-inval.Tpo -c -o librecutils_la-msvc-inval.lo `test -f 'msvc-inval.c' || echo '$(srcdir)/'`msvc-inval.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-msvc-inval.Tpo $(DEPDIR)/librecutils_la-msvc-inval.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-inval.c' object='librecutils_la-msvc-inval.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-msvc-inval.lo `test -f 'msvc-inval.c' || echo '$(srcdir)/'`msvc-inval.c librecutils_la-msvc-nothrow.lo: msvc-nothrow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-msvc-nothrow.lo -MD -MP -MF $(DEPDIR)/librecutils_la-msvc-nothrow.Tpo -c -o librecutils_la-msvc-nothrow.lo `test -f 'msvc-nothrow.c' || echo '$(srcdir)/'`msvc-nothrow.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-msvc-nothrow.Tpo $(DEPDIR)/librecutils_la-msvc-nothrow.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='msvc-nothrow.c' object='librecutils_la-msvc-nothrow.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-msvc-nothrow.lo `test -f 'msvc-nothrow.c' || echo '$(srcdir)/'`msvc-nothrow.c librecutils_la-nl_langinfo.lo: nl_langinfo.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-nl_langinfo.lo -MD -MP -MF $(DEPDIR)/librecutils_la-nl_langinfo.Tpo -c -o librecutils_la-nl_langinfo.lo `test -f 'nl_langinfo.c' || echo '$(srcdir)/'`nl_langinfo.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-nl_langinfo.Tpo $(DEPDIR)/librecutils_la-nl_langinfo.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nl_langinfo.c' object='librecutils_la-nl_langinfo.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-nl_langinfo.lo `test -f 'nl_langinfo.c' || echo '$(srcdir)/'`nl_langinfo.c librecutils_la-nl_langinfo-lock.lo: nl_langinfo-lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-nl_langinfo-lock.lo -MD -MP -MF $(DEPDIR)/librecutils_la-nl_langinfo-lock.Tpo -c -o librecutils_la-nl_langinfo-lock.lo `test -f 'nl_langinfo-lock.c' || echo '$(srcdir)/'`nl_langinfo-lock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-nl_langinfo-lock.Tpo $(DEPDIR)/librecutils_la-nl_langinfo-lock.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nl_langinfo-lock.c' object='librecutils_la-nl_langinfo-lock.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-nl_langinfo-lock.lo `test -f 'nl_langinfo-lock.c' || echo '$(srcdir)/'`nl_langinfo-lock.c librecutils_la-nstrftime.lo: nstrftime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-nstrftime.lo -MD -MP -MF $(DEPDIR)/librecutils_la-nstrftime.Tpo -c -o librecutils_la-nstrftime.lo `test -f 'nstrftime.c' || echo '$(srcdir)/'`nstrftime.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-nstrftime.Tpo $(DEPDIR)/librecutils_la-nstrftime.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='nstrftime.c' object='librecutils_la-nstrftime.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-nstrftime.lo `test -f 'nstrftime.c' || echo '$(srcdir)/'`nstrftime.c librecutils_la-obstack.lo: obstack.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-obstack.lo -MD -MP -MF $(DEPDIR)/librecutils_la-obstack.Tpo -c -o librecutils_la-obstack.lo `test -f 'obstack.c' || echo '$(srcdir)/'`obstack.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-obstack.Tpo $(DEPDIR)/librecutils_la-obstack.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='obstack.c' object='librecutils_la-obstack.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-obstack.lo `test -f 'obstack.c' || echo '$(srcdir)/'`obstack.c librecutils_la-open.lo: open.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-open.lo -MD -MP -MF $(DEPDIR)/librecutils_la-open.Tpo -c -o librecutils_la-open.lo `test -f 'open.c' || echo '$(srcdir)/'`open.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-open.Tpo $(DEPDIR)/librecutils_la-open.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='open.c' object='librecutils_la-open.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-open.lo `test -f 'open.c' || echo '$(srcdir)/'`open.c librecutils_la-openat.lo: openat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-openat.lo -MD -MP -MF $(DEPDIR)/librecutils_la-openat.Tpo -c -o librecutils_la-openat.lo `test -f 'openat.c' || echo '$(srcdir)/'`openat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-openat.Tpo $(DEPDIR)/librecutils_la-openat.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openat.c' object='librecutils_la-openat.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-openat.lo `test -f 'openat.c' || echo '$(srcdir)/'`openat.c librecutils_la-openat-die.lo: openat-die.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-openat-die.lo -MD -MP -MF $(DEPDIR)/librecutils_la-openat-die.Tpo -c -o librecutils_la-openat-die.lo `test -f 'openat-die.c' || echo '$(srcdir)/'`openat-die.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-openat-die.Tpo $(DEPDIR)/librecutils_la-openat-die.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='openat-die.c' object='librecutils_la-openat-die.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-openat-die.lo `test -f 'openat-die.c' || echo '$(srcdir)/'`openat-die.c librecutils_la-opendir.lo: opendir.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-opendir.lo -MD -MP -MF $(DEPDIR)/librecutils_la-opendir.Tpo -c -o librecutils_la-opendir.lo `test -f 'opendir.c' || echo '$(srcdir)/'`opendir.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-opendir.Tpo $(DEPDIR)/librecutils_la-opendir.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='opendir.c' object='librecutils_la-opendir.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-opendir.lo `test -f 'opendir.c' || echo '$(srcdir)/'`opendir.c librecutils_la-parse-datetime.lo: parse-datetime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-parse-datetime.lo -MD -MP -MF $(DEPDIR)/librecutils_la-parse-datetime.Tpo -c -o librecutils_la-parse-datetime.lo `test -f 'parse-datetime.c' || echo '$(srcdir)/'`parse-datetime.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-parse-datetime.Tpo $(DEPDIR)/librecutils_la-parse-datetime.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='parse-datetime.c' object='librecutils_la-parse-datetime.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-parse-datetime.lo `test -f 'parse-datetime.c' || echo '$(srcdir)/'`parse-datetime.c librecutils_la-pipe.lo: pipe.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-pipe.lo -MD -MP -MF $(DEPDIR)/librecutils_la-pipe.Tpo -c -o librecutils_la-pipe.lo `test -f 'pipe.c' || echo '$(srcdir)/'`pipe.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-pipe.Tpo $(DEPDIR)/librecutils_la-pipe.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipe.c' object='librecutils_la-pipe.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-pipe.lo `test -f 'pipe.c' || echo '$(srcdir)/'`pipe.c librecutils_la-spawn.lo: spawn.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-spawn.lo -MD -MP -MF $(DEPDIR)/librecutils_la-spawn.Tpo -c -o librecutils_la-spawn.lo `test -f 'spawn.c' || echo '$(srcdir)/'`spawn.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-spawn.Tpo $(DEPDIR)/librecutils_la-spawn.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spawn.c' object='librecutils_la-spawn.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-spawn.lo `test -f 'spawn.c' || echo '$(srcdir)/'`spawn.c librecutils_la-spawni.lo: spawni.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-spawni.lo -MD -MP -MF $(DEPDIR)/librecutils_la-spawni.Tpo -c -o librecutils_la-spawni.lo `test -f 'spawni.c' || echo '$(srcdir)/'`spawni.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-spawni.Tpo $(DEPDIR)/librecutils_la-spawni.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spawni.c' object='librecutils_la-spawni.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-spawni.lo `test -f 'spawni.c' || echo '$(srcdir)/'`spawni.c librecutils_la-spawn_faction_addchdir.lo: spawn_faction_addchdir.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-spawn_faction_addchdir.lo -MD -MP -MF $(DEPDIR)/librecutils_la-spawn_faction_addchdir.Tpo -c -o librecutils_la-spawn_faction_addchdir.lo `test -f 'spawn_faction_addchdir.c' || echo '$(srcdir)/'`spawn_faction_addchdir.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-spawn_faction_addchdir.Tpo $(DEPDIR)/librecutils_la-spawn_faction_addchdir.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spawn_faction_addchdir.c' object='librecutils_la-spawn_faction_addchdir.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-spawn_faction_addchdir.lo `test -f 'spawn_faction_addchdir.c' || echo '$(srcdir)/'`spawn_faction_addchdir.c librecutils_la-spawn_faction_addopen.lo: spawn_faction_addopen.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-spawn_faction_addopen.lo -MD -MP -MF $(DEPDIR)/librecutils_la-spawn_faction_addopen.Tpo -c -o librecutils_la-spawn_faction_addopen.lo `test -f 'spawn_faction_addopen.c' || echo '$(srcdir)/'`spawn_faction_addopen.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-spawn_faction_addopen.Tpo $(DEPDIR)/librecutils_la-spawn_faction_addopen.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spawn_faction_addopen.c' object='librecutils_la-spawn_faction_addopen.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-spawn_faction_addopen.lo `test -f 'spawn_faction_addopen.c' || echo '$(srcdir)/'`spawn_faction_addopen.c librecutils_la-spawn_faction_destroy.lo: spawn_faction_destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-spawn_faction_destroy.lo -MD -MP -MF $(DEPDIR)/librecutils_la-spawn_faction_destroy.Tpo -c -o librecutils_la-spawn_faction_destroy.lo `test -f 'spawn_faction_destroy.c' || echo '$(srcdir)/'`spawn_faction_destroy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-spawn_faction_destroy.Tpo $(DEPDIR)/librecutils_la-spawn_faction_destroy.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spawn_faction_destroy.c' object='librecutils_la-spawn_faction_destroy.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-spawn_faction_destroy.lo `test -f 'spawn_faction_destroy.c' || echo '$(srcdir)/'`spawn_faction_destroy.c librecutils_la-spawn_faction_init.lo: spawn_faction_init.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-spawn_faction_init.lo -MD -MP -MF $(DEPDIR)/librecutils_la-spawn_faction_init.Tpo -c -o librecutils_la-spawn_faction_init.lo `test -f 'spawn_faction_init.c' || echo '$(srcdir)/'`spawn_faction_init.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-spawn_faction_init.Tpo $(DEPDIR)/librecutils_la-spawn_faction_init.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spawn_faction_init.c' object='librecutils_la-spawn_faction_init.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-spawn_faction_init.lo `test -f 'spawn_faction_init.c' || echo '$(srcdir)/'`spawn_faction_init.c librecutils_la-spawnattr_destroy.lo: spawnattr_destroy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-spawnattr_destroy.lo -MD -MP -MF $(DEPDIR)/librecutils_la-spawnattr_destroy.Tpo -c -o librecutils_la-spawnattr_destroy.lo `test -f 'spawnattr_destroy.c' || echo '$(srcdir)/'`spawnattr_destroy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-spawnattr_destroy.Tpo $(DEPDIR)/librecutils_la-spawnattr_destroy.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spawnattr_destroy.c' object='librecutils_la-spawnattr_destroy.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-spawnattr_destroy.lo `test -f 'spawnattr_destroy.c' || echo '$(srcdir)/'`spawnattr_destroy.c librecutils_la-spawnattr_init.lo: spawnattr_init.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-spawnattr_init.lo -MD -MP -MF $(DEPDIR)/librecutils_la-spawnattr_init.Tpo -c -o librecutils_la-spawnattr_init.lo `test -f 'spawnattr_init.c' || echo '$(srcdir)/'`spawnattr_init.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-spawnattr_init.Tpo $(DEPDIR)/librecutils_la-spawnattr_init.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spawnattr_init.c' object='librecutils_la-spawnattr_init.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-spawnattr_init.lo `test -f 'spawnattr_init.c' || echo '$(srcdir)/'`spawnattr_init.c librecutils_la-spawnattr_setflags.lo: spawnattr_setflags.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-spawnattr_setflags.lo -MD -MP -MF $(DEPDIR)/librecutils_la-spawnattr_setflags.Tpo -c -o librecutils_la-spawnattr_setflags.lo `test -f 'spawnattr_setflags.c' || echo '$(srcdir)/'`spawnattr_setflags.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-spawnattr_setflags.Tpo $(DEPDIR)/librecutils_la-spawnattr_setflags.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spawnattr_setflags.c' object='librecutils_la-spawnattr_setflags.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-spawnattr_setflags.lo `test -f 'spawnattr_setflags.c' || echo '$(srcdir)/'`spawnattr_setflags.c librecutils_la-spawnattr_setsigmask.lo: spawnattr_setsigmask.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-spawnattr_setsigmask.lo -MD -MP -MF $(DEPDIR)/librecutils_la-spawnattr_setsigmask.Tpo -c -o librecutils_la-spawnattr_setsigmask.lo `test -f 'spawnattr_setsigmask.c' || echo '$(srcdir)/'`spawnattr_setsigmask.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-spawnattr_setsigmask.Tpo $(DEPDIR)/librecutils_la-spawnattr_setsigmask.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spawnattr_setsigmask.c' object='librecutils_la-spawnattr_setsigmask.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-spawnattr_setsigmask.lo `test -f 'spawnattr_setsigmask.c' || echo '$(srcdir)/'`spawnattr_setsigmask.c librecutils_la-spawnp.lo: spawnp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-spawnp.lo -MD -MP -MF $(DEPDIR)/librecutils_la-spawnp.Tpo -c -o librecutils_la-spawnp.lo `test -f 'spawnp.c' || echo '$(srcdir)/'`spawnp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-spawnp.Tpo $(DEPDIR)/librecutils_la-spawnp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='spawnp.c' object='librecutils_la-spawnp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-spawnp.lo `test -f 'spawnp.c' || echo '$(srcdir)/'`spawnp.c librecutils_la-printf-frexp.lo: printf-frexp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-printf-frexp.lo -MD -MP -MF $(DEPDIR)/librecutils_la-printf-frexp.Tpo -c -o librecutils_la-printf-frexp.lo `test -f 'printf-frexp.c' || echo '$(srcdir)/'`printf-frexp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-printf-frexp.Tpo $(DEPDIR)/librecutils_la-printf-frexp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='printf-frexp.c' object='librecutils_la-printf-frexp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-printf-frexp.lo `test -f 'printf-frexp.c' || echo '$(srcdir)/'`printf-frexp.c librecutils_la-printf-frexpl.lo: printf-frexpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-printf-frexpl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-printf-frexpl.Tpo -c -o librecutils_la-printf-frexpl.lo `test -f 'printf-frexpl.c' || echo '$(srcdir)/'`printf-frexpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-printf-frexpl.Tpo $(DEPDIR)/librecutils_la-printf-frexpl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='printf-frexpl.c' object='librecutils_la-printf-frexpl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-printf-frexpl.lo `test -f 'printf-frexpl.c' || echo '$(srcdir)/'`printf-frexpl.c librecutils_la-progname.lo: progname.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-progname.lo -MD -MP -MF $(DEPDIR)/librecutils_la-progname.Tpo -c -o librecutils_la-progname.lo `test -f 'progname.c' || echo '$(srcdir)/'`progname.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-progname.Tpo $(DEPDIR)/librecutils_la-progname.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='progname.c' object='librecutils_la-progname.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-progname.lo `test -f 'progname.c' || echo '$(srcdir)/'`progname.c librecutils_la-qcopy-acl.lo: qcopy-acl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-qcopy-acl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-qcopy-acl.Tpo -c -o librecutils_la-qcopy-acl.lo `test -f 'qcopy-acl.c' || echo '$(srcdir)/'`qcopy-acl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-qcopy-acl.Tpo $(DEPDIR)/librecutils_la-qcopy-acl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='qcopy-acl.c' object='librecutils_la-qcopy-acl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-qcopy-acl.lo `test -f 'qcopy-acl.c' || echo '$(srcdir)/'`qcopy-acl.c librecutils_la-qset-acl.lo: qset-acl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-qset-acl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-qset-acl.Tpo -c -o librecutils_la-qset-acl.lo `test -f 'qset-acl.c' || echo '$(srcdir)/'`qset-acl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-qset-acl.Tpo $(DEPDIR)/librecutils_la-qset-acl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='qset-acl.c' object='librecutils_la-qset-acl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-qset-acl.lo `test -f 'qset-acl.c' || echo '$(srcdir)/'`qset-acl.c librecutils_la-quotearg.lo: quotearg.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-quotearg.lo -MD -MP -MF $(DEPDIR)/librecutils_la-quotearg.Tpo -c -o librecutils_la-quotearg.lo `test -f 'quotearg.c' || echo '$(srcdir)/'`quotearg.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-quotearg.Tpo $(DEPDIR)/librecutils_la-quotearg.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='quotearg.c' object='librecutils_la-quotearg.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-quotearg.lo `test -f 'quotearg.c' || echo '$(srcdir)/'`quotearg.c librecutils_la-raise.lo: raise.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-raise.lo -MD -MP -MF $(DEPDIR)/librecutils_la-raise.Tpo -c -o librecutils_la-raise.lo `test -f 'raise.c' || echo '$(srcdir)/'`raise.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-raise.Tpo $(DEPDIR)/librecutils_la-raise.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='raise.c' object='librecutils_la-raise.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-raise.lo `test -f 'raise.c' || echo '$(srcdir)/'`raise.c librecutils_la-random_r.lo: random_r.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-random_r.lo -MD -MP -MF $(DEPDIR)/librecutils_la-random_r.Tpo -c -o librecutils_la-random_r.lo `test -f 'random_r.c' || echo '$(srcdir)/'`random_r.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-random_r.Tpo $(DEPDIR)/librecutils_la-random_r.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='random_r.c' object='librecutils_la-random_r.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-random_r.lo `test -f 'random_r.c' || echo '$(srcdir)/'`random_r.c librecutils_la-rawmemchr.lo: rawmemchr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-rawmemchr.lo -MD -MP -MF $(DEPDIR)/librecutils_la-rawmemchr.Tpo -c -o librecutils_la-rawmemchr.lo `test -f 'rawmemchr.c' || echo '$(srcdir)/'`rawmemchr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-rawmemchr.Tpo $(DEPDIR)/librecutils_la-rawmemchr.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rawmemchr.c' object='librecutils_la-rawmemchr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-rawmemchr.lo `test -f 'rawmemchr.c' || echo '$(srcdir)/'`rawmemchr.c librecutils_la-read.lo: read.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-read.lo -MD -MP -MF $(DEPDIR)/librecutils_la-read.Tpo -c -o librecutils_la-read.lo `test -f 'read.c' || echo '$(srcdir)/'`read.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-read.Tpo $(DEPDIR)/librecutils_la-read.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='read.c' object='librecutils_la-read.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-read.lo `test -f 'read.c' || echo '$(srcdir)/'`read.c librecutils_la-read-file.lo: read-file.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-read-file.lo -MD -MP -MF $(DEPDIR)/librecutils_la-read-file.Tpo -c -o librecutils_la-read-file.lo `test -f 'read-file.c' || echo '$(srcdir)/'`read-file.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-read-file.Tpo $(DEPDIR)/librecutils_la-read-file.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='read-file.c' object='librecutils_la-read-file.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-read-file.lo `test -f 'read-file.c' || echo '$(srcdir)/'`read-file.c librecutils_la-readdir.lo: readdir.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-readdir.lo -MD -MP -MF $(DEPDIR)/librecutils_la-readdir.Tpo -c -o librecutils_la-readdir.lo `test -f 'readdir.c' || echo '$(srcdir)/'`readdir.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-readdir.Tpo $(DEPDIR)/librecutils_la-readdir.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='readdir.c' object='librecutils_la-readdir.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-readdir.lo `test -f 'readdir.c' || echo '$(srcdir)/'`readdir.c librecutils_la-readline.lo: readline.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-readline.lo -MD -MP -MF $(DEPDIR)/librecutils_la-readline.Tpo -c -o librecutils_la-readline.lo `test -f 'readline.c' || echo '$(srcdir)/'`readline.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-readline.Tpo $(DEPDIR)/librecutils_la-readline.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='readline.c' object='librecutils_la-readline.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-readline.lo `test -f 'readline.c' || echo '$(srcdir)/'`readline.c librecutils_la-readlink.lo: readlink.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-readlink.lo -MD -MP -MF $(DEPDIR)/librecutils_la-readlink.Tpo -c -o librecutils_la-readlink.lo `test -f 'readlink.c' || echo '$(srcdir)/'`readlink.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-readlink.Tpo $(DEPDIR)/librecutils_la-readlink.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='readlink.c' object='librecutils_la-readlink.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-readlink.lo `test -f 'readlink.c' || echo '$(srcdir)/'`readlink.c librecutils_la-reallocarray.lo: reallocarray.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-reallocarray.lo -MD -MP -MF $(DEPDIR)/librecutils_la-reallocarray.Tpo -c -o librecutils_la-reallocarray.lo `test -f 'reallocarray.c' || echo '$(srcdir)/'`reallocarray.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-reallocarray.Tpo $(DEPDIR)/librecutils_la-reallocarray.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='reallocarray.c' object='librecutils_la-reallocarray.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-reallocarray.lo `test -f 'reallocarray.c' || echo '$(srcdir)/'`reallocarray.c librecutils_la-regex.lo: regex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-regex.lo -MD -MP -MF $(DEPDIR)/librecutils_la-regex.Tpo -c -o librecutils_la-regex.lo `test -f 'regex.c' || echo '$(srcdir)/'`regex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-regex.Tpo $(DEPDIR)/librecutils_la-regex.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regex.c' object='librecutils_la-regex.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-regex.lo `test -f 'regex.c' || echo '$(srcdir)/'`regex.c librecutils_la-remove.lo: remove.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-remove.lo -MD -MP -MF $(DEPDIR)/librecutils_la-remove.Tpo -c -o librecutils_la-remove.lo `test -f 'remove.c' || echo '$(srcdir)/'`remove.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-remove.Tpo $(DEPDIR)/librecutils_la-remove.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='remove.c' object='librecutils_la-remove.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-remove.lo `test -f 'remove.c' || echo '$(srcdir)/'`remove.c librecutils_la-rename.lo: rename.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-rename.lo -MD -MP -MF $(DEPDIR)/librecutils_la-rename.Tpo -c -o librecutils_la-rename.lo `test -f 'rename.c' || echo '$(srcdir)/'`rename.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-rename.Tpo $(DEPDIR)/librecutils_la-rename.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rename.c' object='librecutils_la-rename.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-rename.lo `test -f 'rename.c' || echo '$(srcdir)/'`rename.c librecutils_la-rewinddir.lo: rewinddir.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-rewinddir.lo -MD -MP -MF $(DEPDIR)/librecutils_la-rewinddir.Tpo -c -o librecutils_la-rewinddir.lo `test -f 'rewinddir.c' || echo '$(srcdir)/'`rewinddir.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-rewinddir.Tpo $(DEPDIR)/librecutils_la-rewinddir.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rewinddir.c' object='librecutils_la-rewinddir.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-rewinddir.lo `test -f 'rewinddir.c' || echo '$(srcdir)/'`rewinddir.c librecutils_la-rmdir.lo: rmdir.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-rmdir.lo -MD -MP -MF $(DEPDIR)/librecutils_la-rmdir.Tpo -c -o librecutils_la-rmdir.lo `test -f 'rmdir.c' || echo '$(srcdir)/'`rmdir.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-rmdir.Tpo $(DEPDIR)/librecutils_la-rmdir.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='rmdir.c' object='librecutils_la-rmdir.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-rmdir.lo `test -f 'rmdir.c' || echo '$(srcdir)/'`rmdir.c librecutils_la-safe-read.lo: safe-read.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-safe-read.lo -MD -MP -MF $(DEPDIR)/librecutils_la-safe-read.Tpo -c -o librecutils_la-safe-read.lo `test -f 'safe-read.c' || echo '$(srcdir)/'`safe-read.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-safe-read.Tpo $(DEPDIR)/librecutils_la-safe-read.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='safe-read.c' object='librecutils_la-safe-read.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-safe-read.lo `test -f 'safe-read.c' || echo '$(srcdir)/'`safe-read.c librecutils_la-safe-write.lo: safe-write.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-safe-write.lo -MD -MP -MF $(DEPDIR)/librecutils_la-safe-write.Tpo -c -o librecutils_la-safe-write.lo `test -f 'safe-write.c' || echo '$(srcdir)/'`safe-write.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-safe-write.Tpo $(DEPDIR)/librecutils_la-safe-write.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='safe-write.c' object='librecutils_la-safe-write.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-safe-write.lo `test -f 'safe-write.c' || echo '$(srcdir)/'`safe-write.c librecutils_la-save-cwd.lo: save-cwd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-save-cwd.lo -MD -MP -MF $(DEPDIR)/librecutils_la-save-cwd.Tpo -c -o librecutils_la-save-cwd.lo `test -f 'save-cwd.c' || echo '$(srcdir)/'`save-cwd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-save-cwd.Tpo $(DEPDIR)/librecutils_la-save-cwd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='save-cwd.c' object='librecutils_la-save-cwd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-save-cwd.lo `test -f 'save-cwd.c' || echo '$(srcdir)/'`save-cwd.c malloc/librecutils_la-scratch_buffer_dupfree.lo: malloc/scratch_buffer_dupfree.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT malloc/librecutils_la-scratch_buffer_dupfree.lo -MD -MP -MF malloc/$(DEPDIR)/librecutils_la-scratch_buffer_dupfree.Tpo -c -o malloc/librecutils_la-scratch_buffer_dupfree.lo `test -f 'malloc/scratch_buffer_dupfree.c' || echo '$(srcdir)/'`malloc/scratch_buffer_dupfree.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/librecutils_la-scratch_buffer_dupfree.Tpo malloc/$(DEPDIR)/librecutils_la-scratch_buffer_dupfree.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_dupfree.c' object='malloc/librecutils_la-scratch_buffer_dupfree.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o malloc/librecutils_la-scratch_buffer_dupfree.lo `test -f 'malloc/scratch_buffer_dupfree.c' || echo '$(srcdir)/'`malloc/scratch_buffer_dupfree.c malloc/librecutils_la-scratch_buffer_grow.lo: malloc/scratch_buffer_grow.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT malloc/librecutils_la-scratch_buffer_grow.lo -MD -MP -MF malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow.Tpo -c -o malloc/librecutils_la-scratch_buffer_grow.lo `test -f 'malloc/scratch_buffer_grow.c' || echo '$(srcdir)/'`malloc/scratch_buffer_grow.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow.Tpo malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_grow.c' object='malloc/librecutils_la-scratch_buffer_grow.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o malloc/librecutils_la-scratch_buffer_grow.lo `test -f 'malloc/scratch_buffer_grow.c' || echo '$(srcdir)/'`malloc/scratch_buffer_grow.c malloc/librecutils_la-scratch_buffer_grow_preserve.lo: malloc/scratch_buffer_grow_preserve.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT malloc/librecutils_la-scratch_buffer_grow_preserve.lo -MD -MP -MF malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow_preserve.Tpo -c -o malloc/librecutils_la-scratch_buffer_grow_preserve.lo `test -f 'malloc/scratch_buffer_grow_preserve.c' || echo '$(srcdir)/'`malloc/scratch_buffer_grow_preserve.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow_preserve.Tpo malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow_preserve.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_grow_preserve.c' object='malloc/librecutils_la-scratch_buffer_grow_preserve.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o malloc/librecutils_la-scratch_buffer_grow_preserve.lo `test -f 'malloc/scratch_buffer_grow_preserve.c' || echo '$(srcdir)/'`malloc/scratch_buffer_grow_preserve.c malloc/librecutils_la-scratch_buffer_set_array_size.lo: malloc/scratch_buffer_set_array_size.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT malloc/librecutils_la-scratch_buffer_set_array_size.lo -MD -MP -MF malloc/$(DEPDIR)/librecutils_la-scratch_buffer_set_array_size.Tpo -c -o malloc/librecutils_la-scratch_buffer_set_array_size.lo `test -f 'malloc/scratch_buffer_set_array_size.c' || echo '$(srcdir)/'`malloc/scratch_buffer_set_array_size.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/librecutils_la-scratch_buffer_set_array_size.Tpo malloc/$(DEPDIR)/librecutils_la-scratch_buffer_set_array_size.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/scratch_buffer_set_array_size.c' object='malloc/librecutils_la-scratch_buffer_set_array_size.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o malloc/librecutils_la-scratch_buffer_set_array_size.lo `test -f 'malloc/scratch_buffer_set_array_size.c' || echo '$(srcdir)/'`malloc/scratch_buffer_set_array_size.c librecutils_la-secure_getenv.lo: secure_getenv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-secure_getenv.lo -MD -MP -MF $(DEPDIR)/librecutils_la-secure_getenv.Tpo -c -o librecutils_la-secure_getenv.lo `test -f 'secure_getenv.c' || echo '$(srcdir)/'`secure_getenv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-secure_getenv.Tpo $(DEPDIR)/librecutils_la-secure_getenv.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='secure_getenv.c' object='librecutils_la-secure_getenv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-secure_getenv.lo `test -f 'secure_getenv.c' || echo '$(srcdir)/'`secure_getenv.c librecutils_la-getfilecon.lo: getfilecon.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-getfilecon.lo -MD -MP -MF $(DEPDIR)/librecutils_la-getfilecon.Tpo -c -o librecutils_la-getfilecon.lo `test -f 'getfilecon.c' || echo '$(srcdir)/'`getfilecon.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-getfilecon.Tpo $(DEPDIR)/librecutils_la-getfilecon.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getfilecon.c' object='librecutils_la-getfilecon.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-getfilecon.lo `test -f 'getfilecon.c' || echo '$(srcdir)/'`getfilecon.c librecutils_la-se-context.lo: se-context.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-se-context.lo -MD -MP -MF $(DEPDIR)/librecutils_la-se-context.Tpo -c -o librecutils_la-se-context.lo `test -f 'se-context.c' || echo '$(srcdir)/'`se-context.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-se-context.Tpo $(DEPDIR)/librecutils_la-se-context.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='se-context.c' object='librecutils_la-se-context.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-se-context.lo `test -f 'se-context.c' || echo '$(srcdir)/'`se-context.c librecutils_la-se-label.lo: se-label.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-se-label.lo -MD -MP -MF $(DEPDIR)/librecutils_la-se-label.Tpo -c -o librecutils_la-se-label.lo `test -f 'se-label.c' || echo '$(srcdir)/'`se-label.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-se-label.Tpo $(DEPDIR)/librecutils_la-se-label.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='se-label.c' object='librecutils_la-se-label.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-se-label.lo `test -f 'se-label.c' || echo '$(srcdir)/'`se-label.c librecutils_la-se-selinux.lo: se-selinux.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-se-selinux.lo -MD -MP -MF $(DEPDIR)/librecutils_la-se-selinux.Tpo -c -o librecutils_la-se-selinux.lo `test -f 'se-selinux.c' || echo '$(srcdir)/'`se-selinux.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-se-selinux.Tpo $(DEPDIR)/librecutils_la-se-selinux.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='se-selinux.c' object='librecutils_la-se-selinux.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-se-selinux.lo `test -f 'se-selinux.c' || echo '$(srcdir)/'`se-selinux.c librecutils_la-setenv.lo: setenv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-setenv.lo -MD -MP -MF $(DEPDIR)/librecutils_la-setenv.Tpo -c -o librecutils_la-setenv.lo `test -f 'setenv.c' || echo '$(srcdir)/'`setenv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-setenv.Tpo $(DEPDIR)/librecutils_la-setenv.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setenv.c' object='librecutils_la-setenv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-setenv.lo `test -f 'setenv.c' || echo '$(srcdir)/'`setenv.c librecutils_la-setlocale_null.lo: setlocale_null.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-setlocale_null.lo -MD -MP -MF $(DEPDIR)/librecutils_la-setlocale_null.Tpo -c -o librecutils_la-setlocale_null.lo `test -f 'setlocale_null.c' || echo '$(srcdir)/'`setlocale_null.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-setlocale_null.Tpo $(DEPDIR)/librecutils_la-setlocale_null.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale_null.c' object='librecutils_la-setlocale_null.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-setlocale_null.lo `test -f 'setlocale_null.c' || echo '$(srcdir)/'`setlocale_null.c librecutils_la-setlocale-lock.lo: setlocale-lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-setlocale-lock.lo -MD -MP -MF $(DEPDIR)/librecutils_la-setlocale-lock.Tpo -c -o librecutils_la-setlocale-lock.lo `test -f 'setlocale-lock.c' || echo '$(srcdir)/'`setlocale-lock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-setlocale-lock.Tpo $(DEPDIR)/librecutils_la-setlocale-lock.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='setlocale-lock.c' object='librecutils_la-setlocale-lock.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-setlocale-lock.lo `test -f 'setlocale-lock.c' || echo '$(srcdir)/'`setlocale-lock.c librecutils_la-sigaction.lo: sigaction.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-sigaction.lo -MD -MP -MF $(DEPDIR)/librecutils_la-sigaction.Tpo -c -o librecutils_la-sigaction.lo `test -f 'sigaction.c' || echo '$(srcdir)/'`sigaction.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-sigaction.Tpo $(DEPDIR)/librecutils_la-sigaction.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sigaction.c' object='librecutils_la-sigaction.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-sigaction.lo `test -f 'sigaction.c' || echo '$(srcdir)/'`sigaction.c librecutils_la-sig-handler.lo: sig-handler.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-sig-handler.lo -MD -MP -MF $(DEPDIR)/librecutils_la-sig-handler.Tpo -c -o librecutils_la-sig-handler.lo `test -f 'sig-handler.c' || echo '$(srcdir)/'`sig-handler.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-sig-handler.Tpo $(DEPDIR)/librecutils_la-sig-handler.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sig-handler.c' object='librecutils_la-sig-handler.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-sig-handler.lo `test -f 'sig-handler.c' || echo '$(srcdir)/'`sig-handler.c librecutils_la-signbitf.lo: signbitf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-signbitf.lo -MD -MP -MF $(DEPDIR)/librecutils_la-signbitf.Tpo -c -o librecutils_la-signbitf.lo `test -f 'signbitf.c' || echo '$(srcdir)/'`signbitf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-signbitf.Tpo $(DEPDIR)/librecutils_la-signbitf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='signbitf.c' object='librecutils_la-signbitf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-signbitf.lo `test -f 'signbitf.c' || echo '$(srcdir)/'`signbitf.c librecutils_la-signbitd.lo: signbitd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-signbitd.lo -MD -MP -MF $(DEPDIR)/librecutils_la-signbitd.Tpo -c -o librecutils_la-signbitd.lo `test -f 'signbitd.c' || echo '$(srcdir)/'`signbitd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-signbitd.Tpo $(DEPDIR)/librecutils_la-signbitd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='signbitd.c' object='librecutils_la-signbitd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-signbitd.lo `test -f 'signbitd.c' || echo '$(srcdir)/'`signbitd.c librecutils_la-signbitl.lo: signbitl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-signbitl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-signbitl.Tpo -c -o librecutils_la-signbitl.lo `test -f 'signbitl.c' || echo '$(srcdir)/'`signbitl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-signbitl.Tpo $(DEPDIR)/librecutils_la-signbitl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='signbitl.c' object='librecutils_la-signbitl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-signbitl.lo `test -f 'signbitl.c' || echo '$(srcdir)/'`signbitl.c librecutils_la-sigprocmask.lo: sigprocmask.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-sigprocmask.lo -MD -MP -MF $(DEPDIR)/librecutils_la-sigprocmask.Tpo -c -o librecutils_la-sigprocmask.lo `test -f 'sigprocmask.c' || echo '$(srcdir)/'`sigprocmask.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-sigprocmask.Tpo $(DEPDIR)/librecutils_la-sigprocmask.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='sigprocmask.c' object='librecutils_la-sigprocmask.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-sigprocmask.lo `test -f 'sigprocmask.c' || echo '$(srcdir)/'`sigprocmask.c librecutils_la-stat.lo: stat.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-stat.lo -MD -MP -MF $(DEPDIR)/librecutils_la-stat.Tpo -c -o librecutils_la-stat.lo `test -f 'stat.c' || echo '$(srcdir)/'`stat.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-stat.Tpo $(DEPDIR)/librecutils_la-stat.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat.c' object='librecutils_la-stat.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-stat.lo `test -f 'stat.c' || echo '$(srcdir)/'`stat.c librecutils_la-stat-time.lo: stat-time.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-stat-time.lo -MD -MP -MF $(DEPDIR)/librecutils_la-stat-time.Tpo -c -o librecutils_la-stat-time.lo `test -f 'stat-time.c' || echo '$(srcdir)/'`stat-time.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-stat-time.Tpo $(DEPDIR)/librecutils_la-stat-time.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-time.c' object='librecutils_la-stat-time.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-stat-time.lo `test -f 'stat-time.c' || echo '$(srcdir)/'`stat-time.c librecutils_la-stdio-read.lo: stdio-read.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-stdio-read.lo -MD -MP -MF $(DEPDIR)/librecutils_la-stdio-read.Tpo -c -o librecutils_la-stdio-read.lo `test -f 'stdio-read.c' || echo '$(srcdir)/'`stdio-read.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-stdio-read.Tpo $(DEPDIR)/librecutils_la-stdio-read.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-read.c' object='librecutils_la-stdio-read.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-stdio-read.lo `test -f 'stdio-read.c' || echo '$(srcdir)/'`stdio-read.c librecutils_la-stdio-write.lo: stdio-write.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-stdio-write.lo -MD -MP -MF $(DEPDIR)/librecutils_la-stdio-write.Tpo -c -o librecutils_la-stdio-write.lo `test -f 'stdio-write.c' || echo '$(srcdir)/'`stdio-write.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-stdio-write.Tpo $(DEPDIR)/librecutils_la-stdio-write.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stdio-write.c' object='librecutils_la-stdio-write.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-stdio-write.lo `test -f 'stdio-write.c' || echo '$(srcdir)/'`stdio-write.c librecutils_la-stpcpy.lo: stpcpy.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-stpcpy.lo -MD -MP -MF $(DEPDIR)/librecutils_la-stpcpy.Tpo -c -o librecutils_la-stpcpy.lo `test -f 'stpcpy.c' || echo '$(srcdir)/'`stpcpy.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-stpcpy.Tpo $(DEPDIR)/librecutils_la-stpcpy.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stpcpy.c' object='librecutils_la-stpcpy.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-stpcpy.lo `test -f 'stpcpy.c' || echo '$(srcdir)/'`stpcpy.c librecutils_la-strcasecmp.lo: strcasecmp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-strcasecmp.lo -MD -MP -MF $(DEPDIR)/librecutils_la-strcasecmp.Tpo -c -o librecutils_la-strcasecmp.lo `test -f 'strcasecmp.c' || echo '$(srcdir)/'`strcasecmp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-strcasecmp.Tpo $(DEPDIR)/librecutils_la-strcasecmp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strcasecmp.c' object='librecutils_la-strcasecmp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-strcasecmp.lo `test -f 'strcasecmp.c' || echo '$(srcdir)/'`strcasecmp.c librecutils_la-strncasecmp.lo: strncasecmp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-strncasecmp.lo -MD -MP -MF $(DEPDIR)/librecutils_la-strncasecmp.Tpo -c -o librecutils_la-strncasecmp.lo `test -f 'strncasecmp.c' || echo '$(srcdir)/'`strncasecmp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-strncasecmp.Tpo $(DEPDIR)/librecutils_la-strncasecmp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strncasecmp.c' object='librecutils_la-strncasecmp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-strncasecmp.lo `test -f 'strncasecmp.c' || echo '$(srcdir)/'`strncasecmp.c librecutils_la-strchrnul.lo: strchrnul.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-strchrnul.lo -MD -MP -MF $(DEPDIR)/librecutils_la-strchrnul.Tpo -c -o librecutils_la-strchrnul.lo `test -f 'strchrnul.c' || echo '$(srcdir)/'`strchrnul.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-strchrnul.Tpo $(DEPDIR)/librecutils_la-strchrnul.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strchrnul.c' object='librecutils_la-strchrnul.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-strchrnul.lo `test -f 'strchrnul.c' || echo '$(srcdir)/'`strchrnul.c librecutils_la-strdup.lo: strdup.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-strdup.lo -MD -MP -MF $(DEPDIR)/librecutils_la-strdup.Tpo -c -o librecutils_la-strdup.lo `test -f 'strdup.c' || echo '$(srcdir)/'`strdup.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-strdup.Tpo $(DEPDIR)/librecutils_la-strdup.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strdup.c' object='librecutils_la-strdup.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-strdup.lo `test -f 'strdup.c' || echo '$(srcdir)/'`strdup.c librecutils_la-strerror.lo: strerror.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-strerror.lo -MD -MP -MF $(DEPDIR)/librecutils_la-strerror.Tpo -c -o librecutils_la-strerror.lo `test -f 'strerror.c' || echo '$(srcdir)/'`strerror.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-strerror.Tpo $(DEPDIR)/librecutils_la-strerror.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror.c' object='librecutils_la-strerror.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-strerror.lo `test -f 'strerror.c' || echo '$(srcdir)/'`strerror.c librecutils_la-strerror-override.lo: strerror-override.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-strerror-override.lo -MD -MP -MF $(DEPDIR)/librecutils_la-strerror-override.Tpo -c -o librecutils_la-strerror-override.lo `test -f 'strerror-override.c' || echo '$(srcdir)/'`strerror-override.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-strerror-override.Tpo $(DEPDIR)/librecutils_la-strerror-override.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strerror-override.c' object='librecutils_la-strerror-override.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-strerror-override.lo `test -f 'strerror-override.c' || echo '$(srcdir)/'`strerror-override.c librecutils_la-strsep.lo: strsep.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-strsep.lo -MD -MP -MF $(DEPDIR)/librecutils_la-strsep.Tpo -c -o librecutils_la-strsep.lo `test -f 'strsep.c' || echo '$(srcdir)/'`strsep.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-strsep.Tpo $(DEPDIR)/librecutils_la-strsep.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strsep.c' object='librecutils_la-strsep.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-strsep.lo `test -f 'strsep.c' || echo '$(srcdir)/'`strsep.c librecutils_la-strverscmp.lo: strverscmp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-strverscmp.lo -MD -MP -MF $(DEPDIR)/librecutils_la-strverscmp.Tpo -c -o librecutils_la-strverscmp.lo `test -f 'strverscmp.c' || echo '$(srcdir)/'`strverscmp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-strverscmp.Tpo $(DEPDIR)/librecutils_la-strverscmp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strverscmp.c' object='librecutils_la-strverscmp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-strverscmp.lo `test -f 'strverscmp.c' || echo '$(srcdir)/'`strverscmp.c librecutils_la-tempname.lo: tempname.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-tempname.lo -MD -MP -MF $(DEPDIR)/librecutils_la-tempname.Tpo -c -o librecutils_la-tempname.lo `test -f 'tempname.c' || echo '$(srcdir)/'`tempname.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-tempname.Tpo $(DEPDIR)/librecutils_la-tempname.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tempname.c' object='librecutils_la-tempname.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-tempname.lo `test -f 'tempname.c' || echo '$(srcdir)/'`tempname.c glthread/librecutils_la-threadlib.lo: glthread/threadlib.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT glthread/librecutils_la-threadlib.lo -MD -MP -MF glthread/$(DEPDIR)/librecutils_la-threadlib.Tpo -c -o glthread/librecutils_la-threadlib.lo `test -f 'glthread/threadlib.c' || echo '$(srcdir)/'`glthread/threadlib.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) glthread/$(DEPDIR)/librecutils_la-threadlib.Tpo glthread/$(DEPDIR)/librecutils_la-threadlib.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='glthread/threadlib.c' object='glthread/librecutils_la-threadlib.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o glthread/librecutils_la-threadlib.lo `test -f 'glthread/threadlib.c' || echo '$(srcdir)/'`glthread/threadlib.c librecutils_la-time_r.lo: time_r.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-time_r.lo -MD -MP -MF $(DEPDIR)/librecutils_la-time_r.Tpo -c -o librecutils_la-time_r.lo `test -f 'time_r.c' || echo '$(srcdir)/'`time_r.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-time_r.Tpo $(DEPDIR)/librecutils_la-time_r.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='time_r.c' object='librecutils_la-time_r.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-time_r.lo `test -f 'time_r.c' || echo '$(srcdir)/'`time_r.c librecutils_la-time_rz.lo: time_rz.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-time_rz.lo -MD -MP -MF $(DEPDIR)/librecutils_la-time_rz.Tpo -c -o librecutils_la-time_rz.lo `test -f 'time_rz.c' || echo '$(srcdir)/'`time_rz.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-time_rz.Tpo $(DEPDIR)/librecutils_la-time_rz.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='time_rz.c' object='librecutils_la-time_rz.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-time_rz.lo `test -f 'time_rz.c' || echo '$(srcdir)/'`time_rz.c librecutils_la-timegm.lo: timegm.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-timegm.lo -MD -MP -MF $(DEPDIR)/librecutils_la-timegm.Tpo -c -o librecutils_la-timegm.lo `test -f 'timegm.c' || echo '$(srcdir)/'`timegm.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-timegm.Tpo $(DEPDIR)/librecutils_la-timegm.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='timegm.c' object='librecutils_la-timegm.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-timegm.lo `test -f 'timegm.c' || echo '$(srcdir)/'`timegm.c librecutils_la-timespec.lo: timespec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-timespec.lo -MD -MP -MF $(DEPDIR)/librecutils_la-timespec.Tpo -c -o librecutils_la-timespec.lo `test -f 'timespec.c' || echo '$(srcdir)/'`timespec.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-timespec.Tpo $(DEPDIR)/librecutils_la-timespec.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='timespec.c' object='librecutils_la-timespec.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-timespec.lo `test -f 'timespec.c' || echo '$(srcdir)/'`timespec.c librecutils_la-tmpdir.lo: tmpdir.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-tmpdir.lo -MD -MP -MF $(DEPDIR)/librecutils_la-tmpdir.Tpo -c -o librecutils_la-tmpdir.lo `test -f 'tmpdir.c' || echo '$(srcdir)/'`tmpdir.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-tmpdir.Tpo $(DEPDIR)/librecutils_la-tmpdir.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tmpdir.c' object='librecutils_la-tmpdir.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-tmpdir.lo `test -f 'tmpdir.c' || echo '$(srcdir)/'`tmpdir.c librecutils_la-tzset.lo: tzset.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-tzset.lo -MD -MP -MF $(DEPDIR)/librecutils_la-tzset.Tpo -c -o librecutils_la-tzset.lo `test -f 'tzset.c' || echo '$(srcdir)/'`tzset.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-tzset.Tpo $(DEPDIR)/librecutils_la-tzset.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='tzset.c' object='librecutils_la-tzset.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-tzset.lo `test -f 'tzset.c' || echo '$(srcdir)/'`tzset.c librecutils_la-unistd.lo: unistd.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-unistd.lo -MD -MP -MF $(DEPDIR)/librecutils_la-unistd.Tpo -c -o librecutils_la-unistd.lo `test -f 'unistd.c' || echo '$(srcdir)/'`unistd.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-unistd.Tpo $(DEPDIR)/librecutils_la-unistd.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unistd.c' object='librecutils_la-unistd.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-unistd.lo `test -f 'unistd.c' || echo '$(srcdir)/'`unistd.c librecutils_la-dup-safer.lo: dup-safer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-dup-safer.lo -MD -MP -MF $(DEPDIR)/librecutils_la-dup-safer.Tpo -c -o librecutils_la-dup-safer.lo `test -f 'dup-safer.c' || echo '$(srcdir)/'`dup-safer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-dup-safer.Tpo $(DEPDIR)/librecutils_la-dup-safer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='dup-safer.c' object='librecutils_la-dup-safer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-dup-safer.lo `test -f 'dup-safer.c' || echo '$(srcdir)/'`dup-safer.c librecutils_la-fd-safer.lo: fd-safer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fd-safer.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fd-safer.Tpo -c -o librecutils_la-fd-safer.lo `test -f 'fd-safer.c' || echo '$(srcdir)/'`fd-safer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fd-safer.Tpo $(DEPDIR)/librecutils_la-fd-safer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fd-safer.c' object='librecutils_la-fd-safer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fd-safer.lo `test -f 'fd-safer.c' || echo '$(srcdir)/'`fd-safer.c librecutils_la-pipe-safer.lo: pipe-safer.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-pipe-safer.lo -MD -MP -MF $(DEPDIR)/librecutils_la-pipe-safer.Tpo -c -o librecutils_la-pipe-safer.lo `test -f 'pipe-safer.c' || echo '$(srcdir)/'`pipe-safer.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-pipe-safer.Tpo $(DEPDIR)/librecutils_la-pipe-safer.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='pipe-safer.c' object='librecutils_la-pipe-safer.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-pipe-safer.lo `test -f 'pipe-safer.c' || echo '$(srcdir)/'`pipe-safer.c librecutils_la-unlink.lo: unlink.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-unlink.lo -MD -MP -MF $(DEPDIR)/librecutils_la-unlink.Tpo -c -o librecutils_la-unlink.lo `test -f 'unlink.c' || echo '$(srcdir)/'`unlink.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-unlink.Tpo $(DEPDIR)/librecutils_la-unlink.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unlink.c' object='librecutils_la-unlink.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-unlink.lo `test -f 'unlink.c' || echo '$(srcdir)/'`unlink.c librecutils_la-unsetenv.lo: unsetenv.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-unsetenv.lo -MD -MP -MF $(DEPDIR)/librecutils_la-unsetenv.Tpo -c -o librecutils_la-unsetenv.lo `test -f 'unsetenv.c' || echo '$(srcdir)/'`unsetenv.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-unsetenv.Tpo $(DEPDIR)/librecutils_la-unsetenv.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='unsetenv.c' object='librecutils_la-unsetenv.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-unsetenv.lo `test -f 'unsetenv.c' || echo '$(srcdir)/'`unsetenv.c librecutils_la-utime.lo: utime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-utime.lo -MD -MP -MF $(DEPDIR)/librecutils_la-utime.Tpo -c -o librecutils_la-utime.lo `test -f 'utime.c' || echo '$(srcdir)/'`utime.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-utime.Tpo $(DEPDIR)/librecutils_la-utime.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utime.c' object='librecutils_la-utime.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-utime.lo `test -f 'utime.c' || echo '$(srcdir)/'`utime.c librecutils_la-utimens.lo: utimens.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-utimens.lo -MD -MP -MF $(DEPDIR)/librecutils_la-utimens.Tpo -c -o librecutils_la-utimens.lo `test -f 'utimens.c' || echo '$(srcdir)/'`utimens.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-utimens.Tpo $(DEPDIR)/librecutils_la-utimens.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='utimens.c' object='librecutils_la-utimens.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-utimens.lo `test -f 'utimens.c' || echo '$(srcdir)/'`utimens.c librecutils_la-version-etc.lo: version-etc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-version-etc.lo -MD -MP -MF $(DEPDIR)/librecutils_la-version-etc.Tpo -c -o librecutils_la-version-etc.lo `test -f 'version-etc.c' || echo '$(srcdir)/'`version-etc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-version-etc.Tpo $(DEPDIR)/librecutils_la-version-etc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='version-etc.c' object='librecutils_la-version-etc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-version-etc.lo `test -f 'version-etc.c' || echo '$(srcdir)/'`version-etc.c librecutils_la-version-etc-fsf.lo: version-etc-fsf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-version-etc-fsf.lo -MD -MP -MF $(DEPDIR)/librecutils_la-version-etc-fsf.Tpo -c -o librecutils_la-version-etc-fsf.lo `test -f 'version-etc-fsf.c' || echo '$(srcdir)/'`version-etc-fsf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-version-etc-fsf.Tpo $(DEPDIR)/librecutils_la-version-etc-fsf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='version-etc-fsf.c' object='librecutils_la-version-etc-fsf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-version-etc-fsf.lo `test -f 'version-etc-fsf.c' || echo '$(srcdir)/'`version-etc-fsf.c librecutils_la-wait-process.lo: wait-process.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-wait-process.lo -MD -MP -MF $(DEPDIR)/librecutils_la-wait-process.Tpo -c -o librecutils_la-wait-process.lo `test -f 'wait-process.c' || echo '$(srcdir)/'`wait-process.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-wait-process.Tpo $(DEPDIR)/librecutils_la-wait-process.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wait-process.c' object='librecutils_la-wait-process.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-wait-process.lo `test -f 'wait-process.c' || echo '$(srcdir)/'`wait-process.c librecutils_la-waitpid.lo: waitpid.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-waitpid.lo -MD -MP -MF $(DEPDIR)/librecutils_la-waitpid.Tpo -c -o librecutils_la-waitpid.lo `test -f 'waitpid.c' || echo '$(srcdir)/'`waitpid.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-waitpid.Tpo $(DEPDIR)/librecutils_la-waitpid.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='waitpid.c' object='librecutils_la-waitpid.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-waitpid.lo `test -f 'waitpid.c' || echo '$(srcdir)/'`waitpid.c librecutils_la-wcrtomb.lo: wcrtomb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-wcrtomb.lo -MD -MP -MF $(DEPDIR)/librecutils_la-wcrtomb.Tpo -c -o librecutils_la-wcrtomb.lo `test -f 'wcrtomb.c' || echo '$(srcdir)/'`wcrtomb.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-wcrtomb.Tpo $(DEPDIR)/librecutils_la-wcrtomb.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wcrtomb.c' object='librecutils_la-wcrtomb.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-wcrtomb.lo `test -f 'wcrtomb.c' || echo '$(srcdir)/'`wcrtomb.c librecutils_la-wctob.lo: wctob.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-wctob.lo -MD -MP -MF $(DEPDIR)/librecutils_la-wctob.Tpo -c -o librecutils_la-wctob.lo `test -f 'wctob.c' || echo '$(srcdir)/'`wctob.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-wctob.Tpo $(DEPDIR)/librecutils_la-wctob.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wctob.c' object='librecutils_la-wctob.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-wctob.lo `test -f 'wctob.c' || echo '$(srcdir)/'`wctob.c librecutils_la-wctomb.lo: wctomb.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-wctomb.lo -MD -MP -MF $(DEPDIR)/librecutils_la-wctomb.Tpo -c -o librecutils_la-wctomb.lo `test -f 'wctomb.c' || echo '$(srcdir)/'`wctomb.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-wctomb.Tpo $(DEPDIR)/librecutils_la-wctomb.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wctomb.c' object='librecutils_la-wctomb.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-wctomb.lo `test -f 'wctomb.c' || echo '$(srcdir)/'`wctomb.c librecutils_la-wctype-h.lo: wctype-h.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-wctype-h.lo -MD -MP -MF $(DEPDIR)/librecutils_la-wctype-h.Tpo -c -o librecutils_la-wctype-h.lo `test -f 'wctype-h.c' || echo '$(srcdir)/'`wctype-h.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-wctype-h.Tpo $(DEPDIR)/librecutils_la-wctype-h.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='wctype-h.c' object='librecutils_la-wctype-h.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-wctype-h.lo `test -f 'wctype-h.c' || echo '$(srcdir)/'`wctype-h.c librecutils_la-windows-mutex.lo: windows-mutex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-windows-mutex.lo -MD -MP -MF $(DEPDIR)/librecutils_la-windows-mutex.Tpo -c -o librecutils_la-windows-mutex.lo `test -f 'windows-mutex.c' || echo '$(srcdir)/'`windows-mutex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-windows-mutex.Tpo $(DEPDIR)/librecutils_la-windows-mutex.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-mutex.c' object='librecutils_la-windows-mutex.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-windows-mutex.lo `test -f 'windows-mutex.c' || echo '$(srcdir)/'`windows-mutex.c librecutils_la-windows-once.lo: windows-once.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-windows-once.lo -MD -MP -MF $(DEPDIR)/librecutils_la-windows-once.Tpo -c -o librecutils_la-windows-once.lo `test -f 'windows-once.c' || echo '$(srcdir)/'`windows-once.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-windows-once.Tpo $(DEPDIR)/librecutils_la-windows-once.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-once.c' object='librecutils_la-windows-once.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-windows-once.lo `test -f 'windows-once.c' || echo '$(srcdir)/'`windows-once.c librecutils_la-windows-recmutex.lo: windows-recmutex.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-windows-recmutex.lo -MD -MP -MF $(DEPDIR)/librecutils_la-windows-recmutex.Tpo -c -o librecutils_la-windows-recmutex.lo `test -f 'windows-recmutex.c' || echo '$(srcdir)/'`windows-recmutex.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-windows-recmutex.Tpo $(DEPDIR)/librecutils_la-windows-recmutex.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-recmutex.c' object='librecutils_la-windows-recmutex.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-windows-recmutex.lo `test -f 'windows-recmutex.c' || echo '$(srcdir)/'`windows-recmutex.c librecutils_la-windows-rwlock.lo: windows-rwlock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-windows-rwlock.lo -MD -MP -MF $(DEPDIR)/librecutils_la-windows-rwlock.Tpo -c -o librecutils_la-windows-rwlock.lo `test -f 'windows-rwlock.c' || echo '$(srcdir)/'`windows-rwlock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-windows-rwlock.Tpo $(DEPDIR)/librecutils_la-windows-rwlock.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-rwlock.c' object='librecutils_la-windows-rwlock.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-windows-rwlock.lo `test -f 'windows-rwlock.c' || echo '$(srcdir)/'`windows-rwlock.c librecutils_la-windows-spawn.lo: windows-spawn.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-windows-spawn.lo -MD -MP -MF $(DEPDIR)/librecutils_la-windows-spawn.Tpo -c -o librecutils_la-windows-spawn.lo `test -f 'windows-spawn.c' || echo '$(srcdir)/'`windows-spawn.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-windows-spawn.Tpo $(DEPDIR)/librecutils_la-windows-spawn.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='windows-spawn.c' object='librecutils_la-windows-spawn.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-windows-spawn.lo `test -f 'windows-spawn.c' || echo '$(srcdir)/'`windows-spawn.c librecutils_la-write.lo: write.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-write.lo -MD -MP -MF $(DEPDIR)/librecutils_la-write.Tpo -c -o librecutils_la-write.lo `test -f 'write.c' || echo '$(srcdir)/'`write.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-write.Tpo $(DEPDIR)/librecutils_la-write.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='write.c' object='librecutils_la-write.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-write.lo `test -f 'write.c' || echo '$(srcdir)/'`write.c librecutils_la-xmalloc.lo: xmalloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-xmalloc.lo -MD -MP -MF $(DEPDIR)/librecutils_la-xmalloc.Tpo -c -o librecutils_la-xmalloc.lo `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-xmalloc.Tpo $(DEPDIR)/librecutils_la-xmalloc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xmalloc.c' object='librecutils_la-xmalloc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-xmalloc.lo `test -f 'xmalloc.c' || echo '$(srcdir)/'`xmalloc.c librecutils_la-xalloc-die.lo: xalloc-die.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-xalloc-die.lo -MD -MP -MF $(DEPDIR)/librecutils_la-xalloc-die.Tpo -c -o librecutils_la-xalloc-die.lo `test -f 'xalloc-die.c' || echo '$(srcdir)/'`xalloc-die.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-xalloc-die.Tpo $(DEPDIR)/librecutils_la-xalloc-die.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xalloc-die.c' object='librecutils_la-xalloc-die.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-xalloc-die.lo `test -f 'xalloc-die.c' || echo '$(srcdir)/'`xalloc-die.c librecutils_la-xsize.lo: xsize.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-xsize.lo -MD -MP -MF $(DEPDIR)/librecutils_la-xsize.Tpo -c -o librecutils_la-xsize.lo `test -f 'xsize.c' || echo '$(srcdir)/'`xsize.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-xsize.Tpo $(DEPDIR)/librecutils_la-xsize.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='xsize.c' object='librecutils_la-xsize.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-xsize.lo `test -f 'xsize.c' || echo '$(srcdir)/'`xsize.c librecutils_la-acl_entries.lo: acl_entries.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-acl_entries.lo -MD -MP -MF $(DEPDIR)/librecutils_la-acl_entries.Tpo -c -o librecutils_la-acl_entries.lo `test -f 'acl_entries.c' || echo '$(srcdir)/'`acl_entries.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-acl_entries.Tpo $(DEPDIR)/librecutils_la-acl_entries.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='acl_entries.c' object='librecutils_la-acl_entries.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-acl_entries.lo `test -f 'acl_entries.c' || echo '$(srcdir)/'`acl_entries.c librecutils_la-alloca.lo: alloca.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-alloca.lo -MD -MP -MF $(DEPDIR)/librecutils_la-alloca.Tpo -c -o librecutils_la-alloca.lo `test -f 'alloca.c' || echo '$(srcdir)/'`alloca.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-alloca.Tpo $(DEPDIR)/librecutils_la-alloca.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='alloca.c' object='librecutils_la-alloca.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-alloca.lo `test -f 'alloca.c' || echo '$(srcdir)/'`alloca.c librecutils_la-calloc.lo: calloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-calloc.lo -MD -MP -MF $(DEPDIR)/librecutils_la-calloc.Tpo -c -o librecutils_la-calloc.lo `test -f 'calloc.c' || echo '$(srcdir)/'`calloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-calloc.Tpo $(DEPDIR)/librecutils_la-calloc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='calloc.c' object='librecutils_la-calloc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-calloc.lo `test -f 'calloc.c' || echo '$(srcdir)/'`calloc.c malloc/librecutils_la-dynarray-skeleton.lo: malloc/dynarray-skeleton.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT malloc/librecutils_la-dynarray-skeleton.lo -MD -MP -MF malloc/$(DEPDIR)/librecutils_la-dynarray-skeleton.Tpo -c -o malloc/librecutils_la-dynarray-skeleton.lo `test -f 'malloc/dynarray-skeleton.c' || echo '$(srcdir)/'`malloc/dynarray-skeleton.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) malloc/$(DEPDIR)/librecutils_la-dynarray-skeleton.Tpo malloc/$(DEPDIR)/librecutils_la-dynarray-skeleton.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc/dynarray-skeleton.c' object='malloc/librecutils_la-dynarray-skeleton.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o malloc/librecutils_la-dynarray-skeleton.lo `test -f 'malloc/dynarray-skeleton.c' || echo '$(srcdir)/'`malloc/dynarray-skeleton.c librecutils_la-fopen.lo: fopen.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fopen.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fopen.Tpo -c -o librecutils_la-fopen.lo `test -f 'fopen.c' || echo '$(srcdir)/'`fopen.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fopen.Tpo $(DEPDIR)/librecutils_la-fopen.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fopen.c' object='librecutils_la-fopen.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fopen.lo `test -f 'fopen.c' || echo '$(srcdir)/'`fopen.c librecutils_la-fprintf.lo: fprintf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-fprintf.lo -MD -MP -MF $(DEPDIR)/librecutils_la-fprintf.Tpo -c -o librecutils_la-fprintf.lo `test -f 'fprintf.c' || echo '$(srcdir)/'`fprintf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-fprintf.Tpo $(DEPDIR)/librecutils_la-fprintf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='fprintf.c' object='librecutils_la-fprintf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-fprintf.lo `test -f 'fprintf.c' || echo '$(srcdir)/'`fprintf.c librecutils_la-frexp.lo: frexp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-frexp.lo -MD -MP -MF $(DEPDIR)/librecutils_la-frexp.Tpo -c -o librecutils_la-frexp.lo `test -f 'frexp.c' || echo '$(srcdir)/'`frexp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-frexp.Tpo $(DEPDIR)/librecutils_la-frexp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='frexp.c' object='librecutils_la-frexp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-frexp.lo `test -f 'frexp.c' || echo '$(srcdir)/'`frexp.c librecutils_la-frexpl.lo: frexpl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-frexpl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-frexpl.Tpo -c -o librecutils_la-frexpl.lo `test -f 'frexpl.c' || echo '$(srcdir)/'`frexpl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-frexpl.Tpo $(DEPDIR)/librecutils_la-frexpl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='frexpl.c' object='librecutils_la-frexpl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-frexpl.lo `test -f 'frexpl.c' || echo '$(srcdir)/'`frexpl.c librecutils_la-stat-w32.lo: stat-w32.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-stat-w32.lo -MD -MP -MF $(DEPDIR)/librecutils_la-stat-w32.Tpo -c -o librecutils_la-stat-w32.lo `test -f 'stat-w32.c' || echo '$(srcdir)/'`stat-w32.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-stat-w32.Tpo $(DEPDIR)/librecutils_la-stat-w32.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='stat-w32.c' object='librecutils_la-stat-w32.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-stat-w32.lo `test -f 'stat-w32.c' || echo '$(srcdir)/'`stat-w32.c librecutils_la-at-func.lo: at-func.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-at-func.lo -MD -MP -MF $(DEPDIR)/librecutils_la-at-func.Tpo -c -o librecutils_la-at-func.lo `test -f 'at-func.c' || echo '$(srcdir)/'`at-func.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-at-func.Tpo $(DEPDIR)/librecutils_la-at-func.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='at-func.c' object='librecutils_la-at-func.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-at-func.lo `test -f 'at-func.c' || echo '$(srcdir)/'`at-func.c librecutils_la-getpass.lo: getpass.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-getpass.lo -MD -MP -MF $(DEPDIR)/librecutils_la-getpass.Tpo -c -o librecutils_la-getpass.lo `test -f 'getpass.c' || echo '$(srcdir)/'`getpass.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-getpass.Tpo $(DEPDIR)/librecutils_la-getpass.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='getpass.c' object='librecutils_la-getpass.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-getpass.lo `test -f 'getpass.c' || echo '$(srcdir)/'`getpass.c librecutils_la-isnan.lo: isnan.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-isnan.lo -MD -MP -MF $(DEPDIR)/librecutils_la-isnan.Tpo -c -o librecutils_la-isnan.lo `test -f 'isnan.c' || echo '$(srcdir)/'`isnan.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-isnan.Tpo $(DEPDIR)/librecutils_la-isnan.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnan.c' object='librecutils_la-isnan.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-isnan.lo `test -f 'isnan.c' || echo '$(srcdir)/'`isnan.c librecutils_la-isnand.lo: isnand.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-isnand.lo -MD -MP -MF $(DEPDIR)/librecutils_la-isnand.Tpo -c -o librecutils_la-isnand.lo `test -f 'isnand.c' || echo '$(srcdir)/'`isnand.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-isnand.Tpo $(DEPDIR)/librecutils_la-isnand.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnand.c' object='librecutils_la-isnand.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-isnand.lo `test -f 'isnand.c' || echo '$(srcdir)/'`isnand.c librecutils_la-isnanf.lo: isnanf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-isnanf.lo -MD -MP -MF $(DEPDIR)/librecutils_la-isnanf.Tpo -c -o librecutils_la-isnanf.lo `test -f 'isnanf.c' || echo '$(srcdir)/'`isnanf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-isnanf.Tpo $(DEPDIR)/librecutils_la-isnanf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnanf.c' object='librecutils_la-isnanf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-isnanf.lo `test -f 'isnanf.c' || echo '$(srcdir)/'`isnanf.c librecutils_la-isnanl.lo: isnanl.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-isnanl.lo -MD -MP -MF $(DEPDIR)/librecutils_la-isnanl.Tpo -c -o librecutils_la-isnanl.lo `test -f 'isnanl.c' || echo '$(srcdir)/'`isnanl.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-isnanl.Tpo $(DEPDIR)/librecutils_la-isnanl.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='isnanl.c' object='librecutils_la-isnanl.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-isnanl.lo `test -f 'isnanl.c' || echo '$(srcdir)/'`isnanl.c librecutils_la-malloc.lo: malloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-malloc.lo -MD -MP -MF $(DEPDIR)/librecutils_la-malloc.Tpo -c -o librecutils_la-malloc.lo `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-malloc.Tpo $(DEPDIR)/librecutils_la-malloc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='malloc.c' object='librecutils_la-malloc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-malloc.lo `test -f 'malloc.c' || echo '$(srcdir)/'`malloc.c librecutils_la-lc-charset-dispatch.lo: lc-charset-dispatch.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-lc-charset-dispatch.lo -MD -MP -MF $(DEPDIR)/librecutils_la-lc-charset-dispatch.Tpo -c -o librecutils_la-lc-charset-dispatch.lo `test -f 'lc-charset-dispatch.c' || echo '$(srcdir)/'`lc-charset-dispatch.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-lc-charset-dispatch.Tpo $(DEPDIR)/librecutils_la-lc-charset-dispatch.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='lc-charset-dispatch.c' object='librecutils_la-lc-charset-dispatch.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-lc-charset-dispatch.lo `test -f 'lc-charset-dispatch.c' || echo '$(srcdir)/'`lc-charset-dispatch.c librecutils_la-mbtowc-lock.lo: mbtowc-lock.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-mbtowc-lock.lo -MD -MP -MF $(DEPDIR)/librecutils_la-mbtowc-lock.Tpo -c -o librecutils_la-mbtowc-lock.lo `test -f 'mbtowc-lock.c' || echo '$(srcdir)/'`mbtowc-lock.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-mbtowc-lock.Tpo $(DEPDIR)/librecutils_la-mbtowc-lock.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mbtowc-lock.c' object='librecutils_la-mbtowc-lock.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-mbtowc-lock.lo `test -f 'mbtowc-lock.c' || echo '$(srcdir)/'`mbtowc-lock.c librecutils_la-mktime.lo: mktime.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-mktime.lo -MD -MP -MF $(DEPDIR)/librecutils_la-mktime.Tpo -c -o librecutils_la-mktime.lo `test -f 'mktime.c' || echo '$(srcdir)/'`mktime.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-mktime.Tpo $(DEPDIR)/librecutils_la-mktime.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='mktime.c' object='librecutils_la-mktime.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-mktime.lo `test -f 'mktime.c' || echo '$(srcdir)/'`mktime.c librecutils_la-printf.lo: printf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-printf.lo -MD -MP -MF $(DEPDIR)/librecutils_la-printf.Tpo -c -o librecutils_la-printf.lo `test -f 'printf.c' || echo '$(srcdir)/'`printf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-printf.Tpo $(DEPDIR)/librecutils_la-printf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='printf.c' object='librecutils_la-printf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-printf.lo `test -f 'printf.c' || echo '$(srcdir)/'`printf.c librecutils_la-realloc.lo: realloc.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-realloc.lo -MD -MP -MF $(DEPDIR)/librecutils_la-realloc.Tpo -c -o librecutils_la-realloc.lo `test -f 'realloc.c' || echo '$(srcdir)/'`realloc.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-realloc.Tpo $(DEPDIR)/librecutils_la-realloc.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='realloc.c' object='librecutils_la-realloc.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-realloc.lo `test -f 'realloc.c' || echo '$(srcdir)/'`realloc.c librecutils_la-regcomp.lo: regcomp.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-regcomp.lo -MD -MP -MF $(DEPDIR)/librecutils_la-regcomp.Tpo -c -o librecutils_la-regcomp.lo `test -f 'regcomp.c' || echo '$(srcdir)/'`regcomp.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-regcomp.Tpo $(DEPDIR)/librecutils_la-regcomp.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regcomp.c' object='librecutils_la-regcomp.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-regcomp.lo `test -f 'regcomp.c' || echo '$(srcdir)/'`regcomp.c librecutils_la-regex_internal.lo: regex_internal.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-regex_internal.lo -MD -MP -MF $(DEPDIR)/librecutils_la-regex_internal.Tpo -c -o librecutils_la-regex_internal.lo `test -f 'regex_internal.c' || echo '$(srcdir)/'`regex_internal.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-regex_internal.Tpo $(DEPDIR)/librecutils_la-regex_internal.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regex_internal.c' object='librecutils_la-regex_internal.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-regex_internal.lo `test -f 'regex_internal.c' || echo '$(srcdir)/'`regex_internal.c librecutils_la-regexec.lo: regexec.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-regexec.lo -MD -MP -MF $(DEPDIR)/librecutils_la-regexec.Tpo -c -o librecutils_la-regexec.lo `test -f 'regexec.c' || echo '$(srcdir)/'`regexec.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-regexec.Tpo $(DEPDIR)/librecutils_la-regexec.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='regexec.c' object='librecutils_la-regexec.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-regexec.lo `test -f 'regexec.c' || echo '$(srcdir)/'`regexec.c librecutils_la-strcasestr.lo: strcasestr.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-strcasestr.lo -MD -MP -MF $(DEPDIR)/librecutils_la-strcasestr.Tpo -c -o librecutils_la-strcasestr.lo `test -f 'strcasestr.c' || echo '$(srcdir)/'`strcasestr.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-strcasestr.Tpo $(DEPDIR)/librecutils_la-strcasestr.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='strcasestr.c' object='librecutils_la-strcasestr.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-strcasestr.lo `test -f 'strcasestr.c' || echo '$(srcdir)/'`strcasestr.c librecutils_la-asnprintf.lo: asnprintf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-asnprintf.lo -MD -MP -MF $(DEPDIR)/librecutils_la-asnprintf.Tpo -c -o librecutils_la-asnprintf.lo `test -f 'asnprintf.c' || echo '$(srcdir)/'`asnprintf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-asnprintf.Tpo $(DEPDIR)/librecutils_la-asnprintf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asnprintf.c' object='librecutils_la-asnprintf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-asnprintf.lo `test -f 'asnprintf.c' || echo '$(srcdir)/'`asnprintf.c librecutils_la-printf-args.lo: printf-args.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-printf-args.lo -MD -MP -MF $(DEPDIR)/librecutils_la-printf-args.Tpo -c -o librecutils_la-printf-args.lo `test -f 'printf-args.c' || echo '$(srcdir)/'`printf-args.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-printf-args.Tpo $(DEPDIR)/librecutils_la-printf-args.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='printf-args.c' object='librecutils_la-printf-args.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-printf-args.lo `test -f 'printf-args.c' || echo '$(srcdir)/'`printf-args.c librecutils_la-printf-parse.lo: printf-parse.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-printf-parse.lo -MD -MP -MF $(DEPDIR)/librecutils_la-printf-parse.Tpo -c -o librecutils_la-printf-parse.lo `test -f 'printf-parse.c' || echo '$(srcdir)/'`printf-parse.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-printf-parse.Tpo $(DEPDIR)/librecutils_la-printf-parse.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='printf-parse.c' object='librecutils_la-printf-parse.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-printf-parse.lo `test -f 'printf-parse.c' || echo '$(srcdir)/'`printf-parse.c librecutils_la-vasnprintf.lo: vasnprintf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-vasnprintf.lo -MD -MP -MF $(DEPDIR)/librecutils_la-vasnprintf.Tpo -c -o librecutils_la-vasnprintf.lo `test -f 'vasnprintf.c' || echo '$(srcdir)/'`vasnprintf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-vasnprintf.Tpo $(DEPDIR)/librecutils_la-vasnprintf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vasnprintf.c' object='librecutils_la-vasnprintf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-vasnprintf.lo `test -f 'vasnprintf.c' || echo '$(srcdir)/'`vasnprintf.c librecutils_la-asprintf.lo: asprintf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-asprintf.lo -MD -MP -MF $(DEPDIR)/librecutils_la-asprintf.Tpo -c -o librecutils_la-asprintf.lo `test -f 'asprintf.c' || echo '$(srcdir)/'`asprintf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-asprintf.Tpo $(DEPDIR)/librecutils_la-asprintf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='asprintf.c' object='librecutils_la-asprintf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-asprintf.lo `test -f 'asprintf.c' || echo '$(srcdir)/'`asprintf.c librecutils_la-vasprintf.lo: vasprintf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-vasprintf.lo -MD -MP -MF $(DEPDIR)/librecutils_la-vasprintf.Tpo -c -o librecutils_la-vasprintf.lo `test -f 'vasprintf.c' || echo '$(srcdir)/'`vasprintf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-vasprintf.Tpo $(DEPDIR)/librecutils_la-vasprintf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vasprintf.c' object='librecutils_la-vasprintf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-vasprintf.lo `test -f 'vasprintf.c' || echo '$(srcdir)/'`vasprintf.c librecutils_la-vfprintf.lo: vfprintf.c @am__fastdepCC_TRUE@ $(AM_V_CC)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -MT librecutils_la-vfprintf.lo -MD -MP -MF $(DEPDIR)/librecutils_la-vfprintf.Tpo -c -o librecutils_la-vfprintf.lo `test -f 'vfprintf.c' || echo '$(srcdir)/'`vfprintf.c @am__fastdepCC_TRUE@ $(AM_V_at)$(am__mv) $(DEPDIR)/librecutils_la-vfprintf.Tpo $(DEPDIR)/librecutils_la-vfprintf.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='vfprintf.c' object='librecutils_la-vfprintf.lo' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) $(librecutils_la_CFLAGS) $(CFLAGS) -c -o librecutils_la-vfprintf.lo `test -f 'vfprintf.c' || echo '$(srcdir)/'`vfprintf.c .y.c: $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs -rm -rf glthread/.libs glthread/_libs -rm -rf malloc/.libs malloc/_libs # This directory's subdirectories are mostly independent; you can cd # into them and run 'make' without going through this Makefile. # To change the values of 'make' variables: instead of editing Makefiles, # (1) if the variable is set in 'config.status', edit 'config.status' # (which will cause the Makefiles to be regenerated when you run 'make'); # (2) otherwise, pass the desired values on the 'make' command line. $(am__recursive_targets): @fail=; \ if $(am__make_keepgoing); then \ failcom='fail=yes'; \ else \ failcom='exit 1'; \ fi; \ dot_seen=no; \ target=`echo $@ | sed s/-recursive//`; \ case "$@" in \ distclean-* | maintainer-clean-*) list='$(DIST_SUBDIRS)' ;; \ *) list='$(SUBDIRS)' ;; \ esac; \ for subdir in $$list; do \ echo "Making $$target in $$subdir"; \ if test "$$subdir" = "."; then \ dot_seen=yes; \ local_target="$$target-am"; \ else \ local_target="$$target"; \ fi; \ ($(am__cd) $$subdir && $(MAKE) $(AM_MAKEFLAGS) $$local_target) \ || eval $$failcom; \ done; \ if test "$$dot_seen" = "no"; then \ $(MAKE) $(AM_MAKEFLAGS) "$$target-am" || exit 1; \ fi; test -z "$$fail" ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-recursive TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ if ($(ETAGS) --etags-include --version) >/dev/null 2>&1; then \ include_option=--etags-include; \ empty_fix=.; \ else \ include_option=--include; \ empty_fix=; \ fi; \ list='$(SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ test ! -f $$subdir/TAGS || \ set "$$@" "$$include_option=$$here/$$subdir/TAGS"; \ fi; \ done; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-recursive CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-recursive cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done @list='$(DIST_SUBDIRS)'; for subdir in $$list; do \ if test "$$subdir" = .; then :; else \ $(am__make_dryrun) \ || test -d "$(distdir)/$$subdir" \ || $(MKDIR_P) "$(distdir)/$$subdir" \ || exit 1; \ dir1=$$subdir; dir2="$(distdir)/$$subdir"; \ $(am__relativize); \ new_distdir=$$reldir; \ dir1=$$subdir; dir2="$(top_distdir)"; \ $(am__relativize); \ new_top_distdir=$$reldir; \ echo " (cd $$subdir && $(MAKE) $(AM_MAKEFLAGS) top_distdir="$$new_top_distdir" distdir="$$new_distdir" \\"; \ echo " am__remove_distdir=: am__skip_length_check=: am__skip_mode_fix=: distdir)"; \ ($(am__cd) $$subdir && \ $(MAKE) $(AM_MAKEFLAGS) \ top_distdir="$$new_top_distdir" \ distdir="$$new_distdir" \ am__remove_distdir=: \ am__skip_length_check=: \ am__skip_mode_fix=: \ distdir) \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-recursive all-am: Makefile $(LIBRARIES) $(LTLIBRARIES) $(HEADERS) installdirs: installdirs-recursive installdirs-am: install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-recursive install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-recursive install-data: install-data-recursive uninstall: uninstall-recursive install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-recursive install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: -test -z "$(MOSTLYCLEANFILES)" || rm -f $(MOSTLYCLEANFILES) clean-generic: -test -z "$(CLEANFILES)" || rm -f $(CLEANFILES) distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) -rm -f glthread/$(DEPDIR)/$(am__dirstamp) -rm -f glthread/$(am__dirstamp) -rm -f malloc/$(DEPDIR)/$(am__dirstamp) -rm -f malloc/$(am__dirstamp) -test -z "$(DISTCLEANFILES)" || rm -f $(DISTCLEANFILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f parse-datetime.c -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-recursive clean-am: clean-generic clean-libtool clean-noinstLIBRARIES \ clean-noinstLTLIBRARIES mostlyclean-am distclean: distclean-recursive -rm -f ./$(DEPDIR)/alloca.Plo -rm -f ./$(DEPDIR)/librecutils_la-access.Plo -rm -f ./$(DEPDIR)/librecutils_la-acl-errno-valid.Plo -rm -f ./$(DEPDIR)/librecutils_la-acl-internal.Plo -rm -f ./$(DEPDIR)/librecutils_la-acl_entries.Plo -rm -f ./$(DEPDIR)/librecutils_la-alloca.Plo -rm -f ./$(DEPDIR)/librecutils_la-asnprintf.Plo -rm -f ./$(DEPDIR)/librecutils_la-asprintf.Plo -rm -f ./$(DEPDIR)/librecutils_la-at-func.Plo -rm -f ./$(DEPDIR)/librecutils_la-base64.Plo -rm -f ./$(DEPDIR)/librecutils_la-basename-lgpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-binary-io.Plo -rm -f ./$(DEPDIR)/librecutils_la-bitrotate.Plo -rm -f ./$(DEPDIR)/librecutils_la-btowc.Plo -rm -f ./$(DEPDIR)/librecutils_la-c-ctype.Plo -rm -f ./$(DEPDIR)/librecutils_la-c-strcasecmp.Plo -rm -f ./$(DEPDIR)/librecutils_la-c-strncasecmp.Plo -rm -f ./$(DEPDIR)/librecutils_la-calloc.Plo -rm -f ./$(DEPDIR)/librecutils_la-canonicalize-lgpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-canonicalize.Plo -rm -f ./$(DEPDIR)/librecutils_la-chdir-long.Plo -rm -f ./$(DEPDIR)/librecutils_la-cloexec.Plo -rm -f ./$(DEPDIR)/librecutils_la-close-stream.Plo -rm -f ./$(DEPDIR)/librecutils_la-close.Plo -rm -f ./$(DEPDIR)/librecutils_la-closedir.Plo -rm -f ./$(DEPDIR)/librecutils_la-closeout.Plo -rm -f ./$(DEPDIR)/librecutils_la-concat-filename.Plo -rm -f ./$(DEPDIR)/librecutils_la-copy-acl.Plo -rm -f ./$(DEPDIR)/librecutils_la-copy-file-range.Plo -rm -f ./$(DEPDIR)/librecutils_la-copy-file.Plo -rm -f ./$(DEPDIR)/librecutils_la-crc.Plo -rm -f ./$(DEPDIR)/librecutils_la-dirfd.Plo -rm -f ./$(DEPDIR)/librecutils_la-dirname-lgpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-dup-safer-flag.Plo -rm -f ./$(DEPDIR)/librecutils_la-dup-safer.Plo -rm -f ./$(DEPDIR)/librecutils_la-dup.Plo -rm -f ./$(DEPDIR)/librecutils_la-dup2.Plo -rm -f ./$(DEPDIR)/librecutils_la-error.Plo -rm -f ./$(DEPDIR)/librecutils_la-euidaccess.Plo -rm -f ./$(DEPDIR)/librecutils_la-execute.Plo -rm -f ./$(DEPDIR)/librecutils_la-exitfail.Plo -rm -f ./$(DEPDIR)/librecutils_la-explicit_bzero.Plo -rm -f ./$(DEPDIR)/librecutils_la-fatal-signal.Plo -rm -f ./$(DEPDIR)/librecutils_la-fchdir.Plo -rm -f ./$(DEPDIR)/librecutils_la-fcntl.Plo -rm -f ./$(DEPDIR)/librecutils_la-fd-hook.Plo -rm -f ./$(DEPDIR)/librecutils_la-fd-safer-flag.Plo -rm -f ./$(DEPDIR)/librecutils_la-fd-safer.Plo -rm -f ./$(DEPDIR)/librecutils_la-fdopendir.Plo -rm -f ./$(DEPDIR)/librecutils_la-file-set.Plo -rm -f ./$(DEPDIR)/librecutils_la-filenamecat-lgpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-findprog-in.Plo -rm -f ./$(DEPDIR)/librecutils_la-float.Plo -rm -f ./$(DEPDIR)/librecutils_la-flock.Plo -rm -f ./$(DEPDIR)/librecutils_la-floor.Plo -rm -f ./$(DEPDIR)/librecutils_la-fopen.Plo -rm -f ./$(DEPDIR)/librecutils_la-fpending.Plo -rm -f ./$(DEPDIR)/librecutils_la-fprintf.Plo -rm -f ./$(DEPDIR)/librecutils_la-free.Plo -rm -f ./$(DEPDIR)/librecutils_la-frexp.Plo -rm -f ./$(DEPDIR)/librecutils_la-frexpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-fseek.Plo -rm -f ./$(DEPDIR)/librecutils_la-fseeko.Plo -rm -f ./$(DEPDIR)/librecutils_la-fseterr.Plo -rm -f ./$(DEPDIR)/librecutils_la-fstat.Plo -rm -f ./$(DEPDIR)/librecutils_la-fstatat.Plo -rm -f ./$(DEPDIR)/librecutils_la-ftell.Plo -rm -f ./$(DEPDIR)/librecutils_la-ftello.Plo -rm -f ./$(DEPDIR)/librecutils_la-full-write.Plo -rm -f ./$(DEPDIR)/librecutils_la-fwriting.Plo -rm -f ./$(DEPDIR)/librecutils_la-get-permissions.Plo -rm -f ./$(DEPDIR)/librecutils_la-getcwd-lgpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-getcwd.Plo -rm -f ./$(DEPDIR)/librecutils_la-getdelim.Plo -rm -f ./$(DEPDIR)/librecutils_la-getdtablesize.Plo -rm -f ./$(DEPDIR)/librecutils_la-getfilecon.Plo -rm -f ./$(DEPDIR)/librecutils_la-getgroups.Plo -rm -f ./$(DEPDIR)/librecutils_la-getline.Plo -rm -f ./$(DEPDIR)/librecutils_la-getopt.Plo -rm -f ./$(DEPDIR)/librecutils_la-getopt1.Plo -rm -f ./$(DEPDIR)/librecutils_la-getpass.Plo -rm -f ./$(DEPDIR)/librecutils_la-getprogname.Plo -rm -f ./$(DEPDIR)/librecutils_la-getrandom.Plo -rm -f ./$(DEPDIR)/librecutils_la-gettime.Plo -rm -f ./$(DEPDIR)/librecutils_la-gettimeofday.Plo -rm -f ./$(DEPDIR)/librecutils_la-gl_array_list.Plo -rm -f ./$(DEPDIR)/librecutils_la-gl_list.Plo -rm -f ./$(DEPDIR)/librecutils_la-group-member.Plo -rm -f ./$(DEPDIR)/librecutils_la-hard-locale.Plo -rm -f ./$(DEPDIR)/librecutils_la-hash-pjw.Plo -rm -f ./$(DEPDIR)/librecutils_la-hash-triple-simple.Plo -rm -f ./$(DEPDIR)/librecutils_la-hash.Plo -rm -f ./$(DEPDIR)/librecutils_la-ialloc.Plo -rm -f ./$(DEPDIR)/librecutils_la-isnan.Plo -rm -f ./$(DEPDIR)/librecutils_la-isnand.Plo -rm -f ./$(DEPDIR)/librecutils_la-isnanf.Plo -rm -f ./$(DEPDIR)/librecutils_la-isnanl.Plo -rm -f ./$(DEPDIR)/librecutils_la-itold.Plo -rm -f ./$(DEPDIR)/librecutils_la-lc-charset-dispatch.Plo -rm -f ./$(DEPDIR)/librecutils_la-localcharset.Plo -rm -f ./$(DEPDIR)/librecutils_la-localeconv.Plo -rm -f ./$(DEPDIR)/librecutils_la-lseek.Plo -rm -f ./$(DEPDIR)/librecutils_la-lstat.Plo -rm -f ./$(DEPDIR)/librecutils_la-malloc.Plo -rm -f ./$(DEPDIR)/librecutils_la-malloca.Plo -rm -f ./$(DEPDIR)/librecutils_la-math.Plo -rm -f ./$(DEPDIR)/librecutils_la-mbrlen.Plo -rm -f ./$(DEPDIR)/librecutils_la-mbrtowc.Plo -rm -f ./$(DEPDIR)/librecutils_la-mbsinit.Plo -rm -f ./$(DEPDIR)/librecutils_la-mbtowc-lock.Plo -rm -f ./$(DEPDIR)/librecutils_la-mbtowc.Plo -rm -f ./$(DEPDIR)/librecutils_la-memchr.Plo -rm -f ./$(DEPDIR)/librecutils_la-mempcpy.Plo -rm -f ./$(DEPDIR)/librecutils_la-memrchr.Plo -rm -f ./$(DEPDIR)/librecutils_la-mkdir.Plo -rm -f ./$(DEPDIR)/librecutils_la-mkostemp.Plo -rm -f ./$(DEPDIR)/librecutils_la-mkstemp.Plo -rm -f ./$(DEPDIR)/librecutils_la-mktime.Plo -rm -f ./$(DEPDIR)/librecutils_la-msvc-inval.Plo -rm -f ./$(DEPDIR)/librecutils_la-msvc-nothrow.Plo -rm -f ./$(DEPDIR)/librecutils_la-nl_langinfo-lock.Plo -rm -f ./$(DEPDIR)/librecutils_la-nl_langinfo.Plo -rm -f ./$(DEPDIR)/librecutils_la-nstrftime.Plo -rm -f ./$(DEPDIR)/librecutils_la-obstack.Plo -rm -f ./$(DEPDIR)/librecutils_la-open.Plo -rm -f ./$(DEPDIR)/librecutils_la-openat-die.Plo -rm -f ./$(DEPDIR)/librecutils_la-openat-proc.Plo -rm -f ./$(DEPDIR)/librecutils_la-openat.Plo -rm -f ./$(DEPDIR)/librecutils_la-opendir.Plo -rm -f ./$(DEPDIR)/librecutils_la-parse-datetime.Plo -rm -f ./$(DEPDIR)/librecutils_la-pipe-safer.Plo -rm -f ./$(DEPDIR)/librecutils_la-pipe.Plo -rm -f ./$(DEPDIR)/librecutils_la-printf-args.Plo -rm -f ./$(DEPDIR)/librecutils_la-printf-frexp.Plo -rm -f ./$(DEPDIR)/librecutils_la-printf-frexpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-printf-parse.Plo -rm -f ./$(DEPDIR)/librecutils_la-printf.Plo -rm -f ./$(DEPDIR)/librecutils_la-progname.Plo -rm -f ./$(DEPDIR)/librecutils_la-qcopy-acl.Plo -rm -f ./$(DEPDIR)/librecutils_la-qset-acl.Plo -rm -f ./$(DEPDIR)/librecutils_la-quotearg.Plo -rm -f ./$(DEPDIR)/librecutils_la-raise.Plo -rm -f ./$(DEPDIR)/librecutils_la-random_r.Plo -rm -f ./$(DEPDIR)/librecutils_la-rawmemchr.Plo -rm -f ./$(DEPDIR)/librecutils_la-read-file.Plo -rm -f ./$(DEPDIR)/librecutils_la-read.Plo -rm -f ./$(DEPDIR)/librecutils_la-readdir.Plo -rm -f ./$(DEPDIR)/librecutils_la-readline.Plo -rm -f ./$(DEPDIR)/librecutils_la-readlink.Plo -rm -f ./$(DEPDIR)/librecutils_la-realloc.Plo -rm -f ./$(DEPDIR)/librecutils_la-reallocarray.Plo -rm -f ./$(DEPDIR)/librecutils_la-regcomp.Plo -rm -f ./$(DEPDIR)/librecutils_la-regex.Plo -rm -f ./$(DEPDIR)/librecutils_la-regex_internal.Plo -rm -f ./$(DEPDIR)/librecutils_la-regexec.Plo -rm -f ./$(DEPDIR)/librecutils_la-remove.Plo -rm -f ./$(DEPDIR)/librecutils_la-rename.Plo -rm -f ./$(DEPDIR)/librecutils_la-rewinddir.Plo -rm -f ./$(DEPDIR)/librecutils_la-rmdir.Plo -rm -f ./$(DEPDIR)/librecutils_la-safe-read.Plo -rm -f ./$(DEPDIR)/librecutils_la-safe-write.Plo -rm -f ./$(DEPDIR)/librecutils_la-save-cwd.Plo -rm -f ./$(DEPDIR)/librecutils_la-se-context.Plo -rm -f ./$(DEPDIR)/librecutils_la-se-label.Plo -rm -f ./$(DEPDIR)/librecutils_la-se-selinux.Plo -rm -f ./$(DEPDIR)/librecutils_la-secure_getenv.Plo -rm -f ./$(DEPDIR)/librecutils_la-set-acl.Plo -rm -f ./$(DEPDIR)/librecutils_la-set-permissions.Plo -rm -f ./$(DEPDIR)/librecutils_la-setenv.Plo -rm -f ./$(DEPDIR)/librecutils_la-setlocale-lock.Plo -rm -f ./$(DEPDIR)/librecutils_la-setlocale_null.Plo -rm -f ./$(DEPDIR)/librecutils_la-sig-handler.Plo -rm -f ./$(DEPDIR)/librecutils_la-sigaction.Plo -rm -f ./$(DEPDIR)/librecutils_la-signbitd.Plo -rm -f ./$(DEPDIR)/librecutils_la-signbitf.Plo -rm -f ./$(DEPDIR)/librecutils_la-signbitl.Plo -rm -f ./$(DEPDIR)/librecutils_la-sigprocmask.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawn.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawn_faction_addchdir.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawn_faction_addopen.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawn_faction_destroy.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawn_faction_init.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawnattr_destroy.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawnattr_init.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawnattr_setflags.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawnattr_setsigmask.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawni.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawnp.Plo -rm -f ./$(DEPDIR)/librecutils_la-stat-time.Plo -rm -f ./$(DEPDIR)/librecutils_la-stat-w32.Plo -rm -f ./$(DEPDIR)/librecutils_la-stat.Plo -rm -f ./$(DEPDIR)/librecutils_la-stdio-read.Plo -rm -f ./$(DEPDIR)/librecutils_la-stdio-write.Plo -rm -f ./$(DEPDIR)/librecutils_la-stpcpy.Plo -rm -f ./$(DEPDIR)/librecutils_la-strcasecmp.Plo -rm -f ./$(DEPDIR)/librecutils_la-strcasestr.Plo -rm -f ./$(DEPDIR)/librecutils_la-strchrnul.Plo -rm -f ./$(DEPDIR)/librecutils_la-strdup.Plo -rm -f ./$(DEPDIR)/librecutils_la-strerror-override.Plo -rm -f ./$(DEPDIR)/librecutils_la-strerror.Plo -rm -f ./$(DEPDIR)/librecutils_la-stripslash.Plo -rm -f ./$(DEPDIR)/librecutils_la-strncasecmp.Plo -rm -f ./$(DEPDIR)/librecutils_la-strsep.Plo -rm -f ./$(DEPDIR)/librecutils_la-strverscmp.Plo -rm -f ./$(DEPDIR)/librecutils_la-tempname.Plo -rm -f ./$(DEPDIR)/librecutils_la-time_r.Plo -rm -f ./$(DEPDIR)/librecutils_la-time_rz.Plo -rm -f ./$(DEPDIR)/librecutils_la-timegm.Plo -rm -f ./$(DEPDIR)/librecutils_la-timespec.Plo -rm -f ./$(DEPDIR)/librecutils_la-tmpdir.Plo -rm -f ./$(DEPDIR)/librecutils_la-tzset.Plo -rm -f ./$(DEPDIR)/librecutils_la-unistd.Plo -rm -f ./$(DEPDIR)/librecutils_la-unlink.Plo -rm -f ./$(DEPDIR)/librecutils_la-unsetenv.Plo -rm -f ./$(DEPDIR)/librecutils_la-utime.Plo -rm -f ./$(DEPDIR)/librecutils_la-utimens.Plo -rm -f ./$(DEPDIR)/librecutils_la-vasnprintf.Plo -rm -f ./$(DEPDIR)/librecutils_la-vasprintf.Plo -rm -f ./$(DEPDIR)/librecutils_la-version-etc-fsf.Plo -rm -f ./$(DEPDIR)/librecutils_la-version-etc.Plo -rm -f ./$(DEPDIR)/librecutils_la-vfprintf.Plo -rm -f ./$(DEPDIR)/librecutils_la-wait-process.Plo -rm -f ./$(DEPDIR)/librecutils_la-waitpid.Plo -rm -f ./$(DEPDIR)/librecutils_la-wcrtomb.Plo -rm -f ./$(DEPDIR)/librecutils_la-wctob.Plo -rm -f ./$(DEPDIR)/librecutils_la-wctomb.Plo -rm -f ./$(DEPDIR)/librecutils_la-wctype-h.Plo -rm -f ./$(DEPDIR)/librecutils_la-windows-mutex.Plo -rm -f ./$(DEPDIR)/librecutils_la-windows-once.Plo -rm -f ./$(DEPDIR)/librecutils_la-windows-recmutex.Plo -rm -f ./$(DEPDIR)/librecutils_la-windows-rwlock.Plo -rm -f ./$(DEPDIR)/librecutils_la-windows-spawn.Plo -rm -f ./$(DEPDIR)/librecutils_la-write.Plo -rm -f ./$(DEPDIR)/librecutils_la-xalloc-die.Plo -rm -f ./$(DEPDIR)/librecutils_la-xmalloc.Plo -rm -f ./$(DEPDIR)/librecutils_la-xsize.Plo -rm -f glthread/$(DEPDIR)/librecutils_la-lock.Plo -rm -f glthread/$(DEPDIR)/librecutils_la-threadlib.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-dynarray-skeleton.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-dynarray_at_failure.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-dynarray_emplace_enlarge.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-dynarray_finalize.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-dynarray_resize.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-dynarray_resize_clear.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-scratch_buffer_dupfree.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow_preserve.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-scratch_buffer_set_array_size.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-local distclean-tags dvi: dvi-recursive dvi-am: html: html-recursive html-am: info: info-recursive info-am: install-data-am: install-dvi: install-dvi-recursive install-dvi-am: install-exec-am: install-html: install-html-recursive install-html-am: install-info: install-info-recursive install-info-am: install-man: install-pdf: install-pdf-recursive install-pdf-am: install-ps: install-ps-recursive install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-recursive -rm -f ./$(DEPDIR)/alloca.Plo -rm -f ./$(DEPDIR)/librecutils_la-access.Plo -rm -f ./$(DEPDIR)/librecutils_la-acl-errno-valid.Plo -rm -f ./$(DEPDIR)/librecutils_la-acl-internal.Plo -rm -f ./$(DEPDIR)/librecutils_la-acl_entries.Plo -rm -f ./$(DEPDIR)/librecutils_la-alloca.Plo -rm -f ./$(DEPDIR)/librecutils_la-asnprintf.Plo -rm -f ./$(DEPDIR)/librecutils_la-asprintf.Plo -rm -f ./$(DEPDIR)/librecutils_la-at-func.Plo -rm -f ./$(DEPDIR)/librecutils_la-base64.Plo -rm -f ./$(DEPDIR)/librecutils_la-basename-lgpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-binary-io.Plo -rm -f ./$(DEPDIR)/librecutils_la-bitrotate.Plo -rm -f ./$(DEPDIR)/librecutils_la-btowc.Plo -rm -f ./$(DEPDIR)/librecutils_la-c-ctype.Plo -rm -f ./$(DEPDIR)/librecutils_la-c-strcasecmp.Plo -rm -f ./$(DEPDIR)/librecutils_la-c-strncasecmp.Plo -rm -f ./$(DEPDIR)/librecutils_la-calloc.Plo -rm -f ./$(DEPDIR)/librecutils_la-canonicalize-lgpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-canonicalize.Plo -rm -f ./$(DEPDIR)/librecutils_la-chdir-long.Plo -rm -f ./$(DEPDIR)/librecutils_la-cloexec.Plo -rm -f ./$(DEPDIR)/librecutils_la-close-stream.Plo -rm -f ./$(DEPDIR)/librecutils_la-close.Plo -rm -f ./$(DEPDIR)/librecutils_la-closedir.Plo -rm -f ./$(DEPDIR)/librecutils_la-closeout.Plo -rm -f ./$(DEPDIR)/librecutils_la-concat-filename.Plo -rm -f ./$(DEPDIR)/librecutils_la-copy-acl.Plo -rm -f ./$(DEPDIR)/librecutils_la-copy-file-range.Plo -rm -f ./$(DEPDIR)/librecutils_la-copy-file.Plo -rm -f ./$(DEPDIR)/librecutils_la-crc.Plo -rm -f ./$(DEPDIR)/librecutils_la-dirfd.Plo -rm -f ./$(DEPDIR)/librecutils_la-dirname-lgpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-dup-safer-flag.Plo -rm -f ./$(DEPDIR)/librecutils_la-dup-safer.Plo -rm -f ./$(DEPDIR)/librecutils_la-dup.Plo -rm -f ./$(DEPDIR)/librecutils_la-dup2.Plo -rm -f ./$(DEPDIR)/librecutils_la-error.Plo -rm -f ./$(DEPDIR)/librecutils_la-euidaccess.Plo -rm -f ./$(DEPDIR)/librecutils_la-execute.Plo -rm -f ./$(DEPDIR)/librecutils_la-exitfail.Plo -rm -f ./$(DEPDIR)/librecutils_la-explicit_bzero.Plo -rm -f ./$(DEPDIR)/librecutils_la-fatal-signal.Plo -rm -f ./$(DEPDIR)/librecutils_la-fchdir.Plo -rm -f ./$(DEPDIR)/librecutils_la-fcntl.Plo -rm -f ./$(DEPDIR)/librecutils_la-fd-hook.Plo -rm -f ./$(DEPDIR)/librecutils_la-fd-safer-flag.Plo -rm -f ./$(DEPDIR)/librecutils_la-fd-safer.Plo -rm -f ./$(DEPDIR)/librecutils_la-fdopendir.Plo -rm -f ./$(DEPDIR)/librecutils_la-file-set.Plo -rm -f ./$(DEPDIR)/librecutils_la-filenamecat-lgpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-findprog-in.Plo -rm -f ./$(DEPDIR)/librecutils_la-float.Plo -rm -f ./$(DEPDIR)/librecutils_la-flock.Plo -rm -f ./$(DEPDIR)/librecutils_la-floor.Plo -rm -f ./$(DEPDIR)/librecutils_la-fopen.Plo -rm -f ./$(DEPDIR)/librecutils_la-fpending.Plo -rm -f ./$(DEPDIR)/librecutils_la-fprintf.Plo -rm -f ./$(DEPDIR)/librecutils_la-free.Plo -rm -f ./$(DEPDIR)/librecutils_la-frexp.Plo -rm -f ./$(DEPDIR)/librecutils_la-frexpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-fseek.Plo -rm -f ./$(DEPDIR)/librecutils_la-fseeko.Plo -rm -f ./$(DEPDIR)/librecutils_la-fseterr.Plo -rm -f ./$(DEPDIR)/librecutils_la-fstat.Plo -rm -f ./$(DEPDIR)/librecutils_la-fstatat.Plo -rm -f ./$(DEPDIR)/librecutils_la-ftell.Plo -rm -f ./$(DEPDIR)/librecutils_la-ftello.Plo -rm -f ./$(DEPDIR)/librecutils_la-full-write.Plo -rm -f ./$(DEPDIR)/librecutils_la-fwriting.Plo -rm -f ./$(DEPDIR)/librecutils_la-get-permissions.Plo -rm -f ./$(DEPDIR)/librecutils_la-getcwd-lgpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-getcwd.Plo -rm -f ./$(DEPDIR)/librecutils_la-getdelim.Plo -rm -f ./$(DEPDIR)/librecutils_la-getdtablesize.Plo -rm -f ./$(DEPDIR)/librecutils_la-getfilecon.Plo -rm -f ./$(DEPDIR)/librecutils_la-getgroups.Plo -rm -f ./$(DEPDIR)/librecutils_la-getline.Plo -rm -f ./$(DEPDIR)/librecutils_la-getopt.Plo -rm -f ./$(DEPDIR)/librecutils_la-getopt1.Plo -rm -f ./$(DEPDIR)/librecutils_la-getpass.Plo -rm -f ./$(DEPDIR)/librecutils_la-getprogname.Plo -rm -f ./$(DEPDIR)/librecutils_la-getrandom.Plo -rm -f ./$(DEPDIR)/librecutils_la-gettime.Plo -rm -f ./$(DEPDIR)/librecutils_la-gettimeofday.Plo -rm -f ./$(DEPDIR)/librecutils_la-gl_array_list.Plo -rm -f ./$(DEPDIR)/librecutils_la-gl_list.Plo -rm -f ./$(DEPDIR)/librecutils_la-group-member.Plo -rm -f ./$(DEPDIR)/librecutils_la-hard-locale.Plo -rm -f ./$(DEPDIR)/librecutils_la-hash-pjw.Plo -rm -f ./$(DEPDIR)/librecutils_la-hash-triple-simple.Plo -rm -f ./$(DEPDIR)/librecutils_la-hash.Plo -rm -f ./$(DEPDIR)/librecutils_la-ialloc.Plo -rm -f ./$(DEPDIR)/librecutils_la-isnan.Plo -rm -f ./$(DEPDIR)/librecutils_la-isnand.Plo -rm -f ./$(DEPDIR)/librecutils_la-isnanf.Plo -rm -f ./$(DEPDIR)/librecutils_la-isnanl.Plo -rm -f ./$(DEPDIR)/librecutils_la-itold.Plo -rm -f ./$(DEPDIR)/librecutils_la-lc-charset-dispatch.Plo -rm -f ./$(DEPDIR)/librecutils_la-localcharset.Plo -rm -f ./$(DEPDIR)/librecutils_la-localeconv.Plo -rm -f ./$(DEPDIR)/librecutils_la-lseek.Plo -rm -f ./$(DEPDIR)/librecutils_la-lstat.Plo -rm -f ./$(DEPDIR)/librecutils_la-malloc.Plo -rm -f ./$(DEPDIR)/librecutils_la-malloca.Plo -rm -f ./$(DEPDIR)/librecutils_la-math.Plo -rm -f ./$(DEPDIR)/librecutils_la-mbrlen.Plo -rm -f ./$(DEPDIR)/librecutils_la-mbrtowc.Plo -rm -f ./$(DEPDIR)/librecutils_la-mbsinit.Plo -rm -f ./$(DEPDIR)/librecutils_la-mbtowc-lock.Plo -rm -f ./$(DEPDIR)/librecutils_la-mbtowc.Plo -rm -f ./$(DEPDIR)/librecutils_la-memchr.Plo -rm -f ./$(DEPDIR)/librecutils_la-mempcpy.Plo -rm -f ./$(DEPDIR)/librecutils_la-memrchr.Plo -rm -f ./$(DEPDIR)/librecutils_la-mkdir.Plo -rm -f ./$(DEPDIR)/librecutils_la-mkostemp.Plo -rm -f ./$(DEPDIR)/librecutils_la-mkstemp.Plo -rm -f ./$(DEPDIR)/librecutils_la-mktime.Plo -rm -f ./$(DEPDIR)/librecutils_la-msvc-inval.Plo -rm -f ./$(DEPDIR)/librecutils_la-msvc-nothrow.Plo -rm -f ./$(DEPDIR)/librecutils_la-nl_langinfo-lock.Plo -rm -f ./$(DEPDIR)/librecutils_la-nl_langinfo.Plo -rm -f ./$(DEPDIR)/librecutils_la-nstrftime.Plo -rm -f ./$(DEPDIR)/librecutils_la-obstack.Plo -rm -f ./$(DEPDIR)/librecutils_la-open.Plo -rm -f ./$(DEPDIR)/librecutils_la-openat-die.Plo -rm -f ./$(DEPDIR)/librecutils_la-openat-proc.Plo -rm -f ./$(DEPDIR)/librecutils_la-openat.Plo -rm -f ./$(DEPDIR)/librecutils_la-opendir.Plo -rm -f ./$(DEPDIR)/librecutils_la-parse-datetime.Plo -rm -f ./$(DEPDIR)/librecutils_la-pipe-safer.Plo -rm -f ./$(DEPDIR)/librecutils_la-pipe.Plo -rm -f ./$(DEPDIR)/librecutils_la-printf-args.Plo -rm -f ./$(DEPDIR)/librecutils_la-printf-frexp.Plo -rm -f ./$(DEPDIR)/librecutils_la-printf-frexpl.Plo -rm -f ./$(DEPDIR)/librecutils_la-printf-parse.Plo -rm -f ./$(DEPDIR)/librecutils_la-printf.Plo -rm -f ./$(DEPDIR)/librecutils_la-progname.Plo -rm -f ./$(DEPDIR)/librecutils_la-qcopy-acl.Plo -rm -f ./$(DEPDIR)/librecutils_la-qset-acl.Plo -rm -f ./$(DEPDIR)/librecutils_la-quotearg.Plo -rm -f ./$(DEPDIR)/librecutils_la-raise.Plo -rm -f ./$(DEPDIR)/librecutils_la-random_r.Plo -rm -f ./$(DEPDIR)/librecutils_la-rawmemchr.Plo -rm -f ./$(DEPDIR)/librecutils_la-read-file.Plo -rm -f ./$(DEPDIR)/librecutils_la-read.Plo -rm -f ./$(DEPDIR)/librecutils_la-readdir.Plo -rm -f ./$(DEPDIR)/librecutils_la-readline.Plo -rm -f ./$(DEPDIR)/librecutils_la-readlink.Plo -rm -f ./$(DEPDIR)/librecutils_la-realloc.Plo -rm -f ./$(DEPDIR)/librecutils_la-reallocarray.Plo -rm -f ./$(DEPDIR)/librecutils_la-regcomp.Plo -rm -f ./$(DEPDIR)/librecutils_la-regex.Plo -rm -f ./$(DEPDIR)/librecutils_la-regex_internal.Plo -rm -f ./$(DEPDIR)/librecutils_la-regexec.Plo -rm -f ./$(DEPDIR)/librecutils_la-remove.Plo -rm -f ./$(DEPDIR)/librecutils_la-rename.Plo -rm -f ./$(DEPDIR)/librecutils_la-rewinddir.Plo -rm -f ./$(DEPDIR)/librecutils_la-rmdir.Plo -rm -f ./$(DEPDIR)/librecutils_la-safe-read.Plo -rm -f ./$(DEPDIR)/librecutils_la-safe-write.Plo -rm -f ./$(DEPDIR)/librecutils_la-save-cwd.Plo -rm -f ./$(DEPDIR)/librecutils_la-se-context.Plo -rm -f ./$(DEPDIR)/librecutils_la-se-label.Plo -rm -f ./$(DEPDIR)/librecutils_la-se-selinux.Plo -rm -f ./$(DEPDIR)/librecutils_la-secure_getenv.Plo -rm -f ./$(DEPDIR)/librecutils_la-set-acl.Plo -rm -f ./$(DEPDIR)/librecutils_la-set-permissions.Plo -rm -f ./$(DEPDIR)/librecutils_la-setenv.Plo -rm -f ./$(DEPDIR)/librecutils_la-setlocale-lock.Plo -rm -f ./$(DEPDIR)/librecutils_la-setlocale_null.Plo -rm -f ./$(DEPDIR)/librecutils_la-sig-handler.Plo -rm -f ./$(DEPDIR)/librecutils_la-sigaction.Plo -rm -f ./$(DEPDIR)/librecutils_la-signbitd.Plo -rm -f ./$(DEPDIR)/librecutils_la-signbitf.Plo -rm -f ./$(DEPDIR)/librecutils_la-signbitl.Plo -rm -f ./$(DEPDIR)/librecutils_la-sigprocmask.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawn.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawn_faction_addchdir.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawn_faction_addopen.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawn_faction_destroy.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawn_faction_init.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawnattr_destroy.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawnattr_init.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawnattr_setflags.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawnattr_setsigmask.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawni.Plo -rm -f ./$(DEPDIR)/librecutils_la-spawnp.Plo -rm -f ./$(DEPDIR)/librecutils_la-stat-time.Plo -rm -f ./$(DEPDIR)/librecutils_la-stat-w32.Plo -rm -f ./$(DEPDIR)/librecutils_la-stat.Plo -rm -f ./$(DEPDIR)/librecutils_la-stdio-read.Plo -rm -f ./$(DEPDIR)/librecutils_la-stdio-write.Plo -rm -f ./$(DEPDIR)/librecutils_la-stpcpy.Plo -rm -f ./$(DEPDIR)/librecutils_la-strcasecmp.Plo -rm -f ./$(DEPDIR)/librecutils_la-strcasestr.Plo -rm -f ./$(DEPDIR)/librecutils_la-strchrnul.Plo -rm -f ./$(DEPDIR)/librecutils_la-strdup.Plo -rm -f ./$(DEPDIR)/librecutils_la-strerror-override.Plo -rm -f ./$(DEPDIR)/librecutils_la-strerror.Plo -rm -f ./$(DEPDIR)/librecutils_la-stripslash.Plo -rm -f ./$(DEPDIR)/librecutils_la-strncasecmp.Plo -rm -f ./$(DEPDIR)/librecutils_la-strsep.Plo -rm -f ./$(DEPDIR)/librecutils_la-strverscmp.Plo -rm -f ./$(DEPDIR)/librecutils_la-tempname.Plo -rm -f ./$(DEPDIR)/librecutils_la-time_r.Plo -rm -f ./$(DEPDIR)/librecutils_la-time_rz.Plo -rm -f ./$(DEPDIR)/librecutils_la-timegm.Plo -rm -f ./$(DEPDIR)/librecutils_la-timespec.Plo -rm -f ./$(DEPDIR)/librecutils_la-tmpdir.Plo -rm -f ./$(DEPDIR)/librecutils_la-tzset.Plo -rm -f ./$(DEPDIR)/librecutils_la-unistd.Plo -rm -f ./$(DEPDIR)/librecutils_la-unlink.Plo -rm -f ./$(DEPDIR)/librecutils_la-unsetenv.Plo -rm -f ./$(DEPDIR)/librecutils_la-utime.Plo -rm -f ./$(DEPDIR)/librecutils_la-utimens.Plo -rm -f ./$(DEPDIR)/librecutils_la-vasnprintf.Plo -rm -f ./$(DEPDIR)/librecutils_la-vasprintf.Plo -rm -f ./$(DEPDIR)/librecutils_la-version-etc-fsf.Plo -rm -f ./$(DEPDIR)/librecutils_la-version-etc.Plo -rm -f ./$(DEPDIR)/librecutils_la-vfprintf.Plo -rm -f ./$(DEPDIR)/librecutils_la-wait-process.Plo -rm -f ./$(DEPDIR)/librecutils_la-waitpid.Plo -rm -f ./$(DEPDIR)/librecutils_la-wcrtomb.Plo -rm -f ./$(DEPDIR)/librecutils_la-wctob.Plo -rm -f ./$(DEPDIR)/librecutils_la-wctomb.Plo -rm -f ./$(DEPDIR)/librecutils_la-wctype-h.Plo -rm -f ./$(DEPDIR)/librecutils_la-windows-mutex.Plo -rm -f ./$(DEPDIR)/librecutils_la-windows-once.Plo -rm -f ./$(DEPDIR)/librecutils_la-windows-recmutex.Plo -rm -f ./$(DEPDIR)/librecutils_la-windows-rwlock.Plo -rm -f ./$(DEPDIR)/librecutils_la-windows-spawn.Plo -rm -f ./$(DEPDIR)/librecutils_la-write.Plo -rm -f ./$(DEPDIR)/librecutils_la-xalloc-die.Plo -rm -f ./$(DEPDIR)/librecutils_la-xmalloc.Plo -rm -f ./$(DEPDIR)/librecutils_la-xsize.Plo -rm -f glthread/$(DEPDIR)/librecutils_la-lock.Plo -rm -f glthread/$(DEPDIR)/librecutils_la-threadlib.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-dynarray-skeleton.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-dynarray_at_failure.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-dynarray_emplace_enlarge.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-dynarray_finalize.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-dynarray_resize.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-dynarray_resize_clear.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-scratch_buffer_dupfree.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-scratch_buffer_grow_preserve.Plo -rm -f malloc/$(DEPDIR)/librecutils_la-scratch_buffer_set_array_size.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic \ maintainer-clean-local mostlyclean: mostlyclean-recursive mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool mostlyclean-local pdf: pdf-recursive pdf-am: ps: ps-recursive ps-am: uninstall-am: .MAKE: $(am__recursive_targets) all check install install-am \ install-exec install-strip .PHONY: $(am__recursive_targets) CTAGS GTAGS TAGS all all-am \ am--depfiles check check-am clean clean-generic clean-libtool \ clean-noinstLIBRARIES clean-noinstLTLIBRARIES cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-local distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs installdirs-am \ maintainer-clean maintainer-clean-generic \ maintainer-clean-local mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool mostlyclean-local pdf \ pdf-am ps ps-am tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # We need the following in order to create <alloca.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_ALLOCA_H_TRUE@alloca.h: alloca.in.h $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_ALLOCA_H_TRUE@ -e 's|@''HAVE_ALLOCA_H''@|$(HAVE_ALLOCA_H)|g' \ @GL_GENERATE_ALLOCA_H_TRUE@ $(srcdir)/alloca.in.h > $@-t @GL_GENERATE_ALLOCA_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_ALLOCA_H_FALSE@alloca.h: $(top_builddir)/config.status @GL_GENERATE_ALLOCA_H_FALSE@ rm -f $@ # We need the following in order to create <dirent.h> when the system # doesn't have one that works with the given compiler. dirent.h: dirent.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_DIRENT_H''@|$(HAVE_DIRENT_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_DIRENT_H''@|$(NEXT_DIRENT_H)|g' \ -e 's/@''GNULIB_OPENDIR''@/$(GL_GNULIB_OPENDIR)/g' \ -e 's/@''GNULIB_READDIR''@/$(GL_GNULIB_READDIR)/g' \ -e 's/@''GNULIB_REWINDDIR''@/$(GL_GNULIB_REWINDDIR)/g' \ -e 's/@''GNULIB_CLOSEDIR''@/$(GL_GNULIB_CLOSEDIR)/g' \ -e 's/@''GNULIB_DIRFD''@/$(GL_GNULIB_DIRFD)/g' \ -e 's/@''GNULIB_FDOPENDIR''@/$(GL_GNULIB_FDOPENDIR)/g' \ -e 's/@''GNULIB_SCANDIR''@/$(GL_GNULIB_SCANDIR)/g' \ -e 's/@''GNULIB_ALPHASORT''@/$(GL_GNULIB_ALPHASORT)/g' \ -e 's/@''HAVE_OPENDIR''@/$(HAVE_OPENDIR)/g' \ -e 's/@''HAVE_READDIR''@/$(HAVE_READDIR)/g' \ -e 's/@''HAVE_REWINDDIR''@/$(HAVE_REWINDDIR)/g' \ -e 's/@''HAVE_CLOSEDIR''@/$(HAVE_CLOSEDIR)/g' \ -e 's|@''HAVE_DECL_DIRFD''@|$(HAVE_DECL_DIRFD)|g' \ -e 's|@''HAVE_DECL_FDOPENDIR''@|$(HAVE_DECL_FDOPENDIR)|g' \ -e 's|@''HAVE_FDOPENDIR''@|$(HAVE_FDOPENDIR)|g' \ -e 's|@''HAVE_SCANDIR''@|$(HAVE_SCANDIR)|g' \ -e 's|@''HAVE_ALPHASORT''@|$(HAVE_ALPHASORT)|g' \ -e 's|@''REPLACE_OPENDIR''@|$(REPLACE_OPENDIR)|g' \ -e 's|@''REPLACE_CLOSEDIR''@|$(REPLACE_CLOSEDIR)|g' \ -e 's|@''REPLACE_DIRFD''@|$(REPLACE_DIRFD)|g' \ -e 's|@''REPLACE_FDOPENDIR''@|$(REPLACE_FDOPENDIR)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/dirent.in.h > $@-t $(AM_V_at)mv $@-t $@ malloc/dynarray.gl.h: malloc/dynarray.h $(AM_V_GEN)$(MKDIR_P) 'malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e '/libc_hidden_proto/d' \ $(srcdir)/malloc/dynarray.h > $@-t $(AM_V_at)mv $@-t $@ malloc/dynarray-skeleton.gl.h: malloc/dynarray-skeleton.c $(AM_V_GEN)$(MKDIR_P) 'malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|<malloc/dynarray\.h>|<malloc/dynarray.gl.h>|g' \ -e 's|__attribute_maybe_unused__|_GL_ATTRIBUTE_MAYBE_UNUSED|g' \ -e 's|__attribute_nonnull__|_GL_ATTRIBUTE_NONNULL|g' \ -e 's|__attribute_warn_unused_result__|_GL_ATTRIBUTE_NODISCARD|g' \ -e 's|__glibc_likely|_GL_LIKELY|g' \ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ $(srcdir)/malloc/dynarray-skeleton.c > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <errno.h> when the system # doesn't have one that is POSIX compliant. @GL_GENERATE_ERRNO_H_TRUE@errno.h: errno.in.h $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''NEXT_ERRNO_H''@|$(NEXT_ERRNO_H)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_HIDDEN''@|$(EMULTIHOP_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EMULTIHOP_VALUE''@|$(EMULTIHOP_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_HIDDEN''@|$(ENOLINK_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''ENOLINK_VALUE''@|$(ENOLINK_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_HIDDEN''@|$(EOVERFLOW_HIDDEN)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ -e 's|@''EOVERFLOW_VALUE''@|$(EOVERFLOW_VALUE)|g' \ @GL_GENERATE_ERRNO_H_TRUE@ $(srcdir)/errno.in.h > $@-t @GL_GENERATE_ERRNO_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_ERRNO_H_FALSE@errno.h: $(top_builddir)/config.status @GL_GENERATE_ERRNO_H_FALSE@ rm -f $@ # We need the following in order to create <fcntl.h> when the system # doesn't have one that works with the given compiler. fcntl.h: fcntl.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_FCNTL_H''@|$(NEXT_FCNTL_H)|g' \ -e 's/@''GNULIB_CREAT''@/$(GL_GNULIB_CREAT)/g' \ -e 's/@''GNULIB_FCNTL''@/$(GL_GNULIB_FCNTL)/g' \ -e 's/@''GNULIB_NONBLOCKING''@/$(GL_GNULIB_NONBLOCKING)/g' \ -e 's/@''GNULIB_OPEN''@/$(GL_GNULIB_OPEN)/g' \ -e 's/@''GNULIB_OPENAT''@/$(GL_GNULIB_OPENAT)/g' \ -e 's/@''GNULIB_MDA_CREAT''@/$(GL_GNULIB_MDA_CREAT)/g' \ -e 's/@''GNULIB_MDA_OPEN''@/$(GL_GNULIB_MDA_OPEN)/g' \ -e 's|@''HAVE_FCNTL''@|$(HAVE_FCNTL)|g' \ -e 's|@''HAVE_OPENAT''@|$(HAVE_OPENAT)|g' \ -e 's|@''REPLACE_CREAT''@|$(REPLACE_CREAT)|g' \ -e 's|@''REPLACE_FCNTL''@|$(REPLACE_FCNTL)|g' \ -e 's|@''REPLACE_OPEN''@|$(REPLACE_OPEN)|g' \ -e 's|@''REPLACE_OPENAT''@|$(REPLACE_OPENAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/fcntl.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <float.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_FLOAT_H_TRUE@float.h: float.in.h $(top_builddir)/config.status @GL_GENERATE_FLOAT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''NEXT_FLOAT_H''@|$(NEXT_FLOAT_H)|g' \ @GL_GENERATE_FLOAT_H_TRUE@ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ @GL_GENERATE_FLOAT_H_TRUE@ $(srcdir)/float.in.h > $@-t @GL_GENERATE_FLOAT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_FLOAT_H_FALSE@float.h: $(top_builddir)/config.status @GL_GENERATE_FLOAT_H_FALSE@ rm -f $@ # We need the following in order to create <getopt.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_GETOPT_H_TRUE@getopt.h: getopt.in.h $(top_builddir)/config.status $(ARG_NONNULL_H) @GL_GENERATE_GETOPT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''HAVE_GETOPT_H''@|$(HAVE_GETOPT_H)|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e 's|@''NEXT_GETOPT_H''@|$(NEXT_GETOPT_H)|g' \ @GL_GENERATE_GETOPT_H_TRUE@ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ @GL_GENERATE_GETOPT_H_TRUE@ $(srcdir)/getopt.in.h > $@-t @GL_GENERATE_GETOPT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_GETOPT_H_FALSE@getopt.h: $(top_builddir)/config.status @GL_GENERATE_GETOPT_H_FALSE@ rm -f $@ @GL_GENERATE_GETOPT_CDEFS_H_TRUE@getopt-cdefs.h: getopt-cdefs.in.h $(top_builddir)/config.status @GL_GENERATE_GETOPT_CDEFS_H_TRUE@ $(AM_V_GEN)$(SED_HEADER_STDOUT) \ @GL_GENERATE_GETOPT_CDEFS_H_TRUE@ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ @GL_GENERATE_GETOPT_CDEFS_H_TRUE@ $(srcdir)/getopt-cdefs.in.h > $@-t @GL_GENERATE_GETOPT_CDEFS_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_GETOPT_CDEFS_H_FALSE@getopt-cdefs.h: $(top_builddir)/config.status @GL_GENERATE_GETOPT_CDEFS_H_FALSE@ rm -f $@ distclean-local: clean-GNUmakefile clean-GNUmakefile: test '$(srcdir)' = . || rm -f $(top_builddir)/GNUmakefile # We need the following in order to create <inttypes.h> when the system # doesn't have one that works with the given compiler. inttypes.h: inttypes.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_INTTYPES_H''@|$(NEXT_INTTYPES_H)|g' \ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ -e 's/@''PRIPTR_PREFIX''@/$(PRIPTR_PREFIX)/g' \ -e 's/@''GNULIB_IMAXABS''@/$(GL_GNULIB_IMAXABS)/g' \ -e 's/@''GNULIB_IMAXDIV''@/$(GL_GNULIB_IMAXDIV)/g' \ -e 's/@''GNULIB_STRTOIMAX''@/$(GL_GNULIB_STRTOIMAX)/g' \ -e 's/@''GNULIB_STRTOUMAX''@/$(GL_GNULIB_STRTOUMAX)/g' \ -e 's/@''HAVE_DECL_IMAXABS''@/$(HAVE_DECL_IMAXABS)/g' \ -e 's/@''HAVE_DECL_IMAXDIV''@/$(HAVE_DECL_IMAXDIV)/g' \ -e 's/@''HAVE_DECL_STRTOIMAX''@/$(HAVE_DECL_STRTOIMAX)/g' \ -e 's/@''HAVE_DECL_STRTOUMAX''@/$(HAVE_DECL_STRTOUMAX)/g' \ -e 's/@''HAVE_IMAXDIV_T''@/$(HAVE_IMAXDIV_T)/g' \ -e 's/@''REPLACE_STRTOIMAX''@/$(REPLACE_STRTOIMAX)/g' \ -e 's/@''REPLACE_STRTOUMAX''@/$(REPLACE_STRTOUMAX)/g' \ -e 's/@''INT32_MAX_LT_INTMAX_MAX''@/$(INT32_MAX_LT_INTMAX_MAX)/g' \ -e 's/@''INT64_MAX_EQ_LONG_MAX''@/$(INT64_MAX_EQ_LONG_MAX)/g' \ -e 's/@''UINT32_MAX_LT_UINTMAX_MAX''@/$(UINT32_MAX_LT_UINTMAX_MAX)/g' \ -e 's/@''UINT64_MAX_EQ_ULONG_MAX''@/$(UINT64_MAX_EQ_ULONG_MAX)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/inttypes.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create an empty placeholder for # <langinfo.h> when the system doesn't have one. langinfo.h: langinfo.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_LANGINFO_H''@|$(HAVE_LANGINFO_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LANGINFO_H''@|$(NEXT_LANGINFO_H)|g' \ -e 's/@''GNULIB_NL_LANGINFO''@/$(GL_GNULIB_NL_LANGINFO)/g' \ -e 's|@''HAVE_LANGINFO_CODESET''@|$(HAVE_LANGINFO_CODESET)|g' \ -e 's|@''HAVE_LANGINFO_T_FMT_AMPM''@|$(HAVE_LANGINFO_T_FMT_AMPM)|g' \ -e 's|@''HAVE_LANGINFO_ALTMON''@|$(HAVE_LANGINFO_ALTMON)|g' \ -e 's|@''HAVE_LANGINFO_ERA''@|$(HAVE_LANGINFO_ERA)|g' \ -e 's|@''HAVE_LANGINFO_YESEXPR''@|$(HAVE_LANGINFO_YESEXPR)|g' \ -e 's|@''HAVE_NL_LANGINFO''@|$(HAVE_NL_LANGINFO)|g' \ -e 's|@''REPLACE_NL_LANGINFO''@|$(REPLACE_NL_LANGINFO)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/langinfo.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <limits.h> when the system # doesn't have one that is compatible with GNU. @GL_GENERATE_LIMITS_H_TRUE@limits.h: limits.in.h $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_LIMITS_H_TRUE@ -e 's|@''NEXT_LIMITS_H''@|$(NEXT_LIMITS_H)|g' \ @GL_GENERATE_LIMITS_H_TRUE@ $(srcdir)/limits.in.h > $@-t @GL_GENERATE_LIMITS_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_LIMITS_H_FALSE@limits.h: $(top_builddir)/config.status @GL_GENERATE_LIMITS_H_FALSE@ rm -f $@ # We need the following in order to create <locale.h> when the system # doesn't have one that provides all definitions. locale.h: locale.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_LOCALE_H''@|$(NEXT_LOCALE_H)|g' \ -e 's/@''GNULIB_LOCALECONV''@/$(GL_GNULIB_LOCALECONV)/g' \ -e 's/@''GNULIB_SETLOCALE''@/$(GL_GNULIB_SETLOCALE)/g' \ -e 's/@''GNULIB_SETLOCALE_NULL''@/$(GL_GNULIB_SETLOCALE_NULL)/g' \ -e 's/@''GNULIB_DUPLOCALE''@/$(GL_GNULIB_DUPLOCALE)/g' \ -e 's/@''GNULIB_LOCALENAME''@/$(GL_GNULIB_LOCALENAME)/g' \ -e 's|@''HAVE_NEWLOCALE''@|$(HAVE_NEWLOCALE)|g' \ -e 's|@''HAVE_DUPLOCALE''@|$(HAVE_DUPLOCALE)|g' \ -e 's|@''HAVE_FREELOCALE''@|$(HAVE_FREELOCALE)|g' \ -e 's|@''HAVE_XLOCALE_H''@|$(HAVE_XLOCALE_H)|g' \ -e 's|@''REPLACE_LOCALECONV''@|$(REPLACE_LOCALECONV)|g' \ -e 's|@''REPLACE_SETLOCALE''@|$(REPLACE_SETLOCALE)|g' \ -e 's|@''REPLACE_NEWLOCALE''@|$(REPLACE_NEWLOCALE)|g' \ -e 's|@''REPLACE_DUPLOCALE''@|$(REPLACE_DUPLOCALE)|g' \ -e 's|@''REPLACE_FREELOCALE''@|$(REPLACE_FREELOCALE)|g' \ -e 's|@''REPLACE_STRUCT_LCONV''@|$(REPLACE_STRUCT_LCONV)|g' \ -e 's|@''LOCALENAME_ENHANCE_LOCALE_FUNCS''@|$(LOCALENAME_ENHANCE_LOCALE_FUNCS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/locale.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <math.h> when the system # doesn't have one that works with the given compiler. math.h: math.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT_AS_FIRST_DIRECTIVE''@|$(INCLUDE_NEXT_AS_FIRST_DIRECTIVE)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_AS_FIRST_DIRECTIVE_MATH_H''@|$(NEXT_AS_FIRST_DIRECTIVE_MATH_H)|g' \ -e 's/@''GNULIB_ACOSF''@/$(GL_GNULIB_ACOSF)/g' \ -e 's/@''GNULIB_ACOSL''@/$(GL_GNULIB_ACOSL)/g' \ -e 's/@''GNULIB_ASINF''@/$(GL_GNULIB_ASINF)/g' \ -e 's/@''GNULIB_ASINL''@/$(GL_GNULIB_ASINL)/g' \ -e 's/@''GNULIB_ATANF''@/$(GL_GNULIB_ATANF)/g' \ -e 's/@''GNULIB_ATANL''@/$(GL_GNULIB_ATANL)/g' \ -e 's/@''GNULIB_ATAN2F''@/$(GL_GNULIB_ATAN2F)/g' \ -e 's/@''GNULIB_CBRT''@/$(GL_GNULIB_CBRT)/g' \ -e 's/@''GNULIB_CBRTF''@/$(GL_GNULIB_CBRTF)/g' \ -e 's/@''GNULIB_CBRTL''@/$(GL_GNULIB_CBRTL)/g' \ -e 's/@''GNULIB_CEIL''@/$(GL_GNULIB_CEIL)/g' \ -e 's/@''GNULIB_CEILF''@/$(GL_GNULIB_CEILF)/g' \ -e 's/@''GNULIB_CEILL''@/$(GL_GNULIB_CEILL)/g' \ -e 's/@''GNULIB_COPYSIGN''@/$(GL_GNULIB_COPYSIGN)/g' \ -e 's/@''GNULIB_COPYSIGNF''@/$(GL_GNULIB_COPYSIGNF)/g' \ -e 's/@''GNULIB_COPYSIGNL''@/$(GL_GNULIB_COPYSIGNL)/g' \ -e 's/@''GNULIB_COSF''@/$(GL_GNULIB_COSF)/g' \ -e 's/@''GNULIB_COSL''@/$(GL_GNULIB_COSL)/g' \ -e 's/@''GNULIB_COSHF''@/$(GL_GNULIB_COSHF)/g' \ -e 's/@''GNULIB_EXPF''@/$(GL_GNULIB_EXPF)/g' \ -e 's/@''GNULIB_EXPL''@/$(GL_GNULIB_EXPL)/g' \ -e 's/@''GNULIB_EXP2''@/$(GL_GNULIB_EXP2)/g' \ -e 's/@''GNULIB_EXP2F''@/$(GL_GNULIB_EXP2F)/g' \ -e 's/@''GNULIB_EXP2L''@/$(GL_GNULIB_EXP2L)/g' \ -e 's/@''GNULIB_EXPM1''@/$(GL_GNULIB_EXPM1)/g' \ -e 's/@''GNULIB_EXPM1F''@/$(GL_GNULIB_EXPM1F)/g' \ -e 's/@''GNULIB_EXPM1L''@/$(GL_GNULIB_EXPM1L)/g' \ -e 's/@''GNULIB_FABSF''@/$(GL_GNULIB_FABSF)/g' \ -e 's/@''GNULIB_FABSL''@/$(GL_GNULIB_FABSL)/g' \ -e 's/@''GNULIB_FLOOR''@/$(GL_GNULIB_FLOOR)/g' \ -e 's/@''GNULIB_FLOORF''@/$(GL_GNULIB_FLOORF)/g' \ -e 's/@''GNULIB_FLOORL''@/$(GL_GNULIB_FLOORL)/g' \ -e 's/@''GNULIB_FMA''@/$(GL_GNULIB_FMA)/g' \ -e 's/@''GNULIB_FMAF''@/$(GL_GNULIB_FMAF)/g' \ -e 's/@''GNULIB_FMAL''@/$(GL_GNULIB_FMAL)/g' \ -e 's/@''GNULIB_FMOD''@/$(GL_GNULIB_FMOD)/g' \ -e 's/@''GNULIB_FMODF''@/$(GL_GNULIB_FMODF)/g' \ -e 's/@''GNULIB_FMODL''@/$(GL_GNULIB_FMODL)/g' \ -e 's/@''GNULIB_FREXPF''@/$(GL_GNULIB_FREXPF)/g' \ -e 's/@''GNULIB_FREXP''@/$(GL_GNULIB_FREXP)/g' \ -e 's/@''GNULIB_FREXPL''@/$(GL_GNULIB_FREXPL)/g' \ -e 's/@''GNULIB_HYPOT''@/$(GL_GNULIB_HYPOT)/g' \ -e 's/@''GNULIB_HYPOTF''@/$(GL_GNULIB_HYPOTF)/g' \ -e 's/@''GNULIB_HYPOTL''@/$(GL_GNULIB_HYPOTL)/g' \ < $(srcdir)/math.in.h | \ sed -e 's/@''GNULIB_ILOGB''@/$(GL_GNULIB_ILOGB)/g' \ -e 's/@''GNULIB_ILOGBF''@/$(GL_GNULIB_ILOGBF)/g' \ -e 's/@''GNULIB_ILOGBL''@/$(GL_GNULIB_ILOGBL)/g' \ -e 's/@''GNULIB_ISFINITE''@/$(GL_GNULIB_ISFINITE)/g' \ -e 's/@''GNULIB_ISINF''@/$(GL_GNULIB_ISINF)/g' \ -e 's/@''GNULIB_ISNAN''@/$(GL_GNULIB_ISNAN)/g' \ -e 's/@''GNULIB_ISNANF''@/$(GL_GNULIB_ISNANF)/g' \ -e 's/@''GNULIB_ISNAND''@/$(GL_GNULIB_ISNAND)/g' \ -e 's/@''GNULIB_ISNANL''@/$(GL_GNULIB_ISNANL)/g' \ -e 's/@''GNULIB_LDEXPF''@/$(GL_GNULIB_LDEXPF)/g' \ -e 's/@''GNULIB_LDEXPL''@/$(GL_GNULIB_LDEXPL)/g' \ -e 's/@''GNULIB_LOG''@/$(GL_GNULIB_LOG)/g' \ -e 's/@''GNULIB_LOGF''@/$(GL_GNULIB_LOGF)/g' \ -e 's/@''GNULIB_LOGL''@/$(GL_GNULIB_LOGL)/g' \ -e 's/@''GNULIB_LOG10''@/$(GL_GNULIB_LOG10)/g' \ -e 's/@''GNULIB_LOG10F''@/$(GL_GNULIB_LOG10F)/g' \ -e 's/@''GNULIB_LOG10L''@/$(GL_GNULIB_LOG10L)/g' \ -e 's/@''GNULIB_LOG1P''@/$(GL_GNULIB_LOG1P)/g' \ -e 's/@''GNULIB_LOG1PF''@/$(GL_GNULIB_LOG1PF)/g' \ -e 's/@''GNULIB_LOG1PL''@/$(GL_GNULIB_LOG1PL)/g' \ -e 's/@''GNULIB_LOG2''@/$(GL_GNULIB_LOG2)/g' \ -e 's/@''GNULIB_LOG2F''@/$(GL_GNULIB_LOG2F)/g' \ -e 's/@''GNULIB_LOG2L''@/$(GL_GNULIB_LOG2L)/g' \ -e 's/@''GNULIB_LOGB''@/$(GL_GNULIB_LOGB)/g' \ -e 's/@''GNULIB_LOGBF''@/$(GL_GNULIB_LOGBF)/g' \ -e 's/@''GNULIB_LOGBL''@/$(GL_GNULIB_LOGBL)/g' \ -e 's/@''GNULIB_MODF''@/$(GL_GNULIB_MODF)/g' \ -e 's/@''GNULIB_MODFF''@/$(GL_GNULIB_MODFF)/g' \ -e 's/@''GNULIB_MODFL''@/$(GL_GNULIB_MODFL)/g' \ -e 's/@''GNULIB_POWF''@/$(GL_GNULIB_POWF)/g' \ -e 's/@''GNULIB_REMAINDER''@/$(GL_GNULIB_REMAINDER)/g' \ -e 's/@''GNULIB_REMAINDERF''@/$(GL_GNULIB_REMAINDERF)/g' \ -e 's/@''GNULIB_REMAINDERL''@/$(GL_GNULIB_REMAINDERL)/g' \ -e 's/@''GNULIB_RINT''@/$(GL_GNULIB_RINT)/g' \ -e 's/@''GNULIB_RINTF''@/$(GL_GNULIB_RINTF)/g' \ -e 's/@''GNULIB_RINTL''@/$(GL_GNULIB_RINTL)/g' \ -e 's/@''GNULIB_ROUND''@/$(GL_GNULIB_ROUND)/g' \ -e 's/@''GNULIB_ROUNDF''@/$(GL_GNULIB_ROUNDF)/g' \ -e 's/@''GNULIB_ROUNDL''@/$(GL_GNULIB_ROUNDL)/g' \ -e 's/@''GNULIB_SIGNBIT''@/$(GL_GNULIB_SIGNBIT)/g' \ -e 's/@''GNULIB_SINF''@/$(GL_GNULIB_SINF)/g' \ -e 's/@''GNULIB_SINL''@/$(GL_GNULIB_SINL)/g' \ -e 's/@''GNULIB_SINHF''@/$(GL_GNULIB_SINHF)/g' \ -e 's/@''GNULIB_SQRTF''@/$(GL_GNULIB_SQRTF)/g' \ -e 's/@''GNULIB_SQRTL''@/$(GL_GNULIB_SQRTL)/g' \ -e 's/@''GNULIB_TANF''@/$(GL_GNULIB_TANF)/g' \ -e 's/@''GNULIB_TANL''@/$(GL_GNULIB_TANL)/g' \ -e 's/@''GNULIB_TANHF''@/$(GL_GNULIB_TANHF)/g' \ -e 's/@''GNULIB_TRUNC''@/$(GL_GNULIB_TRUNC)/g' \ -e 's/@''GNULIB_TRUNCF''@/$(GL_GNULIB_TRUNCF)/g' \ -e 's/@''GNULIB_TRUNCL''@/$(GL_GNULIB_TRUNCL)/g' \ -e 's/@''GNULIB_MDA_J0''@/$(GL_GNULIB_MDA_J0)/g' \ -e 's/@''GNULIB_MDA_J1''@/$(GL_GNULIB_MDA_J1)/g' \ -e 's/@''GNULIB_MDA_JN''@/$(GL_GNULIB_MDA_JN)/g' \ -e 's/@''GNULIB_MDA_Y0''@/$(GL_GNULIB_MDA_Y0)/g' \ -e 's/@''GNULIB_MDA_Y1''@/$(GL_GNULIB_MDA_Y1)/g' \ -e 's/@''GNULIB_MDA_YN''@/$(GL_GNULIB_MDA_YN)/g' \ | \ sed -e 's|@''HAVE_ACOSF''@|$(HAVE_ACOSF)|g' \ -e 's|@''HAVE_ACOSL''@|$(HAVE_ACOSL)|g' \ -e 's|@''HAVE_ASINF''@|$(HAVE_ASINF)|g' \ -e 's|@''HAVE_ASINL''@|$(HAVE_ASINL)|g' \ -e 's|@''HAVE_ATANF''@|$(HAVE_ATANF)|g' \ -e 's|@''HAVE_ATANL''@|$(HAVE_ATANL)|g' \ -e 's|@''HAVE_ATAN2F''@|$(HAVE_ATAN2F)|g' \ -e 's|@''HAVE_CBRT''@|$(HAVE_CBRT)|g' \ -e 's|@''HAVE_CBRTF''@|$(HAVE_CBRTF)|g' \ -e 's|@''HAVE_CBRTL''@|$(HAVE_CBRTL)|g' \ -e 's|@''HAVE_COPYSIGN''@|$(HAVE_COPYSIGN)|g' \ -e 's|@''HAVE_COPYSIGNL''@|$(HAVE_COPYSIGNL)|g' \ -e 's|@''HAVE_COSF''@|$(HAVE_COSF)|g' \ -e 's|@''HAVE_COSL''@|$(HAVE_COSL)|g' \ -e 's|@''HAVE_COSHF''@|$(HAVE_COSHF)|g' \ -e 's|@''HAVE_EXPF''@|$(HAVE_EXPF)|g' \ -e 's|@''HAVE_EXPL''@|$(HAVE_EXPL)|g' \ -e 's|@''HAVE_EXPM1''@|$(HAVE_EXPM1)|g' \ -e 's|@''HAVE_EXPM1F''@|$(HAVE_EXPM1F)|g' \ -e 's|@''HAVE_FABSF''@|$(HAVE_FABSF)|g' \ -e 's|@''HAVE_FABSL''@|$(HAVE_FABSL)|g' \ -e 's|@''HAVE_FMA''@|$(HAVE_FMA)|g' \ -e 's|@''HAVE_FMAF''@|$(HAVE_FMAF)|g' \ -e 's|@''HAVE_FMAL''@|$(HAVE_FMAL)|g' \ -e 's|@''HAVE_FMODF''@|$(HAVE_FMODF)|g' \ -e 's|@''HAVE_FMODL''@|$(HAVE_FMODL)|g' \ -e 's|@''HAVE_FREXPF''@|$(HAVE_FREXPF)|g' \ -e 's|@''HAVE_HYPOTF''@|$(HAVE_HYPOTF)|g' \ -e 's|@''HAVE_HYPOTL''@|$(HAVE_HYPOTL)|g' \ -e 's|@''HAVE_ILOGB''@|$(HAVE_ILOGB)|g' \ -e 's|@''HAVE_ILOGBF''@|$(HAVE_ILOGBF)|g' \ -e 's|@''HAVE_ILOGBL''@|$(HAVE_ILOGBL)|g' \ -e 's|@''HAVE_ISNANF''@|$(HAVE_ISNANF)|g' \ -e 's|@''HAVE_ISNAND''@|$(HAVE_ISNAND)|g' \ -e 's|@''HAVE_ISNANL''@|$(HAVE_ISNANL)|g' \ -e 's|@''HAVE_LDEXPF''@|$(HAVE_LDEXPF)|g' \ -e 's|@''HAVE_LOGF''@|$(HAVE_LOGF)|g' \ -e 's|@''HAVE_LOGL''@|$(HAVE_LOGL)|g' \ -e 's|@''HAVE_LOG10F''@|$(HAVE_LOG10F)|g' \ -e 's|@''HAVE_LOG10L''@|$(HAVE_LOG10L)|g' \ -e 's|@''HAVE_LOG1P''@|$(HAVE_LOG1P)|g' \ -e 's|@''HAVE_LOG1PF''@|$(HAVE_LOG1PF)|g' \ -e 's|@''HAVE_LOG1PL''@|$(HAVE_LOG1PL)|g' \ -e 's|@''HAVE_LOGBF''@|$(HAVE_LOGBF)|g' \ -e 's|@''HAVE_LOGBL''@|$(HAVE_LOGBL)|g' \ -e 's|@''HAVE_MODFF''@|$(HAVE_MODFF)|g' \ -e 's|@''HAVE_MODFL''@|$(HAVE_MODFL)|g' \ -e 's|@''HAVE_POWF''@|$(HAVE_POWF)|g' \ -e 's|@''HAVE_REMAINDER''@|$(HAVE_REMAINDER)|g' \ -e 's|@''HAVE_REMAINDERF''@|$(HAVE_REMAINDERF)|g' \ -e 's|@''HAVE_RINT''@|$(HAVE_RINT)|g' \ -e 's|@''HAVE_RINTL''@|$(HAVE_RINTL)|g' \ -e 's|@''HAVE_SINF''@|$(HAVE_SINF)|g' \ -e 's|@''HAVE_SINL''@|$(HAVE_SINL)|g' \ -e 's|@''HAVE_SINHF''@|$(HAVE_SINHF)|g' \ -e 's|@''HAVE_SQRTF''@|$(HAVE_SQRTF)|g' \ -e 's|@''HAVE_SQRTL''@|$(HAVE_SQRTL)|g' \ -e 's|@''HAVE_TANF''@|$(HAVE_TANF)|g' \ -e 's|@''HAVE_TANL''@|$(HAVE_TANL)|g' \ -e 's|@''HAVE_TANHF''@|$(HAVE_TANHF)|g' \ -e 's|@''HAVE_DECL_ACOSL''@|$(HAVE_DECL_ACOSL)|g' \ -e 's|@''HAVE_DECL_ASINL''@|$(HAVE_DECL_ASINL)|g' \ -e 's|@''HAVE_DECL_ATANL''@|$(HAVE_DECL_ATANL)|g' \ -e 's|@''HAVE_DECL_CBRTF''@|$(HAVE_DECL_CBRTF)|g' \ -e 's|@''HAVE_DECL_CBRTL''@|$(HAVE_DECL_CBRTL)|g' \ -e 's|@''HAVE_DECL_CEILF''@|$(HAVE_DECL_CEILF)|g' \ -e 's|@''HAVE_DECL_CEILL''@|$(HAVE_DECL_CEILL)|g' \ -e 's|@''HAVE_DECL_COPYSIGNF''@|$(HAVE_DECL_COPYSIGNF)|g' \ -e 's|@''HAVE_DECL_COSL''@|$(HAVE_DECL_COSL)|g' \ -e 's|@''HAVE_DECL_EXPL''@|$(HAVE_DECL_EXPL)|g' \ -e 's|@''HAVE_DECL_EXP2''@|$(HAVE_DECL_EXP2)|g' \ -e 's|@''HAVE_DECL_EXP2F''@|$(HAVE_DECL_EXP2F)|g' \ -e 's|@''HAVE_DECL_EXP2L''@|$(HAVE_DECL_EXP2L)|g' \ -e 's|@''HAVE_DECL_EXPM1L''@|$(HAVE_DECL_EXPM1L)|g' \ -e 's|@''HAVE_DECL_FLOORF''@|$(HAVE_DECL_FLOORF)|g' \ -e 's|@''HAVE_DECL_FLOORL''@|$(HAVE_DECL_FLOORL)|g' \ -e 's|@''HAVE_DECL_FREXPL''@|$(HAVE_DECL_FREXPL)|g' \ -e 's|@''HAVE_DECL_LDEXPL''@|$(HAVE_DECL_LDEXPL)|g' \ -e 's|@''HAVE_DECL_LOGL''@|$(HAVE_DECL_LOGL)|g' \ -e 's|@''HAVE_DECL_LOG10L''@|$(HAVE_DECL_LOG10L)|g' \ -e 's|@''HAVE_DECL_LOG2''@|$(HAVE_DECL_LOG2)|g' \ -e 's|@''HAVE_DECL_LOG2F''@|$(HAVE_DECL_LOG2F)|g' \ -e 's|@''HAVE_DECL_LOG2L''@|$(HAVE_DECL_LOG2L)|g' \ -e 's|@''HAVE_DECL_LOGB''@|$(HAVE_DECL_LOGB)|g' \ -e 's|@''HAVE_DECL_REMAINDER''@|$(HAVE_DECL_REMAINDER)|g' \ -e 's|@''HAVE_DECL_REMAINDERL''@|$(HAVE_DECL_REMAINDERL)|g' \ -e 's|@''HAVE_DECL_RINTF''@|$(HAVE_DECL_RINTF)|g' \ -e 's|@''HAVE_DECL_ROUND''@|$(HAVE_DECL_ROUND)|g' \ -e 's|@''HAVE_DECL_ROUNDF''@|$(HAVE_DECL_ROUNDF)|g' \ -e 's|@''HAVE_DECL_ROUNDL''@|$(HAVE_DECL_ROUNDL)|g' \ -e 's|@''HAVE_DECL_SINL''@|$(HAVE_DECL_SINL)|g' \ -e 's|@''HAVE_DECL_SQRTL''@|$(HAVE_DECL_SQRTL)|g' \ -e 's|@''HAVE_DECL_TANL''@|$(HAVE_DECL_TANL)|g' \ -e 's|@''HAVE_DECL_TRUNC''@|$(HAVE_DECL_TRUNC)|g' \ -e 's|@''HAVE_DECL_TRUNCF''@|$(HAVE_DECL_TRUNCF)|g' \ -e 's|@''HAVE_DECL_TRUNCL''@|$(HAVE_DECL_TRUNCL)|g' \ | \ sed -e 's|@''REPLACE_ACOSF''@|$(REPLACE_ACOSF)|g' \ -e 's|@''REPLACE_ASINF''@|$(REPLACE_ASINF)|g' \ -e 's|@''REPLACE_ATANF''@|$(REPLACE_ATANF)|g' \ -e 's|@''REPLACE_ATAN2F''@|$(REPLACE_ATAN2F)|g' \ -e 's|@''REPLACE_CBRTF''@|$(REPLACE_CBRTF)|g' \ -e 's|@''REPLACE_CBRTL''@|$(REPLACE_CBRTL)|g' \ -e 's|@''REPLACE_CEIL''@|$(REPLACE_CEIL)|g' \ -e 's|@''REPLACE_CEILF''@|$(REPLACE_CEILF)|g' \ -e 's|@''REPLACE_CEILL''@|$(REPLACE_CEILL)|g' \ -e 's|@''REPLACE_COSF''@|$(REPLACE_COSF)|g' \ -e 's|@''REPLACE_COSHF''@|$(REPLACE_COSHF)|g' \ -e 's|@''REPLACE_EXPF''@|$(REPLACE_EXPF)|g' \ -e 's|@''REPLACE_EXPL''@|$(REPLACE_EXPL)|g' \ -e 's|@''REPLACE_EXPM1''@|$(REPLACE_EXPM1)|g' \ -e 's|@''REPLACE_EXPM1F''@|$(REPLACE_EXPM1F)|g' \ -e 's|@''REPLACE_EXPM1L''@|$(REPLACE_EXPM1L)|g' \ -e 's|@''REPLACE_EXP2''@|$(REPLACE_EXP2)|g' \ -e 's|@''REPLACE_EXP2L''@|$(REPLACE_EXP2L)|g' \ -e 's|@''REPLACE_FABSL''@|$(REPLACE_FABSL)|g' \ -e 's|@''REPLACE_FLOOR''@|$(REPLACE_FLOOR)|g' \ -e 's|@''REPLACE_FLOORF''@|$(REPLACE_FLOORF)|g' \ -e 's|@''REPLACE_FLOORL''@|$(REPLACE_FLOORL)|g' \ -e 's|@''REPLACE_FMA''@|$(REPLACE_FMA)|g' \ -e 's|@''REPLACE_FMAF''@|$(REPLACE_FMAF)|g' \ -e 's|@''REPLACE_FMAL''@|$(REPLACE_FMAL)|g' \ -e 's|@''REPLACE_FMOD''@|$(REPLACE_FMOD)|g' \ -e 's|@''REPLACE_FMODF''@|$(REPLACE_FMODF)|g' \ -e 's|@''REPLACE_FMODL''@|$(REPLACE_FMODL)|g' \ -e 's|@''REPLACE_FREXPF''@|$(REPLACE_FREXPF)|g' \ -e 's|@''REPLACE_FREXP''@|$(REPLACE_FREXP)|g' \ -e 's|@''REPLACE_FREXPL''@|$(REPLACE_FREXPL)|g' \ -e 's|@''REPLACE_HUGE_VAL''@|$(REPLACE_HUGE_VAL)|g' \ -e 's|@''REPLACE_HYPOT''@|$(REPLACE_HYPOT)|g' \ -e 's|@''REPLACE_HYPOTF''@|$(REPLACE_HYPOTF)|g' \ -e 's|@''REPLACE_HYPOTL''@|$(REPLACE_HYPOTL)|g' \ -e 's|@''REPLACE_ILOGB''@|$(REPLACE_ILOGB)|g' \ -e 's|@''REPLACE_ILOGBF''@|$(REPLACE_ILOGBF)|g' \ -e 's|@''REPLACE_ILOGBL''@|$(REPLACE_ILOGBL)|g' \ -e 's|@''REPLACE_ISFINITE''@|$(REPLACE_ISFINITE)|g' \ -e 's|@''REPLACE_ISINF''@|$(REPLACE_ISINF)|g' \ -e 's|@''REPLACE_ISNAN''@|$(REPLACE_ISNAN)|g' \ -e 's|@''REPLACE_ITOLD''@|$(REPLACE_ITOLD)|g' \ -e 's|@''REPLACE_LDEXPL''@|$(REPLACE_LDEXPL)|g' \ -e 's|@''REPLACE_LOG''@|$(REPLACE_LOG)|g' \ -e 's|@''REPLACE_LOGF''@|$(REPLACE_LOGF)|g' \ -e 's|@''REPLACE_LOGL''@|$(REPLACE_LOGL)|g' \ -e 's|@''REPLACE_LOG10''@|$(REPLACE_LOG10)|g' \ -e 's|@''REPLACE_LOG10F''@|$(REPLACE_LOG10F)|g' \ -e 's|@''REPLACE_LOG10L''@|$(REPLACE_LOG10L)|g' \ -e 's|@''REPLACE_LOG1P''@|$(REPLACE_LOG1P)|g' \ -e 's|@''REPLACE_LOG1PF''@|$(REPLACE_LOG1PF)|g' \ -e 's|@''REPLACE_LOG1PL''@|$(REPLACE_LOG1PL)|g' \ -e 's|@''REPLACE_LOG2''@|$(REPLACE_LOG2)|g' \ -e 's|@''REPLACE_LOG2F''@|$(REPLACE_LOG2F)|g' \ -e 's|@''REPLACE_LOG2L''@|$(REPLACE_LOG2L)|g' \ -e 's|@''REPLACE_LOGB''@|$(REPLACE_LOGB)|g' \ -e 's|@''REPLACE_LOGBF''@|$(REPLACE_LOGBF)|g' \ -e 's|@''REPLACE_LOGBL''@|$(REPLACE_LOGBL)|g' \ -e 's|@''REPLACE_MODF''@|$(REPLACE_MODF)|g' \ -e 's|@''REPLACE_MODFF''@|$(REPLACE_MODFF)|g' \ -e 's|@''REPLACE_MODFL''@|$(REPLACE_MODFL)|g' \ -e 's|@''REPLACE_NAN''@|$(REPLACE_NAN)|g' \ -e 's|@''REPLACE_REMAINDER''@|$(REPLACE_REMAINDER)|g' \ -e 's|@''REPLACE_REMAINDERF''@|$(REPLACE_REMAINDERF)|g' \ -e 's|@''REPLACE_REMAINDERL''@|$(REPLACE_REMAINDERL)|g' \ -e 's|@''REPLACE_RINTL''@|$(REPLACE_RINTL)|g' \ -e 's|@''REPLACE_ROUND''@|$(REPLACE_ROUND)|g' \ -e 's|@''REPLACE_ROUNDF''@|$(REPLACE_ROUNDF)|g' \ -e 's|@''REPLACE_ROUNDL''@|$(REPLACE_ROUNDL)|g' \ -e 's|@''REPLACE_SIGNBIT''@|$(REPLACE_SIGNBIT)|g' \ -e 's|@''REPLACE_SIGNBIT_USING_BUILTINS''@|$(REPLACE_SIGNBIT_USING_BUILTINS)|g' \ -e 's|@''REPLACE_SINF''@|$(REPLACE_SINF)|g' \ -e 's|@''REPLACE_SINHF''@|$(REPLACE_SINHF)|g' \ -e 's|@''REPLACE_SQRTF''@|$(REPLACE_SQRTF)|g' \ -e 's|@''REPLACE_SQRTL''@|$(REPLACE_SQRTL)|g' \ -e 's|@''REPLACE_TANF''@|$(REPLACE_TANF)|g' \ -e 's|@''REPLACE_TANHF''@|$(REPLACE_TANHF)|g' \ -e 's|@''REPLACE_TRUNC''@|$(REPLACE_TRUNC)|g' \ -e 's|@''REPLACE_TRUNCF''@|$(REPLACE_TRUNCF)|g' \ -e 's|@''REPLACE_TRUNCL''@|$(REPLACE_TRUNCL)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ # The Automake generated .y.c rule is broken: When executed in a VPATH build, # - The .c file gets generated in the build directory. But since it requires # special tools to rebuild it, we need to distribute it in the tarballs, # and by the GNU Coding Standards # <https://www.gnu.org/prep/standards/html_node/Makefile-Basics.html> # the file should be generated in the source directory. # - The #line directives in the .c file refer to a nonexistent file once it # has been moved from the build directory to the source directory. This # leads to error if 'lcov' is used later. # Additionally, here we assume GNU Bison and therefore don't need the ylwrap # script. # Therefore we override this rule. # Since this is a rule that produces multiple files, we apply the idiom from # <https://lists.gnu.org/archive/html/bug-make/2020-09/msg00008.html>, so that # it works also in parallel 'make'. generate-parse-datetime: $(AM_V_YACC)$(PARSE_DATETIME_BISON) -d $(YFLAGS) $(AM_YFLAGS) $(srcdir)/parse-datetime.y \ && test ':' = '$(PARSE_DATETIME_BISON)' || { \ sed -e 's|".*/parse-datetime\.y"|"parse-datetime.y"|' \ -e 's|"parse-datetime\.tab\.c"|"parse-datetime.c"|' \ -e 's|"parse-datetime\.tab\.h"|"parse-datetime-gen.h"|' \ < parse-datetime.tab.c > parse-datetime.c-tmp \ && sed -e 's|".*/parse-datetime\.y"|"parse-datetime.y"|' \ -e 's|"parse-datetime\.tab\.h"|"parse-datetime-gen.h"|' \ < parse-datetime.tab.h > parse-datetime-gen.h-tmp \ && rm -f parse-datetime.tab.c parse-datetime.tab.h \ && mv parse-datetime.c-tmp $(srcdir)/parse-datetime.c \ && mv parse-datetime-gen.h-tmp $(srcdir)/parse-datetime-gen.h; \ } .PHONY: generate-parse-datetime # The above rule will generate files with time stamp order # parse-datetime.y <= parse-datetime.c <= parse-datetime-gen.h. parse-datetime.c: parse-datetime.y @{ test -f $(srcdir)/parse-datetime.c && test ! $(srcdir)/parse-datetime.c -ot $(srcdir)/parse-datetime.y; } || $(MAKE) generate-parse-datetime parse-datetime-gen.h: parse-datetime.c @{ test -f $(srcdir)/parse-datetime-gen.h && test ! $(srcdir)/parse-datetime-gen.h -ot $(srcdir)/parse-datetime.c; } || $(MAKE) generate-parse-datetime # We need the following in order to create a replacement for <sched.h> when # the system doesn't have one. sched.h: sched.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_SCHED_H''@|$(HAVE_SCHED_H)|g' \ -e 's|@''HAVE_SYS_CDEFS_H''@|$(HAVE_SYS_CDEFS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SCHED_H''@|$(NEXT_SCHED_H)|g' \ -e 's|@''HAVE_STRUCT_SCHED_PARAM''@|$(HAVE_STRUCT_SCHED_PARAM)|g' \ -e 's/@''GNULIB_SCHED_YIELD''@/$(GL_GNULIB_SCHED_YIELD)/g' \ -e 's|@''HAVE_SCHED_YIELD''@|$(HAVE_SCHED_YIELD)|g' \ -e 's|@''REPLACE_SCHED_YIELD''@|$(REPLACE_SCHED_YIELD)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sched.in.h > $@-t $(AM_V_at)mv $@-t $@ malloc/scratch_buffer.gl.h: malloc/scratch_buffer.h $(AM_V_GEN)$(MKDIR_P) 'malloc' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|__always_inline|inline _GL_ATTRIBUTE_ALWAYS_INLINE|g' \ -e 's|__glibc_likely|_GL_LIKELY|g' \ -e 's|__glibc_unlikely|_GL_UNLIKELY|g' \ -e '/libc_hidden_proto/d' \ $(srcdir)/malloc/scratch_buffer.h > $@-t $(AM_V_at)mv $@-t $@ selinux/selinux.h: se-selinux.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) 'selinux' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SELINUX_SELINUX_H''@|$(NEXT_SELINUX_SELINUX_H)|g' \ $(srcdir)/se-selinux.in.h > $@-t $(AM_V_at)mv $@-t $@ @GL_GENERATE_SELINUX_CONTEXT_H_TRUE@selinux/context.h: se-context.in.h $(top_builddir)/config.status @GL_GENERATE_SELINUX_CONTEXT_H_TRUE@ $(AM_V_GEN)$(MKDIR_P) 'selinux' @GL_GENERATE_SELINUX_CONTEXT_H_TRUE@ $(AM_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/se-context.in.h @GL_GENERATE_SELINUX_CONTEXT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_SELINUX_CONTEXT_H_FALSE@selinux/context.h: $(top_builddir)/config.status @GL_GENERATE_SELINUX_CONTEXT_H_FALSE@ rm -f $@ @GL_GENERATE_SELINUX_LABEL_H_TRUE@selinux/label.h: se-label.in.h $(top_builddir)/config.status @GL_GENERATE_SELINUX_LABEL_H_TRUE@ $(AM_V_GEN)$(MKDIR_P) 'selinux' @GL_GENERATE_SELINUX_LABEL_H_TRUE@ $(AM_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/se-label.in.h @GL_GENERATE_SELINUX_LABEL_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_SELINUX_LABEL_H_FALSE@selinux/label.h: $(top_builddir)/config.status @GL_GENERATE_SELINUX_LABEL_H_FALSE@ rm -f $@ # We need the following in order to create <signal.h> when the system # doesn't have a complete one. signal.h: signal.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SIGNAL_H''@|$(NEXT_SIGNAL_H)|g' \ -e 's/@''GNULIB_PTHREAD_SIGMASK''@/$(GL_GNULIB_PTHREAD_SIGMASK)/g' \ -e 's/@''GNULIB_RAISE''@/$(GL_GNULIB_RAISE)/g' \ -e 's/@''GNULIB_SIGNAL_H_SIGPIPE''@/$(GL_GNULIB_SIGNAL_H_SIGPIPE)/g' \ -e 's/@''GNULIB_SIGPROCMASK''@/$(GL_GNULIB_SIGPROCMASK)/g' \ -e 's/@''GNULIB_SIGACTION''@/$(GL_GNULIB_SIGACTION)/g' \ -e 's|@''HAVE_POSIX_SIGNALBLOCKING''@|$(HAVE_POSIX_SIGNALBLOCKING)|g' \ -e 's|@''HAVE_PTHREAD_SIGMASK''@|$(HAVE_PTHREAD_SIGMASK)|g' \ -e 's|@''HAVE_RAISE''@|$(HAVE_RAISE)|g' \ -e 's|@''HAVE_SIGSET_T''@|$(HAVE_SIGSET_T)|g' \ -e 's|@''HAVE_SIGINFO_T''@|$(HAVE_SIGINFO_T)|g' \ -e 's|@''HAVE_SIGACTION''@|$(HAVE_SIGACTION)|g' \ -e 's|@''HAVE_STRUCT_SIGACTION_SA_SIGACTION''@|$(HAVE_STRUCT_SIGACTION_SA_SIGACTION)|g' \ -e 's|@''HAVE_TYPE_VOLATILE_SIG_ATOMIC_T''@|$(HAVE_TYPE_VOLATILE_SIG_ATOMIC_T)|g' \ -e 's|@''HAVE_SIGHANDLER_T''@|$(HAVE_SIGHANDLER_T)|g' \ -e 's|@''REPLACE_PTHREAD_SIGMASK''@|$(REPLACE_PTHREAD_SIGMASK)|g' \ -e 's|@''REPLACE_RAISE''@|$(REPLACE_RAISE)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/signal.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create a replacement for <spawn.h> when # the system doesn't have one. spawn.h: spawn.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_SPAWN_H''@|$(HAVE_SPAWN_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SPAWN_H''@|$(NEXT_SPAWN_H)|g' \ -e 's/@''GNULIB_POSIX_SPAWN''@/$(GL_GNULIB_POSIX_SPAWN)/g' \ -e 's/@''GNULIB_POSIX_SPAWNP''@/$(GL_GNULIB_POSIX_SPAWNP)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)/g' \ -e 's/@''GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY''@/$(GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_INIT''@/$(GL_GNULIB_POSIX_SPAWNATTR_INIT)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETFLAGS''@/$(GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETFLAGS''@/$(GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETPGROUP''@/$(GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETPGROUP''@/$(GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM''@/$(GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM''@/$(GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY''@/$(GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY''@/$(GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT''@/$(GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT''@/$(GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_GETSIGMASK''@/$(GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_SETSIGMASK''@/$(GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK)/g' \ -e 's/@''GNULIB_POSIX_SPAWNATTR_DESTROY''@/$(GL_GNULIB_POSIX_SPAWNATTR_DESTROY)/g' \ -e 's|@''HAVE_POSIX_SPAWN''@|$(HAVE_POSIX_SPAWN)|g' \ -e 's|@''HAVE_POSIX_SPAWNATTR_T''@|$(HAVE_POSIX_SPAWNATTR_T)|g' \ -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_T''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_T)|g' \ -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \ -e 's|@''HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR''@|$(HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)|g' \ -e 's|@''REPLACE_POSIX_SPAWN''@|$(REPLACE_POSIX_SPAWN)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR)|g' \ -e 's|@''REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN''@|$(REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/spawn.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <stdalign.h> when the system # doesn't have one that works. @GL_GENERATE_STDALIGN_H_TRUE@stdalign.h: stdalign.in.h $(top_builddir)/config.status @GL_GENERATE_STDALIGN_H_TRUE@ $(gl_V_at)$(SED_HEADER_TO_AT_t) $(srcdir)/stdalign.in.h @GL_GENERATE_STDALIGN_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_STDALIGN_H_FALSE@stdalign.h: $(top_builddir)/config.status @GL_GENERATE_STDALIGN_H_FALSE@ rm -f $@ # We need the following in order to create <stdarg.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDARG_H_TRUE@stdarg.h: stdarg.in.h $(top_builddir)/config.status @GL_GENERATE_STDARG_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDARG_H_TRUE@ -e 's|@''NEXT_STDARG_H''@|$(NEXT_STDARG_H)|g' \ @GL_GENERATE_STDARG_H_TRUE@ $(srcdir)/stdarg.in.h > $@-t @GL_GENERATE_STDARG_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_STDARG_H_FALSE@stdarg.h: $(top_builddir)/config.status @GL_GENERATE_STDARG_H_FALSE@ rm -f $@ # We need the following in order to create <stdbool.h> when the system # doesn't have one that works. @GL_GENERATE_STDBOOL_H_TRUE@stdbool.h: stdbool.in.h $(top_builddir)/config.status @GL_GENERATE_STDBOOL_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_STDBOOL_H_TRUE@ -e 's/@''HAVE__BOOL''@/$(HAVE__BOOL)/g' \ @GL_GENERATE_STDBOOL_H_TRUE@ $(srcdir)/stdbool.in.h > $@-t @GL_GENERATE_STDBOOL_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_STDBOOL_H_FALSE@stdbool.h: $(top_builddir)/config.status @GL_GENERATE_STDBOOL_H_FALSE@ rm -f $@ # We need the following in order to create <stddef.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDDEF_H_TRUE@stddef.h: stddef.in.h $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''NEXT_STDDEF_H''@|$(NEXT_STDDEF_H)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_MAX_ALIGN_T''@|$(HAVE_MAX_ALIGN_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''HAVE_WCHAR_T''@|$(HAVE_WCHAR_T)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ -e 's|@''REPLACE_NULL''@|$(REPLACE_NULL)|g' \ @GL_GENERATE_STDDEF_H_TRUE@ $(srcdir)/stddef.in.h > $@-t @GL_GENERATE_STDDEF_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_STDDEF_H_FALSE@stddef.h: $(top_builddir)/config.status @GL_GENERATE_STDDEF_H_FALSE@ rm -f $@ # We need the following in order to create <stdint.h> when the system # doesn't have one that works with the given compiler. @GL_GENERATE_STDINT_H_TRUE@stdint.h: stdint.in.h $(top_builddir)/config.status @GL_GENERATE_STDINT_H_TRUE@ $(gl_V_at)$(SED_HEADER_STDOUT) \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''GUARD_PREFIX''@|GL|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_STDINT_H''@/$(HAVE_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's|@''NEXT_STDINT_H''@|$(NEXT_STDINT_H)|g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_C99_STDINT_H''@/$(HAVE_C99_STDINT_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_TYPES_H''@/$(HAVE_SYS_TYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_INTTYPES_H''@/$(HAVE_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_INTTYPES_H''@/$(HAVE_SYS_INTTYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SYS_BITYPES_H''@/$(HAVE_SYS_BITYPES_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_WCHAR_H''@/$(HAVE_WCHAR_H)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''APPLE_UNIVERSAL_BUILD''@/$(APPLE_UNIVERSAL_BUILD)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_PTRDIFF_T''@/$(BITSIZEOF_PTRDIFF_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''PTRDIFF_T_SUFFIX''@/$(PTRDIFF_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIG_ATOMIC_T''@/$(BITSIZEOF_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_SIG_ATOMIC_T''@/$(HAVE_SIGNED_SIG_ATOMIC_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIG_ATOMIC_T_SUFFIX''@/$(SIG_ATOMIC_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_SIZE_T''@/$(BITSIZEOF_SIZE_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''SIZE_T_SUFFIX''@/$(SIZE_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WCHAR_T''@/$(BITSIZEOF_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WCHAR_T''@/$(HAVE_SIGNED_WCHAR_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WCHAR_T_SUFFIX''@/$(WCHAR_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''BITSIZEOF_WINT_T''@/$(BITSIZEOF_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''HAVE_SIGNED_WINT_T''@/$(HAVE_SIGNED_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''WINT_T_SUFFIX''@/$(WINT_T_SUFFIX)/g' \ @GL_GENERATE_STDINT_H_TRUE@ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ @GL_GENERATE_STDINT_H_TRUE@ $(srcdir)/stdint.in.h > $@-t @GL_GENERATE_STDINT_H_TRUE@ $(AM_V_at)mv $@-t $@ @GL_GENERATE_STDINT_H_FALSE@stdint.h: $(top_builddir)/config.status @GL_GENERATE_STDINT_H_FALSE@ rm -f $@ # We need the following in order to create <stdio.h> when the system # doesn't have one that works with the given compiler. stdio.h: stdio.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDIO_H''@|$(NEXT_STDIO_H)|g' \ -e 's/@''GNULIB_DPRINTF''@/$(GL_GNULIB_DPRINTF)/g' \ -e 's/@''GNULIB_FCLOSE''@/$(GL_GNULIB_FCLOSE)/g' \ -e 's/@''GNULIB_FDOPEN''@/$(GL_GNULIB_FDOPEN)/g' \ -e 's/@''GNULIB_FFLUSH''@/$(GL_GNULIB_FFLUSH)/g' \ -e 's/@''GNULIB_FGETC''@/$(GL_GNULIB_FGETC)/g' \ -e 's/@''GNULIB_FGETS''@/$(GL_GNULIB_FGETS)/g' \ -e 's/@''GNULIB_FOPEN''@/$(GL_GNULIB_FOPEN)/g' \ -e 's/@''GNULIB_FOPEN_GNU''@/$(GL_GNULIB_FOPEN_GNU)/g' \ -e 's/@''GNULIB_FPRINTF''@/$(GL_GNULIB_FPRINTF)/g' \ -e 's/@''GNULIB_FPRINTF_POSIX''@/$(GL_GNULIB_FPRINTF_POSIX)/g' \ -e 's/@''GNULIB_FPURGE''@/$(GL_GNULIB_FPURGE)/g' \ -e 's/@''GNULIB_FPUTC''@/$(GL_GNULIB_FPUTC)/g' \ -e 's/@''GNULIB_FPUTS''@/$(GL_GNULIB_FPUTS)/g' \ -e 's/@''GNULIB_FREAD''@/$(GL_GNULIB_FREAD)/g' \ -e 's/@''GNULIB_FREOPEN''@/$(GL_GNULIB_FREOPEN)/g' \ -e 's/@''GNULIB_FSCANF''@/$(GL_GNULIB_FSCANF)/g' \ -e 's/@''GNULIB_FSEEK''@/$(GL_GNULIB_FSEEK)/g' \ -e 's/@''GNULIB_FSEEKO''@/$(GL_GNULIB_FSEEKO)/g' \ -e 's/@''GNULIB_FTELL''@/$(GL_GNULIB_FTELL)/g' \ -e 's/@''GNULIB_FTELLO''@/$(GL_GNULIB_FTELLO)/g' \ -e 's/@''GNULIB_FWRITE''@/$(GL_GNULIB_FWRITE)/g' \ -e 's/@''GNULIB_GETC''@/$(GL_GNULIB_GETC)/g' \ -e 's/@''GNULIB_GETCHAR''@/$(GL_GNULIB_GETCHAR)/g' \ -e 's/@''GNULIB_GETDELIM''@/$(GL_GNULIB_GETDELIM)/g' \ -e 's/@''GNULIB_GETLINE''@/$(GL_GNULIB_GETLINE)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF''@/$(GL_GNULIB_OBSTACK_PRINTF)/g' \ -e 's/@''GNULIB_OBSTACK_PRINTF_POSIX''@/$(GL_GNULIB_OBSTACK_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PCLOSE''@/$(GL_GNULIB_PCLOSE)/g' \ -e 's/@''GNULIB_PERROR''@/$(GL_GNULIB_PERROR)/g' \ -e 's/@''GNULIB_POPEN''@/$(GL_GNULIB_POPEN)/g' \ -e 's/@''GNULIB_PRINTF''@/$(GL_GNULIB_PRINTF)/g' \ -e 's/@''GNULIB_PRINTF_POSIX''@/$(GL_GNULIB_PRINTF_POSIX)/g' \ -e 's/@''GNULIB_PUTC''@/$(GL_GNULIB_PUTC)/g' \ -e 's/@''GNULIB_PUTCHAR''@/$(GL_GNULIB_PUTCHAR)/g' \ -e 's/@''GNULIB_PUTS''@/$(GL_GNULIB_PUTS)/g' \ -e 's/@''GNULIB_REMOVE''@/$(GL_GNULIB_REMOVE)/g' \ -e 's/@''GNULIB_RENAME''@/$(GL_GNULIB_RENAME)/g' \ -e 's/@''GNULIB_RENAMEAT''@/$(GL_GNULIB_RENAMEAT)/g' \ -e 's/@''GNULIB_SCANF''@/$(GL_GNULIB_SCANF)/g' \ -e 's/@''GNULIB_SNPRINTF''@/$(GL_GNULIB_SNPRINTF)/g' \ -e 's/@''GNULIB_SPRINTF_POSIX''@/$(GL_GNULIB_SPRINTF_POSIX)/g' \ -e 's/@''GNULIB_STDIO_H_NONBLOCKING''@/$(GL_GNULIB_STDIO_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_STDIO_H_SIGPIPE''@/$(GL_GNULIB_STDIO_H_SIGPIPE)/g' \ -e 's/@''GNULIB_TMPFILE''@/$(GL_GNULIB_TMPFILE)/g' \ -e 's/@''GNULIB_VASPRINTF''@/$(GL_GNULIB_VASPRINTF)/g' \ -e 's/@''GNULIB_VDPRINTF''@/$(GL_GNULIB_VDPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF''@/$(GL_GNULIB_VFPRINTF)/g' \ -e 's/@''GNULIB_VFPRINTF_POSIX''@/$(GL_GNULIB_VFPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VFSCANF''@/$(GL_GNULIB_VFSCANF)/g' \ -e 's/@''GNULIB_VSCANF''@/$(GL_GNULIB_VSCANF)/g' \ -e 's/@''GNULIB_VPRINTF''@/$(GL_GNULIB_VPRINTF)/g' \ -e 's/@''GNULIB_VPRINTF_POSIX''@/$(GL_GNULIB_VPRINTF_POSIX)/g' \ -e 's/@''GNULIB_VSNPRINTF''@/$(GL_GNULIB_VSNPRINTF)/g' \ -e 's/@''GNULIB_VSPRINTF_POSIX''@/$(GL_GNULIB_VSPRINTF_POSIX)/g' \ -e 's/@''GNULIB_MDA_FCLOSEALL''@/$(GL_GNULIB_MDA_FCLOSEALL)/g' \ -e 's/@''GNULIB_MDA_FDOPEN''@/$(GL_GNULIB_MDA_FDOPEN)/g' \ -e 's/@''GNULIB_MDA_FILENO''@/$(GL_GNULIB_MDA_FILENO)/g' \ -e 's/@''GNULIB_MDA_GETW''@/$(GL_GNULIB_MDA_GETW)/g' \ -e 's/@''GNULIB_MDA_PUTW''@/$(GL_GNULIB_MDA_PUTW)/g' \ -e 's/@''GNULIB_MDA_TEMPNAM''@/$(GL_GNULIB_MDA_TEMPNAM)/g' \ < $(srcdir)/stdio.in.h | \ sed -e 's|@''HAVE_DECL_FCLOSEALL''@|$(HAVE_DECL_FCLOSEALL)|g' \ -e 's|@''HAVE_DECL_FPURGE''@|$(HAVE_DECL_FPURGE)|g' \ -e 's|@''HAVE_DECL_FSEEKO''@|$(HAVE_DECL_FSEEKO)|g' \ -e 's|@''HAVE_DECL_FTELLO''@|$(HAVE_DECL_FTELLO)|g' \ -e 's|@''HAVE_DECL_GETDELIM''@|$(HAVE_DECL_GETDELIM)|g' \ -e 's|@''HAVE_DECL_GETLINE''@|$(HAVE_DECL_GETLINE)|g' \ -e 's|@''HAVE_DECL_OBSTACK_PRINTF''@|$(HAVE_DECL_OBSTACK_PRINTF)|g' \ -e 's|@''HAVE_DECL_SNPRINTF''@|$(HAVE_DECL_SNPRINTF)|g' \ -e 's|@''HAVE_DECL_VSNPRINTF''@|$(HAVE_DECL_VSNPRINTF)|g' \ -e 's|@''HAVE_DPRINTF''@|$(HAVE_DPRINTF)|g' \ -e 's|@''HAVE_FSEEKO''@|$(HAVE_FSEEKO)|g' \ -e 's|@''HAVE_FTELLO''@|$(HAVE_FTELLO)|g' \ -e 's|@''HAVE_PCLOSE''@|$(HAVE_PCLOSE)|g' \ -e 's|@''HAVE_POPEN''@|$(HAVE_POPEN)|g' \ -e 's|@''HAVE_RENAMEAT''@|$(HAVE_RENAMEAT)|g' \ -e 's|@''HAVE_VASPRINTF''@|$(HAVE_VASPRINTF)|g' \ -e 's|@''HAVE_VDPRINTF''@|$(HAVE_VDPRINTF)|g' \ -e 's|@''REPLACE_DPRINTF''@|$(REPLACE_DPRINTF)|g' \ -e 's|@''REPLACE_FCLOSE''@|$(REPLACE_FCLOSE)|g' \ -e 's|@''REPLACE_FDOPEN''@|$(REPLACE_FDOPEN)|g' \ -e 's|@''REPLACE_FFLUSH''@|$(REPLACE_FFLUSH)|g' \ -e 's|@''REPLACE_FOPEN''@|$(REPLACE_FOPEN)|g' \ -e 's|@''REPLACE_FOPEN_FOR_FOPEN_GNU''@|$(REPLACE_FOPEN_FOR_FOPEN_GNU)|g' \ -e 's|@''REPLACE_FPRINTF''@|$(REPLACE_FPRINTF)|g' \ -e 's|@''REPLACE_FPURGE''@|$(REPLACE_FPURGE)|g' \ -e 's|@''REPLACE_FREOPEN''@|$(REPLACE_FREOPEN)|g' \ -e 's|@''REPLACE_FSEEK''@|$(REPLACE_FSEEK)|g' \ -e 's|@''REPLACE_FSEEKO''@|$(REPLACE_FSEEKO)|g' \ -e 's|@''REPLACE_FTELL''@|$(REPLACE_FTELL)|g' \ -e 's|@''REPLACE_FTELLO''@|$(REPLACE_FTELLO)|g' \ -e 's|@''REPLACE_GETDELIM''@|$(REPLACE_GETDELIM)|g' \ -e 's|@''REPLACE_GETLINE''@|$(REPLACE_GETLINE)|g' \ -e 's|@''REPLACE_OBSTACK_PRINTF''@|$(REPLACE_OBSTACK_PRINTF)|g' \ -e 's|@''REPLACE_PERROR''@|$(REPLACE_PERROR)|g' \ -e 's|@''REPLACE_POPEN''@|$(REPLACE_POPEN)|g' \ -e 's|@''REPLACE_PRINTF''@|$(REPLACE_PRINTF)|g' \ -e 's|@''REPLACE_REMOVE''@|$(REPLACE_REMOVE)|g' \ -e 's|@''REPLACE_RENAME''@|$(REPLACE_RENAME)|g' \ -e 's|@''REPLACE_RENAMEAT''@|$(REPLACE_RENAMEAT)|g' \ -e 's|@''REPLACE_SNPRINTF''@|$(REPLACE_SNPRINTF)|g' \ -e 's|@''REPLACE_SPRINTF''@|$(REPLACE_SPRINTF)|g' \ -e 's|@''REPLACE_STDIO_READ_FUNCS''@|$(REPLACE_STDIO_READ_FUNCS)|g' \ -e 's|@''REPLACE_STDIO_WRITE_FUNCS''@|$(REPLACE_STDIO_WRITE_FUNCS)|g' \ -e 's|@''REPLACE_TMPFILE''@|$(REPLACE_TMPFILE)|g' \ -e 's|@''REPLACE_VASPRINTF''@|$(REPLACE_VASPRINTF)|g' \ -e 's|@''REPLACE_VDPRINTF''@|$(REPLACE_VDPRINTF)|g' \ -e 's|@''REPLACE_VFPRINTF''@|$(REPLACE_VFPRINTF)|g' \ -e 's|@''REPLACE_VPRINTF''@|$(REPLACE_VPRINTF)|g' \ -e 's|@''REPLACE_VSNPRINTF''@|$(REPLACE_VSNPRINTF)|g' \ -e 's|@''REPLACE_VSPRINTF''@|$(REPLACE_VSPRINTF)|g' \ -e 's|@''ASM_SYMBOL_PREFIX''@|$(ASM_SYMBOL_PREFIX)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <stdlib.h> when the system # doesn't have one that works with the given compiler. stdlib.h: stdlib.in.h $(top_builddir)/config.status $(CXXDEFS_H) \ $(_NORETURN_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STDLIB_H''@|$(NEXT_STDLIB_H)|g' \ -e 's/@''GNULIB__EXIT''@/$(GL_GNULIB__EXIT)/g' \ -e 's/@''GNULIB_ALIGNED_ALLOC''@/$(GL_GNULIB_ALIGNED_ALLOC)/g' \ -e 's/@''GNULIB_ATOLL''@/$(GL_GNULIB_ATOLL)/g' \ -e 's/@''GNULIB_CALLOC_GNU''@/$(GL_GNULIB_CALLOC_GNU)/g' \ -e 's/@''GNULIB_CALLOC_POSIX''@/$(GL_GNULIB_CALLOC_POSIX)/g' \ -e 's/@''GNULIB_CANONICALIZE_FILE_NAME''@/$(GL_GNULIB_CANONICALIZE_FILE_NAME)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ -e 's/@''GNULIB_GETLOADAVG''@/$(GL_GNULIB_GETLOADAVG)/g' \ -e 's/@''GNULIB_GETSUBOPT''@/$(GL_GNULIB_GETSUBOPT)/g' \ -e 's/@''GNULIB_GRANTPT''@/$(GL_GNULIB_GRANTPT)/g' \ -e 's/@''GNULIB_MALLOC_GNU''@/$(GL_GNULIB_MALLOC_GNU)/g' \ -e 's/@''GNULIB_MALLOC_POSIX''@/$(GL_GNULIB_MALLOC_POSIX)/g' \ -e 's/@''GNULIB_MBTOWC''@/$(GL_GNULIB_MBTOWC)/g' \ -e 's/@''GNULIB_MKDTEMP''@/$(GL_GNULIB_MKDTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMP''@/$(GL_GNULIB_MKOSTEMP)/g' \ -e 's/@''GNULIB_MKOSTEMPS''@/$(GL_GNULIB_MKOSTEMPS)/g' \ -e 's/@''GNULIB_MKSTEMP''@/$(GL_GNULIB_MKSTEMP)/g' \ -e 's/@''GNULIB_MKSTEMPS''@/$(GL_GNULIB_MKSTEMPS)/g' \ -e 's/@''GNULIB_POSIX_MEMALIGN''@/$(GL_GNULIB_POSIX_MEMALIGN)/g' \ -e 's/@''GNULIB_POSIX_OPENPT''@/$(GL_GNULIB_POSIX_OPENPT)/g' \ -e 's/@''GNULIB_PTSNAME''@/$(GL_GNULIB_PTSNAME)/g' \ -e 's/@''GNULIB_PTSNAME_R''@/$(GL_GNULIB_PTSNAME_R)/g' \ -e 's/@''GNULIB_PUTENV''@/$(GL_GNULIB_PUTENV)/g' \ -e 's/@''GNULIB_QSORT_R''@/$(GL_GNULIB_QSORT_R)/g' \ -e 's/@''GNULIB_RANDOM''@/$(GL_GNULIB_RANDOM)/g' \ -e 's/@''GNULIB_RANDOM_R''@/$(GL_GNULIB_RANDOM_R)/g' \ -e 's/@''GNULIB_REALLOC_GNU''@/$(GL_GNULIB_REALLOC_GNU)/g' \ -e 's/@''GNULIB_REALLOC_POSIX''@/$(GL_GNULIB_REALLOC_POSIX)/g' \ -e 's/@''GNULIB_REALLOCARRAY''@/$(GL_GNULIB_REALLOCARRAY)/g' \ -e 's/@''GNULIB_REALPATH''@/$(GL_GNULIB_REALPATH)/g' \ -e 's/@''GNULIB_RPMATCH''@/$(GL_GNULIB_RPMATCH)/g' \ -e 's/@''GNULIB_SECURE_GETENV''@/$(GL_GNULIB_SECURE_GETENV)/g' \ -e 's/@''GNULIB_SETENV''@/$(GL_GNULIB_SETENV)/g' \ -e 's/@''GNULIB_STRTOD''@/$(GL_GNULIB_STRTOD)/g' \ -e 's/@''GNULIB_STRTOL''@/$(GL_GNULIB_STRTOL)/g' \ -e 's/@''GNULIB_STRTOLD''@/$(GL_GNULIB_STRTOLD)/g' \ -e 's/@''GNULIB_STRTOLL''@/$(GL_GNULIB_STRTOLL)/g' \ -e 's/@''GNULIB_STRTOUL''@/$(GL_GNULIB_STRTOUL)/g' \ -e 's/@''GNULIB_STRTOULL''@/$(GL_GNULIB_STRTOULL)/g' \ -e 's/@''GNULIB_SYSTEM_POSIX''@/$(GL_GNULIB_SYSTEM_POSIX)/g' \ -e 's/@''GNULIB_UNLOCKPT''@/$(GL_GNULIB_UNLOCKPT)/g' \ -e 's/@''GNULIB_UNSETENV''@/$(GL_GNULIB_UNSETENV)/g' \ -e 's/@''GNULIB_WCTOMB''@/$(GL_GNULIB_WCTOMB)/g' \ -e 's/@''GNULIB_MDA_ECVT''@/$(GL_GNULIB_MDA_ECVT)/g' \ -e 's/@''GNULIB_MDA_FCVT''@/$(GL_GNULIB_MDA_FCVT)/g' \ -e 's/@''GNULIB_MDA_GCVT''@/$(GL_GNULIB_MDA_GCVT)/g' \ -e 's/@''GNULIB_MDA_MKTEMP''@/$(GL_GNULIB_MDA_MKTEMP)/g' \ -e 's/@''GNULIB_MDA_PUTENV''@/$(GL_GNULIB_MDA_PUTENV)/g' \ < $(srcdir)/stdlib.in.h | \ sed -e 's|@''HAVE__EXIT''@|$(HAVE__EXIT)|g' \ -e 's|@''HAVE_ALIGNED_ALLOC''@|$(HAVE_ALIGNED_ALLOC)|g' \ -e 's|@''HAVE_ATOLL''@|$(HAVE_ATOLL)|g' \ -e 's|@''HAVE_CANONICALIZE_FILE_NAME''@|$(HAVE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''HAVE_DECL_ECVT''@|$(HAVE_DECL_ECVT)|g' \ -e 's|@''HAVE_DECL_FCVT''@|$(HAVE_DECL_FCVT)|g' \ -e 's|@''HAVE_DECL_GCVT''@|$(HAVE_DECL_GCVT)|g' \ -e 's|@''HAVE_DECL_GETLOADAVG''@|$(HAVE_DECL_GETLOADAVG)|g' \ -e 's|@''HAVE_GETSUBOPT''@|$(HAVE_GETSUBOPT)|g' \ -e 's|@''HAVE_GRANTPT''@|$(HAVE_GRANTPT)|g' \ -e 's|@''HAVE_INITSTATE''@|$(HAVE_INITSTATE)|g' \ -e 's|@''HAVE_DECL_INITSTATE''@|$(HAVE_DECL_INITSTATE)|g' \ -e 's|@''HAVE_MBTOWC''@|$(HAVE_MBTOWC)|g' \ -e 's|@''HAVE_MKDTEMP''@|$(HAVE_MKDTEMP)|g' \ -e 's|@''HAVE_MKOSTEMP''@|$(HAVE_MKOSTEMP)|g' \ -e 's|@''HAVE_MKOSTEMPS''@|$(HAVE_MKOSTEMPS)|g' \ -e 's|@''HAVE_MKSTEMP''@|$(HAVE_MKSTEMP)|g' \ -e 's|@''HAVE_MKSTEMPS''@|$(HAVE_MKSTEMPS)|g' \ -e 's|@''HAVE_POSIX_MEMALIGN''@|$(HAVE_POSIX_MEMALIGN)|g' \ -e 's|@''HAVE_POSIX_OPENPT''@|$(HAVE_POSIX_OPENPT)|g' \ -e 's|@''HAVE_PTSNAME''@|$(HAVE_PTSNAME)|g' \ -e 's|@''HAVE_PTSNAME_R''@|$(HAVE_PTSNAME_R)|g' \ -e 's|@''HAVE_QSORT_R''@|$(HAVE_QSORT_R)|g' \ -e 's|@''HAVE_RANDOM''@|$(HAVE_RANDOM)|g' \ -e 's|@''HAVE_RANDOM_H''@|$(HAVE_RANDOM_H)|g' \ -e 's|@''HAVE_RANDOM_R''@|$(HAVE_RANDOM_R)|g' \ -e 's|@''HAVE_REALLOCARRAY''@|$(HAVE_REALLOCARRAY)|g' \ -e 's|@''HAVE_REALPATH''@|$(HAVE_REALPATH)|g' \ -e 's|@''HAVE_RPMATCH''@|$(HAVE_RPMATCH)|g' \ -e 's|@''HAVE_SECURE_GETENV''@|$(HAVE_SECURE_GETENV)|g' \ -e 's|@''HAVE_DECL_SETENV''@|$(HAVE_DECL_SETENV)|g' \ -e 's|@''HAVE_SETSTATE''@|$(HAVE_SETSTATE)|g' \ -e 's|@''HAVE_DECL_SETSTATE''@|$(HAVE_DECL_SETSTATE)|g' \ -e 's|@''HAVE_STRTOD''@|$(HAVE_STRTOD)|g' \ -e 's|@''HAVE_STRTOL''@|$(HAVE_STRTOL)|g' \ -e 's|@''HAVE_STRTOLD''@|$(HAVE_STRTOLD)|g' \ -e 's|@''HAVE_STRTOLL''@|$(HAVE_STRTOLL)|g' \ -e 's|@''HAVE_STRTOUL''@|$(HAVE_STRTOUL)|g' \ -e 's|@''HAVE_STRTOULL''@|$(HAVE_STRTOULL)|g' \ -e 's|@''HAVE_STRUCT_RANDOM_DATA''@|$(HAVE_STRUCT_RANDOM_DATA)|g' \ -e 's|@''HAVE_SYS_LOADAVG_H''@|$(HAVE_SYS_LOADAVG_H)|g' \ -e 's|@''HAVE_UNLOCKPT''@|$(HAVE_UNLOCKPT)|g' \ -e 's|@''HAVE_DECL_UNSETENV''@|$(HAVE_DECL_UNSETENV)|g' \ -e 's|@''REPLACE_ALIGNED_ALLOC''@|$(REPLACE_ALIGNED_ALLOC)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_GNU''@|$(REPLACE_CALLOC_FOR_CALLOC_GNU)|g' \ -e 's|@''REPLACE_CALLOC_FOR_CALLOC_POSIX''@|$(REPLACE_CALLOC_FOR_CALLOC_POSIX)|g' \ -e 's|@''REPLACE_CANONICALIZE_FILE_NAME''@|$(REPLACE_CANONICALIZE_FILE_NAME)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_INITSTATE''@|$(REPLACE_INITSTATE)|g' \ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_GNU''@|$(REPLACE_MALLOC_FOR_MALLOC_GNU)|g' \ -e 's|@''REPLACE_MALLOC_FOR_MALLOC_POSIX''@|$(REPLACE_MALLOC_FOR_MALLOC_POSIX)|g' \ -e 's|@''REPLACE_MBTOWC''@|$(REPLACE_MBTOWC)|g' \ -e 's|@''REPLACE_MKSTEMP''@|$(REPLACE_MKSTEMP)|g' \ -e 's|@''REPLACE_POSIX_MEMALIGN''@|$(REPLACE_POSIX_MEMALIGN)|g' \ -e 's|@''REPLACE_PTSNAME''@|$(REPLACE_PTSNAME)|g' \ -e 's|@''REPLACE_PTSNAME_R''@|$(REPLACE_PTSNAME_R)|g' \ -e 's|@''REPLACE_PUTENV''@|$(REPLACE_PUTENV)|g' \ -e 's|@''REPLACE_QSORT_R''@|$(REPLACE_QSORT_R)|g' \ -e 's|@''REPLACE_RANDOM''@|$(REPLACE_RANDOM)|g' \ -e 's|@''REPLACE_RANDOM_R''@|$(REPLACE_RANDOM_R)|g' \ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_GNU''@|$(REPLACE_REALLOC_FOR_REALLOC_GNU)|g' \ -e 's|@''REPLACE_REALLOC_FOR_REALLOC_POSIX''@|$(REPLACE_REALLOC_FOR_REALLOC_POSIX)|g' \ -e 's|@''REPLACE_REALLOCARRAY''@|$(REPLACE_REALLOCARRAY)|g' \ -e 's|@''REPLACE_REALPATH''@|$(REPLACE_REALPATH)|g' \ -e 's|@''REPLACE_SETENV''@|$(REPLACE_SETENV)|g' \ -e 's|@''REPLACE_SETSTATE''@|$(REPLACE_SETSTATE)|g' \ -e 's|@''REPLACE_STRTOD''@|$(REPLACE_STRTOD)|g' \ -e 's|@''REPLACE_STRTOL''@|$(REPLACE_STRTOL)|g' \ -e 's|@''REPLACE_STRTOLD''@|$(REPLACE_STRTOLD)|g' \ -e 's|@''REPLACE_STRTOLL''@|$(REPLACE_STRTOLL)|g' \ -e 's|@''REPLACE_STRTOUL''@|$(REPLACE_STRTOUL)|g' \ -e 's|@''REPLACE_STRTOULL''@|$(REPLACE_STRTOULL)|g' \ -e 's|@''REPLACE_UNSETENV''@|$(REPLACE_UNSETENV)|g' \ -e 's|@''REPLACE_WCTOMB''@|$(REPLACE_WCTOMB)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _Noreturn/r $(_NORETURN_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <string.h> when the system # doesn't have one that works with the given compiler. string.h: string.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRING_H''@|$(NEXT_STRING_H)|g' \ -e 's/@''GNULIB_EXPLICIT_BZERO''@/$(GL_GNULIB_EXPLICIT_BZERO)/g' \ -e 's/@''GNULIB_FFSL''@/$(GL_GNULIB_FFSL)/g' \ -e 's/@''GNULIB_FFSLL''@/$(GL_GNULIB_FFSLL)/g' \ -e 's/@''GNULIB_MBSLEN''@/$(GL_GNULIB_MBSLEN)/g' \ -e 's/@''GNULIB_MBSNLEN''@/$(GL_GNULIB_MBSNLEN)/g' \ -e 's/@''GNULIB_MBSCHR''@/$(GL_GNULIB_MBSCHR)/g' \ -e 's/@''GNULIB_MBSRCHR''@/$(GL_GNULIB_MBSRCHR)/g' \ -e 's/@''GNULIB_MBSSTR''@/$(GL_GNULIB_MBSSTR)/g' \ -e 's/@''GNULIB_MBSCASECMP''@/$(GL_GNULIB_MBSCASECMP)/g' \ -e 's/@''GNULIB_MBSNCASECMP''@/$(GL_GNULIB_MBSNCASECMP)/g' \ -e 's/@''GNULIB_MBSPCASECMP''@/$(GL_GNULIB_MBSPCASECMP)/g' \ -e 's/@''GNULIB_MBSCASESTR''@/$(GL_GNULIB_MBSCASESTR)/g' \ -e 's/@''GNULIB_MBSCSPN''@/$(GL_GNULIB_MBSCSPN)/g' \ -e 's/@''GNULIB_MBSPBRK''@/$(GL_GNULIB_MBSPBRK)/g' \ -e 's/@''GNULIB_MBSSPN''@/$(GL_GNULIB_MBSSPN)/g' \ -e 's/@''GNULIB_MBSSEP''@/$(GL_GNULIB_MBSSEP)/g' \ -e 's/@''GNULIB_MBSTOK_R''@/$(GL_GNULIB_MBSTOK_R)/g' \ -e 's/@''GNULIB_MEMCHR''@/$(GL_GNULIB_MEMCHR)/g' \ -e 's/@''GNULIB_MEMMEM''@/$(GL_GNULIB_MEMMEM)/g' \ -e 's/@''GNULIB_MEMPCPY''@/$(GL_GNULIB_MEMPCPY)/g' \ -e 's/@''GNULIB_MEMRCHR''@/$(GL_GNULIB_MEMRCHR)/g' \ -e 's/@''GNULIB_RAWMEMCHR''@/$(GL_GNULIB_RAWMEMCHR)/g' \ -e 's/@''GNULIB_STPCPY''@/$(GL_GNULIB_STPCPY)/g' \ -e 's/@''GNULIB_STPNCPY''@/$(GL_GNULIB_STPNCPY)/g' \ -e 's/@''GNULIB_STRCHRNUL''@/$(GL_GNULIB_STRCHRNUL)/g' \ -e 's/@''GNULIB_STRDUP''@/$(GL_GNULIB_STRDUP)/g' \ -e 's/@''GNULIB_STRNCAT''@/$(GL_GNULIB_STRNCAT)/g' \ -e 's/@''GNULIB_STRNDUP''@/$(GL_GNULIB_STRNDUP)/g' \ -e 's/@''GNULIB_STRNLEN''@/$(GL_GNULIB_STRNLEN)/g' \ -e 's/@''GNULIB_STRPBRK''@/$(GL_GNULIB_STRPBRK)/g' \ -e 's/@''GNULIB_STRSEP''@/$(GL_GNULIB_STRSEP)/g' \ -e 's/@''GNULIB_STRSTR''@/$(GL_GNULIB_STRSTR)/g' \ -e 's/@''GNULIB_STRCASESTR''@/$(GL_GNULIB_STRCASESTR)/g' \ -e 's/@''GNULIB_STRTOK_R''@/$(GL_GNULIB_STRTOK_R)/g' \ -e 's/@''GNULIB_STRERROR''@/$(GL_GNULIB_STRERROR)/g' \ -e 's/@''GNULIB_STRERROR_R''@/$(GL_GNULIB_STRERROR_R)/g' \ -e 's/@''GNULIB_STRERRORNAME_NP''@/$(GL_GNULIB_STRERRORNAME_NP)/g' \ -e 's/@''GNULIB_SIGABBREV_NP''@/$(GL_GNULIB_SIGABBREV_NP)/g' \ -e 's/@''GNULIB_SIGDESCR_NP''@/$(GL_GNULIB_SIGDESCR_NP)/g' \ -e 's/@''GNULIB_STRSIGNAL''@/$(GL_GNULIB_STRSIGNAL)/g' \ -e 's/@''GNULIB_STRVERSCMP''@/$(GL_GNULIB_STRVERSCMP)/g' \ -e 's/@''GNULIB_MDA_MEMCCPY''@/$(GL_GNULIB_MDA_MEMCCPY)/g' \ -e 's/@''GNULIB_MDA_STRDUP''@/$(GL_GNULIB_MDA_STRDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ < $(srcdir)/string.in.h | \ sed -e 's|@''HAVE_EXPLICIT_BZERO''@|$(HAVE_EXPLICIT_BZERO)|g' \ -e 's|@''HAVE_FFSL''@|$(HAVE_FFSL)|g' \ -e 's|@''HAVE_FFSLL''@|$(HAVE_FFSLL)|g' \ -e 's|@''HAVE_MBSLEN''@|$(HAVE_MBSLEN)|g' \ -e 's|@''HAVE_DECL_MEMMEM''@|$(HAVE_DECL_MEMMEM)|g' \ -e 's|@''HAVE_MEMPCPY''@|$(HAVE_MEMPCPY)|g' \ -e 's|@''HAVE_DECL_MEMRCHR''@|$(HAVE_DECL_MEMRCHR)|g' \ -e 's|@''HAVE_RAWMEMCHR''@|$(HAVE_RAWMEMCHR)|g' \ -e 's|@''HAVE_STPCPY''@|$(HAVE_STPCPY)|g' \ -e 's|@''HAVE_STPNCPY''@|$(HAVE_STPNCPY)|g' \ -e 's|@''HAVE_STRCHRNUL''@|$(HAVE_STRCHRNUL)|g' \ -e 's|@''HAVE_DECL_STRDUP''@|$(HAVE_DECL_STRDUP)|g' \ -e 's|@''HAVE_DECL_STRNDUP''@|$(HAVE_DECL_STRNDUP)|g' \ -e 's|@''HAVE_DECL_STRNLEN''@|$(HAVE_DECL_STRNLEN)|g' \ -e 's|@''HAVE_STRPBRK''@|$(HAVE_STRPBRK)|g' \ -e 's|@''HAVE_STRSEP''@|$(HAVE_STRSEP)|g' \ -e 's|@''HAVE_STRCASESTR''@|$(HAVE_STRCASESTR)|g' \ -e 's|@''HAVE_DECL_STRTOK_R''@|$(HAVE_DECL_STRTOK_R)|g' \ -e 's|@''HAVE_DECL_STRERROR_R''@|$(HAVE_DECL_STRERROR_R)|g' \ -e 's|@''HAVE_STRERRORNAME_NP''@|$(HAVE_STRERRORNAME_NP)|g' \ -e 's|@''HAVE_SIGABBREV_NP''@|$(HAVE_SIGABBREV_NP)|g' \ -e 's|@''HAVE_SIGDESCR_NP''@|$(HAVE_SIGDESCR_NP)|g' \ -e 's|@''HAVE_DECL_STRSIGNAL''@|$(HAVE_DECL_STRSIGNAL)|g' \ -e 's|@''HAVE_STRVERSCMP''@|$(HAVE_STRVERSCMP)|g' \ -e 's|@''REPLACE_FFSLL''@|$(REPLACE_FFSLL)|g' \ -e 's|@''REPLACE_MEMCHR''@|$(REPLACE_MEMCHR)|g' \ -e 's|@''REPLACE_MEMMEM''@|$(REPLACE_MEMMEM)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_STPNCPY''@|$(REPLACE_STPNCPY)|g' \ -e 's|@''REPLACE_STRCHRNUL''@|$(REPLACE_STRCHRNUL)|g' \ -e 's|@''REPLACE_STRDUP''@|$(REPLACE_STRDUP)|g' \ -e 's|@''REPLACE_STRNCAT''@|$(REPLACE_STRNCAT)|g' \ -e 's|@''REPLACE_STRNDUP''@|$(REPLACE_STRNDUP)|g' \ -e 's|@''REPLACE_STRNLEN''@|$(REPLACE_STRNLEN)|g' \ -e 's|@''REPLACE_STRSTR''@|$(REPLACE_STRSTR)|g' \ -e 's|@''REPLACE_STRCASESTR''@|$(REPLACE_STRCASESTR)|g' \ -e 's|@''REPLACE_STRTOK_R''@|$(REPLACE_STRTOK_R)|g' \ -e 's|@''REPLACE_STRERROR''@|$(REPLACE_STRERROR)|g' \ -e 's|@''REPLACE_STRERROR_R''@|$(REPLACE_STRERROR_R)|g' \ -e 's|@''REPLACE_STRERRORNAME_NP''@|$(REPLACE_STRERRORNAME_NP)|g' \ -e 's|@''REPLACE_STRSIGNAL''@|$(REPLACE_STRSIGNAL)|g' \ -e 's|@''UNDEFINE_STRTOK_R''@|$(UNDEFINE_STRTOK_R)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <strings.h> when the system # doesn't have one that works with the given compiler. strings.h: strings.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(ARG_NONNULL_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_STRINGS_H''@|$(HAVE_STRINGS_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_STRINGS_H''@|$(NEXT_STRINGS_H)|g' \ -e 's/@''GNULIB_FFS''@/$(GL_GNULIB_FFS)/g' \ -e 's|@''HAVE_FFS''@|$(HAVE_FFS)|g' \ -e 's|@''HAVE_STRCASECMP''@|$(HAVE_STRCASECMP)|g' \ -e 's|@''HAVE_DECL_STRNCASECMP''@|$(HAVE_DECL_STRNCASECMP)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/strings.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/file.h> when the system # has one that is incomplete. sys/file.h: sys_file.in.h $(top_builddir)/config.status $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_SYS_FILE_H''@/$(HAVE_SYS_FILE_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_FILE_H''@|$(NEXT_SYS_FILE_H)|g' \ -e 's/@''HAVE_FLOCK''@/$(HAVE_FLOCK)/g' \ -e 's/@''GNULIB_FLOCK''@/$(GL_GNULIB_FLOCK)/g' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_file.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/random.h> when the system # doesn't have one. sys/random.h: sys_random.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_RANDOM_H''@|$(NEXT_SYS_RANDOM_H)|g' \ -e 's|@''HAVE_SYS_RANDOM_H''@|$(HAVE_SYS_RANDOM_H)|g' \ -e 's/@''GNULIB_GETRANDOM''@/$(GL_GNULIB_GETRANDOM)/g' \ -e 's/@''HAVE_GETRANDOM''@/$(HAVE_GETRANDOM)/g' \ -e 's/@''REPLACE_GETRANDOM''@/$(REPLACE_GETRANDOM)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_random.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/stat.h> when the system # has one that is incomplete. sys/stat.h: sys_stat.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_STAT_H''@|$(NEXT_SYS_STAT_H)|g' \ -e 's|@''WINDOWS_64_BIT_ST_SIZE''@|$(WINDOWS_64_BIT_ST_SIZE)|g' \ -e 's|@''WINDOWS_STAT_TIMESPEC''@|$(WINDOWS_STAT_TIMESPEC)|g' \ -e 's/@''GNULIB_FCHMODAT''@/$(GL_GNULIB_FCHMODAT)/g' \ -e 's/@''GNULIB_FSTAT''@/$(GL_GNULIB_FSTAT)/g' \ -e 's/@''GNULIB_FSTATAT''@/$(GL_GNULIB_FSTATAT)/g' \ -e 's/@''GNULIB_FUTIMENS''@/$(GL_GNULIB_FUTIMENS)/g' \ -e 's/@''GNULIB_GETUMASK''@/$(GL_GNULIB_GETUMASK)/g' \ -e 's/@''GNULIB_LCHMOD''@/$(GL_GNULIB_LCHMOD)/g' \ -e 's/@''GNULIB_LSTAT''@/$(GL_GNULIB_LSTAT)/g' \ -e 's/@''GNULIB_MKDIR''@/$(GL_GNULIB_MKDIR)/g' \ -e 's/@''GNULIB_MKDIRAT''@/$(GL_GNULIB_MKDIRAT)/g' \ -e 's/@''GNULIB_MKFIFO''@/$(GL_GNULIB_MKFIFO)/g' \ -e 's/@''GNULIB_MKFIFOAT''@/$(GL_GNULIB_MKFIFOAT)/g' \ -e 's/@''GNULIB_MKNOD''@/$(GL_GNULIB_MKNOD)/g' \ -e 's/@''GNULIB_MKNODAT''@/$(GL_GNULIB_MKNODAT)/g' \ -e 's/@''GNULIB_STAT''@/$(GL_GNULIB_STAT)/g' \ -e 's/@''GNULIB_UTIMENSAT''@/$(GL_GNULIB_UTIMENSAT)/g' \ -e 's/@''GNULIB_OVERRIDES_STRUCT_STAT''@/$(GL_GNULIB_OVERRIDES_STRUCT_STAT)/g' \ -e 's/@''GNULIB_MDA_CHMOD''@/$(GL_GNULIB_MDA_CHMOD)/g' \ -e 's/@''GNULIB_MDA_MKDIR''@/$(GL_GNULIB_MDA_MKDIR)/g' \ -e 's/@''GNULIB_MDA_UMASK''@/$(GL_GNULIB_MDA_UMASK)/g' \ -e 's|@''HAVE_FCHMODAT''@|$(HAVE_FCHMODAT)|g' \ -e 's|@''HAVE_FSTATAT''@|$(HAVE_FSTATAT)|g' \ -e 's|@''HAVE_FUTIMENS''@|$(HAVE_FUTIMENS)|g' \ -e 's|@''HAVE_GETUMASK''@|$(HAVE_GETUMASK)|g' \ -e 's|@''HAVE_LCHMOD''@|$(HAVE_LCHMOD)|g' \ -e 's|@''HAVE_LSTAT''@|$(HAVE_LSTAT)|g' \ -e 's|@''HAVE_MKDIRAT''@|$(HAVE_MKDIRAT)|g' \ -e 's|@''HAVE_MKFIFO''@|$(HAVE_MKFIFO)|g' \ -e 's|@''HAVE_MKFIFOAT''@|$(HAVE_MKFIFOAT)|g' \ -e 's|@''HAVE_MKNOD''@|$(HAVE_MKNOD)|g' \ -e 's|@''HAVE_MKNODAT''@|$(HAVE_MKNODAT)|g' \ -e 's|@''HAVE_UTIMENSAT''@|$(HAVE_UTIMENSAT)|g' \ -e 's|@''REPLACE_FCHMODAT''@|$(REPLACE_FCHMODAT)|g' \ -e 's|@''REPLACE_FSTAT''@|$(REPLACE_FSTAT)|g' \ -e 's|@''REPLACE_FSTATAT''@|$(REPLACE_FSTATAT)|g' \ -e 's|@''REPLACE_FUTIMENS''@|$(REPLACE_FUTIMENS)|g' \ -e 's|@''REPLACE_LSTAT''@|$(REPLACE_LSTAT)|g' \ -e 's|@''REPLACE_MKDIR''@|$(REPLACE_MKDIR)|g' \ -e 's|@''REPLACE_MKFIFO''@|$(REPLACE_MKFIFO)|g' \ -e 's|@''REPLACE_MKFIFOAT''@|$(REPLACE_MKFIFOAT)|g' \ -e 's|@''REPLACE_MKNOD''@|$(REPLACE_MKNOD)|g' \ -e 's|@''REPLACE_MKNODAT''@|$(REPLACE_MKNODAT)|g' \ -e 's|@''REPLACE_STAT''@|$(REPLACE_STAT)|g' \ -e 's|@''REPLACE_UTIMENSAT''@|$(REPLACE_UTIMENSAT)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_stat.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/time.h> when the system # doesn't have one that works with the given compiler. sys/time.h: sys_time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_SYS_TIME_H''@/$(HAVE_SYS_TIME_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TIME_H''@|$(NEXT_SYS_TIME_H)|g' \ -e 's/@''GNULIB_GETTIMEOFDAY''@/$(GL_GNULIB_GETTIMEOFDAY)/g' \ -e 's|@''HAVE_WINSOCK2_H''@|$(HAVE_WINSOCK2_H)|g' \ -e 's/@''HAVE_GETTIMEOFDAY''@/$(HAVE_GETTIMEOFDAY)/g' \ -e 's/@''HAVE_STRUCT_TIMEVAL''@/$(HAVE_STRUCT_TIMEVAL)/g' \ -e 's/@''REPLACE_GETTIMEOFDAY''@/$(REPLACE_GETTIMEOFDAY)/g' \ -e 's/@''REPLACE_STRUCT_TIMEVAL''@/$(REPLACE_STRUCT_TIMEVAL)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_time.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/types.h> when the system # doesn't have one that works with the given compiler. sys/types.h: sys_types.in.h $(top_builddir)/config.status $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_TYPES_H''@|$(NEXT_SYS_TYPES_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's|@''WINDOWS_STAT_INODES''@|$(WINDOWS_STAT_INODES)|g' \ $(srcdir)/sys_types.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <sys/wait.h> when the system # has one that is incomplete. sys/wait.h: sys_wait.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(AM_V_GEN)$(MKDIR_P) 'sys' $(AM_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_SYS_WAIT_H''@|$(NEXT_SYS_WAIT_H)|g' \ -e 's/@''GNULIB_WAITPID''@/$(GL_GNULIB_WAITPID)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/sys_wait.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <time.h> when the system # doesn't have one that works with the given compiler. time.h: time.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_TIME_H''@|$(NEXT_TIME_H)|g' \ -e 's/@''GNULIB_CTIME''@/$(GL_GNULIB_CTIME)/g' \ -e 's/@''GNULIB_LOCALTIME''@/$(GL_GNULIB_LOCALTIME)/g' \ -e 's/@''GNULIB_MKTIME''@/$(GL_GNULIB_MKTIME)/g' \ -e 's/@''GNULIB_NANOSLEEP''@/$(GL_GNULIB_NANOSLEEP)/g' \ -e 's/@''GNULIB_STRFTIME''@/$(GL_GNULIB_STRFTIME)/g' \ -e 's/@''GNULIB_STRPTIME''@/$(GL_GNULIB_STRPTIME)/g' \ -e 's/@''GNULIB_TIMEGM''@/$(GL_GNULIB_TIMEGM)/g' \ -e 's/@''GNULIB_TIMESPEC_GET''@/$(GL_GNULIB_TIMESPEC_GET)/g' \ -e 's/@''GNULIB_TIMESPEC_GETRES''@/$(GL_GNULIB_TIMESPEC_GETRES)/g' \ -e 's/@''GNULIB_TIME_R''@/$(GL_GNULIB_TIME_R)/g' \ -e 's/@''GNULIB_TIME_RZ''@/$(GL_GNULIB_TIME_RZ)/g' \ -e 's/@''GNULIB_TZSET''@/$(GL_GNULIB_TZSET)/g' \ -e 's/@''GNULIB_MDA_TZSET''@/$(GL_GNULIB_MDA_TZSET)/g' \ -e 's|@''HAVE_DECL_LOCALTIME_R''@|$(HAVE_DECL_LOCALTIME_R)|g' \ -e 's|@''HAVE_NANOSLEEP''@|$(HAVE_NANOSLEEP)|g' \ -e 's|@''HAVE_STRPTIME''@|$(HAVE_STRPTIME)|g' \ -e 's|@''HAVE_TIMEGM''@|$(HAVE_TIMEGM)|g' \ -e 's|@''HAVE_TIMESPEC_GET''@|$(HAVE_TIMESPEC_GET)|g' \ -e 's|@''HAVE_TIMESPEC_GETRES''@|$(HAVE_TIMESPEC_GETRES)|g' \ -e 's|@''HAVE_TIMEZONE_T''@|$(HAVE_TIMEZONE_T)|g' \ -e 's|@''REPLACE_CTIME''@|$(REPLACE_CTIME)|g' \ -e 's|@''REPLACE_GMTIME''@|$(REPLACE_GMTIME)|g' \ -e 's|@''REPLACE_LOCALTIME''@|$(REPLACE_LOCALTIME)|g' \ -e 's|@''REPLACE_LOCALTIME_R''@|$(REPLACE_LOCALTIME_R)|g' \ -e 's|@''REPLACE_MKTIME''@|$(REPLACE_MKTIME)|g' \ -e 's|@''REPLACE_NANOSLEEP''@|$(REPLACE_NANOSLEEP)|g' \ -e 's|@''REPLACE_STRFTIME''@|$(REPLACE_STRFTIME)|g' \ -e 's|@''REPLACE_TIMEGM''@|$(REPLACE_TIMEGM)|g' \ -e 's|@''REPLACE_TZSET''@|$(REPLACE_TZSET)|g' \ -e 's|@''PTHREAD_H_DEFINES_STRUCT_TIMESPEC''@|$(PTHREAD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''SYS_TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(SYS_TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_STRUCT_TIMESPEC''@|$(TIME_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''UNISTD_H_DEFINES_STRUCT_TIMESPEC''@|$(UNISTD_H_DEFINES_STRUCT_TIMESPEC)|g' \ -e 's|@''TIME_H_DEFINES_TIME_UTC''@|$(TIME_H_DEFINES_TIME_UTC)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/time.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create an empty placeholder for # <unistd.h> when the system doesn't have one. unistd.h: unistd.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''HAVE_UNISTD_H''@|$(HAVE_UNISTD_H)|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UNISTD_H''@|$(NEXT_UNISTD_H)|g' \ -e 's|@''WINDOWS_64_BIT_OFF_T''@|$(WINDOWS_64_BIT_OFF_T)|g' \ -e 's/@''GNULIB_ACCESS''@/$(GL_GNULIB_ACCESS)/g' \ -e 's/@''GNULIB_CHDIR''@/$(GL_GNULIB_CHDIR)/g' \ -e 's/@''GNULIB_CHOWN''@/$(GL_GNULIB_CHOWN)/g' \ -e 's/@''GNULIB_CLOSE''@/$(GL_GNULIB_CLOSE)/g' \ -e 's/@''GNULIB_COPY_FILE_RANGE''@/$(GL_GNULIB_COPY_FILE_RANGE)/g' \ -e 's/@''GNULIB_DUP''@/$(GL_GNULIB_DUP)/g' \ -e 's/@''GNULIB_DUP2''@/$(GL_GNULIB_DUP2)/g' \ -e 's/@''GNULIB_DUP3''@/$(GL_GNULIB_DUP3)/g' \ -e 's/@''GNULIB_ENVIRON''@/$(GL_GNULIB_ENVIRON)/g' \ -e 's/@''GNULIB_EUIDACCESS''@/$(GL_GNULIB_EUIDACCESS)/g' \ -e 's/@''GNULIB_EXECL''@/$(GL_GNULIB_EXECL)/g' \ -e 's/@''GNULIB_EXECLE''@/$(GL_GNULIB_EXECLE)/g' \ -e 's/@''GNULIB_EXECLP''@/$(GL_GNULIB_EXECLP)/g' \ -e 's/@''GNULIB_EXECV''@/$(GL_GNULIB_EXECV)/g' \ -e 's/@''GNULIB_EXECVE''@/$(GL_GNULIB_EXECVE)/g' \ -e 's/@''GNULIB_EXECVP''@/$(GL_GNULIB_EXECVP)/g' \ -e 's/@''GNULIB_EXECVPE''@/$(GL_GNULIB_EXECVPE)/g' \ -e 's/@''GNULIB_FACCESSAT''@/$(GL_GNULIB_FACCESSAT)/g' \ -e 's/@''GNULIB_FCHDIR''@/$(GL_GNULIB_FCHDIR)/g' \ -e 's/@''GNULIB_FCHOWNAT''@/$(GL_GNULIB_FCHOWNAT)/g' \ -e 's/@''GNULIB_FDATASYNC''@/$(GL_GNULIB_FDATASYNC)/g' \ -e 's/@''GNULIB_FSYNC''@/$(GL_GNULIB_FSYNC)/g' \ -e 's/@''GNULIB_FTRUNCATE''@/$(GL_GNULIB_FTRUNCATE)/g' \ -e 's/@''GNULIB_GETCWD''@/$(GL_GNULIB_GETCWD)/g' \ -e 's/@''GNULIB_GETDOMAINNAME''@/$(GL_GNULIB_GETDOMAINNAME)/g' \ -e 's/@''GNULIB_GETDTABLESIZE''@/$(GL_GNULIB_GETDTABLESIZE)/g' \ -e 's/@''GNULIB_GETENTROPY''@/$(GL_GNULIB_GETENTROPY)/g' \ -e 's/@''GNULIB_GETGROUPS''@/$(GL_GNULIB_GETGROUPS)/g' \ -e 's/@''GNULIB_GETHOSTNAME''@/$(GL_GNULIB_GETHOSTNAME)/g' \ -e 's/@''GNULIB_GETLOGIN''@/$(GL_GNULIB_GETLOGIN)/g' \ -e 's/@''GNULIB_GETLOGIN_R''@/$(GL_GNULIB_GETLOGIN_R)/g' \ -e 's/@''GNULIB_GETOPT_POSIX''@/$(GL_GNULIB_GETOPT_POSIX)/g' \ -e 's/@''GNULIB_GETPAGESIZE''@/$(GL_GNULIB_GETPAGESIZE)/g' \ -e 's/@''GNULIB_GETPASS''@/$(GL_GNULIB_GETPASS)/g' \ -e 's/@''GNULIB_GETPASS_GNU''@/$(GL_GNULIB_GETPASS_GNU)/g' \ -e 's/@''GNULIB_GETUSERSHELL''@/$(GL_GNULIB_GETUSERSHELL)/g' \ -e 's/@''GNULIB_GROUP_MEMBER''@/$(GL_GNULIB_GROUP_MEMBER)/g' \ -e 's/@''GNULIB_ISATTY''@/$(GL_GNULIB_ISATTY)/g' \ -e 's/@''GNULIB_LCHOWN''@/$(GL_GNULIB_LCHOWN)/g' \ -e 's/@''GNULIB_LINK''@/$(GL_GNULIB_LINK)/g' \ -e 's/@''GNULIB_LINKAT''@/$(GL_GNULIB_LINKAT)/g' \ -e 's/@''GNULIB_LSEEK''@/$(GL_GNULIB_LSEEK)/g' \ -e 's/@''GNULIB_PIPE''@/$(GL_GNULIB_PIPE)/g' \ -e 's/@''GNULIB_PIPE2''@/$(GL_GNULIB_PIPE2)/g' \ -e 's/@''GNULIB_PREAD''@/$(GL_GNULIB_PREAD)/g' \ -e 's/@''GNULIB_PWRITE''@/$(GL_GNULIB_PWRITE)/g' \ -e 's/@''GNULIB_READ''@/$(GL_GNULIB_READ)/g' \ -e 's/@''GNULIB_READLINK''@/$(GL_GNULIB_READLINK)/g' \ -e 's/@''GNULIB_READLINKAT''@/$(GL_GNULIB_READLINKAT)/g' \ -e 's/@''GNULIB_RMDIR''@/$(GL_GNULIB_RMDIR)/g' \ -e 's/@''GNULIB_SETHOSTNAME''@/$(GL_GNULIB_SETHOSTNAME)/g' \ -e 's/@''GNULIB_SLEEP''@/$(GL_GNULIB_SLEEP)/g' \ -e 's/@''GNULIB_SYMLINK''@/$(GL_GNULIB_SYMLINK)/g' \ -e 's/@''GNULIB_SYMLINKAT''@/$(GL_GNULIB_SYMLINKAT)/g' \ -e 's/@''GNULIB_TRUNCATE''@/$(GL_GNULIB_TRUNCATE)/g' \ -e 's/@''GNULIB_TTYNAME_R''@/$(GL_GNULIB_TTYNAME_R)/g' \ -e 's/@''GNULIB_UNISTD_H_GETOPT''@/0$(GL_GNULIB_UNISTD_H_GETOPT)/g' \ -e 's/@''GNULIB_UNISTD_H_NONBLOCKING''@/$(GL_GNULIB_UNISTD_H_NONBLOCKING)/g' \ -e 's/@''GNULIB_UNISTD_H_SIGPIPE''@/$(GL_GNULIB_UNISTD_H_SIGPIPE)/g' \ -e 's/@''GNULIB_UNLINK''@/$(GL_GNULIB_UNLINK)/g' \ -e 's/@''GNULIB_UNLINKAT''@/$(GL_GNULIB_UNLINKAT)/g' \ -e 's/@''GNULIB_USLEEP''@/$(GL_GNULIB_USLEEP)/g' \ -e 's/@''GNULIB_WRITE''@/$(GL_GNULIB_WRITE)/g' \ -e 's/@''GNULIB_MDA_ACCESS''@/$(GL_GNULIB_MDA_ACCESS)/g' \ -e 's/@''GNULIB_MDA_CHDIR''@/$(GL_GNULIB_MDA_CHDIR)/g' \ -e 's/@''GNULIB_MDA_CLOSE''@/$(GL_GNULIB_MDA_CLOSE)/g' \ -e 's/@''GNULIB_MDA_DUP''@/$(GL_GNULIB_MDA_DUP)/g' \ -e 's/@''GNULIB_MDA_DUP2''@/$(GL_GNULIB_MDA_DUP2)/g' \ -e 's/@''GNULIB_MDA_EXECL''@/$(GL_GNULIB_MDA_EXECL)/g' \ -e 's/@''GNULIB_MDA_EXECLE''@/$(GL_GNULIB_MDA_EXECLE)/g' \ -e 's/@''GNULIB_MDA_EXECLP''@/$(GL_GNULIB_MDA_EXECLP)/g' \ -e 's/@''GNULIB_MDA_EXECV''@/$(GL_GNULIB_MDA_EXECV)/g' \ -e 's/@''GNULIB_MDA_EXECVE''@/$(GL_GNULIB_MDA_EXECVE)/g' \ -e 's/@''GNULIB_MDA_EXECVP''@/$(GL_GNULIB_MDA_EXECVP)/g' \ -e 's/@''GNULIB_MDA_EXECVPE''@/$(GL_GNULIB_MDA_EXECVPE)/g' \ -e 's/@''GNULIB_MDA_GETCWD''@/$(GL_GNULIB_MDA_GETCWD)/g' \ -e 's/@''GNULIB_MDA_GETPID''@/$(GL_GNULIB_MDA_GETPID)/g' \ -e 's/@''GNULIB_MDA_ISATTY''@/$(GL_GNULIB_MDA_ISATTY)/g' \ -e 's/@''GNULIB_MDA_LSEEK''@/$(GL_GNULIB_MDA_LSEEK)/g' \ -e 's/@''GNULIB_MDA_READ''@/$(GL_GNULIB_MDA_READ)/g' \ -e 's/@''GNULIB_MDA_RMDIR''@/$(GL_GNULIB_MDA_RMDIR)/g' \ -e 's/@''GNULIB_MDA_SWAB''@/$(GL_GNULIB_MDA_SWAB)/g' \ -e 's/@''GNULIB_MDA_UNLINK''@/$(GL_GNULIB_MDA_UNLINK)/g' \ -e 's/@''GNULIB_MDA_WRITE''@/$(GL_GNULIB_MDA_WRITE)/g' \ < $(srcdir)/unistd.in.h | \ sed -e 's|@''HAVE_CHOWN''@|$(HAVE_CHOWN)|g' \ -e 's|@''HAVE_COPY_FILE_RANGE''@|$(HAVE_COPY_FILE_RANGE)|g' \ -e 's|@''HAVE_DUP3''@|$(HAVE_DUP3)|g' \ -e 's|@''HAVE_EUIDACCESS''@|$(HAVE_EUIDACCESS)|g' \ -e 's|@''HAVE_EXECVPE''@|$(HAVE_EXECVPE)|g' \ -e 's|@''HAVE_FACCESSAT''@|$(HAVE_FACCESSAT)|g' \ -e 's|@''HAVE_FCHDIR''@|$(HAVE_FCHDIR)|g' \ -e 's|@''HAVE_FCHOWNAT''@|$(HAVE_FCHOWNAT)|g' \ -e 's|@''HAVE_FDATASYNC''@|$(HAVE_FDATASYNC)|g' \ -e 's|@''HAVE_FSYNC''@|$(HAVE_FSYNC)|g' \ -e 's|@''HAVE_FTRUNCATE''@|$(HAVE_FTRUNCATE)|g' \ -e 's|@''HAVE_GETDTABLESIZE''@|$(HAVE_GETDTABLESIZE)|g' \ -e 's|@''HAVE_GETENTROPY''@|$(HAVE_GETENTROPY)|g' \ -e 's|@''HAVE_GETGROUPS''@|$(HAVE_GETGROUPS)|g' \ -e 's|@''HAVE_GETHOSTNAME''@|$(HAVE_GETHOSTNAME)|g' \ -e 's|@''HAVE_GETPAGESIZE''@|$(HAVE_GETPAGESIZE)|g' \ -e 's|@''HAVE_GETPASS''@|$(HAVE_GETPASS)|g' \ -e 's|@''HAVE_GROUP_MEMBER''@|$(HAVE_GROUP_MEMBER)|g' \ -e 's|@''HAVE_LCHOWN''@|$(HAVE_LCHOWN)|g' \ -e 's|@''HAVE_LINK''@|$(HAVE_LINK)|g' \ -e 's|@''HAVE_LINKAT''@|$(HAVE_LINKAT)|g' \ -e 's|@''HAVE_PIPE''@|$(HAVE_PIPE)|g' \ -e 's|@''HAVE_PIPE2''@|$(HAVE_PIPE2)|g' \ -e 's|@''HAVE_PREAD''@|$(HAVE_PREAD)|g' \ -e 's|@''HAVE_PWRITE''@|$(HAVE_PWRITE)|g' \ -e 's|@''HAVE_READLINK''@|$(HAVE_READLINK)|g' \ -e 's|@''HAVE_READLINKAT''@|$(HAVE_READLINKAT)|g' \ -e 's|@''HAVE_SETHOSTNAME''@|$(HAVE_SETHOSTNAME)|g' \ -e 's|@''HAVE_SLEEP''@|$(HAVE_SLEEP)|g' \ -e 's|@''HAVE_SYMLINK''@|$(HAVE_SYMLINK)|g' \ -e 's|@''HAVE_SYMLINKAT''@|$(HAVE_SYMLINKAT)|g' \ -e 's|@''HAVE_UNLINKAT''@|$(HAVE_UNLINKAT)|g' \ -e 's|@''HAVE_USLEEP''@|$(HAVE_USLEEP)|g' \ -e 's|@''HAVE_DECL_ENVIRON''@|$(HAVE_DECL_ENVIRON)|g' \ -e 's|@''HAVE_DECL_EXECVPE''@|$(HAVE_DECL_EXECVPE)|g' \ -e 's|@''HAVE_DECL_FCHDIR''@|$(HAVE_DECL_FCHDIR)|g' \ -e 's|@''HAVE_DECL_FDATASYNC''@|$(HAVE_DECL_FDATASYNC)|g' \ -e 's|@''HAVE_DECL_GETDOMAINNAME''@|$(HAVE_DECL_GETDOMAINNAME)|g' \ -e 's|@''HAVE_DECL_GETLOGIN''@|$(HAVE_DECL_GETLOGIN)|g' \ -e 's|@''HAVE_DECL_GETLOGIN_R''@|$(HAVE_DECL_GETLOGIN_R)|g' \ -e 's|@''HAVE_DECL_GETPAGESIZE''@|$(HAVE_DECL_GETPAGESIZE)|g' \ -e 's|@''HAVE_DECL_GETUSERSHELL''@|$(HAVE_DECL_GETUSERSHELL)|g' \ -e 's|@''HAVE_DECL_SETHOSTNAME''@|$(HAVE_DECL_SETHOSTNAME)|g' \ -e 's|@''HAVE_DECL_TRUNCATE''@|$(HAVE_DECL_TRUNCATE)|g' \ -e 's|@''HAVE_DECL_TTYNAME_R''@|$(HAVE_DECL_TTYNAME_R)|g' \ -e 's|@''HAVE_OS_H''@|$(HAVE_OS_H)|g' \ -e 's|@''HAVE_SYS_PARAM_H''@|$(HAVE_SYS_PARAM_H)|g' \ | \ sed -e 's|@''REPLACE_ACCESS''@|$(REPLACE_ACCESS)|g' \ -e 's|@''REPLACE_CHOWN''@|$(REPLACE_CHOWN)|g' \ -e 's|@''REPLACE_CLOSE''@|$(REPLACE_CLOSE)|g' \ -e 's|@''REPLACE_COPY_FILE_RANGE''@|$(REPLACE_COPY_FILE_RANGE)|g' \ -e 's|@''REPLACE_DUP''@|$(REPLACE_DUP)|g' \ -e 's|@''REPLACE_DUP2''@|$(REPLACE_DUP2)|g' \ -e 's|@''REPLACE_EXECL''@|$(REPLACE_EXECL)|g' \ -e 's|@''REPLACE_EXECLE''@|$(REPLACE_EXECLE)|g' \ -e 's|@''REPLACE_EXECLP''@|$(REPLACE_EXECLP)|g' \ -e 's|@''REPLACE_EXECV''@|$(REPLACE_EXECV)|g' \ -e 's|@''REPLACE_EXECVE''@|$(REPLACE_EXECVE)|g' \ -e 's|@''REPLACE_EXECVP''@|$(REPLACE_EXECVP)|g' \ -e 's|@''REPLACE_EXECVPE''@|$(REPLACE_EXECVPE)|g' \ -e 's|@''REPLACE_FACCESSAT''@|$(REPLACE_FACCESSAT)|g' \ -e 's|@''REPLACE_FCHOWNAT''@|$(REPLACE_FCHOWNAT)|g' \ -e 's|@''REPLACE_FTRUNCATE''@|$(REPLACE_FTRUNCATE)|g' \ -e 's|@''REPLACE_GETCWD''@|$(REPLACE_GETCWD)|g' \ -e 's|@''REPLACE_GETDOMAINNAME''@|$(REPLACE_GETDOMAINNAME)|g' \ -e 's|@''REPLACE_GETDTABLESIZE''@|$(REPLACE_GETDTABLESIZE)|g' \ -e 's|@''REPLACE_GETLOGIN_R''@|$(REPLACE_GETLOGIN_R)|g' \ -e 's|@''REPLACE_GETGROUPS''@|$(REPLACE_GETGROUPS)|g' \ -e 's|@''REPLACE_GETPAGESIZE''@|$(REPLACE_GETPAGESIZE)|g' \ -e 's|@''REPLACE_GETPASS''@|$(REPLACE_GETPASS)|g' \ -e 's|@''REPLACE_GETPASS_FOR_GETPASS_GNU''@|$(REPLACE_GETPASS_FOR_GETPASS_GNU)|g' \ -e 's|@''REPLACE_ISATTY''@|$(REPLACE_ISATTY)|g' \ -e 's|@''REPLACE_LCHOWN''@|$(REPLACE_LCHOWN)|g' \ -e 's|@''REPLACE_LINK''@|$(REPLACE_LINK)|g' \ -e 's|@''REPLACE_LINKAT''@|$(REPLACE_LINKAT)|g' \ -e 's|@''REPLACE_LSEEK''@|$(REPLACE_LSEEK)|g' \ -e 's|@''REPLACE_PREAD''@|$(REPLACE_PREAD)|g' \ -e 's|@''REPLACE_PWRITE''@|$(REPLACE_PWRITE)|g' \ -e 's|@''REPLACE_READ''@|$(REPLACE_READ)|g' \ -e 's|@''REPLACE_READLINK''@|$(REPLACE_READLINK)|g' \ -e 's|@''REPLACE_READLINKAT''@|$(REPLACE_READLINKAT)|g' \ -e 's|@''REPLACE_RMDIR''@|$(REPLACE_RMDIR)|g' \ -e 's|@''REPLACE_SLEEP''@|$(REPLACE_SLEEP)|g' \ -e 's|@''REPLACE_SYMLINK''@|$(REPLACE_SYMLINK)|g' \ -e 's|@''REPLACE_SYMLINKAT''@|$(REPLACE_SYMLINKAT)|g' \ -e 's|@''REPLACE_TRUNCATE''@|$(REPLACE_TRUNCATE)|g' \ -e 's|@''REPLACE_TTYNAME_R''@|$(REPLACE_TTYNAME_R)|g' \ -e 's|@''REPLACE_UNLINK''@|$(REPLACE_UNLINK)|g' \ -e 's|@''REPLACE_UNLINKAT''@|$(REPLACE_UNLINKAT)|g' \ -e 's|@''REPLACE_USLEEP''@|$(REPLACE_USLEEP)|g' \ -e 's|@''REPLACE_WRITE''@|$(REPLACE_WRITE)|g' \ -e 's|@''UNISTD_H_HAVE_SYS_RANDOM_H''@|$(UNISTD_H_HAVE_SYS_RANDOM_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H''@|$(UNISTD_H_HAVE_WINSOCK2_H)|g' \ -e 's|@''UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS''@|$(UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <utime.h> when the system # doesn't have one that works with the given compiler. utime.h: utime.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_UTIME_H''@/$(HAVE_UTIME_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_UTIME_H''@|$(NEXT_UTIME_H)|g' \ -e 's/@''GNULIB_UTIME''@/$(GL_GNULIB_UTIME)/g' \ -e 's/@''GNULIB_MDA_UTIME''@/$(GL_GNULIB_MDA_UTIME)/g' \ -e 's|@''HAVE_UTIME''@|$(HAVE_UTIME)|g' \ -e 's|@''REPLACE_UTIME''@|$(REPLACE_UTIME)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/utime.in.h > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <wchar.h> when the system # version does not work standalone. wchar.h: wchar.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(ARG_NONNULL_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''HAVE_FEATURES_H''@|$(HAVE_FEATURES_H)|g' \ -e 's|@''NEXT_WCHAR_H''@|$(NEXT_WCHAR_H)|g' \ -e 's|@''HAVE_WCHAR_H''@|$(HAVE_WCHAR_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_BTOWC''@/$(GL_GNULIB_BTOWC)/g' \ -e 's/@''GNULIB_WCTOB''@/$(GL_GNULIB_WCTOB)/g' \ -e 's/@''GNULIB_MBSINIT''@/$(GL_GNULIB_MBSINIT)/g' \ -e 's/@''GNULIB_MBRTOWC''@/$(GL_GNULIB_MBRTOWC)/g' \ -e 's/@''GNULIB_MBRLEN''@/$(GL_GNULIB_MBRLEN)/g' \ -e 's/@''GNULIB_MBSRTOWCS''@/$(GL_GNULIB_MBSRTOWCS)/g' \ -e 's/@''GNULIB_MBSNRTOWCS''@/$(GL_GNULIB_MBSNRTOWCS)/g' \ -e 's/@''GNULIB_WCRTOMB''@/$(GL_GNULIB_WCRTOMB)/g' \ -e 's/@''GNULIB_WCSRTOMBS''@/$(GL_GNULIB_WCSRTOMBS)/g' \ -e 's/@''GNULIB_WCSNRTOMBS''@/$(GL_GNULIB_WCSNRTOMBS)/g' \ -e 's/@''GNULIB_WCWIDTH''@/$(GL_GNULIB_WCWIDTH)/g' \ -e 's/@''GNULIB_WMEMCHR''@/$(GL_GNULIB_WMEMCHR)/g' \ -e 's/@''GNULIB_WMEMCMP''@/$(GL_GNULIB_WMEMCMP)/g' \ -e 's/@''GNULIB_WMEMCPY''@/$(GL_GNULIB_WMEMCPY)/g' \ -e 's/@''GNULIB_WMEMMOVE''@/$(GL_GNULIB_WMEMMOVE)/g' \ -e 's/@''GNULIB_WMEMPCPY''@/$(GL_GNULIB_WMEMPCPY)/g' \ -e 's/@''GNULIB_WMEMSET''@/$(GL_GNULIB_WMEMSET)/g' \ -e 's/@''GNULIB_WCSLEN''@/$(GL_GNULIB_WCSLEN)/g' \ -e 's/@''GNULIB_WCSNLEN''@/$(GL_GNULIB_WCSNLEN)/g' \ -e 's/@''GNULIB_WCSCPY''@/$(GL_GNULIB_WCSCPY)/g' \ -e 's/@''GNULIB_WCPCPY''@/$(GL_GNULIB_WCPCPY)/g' \ -e 's/@''GNULIB_WCSNCPY''@/$(GL_GNULIB_WCSNCPY)/g' \ -e 's/@''GNULIB_WCPNCPY''@/$(GL_GNULIB_WCPNCPY)/g' \ -e 's/@''GNULIB_WCSCAT''@/$(GL_GNULIB_WCSCAT)/g' \ -e 's/@''GNULIB_WCSNCAT''@/$(GL_GNULIB_WCSNCAT)/g' \ -e 's/@''GNULIB_WCSCMP''@/$(GL_GNULIB_WCSCMP)/g' \ -e 's/@''GNULIB_WCSNCMP''@/$(GL_GNULIB_WCSNCMP)/g' \ -e 's/@''GNULIB_WCSCASECMP''@/$(GL_GNULIB_WCSCASECMP)/g' \ -e 's/@''GNULIB_WCSNCASECMP''@/$(GL_GNULIB_WCSNCASECMP)/g' \ -e 's/@''GNULIB_WCSCOLL''@/$(GL_GNULIB_WCSCOLL)/g' \ -e 's/@''GNULIB_WCSXFRM''@/$(GL_GNULIB_WCSXFRM)/g' \ -e 's/@''GNULIB_WCSDUP''@/$(GL_GNULIB_WCSDUP)/g' \ -e 's/@''GNULIB_WCSCHR''@/$(GL_GNULIB_WCSCHR)/g' \ -e 's/@''GNULIB_WCSRCHR''@/$(GL_GNULIB_WCSRCHR)/g' \ -e 's/@''GNULIB_WCSCSPN''@/$(GL_GNULIB_WCSCSPN)/g' \ -e 's/@''GNULIB_WCSSPN''@/$(GL_GNULIB_WCSSPN)/g' \ -e 's/@''GNULIB_WCSPBRK''@/$(GL_GNULIB_WCSPBRK)/g' \ -e 's/@''GNULIB_WCSSTR''@/$(GL_GNULIB_WCSSTR)/g' \ -e 's/@''GNULIB_WCSTOK''@/$(GL_GNULIB_WCSTOK)/g' \ -e 's/@''GNULIB_WCSWIDTH''@/$(GL_GNULIB_WCSWIDTH)/g' \ -e 's/@''GNULIB_WCSFTIME''@/$(GL_GNULIB_WCSFTIME)/g' \ -e 's/@''GNULIB_MDA_WCSDUP''@/$(GL_GNULIB_MDA_WCSDUP)/g' \ -e 's/@''GNULIB_FREE_POSIX''@/$(GL_GNULIB_FREE_POSIX)/g' \ < $(srcdir)/wchar.in.h | \ sed -e 's|@''HAVE_WINT_T''@|$(HAVE_WINT_T)|g' \ -e 's|@''HAVE_BTOWC''@|$(HAVE_BTOWC)|g' \ -e 's|@''HAVE_MBSINIT''@|$(HAVE_MBSINIT)|g' \ -e 's|@''HAVE_MBRTOWC''@|$(HAVE_MBRTOWC)|g' \ -e 's|@''HAVE_MBRLEN''@|$(HAVE_MBRLEN)|g' \ -e 's|@''HAVE_MBSRTOWCS''@|$(HAVE_MBSRTOWCS)|g' \ -e 's|@''HAVE_MBSNRTOWCS''@|$(HAVE_MBSNRTOWCS)|g' \ -e 's|@''HAVE_WCRTOMB''@|$(HAVE_WCRTOMB)|g' \ -e 's|@''HAVE_WCSRTOMBS''@|$(HAVE_WCSRTOMBS)|g' \ -e 's|@''HAVE_WCSNRTOMBS''@|$(HAVE_WCSNRTOMBS)|g' \ -e 's|@''HAVE_WMEMCHR''@|$(HAVE_WMEMCHR)|g' \ -e 's|@''HAVE_WMEMCMP''@|$(HAVE_WMEMCMP)|g' \ -e 's|@''HAVE_WMEMCPY''@|$(HAVE_WMEMCPY)|g' \ -e 's|@''HAVE_WMEMMOVE''@|$(HAVE_WMEMMOVE)|g' \ -e 's|@''HAVE_WMEMPCPY''@|$(HAVE_WMEMPCPY)|g' \ -e 's|@''HAVE_WMEMSET''@|$(HAVE_WMEMSET)|g' \ -e 's|@''HAVE_WCSLEN''@|$(HAVE_WCSLEN)|g' \ -e 's|@''HAVE_WCSNLEN''@|$(HAVE_WCSNLEN)|g' \ -e 's|@''HAVE_WCSCPY''@|$(HAVE_WCSCPY)|g' \ -e 's|@''HAVE_WCPCPY''@|$(HAVE_WCPCPY)|g' \ -e 's|@''HAVE_WCSNCPY''@|$(HAVE_WCSNCPY)|g' \ -e 's|@''HAVE_WCPNCPY''@|$(HAVE_WCPNCPY)|g' \ -e 's|@''HAVE_WCSCAT''@|$(HAVE_WCSCAT)|g' \ -e 's|@''HAVE_WCSNCAT''@|$(HAVE_WCSNCAT)|g' \ -e 's|@''HAVE_WCSCMP''@|$(HAVE_WCSCMP)|g' \ -e 's|@''HAVE_WCSNCMP''@|$(HAVE_WCSNCMP)|g' \ -e 's|@''HAVE_WCSCASECMP''@|$(HAVE_WCSCASECMP)|g' \ -e 's|@''HAVE_WCSNCASECMP''@|$(HAVE_WCSNCASECMP)|g' \ -e 's|@''HAVE_WCSCOLL''@|$(HAVE_WCSCOLL)|g' \ -e 's|@''HAVE_WCSXFRM''@|$(HAVE_WCSXFRM)|g' \ -e 's|@''HAVE_WCSDUP''@|$(HAVE_WCSDUP)|g' \ -e 's|@''HAVE_WCSCHR''@|$(HAVE_WCSCHR)|g' \ -e 's|@''HAVE_WCSRCHR''@|$(HAVE_WCSRCHR)|g' \ -e 's|@''HAVE_WCSCSPN''@|$(HAVE_WCSCSPN)|g' \ -e 's|@''HAVE_WCSSPN''@|$(HAVE_WCSSPN)|g' \ -e 's|@''HAVE_WCSPBRK''@|$(HAVE_WCSPBRK)|g' \ -e 's|@''HAVE_WCSSTR''@|$(HAVE_WCSSTR)|g' \ -e 's|@''HAVE_WCSTOK''@|$(HAVE_WCSTOK)|g' \ -e 's|@''HAVE_WCSWIDTH''@|$(HAVE_WCSWIDTH)|g' \ -e 's|@''HAVE_WCSFTIME''@|$(HAVE_WCSFTIME)|g' \ -e 's|@''HAVE_DECL_WCTOB''@|$(HAVE_DECL_WCTOB)|g' \ -e 's|@''HAVE_DECL_WCSDUP''@|$(HAVE_DECL_WCSDUP)|g' \ -e 's|@''HAVE_DECL_WCWIDTH''@|$(HAVE_DECL_WCWIDTH)|g' \ | \ sed -e 's|@''REPLACE_MBSTATE_T''@|$(REPLACE_MBSTATE_T)|g' \ -e 's|@''REPLACE_BTOWC''@|$(REPLACE_BTOWC)|g' \ -e 's|@''REPLACE_WCTOB''@|$(REPLACE_WCTOB)|g' \ -e 's|@''REPLACE_FREE''@|$(REPLACE_FREE)|g' \ -e 's|@''REPLACE_MBSINIT''@|$(REPLACE_MBSINIT)|g' \ -e 's|@''REPLACE_MBRTOWC''@|$(REPLACE_MBRTOWC)|g' \ -e 's|@''REPLACE_MBRLEN''@|$(REPLACE_MBRLEN)|g' \ -e 's|@''REPLACE_MBSRTOWCS''@|$(REPLACE_MBSRTOWCS)|g' \ -e 's|@''REPLACE_MBSNRTOWCS''@|$(REPLACE_MBSNRTOWCS)|g' \ -e 's|@''REPLACE_WCRTOMB''@|$(REPLACE_WCRTOMB)|g' \ -e 's|@''REPLACE_WCSRTOMBS''@|$(REPLACE_WCSRTOMBS)|g' \ -e 's|@''REPLACE_WCSNRTOMBS''@|$(REPLACE_WCSNRTOMBS)|g' \ -e 's|@''REPLACE_WCWIDTH''@|$(REPLACE_WCWIDTH)|g' \ -e 's|@''REPLACE_WCSWIDTH''@|$(REPLACE_WCSWIDTH)|g' \ -e 's|@''REPLACE_WCSFTIME''@|$(REPLACE_WCSFTIME)|g' \ -e 's|@''REPLACE_WCSTOK''@|$(REPLACE_WCSTOK)|g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_ARG_NONNULL/r $(ARG_NONNULL_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ > $@-t $(AM_V_at)mv $@-t $@ # We need the following in order to create <wctype.h> when the system # doesn't have one that works with the given compiler. wctype.h: wctype.in.h $(top_builddir)/config.status $(CXXDEFS_H) $(WARN_ON_USE_H) $(gl_V_at)$(SED_HEADER_STDOUT) \ -e 's|@''GUARD_PREFIX''@|GL|g' \ -e 's/@''HAVE_WCTYPE_H''@/$(HAVE_WCTYPE_H)/g' \ -e 's|@''INCLUDE_NEXT''@|$(INCLUDE_NEXT)|g' \ -e 's|@''PRAGMA_SYSTEM_HEADER''@|@PRAGMA_SYSTEM_HEADER@|g' \ -e 's|@''PRAGMA_COLUMNS''@|@PRAGMA_COLUMNS@|g' \ -e 's|@''NEXT_WCTYPE_H''@|$(NEXT_WCTYPE_H)|g' \ -e 's/@''HAVE_CRTDEFS_H''@/$(HAVE_CRTDEFS_H)/g' \ -e 's/@''GNULIBHEADERS_OVERRIDE_WINT_T''@/$(GNULIBHEADERS_OVERRIDE_WINT_T)/g' \ -e 's/@''GNULIB_ISWBLANK''@/$(GL_GNULIB_ISWBLANK)/g' \ -e 's/@''GNULIB_ISWDIGIT''@/$(GL_GNULIB_ISWDIGIT)/g' \ -e 's/@''GNULIB_ISWXDIGIT''@/$(GL_GNULIB_ISWXDIGIT)/g' \ -e 's/@''GNULIB_WCTYPE''@/$(GL_GNULIB_WCTYPE)/g' \ -e 's/@''GNULIB_ISWCTYPE''@/$(GL_GNULIB_ISWCTYPE)/g' \ -e 's/@''GNULIB_WCTRANS''@/$(GL_GNULIB_WCTRANS)/g' \ -e 's/@''GNULIB_TOWCTRANS''@/$(GL_GNULIB_TOWCTRANS)/g' \ -e 's/@''HAVE_ISWBLANK''@/$(HAVE_ISWBLANK)/g' \ -e 's/@''HAVE_ISWCNTRL''@/$(HAVE_ISWCNTRL)/g' \ -e 's/@''HAVE_WCTYPE_T''@/$(HAVE_WCTYPE_T)/g' \ -e 's/@''HAVE_WCTRANS_T''@/$(HAVE_WCTRANS_T)/g' \ -e 's/@''HAVE_WINT_T''@/$(HAVE_WINT_T)/g' \ -e 's/@''REPLACE_ISWBLANK''@/$(REPLACE_ISWBLANK)/g' \ -e 's/@''REPLACE_ISWDIGIT''@/$(REPLACE_ISWDIGIT)/g' \ -e 's/@''REPLACE_ISWXDIGIT''@/$(REPLACE_ISWXDIGIT)/g' \ -e 's/@''REPLACE_ISWCNTRL''@/$(REPLACE_ISWCNTRL)/g' \ -e 's/@''REPLACE_TOWLOWER''@/$(REPLACE_TOWLOWER)/g' \ -e '/definitions of _GL_FUNCDECL_RPL/r $(CXXDEFS_H)' \ -e '/definition of _GL_WARN_ON_USE/r $(WARN_ON_USE_H)' \ $(srcdir)/wctype.in.h > $@-t $(AM_V_at)mv $@-t $@ mostlyclean-local: mostlyclean-generic @for dir in '' $(MOSTLYCLEANDIRS); do \ if test -n "$$dir" && test -d $$dir; then \ echo "rmdir $$dir"; rmdir $$dir; \ fi; \ done; \ : distclean-local: distclean-gnulib-libobjs distclean-gnulib-libobjs: -rm -f @gl_LIBOBJDEPS@ maintainer-clean-local: distclean-gnulib-libobjs # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/intprops.h�������������������������������������������������������������������������0000644�0000000�0000000�00000071010�14226564450�012710� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* intprops.h -- properties of integer types Copyright (C) 2001-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_INTPROPS_H #define _GL_INTPROPS_H #include <limits.h> /* Return a value with the common real type of E and V and the value of V. Do not evaluate E. */ #define _GL_INT_CONVERT(e, v) ((1 ? 0 : (e)) + (v)) /* Act like _GL_INT_CONVERT (E, -V) but work around a bug in IRIX 6.5 cc; see <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00406.html>. */ #define _GL_INT_NEGATE_CONVERT(e, v) ((1 ? 0 : (e)) - (v)) /* The extra casts in the following macros work around compiler bugs, e.g., in Cray C 5.0.3.0. */ /* True if the arithmetic type T is an integer type. bool counts as an integer. */ #define TYPE_IS_INTEGER(t) ((t) 1.5 == 1) /* True if the real type T is signed. */ #define TYPE_SIGNED(t) (! ((t) 0 < (t) -1)) /* Return 1 if the real expression E, after promotion, has a signed or floating type. Do not evaluate E. */ #define EXPR_SIGNED(e) (_GL_INT_NEGATE_CONVERT (e, 1) < 0) /* Minimum and maximum values for integer types and expressions. */ /* The width in bits of the integer type or expression T. Do not evaluate T. T must not be a bit-field expression. Padding bits are not supported; this is checked at compile-time below. */ #define TYPE_WIDTH(t) (sizeof (t) * CHAR_BIT) /* The maximum and minimum values for the integer type T. */ #define TYPE_MINIMUM(t) ((t) ~ TYPE_MAXIMUM (t)) #define TYPE_MAXIMUM(t) \ ((t) (! TYPE_SIGNED (t) \ ? (t) -1 \ : ((((t) 1 << (TYPE_WIDTH (t) - 2)) - 1) * 2 + 1))) /* The maximum and minimum values for the type of the expression E, after integer promotion. E is not evaluated. */ #define _GL_INT_MINIMUM(e) \ (EXPR_SIGNED (e) \ ? ~ _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_CONVERT (e, 0)) #define _GL_INT_MAXIMUM(e) \ (EXPR_SIGNED (e) \ ? _GL_SIGNED_INT_MAXIMUM (e) \ : _GL_INT_NEGATE_CONVERT (e, 1)) #define _GL_SIGNED_INT_MAXIMUM(e) \ (((_GL_INT_CONVERT (e, 1) << (TYPE_WIDTH (+ (e)) - 2)) - 1) * 2 + 1) /* Work around OpenVMS incompatibility with C99. */ #if !defined LLONG_MAX && defined __INT64_MAX # define LLONG_MAX __INT64_MAX # define LLONG_MIN __INT64_MIN #endif /* This include file assumes that signed types are two's complement without padding bits; the above macros have undefined behavior otherwise. If this is a problem for you, please let us know how to fix it for your host. This assumption is tested by the intprops-tests module. */ /* Does the __typeof__ keyword work? This could be done by 'configure', but for now it's easier to do it by hand. */ #if (2 <= __GNUC__ \ || (4 <= __clang_major__) \ || (1210 <= __IBMC__ && defined __IBM__TYPEOF__) \ || (0x5110 <= __SUNPRO_C && !__STDC__)) # define _GL_HAVE___TYPEOF__ 1 #else # define _GL_HAVE___TYPEOF__ 0 #endif /* Return 1 if the integer type or expression T might be signed. Return 0 if it is definitely unsigned. T must not be a bit-field expression. This macro does not evaluate its argument, and expands to an integer constant expression. */ #if _GL_HAVE___TYPEOF__ # define _GL_SIGNED_TYPE_OR_EXPR(t) TYPE_SIGNED (__typeof__ (t)) #else # define _GL_SIGNED_TYPE_OR_EXPR(t) 1 #endif /* Bound on length of the string representing an unsigned integer value representable in B bits. log10 (2.0) < 146/485. The smallest value of B where this bound is not tight is 2621. */ #define INT_BITS_STRLEN_BOUND(b) (((b) * 146 + 484) / 485) /* Bound on length of the string representing an integer type or expression T. T must not be a bit-field expression. Subtract 1 for the sign bit if T is signed, and then add 1 more for a minus sign if needed. Because _GL_SIGNED_TYPE_OR_EXPR sometimes returns 1 when its argument is unsigned, this macro may overestimate the true bound by one byte when applied to unsigned types of size 2, 4, 16, ... bytes. */ #define INT_STRLEN_BOUND(t) \ (INT_BITS_STRLEN_BOUND (TYPE_WIDTH (t) - _GL_SIGNED_TYPE_OR_EXPR (t)) \ + _GL_SIGNED_TYPE_OR_EXPR (t)) /* Bound on buffer size needed to represent an integer type or expression T, including the terminating null. T must not be a bit-field expression. */ #define INT_BUFSIZE_BOUND(t) (INT_STRLEN_BOUND (t) + 1) /* Range overflow checks. The INT_<op>_RANGE_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. They do not rely on undefined or implementation-defined behavior. Their implementations are simple and straightforward, but they are harder to use and may be less efficient than the INT_<op>_WRAPV, INT_<op>_OK, and INT_<op>_OVERFLOW macros described below. Example usage: long int i = ...; long int j = ...; if (INT_MULTIPLY_RANGE_OVERFLOW (i, j, LONG_MIN, LONG_MAX)) printf ("multiply would overflow"); else printf ("product is %ld", i * j); Restrictions on *_RANGE_OVERFLOW macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The arithmetic arguments (including the MIN and MAX arguments) must be of the same integer type after the usual arithmetic conversions, and the type must have minimum value MIN and maximum MAX. Unsigned types should use a zero MIN of the proper type. Because all arguments are subject to integer promotions, these macros typically do not work on types narrower than 'int'. These macros are tuned for constant MIN and MAX. For commutative operations such as A + B, they are also tuned for constant B. */ /* Return 1 if A + B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_ADD_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (a) < (min) - (b) \ : (max) - (b) < (a)) /* Return 1 if A - B would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_SUBTRACT_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? (max) + (b) < (a) \ : (a) < (min) + (b)) /* Return 1 if - A would overflow in [MIN,MAX] arithmetic. See above for restrictions. */ #define INT_NEGATE_RANGE_OVERFLOW(a, min, max) \ ((min) < 0 \ ? (a) < - (max) \ : 0 < (a)) /* Return 1 if A * B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Avoid && and || as they tickle bugs in Sun C 5.11 2010/08/13 and other compilers; see <https://lists.gnu.org/r/bug-gnulib/2011-05/msg00401.html>. */ #define INT_MULTIPLY_RANGE_OVERFLOW(a, b, min, max) \ ((b) < 0 \ ? ((a) < 0 \ ? (a) < (max) / (b) \ : (b) == -1 \ ? 0 \ : (min) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (a) < (min) / (b) \ : (max) / (b) < (a))) /* Return 1 if A / B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. */ #define INT_DIVIDE_RANGE_OVERFLOW(a, b, min, max) \ ((min) < 0 && (b) == -1 && (a) < - (max)) /* Return 1 if A % B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Do not check for division by zero. Mathematically, % should never overflow, but on x86-like hosts INT_MIN % -1 traps, and the C standard permits this, so treat this as an overflow too. */ #define INT_REMAINDER_RANGE_OVERFLOW(a, b, min, max) \ INT_DIVIDE_RANGE_OVERFLOW (a, b, min, max) /* Return 1 if A << B would overflow in [MIN,MAX] arithmetic. See above for restrictions. Here, MIN and MAX are for A only, and B need not be of the same type as the other arguments. The C standard says that behavior is undefined for shifts unless 0 <= B < wordwidth, and that when A is negative then A << B has undefined behavior and A >> B has implementation-defined behavior, but do not check these other restrictions. */ #define INT_LEFT_SHIFT_RANGE_OVERFLOW(a, b, min, max) \ ((a) < 0 \ ? (a) < (min) >> (b) \ : (max) >> (b) < (a)) /* True if __builtin_add_overflow (A, B, P) and __builtin_sub_overflow (A, B, P) work when P is non-null. */ #ifdef __EDG__ /* EDG-based compilers like nvc 22.1 cannot add 64-bit signed to unsigned <https://bugs.gnu.org/53256>. */ # define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 #elif defined __has_builtin # define _GL_HAS_BUILTIN_ADD_OVERFLOW __has_builtin (__builtin_add_overflow) /* __builtin_{add,sub}_overflow exists but is not reliable in GCC 5.x and 6.x, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98269>. */ #elif 7 <= __GNUC__ # define _GL_HAS_BUILTIN_ADD_OVERFLOW 1 #else # define _GL_HAS_BUILTIN_ADD_OVERFLOW 0 #endif /* True if __builtin_mul_overflow (A, B, P) works when P is non-null. */ #if defined __clang_major__ && __clang_major__ < 14 /* Work around Clang bug <https://bugs.llvm.org/show_bug.cgi?id=16404>. */ # define _GL_HAS_BUILTIN_MUL_OVERFLOW 0 #else # define _GL_HAS_BUILTIN_MUL_OVERFLOW _GL_HAS_BUILTIN_ADD_OVERFLOW #endif /* True if __builtin_add_overflow_p (A, B, C) works, and similarly for __builtin_sub_overflow_p and __builtin_mul_overflow_p. */ #ifdef __EDG__ /* In EDG-based compilers like ICC 2021.3 and earlier, __builtin_add_overflow_p etc. are not treated as integral constant expressions even when all arguments are. */ # define _GL_HAS_BUILTIN_OVERFLOW_P 0 #elif defined __has_builtin # define _GL_HAS_BUILTIN_OVERFLOW_P __has_builtin (__builtin_mul_overflow_p) #else # define _GL_HAS_BUILTIN_OVERFLOW_P (7 <= __GNUC__) #endif /* The _GL*_OVERFLOW macros have the same restrictions as the *_RANGE_OVERFLOW macros, except that they do not assume that operands (e.g., A and B) have the same type as MIN and MAX. Instead, they assume that the result (e.g., A + B) has that type. */ #if _GL_HAS_BUILTIN_OVERFLOW_P # define _GL_ADD_OVERFLOW(a, b, min, max) \ __builtin_add_overflow_p (a, b, (__typeof__ ((a) + (b))) 0) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ __builtin_sub_overflow_p (a, b, (__typeof__ ((a) - (b))) 0) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ __builtin_mul_overflow_p (a, b, (__typeof__ ((a) * (b))) 0) #else # define _GL_ADD_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_ADD_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? (b) <= (a) + (b) \ : (b) < 0 ? (a) <= (a) + (b) \ : (a) + (b) < (b)) # define _GL_SUBTRACT_OVERFLOW(a, b, min, max) \ ((min) < 0 ? INT_SUBTRACT_RANGE_OVERFLOW (a, b, min, max) \ : (a) < 0 ? 1 \ : (b) < 0 ? (a) - (b) <= (a) \ : (a) < (b)) # define _GL_MULTIPLY_OVERFLOW(a, b, min, max) \ (((min) == 0 && (((a) < 0 && 0 < (b)) || ((b) < 0 && 0 < (a)))) \ || INT_MULTIPLY_RANGE_OVERFLOW (a, b, min, max)) #endif #define _GL_DIVIDE_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (b) <= (a) + (b) - 1 \ : (b) < 0 && (a) + (b) <= (a)) #define _GL_REMAINDER_OVERFLOW(a, b, min, max) \ ((min) < 0 ? (b) == _GL_INT_NEGATE_CONVERT (min, 1) && (a) < - (max) \ : (a) < 0 ? (a) % (b) != ((max) - (b) + 1) % (b) \ : (b) < 0 && ! _GL_UNSIGNED_NEG_MULTIPLE (a, b, max)) /* Return a nonzero value if A is a mathematical multiple of B, where A is unsigned, B is negative, and MAX is the maximum value of A's type. A's type must be the same as (A % B)'s type. Normally (A % -B == 0) suffices, but things get tricky if -B would overflow. */ #define _GL_UNSIGNED_NEG_MULTIPLE(a, b, max) \ (((b) < -_GL_SIGNED_INT_MAXIMUM (b) \ ? (_GL_SIGNED_INT_MAXIMUM (b) == (max) \ ? (a) \ : (a) % (_GL_INT_CONVERT (a, _GL_SIGNED_INT_MAXIMUM (b)) + 1)) \ : (a) % - (b)) \ == 0) /* Check for integer overflow, and report low order bits of answer. The INT_<op>_OVERFLOW macros return 1 if the corresponding C operators might not yield numerically correct answers due to arithmetic overflow. The INT_<op>_WRAPV macros compute the low-order bits of the sum, difference, and product of two C integers, and return 1 if these low-order bits are not numerically correct. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. Example usage, assuming A and B are long int: if (INT_MULTIPLY_OVERFLOW (a, b)) printf ("result would overflow\n"); else printf ("result is %ld (no overflow)\n", a * b); Example usage with WRAPV flavor: long int result; bool overflow = INT_MULTIPLY_WRAPV (a, b, &result); printf ("result is %ld (%s)\n", result, overflow ? "after overflow" : "no overflow"); Restrictions on these macros: These macros do not check for all possible numerical problems or undefined or unspecified behavior: they do not check for division by zero, for bad shift counts, or for shifting negative numbers. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. The WRAPV macros are not constant expressions. They support only +, binary -, and *. Because the WRAPV macros convert the result, they report overflow in different circumstances than the OVERFLOW macros do. For example, in the typical case with 16-bit 'short' and 32-bit 'int', if A, B and R are all of type 'short' then INT_ADD_OVERFLOW (A, B) returns false because the addition cannot overflow after A and B are converted to 'int', whereas INT_ADD_WRAPV (A, B, &R) returns true or false depending on whether the sum fits into 'short'. These macros are tuned for their last input argument being a constant. Return 1 if the integer expressions A * B, A - B, -A, A * B, A / B, A % B, and A << B would overflow, respectively. */ #define INT_ADD_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_ADD_OVERFLOW) #define INT_SUBTRACT_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_SUBTRACT_OVERFLOW) #if _GL_HAS_BUILTIN_OVERFLOW_P # define INT_NEGATE_OVERFLOW(a) INT_SUBTRACT_OVERFLOW (0, a) #else # define INT_NEGATE_OVERFLOW(a) \ INT_NEGATE_RANGE_OVERFLOW (a, _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) #endif #define INT_MULTIPLY_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_MULTIPLY_OVERFLOW) #define INT_DIVIDE_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_DIVIDE_OVERFLOW) #define INT_REMAINDER_OVERFLOW(a, b) \ _GL_BINARY_OP_OVERFLOW (a, b, _GL_REMAINDER_OVERFLOW) #define INT_LEFT_SHIFT_OVERFLOW(a, b) \ INT_LEFT_SHIFT_RANGE_OVERFLOW (a, b, \ _GL_INT_MINIMUM (a), _GL_INT_MAXIMUM (a)) /* Return 1 if the expression A <op> B would overflow, where OP_RESULT_OVERFLOW (A, B, MIN, MAX) does the actual test, assuming MIN and MAX are the minimum and maximum for the result type. Arguments should be free of side effects. */ #define _GL_BINARY_OP_OVERFLOW(a, b, op_result_overflow) \ op_result_overflow (a, b, \ _GL_INT_MINIMUM (_GL_INT_CONVERT (a, b)), \ _GL_INT_MAXIMUM (_GL_INT_CONVERT (a, b))) /* Store the low-order bits of A + B, A - B, A * B, respectively, into *R. Return 1 if the result overflows. See above for restrictions. */ #if _GL_HAS_BUILTIN_ADD_OVERFLOW # define INT_ADD_WRAPV(a, b, r) __builtin_add_overflow (a, b, r) # define INT_SUBTRACT_WRAPV(a, b, r) __builtin_sub_overflow (a, b, r) #else # define INT_ADD_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, +, _GL_INT_ADD_RANGE_OVERFLOW) # define INT_SUBTRACT_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, -, _GL_INT_SUBTRACT_RANGE_OVERFLOW) #endif #if _GL_HAS_BUILTIN_MUL_OVERFLOW # if ((9 < __GNUC__ + (3 <= __GNUC_MINOR__) \ || (__GNUC__ == 8 && 4 <= __GNUC_MINOR__)) \ && !defined __EDG__) # define INT_MULTIPLY_WRAPV(a, b, r) __builtin_mul_overflow (a, b, r) # else /* Work around GCC bug 91450. */ # define INT_MULTIPLY_WRAPV(a, b, r) \ ((!_GL_SIGNED_TYPE_OR_EXPR (*(r)) && EXPR_SIGNED (a) && EXPR_SIGNED (b) \ && _GL_INT_MULTIPLY_RANGE_OVERFLOW (a, b, 0, (__typeof__ (*(r))) -1)) \ ? ((void) __builtin_mul_overflow (a, b, r), 1) \ : __builtin_mul_overflow (a, b, r)) # endif #else # define INT_MULTIPLY_WRAPV(a, b, r) \ _GL_INT_OP_WRAPV (a, b, r, *, _GL_INT_MULTIPLY_RANGE_OVERFLOW) #endif /* Nonzero if this compiler has GCC bug 68193 or Clang bug 25390. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=68193 https://llvm.org/bugs/show_bug.cgi?id=25390 For now, assume all versions of GCC-like compilers generate bogus warnings for _Generic. This matters only for compilers that lack relevant builtins. */ #if __GNUC__ || defined __clang__ # define _GL__GENERIC_BOGUS 1 #else # define _GL__GENERIC_BOGUS 0 #endif /* Store the low-order bits of A <op> B into *R, where OP specifies the operation and OVERFLOW the overflow predicate. Return 1 if the result overflows. See above for restrictions. */ #if 201112 <= __STDC_VERSION__ && !_GL__GENERIC_BOGUS # define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ (_Generic \ (*(r), \ signed char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ signed char, SCHAR_MIN, SCHAR_MAX), \ unsigned char: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned char, 0, UCHAR_MAX), \ short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ short int, SHRT_MIN, SHRT_MAX), \ unsigned short int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned short int, 0, USHRT_MAX), \ int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX), \ unsigned int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned int, 0, UINT_MAX), \ long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX), \ unsigned long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX), \ long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX), \ unsigned long long int: \ _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ unsigned long long int, 0, ULLONG_MAX))) #else /* Store the low-order bits of A <op> B into *R, where OP specifies the operation and OVERFLOW the overflow predicate. If *R is signed, its type is ST with bounds SMIN..SMAX; otherwise its type is UT with bounds U..UMAX. ST and UT are narrower than int. Return 1 if the result overflows. See above for restrictions. */ # if _GL_HAVE___TYPEOF__ # define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ (TYPE_SIGNED (__typeof__ (*(r))) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, st, smin, smax) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, ut, 0, umax)) # else # define _GL_INT_OP_WRAPV_SMALLISH(a,b,r,op,overflow,st,smin,smax,ut,umax) \ (overflow (a, b, smin, smax) \ ? (overflow (a, b, 0, umax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) < 0) \ : (overflow (a, b, 0, umax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st)) >= 0 \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a,b,op,unsigned,st), 0))) # endif # define _GL_INT_OP_WRAPV(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (signed char) \ ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ signed char, SCHAR_MIN, SCHAR_MAX, \ unsigned char, UCHAR_MAX) \ : sizeof *(r) == sizeof (short int) \ ? _GL_INT_OP_WRAPV_SMALLISH (a, b, r, op, overflow, \ short int, SHRT_MIN, SHRT_MAX, \ unsigned short int, USHRT_MAX) \ : sizeof *(r) == sizeof (int) \ ? (EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ int, INT_MIN, INT_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned int, \ unsigned int, 0, UINT_MAX)) \ : _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow)) # ifdef LLONG_MAX # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (sizeof *(r) == sizeof (long int) \ ? (EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX)) \ : (EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ long long int, LLONG_MIN, LLONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long long int, \ unsigned long long int, 0, ULLONG_MAX))) # else # define _GL_INT_OP_WRAPV_LONGISH(a, b, r, op, overflow) \ (EXPR_SIGNED (*(r)) \ ? _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ long int, LONG_MIN, LONG_MAX) \ : _GL_INT_OP_CALC (a, b, r, op, overflow, unsigned long int, \ unsigned long int, 0, ULONG_MAX)) # endif #endif /* Store the low-order bits of A <op> B into *R, where the operation is given by OP. Use the unsigned type UT for calculation to avoid overflow problems. *R's type is T, with extrema TMIN and TMAX. T must be a signed integer type. Return 1 if the result overflows. */ #define _GL_INT_OP_CALC(a, b, r, op, overflow, ut, t, tmin, tmax) \ (overflow (a, b, tmin, tmax) \ ? (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 1) \ : (*(r) = _GL_INT_OP_WRAPV_VIA_UNSIGNED (a, b, op, ut, t), 0)) /* Return the low-order bits of A <op> B, where the operation is given by OP. Use the unsigned type UT for calculation to avoid undefined behavior on signed integer overflow, and convert the result to type T. UT is at least as wide as T and is no narrower than unsigned int, T is two's complement, and there is no padding or trap representations. Assume that converting UT to T yields the low-order bits, as is done in all known two's-complement C compilers. E.g., see: https://gcc.gnu.org/onlinedocs/gcc/Integers-implementation.html According to the C standard, converting UT to T yields an implementation-defined result or signal for values outside T's range. However, code that works around this theoretical problem runs afoul of a compiler bug in Oracle Studio 12.3 x86. See: https://lists.gnu.org/r/bug-gnulib/2017-04/msg00049.html As the compiler bug is real, don't try to work around the theoretical problem. */ #define _GL_INT_OP_WRAPV_VIA_UNSIGNED(a, b, op, ut, t) \ ((t) ((ut) (a) op (ut) (b))) /* Return true if the numeric values A + B, A - B, A * B fall outside the range TMIN..TMAX. Arguments should be integer expressions without side effects. TMIN should be signed and nonpositive. TMAX should be positive, and should be signed unless TMIN is zero. */ #define _GL_INT_ADD_RANGE_OVERFLOW(a, b, tmin, tmax) \ ((b) < 0 \ ? (((tmin) \ ? ((EXPR_SIGNED (_GL_INT_CONVERT (a, (tmin) - (b))) || (b) < (tmin)) \ && (a) < (tmin) - (b)) \ : (a) <= -1 - (b)) \ || ((EXPR_SIGNED (a) ? 0 <= (a) : (tmax) < (a)) && (tmax) < (a) + (b))) \ : (a) < 0 \ ? (((tmin) \ ? ((EXPR_SIGNED (_GL_INT_CONVERT (b, (tmin) - (a))) || (a) < (tmin)) \ && (b) < (tmin) - (a)) \ : (b) <= -1 - (a)) \ || ((EXPR_SIGNED (_GL_INT_CONVERT (a, b)) || (tmax) < (b)) \ && (tmax) < (a) + (b))) \ : (tmax) < (b) || (tmax) - (b) < (a)) #define _GL_INT_SUBTRACT_RANGE_OVERFLOW(a, b, tmin, tmax) \ (((a) < 0) == ((b) < 0) \ ? ((a) < (b) \ ? !(tmin) || -1 - (tmin) < (b) - (a) - 1 \ : (tmax) < (a) - (b)) \ : (a) < 0 \ ? ((!EXPR_SIGNED (_GL_INT_CONVERT ((a) - (tmin), b)) && (a) - (tmin) < 0) \ || (a) - (tmin) < (b)) \ : ((! (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ && EXPR_SIGNED (_GL_INT_CONVERT ((tmax) + (b), a))) \ && (tmax) <= -1 - (b)) \ || (tmax) + (b) < (a))) #define _GL_INT_MULTIPLY_RANGE_OVERFLOW(a, b, tmin, tmax) \ ((b) < 0 \ ? ((a) < 0 \ ? (EXPR_SIGNED (_GL_INT_CONVERT (tmax, b)) \ ? (a) < (tmax) / (b) \ : ((INT_NEGATE_OVERFLOW (b) \ ? _GL_INT_CONVERT (b, tmax) >> (TYPE_WIDTH (+ (b)) - 1) \ : (tmax) / -(b)) \ <= -1 - (a))) \ : INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (b, tmin)) && (b) == -1 \ ? (EXPR_SIGNED (a) \ ? 0 < (a) + (tmin) \ : 0 < (a) && -1 - (tmin) < (a) - 1) \ : (tmin) / (b) < (a)) \ : (b) == 0 \ ? 0 \ : ((a) < 0 \ ? (INT_NEGATE_OVERFLOW (_GL_INT_CONVERT (a, tmin)) && (a) == -1 \ ? (EXPR_SIGNED (b) ? 0 < (b) + (tmin) : -1 - (tmin) < (b) - 1) \ : (tmin) / (a) < (b)) \ : (tmax) / (b) < (a))) /* The following macros compute A + B, A - B, and A * B, respectively. If no overflow occurs, they set *R to the result and return 1; otherwise, they return 0 and may modify *R. Example usage: long int result; if (INT_ADD_OK (a, b, &result)) printf ("result is %ld\n", result); else printf ("overflow\n"); A, B, and *R should be integers; they need not be the same type, and they need not be all signed or all unsigned. These macros work correctly on all known practical hosts, and do not rely on undefined behavior due to signed arithmetic overflow. These macros are not constant expressions. These macros may evaluate their arguments zero or multiple times, so the arguments should not have side effects. These macros are tuned for B being a constant. */ #define INT_ADD_OK(a, b, r) ! INT_ADD_WRAPV (a, b, r) #define INT_SUBTRACT_OK(a, b, r) ! INT_SUBTRACT_WRAPV (a, b, r) #define INT_MULTIPLY_OK(a, b, r) ! INT_MULTIPLY_WRAPV (a, b, r) #endif /* _GL_INTPROPS_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/gl_array_list.h��������������������������������������������������������������������0000644�0000000�0000000�00000002156�14226564450�013672� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by an array. Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_ARRAY_LIST_H #define _GL_ARRAY_LIST_H #include "gl_list.h" #ifdef __cplusplus extern "C" { #endif extern const struct gl_list_implementation gl_array_list_implementation; #define GL_ARRAY_LIST &gl_array_list_implementation #ifdef __cplusplus } #endif #endif /* _GL_ARRAY_LIST_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/flock.c����������������������������������������������������������������������������0000644�0000000�0000000�00000011606�14226564447�012136� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emulate flock on platforms that lack it, primarily Windows and MinGW. This is derived from sqlite3 sources. https://www.sqlite.org/src/finfo?name=src/os_win.c https://www.sqlite.org/copyright.html Written by Richard W.M. Jones <rjones.at.redhat.com> Copyright (C) 2008-2022 Free Software Foundation, Inc. This library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <sys/file.h> #if defined _WIN32 && ! defined __CYGWIN__ /* LockFileEx */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # include <errno.h> /* _get_osfhandle */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Determine the current size of a file. Because the other braindead * APIs we'll call need lower/upper 32 bit pairs, keep the file size * like that too. */ static BOOL file_size (HANDLE h, DWORD * lower, DWORD * upper) { *lower = GetFileSize (h, upper); return 1; } /* LOCKFILE_FAIL_IMMEDIATELY is undefined on some Windows systems. */ # ifndef LOCKFILE_FAIL_IMMEDIATELY # define LOCKFILE_FAIL_IMMEDIATELY 1 # endif /* Acquire a lock. */ static BOOL do_lock (HANDLE h, int non_blocking, int exclusive) { BOOL res; DWORD size_lower, size_upper; OVERLAPPED ovlp; int flags = 0; /* We're going to lock the whole file, so get the file size. */ res = file_size (h, &size_lower, &size_upper); if (!res) return 0; /* Start offset is 0, and also zero the remaining members of this struct. */ memset (&ovlp, 0, sizeof ovlp); if (non_blocking) flags |= LOCKFILE_FAIL_IMMEDIATELY; if (exclusive) flags |= LOCKFILE_EXCLUSIVE_LOCK; return LockFileEx (h, flags, 0, size_lower, size_upper, &ovlp); } /* Unlock reader or exclusive lock. */ static BOOL do_unlock (HANDLE h) { int res; DWORD size_lower, size_upper; res = file_size (h, &size_lower, &size_upper); if (!res) return 0; return UnlockFile (h, 0, 0, size_lower, size_upper); } /* Now our BSD-like flock operation. */ int flock (int fd, int operation) { HANDLE h = (HANDLE) _get_osfhandle (fd); DWORD res; int non_blocking; if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } non_blocking = operation & LOCK_NB; operation &= ~LOCK_NB; switch (operation) { case LOCK_SH: res = do_lock (h, non_blocking, 0); break; case LOCK_EX: res = do_lock (h, non_blocking, 1); break; case LOCK_UN: res = do_unlock (h); break; default: errno = EINVAL; return -1; } /* Map Windows errors into Unix errnos. As usual MSDN fails to * document the permissible error codes. */ if (!res) { DWORD err = GetLastError (); switch (err) { /* This means someone else is holding a lock. */ case ERROR_LOCK_VIOLATION: errno = EAGAIN; break; /* Out of memory. */ case ERROR_NOT_ENOUGH_MEMORY: errno = ENOMEM; break; case ERROR_BAD_COMMAND: errno = EINVAL; break; /* Unlikely to be other errors, but at least don't lose the * error code. */ default: errno = err; } return -1; } return 0; } #else /* !Windows */ # ifdef HAVE_STRUCT_FLOCK_L_TYPE /* We know how to implement flock in terms of fcntl. */ # include <fcntl.h> # ifdef HAVE_UNISTD_H # include <unistd.h> # endif # include <errno.h> # include <string.h> int flock (int fd, int operation) { int cmd, r; struct flock fl; if (operation & LOCK_NB) cmd = F_SETLK; else cmd = F_SETLKW; operation &= ~LOCK_NB; memset (&fl, 0, sizeof fl); fl.l_whence = SEEK_SET; /* l_start & l_len are 0, which as a special case means "whole file". */ switch (operation) { case LOCK_SH: fl.l_type = F_RDLCK; break; case LOCK_EX: fl.l_type = F_WRLCK; break; case LOCK_UN: fl.l_type = F_UNLCK; break; default: errno = EINVAL; return -1; } r = fcntl (fd, cmd, &fl); if (r == -1 && errno == EACCES) errno = EAGAIN; return r; } # else /* !HAVE_STRUCT_FLOCK_L_TYPE */ # error "This platform lacks flock function, and Gnulib doesn't provide a replacement. This is a bug in Gnulib." # endif /* !HAVE_STRUCT_FLOCK_L_TYPE */ #endif /* !Windows */ ��������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/version-etc.c����������������������������������������������������������������������0000644�0000000�0000000�00000022305�14226564451�013267� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Print --version and bug-reporting information in a consistent format. Copyright (C) 1999-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> /* Specification. */ #include "version-etc.h" #include <stdarg.h> #include <stdio.h> #if USE_UNLOCKED_IO # include "unlocked-io.h" #endif #include "gettext.h" #define _(msgid) gettext (msgid) /* If you use AM_INIT_AUTOMAKE's no-define option, PACKAGE is not defined. Use PACKAGE_TARNAME instead. */ #if ! defined PACKAGE && defined PACKAGE_TARNAME # define PACKAGE PACKAGE_TARNAME #endif enum { COPYRIGHT_YEAR = 2022 }; /* The three functions below display the --version information the standard way. If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of the program. The formats are therefore: PACKAGE VERSION or COMMAND_NAME (PACKAGE) VERSION. The functions differ in the way they are passed author names. */ /* Display the --version information the standard way. Author names are given in the array AUTHORS. N_AUTHORS is the number of elements in the array. */ void version_etc_arn (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors, size_t n_authors) { if (command_name) fprintf (stream, "%s (%s) %s\n", command_name, package, version); else fprintf (stream, "%s %s\n", package, version); #ifdef PACKAGE_PACKAGER # ifdef PACKAGE_PACKAGER_VERSION fprintf (stream, _("Packaged by %s (%s)\n"), PACKAGE_PACKAGER, PACKAGE_PACKAGER_VERSION); # else fprintf (stream, _("Packaged by %s\n"), PACKAGE_PACKAGER); # endif #endif /* TRANSLATORS: Translate "(C)" to the copyright symbol (C-in-a-circle), if this symbol is available in the user's locale. Otherwise, do not translate "(C)"; leave it as-is. */ fprintf (stream, version_etc_copyright, _("(C)"), COPYRIGHT_YEAR); fputs ("\n", stream); /* TRANSLATORS: The %s placeholder is the web address of the GPL license. */ fprintf (stream, _("\ License GPLv3+: GNU GPL version 3 or later <%s>.\n\ This is free software: you are free to change and redistribute it.\n\ There is NO WARRANTY, to the extent permitted by law.\n\ "), "https://gnu.org/licenses/gpl.html"); fputs ("\n", stream); switch (n_authors) { case 0: /* No authors are given. The caller should output authorship info after calling this function. */ break; case 1: /* TRANSLATORS: %s denotes an author name. */ fprintf (stream, _("Written by %s.\n"), authors[0]); break; case 2: /* TRANSLATORS: Each %s denotes an author name. */ fprintf (stream, _("Written by %s and %s.\n"), authors[0], authors[1]); break; case 3: /* TRANSLATORS: Each %s denotes an author name. */ fprintf (stream, _("Written by %s, %s, and %s.\n"), authors[0], authors[1], authors[2]); break; case 4: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("Written by %s, %s, %s,\nand %s.\n"), authors[0], authors[1], authors[2], authors[3]); break; case 5: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("Written by %s, %s, %s,\n%s, and %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4]); break; case 6: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, and %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5]); break; case 7: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("Written by %s, %s, %s,\n%s, %s, %s, and %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5], authors[6]); break; case 8: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("\ Written by %s, %s, %s,\n%s, %s, %s, %s,\nand %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5], authors[6], authors[7]); break; case 9: /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("\ Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, and %s.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5], authors[6], authors[7], authors[8]); break; default: /* 10 or more authors. Use an abbreviation, since the human reader will probably not want to read the entire list anyway. */ /* TRANSLATORS: Each %s denotes an author name. You can use line breaks, estimating that each author name occupies ca. 16 screen columns and that a screen line has ca. 80 columns. */ fprintf (stream, _("\ Written by %s, %s, %s,\n%s, %s, %s, %s,\n%s, %s, and others.\n"), authors[0], authors[1], authors[2], authors[3], authors[4], authors[5], authors[6], authors[7], authors[8]); break; } } /* Display the --version information the standard way. See the initial comment to this module, for more information. Author names are given in the NULL-terminated array AUTHORS. */ void version_etc_ar (FILE *stream, const char *command_name, const char *package, const char *version, const char * const * authors) { size_t n_authors; for (n_authors = 0; authors[n_authors]; n_authors++) ; version_etc_arn (stream, command_name, package, version, authors, n_authors); } /* Display the --version information the standard way. See the initial comment to this module, for more information. Author names are given in the NULL-terminated va_list AUTHORS. */ void version_etc_va (FILE *stream, const char *command_name, const char *package, const char *version, va_list authors) { size_t n_authors; const char *authtab[10]; for (n_authors = 0; n_authors < 10 && (authtab[n_authors] = va_arg (authors, const char *)) != NULL; n_authors++) ; version_etc_arn (stream, command_name, package, version, authtab, n_authors); } /* Display the --version information the standard way. If COMMAND_NAME is NULL, the PACKAGE is assumed to be the name of the program. The formats are therefore: PACKAGE VERSION or COMMAND_NAME (PACKAGE) VERSION. The authors names are passed as separate arguments, with an additional NULL argument at the end. */ void version_etc (FILE *stream, const char *command_name, const char *package, const char *version, /* const char *author1, ...*/ ...) { va_list authors; va_start (authors, version); version_etc_va (stream, command_name, package, version, authors); va_end (authors); } void emit_bug_reporting_address (void) { fputs ("\n", stdout); /* TRANSLATORS: The placeholder indicates the bug-reporting address for this package. Please add _another line_ saying "Report translation bugs to <...>\n" with the address for translation bugs (typically your translation team's web or email address). */ printf (_("Report bugs to: %s\n"), PACKAGE_BUGREPORT); #ifdef PACKAGE_PACKAGER_BUG_REPORTS printf (_("Report %s bugs to: %s\n"), PACKAGE_PACKAGER, PACKAGE_PACKAGER_BUG_REPORTS); #endif #ifdef PACKAGE_URL printf (_("%s home page: <%s>\n"), PACKAGE_NAME, PACKAGE_URL); #else printf (_("%s home page: <%s>\n"), PACKAGE_NAME, "https://www.gnu.org/software/" PACKAGE "/"); #endif printf (_("General help using GNU software: <%s>\n"), "https://www.gnu.org/gethelp/"); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/wctype-h.c�������������������������������������������������������������������������0000644�0000000�0000000�00000001626�14226564451�012574� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <wctype.h>. Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Normally this would be wctype.c, but that name's already taken. */ #include <config.h> #define _GL_WCTYPE_INLINE _GL_EXTERN_INLINE #include "wctype.h" ����������������������������������������������������������������������������������������������������������recutils-1.9/lib/safe-write.h�����������������������������������������������������������������������0000644�0000000�0000000�00000003356�14226564450�013110� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to write() that retries after interrupts. Copyright (C) 2002, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Some system calls may be interrupted and fail with errno = EINTR in the following situations: - The process is stopped and restarted (signal SIGSTOP and SIGCONT, user types Ctrl-Z) on some platforms: Mac OS X. - The process receives a signal for which a signal handler was installed with sigaction() with an sa_flags field that does not contain SA_RESTART. - The process receives a signal for which a signal handler was installed with signal() and for which no call to siginterrupt(sig,0) was done, on some platforms: AIX, HP-UX, IRIX, OSF/1, Solaris. This module provides a wrapper around write() that handles EINTR. */ #include <stddef.h> #define SAFE_WRITE_ERROR ((size_t) -1) /* Write up to COUNT bytes at BUF to descriptor FD, retrying if interrupted. Return the actual number of bytes written, zero for EOF, or SAFE_WRITE_ERROR upon error. */ extern size_t safe_write (int fd, const void *buf, size_t count); ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/locale.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000023703�14226564450�012704� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX <locale.h>. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (defined _WIN32 && !defined __CYGWIN__ && defined __need_locale_t) \ || defined _GL_ALREADY_INCLUDING_LOCALE_H /* Special invocation convention: - Inside mingw header files, - To handle Solaris header files (through Solaris 10) when combined with gettext's libintl.h. */ #@INCLUDE_NEXT@ @NEXT_LOCALE_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_LOCALE_H #define _GL_ALREADY_INCLUDING_LOCALE_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_LOCALE_H@ #undef _GL_ALREADY_INCLUDING_LOCALE_H #ifndef _@GUARD_PREFIX@_LOCALE_H #define _@GUARD_PREFIX@_LOCALE_H /* NetBSD 5.0 mis-defines NULL. */ #include <stddef.h> /* Mac OS X 10.5 defines the locale_t type in <xlocale.h>. */ #if @HAVE_XLOCALE_H@ # include <xlocale.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* The LC_MESSAGES locale category is specified in POSIX, but not in ISO C. On systems that don't define it, use the same value as GNU libintl. */ #if !defined LC_MESSAGES # define LC_MESSAGES 1729 #endif /* On native Windows with MSVC, 'struct lconv' lacks the members int_p_* and int_n_*. Instead of overriding 'struct lconv', merely define these member names as macros. This avoids trouble in C++ mode. */ #if defined _MSC_VER # define int_p_cs_precedes p_cs_precedes # define int_p_sign_posn p_sign_posn # define int_p_sep_by_space p_sep_by_space # define int_n_cs_precedes n_cs_precedes # define int_n_sign_posn n_sign_posn # define int_n_sep_by_space n_sep_by_space #endif /* Bionic libc's 'struct lconv' is just a dummy. */ #if @REPLACE_STRUCT_LCONV@ # define lconv rpl_lconv struct lconv { /* All 'char *' are actually 'const char *'. */ /* Members that depend on the LC_NUMERIC category of the locale. See <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_04> */ /* Symbol used as decimal point. */ char *decimal_point; /* Symbol used to separate groups of digits to the left of the decimal point. */ char *thousands_sep; /* Definition of the size of groups of digits to the left of the decimal point. */ char *grouping; /* Members that depend on the LC_MONETARY category of the locale. See <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap07.html#tag_07_03_03> */ /* Symbol used as decimal point. */ char *mon_decimal_point; /* Symbol used to separate groups of digits to the left of the decimal point. */ char *mon_thousands_sep; /* Definition of the size of groups of digits to the left of the decimal point. */ char *mon_grouping; /* Sign used to indicate a value >= 0. */ char *positive_sign; /* Sign used to indicate a value < 0. */ char *negative_sign; /* For formatting local currency. */ /* Currency symbol (3 characters) followed by separator (1 character). */ char *currency_symbol; /* Number of digits after the decimal point. */ char frac_digits; /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char p_cs_precedes; /* For values >= 0: Position of the sign. */ char p_sign_posn; /* For values >= 0: Placement of spaces between currency symbol, sign, and number. */ char p_sep_by_space; /* For values < 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char n_cs_precedes; /* For values < 0: Position of the sign. */ char n_sign_posn; /* For values < 0: Placement of spaces between currency symbol, sign, and number. */ char n_sep_by_space; /* For formatting international currency. */ /* Currency symbol (3 characters) followed by separator (1 character). */ char *int_curr_symbol; /* Number of digits after the decimal point. */ char int_frac_digits; /* For values >= 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char int_p_cs_precedes; /* For values >= 0: Position of the sign. */ char int_p_sign_posn; /* For values >= 0: Placement of spaces between currency symbol, sign, and number. */ char int_p_sep_by_space; /* For values < 0: 1 if the currency symbol precedes the number, 0 if it comes after the number. */ char int_n_cs_precedes; /* For values < 0: Position of the sign. */ char int_n_sign_posn; /* For values < 0: Placement of spaces between currency symbol, sign, and number. */ char int_n_sep_by_space; }; #endif #if @GNULIB_LOCALECONV@ # if @REPLACE_LOCALECONV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localeconv # define localeconv rpl_localeconv # endif _GL_FUNCDECL_RPL (localeconv, struct lconv *, (void)); _GL_CXXALIAS_RPL (localeconv, struct lconv *, (void)); # else _GL_CXXALIAS_SYS (localeconv, struct lconv *, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (localeconv); # endif #elif @REPLACE_STRUCT_LCONV@ # undef localeconv # define localeconv localeconv_used_without_requesting_gnulib_module_localeconv #elif defined GNULIB_POSIXCHECK # undef localeconv # if HAVE_RAW_DECL_LOCALECONV _GL_WARN_ON_USE (localeconv, "localeconv returns too few information on some platforms - " "use gnulib module localeconv for portability"); # endif #endif #if @GNULIB_SETLOCALE@ # if @REPLACE_SETLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef setlocale # define setlocale rpl_setlocale # define GNULIB_defined_setlocale 1 # endif _GL_FUNCDECL_RPL (setlocale, char *, (int category, const char *locale)); _GL_CXXALIAS_RPL (setlocale, char *, (int category, const char *locale)); # else _GL_CXXALIAS_SYS (setlocale, char *, (int category, const char *locale)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (setlocale); # endif #elif defined GNULIB_POSIXCHECK # undef setlocale # if HAVE_RAW_DECL_SETLOCALE _GL_WARN_ON_USE (setlocale, "setlocale works differently on native Windows - " "use gnulib module setlocale for portability"); # endif #endif #if @GNULIB_SETLOCALE_NULL@ /* Included here for convenience. */ # include "setlocale_null.h" #endif #if /*@GNULIB_NEWLOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_NEWLOCALE@) # if @REPLACE_NEWLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef newlocale # define newlocale rpl_newlocale # define GNULIB_defined_newlocale 1 # endif _GL_FUNCDECL_RPL (newlocale, locale_t, (int category_mask, const char *name, locale_t base) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (newlocale, locale_t, (int category_mask, const char *name, locale_t base)); # else # if @HAVE_NEWLOCALE@ _GL_CXXALIAS_SYS (newlocale, locale_t, (int category_mask, const char *name, locale_t base)); # endif # endif # if @HAVE_NEWLOCALE@ _GL_CXXALIASWARN (newlocale); # endif # if @HAVE_NEWLOCALE@ || @REPLACE_NEWLOCALE@ # ifndef HAVE_WORKING_NEWLOCALE # define HAVE_WORKING_NEWLOCALE 1 # endif # endif #elif defined GNULIB_POSIXCHECK # undef newlocale # if HAVE_RAW_DECL_NEWLOCALE _GL_WARN_ON_USE (newlocale, "newlocale is not portable"); # endif #endif #if @GNULIB_DUPLOCALE@ || (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_DUPLOCALE@) # if @REPLACE_DUPLOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef duplocale # define duplocale rpl_duplocale # define GNULIB_defined_duplocale 1 # endif _GL_FUNCDECL_RPL (duplocale, locale_t, (locale_t locale) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (duplocale, locale_t, (locale_t locale)); # else # if @HAVE_DUPLOCALE@ _GL_CXXALIAS_SYS (duplocale, locale_t, (locale_t locale)); # endif # endif # if @HAVE_DUPLOCALE@ _GL_CXXALIASWARN (duplocale); # endif # if @HAVE_DUPLOCALE@ || @REPLACE_DUPLOCALE@ # ifndef HAVE_WORKING_DUPLOCALE # define HAVE_WORKING_DUPLOCALE 1 # endif # endif #elif defined GNULIB_POSIXCHECK # undef duplocale # if HAVE_RAW_DECL_DUPLOCALE _GL_WARN_ON_USE (duplocale, "duplocale is buggy on some glibc systems - " "use gnulib module duplocale for portability"); # endif #endif #if /*@GNULIB_FREELOCALE@ ||*/ (@GNULIB_LOCALENAME@ && @LOCALENAME_ENHANCE_LOCALE_FUNCS@ && @HAVE_FREELOCALE@) # if @REPLACE_FREELOCALE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freelocale # define freelocale rpl_freelocale # define GNULIB_defined_freelocale 1 # endif _GL_FUNCDECL_RPL (freelocale, void, (locale_t locale) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (freelocale, void, (locale_t locale)); # else # if @HAVE_FREELOCALE@ /* Need to cast, because on FreeBSD and Mac OS X 10.13, the return type is int. */ _GL_CXXALIAS_SYS_CAST (freelocale, void, (locale_t locale)); # endif # endif # if @HAVE_FREELOCALE@ _GL_CXXALIASWARN (freelocale); # endif #elif defined GNULIB_POSIXCHECK # undef freelocale # if HAVE_RAW_DECL_FREELOCALE _GL_WARN_ON_USE (freelocale, "freelocale is not portable"); # endif #endif #endif /* _@GUARD_PREFIX@_LOCALE_H */ #endif /* _@GUARD_PREFIX@_LOCALE_H */ #endif /* !(__need_locale_t || _GL_ALREADY_INCLUDING_LOCALE_H) */ �������������������������������������������������������������recutils-1.9/lib/xalloc-oversized.h�����������������������������������������������������������������0000644�0000000�0000000�00000005120�14226564451�014324� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* xalloc-oversized.h -- memory allocation size checking Copyright (C) 1990-2000, 2003-2004, 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef XALLOC_OVERSIZED_H_ #define XALLOC_OVERSIZED_H_ #include <stddef.h> #include <stdint.h> /* True if N * S does not fit into both ptrdiff_t and size_t. N and S should be nonnegative and free of side effects. This expands to a constant expression if N and S are both constants. By gnulib convention, SIZE_MAX represents overflow in size_t calculations, so the conservative size_t-based dividend to use here is SIZE_MAX - 1. */ #define __xalloc_oversized(n, s) \ ((s) != 0 \ && ((size_t) (PTRDIFF_MAX < SIZE_MAX ? PTRDIFF_MAX : SIZE_MAX - 1) / (s) \ < (n))) /* Return 1 if and only if an array of N objects, each of size S, cannot exist reliably because its total size in bytes would exceed MIN (PTRDIFF_MAX, SIZE_MAX - 1). N and S should be nonnegative and free of side effects. Warning: (xalloc_oversized (N, S) ? NULL : malloc (N * S)) can misbehave if N and S are both narrower than ptrdiff_t and size_t, and can be rewritten as (xalloc_oversized (N, S) ? NULL : malloc (N * (size_t) S)). This is a macro, not a function, so that it works even if an argument exceeds MAX (PTRDIFF_MAX, SIZE_MAX). */ #if 7 <= __GNUC__ && !defined __clang__ && PTRDIFF_MAX < SIZE_MAX # define xalloc_oversized(n, s) \ __builtin_mul_overflow_p (n, s, (ptrdiff_t) 1) #elif (5 <= __GNUC__ && !defined __ICC && !__STRICT_ANSI__ \ && PTRDIFF_MAX < SIZE_MAX) # define xalloc_oversized(n, s) \ (__builtin_constant_p (n) && __builtin_constant_p (s) \ ? __xalloc_oversized (n, s) \ : ({ ptrdiff_t __xalloc_count; \ __builtin_mul_overflow (n, s, &__xalloc_count); })) /* Other compilers use integer division; this may be slower but is more portable. */ #else # define xalloc_oversized(n, s) __xalloc_oversized (n, s) #endif #endif /* !XALLOC_OVERSIZED_H_ */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/wait-process.h���������������������������������������������������������������������0000644�0000000�0000000�00000005707�14226564451�013465� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Waiting for a subprocess to finish. Copyright (C) 2001-2003, 2006, 2008-2022 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _WAIT_PROCESS_H #define _WAIT_PROCESS_H /* Get pid_t. */ #include <stdlib.h> #include <unistd.h> #include <sys/types.h> #include <stdbool.h> #ifdef __cplusplus extern "C" { #endif /* Wait for a subprocess to finish. Return its exit code. If it didn't terminate correctly, exit if exit_on_error is true, otherwise return 127. Arguments: - child is the pid of the subprocess. - progname is the name of the program executed by the subprocess, used for error messages. - If ignore_sigpipe is true, consider a subprocess termination due to SIGPIPE as equivalent to a success. This is suitable for processes whose only purpose is to write to standard output. This flag can be safely set to false when the process' standard output is known to go to DEV_NULL. - If null_stderr is true, the usual error message to stderr will be omitted. This is suitable when the subprocess does not fulfill an important task. - slave_process should be set to true if the process has been launched as a slave process. - If exit_on_error is true, any error will cause the main process to exit with an error status. - If termsigp is not NULL: *termsig will be set to the signal that terminated the subprocess (if supported by the platform: not on native Windows platforms), otherwise 0, and the error message about the signal that terminated the subprocess will be omitted. Prerequisites: The signal handler for SIGCHLD should not be set to SIG_IGN, otherwise this function will not work. */ extern int wait_subprocess (pid_t child, const char *progname, bool ignore_sigpipe, bool null_stderr, bool slave_process, bool exit_on_error, int *termsigp); /* Register a subprocess as being a slave process. This means that the subprocess will be terminated when its creator receives a catchable fatal signal or exits normally. Registration ends when wait_subprocess() notices that the subprocess has exited. */ extern void register_slave_subprocess (pid_t child); #ifdef __cplusplus } #endif #endif /* _WAIT_PROCESS_H */ ���������������������������������������������������������recutils-1.9/lib/calloc.c���������������������������������������������������������������������������0000644�0000000�0000000�00000002672�14226564446�012277� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* calloc() function that is glibc compatible. This wrapper function is required at least on Tru64 UNIX 5.1 and mingw. Copyright (C) 2004-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #include "xalloc-oversized.h" /* Call the system's calloc below. */ #undef calloc /* Allocate and zero-fill an NxS-byte block of memory from the heap, even if N or S is zero. */ void * rpl_calloc (size_t n, size_t s) { if (n == 0 || s == 0) n = s = 1; if (xalloc_oversized (n, s)) { errno = ENOMEM; return NULL; } void *result = calloc (n, s); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ����������������������������������������������������������������������recutils-1.9/lib/mbrlen.c���������������������������������������������������������������������������0000644�0000000�0000000�00000002037�14226564450�012307� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Recognize multibyte character. Copyright (C) 1999-2000, 2008-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> static mbstate_t internal_state; size_t mbrlen (const char *s, size_t n, mbstate_t *ps) { if (ps == NULL) ps = &internal_state; return mbrtowc (NULL, s, n, ps); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/openat-proc.c����������������������������������������������������������������������0000644�0000000�0000000�00000010030�14226564447�013255� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create /proc/self/fd-related names for subfiles of open directories. Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include "openat-priv.h" #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef __KLIBC__ # include <InnoTekLIBC/backend.h> #endif #include "intprops.h" /* Set BUF to the name of the subfile of the directory identified by FD, where the subfile is named FILE. If successful, return BUF if the result fits in BUF, dynamically allocated memory otherwise. Return NULL (setting errno) on error. */ char * openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file) { char *result = buf; int dirlen; /* Make sure the caller gets ENOENT when appropriate. */ if (!*file) { buf[0] = '\0'; return buf; } #ifndef __KLIBC__ # define PROC_SELF_FD_FORMAT "/proc/self/fd/%d/" { enum { PROC_SELF_FD_DIR_SIZE_BOUND = (sizeof PROC_SELF_FD_FORMAT - (sizeof "%d" - 1) + INT_STRLEN_BOUND (int)) }; static int proc_status = 0; if (! proc_status) { /* Set PROC_STATUS to a positive value if /proc/self/fd is reliable, and a negative value otherwise. Solaris 10 /proc/self/fd mishandles "..", and any file name might expand to ".." after symbolic link expansion, so avoid /proc/self/fd if it mishandles "..". Solaris 10 has openat, but this problem is exhibited on code that built on Solaris 8 and running on Solaris 10. */ int proc_self_fd = open ("/proc/self/fd", O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NONBLOCK | O_CLOEXEC); if (proc_self_fd < 0) proc_status = -1; else { /* Detect whether /proc/self/fd/%i/../fd exists, where %i is the number of a file descriptor open on /proc/self/fd. On Linux, that name resolves to /proc/self/fd, which was opened above. However, on Solaris, it may resolve to /proc/self/fd/fd, which cannot exist, since all names in /proc/self/fd are numeric. */ char dotdot_buf[PROC_SELF_FD_DIR_SIZE_BOUND + sizeof "../fd" - 1]; sprintf (dotdot_buf, PROC_SELF_FD_FORMAT "../fd", proc_self_fd); proc_status = access (dotdot_buf, F_OK) ? -1 : 1; close (proc_self_fd); } } if (proc_status < 0) return NULL; else { size_t bufsize = PROC_SELF_FD_DIR_SIZE_BOUND + strlen (file); if (OPENAT_BUFFER_SIZE < bufsize) { result = malloc (bufsize); if (! result) return NULL; } dirlen = sprintf (result, PROC_SELF_FD_FORMAT, fd); } } #else /* OS/2 kLIBC provides a function to retrieve a path from a fd. */ { char dir[_MAX_PATH]; size_t bufsize; if (__libc_Back_ioFHToPath (fd, dir, sizeof dir)) return NULL; dirlen = strlen (dir); bufsize = dirlen + 1 + strlen (file) + 1; /* 1 for '/', 1 for null */ if (OPENAT_BUFFER_SIZE < bufsize) { result = malloc (bufsize); if (! result) return NULL; } strcpy (result, dir); result[dirlen++] = '/'; } #endif strcpy (result + dirlen, file); return result; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/same-inode.h�����������������������������������������������������������������������0000644�0000000�0000000�00000003237�14226564450�013061� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether two stat buffers are known to refer to the same file. Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef SAME_INODE_H # define SAME_INODE_H 1 # include <sys/types.h> # if defined __VMS && __CRTL_VER < 80200000 # define SAME_INODE(a, b) \ ((a).st_ino[0] == (b).st_ino[0] \ && (a).st_ino[1] == (b).st_ino[1] \ && (a).st_ino[2] == (b).st_ino[2] \ && (a).st_dev == (b).st_dev) # elif defined _WIN32 && ! defined __CYGWIN__ /* Native Windows. */ # if _GL_WINDOWS_STAT_INODES /* stat() and fstat() set st_dev and st_ino to 0 if information about the inode is not available. */ # define SAME_INODE(a, b) \ (!((a).st_ino == 0 && (a).st_dev == 0) \ && (a).st_ino == (b).st_ino && (a).st_dev == (b).st_dev) # else /* stat() and fstat() set st_ino to 0 always. */ # define SAME_INODE(a, b) 0 # endif # else # define SAME_INODE(a, b) \ ((a).st_ino == (b).st_ino \ && (a).st_dev == (b).st_dev) # endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/sys_types.in.h���������������������������������������������������������������������0000644�0000000�0000000�00000006171�14226564451�013510� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/types.h. Copyright (C) 2011-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _WIN32 && !defined __CYGWIN__ \ && (defined __need_off_t || defined __need___off64_t \ || defined __need_ssize_t || defined __need_time_t) /* Special invocation convention inside mingw header files. */ #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_TYPES_H /* The include_next requires a split double-inclusion guard. */ # define _GL_INCLUDING_SYS_TYPES_H #@INCLUDE_NEXT@ @NEXT_SYS_TYPES_H@ # undef _GL_INCLUDING_SYS_TYPES_H #ifndef _@GUARD_PREFIX@_SYS_TYPES_H #define _@GUARD_PREFIX@_SYS_TYPES_H /* Override off_t if Large File Support is requested on native Windows. */ #if @WINDOWS_64_BIT_OFF_T@ /* Same as int64_t in <stdint.h>. */ # if defined _MSC_VER # define off_t __int64 # else # define off_t long long int # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_64_BIT_OFF_T 1 #endif /* Override dev_t and ino_t if distinguishable inodes support is requested on native Windows. */ #if @WINDOWS_STAT_INODES@ # if @WINDOWS_STAT_INODES@ == 2 /* Experimental, not useful in Windows 10. */ /* Define dev_t to a 64-bit type. */ # if !defined GNULIB_defined_dev_t typedef unsigned long long int rpl_dev_t; # undef dev_t # define dev_t rpl_dev_t # define GNULIB_defined_dev_t 1 # endif /* Define ino_t to a 128-bit type. */ # if !defined GNULIB_defined_ino_t /* MSVC does not have a 128-bit integer type. GCC has a 128-bit integer type __int128, but only on 64-bit targets. */ typedef struct { unsigned long long int _gl_ino[2]; } rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # else /* @WINDOWS_STAT_INODES@ == 1 */ /* Define ino_t to a 64-bit type. */ # if !defined GNULIB_defined_ino_t typedef unsigned long long int rpl_ino_t; # undef ino_t # define ino_t rpl_ino_t # define GNULIB_defined_ino_t 1 # endif # endif /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_INODES @WINDOWS_STAT_INODES@ #endif /* MSVC 9 defines size_t in <stddef.h>, not in <sys/types.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (defined _WIN32 && ! defined __CYGWIN__) && ! defined __GLIBC__ # include <stddef.h> #endif #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* _@GUARD_PREFIX@_SYS_TYPES_H */ #endif /* __need_XXX */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/hard-locale.c����������������������������������������������������������������������0000644�0000000�0000000�00000002150�14226564450�013177� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* hard-locale.c -- Determine whether a locale is hard. Copyright (C) 1997-1999, 2002-2004, 2006-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "hard-locale.h" #include <locale.h> #include <string.h> bool hard_locale (int category) { char locale[SETLOCALE_NULL_MAX]; if (setlocale_null_r (category, locale, sizeof (locale))) return false; return !(strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/dirent-private.h�������������������������������������������������������������������0000644�0000000�0000000�00000003161�14226564446�013776� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Private details of the DIR type. Copyright (C) 2011-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _DIRENT_PRIVATE_H #define _DIRENT_PRIVATE_H 1 #define WIN32_LEAN_AND_MEAN #include <windows.h> /* Don't assume that UNICODE is not defined. */ #undef WIN32_FIND_DATA #define WIN32_FIND_DATA WIN32_FIND_DATAA struct gl_directory { /* Status, or error code to produce in next readdir() call. -2 means the end of the directory is already reached, -1 means the entry was already filled by FindFirstFile, 0 means the entry needs to be filled using FindNextFile. A positive value is an error code. */ int status; /* Handle, reading the directory, at current position. */ HANDLE current; /* Found directory entry. */ WIN32_FIND_DATA entry; /* Argument to pass to FindFirstFile. It consists of the absolutized directory name, followed by a directory separator and the wildcards. */ char dir_name_mask[1]; }; #endif /* _DIRENT_PRIVATE_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fd-safer-flag.c��������������������������������������������������������������������0000644�0000000�0000000�00000003352�14226564446�013434� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Adjust a file descriptor result so that it avoids clobbering STD{IN,OUT,ERR}_FILENO, with specific flags. Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Eric Blake. */ #include <config.h> /* Specification. */ #include "unistd-safer.h" #include <errno.h> #include <unistd.h> /* Return FD, unless FD would be a copy of standard input, output, or error; in that case, return a duplicate of FD, closing FD. If FLAG contains O_CLOEXEC, the returned FD will have close-on-exec semantics. On failure to duplicate, close FD, set errno, and return -1. Preserve errno if FD is negative, so that the caller can always inspect errno when the returned value is negative. This function is usefully wrapped around functions that return file descriptors, e.g., fd_safer_flag (open ("file", O_RDONLY | flag), flag). */ int fd_safer_flag (int fd, int flag) { if (STDIN_FILENO <= fd && fd <= STDERR_FILENO) { int f = dup_safer_flag (fd, flag); int e = errno; close (fd); errno = e; fd = f; } return fd; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/ialloc.c���������������������������������������������������������������������������0000644�0000000�0000000�00000001512�14226564446�012275� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* malloc with idx_t rather than size_t Copyright 2021-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define IALLOC_INLINE _GL_EXTERN_INLINE #include "ialloc.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/regex.c����������������������������������������������������������������������������0000644�0000000�0000000�00000006226�14226564450�012146� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #define __STDC_WANT_IEC_60559_BFP_EXT__ #ifndef _LIBC # include <libc-config.h> # if __GNUC_PREREQ (4, 6) # pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" # pragma GCC diagnostic ignored "-Wvla" # endif # if __GNUC_PREREQ (4, 3) # pragma GCC diagnostic ignored "-Wold-style-definition" # pragma GCC diagnostic ignored "-Wtype-limits" # endif #endif /* Make sure no one compiles this code with a C++ compiler. */ #if defined __cplusplus && defined _LIBC # error "This is C code, use a C compiler" #endif #ifdef _LIBC /* We have to keep the namespace clean. */ # define regfree(preg) __regfree (preg) # define regexec(pr, st, nm, pm, ef) __regexec (pr, st, nm, pm, ef) # define regcomp(preg, pattern, cflags) __regcomp (preg, pattern, cflags) # define regerror(errcode, preg, errbuf, errbuf_size) \ __regerror(errcode, preg, errbuf, errbuf_size) # define re_set_registers(bu, re, nu, st, en) \ __re_set_registers (bu, re, nu, st, en) # define re_match_2(bufp, string1, size1, string2, size2, pos, regs, stop) \ __re_match_2 (bufp, string1, size1, string2, size2, pos, regs, stop) # define re_match(bufp, string, size, pos, regs) \ __re_match (bufp, string, size, pos, regs) # define re_search(bufp, string, size, startpos, range, regs) \ __re_search (bufp, string, size, startpos, range, regs) # define re_compile_pattern(pattern, length, bufp) \ __re_compile_pattern (pattern, length, bufp) # define re_set_syntax(syntax) __re_set_syntax (syntax) # define re_search_2(bufp, st1, s1, st2, s2, startpos, range, regs, stop) \ __re_search_2 (bufp, st1, s1, st2, s2, startpos, range, regs, stop) # define re_compile_fastmap(bufp) __re_compile_fastmap (bufp) # include "../locale/localeinfo.h" #endif /* On some systems, limits.h sets RE_DUP_MAX to a lower value than GNU regex allows. Include it before <regex.h>, which correctly #undefs RE_DUP_MAX and sets it to the right value. */ #include <limits.h> #include <regex.h> #include "regex_internal.h" #include "regex_internal.c" #include "regcomp.c" #include "regexec.c" /* Binary backward compatibility. */ #if _LIBC # include <shlib-compat.h> # if SHLIB_COMPAT (libc, GLIBC_2_0, GLIBC_2_3) link_warning (re_max_failures, "the 're_max_failures' variable is obsolete and will go away.") int re_max_failures = 2000; # endif #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/progname.c�������������������������������������������������������������������������0000644�0000000�0000000�00000006151�14226564450�012641� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2001-2003, 2005-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #undef ENABLE_RELOCATABLE /* avoid defining set_program_name as a macro */ #include "progname.h" #include <errno.h> /* get program_invocation_name declaration */ #include <stdio.h> #include <stdlib.h> #include <string.h> /* String containing name the program is called with. To be initialized by main(). */ const char *program_name = NULL; /* Set program_name, based on argv[0]. argv0 must be a string allocated with indefinite extent, and must not be modified after this call. */ void set_program_name (const char *argv0) { /* libtool creates a temporary executable whose name is sometimes prefixed with "lt-" (depends on the platform). It also makes argv[0] absolute. But the name of the temporary executable is a detail that should not be visible to the end user and to the test suite. Remove this "<dirname>/.libs/" or "<dirname>/.libs/lt-" prefix here. */ const char *slash; const char *base; /* Sanity check. POSIX requires the invoking process to pass a non-NULL argv[0]. */ if (argv0 == NULL) { /* It's a bug in the invoking program. Help diagnosing it. */ fputs ("A NULL argv[0] was passed through an exec system call.\n", stderr); abort (); } slash = strrchr (argv0, '/'); base = (slash != NULL ? slash + 1 : argv0); if (base - argv0 >= 7 && strncmp (base - 7, "/.libs/", 7) == 0) { argv0 = base; if (strncmp (base, "lt-", 3) == 0) { argv0 = base + 3; /* On glibc systems, remove the "lt-" prefix from the variable program_invocation_short_name. */ #if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME program_invocation_short_name = (char *) argv0; #endif } } /* But don't strip off a leading <dirname>/ in general, because when the user runs /some/hidden/place/bin/cp foo foo he should get the error message /some/hidden/place/bin/cp: `foo' and `foo' are the same file not cp: `foo' and `foo' are the same file */ program_name = argv0; /* On glibc systems, the error() function comes from libc and uses the variable program_invocation_name, not program_name. So set this variable as well. */ #if HAVE_DECL_PROGRAM_INVOCATION_NAME program_invocation_name = (char *) argv0; #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/acl-internal.c���������������������������������������������������������������������0000644�0000000�0000000�00000036235�14226564447�013416� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether a file has a nontrivial ACL. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include <config.h> #include "acl.h" #include "acl-internal.h" #if USE_ACL && HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ /* ACL is an ACL, from a file, stored as type ACL_TYPE_EXTENDED. Return 1 if the given ACL is non-trivial. Return 0 if it is trivial. */ int acl_extended_nontrivial (acl_t acl) { /* acl is non-trivial if it is non-empty. */ return (acl_entries (acl) > 0); } # else /* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ /* ACL is an ACL, from a file, stored as type ACL_TYPE_ACCESS. Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. Return -1 and set errno upon failure to determine it. */ int acl_access_nontrivial (acl_t acl) { /* acl is non-trivial if it has some entries other than for "user::", "group::", and "other::". Normally these three should be present at least, allowing us to write return (3 < acl_entries (acl)); but the following code is more robust. */ # if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, Cygwin >= 2.5 */ acl_entry_t ace; int got_one; for (got_one = acl_get_entry (acl, ACL_FIRST_ENTRY, &ace); got_one > 0; got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace)) { acl_tag_t tag; if (acl_get_tag_type (ace, &tag) < 0) return -1; if (!(tag == ACL_USER_OBJ || tag == ACL_GROUP_OBJ || tag == ACL_OTHER)) return 1; } return got_one; # elif HAVE_ACL_TO_SHORT_TEXT /* IRIX */ /* Don't use acl_get_entry: it is undocumented. */ int count = acl->acl_cnt; int i; for (i = 0; i < count; i++) { acl_entry_t ace = &acl->acl_entry[i]; acl_tag_t tag = ace->ae_tag; if (!(tag == ACL_USER_OBJ || tag == ACL_GROUP_OBJ || tag == ACL_OTHER_OBJ)) return 1; } return 0; # elif HAVE_ACL_FREE_TEXT /* Tru64 */ /* Don't use acl_get_entry: it takes only one argument and does not work. */ int count = acl->acl_num; acl_entry_t ace; for (ace = acl->acl_first; count > 0; ace = ace->next, count--) { acl_tag_t tag; acl_perm_t perm; tag = ace->entry->acl_type; if (!(tag == ACL_USER_OBJ || tag == ACL_GROUP_OBJ || tag == ACL_OTHER)) return 1; perm = ace->entry->acl_perm; /* On Tru64, perm can also contain non-standard bits such as PERM_INSERT, PERM_DELETE, PERM_MODIFY, PERM_LOOKUP, ... */ if ((perm & ~(ACL_READ | ACL_WRITE | ACL_EXECUTE)) != 0) return 1; } return 0; # else errno = ENOSYS; return -1; # endif } int acl_default_nontrivial (acl_t acl) { /* acl is non-trivial if it is non-empty. */ return (acl_entries (acl) > 0); } # endif #elif USE_ACL && HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ /* Test an ACL retrieved with GETACL. Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int acl_nontrivial (int count, aclent_t *entries) { int i; for (i = 0; i < count; i++) { aclent_t *ace = &entries[i]; /* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat(). If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat(). We don't need to check ace->a_id in these cases. */ if (!(ace->a_type == USER_OBJ || ace->a_type == GROUP_OBJ || ace->a_type == OTHER_OBJ /* Note: Cygwin does not return a CLASS_OBJ ("mask:") entry sometimes. */ || ace->a_type == CLASS_OBJ)) return 1; } return 0; } # ifdef ACE_GETACL /* A shortcut for a bitmask. */ # define NEW_ACE_WRITEA_DATA (NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA) /* Test an ACL retrieved with ACE_GETACL. Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int acl_ace_nontrivial (int count, ace_t *entries) { int i; /* The flags in the ace_t structure changed in a binary incompatible way when ACL_NO_TRIVIAL etc. were introduced in <sys/acl.h> version 1.15. How to distinguish the two conventions at runtime? In the old convention, usually three ACEs have a_flags = ACE_OWNER / ACE_GROUP / ACE_OTHER, in the range 0x0100..0x0400. In the new convention, these values are not used. */ int old_convention = 0; for (i = 0; i < count; i++) if (entries[i].a_flags & (OLD_ACE_OWNER | OLD_ACE_GROUP | OLD_ACE_OTHER)) { old_convention = 1; break; } if (old_convention) /* Running on Solaris 10. */ for (i = 0; i < count; i++) { ace_t *ace = &entries[i]; /* Note: If ace->a_flags = ACE_OWNER, ace->a_who is the st_uid from stat(). If ace->a_flags = ACE_GROUP, ace->a_who is the st_gid from stat(). We don't need to check ace->a_who in these cases. */ if (!(ace->a_type == OLD_ALLOW && (ace->a_flags == OLD_ACE_OWNER || ace->a_flags == OLD_ACE_GROUP || ace->a_flags == OLD_ACE_OTHER))) return 1; } else { /* Running on Solaris 10 (newer version) or Solaris 11. */ unsigned int access_masks[6] = { 0, /* owner@ deny */ 0, /* owner@ allow */ 0, /* group@ deny */ 0, /* group@ allow */ 0, /* everyone@ deny */ 0 /* everyone@ allow */ }; for (i = 0; i < count; i++) { ace_t *ace = &entries[i]; unsigned int index1; unsigned int index2; if (ace->a_type == NEW_ACE_ACCESS_ALLOWED_ACE_TYPE) index1 = 1; else if (ace->a_type == NEW_ACE_ACCESS_DENIED_ACE_TYPE) index1 = 0; else return 1; if (ace->a_flags == NEW_ACE_OWNER) index2 = 0; else if (ace->a_flags == (NEW_ACE_GROUP | NEW_ACE_IDENTIFIER_GROUP)) index2 = 2; else if (ace->a_flags == NEW_ACE_EVERYONE) index2 = 4; else return 1; access_masks[index1 + index2] |= ace->a_access_mask; } /* The same bit shouldn't be both allowed and denied. */ if (access_masks[0] & access_masks[1]) return 1; if (access_masks[2] & access_masks[3]) return 1; if (access_masks[4] & access_masks[5]) return 1; /* Check minimum masks. */ if ((NEW_ACE_WRITE_NAMED_ATTRS | NEW_ACE_WRITE_ATTRIBUTES | NEW_ACE_WRITE_ACL | NEW_ACE_WRITE_OWNER) & ~ access_masks[1]) return 1; access_masks[1] &= ~(NEW_ACE_WRITE_NAMED_ATTRS | NEW_ACE_WRITE_ATTRIBUTES | NEW_ACE_WRITE_ACL | NEW_ACE_WRITE_OWNER); if ((NEW_ACE_READ_NAMED_ATTRS | NEW_ACE_READ_ATTRIBUTES | NEW_ACE_READ_ACL | NEW_ACE_SYNCHRONIZE) & ~ access_masks[5]) return 1; access_masks[5] &= ~(NEW_ACE_READ_NAMED_ATTRS | NEW_ACE_READ_ATTRIBUTES | NEW_ACE_READ_ACL | NEW_ACE_SYNCHRONIZE); /* Check the allowed or denied bits. */ switch ((access_masks[0] | access_masks[1]) & ~(NEW_ACE_READ_NAMED_ATTRS | NEW_ACE_READ_ATTRIBUTES | NEW_ACE_READ_ACL | NEW_ACE_SYNCHRONIZE)) { case 0: case NEW_ACE_READ_DATA: case NEW_ACE_WRITEA_DATA: case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA: case NEW_ACE_EXECUTE: case NEW_ACE_READ_DATA | NEW_ACE_EXECUTE: case NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: break; default: return 1; } switch ((access_masks[2] | access_masks[3]) & ~(NEW_ACE_READ_NAMED_ATTRS | NEW_ACE_READ_ATTRIBUTES | NEW_ACE_READ_ACL | NEW_ACE_SYNCHRONIZE)) { case 0: case NEW_ACE_READ_DATA: case NEW_ACE_WRITEA_DATA: case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA: case NEW_ACE_EXECUTE: case NEW_ACE_READ_DATA | NEW_ACE_EXECUTE: case NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: break; default: return 1; } switch ((access_masks[4] | access_masks[5]) & ~(NEW_ACE_WRITE_NAMED_ATTRS | NEW_ACE_WRITE_ATTRIBUTES | NEW_ACE_WRITE_ACL | NEW_ACE_WRITE_OWNER)) { case 0: case NEW_ACE_READ_DATA: case NEW_ACE_WRITEA_DATA: case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA: case NEW_ACE_EXECUTE: case NEW_ACE_READ_DATA | NEW_ACE_EXECUTE: case NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: case NEW_ACE_READ_DATA | NEW_ACE_WRITEA_DATA | NEW_ACE_EXECUTE: break; default: return 1; } /* Check that the NEW_ACE_WRITE_DATA and NEW_ACE_APPEND_DATA bits are either both allowed or both denied. */ if (((access_masks[0] & NEW_ACE_WRITE_DATA) != 0) != ((access_masks[0] & NEW_ACE_APPEND_DATA) != 0)) return 1; if (((access_masks[2] & NEW_ACE_WRITE_DATA) != 0) != ((access_masks[2] & NEW_ACE_APPEND_DATA) != 0)) return 1; if (((access_masks[4] & NEW_ACE_WRITE_DATA) != 0) != ((access_masks[4] & NEW_ACE_APPEND_DATA) != 0)) return 1; } return 0; } # endif #elif USE_ACL && HAVE_GETACL /* HP-UX */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int acl_nontrivial (int count, struct acl_entry *entries) { int i; if (count > 3) return 1; for (i = 0; i < count; i++) { struct acl_entry *ace = &entries[i]; if (ace->uid != ACL_NSUSER && ace->gid != ACL_NSGROUP) return 1; } return 0; } # if HAVE_ACLV_H /* HP-UX >= 11.11 */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int aclv_nontrivial (int count, struct acl *entries) { int i; for (i = 0; i < count; i++) { struct acl *ace = &entries[i]; /* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat(). If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat(). We don't need to check ace->a_id in these cases. */ if (!(ace->a_type == USER_OBJ /* no need to check ace->a_id here */ || ace->a_type == GROUP_OBJ /* no need to check ace->a_id here */ || ace->a_type == CLASS_OBJ || ace->a_type == OTHER_OBJ)) return 1; } return 0; } # endif #elif USE_ACL && (HAVE_ACLX_GET || HAVE_STATACL) /* AIX */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int acl_nontrivial (struct acl *a) { /* The normal way to iterate through an ACL is like this: struct acl_entry *ace; for (ace = a->acl_ext; ace != acl_last (a); ace = acl_nxt (ace)) { struct ace_id *aei; switch (ace->ace_type) { case ACC_PERMIT: case ACC_DENY: case ACC_SPECIFY: ...; } for (aei = ace->ace_id; aei != id_last (ace); aei = id_nxt (aei)) ... } */ return (acl_last (a) != a->acl_ext ? 1 : 0); } # if HAVE_ACLX_GET && defined ACL_AIX_WIP /* newer AIX */ /* Return 1 if the given ACL is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int acl_nfs4_nontrivial (nfs4_acl_int_t *a) { # if 1 /* let's try this first */ return (a->aclEntryN > 0 ? 1 : 0); # else int count = a->aclEntryN; int i; for (i = 0; i < count; i++) { nfs4_ace_int_t *ace = &a->aclEntry[i]; if (!((ace->flags & ACE4_ID_SPECIAL) != 0 && (ace->aceWho.special_whoid == ACE4_WHO_OWNER || ace->aceWho.special_whoid == ACE4_WHO_GROUP || ace->aceWho.special_whoid == ACE4_WHO_EVERYONE) && ace->aceType == ACE4_ACCESS_ALLOWED_ACE_TYPE && ace->aceFlags == 0 && (ace->aceMask & ~(ACE4_READ_DATA | ACE4_LIST_DIRECTORY | ACE4_WRITE_DATA | ACE4_ADD_FILE | ACE4_EXECUTE)) == 0)) return 1; } return 0; # endif } # endif #elif USE_ACL && HAVE_ACLSORT /* NonStop Kernel */ /* Test an ACL retrieved with ACL_GET. Return 1 if the given ACL, consisting of COUNT entries, is non-trivial. Return 0 if it is trivial, i.e. equivalent to a simple stat() mode. */ int acl_nontrivial (int count, struct acl *entries) { int i; for (i = 0; i < count; i++) { struct acl *ace = &entries[i]; /* Note: If ace->a_type = USER_OBJ, ace->a_id is the st_uid from stat(). If ace->a_type = GROUP_OBJ, ace->a_id is the st_gid from stat(). We don't need to check ace->a_id in these cases. */ if (!(ace->a_type == USER_OBJ /* no need to check ace->a_id here */ || ace->a_type == GROUP_OBJ /* no need to check ace->a_id here */ || ace->a_type == CLASS_OBJ || ace->a_type == OTHER_OBJ)) return 1; } return 0; } #endif void free_permission_context (struct permission_context *ctx) { #if USE_ACL # if HAVE_ACL_GET_FILE /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ if (ctx->acl) acl_free (ctx->acl); # if !HAVE_ACL_TYPE_EXTENDED if (ctx->default_acl) acl_free (ctx->default_acl); # endif # elif defined GETACL /* Solaris, Cygwin < 2.5 */ free (ctx->entries); # ifdef ACE_GETACL free (ctx->ace_entries); # endif # elif HAVE_GETACL /* HP-UX */ # if HAVE_ACLV_H # endif # elif HAVE_STATACL /* older AIX */ # elif HAVE_ACLSORT /* NonStop Kernel */ # endif #endif } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/regex_internal.h�������������������������������������������������������������������0000644�0000000�0000000�00000055611�14226564450�014051� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _REGEX_INTERNAL_H #define _REGEX_INTERNAL_H 1 #include <ctype.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <langinfo.h> #include <locale.h> #include <wchar.h> #include <wctype.h> #include <stdbool.h> #include <stdint.h> #ifndef _LIBC # include <dynarray.h> #endif #include <intprops.h> #include <verify.h> #if defined DEBUG && DEBUG != 0 # include <assert.h> # define DEBUG_ASSERT(x) assert (x) #else # define DEBUG_ASSERT(x) assume (x) #endif #ifdef _LIBC # include <libc-lock.h> # define lock_define(name) __libc_lock_define (, name) # define lock_init(lock) (__libc_lock_init (lock), 0) # define lock_fini(lock) ((void) 0) # define lock_lock(lock) __libc_lock_lock (lock) # define lock_unlock(lock) __libc_lock_unlock (lock) #elif defined GNULIB_LOCK && !defined GNULIB_REGEX_SINGLE_THREAD # include "glthread/lock.h" # define lock_define(name) gl_lock_define (, name) # define lock_init(lock) glthread_lock_init (&(lock)) # define lock_fini(lock) glthread_lock_destroy (&(lock)) # define lock_lock(lock) glthread_lock_lock (&(lock)) # define lock_unlock(lock) glthread_lock_unlock (&(lock)) #elif defined GNULIB_PTHREAD && !defined GNULIB_REGEX_SINGLE_THREAD # include <pthread.h> # define lock_define(name) pthread_mutex_t name; # define lock_init(lock) pthread_mutex_init (&(lock), 0) # define lock_fini(lock) pthread_mutex_destroy (&(lock)) # define lock_lock(lock) pthread_mutex_lock (&(lock)) # define lock_unlock(lock) pthread_mutex_unlock (&(lock)) #else # define lock_define(name) # define lock_init(lock) 0 # define lock_fini(lock) ((void) 0) /* The 'dfa' avoids an "unused variable 'dfa'" warning from GCC. */ # define lock_lock(lock) ((void) dfa) # define lock_unlock(lock) ((void) 0) #endif /* In case that the system doesn't have isblank(). */ #if !defined _LIBC && ! (defined isblank || (HAVE_ISBLANK && HAVE_DECL_ISBLANK)) # define isblank(ch) ((ch) == ' ' || (ch) == '\t') #endif /* regex code assumes isascii has its usual numeric meaning, even if the portable character set uses EBCDIC encoding, and even if wint_t is wider than int. */ #ifndef _LIBC # undef isascii # define isascii(c) (((c) & ~0x7f) == 0) #endif #ifdef _LIBC # ifndef _RE_DEFINE_LOCALE_FUNCTIONS # define _RE_DEFINE_LOCALE_FUNCTIONS 1 # include <locale/localeinfo.h> # include <locale/coll-lookup.h> # endif #endif /* This is for other GNU distributions with internationalized messages. */ #if (HAVE_LIBINTL_H && ENABLE_NLS) || defined _LIBC # include <libintl.h> # ifdef _LIBC # undef gettext # define gettext(msgid) \ __dcgettext (_libc_intl_domainname, msgid, LC_MESSAGES) # endif #else # undef gettext # define gettext(msgid) (msgid) #endif #ifndef gettext_noop /* This define is so xgettext can find the internationalizable strings. */ # define gettext_noop(String) String #endif /* Number of ASCII characters. */ #define ASCII_CHARS 0x80 /* Number of single byte characters. */ #define SBC_MAX (UCHAR_MAX + 1) #define COLL_ELEM_LEN_MAX 8 /* The character which represents newline. */ #define NEWLINE_CHAR '\n' #define WIDE_NEWLINE_CHAR L'\n' /* Rename to standard API for using out of glibc. */ #ifndef _LIBC # undef __wctype # undef __iswalnum # undef __iswctype # undef __towlower # undef __towupper # define __wctype wctype # define __iswalnum iswalnum # define __iswctype iswctype # define __towlower towlower # define __towupper towupper # define __btowc btowc # define __mbrtowc mbrtowc # define __wcrtomb wcrtomb # define __regfree regfree #endif /* not _LIBC */ /* Types related to integers. Unless protected by #ifdef _LIBC, the regex code should avoid exact-width types like int32_t and uint64_t as some non-GCC platforms lack them, an issue when this code is used in Gnulib. */ #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #endif #ifndef ULONG_WIDTH # define ULONG_WIDTH REGEX_UINTEGER_WIDTH (ULONG_MAX) /* The number of usable bits in an unsigned integer type with maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This implementation exploits the fact that MAX is 1 less than a power of 2, and merely counts the number of 1 bits in MAX; "COBn" means "count the number of 1 bits in the low-order n bits". */ # define REGEX_UINTEGER_WIDTH(max) REGEX_COB128 (max) # define REGEX_COB128(n) (REGEX_COB64 ((n) >> 31 >> 31 >> 2) + REGEX_COB64 (n)) # define REGEX_COB64(n) (REGEX_COB32 ((n) >> 31 >> 1) + REGEX_COB32 (n)) # define REGEX_COB32(n) (REGEX_COB16 ((n) >> 16) + REGEX_COB16 (n)) # define REGEX_COB16(n) (REGEX_COB8 ((n) >> 8) + REGEX_COB8 (n)) # define REGEX_COB8(n) (REGEX_COB4 ((n) >> 4) + REGEX_COB4 (n)) # define REGEX_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + ((n) & 1)) # if ULONG_MAX / 2 + 1 != 1ul << (ULONG_WIDTH - 1) # error "ULONG_MAX out of range" # endif #endif /* The type of indexes into strings. This is signed, not size_t, since the API requires indexes to fit in regoff_t anyway, and using signed integers makes the code a bit smaller and presumably faster. The traditional GNU regex implementation uses int for indexes. The POSIX-compatible implementation uses a possibly-wider type. The name 'Idx' is three letters to minimize the hassle of reindenting a lot of regex code that formerly used 'int'. */ typedef regoff_t Idx; #ifdef _REGEX_LARGE_OFFSETS # define IDX_MAX SSIZE_MAX #else # define IDX_MAX INT_MAX #endif /* A hash value, suitable for computing hash tables. */ typedef __re_size_t re_hashval_t; /* An integer used to represent a set of bits. It must be unsigned, and must be at least as wide as unsigned int. */ typedef unsigned long int bitset_word_t; /* All bits set in a bitset_word_t. */ #define BITSET_WORD_MAX ULONG_MAX /* Number of bits in a bitset_word_t. */ #define BITSET_WORD_BITS ULONG_WIDTH /* Number of bitset_word_t values in a bitset_t. */ #define BITSET_WORDS ((SBC_MAX + BITSET_WORD_BITS - 1) / BITSET_WORD_BITS) typedef bitset_word_t bitset_t[BITSET_WORDS]; typedef bitset_word_t *re_bitset_ptr_t; typedef const bitset_word_t *re_const_bitset_ptr_t; #define PREV_WORD_CONSTRAINT 0x0001 #define PREV_NOTWORD_CONSTRAINT 0x0002 #define NEXT_WORD_CONSTRAINT 0x0004 #define NEXT_NOTWORD_CONSTRAINT 0x0008 #define PREV_NEWLINE_CONSTRAINT 0x0010 #define NEXT_NEWLINE_CONSTRAINT 0x0020 #define PREV_BEGBUF_CONSTRAINT 0x0040 #define NEXT_ENDBUF_CONSTRAINT 0x0080 #define WORD_DELIM_CONSTRAINT 0x0100 #define NOT_WORD_DELIM_CONSTRAINT 0x0200 typedef enum { INSIDE_WORD = PREV_WORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, WORD_FIRST = PREV_NOTWORD_CONSTRAINT | NEXT_WORD_CONSTRAINT, WORD_LAST = PREV_WORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, INSIDE_NOTWORD = PREV_NOTWORD_CONSTRAINT | NEXT_NOTWORD_CONSTRAINT, LINE_FIRST = PREV_NEWLINE_CONSTRAINT, LINE_LAST = NEXT_NEWLINE_CONSTRAINT, BUF_FIRST = PREV_BEGBUF_CONSTRAINT, BUF_LAST = NEXT_ENDBUF_CONSTRAINT, WORD_DELIM = WORD_DELIM_CONSTRAINT, NOT_WORD_DELIM = NOT_WORD_DELIM_CONSTRAINT } re_context_type; typedef struct { Idx alloc; Idx nelem; Idx *elems; } re_node_set; typedef enum { NON_TYPE = 0, /* Node type, These are used by token, node, tree. */ CHARACTER = 1, END_OF_RE = 2, SIMPLE_BRACKET = 3, OP_BACK_REF = 4, OP_PERIOD = 5, COMPLEX_BRACKET = 6, OP_UTF8_PERIOD = 7, /* We define EPSILON_BIT as a macro so that OP_OPEN_SUBEXP is used when the debugger shows values of this enum type. */ #define EPSILON_BIT 8 OP_OPEN_SUBEXP = EPSILON_BIT | 0, OP_CLOSE_SUBEXP = EPSILON_BIT | 1, OP_ALT = EPSILON_BIT | 2, OP_DUP_ASTERISK = EPSILON_BIT | 3, ANCHOR = EPSILON_BIT | 4, /* Tree type, these are used only by tree. */ CONCAT = 16, SUBEXP = 17, /* Token type, these are used only by token. */ OP_DUP_PLUS = 18, OP_DUP_QUESTION, OP_OPEN_BRACKET, OP_CLOSE_BRACKET, OP_CHARSET_RANGE, OP_OPEN_DUP_NUM, OP_CLOSE_DUP_NUM, OP_NON_MATCH_LIST, OP_OPEN_COLL_ELEM, OP_CLOSE_COLL_ELEM, OP_OPEN_EQUIV_CLASS, OP_CLOSE_EQUIV_CLASS, OP_OPEN_CHAR_CLASS, OP_CLOSE_CHAR_CLASS, OP_WORD, OP_NOTWORD, OP_SPACE, OP_NOTSPACE, BACK_SLASH } re_token_type_t; typedef struct { /* Multibyte characters. */ wchar_t *mbchars; #ifdef _LIBC /* Collating symbols. */ int32_t *coll_syms; #endif #ifdef _LIBC /* Equivalence classes. */ int32_t *equiv_classes; #endif /* Range expressions. */ #ifdef _LIBC uint32_t *range_starts; uint32_t *range_ends; #else wchar_t *range_starts; wchar_t *range_ends; #endif /* Character classes. */ wctype_t *char_classes; /* If this character set is the non-matching list. */ unsigned int non_match : 1; /* # of multibyte characters. */ Idx nmbchars; /* # of collating symbols. */ Idx ncoll_syms; /* # of equivalence classes. */ Idx nequiv_classes; /* # of range expressions. */ Idx nranges; /* # of character classes. */ Idx nchar_classes; } re_charset_t; typedef struct { union { unsigned char c; /* for CHARACTER */ re_bitset_ptr_t sbcset; /* for SIMPLE_BRACKET */ re_charset_t *mbcset; /* for COMPLEX_BRACKET */ Idx idx; /* for BACK_REF */ re_context_type ctx_type; /* for ANCHOR */ } opr; #if (__GNUC__ >= 2 || defined __clang__) && !defined __STRICT_ANSI__ re_token_type_t type : 8; #else re_token_type_t type; #endif unsigned int constraint : 10; /* context constraint */ unsigned int duplicated : 1; unsigned int opt_subexp : 1; unsigned int accept_mb : 1; /* These 2 bits can be moved into the union if needed (e.g. if running out of bits; move opr.c to opr.c.c and move the flags to opr.c.flags). */ unsigned int mb_partial : 1; unsigned int word_char : 1; } re_token_t; #define IS_EPSILON_NODE(type) ((type) & EPSILON_BIT) struct re_string_t { /* Indicate the raw buffer which is the original string passed as an argument of regexec(), re_search(), etc.. */ const unsigned char *raw_mbs; /* Store the multibyte string. In case of "case insensitive mode" like REG_ICASE, upper cases of the string are stored, otherwise MBS points the same address that RAW_MBS points. */ unsigned char *mbs; /* Store the wide character string which is corresponding to MBS. */ wint_t *wcs; Idx *offsets; mbstate_t cur_state; /* Index in RAW_MBS. Each character mbs[i] corresponds to raw_mbs[raw_mbs_idx + i]. */ Idx raw_mbs_idx; /* The length of the valid characters in the buffers. */ Idx valid_len; /* The corresponding number of bytes in raw_mbs array. */ Idx valid_raw_len; /* The length of the buffers MBS and WCS. */ Idx bufs_len; /* The index in MBS, which is updated by re_string_fetch_byte. */ Idx cur_idx; /* length of RAW_MBS array. */ Idx raw_len; /* This is RAW_LEN - RAW_MBS_IDX + VALID_LEN - VALID_RAW_LEN. */ Idx len; /* End of the buffer may be shorter than its length in the cases such as re_match_2, re_search_2. Then, we use STOP for end of the buffer instead of LEN. */ Idx raw_stop; /* This is RAW_STOP - RAW_MBS_IDX adjusted through OFFSETS. */ Idx stop; /* The context of mbs[0]. We store the context independently, since the context of mbs[0] may be different from raw_mbs[0], which is the beginning of the input string. */ unsigned int tip_context; /* The translation passed as a part of an argument of re_compile_pattern. */ RE_TRANSLATE_TYPE trans; /* Copy of re_dfa_t's word_char. */ re_const_bitset_ptr_t word_char; /* true if REG_ICASE. */ unsigned char icase; unsigned char is_utf8; unsigned char map_notascii; unsigned char mbs_allocated; unsigned char offsets_needed; unsigned char newline_anchor; unsigned char word_ops_used; int mb_cur_max; }; typedef struct re_string_t re_string_t; struct re_dfa_t; typedef struct re_dfa_t re_dfa_t; #ifndef _LIBC # define IS_IN(libc) false #endif #define re_string_peek_byte(pstr, offset) \ ((pstr)->mbs[(pstr)->cur_idx + offset]) #define re_string_fetch_byte(pstr) \ ((pstr)->mbs[(pstr)->cur_idx++]) #define re_string_first_byte(pstr, idx) \ ((idx) == (pstr)->valid_len || (pstr)->wcs[idx] != WEOF) #define re_string_is_single_byte_char(pstr, idx) \ ((pstr)->wcs[idx] != WEOF && ((pstr)->valid_len == (idx) + 1 \ || (pstr)->wcs[(idx) + 1] != WEOF)) #define re_string_eoi(pstr) ((pstr)->stop <= (pstr)->cur_idx) #define re_string_cur_idx(pstr) ((pstr)->cur_idx) #define re_string_get_buffer(pstr) ((pstr)->mbs) #define re_string_length(pstr) ((pstr)->len) #define re_string_byte_at(pstr,idx) ((pstr)->mbs[idx]) #define re_string_skip_bytes(pstr,idx) ((pstr)->cur_idx += (idx)) #define re_string_set_index(pstr,idx) ((pstr)->cur_idx = (idx)) #ifdef _LIBC # define MALLOC_0_IS_NONNULL 1 #elif !defined MALLOC_0_IS_NONNULL # define MALLOC_0_IS_NONNULL 0 #endif #ifndef MAX # define MAX(a,b) ((a) < (b) ? (b) : (a)) #endif #ifndef MIN # define MIN(a,b) ((a) < (b) ? (a) : (b)) #endif #define re_malloc(t,n) ((t *) malloc ((n) * sizeof (t))) #define re_realloc(p,t,n) ((t *) realloc (p, (n) * sizeof (t))) #define re_free(p) free (p) struct bin_tree_t { struct bin_tree_t *parent; struct bin_tree_t *left; struct bin_tree_t *right; struct bin_tree_t *first; struct bin_tree_t *next; re_token_t token; /* 'node_idx' is the index in dfa->nodes, if 'type' == 0. Otherwise 'type' indicate the type of this node. */ Idx node_idx; }; typedef struct bin_tree_t bin_tree_t; #define BIN_TREE_STORAGE_SIZE \ ((1024 - sizeof (void *)) / sizeof (bin_tree_t)) struct bin_tree_storage_t { struct bin_tree_storage_t *next; bin_tree_t data[BIN_TREE_STORAGE_SIZE]; }; typedef struct bin_tree_storage_t bin_tree_storage_t; #define CONTEXT_WORD 1 #define CONTEXT_NEWLINE (CONTEXT_WORD << 1) #define CONTEXT_BEGBUF (CONTEXT_NEWLINE << 1) #define CONTEXT_ENDBUF (CONTEXT_BEGBUF << 1) #define IS_WORD_CONTEXT(c) ((c) & CONTEXT_WORD) #define IS_NEWLINE_CONTEXT(c) ((c) & CONTEXT_NEWLINE) #define IS_BEGBUF_CONTEXT(c) ((c) & CONTEXT_BEGBUF) #define IS_ENDBUF_CONTEXT(c) ((c) & CONTEXT_ENDBUF) #define IS_ORDINARY_CONTEXT(c) ((c) == 0) #define IS_WORD_CHAR(ch) (isalnum (ch) || (ch) == '_') #define IS_NEWLINE(ch) ((ch) == NEWLINE_CHAR) #define IS_WIDE_WORD_CHAR(ch) (__iswalnum (ch) || (ch) == L'_') #define IS_WIDE_NEWLINE(ch) ((ch) == WIDE_NEWLINE_CHAR) #define NOT_SATISFY_PREV_CONSTRAINT(constraint,context) \ ((((constraint) & PREV_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ || ((constraint & PREV_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ || ((constraint & PREV_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context))\ || ((constraint & PREV_BEGBUF_CONSTRAINT) && !IS_BEGBUF_CONTEXT (context))) #define NOT_SATISFY_NEXT_CONSTRAINT(constraint,context) \ ((((constraint) & NEXT_WORD_CONSTRAINT) && !IS_WORD_CONTEXT (context)) \ || (((constraint) & NEXT_NOTWORD_CONSTRAINT) && IS_WORD_CONTEXT (context)) \ || (((constraint) & NEXT_NEWLINE_CONSTRAINT) && !IS_NEWLINE_CONTEXT (context)) \ || (((constraint) & NEXT_ENDBUF_CONSTRAINT) && !IS_ENDBUF_CONTEXT (context))) struct re_dfastate_t { re_hashval_t hash; re_node_set nodes; re_node_set non_eps_nodes; re_node_set inveclosure; re_node_set *entrance_nodes; struct re_dfastate_t **trtable, **word_trtable; unsigned int context : 4; unsigned int halt : 1; /* If this state can accept "multi byte". Note that we refer to multibyte characters, and multi character collating elements as "multi byte". */ unsigned int accept_mb : 1; /* If this state has backreference node(s). */ unsigned int has_backref : 1; unsigned int has_constraint : 1; }; typedef struct re_dfastate_t re_dfastate_t; struct re_state_table_entry { Idx num; Idx alloc; re_dfastate_t **array; }; /* Array type used in re_sub_match_last_t and re_sub_match_top_t. */ typedef struct { Idx next_idx; Idx alloc; re_dfastate_t **array; } state_array_t; /* Store information about the node NODE whose type is OP_CLOSE_SUBEXP. */ typedef struct { Idx node; Idx str_idx; /* The position NODE match at. */ state_array_t path; } re_sub_match_last_t; /* Store information about the node NODE whose type is OP_OPEN_SUBEXP. And information about the node, whose type is OP_CLOSE_SUBEXP, corresponding to NODE is stored in LASTS. */ typedef struct { Idx str_idx; Idx node; state_array_t *path; Idx alasts; /* Allocation size of LASTS. */ Idx nlasts; /* The number of LASTS. */ re_sub_match_last_t **lasts; } re_sub_match_top_t; struct re_backref_cache_entry { Idx node; Idx str_idx; Idx subexp_from; Idx subexp_to; bitset_word_t eps_reachable_subexps_map; char more; }; typedef struct { /* The string object corresponding to the input string. */ re_string_t input; const re_dfa_t *const dfa; /* EFLAGS of the argument of regexec. */ int eflags; /* Where the matching ends. */ Idx match_last; Idx last_node; /* The state log used by the matcher. */ re_dfastate_t **state_log; Idx state_log_top; /* Back reference cache. */ Idx nbkref_ents; Idx abkref_ents; struct re_backref_cache_entry *bkref_ents; int max_mb_elem_len; Idx nsub_tops; Idx asub_tops; re_sub_match_top_t **sub_tops; } re_match_context_t; typedef struct { re_dfastate_t **sifted_states; re_dfastate_t **limited_states; Idx last_node; Idx last_str_idx; re_node_set limits; } re_sift_context_t; struct re_fail_stack_ent_t { Idx idx; Idx node; regmatch_t *regs; re_node_set eps_via_nodes; }; struct re_fail_stack_t { Idx num; Idx alloc; struct re_fail_stack_ent_t *stack; }; struct re_dfa_t { re_token_t *nodes; size_t nodes_alloc; size_t nodes_len; Idx *nexts; Idx *org_indices; re_node_set *edests; re_node_set *eclosures; re_node_set *inveclosures; struct re_state_table_entry *state_table; re_dfastate_t *init_state; re_dfastate_t *init_state_word; re_dfastate_t *init_state_nl; re_dfastate_t *init_state_begbuf; bin_tree_t *str_tree; bin_tree_storage_t *str_tree_storage; re_bitset_ptr_t sb_char; int str_tree_storage_idx; /* number of subexpressions 're_nsub' is in regex_t. */ re_hashval_t state_hash_mask; Idx init_node; Idx nbackref; /* The number of backreference in this dfa. */ /* Bitmap expressing which backreference is used. */ bitset_word_t used_bkref_map; bitset_word_t completed_bkref_map; unsigned int has_plural_match : 1; /* If this dfa has "multibyte node", which is a backreference or a node which can accept multibyte character or multi character collating element. */ unsigned int has_mb_node : 1; unsigned int is_utf8 : 1; unsigned int map_notascii : 1; unsigned int word_ops_used : 1; int mb_cur_max; bitset_t word_char; reg_syntax_t syntax; Idx *subexp_map; #ifdef DEBUG char* re_str; #endif lock_define (lock) }; #define re_node_set_init_empty(set) memset (set, '\0', sizeof (re_node_set)) #define re_node_set_remove(set,id) \ (re_node_set_remove_at (set, re_node_set_contains (set, id) - 1)) #define re_node_set_empty(p) ((p)->nelem = 0) #define re_node_set_free(set) re_free ((set)->elems) typedef enum { SB_CHAR, MB_CHAR, EQUIV_CLASS, COLL_SYM, CHAR_CLASS } bracket_elem_type; typedef struct { bracket_elem_type type; union { unsigned char ch; unsigned char *name; wchar_t wch; } opr; } bracket_elem_t; /* Functions for bitset_t operation. */ static inline void bitset_set (bitset_t set, Idx i) { set[i / BITSET_WORD_BITS] |= (bitset_word_t) 1 << i % BITSET_WORD_BITS; } static inline void bitset_clear (bitset_t set, Idx i) { set[i / BITSET_WORD_BITS] &= ~ ((bitset_word_t) 1 << i % BITSET_WORD_BITS); } static inline bool bitset_contain (const bitset_t set, Idx i) { return (set[i / BITSET_WORD_BITS] >> i % BITSET_WORD_BITS) & 1; } static inline void bitset_empty (bitset_t set) { memset (set, '\0', sizeof (bitset_t)); } static inline void bitset_set_all (bitset_t set) { memset (set, -1, sizeof (bitset_word_t) * (SBC_MAX / BITSET_WORD_BITS)); if (SBC_MAX % BITSET_WORD_BITS != 0) set[BITSET_WORDS - 1] = ((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1; } static inline void bitset_copy (bitset_t dest, const bitset_t src) { memcpy (dest, src, sizeof (bitset_t)); } static inline void bitset_not (bitset_t set) { int bitset_i; for (bitset_i = 0; bitset_i < SBC_MAX / BITSET_WORD_BITS; ++bitset_i) set[bitset_i] = ~set[bitset_i]; if (SBC_MAX % BITSET_WORD_BITS != 0) set[BITSET_WORDS - 1] = ((((bitset_word_t) 1 << SBC_MAX % BITSET_WORD_BITS) - 1) & ~set[BITSET_WORDS - 1]); } static inline void bitset_merge (bitset_t dest, const bitset_t src) { int bitset_i; for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) dest[bitset_i] |= src[bitset_i]; } static inline void bitset_mask (bitset_t dest, const bitset_t src) { int bitset_i; for (bitset_i = 0; bitset_i < BITSET_WORDS; ++bitset_i) dest[bitset_i] &= src[bitset_i]; } /* Functions for re_string. */ static int __attribute__ ((pure, unused)) re_string_char_size_at (const re_string_t *pstr, Idx idx) { int byte_idx; if (pstr->mb_cur_max == 1) return 1; for (byte_idx = 1; idx + byte_idx < pstr->valid_len; ++byte_idx) if (pstr->wcs[idx + byte_idx] != WEOF) break; return byte_idx; } static wint_t __attribute__ ((pure, unused)) re_string_wchar_at (const re_string_t *pstr, Idx idx) { if (pstr->mb_cur_max == 1) return (wint_t) pstr->mbs[idx]; return (wint_t) pstr->wcs[idx]; } #ifdef _LIBC # include <locale/weight.h> #endif static int __attribute__ ((pure, unused)) re_string_elem_size_at (const re_string_t *pstr, Idx idx) { #ifdef _LIBC const unsigned char *p, *extra; const int32_t *table, *indirect; uint_fast32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); p = pstr->mbs + idx; findidx (table, indirect, extra, &p, pstr->len - idx); return p - pstr->mbs - idx; } #endif /* _LIBC */ return 1; } #ifdef _LIBC # if __GNUC__ >= 7 # define FALLTHROUGH __attribute__ ((__fallthrough__)) # else # define FALLTHROUGH ((void) 0) # endif #else # include "attribute.h" #endif #endif /* _REGEX_INTERNAL_H */ �����������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/utimens.h��������������������������������������������������������������������������0000644�0000000�0000000�00000003104�14226564451�012516� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set file access and modification times. Copyright 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <time.h> int fdutimens (int, char const *, struct timespec const [2]); int utimens (char const *, struct timespec const [2]); int lutimens (char const *, struct timespec const [2]); #if GNULIB_FDUTIMENSAT # include <fcntl.h> # include <sys/stat.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_UTIMENS_INLINE # define _GL_UTIMENS_INLINE _GL_INLINE #endif int fdutimensat (int fd, int dir, char const *name, struct timespec const [2], int atflag); /* Using this function makes application code slightly more readable. */ _GL_UTIMENS_INLINE int lutimensat (int dir, char const *file, struct timespec const times[2]) { return utimensat (dir, file, times, AT_SYMLINK_NOFOLLOW); } _GL_INLINE_HEADER_END #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/floor.c����������������������������������������������������������������������������0000644�0000000�0000000�00000006522�14226564447�012162� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Round towards negative infinity. Copyright (C) 2007, 2010-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #include <math.h> #include <float.h> #ifdef USE_LONG_DOUBLE # define FUNC floorl # define DOUBLE long double # define MANT_DIG LDBL_MANT_DIG # define L_(literal) literal##L #elif ! defined USE_FLOAT # define FUNC floor # define DOUBLE double # define MANT_DIG DBL_MANT_DIG # define L_(literal) literal #else /* defined USE_FLOAT */ # define FUNC floorf # define DOUBLE float # define MANT_DIG FLT_MANT_DIG # define L_(literal) literal##f #endif /* MSVC with option -fp:strict refuses to compile constant initializers that contain floating-point operations. Pacify this compiler. */ #if defined _MSC_VER && !defined __clang__ # pragma fenv_access (off) #endif /* 2^(MANT_DIG-1). */ static const DOUBLE TWO_MANT_DIG = /* Assume MANT_DIG <= 5 * 31. Use the identity n = floor(n/5) + floor((n+1)/5) + ... + floor((n+4)/5). */ (DOUBLE) (1U << ((MANT_DIG - 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 1) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 2) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 3) / 5)) * (DOUBLE) (1U << ((MANT_DIG - 1 + 4) / 5)); DOUBLE FUNC (DOUBLE x) { /* The use of 'volatile' guarantees that excess precision bits are dropped at each addition step and before the following comparison at the caller's site. It is necessary on x86 systems where double-floats are not IEEE compliant by default, to avoid that the results become platform and compiler option dependent. 'volatile' is a portable alternative to gcc's -ffloat-store option. */ volatile DOUBLE y = x; volatile DOUBLE z = y; if (z > L_(0.0)) { /* For 0 < x < 1, return +0.0 even if the current rounding mode is FE_DOWNWARD. */ if (z < L_(1.0)) z = L_(0.0); /* Avoid rounding errors for values near 2^k, where k >= MANT_DIG-1. */ else if (z < TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z += TWO_MANT_DIG; z -= TWO_MANT_DIG; /* Enforce rounding down. */ if (z > y) z -= L_(1.0); } } else if (z < L_(0.0)) { /* Avoid rounding errors for values near -2^k, where k >= MANT_DIG-1. */ if (z > - TWO_MANT_DIG) { /* Round to the next integer (nearest or up or down, doesn't matter). */ z -= TWO_MANT_DIG; z += TWO_MANT_DIG; /* Enforce rounding down. */ if (z > y) z -= L_(1.0); } } return z; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getopt.c���������������������������������������������������������������������������0000644�0000000�0000000�00000057111�14226564450�012335� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Getopt for GNU. Copyright (C) 1987-2022 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif #include "getopt.h" #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #ifdef _LIBC /* When used as part of glibc, error printing must be done differently for standards compliance. getopt is not a cancellation point, so it must not call functions that are, and it is specified by an older standard than stdio locking, so it must not refer to functions in the "user namespace" related to stdio locking. Finally, it must use glibc's internal message translation so that the messages are looked up in the proper text domain. */ # include <libintl.h> # define fprintf __fxprintf_nocancel # define flockfile(fp) _IO_flockfile (fp) # define funlockfile(fp) _IO_funlockfile (fp) #else # include "gettext.h" # define _(msgid) gettext (msgid) /* When used standalone, flockfile and funlockfile might not be available. */ # if (!defined _POSIX_THREAD_SAFE_FUNCTIONS \ || (defined _WIN32 && ! defined __CYGWIN__)) # define flockfile(fp) /* nop */ # define funlockfile(fp) /* nop */ # endif /* When used standalone, do not attempt to use alloca. */ # define __libc_use_alloca(size) 0 # undef alloca # define alloca(size) (abort (), (void *)0) #endif /* This implementation of 'getopt' has three modes for handling options interspersed with non-option arguments. It can stop scanning for options at the first non-option argument encountered, as POSIX specifies. It can continue scanning for options after the first non-option argument, but permute 'argv' as it goes so that, after 'getopt' is done, all the options precede all the non-option arguments and 'optind' points to the first non-option argument. Or, it can report non-option arguments as if they were arguments to the option character '\x01'. The default behavior of 'getopt_long' is to permute the argument list. When this implementation is used standalone, the default behavior of 'getopt' is to stop at the first non-option argument, but when it is used as part of GNU libc it also permutes the argument list. In both cases, setting the environment variable POSIXLY_CORRECT to any value disables permutation. If the first character of the OPTSTRING argument to 'getopt' or 'getopt_long' is '+', both functions will stop at the first non-option argument. If it is '-', both functions will report non-option arguments as arguments to the option character '\x01'. */ #include "getopt_int.h" /* For communication from 'getopt' to the caller. When 'getopt' finds an option that takes an argument, the argument value is returned here. Also, when 'ordering' is RETURN_IN_ORDER, each non-option ARGV-element is returned here. */ char *optarg; /* Index in ARGV of the next element to be scanned. This is used for communication to and from the caller and for communication between successive calls to 'getopt'. On entry to 'getopt', zero means this is the first call; initialize. When 'getopt' returns -1, this is the index of the first of the non-option elements that the caller should itself scan. Otherwise, 'optind' communicates from one call to the next how much of ARGV has been scanned so far. */ /* 1003.2 says this must be 1 before any call. */ int optind = 1; /* Callers store zero here to inhibit the error message for unrecognized options. */ int opterr = 1; /* Set to an option character which was unrecognized. This must be initialized on some systems to avoid linking in the system's own getopt implementation. */ int optopt = '?'; /* Keep a global copy of all internal members of getopt_data. */ static struct _getopt_data getopt_data; /* Exchange two adjacent subsequences of ARGV. One subsequence is elements [first_nonopt,last_nonopt) which contains all the non-options that have been skipped so far. The other is elements [last_nonopt,optind), which contains all the options processed since those non-options were skipped. 'first_nonopt' and 'last_nonopt' are relocated so that they describe the new indices of the non-options in ARGV after they are moved. */ static void exchange (char **argv, struct _getopt_data *d) { int bottom = d->__first_nonopt; int middle = d->__last_nonopt; int top = d->optind; char *tem; /* Exchange the shorter segment with the far end of the longer segment. That puts the shorter segment into the right place. It leaves the longer segment in the right place overall, but it consists of two parts that need to be swapped next. */ while (top > middle && middle > bottom) { if (top - middle > middle - bottom) { /* Bottom segment is the short one. */ int len = middle - bottom; int i; /* Swap it with the top part of the top segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[top - (middle - bottom) + i]; argv[top - (middle - bottom) + i] = tem; } /* Exclude the moved bottom segment from further swapping. */ top -= len; } else { /* Top segment is the short one. */ int len = top - middle; int i; /* Swap it with the bottom part of the bottom segment. */ for (i = 0; i < len; i++) { tem = argv[bottom + i]; argv[bottom + i] = argv[middle + i]; argv[middle + i] = tem; } /* Exclude the moved top segment from further swapping. */ bottom += len; } } /* Update records for the slots the non-options now occupy. */ d->__first_nonopt += (d->optind - d->__last_nonopt); d->__last_nonopt = d->optind; } /* Process the argument starting with d->__nextchar as a long option. d->optind should *not* have been advanced over this argument. If the value returned is -1, it was not actually a long option, the state is unchanged, and the argument should be processed as a set of short options (this can only happen when long_only is true). Otherwise, the option (and its argument, if any) have been consumed and the return value is the value to return from _getopt_internal_r. */ static int process_long_option (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int print_errors, const char *prefix) { char *nameend; size_t namelen; const struct option *p; const struct option *pfound = NULL; int n_options; int option_index; for (nameend = d->__nextchar; *nameend && *nameend != '='; nameend++) /* Do nothing. */ ; namelen = nameend - d->__nextchar; /* First look for an exact match, counting the options as a side effect. */ for (p = longopts, n_options = 0; p->name; p++, n_options++) if (!strncmp (p->name, d->__nextchar, namelen) && namelen == strlen (p->name)) { /* Exact match found. */ pfound = p; option_index = n_options; break; } if (pfound == NULL) { /* Didn't find an exact match, so look for abbreviations. */ unsigned char *ambig_set = NULL; int ambig_malloced = 0; int ambig_fallback = 0; int indfound = -1; for (p = longopts, option_index = 0; p->name; p++, option_index++) if (!strncmp (p->name, d->__nextchar, namelen)) { if (pfound == NULL) { /* First nonexact match found. */ pfound = p; indfound = option_index; } else if (long_only || pfound->has_arg != p->has_arg || pfound->flag != p->flag || pfound->val != p->val) { /* Second or later nonexact match found. */ if (!ambig_fallback) { if (!print_errors) /* Don't waste effort tracking the ambig set if we're not going to print it anyway. */ ambig_fallback = 1; else if (!ambig_set) { if (__libc_use_alloca (n_options)) ambig_set = alloca (n_options); else if ((ambig_set = malloc (n_options)) == NULL) /* Fall back to simpler error message. */ ambig_fallback = 1; else ambig_malloced = 1; if (ambig_set) { memset (ambig_set, 0, n_options); ambig_set[indfound] = 1; } } if (ambig_set) ambig_set[option_index] = 1; } } } if (ambig_set || ambig_fallback) { if (print_errors) { if (ambig_fallback) fprintf (stderr, _("%s: option '%s%s' is ambiguous\n"), argv[0], prefix, d->__nextchar); else { flockfile (stderr); fprintf (stderr, _("%s: option '%s%s' is ambiguous; possibilities:"), argv[0], prefix, d->__nextchar); for (option_index = 0; option_index < n_options; option_index++) if (ambig_set[option_index]) fprintf (stderr, " '%s%s'", prefix, longopts[option_index].name); /* This must use 'fprintf' even though it's only printing a single character, so that it goes through __fxprintf_nocancel when compiled as part of glibc. */ fprintf (stderr, "\n"); funlockfile (stderr); } } if (ambig_malloced) free (ambig_set); d->__nextchar += strlen (d->__nextchar); d->optind++; d->optopt = 0; return '?'; } option_index = indfound; } if (pfound == NULL) { /* Can't find it as a long option. If this is not getopt_long_only, or the option starts with '--' or is not a valid short option, then it's an error. */ if (!long_only || argv[d->optind][1] == '-' || strchr (optstring, *d->__nextchar) == NULL) { if (print_errors) fprintf (stderr, _("%s: unrecognized option '%s%s'\n"), argv[0], prefix, d->__nextchar); d->__nextchar = NULL; d->optind++; d->optopt = 0; return '?'; } /* Otherwise interpret it as a short option. */ return -1; } /* We have found a matching long option. Consume it. */ d->optind++; d->__nextchar = NULL; if (*nameend) { /* Don't test has_arg with >, because some C compilers don't allow it to be used on enums. */ if (pfound->has_arg) d->optarg = nameend + 1; else { if (print_errors) fprintf (stderr, _("%s: option '%s%s' doesn't allow an argument\n"), argv[0], prefix, pfound->name); d->optopt = pfound->val; return '?'; } } else if (pfound->has_arg == 1) { if (d->optind < argc) d->optarg = argv[d->optind++]; else { if (print_errors) fprintf (stderr, _("%s: option '%s%s' requires an argument\n"), argv[0], prefix, pfound->name); d->optopt = pfound->val; return optstring[0] == ':' ? ':' : '?'; } } if (longind != NULL) *longind = option_index; if (pfound->flag) { *(pfound->flag) = pfound->val; return 0; } return pfound->val; } /* Initialize internal data upon the first call to getopt. */ static const char * _getopt_initialize (_GL_UNUSED int argc, _GL_UNUSED char **argv, const char *optstring, struct _getopt_data *d, int posixly_correct) { /* Start processing options with ARGV-element 1 (since ARGV-element 0 is the program name); the sequence of previously skipped non-option ARGV-elements is empty. */ if (d->optind == 0) d->optind = 1; d->__first_nonopt = d->__last_nonopt = d->optind; d->__nextchar = NULL; /* Determine how to handle the ordering of options and nonoptions. */ if (optstring[0] == '-') { d->__ordering = RETURN_IN_ORDER; ++optstring; } else if (optstring[0] == '+') { d->__ordering = REQUIRE_ORDER; ++optstring; } else if (posixly_correct || !!getenv ("POSIXLY_CORRECT")) d->__ordering = REQUIRE_ORDER; else d->__ordering = PERMUTE; d->__initialized = 1; return optstring; } /* Scan elements of ARGV (whose length is ARGC) for option characters given in OPTSTRING. If an element of ARGV starts with '-', and is not exactly "-" or "--", then it is an option element. The characters of this element (aside from the initial '-') are option characters. If 'getopt' is called repeatedly, it returns successively each of the option characters from each of the option elements. If 'getopt' finds another option character, it returns that character, updating 'optind' and 'nextchar' so that the next call to 'getopt' can resume the scan with the following option character or ARGV-element. If there are no more option characters, 'getopt' returns -1. Then 'optind' is the index in ARGV of the first ARGV-element that is not an option. (The ARGV-elements have been permuted so that those that are not options now come last.) OPTSTRING is a string containing the legitimate option characters. If an option character is seen that is not listed in OPTSTRING, return '?' after printing an error message. If you set 'opterr' to zero, the error message is suppressed but we still return '?'. If a char in OPTSTRING is followed by a colon, that means it wants an arg, so the following text in the same ARGV-element, or the text of the following ARGV-element, is returned in 'optarg'. Two colons mean an option that wants an optional arg; if there is text in the current ARGV-element, it is returned in 'optarg', otherwise 'optarg' is set to zero. If OPTSTRING starts with '-' or '+', it requests different methods of handling the non-option ARGV-elements. See the comments about RETURN_IN_ORDER and REQUIRE_ORDER, above. Long-named options begin with '--' instead of '-'. Their names may be abbreviated as long as the abbreviation is unique or is an exact match for some defined option. If they have an argument, it follows the option name in the same ARGV-element, separated from the option name by a '=', or else the in next ARGV-element. When 'getopt' finds a long-named option, it returns 0 if that option's 'flag' field is nonzero, the value of the option's 'val' field if the 'flag' field is zero. The elements of ARGV aren't really const, because we permute them. But we pretend they're const in the prototype to be compatible with other systems. LONGOPTS is a vector of 'struct option' terminated by an element containing a name which is zero. LONGIND returns the index in LONGOPT of the long-named option found. It is only valid when a long-named option has been found by the most recent call. If LONG_ONLY is nonzero, '-' as well as '--' can introduce long-named options. */ int _getopt_internal_r (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, struct _getopt_data *d, int posixly_correct) { int print_errors = d->opterr; if (argc < 1) return -1; d->optarg = NULL; if (d->optind == 0 || !d->__initialized) optstring = _getopt_initialize (argc, argv, optstring, d, posixly_correct); else if (optstring[0] == '-' || optstring[0] == '+') optstring++; if (optstring[0] == ':') print_errors = 0; /* Test whether ARGV[optind] points to a non-option argument. */ #define NONOPTION_P (argv[d->optind][0] != '-' || argv[d->optind][1] == '\0') if (d->__nextchar == NULL || *d->__nextchar == '\0') { /* Advance to the next ARGV-element. */ /* Give FIRST_NONOPT & LAST_NONOPT rational values if OPTIND has been moved back by the user (who may also have changed the arguments). */ if (d->__last_nonopt > d->optind) d->__last_nonopt = d->optind; if (d->__first_nonopt > d->optind) d->__first_nonopt = d->optind; if (d->__ordering == PERMUTE) { /* If we have just processed some options following some non-options, exchange them so that the options come first. */ if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange (argv, d); else if (d->__last_nonopt != d->optind) d->__first_nonopt = d->optind; /* Skip any additional non-options and extend the range of non-options previously skipped. */ while (d->optind < argc && NONOPTION_P) d->optind++; d->__last_nonopt = d->optind; } /* The special ARGV-element '--' means premature end of options. Skip it like a null option, then exchange with previous non-options as if it were an option, then skip everything else like a non-option. */ if (d->optind != argc && !strcmp (argv[d->optind], "--")) { d->optind++; if (d->__first_nonopt != d->__last_nonopt && d->__last_nonopt != d->optind) exchange (argv, d); else if (d->__first_nonopt == d->__last_nonopt) d->__first_nonopt = d->optind; d->__last_nonopt = argc; d->optind = argc; } /* If we have done all the ARGV-elements, stop the scan and back over any non-options that we skipped and permuted. */ if (d->optind == argc) { /* Set the next-arg-index to point at the non-options that we previously skipped, so the caller will digest them. */ if (d->__first_nonopt != d->__last_nonopt) d->optind = d->__first_nonopt; return -1; } /* If we have come to a non-option and did not permute it, either stop the scan or describe it to the caller and pass it by. */ if (NONOPTION_P) { if (d->__ordering == REQUIRE_ORDER) return -1; d->optarg = argv[d->optind++]; return 1; } /* We have found another option-ARGV-element. Check whether it might be a long option. */ if (longopts) { if (argv[d->optind][1] == '-') { /* "--foo" is always a long option. The special option "--" was handled above. */ d->__nextchar = argv[d->optind] + 2; return process_long_option (argc, argv, optstring, longopts, longind, long_only, d, print_errors, "--"); } /* If long_only and the ARGV-element has the form "-f", where f is a valid short option, don't consider it an abbreviated form of a long option that starts with f. Otherwise there would be no way to give the -f short option. On the other hand, if there's a long option "fubar" and the ARGV-element is "-fu", do consider that an abbreviation of the long option, just like "--fu", and not "-f" with arg "u". This distinction seems to be the most useful approach. */ if (long_only && (argv[d->optind][2] || !strchr (optstring, argv[d->optind][1]))) { int code; d->__nextchar = argv[d->optind] + 1; code = process_long_option (argc, argv, optstring, longopts, longind, long_only, d, print_errors, "-"); if (code != -1) return code; } } /* It is not a long option. Skip the initial punctuation. */ d->__nextchar = argv[d->optind] + 1; } /* Look at and handle the next short option-character. */ { char c = *d->__nextchar++; const char *temp = strchr (optstring, c); /* Increment 'optind' when we start to process its last character. */ if (*d->__nextchar == '\0') ++d->optind; if (temp == NULL || c == ':' || c == ';') { if (print_errors) fprintf (stderr, _("%s: invalid option -- '%c'\n"), argv[0], c); d->optopt = c; return '?'; } /* Convenience. Treat POSIX -W foo same as long option --foo */ if (temp[0] == 'W' && temp[1] == ';' && longopts != NULL) { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') d->optarg = d->__nextchar; else if (d->optind == argc) { if (print_errors) fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; return c; } else d->optarg = argv[d->optind]; d->__nextchar = d->optarg; d->optarg = NULL; return process_long_option (argc, argv, optstring, longopts, longind, 0 /* long_only */, d, print_errors, "-W "); } if (temp[1] == ':') { if (temp[2] == ':') { /* This is an option that accepts an argument optionally. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; d->optind++; } else d->optarg = NULL; d->__nextchar = NULL; } else { /* This is an option that requires an argument. */ if (*d->__nextchar != '\0') { d->optarg = d->__nextchar; /* If we end this ARGV-element by taking the rest as an arg, we must advance to the next element now. */ d->optind++; } else if (d->optind == argc) { if (print_errors) fprintf (stderr, _("%s: option requires an argument -- '%c'\n"), argv[0], c); d->optopt = c; if (optstring[0] == ':') c = ':'; else c = '?'; } else /* We already incremented 'optind' once; increment it again when taking next ARGV-elt as argument. */ d->optarg = argv[d->optind++]; d->__nextchar = NULL; } } return c; } } int _getopt_internal (int argc, char **argv, const char *optstring, const struct option *longopts, int *longind, int long_only, int posixly_correct) { int result; getopt_data.optind = optind; getopt_data.opterr = opterr; result = _getopt_internal_r (argc, argv, optstring, longopts, longind, long_only, &getopt_data, posixly_correct); optind = getopt_data.optind; optarg = getopt_data.optarg; optopt = getopt_data.optopt; return result; } /* glibc gets a LSB-compliant getopt and a POSIX-complaint __posix_getopt. Standalone applications just get a POSIX-compliant getopt. POSIX and LSB both require these functions to take 'char *const *argv' even though this is incorrect (because of the permutation). */ #define GETOPT_ENTRY(NAME, POSIXLY_CORRECT) \ int \ NAME (int argc, char *const *argv, const char *optstring) \ { \ return _getopt_internal (argc, (char **)argv, optstring, \ 0, 0, 0, POSIXLY_CORRECT); \ } #ifdef _LIBC GETOPT_ENTRY(getopt, 0) GETOPT_ENTRY(__posix_getopt, 1) #else GETOPT_ENTRY(getopt, 1) #endif #ifdef TEST /* Compile with -DTEST to make an executable for use in testing the above definition of 'getopt'. */ int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; c = getopt (argc, argv, "abc:d:0123456789"); if (c == -1) break; switch (c) { case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/read-file.c������������������������������������������������������������������������0000644�0000000�0000000�00000014077�14226564450�012667� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* read-file.c -- read file contents into a string Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. Written by Simon Josefsson and Bruno Haible. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "read-file.h" /* Get fstat. */ #include <sys/stat.h> /* Get ftello. */ #include <stdio.h> /* Get PTRDIFF_MAX. */ #include <stdint.h> /* Get malloc, realloc, free. */ #include <stdlib.h> /* Get explicit_bzero, memcpy. */ #include <string.h> /* Get errno. */ #include <errno.h> /* Read a STREAM and return a newly allocated string with the content, and set *LENGTH to the length of the string. The string is zero-terminated, but the terminating zero byte is not counted in *LENGTH. On errors, *LENGTH is undefined, errno preserves the values set by system functions (if any), and NULL is returned. If the RF_SENSITIVE flag is set in FLAGS: - You should control the buffering of STREAM using 'setvbuf'. Either clear the buffer of STREAM after closing it, or disable buffering of STREAM before calling this function. - The memory buffer internally allocated will be cleared upon failure. */ char * fread_file (FILE *stream, int flags, size_t *length) { char *buf = NULL; size_t alloc = BUFSIZ; /* For a regular file, allocate a buffer that has exactly the right size. This avoids the need to do dynamic reallocations later. */ { struct stat st; if (fstat (fileno (stream), &st) >= 0 && S_ISREG (st.st_mode)) { off_t pos = ftello (stream); if (pos >= 0 && pos < st.st_size) { off_t alloc_off = st.st_size - pos; /* '1' below, accounts for the trailing NUL. */ if (PTRDIFF_MAX - 1 < alloc_off) { errno = ENOMEM; return NULL; } alloc = alloc_off + 1; } } } if (!(buf = malloc (alloc))) return NULL; /* errno is ENOMEM. */ { size_t size = 0; /* number of bytes read so far */ int save_errno; for (;;) { /* This reads 1 more than the size of a regular file so that we get eof immediately. */ size_t requested = alloc - size; size_t count = fread (buf + size, 1, requested, stream); size += count; if (count != requested) { save_errno = errno; if (ferror (stream)) break; /* Shrink the allocated memory if possible. */ if (size < alloc - 1) { if (flags & RF_SENSITIVE) { char *smaller_buf = malloc (size + 1); if (smaller_buf == NULL) explicit_bzero (buf + size, alloc - size); else { memcpy (smaller_buf, buf, size); explicit_bzero (buf, alloc); free (buf); buf = smaller_buf; } } else { char *smaller_buf = realloc (buf, size + 1); if (smaller_buf != NULL) buf = smaller_buf; } } buf[size] = '\0'; *length = size; return buf; } { char *new_buf; size_t save_alloc = alloc; if (alloc == PTRDIFF_MAX) { save_errno = ENOMEM; break; } if (alloc < PTRDIFF_MAX - alloc / 2) alloc = alloc + alloc / 2; else alloc = PTRDIFF_MAX; if (flags & RF_SENSITIVE) { new_buf = malloc (alloc); if (!new_buf) { /* BUF should be cleared below after the loop. */ save_errno = errno; break; } memcpy (new_buf, buf, save_alloc); explicit_bzero (buf, save_alloc); free (buf); } else if (!(new_buf = realloc (buf, alloc))) { save_errno = errno; break; } buf = new_buf; } } if (flags & RF_SENSITIVE) explicit_bzero (buf, alloc); free (buf); errno = save_errno; return NULL; } } /* Open and read the contents of FILENAME, and return a newly allocated string with the content, and set *LENGTH to the length of the string. The string is zero-terminated, but the terminating zero byte is not counted in *LENGTH. On errors, *LENGTH is undefined, errno preserves the values set by system functions (if any), and NULL is returned. If the RF_BINARY flag is set in FLAGS, the file is opened in binary mode. If the RF_SENSITIVE flag is set in FLAGS, the memory buffer internally allocated will be cleared upon failure. */ char * read_file (const char *filename, int flags, size_t *length) { const char *mode = (flags & RF_BINARY) ? "rbe" : "re"; FILE *stream = fopen (filename, mode); char *out; if (!stream) return NULL; if (flags & RF_SENSITIVE) setvbuf (stream, NULL, _IONBF, 0); out = fread_file (stream, flags, length); if (fclose (stream) != 0) { if (out) { if (flags & RF_SENSITIVE) explicit_bzero (out, *length); free (out); } return NULL; } return out; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/open.c�����������������������������������������������������������������������������0000644�0000000�0000000�00000015377�14226564450�012004� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Open a descriptor to a file. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ /* If the user's config.h happens to include <fcntl.h>, let it include only the system's <fcntl.h> here, so that orig_open doesn't recurse to rpl_open. */ #define __need_system_fcntl_h #include <config.h> /* Get the original definition of open. It might be defined as a macro. */ #include <fcntl.h> #include <sys/types.h> #undef __need_system_fcntl_h static int orig_open (const char *filename, int flags, mode_t mode) { #if defined _WIN32 && !defined __CYGWIN__ return _open (filename, flags, mode); #else return open (filename, flags, mode); #endif } /* Specification. */ /* Write "fcntl.h" here, not <fcntl.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <fcntl.h> above. */ #include "fcntl.h" #include "cloexec.h" #include <errno.h> #include <stdarg.h> #include <string.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #ifndef REPLACE_OPEN_DIRECTORY # define REPLACE_OPEN_DIRECTORY 0 #endif int open (const char *filename, int flags, ...) { /* 0 = unknown, 1 = yes, -1 = no. */ #if GNULIB_defined_O_CLOEXEC int have_cloexec = -1; #else static int have_cloexec; #endif mode_t mode; int fd; mode = 0; if (flags & O_CREAT) { va_list arg; va_start (arg, flags); /* We have to use PROMOTED_MODE_T instead of mode_t, otherwise GCC 4 creates crashing code when 'mode_t' is smaller than 'int'. */ mode = va_arg (arg, PROMOTED_MODE_T); va_end (arg); } #if GNULIB_defined_O_NONBLOCK /* The only known platform that lacks O_NONBLOCK is mingw, but it also lacks named pipes and Unix sockets, which are the only two file types that require non-blocking handling in open(). Therefore, it is safe to ignore O_NONBLOCK here. It is handy that mingw also lacks openat(), so that is also covered here. */ flags &= ~O_NONBLOCK; #endif #if defined _WIN32 && ! defined __CYGWIN__ if (strcmp (filename, "/dev/null") == 0) filename = "NUL"; #endif #if OPEN_TRAILING_SLASH_BUG /* Fail if one of O_CREAT, O_WRONLY, O_RDWR is specified and the filename ends in a slash, as POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file already exists as a directory, then - if O_CREAT is specified, open() must fail because of the semantics of O_CREAT, - if O_WRONLY or O_RDWR is specified, open() must fail because POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/open.html> says that it fails with errno = EISDIR in this case. If the named file does not exist or does not name a directory, then - if O_CREAT is specified, open() must fail since open() cannot create directories, - if O_WRONLY or O_RDWR is specified, open() must fail because the file does not contain a '.' directory. */ if ((flags & O_CREAT) || (flags & O_ACCMODE) == O_RDWR || (flags & O_ACCMODE) == O_WRONLY) { size_t len = strlen (filename); if (len > 0 && filename[len - 1] == '/') { errno = EISDIR; return -1; } } #endif fd = orig_open (filename, flags & ~(have_cloexec < 0 ? O_CLOEXEC : 0), mode); if (flags & O_CLOEXEC) { if (! have_cloexec) { if (0 <= fd) have_cloexec = 1; else if (errno == EINVAL) { fd = orig_open (filename, flags & ~O_CLOEXEC, mode); have_cloexec = -1; } } if (have_cloexec < 0 && 0 <= fd) set_cloexec_flag (fd, true); } #if REPLACE_FCHDIR /* Implementing fchdir and fdopendir requires the ability to open a directory file descriptor. If open doesn't support that (as on mingw), we use a dummy file that behaves the same as directories on Linux (ie. always reports EOF on attempts to read()), and override fstat() in fchdir.c to hide the fact that we have a dummy. */ if (REPLACE_OPEN_DIRECTORY && fd < 0 && errno == EACCES && ((flags & O_ACCMODE) == O_RDONLY || (O_SEARCH != O_RDONLY && (flags & O_ACCMODE) == O_SEARCH))) { struct stat statbuf; if (stat (filename, &statbuf) == 0 && S_ISDIR (statbuf.st_mode)) { /* Maximum recursion depth of 1. */ fd = open ("/dev/null", flags, mode); if (0 <= fd) fd = _gl_register_fd (fd, filename); } else errno = EACCES; } #endif #if OPEN_TRAILING_SLASH_BUG /* If the filename ends in a slash and fd does not refer to a directory, then fail. Rationale: POSIX says such a filename must name a directory <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap04.html#tag_04_13>: "A pathname that contains at least one non-<slash> character and that ends with one or more trailing <slash> characters shall not be resolved successfully unless the last pathname component before the trailing <slash> characters names an existing directory" If the named file without the slash is not a directory, open() must fail with ENOTDIR. */ if (fd >= 0) { /* We know len is positive, since open did not fail with ENOENT. */ size_t len = strlen (filename); if (filename[len - 1] == '/') { struct stat statbuf; if (fstat (fd, &statbuf) >= 0 && !S_ISDIR (statbuf.st_mode)) { close (fd); errno = ENOTDIR; return -1; } } } #endif #if REPLACE_FCHDIR if (!REPLACE_OPEN_DIRECTORY && 0 <= fd) fd = _gl_register_fd (fd, filename); #endif return fd; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/openat.h���������������������������������������������������������������������������0000644�0000000�0000000�00000006034�14226564447�012332� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a replacement openat function Copyright (C) 2004-2006, 2008-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #ifndef _GL_HEADER_OPENAT #define _GL_HEADER_OPENAT #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #include <stdbool.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #if !HAVE_OPENAT int openat_permissive (int fd, char const *file, int flags, mode_t mode, int *cwd_errno); bool openat_needs_fchdir (void); #else # define openat_permissive(Fd, File, Flags, Mode, Cwd_errno) \ openat (Fd, File, Flags, Mode) # define openat_needs_fchdir() false #endif _Noreturn void openat_restore_fail (int); _Noreturn void openat_save_fail (int); /* Using these function names makes application code slightly more readable than it would be with fchownat (..., 0) or fchownat (..., AT_SYMLINK_NOFOLLOW). */ #if GNULIB_CHOWNAT # ifndef CHOWNAT_INLINE # define CHOWNAT_INLINE _GL_INLINE # endif CHOWNAT_INLINE int chownat (int fd, char const *file, uid_t owner, gid_t group) { return fchownat (fd, file, owner, group, 0); } CHOWNAT_INLINE int lchownat (int fd, char const *file, uid_t owner, gid_t group) { return fchownat (fd, file, owner, group, AT_SYMLINK_NOFOLLOW); } #endif #if GNULIB_CHMODAT # ifndef CHMODAT_INLINE # define CHMODAT_INLINE _GL_INLINE # endif CHMODAT_INLINE int chmodat (int fd, char const *file, mode_t mode) { return fchmodat (fd, file, mode, 0); } CHMODAT_INLINE int lchmodat (int fd, char const *file, mode_t mode) { return fchmodat (fd, file, mode, AT_SYMLINK_NOFOLLOW); } #endif #if GNULIB_STATAT # ifndef STATAT_INLINE # define STATAT_INLINE _GL_INLINE # endif _GL_ATTRIBUTE_DEPRECATED STATAT_INLINE int statat (int fd, char const *name, struct stat *st) { return fstatat (fd, name, st, 0); } _GL_ATTRIBUTE_DEPRECATED STATAT_INLINE int lstatat (int fd, char const *name, struct stat *st) { return fstatat (fd, name, st, AT_SYMLINK_NOFOLLOW); } #endif /* For now, there are no wrappers named laccessat or leuidaccessat, since gnulib doesn't support faccessat(,AT_SYMLINK_NOFOLLOW) and since access rights on symlinks are of limited utility. Likewise, wrappers are not provided for accessat or euidaccessat, so as to avoid dragging in -lgen on some platforms. */ _GL_INLINE_HEADER_END #endif /* _GL_HEADER_OPENAT */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/dirent.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000025222�14226564446�012735� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <dirent.h>. Copyright (C) 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_DIRENT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_DIRENT_H@ # @INCLUDE_NEXT@ @NEXT_DIRENT_H@ #endif #ifndef _@GUARD_PREFIX@_DIRENT_H #define _@GUARD_PREFIX@_DIRENT_H /* Get ino_t. Needed on some systems, including glibc 2.8. */ #include <sys/types.h> #if !@HAVE_DIRENT_H@ /* Define types DIR and 'struct dirent'. */ # if !GNULIB_defined_struct_dirent struct dirent { char d_type; char d_name[1]; }; /* Possible values for 'd_type'. */ # define DT_UNKNOWN 0 # define DT_FIFO 1 /* FIFO */ # define DT_CHR 2 /* character device */ # define DT_DIR 4 /* directory */ # define DT_BLK 6 /* block device */ # define DT_REG 8 /* regular file */ # define DT_LNK 10 /* symbolic link */ # define DT_SOCK 12 /* socket */ # define DT_WHT 14 /* whiteout */ typedef struct gl_directory DIR; # define GNULIB_defined_struct_dirent 1 # endif #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Declare overridden functions. */ #if @GNULIB_CLOSEDIR@ # if @REPLACE_CLOSEDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef closedir # define closedir rpl_closedir # define GNULIB_defined_closedir 1 # endif _GL_FUNCDECL_RPL (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (closedir, int, (DIR *dirp)); # else # if !@HAVE_CLOSEDIR@ _GL_FUNCDECL_SYS (closedir, int, (DIR *dirp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (closedir, int, (DIR *dirp)); # endif _GL_CXXALIASWARN (closedir); #elif defined GNULIB_POSIXCHECK # undef closedir # if HAVE_RAW_DECL_CLOSEDIR _GL_WARN_ON_USE (closedir, "closedir is not portable - " "use gnulib module closedir for portability"); # endif #endif #if @GNULIB_OPENDIR@ # if @REPLACE_OPENDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef opendir # define opendir rpl_opendir # define GNULIB_defined_opendir 1 # endif _GL_FUNCDECL_RPL (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); _GL_CXXALIAS_RPL (opendir, DIR *, (const char *dir_name)); # else # if !@HAVE_OPENDIR@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); # endif _GL_CXXALIAS_SYS (opendir, DIR *, (const char *dir_name)); # endif _GL_CXXALIASWARN (opendir); #else # if @GNULIB_CLOSEDIR@ && __GNUC__ >= 11 && !defined opendir /* For -Wmismatched-dealloc: Associate opendir with closedir or rpl_closedir. */ _GL_FUNCDECL_SYS (opendir, DIR *, (const char *dir_name) _GL_ARG_NONNULL ((1)) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); # endif # if defined GNULIB_POSIXCHECK # undef opendir # if HAVE_RAW_DECL_OPENDIR _GL_WARN_ON_USE (opendir, "opendir is not portable - " "use gnulib module opendir for portability"); # endif # endif #endif #if @GNULIB_READDIR@ # if !@HAVE_READDIR@ _GL_FUNCDECL_SYS (readdir, struct dirent *, (DIR *dirp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (readdir, struct dirent *, (DIR *dirp)); _GL_CXXALIASWARN (readdir); #elif defined GNULIB_POSIXCHECK # undef readdir # if HAVE_RAW_DECL_READDIR _GL_WARN_ON_USE (readdir, "readdir is not portable - " "use gnulib module readdir for portability"); # endif #endif #if @GNULIB_REWINDDIR@ # if !@HAVE_REWINDDIR@ _GL_FUNCDECL_SYS (rewinddir, void, (DIR *dirp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (rewinddir, void, (DIR *dirp)); _GL_CXXALIASWARN (rewinddir); #elif defined GNULIB_POSIXCHECK # undef rewinddir # if HAVE_RAW_DECL_REWINDDIR _GL_WARN_ON_USE (rewinddir, "rewinddir is not portable - " "use gnulib module rewinddir for portability"); # endif #endif #if @GNULIB_DIRFD@ /* Return the file descriptor associated with the given directory stream, or -1 if none exists. */ # if @REPLACE_DIRFD@ /* On kLIBC, dirfd() is a macro that does not work. Undefine it. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) || defined dirfd # undef dirfd # define dirfd rpl_dirfd # endif _GL_FUNCDECL_RPL (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (dirfd, int, (DIR *)); # ifdef __KLIBC__ /* Gnulib internal hooks needed to maintain the dirfd metadata. */ _GL_EXTERN_C int _gl_register_dirp_fd (int fd, DIR *dirp) _GL_ARG_NONNULL ((2)); _GL_EXTERN_C void _gl_unregister_dirp_fd (int fd); # endif # else # if defined __cplusplus && defined GNULIB_NAMESPACE && defined dirfd /* dirfd is defined as a macro and not as a function. Turn it into a function and get rid of the macro. */ static inline int (dirfd) (DIR *dp) { return dirfd (dp); } # undef dirfd # endif # if !(@HAVE_DECL_DIRFD@ || defined dirfd) _GL_FUNCDECL_SYS (dirfd, int, (DIR *) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (dirfd, int, (DIR *)); # endif _GL_CXXALIASWARN (dirfd); #elif defined GNULIB_POSIXCHECK # undef dirfd # if HAVE_RAW_DECL_DIRFD _GL_WARN_ON_USE (dirfd, "dirfd is unportable - " "use gnulib module dirfd for portability"); # endif #endif #if @GNULIB_FDOPENDIR@ /* Open a directory stream visiting the given directory file descriptor. Return NULL and set errno if fd is not visiting a directory. On success, this function consumes fd (it will be implicitly closed either by this function or by a subsequent closedir). */ # if @REPLACE_FDOPENDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopendir # define fdopendir rpl_fdopendir # endif _GL_FUNCDECL_RPL (fdopendir, DIR *, (int fd) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); _GL_CXXALIAS_RPL (fdopendir, DIR *, (int fd)); # else # if !@HAVE_FDOPENDIR@ || !@HAVE_DECL_FDOPENDIR@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (fdopendir, DIR *, (int fd) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); # endif _GL_CXXALIAS_SYS (fdopendir, DIR *, (int fd)); # endif _GL_CXXALIASWARN (fdopendir); #else # if @GNULIB_CLOSEDIR@ && __GNUC__ >= 11 && !defined fdopendir /* For -Wmismatched-dealloc: Associate fdopendir with closedir or rpl_closedir. */ _GL_FUNCDECL_SYS (fdopendir, DIR *, (int fd) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC (closedir, 1)); # endif # if defined GNULIB_POSIXCHECK # undef fdopendir # if HAVE_RAW_DECL_FDOPENDIR _GL_WARN_ON_USE (fdopendir, "fdopendir is unportable - " "use gnulib module fdopendir for portability"); # endif # endif #endif #if @GNULIB_SCANDIR@ /* Scan the directory DIR, calling FILTER on each directory entry. Entries for which FILTER returns nonzero are individually malloc'd, sorted using qsort with CMP, and collected in a malloc'd array in *NAMELIST. Returns the number of entries selected, or -1 on error. */ # if !@HAVE_SCANDIR@ _GL_FUNCDECL_SYS (scandir, int, (const char *dir, struct dirent ***namelist, int (*filter) (const struct dirent *), int (*cmp) (const struct dirent **, const struct dirent **)) _GL_ARG_NONNULL ((1, 2, 4))); # endif /* Need to cast, because on glibc systems, the fourth parameter is int (*cmp) (const void *, const void *). */ _GL_CXXALIAS_SYS_CAST (scandir, int, (const char *dir, struct dirent ***namelist, int (*filter) (const struct dirent *), int (*cmp) (const struct dirent **, const struct dirent **))); _GL_CXXALIASWARN (scandir); #elif defined GNULIB_POSIXCHECK # undef scandir # if HAVE_RAW_DECL_SCANDIR _GL_WARN_ON_USE (scandir, "scandir is unportable - " "use gnulib module scandir for portability"); # endif #endif #if @GNULIB_ALPHASORT@ /* Compare two 'struct dirent' entries alphabetically. */ # if !@HAVE_ALPHASORT@ _GL_FUNCDECL_SYS (alphasort, int, (const struct dirent **, const struct dirent **) _GL_ATTRIBUTE_PURE _GL_ARG_NONNULL ((1, 2))); # endif /* Need to cast, because on glibc systems, the parameters are (const void *, const void *). */ _GL_CXXALIAS_SYS_CAST (alphasort, int, (const struct dirent **, const struct dirent **)); _GL_CXXALIASWARN (alphasort); #elif defined GNULIB_POSIXCHECK # undef alphasort # if HAVE_RAW_DECL_ALPHASORT _GL_WARN_ON_USE (alphasort, "alphasort is unportable - " "use gnulib module alphasort for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_DIRENT_H */ #endif /* _@GUARD_PREFIX@_DIRENT_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fseeko.c���������������������������������������������������������������������������0000644�0000000�0000000�00000014060�14226564447�012311� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An fseeko() function that, together with fflush(), is POSIX compliant. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Get off_t, lseek, _POSIX_VERSION. */ #include <unistd.h> #include "stdio-impl.h" int fseeko (FILE *fp, off_t offset, int whence) #undef fseeko #if !HAVE_FSEEKO # undef fseek # define fseeko fseek #endif #if _GL_WINDOWS_64_BIT_OFF_T # undef fseeko # if HAVE__FSEEKI64 && HAVE_DECL__FSEEKI64 /* msvc, mingw since msvcrt8.0, mingw64 */ # define fseeko _fseeki64 # else /* mingw before msvcrt8.0 */ # define fseeko fseeko64 # endif #endif { #if LSEEK_PIPE_BROKEN /* mingw gives bogus answers rather than failure on non-seekable files. */ if (lseek (fileno (fp), 0, SEEK_CUR) == -1) return EOF; #endif /* These tests are based on fpurge.c. */ #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ if (fp->_IO_read_end == fp->_IO_read_ptr && fp->_IO_write_ptr == fp->_IO_write_base && fp->_IO_save_base == NULL) #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ # if defined __SL64 && defined __SCLE /* Cygwin */ if ((fp->_flags & __SL64) == 0) { /* Cygwin 1.5.0 through 1.5.24 failed to open stdin in 64-bit mode; but has an fseeko that requires 64-bit mode. */ FILE *tmp = fopen ("/dev/null", "r"); if (!tmp) return -1; fp->_flags |= __SL64; fp->_seek64 = tmp->_seek64; fclose (tmp); } # endif if (fp_->_p == fp_->_bf._base && fp_->_r == 0 && fp_->_w == ((fp_->_flags & (__SLBF | __SNBF | __SRD)) == 0 /* fully buffered and not currently reading? */ ? fp_->_bf._size : 0) && fp_ub._base == NULL) #elif defined __EMX__ /* emx+gcc */ if (fp->_ptr == fp->_buffer && fp->_rcount == 0 && fp->_wcount == 0 && fp->_ungetc_count == 0) #elif defined __minix /* Minix */ if (fp_->_ptr == fp_->_buf && (fp_->_ptr == NULL || fp_->_count == 0)) #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ if (fp_->_ptr == fp_->_base && (fp_->_ptr == NULL || fp_->_cnt == 0)) #elif defined __UCLIBC__ /* uClibc */ if (((fp->__modeflags & __FLAG_WRITING) == 0 || fp->__bufpos == fp->__bufstart) && ((fp->__modeflags & (__FLAG_READONLY | __FLAG_READING)) == 0 || fp->__bufpos == fp->__bufread)) #elif defined __QNX__ /* QNX */ if ((fp->_Mode & 0x2000 /* _MWRITE */ ? fp->_Next == fp->_Buf : fp->_Next == fp->_Rend) && fp->_Rback == fp->_Back + sizeof (fp->_Back) && fp->_Rsave == NULL) #elif defined __MINT__ /* Atari FreeMiNT */ if (fp->__bufp == fp->__buffer && fp->__get_limit == fp->__bufp && fp->__put_limit == fp->__bufp && !fp->__pushed_back) #elif defined EPLAN9 /* Plan9 */ if (fp->rp == fp->buf && fp->wp == fp->buf) #elif FUNC_FFLUSH_STDIN < 0 && 200809 <= _POSIX_VERSION /* Cross-compiling to some other system advertising conformance to POSIX.1-2008 or later. Assume fseeko and fflush work as advertised. If this assumption is incorrect, please report the bug to bug-gnulib. */ if (0) #else #error "Please port gnulib fseeko.c to your platform! Look at the code in fseeko.c, then report this to bug-gnulib." #endif { /* We get here when an fflush() call immediately preceded this one (or if ftell() has created buffers but no I/O has occurred on a newly-opened stream). We know there are no buffers. */ off_t pos = lseek (fileno (fp), offset, whence); if (pos == -1) { #if defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ fp_->_flags &= ~__SOFF; #endif return -1; } #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ fp->_flags &= ~_IO_EOF_SEEN; fp->_offset = pos; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ # if defined __CYGWIN__ || (defined __NetBSD__ && __NetBSD_Version__ >= 600000000) || defined __minix /* fp_->_offset is typed as an integer. */ fp_->_offset = pos; # else /* fp_->_offset is an fpos_t. */ { /* Use a union, since on NetBSD, the compilation flags determine whether fpos_t is typedef'd to off_t or a struct containing a single off_t member. */ union { fpos_t f; off_t o; } u; u.o = pos; fp_->_offset = u.f; } # endif fp_->_flags |= __SOFF; fp_->_flags &= ~__SEOF; #elif defined __EMX__ /* emx+gcc */ fp->_flags &= ~_IOEOF; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ fp_->_flag &= ~_IOEOF; #elif defined __MINT__ /* Atari FreeMiNT */ fp->__offset = pos; fp->__eof = 0; #endif return 0; } return fseeko (fp, offset, whence); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/file-set.c�������������������������������������������������������������������������0000644�0000000�0000000�00000004062�14226564446�012545� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Specialized functions to manipulate a set of files. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> #include "file-set.h" #include "hash-triple.h" #include "xalloc.h" /* Record file, FILE, and dev/ino from *STATS, in the hash table, HT. If HT is NULL, return immediately. If memory allocation fails, exit immediately. */ void record_file (Hash_table *ht, char const *file, struct stat const *stats) { struct F_triple *ent; if (ht == NULL) return; ent = xmalloc (sizeof *ent); ent->name = xstrdup (file); ent->st_ino = stats->st_ino; ent->st_dev = stats->st_dev; { struct F_triple *ent_from_table = hash_insert (ht, ent); if (ent_from_table == NULL) { /* Insertion failed due to lack of memory. */ xalloc_die (); } if (ent_from_table != ent) { /* There was already a matching entry in the table, so ENT was not inserted. Free it. */ triple_free (ent); } } } /* Return true if there is an entry in hash table, HT, for the file described by FILE and STATS. */ bool seen_file (Hash_table const *ht, char const *file, struct stat const *stats) { struct F_triple new_ent; if (ht == NULL) return false; new_ent.name = (char *) file; new_ent.st_ino = stats->st_ino; new_ent.st_dev = stats->st_dev; return !!hash_lookup (ht, &new_ent); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getopt1.c��������������������������������������������������������������������������0000644�0000000�0000000�00000007360�14226564450�012417� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt_long and getopt_long_only entry points for GNU getopt. Copyright (C) 1987-2022 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <config.h> #endif #include "getopt.h" #include "getopt_int.h" int getopt_long (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 0, 0); } int _getopt_long_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 0, d, 0); } /* Like getopt_long, but '-' as well as '--' can indicate a long option. If an option that starts with '-' (not '--') doesn't match a long option, but does match a short option, it is parsed as a short option instead. */ int getopt_long_only (int argc, char *__getopt_argv_const *argv, const char *options, const struct option *long_options, int *opt_index) { return _getopt_internal (argc, (char **) argv, options, long_options, opt_index, 1, 0); } int _getopt_long_only_r (int argc, char **argv, const char *options, const struct option *long_options, int *opt_index, struct _getopt_data *d) { return _getopt_internal_r (argc, argv, options, long_options, opt_index, 1, d, 0); } #ifdef TEST #include <stdio.h> #include <stdlib.h> int main (int argc, char **argv) { int c; int digit_optind = 0; while (1) { int this_option_optind = optind ? optind : 1; int option_index = 0; static const struct option long_options[] = { {"add", 1, 0, 0}, {"append", 0, 0, 0}, {"delete", 1, 0, 0}, {"verbose", 0, 0, 0}, {"create", 0, 0, 0}, {"file", 1, 0, 0}, {0, 0, 0, 0} }; c = getopt_long (argc, argv, "abc:d:0123456789", long_options, &option_index); if (c == -1) break; switch (c) { case 0: printf ("option %s", long_options[option_index].name); if (optarg) printf (" with arg %s", optarg); printf ("\n"); break; case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (digit_optind != 0 && digit_optind != this_option_optind) printf ("digits occur in two different argv-elements.\n"); digit_optind = this_option_optind; printf ("option %c\n", c); break; case 'a': printf ("option a\n"); break; case 'b': printf ("option b\n"); break; case 'c': printf ("option c with value '%s'\n", optarg); break; case 'd': printf ("option d with value '%s'\n", optarg); break; case '?': break; default: printf ("?? getopt returned character code 0%o ??\n", c); } } if (optind < argc) { printf ("non-option ARGV-elements: "); while (optind < argc) printf ("%s ", argv[optind++]); printf ("\n"); } exit (0); } #endif /* TEST */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/wcrtomb.c��������������������������������������������������������������������������0000644�0000000�0000000�00000004414�14226564451�012507� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. Copyright (C) 2008-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <errno.h> #include <stdlib.h> size_t wcrtomb (char *s, wchar_t wc, mbstate_t *ps) #undef wcrtomb { /* This implementation of wcrtomb supports only stateless encodings. ps must be in the initial state. */ if (ps != NULL && !mbsinit (ps)) { errno = EINVAL; return (size_t)(-1); } #if !HAVE_WCRTOMB /* IRIX 6.5 */ \ || WCRTOMB_RETVAL_BUG /* Solaris 11.3, MSVC */ \ || WCRTOMB_C_LOCALE_BUG /* Android */ if (s == NULL) /* We know the NUL wide character corresponds to the NUL character. */ return 1; else #endif { #if HAVE_WCRTOMB # if WCRTOMB_C_LOCALE_BUG /* Android */ /* Implement consistently with mbrtowc(): through a 1:1 correspondence, as in ISO-8859-1. */ if (wc >= 0 && wc <= 0xff) { *s = (unsigned char) wc; return 1; } else { errno = EILSEQ; return (size_t)(-1); } # else return wcrtomb (s, wc, ps); # endif #else /* IRIX 6.5 */ /* Fallback for platforms that don't have wcrtomb(). Implement on top of wctomb(). This code is not multithread-safe. */ int ret = wctomb (s, wc); if (ret >= 0) return ret; else { errno = EILSEQ; return (size_t)(-1); } #endif } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/reallocarray.c���������������������������������������������������������������������0000644�0000000�0000000�00000002201�14226564447�013507� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* reallocarray function that is glibc compatible. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Darshit Shah */ #include <config.h> #include <stdlib.h> #include <errno.h> #include "intprops.h" void * reallocarray (void *ptr, size_t nmemb, size_t size) { size_t nbytes; if (INT_MULTIPLY_WRAPV (nmemb, size, &nbytes)) { errno = ENOMEM; return NULL; } /* Rely on the semantics of GNU realloc. */ return realloc (ptr, nbytes); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/exitfail.c�������������������������������������������������������������������������0000644�0000000�0000000�00000001555�14226564447�012647� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Failure exit status Copyright (C) 2002-2003, 2005-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "exitfail.h" #include <stdlib.h> int volatile exit_failure = EXIT_FAILURE; ���������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/tempname.c�������������������������������������������������������������������������0000644�0000000�0000000�00000023274�14226564451�012645� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #if !_LIBC # include <libc-config.h> # include "tempname.h" #endif #include <sys/types.h> #include <assert.h> #include <stdbool.h> #include <errno.h> #include <stdio.h> #ifndef P_tmpdir # define P_tmpdir "/tmp" #endif #ifndef TMP_MAX # define TMP_MAX 238328 #endif #ifndef __GT_FILE # define __GT_FILE 0 # define __GT_DIR 1 # define __GT_NOCREATE 2 #endif #if !_LIBC && (GT_FILE != __GT_FILE || GT_DIR != __GT_DIR \ || GT_NOCREATE != __GT_NOCREATE) # error report this to bug-gnulib@gnu.org #endif #include <stddef.h> #include <stdlib.h> #include <string.h> #include <fcntl.h> #include <stdalign.h> #include <stdint.h> #include <sys/random.h> #include <sys/stat.h> #include <time.h> #if _LIBC # define struct_stat64 struct stat64 # define __secure_getenv __libc_secure_getenv #else # define struct_stat64 struct stat # define __gen_tempname gen_tempname # define __mkdir mkdir # define __open open # define __lstat64(file, buf) lstat (file, buf) # define __stat64(file, buf) stat (file, buf) # define __getrandom getrandom # define __clock_gettime64 clock_gettime # define __timespec64 timespec #endif /* Use getrandom if it works, falling back on a 64-bit linear congruential generator that starts with Var's value mixed in with a clock's low-order bits if available. */ typedef uint_fast64_t random_value; #define RANDOM_VALUE_MAX UINT_FAST64_MAX #define BASE_62_DIGITS 10 /* 62**10 < UINT_FAST64_MAX */ #define BASE_62_POWER (62LL * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62 * 62) static random_value random_bits (random_value var, bool use_getrandom) { random_value r; /* Without GRND_NONBLOCK it can be blocked for minutes on some systems. */ if (use_getrandom && __getrandom (&r, sizeof r, GRND_NONBLOCK) == sizeof r) return r; #if _LIBC || (defined CLOCK_MONOTONIC && HAVE_CLOCK_GETTIME) /* Add entropy if getrandom did not work. */ struct __timespec64 tv; __clock_gettime64 (CLOCK_MONOTONIC, &tv); var ^= tv.tv_nsec; #endif return 2862933555777941757 * var + 3037000493; } #if _LIBC /* Return nonzero if DIR is an existent directory. */ static int direxists (const char *dir) { struct_stat64 buf; return __stat64 (dir, &buf) == 0 && S_ISDIR (buf.st_mode); } /* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is non-null and exists, uses it; otherwise uses the first of $TMPDIR, P_tmpdir, /tmp that exists. Copies into TMPL a template suitable for use with mk[s]temp. Will fail (-1) if DIR is non-null and doesn't exist, none of the searched dirs exists, or there's not enough space in TMPL. */ int __path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, int try_tmpdir) { const char *d; size_t dlen, plen; if (!pfx || !pfx[0]) { pfx = "file"; plen = 4; } else { plen = strlen (pfx); if (plen > 5) plen = 5; } if (try_tmpdir) { d = __secure_getenv ("TMPDIR"); if (d != NULL && direxists (d)) dir = d; else if (dir != NULL && direxists (dir)) /* nothing */ ; else dir = NULL; } if (dir == NULL) { if (direxists (P_tmpdir)) dir = P_tmpdir; else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp")) dir = "/tmp"; else { __set_errno (ENOENT); return -1; } } dlen = strlen (dir); while (dlen > 1 && dir[dlen - 1] == '/') dlen--; /* remove trailing slashes */ /* check we have room for "${dir}/${pfx}XXXXXX\0" */ if (tmpl_len < dlen + 1 + plen + 6 + 1) { __set_errno (EINVAL); return -1; } sprintf (tmpl, "%.*s/%.*sXXXXXX", (int) dlen, dir, (int) plen, pfx); return 0; } #endif /* _LIBC */ #if _LIBC static int try_tempname_len (char *, int, void *, int (*) (char *, void *), size_t); #endif static int try_file (char *tmpl, void *flags) { int *openflags = flags; return __open (tmpl, (*openflags & ~O_ACCMODE) | O_RDWR | O_CREAT | O_EXCL, S_IRUSR | S_IWUSR); } static int try_dir (char *tmpl, _GL_UNUSED void *flags) { return __mkdir (tmpl, S_IRUSR | S_IWUSR | S_IXUSR); } static int try_nocreate (char *tmpl, _GL_UNUSED void *flags) { struct_stat64 st; if (__lstat64 (tmpl, &st) == 0 || errno == EOVERFLOW) __set_errno (EEXIST); return errno == ENOENT ? 0 : -1; } /* These are the characters used in temporary file names. */ static const char letters[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789"; /* Generate a temporary file name based on TMPL. TMPL must match the rules for mk[s]temp (i.e., end in at least X_SUFFIX_LEN "X"s, possibly with a suffix). The name constructed does not exist at the time of the call to this function. TMPL is overwritten with the result. KIND may be one of: __GT_NOCREATE: simply verify that the name does not exist at the time of the call. __GT_FILE: create the file using open(O_CREAT|O_EXCL) and return a read-write fd. The file is mode 0600. __GT_DIR: create a directory, which will be mode 0700. We use a clever algorithm to get hard-to-predict names. */ #ifdef _LIBC static #endif int gen_tempname_len (char *tmpl, int suffixlen, int flags, int kind, size_t x_suffix_len) { static int (*const tryfunc[]) (char *, void *) = { [__GT_FILE] = try_file, [__GT_DIR] = try_dir, [__GT_NOCREATE] = try_nocreate }; return try_tempname_len (tmpl, suffixlen, &flags, tryfunc[kind], x_suffix_len); } #ifdef _LIBC static #endif int try_tempname_len (char *tmpl, int suffixlen, void *args, int (*tryfunc) (char *, void *), size_t x_suffix_len) { size_t len; char *XXXXXX; unsigned int count; int fd = -1; int save_errno = errno; /* A lower bound on the number of temporary files to attempt to generate. The maximum total number of temporary file names that can exist for a given template is 62**6. It should never be necessary to try all of these combinations. Instead if a reasonable number of names is tried (we define reasonable as 62**3) fail to give the system administrator the chance to remove the problems. This value requires that X_SUFFIX_LEN be at least 3. */ #define ATTEMPTS_MIN (62 * 62 * 62) /* The number of times to attempt to generate a temporary file. To conform to POSIX, this must be no smaller than TMP_MAX. */ #if ATTEMPTS_MIN < TMP_MAX unsigned int attempts = TMP_MAX; #else unsigned int attempts = ATTEMPTS_MIN; #endif /* A random variable. The initial value is used only the for fallback path on 'random_bits' on 'getrandom' failure. Its initial value tries to use some entropy from the ASLR and ignore possible bits from the stack alignment. */ random_value v = ((uintptr_t) &v) / alignof (max_align_t); /* How many random base-62 digits can currently be extracted from V. */ int vdigits = 0; /* Whether to consume entropy when acquiring random bits. On the first try it's worth the entropy cost with __GT_NOCREATE, which is inherently insecure and can use the entropy to make it a bit less secure. On the (rare) second and later attempts it might help against DoS attacks. */ bool use_getrandom = tryfunc == try_nocreate; /* Least unfair value for V. If V is less than this, V can generate BASE_62_DIGITS digits fairly. Otherwise it might be biased. */ random_value const unfair_min = RANDOM_VALUE_MAX - RANDOM_VALUE_MAX % BASE_62_POWER; len = strlen (tmpl); if (len < x_suffix_len + suffixlen || strspn (&tmpl[len - x_suffix_len - suffixlen], "X") < x_suffix_len) { __set_errno (EINVAL); return -1; } /* This is where the Xs start. */ XXXXXX = &tmpl[len - x_suffix_len - suffixlen]; for (count = 0; count < attempts; ++count) { for (size_t i = 0; i < x_suffix_len; i++) { if (vdigits == 0) { do { v = random_bits (v, use_getrandom); use_getrandom = true; } while (unfair_min <= v); vdigits = BASE_62_DIGITS; } XXXXXX[i] = letters[v % 62]; v /= 62; vdigits--; } fd = tryfunc (tmpl, args); if (fd >= 0) { __set_errno (save_errno); return fd; } else if (errno != EEXIST) return -1; } /* We got out of the loop because we ran out of combinations to try. */ __set_errno (EEXIST); return -1; } int __gen_tempname (char *tmpl, int suffixlen, int flags, int kind) { return gen_tempname_len (tmpl, suffixlen, flags, kind, 6); } #if !_LIBC int try_tempname (char *tmpl, int suffixlen, void *args, int (*tryfunc) (char *, void *)) { return try_tempname_len (tmpl, suffixlen, args, tryfunc, 6); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/setlocale_null.c�������������������������������������������������������������������0000644�0000000�0000000�00000025223�14226564450�014037� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query the name of the current global locale. Copyright (C) 2019-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* Specification. */ #include "setlocale_null.h" #include <errno.h> #include <locale.h> #include <stdlib.h> #include <string.h> #if defined _WIN32 && !defined __CYGWIN__ # include <wchar.h> #endif #if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif #endif /* Use the system's setlocale() function, not the gnulib override, here. */ #undef setlocale static const char * setlocale_null_androidfix (int category) { const char *result = setlocale (category, NULL); #ifdef __ANDROID__ if (result == NULL) switch (category) { case LC_CTYPE: case LC_NUMERIC: case LC_TIME: case LC_COLLATE: case LC_MONETARY: case LC_MESSAGES: case LC_ALL: case LC_PAPER: case LC_NAME: case LC_ADDRESS: case LC_TELEPHONE: case LC_MEASUREMENT: result = "C"; break; default: break; } #endif return result; } static int setlocale_null_unlocked (int category, char *buf, size_t bufsize) { #if defined _WIN32 && !defined __CYGWIN__ && defined _MSC_VER /* On native Windows, nowadays, the setlocale() implementation is based on _wsetlocale() and uses malloc() for the result. We are better off using _wsetlocale() directly. */ const wchar_t *result = _wsetlocale (category, NULL); if (result == NULL) { /* CATEGORY is invalid. */ if (bufsize > 0) /* Return an empty string in BUF. This is a convenience for callers that don't want to write explicit code for handling EINVAL. */ buf[0] = '\0'; return EINVAL; } else { size_t length = wcslen (result); if (length < bufsize) { size_t i; /* Convert wchar_t[] -> char[], assuming plain ASCII. */ for (i = 0; i <= length; i++) buf[i] = result[i]; return 0; } else { if (bufsize > 0) { /* Return a truncated result in BUF. This is a convenience for callers that don't want to write explicit code for handling ERANGE. */ size_t i; /* Convert wchar_t[] -> char[], assuming plain ASCII. */ for (i = 0; i < bufsize; i++) buf[i] = result[i]; buf[bufsize - 1] = '\0'; } return ERANGE; } } #else const char *result = setlocale_null_androidfix (category); if (result == NULL) { /* CATEGORY is invalid. */ if (bufsize > 0) /* Return an empty string in BUF. This is a convenience for callers that don't want to write explicit code for handling EINVAL. */ buf[0] = '\0'; return EINVAL; } else { size_t length = strlen (result); if (length < bufsize) { memcpy (buf, result, length + 1); return 0; } else { if (bufsize > 0) { /* Return a truncated result in BUF. This is a convenience for callers that don't want to write explicit code for handling ERANGE. */ memcpy (buf, result, bufsize - 1); buf[bufsize - 1] = '\0'; } return ERANGE; } } #endif } #if !(SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE) /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin */ /* Use a lock, so that no two threads can invoke setlocale_null_unlocked at the same time. */ /* Prohibit renaming this symbol. */ # undef gl_get_setlocale_null_lock # if defined _WIN32 && !defined __CYGWIN__ extern __declspec(dllimport) CRITICAL_SECTION *gl_get_setlocale_null_lock (void); static int setlocale_null_with_lock (int category, char *buf, size_t bufsize) { CRITICAL_SECTION *lock = gl_get_setlocale_null_lock (); int ret; EnterCriticalSection (lock); ret = setlocale_null_unlocked (category, buf, bufsize); LeaveCriticalSection (lock); return ret; } # elif HAVE_PTHREAD_API /* musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin */ extern # if defined _WIN32 || defined __CYGWIN__ __declspec(dllimport) # endif pthread_mutex_t *gl_get_setlocale_null_lock (void); # if HAVE_WEAK_SYMBOLS /* musl libc, FreeBSD, NetBSD, OpenBSD, Haiku */ /* Avoid the need to link with '-lpthread'. */ # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock /* Determine whether libpthread is in use. */ # pragma weak pthread_mutexattr_gettype /* See the comments in lock.h. */ # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # else # define pthread_in_use() 1 # endif static int setlocale_null_with_lock (int category, char *buf, size_t bufsize) { if (pthread_in_use()) { pthread_mutex_t *lock = gl_get_setlocale_null_lock (); int ret; if (pthread_mutex_lock (lock)) abort (); ret = setlocale_null_unlocked (category, buf, bufsize); if (pthread_mutex_unlock (lock)) abort (); return ret; } else return setlocale_null_unlocked (category, buf, bufsize); } # elif HAVE_THREADS_H extern mtx_t *gl_get_setlocale_null_lock (void); static int setlocale_null_with_lock (int category, char *buf, size_t bufsize) { mtx_t *lock = gl_get_setlocale_null_lock (); int ret; if (mtx_lock (lock) != thrd_success) abort (); ret = setlocale_null_unlocked (category, buf, bufsize); if (mtx_unlock (lock) != thrd_success) abort (); return ret; } # endif #endif int setlocale_null_r (int category, char *buf, size_t bufsize) { #if SETLOCALE_NULL_ALL_MTSAFE # if SETLOCALE_NULL_ONE_MTSAFE return setlocale_null_unlocked (category, buf, bufsize); # else if (category == LC_ALL) return setlocale_null_unlocked (category, buf, bufsize); else return setlocale_null_with_lock (category, buf, bufsize); # endif #else # if SETLOCALE_NULL_ONE_MTSAFE if (category == LC_ALL) return setlocale_null_with_lock (category, buf, bufsize); else return setlocale_null_unlocked (category, buf, bufsize); # else return setlocale_null_with_lock (category, buf, bufsize); # endif #endif } const char * setlocale_null (int category) { #if SETLOCALE_NULL_ALL_MTSAFE && SETLOCALE_NULL_ONE_MTSAFE return setlocale_null_androidfix (category); #else /* This call must be multithread-safe. To achieve this without using thread-local storage: 1. We use a specific static buffer for each possible CATEGORY argument. So that different threads can call setlocale_mtsafe with different CATEGORY arguments, without interfering. 2. We use a simple strcpy or memcpy to fill this static buffer. Filling it through, for example, strcpy + strcat would not be guaranteed to leave the buffer's contents intact if another thread is currently accessing it. If necessary, the contents is first assembled in a stack-allocated buffer. */ if (category == LC_ALL) { # if SETLOCALE_NULL_ALL_MTSAFE return setlocale_null_androidfix (LC_ALL); # else char buf[SETLOCALE_NULL_ALL_MAX]; static char resultbuf[SETLOCALE_NULL_ALL_MAX]; if (setlocale_null_r (LC_ALL, buf, sizeof (buf))) return "C"; strcpy (resultbuf, buf); return resultbuf; # endif } else { # if SETLOCALE_NULL_ONE_MTSAFE return setlocale_null_androidfix (category); # else enum { LC_CTYPE_INDEX, LC_NUMERIC_INDEX, LC_TIME_INDEX, LC_COLLATE_INDEX, LC_MONETARY_INDEX, LC_MESSAGES_INDEX, # ifdef LC_PAPER LC_PAPER_INDEX, # endif # ifdef LC_NAME LC_NAME_INDEX, # endif # ifdef LC_ADDRESS LC_ADDRESS_INDEX, # endif # ifdef LC_TELEPHONE LC_TELEPHONE_INDEX, # endif # ifdef LC_MEASUREMENT LC_MEASUREMENT_INDEX, # endif # ifdef LC_IDENTIFICATION LC_IDENTIFICATION_INDEX, # endif LC_INDICES_COUNT } i; char buf[SETLOCALE_NULL_MAX]; static char resultbuf[LC_INDICES_COUNT][SETLOCALE_NULL_MAX]; int err; err = setlocale_null_r (category, buf, sizeof (buf)); if (err == EINVAL) return NULL; if (err) return "C"; switch (category) { case LC_CTYPE: i = LC_CTYPE_INDEX; break; case LC_NUMERIC: i = LC_NUMERIC_INDEX; break; case LC_TIME: i = LC_TIME_INDEX; break; case LC_COLLATE: i = LC_COLLATE_INDEX; break; case LC_MONETARY: i = LC_MONETARY_INDEX; break; case LC_MESSAGES: i = LC_MESSAGES_INDEX; break; # ifdef LC_PAPER case LC_PAPER: i = LC_PAPER_INDEX; break; # endif # ifdef LC_NAME case LC_NAME: i = LC_NAME_INDEX; break; # endif # ifdef LC_ADDRESS case LC_ADDRESS: i = LC_ADDRESS_INDEX; break; # endif # ifdef LC_TELEPHONE case LC_TELEPHONE: i = LC_TELEPHONE_INDEX; break; # endif # ifdef LC_MEASUREMENT case LC_MEASUREMENT: i = LC_MEASUREMENT_INDEX; break; # endif # ifdef LC_IDENTIFICATION case LC_IDENTIFICATION: i = LC_IDENTIFICATION_INDEX; break; # endif default: /* If you get here, a #ifdef LC_xxx is missing. */ abort (); } strcpy (resultbuf[i], buf); return resultbuf[i]; # endif } #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/parse-datetime-gen.h���������������������������������������������������������������0000644�0000000�0000000�00000007202�14226565137�014512� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 3.6.2. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ #ifndef YY_YY_PARSE_DATETIME_TAB_H_INCLUDED # define YY_YY_PARSE_DATETIME_TAB_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int yydebug; #endif /* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { YYEMPTY = -2, YYEOF = 0, /* "end of file" */ YYerror = 256, /* error */ YYUNDEF = 257, /* "invalid token" */ tAGO = 258, /* tAGO */ tDST = 259, /* tDST */ tYEAR_UNIT = 260, /* tYEAR_UNIT */ tMONTH_UNIT = 261, /* tMONTH_UNIT */ tHOUR_UNIT = 262, /* tHOUR_UNIT */ tMINUTE_UNIT = 263, /* tMINUTE_UNIT */ tSEC_UNIT = 264, /* tSEC_UNIT */ tDAY_UNIT = 265, /* tDAY_UNIT */ tDAY_SHIFT = 266, /* tDAY_SHIFT */ tDAY = 267, /* tDAY */ tDAYZONE = 268, /* tDAYZONE */ tLOCAL_ZONE = 269, /* tLOCAL_ZONE */ tMERIDIAN = 270, /* tMERIDIAN */ tMONTH = 271, /* tMONTH */ tORDINAL = 272, /* tORDINAL */ tZONE = 273, /* tZONE */ tSNUMBER = 274, /* tSNUMBER */ tUNUMBER = 275, /* tUNUMBER */ tSDECIMAL_NUMBER = 276, /* tSDECIMAL_NUMBER */ tUDECIMAL_NUMBER = 277 /* tUDECIMAL_NUMBER */ }; typedef enum yytokentype yytoken_kind_t; #endif /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { #line 576 "parse-datetime.y" intmax_t intval; textint textintval; struct timespec timespec; relative_time rel; #line 93 "parse-datetime-gen.h" }; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif int yyparse (parser_control *pc); #endif /* !YY_YY_PARSE_DATETIME_TAB_H_INCLUDED */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/spawn_faction_init.c���������������������������������������������������������������0000644�0000000�0000000�00000003314�14226564451�014706� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <errno.h> #include <stdlib.h> #include <string.h> #include "spawn_int.h" /* Function used to increase the size of the allocated array. This function is called from the 'add'-functions. */ int __posix_spawn_file_actions_realloc (posix_spawn_file_actions_t *file_actions) { int newalloc = file_actions->_allocated + 8; void *newmem = realloc (file_actions->_actions, newalloc * sizeof (struct __spawn_action)); if (newmem == NULL) /* Not enough memory. */ return ENOMEM; file_actions->_actions = (struct __spawn_action *) newmem; file_actions->_allocated = newalloc; return 0; } /* Initialize data structure for file attribute for 'spawn' call. */ int posix_spawn_file_actions_init (posix_spawn_file_actions_t *file_actions) { /* Simply clear all the elements. */ memset (file_actions, '\0', sizeof (*file_actions)); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/full-write.c�����������������������������������������������������������������������0000644�0000000�0000000�00000004403�14226564447�013127� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An interface to read and write that retries (if necessary) until complete. Copyright (C) 1993-1994, 1997-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #ifdef FULL_READ # include "full-read.h" #else # include "full-write.h" #endif #include <errno.h> #ifdef FULL_READ # include "safe-read.h" # define safe_rw safe_read # define full_rw full_read # undef const # define const /* empty */ #else # include "safe-write.h" # define safe_rw safe_write # define full_rw full_write #endif #ifdef FULL_READ /* Set errno to zero upon EOF. */ # define ZERO_BYTE_TRANSFER_ERRNO 0 #else /* Some buggy drivers return 0 when one tries to write beyond a device's end. (Example: Linux 1.2.13 on /dev/fd0.) Set errno to ENOSPC so they get a sensible diagnostic. */ # define ZERO_BYTE_TRANSFER_ERRNO ENOSPC #endif /* Write(read) COUNT bytes at BUF to(from) descriptor FD, retrying if interrupted or if a partial write(read) occurs. Return the number of bytes transferred. When writing, set errno if fewer than COUNT bytes are written. When reading, if fewer than COUNT bytes are read, you must examine errno to distinguish failure from EOF (errno == 0). */ size_t full_rw (int fd, const void *buf, size_t count) { size_t total = 0; const char *ptr = (const char *) buf; while (count > 0) { size_t n_rw = safe_rw (fd, ptr, count); if (n_rw == (size_t) -1) break; if (n_rw == 0) { errno = ZERO_BYTE_TRANSFER_ERRNO; break; } total += n_rw; ptr += n_rw; count -= n_rw; } return total; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/verify.h���������������������������������������������������������������������������0000644�0000000�0000000�00000030533�14226564451�012344� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compile-time assert-like macros. Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert, Bruno Haible, and Jim Meyering. */ #ifndef _GL_VERIFY_H #define _GL_VERIFY_H /* Define _GL_HAVE__STATIC_ASSERT to 1 if _Static_assert (R, DIAGNOSTIC) works as per C11. This is supported by GCC 4.6.0+ and by clang 4+. Define _GL_HAVE__STATIC_ASSERT1 to 1 if _Static_assert (R) works as per C2x. This is supported by GCC 9.1+. Support compilers claiming conformance to the relevant standard, and also support GCC when not pedantic. If we were willing to slow 'configure' down we could also use it with other compilers, but since this affects only the quality of diagnostics, why bother? */ #ifndef __cplusplus # if (201112L <= __STDC_VERSION__ \ || (!defined __STRICT_ANSI__ \ && (4 < __GNUC__ + (6 <= __GNUC_MINOR__) || 4 <= __clang_major__))) # define _GL_HAVE__STATIC_ASSERT 1 # endif # if (202000L <= __STDC_VERSION__ \ || (!defined __STRICT_ANSI__ && 9 <= __GNUC__)) # define _GL_HAVE__STATIC_ASSERT1 1 # endif #endif /* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other system headers, defines a conflicting _Static_assert that is no better than ours; override it. */ #ifndef _GL_HAVE__STATIC_ASSERT # include <stddef.h> # undef _Static_assert #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. If _Static_assert works, verify (R) uses it directly. Similarly, _GL_VERIFY_TRUE works by packaging a _Static_assert inside a struct that is an operand of sizeof. The code below uses several ideas for C++ compilers, and for C compilers that do not support _Static_assert: * The first step is ((R) ? 1 : -1). Given an expression R, of integral or boolean or floating-point type, this yields an expression of integral type, whose value is later verified to be constant and nonnegative. * Next this expression W is wrapped in a type struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: W; }. If W is negative, this yields a compile-time error. No compiler can deal with a bit-field of negative size. One might think that an array size check would have the same effect, that is, that the type struct { unsigned int dummy[W]; } would work as well. However, inside a function, some compilers (such as C++ compilers and GNU C) allow local parameters and variables inside array size expressions. With these compilers, an array size check would not properly diagnose this misuse of the verify macro: void function (int n) { verify (n < 0); } * For the verify macro, the struct _gl_verify_type will need to somehow be embedded into a declaration. To be portable, this declaration must declare an object, a constant, a function, or a typedef name. If the declared entity uses the type directly, such as in struct dummy {...}; typedef struct {...} dummy; extern struct {...} *dummy; extern void dummy (struct {...} *); extern struct {...} *dummy (void); two uses of the verify macro would yield colliding declarations if the entity names are not disambiguated. A workaround is to attach the current line number to the entity name: #define _GL_CONCAT0(x, y) x##y #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) extern struct {...} * _GL_CONCAT (dummy, __LINE__); But this has the problem that two invocations of verify from within the same macro would collide, since the __LINE__ value would be the same for both invocations. (The GCC __COUNTER__ macro solves this problem, but is not portable.) A solution is to use the sizeof operator. It yields a number, getting rid of the identity of the type. Declarations like extern int dummy [sizeof (struct {...})]; extern void dummy (int [sizeof (struct {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; can be repeated. * Should the implementation use a named struct or an unnamed struct? Which of the following alternatives can be used? extern int dummy [sizeof (struct {...})]; extern int dummy [sizeof (struct _gl_verify_type {...})]; extern void dummy (int [sizeof (struct {...})]); extern void dummy (int [sizeof (struct _gl_verify_type {...})]); extern int (*dummy (void)) [sizeof (struct {...})]; extern int (*dummy (void)) [sizeof (struct _gl_verify_type {...})]; In the second and sixth case, the struct type is exported to the outer scope; two such declarations therefore collide. GCC warns about the first, third, and fourth cases. So the only remaining possibility is the fifth case: extern int (*dummy (void)) [sizeof (struct {...})]; * GCC warns about duplicate declarations of the dummy function if -Wredundant-decls is used. GCC 4.3 and later have a builtin __COUNTER__ macro that can let us generate unique identifiers for each dummy function, to suppress this warning. * This implementation exploits the fact that older versions of GCC, which do not support _Static_assert, also do not warn about the last declaration mentioned above. * GCC warns if -Wnested-externs is enabled and 'verify' is used within a function body; but inside a function, you can always arrange to use verify_expr instead. * In C++, any struct definition inside sizeof is invalid. Use a template type to work around the problem. */ /* Concatenate two preprocessor tokens. */ #define _GL_CONCAT(x, y) _GL_CONCAT0 (x, y) #define _GL_CONCAT0(x, y) x##y /* _GL_COUNTER is an integer, preferably one that changes each time we use it. Use __COUNTER__ if it works, falling back on __LINE__ otherwise. __LINE__ isn't perfect, but it's better than a constant. */ #if defined __COUNTER__ && __COUNTER__ != __COUNTER__ # define _GL_COUNTER __COUNTER__ #else # define _GL_COUNTER __LINE__ #endif /* Generate a symbol with the given prefix, making it unique if possible. */ #define _GL_GENSYM(prefix) _GL_CONCAT (prefix, _GL_COUNTER) /* Verify requirement R at compile-time, as an integer constant expression that returns 1. If R is false, fail at compile-time, preferably with a diagnostic that includes the string-literal DIAGNOSTIC. */ #define _GL_VERIFY_TRUE(R, DIAGNOSTIC) \ (!!sizeof (_GL_VERIFY_TYPE (R, DIAGNOSTIC))) #ifdef __cplusplus # if !GNULIB_defined_struct__gl_verify_type template <int w> struct _gl_verify_type { unsigned int _gl_verify_error_if_negative: w; }; # define GNULIB_defined_struct__gl_verify_type 1 # endif # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ _gl_verify_type<(R) ? 1 : -1> #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { \ _Static_assert (R, DIAGNOSTIC); \ int _gl_dummy; \ } #else # define _GL_VERIFY_TYPE(R, DIAGNOSTIC) \ struct { unsigned int _gl_verify_error_if_negative: (R) ? 1 : -1; } #endif /* Verify requirement R at compile-time, as a declaration without a trailing ';'. If R is false, fail at compile-time. This macro requires three or more arguments but uses at most the first two, so that the _Static_assert macro optionally defined below supports both the C11 two-argument syntax and the C2x one-argument syntax. Unfortunately, unlike C11, this implementation must appear as an ordinary declaration, and cannot appear inside struct { ... }. */ #if 200410 <= __cpp_static_assert # define _GL_VERIFY(R, DIAGNOSTIC, ...) static_assert (R, DIAGNOSTIC) #elif defined _GL_HAVE__STATIC_ASSERT # define _GL_VERIFY(R, DIAGNOSTIC, ...) _Static_assert (R, DIAGNOSTIC) #else # define _GL_VERIFY(R, DIAGNOSTIC, ...) \ extern int (*_GL_GENSYM (_gl_verify_function) (void)) \ [_GL_VERIFY_TRUE (R, DIAGNOSTIC)] #endif /* _GL_STATIC_ASSERT_H is defined if this code is copied into assert.h. */ #ifdef _GL_STATIC_ASSERT_H # if !defined _GL_HAVE__STATIC_ASSERT1 && !defined _Static_assert # define _Static_assert(...) \ _GL_VERIFY (__VA_ARGS__, "static assertion failed", -) # endif # if __cpp_static_assert < 201411 && !defined static_assert # define static_assert _Static_assert /* C11 requires this #define. */ # endif #endif /* @assert.h omit start@ */ #if 3 < __GNUC__ + (3 < __GNUC_MINOR__ + (4 <= __GNUC_PATCHLEVEL__)) # define _GL_HAS_BUILTIN_TRAP 1 #elif defined __has_builtin # define _GL_HAS_BUILTIN_TRAP __has_builtin (__builtin_trap) #else # define _GL_HAS_BUILTIN_TRAP 0 #endif #if 4 < __GNUC__ + (5 <= __GNUC_MINOR__) # define _GL_HAS_BUILTIN_UNREACHABLE 1 #elif defined __has_builtin # define _GL_HAS_BUILTIN_UNREACHABLE __has_builtin (__builtin_unreachable) #else # define _GL_HAS_BUILTIN_UNREACHABLE 0 #endif /* Each of these macros verifies that its argument R is nonzero. To be portable, R should be an integer constant expression. Unlike assert (R), there is no run-time overhead. There are two macros, since no single macro can be used in all contexts in C. verify_expr (R, E) is for scalar contexts, including integer constant expression contexts. verify (R) is for declaration contexts, e.g., the top level. */ /* Verify requirement R at compile-time. Return the value of the expression E. */ #define verify_expr(R, E) \ (_GL_VERIFY_TRUE (R, "verify_expr (" #R ", " #E ")") ? (E) : (E)) /* Verify requirement R at compile-time, as a declaration without a trailing ';'. verify (R) acts like static_assert (R) except that it is portable to C11/C++14 and earlier, it can issue better diagnostics, and its name is shorter and may be more convenient. */ #ifdef __PGI /* PGI barfs if R is long. */ # define verify(R) _GL_VERIFY (R, "verify (...)", -) #else # define verify(R) _GL_VERIFY (R, "verify (" #R ")", -) #endif /* Assume that R always holds. Behavior is undefined if R is false, fails to evaluate, or has side effects. 'assume (R)' is a directive from the programmer telling the compiler that R is true so the compiler needn't generate code to test R. This is why 'assume' is in verify.h: it's related to static checking (in this case, static checking done by the programmer), not dynamic checking. 'assume (R)' can affect compilation of all the code, not just code that happens to be executed after the assume (R) is "executed". For example, if the code mistakenly does 'assert (R); assume (R);' the compiler is entitled to optimize away the 'assert (R)'. Although assuming R can help a compiler generate better code or diagnostics, performance can suffer if R uses hard-to-optimize features such as function calls not inlined by the compiler. Avoid Clang's __builtin_assume, as it breaks GNU Emacs master as of 2020-08-23T21:09:49Z!eggert@cs.ucla.edu; see <https://bugs.gnu.org/43152#71>. It's not known whether this breakage is a Clang bug or an Emacs bug; play it safe for now. */ #if _GL_HAS_BUILTIN_UNREACHABLE # define assume(R) ((R) ? (void) 0 : __builtin_unreachable ()) #elif 1200 <= _MSC_VER # define assume(R) __assume (R) #elif (defined GCC_LINT || defined lint) && _GL_HAS_BUILTIN_TRAP /* Doing it this way helps various packages when configured with --enable-gcc-warnings, which compiles with -Dlint. It's nicer when 'assume' silences warnings even with older GCCs. */ # define assume(R) ((R) ? (void) 0 : __builtin_trap ()) #else /* Some tools grok NOTREACHED, e.g., Oracle Studio 12.6. */ # define assume(R) ((R) ? (void) 0 : /*NOTREACHED*/ (void) 0) #endif /* @assert.h omit end@ */ #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/c-strcase.h������������������������������������������������������������������������0000644�0000000�0000000�00000004056�14226564447�012732� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison functions in C locale. Copyright (C) 1995-1996, 2001, 2003, 2005, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef C_STRCASE_H #define C_STRCASE_H #include <stddef.h> /* The functions defined in this file assume the "C" locale and a character set without diacritics (ASCII-US or EBCDIC-US or something like that). Even if the "C" locale on a particular system is an extension of the ASCII character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it is ISO-8859-1), the functions in this file recognize only the ASCII characters. More precisely, one of the string arguments must be an ASCII string; the other one can also contain non-ASCII characters (but then the comparison result will be nonzero). */ #ifdef __cplusplus extern "C" { #endif /* Compare strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. */ extern int c_strcasecmp (const char *s1, const char *s2) _GL_ATTRIBUTE_PURE; /* Compare no more than N characters of strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. */ extern int c_strncasecmp (const char *s1, const char *s2, size_t n) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } #endif #endif /* C_STRCASE_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getdelim.c�������������������������������������������������������������������������0000644�0000000�0000000�00000007553�14226564450�012632� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getdelim.c --- Implementation of replacement getdelim function. Copyright (C) 1994, 1996-1998, 2001, 2003, 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Ported from glibc by Simon Josefsson. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the lineptr == NULL || n == NULL || fp == NULL tests below. */ #define _GL_ARG_NONNULL(params) #include <config.h> #include <stdio.h> #include <limits.h> #include <stdint.h> #include <stdlib.h> #include <errno.h> #ifndef SSIZE_MAX # define SSIZE_MAX ((ssize_t) (SIZE_MAX / 2)) #endif #if USE_UNLOCKED_IO # include "unlocked-io.h" # define getc_maybe_unlocked(fp) getc(fp) #elif !HAVE_FLOCKFILE || !HAVE_FUNLOCKFILE || !HAVE_DECL_GETC_UNLOCKED # undef flockfile # undef funlockfile # define flockfile(x) ((void) 0) # define funlockfile(x) ((void) 0) # define getc_maybe_unlocked(fp) getc(fp) #else # define getc_maybe_unlocked(fp) getc_unlocked(fp) #endif static void alloc_failed (void) { #if defined _WIN32 && ! defined __CYGWIN__ /* Avoid errno problem without using the realloc module; see: https://lists.gnu.org/r/bug-gnulib/2016-08/msg00025.html */ errno = ENOMEM; #endif } /* Read up to (and including) a DELIMITER from FP into *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *N characters of space. It is realloc'ed as necessary. Returns the number of characters read (not including the null terminator), or -1 on error or EOF. */ ssize_t getdelim (char **lineptr, size_t *n, int delimiter, FILE *fp) { ssize_t result; size_t cur_len = 0; if (lineptr == NULL || n == NULL || fp == NULL) { errno = EINVAL; return -1; } flockfile (fp); if (*lineptr == NULL || *n == 0) { char *new_lineptr; *n = 120; new_lineptr = (char *) realloc (*lineptr, *n); if (new_lineptr == NULL) { alloc_failed (); result = -1; goto unlock_return; } *lineptr = new_lineptr; } for (;;) { int i; i = getc_maybe_unlocked (fp); if (i == EOF) { result = -1; break; } /* Make enough space for len+1 (for final NUL) bytes. */ if (cur_len + 1 >= *n) { size_t needed_max = SSIZE_MAX < SIZE_MAX ? (size_t) SSIZE_MAX + 1 : SIZE_MAX; size_t needed = 2 * *n + 1; /* Be generous. */ char *new_lineptr; if (needed_max < needed) needed = needed_max; if (cur_len + 1 >= needed) { result = -1; errno = EOVERFLOW; goto unlock_return; } new_lineptr = (char *) realloc (*lineptr, needed); if (new_lineptr == NULL) { alloc_failed (); result = -1; goto unlock_return; } *lineptr = new_lineptr; *n = needed; } (*lineptr)[cur_len] = i; cur_len++; if (i == delimiter) break; } (*lineptr)[cur_len] = '\0'; result = cur_len ? cur_len : result; unlock_return: funlockfile (fp); /* doesn't set errno */ return result; } �����������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/strerror.c�������������������������������������������������������������������������0000644�0000000�0000000�00000004074�14226564451�012716� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror.c --- POSIX compatible system error routine Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "intprops.h" #include "strerror-override.h" #include "verify.h" /* Use the system functions, not the gnulib overrides in this file. */ #undef sprintf char * strerror (int n) #undef strerror { static char buf[STACKBUF_LEN]; size_t len; /* Cast away const, due to the historical signature of strerror; callers should not be modifying the string. */ const char *msg = strerror_override (n); if (msg) return (char *) msg; msg = strerror (n); /* Our strerror_r implementation might use the system's strerror buffer, so all other clients of strerror have to see the error copied into a buffer that we manage. This is not thread-safe, even if the system strerror is, but portable programs shouldn't be using strerror if they care about thread-safety. */ if (!msg || !*msg) { static char const fmt[] = "Unknown error %d"; verify (sizeof buf >= sizeof (fmt) + INT_STRLEN_BOUND (n)); sprintf (buf, fmt, n); errno = EINVAL; return buf; } /* Fix STACKBUF_LEN if this ever aborts. */ len = strlen (msg); if (sizeof buf <= len) abort (); memcpy (buf, msg, len + 1); return buf; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/version-etc-fsf.c������������������������������������������������������������������0000644�0000000�0000000�00000002222�14226564451�014037� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Variable with FSF copyright information, for version-etc. Copyright (C) 1999-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> /* Specification. */ #include "version-etc.h" /* Default copyright goes to the FSF. */ const char version_etc_copyright[] = /* Do *not* mark this string for translation. %s is a copyright symbol suitable for this locale, and %d is the copyright year. */ "Copyright %s %d Free Software Foundation, Inc."; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/xalloc-die.c�����������������������������������������������������������������������0000644�0000000�0000000�00000002435�14226564451�013054� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report a memory allocation failure and exit. Copyright (C) 1997-2000, 2002-2004, 2006, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "xalloc.h" #include <stdlib.h> #include "error.h" #include "exitfail.h" #include "gettext.h" #define _(msgid) gettext (msgid) void xalloc_die (void) { error (exit_failure, 0, "%s", _("memory exhausted")); /* _Noreturn cannot be given to error, since it may return if its first argument is 0. To help compilers understand the xalloc_die does not return, call abort. Also, the abort is a safety feature if exit_failure is 0 (which shouldn't happen). */ abort (); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getpass.h��������������������������������������������������������������������������0000644�0000000�0000000�00000001554�14226564450�012506� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read a password from /dec/tty. Copyright (C) 2004-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Obsolete; consider using unistd.h instead. */ /* Get getpass declaration, if available. */ #include <unistd.h> ����������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stdarg.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000002224�14226564451�012725� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <stdarg.h>. Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_STDARG_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDARG_H@ #ifndef _@GUARD_PREFIX@_STDARG_H #define _@GUARD_PREFIX@_STDARG_H #ifndef va_copy # define va_copy(a,b) ((a) = (b)) #endif #endif /* _@GUARD_PREFIX@_STDARG_H */ #endif /* _@GUARD_PREFIX@_STDARG_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/progname.h�������������������������������������������������������������������������0000644�0000000�0000000�00000003740�14226564450�012647� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2001-2004, 2006, 2009-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2001. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _PROGNAME_H #define _PROGNAME_H /* Programs using this file should do the following in main(): set_program_name (argv[0]); */ #ifdef __cplusplus extern "C" { #endif /* String containing name the program is called with. */ extern const char *program_name; /* Set program_name, based on argv[0]. argv0 must be a string allocated with indefinite extent, and must not be modified after this call. */ extern void set_program_name (const char *argv0); #if ENABLE_RELOCATABLE /* Set program_name, based on argv[0], and original installation prefix and directory, for relocatability. */ extern void set_program_name_and_installdir (const char *argv0, const char *orig_installprefix, const char *orig_installdir); #undef set_program_name #define set_program_name(ARG0) \ set_program_name_and_installdir (ARG0, INSTALLPREFIX, INSTALLDIR) /* Return the full pathname of the current executable, based on the earlier call to set_program_name_and_installdir. Return NULL if unknown. */ extern char *get_full_program_name (void); #endif #ifdef __cplusplus } #endif #endif /* _PROGNAME_H */ ��������������������������������recutils-1.9/lib/stdio-read.c�����������������������������������������������������������������������0000644�0000000�0000000�00000013614�14226564447�013074� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible FILE stream read function. Copyright (C) 2008-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Replace these functions only if module 'nonblocking' is requested. */ #if GNULIB_NONBLOCKING /* On native Windows platforms, when read() is called on a non-blocking pipe with an empty buffer, ReadFile() fails with error GetLastError() = ERROR_NO_DATA, and read() in consequence fails with error EINVAL. This read() function is at the basis of the function which fills the buffer of a FILE stream. */ # if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA # define CALL_WITH_ERRNO_FIX(RETTYPE, EXPRESSION, FAILED) \ if (ferror (stream)) \ return (EXPRESSION); \ else \ { \ RETTYPE ret; \ SetLastError (0); \ ret = (EXPRESSION); \ if (FAILED) \ { \ if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \ { \ int fd = fileno (stream); \ if (fd >= 0) \ { \ HANDLE h = (HANDLE) _get_osfhandle (fd); \ if (GetFileType (h) == FILE_TYPE_PIPE) \ { \ /* h is a pipe or socket. */ \ DWORD state; \ if (GetNamedPipeHandleState (h, &state, NULL, NULL, \ NULL, NULL, 0) \ && (state & PIPE_NOWAIT) != 0) \ /* h is a pipe in non-blocking mode. \ Change errno from EINVAL to EAGAIN. */ \ errno = EAGAIN; \ } \ } \ } \ } \ return ret; \ } /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_SCANF int scanf (const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfscanf (stdin, format, args); va_end (args); return retval; } # endif /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_FSCANF int fscanf (FILE *stream, const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfscanf (stream, format, args); va_end (args); return retval; } # endif /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_VSCANF int vscanf (const char *format, va_list args) { return vfscanf (stdin, format, args); } # endif /* Enable this function definition only if gnulib's <stdio.h> has prepared it. Otherwise we get a function definition conflict with mingw64's <stdio.h>. */ # if GNULIB_VFSCANF int vfscanf (FILE *stream, const char *format, va_list args) #undef vfscanf { CALL_WITH_ERRNO_FIX (int, vfscanf (stream, format, args), ret == EOF) } # endif int getchar (void) { return fgetc (stdin); } int fgetc (FILE *stream) #undef fgetc { CALL_WITH_ERRNO_FIX (int, fgetc (stream), ret == EOF) } char * fgets (char *s, int n, FILE *stream) #undef fgets { CALL_WITH_ERRNO_FIX (char *, fgets (s, n, stream), ret == NULL) } /* We intentionally don't bother to fix gets. */ size_t fread (void *ptr, size_t s, size_t n, FILE *stream) #undef fread { CALL_WITH_ERRNO_FIX (size_t, fread (ptr, s, n, stream), ret < n) } # endif #endif ��������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/timegm.c���������������������������������������������������������������������������0000644�0000000�0000000�00000002664�14226564451�012321� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert UTC calendar time to simple time. Like mktime but assumes UTC. Copyright (C) 1994-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> #endif #include <time.h> #include <errno.h> #include "mktime-internal.h" __time64_t __timegm64 (struct tm *tmp) { static mktime_offset_t gmtime_offset; tmp->tm_isdst = 0; return __mktime_internal (tmp, __gmtime64_r, &gmtime_offset); } #if defined _LIBC && __TIMESIZE != 64 libc_hidden_def (__timegm64) time_t timegm (struct tm *tmp) { struct tm tm = *tmp; __time64_t t = __timegm64 (&tm); if (in_time_t_range (t)) { *tmp = tm; return t; } else { __set_errno (EOVERFLOW); return -1; } } #endif ����������������������������������������������������������������������������recutils-1.9/lib/windows-once.c���������������������������������������������������������������������0000644�0000000�0000000�00000004416�14226564451�013450� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Once-only control (native Windows implementation). Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-once.h" #include <stdlib.h> void glwthread_once (glwthread_once_t *once_control, void (*initfunction) (void)) { if (once_control->inited <= 0) { if (InterlockedIncrement (&once_control->started) == 0) { /* This thread is the first one to come to this once_control. */ InitializeCriticalSection (&once_control->lock); EnterCriticalSection (&once_control->lock); once_control->inited = 0; initfunction (); once_control->inited = 1; LeaveCriticalSection (&once_control->lock); } else { /* Don't let once_control->started grow and wrap around. */ InterlockedDecrement (&once_control->started); /* Some other thread has already started the initialization. Yield the CPU while waiting for the other thread to finish initializing and taking the lock. */ while (once_control->inited < 0) Sleep (0); if (once_control->inited <= 0) { /* Take the lock. This blocks until the other thread has finished calling the initfunction. */ EnterCriticalSection (&once_control->lock); LeaveCriticalSection (&once_control->lock); if (!(once_control->inited > 0)) abort (); } } } } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stdbool.in.h�����������������������������������������������������������������������0000644�0000000�0000000�00000012011�14226564451�013102� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2001-2003, 2006-2022 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_STDBOOL_H #define _GL_STDBOOL_H /* ISO C 99 <stdbool.h> for platforms that lack it. */ /* Usage suggestions: Programs that use <stdbool.h> should be aware of some limitations and standards compliance issues. Standards compliance: - <stdbool.h> must be #included before 'bool', 'false', 'true' can be used. - You cannot assume that sizeof (bool) == 1. - Programs should not undefine the macros bool, true, and false, as C99 lists that as an "obsolescent feature". Limitations of this substitute, when used in a C89 environment: - <stdbool.h> must be #included before the '_Bool' type can be used. - You cannot assume that _Bool is a typedef; it might be a macro. - Bit-fields of type 'bool' are not supported. Portable code should use 'unsigned int foo : 1;' rather than 'bool foo : 1;'. - In C99, casts and automatic conversions to '_Bool' or 'bool' are performed in such a way that every nonzero value gets converted to 'true', and zero gets converted to 'false'. This doesn't work with this substitute. With this substitute, only the values 0 and 1 give the expected result when converted to _Bool' or 'bool'. - C99 allows the use of (_Bool)0.0 in constant expressions, but this substitute cannot always provide this property. Also, it is suggested that programs use 'bool' rather than '_Bool'; this isn't required, but 'bool' is more common. */ /* 7.16. Boolean type and values */ /* BeOS <sys/socket.h> already #defines false 0, true 1. We use the same definitions below, but temporarily we have to #undef them. */ #if defined __BEOS__ && !defined __HAIKU__ # include <OS.h> /* defines bool but not _Bool */ # undef false # undef true #endif #ifdef __cplusplus # define _Bool bool # define bool bool #else # if defined __BEOS__ && !defined __HAIKU__ /* A compiler known to have 'bool'. */ /* If the compiler already has both 'bool' and '_Bool', we can assume they are the same types. */ # if !@HAVE__BOOL@ typedef bool _Bool; # endif # else # if !defined __GNUC__ /* If @HAVE__BOOL@: Some HP-UX cc and AIX IBM C compiler versions have compiler bugs when the built-in _Bool type is used. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html https://lists.gnu.org/r/bug-coreutils/2005-10/msg00086.html Similar bugs are likely with other compilers as well; this file wouldn't be used if <stdbool.h> was working. So we override the _Bool type. If !@HAVE__BOOL@: Need to define _Bool ourselves. As 'signed char' or as an enum type? Use of a typedef, with SunPRO C, leads to a stupid "warning: _Bool is a keyword in ISO C99". Use of an enum type, with IRIX cc, leads to a stupid "warning(1185): enumerated type mixed with another type". Even the existence of an enum type, without a typedef, "Invalid enumerator. (badenum)" with HP-UX cc on Tru64. The only benefit of the enum, debuggability, is not important with these compilers. So use 'signed char' and no enum. */ # define _Bool signed char # else /* With this compiler, trust the _Bool type if the compiler has it. */ # if !@HAVE__BOOL@ /* For the sake of symbolic names in gdb, define true and false as enum constants, not only as macros. It is tempting to write typedef enum { false = 0, true = 1 } _Bool; so that gdb prints values of type 'bool' symbolically. But then values of type '_Bool' might promote to 'int' or 'unsigned int' (see ISO C 99 6.7.2.2.(4)); however, '_Bool' must promote to 'int' (see ISO C 99 6.3.1.1.(2)). So add a negative value to the enum; this ensures that '_Bool' promotes to 'int'. */ typedef enum { _Bool_must_promote_to_int = -1, false = 0, true = 1 } _Bool; # endif # endif # endif # define bool _Bool #endif /* The other macros must be usable in preprocessor directives. */ #ifdef __cplusplus # define false false # define true true #else # define false 0 # define true 1 #endif #define __bool_true_false_are_defined 1 #endif /* _GL_STDBOOL_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/strverscmp.c�����������������������������������������������������������������������0000644�0000000�0000000�00000006201�14226564451�013236� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Compare strings while treating digits characters numerically. Copyright (C) 1997-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Jean-François Bignolles <bignolle@ecoledoc.ibp.fr>, 1997. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <libc-config.h> # define __strverscmp strverscmp #endif #include <stdint.h> #include <string.h> #include <ctype.h> /* states: S_N: normal, S_I: comparing integral part, S_F: comparing fractional parts, S_Z: idem but with leading Zeroes only */ #define S_N 0x0 #define S_I 0x3 #define S_F 0x6 #define S_Z 0x9 /* result_type: CMP: return diff; LEN: compare using len_diff/diff */ #define CMP 2 #define LEN 3 /* Compare S1 and S2 as strings holding indices/version numbers, returning less than, equal to or greater than zero if S1 is less than, equal to or greater than S2 (for more info, see the texinfo doc). */ int __strverscmp (const char *s1, const char *s2) { const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; /* Symbol(s) 0 [1-9] others Transition (10) 0 (01) d (00) x */ static const uint_least8_t next_state[] = { /* state x d 0 */ /* S_N */ S_N, S_I, S_Z, /* S_I */ S_N, S_I, S_I, /* S_F */ S_N, S_F, S_F, /* S_Z */ S_N, S_F, S_Z }; static const int_least8_t result_type[] = { /* state x/x x/d x/0 d/x d/d d/0 0/x 0/d 0/0 */ /* S_N */ CMP, CMP, CMP, CMP, LEN, CMP, CMP, CMP, CMP, /* S_I */ CMP, -1, -1, +1, LEN, LEN, +1, LEN, LEN, /* S_F */ CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, CMP, /* S_Z */ CMP, +1, +1, -1, CMP, CMP, -1, CMP, CMP }; if (p1 == p2) return 0; unsigned char c1 = *p1++; unsigned char c2 = *p2++; /* Hint: '0' is a digit too. */ int state = S_N + ((c1 == '0') + (isdigit (c1) != 0)); int diff; while ((diff = c1 - c2) == 0) { if (c1 == '\0') return diff; state = next_state[state]; c1 = *p1++; c2 = *p2++; state += (c1 == '0') + (isdigit (c1) != 0); } state = result_type[state * 3 + (((c2 == '0') + (isdigit (c2) != 0)))]; switch (state) { case CMP: return diff; case LEN: while (isdigit (*p1++)) if (!isdigit (*p2++)) return 1; return isdigit (*p2) ? -1 : diff; default: return state; } } libc_hidden_def (__strverscmp) weak_alias (__strverscmp, strverscmp) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/strsep.c���������������������������������������������������������������������������0000644�0000000�0000000�00000002654�14226564451�012356� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2004, 2007, 2009-2022 Free Software Foundation, Inc. Written by Yoann Vandoorselaere <yoann@prelude-ids.org>. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <string.h> char * strsep (char **stringp, const char *delim) { char *start = *stringp; char *ptr; if (start == NULL) return NULL; /* Optimize the case of no delimiters. */ if (delim[0] == '\0') { *stringp = NULL; return start; } /* Optimize the case of one delimiter. */ if (delim[1] == '\0') ptr = strchr (start, delim[0]); else /* The general case. */ ptr = strpbrk (start, delim); if (ptr == NULL) { *stringp = NULL; return start; } *ptr = '\0'; *stringp = ptr + 1; return start; } ������������������������������������������������������������������������������������recutils-1.9/lib/mkostemp.c�������������������������������������������������������������������������0000644�0000000�0000000�00000002574�14226564450�012675� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1998-1999, 2001, 2005-2007, 2009-2022 Free Software Foundation, Inc. This file is derived from the one in the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if !_LIBC # include <config.h> #endif #include <stdlib.h> #if !_LIBC # include "tempname.h" # define __gen_tempname gen_tempname # ifndef __GTFILE # define __GT_FILE GT_FILE # endif #endif #include <stdio.h> #ifndef __GT_FILE # define __GT_FILE 0 #endif /* Generate a unique temporary file name from XTEMPLATE. The last six characters of XTEMPLATE must be "XXXXXX"; they are replaced with a string that makes the file name unique. Then open the file and return a fd. */ int mkostemp (char *xtemplate, int flags) { return __gen_tempname (xtemplate, 0, flags, __GT_FILE); } ������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stat-w32.c�������������������������������������������������������������������������0000644�0000000�0000000�00000044224�14226564451�012421� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Core of implementation of fstat and stat for native Windows. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible. */ #include <config.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Attempt to make <windows.h> define FILE_ID_INFO. But ensure that the redefinition of _WIN32_WINNT does not make us assume Windows Vista or newer when building for an older version of Windows. */ #if HAVE_SDKDDKVER_H # include <sdkddkver.h> # if _WIN32_WINNT >= _WIN32_WINNT_VISTA # define WIN32_ASSUME_VISTA 1 # else # define WIN32_ASSUME_VISTA 0 # endif # if !defined _WIN32_WINNT || (_WIN32_WINNT < _WIN32_WINNT_WIN8) # undef _WIN32_WINNT # define _WIN32_WINNT _WIN32_WINNT_WIN8 # endif #else # define WIN32_ASSUME_VISTA (_WIN32_WINNT >= _WIN32_WINNT_VISTA) #endif #include <sys/types.h> #include <sys/stat.h> #include <errno.h> #include <limits.h> #include <string.h> #include <unistd.h> #include <windows.h> /* Specification. */ #include "stat-w32.h" #include "pathmax.h" #include "verify.h" /* Don't assume that UNICODE is not defined. */ #undef LoadLibrary #define LoadLibrary LoadLibraryA #undef GetFinalPathNameByHandle #define GetFinalPathNameByHandle GetFinalPathNameByHandleA /* Older mingw headers do not define VOLUME_NAME_NONE. */ #ifndef VOLUME_NAME_NONE # define VOLUME_NAME_NONE 4 #endif #if !WIN32_ASSUME_VISTA /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress # if _GL_WINDOWS_STAT_INODES == 2 /* GetFileInformationByHandleEx was introduced only in Windows Vista. */ typedef DWORD (WINAPI * GetFileInformationByHandleExFuncType) (HANDLE hFile, FILE_INFO_BY_HANDLE_CLASS fiClass, LPVOID lpBuffer, DWORD dwBufferSize); static GetFileInformationByHandleExFuncType GetFileInformationByHandleExFunc = NULL; # endif /* GetFinalPathNameByHandle was introduced only in Windows Vista. */ typedef DWORD (WINAPI * GetFinalPathNameByHandleFuncType) (HANDLE hFile, LPSTR lpFilePath, DWORD lenFilePath, DWORD dwFlags); static GetFinalPathNameByHandleFuncType GetFinalPathNameByHandleFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE kernel32 = LoadLibrary ("kernel32.dll"); if (kernel32 != NULL) { # if _GL_WINDOWS_STAT_INODES == 2 GetFileInformationByHandleExFunc = (GetFileInformationByHandleExFuncType) GetProcAddress (kernel32, "GetFileInformationByHandleEx"); # endif GetFinalPathNameByHandleFunc = (GetFinalPathNameByHandleFuncType) GetProcAddress (kernel32, "GetFinalPathNameByHandleA"); } initialized = TRUE; } #else # define GetFileInformationByHandleExFunc GetFileInformationByHandleEx # define GetFinalPathNameByHandleFunc GetFinalPathNameByHandle #endif /* Converts a FILETIME to GMT time since 1970-01-01 00:00:00. */ #if _GL_WINDOWS_STAT_TIMESPEC struct timespec _gl_convert_FILETIME_to_timespec (const FILETIME *ft) { struct timespec result; /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ unsigned long long since_1601 = ((unsigned long long) ft->dwHighDateTime << 32) | (unsigned long long) ft->dwLowDateTime; if (since_1601 == 0) { result.tv_sec = 0; result.tv_nsec = 0; } else { /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ unsigned long long since_1970 = since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; result.tv_sec = since_1970 / (unsigned long long) 10000000; result.tv_nsec = (unsigned long) (since_1970 % (unsigned long long) 10000000) * 100; } return result; } #else time_t _gl_convert_FILETIME_to_POSIX (const FILETIME *ft) { /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ unsigned long long since_1601 = ((unsigned long long) ft->dwHighDateTime << 32) | (unsigned long long) ft->dwLowDateTime; if (since_1601 == 0) return 0; else { /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ unsigned long long since_1970 = since_1601 - (unsigned long long) 134774 * (unsigned long long) 86400 * (unsigned long long) 10000000; return since_1970 / (unsigned long long) 10000000; } } #endif /* Fill *BUF with information about the file designated by H. PATH is the file name, if known, otherwise NULL. Return 0 if successful, or -1 with errno set upon failure. */ int _gl_fstat_by_handle (HANDLE h, const char *path, struct stat *buf) { /* GetFileType <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletype> */ DWORD type = GetFileType (h); if (type == FILE_TYPE_DISK) { #if !WIN32_ASSUME_VISTA if (!initialized) initialize (); #endif /* st_mode can be determined through GetFileAttributesEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> or through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileBasicInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ BY_HANDLE_FILE_INFORMATION info; if (! GetFileInformationByHandle (h, &info)) goto failed; /* Test for error conditions before starting to fill *buf. */ if (sizeof (buf->st_size) <= 4 && info.nFileSizeHigh > 0) { errno = EOVERFLOW; return -1; } #if _GL_WINDOWS_STAT_INODES /* st_ino can be determined through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> as 64 bits, or through GetFileInformationByHandleEx with argument FileIdInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_id_info> as 128 bits. The latter requires -D_WIN32_WINNT=_WIN32_WINNT_WIN8 or higher. */ /* Experiments show that GetFileInformationByHandleEx does not provide much more information than GetFileInformationByHandle: * The dwVolumeSerialNumber from GetFileInformationByHandle is equal to the low 32 bits of the 64-bit VolumeSerialNumber from GetFileInformationByHandleEx, and is apparently sufficient for identifying the device. * The nFileIndex from GetFileInformationByHandle is equal to the low 64 bits of the 128-bit FileId from GetFileInformationByHandleEx, and the high 64 bits of this 128-bit FileId are zero. * On a FAT file system, GetFileInformationByHandleEx fails with error ERROR_INVALID_PARAMETER, whereas GetFileInformationByHandle succeeds. * On a CIFS/SMB file system, GetFileInformationByHandleEx fails with error ERROR_INVALID_LEVEL, whereas GetFileInformationByHandle succeeds. */ # if _GL_WINDOWS_STAT_INODES == 2 if (GetFileInformationByHandleExFunc != NULL) { FILE_ID_INFO id; if (GetFileInformationByHandleExFunc (h, FileIdInfo, &id, sizeof (id))) { buf->st_dev = id.VolumeSerialNumber; verify (sizeof (ino_t) == sizeof (id.FileId)); memcpy (&buf->st_ino, &id.FileId, sizeof (ino_t)); goto ino_done; } else { switch (GetLastError ()) { case ERROR_INVALID_PARAMETER: /* older Windows version, or FAT */ case ERROR_INVALID_LEVEL: /* CIFS/SMB file system */ goto fallback; default: goto failed; } } } fallback: ; /* Fallback for older Windows versions. */ buf->st_dev = info.dwVolumeSerialNumber; buf->st_ino._gl_ino[0] = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; buf->st_ino._gl_ino[1] = 0; ino_done: ; # else /* _GL_WINDOWS_STAT_INODES == 1 */ buf->st_dev = info.dwVolumeSerialNumber; buf->st_ino = ((ULONGLONG) info.nFileIndexHigh << 32) | (ULONGLONG) info.nFileIndexLow; # endif #else /* st_ino is not wide enough for identifying a file on a device. Without st_ino, st_dev is pointless. */ buf->st_dev = 0; buf->st_ino = 0; #endif /* st_mode. */ unsigned int mode = /* XXX How to handle FILE_ATTRIBUTE_REPARSE_POINT ? */ ((info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY) ? _S_IFDIR | S_IEXEC_UGO : _S_IFREG) | S_IREAD_UGO | ((info.dwFileAttributes & FILE_ATTRIBUTE_READONLY) ? 0 : S_IWRITE_UGO); if (!(info.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY)) { /* Determine whether the file is executable by looking at the file name suffix. If the file name is already known, use it. Otherwise, for non-empty files, it can be determined through GetFinalPathNameByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfinalpathnamebyhandlea> or through GetFileInformationByHandleEx with argument FileNameInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_name_info> Both require -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ if (info.nFileSizeHigh > 0 || info.nFileSizeLow > 0) { char fpath[PATH_MAX]; if (path != NULL || (GetFinalPathNameByHandleFunc != NULL && GetFinalPathNameByHandleFunc (h, fpath, sizeof (fpath), VOLUME_NAME_NONE) < sizeof (fpath) && (path = fpath, 1))) { const char *last_dot = NULL; const char *p; for (p = path; *p != '\0'; p++) if (*p == '.') last_dot = p; if (last_dot != NULL) { const char *suffix = last_dot + 1; if (_stricmp (suffix, "exe") == 0 || _stricmp (suffix, "bat") == 0 || _stricmp (suffix, "cmd") == 0 || _stricmp (suffix, "com") == 0) mode |= S_IEXEC_UGO; } } else /* Cannot determine file name. Pretend that it is executable. */ mode |= S_IEXEC_UGO; } } buf->st_mode = mode; /* st_nlink can be determined through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileStandardInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ buf->st_nlink = (info.nNumberOfLinks > SHRT_MAX ? SHRT_MAX : info.nNumberOfLinks); /* There's no easy way to map the Windows SID concept to an integer. */ buf->st_uid = 0; buf->st_gid = 0; /* st_rdev is irrelevant for normal files and directories. */ buf->st_rdev = 0; /* st_size can be determined through GetFileSizeEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfilesizeex> or through GetFileAttributesEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> or through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileStandardInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_standard_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ if (sizeof (buf->st_size) <= 4) /* Range check already done above. */ buf->st_size = info.nFileSizeLow; else buf->st_size = ((long long) info.nFileSizeHigh << 32) | (long long) info.nFileSizeLow; /* st_atime, st_mtime, st_ctime can be determined through GetFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfiletime> or through GetFileAttributesEx <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileattributesexa> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_win32_file_attribute_data> or through GetFileInformationByHandle <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/nf-fileapi-getfileinformationbyhandle> <https://docs.microsoft.com/en-us/windows/desktop/api/fileapi/ns-fileapi-_by_handle_file_information> or through GetFileInformationByHandleEx with argument FileBasicInfo <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/nf-winbase-getfileinformationbyhandleex> <https://docs.microsoft.com/en-us/windows/desktop/api/winbase/ns-winbase-_file_basic_info> The latter requires -D_WIN32_WINNT=_WIN32_WINNT_VISTA or higher. */ #if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim = _gl_convert_FILETIME_to_timespec (&info.ftLastAccessTime); buf->st_mtim = _gl_convert_FILETIME_to_timespec (&info.ftLastWriteTime); buf->st_ctim = _gl_convert_FILETIME_to_timespec (&info.ftCreationTime); #else buf->st_atime = _gl_convert_FILETIME_to_POSIX (&info.ftLastAccessTime); buf->st_mtime = _gl_convert_FILETIME_to_POSIX (&info.ftLastWriteTime); buf->st_ctime = _gl_convert_FILETIME_to_POSIX (&info.ftCreationTime); #endif return 0; } else if (type == FILE_TYPE_CHAR || type == FILE_TYPE_PIPE) { buf->st_dev = 0; #if _GL_WINDOWS_STAT_INODES == 2 buf->st_ino._gl_ino[0] = buf->st_ino._gl_ino[1] = 0; #else buf->st_ino = 0; #endif buf->st_mode = (type == FILE_TYPE_PIPE ? _S_IFIFO : _S_IFCHR); buf->st_nlink = 1; buf->st_uid = 0; buf->st_gid = 0; buf->st_rdev = 0; if (type == FILE_TYPE_PIPE) { /* PeekNamedPipe <https://msdn.microsoft.com/en-us/library/aa365779.aspx> */ DWORD bytes_available; if (PeekNamedPipe (h, NULL, 0, NULL, &bytes_available, NULL)) buf->st_size = bytes_available; else buf->st_size = 0; } else buf->st_size = 0; #if _GL_WINDOWS_STAT_TIMESPEC buf->st_atim.tv_sec = 0; buf->st_atim.tv_nsec = 0; buf->st_mtim.tv_sec = 0; buf->st_mtim.tv_nsec = 0; buf->st_ctim.tv_sec = 0; buf->st_ctim.tv_nsec = 0; #else buf->st_atime = 0; buf->st_mtime = 0; buf->st_ctime = 0; #endif return 0; } else { errno = ENOENT; return -1; } failed: { DWORD error = GetLastError (); #if 0 fprintf (stderr, "_gl_fstat_by_handle error 0x%x\n", (unsigned int) error); #endif switch (error) { case ERROR_ACCESS_DENIED: case ERROR_SHARING_VIOLATION: errno = EACCES; break; case ERROR_OUTOFMEMORY: errno = ENOMEM; break; case ERROR_WRITE_FAULT: case ERROR_READ_FAULT: case ERROR_GEN_FAILURE: errno = EIO; break; default: errno = EINVAL; break; } return -1; } } #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/strcasecmp.c�����������������������������������������������������������������������0000644�0000000�0000000�00000003451�14226564451�013176� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive string comparison function. Copyright (C) 1998-1999, 2005-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <ctype.h> #include <limits.h> #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Compare strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function does not work with multibyte strings! */ int strcasecmp (const char *s1, const char *s2) { const unsigned char *p1 = (const unsigned char *) s1; const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2) return 0; do { c1 = TOLOWER (*p1); c2 = TOLOWER (*p2); if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/quotearg.h�������������������������������������������������������������������������0000644�0000000�0000000�00000042433�14226564450�012670� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* quotearg.h - quote arguments for output Copyright (C) 1998-2002, 2004, 2006, 2008-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert <eggert@twinsun.com> */ #ifndef QUOTEARG_H_ # define QUOTEARG_H_ 1 # include <stdlib.h> /* Basic quoting styles. For each style, an example is given on the input strings "simple", "\0 \t\n'\"\033?""?/\\", and "a:b", using quotearg_buffer, quotearg_mem, and quotearg_colon_mem with that style and the default flags and quoted characters. Note that the examples are shown here as valid C strings rather than what displays on a terminal (with "??/" as a trigraph for "\\"). */ enum quoting_style { /* Output names as-is (ls --quoting-style=literal). Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect. quotearg_buffer: "simple", "\0 \t\n'\"\033??/\\", "a:b" quotearg: "simple", " \t\n'\"\033??/\\", "a:b" quotearg_colon: "simple", " \t\n'\"\033??/\\", "a:b" */ literal_quoting_style, /* Quote names for the shell if they contain shell metacharacters or would cause ambiguous output (ls --quoting-style=shell). Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect. quotearg_buffer: "simple", "'\0 \t\n'\\''\"\033??/\\'", "a:b" quotearg: "simple", "' \t\n'\\''\"\033??/\\'", "a:b" quotearg_colon: "simple", "' \t\n'\\''\"\033??/\\'", "'a:b'" */ shell_quoting_style, /* Quote names for the shell, even if they would normally not require quoting (ls --quoting-style=shell-always). Can result in embedded null bytes if QA_ELIDE_NULL_BYTES is not in effect. Behaves like shell_quoting_style if QA_ELIDE_OUTER_QUOTES is in effect. quotearg_buffer: "'simple'", "'\0 \t\n'\\''\"\033??/\\'", "'a:b'" quotearg: "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'" quotearg_colon: "'simple'", "' \t\n'\\''\"\033??/\\'", "'a:b'" */ shell_always_quoting_style, /* Quote names for the shell if they contain shell metacharacters or other problematic characters (ls --quoting-style=shell-escape). Non printable characters are quoted using the $'...' syntax, which originated in ksh93 and is widely supported by most shells, and proposed for inclusion in POSIX. quotearg_buffer: "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "a:b" quotearg: "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "a:b" quotearg_colon: "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\\'", "'a:b'" */ shell_escape_quoting_style, /* Quote names for the shell even if they would normally not require quoting (ls --quoting-style=shell-escape). Non printable characters are quoted using the $'...' syntax, which originated in ksh93 and is widely supported by most shells, and proposed for inclusion in POSIX. Behaves like shell_escape_quoting_style if QA_ELIDE_OUTER_QUOTES is in effect. quotearg_buffer: "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "a:b" quotearg: "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "a:b" quotearg_colon: "simple", "''$'\\0'' '$'\\t\\n'\\''\"'$'\\033''??/\'", "'a:b'" */ shell_escape_always_quoting_style, /* Quote names as for a C language string (ls --quoting-style=c). Behaves like c_maybe_quoting_style if QA_ELIDE_OUTER_QUOTES is in effect. Split into consecutive strings if QA_SPLIT_TRIGRAPHS. quotearg_buffer: "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" quotearg: "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" quotearg_colon: "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\"" */ c_quoting_style, /* Like c_quoting_style except omit the surrounding double-quote characters if no quoted characters are encountered. quotearg_buffer: "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b" quotearg: "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "a:b" quotearg_colon: "simple", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" */ c_maybe_quoting_style, /* Like c_quoting_style except always omit the surrounding double-quote characters and ignore QA_SPLIT_TRIGRAPHS (ls --quoting-style=escape). quotearg_buffer: "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b" quotearg: "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a:b" quotearg_colon: "simple", "\\0 \\t\\n'\"\\033??/\\\\", "a\\:b" */ escape_quoting_style, /* Like clocale_quoting_style, but use single quotes in the default C locale or if the program does not use gettext (ls --quoting-style=locale). For UTF-8 locales, quote characters will use Unicode. LC_MESSAGES=C quotearg_buffer: "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'" quotearg: "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a:b'" quotearg_colon: "`simple'", "`\\0 \\t\\n\\'\"\\033??/\\\\'", "`a\\:b'" LC_MESSAGES=pt_PT.utf8 quotearg_buffer: "\302\253simple\302\273", "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" quotearg: "\302\253simple\302\273", "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" quotearg_colon: "\302\253simple\302\273", "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273" */ locale_quoting_style, /* Like c_quoting_style except use quotation marks appropriate for the locale and ignore QA_SPLIT_TRIGRAPHS (ls --quoting-style=clocale). LC_MESSAGES=C quotearg_buffer: "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" quotearg: "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a:b\"" quotearg_colon: "\"simple\"", "\"\\0 \\t\\n'\\\"\\033??/\\\\\"", "\"a\\:b\"" LC_MESSAGES=pt_PT.utf8 quotearg_buffer: "\302\253simple\302\273", "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" quotearg: "\302\253simple\302\273", "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a:b\302\273" quotearg_colon: "\302\253simple\302\273", "\302\253\\0 \\t\\n'\"\\033??/\\\\\302\253", "\302\253a\\:b\302\273" */ clocale_quoting_style, /* Like clocale_quoting_style except use the custom quotation marks set by set_custom_quoting. If custom quotation marks are not set, the behavior is undefined. left_quote = right_quote = "'" quotearg_buffer: "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'" quotearg: "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a:b'" quotearg_colon: "'simple'", "'\\0 \\t\\n\\'\"\\033??/\\\\'", "'a\\:b'" left_quote = "(" and right_quote = ")" quotearg_buffer: "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)" quotearg: "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a:b)" quotearg_colon: "(simple)", "(\\0 \\t\\n'\"\\033??/\\\\)", "(a\\:b)" left_quote = ":" and right_quote = " " quotearg_buffer: ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b " quotearg: ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a:b " quotearg_colon: ":simple ", ":\\0\\ \\t\\n'\"\\033??/\\\\ ", ":a\\:b " left_quote = "\"'" and right_quote = "'\"" Notice that this is treated as a single level of quotes or two levels where the outer quote need not be escaped within the inner quotes. For two levels where the outer quote must be escaped within the inner quotes, you must use separate quotearg invocations. quotearg_buffer: "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\"" quotearg: "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a:b'\"" quotearg_colon: "\"'simple'\"", "\"'\\0 \\t\\n\\'\"\\033??/\\\\'\"", "\"'a\\:b'\"" */ custom_quoting_style }; /* Flags for use in set_quoting_flags. */ enum quoting_flags { /* Always elide null bytes from styles that do not quote them, even when the length of the result is available to the caller. */ QA_ELIDE_NULL_BYTES = 0x01, /* Omit the surrounding quote characters if no escaped characters are encountered. Note that if no other character needs escaping, then neither does the escape character. */ QA_ELIDE_OUTER_QUOTES = 0x02, /* In the c_quoting_style and c_maybe_quoting_style, split ANSI trigraph sequences into concatenated strings (for example, "?""?/" rather than "??/", which could be confused with "\\"). */ QA_SPLIT_TRIGRAPHS = 0x04 }; /* For now, --quoting-style=literal is the default, but this may change. */ # ifndef DEFAULT_QUOTING_STYLE # define DEFAULT_QUOTING_STYLE literal_quoting_style # endif /* Names of quoting styles and their corresponding values. */ extern char const *const quoting_style_args[]; extern enum quoting_style const quoting_style_vals[]; struct quoting_options; /* The functions listed below set and use a hidden variable that contains the default quoting style options. */ /* Allocate a new set of quoting options, with contents initially identical to O if O is not null, or to the default if O is null. It is the caller's responsibility to free the result. */ struct quoting_options *clone_quoting_options (struct quoting_options *o) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* Get the value of O's quoting style. If O is null, use the default. */ enum quoting_style get_quoting_style (struct quoting_options const *o); /* In O (or in the default if O is null), set the value of the quoting style to S. */ void set_quoting_style (struct quoting_options *o, enum quoting_style s); /* In O (or in the default if O is null), set the value of the quoting options for character C to I. Return the old value. Currently, the only values defined for I are 0 (the default) and 1 (which means to quote the character even if it would not otherwise be quoted). C must never be a digit or a letter that has special meaning after a backslash (for example, "\t" for tab). */ int set_char_quoting (struct quoting_options *o, char c, int i); /* In O (or in the default if O is null), set the value of the quoting options flag to I, which can be a bitwise combination of enum quoting_flags, or 0 for default behavior. Return the old value. */ int set_quoting_flags (struct quoting_options *o, int i); /* In O (or in the default if O is null), set the value of the quoting style to custom_quoting_style, set the left quote to LEFT_QUOTE, and set the right quote to RIGHT_QUOTE. Each of LEFT_QUOTE and RIGHT_QUOTE must be null-terminated and can be the empty string. Because backslashes are used for escaping, it does not make sense for RIGHT_QUOTE to contain a backslash. RIGHT_QUOTE must not begin with a digit or a letter that has special meaning after a backslash (for example, "\t" for tab). */ void set_custom_quoting (struct quoting_options *o, char const *left_quote, char const *right_quote); /* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of argument ARG (of size ARGSIZE), using O to control quoting. If O is null, use the default. Terminate the output with a null character, and return the written size of the output, not counting the terminating null. If BUFFERSIZE is too small to store the output string, return the value that would have been returned had BUFFERSIZE been large enough. If ARGSIZE is -1, use the string length of the argument for ARGSIZE. On output, BUFFER might contain embedded null bytes if ARGSIZE was not -1, the style of O does not use backslash escapes, and the flags of O do not request elision of null bytes.*/ size_t quotearg_buffer (char *restrict buffer, size_t buffersize, char const *arg, size_t argsize, struct quoting_options const *o); /* Like quotearg_buffer, except return the result in a newly allocated buffer. It is the caller's responsibility to free the result. The result will not contain embedded null bytes. */ char *quotearg_alloc (char const *arg, size_t argsize, struct quoting_options const *o) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* Like quotearg_alloc, except that the length of the result, excluding the terminating null byte, is stored into SIZE if it is non-NULL. The result might contain embedded null bytes if ARGSIZE was not -1, SIZE was not NULL, the style of O does not use backslash escapes, and the flags of O do not request elision of null bytes.*/ char *quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size, struct quoting_options const *o) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; /* Use storage slot N to return a quoted version of the string ARG. Use the default quoting options. The returned value points to static storage that can be reused by the next call to this function with the same value of N. N must be nonnegative. The output of all functions in the quotearg_n family are guaranteed to not contain embedded null bytes.*/ char *quotearg_n (int n, char const *arg); /* Equivalent to quotearg_n (0, ARG). */ char *quotearg (char const *arg); /* Use storage slot N to return a quoted version of the argument ARG of size ARGSIZE. This is like quotearg_n (N, ARG), except it can quote null bytes. */ char *quotearg_n_mem (int n, char const *arg, size_t argsize); /* Equivalent to quotearg_n_mem (0, ARG, ARGSIZE). */ char *quotearg_mem (char const *arg, size_t argsize); /* Use style S and storage slot N to return a quoted version of the string ARG. This is like quotearg_n (N, ARG), except that it uses S with no other options to specify the quoting method. */ char *quotearg_n_style (int n, enum quoting_style s, char const *arg); /* Use style S and storage slot N to return a quoted version of the argument ARG of size ARGSIZE. This is like quotearg_n_style (N, S, ARG), except it can quote null bytes. */ char *quotearg_n_style_mem (int n, enum quoting_style s, char const *arg, size_t argsize); /* Equivalent to quotearg_n_style (0, S, ARG). */ char *quotearg_style (enum quoting_style s, char const *arg); /* Equivalent to quotearg_n_style_mem (0, S, ARG, ARGSIZE). */ char *quotearg_style_mem (enum quoting_style s, char const *arg, size_t argsize); /* Like quotearg (ARG), except also quote any instances of CH. See set_char_quoting for a description of acceptable CH values. */ char *quotearg_char (char const *arg, char ch); /* Like quotearg_char (ARG, CH), except it can quote null bytes. */ char *quotearg_char_mem (char const *arg, size_t argsize, char ch); /* Equivalent to quotearg_char (ARG, ':'). */ char *quotearg_colon (char const *arg); /* Like quotearg_colon (ARG), except it can quote null bytes. */ char *quotearg_colon_mem (char const *arg, size_t argsize); /* Like quotearg_n_style, except with ':' quoting enabled. */ char *quotearg_n_style_colon (int n, enum quoting_style s, char const *arg); /* Like quotearg_n_style (N, S, ARG) but with S as custom_quoting_style with left quote as LEFT_QUOTE and right quote as RIGHT_QUOTE. See set_custom_quoting for a description of acceptable LEFT_QUOTE and RIGHT_QUOTE values. */ char *quotearg_n_custom (int n, char const *left_quote, char const *right_quote, char const *arg); /* Like quotearg_n_custom (N, LEFT_QUOTE, RIGHT_QUOTE, ARG) except it can quote null bytes. */ char *quotearg_n_custom_mem (int n, char const *left_quote, char const *right_quote, char const *arg, size_t argsize); /* Equivalent to quotearg_n_custom (0, LEFT_QUOTE, RIGHT_QUOTE, ARG). */ char *quotearg_custom (char const *left_quote, char const *right_quote, char const *arg); /* Equivalent to quotearg_n_custom_mem (0, LEFT_QUOTE, RIGHT_QUOTE, ARG, ARGSIZE). */ char *quotearg_custom_mem (char const *left_quote, char const *right_quote, char const *arg, size_t argsize); /* Free any dynamically allocated memory. */ void quotearg_free (void); #endif /* !QUOTEARG_H_ */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/spawn.in.h�������������������������������������������������������������������������0000644�0000000�0000000�00000120142�14226564451�012571� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Definitions for POSIX spawn interface. Copyright (C) 2000, 2003-2004, 2008-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_SPAWN_H /* Special invocation convention: On OS/2 kLIBC, <spawn.h> includes <signal.h>. Then <signal.h> -> <pthread.h> -> <sched.h> -> <spawn.h> are included by GNULIB. In this situation, struct sched_param is not yet defined. */ #@INCLUDE_NEXT@ @NEXT_SPAWN_H@ #else #ifndef _@GUARD_PREFIX@_SPAWN_H /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SPAWN_H@ # define _GL_ALREADY_INCLUDING_SPAWN_H # @INCLUDE_NEXT@ @NEXT_SPAWN_H@ # define _GL_ALREADY_INCLUDING_SPAWN_H #endif #ifndef _@GUARD_PREFIX@_SPAWN_H #define _@GUARD_PREFIX@_SPAWN_H /* Get definitions of 'struct sched_param' and 'sigset_t'. But avoid namespace pollution on glibc systems. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <sched.h> # include <signal.h> #endif #include <sys/types.h> #ifndef __THROW # define __THROW #endif /* For plain 'restrict', use glibc's __restrict if defined. Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". Other compilers use __restrict, __restrict__, and _Restrict, and 'configure' might #define 'restrict' to those words, so pick a different name. */ #ifndef _Restrict_ # if defined __restrict \ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3 # define _Restrict_ __restrict # elif 199901L <= __STDC_VERSION__ || defined restrict # define _Restrict_ restrict # else # define _Restrict_ # endif #endif /* For the ISO C99 syntax array_name[restrict] use glibc's __restrict_arr if available. Otherwise, GCC 3.1 and clang support this syntax (but not in C++ mode). Other ISO C99 compilers support it as well. */ #ifndef _Restrict_arr_ # ifdef __restrict_arr # define _Restrict_arr_ __restrict_arr # elif ((199901L <= __STDC_VERSION__ \ || 3 < __GNUC__ + (1 <= __GNUC_MINOR__) \ || __clang_major__ >= 3) \ && !defined __cplusplus) # define _Restrict_arr_ _Restrict_ # else # define _Restrict_arr_ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Data structure to contain attributes for thread creation. */ #if @REPLACE_POSIX_SPAWN@ || (@HAVE_POSIX_SPAWNATTR_T@ && !@HAVE_POSIX_SPAWN@) # define posix_spawnattr_t rpl_posix_spawnattr_t #endif #if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWNATTR_T@ || !@HAVE_POSIX_SPAWN@ # if !GNULIB_defined_posix_spawnattr_t typedef struct { short int _flags; pid_t _pgrp; sigset_t _sd; sigset_t _ss; struct sched_param _sp; int _policy; int __pad[16]; } posix_spawnattr_t; # define GNULIB_defined_posix_spawnattr_t 1 # endif #endif /* Data structure to contain information about the actions to be performed in the new process with respect to file descriptors. */ #if @REPLACE_POSIX_SPAWN@ || (@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ && !@HAVE_POSIX_SPAWN@) # define posix_spawn_file_actions_t rpl_posix_spawn_file_actions_t #endif #if @REPLACE_POSIX_SPAWN@ || !@HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ || !@HAVE_POSIX_SPAWN@ # if !GNULIB_defined_posix_spawn_file_actions_t typedef struct { int _allocated; int _used; struct __spawn_action *_actions; int __pad[16]; } posix_spawn_file_actions_t; # define GNULIB_defined_posix_spawn_file_actions_t 1 # endif #endif /* Flags to be set in the 'posix_spawnattr_t'. */ #if @HAVE_POSIX_SPAWN@ /* Use the values from the system, but provide the missing ones. */ # ifndef POSIX_SPAWN_SETSCHEDPARAM # define POSIX_SPAWN_SETSCHEDPARAM 0 # endif # ifndef POSIX_SPAWN_SETSCHEDULER # define POSIX_SPAWN_SETSCHEDULER 0 # endif #else # if @REPLACE_POSIX_SPAWN@ /* Use the values from the system, for better compatibility. */ /* But this implementation does not support AIX extensions. */ # undef POSIX_SPAWN_FORK_HANDLERS # else # define POSIX_SPAWN_RESETIDS 0x01 # define POSIX_SPAWN_SETPGROUP 0x02 # define POSIX_SPAWN_SETSIGDEF 0x04 # define POSIX_SPAWN_SETSIGMASK 0x08 # define POSIX_SPAWN_SETSCHEDPARAM 0x10 # define POSIX_SPAWN_SETSCHEDULER 0x20 # endif #endif /* A GNU extension. Use the next free bit position. */ #ifndef POSIX_SPAWN_USEVFORK # define POSIX_SPAWN_USEVFORK \ ((POSIX_SPAWN_RESETIDS | (POSIX_SPAWN_RESETIDS - 1) \ | POSIX_SPAWN_SETPGROUP | (POSIX_SPAWN_SETPGROUP - 1) \ | POSIX_SPAWN_SETSIGDEF | (POSIX_SPAWN_SETSIGDEF - 1) \ | POSIX_SPAWN_SETSIGMASK | (POSIX_SPAWN_SETSIGMASK - 1) \ | POSIX_SPAWN_SETSCHEDPARAM \ | (POSIX_SPAWN_SETSCHEDPARAM > 0 ? POSIX_SPAWN_SETSCHEDPARAM - 1 : 0) \ | POSIX_SPAWN_SETSCHEDULER \ | (POSIX_SPAWN_SETSCHEDULER > 0 ? POSIX_SPAWN_SETSCHEDULER - 1 : 0)) \ + 1) #endif #if !GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap typedef int verify_POSIX_SPAWN_USEVFORK_no_overlap [(((POSIX_SPAWN_RESETIDS | POSIX_SPAWN_SETPGROUP | POSIX_SPAWN_SETSIGDEF | POSIX_SPAWN_SETSIGMASK | POSIX_SPAWN_SETSCHEDPARAM | POSIX_SPAWN_SETSCHEDULER) & POSIX_SPAWN_USEVFORK) == 0) ? 1 : -1]; # define GNULIB_defined_verify_POSIX_SPAWN_USEVFORK_no_overlap 1 #endif #if @GNULIB_POSIX_SPAWN@ /* Spawn a new process executing PATH with the attributes describes in *ATTRP. Before running the process perform the actions described in FILE-ACTIONS. This function is a possible cancellation points and therefore not marked with __THROW. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn rpl_posix_spawn # endif _GL_FUNCDECL_RPL (posix_spawn, int, (pid_t *_Restrict_ __pid, const char *_Restrict_ __path, const posix_spawn_file_actions_t *_Restrict_ __file_actions, const posix_spawnattr_t *_Restrict_ __attrp, char *const argv[_Restrict_arr_], char *const envp[_Restrict_arr_]) _GL_ARG_NONNULL ((2, 5, 6))); _GL_CXXALIAS_RPL (posix_spawn, int, (pid_t *_Restrict_ __pid, const char *_Restrict_ __path, const posix_spawn_file_actions_t *_Restrict_ __file_actions, const posix_spawnattr_t *_Restrict_ __attrp, char *const argv[_Restrict_arr_], char *const envp[_Restrict_arr_])); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawn, int, (pid_t *_Restrict_ __pid, const char *_Restrict_ __path, const posix_spawn_file_actions_t *_Restrict_ __file_actions, const posix_spawnattr_t *_Restrict_ __attrp, char *const argv[_Restrict_arr_], char *const envp[_Restrict_arr_]) _GL_ARG_NONNULL ((2, 5, 6))); # endif _GL_CXXALIAS_SYS (posix_spawn, int, (pid_t *_Restrict_ __pid, const char *_Restrict_ __path, const posix_spawn_file_actions_t *_Restrict_ __file_actions, const posix_spawnattr_t *_Restrict_ __attrp, char *const argv[_Restrict_arr_], char *const envp[_Restrict_arr_])); # endif _GL_CXXALIASWARN (posix_spawn); #elif defined GNULIB_POSIXCHECK # undef posix_spawn # if HAVE_RAW_DECL_POSIX_SPAWN _GL_WARN_ON_USE (posix_spawn, "posix_spawn is unportable - " "use gnulib module posix_spawn for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNP@ /* Similar to 'posix_spawn' but search for FILE in the PATH. This function is a possible cancellation points and therefore not marked with __THROW. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnp rpl_posix_spawnp # endif _GL_FUNCDECL_RPL (posix_spawnp, int, (pid_t *__pid, const char *__file, const posix_spawn_file_actions_t *__file_actions, const posix_spawnattr_t *__attrp, char *const argv[], char *const envp[]) _GL_ARG_NONNULL ((2, 5, 6))); _GL_CXXALIAS_RPL (posix_spawnp, int, (pid_t *__pid, const char *__file, const posix_spawn_file_actions_t *__file_actions, const posix_spawnattr_t *__attrp, char *const argv[], char *const envp[])); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnp, int, (pid_t *__pid, const char *__file, const posix_spawn_file_actions_t *__file_actions, const posix_spawnattr_t *__attrp, char *const argv[], char *const envp[]) _GL_ARG_NONNULL ((2, 5, 6))); # endif _GL_CXXALIAS_SYS (posix_spawnp, int, (pid_t *__pid, const char *__file, const posix_spawn_file_actions_t *__file_actions, const posix_spawnattr_t *__attrp, char *const argv[], char *const envp[])); # endif _GL_CXXALIASWARN (posix_spawnp); #elif defined GNULIB_POSIXCHECK # undef posix_spawnp # if HAVE_RAW_DECL_POSIX_SPAWNP _GL_WARN_ON_USE (posix_spawnp, "posix_spawnp is unportable - " "use gnulib module posix_spawnp for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_INIT@ /* Initialize data structure with attributes for 'spawn' to default values. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_init rpl_posix_spawnattr_init # endif _GL_FUNCDECL_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_init, int, (posix_spawnattr_t *__attr)); # endif _GL_CXXALIASWARN (posix_spawnattr_init); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_init # if HAVE_RAW_DECL_POSIX_SPAWNATTR_INIT _GL_WARN_ON_USE (posix_spawnattr_init, "posix_spawnattr_init is unportable - " "use gnulib module posix_spawnattr_init for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_DESTROY@ /* Free resources associated with ATTR. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_destroy rpl_posix_spawnattr_destroy # endif _GL_FUNCDECL_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_destroy, int, (posix_spawnattr_t *__attr)); # endif _GL_CXXALIASWARN (posix_spawnattr_destroy); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_destroy # if HAVE_RAW_DECL_POSIX_SPAWNATTR_DESTROY _GL_WARN_ON_USE (posix_spawnattr_destroy, "posix_spawnattr_destroy is unportable - " "use gnulib module posix_spawnattr_destroy for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ /* Store signal mask for signals with default handling from ATTR in SIGDEFAULT. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_getsigdefault rpl_posix_spawnattr_getsigdefault # endif _GL_FUNCDECL_RPL (posix_spawnattr_getsigdefault, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigdefault) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_getsigdefault, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigdefault)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_getsigdefault, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigdefault) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_getsigdefault, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigdefault)); # endif _GL_CXXALIASWARN (posix_spawnattr_getsigdefault); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_getsigdefault # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGDEFAULT _GL_WARN_ON_USE (posix_spawnattr_getsigdefault, "posix_spawnattr_getsigdefault is unportable - " "use gnulib module posix_spawnattr_getsigdefault for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ /* Set signal mask for signals with default handling in ATTR to SIGDEFAULT. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_setsigdefault rpl_posix_spawnattr_setsigdefault # endif _GL_FUNCDECL_RPL (posix_spawnattr_setsigdefault, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigdefault) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_setsigdefault, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigdefault)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_setsigdefault, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigdefault) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_setsigdefault, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigdefault)); # endif _GL_CXXALIASWARN (posix_spawnattr_setsigdefault); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_setsigdefault # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGDEFAULT _GL_WARN_ON_USE (posix_spawnattr_setsigdefault, "posix_spawnattr_setsigdefault is unportable - " "use gnulib module posix_spawnattr_setsigdefault for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ /* Store signal mask for the new process from ATTR in SIGMASK. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_getsigmask rpl_posix_spawnattr_getsigmask # endif _GL_FUNCDECL_RPL (posix_spawnattr_getsigmask, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigmask) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_getsigmask, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigmask)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_getsigmask, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigmask) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_getsigmask, int, (const posix_spawnattr_t *_Restrict_ __attr, sigset_t *_Restrict_ __sigmask)); # endif _GL_CXXALIASWARN (posix_spawnattr_getsigmask); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_getsigmask # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSIGMASK _GL_WARN_ON_USE (posix_spawnattr_getsigmask, "posix_spawnattr_getsigmask is unportable - " "use gnulib module posix_spawnattr_getsigmask for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ /* Set signal mask for the new process in ATTR to SIGMASK. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_setsigmask rpl_posix_spawnattr_setsigmask # endif _GL_FUNCDECL_RPL (posix_spawnattr_setsigmask, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigmask) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_setsigmask, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigmask)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_setsigmask, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigmask) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_setsigmask, int, (posix_spawnattr_t *_Restrict_ __attr, const sigset_t *_Restrict_ __sigmask)); # endif _GL_CXXALIASWARN (posix_spawnattr_setsigmask); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_setsigmask # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSIGMASK _GL_WARN_ON_USE (posix_spawnattr_setsigmask, "posix_spawnattr_setsigmask is unportable - " "use gnulib module posix_spawnattr_setsigmask for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_GETFLAGS@ /* Get flag word from the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_getflags rpl_posix_spawnattr_getflags # endif _GL_FUNCDECL_RPL (posix_spawnattr_getflags, int, (const posix_spawnattr_t *_Restrict_ __attr, short int *_Restrict_ __flags) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_getflags, int, (const posix_spawnattr_t *_Restrict_ __attr, short int *_Restrict_ __flags)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_getflags, int, (const posix_spawnattr_t *_Restrict_ __attr, short int *_Restrict_ __flags) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_getflags, int, (const posix_spawnattr_t *_Restrict_ __attr, short int *_Restrict_ __flags)); # endif _GL_CXXALIASWARN (posix_spawnattr_getflags); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_getflags # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETFLAGS _GL_WARN_ON_USE (posix_spawnattr_getflags, "posix_spawnattr_getflags is unportable - " "use gnulib module posix_spawnattr_getflags for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_SETFLAGS@ /* Store flags in the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_setflags rpl_posix_spawnattr_setflags # endif _GL_FUNCDECL_RPL (posix_spawnattr_setflags, int, (posix_spawnattr_t *__attr, short int __flags) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawnattr_setflags, int, (posix_spawnattr_t *__attr, short int __flags)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_setflags, int, (posix_spawnattr_t *__attr, short int __flags) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_setflags, int, (posix_spawnattr_t *__attr, short int __flags)); # endif _GL_CXXALIASWARN (posix_spawnattr_setflags); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_setflags # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETFLAGS _GL_WARN_ON_USE (posix_spawnattr_setflags, "posix_spawnattr_setflags is unportable - " "use gnulib module posix_spawnattr_setflags for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_GETPGROUP@ /* Get process group ID from the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_getpgroup rpl_posix_spawnattr_getpgroup # endif _GL_FUNCDECL_RPL (posix_spawnattr_getpgroup, int, (const posix_spawnattr_t *_Restrict_ __attr, pid_t *_Restrict_ __pgroup) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_getpgroup, int, (const posix_spawnattr_t *_Restrict_ __attr, pid_t *_Restrict_ __pgroup)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_getpgroup, int, (const posix_spawnattr_t *_Restrict_ __attr, pid_t *_Restrict_ __pgroup) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_getpgroup, int, (const posix_spawnattr_t *_Restrict_ __attr, pid_t *_Restrict_ __pgroup)); # endif _GL_CXXALIASWARN (posix_spawnattr_getpgroup); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_getpgroup # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETPGROUP _GL_WARN_ON_USE (posix_spawnattr_getpgroup, "posix_spawnattr_getpgroup is unportable - " "use gnulib module posix_spawnattr_getpgroup for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_SETPGROUP@ /* Store process group ID in the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_setpgroup rpl_posix_spawnattr_setpgroup # endif _GL_FUNCDECL_RPL (posix_spawnattr_setpgroup, int, (posix_spawnattr_t *__attr, pid_t __pgroup) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawnattr_setpgroup, int, (posix_spawnattr_t *__attr, pid_t __pgroup)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawnattr_setpgroup, int, (posix_spawnattr_t *__attr, pid_t __pgroup) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_setpgroup, int, (posix_spawnattr_t *__attr, pid_t __pgroup)); # endif _GL_CXXALIASWARN (posix_spawnattr_setpgroup); #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_setpgroup # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETPGROUP _GL_WARN_ON_USE (posix_spawnattr_setpgroup, "posix_spawnattr_setpgroup is unportable - " "use gnulib module posix_spawnattr_setpgroup for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ /* Get scheduling policy from the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_getschedpolicy rpl_posix_spawnattr_getschedpolicy # endif _GL_FUNCDECL_RPL (posix_spawnattr_getschedpolicy, int, (const posix_spawnattr_t *_Restrict_ __attr, int *_Restrict_ __schedpolicy) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_getschedpolicy, int, (const posix_spawnattr_t *_Restrict_ __attr, int *_Restrict_ __schedpolicy)); # else # if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDULER == 0 _GL_FUNCDECL_SYS (posix_spawnattr_getschedpolicy, int, (const posix_spawnattr_t *_Restrict_ __attr, int *_Restrict_ __schedpolicy) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_getschedpolicy, int, (const posix_spawnattr_t *_Restrict_ __attr, int *_Restrict_ __schedpolicy)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawnattr_getschedpolicy); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_getschedpolicy # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPOLICY _GL_WARN_ON_USE (posix_spawnattr_getschedpolicy, "posix_spawnattr_getschedpolicy is unportable - " "use gnulib module posix_spawnattr_getschedpolicy for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ /* Store scheduling policy in the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_setschedpolicy rpl_posix_spawnattr_setschedpolicy # endif _GL_FUNCDECL_RPL (posix_spawnattr_setschedpolicy, int, (posix_spawnattr_t *__attr, int __schedpolicy) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawnattr_setschedpolicy, int, (posix_spawnattr_t *__attr, int __schedpolicy)); # else # if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDULER == 0 _GL_FUNCDECL_SYS (posix_spawnattr_setschedpolicy, int, (posix_spawnattr_t *__attr, int __schedpolicy) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_setschedpolicy, int, (posix_spawnattr_t *__attr, int __schedpolicy)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawnattr_setschedpolicy); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_setschedpolicy # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPOLICY _GL_WARN_ON_USE (posix_spawnattr_setschedpolicy, "posix_spawnattr_setschedpolicy is unportable - " "use gnulib module posix_spawnattr_setschedpolicy for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ /* Get scheduling parameters from the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_getschedparam rpl_posix_spawnattr_getschedparam # endif _GL_FUNCDECL_RPL (posix_spawnattr_getschedparam, int, (const posix_spawnattr_t *_Restrict_ __attr, struct sched_param *_Restrict_ __schedparam) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_getschedparam, int, (const posix_spawnattr_t *_Restrict_ __attr, struct sched_param *_Restrict_ __schedparam)); # else # if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDPARAM == 0 _GL_FUNCDECL_SYS (posix_spawnattr_getschedparam, int, (const posix_spawnattr_t *_Restrict_ __attr, struct sched_param *_Restrict_ __schedparam) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_getschedparam, int, (const posix_spawnattr_t *_Restrict_ __attr, struct sched_param *_Restrict_ __schedparam)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawnattr_getschedparam); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_getschedparam # if HAVE_RAW_DECL_POSIX_SPAWNATTR_GETSCHEDPARAM _GL_WARN_ON_USE (posix_spawnattr_getschedparam, "posix_spawnattr_getschedparam is unportable - " "use gnulib module posix_spawnattr_getschedparam for portability"); # endif #endif #if @GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ /* Store scheduling parameters in the attribute structure. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawnattr_setschedparam rpl_posix_spawnattr_setschedparam # endif _GL_FUNCDECL_RPL (posix_spawnattr_setschedparam, int, (posix_spawnattr_t *_Restrict_ __attr, const struct sched_param *_Restrict_ __schedparam) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawnattr_setschedparam, int, (posix_spawnattr_t *_Restrict_ __attr, const struct sched_param *_Restrict_ __schedparam)); # else # if !@HAVE_POSIX_SPAWN@ || POSIX_SPAWN_SETSCHEDPARAM == 0 _GL_FUNCDECL_SYS (posix_spawnattr_setschedparam, int, (posix_spawnattr_t *_Restrict_ __attr, const struct sched_param *_Restrict_ __schedparam) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawnattr_setschedparam, int, (posix_spawnattr_t *_Restrict_ __attr, const struct sched_param *_Restrict_ __schedparam)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawnattr_setschedparam); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawnattr_setschedparam # if HAVE_RAW_DECL_POSIX_SPAWNATTR_SETSCHEDPARAM _GL_WARN_ON_USE (posix_spawnattr_setschedparam, "posix_spawnattr_setschedparam is unportable - " "use gnulib module posix_spawnattr_setschedparam for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ /* Initialize data structure for file attribute for 'spawn' call. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_init rpl_posix_spawn_file_actions_init # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_init, int, (posix_spawn_file_actions_t *__file_actions) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_init, int, (posix_spawn_file_actions_t *__file_actions)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_init, int, (posix_spawn_file_actions_t *__file_actions) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_init, int, (posix_spawn_file_actions_t *__file_actions)); # endif _GL_CXXALIASWARN (posix_spawn_file_actions_init); #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_init # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_INIT _GL_WARN_ON_USE (posix_spawn_file_actions_init, "posix_spawn_file_actions_init is unportable - " "use gnulib module posix_spawn_file_actions_init for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ /* Free resources associated with FILE-ACTIONS. */ # if @REPLACE_POSIX_SPAWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_destroy rpl_posix_spawn_file_actions_destroy # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_destroy, int, (posix_spawn_file_actions_t *__file_actions) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_destroy, int, (posix_spawn_file_actions_t *__file_actions)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_destroy, int, (posix_spawn_file_actions_t *__file_actions) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_destroy, int, (posix_spawn_file_actions_t *__file_actions)); # endif _GL_CXXALIASWARN (posix_spawn_file_actions_destroy); #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_destroy # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_DESTROY _GL_WARN_ON_USE (posix_spawn_file_actions_destroy, "posix_spawn_file_actions_destroy is unportable - " "use gnulib module posix_spawn_file_actions_destroy for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ /* Add an action to FILE-ACTIONS which tells the implementation to call 'open' for the given file during the 'spawn' call. */ # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_addopen rpl_posix_spawn_file_actions_addopen # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_addopen, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd, const char *_Restrict_ __path, int __oflag, mode_t __mode) __THROW _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_addopen, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd, const char *_Restrict_ __path, int __oflag, mode_t __mode)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_addopen, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd, const char *_Restrict_ __path, int __oflag, mode_t __mode) __THROW _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_addopen, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd, const char *_Restrict_ __path, int __oflag, mode_t __mode)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawn_file_actions_addopen); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_addopen # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN _GL_WARN_ON_USE (posix_spawn_file_actions_addopen, "posix_spawn_file_actions_addopen is unportable - " "use gnulib module posix_spawn_file_actions_addopen for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ /* Add an action to FILE-ACTIONS which tells the implementation to call 'close' for the given file descriptor during the 'spawn' call. */ # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_addclose rpl_posix_spawn_file_actions_addclose # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_addclose, int, (posix_spawn_file_actions_t *__file_actions, int __fd) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_addclose, int, (posix_spawn_file_actions_t *__file_actions, int __fd)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_addclose, int, (posix_spawn_file_actions_t *__file_actions, int __fd) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_addclose, int, (posix_spawn_file_actions_t *__file_actions, int __fd)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawn_file_actions_addclose); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_addclose # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE _GL_WARN_ON_USE (posix_spawn_file_actions_addclose, "posix_spawn_file_actions_addclose is unportable - " "use gnulib module posix_spawn_file_actions_addclose for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ /* Add an action to FILE-ACTIONS which tells the implementation to call 'dup2' for the given file descriptors during the 'spawn' call. */ # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_adddup2 rpl_posix_spawn_file_actions_adddup2 # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_adddup2, int, (posix_spawn_file_actions_t *__file_actions, int __fd, int __newfd) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_adddup2, int, (posix_spawn_file_actions_t *__file_actions, int __fd, int __newfd)); # else # if !@HAVE_POSIX_SPAWN@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_adddup2, int, (posix_spawn_file_actions_t *__file_actions, int __fd, int __newfd) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_adddup2, int, (posix_spawn_file_actions_t *__file_actions, int __fd, int __newfd)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (posix_spawn_file_actions_adddup2); # endif #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_adddup2 # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 _GL_WARN_ON_USE (posix_spawn_file_actions_adddup2, "posix_spawn_file_actions_adddup2 is unportable - " "use gnulib module posix_spawn_file_actions_adddup2 for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ /* Add an action to FILE-ACTIONS which tells the implementation to call 'chdir' to the given directory during the 'spawn' call. */ # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_addchdir rpl_posix_spawn_file_actions_addchdir # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_addchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, const char *_Restrict_ __path) __THROW _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_addchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, const char *_Restrict_ __path)); # else # if !@HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_addchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, const char *_Restrict_ __path) __THROW _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_addchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, const char *_Restrict_ __path)); # endif _GL_CXXALIASWARN (posix_spawn_file_actions_addchdir); #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_addchdir # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR _GL_WARN_ON_USE (posix_spawn_file_actions_addchdir, "posix_spawn_file_actions_addchdir is unportable - " "use gnulib module posix_spawn_file_actions_addchdir for portability"); # endif #endif #if @GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ /* Add an action to FILE-ACTIONS which tells the implementation to call 'fchdir' to the given directory during the 'spawn' call. */ # if @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define posix_spawn_file_actions_addfchdir rpl_posix_spawn_file_actions_addfchdir # endif _GL_FUNCDECL_RPL (posix_spawn_file_actions_addfchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd) __THROW _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (posix_spawn_file_actions_addfchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd)); # else # if !@HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ _GL_FUNCDECL_SYS (posix_spawn_file_actions_addfchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd) __THROW _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (posix_spawn_file_actions_addfchdir, int, (posix_spawn_file_actions_t *_Restrict_ __file_actions, int __fd)); # endif _GL_CXXALIASWARN (posix_spawn_file_actions_addfchdir); #elif defined GNULIB_POSIXCHECK # undef posix_spawn_file_actions_addfchdir # if HAVE_RAW_DECL_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR _GL_WARN_ON_USE (posix_spawn_file_actions_addfchdir, "posix_spawn_file_actions_addfchdir is unportable - " "use gnulib module posix_spawn_file_actions_addfchdir for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SPAWN_H */ #endif /* _@GUARD_PREFIX@_SPAWN_H */ #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/raise.c����������������������������������������������������������������������������0000644�0000000�0000000�00000003435�14226564450�012136� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a non-threads replacement for the POSIX raise function. Copyright (C) 2002-2003, 2005-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #include <config.h> /* Specification. */ #include <signal.h> #if HAVE_RAISE /* Native Windows platform. */ # include <errno.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Forward declaration. */ static int raise_nothrow (int sig); # else # define raise_nothrow raise # endif #else /* An old Unix platform. */ # include <unistd.h> #endif int raise (int sig) #undef raise { #if GNULIB_defined_signal_blocking && GNULIB_defined_SIGPIPE if (sig == SIGPIPE) return _gl_raise_SIGPIPE (); #endif #if HAVE_RAISE return raise_nothrow (sig); #else return kill (getpid (), sig); #endif } #if HAVE_RAISE && HAVE_MSVC_INVALID_PARAMETER_HANDLER static int raise_nothrow (int sig) { int result; TRY_MSVC_INVAL { result = raise (sig); } CATCH_MSVC_INVAL { result = -1; errno = EINVAL; } DONE_MSVC_INVAL; return result; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/exitfail.h�������������������������������������������������������������������������0000644�0000000�0000000�00000001424�14226564447�012647� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Failure exit status Copyright (C) 2002, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ extern int volatile exit_failure; ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/mkdir.c����������������������������������������������������������������������������0000644�0000000�0000000�00000005237�14226564450�012143� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* On some systems, mkdir ("foo/", 0700) fails because of the trailing slash. On those systems, this wrapper removes the trailing slash. Copyright (C) 2001, 2003, 2006, 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> /* Specification. */ #include <sys/stat.h> #include <errno.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "dirname.h" /* Disable the definition of mkdir to rpl_mkdir (from the <sys/stat.h> substitute) in this file. Otherwise, we'd get an endless recursion. */ #undef mkdir /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. Additionally, it declares _mkdir (and depending on compile flags, an alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, which are included in the <sys/stat.h> override. */ #if defined _WIN32 && ! defined __CYGWIN__ # define mkdir(name,mode) _mkdir (name) # define maybe_unused _GL_UNUSED #else # define maybe_unused /* empty */ #endif /* This function is required at least for NetBSD 1.5.2. */ int rpl_mkdir (char const *dir, maybe_unused mode_t mode) { int ret_val; char *tmp_dir; size_t len = strlen (dir); if (len && dir[len - 1] == '/') { tmp_dir = strdup (dir); if (!tmp_dir) { /* Rather than rely on strdup-posix, we set errno ourselves. */ errno = ENOMEM; return -1; } strip_trailing_slashes (tmp_dir); } else { tmp_dir = (char *) dir; } #if FUNC_MKDIR_DOT_BUG /* Additionally, cygwin 1.5 mistakenly creates a directory "d/./". */ { char *last = last_component (tmp_dir); if (*last == '.' && (last[1] == '\0' || (last[1] == '.' && last[2] == '\0'))) { struct stat st; if (stat (tmp_dir, &st) == 0 || errno == EOVERFLOW) errno = EEXIST; return -1; } } #endif /* FUNC_MKDIR_DOT_BUG */ ret_val = mkdir (tmp_dir, mode); if (tmp_dir != dir) free (tmp_dir); return ret_val; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/dup-safer.c������������������������������������������������������������������������0000644�0000000�0000000�00000002027�14226564446�012722� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke dup, but avoid some glitches. Copyright (C) 2001, 2004-2006, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include "unistd-safer.h" #include <fcntl.h> #include <unistd.h> /* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. */ int dup_safer (int fd) { return fcntl (fd, F_DUPFD, STDERR_FILENO + 1); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/warn-on-use.h����������������������������������������������������������������������0000644�0000000�0000000�00000015532�14226564451�013215� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for emitting warnings if a function is used. Copyright (C) 2010-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* _GL_WARN_ON_USE (function, "literal string") issues a declaration for FUNCTION which will then trigger a compiler warning containing the text of "literal string" anywhere that function is called, if supported by the compiler. If the compiler does not support this feature, the macro expands to an unused extern declaration. _GL_WARN_ON_USE_ATTRIBUTE ("literal string") expands to the attribute used in _GL_WARN_ON_USE. If the compiler does not support this feature, it expands to empty. These macros are useful for marking a function as a potential portability trap, with the intent that "literal string" include instructions on the replacement function that should be used instead. _GL_WARN_ON_USE is for functions with 'extern' linkage. _GL_WARN_ON_USE_ATTRIBUTE is for functions with 'static' or 'inline' linkage. However, one of the reasons that a function is a portability trap is if it has the wrong signature. Declaring FUNCTION with a different signature in C is a compilation error, so this macro must use the same type as any existing declaration so that programs that avoid the problematic FUNCTION do not fail to compile merely because they included a header that poisoned the function. But this implies that _GL_WARN_ON_USE is only safe to use if FUNCTION is known to already have a declaration. Use of this macro implies that there must not be any other macro hiding the declaration of FUNCTION; but undefining FUNCTION first is part of the poisoning process anyway (although for symbols that are provided only via a macro, the result is a compilation error rather than a warning containing "literal string"). Also note that in C++, it is only safe to use if FUNCTION has no overloads. For an example, it is possible to poison 'getline' by: - adding a call to gl_WARN_ON_USE_PREPARE([[#include <stdio.h>]], [getline]) in configure.ac, which potentially defines HAVE_RAW_DECL_GETLINE - adding this code to a header that wraps the system <stdio.h>: #undef getline #if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is required by POSIX 2008, but" "not universally present; use the gnulib module getline"); #endif It is not possible to directly poison global variables. But it is possible to write a wrapper accessor function, and poison that (less common usage, like &environ, will cause a compilation error rather than issue the nice warning, but the end result of informing the developer about their portability problem is still achieved): #if HAVE_RAW_DECL_ENVIRON static char *** rpl_environ (void) { return &environ; } _GL_WARN_ON_USE (rpl_environ, "environ is not always properly declared"); # undef environ # define environ (*rpl_environ ()) #endif or better (avoiding contradictory use of 'static' and 'extern'): #if HAVE_RAW_DECL_ENVIRON static char *** _GL_WARN_ON_USE_ATTRIBUTE ("environ is not always properly declared") rpl_environ (void) { return &environ; } # undef environ # define environ (*rpl_environ ()) #endif */ #ifndef _GL_WARN_ON_USE # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C __typeof__ (function) function __attribute__ ((__warning__ (message))) # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ __attribute__ ((__warning__ (message))) # elif __clang_major__ >= 4 /* Another compiler attribute is available in clang. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C __typeof__ (function) function \ __attribute__ ((__diagnose_if__ (1, message, "warning"))) # define _GL_WARN_ON_USE_ATTRIBUTE(message) \ __attribute__ ((__diagnose_if__ (1, message, "warning"))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C __typeof__ (function) function # define _GL_WARN_ON_USE_ATTRIBUTE(message) # else /* Unsupported. */ # define _GL_WARN_ON_USE(function, message) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # define _GL_WARN_ON_USE_ATTRIBUTE(message) # endif #endif /* _GL_WARN_ON_USE_CXX (function, rettype_gcc, rettype_clang, parameters_and_attributes, "message") is like _GL_WARN_ON_USE (function, "message"), except that in C++ mode the function is declared with the given prototype, consisting of return type, parameters, and attributes. This variant is useful for overloaded functions in C++. _GL_WARN_ON_USE does not work in this case. */ #ifndef _GL_WARN_ON_USE_CXX # if !defined __cplusplus # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ _GL_WARN_ON_USE (function, msg) # else # if 4 < __GNUC__ || (__GNUC__ == 4 && 3 <= __GNUC_MINOR__) /* A compiler attribute is available in gcc versions 4.3.0 and later. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_gcc function parameters_and_attributes \ __attribute__ ((__warning__ (msg))) # elif __clang_major__ >= 4 /* Another compiler attribute is available in clang. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_clang function parameters_and_attributes \ __attribute__ ((__diagnose_if__ (1, msg, "warning"))) # elif __GNUC__ >= 3 && GNULIB_STRICT_CHECKING /* Verify the existence of the function. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ extern rettype_gcc function parameters_and_attributes # else /* Unsupported. */ # define _GL_WARN_ON_USE_CXX(function,rettype_gcc,rettype_clang,parameters_and_attributes,msg) \ _GL_WARN_EXTERN_C int _gl_warn_on_use # endif # endif #endif /* _GL_WARN_EXTERN_C declaration; performs the declaration with C linkage. */ #ifndef _GL_WARN_EXTERN_C # if defined __cplusplus # define _GL_WARN_EXTERN_C extern "C" # else # define _GL_WARN_EXTERN_C extern # endif #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/unistd--.h�������������������������������������������������������������������������0000644�0000000�0000000�00000001744�14226564447�012507� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Like unistd.h, but redefine some names to avoid glitches. Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <unistd.h> #include "unistd-safer.h" #undef dup #define dup dup_safer #undef pipe #define pipe pipe_safer #if GNULIB_PIPE2_SAFER # undef pipe2 # define pipe2 pipe2_safer #endif ����������������������������recutils-1.9/lib/set-acl.c��������������������������������������������������������������������������0000644�0000000�0000000�00000003216�14226564450�012360� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* set-acl.c - set access control list equivalent to a mode Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert and Andreas Gruenbacher, and Bruno Haible. */ #include <config.h> #include "acl.h" #include <errno.h> #include "quote.h" #include "error.h" #include "gettext.h" #define _(msgid) gettext (msgid) /* Set the access control lists of a file. If DESC is a valid file descriptor, use file descriptor operations where available, else use filename based operations on NAME. If access control lists are not available, fchmod the target file to MODE. Also sets the non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX) to those from MODE if any are set. Return 0 if successful. On failure, output a diagnostic, set errno and return -1. */ int set_acl (char const *name, int desc, mode_t mode) { int ret = qset_acl (name, desc, mode); if (ret != 0) error (0, errno, _("setting permissions for %s"), quote (name)); return ret; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/quotearg.c�������������������������������������������������������������������������0000644�0000000�0000000�00000104553�14226564450�012665� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* quotearg.c - quote arguments for output Copyright (C) 1998-2002, 2004-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert <eggert@twinsun.com> */ /* Without this pragma, gcc 4.7.0 20111124 mistakenly suggests that the quoting_options_from_style function might be candidate for attribute 'pure' */ #if (__GNUC__ == 4 && 6 <= __GNUC_MINOR__) || 4 < __GNUC__ # pragma GCC diagnostic ignored "-Wsuggest-attribute=pure" #endif #include <config.h> #include "quotearg.h" #include "quote.h" #include "attribute.h" #include "minmax.h" #include "xalloc.h" #include "c-strcaseeq.h" #include "localcharset.h" #include <ctype.h> #include <errno.h> #include <limits.h> #include <stdbool.h> #include <stdint.h> #include <stdlib.h> #include <string.h> #include <wchar.h> #include <wctype.h> #include "gettext.h" #define _(msgid) gettext (msgid) #define N_(msgid) msgid #ifndef SIZE_MAX # define SIZE_MAX ((size_t) -1) #endif #define INT_BITS (sizeof (int) * CHAR_BIT) struct quoting_options { /* Basic quoting style. */ enum quoting_style style; /* Additional flags. Bitwise combination of enum quoting_flags. */ int flags; /* Quote the characters indicated by this bit vector even if the quoting style would not normally require them to be quoted. */ unsigned int quote_these_too[(UCHAR_MAX / INT_BITS) + 1]; /* The left quote for custom_quoting_style. */ char const *left_quote; /* The right quote for custom_quoting_style. */ char const *right_quote; }; /* Names of quoting styles. */ char const *const quoting_style_args[] = { "literal", "shell", "shell-always", "shell-escape", "shell-escape-always", "c", "c-maybe", "escape", "locale", "clocale", 0 }; /* Correspondences to quoting style names. */ enum quoting_style const quoting_style_vals[] = { literal_quoting_style, shell_quoting_style, shell_always_quoting_style, shell_escape_quoting_style, shell_escape_always_quoting_style, c_quoting_style, c_maybe_quoting_style, escape_quoting_style, locale_quoting_style, clocale_quoting_style }; /* The default quoting options. */ static struct quoting_options default_quoting_options; /* Allocate a new set of quoting options, with contents initially identical to O if O is not null, or to the default if O is null. It is the caller's responsibility to free the result. */ struct quoting_options * clone_quoting_options (struct quoting_options *o) { int e = errno; struct quoting_options *p = xmemdup (o ? o : &default_quoting_options, sizeof *o); errno = e; return p; } /* Get the value of O's quoting style. If O is null, use the default. */ enum quoting_style get_quoting_style (struct quoting_options const *o) { return (o ? o : &default_quoting_options)->style; } /* In O (or in the default if O is null), set the value of the quoting style to S. */ void set_quoting_style (struct quoting_options *o, enum quoting_style s) { (o ? o : &default_quoting_options)->style = s; } /* In O (or in the default if O is null), set the value of the quoting options for character C to I. Return the old value. Currently, the only values defined for I are 0 (the default) and 1 (which means to quote the character even if it would not otherwise be quoted). */ int set_char_quoting (struct quoting_options *o, char c, int i) { unsigned char uc = c; unsigned int *p = (o ? o : &default_quoting_options)->quote_these_too + uc / INT_BITS; int shift = uc % INT_BITS; int r = (*p >> shift) & 1; *p ^= ((i & 1) ^ r) << shift; return r; } /* In O (or in the default if O is null), set the value of the quoting options flag to I, which can be a bitwise combination of enum quoting_flags, or 0 for default behavior. Return the old value. */ int set_quoting_flags (struct quoting_options *o, int i) { int r; if (!o) o = &default_quoting_options; r = o->flags; o->flags = i; return r; } void set_custom_quoting (struct quoting_options *o, char const *left_quote, char const *right_quote) { if (!o) o = &default_quoting_options; o->style = custom_quoting_style; if (!left_quote || !right_quote) abort (); o->left_quote = left_quote; o->right_quote = right_quote; } /* Return quoting options for STYLE, with no extra quoting. */ static struct quoting_options /* NOT PURE!! */ quoting_options_from_style (enum quoting_style style) { struct quoting_options o = { literal_quoting_style, 0, { 0 }, NULL, NULL }; if (style == custom_quoting_style) abort (); o.style = style; return o; } /* MSGID approximates a quotation mark. Return its translation if it has one; otherwise, return either it or "\"", depending on S. S is either clocale_quoting_style or locale_quoting_style. */ static char const * gettext_quote (char const *msgid, enum quoting_style s) { char const *translation = _(msgid); char const *locale_code; if (translation != msgid) return translation; /* For UTF-8 and GB-18030, use single quotes U+2018 and U+2019. Here is a list of other locales that include U+2018 and U+2019: ISO-8859-7 0xA1 KOI8-T 0x91 CP869 0x8B CP874 0x91 CP932 0x81 0x65 CP936 0xA1 0xAE CP949 0xA1 0xAE CP950 0xA1 0xA5 CP1250 0x91 CP1251 0x91 CP1252 0x91 CP1253 0x91 CP1254 0x91 CP1255 0x91 CP1256 0x91 CP1257 0x91 EUC-JP 0xA1 0xC6 EUC-KR 0xA1 0xAE EUC-TW 0xA1 0xE4 BIG5 0xA1 0xA5 BIG5-HKSCS 0xA1 0xA5 EUC-CN 0xA1 0xAE GBK 0xA1 0xAE Georgian-PS 0x91 PT154 0x91 None of these is still in wide use; using iconv is overkill. */ locale_code = locale_charset (); if (STRCASEEQ (locale_code, "UTF-8", 'U','T','F','-','8',0,0,0,0)) return msgid[0] == '`' ? "\xe2\x80\x98": "\xe2\x80\x99"; if (STRCASEEQ (locale_code, "GB18030", 'G','B','1','8','0','3','0',0,0)) return msgid[0] == '`' ? "\xa1\ae": "\xa1\xaf"; return (s == clocale_quoting_style ? "\"" : "'"); } /* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of argument ARG (of size ARGSIZE), using QUOTING_STYLE, FLAGS, and QUOTE_THESE_TOO to control quoting. Terminate the output with a null character, and return the written size of the output, not counting the terminating null. If BUFFERSIZE is too small to store the output string, return the value that would have been returned had BUFFERSIZE been large enough. If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE. This function acts like quotearg_buffer (BUFFER, BUFFERSIZE, ARG, ARGSIZE, O), except it breaks O into its component pieces and is not careful about errno. */ static size_t quotearg_buffer_restyled (char *buffer, size_t buffersize, char const *arg, size_t argsize, enum quoting_style quoting_style, int flags, unsigned int const *quote_these_too, char const *left_quote, char const *right_quote) { size_t i; size_t len = 0; size_t orig_buffersize = 0; char const *quote_string = 0; size_t quote_string_len = 0; bool backslash_escapes = false; bool unibyte_locale = MB_CUR_MAX == 1; bool elide_outer_quotes = (flags & QA_ELIDE_OUTER_QUOTES) != 0; bool pending_shell_escape_end = false; bool encountered_single_quote = false; bool all_c_and_shell_quote_compat = true; #define STORE(c) \ do \ { \ if (len < buffersize) \ buffer[len] = (c); \ len++; \ } \ while (0) #define START_ESC() \ do \ { \ if (elide_outer_quotes) \ goto force_outer_quoting_style; \ escaping = true; \ if (quoting_style == shell_always_quoting_style \ && ! pending_shell_escape_end) \ { \ STORE ('\''); \ STORE ('$'); \ STORE ('\''); \ pending_shell_escape_end = true; \ } \ STORE ('\\'); \ } \ while (0) #define END_ESC() \ do \ { \ if (pending_shell_escape_end && ! escaping) \ { \ STORE ('\''); \ STORE ('\''); \ pending_shell_escape_end = false; \ } \ } \ while (0) process_input: switch (quoting_style) { case c_maybe_quoting_style: quoting_style = c_quoting_style; elide_outer_quotes = true; FALLTHROUGH; case c_quoting_style: if (!elide_outer_quotes) STORE ('"'); backslash_escapes = true; quote_string = "\""; quote_string_len = 1; break; case escape_quoting_style: backslash_escapes = true; elide_outer_quotes = false; break; case locale_quoting_style: case clocale_quoting_style: case custom_quoting_style: { if (quoting_style != custom_quoting_style) { /* TRANSLATORS: Get translations for open and closing quotation marks. The message catalog should translate "`" to a left quotation mark suitable for the locale, and similarly for "'". For example, a French Unicode local should translate these to U+00AB (LEFT-POINTING DOUBLE ANGLE QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE QUOTATION MARK), respectively. If the catalog has no translation, we will try to use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the current locale is not Unicode, locale_quoting_style will quote 'like this', and clocale_quoting_style will quote "like this". You should always include translations for "`" and "'" even if U+2018 and U+2019 are appropriate for your locale. If you don't know what to put here, please see <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> and use glyphs suitable for your language. */ left_quote = gettext_quote (N_("`"), quoting_style); right_quote = gettext_quote (N_("'"), quoting_style); } if (!elide_outer_quotes) for (quote_string = left_quote; *quote_string; quote_string++) STORE (*quote_string); backslash_escapes = true; quote_string = right_quote; quote_string_len = strlen (quote_string); } break; case shell_escape_quoting_style: backslash_escapes = true; FALLTHROUGH; case shell_quoting_style: elide_outer_quotes = true; FALLTHROUGH; case shell_escape_always_quoting_style: if (!elide_outer_quotes) backslash_escapes = true; FALLTHROUGH; case shell_always_quoting_style: quoting_style = shell_always_quoting_style; if (!elide_outer_quotes) STORE ('\''); quote_string = "'"; quote_string_len = 1; break; case literal_quoting_style: elide_outer_quotes = false; break; default: abort (); } for (i = 0; ! (argsize == SIZE_MAX ? arg[i] == '\0' : i == argsize); i++) { unsigned char c; unsigned char esc; bool is_right_quote = false; bool escaping = false; bool c_and_shell_quote_compat = false; if (backslash_escapes && quoting_style != shell_always_quoting_style && quote_string_len && (i + quote_string_len <= (argsize == SIZE_MAX && 1 < quote_string_len /* Use strlen only if we must: when argsize is SIZE_MAX, and when the quote string is more than 1 byte long. If we do call strlen, save the result. */ ? (argsize = strlen (arg)) : argsize)) && memcmp (arg + i, quote_string, quote_string_len) == 0) { if (elide_outer_quotes) goto force_outer_quoting_style; is_right_quote = true; } c = arg[i]; switch (c) { case '\0': if (backslash_escapes) { START_ESC (); /* If quote_string were to begin with digits, we'd need to test for the end of the arg as well. However, it's hard to imagine any locale that would use digits in quotes, and set_custom_quoting is documented not to accept them. Use only a single \0 with shell-escape as currently digits are not printed within $'...' */ if (quoting_style != shell_always_quoting_style && i + 1 < argsize && '0' <= arg[i + 1] && arg[i + 1] <= '9') { STORE ('0'); STORE ('0'); } c = '0'; /* We don't have to worry that this last '0' will be backslash-escaped because, again, quote_string should not start with it and because quote_these_too is documented as not accepting it. */ } else if (flags & QA_ELIDE_NULL_BYTES) continue; break; case '?': switch (quoting_style) { case shell_always_quoting_style: if (elide_outer_quotes) goto force_outer_quoting_style; break; case c_quoting_style: if ((flags & QA_SPLIT_TRIGRAPHS) && i + 2 < argsize && arg[i + 1] == '?') switch (arg[i + 2]) { case '!': case '\'': case '(': case ')': case '-': case '/': case '<': case '=': case '>': /* Escape the second '?' in what would otherwise be a trigraph. */ if (elide_outer_quotes) goto force_outer_quoting_style; c = arg[i + 2]; i += 2; STORE ('?'); STORE ('"'); STORE ('"'); STORE ('?'); break; default: break; } break; default: break; } break; case '\a': esc = 'a'; goto c_escape; case '\b': esc = 'b'; goto c_escape; case '\f': esc = 'f'; goto c_escape; case '\n': esc = 'n'; goto c_and_shell_escape; case '\r': esc = 'r'; goto c_and_shell_escape; case '\t': esc = 't'; goto c_and_shell_escape; case '\v': esc = 'v'; goto c_escape; case '\\': esc = c; /* Never need to escape '\' in shell case. */ if (quoting_style == shell_always_quoting_style) { if (elide_outer_quotes) goto force_outer_quoting_style; goto store_c; } /* No need to escape the escape if we are trying to elide outer quotes and nothing else is problematic. */ if (backslash_escapes && elide_outer_quotes && quote_string_len) goto store_c; c_and_shell_escape: if (quoting_style == shell_always_quoting_style && elide_outer_quotes) goto force_outer_quoting_style; /* fall through */ c_escape: if (backslash_escapes) { c = esc; goto store_escape; } break; case '{': case '}': /* sometimes special if isolated */ if (! (argsize == SIZE_MAX ? arg[1] == '\0' : argsize == 1)) break; FALLTHROUGH; case '#': case '~': if (i != 0) break; FALLTHROUGH; case ' ': c_and_shell_quote_compat = true; FALLTHROUGH; case '!': /* special in bash */ case '"': case '$': case '&': case '(': case ')': case '*': case ';': case '<': case '=': /* sometimes special in 0th or (with "set -k") later args */ case '>': case '[': case '^': /* special in old /bin/sh, e.g. SunOS 4.1.4 */ case '`': case '|': /* A shell special character. In theory, '$' and '`' could be the first bytes of multibyte characters, which means we should check them with mbrtowc, but in practice this doesn't happen so it's not worth worrying about. */ if (quoting_style == shell_always_quoting_style && elide_outer_quotes) goto force_outer_quoting_style; break; case '\'': encountered_single_quote = true; c_and_shell_quote_compat = true; if (quoting_style == shell_always_quoting_style) { if (elide_outer_quotes) goto force_outer_quoting_style; if (buffersize && ! orig_buffersize) { /* Just scan string to see if supports a more concise representation, rather than writing a longer string but returning the length of the more concise form. */ orig_buffersize = buffersize; buffersize = 0; } STORE ('\''); STORE ('\\'); STORE ('\''); pending_shell_escape_end = false; } break; case '%': case '+': case ',': case '-': case '.': case '/': case '0': case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': case ':': case 'A': case 'B': case 'C': case 'D': case 'E': case 'F': case 'G': case 'H': case 'I': case 'J': case 'K': case 'L': case 'M': case 'N': case 'O': case 'P': case 'Q': case 'R': case 'S': case 'T': case 'U': case 'V': case 'W': case 'X': case 'Y': case 'Z': case ']': case '_': case 'a': case 'b': case 'c': case 'd': case 'e': case 'f': case 'g': case 'h': case 'i': case 'j': case 'k': case 'l': case 'm': case 'n': case 'o': case 'p': case 'q': case 'r': case 's': case 't': case 'u': case 'v': case 'w': case 'x': case 'y': case 'z': /* These characters don't cause problems, no matter what the quoting style is. They cannot start multibyte sequences. A digit or a special letter would cause trouble if it appeared at the beginning of quote_string because we'd then escape by prepending a backslash. However, it's hard to imagine any locale that would use digits or letters as quotes, and set_custom_quoting is documented not to accept them. Also, a digit or a special letter would cause trouble if it appeared in quote_these_too, but that's also documented as not accepting them. */ c_and_shell_quote_compat = true; break; default: /* If we have a multibyte sequence, copy it until we reach its end, find an error, or come back to the initial shift state. For C-like styles, if the sequence has unprintable characters, escape the whole sequence, since we can't easily escape single characters within it. */ { /* Length of multibyte sequence found so far. */ size_t m; bool printable; if (unibyte_locale) { m = 1; printable = isprint (c) != 0; } else { mbstate_t mbstate; memset (&mbstate, 0, sizeof mbstate); m = 0; printable = true; if (argsize == SIZE_MAX) argsize = strlen (arg); do { wchar_t w; size_t bytes = mbrtowc (&w, &arg[i + m], argsize - (i + m), &mbstate); if (bytes == 0) break; else if (bytes == (size_t) -1) { printable = false; break; } else if (bytes == (size_t) -2) { printable = false; while (i + m < argsize && arg[i + m]) m++; break; } else { /* Work around a bug with older shells that "see" a '\' that is really the 2nd byte of a multibyte character. In practice the problem is limited to ASCII chars >= '@' that are shell special chars. */ if ('[' == 0x5b && elide_outer_quotes && quoting_style == shell_always_quoting_style) { size_t j; for (j = 1; j < bytes; j++) switch (arg[i + m + j]) { case '[': case '\\': case '^': case '`': case '|': goto force_outer_quoting_style; default: break; } } if (! iswprint (w)) printable = false; m += bytes; } } while (! mbsinit (&mbstate)); } c_and_shell_quote_compat = printable; if (1 < m || (backslash_escapes && ! printable)) { /* Output a multibyte sequence, or an escaped unprintable unibyte character. */ size_t ilim = i + m; for (;;) { if (backslash_escapes && ! printable) { START_ESC (); STORE ('0' + (c >> 6)); STORE ('0' + ((c >> 3) & 7)); c = '0' + (c & 7); } else if (is_right_quote) { STORE ('\\'); is_right_quote = false; } if (ilim <= i + 1) break; END_ESC (); STORE (c); c = arg[++i]; } goto store_c; } } } if (! (((backslash_escapes && quoting_style != shell_always_quoting_style) || elide_outer_quotes) && quote_these_too && quote_these_too[c / INT_BITS] >> (c % INT_BITS) & 1) && !is_right_quote) goto store_c; store_escape: START_ESC (); store_c: END_ESC (); STORE (c); if (! c_and_shell_quote_compat) all_c_and_shell_quote_compat = false; } if (len == 0 && quoting_style == shell_always_quoting_style && elide_outer_quotes) goto force_outer_quoting_style; /* Single shell quotes (') are commonly enough used as an apostrophe, that we attempt to minimize the quoting in this case. Note itʼs better to use the apostrophe modifier "\u02BC" if possible, as that renders better and works with the word match regex \W+ etc. */ if (quoting_style == shell_always_quoting_style && ! elide_outer_quotes && encountered_single_quote) { if (all_c_and_shell_quote_compat) return quotearg_buffer_restyled (buffer, orig_buffersize, arg, argsize, c_quoting_style, flags, quote_these_too, left_quote, right_quote); else if (! buffersize && orig_buffersize) { /* Disable read-only scan, and reprocess to write quoted string. */ buffersize = orig_buffersize; len = 0; goto process_input; } } if (quote_string && !elide_outer_quotes) for (; *quote_string; quote_string++) STORE (*quote_string); if (len < buffersize) buffer[len] = '\0'; return len; force_outer_quoting_style: /* Don't reuse quote_these_too, since the addition of outer quotes sufficiently quotes the specified characters. */ if (quoting_style == shell_always_quoting_style && backslash_escapes) quoting_style = shell_escape_always_quoting_style; return quotearg_buffer_restyled (buffer, buffersize, arg, argsize, quoting_style, flags & ~QA_ELIDE_OUTER_QUOTES, NULL, left_quote, right_quote); } /* Place into buffer BUFFER (of size BUFFERSIZE) a quoted version of argument ARG (of size ARGSIZE), using O to control quoting. If O is null, use the default. Terminate the output with a null character, and return the written size of the output, not counting the terminating null. If BUFFERSIZE is too small to store the output string, return the value that would have been returned had BUFFERSIZE been large enough. If ARGSIZE is SIZE_MAX, use the string length of the argument for ARGSIZE. */ size_t quotearg_buffer (char *buffer, size_t buffersize, char const *arg, size_t argsize, struct quoting_options const *o) { struct quoting_options const *p = o ? o : &default_quoting_options; int e = errno; size_t r = quotearg_buffer_restyled (buffer, buffersize, arg, argsize, p->style, p->flags, p->quote_these_too, p->left_quote, p->right_quote); errno = e; return r; } char * quotearg_alloc (char const *arg, size_t argsize, struct quoting_options const *o) { return quotearg_alloc_mem (arg, argsize, NULL, o); } /* Like quotearg_buffer (..., ARG, ARGSIZE, O), except return newly allocated storage containing the quoted string, and store the resulting size into *SIZE, if non-NULL. The result can contain embedded null bytes only if ARGSIZE is not SIZE_MAX, SIZE is not NULL, and set_quoting_flags has not set the null byte elision flag. */ char * quotearg_alloc_mem (char const *arg, size_t argsize, size_t *size, struct quoting_options const *o) { struct quoting_options const *p = o ? o : &default_quoting_options; int e = errno; /* Elide embedded null bytes if we can't return a size. */ int flags = p->flags | (size ? 0 : QA_ELIDE_NULL_BYTES); size_t bufsize = quotearg_buffer_restyled (0, 0, arg, argsize, p->style, flags, p->quote_these_too, p->left_quote, p->right_quote) + 1; char *buf = xcharalloc (bufsize); quotearg_buffer_restyled (buf, bufsize, arg, argsize, p->style, flags, p->quote_these_too, p->left_quote, p->right_quote); errno = e; if (size) *size = bufsize - 1; return buf; } /* A storage slot with size and pointer to a value. */ struct slotvec { size_t size; char *val; }; /* Preallocate a slot 0 buffer, so that the caller can always quote one small component of a "memory exhausted" message in slot 0. */ static char slot0[256]; static int nslots = 1; static struct slotvec slotvec0 = {sizeof slot0, slot0}; static struct slotvec *slotvec = &slotvec0; void quotearg_free (void) { struct slotvec *sv = slotvec; int i; for (i = 1; i < nslots; i++) free (sv[i].val); if (sv[0].val != slot0) { free (sv[0].val); slotvec0.size = sizeof slot0; slotvec0.val = slot0; } if (sv != &slotvec0) { free (sv); slotvec = &slotvec0; } nslots = 1; } /* Use storage slot N to return a quoted version of argument ARG. ARG is of size ARGSIZE, but if that is SIZE_MAX, ARG is a null-terminated string. OPTIONS specifies the quoting options. The returned value points to static storage that can be reused by the next call to this function with the same value of N. N must be nonnegative; it is typically small, and must be less than MIN (INT_MAX, IDX_MAX). The type of N is signed to allow for future extensions (using negative values). */ static char * quotearg_n_options (int n, char const *arg, size_t argsize, struct quoting_options const *options) { int e = errno; struct slotvec *sv = slotvec; int nslots_max = MIN (INT_MAX, IDX_MAX); if (! (0 <= n && n < nslots_max)) abort (); if (nslots <= n) { bool preallocated = (sv == &slotvec0); idx_t new_nslots = nslots; slotvec = sv = xpalloc (preallocated ? NULL : sv, &new_nslots, n - nslots + 1, nslots_max, sizeof *sv); if (preallocated) *sv = slotvec0; memset (sv + nslots, 0, (new_nslots - nslots) * sizeof *sv); nslots = new_nslots; } { size_t size = sv[n].size; char *val = sv[n].val; /* Elide embedded null bytes since we don't return a size. */ int flags = options->flags | QA_ELIDE_NULL_BYTES; size_t qsize = quotearg_buffer_restyled (val, size, arg, argsize, options->style, flags, options->quote_these_too, options->left_quote, options->right_quote); if (size <= qsize) { sv[n].size = size = qsize + 1; if (val != slot0) free (val); sv[n].val = val = xcharalloc (size); quotearg_buffer_restyled (val, size, arg, argsize, options->style, flags, options->quote_these_too, options->left_quote, options->right_quote); } errno = e; return val; } } char * quotearg_n (int n, char const *arg) { return quotearg_n_options (n, arg, SIZE_MAX, &default_quoting_options); } char * quotearg_n_mem (int n, char const *arg, size_t argsize) { return quotearg_n_options (n, arg, argsize, &default_quoting_options); } char * quotearg (char const *arg) { return quotearg_n (0, arg); } char * quotearg_mem (char const *arg, size_t argsize) { return quotearg_n_mem (0, arg, argsize); } char * quotearg_n_style (int n, enum quoting_style s, char const *arg) { struct quoting_options const o = quoting_options_from_style (s); return quotearg_n_options (n, arg, SIZE_MAX, &o); } char * quotearg_n_style_mem (int n, enum quoting_style s, char const *arg, size_t argsize) { struct quoting_options const o = quoting_options_from_style (s); return quotearg_n_options (n, arg, argsize, &o); } char * quotearg_style (enum quoting_style s, char const *arg) { return quotearg_n_style (0, s, arg); } char * quotearg_style_mem (enum quoting_style s, char const *arg, size_t argsize) { return quotearg_n_style_mem (0, s, arg, argsize); } char * quotearg_char_mem (char const *arg, size_t argsize, char ch) { struct quoting_options options; options = default_quoting_options; set_char_quoting (&options, ch, 1); return quotearg_n_options (0, arg, argsize, &options); } char * quotearg_char (char const *arg, char ch) { return quotearg_char_mem (arg, SIZE_MAX, ch); } char * quotearg_colon (char const *arg) { return quotearg_char (arg, ':'); } char * quotearg_colon_mem (char const *arg, size_t argsize) { return quotearg_char_mem (arg, argsize, ':'); } char * quotearg_n_style_colon (int n, enum quoting_style s, char const *arg) { struct quoting_options options; options = quoting_options_from_style (s); set_char_quoting (&options, ':', 1); return quotearg_n_options (n, arg, SIZE_MAX, &options); } char * quotearg_n_custom (int n, char const *left_quote, char const *right_quote, char const *arg) { return quotearg_n_custom_mem (n, left_quote, right_quote, arg, SIZE_MAX); } char * quotearg_n_custom_mem (int n, char const *left_quote, char const *right_quote, char const *arg, size_t argsize) { struct quoting_options o = default_quoting_options; set_custom_quoting (&o, left_quote, right_quote); return quotearg_n_options (n, arg, argsize, &o); } char * quotearg_custom (char const *left_quote, char const *right_quote, char const *arg) { return quotearg_n_custom (0, left_quote, right_quote, arg); } char * quotearg_custom_mem (char const *left_quote, char const *right_quote, char const *arg, size_t argsize) { return quotearg_n_custom_mem (0, left_quote, right_quote, arg, argsize); } /* The quoting option used by the functions of quote.h. */ struct quoting_options quote_quoting_options = { locale_quoting_style, 0, { 0 }, NULL, NULL }; char const * quote_n_mem (int n, char const *arg, size_t argsize) { return quotearg_n_options (n, arg, argsize, "e_quoting_options); } char const * quote_mem (char const *arg, size_t argsize) { return quote_n_mem (0, arg, argsize); } char const * quote_n (int n, char const *arg) { return quote_n_mem (n, arg, SIZE_MAX); } char const * quote (char const *arg) { return quote_n (0, arg); } /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ �����������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fstatat.c��������������������������������������������������������������������������0000644�0000000�0000000�00000011215�14226564446�012501� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around an fstatat bug on Solaris 9. Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Jim Meyering. */ /* If the user's config.h happens to include <sys/stat.h>, let it include only the system's <sys/stat.h> here, so that orig_fstatat doesn't recurse to rpl_fstatat. */ #define __need_system_sys_stat_h #include <config.h> /* Get the original definition of fstatat. It might be defined as a macro. */ #include <sys/types.h> #include <sys/stat.h> #undef __need_system_sys_stat_h #if HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG static int orig_fstatat (int fd, char const *filename, struct stat *buf, int flags) { return fstatat (fd, filename, buf, flags); } #endif #ifdef __osf__ /* Write "sys/stat.h" here, not <sys/stat.h>, otherwise OSF/1 5.1 DTK cc eliminates this include because of the preliminary #include <sys/stat.h> above. */ # include "sys/stat.h" #else # include <sys/stat.h> #endif #include "stat-time.h" #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <string.h> #if HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG # ifndef LSTAT_FOLLOWS_SLASHED_SYMLINK # define LSTAT_FOLLOWS_SLASHED_SYMLINK 0 # endif static int normal_fstatat (int fd, char const *file, struct stat *st, int flag) { return stat_time_normalize (orig_fstatat (fd, file, st, flag), st); } /* fstatat should always follow symbolic links that end in /, but on Solaris 9 it doesn't if AT_SYMLINK_NOFOLLOW is specified. Likewise, trailing slash on a non-directory should be an error. These are the same problems that lstat.c and stat.c address, so solve it in a similar way. AIX 7.1 fstatat (AT_FDCWD, ..., 0) always fails, which is a bug. Work around this bug if FSTATAT_AT_FDCWD_0_BROKEN is nonzero. */ int rpl_fstatat (int fd, char const *file, struct stat *st, int flag) { int result = normal_fstatat (fd, file, st, flag); size_t len; if (LSTAT_FOLLOWS_SLASHED_SYMLINK || result != 0) return result; len = strlen (file); if (flag & AT_SYMLINK_NOFOLLOW) { /* Fix lstat behavior. */ if (file[len - 1] != '/' || S_ISDIR (st->st_mode)) return 0; if (!S_ISLNK (st->st_mode)) { errno = ENOTDIR; return -1; } result = normal_fstatat (fd, file, st, flag & ~AT_SYMLINK_NOFOLLOW); } /* Fix stat behavior. */ if (result == 0 && !S_ISDIR (st->st_mode) && file[len - 1] == '/') { errno = ENOTDIR; return -1; } return result; } #else /* ! (HAVE_FSTATAT && HAVE_WORKING_FSTATAT_ZERO_FLAG) */ /* On mingw, the gnulib <sys/stat.h> defines 'stat' as a function-like macro; but using it in AT_FUNC_F2 causes compilation failure because the preprocessor sees a use of a macro that requires two arguments but is only given one. Hence, we need an inline forwarder to get past the preprocessor. */ static int stat_func (char const *name, struct stat *st) { return stat (name, st); } /* Likewise, if there is no native 'lstat', then the gnulib <sys/stat.h> defined it as stat, which also needs adjustment. */ # if !HAVE_LSTAT # undef lstat # define lstat stat_func # endif /* Replacement for Solaris' function by the same name. <https://www.google.com/search?q=fstatat+site:docs.oracle.com> First, try to simulate it via l?stat ("/proc/self/fd/FD/FILE"). Failing that, simulate it via save_cwd/fchdir/(stat|lstat)/restore_cwd. If either the save_cwd or the restore_cwd fails (relatively unlikely), then give a diagnostic and exit nonzero. Otherwise, this function works just like Solaris' fstatat. */ # define AT_FUNC_NAME fstatat # define AT_FUNC_F1 lstat # define AT_FUNC_F2 stat_func # define AT_FUNC_USE_F1_COND AT_SYMLINK_NOFOLLOW # define AT_FUNC_POST_FILE_PARAM_DECLS , struct stat *st, int flag # define AT_FUNC_POST_FILE_ARGS , st # include "at-func.c" # undef AT_FUNC_NAME # undef AT_FUNC_F1 # undef AT_FUNC_F2 # undef AT_FUNC_USE_F1_COND # undef AT_FUNC_POST_FILE_PARAM_DECLS # undef AT_FUNC_POST_FILE_ARGS #endif /* !HAVE_FSTATAT */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/spawnattr_init.c�������������������������������������������������������������������0000644�0000000�0000000�00000002153�14226564451�014076� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <string.h> /* Initialize data structure for file attribute for 'spawn' call. */ int posix_spawnattr_init (posix_spawnattr_t *attr) { /* All elements have to be initialized to the default values which is generally zero. */ memset (attr, '\0', sizeof (*attr)); return 0; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/windows-mutex.h��������������������������������������������������������������������0000644�0000000�0000000�00000003175�14226564451�013674� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain mutexes (native Windows implementation). Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_MUTEX_H #define _WINDOWS_MUTEX_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include "windows-initguard.h" typedef struct { glwthread_initguard_t guard; /* protects the initialization */ CRITICAL_SECTION lock; } glwthread_mutex_t; #define GLWTHREAD_MUTEX_INIT { GLWTHREAD_INITGUARD_INIT } #ifdef __cplusplus extern "C" { #endif extern void glwthread_mutex_init (glwthread_mutex_t *mutex); extern int glwthread_mutex_lock (glwthread_mutex_t *mutex); extern int glwthread_mutex_trylock (glwthread_mutex_t *mutex); extern int glwthread_mutex_unlock (glwthread_mutex_t *mutex); extern int glwthread_mutex_destroy (glwthread_mutex_t *mutex); #ifdef __cplusplus } #endif #endif /* _WINDOWS_MUTEX_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/closeout.h�������������������������������������������������������������������������0000644�0000000�0000000�00000002043�14226564447�012675� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close standard output and standard error. Copyright (C) 1998, 2000, 2003-2004, 2006, 2008-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef CLOSEOUT_H # define CLOSEOUT_H 1 # include <stdbool.h> # ifdef __cplusplus extern "C" { # endif void close_stdout_set_file_name (const char *file); void close_stdout_set_ignore_EPIPE (bool ignore); void close_stdout (void); # ifdef __cplusplus } # endif #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/strerror-override.c����������������������������������������������������������������0000644�0000000�0000000�00000021646�14226564451�014537� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror-override.c --- POSIX compatible system error routine Copyright (C) 2010-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2010. */ #include <config.h> #include "strerror-override.h" #include <errno.h> #if GNULIB_defined_EWINSOCK /* native Windows platforms */ # if HAVE_WINSOCK2_H # include <winsock2.h> # endif #endif #if !GNULIB_defined_strerror_override_macro /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ const char * strerror_override (int errnum) { /* These error messages are taken from glibc/sysdeps/gnu/errlist.c. */ switch (errnum) { # if REPLACE_STRERROR_0 case 0: return "Success"; # endif # if GNULIB_defined_ESOCK /* native Windows platforms with older <errno.h> */ case EINPROGRESS: return "Operation now in progress"; case EALREADY: return "Operation already in progress"; case ENOTSOCK: return "Socket operation on non-socket"; case EDESTADDRREQ: return "Destination address required"; case EMSGSIZE: return "Message too long"; case EPROTOTYPE: return "Protocol wrong type for socket"; case ENOPROTOOPT: return "Protocol not available"; case EPROTONOSUPPORT: return "Protocol not supported"; case EOPNOTSUPP: return "Operation not supported"; case EAFNOSUPPORT: return "Address family not supported by protocol"; case EADDRINUSE: return "Address already in use"; case EADDRNOTAVAIL: return "Cannot assign requested address"; case ENETDOWN: return "Network is down"; case ENETUNREACH: return "Network is unreachable"; case ECONNRESET: return "Connection reset by peer"; case ENOBUFS: return "No buffer space available"; case EISCONN: return "Transport endpoint is already connected"; case ENOTCONN: return "Transport endpoint is not connected"; case ETIMEDOUT: return "Connection timed out"; case ECONNREFUSED: return "Connection refused"; case ELOOP: return "Too many levels of symbolic links"; case EHOSTUNREACH: return "No route to host"; case EWOULDBLOCK: return "Operation would block"; # endif # if GNULIB_defined_ESTREAMS /* native Windows platforms with older <errno.h> */ case ETXTBSY: return "Text file busy"; case ENODATA: return "No data available"; case ENOSR: return "Out of streams resources"; case ENOSTR: return "Device not a stream"; case ETIME: return "Timer expired"; case EOTHER: return "Other error"; # endif # if GNULIB_defined_EWINSOCK /* native Windows platforms */ case ESOCKTNOSUPPORT: return "Socket type not supported"; case EPFNOSUPPORT: return "Protocol family not supported"; case ESHUTDOWN: return "Cannot send after transport endpoint shutdown"; case ETOOMANYREFS: return "Too many references: cannot splice"; case EHOSTDOWN: return "Host is down"; case EPROCLIM: return "Too many processes"; case EUSERS: return "Too many users"; case EDQUOT: return "Disk quota exceeded"; case ESTALE: return "Stale NFS file handle"; case EREMOTE: return "Object is remote"; # if HAVE_WINSOCK2_H /* WSA_INVALID_HANDLE maps to EBADF */ /* WSA_NOT_ENOUGH_MEMORY maps to ENOMEM */ /* WSA_INVALID_PARAMETER maps to EINVAL */ case WSA_OPERATION_ABORTED: return "Overlapped operation aborted"; case WSA_IO_INCOMPLETE: return "Overlapped I/O event object not in signaled state"; case WSA_IO_PENDING: return "Overlapped operations will complete later"; /* WSAEINTR maps to EINTR */ /* WSAEBADF maps to EBADF */ /* WSAEACCES maps to EACCES */ /* WSAEFAULT maps to EFAULT */ /* WSAEINVAL maps to EINVAL */ /* WSAEMFILE maps to EMFILE */ /* WSAEWOULDBLOCK maps to EWOULDBLOCK */ /* WSAEINPROGRESS maps to EINPROGRESS */ /* WSAEALREADY maps to EALREADY */ /* WSAENOTSOCK maps to ENOTSOCK */ /* WSAEDESTADDRREQ maps to EDESTADDRREQ */ /* WSAEMSGSIZE maps to EMSGSIZE */ /* WSAEPROTOTYPE maps to EPROTOTYPE */ /* WSAENOPROTOOPT maps to ENOPROTOOPT */ /* WSAEPROTONOSUPPORT maps to EPROTONOSUPPORT */ /* WSAESOCKTNOSUPPORT is ESOCKTNOSUPPORT */ /* WSAEOPNOTSUPP maps to EOPNOTSUPP */ /* WSAEPFNOSUPPORT is EPFNOSUPPORT */ /* WSAEAFNOSUPPORT maps to EAFNOSUPPORT */ /* WSAEADDRINUSE maps to EADDRINUSE */ /* WSAEADDRNOTAVAIL maps to EADDRNOTAVAIL */ /* WSAENETDOWN maps to ENETDOWN */ /* WSAENETUNREACH maps to ENETUNREACH */ /* WSAENETRESET maps to ENETRESET */ /* WSAECONNABORTED maps to ECONNABORTED */ /* WSAECONNRESET maps to ECONNRESET */ /* WSAENOBUFS maps to ENOBUFS */ /* WSAEISCONN maps to EISCONN */ /* WSAENOTCONN maps to ENOTCONN */ /* WSAESHUTDOWN is ESHUTDOWN */ /* WSAETOOMANYREFS is ETOOMANYREFS */ /* WSAETIMEDOUT maps to ETIMEDOUT */ /* WSAECONNREFUSED maps to ECONNREFUSED */ /* WSAELOOP maps to ELOOP */ /* WSAENAMETOOLONG maps to ENAMETOOLONG */ /* WSAEHOSTDOWN is EHOSTDOWN */ /* WSAEHOSTUNREACH maps to EHOSTUNREACH */ /* WSAENOTEMPTY maps to ENOTEMPTY */ /* WSAEPROCLIM is EPROCLIM */ /* WSAEUSERS is EUSERS */ /* WSAEDQUOT is EDQUOT */ /* WSAESTALE is ESTALE */ /* WSAEREMOTE is EREMOTE */ case WSASYSNOTREADY: return "Network subsystem is unavailable"; case WSAVERNOTSUPPORTED: return "Winsock.dll version out of range"; case WSANOTINITIALISED: return "Successful WSAStartup not yet performed"; case WSAEDISCON: return "Graceful shutdown in progress"; case WSAENOMORE: case WSA_E_NO_MORE: return "No more results"; case WSAECANCELLED: case WSA_E_CANCELLED: return "Call was canceled"; case WSAEINVALIDPROCTABLE: return "Procedure call table is invalid"; case WSAEINVALIDPROVIDER: return "Service provider is invalid"; case WSAEPROVIDERFAILEDINIT: return "Service provider failed to initialize"; case WSASYSCALLFAILURE: return "System call failure"; case WSASERVICE_NOT_FOUND: return "Service not found"; case WSATYPE_NOT_FOUND: return "Class type not found"; case WSAEREFUSED: return "Database query was refused"; case WSAHOST_NOT_FOUND: return "Host not found"; case WSATRY_AGAIN: return "Nonauthoritative host not found"; case WSANO_RECOVERY: return "Nonrecoverable error"; case WSANO_DATA: return "Valid name, no data record of requested type"; /* WSA_QOS_* omitted */ # endif # endif # if GNULIB_defined_ENOMSG case ENOMSG: return "No message of desired type"; # endif # if GNULIB_defined_EIDRM case EIDRM: return "Identifier removed"; # endif # if GNULIB_defined_ENOLINK case ENOLINK: return "Link has been severed"; # endif # if GNULIB_defined_EPROTO case EPROTO: return "Protocol error"; # endif # if GNULIB_defined_EMULTIHOP case EMULTIHOP: return "Multihop attempted"; # endif # if GNULIB_defined_EBADMSG case EBADMSG: return "Bad message"; # endif # if GNULIB_defined_EOVERFLOW case EOVERFLOW: return "Value too large for defined data type"; # endif # if GNULIB_defined_ENOTSUP case ENOTSUP: return "Not supported"; # endif # if GNULIB_defined_ENETRESET case ENETRESET: return "Network dropped connection on reset"; # endif # if GNULIB_defined_ECONNABORTED case ECONNABORTED: return "Software caused connection abort"; # endif # if GNULIB_defined_ESTALE case ESTALE: return "Stale NFS file handle"; # endif # if GNULIB_defined_EDQUOT case EDQUOT: return "Disk quota exceeded"; # endif # if GNULIB_defined_ECANCELED case ECANCELED: return "Operation canceled"; # endif # if GNULIB_defined_EOWNERDEAD case EOWNERDEAD: return "Owner died"; # endif # if GNULIB_defined_ENOTRECOVERABLE case ENOTRECOVERABLE: return "State not recoverable"; # endif # if GNULIB_defined_EILSEQ case EILSEQ: return "Invalid or incomplete multibyte or wide character"; # endif default: return NULL; } } #endif ������������������������������������������������������������������������������������������recutils-1.9/lib/waitpid.c��������������������������������������������������������������������������0000644�0000000�0000000�00000002016�14226564451�012467� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wait for process state change. Copyright (C) 2001-2003, 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <sys/wait.h> /* Implementation for native Windows systems. */ #include <process.h> /* for _cwait, WAIT_CHILD */ pid_t waitpid (pid_t pid, int *statusp, int options) { return _cwait (statusp, pid, WAIT_CHILD); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/alignof.h��������������������������������������������������������������������������0000644�0000000�0000000�00000004370�14226564447�012464� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine alignment of types. Copyright (C) 2003-2004, 2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _ALIGNOF_H #define _ALIGNOF_H #include <stddef.h> /* alignof_slot (TYPE) Determine the alignment of a structure slot (field) of a given type, at compile time. Note that the result depends on the ABI. This is the same as alignof (TYPE) and _Alignof (TYPE), defined in <stdalign.h> if __alignof_is_defined is 1. Note: The result cannot be used as a value for an 'enum' constant, due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */ #if defined __cplusplus template <class type> struct alignof_helper { char __slot1; type __slot2; }; # define alignof_slot(type) offsetof (alignof_helper<type>, __slot2) #else # define alignof_slot(type) offsetof (struct { char __slot1; type __slot2; }, __slot2) #endif /* alignof_type (TYPE) Determine the good alignment of an object of the given type at compile time. Note that this is not necessarily the same as alignof_slot(type). For example, with GNU C on x86 platforms and with clang on Linux/x86: alignof_type(long long) = 8, but alignof_slot(long long) = 4. And alignof_type(double) = 8, but - when -malign-double is not specified: alignof_slot(double) = 4, - when -malign-double is specified: alignof_slot(double) = 8. Note: The result cannot be used as a value for an 'enum' constant, due to bugs in HP-UX 10.20 cc and AIX 3.2.5 xlc. */ #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ # define alignof_type __alignof__ #else # define alignof_type alignof_slot #endif #endif /* _ALIGNOF_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/time_r.c���������������������������������������������������������������������������0000644�0000000�0000000�00000002335�14226564451�012311� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Reentrant time functions like localtime_r. Copyright (C) 2003, 2006-2007, 2010-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include <time.h> static struct tm * copy_tm_result (struct tm *dest, struct tm const *src) { if (! src) return 0; *dest = *src; return dest; } struct tm * gmtime_r (time_t const * restrict t, struct tm * restrict tp) { return copy_tm_result (tp, gmtime (t)); } struct tm * localtime_r (time_t const * restrict t, struct tm * restrict tp) { return copy_tm_result (tp, localtime (t)); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/unistd-safer.h���������������������������������������������������������������������0000644�0000000�0000000�00000002035�14226564447�013445� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke unistd-like functions, but avoid some glitches. Copyright (C) 2001, 2003, 2005, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Eric Blake. */ int dup_safer (int); int fd_safer (int); int pipe_safer (int[2]); #if GNULIB_FD_SAFER_FLAG int dup_safer_flag (int, int); int fd_safer_flag (int, int); #endif #if GNULIB_PIPE2_SAFER int pipe2_safer (int[2], int); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloca.c��������������������������������������������������������������������������0000644�0000000�0000000�00000007253�14226564450�012445� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Safe automatic memory allocation. Copyright (C) 2003, 2006-2007, 2009-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003, 2018. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> /* Specification. */ #include "malloca.h" #include "idx.h" #include "intprops.h" #include "verify.h" /* The speed critical point in this file is freea() applied to an alloca() result: it must be fast, to match the speed of alloca(). The speed of mmalloca() and freea() in the other case are not critical, because they are only invoked for big memory sizes. Here we use a bit in the address as an indicator, an idea by OndÅ™ej Bílka. malloca() can return three types of pointers: - Pointers ≡ 0 mod 2*sa_alignment_max come from stack allocation. - Pointers ≡ sa_alignment_max mod 2*sa_alignment_max come from heap allocation. - NULL comes from a failed heap allocation. */ /* Type for holding very small pointer differences. */ typedef unsigned char small_t; /* Verify that it is wide enough. */ verify (2 * sa_alignment_max - 1 <= (small_t) -1); void * mmalloca (size_t n) { #if HAVE_ALLOCA /* Allocate one more word, used to determine the address to pass to freea(), and room for the alignment ≡ sa_alignment_max mod 2*sa_alignment_max. */ uintptr_t alignment2_mask = 2 * sa_alignment_max - 1; int plus = sizeof (small_t) + alignment2_mask; idx_t nplus; if (!INT_ADD_WRAPV (n, plus, &nplus) && !xalloc_oversized (nplus, 1)) { char *mem = (char *) malloc (nplus); if (mem != NULL) { uintptr_t umem = (uintptr_t)mem, umemplus; /* The INT_ADD_WRAPV avoids signed integer overflow on theoretical platforms where UINTPTR_MAX <= INT_MAX. */ INT_ADD_WRAPV (umem, sizeof (small_t) + sa_alignment_max - 1, &umemplus); idx_t offset = ((umemplus & ~alignment2_mask) + sa_alignment_max - umem); void *vp = mem + offset; small_t *p = vp; /* Here p >= mem + sizeof (small_t), and p <= mem + sizeof (small_t) + 2 * sa_alignment_max - 1 hence p + n <= mem + nplus. So, the memory range [p, p+n) lies in the allocated memory range [mem, mem + nplus). */ p[-1] = offset; /* p ≡ sa_alignment_max mod 2*sa_alignment_max. */ return p; } } /* Out of memory. */ return NULL; #else # if !MALLOC_0_IS_NONNULL if (n == 0) n = 1; # endif return malloc (n); #endif } #if HAVE_ALLOCA void freea (void *p) { /* Check argument. */ if ((uintptr_t) p & (sa_alignment_max - 1)) { /* p was not the result of a malloca() call. Invalid argument. */ abort (); } /* Determine whether p was a non-NULL pointer returned by mmalloca(). */ if ((uintptr_t) p & sa_alignment_max) { void *mem = (char *) p - ((small_t *) p)[-1]; free (mem); } } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/itold.c����������������������������������������������������������������������������0000644�0000000�0000000�00000002032�14226564450�012136� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacement for 'int' to 'long double' conversion routine. Copyright (C) 2011-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <float.h> void _Qp_itoq (long double *result, int a) { /* Convert from 'int' to 'double', then from 'double' to 'long double'. */ *result = (double) a; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stat-time.c������������������������������������������������������������������������0000644�0000000�0000000�00000001520�14226564451�012734� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stat-related time functions. Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define _GL_STAT_TIME_INLINE _GL_EXTERN_INLINE #include "stat-time.h" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/attribute.h������������������������������������������������������������������������0000644�0000000�0000000�00000021376�14226564447�013055� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* ATTRIBUTE_* macros for using attributes in GCC and similar compilers Copyright 2020-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* Provide public ATTRIBUTE_* names for the private _GL_ATTRIBUTE_* macros used within Gnulib. */ /* These attributes can be placed in two ways: - At the start of a declaration (i.e. even before storage-class specifiers!); then they apply to all entities that are declared by the declaration. - Immediately after the name of an entity being declared by the declaration; then they apply to that entity only. */ #ifndef _GL_ATTRIBUTE_H #define _GL_ATTRIBUTE_H /* This file defines two types of attributes: * C2x standard attributes. These have macro names that do not begin with 'ATTRIBUTE_'. * Selected GCC attributes; see: https://gcc.gnu.org/onlinedocs/gcc/Common-Function-Attributes.html https://gcc.gnu.org/onlinedocs/gcc/Common-Variable-Attributes.html https://gcc.gnu.org/onlinedocs/gcc/Common-Type-Attributes.html These names begin with 'ATTRIBUTE_' to avoid name clashes. */ /* =============== Attributes for specific kinds of functions =============== */ /* Attributes for functions that should not be used. */ /* Warn if the entity is used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: namespace, class, template specialization. */ #define DEPRECATED _GL_ATTRIBUTE_DEPRECATED /* If a function call is not optimized way, warn with MSG. */ /* Applies to: functions. */ #define ATTRIBUTE_WARNING(msg) _GL_ATTRIBUTE_WARNING (msg) /* If a function call is not optimized way, report an error with MSG. */ /* Applies to: functions. */ #define ATTRIBUTE_ERROR(msg) _GL_ATTRIBUTE_ERROR (msg) /* Attributes for memory-allocating functions. */ /* The function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #define ATTRIBUTE_MALLOC _GL_ATTRIBUTE_MALLOC /* ATTRIBUTE_ALLOC_SIZE ((N)) - The Nth argument of the function is the size of the returned memory block. ATTRIBUTE_ALLOC_SIZE ((M, N)) - Multiply the Mth and Nth arguments to determine the size of the returned memory block. */ /* Applies to: function, pointer to function, function types. */ #define ATTRIBUTE_ALLOC_SIZE(args) _GL_ATTRIBUTE_ALLOC_SIZE (args) /* ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #define ATTRIBUTE_DEALLOC(f, i) _GL_ATTRIBUTE_DEALLOC(f, i) #define ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC_FREE /* Attributes for variadic functions. */ /* The variadic function expects a trailing NULL argument. ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ /* Applies to: functions. */ #define ATTRIBUTE_SENTINEL(pos) _GL_ATTRIBUTE_SENTINEL (pos) /* ================== Attributes for compiler diagnostics ================== */ /* Attributes that help the compiler diagnose programmer mistakes. Some of them may also help for some compiler optimizations. */ /* ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) - The STRING-INDEXth function argument is a format string of style ARCHETYPE, which is one of: printf, gnu_printf scanf, gnu_scanf, strftime, gnu_strftime, strfmon, or the same thing prefixed and suffixed with '__'. If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK are suitable for the format string. */ /* Applies to: functions. */ #define ATTRIBUTE_FORMAT(spec) _GL_ATTRIBUTE_FORMAT (spec) /* ATTRIBUTE_NONNULL ((N1, N2,...)) - Arguments N1, N2,... must not be NULL. ATTRIBUTE_NONNULL () - All pointer arguments must not be null. */ /* Applies to: functions. */ #define ATTRIBUTE_NONNULL(args) _GL_ATTRIBUTE_NONNULL (args) /* The function's return value is a non-NULL pointer. */ /* Applies to: functions. */ #define ATTRIBUTE_RETURNS_NONNULL _GL_ATTRIBUTE_RETURNS_NONNULL /* Warn if the caller does not use the return value, unless the caller uses something like ignore_value. */ /* Applies to: function, enumeration, class. */ #define NODISCARD _GL_ATTRIBUTE_NODISCARD /* Attributes that disable false alarms when the compiler diagnoses programmer "mistakes". */ /* Do not warn if the entity is not used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: class. */ #define MAYBE_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED /* The contents of a character array is not meant to be NUL-terminated. */ /* Applies to: struct/union members and variables that are arrays of element type '[[un]signed] char'. */ #define ATTRIBUTE_NONSTRING _GL_ATTRIBUTE_NONSTRING /* Do not warn if control flow falls through to the immediately following 'case' or 'default' label. */ /* Applies to: Empty statement (;), inside a 'switch' statement. */ #define FALLTHROUGH _GL_ATTRIBUTE_FALLTHROUGH /* ================== Attributes for debugging information ================== */ /* Attributes regarding debugging information emitted by the compiler. */ /* Omit the function from stack traces when debugging. */ /* Applies to: function. */ #define ATTRIBUTE_ARTIFICIAL _GL_ATTRIBUTE_ARTIFICIAL /* Make the entity visible to debuggers etc., even with '-fwhole-program'. */ /* Applies to: functions, variables. */ #define ATTRIBUTE_EXTERNALLY_VISIBLE _GL_ATTRIBUTE_EXTERNALLY_VISIBLE /* ========== Attributes that mainly direct compiler optimizations ========== */ /* The function does not throw exceptions. */ /* Applies to: functions. */ #define ATTRIBUTE_NOTHROW _GL_ATTRIBUTE_NOTHROW /* Do not inline the function. */ /* Applies to: functions. */ #define ATTRIBUTE_NOINLINE _GL_ATTRIBUTE_NOINLINE /* Always inline the function, and report an error if the compiler cannot inline. */ /* Applies to: function. */ #define ATTRIBUTE_ALWAYS_INLINE _GL_ATTRIBUTE_ALWAYS_INLINE /* It is OK for a compiler to omit duplicate calls with the same arguments. This attribute is safe for a function that neither depends on nor affects observable state, and always returns exactly once - e.g., does not loop forever, and does not call longjmp. (This attribute is stricter than ATTRIBUTE_PURE.) */ /* Applies to: functions. */ #define ATTRIBUTE_CONST _GL_ATTRIBUTE_CONST /* It is OK for a compiler to omit duplicate calls with the same arguments if observable state is not changed between calls. This attribute is safe for a function that does not affect observable state, and always returns exactly once. (This attribute is looser than ATTRIBUTE_CONST.) */ /* Applies to: functions. */ #define ATTRIBUTE_PURE _GL_ATTRIBUTE_PURE /* The function is rarely executed. */ /* Applies to: functions. */ #define ATTRIBUTE_COLD _GL_ATTRIBUTE_COLD /* If called from some other compilation unit, the function executes code from that unit only by return or by exception handling, letting the compiler optimize that unit more aggressively. */ /* Applies to: functions. */ #define ATTRIBUTE_LEAF _GL_ATTRIBUTE_LEAF /* For struct members: The member has the smallest possible alignment. For struct, union, class: All members have the smallest possible alignment, minimizing the memory required. */ /* Applies to: struct members, struct, union, in C++ also: class. */ #define ATTRIBUTE_PACKED _GL_ATTRIBUTE_PACKED /* ================ Attributes that make invalid code valid ================ */ /* Attributes that prevent fatal compiler optimizations for code that is not fully ISO C compliant. */ /* Pointers to the type may point to the same storage as pointers to other types, thus disabling strict aliasing optimization. */ /* Applies to: types. */ #define ATTRIBUTE_MAY_ALIAS _GL_ATTRIBUTE_MAY_ALIAS #endif /* _GL_ATTRIBUTE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/se-context.in.h��������������������������������������������������������������������0000644�0000000�0000000�00000006047�14226564450�013540� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* SELinux-related headers. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering, 2007. */ #ifndef SELINUX_CONTEXT_H # define SELINUX_CONTEXT_H # include <errno.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef SE_CONTEXT_INLINE # define SE_CONTEXT_INLINE _GL_INLINE #endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ #ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # if 0 /* no GCC or clang version supports this yet */ # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # elif defined __GNUC__ || defined __clang__ # define _GL_ATTRIBUTE_MAYBE_UNUSED __attribute__ ((__unused__)) # else # define _GL_ATTRIBUTE_MAYBE_UNUSED # endif #endif typedef int context_t; SE_CONTEXT_INLINE context_t context_new (_GL_ATTRIBUTE_MAYBE_UNUSED char const *s) { errno = ENOTSUP; return 0; } SE_CONTEXT_INLINE char * context_str (_GL_ATTRIBUTE_MAYBE_UNUSED context_t con) { errno = ENOTSUP; return (void *) 0; } SE_CONTEXT_INLINE void context_free (_GL_ATTRIBUTE_MAYBE_UNUSED context_t c) {} SE_CONTEXT_INLINE int context_user_set (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc, _GL_ATTRIBUTE_MAYBE_UNUSED char const *s) { errno = ENOTSUP; return -1; } SE_CONTEXT_INLINE int context_role_set (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc, _GL_ATTRIBUTE_MAYBE_UNUSED char const *s) { errno = ENOTSUP; return -1; } SE_CONTEXT_INLINE int context_range_set (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc, _GL_ATTRIBUTE_MAYBE_UNUSED char const *s) { errno = ENOTSUP; return -1; } SE_CONTEXT_INLINE int context_type_set (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc, _GL_ATTRIBUTE_MAYBE_UNUSED char const *s) { errno = ENOTSUP; return -1; } SE_CONTEXT_INLINE char * context_type_get (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc) { errno = ENOTSUP; return (void *) 0; } SE_CONTEXT_INLINE char * context_range_get (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc) { errno = ENOTSUP; return (void *) 0; } SE_CONTEXT_INLINE char * context_role_get (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc) { errno = ENOTSUP; return (void *) 0; } SE_CONTEXT_INLINE char * context_user_get (_GL_ATTRIBUTE_MAYBE_UNUSED context_t sc) { errno = ENOTSUP; return (void *) 0; } _GL_INLINE_HEADER_END #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/acl.h������������������������������������������������������������������������������0000644�0000000�0000000�00000002335�14226564447�011603� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* acl.c - access control lists Copyright (C) 2002, 2008-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert. */ #ifndef _GL_ACL_H #define _GL_ACL_H 1 #include <stdbool.h> #include <sys/types.h> #include <sys/stat.h> bool acl_errno_valid (int) _GL_ATTRIBUTE_CONST; int file_has_acl (char const *, struct stat const *); int qset_acl (char const *, int, mode_t); int set_acl (char const *, int, mode_t); int qcopy_acl (char const *, int, char const *, int, mode_t); int copy_acl (char const *, int, char const *, int, mode_t); int chmod_or_fchmod (char const *, int, mode_t); #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/bitrotate.c������������������������������������������������������������������������0000644�0000000�0000000�00000001510�14226564446�013025� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Rotate bits in integers. Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define BITROTATE_INLINE _GL_EXTERN_INLINE #include "bitrotate.h" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/spawnattr_destroy.c����������������������������������������������������������������0000644�0000000�0000000�00000001766�14226564451�014635� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <spawn.h> /* Initialize data structure for file attribute for 'spawn' call. */ int posix_spawnattr_destroy (posix_spawnattr_t *attr) { /* Nothing to do in the moment. */ return 0; } ����������recutils-1.9/lib/pipe-safer.c�����������������������������������������������������������������������0000644�0000000�0000000�00000002626�14226564447�013075� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invoke pipe, but avoid some glitches. Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> #include "unistd-safer.h" #include <unistd.h> #include <errno.h> /* Like pipe, but ensure that neither of the file descriptors is STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. Fail with ENOSYS on platforms that lack pipe. */ int pipe_safer (int fd[2]) { if (pipe (fd) == 0) { int i; for (i = 0; i < 2; i++) { fd[i] = fd_safer (fd[i]); if (fd[i] < 0) { int saved_errno = errno; close (fd[1 - i]); errno = saved_errno; return -1; } } return 0; } return -1; } ����������������������������������������������������������������������������������������������������������recutils-1.9/lib/wchar.in.h�������������������������������������������������������������������������0000644�0000000�0000000�00000125252�14226564451�012554� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <wchar.h>, for platforms that have issues. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake. */ /* * ISO C 99 <wchar.h> for platforms that have issues. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wchar.h.html> * * For now, this just ensures proper prerequisite inclusion order and * the declaration of wcwidth(). */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (((defined __need_mbstate_t || defined __need_wint_t) \ && !defined __MINGW32__) \ || (defined __hpux \ && ((defined _INTTYPES_INCLUDED \ && !defined _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H) \ || defined _GL_JUST_INCLUDE_SYSTEM_WCHAR_H)) \ || (defined __MINGW32__ && defined __STRING_H_SOURCED__) \ || defined _GL_ALREADY_INCLUDING_WCHAR_H) /* Special invocation convention: - Inside glibc and uClibc header files, but not MinGW. - On HP-UX 11.00 we have a sequence of nested includes <wchar.h> -> <stdlib.h> -> <stdint.h>, and the latter includes <wchar.h>, once indirectly <stdint.h> -> <sys/types.h> -> <inttypes.h> -> <wchar.h> and once directly. In both situations 'wint_t' is not yet defined, therefore we cannot provide the function overrides; instead include only the system's <wchar.h>. - With MinGW 3.22, when <string.h> includes <wchar.h>, only some part of <wchar.h> is actually processed, and that doesn't include 'mbstate_t'. - On IRIX 6.5, similarly, we have an include <wchar.h> -> <wctype.h>, and the latter includes <wchar.h>. But here, we have no way to detect whether <wctype.h> is completely included or is still being included. */ #@INCLUDE_NEXT@ @NEXT_WCHAR_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_WCHAR_H #define _GL_ALREADY_INCLUDING_WCHAR_H #if @HAVE_FEATURES_H@ # include <features.h> /* for __GLIBC__ */ #endif /* In some builds of uClibc, <wchar.h> is nonexistent and wchar_t is defined by <stddef.h>. But avoid namespace pollution on glibc systems. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <stddef.h> #endif /* Include the original <wchar.h> if it exists. Some builds of uClibc lack it. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_WCHAR_H@ # @INCLUDE_NEXT@ @NEXT_WCHAR_H@ #endif #undef _GL_ALREADY_INCLUDING_WCHAR_H #ifndef _@GUARD_PREFIX@_WCHAR_H #define _@GUARD_PREFIX@_WCHAR_H /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #ifndef _GL_ATTRIBUTE_MALLOC # if __GNUC__ >= 3 || defined __clang__ # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) # else # define _GL_ATTRIBUTE_MALLOC # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __pure__ was added in gcc 2.96. */ #ifndef _GL_ATTRIBUTE_PURE # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 96) || defined __clang__ # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define _GL_ATTRIBUTE_PURE /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Define wint_t and WEOF. (Also done in wctype.in.h.) */ #if !@HAVE_WINT_T@ && !defined wint_t # define wint_t int # ifndef WEOF # define WEOF -1 # endif #else /* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be "unchanged by default argument promotions". Override it. */ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ # if !GNULIB_defined_wint_t # if @HAVE_CRTDEFS_H@ # include <crtdefs.h> # else # include <stddef.h> # endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t # define GNULIB_defined_wint_t 1 # endif # endif # ifndef WEOF # define WEOF ((wint_t) -1) # endif #endif /* Override mbstate_t if it is too small. On IRIX 6.5, sizeof (mbstate_t) == 1, which is not sufficient for implementing mbrtowc for encodings like UTF-8. On AIX and MSVC, mbrtowc needs to be overridden, but mbstate_t exists and is large enough and overriding it would cause problems in C++ mode. */ #if !(((defined _WIN32 && !defined __CYGWIN__) || @HAVE_MBSINIT@) && @HAVE_MBRTOWC@) || @REPLACE_MBSTATE_T@ # if !GNULIB_defined_mbstate_t # if !(defined _AIX || defined _MSC_VER) typedef int rpl_mbstate_t; # undef mbstate_t # define mbstate_t rpl_mbstate_t # endif # define GNULIB_defined_mbstate_t 1 # endif #endif /* Make _GL_ATTRIBUTE_DEALLOC_FREE work, even though <stdlib.h> may not have been included yet. */ #if @GNULIB_FREE_POSIX@ # if (@REPLACE_FREE@ && !defined free \ && !(defined __cplusplus && defined GNULIB_NAMESPACE)) /* We can't do '#define free rpl_free' here. */ _GL_EXTERN_C void rpl_free (void *); # undef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (rpl_free, 1) # else # if defined _MSC_VER _GL_EXTERN_C void __cdecl free (void *); # else # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void free (void *) throw (); # else _GL_EXTERN_C void free (void *); # endif # endif # endif #else # if defined _MSC_VER _GL_EXTERN_C void __cdecl free (void *); # else # if defined __cplusplus && (__GLIBC__ + (__GLIBC_MINOR__ >= 14) > 2) _GL_EXTERN_C void free (void *) throw (); # else _GL_EXTERN_C void free (void *); # endif # endif #endif /* Convert a single-byte character to a wide character. */ #if @GNULIB_BTOWC@ # if @REPLACE_BTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef btowc # define btowc rpl_btowc # endif _GL_FUNCDECL_RPL (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (btowc, wint_t, (int c)); # else # if !@HAVE_BTOWC@ _GL_FUNCDECL_SYS (btowc, wint_t, (int c) _GL_ATTRIBUTE_PURE); # endif /* Need to cast, because on mingw, the return type is 'unsigned short'. */ _GL_CXXALIAS_SYS_CAST (btowc, wint_t, (int c)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (btowc); # endif #elif defined GNULIB_POSIXCHECK # undef btowc # if HAVE_RAW_DECL_BTOWC _GL_WARN_ON_USE (btowc, "btowc is unportable - " "use gnulib module btowc for portability"); # endif #endif /* Convert a wide character to a single-byte character. */ #if @GNULIB_WCTOB@ # if @REPLACE_WCTOB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wctob # define wctob rpl_wctob # endif _GL_FUNCDECL_RPL (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wctob, int, (wint_t wc)); # else # if !defined wctob && !@HAVE_DECL_WCTOB@ /* wctob is provided by gnulib, or wctob exists but is not declared. */ _GL_FUNCDECL_SYS (wctob, int, (wint_t wc) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wctob, int, (wint_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctob); # endif #elif defined GNULIB_POSIXCHECK # undef wctob # if HAVE_RAW_DECL_WCTOB _GL_WARN_ON_USE (wctob, "wctob is unportable - " "use gnulib module wctob for portability"); # endif #endif /* Test whether *PS is in the initial state. */ #if @GNULIB_MBSINIT@ # if @REPLACE_MBSINIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsinit # define mbsinit rpl_mbsinit # endif _GL_FUNCDECL_RPL (mbsinit, int, (const mbstate_t *ps)); _GL_CXXALIAS_RPL (mbsinit, int, (const mbstate_t *ps)); # else # if !@HAVE_MBSINIT@ _GL_FUNCDECL_SYS (mbsinit, int, (const mbstate_t *ps)); # endif _GL_CXXALIAS_SYS (mbsinit, int, (const mbstate_t *ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbsinit); # endif #elif defined GNULIB_POSIXCHECK # undef mbsinit # if HAVE_RAW_DECL_MBSINIT _GL_WARN_ON_USE (mbsinit, "mbsinit is unportable - " "use gnulib module mbsinit for portability"); # endif #endif /* Convert a multibyte character to a wide character. */ #if @GNULIB_MBRTOWC@ # if @REPLACE_MBRTOWC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrtowc # define mbrtowc rpl_mbrtowc # endif _GL_FUNCDECL_RPL (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); # else # if !@HAVE_MBRTOWC@ _GL_FUNCDECL_SYS (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (mbrtowc, size_t, (wchar_t *restrict pwc, const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbrtowc); # endif #elif defined GNULIB_POSIXCHECK # undef mbrtowc # if HAVE_RAW_DECL_MBRTOWC _GL_WARN_ON_USE (mbrtowc, "mbrtowc is unportable - " "use gnulib module mbrtowc for portability"); # endif #endif /* Recognize a multibyte character. */ #if @GNULIB_MBRLEN@ # if @REPLACE_MBRLEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbrlen # define mbrlen rpl_mbrlen # endif _GL_FUNCDECL_RPL (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); # else # if !@HAVE_MBRLEN@ _GL_FUNCDECL_SYS (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (mbrlen, size_t, (const char *restrict s, size_t n, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbrlen); # endif #elif defined GNULIB_POSIXCHECK # undef mbrlen # if HAVE_RAW_DECL_MBRLEN _GL_WARN_ON_USE (mbrlen, "mbrlen is unportable - " "use gnulib module mbrlen for portability"); # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSRTOWCS@ # if @REPLACE_MBSRTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsrtowcs # define mbsrtowcs rpl_mbsrtowcs # endif _GL_FUNCDECL_RPL (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_MBSRTOWCS@ _GL_FUNCDECL_SYS (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mbsrtowcs); # endif #elif defined GNULIB_POSIXCHECK # undef mbsrtowcs # if HAVE_RAW_DECL_MBSRTOWCS _GL_WARN_ON_USE (mbsrtowcs, "mbsrtowcs is unportable - " "use gnulib module mbsrtowcs for portability"); # endif #endif /* Convert a string to a wide string. */ #if @GNULIB_MBSNRTOWCS@ # if @REPLACE_MBSNRTOWCS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mbsnrtowcs # define mbsnrtowcs rpl_mbsnrtowcs # endif _GL_FUNCDECL_RPL (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_MBSNRTOWCS@ _GL_FUNCDECL_SYS (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mbsnrtowcs, size_t, (wchar_t *restrict dest, const char **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # endif _GL_CXXALIASWARN (mbsnrtowcs); #elif defined GNULIB_POSIXCHECK # undef mbsnrtowcs # if HAVE_RAW_DECL_MBSNRTOWCS _GL_WARN_ON_USE (mbsnrtowcs, "mbsnrtowcs is unportable - " "use gnulib module mbsnrtowcs for portability"); # endif #endif /* Convert a wide character to a multibyte character. */ #if @GNULIB_WCRTOMB@ # if @REPLACE_WCRTOMB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcrtomb # define wcrtomb rpl_wcrtomb # endif _GL_FUNCDECL_RPL (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); _GL_CXXALIAS_RPL (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # else # if !@HAVE_WCRTOMB@ _GL_FUNCDECL_SYS (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # endif _GL_CXXALIAS_SYS (wcrtomb, size_t, (char *restrict s, wchar_t wc, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcrtomb); # endif #elif defined GNULIB_POSIXCHECK # undef wcrtomb # if HAVE_RAW_DECL_WCRTOMB _GL_WARN_ON_USE (wcrtomb, "wcrtomb is unportable - " "use gnulib module wcrtomb for portability"); # endif #endif /* Convert a wide string to a string. */ #if @GNULIB_WCSRTOMBS@ # if @REPLACE_WCSRTOMBS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsrtombs # define wcsrtombs rpl_wcsrtombs # endif _GL_FUNCDECL_RPL (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_WCSRTOMBS@ _GL_FUNCDECL_SYS (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsrtombs); # endif #elif defined GNULIB_POSIXCHECK # undef wcsrtombs # if HAVE_RAW_DECL_WCSRTOMBS _GL_WARN_ON_USE (wcsrtombs, "wcsrtombs is unportable - " "use gnulib module wcsrtombs for portability"); # endif #endif /* Convert a wide string to a string. */ #if @GNULIB_WCSNRTOMBS@ # if @REPLACE_WCSNRTOMBS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsnrtombs # define wcsnrtombs rpl_wcsnrtombs # endif _GL_FUNCDECL_RPL (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # else # if !@HAVE_WCSNRTOMBS@ || (defined __cplusplus && defined __sun) _GL_FUNCDECL_SYS (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (wcsnrtombs, size_t, (char *restrict dest, const wchar_t **restrict srcp, size_t srclen, size_t len, mbstate_t *restrict ps)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsnrtombs); # endif #elif defined GNULIB_POSIXCHECK # undef wcsnrtombs # if HAVE_RAW_DECL_WCSNRTOMBS _GL_WARN_ON_USE (wcsnrtombs, "wcsnrtombs is unportable - " "use gnulib module wcsnrtombs for portability"); # endif #endif /* Return the number of screen columns needed for WC. */ #if @GNULIB_WCWIDTH@ # if @REPLACE_WCWIDTH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcwidth # define wcwidth rpl_wcwidth # endif _GL_FUNCDECL_RPL (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcwidth, int, (wchar_t)); # else # if !@HAVE_DECL_WCWIDTH@ /* wcwidth exists but is not declared. */ _GL_FUNCDECL_SYS (wcwidth, int, (wchar_t) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcwidth, int, (wchar_t)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcwidth); # endif #elif defined GNULIB_POSIXCHECK # undef wcwidth # if HAVE_RAW_DECL_WCWIDTH _GL_WARN_ON_USE (wcwidth, "wcwidth is unportable - " "use gnulib module wcwidth for portability"); # endif #endif /* Search N wide characters of S for C. */ #if @GNULIB_WMEMCHR@ # if !@HAVE_WMEMCHR@ _GL_FUNCDECL_SYS (wmemchr, wchar_t *, (const wchar_t *s, wchar_t c, size_t n) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wmemchr (const wchar_t *, wchar_t, size_t); wchar_t * std::wmemchr (wchar_t *, wchar_t, size_t); } */ _GL_CXXALIAS_SYS_CAST2 (wmemchr, wchar_t *, (const wchar_t *, wchar_t, size_t), const wchar_t *, (const wchar_t *, wchar_t, size_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wmemchr, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); _GL_CXXALIASWARN1 (wmemchr, const wchar_t *, (const wchar_t *s, wchar_t c, size_t n)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemchr); # endif #elif defined GNULIB_POSIXCHECK # undef wmemchr # if HAVE_RAW_DECL_WMEMCHR _GL_WARN_ON_USE (wmemchr, "wmemchr is unportable - " "use gnulib module wmemchr for portability"); # endif #endif /* Compare N wide characters of S1 and S2. */ #if @GNULIB_WMEMCMP@ # if !@HAVE_WMEMCMP@ _GL_FUNCDECL_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wmemcmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemcmp); # endif #elif defined GNULIB_POSIXCHECK # undef wmemcmp # if HAVE_RAW_DECL_WMEMCMP _GL_WARN_ON_USE (wmemcmp, "wmemcmp is unportable - " "use gnulib module wmemcmp for portability"); # endif #endif /* Copy N wide characters of SRC to DEST. */ #if @GNULIB_WMEMCPY@ # if !@HAVE_WMEMCPY@ _GL_FUNCDECL_SYS (wmemcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemcpy); # endif #elif defined GNULIB_POSIXCHECK # undef wmemcpy # if HAVE_RAW_DECL_WMEMCPY _GL_WARN_ON_USE (wmemcpy, "wmemcpy is unportable - " "use gnulib module wmemcpy for portability"); # endif #endif /* Copy N wide characters of SRC to DEST, guaranteeing correct behavior for overlapping memory areas. */ #if @GNULIB_WMEMMOVE@ # if !@HAVE_WMEMMOVE@ _GL_FUNCDECL_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # endif _GL_CXXALIAS_SYS (wmemmove, wchar_t *, (wchar_t *dest, const wchar_t *src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemmove); # endif #elif defined GNULIB_POSIXCHECK # undef wmemmove # if HAVE_RAW_DECL_WMEMMOVE _GL_WARN_ON_USE (wmemmove, "wmemmove is unportable - " "use gnulib module wmemmove for portability"); # endif #endif /* Copy N wide characters of SRC to DEST. Return pointer to wide characters after the last written wide character. */ #if @GNULIB_WMEMPCPY@ # if !@HAVE_WMEMPCPY@ _GL_FUNCDECL_SYS (wmempcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wmempcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmempcpy); # endif #elif defined GNULIB_POSIXCHECK # undef wmempcpy # if HAVE_RAW_DECL_WMEMPCPY _GL_WARN_ON_USE (wmempcpy, "wmempcpy is unportable - " "use gnulib module wmempcpy for portability"); # endif #endif /* Set N wide characters of S to C. */ #if @GNULIB_WMEMSET@ # if !@HAVE_WMEMSET@ _GL_FUNCDECL_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); # endif _GL_CXXALIAS_SYS (wmemset, wchar_t *, (wchar_t *s, wchar_t c, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wmemset); # endif #elif defined GNULIB_POSIXCHECK # undef wmemset # if HAVE_RAW_DECL_WMEMSET _GL_WARN_ON_USE (wmemset, "wmemset is unportable - " "use gnulib module wmemset for portability"); # endif #endif /* Return the number of wide characters in S. */ #if @GNULIB_WCSLEN@ # if !@HAVE_WCSLEN@ _GL_FUNCDECL_SYS (wcslen, size_t, (const wchar_t *s) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcslen, size_t, (const wchar_t *s)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcslen); # endif #elif defined GNULIB_POSIXCHECK # undef wcslen # if HAVE_RAW_DECL_WCSLEN _GL_WARN_ON_USE (wcslen, "wcslen is unportable - " "use gnulib module wcslen for portability"); # endif #endif /* Return the number of wide characters in S, but at most MAXLEN. */ #if @GNULIB_WCSNLEN@ # if !@HAVE_WCSNLEN@ _GL_FUNCDECL_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsnlen, size_t, (const wchar_t *s, size_t maxlen)); _GL_CXXALIASWARN (wcsnlen); #elif defined GNULIB_POSIXCHECK # undef wcsnlen # if HAVE_RAW_DECL_WCSNLEN _GL_WARN_ON_USE (wcsnlen, "wcsnlen is unportable - " "use gnulib module wcsnlen for portability"); # endif #endif /* Copy SRC to DEST. */ #if @GNULIB_WCSCPY@ # if !@HAVE_WCSCPY@ _GL_FUNCDECL_SYS (wcscpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # endif _GL_CXXALIAS_SYS (wcscpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscpy); # endif #elif defined GNULIB_POSIXCHECK # undef wcscpy # if HAVE_RAW_DECL_WCSCPY _GL_WARN_ON_USE (wcscpy, "wcscpy is unportable - " "use gnulib module wcscpy for portability"); # endif #endif /* Copy SRC to DEST, returning the address of the terminating L'\0' in DEST. */ #if @GNULIB_WCPCPY@ # if !@HAVE_WCPCPY@ _GL_FUNCDECL_SYS (wcpcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # endif _GL_CXXALIAS_SYS (wcpcpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); _GL_CXXALIASWARN (wcpcpy); #elif defined GNULIB_POSIXCHECK # undef wcpcpy # if HAVE_RAW_DECL_WCPCPY _GL_WARN_ON_USE (wcpcpy, "wcpcpy is unportable - " "use gnulib module wcpcpy for portability"); # endif #endif /* Copy no more than N wide characters of SRC to DEST. */ #if @GNULIB_WCSNCPY@ # if !@HAVE_WCSNCPY@ _GL_FUNCDECL_SYS (wcsncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncpy); # endif #elif defined GNULIB_POSIXCHECK # undef wcsncpy # if HAVE_RAW_DECL_WCSNCPY _GL_WARN_ON_USE (wcsncpy, "wcsncpy is unportable - " "use gnulib module wcsncpy for portability"); # endif #endif /* Copy no more than N characters of SRC to DEST, returning the address of the last character written into DEST. */ #if @GNULIB_WCPNCPY@ # if !@HAVE_WCPNCPY@ _GL_FUNCDECL_SYS (wcpncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcpncpy, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); _GL_CXXALIASWARN (wcpncpy); #elif defined GNULIB_POSIXCHECK # undef wcpncpy # if HAVE_RAW_DECL_WCPNCPY _GL_WARN_ON_USE (wcpncpy, "wcpncpy is unportable - " "use gnulib module wcpncpy for portability"); # endif #endif /* Append SRC onto DEST. */ #if @GNULIB_WCSCAT@ # if !@HAVE_WCSCAT@ _GL_FUNCDECL_SYS (wcscat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # endif _GL_CXXALIAS_SYS (wcscat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscat); # endif #elif defined GNULIB_POSIXCHECK # undef wcscat # if HAVE_RAW_DECL_WCSCAT _GL_WARN_ON_USE (wcscat, "wcscat is unportable - " "use gnulib module wcscat for portability"); # endif #endif /* Append no more than N wide characters of SRC onto DEST. */ #if @GNULIB_WCSNCAT@ # if !@HAVE_WCSNCAT@ _GL_FUNCDECL_SYS (wcsncat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # endif _GL_CXXALIAS_SYS (wcsncat, wchar_t *, (wchar_t *restrict dest, const wchar_t *restrict src, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncat); # endif #elif defined GNULIB_POSIXCHECK # undef wcsncat # if HAVE_RAW_DECL_WCSNCAT _GL_WARN_ON_USE (wcsncat, "wcsncat is unportable - " "use gnulib module wcsncat for portability"); # endif #endif /* Compare S1 and S2. */ #if @GNULIB_WCSCMP@ # if !@HAVE_WCSCMP@ _GL_FUNCDECL_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscmp, int, (const wchar_t *s1, const wchar_t *s2)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscmp); # endif #elif defined GNULIB_POSIXCHECK # undef wcscmp # if HAVE_RAW_DECL_WCSCMP _GL_WARN_ON_USE (wcscmp, "wcscmp is unportable - " "use gnulib module wcscmp for portability"); # endif #endif /* Compare no more than N wide characters of S1 and S2. */ #if @GNULIB_WCSNCMP@ # if !@HAVE_WCSNCMP@ _GL_FUNCDECL_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsncmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsncmp); # endif #elif defined GNULIB_POSIXCHECK # undef wcsncmp # if HAVE_RAW_DECL_WCSNCMP _GL_WARN_ON_USE (wcsncmp, "wcsncmp is unportable - " "use gnulib module wcsncmp for portability"); # endif #endif /* Compare S1 and S2, ignoring case. */ #if @GNULIB_WCSCASECMP@ # if !@HAVE_WCSCASECMP@ _GL_FUNCDECL_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscasecmp, int, (const wchar_t *s1, const wchar_t *s2)); _GL_CXXALIASWARN (wcscasecmp); #elif defined GNULIB_POSIXCHECK # undef wcscasecmp # if HAVE_RAW_DECL_WCSCASECMP _GL_WARN_ON_USE (wcscasecmp, "wcscasecmp is unportable - " "use gnulib module wcscasecmp for portability"); # endif #endif /* Compare no more than N chars of S1 and S2, ignoring case. */ #if @GNULIB_WCSNCASECMP@ # if !@HAVE_WCSNCASECMP@ _GL_FUNCDECL_SYS (wcsncasecmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsncasecmp, int, (const wchar_t *s1, const wchar_t *s2, size_t n)); _GL_CXXALIASWARN (wcsncasecmp); #elif defined GNULIB_POSIXCHECK # undef wcsncasecmp # if HAVE_RAW_DECL_WCSNCASECMP _GL_WARN_ON_USE (wcsncasecmp, "wcsncasecmp is unportable - " "use gnulib module wcsncasecmp for portability"); # endif #endif /* Compare S1 and S2, both interpreted as appropriate to the LC_COLLATE category of the current locale. */ #if @GNULIB_WCSCOLL@ # if !@HAVE_WCSCOLL@ _GL_FUNCDECL_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); # endif _GL_CXXALIAS_SYS (wcscoll, int, (const wchar_t *s1, const wchar_t *s2)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscoll); # endif #elif defined GNULIB_POSIXCHECK # undef wcscoll # if HAVE_RAW_DECL_WCSCOLL _GL_WARN_ON_USE (wcscoll, "wcscoll is unportable - " "use gnulib module wcscoll for portability"); # endif #endif /* Transform S2 into array pointed to by S1 such that if wcscmp is applied to two transformed strings the result is the as applying 'wcscoll' to the original strings. */ #if @GNULIB_WCSXFRM@ # if !@HAVE_WCSXFRM@ _GL_FUNCDECL_SYS (wcsxfrm, size_t, (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); # endif _GL_CXXALIAS_SYS (wcsxfrm, size_t, (wchar_t *restrict s1, const wchar_t *restrict s2, size_t n)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsxfrm); # endif #elif defined GNULIB_POSIXCHECK # undef wcsxfrm # if HAVE_RAW_DECL_WCSXFRM _GL_WARN_ON_USE (wcsxfrm, "wcsxfrm is unportable - " "use gnulib module wcsxfrm for portability"); # endif #endif /* Duplicate S, returning an identical malloc'd string. */ #if @GNULIB_WCSDUP@ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsdup # define wcsdup _wcsdup # endif _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); # else # if !@HAVE_WCSDUP@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); # endif _GL_CXXALIASWARN (wcsdup); #else # if __GNUC__ >= 11 && !defined wcsdup /* For -Wmismatched-dealloc: Associate wcsdup with free or rpl_free. */ _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # endif # if defined GNULIB_POSIXCHECK # undef wcsdup # if HAVE_RAW_DECL_WCSDUP _GL_WARN_ON_USE (wcsdup, "wcsdup is unportable - " "use gnulib module wcsdup for portability"); # endif # elif @GNULIB_MDA_WCSDUP@ /* On native Windows, map 'wcsdup' to '_wcsdup', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::wcsdup always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsdup # define wcsdup _wcsdup # endif _GL_CXXALIAS_MDA (wcsdup, wchar_t *, (const wchar_t *s)); # else _GL_FUNCDECL_SYS (wcsdup, wchar_t *, (const wchar_t *s) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE); # if @HAVE_DECL_WCSDUP@ _GL_CXXALIAS_SYS (wcsdup, wchar_t *, (const wchar_t *s)); # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_WCSDUP@ _GL_CXXALIASWARN (wcsdup); # endif # endif #endif /* Find the first occurrence of WC in WCS. */ #if @GNULIB_WCSCHR@ # if !@HAVE_WCSCHR@ _GL_FUNCDECL_SYS (wcschr, wchar_t *, (const wchar_t *wcs, wchar_t wc) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcschr (const wchar_t *, wchar_t); wchar_t * std::wcschr (wchar_t *, wchar_t); } */ _GL_CXXALIAS_SYS_CAST2 (wcschr, wchar_t *, (const wchar_t *, wchar_t), const wchar_t *, (const wchar_t *, wchar_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcschr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcschr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcschr); # endif #elif defined GNULIB_POSIXCHECK # undef wcschr # if HAVE_RAW_DECL_WCSCHR _GL_WARN_ON_USE (wcschr, "wcschr is unportable - " "use gnulib module wcschr for portability"); # endif #endif /* Find the last occurrence of WC in WCS. */ #if @GNULIB_WCSRCHR@ # if !@HAVE_WCSRCHR@ _GL_FUNCDECL_SYS (wcsrchr, wchar_t *, (const wchar_t *wcs, wchar_t wc) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcsrchr (const wchar_t *, wchar_t); wchar_t * std::wcsrchr (wchar_t *, wchar_t); } */ _GL_CXXALIAS_SYS_CAST2 (wcsrchr, wchar_t *, (const wchar_t *, wchar_t), const wchar_t *, (const wchar_t *, wchar_t)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsrchr, wchar_t *, (wchar_t *wcs, wchar_t wc)); _GL_CXXALIASWARN1 (wcsrchr, const wchar_t *, (const wchar_t *wcs, wchar_t wc)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsrchr); # endif #elif defined GNULIB_POSIXCHECK # undef wcsrchr # if HAVE_RAW_DECL_WCSRCHR _GL_WARN_ON_USE (wcsrchr, "wcsrchr is unportable - " "use gnulib module wcsrchr for portability"); # endif #endif /* Return the length of the initial segmet of WCS which consists entirely of wide characters not in REJECT. */ #if @GNULIB_WCSCSPN@ # if !@HAVE_WCSCSPN@ _GL_FUNCDECL_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcscspn, size_t, (const wchar_t *wcs, const wchar_t *reject)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcscspn); # endif #elif defined GNULIB_POSIXCHECK # undef wcscspn # if HAVE_RAW_DECL_WCSCSPN _GL_WARN_ON_USE (wcscspn, "wcscspn is unportable - " "use gnulib module wcscspn for portability"); # endif #endif /* Return the length of the initial segmet of WCS which consists entirely of wide characters in ACCEPT. */ #if @GNULIB_WCSSPN@ # if !@HAVE_WCSSPN@ _GL_FUNCDECL_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcsspn, size_t, (const wchar_t *wcs, const wchar_t *accept)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsspn); # endif #elif defined GNULIB_POSIXCHECK # undef wcsspn # if HAVE_RAW_DECL_WCSSPN _GL_WARN_ON_USE (wcsspn, "wcsspn is unportable - " "use gnulib module wcsspn for portability"); # endif #endif /* Find the first occurrence in WCS of any character in ACCEPT. */ #if @GNULIB_WCSPBRK@ # if !@HAVE_WCSPBRK@ _GL_FUNCDECL_SYS (wcspbrk, wchar_t *, (const wchar_t *wcs, const wchar_t *accept) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcspbrk (const wchar_t *, const wchar_t *); wchar_t * std::wcspbrk (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcspbrk, wchar_t *, (const wchar_t *, const wchar_t *), const wchar_t *, (const wchar_t *, const wchar_t *)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcspbrk, wchar_t *, (wchar_t *wcs, const wchar_t *accept)); _GL_CXXALIASWARN1 (wcspbrk, const wchar_t *, (const wchar_t *wcs, const wchar_t *accept)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcspbrk); # endif #elif defined GNULIB_POSIXCHECK # undef wcspbrk # if HAVE_RAW_DECL_WCSPBRK _GL_WARN_ON_USE (wcspbrk, "wcspbrk is unportable - " "use gnulib module wcspbrk for portability"); # endif #endif /* Find the first occurrence of NEEDLE in HAYSTACK. */ #if @GNULIB_WCSSTR@ # if !@HAVE_WCSSTR@ _GL_FUNCDECL_SYS (wcsstr, wchar_t *, (const wchar_t *restrict haystack, const wchar_t *restrict needle) _GL_ATTRIBUTE_PURE); # endif /* On some systems, this function is defined as an overloaded function: extern "C++" { const wchar_t * std::wcsstr (const wchar_t *, const wchar_t *); wchar_t * std::wcsstr (wchar_t *, const wchar_t *); } */ _GL_CXXALIAS_SYS_CAST2 (wcsstr, wchar_t *, (const wchar_t *restrict, const wchar_t *restrict), const wchar_t *, (const wchar_t *restrict, const wchar_t *restrict)); # if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 10) && !defined __UCLIBC__) \ && (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) _GL_CXXALIASWARN1 (wcsstr, wchar_t *, (wchar_t *restrict haystack, const wchar_t *restrict needle)); _GL_CXXALIASWARN1 (wcsstr, const wchar_t *, (const wchar_t *restrict haystack, const wchar_t *restrict needle)); # elif __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsstr); # endif #elif defined GNULIB_POSIXCHECK # undef wcsstr # if HAVE_RAW_DECL_WCSSTR _GL_WARN_ON_USE (wcsstr, "wcsstr is unportable - " "use gnulib module wcsstr for portability"); # endif #endif /* Divide WCS into tokens separated by characters in DELIM. */ #if @GNULIB_WCSTOK@ # if @REPLACE_WCSTOK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcstok # define wcstok rpl_wcstok # endif _GL_FUNCDECL_RPL (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); _GL_CXXALIAS_RPL (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); # else # if !@HAVE_WCSTOK@ _GL_FUNCDECL_SYS (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); # endif _GL_CXXALIAS_SYS (wcstok, wchar_t *, (wchar_t *restrict wcs, const wchar_t *restrict delim, wchar_t **restrict ptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcstok); # endif #elif defined GNULIB_POSIXCHECK # undef wcstok # if HAVE_RAW_DECL_WCSTOK _GL_WARN_ON_USE (wcstok, "wcstok is unportable - " "use gnulib module wcstok for portability"); # endif #endif /* Determine number of column positions required for first N wide characters (or fewer if S ends before this) in S. */ #if @GNULIB_WCSWIDTH@ # if @REPLACE_WCSWIDTH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcswidth # define wcswidth rpl_wcswidth # endif _GL_FUNCDECL_RPL (wcswidth, int, (const wchar_t *s, size_t n) _GL_ATTRIBUTE_PURE); _GL_CXXALIAS_RPL (wcswidth, int, (const wchar_t *s, size_t n)); # else # if !@HAVE_WCSWIDTH@ _GL_FUNCDECL_SYS (wcswidth, int, (const wchar_t *s, size_t n) _GL_ATTRIBUTE_PURE); # endif _GL_CXXALIAS_SYS (wcswidth, int, (const wchar_t *s, size_t n)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcswidth); # endif #elif defined GNULIB_POSIXCHECK # undef wcswidth # if HAVE_RAW_DECL_WCSWIDTH _GL_WARN_ON_USE (wcswidth, "wcswidth is unportable - " "use gnulib module wcswidth for portability"); # endif #endif /* Convert *TP to a date and time wide string. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/wcsftime.html>. */ #if @GNULIB_WCSFTIME@ # if @REPLACE_WCSFTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef wcsftime # define wcsftime rpl_wcsftime # endif _GL_FUNCDECL_RPL (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp) _GL_ARG_NONNULL ((1, 3, 4))); _GL_CXXALIAS_RPL (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp)); # else # if !@HAVE_WCSFTIME@ _GL_FUNCDECL_SYS (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp) _GL_ARG_NONNULL ((1, 3, 4))); # endif _GL_CXXALIAS_SYS (wcsftime, size_t, (wchar_t *restrict __buf, size_t __bufsize, const wchar_t *restrict __fmt, const struct tm *restrict __tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wcsftime); # endif #elif defined GNULIB_POSIXCHECK # undef wcsftime # if HAVE_RAW_DECL_WCSFTIME _GL_WARN_ON_USE (wcsftime, "wcsftime is unportable - " "use gnulib module wcsftime for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif /* _@GUARD_PREFIX@_WCHAR_H */ #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/strchrnul.valgrind�����������������������������������������������������������������0000644�0000000�0000000�00000001714�14226564451�014442� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in strchrnul(). # Copyright (C) 2008-2022 Free Software Foundation, Inc. # # This file is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation; either version 2.1 of the # License, or (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # This use is OK because it provides only a speedup. { strchrnul-value4 Memcheck:Value4 fun:strchrnul } { strchrnul-value8 Memcheck:Value8 fun:strchrnul } ����������������������������������������������������recutils-1.9/lib/binary-io.c������������������������������������������������������������������������0000644�0000000�0000000�00000002500�14226564447�012722� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Binary mode I/O. Copyright 2017-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define BINARY_IO_INLINE _GL_EXTERN_INLINE #include "binary-io.h" #if defined __DJGPP__ || defined __EMX__ # include <unistd.h> int set_binary_mode (int fd, int mode) { if (isatty (fd)) /* If FD refers to a console (not a pipe, not a regular file), O_TEXT is the only reasonable mode, both on input and on output. Silently ignore the request. If we were to return -1 here, all programs that use xset_binary_mode would fail when run with console input or console output. */ return O_TEXT; else return __gl_setmode (fd, mode); } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/nl_langinfo-lock.c�����������������������������������������������������������������0000644�0000000�0000000�00000010445�14226564450�014246� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the internal lock used by nl_langinfo. Copyright (C) 2019-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */ #include <config.h> /* When it is known that the gl_get_nl_langinfo_lock function is defined by a dependency library, it should not be defined here. */ #if OMIT_NL_LANGINFO_LOCK /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #else /* This file defines the internal lock used by nl_langinfo. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ # undef gl_get_nl_langinfo_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ # ifndef DLL_EXPORTED # if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ # define DLL_EXPORTED __attribute__((__visibility__("default"))) # elif defined _WIN32 || defined __CYGWIN__ # define DLL_EXPORTED __declspec(dllexport) # else # define DLL_EXPORTED # endif # endif # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ /* Make sure the function gets exported from DLLs. */ DLL_EXPORTED CRITICAL_SECTION *gl_get_nl_langinfo_lock (void); static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; static CRITICAL_SECTION lock; /* Returns the internal lock used by nl_langinfo. */ CRITICAL_SECTION * gl_get_nl_langinfo_lock (void) { if (!guard.done) { if (InterlockedIncrement (&guard.started) == 0) { /* This thread is the first one to need the lock. Initialize it. */ InitializeCriticalSection (&lock); guard.done = 1; } else { /* Don't let guard.started grow and wrap around. */ InterlockedDecrement (&guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!guard.done) Sleep (0); } } return &lock; } # elif HAVE_PTHREAD_API # include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED pthread_mutex_t *gl_get_nl_langinfo_lock (void); /* Returns the internal lock used by nl_langinfo. */ pthread_mutex_t * gl_get_nl_langinfo_lock (void) { return &mutex; } # elif HAVE_THREADS_H # include <threads.h> # include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; static mtx_t mutex; static void atomic_init (void) { if (mtx_init (&mutex, mtx_plain) != thrd_success) abort (); init_needed = 0; } /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED mtx_t *gl_get_nl_langinfo_lock (void); /* Returns the internal lock used by nl_langinfo. */ mtx_t * gl_get_nl_langinfo_lock (void) { if (init_needed) call_once (&init_once, atomic_init); return &mutex; } # endif # if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER /* Make sure the '__declspec(dllimport)' in nl_langinfo.c does not cause a link failure when no DLLs are involved. */ # if defined _WIN64 || defined _LP64 # define IMP(x) __imp_##x # else # define IMP(x) _imp__##x # endif void * IMP(gl_get_nl_langinfo_lock) = &gl_get_nl_langinfo_lock; # endif #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/wctype.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000043274�14226564451�012766� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C99 <wctype.h>, for platforms that lack it. Copyright (C) 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible and Paul Eggert. */ /* * ISO C 99 <wctype.h> for platforms that lack it. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/wctype.h.html> * * iswctype, towctrans, towlower, towupper, wctrans, wctype, * wctrans_t, and wctype_t are not yet implemented. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if (defined __MINGW32__ && defined __CTYPE_H_SOURCED__) /* Special invocation convention: - With MinGW 3.22, when <ctype.h> includes <wctype.h>, only some part of <wctype.h> is being processed, which doesn't include the idempotency guard. */ #@INCLUDE_NEXT@ @NEXT_WCTYPE_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_WCTYPE_H #if @HAVE_WINT_T@ /* Solaris 2.5 has a bug: <wchar.h> must be included before <wctype.h>. */ # include <wchar.h> #endif /* Native Windows (mingw, MSVC) have declarations of towupper, towlower, and isw* functions in <ctype.h>, <wchar.h> as well as in <wctype.h>. Include <ctype.h>, <wchar.h> in advance to avoid rpl_ prefix being added to the declarations. */ #if defined _WIN32 && ! defined __CYGWIN__ # include <ctype.h> # include <wchar.h> #endif /* Include the original <wctype.h> if it exists. BeOS 5 has the functions but no <wctype.h>. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_WCTYPE_H@ # @INCLUDE_NEXT@ @NEXT_WCTYPE_H@ #endif #ifndef _@GUARD_PREFIX@_WCTYPE_H #define _@GUARD_PREFIX@_WCTYPE_H #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_WCTYPE_INLINE # define _GL_WCTYPE_INLINE _GL_INLINE #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Solaris 2.6 <wctype.h> includes <widec.h> which includes <euc.h> which #defines a number of identifiers in the application namespace. Revert these #defines. */ #ifdef __sun # undef multibyte # undef eucw1 # undef eucw2 # undef eucw3 # undef scrw1 # undef scrw2 # undef scrw3 #endif /* Define wint_t and WEOF. (Also done in wchar.in.h.) */ #if !@HAVE_WINT_T@ && !defined wint_t # define wint_t int # ifndef WEOF # define WEOF -1 # endif #else /* mingw and MSVC define wint_t as 'unsigned short' in <crtdefs.h> or <stddef.h>. This is too small: ISO C 99 section 7.24.1.(2) says that wint_t must be "unchanged by default argument promotions". Override it. */ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ # if !GNULIB_defined_wint_t # if @HAVE_CRTDEFS_H@ # include <crtdefs.h> # else # include <stddef.h> # endif typedef unsigned int rpl_wint_t; # undef wint_t # define wint_t rpl_wint_t # define GNULIB_defined_wint_t 1 # endif # endif # ifndef WEOF # define WEOF ((wint_t) -1) # endif #endif #if !GNULIB_defined_wctype_functions /* FreeBSD 4.4 to 4.11 has <wctype.h> but lacks the functions. Linux libc5 has <wctype.h> and the functions but they are broken. mingw and MSVC have <wctype.h> and the functions but they take a wchar_t as argument, not an rpl_wint_t. Assume all 11 functions (all isw* except iswblank) are implemented the same way, or not at all. */ # if ! @HAVE_ISWCNTRL@ || @REPLACE_ISWCNTRL@ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ /* implies @REPLACE_ISWCNTRL@ */ _GL_WCTYPE_INLINE int rpl_iswalnum (wint_t wc) { return ((wchar_t) wc == wc ? iswalnum ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswalpha (wint_t wc) { return ((wchar_t) wc == wc ? iswalpha ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswblank (wint_t wc) { return ((wchar_t) wc == wc ? iswblank ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswcntrl (wint_t wc) { return ((wchar_t) wc == wc ? iswcntrl ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswdigit (wint_t wc) { return ((wchar_t) wc == wc ? wc >= '0' && wc <= '9' : 0); } _GL_WCTYPE_INLINE int rpl_iswgraph (wint_t wc) { return ((wchar_t) wc == wc ? iswgraph ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswlower (wint_t wc) { return ((wchar_t) wc == wc ? iswlower ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswprint (wint_t wc) { return ((wchar_t) wc == wc ? iswprint ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswpunct (wint_t wc) { return ((wchar_t) wc == wc ? iswpunct ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswspace (wint_t wc) { return ((wchar_t) wc == wc ? iswspace ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswupper (wint_t wc) { return ((wchar_t) wc == wc ? iswupper ((wchar_t) wc) : 0); } _GL_WCTYPE_INLINE int rpl_iswxdigit (wint_t wc) { return ((wchar_t) wc == wc ? (wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F') : 0); } _GL_WCTYPE_INLINE wint_t rpl_towlower (wint_t wc) { return ((wchar_t) wc == wc ? (wchar_t) towlower ((wchar_t) wc) : wc); } _GL_WCTYPE_INLINE wint_t rpl_towupper (wint_t wc) { return ((wchar_t) wc == wc ? (wchar_t) towupper ((wchar_t) wc) : wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswalnum # undef iswalpha # undef iswblank # undef iswcntrl # undef iswdigit # undef iswgraph # undef iswlower # undef iswprint # undef iswpunct # undef iswspace # undef iswupper # undef iswxdigit # undef towlower # undef towupper # define iswalnum rpl_iswalnum # define iswalpha rpl_iswalpha # define iswblank rpl_iswblank # define iswcntrl rpl_iswcntrl # define iswdigit rpl_iswdigit # define iswgraph rpl_iswgraph # define iswlower rpl_iswlower # define iswprint rpl_iswprint # define iswpunct rpl_iswpunct # define iswspace rpl_iswspace # define iswupper rpl_iswupper # define iswxdigit rpl_iswxdigit # define towlower rpl_towlower # define towupper rpl_towupper # endif # else /* IRIX 5.3 has macros but no functions, its isw* macros refer to an undefined variable _ctmp_ and to <ctype.h> macros like _P, and they refer to system functions like _iswctype that are not in the standard C library. Rather than try to get ancient buggy implementations like this to work, just disable them. */ # undef iswalnum # undef iswalpha # undef iswblank # undef iswcntrl # undef iswdigit # undef iswgraph # undef iswlower # undef iswprint # undef iswpunct # undef iswspace # undef iswupper # undef iswxdigit # undef towlower # undef towupper /* Linux libc5 has <wctype.h> and the functions but they are broken. */ # if @REPLACE_ISWCNTRL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iswalnum rpl_iswalnum # define iswalpha rpl_iswalpha # define iswblank rpl_iswblank # define iswcntrl rpl_iswcntrl # define iswdigit rpl_iswdigit # define iswgraph rpl_iswgraph # define iswlower rpl_iswlower # define iswprint rpl_iswprint # define iswpunct rpl_iswpunct # define iswspace rpl_iswspace # define iswupper rpl_iswupper # define iswxdigit rpl_iswxdigit # endif # endif # if @REPLACE_TOWLOWER@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towlower rpl_towlower # define towupper rpl_towupper # endif # endif _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswalnum # else iswalnum # endif (wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z')); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswalpha # else iswalpha # endif (wint_t wc) { return (wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswblank # else iswblank # endif (wint_t wc) { return wc == ' ' || wc == '\t'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswcntrl # else iswcntrl # endif (wint_t wc) { return (wc & ~0x1f) == 0 || wc == 0x7f; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWDIGIT@ rpl_iswdigit # else iswdigit # endif (wint_t wc) { return wc >= '0' && wc <= '9'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswgraph # else iswgraph # endif (wint_t wc) { return wc >= '!' && wc <= '~'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswlower # else iswlower # endif (wint_t wc) { return wc >= 'a' && wc <= 'z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswprint # else iswprint # endif (wint_t wc) { return wc >= ' ' && wc <= '~'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswpunct # else iswpunct # endif (wint_t wc) { return (wc >= '!' && wc <= '~' && !((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'Z'))); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswspace # else iswspace # endif (wint_t wc) { return (wc == ' ' || wc == '\t' || wc == '\n' || wc == '\v' || wc == '\f' || wc == '\r'); } _GL_WCTYPE_INLINE int # if @REPLACE_ISWCNTRL@ rpl_iswupper # else iswupper # endif (wint_t wc) { return wc >= 'A' && wc <= 'Z'; } _GL_WCTYPE_INLINE int # if @REPLACE_ISWXDIGIT@ rpl_iswxdigit # else iswxdigit # endif (wint_t wc) { return ((wc >= '0' && wc <= '9') || ((wc & ~0x20) >= 'A' && (wc & ~0x20) <= 'F')); } _GL_WCTYPE_INLINE wint_t # if @REPLACE_TOWLOWER@ rpl_towlower # else towlower # endif (wint_t wc) { return (wc >= 'A' && wc <= 'Z' ? wc - 'A' + 'a' : wc); } _GL_WCTYPE_INLINE wint_t # if @REPLACE_TOWLOWER@ rpl_towupper # else towupper # endif (wint_t wc) { return (wc >= 'a' && wc <= 'z' ? wc - 'a' + 'A' : wc); } # endif # else /* Only some of the functions are missing or broken. */ # if @GNULIB_ISWBLANK@ && (! @HAVE_ISWBLANK@ || @REPLACE_ISWBLANK@) /* Only the iswblank function is missing. */ # if @REPLACE_ISWBLANK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define iswblank rpl_iswblank # endif _GL_FUNCDECL_RPL (iswblank, int, (wint_t wc)); # else _GL_FUNCDECL_SYS (iswblank, int, (wint_t wc)); # endif # endif # if @GNULIB_ISWDIGIT@ # if @REPLACE_ISWDIGIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswdigit # define iswdigit rpl_iswdigit # endif _GL_FUNCDECL_RPL (iswdigit, int, (wint_t wc)); # endif # endif # if @GNULIB_ISWXDIGIT@ # if @REPLACE_ISWXDIGIT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswxdigit # define iswxdigit rpl_iswxdigit # endif _GL_FUNCDECL_RPL (iswxdigit, int, (wint_t wc)); # endif # endif # endif # if defined __MINGW32__ && !@GNULIBHEADERS_OVERRIDE_WINT_T@ /* On native Windows, wchar_t is uint16_t, and wint_t is uint32_t. The functions towlower and towupper are implemented in the MSVCRT library to take a wchar_t argument and return a wchar_t result. mingw declares these functions to take a wint_t argument and return a wint_t result. This means that: 1. When the user passes an argument outside the range 0x0000..0xFFFF, the function will look only at the lower 16 bits. This is allowed according to POSIX. 2. The return value is returned in the lower 16 bits of the result register. The upper 16 bits are random: whatever happened to be in that part of the result register. We need to fix this by adding a zero-extend from wchar_t to wint_t after the call. */ _GL_WCTYPE_INLINE wint_t rpl_towlower (wint_t wc) { return (wint_t) (wchar_t) towlower (wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towlower rpl_towlower # endif _GL_WCTYPE_INLINE wint_t rpl_towupper (wint_t wc) { return (wint_t) (wchar_t) towupper (wc); } # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define towupper rpl_towupper # endif # endif /* __MINGW32__ && !@GNULIBHEADERS_OVERRIDE_WINT_T@ */ # define GNULIB_defined_wctype_functions 1 #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswalnum, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswalnum, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswalpha, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswalpha, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswcntrl, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswcntrl, int, (wint_t wc)); #endif #if @GNULIB_ISWDIGIT@ # if @REPLACE_ISWDIGIT@ _GL_CXXALIAS_RPL (iswdigit, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswdigit, int, (wint_t wc)); # endif #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswgraph, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswgraph, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswlower, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswlower, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswprint, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswprint, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswpunct, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswpunct, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswspace, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswspace, int, (wint_t wc)); #endif #if @REPLACE_ISWCNTRL@ _GL_CXXALIAS_RPL (iswupper, int, (wint_t wc)); #else _GL_CXXALIAS_SYS (iswupper, int, (wint_t wc)); #endif #if @GNULIB_ISWXDIGIT@ # if @REPLACE_ISWXDIGIT@ _GL_CXXALIAS_RPL (iswxdigit, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswxdigit, int, (wint_t wc)); # endif #endif #if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswalnum); _GL_CXXALIASWARN (iswalpha); _GL_CXXALIASWARN (iswcntrl); _GL_CXXALIASWARN (iswdigit); _GL_CXXALIASWARN (iswgraph); _GL_CXXALIASWARN (iswlower); _GL_CXXALIASWARN (iswprint); _GL_CXXALIASWARN (iswpunct); _GL_CXXALIASWARN (iswspace); _GL_CXXALIASWARN (iswupper); _GL_CXXALIASWARN (iswxdigit); #endif #if @GNULIB_ISWBLANK@ # if @REPLACE_ISWCNTRL@ || @REPLACE_ISWBLANK@ _GL_CXXALIAS_RPL (iswblank, int, (wint_t wc)); # else _GL_CXXALIAS_SYS (iswblank, int, (wint_t wc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswblank); # endif #endif #if !@HAVE_WCTYPE_T@ # if !GNULIB_defined_wctype_t typedef void * wctype_t; # define GNULIB_defined_wctype_t 1 # endif #endif /* Get a descriptor for a wide character property. */ #if @GNULIB_WCTYPE@ # if !@HAVE_WCTYPE_T@ _GL_FUNCDECL_SYS (wctype, wctype_t, (const char *name)); # endif _GL_CXXALIAS_SYS (wctype, wctype_t, (const char *name)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctype); # endif #elif defined GNULIB_POSIXCHECK # undef wctype # if HAVE_RAW_DECL_WCTYPE _GL_WARN_ON_USE (wctype, "wctype is unportable - " "use gnulib module wctype for portability"); # endif #endif /* Test whether a wide character has a given property. The argument WC must be either a wchar_t value or WEOF. The argument DESC must have been returned by the wctype() function. */ #if @GNULIB_ISWCTYPE@ # if @GNULIBHEADERS_OVERRIDE_WINT_T@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef iswctype # define iswctype rpl_iswctype # endif _GL_FUNCDECL_RPL (iswctype, int, (wint_t wc, wctype_t desc)); _GL_CXXALIAS_RPL (iswctype, int, (wint_t wc, wctype_t desc)); # else # if !@HAVE_WCTYPE_T@ _GL_FUNCDECL_SYS (iswctype, int, (wint_t wc, wctype_t desc)); # endif _GL_CXXALIAS_SYS (iswctype, int, (wint_t wc, wctype_t desc)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (iswctype); # endif #elif defined GNULIB_POSIXCHECK # undef iswctype # if HAVE_RAW_DECL_ISWCTYPE _GL_WARN_ON_USE (iswctype, "iswctype is unportable - " "use gnulib module iswctype for portability"); # endif #endif #if @REPLACE_TOWLOWER@ || defined __MINGW32__ _GL_CXXALIAS_RPL (towlower, wint_t, (wint_t wc)); _GL_CXXALIAS_RPL (towupper, wint_t, (wint_t wc)); #else _GL_CXXALIAS_SYS (towlower, wint_t, (wint_t wc)); _GL_CXXALIAS_SYS (towupper, wint_t, (wint_t wc)); #endif #if __GLIBC__ >= 2 _GL_CXXALIASWARN (towlower); _GL_CXXALIASWARN (towupper); #endif #if !@HAVE_WCTRANS_T@ # if !GNULIB_defined_wctrans_t typedef void * wctrans_t; # define GNULIB_defined_wctrans_t 1 # endif #endif /* Get a descriptor for a wide character case conversion. */ #if @GNULIB_WCTRANS@ # if !@HAVE_WCTRANS_T@ _GL_FUNCDECL_SYS (wctrans, wctrans_t, (const char *name)); # endif _GL_CXXALIAS_SYS (wctrans, wctrans_t, (const char *name)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (wctrans); # endif #elif defined GNULIB_POSIXCHECK # undef wctrans # if HAVE_RAW_DECL_WCTRANS _GL_WARN_ON_USE (wctrans, "wctrans is unportable - " "use gnulib module wctrans for portability"); # endif #endif /* Perform a given case conversion on a wide character. The argument WC must be either a wchar_t value or WEOF. The argument DESC must have been returned by the wctrans() function. */ #if @GNULIB_TOWCTRANS@ # if !@HAVE_WCTRANS_T@ _GL_FUNCDECL_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); # endif _GL_CXXALIAS_SYS (towctrans, wint_t, (wint_t wc, wctrans_t desc)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (towctrans); # endif #elif defined GNULIB_POSIXCHECK # undef towctrans # if HAVE_RAW_DECL_TOWCTRANS _GL_WARN_ON_USE (towctrans, "towctrans is unportable - " "use gnulib module towctrans for portability"); # endif #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_WCTYPE_H */ #endif /* _@GUARD_PREFIX@_WCTYPE_H */ #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/mktime-internal.h������������������������������������������������������������������0000644�0000000�0000000�00000006061�14226564450�014136� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internals of mktime and related functions Copyright 2016-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Paul Eggert <eggert@cs.ucla.edu>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC # include <time.h> #endif /* mktime_offset_t is a signed type wide enough to hold a UTC offset in seconds, and used as part of the type of the offset-guess argument to mktime_internal. In Glibc, it is always long int. When in Gnulib, use time_t on platforms where time_t is signed, to be compatible with platforms like BeOS that export this implementation detail of mktime. On platforms where time_t is unsigned, GNU and POSIX code can assume 'int' is at least 32 bits which is wide enough for a UTC offset. */ #ifdef _LIBC typedef long int mktime_offset_t; #elif defined TIME_T_IS_SIGNED typedef time_t mktime_offset_t; #else typedef int mktime_offset_t; #endif /* The source code uses identifiers like __time64_t for glibc timestamps that can contain 64-bit values even when time_t is only 32 bits. These are just macros for the ordinary identifiers unless compiling within glibc when time_t is 32 bits. */ #if ! (defined _LIBC && __TIMESIZE != 64) # undef __time64_t # define __time64_t time_t # define __gmtime64_r __gmtime_r # define __localtime64_r __localtime_r # define __mktime64 mktime # define __timegm64 timegm #endif #ifndef _LIBC /* Although glibc source code uses leading underscores, Gnulib wants ordinary names. Portable standalone applications should supply a <time.h> that declares a POSIX-compliant localtime_r, for the benefit of older implementations that lack localtime_r or have a nonstandard one. Similarly for gmtime_r. See the gnulib time_r module for one way to implement this. */ # undef __gmtime_r # undef __localtime_r # define __gmtime_r gmtime_r # define __localtime_r localtime_r # define __mktime_internal mktime_internal #endif /* Subroutine of mktime. Return the time_t representation of TP and normalize TP, given that a struct tm * maps to a time_t as performed by FUNC. Record next guess for localtime-gmtime offset in *OFFSET. */ extern __time64_t __mktime_internal (struct tm *tp, struct tm *(*func) (__time64_t const *, struct tm *), mktime_offset_t *offset) attribute_hidden; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getprogname.c����������������������������������������������������������������������0000644�0000000�0000000�00000022326�14226564450�013343� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2016-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "getprogname.h" #include <errno.h> /* get program_invocation_name declaration */ #include <stdlib.h> /* get __argv declaration */ #ifdef _AIX # include <unistd.h> # include <procinfo.h> # include <string.h> #endif #ifdef __MVS__ # ifndef _OPEN_SYS # define _OPEN_SYS # endif # include <string.h> # include <sys/ps.h> #endif #ifdef __hpux # include <unistd.h> # include <sys/param.h> # include <sys/pstat.h> # include <string.h> #endif #if defined __sgi || defined __osf__ # include <string.h> # include <unistd.h> # include <stdio.h> # include <fcntl.h> # include <sys/procfs.h> #endif #if defined __SCO_VERSION__ || defined __sysv5__ # include <fcntl.h> # include <stdlib.h> # include <string.h> #endif #include "basename-lgpl.h" #ifndef HAVE_GETPROGNAME /* not Mac OS X, FreeBSD, NetBSD, OpenBSD >= 5.4, Cygwin */ char const * getprogname (void) { # if HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return program_invocation_short_name; # elif HAVE_DECL_PROGRAM_INVOCATION_NAME /* glibc, BeOS */ /* https://www.gnu.org/software/libc/manual/html_node/Error-Messages.html */ return last_component (program_invocation_name); # elif HAVE_GETEXECNAME /* Solaris */ /* https://docs.oracle.com/cd/E19253-01/816-5168/6mbb3hrb1/index.html */ const char *p = getexecname (); if (!p) p = "?"; return last_component (p); # elif HAVE_DECL___ARGV /* mingw, MSVC */ /* https://docs.microsoft.com/en-us/cpp/c-runtime-library/argc-argv-wargv */ const char *p = __argv && __argv[0] ? __argv[0] : "?"; return last_component (p); # elif HAVE_VAR___PROGNAME /* OpenBSD, Android, QNX */ /* https://man.openbsd.org/style.9 */ /* http://www.qnx.de/developers/docs/6.5.0/index.jsp?topic=%2Fcom.qnx.doc.neutrino_lib_ref%2Fp%2F__progname.html */ /* Be careful to declare this only when we absolutely need it (OpenBSD 5.1), rather than when it's available. Otherwise, its mere declaration makes program_invocation_short_name malfunction (have zero length) with Fedora 25's glibc. */ extern char *__progname; const char *p = __progname; # if defined __ANDROID__ return last_component (p); # else return p && p[0] ? p : "?"; # endif # elif _AIX /* AIX */ /* Idea by Bastien ROUCARIÈS, https://lists.gnu.org/r/bug-gnulib/2010-12/msg00095.html Reference: https://www.ibm.com/support/knowledgecenter/en/ssw_aix_61/com.ibm.aix.basetrf1/getprocs.htm */ static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct procentry64 procs; p = (0 < getprocs64 (&procs, sizeof procs, NULL, 0, &pid, 1) ? strdup (procs.pi_comm) : NULL); if (!p) p = "?"; } return p; # elif defined __hpux static char *p; static int first = 1; if (first) { first = 0; pid_t pid = getpid (); struct pst_status status; if (pstat_getproc (&status, sizeof status, 0, pid) > 0) { char *ucomm = status.pst_ucomm; char *cmd = status.pst_cmd; if (strlen (ucomm) < PST_UCOMMLEN - 1) p = ucomm; else { /* ucomm is truncated to length PST_UCOMMLEN - 1. Look at cmd instead. */ char *space = strchr (cmd, ' '); if (space != NULL) *space = '\0'; p = strrchr (cmd, '/'); if (p != NULL) p++; else p = cmd; if (strlen (p) > PST_UCOMMLEN - 1 && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) /* p is less truncated than ucomm. */ ; else p = ucomm; } p = strdup (p); } else { # if !defined __LP64__ /* Support for 32-bit programs running in 64-bit HP-UX. The documented way to do this is to use the same source code as above, but in a compilation unit where '#define _PSTAT64 1' is in effect. I prefer a single compilation unit; the struct size and the offsets are not going to change. */ char status64[1216]; if (__pstat_getproc64 (status64, sizeof status64, 0, pid) > 0) { char *ucomm = status64 + 288; char *cmd = status64 + 168; if (strlen (ucomm) < PST_UCOMMLEN - 1) p = ucomm; else { /* ucomm is truncated to length PST_UCOMMLEN - 1. Look at cmd instead. */ char *space = strchr (cmd, ' '); if (space != NULL) *space = '\0'; p = strrchr (cmd, '/'); if (p != NULL) p++; else p = cmd; if (strlen (p) > PST_UCOMMLEN - 1 && memcmp (p, ucomm, PST_UCOMMLEN - 1) == 0) /* p is less truncated than ucomm. */ ; else p = ucomm; } p = strdup (p); } else # endif p = NULL; } if (!p) p = "?"; } return p; # elif __MVS__ /* z/OS */ /* https://www.ibm.com/support/knowledgecenter/SSLTBW_2.1.0/com.ibm.zos.v2r1.bpxbd00/rtwgetp.htm */ static char *p = "?"; static int first = 1; if (first) { pid_t pid = getpid (); int token; W_PSPROC buf; first = 0; memset (&buf, 0, sizeof(buf)); buf.ps_cmdptr = (char *) malloc (buf.ps_cmdlen = PS_CMDBLEN_LONG); buf.ps_conttyptr = (char *) malloc (buf.ps_conttylen = PS_CONTTYBLEN); buf.ps_pathptr = (char *) malloc (buf.ps_pathlen = PS_PATHBLEN); if (buf.ps_cmdptr && buf.ps_conttyptr && buf.ps_pathptr) { for (token = 0; token >= 0; token = w_getpsent (token, &buf, sizeof(buf))) { if (token > 0 && buf.ps_pid == pid) { char *s = strdup (last_component (buf.ps_pathptr)); if (s) p = s; break; } } } free (buf.ps_cmdptr); free (buf.ps_conttyptr); free (buf.ps_pathptr); } return p; # elif defined __sgi || defined __osf__ /* IRIX or Tru64 */ char filename[50]; int fd; # if defined __sgi sprintf (filename, "/proc/pinfo/%d", (int) getpid ()); # else sprintf (filename, "/proc/%d", (int) getpid ()); # endif fd = open (filename, O_RDONLY | O_CLOEXEC); if (0 <= fd) { prpsinfo_t buf; int ioctl_ok = 0 <= ioctl (fd, PIOCPSINFO, &buf); close (fd); if (ioctl_ok) { char *name = buf.pr_fname; size_t namesize = sizeof buf.pr_fname; /* It may not be NUL-terminated. */ char *namenul = memchr (name, '\0', namesize); size_t namelen = namenul ? namenul - name : namesize; char *namecopy = malloc (namelen + 1); if (namecopy) { namecopy[namelen] = '\0'; return memcpy (namecopy, name, namelen); } } } return NULL; # elif defined __SCO_VERSION__ || defined __sysv5__ /* SCO OpenServer6/UnixWare */ char buf[80]; int fd; sprintf (buf, "/proc/%d/cmdline", getpid()); fd = open (buf, O_RDONLY); if (0 <= fd) { size_t n = read (fd, buf, 79); if (n > 0) { buf[n] = '\0'; /* Guarantee null-termination */ char *progname; progname = strrchr (buf, '/'); if (progname) { progname = progname + 1; /* Skip the '/' */ } else { progname = buf; } char *ret; ret = malloc (strlen (progname) + 1); if (ret) { strcpy (ret, progname); return ret; } } close (fd); } return "?"; # else # error "getprogname module not ported to this OS" # endif } #endif /* * Hey Emacs! * Local Variables: * coding: utf-8 * End: */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/utime.in.h�������������������������������������������������������������������������0000644�0000000�0000000�00000006617�14226564451�012576� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <utime.h>. Copyright (C) 2017-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_UTIME_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UTIME_H@ # @INCLUDE_NEXT@ @NEXT_UTIME_H@ #endif #ifndef _@GUARD_PREFIX@_UTIME_H #define _@GUARD_PREFIX@_UTIME_H #if !@HAVE_UTIME_H@ # include <sys/utime.h> #endif #if @GNULIB_UTIME@ /* Get struct timespec. */ # include <time.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if defined _WIN32 && ! defined __CYGWIN__ /* Define 'struct utimbuf' as an alias of 'struct _utimbuf' (or possibly, if present, 'struct __utimbuf64'). */ # define utimbuf _utimbuf #endif #if @GNULIB_UTIME@ # if @REPLACE_UTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define utime rpl_utime # endif _GL_FUNCDECL_RPL (utime, int, (const char *filename, const struct utimbuf *ts) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (utime, int, (const char *filename, const struct utimbuf *ts)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef utime # define utime _utime # endif _GL_CXXALIAS_MDA (utime, int, (const char *filename, const struct utimbuf *ts)); # else # if !@HAVE_UTIME@ _GL_FUNCDECL_SYS (utime, int, (const char *filename, const struct utimbuf *ts) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (utime, int, (const char *filename, const struct utimbuf *ts)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (utime); # endif #elif defined GNULIB_POSIXCHECK # undef utime # if HAVE_RAW_DECL_UTIME _GL_WARN_ON_USE (utime, "utime is unportable - " "use gnulib module canonicalize-lgpl for portability"); # endif #elif @GNULIB_MDA_UTIME@ /* On native Windows, map 'utime' to '_utime', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::utime always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef utime # define utime _utime # endif _GL_CXXALIAS_MDA (utime, int, (const char *filename, const struct utimbuf *ts)); # else _GL_CXXALIAS_SYS (utime, int, (const char *filename, const struct utimbuf *ts)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (utime); # endif #endif #if @GNULIB_UTIME@ extern int _gl_utimens_windows (const char *filename, struct timespec ts[2]); #endif #endif /* _@GUARD_PREFIX@_UTIME_H */ #endif /* _@GUARD_PREFIX@_UTIME_H */ �����������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fatal-signal.h���������������������������������������������������������������������0000644�0000000�0000000�00000007572�14226564447�013416� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emergency actions in case of a fatal signal. Copyright (C) 2003-2004, 2009-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _FATAL_SIGNAL_H #define _FATAL_SIGNAL_H #include <signal.h> #ifdef __cplusplus extern "C" { #endif /* It is often useful to do some cleanup action when a usually fatal signal terminates the process, like removing a temporary file or killing a subprocess that may be stuck waiting for a device, pipe or network input. Such signals are SIGHUP, SIGINT, SIGPIPE, SIGTERM, and possibly others. The limitation of this facility is that it cannot work for SIGKILL. Signals with a SIG_IGN handler are considered to be non-fatal. The functions in this file assume that when a SIG_IGN handler is installed for a signal, it was installed before any functions in this file were called and it stays so for the whole lifetime of the process. */ /* Register a cleanup function to be executed when a catchable fatal signal occurs. Restrictions for the cleanup function: - The cleanup function can do all kinds of system calls. It may also modify (clobber) errno. - It can also access application dependent memory locations and data structures provided they are in a consistent state. One way to ensure this is through block_fatal_signals()/unblock_fatal_signals(), see below. Another - more tricky - way to ensure this is the careful use of 'volatile'. However, - malloc() and similarly complex facilities are not safe to be called because they are not guaranteed to be in a consistent state. - Also, the cleanup function must not block the catchable fatal signals and leave them blocked upon return. The cleanup function is executed asynchronously. It is unspecified whether during its execution the catchable fatal signals are blocked or not. Return 0 upon success, or -1 if there was a memory allocation problem. */ extern int at_fatal_signal (_GL_ASYNC_SAFE void (*function) (int sig)); /* Sometimes it is necessary to block the usually fatal signals while the data structures being accessed by the cleanup action are being built or reorganized. This is the case, for example, when a temporary file or directory is created through mkstemp() or mkdtemp(), because these functions create the temporary file or directory _before_ returning its name to the application. */ /* Temporarily delay the catchable fatal signals. The signals will be blocked (= delayed) until the next call to unblock_fatal_signals(). If the signals are already blocked, a further call to block_fatal_signals() has no effect. */ extern void block_fatal_signals (void); /* Stop delaying the catchable fatal signals. */ extern void unblock_fatal_signals (void); /* Return the list of signals that block_fatal_signals/unblock_fatal_signals would block or unblock. Fills signals[0..count-1] and returns count. */ extern unsigned int get_fatal_signals (int signals[64]); /* Return the list of signals that block_fatal_signals/unblock_fatal_signals would block or unblock. */ extern const sigset_t * get_fatal_signal_set (void); #ifdef __cplusplus } #endif #endif /* _FATAL_SIGNAL_H */ ��������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fseek.c����������������������������������������������������������������������������0000644�0000000�0000000�00000002057�14226564447�012135� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An fseek() function that, together with fflush(), is POSIX compliant. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Get off_t. */ #include <unistd.h> int fseek (FILE *fp, long offset, int whence) { /* Use the replacement fseeko function with all its workarounds. */ return fseeko (fp, (off_t)offset, whence); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getline.c��������������������������������������������������������������������������0000644�0000000�0000000�00000001730�14226564450�012456� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getline.c --- Implementation of replacement getline function. Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson. */ #include <config.h> #include <stdio.h> ssize_t getline (char **lineptr, size_t *n, FILE *stream) { return getdelim (lineptr, n, '\n', stream); } ����������������������������������������recutils-1.9/lib/regcomp.c��������������������������������������������������������������������������0000644�0000000�0000000�00000331775�14226564450�012502� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extended regular expression matching and search library. Copyright (C) 2002-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. Contributed by Isamu Hasegawa <isamu@yamato.ibm.com>. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifdef _LIBC # include <locale/weight.h> #endif static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, size_t length, reg_syntax_t syntax); static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap); static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len); static void free_charset (re_charset_t *cset); static void free_workarea_compile (regex_t *preg); static reg_errcode_t create_initial_state (re_dfa_t *dfa); static void optimize_utf8 (re_dfa_t *dfa); static reg_errcode_t analyze (regex_t *preg); static reg_errcode_t preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra); static reg_errcode_t postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra); static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node); static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node); static bin_tree_t *lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node); static reg_errcode_t calc_first (void *extra, bin_tree_t *node); static reg_errcode_t calc_next (void *extra, bin_tree_t *node); static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node); static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint); static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, unsigned int constraint); static reg_errcode_t calc_eclosure (re_dfa_t *dfa); static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root); static reg_errcode_t calc_inveclosure (re_dfa_t *dfa); static Idx fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax); static int peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax); static bin_tree_t *parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, reg_errcode_t *err); static bin_tree_t *parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err); static bin_tree_t *parse_dup_op (bin_tree_t *dup_elem, re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err); static bin_tree_t *parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err); static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token, int token_len, re_dfa_t *dfa, reg_syntax_t syntax, bool accept_hyphen); static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token); static reg_errcode_t build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, Idx *equiv_class_alloc, const unsigned char *name); static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, re_charset_t *mbcset, Idx *char_class_alloc, const char *class_name, reg_syntax_t syntax); static bin_tree_t *build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, const char *class_name, const char *extra, bool non_match, reg_errcode_t *err); static bin_tree_t *create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, re_token_type_t type); static bin_tree_t *create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, const re_token_t *token); static bin_tree_t *duplicate_tree (const bin_tree_t *src, re_dfa_t *dfa); static void free_token (re_token_t *node); static reg_errcode_t free_tree (void *extra, bin_tree_t *node); static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node); /* This table gives an error message for each of the error codes listed in regex.h. Obviously the order here has to be same as there. POSIX doesn't require that we do anything for REG_NOERROR, but why not be nice? */ static const char __re_error_msgid[] = { #define REG_NOERROR_IDX 0 gettext_noop ("Success") /* REG_NOERROR */ "\0" #define REG_NOMATCH_IDX (REG_NOERROR_IDX + sizeof "Success") gettext_noop ("No match") /* REG_NOMATCH */ "\0" #define REG_BADPAT_IDX (REG_NOMATCH_IDX + sizeof "No match") gettext_noop ("Invalid regular expression") /* REG_BADPAT */ "\0" #define REG_ECOLLATE_IDX (REG_BADPAT_IDX + sizeof "Invalid regular expression") gettext_noop ("Invalid collation character") /* REG_ECOLLATE */ "\0" #define REG_ECTYPE_IDX (REG_ECOLLATE_IDX + sizeof "Invalid collation character") gettext_noop ("Invalid character class name") /* REG_ECTYPE */ "\0" #define REG_EESCAPE_IDX (REG_ECTYPE_IDX + sizeof "Invalid character class name") gettext_noop ("Trailing backslash") /* REG_EESCAPE */ "\0" #define REG_ESUBREG_IDX (REG_EESCAPE_IDX + sizeof "Trailing backslash") gettext_noop ("Invalid back reference") /* REG_ESUBREG */ "\0" #define REG_EBRACK_IDX (REG_ESUBREG_IDX + sizeof "Invalid back reference") gettext_noop ("Unmatched [, [^, [:, [., or [=") /* REG_EBRACK */ "\0" #define REG_EPAREN_IDX (REG_EBRACK_IDX + sizeof "Unmatched [, [^, [:, [., or [=") gettext_noop ("Unmatched ( or \\(") /* REG_EPAREN */ "\0" #define REG_EBRACE_IDX (REG_EPAREN_IDX + sizeof "Unmatched ( or \\(") gettext_noop ("Unmatched \\{") /* REG_EBRACE */ "\0" #define REG_BADBR_IDX (REG_EBRACE_IDX + sizeof "Unmatched \\{") gettext_noop ("Invalid content of \\{\\}") /* REG_BADBR */ "\0" #define REG_ERANGE_IDX (REG_BADBR_IDX + sizeof "Invalid content of \\{\\}") gettext_noop ("Invalid range end") /* REG_ERANGE */ "\0" #define REG_ESPACE_IDX (REG_ERANGE_IDX + sizeof "Invalid range end") gettext_noop ("Memory exhausted") /* REG_ESPACE */ "\0" #define REG_BADRPT_IDX (REG_ESPACE_IDX + sizeof "Memory exhausted") gettext_noop ("Invalid preceding regular expression") /* REG_BADRPT */ "\0" #define REG_EEND_IDX (REG_BADRPT_IDX + sizeof "Invalid preceding regular expression") gettext_noop ("Premature end of regular expression") /* REG_EEND */ "\0" #define REG_ESIZE_IDX (REG_EEND_IDX + sizeof "Premature end of regular expression") gettext_noop ("Regular expression too big") /* REG_ESIZE */ "\0" #define REG_ERPAREN_IDX (REG_ESIZE_IDX + sizeof "Regular expression too big") gettext_noop ("Unmatched ) or \\)") /* REG_ERPAREN */ }; static const size_t __re_error_msgid_idx[] = { REG_NOERROR_IDX, REG_NOMATCH_IDX, REG_BADPAT_IDX, REG_ECOLLATE_IDX, REG_ECTYPE_IDX, REG_EESCAPE_IDX, REG_ESUBREG_IDX, REG_EBRACK_IDX, REG_EPAREN_IDX, REG_EBRACE_IDX, REG_BADBR_IDX, REG_ERANGE_IDX, REG_ESPACE_IDX, REG_BADRPT_IDX, REG_EEND_IDX, REG_ESIZE_IDX, REG_ERPAREN_IDX }; /* Entry points for GNU code. */ /* re_compile_pattern is the GNU regular expression compiler: it compiles PATTERN (of length LENGTH) and puts the result in BUFP. Returns 0 if the pattern was valid, otherwise an error string. Assumes the 'allocated' (and perhaps 'buffer') and 'translate' fields are set in BUFP on entry. */ const char * re_compile_pattern (const char *pattern, size_t length, struct re_pattern_buffer *bufp) { reg_errcode_t ret; /* And GNU code determines whether or not to get register information by passing null for the REGS argument to re_match, etc., not by setting no_sub, unless RE_NO_SUB is set. */ bufp->no_sub = !!(re_syntax_options & RE_NO_SUB); /* Match anchors at newline. */ bufp->newline_anchor = 1; ret = re_compile_internal (bufp, pattern, length, re_syntax_options); if (!ret) return NULL; return gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); } weak_alias (__re_compile_pattern, re_compile_pattern) /* Set by 're_set_syntax' to the current regexp syntax to recognize. Can also be assigned to arbitrarily: each pattern buffer stores its own syntax, so it can be changed between regex compilations. */ /* This has no initializer because initialized variables in Emacs become read-only after dumping. */ reg_syntax_t re_syntax_options; /* Specify the precise syntax of regexps for compilation. This provides for compatibility for various utilities which historically have different, incompatible syntaxes. The argument SYNTAX is a bit mask comprised of the various bits defined in regex.h. We return the old syntax. */ reg_syntax_t re_set_syntax (reg_syntax_t syntax) { reg_syntax_t ret = re_syntax_options; re_syntax_options = syntax; return ret; } weak_alias (__re_set_syntax, re_set_syntax) int re_compile_fastmap (struct re_pattern_buffer *bufp) { re_dfa_t *dfa = bufp->buffer; char *fastmap = bufp->fastmap; memset (fastmap, '\0', sizeof (char) * SBC_MAX); re_compile_fastmap_iter (bufp, dfa->init_state, fastmap); if (dfa->init_state != dfa->init_state_word) re_compile_fastmap_iter (bufp, dfa->init_state_word, fastmap); if (dfa->init_state != dfa->init_state_nl) re_compile_fastmap_iter (bufp, dfa->init_state_nl, fastmap); if (dfa->init_state != dfa->init_state_begbuf) re_compile_fastmap_iter (bufp, dfa->init_state_begbuf, fastmap); bufp->fastmap_accurate = 1; return 0; } weak_alias (__re_compile_fastmap, re_compile_fastmap) static __always_inline void re_set_fastmap (char *fastmap, bool icase, int ch) { fastmap[ch] = 1; if (icase) fastmap[tolower (ch)] = 1; } /* Helper function for re_compile_fastmap. Compile fastmap for the initial_state INIT_STATE. */ static void re_compile_fastmap_iter (regex_t *bufp, const re_dfastate_t *init_state, char *fastmap) { re_dfa_t *dfa = bufp->buffer; Idx node_cnt; bool icase = (dfa->mb_cur_max == 1 && (bufp->syntax & RE_ICASE)); for (node_cnt = 0; node_cnt < init_state->nodes.nelem; ++node_cnt) { Idx node = init_state->nodes.elems[node_cnt]; re_token_type_t type = dfa->nodes[node].type; if (type == CHARACTER) { re_set_fastmap (fastmap, icase, dfa->nodes[node].opr.c); if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) { unsigned char buf[MB_LEN_MAX]; unsigned char *p; wchar_t wc; mbstate_t state; p = buf; *p++ = dfa->nodes[node].opr.c; while (++node < dfa->nodes_len && dfa->nodes[node].type == CHARACTER && dfa->nodes[node].mb_partial) *p++ = dfa->nodes[node].opr.c; memset (&state, '\0', sizeof (state)); if (__mbrtowc (&wc, (const char *) buf, p - buf, &state) == p - buf && (__wcrtomb ((char *) buf, __towlower (wc), &state) != (size_t) -1)) re_set_fastmap (fastmap, false, buf[0]); } } else if (type == SIMPLE_BRACKET) { int i, ch; for (i = 0, ch = 0; i < BITSET_WORDS; ++i) { int j; bitset_word_t w = dfa->nodes[node].opr.sbcset[i]; for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) if (w & ((bitset_word_t) 1 << j)) re_set_fastmap (fastmap, icase, ch); } } else if (type == COMPLEX_BRACKET) { re_charset_t *cset = dfa->nodes[node].opr.mbcset; Idx i; #ifdef _LIBC /* See if we have to try all bytes which start multiple collation elements. e.g. In da_DK, we want to catch 'a' since "aa" is a valid collation element, and don't catch 'b' since 'b' is the only collation element which starts from 'b' (and it is caught by SIMPLE_BRACKET). */ if (_NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES) != 0 && (cset->ncoll_syms || cset->nranges)) { const int32_t *table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); for (i = 0; i < SBC_MAX; ++i) if (table[i] < 0) re_set_fastmap (fastmap, icase, i); } #endif /* _LIBC */ /* See if we have to start the match at all multibyte characters, i.e. where we would not find an invalid sequence. This only applies to multibyte character sets; for single byte character sets, the SIMPLE_BRACKET again suffices. */ if (dfa->mb_cur_max > 1 && (cset->nchar_classes || cset->non_match || cset->nranges #ifdef _LIBC || cset->nequiv_classes #endif /* _LIBC */ )) { unsigned char c = 0; do { mbstate_t mbs; memset (&mbs, 0, sizeof (mbs)); if (__mbrtowc (NULL, (char *) &c, 1, &mbs) == (size_t) -2) re_set_fastmap (fastmap, false, (int) c); } while (++c != 0); } else { /* ... Else catch all bytes which can start the mbchars. */ for (i = 0; i < cset->nmbchars; ++i) { char buf[256]; mbstate_t state; memset (&state, '\0', sizeof (state)); if (__wcrtomb (buf, cset->mbchars[i], &state) != (size_t) -1) re_set_fastmap (fastmap, icase, *(unsigned char *) buf); if ((bufp->syntax & RE_ICASE) && dfa->mb_cur_max > 1) { if (__wcrtomb (buf, __towlower (cset->mbchars[i]), &state) != (size_t) -1) re_set_fastmap (fastmap, false, *(unsigned char *) buf); } } } } else if (type == OP_PERIOD || type == OP_UTF8_PERIOD || type == END_OF_RE) { memset (fastmap, '\1', sizeof (char) * SBC_MAX); if (type == END_OF_RE) bufp->can_be_null = 1; return; } } } /* Entry point for POSIX code. */ /* regcomp takes a regular expression as a string and compiles it. PREG is a regex_t *. We do not expect any fields to be initialized, since POSIX says we shouldn't. Thus, we set 'buffer' to the compiled pattern; 'used' to the length of the compiled pattern; 'syntax' to RE_SYNTAX_POSIX_EXTENDED if the REG_EXTENDED bit in CFLAGS is set; otherwise, to RE_SYNTAX_POSIX_BASIC; 'newline_anchor' to REG_NEWLINE being set in CFLAGS; 'fastmap' to an allocated space for the fastmap; 'fastmap_accurate' to zero; 're_nsub' to the number of subexpressions in PATTERN. PATTERN is the address of the pattern string. CFLAGS is a series of bits which affect compilation. If REG_EXTENDED is set, we use POSIX extended syntax; otherwise, we use POSIX basic syntax. If REG_NEWLINE is set, then . and [^...] don't match newline. Also, regexec will try a match beginning after every newline. If REG_ICASE is set, then we considers upper- and lowercase versions of letters to be equivalent when matching. If REG_NOSUB is set, then when PREG is passed to regexec, that routine will report only success or failure, and nothing about the registers. It returns 0 if it succeeds, nonzero if it doesn't. (See regex.h for the return codes and their meanings.) */ int regcomp (regex_t *__restrict preg, const char *__restrict pattern, int cflags) { reg_errcode_t ret; reg_syntax_t syntax = ((cflags & REG_EXTENDED) ? RE_SYNTAX_POSIX_EXTENDED : RE_SYNTAX_POSIX_BASIC); preg->buffer = NULL; preg->allocated = 0; preg->used = 0; /* Try to allocate space for the fastmap. */ preg->fastmap = re_malloc (char, SBC_MAX); if (__glibc_unlikely (preg->fastmap == NULL)) return REG_ESPACE; syntax |= (cflags & REG_ICASE) ? RE_ICASE : 0; /* If REG_NEWLINE is set, newlines are treated differently. */ if (cflags & REG_NEWLINE) { /* REG_NEWLINE implies neither . nor [^...] match newline. */ syntax &= ~RE_DOT_NEWLINE; syntax |= RE_HAT_LISTS_NOT_NEWLINE; /* It also changes the matching behavior. */ preg->newline_anchor = 1; } else preg->newline_anchor = 0; preg->no_sub = !!(cflags & REG_NOSUB); preg->translate = NULL; ret = re_compile_internal (preg, pattern, strlen (pattern), syntax); /* POSIX doesn't distinguish between an unmatched open-group and an unmatched close-group: both are REG_EPAREN. */ if (ret == REG_ERPAREN) ret = REG_EPAREN; /* We have already checked preg->fastmap != NULL. */ if (__glibc_likely (ret == REG_NOERROR)) /* Compute the fastmap now, since regexec cannot modify the pattern buffer. This function never fails in this implementation. */ (void) re_compile_fastmap (preg); else { /* Some error occurred while compiling the expression. */ re_free (preg->fastmap); preg->fastmap = NULL; } return (int) ret; } libc_hidden_def (__regcomp) weak_alias (__regcomp, regcomp) /* Returns a message corresponding to an error code, ERRCODE, returned from either regcomp or regexec. We don't use PREG here. */ size_t regerror (int errcode, const regex_t *__restrict preg, char *__restrict errbuf, size_t errbuf_size) { const char *msg; size_t msg_size; int nerrcodes = sizeof __re_error_msgid_idx / sizeof __re_error_msgid_idx[0]; if (__glibc_unlikely (errcode < 0 || errcode >= nerrcodes)) /* Only error codes returned by the rest of the code should be passed to this routine. If we are given anything else, or if other regex code generates an invalid error code, then the program has a bug. Dump core so we can fix it. */ abort (); msg = gettext (__re_error_msgid + __re_error_msgid_idx[errcode]); msg_size = strlen (msg) + 1; /* Includes the null. */ if (__glibc_likely (errbuf_size != 0)) { size_t cpy_size = msg_size; if (__glibc_unlikely (msg_size > errbuf_size)) { cpy_size = errbuf_size - 1; errbuf[cpy_size] = '\0'; } memcpy (errbuf, msg, cpy_size); } return msg_size; } weak_alias (__regerror, regerror) /* This static array is used for the map to single-byte characters when UTF-8 is used. Otherwise we would allocate memory just to initialize it the same all the time. UTF-8 is the preferred encoding so this is a worthwhile optimization. */ static const bitset_t utf8_sb_map = { /* Set the first 128 bits. */ #if (defined __GNUC__ || __clang_major__ >= 4) && !defined __STRICT_ANSI__ [0 ... 0x80 / BITSET_WORD_BITS - 1] = BITSET_WORD_MAX #else # if 4 * BITSET_WORD_BITS < ASCII_CHARS # error "bitset_word_t is narrower than 32 bits" # elif 3 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, BITSET_WORD_MAX, BITSET_WORD_MAX, # elif 2 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, BITSET_WORD_MAX, # elif 1 * BITSET_WORD_BITS < ASCII_CHARS BITSET_WORD_MAX, # endif (BITSET_WORD_MAX >> (SBC_MAX % BITSET_WORD_BITS == 0 ? 0 : BITSET_WORD_BITS - SBC_MAX % BITSET_WORD_BITS)) #endif }; static void free_dfa_content (re_dfa_t *dfa) { Idx i, j; if (dfa->nodes) for (i = 0; i < dfa->nodes_len; ++i) free_token (dfa->nodes + i); re_free (dfa->nexts); for (i = 0; i < dfa->nodes_len; ++i) { if (dfa->eclosures != NULL) re_node_set_free (dfa->eclosures + i); if (dfa->inveclosures != NULL) re_node_set_free (dfa->inveclosures + i); if (dfa->edests != NULL) re_node_set_free (dfa->edests + i); } re_free (dfa->edests); re_free (dfa->eclosures); re_free (dfa->inveclosures); re_free (dfa->nodes); if (dfa->state_table) for (i = 0; i <= dfa->state_hash_mask; ++i) { struct re_state_table_entry *entry = dfa->state_table + i; for (j = 0; j < entry->num; ++j) { re_dfastate_t *state = entry->array[j]; free_state (state); } re_free (entry->array); } re_free (dfa->state_table); if (dfa->sb_char != utf8_sb_map) re_free (dfa->sb_char); re_free (dfa->subexp_map); #ifdef DEBUG re_free (dfa->re_str); #endif re_free (dfa); } /* Free dynamically allocated space used by PREG. */ void regfree (regex_t *preg) { re_dfa_t *dfa = preg->buffer; if (__glibc_likely (dfa != NULL)) { lock_fini (dfa->lock); free_dfa_content (dfa); } preg->buffer = NULL; preg->allocated = 0; re_free (preg->fastmap); preg->fastmap = NULL; re_free (preg->translate); preg->translate = NULL; } libc_hidden_def (__regfree) weak_alias (__regfree, regfree) /* Entry points compatible with 4.2 BSD regex library. We don't define them unless specifically requested. */ #if defined _REGEX_RE_COMP || defined _LIBC /* BSD has one and only one pattern buffer. */ static struct re_pattern_buffer re_comp_buf; char * # ifdef _LIBC /* Make these definitions weak in libc, so POSIX programs can redefine these names if they don't use our functions, and still use regcomp/regexec above without link errors. */ weak_function # endif re_comp (const char *s) { reg_errcode_t ret; char *fastmap; if (!s) { if (!re_comp_buf.buffer) return gettext ("No previous regular expression"); return 0; } if (re_comp_buf.buffer) { fastmap = re_comp_buf.fastmap; re_comp_buf.fastmap = NULL; __regfree (&re_comp_buf); memset (&re_comp_buf, '\0', sizeof (re_comp_buf)); re_comp_buf.fastmap = fastmap; } if (re_comp_buf.fastmap == NULL) { re_comp_buf.fastmap = re_malloc (char, SBC_MAX); if (re_comp_buf.fastmap == NULL) return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) REG_ESPACE]); } /* Since 're_exec' always passes NULL for the 'regs' argument, we don't need to initialize the pattern buffer fields which affect it. */ /* Match anchors at newlines. */ re_comp_buf.newline_anchor = 1; ret = re_compile_internal (&re_comp_buf, s, strlen (s), re_syntax_options); if (!ret) return NULL; /* Yes, we're discarding 'const' here if !HAVE_LIBINTL. */ return (char *) gettext (__re_error_msgid + __re_error_msgid_idx[(int) ret]); } #ifdef _LIBC libc_freeres_fn (free_mem) { __regfree (&re_comp_buf); } #endif #endif /* _REGEX_RE_COMP */ /* Internal entry point. Compile the regular expression PATTERN, whose length is LENGTH. SYNTAX indicate regular expression's syntax. */ static reg_errcode_t re_compile_internal (regex_t *preg, const char * pattern, size_t length, reg_syntax_t syntax) { reg_errcode_t err = REG_NOERROR; re_dfa_t *dfa; re_string_t regexp; /* Initialize the pattern buffer. */ preg->fastmap_accurate = 0; preg->syntax = syntax; preg->not_bol = preg->not_eol = 0; preg->used = 0; preg->re_nsub = 0; preg->can_be_null = 0; preg->regs_allocated = REGS_UNALLOCATED; /* Initialize the dfa. */ dfa = preg->buffer; if (__glibc_unlikely (preg->allocated < sizeof (re_dfa_t))) { /* If zero allocated, but buffer is non-null, try to realloc enough space. This loses if buffer's address is bogus, but that is the user's responsibility. If ->buffer is NULL this is a simple allocation. */ dfa = re_realloc (preg->buffer, re_dfa_t, 1); if (dfa == NULL) return REG_ESPACE; preg->allocated = sizeof (re_dfa_t); preg->buffer = dfa; } preg->used = sizeof (re_dfa_t); err = init_dfa (dfa, length); if (__glibc_unlikely (err == REG_NOERROR && lock_init (dfa->lock) != 0)) err = REG_ESPACE; if (__glibc_unlikely (err != REG_NOERROR)) { free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; return err; } #ifdef DEBUG /* Note: length+1 will not overflow since it is checked in init_dfa. */ dfa->re_str = re_malloc (char, length + 1); strncpy (dfa->re_str, pattern, length + 1); #endif err = re_string_construct (®exp, pattern, length, preg->translate, (syntax & RE_ICASE) != 0, dfa); if (__glibc_unlikely (err != REG_NOERROR)) { re_compile_internal_free_return: free_workarea_compile (preg); re_string_destruct (®exp); lock_fini (dfa->lock); free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; return err; } /* Parse the regular expression, and build a structure tree. */ preg->re_nsub = 0; dfa->str_tree = parse (®exp, preg, syntax, &err); if (__glibc_unlikely (dfa->str_tree == NULL)) goto re_compile_internal_free_return; /* Analyze the tree and create the nfa. */ err = analyze (preg); if (__glibc_unlikely (err != REG_NOERROR)) goto re_compile_internal_free_return; /* If possible, do searching in single byte encoding to speed things up. */ if (dfa->is_utf8 && !(syntax & RE_ICASE) && preg->translate == NULL) optimize_utf8 (dfa); /* Then create the initial state of the dfa. */ err = create_initial_state (dfa); /* Release work areas. */ free_workarea_compile (preg); re_string_destruct (®exp); if (__glibc_unlikely (err != REG_NOERROR)) { lock_fini (dfa->lock); free_dfa_content (dfa); preg->buffer = NULL; preg->allocated = 0; } return err; } /* Initialize DFA. We use the length of the regular expression PAT_LEN as the initial length of some arrays. */ static reg_errcode_t init_dfa (re_dfa_t *dfa, size_t pat_len) { __re_size_t table_size; #ifndef _LIBC const char *codeset_name; #endif size_t max_i18n_object_size = MAX (sizeof (wchar_t), sizeof (wctype_t)); size_t max_object_size = MAX (sizeof (struct re_state_table_entry), MAX (sizeof (re_token_t), MAX (sizeof (re_node_set), MAX (sizeof (regmatch_t), max_i18n_object_size)))); memset (dfa, '\0', sizeof (re_dfa_t)); /* Force allocation of str_tree_storage the first time. */ dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; /* Avoid overflows. The extra "/ 2" is for the table_size doubling calculation below, and for similar doubling calculations elsewhere. And it's <= rather than <, because some of the doubling calculations add 1 afterwards. */ if (__glibc_unlikely (MIN (IDX_MAX, SIZE_MAX / max_object_size) / 2 <= pat_len)) return REG_ESPACE; dfa->nodes_alloc = pat_len + 1; dfa->nodes = re_malloc (re_token_t, dfa->nodes_alloc); /* table_size = 2 ^ ceil(log pat_len) */ for (table_size = 1; ; table_size <<= 1) if (table_size > pat_len) break; dfa->state_table = calloc (sizeof (struct re_state_table_entry), table_size); dfa->state_hash_mask = table_size - 1; dfa->mb_cur_max = MB_CUR_MAX; #ifdef _LIBC if (dfa->mb_cur_max == 6 && strcmp (_NL_CURRENT (LC_CTYPE, _NL_CTYPE_CODESET_NAME), "UTF-8") == 0) dfa->is_utf8 = 1; dfa->map_notascii = (_NL_CURRENT_WORD (LC_CTYPE, _NL_CTYPE_MAP_TO_NONASCII) != 0); #else codeset_name = nl_langinfo (CODESET); if ((codeset_name[0] == 'U' || codeset_name[0] == 'u') && (codeset_name[1] == 'T' || codeset_name[1] == 't') && (codeset_name[2] == 'F' || codeset_name[2] == 'f') && strcmp (codeset_name + 3 + (codeset_name[3] == '-'), "8") == 0) dfa->is_utf8 = 1; /* We check exhaustively in the loop below if this charset is a superset of ASCII. */ dfa->map_notascii = 0; #endif if (dfa->mb_cur_max > 1) { if (dfa->is_utf8) dfa->sb_char = (re_bitset_ptr_t) utf8_sb_map; else { int i, j, ch; dfa->sb_char = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); if (__glibc_unlikely (dfa->sb_char == NULL)) return REG_ESPACE; /* Set the bits corresponding to single byte chars. */ for (i = 0, ch = 0; i < BITSET_WORDS; ++i) for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) { wint_t wch = __btowc (ch); if (wch != WEOF) dfa->sb_char[i] |= (bitset_word_t) 1 << j; #ifndef _LIBC if (isascii (ch) && wch != ch) dfa->map_notascii = 1; #endif } } } if (__glibc_unlikely (dfa->nodes == NULL || dfa->state_table == NULL)) return REG_ESPACE; return REG_NOERROR; } /* Initialize WORD_CHAR table, which indicate which character is "word". In this case "word" means that it is the word construction character used by some operators like "\<", "\>", etc. */ static void init_word_char (re_dfa_t *dfa) { int i = 0; int j; int ch = 0; dfa->word_ops_used = 1; if (__glibc_likely (dfa->map_notascii == 0)) { bitset_word_t bits0 = 0x00000000; bitset_word_t bits1 = 0x03ff0000; bitset_word_t bits2 = 0x87fffffe; bitset_word_t bits3 = 0x07fffffe; if (BITSET_WORD_BITS == 64) { /* Pacify gcc -Woverflow on 32-bit platformns. */ dfa->word_char[0] = bits1 << 31 << 1 | bits0; dfa->word_char[1] = bits3 << 31 << 1 | bits2; i = 2; } else if (BITSET_WORD_BITS == 32) { dfa->word_char[0] = bits0; dfa->word_char[1] = bits1; dfa->word_char[2] = bits2; dfa->word_char[3] = bits3; i = 4; } else goto general_case; ch = 128; if (__glibc_likely (dfa->is_utf8)) { memset (&dfa->word_char[i], '\0', (SBC_MAX - ch) / 8); return; } } general_case: for (; i < BITSET_WORDS; ++i) for (j = 0; j < BITSET_WORD_BITS; ++j, ++ch) if (isalnum (ch) || ch == '_') dfa->word_char[i] |= (bitset_word_t) 1 << j; } /* Free the work area which are only used while compiling. */ static void free_workarea_compile (regex_t *preg) { re_dfa_t *dfa = preg->buffer; bin_tree_storage_t *storage, *next; for (storage = dfa->str_tree_storage; storage; storage = next) { next = storage->next; re_free (storage); } dfa->str_tree_storage = NULL; dfa->str_tree_storage_idx = BIN_TREE_STORAGE_SIZE; dfa->str_tree = NULL; re_free (dfa->org_indices); dfa->org_indices = NULL; } /* Create initial states for all contexts. */ static reg_errcode_t create_initial_state (re_dfa_t *dfa) { Idx first, i; reg_errcode_t err; re_node_set init_nodes; /* Initial states have the epsilon closure of the node which is the first node of the regular expression. */ first = dfa->str_tree->first->node_idx; dfa->init_node = first; err = re_node_set_init_copy (&init_nodes, dfa->eclosures + first); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* The back-references which are in initial states can epsilon transit, since in this case all of the subexpressions can be null. Then we add epsilon closures of the nodes which are the next nodes of the back-references. */ if (dfa->nbackref > 0) for (i = 0; i < init_nodes.nelem; ++i) { Idx node_idx = init_nodes.elems[i]; re_token_type_t type = dfa->nodes[node_idx].type; Idx clexp_idx; if (type != OP_BACK_REF) continue; for (clexp_idx = 0; clexp_idx < init_nodes.nelem; ++clexp_idx) { re_token_t *clexp_node; clexp_node = dfa->nodes + init_nodes.elems[clexp_idx]; if (clexp_node->type == OP_CLOSE_SUBEXP && clexp_node->opr.idx == dfa->nodes[node_idx].opr.idx) break; } if (clexp_idx == init_nodes.nelem) continue; if (type == OP_BACK_REF) { Idx dest_idx = dfa->edests[node_idx].elems[0]; if (!re_node_set_contains (&init_nodes, dest_idx)) { reg_errcode_t merge_err = re_node_set_merge (&init_nodes, dfa->eclosures + dest_idx); if (merge_err != REG_NOERROR) return merge_err; i = 0; } } } /* It must be the first time to invoke acquire_state. */ dfa->init_state = re_acquire_state_context (&err, dfa, &init_nodes, 0); /* We don't check ERR here, since the initial state must not be NULL. */ if (__glibc_unlikely (dfa->init_state == NULL)) return err; if (dfa->init_state->has_constraint) { dfa->init_state_word = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_WORD); dfa->init_state_nl = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_NEWLINE); dfa->init_state_begbuf = re_acquire_state_context (&err, dfa, &init_nodes, CONTEXT_NEWLINE | CONTEXT_BEGBUF); if (__glibc_unlikely (dfa->init_state_word == NULL || dfa->init_state_nl == NULL || dfa->init_state_begbuf == NULL)) return err; } else dfa->init_state_word = dfa->init_state_nl = dfa->init_state_begbuf = dfa->init_state; re_node_set_free (&init_nodes); return REG_NOERROR; } /* If it is possible to do searching in single byte encoding instead of UTF-8 to speed things up, set dfa->mb_cur_max to 1, clear is_utf8 and change DFA nodes where needed. */ static void optimize_utf8 (re_dfa_t *dfa) { Idx node; int i; bool mb_chars = false; bool has_period = false; for (node = 0; node < dfa->nodes_len; ++node) switch (dfa->nodes[node].type) { case CHARACTER: if (dfa->nodes[node].opr.c >= ASCII_CHARS) mb_chars = true; break; case ANCHOR: switch (dfa->nodes[node].opr.ctx_type) { case LINE_FIRST: case LINE_LAST: case BUF_FIRST: case BUF_LAST: break; default: /* Word anchors etc. cannot be handled. It's okay to test opr.ctx_type since constraints (for all DFA nodes) are created by ORing one or more opr.ctx_type values. */ return; } break; case OP_PERIOD: has_period = true; break; case OP_BACK_REF: case OP_ALT: case END_OF_RE: case OP_DUP_ASTERISK: case OP_OPEN_SUBEXP: case OP_CLOSE_SUBEXP: break; case COMPLEX_BRACKET: return; case SIMPLE_BRACKET: /* Just double check. */ { int rshift = (ASCII_CHARS % BITSET_WORD_BITS == 0 ? 0 : BITSET_WORD_BITS - ASCII_CHARS % BITSET_WORD_BITS); for (i = ASCII_CHARS / BITSET_WORD_BITS; i < BITSET_WORDS; ++i) { if (dfa->nodes[node].opr.sbcset[i] >> rshift != 0) return; rshift = 0; } } break; default: abort (); } if (mb_chars || has_period) for (node = 0; node < dfa->nodes_len; ++node) { if (dfa->nodes[node].type == CHARACTER && dfa->nodes[node].opr.c >= ASCII_CHARS) dfa->nodes[node].mb_partial = 0; else if (dfa->nodes[node].type == OP_PERIOD) dfa->nodes[node].type = OP_UTF8_PERIOD; } /* The search can be in single byte locale. */ dfa->mb_cur_max = 1; dfa->is_utf8 = 0; dfa->has_mb_node = dfa->nbackref > 0 || has_period; } /* Analyze the structure tree, and calculate "first", "next", "edest", "eclosure", and "inveclosure". */ static reg_errcode_t analyze (regex_t *preg) { re_dfa_t *dfa = preg->buffer; reg_errcode_t ret; /* Allocate arrays. */ dfa->nexts = re_malloc (Idx, dfa->nodes_alloc); dfa->org_indices = re_malloc (Idx, dfa->nodes_alloc); dfa->edests = re_malloc (re_node_set, dfa->nodes_alloc); dfa->eclosures = re_malloc (re_node_set, dfa->nodes_alloc); if (__glibc_unlikely (dfa->nexts == NULL || dfa->org_indices == NULL || dfa->edests == NULL || dfa->eclosures == NULL)) return REG_ESPACE; dfa->subexp_map = re_malloc (Idx, preg->re_nsub); if (dfa->subexp_map != NULL) { Idx i; for (i = 0; i < preg->re_nsub; i++) dfa->subexp_map[i] = i; preorder (dfa->str_tree, optimize_subexps, dfa); for (i = 0; i < preg->re_nsub; i++) if (dfa->subexp_map[i] != i) break; if (i == preg->re_nsub) { re_free (dfa->subexp_map); dfa->subexp_map = NULL; } } ret = postorder (dfa->str_tree, lower_subexps, preg); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; ret = postorder (dfa->str_tree, calc_first, dfa); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; preorder (dfa->str_tree, calc_next, dfa); ret = preorder (dfa->str_tree, link_nfa_nodes, dfa); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; ret = calc_eclosure (dfa); if (__glibc_unlikely (ret != REG_NOERROR)) return ret; /* We only need this during the prune_impossible_nodes pass in regexec.c; skip it if p_i_n will not run, as calc_inveclosure can be quadratic. */ if ((!preg->no_sub && preg->re_nsub > 0 && dfa->has_plural_match) || dfa->nbackref) { dfa->inveclosures = re_malloc (re_node_set, dfa->nodes_len); if (__glibc_unlikely (dfa->inveclosures == NULL)) return REG_ESPACE; ret = calc_inveclosure (dfa); } return ret; } /* Our parse trees are very unbalanced, so we cannot use a stack to implement parse tree visits. Instead, we use parent pointers and some hairy code in these two functions. */ static reg_errcode_t postorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra) { bin_tree_t *node, *prev; for (node = root; ; ) { /* Descend down the tree, preferably to the left (or to the right if that's the only child). */ while (node->left || node->right) if (node->left) node = node->left; else node = node->right; do { reg_errcode_t err = fn (extra, node); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (node->parent == NULL) return REG_NOERROR; prev = node; node = node->parent; } /* Go up while we have a node that is reached from the right. */ while (node->right == prev || node->right == NULL); node = node->right; } } static reg_errcode_t preorder (bin_tree_t *root, reg_errcode_t (fn (void *, bin_tree_t *)), void *extra) { bin_tree_t *node; for (node = root; ; ) { reg_errcode_t err = fn (extra, node); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* Go to the left node, or up and to the right. */ if (node->left) node = node->left; else { bin_tree_t *prev = NULL; while (node->right == prev || node->right == NULL) { prev = node; node = node->parent; if (!node) return REG_NOERROR; } node = node->right; } } } /* Optimization pass: if a SUBEXP is entirely contained, strip it and tell re_search_internal to map the inner one's opr.idx to this one's. Adjust backreferences as well. Requires a preorder visit. */ static reg_errcode_t optimize_subexps (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; if (node->token.type == OP_BACK_REF && dfa->subexp_map) { int idx = node->token.opr.idx; node->token.opr.idx = dfa->subexp_map[idx]; dfa->used_bkref_map |= 1 << node->token.opr.idx; } else if (node->token.type == SUBEXP && node->left && node->left->token.type == SUBEXP) { Idx other_idx = node->left->token.opr.idx; node->left = node->left->left; if (node->left) node->left->parent = node; dfa->subexp_map[other_idx] = dfa->subexp_map[node->token.opr.idx]; if (other_idx < BITSET_WORD_BITS) dfa->used_bkref_map &= ~((bitset_word_t) 1 << other_idx); } return REG_NOERROR; } /* Lowering pass: Turn each SUBEXP node into the appropriate concatenation of OP_OPEN_SUBEXP, the body of the SUBEXP (if any) and OP_CLOSE_SUBEXP. */ static reg_errcode_t lower_subexps (void *extra, bin_tree_t *node) { regex_t *preg = (regex_t *) extra; reg_errcode_t err = REG_NOERROR; if (node->left && node->left->token.type == SUBEXP) { node->left = lower_subexp (&err, preg, node->left); if (node->left) node->left->parent = node; } if (node->right && node->right->token.type == SUBEXP) { node->right = lower_subexp (&err, preg, node->right); if (node->right) node->right->parent = node; } return err; } static bin_tree_t * lower_subexp (reg_errcode_t *err, regex_t *preg, bin_tree_t *node) { re_dfa_t *dfa = preg->buffer; bin_tree_t *body = node->left; bin_tree_t *op, *cls, *tree1, *tree; if (preg->no_sub /* We do not optimize empty subexpressions, because otherwise we may have bad CONCAT nodes with NULL children. This is obviously not very common, so we do not lose much. An example that triggers this case is the sed "script" /\(\)/x. */ && node->left != NULL && (node->token.opr.idx >= BITSET_WORD_BITS || !(dfa->used_bkref_map & ((bitset_word_t) 1 << node->token.opr.idx)))) return node->left; /* Convert the SUBEXP node to the concatenation of an OP_OPEN_SUBEXP, the contents, and an OP_CLOSE_SUBEXP. */ op = create_tree (dfa, NULL, NULL, OP_OPEN_SUBEXP); cls = create_tree (dfa, NULL, NULL, OP_CLOSE_SUBEXP); tree1 = body ? create_tree (dfa, body, cls, CONCAT) : cls; tree = create_tree (dfa, op, tree1, CONCAT); if (__glibc_unlikely (tree == NULL || tree1 == NULL || op == NULL || cls == NULL)) { *err = REG_ESPACE; return NULL; } op->token.opr.idx = cls->token.opr.idx = node->token.opr.idx; op->token.opt_subexp = cls->token.opt_subexp = node->token.opt_subexp; return tree; } /* Pass 1 in building the NFA: compute FIRST and create unlinked automaton nodes. Requires a postorder visit. */ static reg_errcode_t calc_first (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; if (node->token.type == CONCAT) { node->first = node->left->first; node->node_idx = node->left->node_idx; } else { node->first = node; node->node_idx = re_dfa_add_node (dfa, node->token); if (__glibc_unlikely (node->node_idx == -1)) return REG_ESPACE; if (node->token.type == ANCHOR) dfa->nodes[node->node_idx].constraint = node->token.opr.ctx_type; } return REG_NOERROR; } /* Pass 2: compute NEXT on the tree. Preorder visit. */ static reg_errcode_t calc_next (void *extra, bin_tree_t *node) { switch (node->token.type) { case OP_DUP_ASTERISK: node->left->next = node; break; case CONCAT: node->left->next = node->right->first; node->right->next = node->next; break; default: if (node->left) node->left->next = node->next; if (node->right) node->right->next = node->next; break; } return REG_NOERROR; } /* Pass 3: link all DFA nodes to their NEXT node (any order will do). */ static reg_errcode_t link_nfa_nodes (void *extra, bin_tree_t *node) { re_dfa_t *dfa = (re_dfa_t *) extra; Idx idx = node->node_idx; reg_errcode_t err = REG_NOERROR; switch (node->token.type) { case CONCAT: break; case END_OF_RE: DEBUG_ASSERT (node->next == NULL); break; case OP_DUP_ASTERISK: case OP_ALT: { Idx left, right; dfa->has_plural_match = 1; if (node->left != NULL) left = node->left->first->node_idx; else left = node->next->node_idx; if (node->right != NULL) right = node->right->first->node_idx; else right = node->next->node_idx; DEBUG_ASSERT (left > -1); DEBUG_ASSERT (right > -1); err = re_node_set_init_2 (dfa->edests + idx, left, right); } break; case ANCHOR: case OP_OPEN_SUBEXP: case OP_CLOSE_SUBEXP: err = re_node_set_init_1 (dfa->edests + idx, node->next->node_idx); break; case OP_BACK_REF: dfa->nexts[idx] = node->next->node_idx; if (node->token.type == OP_BACK_REF) err = re_node_set_init_1 (dfa->edests + idx, dfa->nexts[idx]); break; default: DEBUG_ASSERT (!IS_EPSILON_NODE (node->token.type)); dfa->nexts[idx] = node->next->node_idx; break; } return err; } /* Duplicate the epsilon closure of the node ROOT_NODE. Note that duplicated nodes have constraint INIT_CONSTRAINT in addition to their own constraint. */ static reg_errcode_t duplicate_node_closure (re_dfa_t *dfa, Idx top_org_node, Idx top_clone_node, Idx root_node, unsigned int init_constraint) { Idx org_node, clone_node; bool ok; unsigned int constraint = init_constraint; for (org_node = top_org_node, clone_node = top_clone_node;;) { Idx org_dest, clone_dest; if (dfa->nodes[org_node].type == OP_BACK_REF) { /* If the back reference epsilon-transit, its destination must also have the constraint. Then duplicate the epsilon closure of the destination of the back reference, and store it in edests of the back reference. */ org_dest = dfa->nexts[org_node]; re_node_set_empty (dfa->edests + clone_node); clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; dfa->nexts[clone_node] = dfa->nexts[org_node]; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } else if (dfa->edests[org_node].nelem == 0) { /* In case of the node can't epsilon-transit, don't duplicate the destination and store the original destination as the destination of the node. */ dfa->nexts[clone_node] = dfa->nexts[org_node]; break; } else if (dfa->edests[org_node].nelem == 1) { /* In case of the node can epsilon-transit, and it has only one destination. */ org_dest = dfa->edests[org_node].elems[0]; re_node_set_empty (dfa->edests + clone_node); /* If the node is root_node itself, it means the epsilon closure has a loop. Then tie it to the destination of the root_node. */ if (org_node == root_node && clone_node != org_node) { ok = re_node_set_insert (dfa->edests + clone_node, org_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; break; } /* In case the node has another constraint, append it. */ constraint |= dfa->nodes[org_node].constraint; clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } else /* dfa->edests[org_node].nelem == 2 */ { /* In case of the node can epsilon-transit, and it has two destinations. In the bin_tree_t and DFA, that's '|' and '*'. */ org_dest = dfa->edests[org_node].elems[0]; re_node_set_empty (dfa->edests + clone_node); /* Search for a duplicated node which satisfies the constraint. */ clone_dest = search_duplicated_node (dfa, org_dest, constraint); if (clone_dest == -1) { /* There is no such duplicated node, create a new one. */ reg_errcode_t err; clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; err = duplicate_node_closure (dfa, org_dest, clone_dest, root_node, constraint); if (__glibc_unlikely (err != REG_NOERROR)) return err; } else { /* There is a duplicated node which satisfies the constraint, use it to avoid infinite loop. */ ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } org_dest = dfa->edests[org_node].elems[1]; clone_dest = duplicate_node (dfa, org_dest, constraint); if (__glibc_unlikely (clone_dest == -1)) return REG_ESPACE; ok = re_node_set_insert (dfa->edests + clone_node, clone_dest); if (__glibc_unlikely (! ok)) return REG_ESPACE; } org_node = org_dest; clone_node = clone_dest; } return REG_NOERROR; } /* Search for a node which is duplicated from the node ORG_NODE, and satisfies the constraint CONSTRAINT. */ static Idx search_duplicated_node (const re_dfa_t *dfa, Idx org_node, unsigned int constraint) { Idx idx; for (idx = dfa->nodes_len - 1; dfa->nodes[idx].duplicated && idx > 0; --idx) { if (org_node == dfa->org_indices[idx] && constraint == dfa->nodes[idx].constraint) return idx; /* Found. */ } return -1; /* Not found. */ } /* Duplicate the node whose index is ORG_IDX and set the constraint CONSTRAINT. Return the index of the new node, or -1 if insufficient storage is available. */ static Idx duplicate_node (re_dfa_t *dfa, Idx org_idx, unsigned int constraint) { Idx dup_idx = re_dfa_add_node (dfa, dfa->nodes[org_idx]); if (__glibc_likely (dup_idx != -1)) { dfa->nodes[dup_idx].constraint = constraint; dfa->nodes[dup_idx].constraint |= dfa->nodes[org_idx].constraint; dfa->nodes[dup_idx].duplicated = 1; /* Store the index of the original node. */ dfa->org_indices[dup_idx] = org_idx; } return dup_idx; } static reg_errcode_t calc_inveclosure (re_dfa_t *dfa) { Idx src, idx; bool ok; for (idx = 0; idx < dfa->nodes_len; ++idx) re_node_set_init_empty (dfa->inveclosures + idx); for (src = 0; src < dfa->nodes_len; ++src) { Idx *elems = dfa->eclosures[src].elems; for (idx = 0; idx < dfa->eclosures[src].nelem; ++idx) { ok = re_node_set_insert_last (dfa->inveclosures + elems[idx], src); if (__glibc_unlikely (! ok)) return REG_ESPACE; } } return REG_NOERROR; } /* Calculate "eclosure" for all the node in DFA. */ static reg_errcode_t calc_eclosure (re_dfa_t *dfa) { Idx node_idx; bool incomplete; DEBUG_ASSERT (dfa->nodes_len > 0); incomplete = false; /* For each nodes, calculate epsilon closure. */ for (node_idx = 0; ; ++node_idx) { reg_errcode_t err; re_node_set eclosure_elem; if (node_idx == dfa->nodes_len) { if (!incomplete) break; incomplete = false; node_idx = 0; } DEBUG_ASSERT (dfa->eclosures[node_idx].nelem != -1); /* If we have already calculated, skip it. */ if (dfa->eclosures[node_idx].nelem != 0) continue; /* Calculate epsilon closure of 'node_idx'. */ err = calc_eclosure_iter (&eclosure_elem, dfa, node_idx, true); if (__glibc_unlikely (err != REG_NOERROR)) return err; if (dfa->eclosures[node_idx].nelem == 0) { incomplete = true; re_node_set_free (&eclosure_elem); } } return REG_NOERROR; } /* Calculate epsilon closure of NODE. */ static reg_errcode_t calc_eclosure_iter (re_node_set *new_set, re_dfa_t *dfa, Idx node, bool root) { reg_errcode_t err; Idx i; re_node_set eclosure; bool incomplete = false; err = re_node_set_alloc (&eclosure, dfa->edests[node].nelem + 1); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* An epsilon closure includes itself. */ eclosure.elems[eclosure.nelem++] = node; /* This indicates that we are calculating this node now. We reference this value to avoid infinite loop. */ dfa->eclosures[node].nelem = -1; /* If the current node has constraints, duplicate all nodes since they must inherit the constraints. */ if (dfa->nodes[node].constraint && dfa->edests[node].nelem && !dfa->nodes[dfa->edests[node].elems[0]].duplicated) { err = duplicate_node_closure (dfa, node, node, node, dfa->nodes[node].constraint); if (__glibc_unlikely (err != REG_NOERROR)) return err; } /* Expand each epsilon destination nodes. */ if (IS_EPSILON_NODE(dfa->nodes[node].type)) for (i = 0; i < dfa->edests[node].nelem; ++i) { re_node_set eclosure_elem; Idx edest = dfa->edests[node].elems[i]; /* If calculating the epsilon closure of 'edest' is in progress, return intermediate result. */ if (dfa->eclosures[edest].nelem == -1) { incomplete = true; continue; } /* If we haven't calculated the epsilon closure of 'edest' yet, calculate now. Otherwise use calculated epsilon closure. */ if (dfa->eclosures[edest].nelem == 0) { err = calc_eclosure_iter (&eclosure_elem, dfa, edest, false); if (__glibc_unlikely (err != REG_NOERROR)) return err; } else eclosure_elem = dfa->eclosures[edest]; /* Merge the epsilon closure of 'edest'. */ err = re_node_set_merge (&eclosure, &eclosure_elem); if (__glibc_unlikely (err != REG_NOERROR)) return err; /* If the epsilon closure of 'edest' is incomplete, the epsilon closure of this node is also incomplete. */ if (dfa->eclosures[edest].nelem == 0) { incomplete = true; re_node_set_free (&eclosure_elem); } } if (incomplete && !root) dfa->eclosures[node].nelem = 0; else dfa->eclosures[node] = eclosure; *new_set = eclosure; return REG_NOERROR; } /* Functions for token which are used in the parser. */ /* Fetch a token from INPUT. We must not use this function inside bracket expressions. */ static void fetch_token (re_token_t *result, re_string_t *input, reg_syntax_t syntax) { re_string_skip_bytes (input, peek_token (result, input, syntax)); } /* Peek a token from INPUT, and return the length of the token. We must not use this function inside bracket expressions. */ static int peek_token (re_token_t *token, re_string_t *input, reg_syntax_t syntax) { unsigned char c; if (re_string_eoi (input)) { token->type = END_OF_RE; return 0; } c = re_string_peek_byte (input, 0); token->opr.c = c; token->word_char = 0; token->mb_partial = 0; if (input->mb_cur_max > 1 && !re_string_first_byte (input, re_string_cur_idx (input))) { token->type = CHARACTER; token->mb_partial = 1; return 1; } if (c == '\\') { unsigned char c2; if (re_string_cur_idx (input) + 1 >= re_string_length (input)) { token->type = BACK_SLASH; return 1; } c2 = re_string_peek_byte_case (input, 1); token->opr.c = c2; token->type = CHARACTER; if (input->mb_cur_max > 1) { wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input) + 1); token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; } else token->word_char = IS_WORD_CHAR (c2) != 0; switch (c2) { case '|': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_NO_BK_VBAR)) token->type = OP_ALT; break; case '1': case '2': case '3': case '4': case '5': case '6': case '7': case '8': case '9': if (!(syntax & RE_NO_BK_REFS)) { token->type = OP_BACK_REF; token->opr.idx = c2 - '1'; } break; case '<': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_FIRST; } break; case '>': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_LAST; } break; case 'b': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = WORD_DELIM; } break; case 'B': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = NOT_WORD_DELIM; } break; case 'w': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_WORD; break; case 'W': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_NOTWORD; break; case 's': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_SPACE; break; case 'S': if (!(syntax & RE_NO_GNU_OPS)) token->type = OP_NOTSPACE; break; case '`': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = BUF_FIRST; } break; case '\'': if (!(syntax & RE_NO_GNU_OPS)) { token->type = ANCHOR; token->opr.ctx_type = BUF_LAST; } break; case '(': if (!(syntax & RE_NO_BK_PARENS)) token->type = OP_OPEN_SUBEXP; break; case ')': if (!(syntax & RE_NO_BK_PARENS)) token->type = OP_CLOSE_SUBEXP; break; case '+': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_PLUS; break; case '?': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_QUESTION; break; case '{': if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) token->type = OP_OPEN_DUP_NUM; break; case '}': if ((syntax & RE_INTERVALS) && (!(syntax & RE_NO_BK_BRACES))) token->type = OP_CLOSE_DUP_NUM; break; default: break; } return 2; } token->type = CHARACTER; if (input->mb_cur_max > 1) { wint_t wc = re_string_wchar_at (input, re_string_cur_idx (input)); token->word_char = IS_WIDE_WORD_CHAR (wc) != 0; } else token->word_char = IS_WORD_CHAR (token->opr.c); switch (c) { case '\n': if (syntax & RE_NEWLINE_ALT) token->type = OP_ALT; break; case '|': if (!(syntax & RE_LIMITED_OPS) && (syntax & RE_NO_BK_VBAR)) token->type = OP_ALT; break; case '*': token->type = OP_DUP_ASTERISK; break; case '+': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_PLUS; break; case '?': if (!(syntax & RE_LIMITED_OPS) && !(syntax & RE_BK_PLUS_QM)) token->type = OP_DUP_QUESTION; break; case '{': if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) token->type = OP_OPEN_DUP_NUM; break; case '}': if ((syntax & RE_INTERVALS) && (syntax & RE_NO_BK_BRACES)) token->type = OP_CLOSE_DUP_NUM; break; case '(': if (syntax & RE_NO_BK_PARENS) token->type = OP_OPEN_SUBEXP; break; case ')': if (syntax & RE_NO_BK_PARENS) token->type = OP_CLOSE_SUBEXP; break; case '[': token->type = OP_OPEN_BRACKET; break; case '.': token->type = OP_PERIOD; break; case '^': if (!(syntax & (RE_CONTEXT_INDEP_ANCHORS | RE_CARET_ANCHORS_HERE)) && re_string_cur_idx (input) != 0) { char prev = re_string_peek_byte (input, -1); if (!(syntax & RE_NEWLINE_ALT) || prev != '\n') break; } token->type = ANCHOR; token->opr.ctx_type = LINE_FIRST; break; case '$': if (!(syntax & RE_CONTEXT_INDEP_ANCHORS) && re_string_cur_idx (input) + 1 != re_string_length (input)) { re_token_t next; re_string_skip_bytes (input, 1); peek_token (&next, input, syntax); re_string_skip_bytes (input, -1); if (next.type != OP_ALT && next.type != OP_CLOSE_SUBEXP) break; } token->type = ANCHOR; token->opr.ctx_type = LINE_LAST; break; default: break; } return 1; } /* Peek a token from INPUT, and return the length of the token. We must not use this function out of bracket expressions. */ static int peek_token_bracket (re_token_t *token, re_string_t *input, reg_syntax_t syntax) { unsigned char c; if (re_string_eoi (input)) { token->type = END_OF_RE; return 0; } c = re_string_peek_byte (input, 0); token->opr.c = c; if (input->mb_cur_max > 1 && !re_string_first_byte (input, re_string_cur_idx (input))) { token->type = CHARACTER; return 1; } if (c == '\\' && (syntax & RE_BACKSLASH_ESCAPE_IN_LISTS) && re_string_cur_idx (input) + 1 < re_string_length (input)) { /* In this case, '\' escape a character. */ unsigned char c2; re_string_skip_bytes (input, 1); c2 = re_string_peek_byte (input, 0); token->opr.c = c2; token->type = CHARACTER; return 1; } if (c == '[') /* '[' is a special char in a bracket exps. */ { unsigned char c2; int token_len; if (re_string_cur_idx (input) + 1 < re_string_length (input)) c2 = re_string_peek_byte (input, 1); else c2 = 0; token->opr.c = c2; token_len = 2; switch (c2) { case '.': token->type = OP_OPEN_COLL_ELEM; break; case '=': token->type = OP_OPEN_EQUIV_CLASS; break; case ':': if (syntax & RE_CHAR_CLASSES) { token->type = OP_OPEN_CHAR_CLASS; break; } FALLTHROUGH; default: token->type = CHARACTER; token->opr.c = c; token_len = 1; break; } return token_len; } switch (c) { case '-': token->type = OP_CHARSET_RANGE; break; case ']': token->type = OP_CLOSE_BRACKET; break; case '^': token->type = OP_NON_MATCH_LIST; break; default: token->type = CHARACTER; } return 1; } /* Functions for parser. */ /* Entry point of the parser. Parse the regular expression REGEXP and return the structure tree. If an error occurs, ERR is set by error code, and return NULL. This function build the following tree, from regular expression <reg_exp>: CAT / \ / \ <reg_exp> EOR CAT means concatenation. EOR means end of regular expression. */ static bin_tree_t * parse (re_string_t *regexp, regex_t *preg, reg_syntax_t syntax, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree, *eor, *root; re_token_t current_token; dfa->syntax = syntax; fetch_token (¤t_token, regexp, syntax | RE_CARET_ANCHORS_HERE); tree = parse_reg_exp (regexp, preg, ¤t_token, syntax, 0, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; eor = create_tree (dfa, NULL, NULL, END_OF_RE); if (tree != NULL) root = create_tree (dfa, tree, eor, CONCAT); else root = eor; if (__glibc_unlikely (eor == NULL || root == NULL)) { *err = REG_ESPACE; return NULL; } return root; } /* This function build the following tree, from regular expression <branch1>|<branch2>: ALT / \ / \ <branch1> <branch2> ALT means alternative, which represents the operator '|'. */ static bin_tree_t * parse_reg_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree, *branch = NULL; bitset_word_t initial_bkref_map = dfa->completed_bkref_map; tree = parse_branch (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; while (token->type == OP_ALT) { fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); if (token->type != OP_ALT && token->type != END_OF_RE && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) { bitset_word_t accumulated_bkref_map = dfa->completed_bkref_map; dfa->completed_bkref_map = initial_bkref_map; branch = parse_branch (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && branch == NULL)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } dfa->completed_bkref_map |= accumulated_bkref_map; } else branch = NULL; tree = create_tree (dfa, tree, branch, OP_ALT); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } } return tree; } /* This function build the following tree, from regular expression <exp1><exp2>: CAT / \ / \ <exp1> <exp2> CAT means concatenation. */ static bin_tree_t * parse_branch (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { bin_tree_t *tree, *expr; re_dfa_t *dfa = preg->buffer; tree = parse_expression (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; while (token->type != OP_ALT && token->type != END_OF_RE && (nest == 0 || token->type != OP_CLOSE_SUBEXP)) { expr = parse_expression (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err != REG_NOERROR && expr == NULL)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } if (tree != NULL && expr != NULL) { bin_tree_t *newtree = create_tree (dfa, tree, expr, CONCAT); if (newtree == NULL) { postorder (expr, free_tree, NULL); postorder (tree, free_tree, NULL); *err = REG_ESPACE; return NULL; } tree = newtree; } else if (tree == NULL) tree = expr; /* Otherwise expr == NULL, we don't need to create new tree. */ } return tree; } /* This function build the following tree, from regular expression a*: * | a */ static bin_tree_t * parse_expression (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree; switch (token->type) { case CHARACTER: tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } if (dfa->mb_cur_max > 1) { while (!re_string_eoi (regexp) && !re_string_first_byte (regexp, re_string_cur_idx (regexp))) { bin_tree_t *mbc_remain; fetch_token (token, regexp, syntax); mbc_remain = create_token_tree (dfa, NULL, NULL, token); tree = create_tree (dfa, tree, mbc_remain, CONCAT); if (__glibc_unlikely (mbc_remain == NULL || tree == NULL)) { *err = REG_ESPACE; return NULL; } } } break; case OP_OPEN_SUBEXP: tree = parse_sub_exp (regexp, preg, token, syntax, nest + 1, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_OPEN_BRACKET: tree = parse_bracket_exp (regexp, dfa, token, syntax, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_BACK_REF: if (!__glibc_likely (dfa->completed_bkref_map & (1 << token->opr.idx))) { *err = REG_ESUBREG; return NULL; } dfa->used_bkref_map |= 1 << token->opr.idx; tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } ++dfa->nbackref; dfa->has_mb_node = 1; break; case OP_OPEN_DUP_NUM: if (syntax & RE_CONTEXT_INVALID_DUP) { *err = REG_BADRPT; return NULL; } FALLTHROUGH; case OP_DUP_ASTERISK: case OP_DUP_PLUS: case OP_DUP_QUESTION: if (syntax & RE_CONTEXT_INVALID_OPS) { *err = REG_BADRPT; return NULL; } else if (syntax & RE_CONTEXT_INDEP_OPS) { fetch_token (token, regexp, syntax); return parse_expression (regexp, preg, token, syntax, nest, err); } FALLTHROUGH; case OP_CLOSE_SUBEXP: if ((token->type == OP_CLOSE_SUBEXP) && !(syntax & RE_UNMATCHED_RIGHT_PAREN_ORD)) { *err = REG_ERPAREN; return NULL; } FALLTHROUGH; case OP_CLOSE_DUP_NUM: /* We treat it as a normal character. */ /* Then we can these characters as normal characters. */ token->type = CHARACTER; /* mb_partial and word_char bits should be initialized already by peek_token. */ tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } break; case ANCHOR: if ((token->opr.ctx_type & (WORD_DELIM | NOT_WORD_DELIM | WORD_FIRST | WORD_LAST)) && dfa->word_ops_used == 0) init_word_char (dfa); if (token->opr.ctx_type == WORD_DELIM || token->opr.ctx_type == NOT_WORD_DELIM) { bin_tree_t *tree_first, *tree_last; if (token->opr.ctx_type == WORD_DELIM) { token->opr.ctx_type = WORD_FIRST; tree_first = create_token_tree (dfa, NULL, NULL, token); token->opr.ctx_type = WORD_LAST; } else { token->opr.ctx_type = INSIDE_WORD; tree_first = create_token_tree (dfa, NULL, NULL, token); token->opr.ctx_type = INSIDE_NOTWORD; } tree_last = create_token_tree (dfa, NULL, NULL, token); tree = create_tree (dfa, tree_first, tree_last, OP_ALT); if (__glibc_unlikely (tree_first == NULL || tree_last == NULL || tree == NULL)) { *err = REG_ESPACE; return NULL; } } else { tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } } /* We must return here, since ANCHORs can't be followed by repetition operators. eg. RE"^*" is invalid or "<ANCHOR(^)><CHAR(*)>", it must not be "<ANCHOR(^)><REPEAT(*)>". */ fetch_token (token, regexp, syntax); return tree; case OP_PERIOD: tree = create_token_tree (dfa, NULL, NULL, token); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } if (dfa->mb_cur_max > 1) dfa->has_mb_node = 1; break; case OP_WORD: case OP_NOTWORD: tree = build_charclass_op (dfa, regexp->trans, "alnum", "_", token->type == OP_NOTWORD, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_SPACE: case OP_NOTSPACE: tree = build_charclass_op (dfa, regexp->trans, "space", "", token->type == OP_NOTSPACE, err); if (__glibc_unlikely (*err != REG_NOERROR && tree == NULL)) return NULL; break; case OP_ALT: case END_OF_RE: return NULL; case BACK_SLASH: *err = REG_EESCAPE; return NULL; default: /* Must not happen? */ DEBUG_ASSERT (false); return NULL; } fetch_token (token, regexp, syntax); while (token->type == OP_DUP_ASTERISK || token->type == OP_DUP_PLUS || token->type == OP_DUP_QUESTION || token->type == OP_OPEN_DUP_NUM) { bin_tree_t *dup_tree = parse_dup_op (tree, regexp, dfa, token, syntax, err); if (__glibc_unlikely (*err != REG_NOERROR && dup_tree == NULL)) { if (tree != NULL) postorder (tree, free_tree, NULL); return NULL; } tree = dup_tree; /* In BRE consecutive duplications are not allowed. */ if ((syntax & RE_CONTEXT_INVALID_DUP) && (token->type == OP_DUP_ASTERISK || token->type == OP_OPEN_DUP_NUM)) { if (tree != NULL) postorder (tree, free_tree, NULL); *err = REG_BADRPT; return NULL; } } return tree; } /* This function build the following tree, from regular expression (<reg_exp>): SUBEXP | <reg_exp> */ static bin_tree_t * parse_sub_exp (re_string_t *regexp, regex_t *preg, re_token_t *token, reg_syntax_t syntax, Idx nest, reg_errcode_t *err) { re_dfa_t *dfa = preg->buffer; bin_tree_t *tree; size_t cur_nsub; cur_nsub = preg->re_nsub++; fetch_token (token, regexp, syntax | RE_CARET_ANCHORS_HERE); /* The subexpression may be a null string. */ if (token->type == OP_CLOSE_SUBEXP) tree = NULL; else { tree = parse_reg_exp (regexp, preg, token, syntax, nest, err); if (__glibc_unlikely (*err == REG_NOERROR && token->type != OP_CLOSE_SUBEXP)) { if (tree != NULL) postorder (tree, free_tree, NULL); *err = REG_EPAREN; } if (__glibc_unlikely (*err != REG_NOERROR)) return NULL; } if (cur_nsub <= '9' - '1') dfa->completed_bkref_map |= 1 << cur_nsub; tree = create_tree (dfa, tree, NULL, SUBEXP); if (__glibc_unlikely (tree == NULL)) { *err = REG_ESPACE; return NULL; } tree->token.opr.idx = cur_nsub; return tree; } /* This function parse repetition operators like "*", "+", "{1,3}" etc. */ static bin_tree_t * parse_dup_op (bin_tree_t *elem, re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) { bin_tree_t *tree = NULL, *old_tree = NULL; Idx i, start, end, start_idx = re_string_cur_idx (regexp); re_token_t start_token = *token; if (token->type == OP_OPEN_DUP_NUM) { end = 0; start = fetch_number (regexp, token, syntax); if (start == -1) { if (token->type == CHARACTER && token->opr.c == ',') start = 0; /* We treat "{,m}" as "{0,m}". */ else { *err = REG_BADBR; /* <re>{} is invalid. */ return NULL; } } if (__glibc_likely (start != -2)) { /* We treat "{n}" as "{n,n}". */ end = ((token->type == OP_CLOSE_DUP_NUM) ? start : ((token->type == CHARACTER && token->opr.c == ',') ? fetch_number (regexp, token, syntax) : -2)); } if (__glibc_unlikely (start == -2 || end == -2)) { /* Invalid sequence. */ if (__glibc_unlikely (!(syntax & RE_INVALID_INTERVAL_ORD))) { if (token->type == END_OF_RE) *err = REG_EBRACE; else *err = REG_BADBR; return NULL; } /* If the syntax bit is set, rollback. */ re_string_set_index (regexp, start_idx); *token = start_token; token->type = CHARACTER; /* mb_partial and word_char bits should be already initialized by peek_token. */ return elem; } if (__glibc_unlikely ((end != -1 && start > end) || token->type != OP_CLOSE_DUP_NUM)) { /* First number greater than second. */ *err = REG_BADBR; return NULL; } if (__glibc_unlikely (RE_DUP_MAX < (end == -1 ? start : end))) { *err = REG_ESIZE; return NULL; } } else { start = (token->type == OP_DUP_PLUS) ? 1 : 0; end = (token->type == OP_DUP_QUESTION) ? 1 : -1; } fetch_token (token, regexp, syntax); if (__glibc_unlikely (elem == NULL)) return NULL; if (__glibc_unlikely (start == 0 && end == 0)) { postorder (elem, free_tree, NULL); return NULL; } /* Extract "<re>{n,m}" to "<re><re>...<re><re>{0,<m-n>}". */ if (__glibc_unlikely (start > 0)) { tree = elem; for (i = 2; i <= start; ++i) { elem = duplicate_tree (elem, dfa); tree = create_tree (dfa, tree, elem, CONCAT); if (__glibc_unlikely (elem == NULL || tree == NULL)) goto parse_dup_op_espace; } if (start == end) return tree; /* Duplicate ELEM before it is marked optional. */ elem = duplicate_tree (elem, dfa); if (__glibc_unlikely (elem == NULL)) goto parse_dup_op_espace; old_tree = tree; } else old_tree = NULL; if (elem->token.type == SUBEXP) { uintptr_t subidx = elem->token.opr.idx; postorder (elem, mark_opt_subexp, (void *) subidx); } tree = create_tree (dfa, elem, NULL, (end == -1 ? OP_DUP_ASTERISK : OP_ALT)); if (__glibc_unlikely (tree == NULL)) goto parse_dup_op_espace; /* This loop is actually executed only when end != -1, to rewrite <re>{0,n} as (<re>(<re>...<re>?)?)?... We have already created the start+1-th copy. */ if (TYPE_SIGNED (Idx) || end != -1) for (i = start + 2; i <= end; ++i) { elem = duplicate_tree (elem, dfa); tree = create_tree (dfa, tree, elem, CONCAT); if (__glibc_unlikely (elem == NULL || tree == NULL)) goto parse_dup_op_espace; tree = create_tree (dfa, tree, NULL, OP_ALT); if (__glibc_unlikely (tree == NULL)) goto parse_dup_op_espace; } if (old_tree) tree = create_tree (dfa, old_tree, tree, CONCAT); return tree; parse_dup_op_espace: *err = REG_ESPACE; return NULL; } /* Size of the names for collating symbol/equivalence_class/character_class. I'm not sure, but maybe enough. */ #define BRACKET_NAME_BUF_SIZE 32 #ifndef _LIBC /* Convert the byte B to the corresponding wide character. In a unibyte locale, treat B as itself. In a multibyte locale, return WEOF if B is an encoding error. */ static wint_t parse_byte (unsigned char b, re_dfa_t const *dfa) { return dfa->mb_cur_max > 1 ? __btowc (b) : b; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and mbcset->range_ends, is a pointer argument since we may update it. */ static reg_errcode_t build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc, bracket_elem_t *start_elem, bracket_elem_t *end_elem, re_dfa_t *dfa, reg_syntax_t syntax, uint_fast32_t nrules, const unsigned char *collseqmb, const char *collseqwc, int_fast32_t table_size, const void *symb_table, const unsigned char *extra) { /* Equivalence Classes and Character Classes can't be a range start/end. */ if (__glibc_unlikely (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS)) return REG_ERANGE; /* We can handle no multi character collating elements without libc support. */ if (__glibc_unlikely ((start_elem->type == COLL_SYM && strlen ((char *) start_elem->opr.name) > 1) || (end_elem->type == COLL_SYM && strlen ((char *) end_elem->opr.name) > 1))) return REG_ECOLLATE; unsigned int start_ch = ((start_elem->type == SB_CHAR) ? start_elem->opr.ch : ((start_elem->type == COLL_SYM) ? start_elem->opr.name[0] : 0)), end_ch = ((end_elem->type == SB_CHAR) ? end_elem->opr.ch : ((end_elem->type == COLL_SYM) ? end_elem->opr.name[0] : 0)); wint_t start_wc = ((start_elem->type == SB_CHAR || start_elem->type == COLL_SYM) ? parse_byte (start_ch, dfa) : start_elem->opr.wch), end_wc = ((end_elem->type == SB_CHAR || end_elem->type == COLL_SYM) ? parse_byte (end_ch, dfa) : end_elem->opr.wch); if (start_wc == WEOF || end_wc == WEOF) return REG_ECOLLATE; else if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES) && start_wc > end_wc)) return REG_ERANGE; /* Got valid collation sequence values, add them as a new entry. However, for !_LIBC we have no collation elements: if the character set is single byte, the single byte character set that we build below suffices. parse_bracket_exp passes no MBCSET if dfa->mb_cur_max == 1. */ if (dfa->mb_cur_max > 1) { /* Check the space of the arrays. */ if (__glibc_unlikely (*range_alloc == mbcset->nranges)) { /* There is not enough space, need realloc. */ wchar_t *new_array_start, *new_array_end; Idx new_nranges; /* +1 in case of mbcset->nranges is 0. */ new_nranges = 2 * mbcset->nranges + 1; /* Use realloc since mbcset->range_starts and mbcset->range_ends are NULL if *range_alloc == 0. */ new_array_start = re_realloc (mbcset->range_starts, wchar_t, new_nranges); new_array_end = re_realloc (mbcset->range_ends, wchar_t, new_nranges); if (__glibc_unlikely (new_array_start == NULL || new_array_end == NULL)) { re_free (new_array_start); re_free (new_array_end); return REG_ESPACE; } mbcset->range_starts = new_array_start; mbcset->range_ends = new_array_end; *range_alloc = new_nranges; } mbcset->range_starts[mbcset->nranges] = start_wc; mbcset->range_ends[mbcset->nranges++] = end_wc; } /* Build the table for single byte characters. */ for (wchar_t wc = 0; wc < SBC_MAX; ++wc) { if (start_wc <= wc && wc <= end_wc) bitset_set (sbcset, wc); } return REG_NOERROR; } #endif /* not _LIBC */ #ifndef _LIBC /* Helper function for parse_bracket_exp only used in case of NOT _LIBC. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a pointer argument since we may update it. */ static reg_errcode_t build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, Idx *coll_sym_alloc, const unsigned char *name, uint_fast32_t nrules, int_fast32_t table_size, const void *symb_table, const unsigned char *extra) { size_t name_len = strlen ((const char *) name); if (__glibc_unlikely (name_len != 1)) return REG_ECOLLATE; else { bitset_set (sbcset, name[0]); return REG_NOERROR; } } #endif /* not _LIBC */ #ifdef _LIBC /* Local function for parse_bracket_exp used in _LIBC environment. Seek the collating symbol entry corresponding to NAME. Return the index of the symbol in the SYMB_TABLE, or -1 if not found. */ static __always_inline int32_t seek_collating_symbol_entry (const unsigned char *name, size_t name_len, const int32_t *symb_table, int_fast32_t table_size, const unsigned char *extra) { int_fast32_t elem; for (elem = 0; elem < table_size; elem++) if (symb_table[2 * elem] != 0) { int32_t idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; if (/* Compare the length of the name. */ name_len == extra[idx] /* Compare the name. */ && memcmp (name, &extra[idx + 1], name_len) == 0) /* Yep, this is the entry. */ return elem; } return -1; } /* Local function for parse_bracket_exp used in _LIBC environment. Look up the collation sequence value of BR_ELEM. Return the value if succeeded, UINT_MAX otherwise. */ static __always_inline unsigned int lookup_collation_sequence_value (bracket_elem_t *br_elem, uint32_t nrules, const unsigned char *collseqmb, const char *collseqwc, int_fast32_t table_size, const int32_t *symb_table, const unsigned char *extra) { if (br_elem->type == SB_CHAR) { /* if (MB_CUR_MAX == 1) */ if (nrules == 0) return collseqmb[br_elem->opr.ch]; else { wint_t wc = __btowc (br_elem->opr.ch); return __collseq_table_lookup (collseqwc, wc); } } else if (br_elem->type == MB_CHAR) { if (nrules != 0) return __collseq_table_lookup (collseqwc, br_elem->opr.wch); } else if (br_elem->type == COLL_SYM) { size_t sym_name_len = strlen ((char *) br_elem->opr.name); if (nrules != 0) { int32_t elem, idx; elem = seek_collating_symbol_entry (br_elem->opr.name, sym_name_len, symb_table, table_size, extra); if (elem != -1) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; /* Skip the byte sequence of the collating element. */ idx += 1 + extra[idx]; /* Adjust for the alignment. */ idx = (idx + 3) & ~3; /* Skip the multibyte collation sequence value. */ idx += sizeof (unsigned int); /* Skip the wide char sequence of the collating element. */ idx += sizeof (unsigned int) * (1 + *(unsigned int *) (extra + idx)); /* Return the collation sequence value. */ return *(unsigned int *) (extra + idx); } else if (sym_name_len == 1) { /* No valid character. Match it as a single byte character. */ return collseqmb[br_elem->opr.name[0]]; } } else if (sym_name_len == 1) return collseqmb[br_elem->opr.name[0]]; } return UINT_MAX; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the range expression which starts from START_ELEM, and ends at END_ELEM. The result are written to MBCSET and SBCSET. RANGE_ALLOC is the allocated size of mbcset->range_starts, and mbcset->range_ends, is a pointer argument since we may update it. */ static __always_inline reg_errcode_t build_range_exp (bitset_t sbcset, re_charset_t *mbcset, Idx *range_alloc, bracket_elem_t *start_elem, bracket_elem_t *end_elem, re_dfa_t *dfa, reg_syntax_t syntax, uint32_t nrules, const unsigned char *collseqmb, const char *collseqwc, int_fast32_t table_size, const int32_t *symb_table, const unsigned char *extra) { unsigned int ch; uint32_t start_collseq; uint32_t end_collseq; /* Equivalence Classes and Character Classes can't be a range start/end. */ if (__glibc_unlikely (start_elem->type == EQUIV_CLASS || start_elem->type == CHAR_CLASS || end_elem->type == EQUIV_CLASS || end_elem->type == CHAR_CLASS)) return REG_ERANGE; /* FIXME: Implement rational ranges here, too. */ start_collseq = lookup_collation_sequence_value (start_elem, nrules, collseqmb, collseqwc, table_size, symb_table, extra); end_collseq = lookup_collation_sequence_value (end_elem, nrules, collseqmb, collseqwc, table_size, symb_table, extra); /* Check start/end collation sequence values. */ if (__glibc_unlikely (start_collseq == UINT_MAX || end_collseq == UINT_MAX)) return REG_ECOLLATE; if (__glibc_unlikely ((syntax & RE_NO_EMPTY_RANGES) && start_collseq > end_collseq)) return REG_ERANGE; /* Got valid collation sequence values, add them as a new entry. However, if we have no collation elements, and the character set is single byte, the single byte character set that we build below suffices. */ if (nrules > 0 || dfa->mb_cur_max > 1) { /* Check the space of the arrays. */ if (__glibc_unlikely (*range_alloc == mbcset->nranges)) { /* There is not enough space, need realloc. */ uint32_t *new_array_start; uint32_t *new_array_end; int new_nranges; /* +1 in case of mbcset->nranges is 0. */ new_nranges = 2 * mbcset->nranges + 1; new_array_start = re_realloc (mbcset->range_starts, uint32_t, new_nranges); new_array_end = re_realloc (mbcset->range_ends, uint32_t, new_nranges); if (__glibc_unlikely (new_array_start == NULL || new_array_end == NULL)) return REG_ESPACE; mbcset->range_starts = new_array_start; mbcset->range_ends = new_array_end; *range_alloc = new_nranges; } mbcset->range_starts[mbcset->nranges] = start_collseq; mbcset->range_ends[mbcset->nranges++] = end_collseq; } /* Build the table for single byte characters. */ for (ch = 0; ch < SBC_MAX; ch++) { uint32_t ch_collseq; /* if (MB_CUR_MAX == 1) */ if (nrules == 0) ch_collseq = collseqmb[ch]; else ch_collseq = __collseq_table_lookup (collseqwc, __btowc (ch)); if (start_collseq <= ch_collseq && ch_collseq <= end_collseq) bitset_set (sbcset, ch); } return REG_NOERROR; } /* Local function for parse_bracket_exp used in _LIBC environment. Build the collating element which is represented by NAME. The result are written to MBCSET and SBCSET. COLL_SYM_ALLOC is the allocated size of mbcset->coll_sym, is a pointer argument since we may update it. */ static __always_inline reg_errcode_t build_collating_symbol (bitset_t sbcset, re_charset_t *mbcset, Idx *coll_sym_alloc, const unsigned char *name, uint_fast32_t nrules, int_fast32_t table_size, const int32_t *symb_table, const unsigned char *extra) { int32_t elem, idx; size_t name_len = strlen ((const char *) name); if (nrules != 0) { elem = seek_collating_symbol_entry (name, name_len, symb_table, table_size, extra); if (elem != -1) { /* We found the entry. */ idx = symb_table[2 * elem + 1]; /* Skip the name of collating element name. */ idx += 1 + extra[idx]; } else if (name_len == 1) { /* No valid character, treat it as a normal character. */ bitset_set (sbcset, name[0]); return REG_NOERROR; } else return REG_ECOLLATE; /* Got valid collation sequence, add it as a new entry. */ /* Check the space of the arrays. */ if (__glibc_unlikely (*coll_sym_alloc == mbcset->ncoll_syms)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->ncoll_syms is 0. */ int new_coll_sym_alloc = 2 * mbcset->ncoll_syms + 1; /* Use realloc since mbcset->coll_syms is NULL if *alloc == 0. */ int32_t *new_coll_syms = re_realloc (mbcset->coll_syms, int32_t, new_coll_sym_alloc); if (__glibc_unlikely (new_coll_syms == NULL)) return REG_ESPACE; mbcset->coll_syms = new_coll_syms; *coll_sym_alloc = new_coll_sym_alloc; } mbcset->coll_syms[mbcset->ncoll_syms++] = idx; return REG_NOERROR; } else { if (__glibc_unlikely (name_len != 1)) return REG_ECOLLATE; else { bitset_set (sbcset, name[0]); return REG_NOERROR; } } } #endif /* _LIBC */ /* This function parse bracket expression like "[abc]", "[a-c]", "[[.a-a.]]" etc. */ static bin_tree_t * parse_bracket_exp (re_string_t *regexp, re_dfa_t *dfa, re_token_t *token, reg_syntax_t syntax, reg_errcode_t *err) { const unsigned char *collseqmb = NULL; const char *collseqwc = NULL; uint_fast32_t nrules = 0; int_fast32_t table_size = 0; const void *symb_table = NULL; const unsigned char *extra = NULL; re_token_t br_token; re_bitset_ptr_t sbcset; re_charset_t *mbcset; Idx coll_sym_alloc = 0, range_alloc = 0, mbchar_alloc = 0; Idx equiv_class_alloc = 0, char_class_alloc = 0; bool non_match = false; bin_tree_t *work_tree; int token_len; bool first_round = true; #ifdef _LIBC collseqmb = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQMB); nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules) { /* if (MB_CUR_MAX > 1) */ collseqwc = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_COLLSEQWC); table_size = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_SYMB_HASH_SIZEMB); symb_table = _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_TABLEMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_SYMB_EXTRAMB); } #endif sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); if (__glibc_unlikely (sbcset == NULL || mbcset == NULL)) { re_free (sbcset); re_free (mbcset); *err = REG_ESPACE; return NULL; } token_len = peek_token_bracket (token, regexp, syntax); if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } if (token->type == OP_NON_MATCH_LIST) { mbcset->non_match = 1; non_match = true; if (syntax & RE_HAT_LISTS_NOT_NEWLINE) bitset_set (sbcset, '\n'); re_string_skip_bytes (regexp, token_len); /* Skip a token. */ token_len = peek_token_bracket (token, regexp, syntax); if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_BADPAT; goto parse_bracket_exp_free_return; } } /* We treat the first ']' as a normal character. */ if (token->type == OP_CLOSE_BRACKET) token->type = CHARACTER; while (1) { bracket_elem_t start_elem, end_elem; unsigned char start_name_buf[BRACKET_NAME_BUF_SIZE]; unsigned char end_name_buf[BRACKET_NAME_BUF_SIZE]; reg_errcode_t ret; int token_len2 = 0; bool is_range_exp = false; re_token_t token2; start_elem.opr.name = start_name_buf; start_elem.type = COLL_SYM; ret = parse_bracket_element (&start_elem, regexp, token, token_len, dfa, syntax, first_round); if (__glibc_unlikely (ret != REG_NOERROR)) { *err = ret; goto parse_bracket_exp_free_return; } first_round = false; /* Get information about the next token. We need it in any case. */ token_len = peek_token_bracket (token, regexp, syntax); /* Do not check for ranges if we know they are not allowed. */ if (start_elem.type != CHAR_CLASS && start_elem.type != EQUIV_CLASS) { if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token->type == OP_CHARSET_RANGE) { re_string_skip_bytes (regexp, token_len); /* Skip '-'. */ token_len2 = peek_token_bracket (&token2, regexp, syntax); if (__glibc_unlikely (token2.type == END_OF_RE)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token2.type == OP_CLOSE_BRACKET) { /* We treat the last '-' as a normal character. */ re_string_skip_bytes (regexp, -token_len); token->type = CHARACTER; } else is_range_exp = true; } } if (is_range_exp == true) { end_elem.opr.name = end_name_buf; end_elem.type = COLL_SYM; ret = parse_bracket_element (&end_elem, regexp, &token2, token_len2, dfa, syntax, true); if (__glibc_unlikely (ret != REG_NOERROR)) { *err = ret; goto parse_bracket_exp_free_return; } token_len = peek_token_bracket (token, regexp, syntax); *err = build_range_exp (sbcset, mbcset, &range_alloc, &start_elem, &end_elem, dfa, syntax, nrules, collseqmb, collseqwc, table_size, symb_table, extra); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; } else { switch (start_elem.type) { case SB_CHAR: bitset_set (sbcset, start_elem.opr.ch); break; case MB_CHAR: /* Check whether the array has enough space. */ if (__glibc_unlikely (mbchar_alloc == mbcset->nmbchars)) { wchar_t *new_mbchars; /* Not enough, realloc it. */ /* +1 in case of mbcset->nmbchars is 0. */ mbchar_alloc = 2 * mbcset->nmbchars + 1; /* Use realloc since array is NULL if *alloc == 0. */ new_mbchars = re_realloc (mbcset->mbchars, wchar_t, mbchar_alloc); if (__glibc_unlikely (new_mbchars == NULL)) goto parse_bracket_exp_espace; mbcset->mbchars = new_mbchars; } mbcset->mbchars[mbcset->nmbchars++] = start_elem.opr.wch; break; case EQUIV_CLASS: *err = build_equiv_class (sbcset, mbcset, &equiv_class_alloc, start_elem.opr.name); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; break; case COLL_SYM: *err = build_collating_symbol (sbcset, mbcset, &coll_sym_alloc, start_elem.opr.name, nrules, table_size, symb_table, extra); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; break; case CHAR_CLASS: *err = build_charclass (regexp->trans, sbcset, mbcset, &char_class_alloc, (const char *) start_elem.opr.name, syntax); if (__glibc_unlikely (*err != REG_NOERROR)) goto parse_bracket_exp_free_return; break; default: DEBUG_ASSERT (false); break; } } if (__glibc_unlikely (token->type == END_OF_RE)) { *err = REG_EBRACK; goto parse_bracket_exp_free_return; } if (token->type == OP_CLOSE_BRACKET) break; } re_string_skip_bytes (regexp, token_len); /* Skip a token. */ /* If it is non-matching list. */ if (non_match) bitset_not (sbcset); /* Ensure only single byte characters are set. */ if (dfa->mb_cur_max > 1) bitset_mask (sbcset, dfa->sb_char); if (mbcset->nmbchars || mbcset->ncoll_syms || mbcset->nequiv_classes || mbcset->nranges || (dfa->mb_cur_max > 1 && (mbcset->nchar_classes || mbcset->non_match))) { bin_tree_t *mbc_tree; int sbc_idx; /* Build a tree for complex bracket. */ dfa->has_mb_node = 1; br_token.type = COMPLEX_BRACKET; br_token.opr.mbcset = mbcset; mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (mbc_tree == NULL)) goto parse_bracket_exp_espace; for (sbc_idx = 0; sbc_idx < BITSET_WORDS; ++sbc_idx) if (sbcset[sbc_idx]) break; /* If there are no bits set in sbcset, there is no point of having both SIMPLE_BRACKET and COMPLEX_BRACKET. */ if (sbc_idx < BITSET_WORDS) { /* Build a tree for simple bracket. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; work_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (work_tree == NULL)) goto parse_bracket_exp_espace; /* Then join them by ALT node. */ work_tree = create_tree (dfa, work_tree, mbc_tree, OP_ALT); if (__glibc_unlikely (work_tree == NULL)) goto parse_bracket_exp_espace; } else { re_free (sbcset); work_tree = mbc_tree; } } else { free_charset (mbcset); /* Build a tree for simple bracket. */ br_token.type = SIMPLE_BRACKET; br_token.opr.sbcset = sbcset; work_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (work_tree == NULL)) goto parse_bracket_exp_espace; } return work_tree; parse_bracket_exp_espace: *err = REG_ESPACE; parse_bracket_exp_free_return: re_free (sbcset); free_charset (mbcset); return NULL; } /* Parse an element in the bracket expression. */ static reg_errcode_t parse_bracket_element (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token, int token_len, re_dfa_t *dfa, reg_syntax_t syntax, bool accept_hyphen) { int cur_char_size; cur_char_size = re_string_char_size_at (regexp, re_string_cur_idx (regexp)); if (cur_char_size > 1) { elem->type = MB_CHAR; elem->opr.wch = re_string_wchar_at (regexp, re_string_cur_idx (regexp)); re_string_skip_bytes (regexp, cur_char_size); return REG_NOERROR; } re_string_skip_bytes (regexp, token_len); /* Skip a token. */ if (token->type == OP_OPEN_COLL_ELEM || token->type == OP_OPEN_CHAR_CLASS || token->type == OP_OPEN_EQUIV_CLASS) return parse_bracket_symbol (elem, regexp, token); if (__glibc_unlikely (token->type == OP_CHARSET_RANGE) && !accept_hyphen) { /* A '-' must only appear as anything but a range indicator before the closing bracket. Everything else is an error. */ re_token_t token2; (void) peek_token_bracket (&token2, regexp, syntax); if (token2.type != OP_CLOSE_BRACKET) /* The actual error value is not standardized since this whole case is undefined. But ERANGE makes good sense. */ return REG_ERANGE; } elem->type = SB_CHAR; elem->opr.ch = token->opr.c; return REG_NOERROR; } /* Parse a bracket symbol in the bracket expression. Bracket symbols are such as [:<character_class>:], [.<collating_element>.], and [=<equivalent_class>=]. */ static reg_errcode_t parse_bracket_symbol (bracket_elem_t *elem, re_string_t *regexp, re_token_t *token) { unsigned char ch, delim = token->opr.c; int i = 0; if (re_string_eoi(regexp)) return REG_EBRACK; for (;; ++i) { if (i >= BRACKET_NAME_BUF_SIZE) return REG_EBRACK; if (token->type == OP_OPEN_CHAR_CLASS) ch = re_string_fetch_byte_case (regexp); else ch = re_string_fetch_byte (regexp); if (re_string_eoi(regexp)) return REG_EBRACK; if (ch == delim && re_string_peek_byte (regexp, 0) == ']') break; elem->opr.name[i] = ch; } re_string_skip_bytes (regexp, 1); elem->opr.name[i] = '\0'; switch (token->type) { case OP_OPEN_COLL_ELEM: elem->type = COLL_SYM; break; case OP_OPEN_EQUIV_CLASS: elem->type = EQUIV_CLASS; break; case OP_OPEN_CHAR_CLASS: elem->type = CHAR_CLASS; break; default: break; } return REG_NOERROR; } /* Helper function for parse_bracket_exp. Build the equivalence class which is represented by NAME. The result are written to MBCSET and SBCSET. EQUIV_CLASS_ALLOC is the allocated size of mbcset->equiv_classes, is a pointer argument since we may update it. */ static reg_errcode_t build_equiv_class (bitset_t sbcset, re_charset_t *mbcset, Idx *equiv_class_alloc, const unsigned char *name) { #ifdef _LIBC uint32_t nrules = _NL_CURRENT_WORD (LC_COLLATE, _NL_COLLATE_NRULES); if (nrules != 0) { const int32_t *table, *indirect; const unsigned char *weights, *extra, *cp; unsigned char char_buf[2]; int32_t idx1, idx2; unsigned int ch; size_t len; /* Calculate the index for equivalence class. */ cp = name; table = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_TABLEMB); weights = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_WEIGHTMB); extra = (const unsigned char *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_EXTRAMB); indirect = (const int32_t *) _NL_CURRENT (LC_COLLATE, _NL_COLLATE_INDIRECTMB); idx1 = findidx (table, indirect, extra, &cp, -1); if (__glibc_unlikely (idx1 == 0 || *cp != '\0')) /* This isn't a valid character. */ return REG_ECOLLATE; /* Build single byte matching table for this equivalence class. */ len = weights[idx1 & 0xffffff]; for (ch = 0; ch < SBC_MAX; ++ch) { char_buf[0] = ch; cp = char_buf; idx2 = findidx (table, indirect, extra, &cp, 1); /* idx2 = table[ch]; */ if (idx2 == 0) /* This isn't a valid character. */ continue; /* Compare only if the length matches and the collation rule index is the same. */ if (len == weights[idx2 & 0xffffff] && (idx1 >> 24) == (idx2 >> 24) && memcmp (weights + (idx1 & 0xffffff) + 1, weights + (idx2 & 0xffffff) + 1, len) == 0) bitset_set (sbcset, ch); } /* Check whether the array has enough space. */ if (__glibc_unlikely (*equiv_class_alloc == mbcset->nequiv_classes)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nequiv_classes is 0. */ Idx new_equiv_class_alloc = 2 * mbcset->nequiv_classes + 1; /* Use realloc since the array is NULL if *alloc == 0. */ int32_t *new_equiv_classes = re_realloc (mbcset->equiv_classes, int32_t, new_equiv_class_alloc); if (__glibc_unlikely (new_equiv_classes == NULL)) return REG_ESPACE; mbcset->equiv_classes = new_equiv_classes; *equiv_class_alloc = new_equiv_class_alloc; } mbcset->equiv_classes[mbcset->nequiv_classes++] = idx1; } else #endif /* _LIBC */ { if (__glibc_unlikely (strlen ((const char *) name) != 1)) return REG_ECOLLATE; bitset_set (sbcset, *name); } return REG_NOERROR; } /* Helper function for parse_bracket_exp. Build the character class which is represented by NAME. The result are written to MBCSET and SBCSET. CHAR_CLASS_ALLOC is the allocated size of mbcset->char_classes, is a pointer argument since we may update it. */ static reg_errcode_t build_charclass (RE_TRANSLATE_TYPE trans, bitset_t sbcset, re_charset_t *mbcset, Idx *char_class_alloc, const char *class_name, reg_syntax_t syntax) { int i; const char *name = class_name; /* In case of REG_ICASE "upper" and "lower" match the both of upper and lower cases. */ if ((syntax & RE_ICASE) && (strcmp (name, "upper") == 0 || strcmp (name, "lower") == 0)) name = "alpha"; /* Check the space of the arrays. */ if (__glibc_unlikely (*char_class_alloc == mbcset->nchar_classes)) { /* Not enough, realloc it. */ /* +1 in case of mbcset->nchar_classes is 0. */ Idx new_char_class_alloc = 2 * mbcset->nchar_classes + 1; /* Use realloc since array is NULL if *alloc == 0. */ wctype_t *new_char_classes = re_realloc (mbcset->char_classes, wctype_t, new_char_class_alloc); if (__glibc_unlikely (new_char_classes == NULL)) return REG_ESPACE; mbcset->char_classes = new_char_classes; *char_class_alloc = new_char_class_alloc; } mbcset->char_classes[mbcset->nchar_classes++] = __wctype (name); #define BUILD_CHARCLASS_LOOP(ctype_func) \ do { \ if (__glibc_unlikely (trans != NULL)) \ { \ for (i = 0; i < SBC_MAX; ++i) \ if (ctype_func (i)) \ bitset_set (sbcset, trans[i]); \ } \ else \ { \ for (i = 0; i < SBC_MAX; ++i) \ if (ctype_func (i)) \ bitset_set (sbcset, i); \ } \ } while (0) if (strcmp (name, "alnum") == 0) BUILD_CHARCLASS_LOOP (isalnum); else if (strcmp (name, "cntrl") == 0) BUILD_CHARCLASS_LOOP (iscntrl); else if (strcmp (name, "lower") == 0) BUILD_CHARCLASS_LOOP (islower); else if (strcmp (name, "space") == 0) BUILD_CHARCLASS_LOOP (isspace); else if (strcmp (name, "alpha") == 0) BUILD_CHARCLASS_LOOP (isalpha); else if (strcmp (name, "digit") == 0) BUILD_CHARCLASS_LOOP (isdigit); else if (strcmp (name, "print") == 0) BUILD_CHARCLASS_LOOP (isprint); else if (strcmp (name, "upper") == 0) BUILD_CHARCLASS_LOOP (isupper); else if (strcmp (name, "blank") == 0) BUILD_CHARCLASS_LOOP (isblank); else if (strcmp (name, "graph") == 0) BUILD_CHARCLASS_LOOP (isgraph); else if (strcmp (name, "punct") == 0) BUILD_CHARCLASS_LOOP (ispunct); else if (strcmp (name, "xdigit") == 0) BUILD_CHARCLASS_LOOP (isxdigit); else return REG_ECTYPE; return REG_NOERROR; } static bin_tree_t * build_charclass_op (re_dfa_t *dfa, RE_TRANSLATE_TYPE trans, const char *class_name, const char *extra, bool non_match, reg_errcode_t *err) { re_bitset_ptr_t sbcset; re_charset_t *mbcset; Idx alloc = 0; reg_errcode_t ret; bin_tree_t *tree; sbcset = (re_bitset_ptr_t) calloc (sizeof (bitset_t), 1); if (__glibc_unlikely (sbcset == NULL)) { *err = REG_ESPACE; return NULL; } mbcset = (re_charset_t *) calloc (sizeof (re_charset_t), 1); if (__glibc_unlikely (mbcset == NULL)) { re_free (sbcset); *err = REG_ESPACE; return NULL; } mbcset->non_match = non_match; /* We don't care the syntax in this case. */ ret = build_charclass (trans, sbcset, mbcset, &alloc, class_name, 0); if (__glibc_unlikely (ret != REG_NOERROR)) { re_free (sbcset); free_charset (mbcset); *err = ret; return NULL; } /* \w match '_' also. */ for (; *extra; extra++) bitset_set (sbcset, *extra); /* If it is non-matching list. */ if (non_match) bitset_not (sbcset); /* Ensure only single byte characters are set. */ if (dfa->mb_cur_max > 1) bitset_mask (sbcset, dfa->sb_char); /* Build a tree for simple bracket. */ re_token_t br_token = { .type = SIMPLE_BRACKET, .opr.sbcset = sbcset }; tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (tree == NULL)) goto build_word_op_espace; if (dfa->mb_cur_max > 1) { bin_tree_t *mbc_tree; /* Build a tree for complex bracket. */ br_token.type = COMPLEX_BRACKET; br_token.opr.mbcset = mbcset; dfa->has_mb_node = 1; mbc_tree = create_token_tree (dfa, NULL, NULL, &br_token); if (__glibc_unlikely (mbc_tree == NULL)) goto build_word_op_espace; /* Then join them by ALT node. */ tree = create_tree (dfa, tree, mbc_tree, OP_ALT); if (__glibc_likely (mbc_tree != NULL)) return tree; } else { free_charset (mbcset); return tree; } build_word_op_espace: re_free (sbcset); free_charset (mbcset); *err = REG_ESPACE; return NULL; } /* This is intended for the expressions like "a{1,3}". Fetch a number from 'input', and return the number. Return -1 if the number field is empty like "{,1}". Return RE_DUP_MAX + 1 if the number field is too large. Return -2 if an error occurred. */ static Idx fetch_number (re_string_t *input, re_token_t *token, reg_syntax_t syntax) { Idx num = -1; unsigned char c; while (1) { fetch_token (token, input, syntax); c = token->opr.c; if (__glibc_unlikely (token->type == END_OF_RE)) return -2; if (token->type == OP_CLOSE_DUP_NUM || c == ',') break; num = ((token->type != CHARACTER || c < '0' || '9' < c || num == -2) ? -2 : num == -1 ? c - '0' : MIN (RE_DUP_MAX + 1, num * 10 + c - '0')); } return num; } static void free_charset (re_charset_t *cset) { re_free (cset->mbchars); #ifdef _LIBC re_free (cset->coll_syms); re_free (cset->equiv_classes); #endif re_free (cset->range_starts); re_free (cset->range_ends); re_free (cset->char_classes); re_free (cset); } /* Functions for binary tree operation. */ /* Create a tree node. */ static bin_tree_t * create_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, re_token_type_t type) { re_token_t t = { .type = type }; return create_token_tree (dfa, left, right, &t); } static bin_tree_t * create_token_tree (re_dfa_t *dfa, bin_tree_t *left, bin_tree_t *right, const re_token_t *token) { bin_tree_t *tree; if (__glibc_unlikely (dfa->str_tree_storage_idx == BIN_TREE_STORAGE_SIZE)) { bin_tree_storage_t *storage = re_malloc (bin_tree_storage_t, 1); if (storage == NULL) return NULL; storage->next = dfa->str_tree_storage; dfa->str_tree_storage = storage; dfa->str_tree_storage_idx = 0; } tree = &dfa->str_tree_storage->data[dfa->str_tree_storage_idx++]; tree->parent = NULL; tree->left = left; tree->right = right; tree->token = *token; tree->token.duplicated = 0; tree->token.opt_subexp = 0; tree->first = NULL; tree->next = NULL; tree->node_idx = -1; if (left != NULL) left->parent = tree; if (right != NULL) right->parent = tree; return tree; } /* Mark the tree SRC as an optional subexpression. To be called from preorder or postorder. */ static reg_errcode_t mark_opt_subexp (void *extra, bin_tree_t *node) { Idx idx = (uintptr_t) extra; if (node->token.type == SUBEXP && node->token.opr.idx == idx) node->token.opt_subexp = 1; return REG_NOERROR; } /* Free the allocated memory inside NODE. */ static void free_token (re_token_t *node) { if (node->type == COMPLEX_BRACKET && node->duplicated == 0) free_charset (node->opr.mbcset); else if (node->type == SIMPLE_BRACKET && node->duplicated == 0) re_free (node->opr.sbcset); } /* Worker function for tree walking. Free the allocated memory inside NODE and its children. */ static reg_errcode_t free_tree (void *extra, bin_tree_t *node) { free_token (&node->token); return REG_NOERROR; } /* Duplicate the node SRC, and return new node. This is a preorder visit similar to the one implemented by the generic visitor, but we need more infrastructure to maintain two parallel trees --- so, it's easier to duplicate. */ static bin_tree_t * duplicate_tree (const bin_tree_t *root, re_dfa_t *dfa) { const bin_tree_t *node; bin_tree_t *dup_root; bin_tree_t **p_new = &dup_root, *dup_node = root->parent; for (node = root; ; ) { /* Create a new tree and link it back to the current parent. */ *p_new = create_token_tree (dfa, NULL, NULL, &node->token); if (*p_new == NULL) return NULL; (*p_new)->parent = dup_node; (*p_new)->token.duplicated = 1; dup_node = *p_new; /* Go to the left node, or up and to the right. */ if (node->left) { node = node->left; p_new = &dup_node->left; } else { const bin_tree_t *prev = NULL; while (node->right == prev || node->right == NULL) { prev = node; node = node->parent; dup_node = dup_node->parent; if (!node) return dup_root; } node = node->right; p_new = &dup_node->right; } } } ���recutils-1.9/lib/spawnp.c���������������������������������������������������������������������������0000644�0000000�0000000�00000002525�14226564451�012343� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include "spawn_int.h" /* Spawn a new process executing FILE with the attributes describes in *ATTRP. Before running the process perform the actions described in FILE-ACTIONS. */ int posix_spawnp (pid_t *pid, const char *file, const posix_spawn_file_actions_t *file_actions, const posix_spawnattr_t *attrp, char *const argv[], char *const envp[]) { return __spawni (pid, file, file_actions, attrp, (const char * const *) argv, (const char * const *) envp, 1); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/readline.h�������������������������������������������������������������������������0000644�0000000�0000000�00000002645�14226564450�012625� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readline.h --- Simple implementation of readline. Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc. Written by Simon Josefsson This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef GL_READLINE_H #define GL_READLINE_H #if HAVE_READLINE_READLINE_H /* <readline/readline.h> makes use of the FILE type without including <stdio.h> itself. */ # include <stdio.h> # include <readline/readline.h> #else # include <stdlib.h> /* Prints a prompt PROMPT and then reads and returns a single line of text from the user. If PROMPT is NULL or the empty string, no prompt is displayed. The returned line is allocated with malloc; the caller should free the line when it has finished with it. */ extern char *readline (const char *prompt) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #endif #endif /* GL_READLINE_H */ �������������������������������������������������������������������������������������������recutils-1.9/lib/hard-locale.h����������������������������������������������������������������������0000644�0000000�0000000�00000002153�14226564450�013207� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine whether a locale is hard. Copyright (C) 1999, 2003-2004, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef HARD_LOCALE_H_ # define HARD_LOCALE_H_ 1 # include <stdbool.h> /* Return true if the specified CATEGORY of the current locale is hard, i.e. different from the C or POSIX locale that has a fixed behavior. CATEGORY must be one of the LC_* values, but not LC_ALL. */ extern bool hard_locale (int category); #endif /* HARD_LOCALE_H_ */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getgroups.c������������������������������������������������������������������������0000644�0000000�0000000�00000007070�14226564450�013051� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide consistent interface to getgroups for systems that don't allow N==0 Copyright (C) 1996, 1999, 2003, 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> #include <unistd.h> #include <errno.h> #include <stdlib.h> #include <stdint.h> #if !HAVE_GETGROUPS /* Provide a stub that fails with ENOSYS, since there is no group information available on mingw. */ int getgroups (_GL_UNUSED int n, _GL_UNUSED GETGROUPS_T *groups) { errno = ENOSYS; return -1; } #else /* HAVE_GETGROUPS */ # undef getgroups # ifndef GETGROUPS_ZERO_BUG # define GETGROUPS_ZERO_BUG 0 # endif /* On OS X 10.6 and later, use the usual getgroups, not the one supplied when _DARWIN_C_SOURCE is defined. _DARWIN_C_SOURCE is normally defined, since it means "conform to POSIX, but add non-POSIX extensions even if that violates the POSIX namespace rules", which is what we normally want. But with getgroups there is an inconsistency, and _DARWIN_C_SOURCE means "change getgroups() so that it no longer works right". The BUGS section of compat(5) says that the behavior is dubious if you compile different sections of a program with different _DARWIN_C_SOURCE settings, so fix only the offending symbol. */ # ifdef __APPLE__ int posix_getgroups (int, gid_t []) __asm ("_getgroups"); # define getgroups posix_getgroups # endif /* On at least NeXTstep 3.2, getgroups (0, NULL) always fails. On other systems, it returns the number of supplemental groups for the process. This function handles that special case and lets the system-provided function handle all others. However, it can fail with ENOMEM if memory is tight. It is unspecified whether the effective group id is included in the list. */ int rpl_getgroups (int n, gid_t *group) { int n_groups; GETGROUPS_T *gbuf; if (n < 0) { errno = EINVAL; return -1; } if (n != 0 || !GETGROUPS_ZERO_BUG) { int result; if (sizeof *group == sizeof *gbuf) return getgroups (n, (GETGROUPS_T *) group); if (SIZE_MAX / sizeof *gbuf <= n) { errno = ENOMEM; return -1; } gbuf = malloc (n * sizeof *gbuf); if (!gbuf) return -1; result = getgroups (n, gbuf); if (0 <= result) { n = result; while (n--) group[n] = gbuf[n]; } free (gbuf); return result; } n = 20; while (1) { /* No need to worry about address arithmetic overflow here, since the ancient systems that we're running on have low limits on the number of secondary groups. */ gbuf = malloc (n * sizeof *gbuf); if (!gbuf) return -1; n_groups = getgroups (n, gbuf); if (n_groups == -1 ? errno != EINVAL : n_groups < n) break; free (gbuf); n *= 2; } free (gbuf); return n_groups; } #endif /* HAVE_GETGROUPS */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stdio-impl.h�����������������������������������������������������������������������0000644�0000000�0000000�00000017553�14226564451�013130� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Implementation details of FILE streams. Copyright (C) 2007-2008, 2010-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Many stdio implementations have the same logic and therefore can share the same implementation of stdio extension API, except that some fields have different naming conventions, or their access requires some casts. */ /* Glibc 2.28 made _IO_UNBUFFERED and _IO_IN_BACKUP private. For now, work around this problem by defining them ourselves. FIXME: Do not rely on glibc internals. */ #if defined _IO_EOF_SEEN # if !defined _IO_UNBUFFERED # define _IO_UNBUFFERED 0x2 # endif # if !defined _IO_IN_BACKUP # define _IO_IN_BACKUP 0x100 # endif #endif /* BSD stdio derived implementations. */ #if defined __NetBSD__ /* NetBSD */ /* Get __NetBSD_Version__. */ # include <sys/param.h> #endif #include <errno.h> /* For detecting Plan9. */ #if defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin, Minix 3, Android */ # if defined __DragonFly__ /* DragonFly */ /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/lib/libc/stdio/priv_stdio.h>. */ # define fp_ ((struct { struct __FILE_public pub; \ struct { unsigned char *_base; int _size; } _bf; \ void *cookie; \ void *_close; \ void *_read; \ void *_seek; \ void *_write; \ struct { unsigned char *_base; int _size; } _ub; \ int _ur; \ unsigned char _ubuf[3]; \ unsigned char _nbuf[1]; \ struct { unsigned char *_base; int _size; } _lb; \ int _blksize; \ fpos_t _offset; \ /* More fields, not relevant here. */ \ } *) fp) /* See <https://gitweb.dragonflybsd.org/dragonfly.git/blob_plain/HEAD:/include/stdio.h>. */ # define _p pub._p # define _flags pub._flags # define _r pub._r # define _w pub._w # elif defined __ANDROID__ /* Android */ # ifdef __LP64__ # define _gl_flags_file_t int # else # define _gl_flags_file_t short # endif /* Up to this commit from 2015-10-12 <https://android.googlesource.com/platform/bionic.git/+/f0141dfab10a4b332769d52fa76631a64741297a> the innards of FILE were public, and fp_ub could be defined like for OpenBSD, see <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/fileext.h> and <https://android.googlesource.com/platform/bionic.git/+/e78392637d5086384a5631ddfdfa8d7ec8326ee3/libc/stdio/local.h>. After this commit, the innards of FILE are hidden. */ # define fp_ ((struct { unsigned char *_p; \ int _r; \ int _w; \ _gl_flags_file_t _flags; \ _gl_flags_file_t _file; \ struct { unsigned char *_base; size_t _size; } _bf; \ int _lbfsize; \ void *_cookie; \ void *_close; \ void *_read; \ void *_seek; \ void *_write; \ struct { unsigned char *_base; size_t _size; } _ext; \ unsigned char *_up; \ int _ur; \ unsigned char _ubuf[3]; \ unsigned char _nbuf[1]; \ struct { unsigned char *_base; size_t _size; } _lb; \ int _blksize; \ fpos_t _offset; \ /* More fields, not relevant here. */ \ } *) fp) # else # define fp_ fp # endif # if (defined __NetBSD__ && __NetBSD_Version__ >= 105270000) || defined __OpenBSD__ || defined __minix /* NetBSD >= 1.5ZA, OpenBSD, Minix 3 */ /* See <http://cvsweb.netbsd.org/bsdweb.cgi/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> and <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdio/fileext.h?rev=HEAD&content-type=text/x-cvsweb-markup> and <https://github.com/Stichting-MINIX-Research-Foundation/minix/blob/master/lib/libc/stdio/fileext.h> */ struct __sfileext { struct __sbuf _ub; /* ungetc buffer */ /* More fields, not relevant here. */ }; # define fp_ub ((struct __sfileext *) fp->_ext._base)->_ub # elif defined __ANDROID__ /* Android */ struct __sfileext { struct { unsigned char *_base; size_t _size; } _ub; /* ungetc buffer */ /* More fields, not relevant here. */ }; # define fp_ub ((struct __sfileext *) fp_->_ext._base)->_ub # else /* FreeBSD, NetBSD <= 1.5Z, DragonFly, Mac OS X, Cygwin */ # define fp_ub fp_->_ub # endif # define HASUB(fp) (fp_ub._base != NULL) # if defined __ANDROID__ /* Android */ /* Needed after this commit from 2016-01-25 <https://android.googlesource.com/platform/bionic.git/+/e70e0e9267d069bf56a5078c99307e08a7280de7> */ # ifndef __SEOF # define __SLBF 1 # define __SNBF 2 # define __SRD 4 # define __SWR 8 # define __SRW 0x10 # define __SEOF 0x20 # define __SERR 0x40 # endif # ifndef __SOFF # define __SOFF 0x1000 # endif # endif #endif /* SystemV derived implementations. */ #ifdef __TANDEM /* NonStop Kernel */ # ifndef _IOERR /* These values were determined by the program 'stdioext-flags' at <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>. */ # define _IOERR 0x40 # define _IOREAD 0x80 # define _IOWRT 0x4 # define _IORW 0x100 # endif #endif #if defined _IOERR # if defined __sun && defined _LP64 /* Solaris/{SPARC,AMD64} 64-bit */ # define fp_ ((struct { unsigned char *_ptr; \ unsigned char *_base; \ unsigned char *_end; \ long _cnt; \ int _file; \ unsigned int _flag; \ } *) fp) # elif defined __VMS /* OpenVMS */ # define fp_ ((struct _iobuf *) fp) # else # define fp_ fp # endif # if defined _SCO_DS || (defined __SCO_VERSION__ || defined __sysv5__) /* OpenServer 5, OpenServer 6, UnixWare 7 */ # define _cnt __cnt # define _ptr __ptr # define _base __base # define _flag __flag # endif #elif defined _WIN32 && ! defined __CYGWIN__ /* newer Windows with MSVC */ /* <stdio.h> does not define the innards of FILE any more. */ # define WINDOWS_OPAQUE_FILE struct _gl_real_FILE { /* Note: Compared to older Windows and to mingw, it has the fields _base and _cnt swapped. */ unsigned char *_ptr; unsigned char *_base; int _cnt; int _flag; int _file; int _charbuf; int _bufsiz; }; # define fp_ ((struct _gl_real_FILE *) fp) /* These values were determined by a program similar to the one at <https://lists.gnu.org/r/bug-gnulib/2010-12/msg00165.html>. */ # define _IOREAD 0x1 # define _IOWRT 0x2 # define _IORW 0x4 # define _IOEOF 0x8 # define _IOERR 0x10 #endif �����������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/sys_stat.in.h����������������������������������������������������������������������0000644�0000000�0000000�00000062653�14226564451�013326� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/stat.h header file. Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Eric Blake, Paul Eggert, and Jim Meyering. */ /* This file is supposed to be used on platforms where <sys/stat.h> is incomplete. It is intended to provide definitions and prototypes needed by an application. Start with what the system provides. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_system_sys_stat_h /* Special invocation convention. */ #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_SYS_STAT_H /* Get nlink_t. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* Get struct timespec. */ #include <time.h> /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_SYS_STAT_H@ #ifndef _@GUARD_PREFIX@_SYS_STAT_H #define _@GUARD_PREFIX@_SYS_STAT_H /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Before doing "#define mknod rpl_mknod" below, we need to include all headers that may declare mknod(). OS/2 kLIBC declares mknod() in <unistd.h>, not in <sys/stat.h>. */ #ifdef __KLIBC__ # include <unistd.h> #endif /* Before doing "#define mkdir rpl_mkdir" below, we need to include all headers that may declare mkdir(). Native Windows platforms declare mkdir in <io.h> and/or <direct.h>, not in <sys/stat.h>. */ #if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> /* mingw32, mingw64 */ # include <direct.h> /* mingw64, MSVC 9 */ #endif /* Native Windows platforms declare umask() in <io.h>. */ #if 0 && (defined _WIN32 && ! defined __CYGWIN__) # include <io.h> #endif /* Large File Support on native Windows. */ #if @WINDOWS_64_BIT_ST_SIZE@ # define stat _stati64 #endif /* Optionally, override 'struct stat' on native Windows. */ #if @GNULIB_OVERRIDES_STRUCT_STAT@ # undef stat # if @GNULIB_STAT@ # define stat rpl_stat # else /* Provoke a clear link error if stat() is used as a function and module 'stat' is not in use. */ # define stat stat_used_without_requesting_gnulib_module_stat # endif # if !GNULIB_defined_struct_stat struct stat { dev_t st_dev; ino_t st_ino; mode_t st_mode; nlink_t st_nlink; # if 0 uid_t st_uid; # else /* uid_t is not defined by default on native Windows. */ short st_uid; # endif # if 0 gid_t st_gid; # else /* gid_t is not defined by default on native Windows. */ short st_gid; # endif dev_t st_rdev; off_t st_size; # if 0 blksize_t st_blksize; blkcnt_t st_blocks; # endif # if @WINDOWS_STAT_TIMESPEC@ struct timespec st_atim; struct timespec st_mtim; struct timespec st_ctim; # else time_t st_atime; time_t st_mtime; time_t st_ctime; # endif }; # if @WINDOWS_STAT_TIMESPEC@ # define st_atime st_atim.tv_sec # define st_mtime st_mtim.tv_sec # define st_ctime st_ctim.tv_sec /* Indicator, for gnulib internal purposes. */ # define _GL_WINDOWS_STAT_TIMESPEC 1 # endif # define GNULIB_defined_struct_stat 1 # endif /* Other possible values of st_mode. */ # if 0 # define _S_IFBLK 0x6000 # endif # if 0 # define _S_IFLNK 0xA000 # endif # if 0 # define _S_IFSOCK 0xC000 # endif #endif #ifndef S_IFIFO # ifdef _S_IFIFO # define S_IFIFO _S_IFIFO # endif #endif #ifndef S_IFMT # define S_IFMT 0170000 #endif #if STAT_MACROS_BROKEN # undef S_ISBLK # undef S_ISCHR # undef S_ISDIR # undef S_ISFIFO # undef S_ISLNK # undef S_ISNAM # undef S_ISMPB # undef S_ISMPC # undef S_ISNWK # undef S_ISREG # undef S_ISSOCK #endif #ifndef S_ISBLK # ifdef S_IFBLK # define S_ISBLK(m) (((m) & S_IFMT) == S_IFBLK) # else # define S_ISBLK(m) 0 # endif #endif #ifndef S_ISCHR # ifdef S_IFCHR # define S_ISCHR(m) (((m) & S_IFMT) == S_IFCHR) # else # define S_ISCHR(m) 0 # endif #endif #ifndef S_ISDIR # ifdef S_IFDIR # define S_ISDIR(m) (((m) & S_IFMT) == S_IFDIR) # else # define S_ISDIR(m) 0 # endif #endif #ifndef S_ISDOOR /* Solaris 2.5 and up */ # define S_ISDOOR(m) 0 #endif #ifndef S_ISFIFO # ifdef S_IFIFO # define S_ISFIFO(m) (((m) & S_IFMT) == S_IFIFO) # else # define S_ISFIFO(m) 0 # endif #endif #ifndef S_ISLNK # ifdef S_IFLNK # define S_ISLNK(m) (((m) & S_IFMT) == S_IFLNK) # else # define S_ISLNK(m) 0 # endif #endif #ifndef S_ISMPB /* V7 */ # ifdef S_IFMPB # define S_ISMPB(m) (((m) & S_IFMT) == S_IFMPB) # define S_ISMPC(m) (((m) & S_IFMT) == S_IFMPC) # else # define S_ISMPB(m) 0 # define S_ISMPC(m) 0 # endif #endif #ifndef S_ISMPX /* AIX */ # define S_ISMPX(m) 0 #endif #ifndef S_ISNAM /* Xenix */ # ifdef S_IFNAM # define S_ISNAM(m) (((m) & S_IFMT) == S_IFNAM) # else # define S_ISNAM(m) 0 # endif #endif #ifndef S_ISNWK /* HP/UX */ # ifdef S_IFNWK # define S_ISNWK(m) (((m) & S_IFMT) == S_IFNWK) # else # define S_ISNWK(m) 0 # endif #endif #ifndef S_ISPORT /* Solaris 10 and up */ # define S_ISPORT(m) 0 #endif #ifndef S_ISREG # ifdef S_IFREG # define S_ISREG(m) (((m) & S_IFMT) == S_IFREG) # else # define S_ISREG(m) 0 # endif #endif #ifndef S_ISSOCK # ifdef S_IFSOCK # define S_ISSOCK(m) (((m) & S_IFMT) == S_IFSOCK) # else # define S_ISSOCK(m) 0 # endif #endif #ifndef S_TYPEISMQ # define S_TYPEISMQ(p) 0 #endif #ifndef S_TYPEISTMO # define S_TYPEISTMO(p) 0 #endif #ifndef S_TYPEISSEM # ifdef S_INSEM # define S_TYPEISSEM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSEM) # else # define S_TYPEISSEM(p) 0 # endif #endif #ifndef S_TYPEISSHM # ifdef S_INSHD # define S_TYPEISSHM(p) (S_ISNAM ((p)->st_mode) && (p)->st_rdev == S_INSHD) # else # define S_TYPEISSHM(p) 0 # endif #endif /* high performance ("contiguous data") */ #ifndef S_ISCTG # define S_ISCTG(p) 0 #endif /* Cray DMF (data migration facility): off line, with data */ #ifndef S_ISOFD # define S_ISOFD(p) 0 #endif /* Cray DMF (data migration facility): off line, with no data */ #ifndef S_ISOFL # define S_ISOFL(p) 0 #endif /* 4.4BSD whiteout */ #ifndef S_ISWHT # define S_ISWHT(m) 0 #endif /* If any of the following are undefined, define them to their de facto standard values. */ #if !S_ISUID # define S_ISUID 04000 #endif #if !S_ISGID # define S_ISGID 02000 #endif /* S_ISVTX is a common extension to POSIX. */ #ifndef S_ISVTX # define S_ISVTX 01000 #endif #if !S_IRUSR && S_IREAD # define S_IRUSR S_IREAD #endif #if !S_IRUSR # define S_IRUSR 00400 #endif #if !S_IRGRP # define S_IRGRP (S_IRUSR >> 3) #endif #if !S_IROTH # define S_IROTH (S_IRUSR >> 6) #endif #if !S_IWUSR && S_IWRITE # define S_IWUSR S_IWRITE #endif #if !S_IWUSR # define S_IWUSR 00200 #endif #if !S_IWGRP # define S_IWGRP (S_IWUSR >> 3) #endif #if !S_IWOTH # define S_IWOTH (S_IWUSR >> 6) #endif #if !S_IXUSR && S_IEXEC # define S_IXUSR S_IEXEC #endif #if !S_IXUSR # define S_IXUSR 00100 #endif #if !S_IXGRP # define S_IXGRP (S_IXUSR >> 3) #endif #if !S_IXOTH # define S_IXOTH (S_IXUSR >> 6) #endif #if !S_IRWXU # define S_IRWXU (S_IRUSR | S_IWUSR | S_IXUSR) #endif #if !S_IRWXG # define S_IRWXG (S_IRGRP | S_IWGRP | S_IXGRP) #endif #if !S_IRWXO # define S_IRWXO (S_IROTH | S_IWOTH | S_IXOTH) #endif /* Although S_IXUGO and S_IRWXUGO are not specified by POSIX and are not implemented in GNU/Linux, some Gnulib-using apps use the macros. */ #if !S_IXUGO # define S_IXUGO (S_IXUSR | S_IXGRP | S_IXOTH) #endif #ifndef S_IRWXUGO # define S_IRWXUGO (S_IRWXU | S_IRWXG | S_IRWXO) #endif /* Macros for futimens and utimensat. */ #ifndef UTIME_NOW # define UTIME_NOW (-1) # define UTIME_OMIT (-2) #endif #if @GNULIB_MDA_CHMOD@ /* On native Windows, map 'chmod' to '_chmod', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::chmod always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chmod # define chmod _chmod # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (chmod, int, (const char *filename, mode_t mode)); # else _GL_CXXALIAS_SYS (chmod, int, (const char *filename, mode_t mode)); # endif _GL_CXXALIASWARN (chmod); #endif #if @GNULIB_FCHMODAT@ # if @REPLACE_FCHMODAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchmodat # define fchmodat rpl_fchmodat # endif _GL_FUNCDECL_RPL (fchmodat, int, (int fd, char const *file, mode_t mode, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fchmodat, int, (int fd, char const *file, mode_t mode, int flag)); # else # if !@HAVE_FCHMODAT@ _GL_FUNCDECL_SYS (fchmodat, int, (int fd, char const *file, mode_t mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchmodat, int, (int fd, char const *file, mode_t mode, int flag)); # endif _GL_CXXALIASWARN (fchmodat); #elif defined GNULIB_POSIXCHECK # undef fchmodat # if HAVE_RAW_DECL_FCHMODAT _GL_WARN_ON_USE (fchmodat, "fchmodat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FSTAT@ # if @REPLACE_FSTAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fstat # define fstat rpl_fstat # endif _GL_FUNCDECL_RPL (fstat, int, (int fd, struct stat *buf) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fstat, int, (int fd, struct stat *buf)); # else _GL_CXXALIAS_SYS (fstat, int, (int fd, struct stat *buf)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fstat); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef fstat # define fstat fstat_used_without_requesting_gnulib_module_fstat #elif @WINDOWS_64_BIT_ST_SIZE@ /* Above, we define stat to _stati64. */ # define fstat _fstati64 #elif defined GNULIB_POSIXCHECK # undef fstat # if HAVE_RAW_DECL_FSTAT _GL_WARN_ON_USE (fstat, "fstat has portability problems - " "use gnulib module fstat for portability"); # endif #endif #if @GNULIB_FSTATAT@ # if @REPLACE_FSTATAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fstatat # define fstatat rpl_fstatat # endif _GL_FUNCDECL_RPL (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags)); # else # if !@HAVE_FSTATAT@ _GL_FUNCDECL_SYS (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (fstatat, int, (int fd, char const *restrict name, struct stat *restrict st, int flags)); # endif _GL_CXXALIASWARN (fstatat); #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef fstatat # define fstatat fstatat_used_without_requesting_gnulib_module_fstatat #elif defined GNULIB_POSIXCHECK # undef fstatat # if HAVE_RAW_DECL_FSTATAT _GL_WARN_ON_USE (fstatat, "fstatat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_FUTIMENS@ /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our futimens implementation relies on futimesat, which on Solaris 10 makes an invocation to futimens that is meant to invoke the libc's futimens(), not gnulib's futimens(). */ # if @REPLACE_FUTIMENS@ || (!@HAVE_FUTIMENS@ && defined __sun) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef futimens # define futimens rpl_futimens # endif _GL_FUNCDECL_RPL (futimens, int, (int fd, struct timespec const times[2])); _GL_CXXALIAS_RPL (futimens, int, (int fd, struct timespec const times[2])); # else # if !@HAVE_FUTIMENS@ _GL_FUNCDECL_SYS (futimens, int, (int fd, struct timespec const times[2])); # endif _GL_CXXALIAS_SYS (futimens, int, (int fd, struct timespec const times[2])); # endif # if @HAVE_FUTIMENS@ _GL_CXXALIASWARN (futimens); # endif #elif defined GNULIB_POSIXCHECK # undef futimens # if HAVE_RAW_DECL_FUTIMENS _GL_WARN_ON_USE (futimens, "futimens is not portable - " "use gnulib module futimens for portability"); # endif #endif #if @GNULIB_GETUMASK@ # if !@HAVE_GETUMASK@ _GL_FUNCDECL_SYS (getumask, mode_t, (void)); # endif _GL_CXXALIAS_SYS (getumask, mode_t, (void)); # if @HAVE_GETUMASK@ _GL_CXXALIASWARN (getumask); # endif #elif defined GNULIB_POSIXCHECK # undef getumask # if HAVE_RAW_DECL_GETUMASK _GL_WARN_ON_USE (getumask, "getumask is not portable - " "use gnulib module getumask for portability"); # endif #endif #if @GNULIB_LCHMOD@ /* Change the mode of FILENAME to MODE, without dereferencing it if FILENAME denotes a symbolic link. */ # if !@HAVE_LCHMOD@ || defined __hpux _GL_FUNCDECL_SYS (lchmod, int, (const char *filename, mode_t mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchmod, int, (const char *filename, mode_t mode)); _GL_CXXALIASWARN (lchmod); #elif defined GNULIB_POSIXCHECK # undef lchmod # if HAVE_RAW_DECL_LCHMOD _GL_WARN_ON_USE (lchmod, "lchmod is unportable - " "use gnulib module lchmod for portability"); # endif #endif #if @GNULIB_LSTAT@ # if ! @HAVE_LSTAT@ /* mingw does not support symlinks, therefore it does not have lstat. But without links, stat does just fine. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lstat stat # endif _GL_CXXALIAS_RPL_1 (lstat, stat, int, (const char *restrict name, struct stat *restrict buf)); # elif @REPLACE_LSTAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lstat # define lstat rpl_lstat # endif _GL_FUNCDECL_RPL (lstat, int, (const char *restrict name, struct stat *restrict buf) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (lstat, int, (const char *restrict name, struct stat *restrict buf)); # else _GL_CXXALIAS_SYS (lstat, int, (const char *restrict name, struct stat *restrict buf)); # endif # if @HAVE_LSTAT@ _GL_CXXALIASWARN (lstat); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ # undef lstat # define lstat lstat_used_without_requesting_gnulib_module_lstat #elif defined GNULIB_POSIXCHECK # undef lstat # if HAVE_RAW_DECL_LSTAT _GL_WARN_ON_USE (lstat, "lstat is unportable - " "use gnulib module lstat for portability"); # endif #endif #if @GNULIB_MKDIR@ # if @REPLACE_MKDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_FUNCDECL_RPL (mkdir, int, (char const *name, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # elif defined _WIN32 && !defined __CYGWIN__ /* mingw's _mkdir() function has 1 argument, but we pass 2 arguments. Additionally, it declares _mkdir (and depending on compile flags, an alias mkdir), only in the nonstandard includes <direct.h> and <io.h>, which are included above. */ # if !GNULIB_defined_rpl_mkdir static int rpl_mkdir (char const *name, mode_t mode) { return _mkdir (name); } # define GNULIB_defined_rpl_mkdir 1 # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # else _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); # endif _GL_CXXALIASWARN (mkdir); #elif defined GNULIB_POSIXCHECK # undef mkdir # if HAVE_RAW_DECL_MKDIR _GL_WARN_ON_USE (mkdir, "mkdir does not always support two parameters - " "use gnulib module mkdir for portability"); # endif #elif @GNULIB_MDA_MKDIR@ /* On native Windows, map 'mkdir' to '_mkdir', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::mkdir always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !GNULIB_defined_rpl_mkdir static int rpl_mkdir (char const *name, mode_t mode) { return _mkdir (name); } # define GNULIB_defined_rpl_mkdir 1 # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkdir # define mkdir rpl_mkdir # endif _GL_CXXALIAS_RPL (mkdir, int, (char const *name, mode_t mode)); # else _GL_CXXALIAS_SYS (mkdir, int, (char const *name, mode_t mode)); # endif _GL_CXXALIASWARN (mkdir); #endif #if @GNULIB_MKDIRAT@ # if !@HAVE_MKDIRAT@ _GL_FUNCDECL_SYS (mkdirat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mkdirat, int, (int fd, char const *file, mode_t mode)); _GL_CXXALIASWARN (mkdirat); #elif defined GNULIB_POSIXCHECK # undef mkdirat # if HAVE_RAW_DECL_MKDIRAT _GL_WARN_ON_USE (mkdirat, "mkdirat is not portable - " "use gnulib module openat for portability"); # endif #endif #if @GNULIB_MKFIFO@ # if @REPLACE_MKFIFO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkfifo # define mkfifo rpl_mkfifo # endif _GL_FUNCDECL_RPL (mkfifo, int, (char const *file, mode_t mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mkfifo, int, (char const *file, mode_t mode)); # else # if !@HAVE_MKFIFO@ _GL_FUNCDECL_SYS (mkfifo, int, (char const *file, mode_t mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (mkfifo, int, (char const *file, mode_t mode)); # endif _GL_CXXALIASWARN (mkfifo); #elif defined GNULIB_POSIXCHECK # undef mkfifo # if HAVE_RAW_DECL_MKFIFO _GL_WARN_ON_USE (mkfifo, "mkfifo is not portable - " "use gnulib module mkfifo for portability"); # endif #endif #if @GNULIB_MKFIFOAT@ # if @REPLACE_MKFIFOAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mkfifoat # define mkfifoat rpl_mkfifoat # endif _GL_FUNCDECL_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mkfifoat, int, (int fd, char const *file, mode_t mode)); # else # if !@HAVE_MKFIFOAT@ _GL_FUNCDECL_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mkfifoat, int, (int fd, char const *file, mode_t mode)); # endif _GL_CXXALIASWARN (mkfifoat); #elif defined GNULIB_POSIXCHECK # undef mkfifoat # if HAVE_RAW_DECL_MKFIFOAT _GL_WARN_ON_USE (mkfifoat, "mkfifoat is not portable - " "use gnulib module mkfifoat for portability"); # endif #endif #if @GNULIB_MKNOD@ # if @REPLACE_MKNOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mknod # define mknod rpl_mknod # endif _GL_FUNCDECL_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mknod, int, (char const *file, mode_t mode, dev_t dev)); # else # if !@HAVE_MKNOD@ _GL_FUNCDECL_SYS (mknod, int, (char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on OSF/1 5.1, the third parameter is '...'. */ _GL_CXXALIAS_SYS_CAST (mknod, int, (char const *file, mode_t mode, dev_t dev)); # endif _GL_CXXALIASWARN (mknod); #elif defined GNULIB_POSIXCHECK # undef mknod # if HAVE_RAW_DECL_MKNOD _GL_WARN_ON_USE (mknod, "mknod is not portable - " "use gnulib module mknod for portability"); # endif #endif #if @GNULIB_MKNODAT@ # if @REPLACE_MKNODAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef mknodat # define mknodat rpl_mknodat # endif _GL_FUNCDECL_RPL (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev)); # else # if !@HAVE_MKNODAT@ _GL_FUNCDECL_SYS (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (mknodat, int, (int fd, char const *file, mode_t mode, dev_t dev)); # endif _GL_CXXALIASWARN (mknodat); #elif defined GNULIB_POSIXCHECK # undef mknodat # if HAVE_RAW_DECL_MKNODAT _GL_WARN_ON_USE (mknodat, "mknodat is not portable - " "use gnulib module mkfifoat for portability"); # endif #endif #if @GNULIB_STAT@ # if @REPLACE_STAT@ # if !@GNULIB_OVERRIDES_STRUCT_STAT@ /* We can't use the object-like #define stat rpl_stat, because of struct stat. This means that rpl_stat will not be used if the user does (stat)(a,b). Oh well. */ # if defined _AIX && defined stat && defined _LARGE_FILES /* With _LARGE_FILES defined, AIX (only) defines stat to stat64, so we have to replace stat64() instead of stat(). */ # undef stat64 # define stat64(name, st) rpl_stat (name, st) # elif @WINDOWS_64_BIT_ST_SIZE@ /* Above, we define stat to _stati64. */ # if defined __MINGW32__ && defined _stati64 # ifndef _USE_32BIT_TIME_T /* The system headers define _stati64 to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # elif defined _MSC_VER && defined _stati64 # ifdef _USE_32BIT_TIME_T /* The system headers define _stati64 to _stat32i64. */ # undef _stat32i64 # define _stat32i64(name, st) rpl_stat (name, st) # else /* The system headers define _stati64 to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # else # undef _stati64 # define _stati64(name, st) rpl_stat (name, st) # endif # elif defined __MINGW32__ && defined stat # ifdef _USE_32BIT_TIME_T /* The system headers define stat to _stat32i64. */ # undef _stat32i64 # define _stat32i64(name, st) rpl_stat (name, st) # else /* The system headers define stat to _stat64. */ # undef _stat64 # define _stat64(name, st) rpl_stat (name, st) # endif # elif defined _MSC_VER && defined stat # ifdef _USE_32BIT_TIME_T /* The system headers define stat to _stat32. */ # undef _stat32 # define _stat32(name, st) rpl_stat (name, st) # else /* The system headers define stat to _stat64i32. */ # undef _stat64i32 # define _stat64i32(name, st) rpl_stat (name, st) # endif # else /* !(_AIX || __MINGW32__ || _MSC_VER) */ # undef stat # define stat(name, st) rpl_stat (name, st) # endif /* !_LARGE_FILES */ # endif /* !@GNULIB_OVERRIDES_STRUCT_STAT@ */ _GL_EXTERN_C int stat (const char *restrict name, struct stat *restrict buf) _GL_ARG_NONNULL ((1, 2)); # endif #elif @GNULIB_OVERRIDES_STRUCT_STAT@ /* see above: #define stat stat_used_without_requesting_gnulib_module_stat */ #elif defined GNULIB_POSIXCHECK # undef stat # if HAVE_RAW_DECL_STAT _GL_WARN_ON_USE (stat, "stat is unportable - " "use gnulib module stat for portability"); # endif #endif #if @GNULIB_MDA_UMASK@ /* On native Windows, map 'umask' to '_umask', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::umask always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef umask # define umask _umask # endif /* Need to cast, because in mingw the last argument is 'int mode'. */ _GL_CXXALIAS_MDA_CAST (umask, mode_t, (mode_t mask)); # else _GL_CXXALIAS_SYS (umask, mode_t, (mode_t mask)); # endif _GL_CXXALIASWARN (umask); #endif #if @GNULIB_UTIMENSAT@ /* Use the rpl_ prefix also on Solaris <= 9, because on Solaris 9 our utimensat implementation relies on futimesat, which on Solaris 10 makes an invocation to utimensat that is meant to invoke the libc's utimensat(), not gnulib's utimensat(). */ # if @REPLACE_UTIMENSAT@ || (!@HAVE_UTIMENSAT@ && defined __sun) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef utimensat # define utimensat rpl_utimensat # endif _GL_FUNCDECL_RPL (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag)); # else # if !@HAVE_UTIMENSAT@ _GL_FUNCDECL_SYS (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (utimensat, int, (int fd, char const *name, struct timespec const times[2], int flag)); # endif # if @HAVE_UTIMENSAT@ _GL_CXXALIASWARN (utimensat); # endif #elif defined GNULIB_POSIXCHECK # undef utimensat # if HAVE_RAW_DECL_UTIMENSAT _GL_WARN_ON_USE (utimensat, "utimensat is not portable - " "use gnulib module utimensat for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ #endif /* _@GUARD_PREFIX@_SYS_STAT_H */ #endif �������������������������������������������������������������������������������������recutils-1.9/lib/stat-time.h������������������������������������������������������������������������0000644�0000000�0000000�00000017024�14226564451�012747� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* stat-related time functions. Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef STAT_TIME_H #define STAT_TIME_H 1 #include "intprops.h" #include <errno.h> #include <stddef.h> #include <sys/stat.h> #include <time.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_STAT_TIME_INLINE # define _GL_STAT_TIME_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* STAT_TIMESPEC (ST, ST_XTIM) is the ST_XTIM member for *ST of type struct timespec, if available. If not, then STAT_TIMESPEC_NS (ST, ST_XTIM) is the nanosecond component of the ST_XTIM member for *ST, if available. ST_XTIM can be st_atim, st_ctim, st_mtim, or st_birthtim for access, status change, data modification, or birth (creation) time respectively. These macros are private to stat-time.h. */ #if _GL_WINDOWS_STAT_TIMESPEC || defined HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC # if _GL_WINDOWS_STAT_TIMESPEC || defined TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim) # else # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.tv_nsec) # endif #elif defined HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC # define STAT_TIMESPEC(st, st_xtim) ((st)->st_xtim##espec) #elif defined HAVE_STRUCT_STAT_ST_ATIMENSEC # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim##ensec) #elif defined HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC # define STAT_TIMESPEC_NS(st, st_xtim) ((st)->st_xtim.st__tim.tv_nsec) #endif /* Return the nanosecond component of *ST's access time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_atime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_atim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_atim); # else return 0; # endif } /* Return the nanosecond component of *ST's status change time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_ctime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_ctim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_ctim); # else return 0; # endif } /* Return the nanosecond component of *ST's data modification time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_mtime_ns (struct stat const *st) { # if defined STAT_TIMESPEC return STAT_TIMESPEC (st, st_mtim).tv_nsec; # elif defined STAT_TIMESPEC_NS return STAT_TIMESPEC_NS (st, st_mtim); # else return 0; # endif } /* Return the nanosecond component of *ST's birth time. */ _GL_STAT_TIME_INLINE long int _GL_ATTRIBUTE_PURE get_stat_birthtime_ns (_GL_UNUSED struct stat const *st) { # if defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC return STAT_TIMESPEC (st, st_birthtim).tv_nsec; # elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC return STAT_TIMESPEC_NS (st, st_birthtim); # else return 0; # endif } /* Return *ST's access time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_atime (struct stat const *st) { #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_atim); #else struct timespec t; t.tv_sec = st->st_atime; t.tv_nsec = get_stat_atime_ns (st); return t; #endif } /* Return *ST's status change time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_ctime (struct stat const *st) { #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_ctim); #else struct timespec t; t.tv_sec = st->st_ctime; t.tv_nsec = get_stat_ctime_ns (st); return t; #endif } /* Return *ST's data modification time. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_mtime (struct stat const *st) { #ifdef STAT_TIMESPEC return STAT_TIMESPEC (st, st_mtim); #else struct timespec t; t.tv_sec = st->st_mtime; t.tv_nsec = get_stat_mtime_ns (st); return t; #endif } /* Return *ST's birth time, if available; otherwise return a value with tv_sec and tv_nsec both equal to -1. */ _GL_STAT_TIME_INLINE struct timespec _GL_ATTRIBUTE_PURE get_stat_birthtime (_GL_UNUSED struct stat const *st) { struct timespec t; #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC) t = STAT_TIMESPEC (st, st_birthtim); #elif defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC t.tv_sec = st->st_birthtime; t.tv_nsec = st->st_birthtimensec; #elif defined _WIN32 && ! defined __CYGWIN__ /* Native Windows platforms (but not Cygwin) put the "file creation time" in st_ctime (!). See <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/stat-functions>. */ # if _GL_WINDOWS_STAT_TIMESPEC t = st->st_ctim; # else t.tv_sec = st->st_ctime; t.tv_nsec = 0; # endif #else /* Birth time is not supported. */ t.tv_sec = -1; t.tv_nsec = -1; #endif #if (defined HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC \ || defined HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC) /* FreeBSD and NetBSD sometimes signal the absence of knowledge by using zero. Attempt to work around this problem. Alas, this can report failure even for valid timestamps. Also, NetBSD sometimes returns junk in the birth time fields; work around this bug if it is detected. */ if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000)) { t.tv_sec = -1; t.tv_nsec = -1; } #endif return t; } /* If a stat-like function returned RESULT, normalize the timestamps in *ST, in case this platform suffers from the Solaris 11 bug where tv_nsec might be negative. Return the adjusted RESULT, setting errno to EOVERFLOW if normalization overflowed. This function is intended to be private to this .h file. */ _GL_STAT_TIME_INLINE int stat_time_normalize (int result, _GL_UNUSED struct stat *st) { #if defined __sun && defined STAT_TIMESPEC if (result == 0) { long int timespec_hz = 1000000000; short int const ts_off[] = { offsetof (struct stat, st_atim), offsetof (struct stat, st_mtim), offsetof (struct stat, st_ctim) }; int i; for (i = 0; i < sizeof ts_off / sizeof *ts_off; i++) { struct timespec *ts = (struct timespec *) ((char *) st + ts_off[i]); long int q = ts->tv_nsec / timespec_hz; long int r = ts->tv_nsec % timespec_hz; if (r < 0) { r += timespec_hz; q--; } ts->tv_nsec = r; /* Overflow is possible, as Solaris 11 stat can yield tv_sec == TYPE_MINIMUM (time_t) && tv_nsec == -1000000000. INT_ADD_WRAPV is OK, since time_t is signed on Solaris. */ if (INT_ADD_WRAPV (q, ts->tv_sec, &ts->tv_sec)) { errno = EOVERFLOW; return -1; } } } #endif return result; } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/vasnprintf.c�����������������������������������������������������������������������0000644�0000000�0000000�00000712673�14226564451�013241� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vsprintf with automatic memory allocation. Copyright (C) 1999, 2002-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* This file can be parametrized with the following macros: VASNPRINTF The name of the function being defined. FCHAR_T The element type of the format string. DCHAR_T The element type of the destination (result) string. FCHAR_T_ONLY_ASCII Set to 1 to enable verification that all characters in the format string are ASCII. MUST be set if FCHAR_T and DCHAR_T are not the same type. DIRECTIVE Structure denoting a format directive. Depends on FCHAR_T. DIRECTIVES Structure denoting the set of format directives of a format string. Depends on FCHAR_T. PRINTF_PARSE Function that parses a format string. Depends on FCHAR_T. DCHAR_CPY memcpy like function for DCHAR_T[] arrays. DCHAR_SET memset like function for DCHAR_T[] arrays. DCHAR_MBSNLEN mbsnlen like function for DCHAR_T[] arrays. SNPRINTF The system's snprintf (or similar) function. This may be either snprintf or swprintf. TCHAR_T The element type of the argument and result string of the said SNPRINTF function. This may be either char or wchar_t. The code exploits that sizeof (TCHAR_T) | sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). DCHAR_IS_TCHAR Set to 1 if DCHAR_T and TCHAR_T are the same type. DCHAR_CONV_FROM_ENCODING A function to convert from char[] to DCHAR[]. DCHAR_IS_UINT8_T Set to 1 if DCHAR_T is uint8_t. DCHAR_IS_UINT16_T Set to 1 if DCHAR_T is uint16_t. DCHAR_IS_UINT32_T Set to 1 if DCHAR_T is uint32_t. ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. ENABLE_WCHAR_FALLBACK Set to 1 to avoid EILSEQ during conversion of wide characters (wchar_t) and wide character strings (wchar_t[]) to multibyte sequences. The fallback is the hexadecimal escape syntax (\unnnn or \Unnnnnnnn) or, if wchar_t is not Unicode encoded, \wnnnn or \Wnnnnnnnn. */ /* Tell glibc's <stdio.h> to provide a prototype for snprintf(). This must come before <config.h> because <config.h> may include <features.h>, and once <features.h> has been included, it's too late. */ #ifndef _GNU_SOURCE # define _GNU_SOURCE 1 #endif #ifndef VASNPRINTF # include <config.h> #endif /* As of GCC 11.2.1, gcc -Wanalyzer-too-complex reports that main's use of CHECK macros expands to code that is too complicated for gcc -fanalyzer. Suppress the resulting bogus warnings. */ #if 10 <= __GNUC__ # pragma GCC diagnostic ignored "-Wanalyzer-null-argument" #endif #include <alloca.h> /* Specification. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "vasnwprintf.h" # else # include "vasnprintf.h" # endif #endif #include <locale.h> /* localeconv() */ #include <stdio.h> /* snprintf(), sprintf() */ #include <stdlib.h> /* abort(), malloc(), realloc(), free() */ #include <string.h> /* memcpy(), strlen() */ #include <errno.h> /* errno */ #include <limits.h> /* CHAR_BIT */ #include <float.h> /* DBL_MAX_EXP, LDBL_MAX_EXP */ #if HAVE_NL_LANGINFO # include <langinfo.h> #endif #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # include "wprintf-parse.h" # else # include "printf-parse.h" # endif #endif /* Checked size_t computations. */ #include "xsize.h" #include "attribute.h" #include "verify.h" #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL # include <math.h> # include "float+.h" #endif #if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL # include <math.h> # include "isnand-nolibm.h" #endif #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) && !defined IN_LIBINTL # include <math.h> # include "isnanl-nolibm.h" # include "fpucw.h" #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL # include <math.h> # include "isnand-nolibm.h" # include "printf-frexp.h" #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL # include <math.h> # include "isnanl-nolibm.h" # include "printf-frexpl.h" # include "fpucw.h" #endif /* Default parameters. */ #ifndef VASNPRINTF # if WIDE_CHAR_VERSION # define VASNPRINTF vasnwprintf # define FCHAR_T wchar_t # define DCHAR_T wchar_t # define TCHAR_T wchar_t # define DCHAR_IS_TCHAR 1 # define DIRECTIVE wchar_t_directive # define DIRECTIVES wchar_t_directives # define PRINTF_PARSE wprintf_parse # define DCHAR_CPY wmemcpy # define DCHAR_SET wmemset # else # define VASNPRINTF vasnprintf # define FCHAR_T char # define DCHAR_T char # define TCHAR_T char # define DCHAR_IS_TCHAR 1 # define DIRECTIVE char_directive # define DIRECTIVES char_directives # define PRINTF_PARSE printf_parse # define DCHAR_CPY memcpy # define DCHAR_SET memset # endif #endif #if WIDE_CHAR_VERSION /* TCHAR_T is wchar_t. */ # define USE_SNPRINTF 1 # if HAVE_DECL__SNWPRINTF /* On Windows, the function swprintf() has a different signature than on Unix; we use the function _snwprintf() or - on mingw - snwprintf() instead. The mingw function snwprintf() has fewer bugs than the MSVCRT function _snwprintf(), so prefer that. */ # if defined __MINGW32__ # define SNPRINTF snwprintf # else # define SNPRINTF _snwprintf # define USE_MSVC__SNPRINTF 1 # endif # else /* Unix. */ # define SNPRINTF swprintf # endif #else /* TCHAR_T is char. */ /* Use snprintf if it exists under the name 'snprintf' or '_snprintf'. But don't use it on BeOS, since BeOS snprintf produces no output if the size argument is >= 0x3000000. Also don't use it on Linux libc5, since there snprintf with size = 1 writes any output without bounds, like sprintf. */ # if (HAVE_DECL__SNPRINTF || HAVE_SNPRINTF) && !defined __BEOS__ && !(__GNU_LIBRARY__ == 1) # define USE_SNPRINTF 1 # else # define USE_SNPRINTF 0 # endif # if HAVE_DECL__SNPRINTF /* Windows. The mingw function snprintf() has fewer bugs than the MSVCRT function _snprintf(), so prefer that. */ # if defined __MINGW32__ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # else /* MSVC versions < 14 did not have snprintf, only _snprintf. */ # define SNPRINTF _snprintf # define USE_MSVC__SNPRINTF 1 # endif # else /* Unix. */ # define SNPRINTF snprintf /* Here we need to call the native snprintf, not rpl_snprintf. */ # undef snprintf # endif #endif /* Here we need to call the native sprintf, not rpl_sprintf. */ #undef sprintf /* GCC >= 4.0 with -Wall emits unjustified "... may be used uninitialized" warnings in this file. Use -Dlint to suppress them. */ #if defined GCC_LINT || defined lint # define IF_LINT(Code) Code #else # define IF_LINT(Code) /* empty */ #endif /* Avoid some warnings from "gcc -Wshadow". This file doesn't use the exp() and remainder() functions. */ #undef exp #define exp expo #undef remainder #define remainder rem #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && !WIDE_CHAR_VERSION # if (HAVE_STRNLEN && !defined _AIX) # define local_strnlen strnlen # else # ifndef local_strnlen_defined # define local_strnlen_defined 1 static size_t local_strnlen (const char *string, size_t maxlen) { const char *end = memchr (string, '\0', maxlen); return end ? (size_t) (end - string) : maxlen; } # endif # endif #endif #if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && WIDE_CHAR_VERSION) || ((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL)) && !WIDE_CHAR_VERSION && DCHAR_IS_TCHAR)) && HAVE_WCHAR_T # if HAVE_WCSLEN # define local_wcslen wcslen # else /* Solaris 2.5.1 has wcslen() in a separate library libw.so. To avoid a dependency towards this library, here is a local substitute. Define this substitute only once, even if this file is included twice in the same compilation unit. */ # ifndef local_wcslen_defined # define local_wcslen_defined 1 static size_t local_wcslen (const wchar_t *s) { const wchar_t *ptr; for (ptr = s; *ptr != (wchar_t) 0; ptr++) ; return ptr - s; } # endif # endif #endif #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF) && HAVE_WCHAR_T && WIDE_CHAR_VERSION # if HAVE_WCSNLEN # define local_wcsnlen wcsnlen # else # ifndef local_wcsnlen_defined # define local_wcsnlen_defined 1 static size_t local_wcsnlen (const wchar_t *s, size_t maxlen) { const wchar_t *ptr; for (ptr = s; maxlen > 0 && *ptr != (wchar_t) 0; ptr++, maxlen--) ; return ptr - s; } # endif # endif #endif #if (((!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL) || ENABLE_WCHAR_FALLBACK) && HAVE_WCHAR_T) || (ENABLE_WCHAR_FALLBACK && HAVE_WINT_T)) && !WIDE_CHAR_VERSION # if ENABLE_WCHAR_FALLBACK static size_t wctomb_fallback (char *s, wchar_t wc) { static char hex[16] = "0123456789ABCDEF"; s[0] = '\\'; if (sizeof (wchar_t) > 2 && wc > 0xffff) { # if __STDC_ISO_10646__ || (__GLIBC__ >= 2) || (defined _WIN32 || defined __CYGWIN__) s[1] = 'U'; # else s[1] = 'W'; # endif s[2] = hex[(wc & 0xf0000000U) >> 28]; s[3] = hex[(wc & 0xf000000U) >> 24]; s[4] = hex[(wc & 0xf00000U) >> 20]; s[5] = hex[(wc & 0xf0000U) >> 16]; s[6] = hex[(wc & 0xf000U) >> 12]; s[7] = hex[(wc & 0xf00U) >> 8]; s[8] = hex[(wc & 0xf0U) >> 4]; s[9] = hex[wc & 0xfU]; return 10; } else { # if __STDC_ISO_10646__ || (__GLIBC__ >= 2) || (defined _WIN32 || defined __CYGWIN__) s[1] = 'u'; # else s[1] = 'w'; # endif s[2] = hex[(wc & 0xf000U) >> 12]; s[3] = hex[(wc & 0xf00U) >> 8]; s[4] = hex[(wc & 0xf0U) >> 4]; s[5] = hex[wc & 0xfU]; return 6; } } # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t static size_t local_wcrtomb (char *s, wchar_t wc, mbstate_t *ps) { size_t count = wcrtomb (s, wc, ps); if (count == (size_t)(-1)) count = wctomb_fallback (s, wc); return count; } # else static int local_wctomb (char *s, wchar_t wc) { int count = wctomb (s, wc); if (count < 0) count = wctomb_fallback (s, wc); return count; } # define local_wcrtomb(S, WC, PS) local_wctomb ((S), (WC)) # endif # else # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t # define local_wcrtomb(S, WC, PS) wcrtomb ((S), (WC), (PS)) # else # define local_wcrtomb(S, WC, PS) wctomb ((S), (WC)) # endif # endif #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && !defined IN_LIBINTL /* Determine the decimal-point character according to the current locale. */ # ifndef decimal_point_char_defined # define decimal_point_char_defined 1 static char decimal_point_char (void) { const char *point; /* Determine it in a multithread-safe way. We know nl_langinfo is multithread-safe on glibc systems and Mac OS X systems, but is not required to be multithread-safe by POSIX. sprintf(), however, is multithread-safe. localeconv() is rarely multithread-safe. */ # if HAVE_NL_LANGINFO && (__GLIBC__ || defined __UCLIBC__ || (defined __APPLE__ && defined __MACH__)) point = nl_langinfo (RADIXCHAR); # elif 1 char pointbuf[5]; sprintf (pointbuf, "%#.0f", 1.0); point = &pointbuf[1]; # else point = localeconv () -> decimal_point; # endif /* The decimal point is always a single byte: either '.' or ','. */ return (point[0] != '\0' ? point[0] : '.'); } # endif #endif #if NEED_PRINTF_INFINITE_DOUBLE && !NEED_PRINTF_DOUBLE && !defined IN_LIBINTL /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zero (double x) { return isnand (x) || x + x == x; } #endif #if NEED_PRINTF_INFINITE_LONG_DOUBLE && !NEED_PRINTF_LONG_DOUBLE && !defined IN_LIBINTL /* Equivalent to !isfinite(x) || x == 0, but does not require libm. */ static int is_infinite_or_zerol (long double x) { return isnanl (x) || x + x == x; } #endif #if (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL /* Converting 'long double' to decimal without rare rounding bugs requires real bignums. We use the naming conventions of GNU gmp, but vastly simpler (and slower) algorithms. */ typedef unsigned int mp_limb_t; # define GMP_LIMB_BITS 32 verify (sizeof (mp_limb_t) * CHAR_BIT == GMP_LIMB_BITS); typedef unsigned long long mp_twolimb_t; # define GMP_TWOLIMB_BITS 64 verify (sizeof (mp_twolimb_t) * CHAR_BIT == GMP_TWOLIMB_BITS); /* Representation of a bignum >= 0. */ typedef struct { size_t nlimbs; mp_limb_t *limbs; /* Bits in little-endian order, allocated with malloc(). */ } mpn_t; /* Compute the product of two bignums >= 0. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * multiply (mpn_t src1, mpn_t src2, mpn_t *dest) { const mp_limb_t *p1; const mp_limb_t *p2; size_t len1; size_t len2; if (src1.nlimbs <= src2.nlimbs) { len1 = src1.nlimbs; p1 = src1.limbs; len2 = src2.nlimbs; p2 = src2.limbs; } else { len1 = src2.nlimbs; p1 = src2.limbs; len2 = src1.nlimbs; p2 = src1.limbs; } /* Now 0 <= len1 <= len2. */ if (len1 == 0) { /* src1 or src2 is zero. */ dest->nlimbs = 0; dest->limbs = (mp_limb_t *) malloc (1); } else { /* Here 1 <= len1 <= len2. */ size_t dlen; mp_limb_t *dp; size_t k, i, j; dlen = len1 + len2; dp = (mp_limb_t *) malloc (dlen * sizeof (mp_limb_t)); if (dp == NULL) return NULL; for (k = len2; k > 0; ) dp[--k] = 0; for (i = 0; i < len1; i++) { mp_limb_t digit1 = p1[i]; mp_twolimb_t carry = 0; for (j = 0; j < len2; j++) { mp_limb_t digit2 = p2[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; carry += dp[i + j]; dp[i + j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } dp[i + len2] = (mp_limb_t) carry; } /* Normalise. */ while (dlen > 0 && dp[dlen - 1] == 0) dlen--; dest->nlimbs = dlen; dest->limbs = dp; } return dest->limbs; } /* Compute the quotient of a bignum a >= 0 and a bignum b > 0. a is written as a = q * b + r with 0 <= r < b. q is the quotient, r the remainder. Finally, round-to-even is performed: If r > b/2 or if r = b/2 and q is odd, q is incremented. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * divide (mpn_t a, mpn_t b, mpn_t *q) { /* Algorithm: First normalise a and b: a=[a[m-1],...,a[0]], b=[b[n-1],...,b[0]] with m>=0 and n>0 (in base beta = 2^GMP_LIMB_BITS). If m<n, then q:=0 and r:=a. If m>=n=1, perform a single-precision division: r:=0, j:=m, while j>0 do {Here (q[m-1]*beta^(m-1)+...+q[j]*beta^j) * b[0] + r*beta^j = = a[m-1]*beta^(m-1)+...+a[j]*beta^j und 0<=r<b[0]<beta} j:=j-1, r:=r*beta+a[j], q[j]:=floor(r/b[0]), r:=r-b[0]*q[j]. Normalise [q[m-1],...,q[0]], yields q. If m>=n>1, perform a multiple-precision division: We have a/b < beta^(m-n+1). s:=intDsize-1-(highest bit in b[n-1]), 0<=s<intDsize. Shift a and b left by s bits, copying them. r:=a. r=[r[m],...,r[0]], b=[b[n-1],...,b[0]] with b[n-1]>=beta/2. For j=m-n,...,0: {Here 0 <= r < b*beta^(j+1).} Compute q* : q* := floor((r[j+n]*beta+r[j+n-1])/b[n-1]). In case of overflow (q* >= beta) set q* := beta-1. Compute c2 := ((r[j+n]*beta+r[j+n-1]) - q* * b[n-1])*beta + r[j+n-2] and c3 := b[n-2] * q*. {We have 0 <= c2 < 2*beta^2, even 0 <= c2 < beta^2 if no overflow occurred. Furthermore 0 <= c3 < beta^2. If there was overflow and r[j+n]*beta+r[j+n-1] - q* * b[n-1] >= beta, i.e. c2 >= beta^2, the next test can be skipped.} While c3 > c2, {Here 0 <= c2 < c3 < beta^2} Put q* := q* - 1, c2 := c2 + b[n-1]*beta, c3 := c3 - b[n-2]. If q* > 0: Put r := r - b * q* * beta^j. In detail: [r[n+j],...,r[j]] := [r[n+j],...,r[j]] - q* * [b[n-1],...,b[0]]. hence: u:=0, for i:=0 to n-1 do u := u + q* * b[i], r[j+i]:=r[j+i]-(u mod beta) (+ beta, if carry), u:=u div beta (+ 1, if carry in subtraction) r[n+j]:=r[n+j]-u. {Since always u = (q* * [b[i-1],...,b[0]] div beta^i) + 1 < q* + 1 <= beta, the carry u does not overflow.} If a negative carry occurs, put q* := q* - 1 and [r[n+j],...,r[j]] := [r[n+j],...,r[j]] + [0,b[n-1],...,b[0]]. Set q[j] := q*. Normalise [q[m-n],..,q[0]]; this yields the quotient q. Shift [r[n-1],...,r[0]] right by s bits and normalise; this yields the rest r. The room for q[j] can be allocated at the memory location of r[n+j]. Finally, round-to-even: Shift r left by 1 bit. If r > b or if r = b and q[0] is odd, q := q+1. */ const mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; const mp_limb_t *b_ptr = b.limbs; size_t b_len = b.nlimbs; mp_limb_t *roomptr; mp_limb_t *tmp_roomptr = NULL; mp_limb_t *q_ptr; size_t q_len; mp_limb_t *r_ptr; size_t r_len; /* Allocate room for a_len+2 digits. (Need a_len+1 digits for the real division and 1 more digit for the final rounding of q.) */ roomptr = (mp_limb_t *) malloc ((a_len + 2) * sizeof (mp_limb_t)); if (roomptr == NULL) return NULL; /* Normalise a. */ while (a_len > 0 && a_ptr[a_len - 1] == 0) a_len--; /* Normalise b. */ for (;;) { if (b_len == 0) /* Division by zero. */ abort (); if (b_ptr[b_len - 1] == 0) b_len--; else break; } /* Here m = a_len >= 0 and n = b_len > 0. */ if (a_len < b_len) { /* m<n: trivial case. q=0, r := copy of a. */ r_ptr = roomptr; r_len = a_len; memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); q_ptr = roomptr + a_len; q_len = 0; } else if (b_len == 1) { /* n=1: single precision division. beta^(m-1) <= a < beta^m ==> beta^(m-2) <= a/b < beta^m */ r_ptr = roomptr; q_ptr = roomptr + 1; { mp_limb_t den = b_ptr[0]; mp_limb_t remainder = 0; const mp_limb_t *sourceptr = a_ptr + a_len; mp_limb_t *destptr = q_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--sourceptr; *--destptr = num / den; remainder = num % den; } /* Normalise and store r. */ if (remainder > 0) { r_ptr[0] = remainder; r_len = 1; } else r_len = 0; /* Normalise q. */ q_len = a_len; if (q_ptr[q_len - 1] == 0) q_len--; } } else { /* n>1: multiple precision division. beta^(m-1) <= a < beta^m, beta^(n-1) <= b < beta^n ==> beta^(m-n-1) <= a/b < beta^(m-n+1). */ /* Determine s. */ size_t s; { mp_limb_t msd = b_ptr[b_len - 1]; /* = b[n-1], > 0 */ /* Determine s = GMP_LIMB_BITS - integer_length (msd). Code copied from gnulib's integer_length.c. */ # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 4) \ || (__clang_major__ >= 4) s = __builtin_clz (msd); # else # if defined DBL_EXPBIT0_WORD && defined DBL_EXPBIT0_BIT if (GMP_LIMB_BITS <= DBL_MANT_BIT) { /* Use 'double' operations. Assumes an IEEE 754 'double' implementation. */ # define DBL_EXP_MASK ((DBL_MAX_EXP - DBL_MIN_EXP) | 7) # define DBL_EXP_BIAS (DBL_EXP_MASK / 2 - 1) # define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { double value; unsigned int word[NWORDS]; } m; /* Use a single integer to floating-point conversion. */ m.value = msd; s = GMP_LIMB_BITS - (((m.word[DBL_EXPBIT0_WORD] >> DBL_EXPBIT0_BIT) & DBL_EXP_MASK) - DBL_EXP_BIAS); } else # undef NWORDS # endif { s = 31; if (msd >= 0x10000) { msd = msd >> 16; s -= 16; } if (msd >= 0x100) { msd = msd >> 8; s -= 8; } if (msd >= 0x10) { msd = msd >> 4; s -= 4; } if (msd >= 0x4) { msd = msd >> 2; s -= 2; } if (msd >= 0x2) { msd = msd >> 1; s -= 1; } } # endif } /* 0 <= s < GMP_LIMB_BITS. Copy b, shifting it left by s bits. */ if (s > 0) { tmp_roomptr = (mp_limb_t *) malloc (b_len * sizeof (mp_limb_t)); if (tmp_roomptr == NULL) { free (roomptr); return NULL; } { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = tmp_roomptr; mp_twolimb_t accu = 0; size_t count; for (count = b_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } /* accu must be zero, since that was how s was determined. */ if (accu != 0) abort (); } b_ptr = tmp_roomptr; } /* Copy a, shifting it left by s bits, yields r. Memory layout: At the beginning: r = roomptr[0..a_len], at the end: r = roomptr[0..b_len-1], q = roomptr[b_len..a_len] */ r_ptr = roomptr; if (s == 0) { memcpy (r_ptr, a_ptr, a_len * sizeof (mp_limb_t)); r_ptr[a_len] = 0; } else { const mp_limb_t *sourceptr = a_ptr; mp_limb_t *destptr = r_ptr; mp_twolimb_t accu = 0; size_t count; for (count = a_len; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } *destptr++ = (mp_limb_t) accu; } q_ptr = roomptr + b_len; q_len = a_len - b_len + 1; /* q will have m-n+1 limbs */ { size_t j = a_len - b_len; /* m-n */ mp_limb_t b_msd = b_ptr[b_len - 1]; /* b[n-1] */ mp_limb_t b_2msd = b_ptr[b_len - 2]; /* b[n-2] */ mp_twolimb_t b_msdd = /* b[n-1]*beta+b[n-2] */ ((mp_twolimb_t) b_msd << GMP_LIMB_BITS) | b_2msd; /* Division loop, traversed m-n+1 times. j counts down, b is unchanged, beta/2 <= b[n-1] < beta. */ for (;;) { mp_limb_t q_star; mp_limb_t c1; if (r_ptr[j + b_len] < b_msd) /* r[j+n] < b[n-1] ? */ { /* Divide r[j+n]*beta+r[j+n-1] by b[n-1], no overflow. */ mp_twolimb_t num = ((mp_twolimb_t) r_ptr[j + b_len] << GMP_LIMB_BITS) | r_ptr[j + b_len - 1]; q_star = num / b_msd; c1 = num % b_msd; } else { /* Overflow, hence r[j+n]*beta+r[j+n-1] >= beta*b[n-1]. */ q_star = (mp_limb_t)~(mp_limb_t)0; /* q* = beta-1 */ /* Test whether r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] >= beta <==> r[j+n]*beta+r[j+n-1] + b[n-1] >= beta*b[n-1]+beta <==> b[n-1] < floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) {<= beta !}. If yes, jump directly to the subtraction loop. (Otherwise, r[j+n]*beta+r[j+n-1] - (beta-1)*b[n-1] < beta <==> floor((r[j+n]*beta+r[j+n-1]+b[n-1])/beta) = b[n-1] ) */ if (r_ptr[j + b_len] > b_msd || (c1 = r_ptr[j + b_len - 1] + b_msd) < b_msd) /* r[j+n] >= b[n-1]+1 or r[j+n] = b[n-1] and the addition r[j+n-1]+b[n-1] gives a carry. */ goto subtract; } /* q_star = q*, c1 = (r[j+n]*beta+r[j+n-1]) - q* * b[n-1] (>=0, <beta). */ { mp_twolimb_t c2 = /* c1*beta+r[j+n-2] */ ((mp_twolimb_t) c1 << GMP_LIMB_BITS) | r_ptr[j + b_len - 2]; mp_twolimb_t c3 = /* b[n-2] * q* */ (mp_twolimb_t) b_2msd * (mp_twolimb_t) q_star; /* While c2 < c3, increase c2 and decrease c3. Consider c3-c2. While it is > 0, decrease it by b[n-1]*beta+b[n-2]. Because of b[n-1]*beta+b[n-2] >= beta^2/2 this can happen only twice. */ if (c3 > c2) { q_star = q_star - 1; /* q* := q* - 1 */ if (c3 - c2 > b_msdd) q_star = q_star - 1; /* q* := q* - 1 */ } } if (q_star > 0) subtract: { /* Subtract r := r - b * q* * beta^j. */ mp_limb_t cr; { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_twolimb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { /* Here 0 <= carry <= q*. */ carry = carry + (mp_twolimb_t) q_star * (mp_twolimb_t) *sourceptr++ + (mp_limb_t) ~(*destptr); /* Here 0 <= carry <= beta*q* + beta-1. */ *destptr++ = ~(mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; /* <= q* */ } cr = (mp_limb_t) carry; } /* Subtract cr from r_ptr[j + b_len], then forget about r_ptr[j + b_len]. */ if (cr > r_ptr[j + b_len]) { /* Subtraction gave a carry. */ q_star = q_star - 1; /* q* := q* - 1 */ /* Add b back. */ { const mp_limb_t *sourceptr = b_ptr; mp_limb_t *destptr = r_ptr + j; mp_limb_t carry = 0; size_t count; for (count = b_len; count > 0; count--) { mp_limb_t source1 = *sourceptr++; mp_limb_t source2 = *destptr; *destptr++ = source1 + source2 + carry; carry = (carry ? source1 >= (mp_limb_t) ~source2 : source1 > (mp_limb_t) ~source2); } } /* Forget about the carry and about r[j+n]. */ } } /* q* is determined. Store it as q[j]. */ q_ptr[j] = q_star; if (j == 0) break; j--; } } r_len = b_len; /* Normalise q. */ if (q_ptr[q_len - 1] == 0) q_len--; # if 0 /* Not needed here, since we need r only to compare it with b/2, and b is shifted left by s bits. */ /* Shift r right by s bits. */ if (s > 0) { mp_limb_t ptr = r_ptr + r_len; mp_twolimb_t accu = 0; size_t count; for (count = r_len; count > 0; count--) { accu = (mp_twolimb_t) (mp_limb_t) accu << GMP_LIMB_BITS; accu += (mp_twolimb_t) *--ptr << (GMP_LIMB_BITS - s); *ptr = (mp_limb_t) (accu >> GMP_LIMB_BITS); } } # endif /* Normalise r. */ while (r_len > 0 && r_ptr[r_len - 1] == 0) r_len--; } /* Compare r << 1 with b. */ if (r_len > b_len) goto increment_q; { size_t i; for (i = b_len;;) { mp_limb_t r_i = (i <= r_len && i > 0 ? r_ptr[i - 1] >> (GMP_LIMB_BITS - 1) : 0) | (i < r_len ? r_ptr[i] << 1 : 0); mp_limb_t b_i = (i < b_len ? b_ptr[i] : 0); if (r_i > b_i) goto increment_q; if (r_i < b_i) goto keep_q; if (i == 0) break; i--; } } if (q_len > 0 && ((q_ptr[0] & 1) != 0)) /* q is odd. */ increment_q: { size_t i; for (i = 0; i < q_len; i++) if (++(q_ptr[i]) != 0) goto keep_q; q_ptr[q_len++] = 1; } keep_q: if (tmp_roomptr != NULL) free (tmp_roomptr); q->limbs = q_ptr; q->nlimbs = q_len; return roomptr; } /* Convert a bignum a >= 0, multiplied with 10^extra_zeroes, to decimal representation. Destroys the contents of a. Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * convert_to_decimal (mpn_t a, size_t extra_zeroes) { mp_limb_t *a_ptr = a.limbs; size_t a_len = a.nlimbs; /* 0.03345 is slightly larger than log(2)/(9*log(10)). */ size_t c_len = 9 * ((size_t)(a_len * (GMP_LIMB_BITS * 0.03345f)) + 1); /* We need extra_zeroes bytes for zeroes, followed by c_len bytes for the digits of a, followed by 1 byte for the terminating NUL. */ char *c_ptr = (char *) malloc (xsum (xsum (extra_zeroes, c_len), 1)); if (c_ptr != NULL) { char *d_ptr = c_ptr; for (; extra_zeroes > 0; extra_zeroes--) *d_ptr++ = '0'; while (a_len > 0) { /* Divide a by 10^9, in-place. */ mp_limb_t remainder = 0; mp_limb_t *ptr = a_ptr + a_len; size_t count; for (count = a_len; count > 0; count--) { mp_twolimb_t num = ((mp_twolimb_t) remainder << GMP_LIMB_BITS) | *--ptr; *ptr = num / 1000000000; remainder = num % 1000000000; } /* Store the remainder as 9 decimal digits. */ for (count = 9; count > 0; count--) { *d_ptr++ = '0' + (remainder % 10); remainder = remainder / 10; } /* Normalize a. */ if (a_ptr[a_len - 1] == 0) a_len--; } /* Remove leading zeroes. */ while (d_ptr > c_ptr && d_ptr[-1] == '0') d_ptr--; /* But keep at least one zero. */ if (d_ptr == c_ptr) *d_ptr++ = '0'; /* Terminate the string. */ *d_ptr = '\0'; } return c_ptr; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_long_double (long double x, int *ep, mpn_t *mp) { mpn_t m; int exp; long double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (LDBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); /* x = 2^exp * y = 2^(exp - LDBL_MANT_BIT) * (y * 2^LDBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * 2^LDBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'long double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'long double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (LDBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (LDBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (LDBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[LDBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = LDBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0L && y < 1.0L)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0L && y < 1.0L)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # if 0 /* On FreeBSD 6.1/x86, 'long double' numbers sometimes have excess precision. */ if (!(y == 0.0L)) abort (); # endif /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - LDBL_MANT_BIT; return m.limbs; } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0: write x as x = 2^e * m, where m is a bignum. Return the allocated memory in case of success, NULL in case of memory allocation failure. */ static void * decode_double (double x, int *ep, mpn_t *mp) { mpn_t m; int exp; double y; size_t i; /* Allocate memory for result. */ m.nlimbs = (DBL_MANT_BIT + GMP_LIMB_BITS - 1) / GMP_LIMB_BITS; m.limbs = (mp_limb_t *) malloc (m.nlimbs * sizeof (mp_limb_t)); if (m.limbs == NULL) return NULL; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); /* x = 2^exp * y = 2^(exp - DBL_MANT_BIT) * (y * 2^DBL_MANT_BIT), and the latter is an integer. */ /* Convert the mantissa (y * 2^DBL_MANT_BIT) to a sequence of limbs. I'm not sure whether it's safe to cast a 'double' value between 2^31 and 2^32 to 'unsigned int', therefore play safe and cast only 'double' values between 0 and 2^16 (to 'unsigned int' or 'int', doesn't matter). */ # if (DBL_MANT_BIT % GMP_LIMB_BITS) != 0 # if (DBL_MANT_BIT % GMP_LIMB_BITS) > GMP_LIMB_BITS / 2 { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % (GMP_LIMB_BITS / 2)); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = (hi << (GMP_LIMB_BITS / 2)) | lo; } # else { mp_limb_t d; y *= (mp_limb_t) 1 << (DBL_MANT_BIT % GMP_LIMB_BITS); d = (int) y; y -= d; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[DBL_MANT_BIT / GMP_LIMB_BITS] = d; } # endif # endif for (i = DBL_MANT_BIT / GMP_LIMB_BITS; i > 0; ) { mp_limb_t hi, lo; y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); hi = (int) y; y -= hi; if (!(y >= 0.0 && y < 1.0)) abort (); y *= (mp_limb_t) 1 << (GMP_LIMB_BITS / 2); lo = (int) y; y -= lo; if (!(y >= 0.0 && y < 1.0)) abort (); m.limbs[--i] = (hi << (GMP_LIMB_BITS / 2)) | lo; } if (!(y == 0.0)) abort (); /* Normalise. */ while (m.nlimbs > 0 && m.limbs[m.nlimbs - 1] == 0) m.nlimbs--; *mp = m; *ep = exp - DBL_MANT_BIT; return m.limbs; } # endif /* Assuming x = 2^e * m is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_decoded (int e, mpn_t m, void *memory, int n) { int s; size_t extra_zeroes; unsigned int abs_n; unsigned int abs_s; mp_limb_t *pow5_ptr; size_t pow5_len; unsigned int s_limbs; unsigned int s_bits; mpn_t pow5; mpn_t z; void *z_memory; char *digits; if (memory == NULL) return NULL; /* x = 2^e * m, hence y = round (2^e * 10^n * m) = round (2^(e+n) * 5^n * m) = round (2^s * 5^n * m). */ s = e + n; extra_zeroes = 0; /* Factor out a common power of 10 if possible. */ if (s > 0 && n > 0) { extra_zeroes = (s < n ? s : n); s -= extra_zeroes; n -= extra_zeroes; } /* Here y = round (2^s * 5^n * m) * 10^extra_zeroes. Before converting to decimal, we need to compute z = round (2^s * 5^n * m). */ /* Compute 5^|n|, possibly shifted by |s| bits if n and s have the same sign. 2.322 is slightly larger than log(5)/log(2). */ abs_n = (n >= 0 ? n : -n); abs_s = (s >= 0 ? s : -s); pow5_ptr = (mp_limb_t *) malloc (((int)(abs_n * (2.322f / GMP_LIMB_BITS)) + 1 + abs_s / GMP_LIMB_BITS + 1) * sizeof (mp_limb_t)); if (pow5_ptr == NULL) { free (memory); return NULL; } /* Initialize with 1. */ pow5_ptr[0] = 1; pow5_len = 1; /* Multiply with 5^|n|. */ if (abs_n > 0) { static mp_limb_t const small_pow5[13 + 1] = { 1, 5, 25, 125, 625, 3125, 15625, 78125, 390625, 1953125, 9765625, 48828125, 244140625, 1220703125 }; unsigned int n13; for (n13 = 0; n13 <= abs_n; n13 += 13) { mp_limb_t digit1 = small_pow5[n13 + 13 <= abs_n ? 13 : abs_n - n13]; size_t j; mp_twolimb_t carry = 0; for (j = 0; j < pow5_len; j++) { mp_limb_t digit2 = pow5_ptr[j]; carry += (mp_twolimb_t) digit1 * (mp_twolimb_t) digit2; pow5_ptr[j] = (mp_limb_t) carry; carry = carry >> GMP_LIMB_BITS; } if (carry > 0) pow5_ptr[pow5_len++] = (mp_limb_t) carry; } } s_limbs = abs_s / GMP_LIMB_BITS; s_bits = abs_s % GMP_LIMB_BITS; if (n >= 0 ? s >= 0 : s <= 0) { /* Multiply with 2^|s|. */ if (s_bits > 0) { mp_limb_t *ptr = pow5_ptr; mp_twolimb_t accu = 0; size_t count; for (count = pow5_len; count > 0; count--) { accu += (mp_twolimb_t) *ptr << s_bits; *ptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) { *ptr = (mp_limb_t) accu; pow5_len++; } } if (s_limbs > 0) { size_t count; for (count = pow5_len; count > 0;) { count--; pow5_ptr[s_limbs + count] = pow5_ptr[count]; } for (count = s_limbs; count > 0;) { count--; pow5_ptr[count] = 0; } pow5_len += s_limbs; } pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* Multiply m with pow5. No division needed. */ z_memory = multiply (m, pow5, &z); } else { /* Divide m by pow5 and round. */ z_memory = divide (m, pow5, &z); } } else { pow5.limbs = pow5_ptr; pow5.nlimbs = pow5_len; if (n >= 0) { /* n >= 0, s < 0. Multiply m with pow5, then divide by 2^|s|. */ mpn_t numerator; mpn_t denominator; void *tmp_memory; tmp_memory = multiply (m, pow5, &numerator); if (tmp_memory == NULL) { free (pow5_ptr); free (memory); return NULL; } /* Construct 2^|s|. */ { mp_limb_t *ptr = pow5_ptr + pow5_len; size_t i; for (i = 0; i < s_limbs; i++) ptr[i] = 0; ptr[s_limbs] = (mp_limb_t) 1 << s_bits; denominator.limbs = ptr; denominator.nlimbs = s_limbs + 1; } z_memory = divide (numerator, denominator, &z); free (tmp_memory); } else { /* n < 0, s > 0. Multiply m with 2^s, then divide by pow5. */ mpn_t numerator; mp_limb_t *num_ptr; num_ptr = (mp_limb_t *) malloc ((m.nlimbs + s_limbs + 1) * sizeof (mp_limb_t)); if (num_ptr == NULL) { free (pow5_ptr); free (memory); return NULL; } { mp_limb_t *destptr = num_ptr; { size_t i; for (i = 0; i < s_limbs; i++) *destptr++ = 0; } if (s_bits > 0) { const mp_limb_t *sourceptr = m.limbs; mp_twolimb_t accu = 0; size_t count; for (count = m.nlimbs; count > 0; count--) { accu += (mp_twolimb_t) *sourceptr++ << s_bits; *destptr++ = (mp_limb_t) accu; accu = accu >> GMP_LIMB_BITS; } if (accu > 0) *destptr++ = (mp_limb_t) accu; } else { const mp_limb_t *sourceptr = m.limbs; size_t count; for (count = m.nlimbs; count > 0; count--) *destptr++ = *sourceptr++; } numerator.limbs = num_ptr; numerator.nlimbs = destptr - num_ptr; } z_memory = divide (numerator, pow5, &z); free (num_ptr); } } free (pow5_ptr); free (memory); /* Here y = round (x * 10^n) = z * 10^extra_zeroes. */ if (z_memory == NULL) return NULL; digits = convert_to_decimal (z, extra_zeroes); free (z_memory); return digits; } # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_long_double (long double x, int n) { int e IF_LINT(= 0); mpn_t m; void *memory = decode_long_double (x, &e, &m); return scale10_round_decimal_decoded (e, m, memory, n); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and >= 0, and n is an integer: Returns the decimal representation of round (x * 10^n). Return the allocated memory - containing the decimal digits in low-to-high order, terminated with a NUL character - in case of success, NULL in case of memory allocation failure. */ static char * scale10_round_decimal_double (double x, int n) { int e IF_LINT(= 0); mpn_t m; void *memory = decode_double (x, &e, &m); return scale10_round_decimal_decoded (e, m, memory, n); } # endif # if NEED_PRINTF_LONG_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10l (long double x) { int exp; long double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexpl (x, &exp); if (!(y >= 0.0L && y < 1.0L)) abort (); if (y == 0.0L) return INT_MIN; if (y < 0.5L) { while (y < (1.0L / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0L * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0L / (1 << 16))) { y *= 1.0L * (1 << 16); exp -= 16; } if (y < (1.0L / (1 << 8))) { y *= 1.0L * (1 << 8); exp -= 8; } if (y < (1.0L / (1 << 4))) { y *= 1.0L * (1 << 4); exp -= 4; } if (y < (1.0L / (1 << 2))) { y *= 1.0L * (1 << 2); exp -= 2; } if (y < (1.0L / (1 << 1))) { y *= 1.0L * (1 << 1); exp -= 1; } } if (!(y >= 0.5L && y < 1.0L)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) Four terms are enough to get an approximation with error < 10^-7. */ l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif # if NEED_PRINTF_DOUBLE /* Assuming x is finite and > 0: Return an approximation for n with 10^n <= x < 10^(n+1). The approximation is usually the right n, but may be off by 1 sometimes. */ static int floorlog10 (double x) { int exp; double y; double z; double l; /* Split into exponential part and mantissa. */ y = frexp (x, &exp); if (!(y >= 0.0 && y < 1.0)) abort (); if (y == 0.0) return INT_MIN; if (y < 0.5) { while (y < (1.0 / (1 << (GMP_LIMB_BITS / 2)) / (1 << (GMP_LIMB_BITS / 2)))) { y *= 1.0 * (1 << (GMP_LIMB_BITS / 2)) * (1 << (GMP_LIMB_BITS / 2)); exp -= GMP_LIMB_BITS; } if (y < (1.0 / (1 << 16))) { y *= 1.0 * (1 << 16); exp -= 16; } if (y < (1.0 / (1 << 8))) { y *= 1.0 * (1 << 8); exp -= 8; } if (y < (1.0 / (1 << 4))) { y *= 1.0 * (1 << 4); exp -= 4; } if (y < (1.0 / (1 << 2))) { y *= 1.0 * (1 << 2); exp -= 2; } if (y < (1.0 / (1 << 1))) { y *= 1.0 * (1 << 1); exp -= 1; } } if (!(y >= 0.5 && y < 1.0)) abort (); /* Compute an approximation for l = log2(x) = exp + log2(y). */ l = exp; z = y; if (z < 0.70710678118654752444) { z *= 1.4142135623730950488; l -= 0.5; } if (z < 0.8408964152537145431) { z *= 1.1892071150027210667; l -= 0.25; } if (z < 0.91700404320467123175) { z *= 1.0905077326652576592; l -= 0.125; } if (z < 0.9576032806985736469) { z *= 1.0442737824274138403; l -= 0.0625; } /* Now 0.95 <= z <= 1.01. */ z = 1 - z; /* log2(1-z) = 1/log(2) * (- z - z^2/2 - z^3/3 - z^4/4 - ...) Four terms are enough to get an approximation with error < 10^-7. */ l -= 1.4426950408889634074 * z * (1.0 + z * (0.5 + z * ((1.0 / 3) + z * 0.25))); /* Finally multiply with log(2)/log(10), yields an approximation for log10(x). */ l *= 0.30102999566398119523; /* Round down to the next integer. */ return (int) l + (l < 0 ? -1 : 0); } # endif /* Tests whether a string of digits consists of exactly PRECISION zeroes and a single '1' digit. */ static int is_borderline (const char *digits, size_t precision) { for (; precision > 0; precision--, digits++) if (*digits != '0') return 0; if (*digits != '1') return 0; digits++; return *digits == '\0'; } #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF /* Use a different function name, to make it possible that the 'wchar_t' parametrization and the 'char' parametrization get compiled in the same translation unit. */ # if WIDE_CHAR_VERSION # define MAX_ROOM_NEEDED wmax_room_needed # else # define MAX_ROOM_NEEDED max_room_needed # endif /* Returns the number of TCHAR_T units needed as temporary space for the result of sprintf or SNPRINTF of a single conversion directive. */ static size_t MAX_ROOM_NEEDED (const arguments *ap, size_t arg_index, FCHAR_T conversion, arg_type type, int flags, size_t width, int has_precision, size_t precision, int pad_ourselves) { size_t tmp_length; switch (conversion) { case 'd': case 'i': case 'u': if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ else if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.30103 /* binary -> decimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Multiply by 2, as an estimate for FLAG_GROUP. */ tmp_length = xsum (tmp_length, tmp_length); /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'o': if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ else if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.333334 /* binary -> octal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Add 1, to account for a leading sign. */ tmp_length = xsum (tmp_length, 1); break; case 'x': case 'X': if (type == TYPE_LONGLONGINT || type == TYPE_ULONGLONGINT) tmp_length = (unsigned int) (sizeof (unsigned long long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ else if (type == TYPE_LONGINT || type == TYPE_ULONGINT) tmp_length = (unsigned int) (sizeof (unsigned long) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (sizeof (unsigned int) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Add 2, to account for a leading sign or alternate form. */ tmp_length = xsum (tmp_length, 2); break; case 'f': case 'F': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ else tmp_length = (unsigned int) (DBL_MAX_EXP * 0.30103 /* binary -> decimal */ * 2 /* estimate for FLAG_GROUP */ ) + 1 /* turn floor into ceil */ + 10; /* sign, decimal point etc. */ tmp_length = xsum (tmp_length, precision); break; case 'e': case 'E': case 'g': case 'G': tmp_length = 12; /* sign, decimal point, exponent etc. */ tmp_length = xsum (tmp_length, precision); break; case 'a': case 'A': if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) (LDBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) (DBL_DIG * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); break; case 'c': # if HAVE_WINT_T && !WIDE_CHAR_VERSION if (type == TYPE_WIDE_CHAR) { tmp_length = MB_CUR_MAX; # if ENABLE_WCHAR_FALLBACK if (tmp_length < (sizeof (wchar_t) > 2 ? 10 : 6)) tmp_length = (sizeof (wchar_t) > 2 ? 10 : 6); # endif } else # endif tmp_length = 1; break; case 's': # if HAVE_WCHAR_T if (type == TYPE_WIDE_STRING) { # if WIDE_CHAR_VERSION /* ISO C says about %ls in fwprintf: "If the precision is not specified or is greater than the size of the array, the array shall contain a null wide character." So if there is a precision, we must not use wcslen. */ const wchar_t *arg = ap->arg[arg_index].a.a_wide_string; if (has_precision) tmp_length = local_wcsnlen (arg, precision); else tmp_length = local_wcslen (arg); # else /* ISO C says about %ls in fprintf: "If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by the precision, the function would need to access a wide character one past the end of the array." So if there is a precision, we must not use wcslen. */ /* This case has already been handled separately in VASNPRINTF. */ abort (); # endif } else # endif { # if WIDE_CHAR_VERSION /* ISO C says about %s in fwprintf: "If the precision is not specified or is greater than the size of the converted array, the converted array shall contain a null wide character." So if there is a precision, we must not use strlen. */ /* This case has already been handled separately in VASNPRINTF. */ abort (); # else /* ISO C says about %s in fprintf: "If the precision is not specified or greater than the size of the array, the array shall contain a null character." So if there is a precision, we must not use strlen. */ const char *arg = ap->arg[arg_index].a.a_string; if (has_precision) tmp_length = local_strnlen (arg, precision); else tmp_length = strlen (arg); # endif } break; case 'p': tmp_length = (unsigned int) (sizeof (void *) * CHAR_BIT * 0.25 /* binary -> hexadecimal */ ) + 1 /* turn floor into ceil */ + 2; /* account for leading 0x */ break; default: abort (); } if (!pad_ourselves) { # if ENABLE_UNISTDIO /* Padding considers the number of characters, therefore the number of elements after padding may be > max (tmp_length, width) but is certainly <= tmp_length + width. */ tmp_length = xsum (tmp_length, width); # else /* Padding considers the number of elements, says POSIX. */ if (tmp_length < width) tmp_length = width; # endif } tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ return tmp_length; } #endif DCHAR_T * VASNPRINTF (DCHAR_T *resultbuf, size_t *lengthp, const FCHAR_T *format, va_list args) { DIRECTIVES d; arguments a; if (PRINTF_PARSE (format, &d, &a) < 0) /* errno is already set. */ return NULL; /* Frees the memory allocated by this function. Preserves errno. */ #define CLEANUP() \ if (d.dir != d.direct_alloc_dir) \ free (d.dir); \ if (a.arg != a.direct_alloc_arg) \ free (a.arg); if (PRINTF_FETCHARGS (args, &a) < 0) { CLEANUP (); errno = EINVAL; return NULL; } { size_t buf_neededlength; TCHAR_T *buf; TCHAR_T *buf_malloced; const FCHAR_T *cp; size_t i; DIRECTIVE *dp; /* Output string accumulator. */ DCHAR_T *result; size_t allocated; size_t length; /* Allocate a small buffer that will hold a directive passed to sprintf or snprintf. */ buf_neededlength = xsum4 (7, d.max_width_length, d.max_precision_length, 6); #if HAVE_ALLOCA if (buf_neededlength < 4000 / sizeof (TCHAR_T)) { buf = (TCHAR_T *) alloca (buf_neededlength * sizeof (TCHAR_T)); buf_malloced = NULL; } else #endif { size_t buf_memsize = xtimes (buf_neededlength, sizeof (TCHAR_T)); if (size_overflow_p (buf_memsize)) goto out_of_memory_1; buf = (TCHAR_T *) malloc (buf_memsize); if (buf == NULL) goto out_of_memory_1; buf_malloced = buf; } if (resultbuf != NULL) { result = resultbuf; allocated = *lengthp; } else { result = NULL; allocated = 0; } length = 0; /* Invariants: result is either == resultbuf or == NULL or malloc-allocated. If length > 0, then result != NULL. */ /* Ensures that allocated >= needed. Aborts through a jump to out_of_memory if needed is SIZE_MAX or otherwise too big. */ #define ENSURE_ALLOCATION_ELSE(needed, oom_statement) \ if ((needed) > allocated) \ { \ size_t memory_size; \ DCHAR_T *memory; \ \ allocated = (allocated > 0 ? xtimes (allocated, 2) : 12); \ if ((needed) > allocated) \ allocated = (needed); \ memory_size = xtimes (allocated, sizeof (DCHAR_T)); \ if (size_overflow_p (memory_size)) \ oom_statement \ if (result == resultbuf || result == NULL) \ memory = (DCHAR_T *) malloc (memory_size); \ else \ memory = (DCHAR_T *) realloc (result, memory_size); \ if (memory == NULL) \ oom_statement \ if (result == resultbuf && length > 0) \ DCHAR_CPY (memory, result, length); \ result = memory; \ } #define ENSURE_ALLOCATION(needed) \ ENSURE_ALLOCATION_ELSE((needed), goto out_of_memory; ) for (cp = format, i = 0, dp = &d.dir[0]; ; cp = dp->dir_end, i++, dp++) { if (cp != dp->dir_start) { size_t n = dp->dir_start - cp; size_t augmented_length = xsum (length, n); ENSURE_ALLOCATION (augmented_length); /* This copies a piece of FCHAR_T[] into a DCHAR_T[]. Here we need that the format string contains only ASCII characters if FCHAR_T and DCHAR_T are not the same type. */ if (sizeof (FCHAR_T) == sizeof (DCHAR_T)) { DCHAR_CPY (result + length, (const DCHAR_T *) cp, n); length = augmented_length; } else { do result[length++] = *cp++; while (--n > 0); } } if (i == d.count) break; /* Execute a single directive. */ if (dp->conversion == '%') { size_t augmented_length; if (!(dp->arg_index == ARG_NONE)) abort (); augmented_length = xsum (length, 1); ENSURE_ALLOCATION (augmented_length); result[length] = '%'; length = augmented_length; } else { if (!(dp->arg_index != ARG_NONE)) abort (); if (dp->conversion == 'n') { switch (a.arg[dp->arg_index].type) { case TYPE_COUNT_SCHAR_POINTER: *a.arg[dp->arg_index].a.a_count_schar_pointer = length; break; case TYPE_COUNT_SHORT_POINTER: *a.arg[dp->arg_index].a.a_count_short_pointer = length; break; case TYPE_COUNT_INT_POINTER: *a.arg[dp->arg_index].a.a_count_int_pointer = length; break; case TYPE_COUNT_LONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longint_pointer = length; break; case TYPE_COUNT_LONGLONGINT_POINTER: *a.arg[dp->arg_index].a.a_count_longlongint_pointer = length; break; default: abort (); } } #if ENABLE_UNISTDIO /* The unistdio extensions. */ else if (dp->conversion == 'U') { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } switch (type) { case TYPE_U8_STRING: { const uint8_t *arg = a.arg[dp->arg_index].a.a_u8_string; const uint8_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u8_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u8_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT8_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-8 to locale encoding. */ converted = u8_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-8 to UTF-16/UTF-32. */ converted = U8_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } if (converted != result + length) { ENSURE_ALLOCATION_ELSE (xsum (length, converted_len), { free (converted); goto out_of_memory; }); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U16_STRING: { const uint16_t *arg = a.arg[dp->arg_index].a.a_u16_string; const uint16_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u16_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u16_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT16_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-16 to locale encoding. */ converted = u16_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-16 to UTF-8/UTF-32. */ converted = U16_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } if (converted != result + length) { ENSURE_ALLOCATION_ELSE (xsum (length, converted_len), { free (converted); goto out_of_memory; }); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; case TYPE_U32_STRING: { const uint32_t *arg = a.arg[dp->arg_index].a.a_u32_string; const uint32_t *arg_end; size_t characters; if (has_precision) { /* Use only PRECISION characters, from the left. */ arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of characters. */ arg_end = arg; characters = 0; for (;;) { int count = u32_strmblen (arg_end); if (count == 0) break; if (count < 0) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + u32_strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_UINT32_T { size_t n = arg_end - arg; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_CPY (result + length, arg, n); length += n; } # else { /* Convert. */ DCHAR_T *converted = result + length; size_t converted_len = allocated - length; # if DCHAR_IS_TCHAR /* Convert from UTF-32 to locale encoding. */ converted = u32_conv_to_encoding (locale_charset (), iconveh_question_mark, arg, arg_end - arg, NULL, converted, &converted_len); # else /* Convert from UTF-32 to UTF-8/UTF-16. */ converted = U32_TO_DCHAR (arg, arg_end - arg, converted, &converted_len); # endif if (converted == NULL) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } if (converted != result + length) { ENSURE_ALLOCATION_ELSE (xsum (length, converted_len), { free (converted); goto out_of_memory; }); DCHAR_CPY (result + length, converted, converted_len); free (converted); } length += converted_len; } # endif if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } break; default: abort (); } } #endif #if (!USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || (NEED_PRINTF_DIRECTIVE_LS && !defined IN_LIBINTL) || ENABLE_WCHAR_FALLBACK) && HAVE_WCHAR_T else if (dp->conversion == 's' # if WIDE_CHAR_VERSION && a.arg[dp->arg_index].type != TYPE_WIDE_STRING # else && a.arg[dp->arg_index].type == TYPE_WIDE_STRING # endif ) { /* The normal handling of the 's' directive below requires allocating a temporary buffer. The determination of its length (tmp_length), in the case when a precision is specified, below requires a conversion between a char[] string and a wchar_t[] wide string. It could be done, but we have no guarantee that the implementation of sprintf will use the exactly same algorithm. Without this guarantee, it is possible to have buffer overrun bugs. In order to avoid such bugs, we implement the entire processing of the 's' directive ourselves. */ int flags = dp->flags; int has_width; size_t width; int has_precision; size_t precision; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } # if WIDE_CHAR_VERSION /* %s in vasnwprintf. See the specification of fwprintf. */ { const char *arg = a.arg[dp->arg_index].a.a_string; const char *arg_end; size_t characters; if (has_precision) { /* Use only as many bytes as needed to produce PRECISION wide characters, from the left. */ # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (; precision > 0; precision--) { int count; # if HAVE_MBRTOWC count = mbrlen (arg_end, MB_CUR_MAX, &state); # else count = mblen (arg_end, MB_CUR_MAX); # endif if (count == 0) /* Found the terminating NUL. */ break; if (count < 0) { /* Invalid or incomplete multibyte character. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else if (has_width) { /* Use the entire string, and count the number of wide characters. */ # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (;;) { int count; # if HAVE_MBRTOWC count = mbrlen (arg_end, MB_CUR_MAX, &state); # else count = mblen (arg_end, MB_CUR_MAX); # endif if (count == 0) /* Found the terminating NUL. */ break; if (count < 0) { /* Invalid or incomplete multibyte character. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end += count; characters++; } } else { /* Use the entire string. */ arg_end = arg + strlen (arg); /* The number of characters doesn't matter. */ characters = 0; } if (characters < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } if (has_precision || has_width) { /* We know the number of wide characters in advance. */ size_t remaining; # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; remaining--) { wchar_t wc; int count; # if HAVE_MBRTOWC count = mbrtowc (&wc, arg, arg_end - arg, &state); # else count = mbtowc (&wc, arg, arg_end - arg); # endif if (count <= 0) /* mbrtowc not consistent with mbrlen, or mbtowc not consistent with mblen. */ abort (); result[length++] = wc; arg += count; } if (!(arg == arg_end)) abort (); } else { # if HAVE_MBRTOWC mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif while (arg < arg_end) { wchar_t wc; int count; # if HAVE_MBRTOWC count = mbrtowc (&wc, arg, arg_end - arg, &state); # else count = mbtowc (&wc, arg, arg_end - arg); # endif if (count <= 0) /* mbrtowc not consistent with mbrlen, or mbtowc not consistent with mblen. */ abort (); ENSURE_ALLOCATION (xsum (length, 1)); result[length++] = wc; arg += count; } } if (characters < width && (dp->flags & FLAG_LEFT)) { size_t n = width - characters; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # else /* %ls in vasnprintf. See the specification of fprintf. */ { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; const wchar_t *arg_end; size_t characters; # if !DCHAR_IS_TCHAR /* This code assumes that TCHAR_T is 'char'. */ verify (sizeof (TCHAR_T) == 1); TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; # endif size_t w; if (has_precision) { /* Use only as many wide characters as needed to produce at most PRECISION bytes, from the left. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; while (precision > 0) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg_end == 0) /* Found the terminating null wide character. */ break; count = local_wcrtomb (cbuf, *arg_end, &state); if (count < 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } if (precision < (unsigned int) count) break; arg_end++; characters += count; precision -= count; } } # if DCHAR_IS_TCHAR else if (has_width) # else else # endif { /* Use the entire string, and count the number of bytes. */ # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif arg_end = arg; characters = 0; for (;;) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg_end == 0) /* Found the terminating null wide character. */ break; count = local_wcrtomb (cbuf, *arg_end, &state); if (count < 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } arg_end++; characters += count; } } # if DCHAR_IS_TCHAR else { /* Use the entire string. */ arg_end = arg + local_wcslen (arg); /* The number of bytes doesn't matter. */ characters = 0; } # endif # if !DCHAR_IS_TCHAR /* Convert the string into a piece of temporary memory. */ tmpsrc = (TCHAR_T *) malloc (characters * sizeof (TCHAR_T)); if (tmpsrc == NULL) goto out_of_memory; { TCHAR_T *tmpptr = tmpsrc; size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif for (remaining = characters; remaining > 0; ) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); count = local_wcrtomb (cbuf, *arg, &state); if (count <= 0) /* Inconsistency. */ abort (); memcpy (tmpptr, cbuf, count); tmpptr += count; arg++; remaining -= count; } if (!(arg == arg_end)) abort (); } /* Convert from TCHAR_T[] to DCHAR_T[]. */ tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, characters, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { free (tmpsrc); if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } free (tmpsrc); # endif if (has_width) { # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, characters); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = characters; # endif } else /* w doesn't matter. */ w = 0; if (w < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_TCHAR if (has_precision || has_width) { /* We know the number of bytes in advance. */ size_t remaining; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif ENSURE_ALLOCATION (xsum (length, characters)); for (remaining = characters; remaining > 0; ) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); count = local_wcrtomb (cbuf, *arg, &state); if (count <= 0) /* Inconsistency. */ abort (); memcpy (result + length, cbuf, count); length += count; arg++; remaining -= count; } if (!(arg == arg_end)) abort (); } else { # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif while (arg < arg_end) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; if (*arg == 0) abort (); count = local_wcrtomb (cbuf, *arg, &state); if (count <= 0) { /* Cannot convert. */ if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EILSEQ; return NULL; } ENSURE_ALLOCATION (xsum (length, count)); memcpy (result + length, cbuf, count); length += count; arg++; } } # else ENSURE_ALLOCATION_ELSE (xsum (length, tmpdst_len), { free (tmpdst); goto out_of_memory; }); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); length += tmpdst_len; # endif if (w < width && (dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } # endif } #endif #if ENABLE_WCHAR_FALLBACK && HAVE_WINT_T && !WIDE_CHAR_VERSION else if (dp->conversion == 'c' && a.arg[dp->arg_index].type == TYPE_WIDE_CHAR) { /* Implement the 'lc' directive ourselves, in order to provide the fallback that avoids EILSEQ. */ int flags = dp->flags; int has_width; size_t width; has_width = 0; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } has_width = 1; } /* %lc in vasnprintf. See the specification of fprintf. */ { wchar_t arg = (wchar_t) a.arg[dp->arg_index].a.a_wide_char; size_t characters; # if !DCHAR_IS_TCHAR /* This code assumes that TCHAR_T is 'char'. */ verify (sizeof (TCHAR_T) == 1); TCHAR_T tmpsrc[64]; /* Assume MB_CUR_MAX <= 64. */ DCHAR_T *tmpdst; size_t tmpdst_len; # endif size_t w; # if DCHAR_IS_TCHAR if (has_width) # endif { /* Count the number of bytes. */ characters = 0; if (arg != 0) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif count = local_wcrtomb (cbuf, arg, &state); if (count < 0) /* Inconsistency. */ abort (); characters = count; } } # if DCHAR_IS_TCHAR else { /* The number of bytes doesn't matter. */ characters = 0; } # endif # if !DCHAR_IS_TCHAR /* Convert the string into a piece of temporary memory. */ if (characters > 0) /* implies arg != 0 */ { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif count = local_wcrtomb (cbuf, arg, &state); if (count <= 0) /* Inconsistency. */ abort (); memcpy (tmpsrc, cbuf, count); } /* Convert from TCHAR_T[] to DCHAR_T[]. */ tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, characters, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } # endif if (has_width) { # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, characters); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = characters; # endif } else /* w doesn't matter. */ w = 0; if (w < width && !(dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } # if DCHAR_IS_TCHAR if (has_width) { /* We know the number of bytes in advance. */ ENSURE_ALLOCATION (xsum (length, characters)); if (characters > 0) /* implies arg != 0 */ { int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif count = local_wcrtomb (result + length, arg, &state); if (count <= 0) /* Inconsistency. */ abort (); length += count; } } else { if (arg != 0) { char cbuf[64]; /* Assume MB_CUR_MAX <= 64. */ int count; # if HAVE_WCRTOMB && !defined GNULIB_defined_mbstate_t mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); # endif count = local_wcrtomb (cbuf, arg, &state); if (count <= 0) /* Inconsistency. */ abort (); ENSURE_ALLOCATION (xsum (length, count)); memcpy (result + length, cbuf, count); length += count; } } # else ENSURE_ALLOCATION_ELSE (xsum (length, tmpdst_len), { free (tmpdst); goto out_of_memory; }); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); length += tmpdst_len; # endif if (w < width && (dp->flags & FLAG_LEFT)) { size_t n = width - w; ENSURE_ALLOCATION (xsum (length, n)); DCHAR_SET (result + length, ' ', n); length += n; } } } #endif #if (NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE) && !defined IN_LIBINTL else if ((dp->conversion == 'a' || dp->conversion == 'A') # if !(NEED_PRINTF_DIRECTIVE_A || (NEED_PRINTF_LONG_DOUBLE && NEED_PRINTF_DOUBLE)) && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # endif ) # endif ) { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; size_t width; int has_precision; size_t precision; size_t tmp_length; size_t count; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* Allocate a temporary buffer of sufficient size. */ if (type == TYPE_LONGDOUBLE) tmp_length = (unsigned int) ((LDBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ else tmp_length = (unsigned int) ((DBL_DIG + 1) * 0.831 /* decimal -> hexadecimal */ ) + 1; /* turn floor into ceil */ if (tmp_length < precision) tmp_length = precision; /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; if (type == TYPE_LONGDOUBLE) { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_LONG_DOUBLE long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; long double mantissa; if (arg > 0.0L) mantissa = printf_frexpl (arg, &exponent); else { exponent = 0; mantissa = 0.0L; } if (has_precision && precision < (unsigned int) ((LDBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ long double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5L : tail > 0.5L) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0L; } if (tail != 0.0L) for (q = precision; q > 0; q--) tail *= 0.0625L; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0L || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0L) { mantissa *= 16.0L; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } END_LONG_DOUBLE_ROUNDING (); } # else abort (); # endif } else { # if NEED_PRINTF_DIRECTIVE_A || NEED_PRINTF_DOUBLE double arg = a.arg[dp->arg_index].a.a_double; if (isnand (arg)) { if (dp->conversion == 'A') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion == 'A') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { int exponent; double mantissa; if (arg > 0.0) mantissa = printf_frexp (arg, &exponent); else { exponent = 0; mantissa = 0.0; } if (has_precision && precision < (unsigned int) ((DBL_DIG + 1) * 0.831) + 1) { /* Round the mantissa. */ double tail = mantissa; size_t q; for (q = precision; ; q--) { int digit = (int) tail; tail -= digit; if (q == 0) { if (digit & 1 ? tail >= 0.5 : tail > 0.5) tail = 1 - tail; else tail = - tail; break; } tail *= 16.0; } if (tail != 0.0) for (q = precision; q > 0; q--) tail *= 0.0625; mantissa += tail; } *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; { int digit; digit = (int) mantissa; mantissa -= digit; *p++ = '0' + digit; if ((flags & FLAG_ALT) || mantissa > 0.0 || precision > 0) { *p++ = decimal_point_char (); /* This loop terminates because we assume that FLT_RADIX is a power of 2. */ while (mantissa > 0.0) { mantissa *= 16.0; digit = (int) mantissa; mantissa -= digit; *p++ = digit + (digit < 10 ? '0' : dp->conversion - 10); if (precision > 0) precision--; } while (precision > 0) { *p++ = '0'; precision--; } } } *p++ = dp->conversion - 'A' + 'P'; # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } } # else abort (); # endif } /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ count = p - tmp; if (count < width) { size_t pad = width - count; DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif #if (NEED_PRINTF_INFINITE_DOUBLE || NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE || NEED_PRINTF_LONG_DOUBLE) && !defined IN_LIBINTL else if ((dp->conversion == 'f' || dp->conversion == 'F' || dp->conversion == 'e' || dp->conversion == 'E' || dp->conversion == 'g' || dp->conversion == 'G' || dp->conversion == 'a' || dp->conversion == 'A') && (0 # if NEED_PRINTF_DOUBLE || a.arg[dp->arg_index].type == TYPE_DOUBLE # elif NEED_PRINTF_INFINITE_DOUBLE || (a.arg[dp->arg_index].type == TYPE_DOUBLE /* The systems (mingw) which produce wrong output for Inf, -Inf, and NaN also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zero (a.arg[dp->arg_index].a.a_double)) # endif # if NEED_PRINTF_LONG_DOUBLE || a.arg[dp->arg_index].type == TYPE_LONGDOUBLE # elif NEED_PRINTF_INFINITE_LONG_DOUBLE || (a.arg[dp->arg_index].type == TYPE_LONGDOUBLE /* Some systems produce wrong output for Inf, -Inf, and NaN. Some systems in this category (IRIX 5.3) also do so for -0.0. Therefore we treat this case here as well. */ && is_infinite_or_zerol (a.arg[dp->arg_index].a.a_longdouble)) # endif )) { # if (NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE) && (NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE) arg_type type = a.arg[dp->arg_index].type; # endif int flags = dp->flags; size_t width; size_t count; int has_precision; size_t precision; size_t tmp_length; DCHAR_T tmpbuf[700]; DCHAR_T *tmp; DCHAR_T *pad_ptr; DCHAR_T *p; width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } } has_precision = 0; precision = 0; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } /* POSIX specifies the default precision to be 6 for %f, %F, %e, %E, but not for %g, %G. Implementations appear to use the same default precision also for %g, %G. But for %a, %A, the default precision is 0. */ if (!has_precision) if (!(dp->conversion == 'a' || dp->conversion == 'A')) precision = 6; /* Allocate a temporary buffer of sufficient size. */ # if NEED_PRINTF_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : DBL_DIG + 1); # elif NEED_PRINTF_INFINITE_DOUBLE && NEED_PRINTF_LONG_DOUBLE tmp_length = (type == TYPE_LONGDOUBLE ? LDBL_DIG + 1 : 0); # elif NEED_PRINTF_LONG_DOUBLE tmp_length = LDBL_DIG + 1; # elif NEED_PRINTF_DOUBLE tmp_length = DBL_DIG + 1; # else tmp_length = 0; # endif if (tmp_length < precision) tmp_length = precision; # if NEED_PRINTF_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (!(isnanl (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10l (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif # if NEED_PRINTF_DOUBLE # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE if (type == TYPE_DOUBLE) # endif if (dp->conversion == 'f' || dp->conversion == 'F') { double arg = a.arg[dp->arg_index].a.a_double; if (!(isnand (arg) || arg + arg == arg)) { /* arg is finite and nonzero. */ int exponent = floorlog10 (arg < 0 ? -arg : arg); if (exponent >= 0 && tmp_length < exponent + precision) tmp_length = exponent + precision; } } # endif /* Account for sign, decimal point etc. */ tmp_length = xsum (tmp_length, 12); if (tmp_length < width) tmp_length = width; tmp_length = xsum (tmp_length, 1); /* account for trailing NUL */ if (tmp_length <= sizeof (tmpbuf) / sizeof (DCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (DCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (DCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } pad_ptr = NULL; p = tmp; # if NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_INFINITE_LONG_DOUBLE # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE if (type == TYPE_LONGDOUBLE) # endif { long double arg = a.arg[dp->arg_index].a.a_longdouble; if (isnanl (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; DECL_LONG_DOUBLE_ROUNDING BEGIN_LONG_DOUBLE_ROUNDING (); if (signbit (arg)) /* arg < 0.0L or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0L && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_LONG_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_long_double (arg, precision); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0L) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0L. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)precision - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ if (is_borderline (digits, precision)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_long_double (arg, (int)precision - exponent + 1); if (digits2 == NULL) { free (digits); END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } if (strlen (digits2) == precision + 1) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0L) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0L. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10l (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) { END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ if (is_borderline (digits, precision - 1)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_long_double (arg, (int)(precision - 1) - exponent + 1); if (digits2 == NULL) { free (digits); END_LONG_DOUBLE_ROUNDING (); goto out_of_memory; } if (strlen (digits2) == precision) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t ecount = exponent + 1; /* Note: count <= precision = ndigits. */ for (; ecount > 0; ecount--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t ecount = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; ecount > 0; ecount--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = { '%', '+', '.', '2', 'd', '\0' }; SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, "%+.2d", exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, "%+.2d", exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0L)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else if (dp->conversion == 'a' || dp->conversion == 'A') { *p++ = '0'; *p++ = dp->conversion - 'A' + 'X'; pad_ptr = p; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion - 'A' + 'P'; *p++ = '+'; *p++ = '0'; } else abort (); # endif } END_LONG_DOUBLE_ROUNDING (); } } # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE else # endif # endif # if NEED_PRINTF_DOUBLE || NEED_PRINTF_INFINITE_DOUBLE { double arg = a.arg[dp->arg_index].a.a_double; if (isnand (arg)) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'N'; *p++ = 'A'; *p++ = 'N'; } else { *p++ = 'n'; *p++ = 'a'; *p++ = 'n'; } } else { int sign = 0; if (signbit (arg)) /* arg < 0.0 or negative zero */ { sign = -1; arg = -arg; } if (sign < 0) *p++ = '-'; else if (flags & FLAG_SHOWSIGN) *p++ = '+'; else if (flags & FLAG_SPACE) *p++ = ' '; if (arg > 0.0 && arg + arg == arg) { if (dp->conversion >= 'A' && dp->conversion <= 'Z') { *p++ = 'I'; *p++ = 'N'; *p++ = 'F'; } else { *p++ = 'i'; *p++ = 'n'; *p++ = 'f'; } } else { # if NEED_PRINTF_DOUBLE pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { char *digits; size_t ndigits; digits = scale10_round_decimal_double (arg, precision); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits > precision) do { --ndigits; *p++ = digits[ndigits]; } while (ndigits > precision); else *p++ = '0'; /* Here ndigits <= precision. */ if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > ndigits; precision--) *p++ = '0'; while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } else if (dp->conversion == 'e' || dp->conversion == 'E') { int exponent; if (arg == 0.0) { exponent = 0; *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else { /* arg > 0.0. */ int adjusted; char *digits; size_t ndigits; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)precision - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision + 1) break; if (ndigits < precision || ndigits > precision + 2) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits == precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision+1. */ if (is_borderline (digits, precision)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_double (arg, (int)precision - exponent + 1); if (digits2 == NULL) { free (digits); goto out_of_memory; } if (strlen (digits2) == precision + 1) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision+1. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); while (ndigits > 0) { --ndigits; *p++ = digits[ndigits]; } } free (digits); } *p++ = dp->conversion; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } else if (dp->conversion == 'g' || dp->conversion == 'G') { if (precision == 0) precision = 1; /* precision >= 1. */ if (arg == 0.0) /* The exponent is 0, >= -4, < precision. Use fixed-point notation. */ { size_t ndigits = precision; /* Number of trailing zeroes that have to be dropped. */ size_t nzeroes = (flags & FLAG_ALT ? 0 : precision - 1); --ndigits; *p++ = '0'; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = '0'; } } } else { /* arg > 0.0. */ int exponent; int adjusted; char *digits; size_t ndigits; size_t nzeroes; exponent = floorlog10 (arg); adjusted = 0; for (;;) { digits = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent); if (digits == NULL) goto out_of_memory; ndigits = strlen (digits); if (ndigits == precision) break; if (ndigits < precision - 1 || ndigits > precision + 1) /* The exponent was not guessed precisely enough. */ abort (); if (adjusted) /* None of two values of exponent is the right one. Prevent an endless loop. */ abort (); free (digits); if (ndigits < precision) exponent -= 1; else exponent += 1; adjusted = 1; } /* Here ndigits = precision. */ if (is_borderline (digits, precision - 1)) { /* Maybe the exponent guess was too high and a smaller exponent can be reached by turning a 10...0 into 9...9x. */ char *digits2 = scale10_round_decimal_double (arg, (int)(precision - 1) - exponent + 1); if (digits2 == NULL) { free (digits); goto out_of_memory; } if (strlen (digits2) == precision) { free (digits); digits = digits2; exponent -= 1; } else free (digits2); } /* Here ndigits = precision. */ /* Determine the number of trailing zeroes that have to be dropped. */ nzeroes = 0; if ((flags & FLAG_ALT) == 0) while (nzeroes < ndigits && digits[nzeroes] == '0') nzeroes++; /* The exponent is now determined. */ if (exponent >= -4 && exponent < (long)precision) { /* Fixed-point notation: max(exponent,0)+1 digits, then the decimal point, then the remaining digits without trailing zeroes. */ if (exponent >= 0) { size_t ecount = exponent + 1; /* Note: ecount <= precision = ndigits. */ for (; ecount > 0; ecount--) *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { size_t ecount = -exponent - 1; *p++ = '0'; *p++ = decimal_point_char (); for (; ecount > 0; ecount--) *p++ = '0'; while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } } else { /* Exponential notation. */ *p++ = digits[--ndigits]; if ((flags & FLAG_ALT) || ndigits > nzeroes) { *p++ = decimal_point_char (); while (ndigits > nzeroes) { --ndigits; *p++ = digits[ndigits]; } } *p++ = dp->conversion - 'G' + 'E'; /* 'e' or 'E' */ # if WIDE_CHAR_VERSION { static const wchar_t decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ { '%', '+', '.', '3', 'd', '\0' }; # else { '%', '+', '.', '2', 'd', '\0' }; # endif SNPRINTF (p, 6 + 1, decimal_format, exponent); } while (*p != '\0') p++; # else { static const char decimal_format[] = /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ "%+.3d"; # else "%+.2d"; # endif if (sizeof (DCHAR_T) == 1) { sprintf ((char *) p, decimal_format, exponent); while (*p != '\0') p++; } else { char expbuf[6 + 1]; const char *ep; sprintf (expbuf, decimal_format, exponent); for (ep = expbuf; (*p = *ep) != '\0'; ep++) p++; } } # endif } free (digits); } } else abort (); # else /* arg is finite. */ if (!(arg == 0.0)) abort (); pad_ptr = p; if (dp->conversion == 'f' || dp->conversion == 'F') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } } else if (dp->conversion == 'e' || dp->conversion == 'E') { *p++ = '0'; if ((flags & FLAG_ALT) || precision > 0) { *p++ = decimal_point_char (); for (; precision > 0; precision--) *p++ = '0'; } *p++ = dp->conversion; /* 'e' or 'E' */ *p++ = '+'; /* Produce the same number of exponent digits as the native printf implementation. */ # if defined _WIN32 && ! defined __CYGWIN__ *p++ = '0'; # endif *p++ = '0'; *p++ = '0'; } else if (dp->conversion == 'g' || dp->conversion == 'G') { *p++ = '0'; if (flags & FLAG_ALT) { size_t ndigits = (precision > 0 ? precision - 1 : 0); *p++ = decimal_point_char (); for (; ndigits > 0; --ndigits) *p++ = '0'; } } else abort (); # endif } } } # endif /* The generated string now extends from tmp to p, with the zero padding insertion point being at pad_ptr. */ count = p - tmp; if (count < width) { size_t pad = width - count; DCHAR_T *end = p + pad; if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > tmp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } p = end; } count = p - tmp; if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); /* Make room for the result. */ if (count >= allocated - length) { size_t n = xsum (length, count); ENSURE_ALLOCATION (n); } /* Append the result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); if (tmp != tmpbuf) free (tmp); length += count; } #endif else { arg_type type = a.arg[dp->arg_index].type; int flags = dp->flags; #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int has_width; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION size_t width; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION int has_precision; size_t precision; #endif #if NEED_PRINTF_UNBOUNDED_PRECISION int prec_ourselves; #else # define prec_ourselves 0 #endif #if NEED_PRINTF_FLAG_LEFTADJUST # define pad_ourselves 1 #elif !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION int pad_ourselves; #else # define pad_ourselves 0 #endif TCHAR_T *fbp; unsigned int prefix_count; int prefixes[2] IF_LINT (= { 0 }); int orig_errno; #if !USE_SNPRINTF size_t tmp_length; TCHAR_T tmpbuf[700]; TCHAR_T *tmp; #endif #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 0; #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION width = 0; if (dp->width_start != dp->width_end) { if (dp->width_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->width_arg_index].a.a_int; width = arg; if (arg < 0) { /* "A negative field width is taken as a '-' flag followed by a positive field width." */ flags |= FLAG_LEFT; width = -width; } } else { const FCHAR_T *digitp = dp->width_start; do width = xsum (xtimes (width, 10), *digitp++ - '0'); while (digitp != dp->width_end); } #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION has_width = 1; #endif } #endif #if !USE_SNPRINTF || !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF || NEED_PRINTF_UNBOUNDED_PRECISION has_precision = 0; precision = 6; if (dp->precision_start != dp->precision_end) { if (dp->precision_arg_index != ARG_NONE) { int arg; if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); arg = a.arg[dp->precision_arg_index].a.a_int; /* "A negative precision is taken as if the precision were omitted." */ if (arg >= 0) { precision = arg; has_precision = 1; } } else { const FCHAR_T *digitp = dp->precision_start + 1; precision = 0; while (digitp != dp->precision_end) precision = xsum (xtimes (precision, 10), *digitp++ - '0'); has_precision = 1; } } #endif /* Decide whether to handle the precision ourselves. */ #if NEED_PRINTF_UNBOUNDED_PRECISION switch (dp->conversion) { case 'd': case 'i': case 'u': case 'o': case 'x': case 'X': case 'p': prec_ourselves = has_precision && (precision > 0); break; default: prec_ourselves = 0; break; } #endif /* Decide whether to perform the padding ourselves. */ #if !NEED_PRINTF_FLAG_LEFTADJUST && (!DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION) switch (dp->conversion) { # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO /* If we need conversion from TCHAR_T[] to DCHAR_T[], we need to perform the padding after this conversion. Functions with unistdio extensions perform the padding based on character count rather than element count. */ case 'c': case 's': # endif # if NEED_PRINTF_FLAG_ZERO case 'f': case 'F': case 'e': case 'E': case 'g': case 'G': case 'a': case 'A': # endif pad_ourselves = 1; break; default: pad_ourselves = prec_ourselves; break; } #endif #if !USE_SNPRINTF /* Allocate a temporary buffer of sufficient size for calling sprintf. */ tmp_length = MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, flags, width, has_precision, precision, pad_ourselves); if (tmp_length <= sizeof (tmpbuf) / sizeof (TCHAR_T)) tmp = tmpbuf; else { size_t tmp_memsize = xtimes (tmp_length, sizeof (TCHAR_T)); if (size_overflow_p (tmp_memsize)) /* Overflow, would lead to out of memory. */ goto out_of_memory; tmp = (TCHAR_T *) malloc (tmp_memsize); if (tmp == NULL) /* Out of memory. */ goto out_of_memory; } #endif /* Construct the format string for calling snprintf or sprintf. */ fbp = buf; *fbp++ = '%'; #if NEED_PRINTF_FLAG_GROUPING /* The underlying implementation doesn't support the ' flag. Produce no grouping characters in this case; this is acceptable because the grouping is locale dependent. */ #else if (flags & FLAG_GROUP) *fbp++ = '\''; #endif if (flags & FLAG_LEFT) *fbp++ = '-'; if (flags & FLAG_SHOWSIGN) *fbp++ = '+'; if (flags & FLAG_SPACE) *fbp++ = ' '; if (flags & FLAG_ALT) *fbp++ = '#'; #if __GLIBC__ >= 2 && !defined __UCLIBC__ if (flags & FLAG_LOCALIZED) *fbp++ = 'I'; #endif if (!pad_ourselves) { if (flags & FLAG_ZERO) *fbp++ = '0'; if (dp->width_start != dp->width_end) { size_t n = dp->width_end - dp->width_start; /* The width specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->width_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->width_start; do *fbp++ = *mp++; while (--n > 0); } } } if (!prec_ourselves) { if (dp->precision_start != dp->precision_end) { size_t n = dp->precision_end - dp->precision_start; /* The precision specification is known to consist only of standard ASCII characters. */ if (sizeof (FCHAR_T) == sizeof (TCHAR_T)) { memcpy (fbp, dp->precision_start, n * sizeof (TCHAR_T)); fbp += n; } else { const FCHAR_T *mp = dp->precision_start; do *fbp++ = *mp++; while (--n > 0); } } } switch (type) { case TYPE_LONGLONGINT: case TYPE_ULONGLONGINT: #if defined _WIN32 && ! defined __CYGWIN__ *fbp++ = 'I'; *fbp++ = '6'; *fbp++ = '4'; break; #else *fbp++ = 'l'; #endif FALLTHROUGH; case TYPE_LONGINT: case TYPE_ULONGINT: #if HAVE_WINT_T case TYPE_WIDE_CHAR: #endif #if HAVE_WCHAR_T case TYPE_WIDE_STRING: #endif *fbp++ = 'l'; break; case TYPE_LONGDOUBLE: *fbp++ = 'L'; break; default: break; } #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') *fbp = 'f'; else #endif *fbp = dp->conversion; #if USE_SNPRINTF # if ((HAVE_SNPRINTF_RETVAL_C99 && HAVE_SNPRINTF_TRUNCATION_C99) \ || ((__GLIBC__ > 2 || (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 3)) \ && !defined __UCLIBC__) \ || (defined __APPLE__ && defined __MACH__) \ || defined __ANDROID__ \ || (defined _WIN32 && ! defined __CYGWIN__)) /* On systems where we know that snprintf's return value conforms to ISO C 99 (HAVE_SNPRINTF_RETVAL_C99) and that snprintf always produces NUL-terminated strings (HAVE_SNPRINTF_TRUNCATION_C99), it is possible to avoid using %n. And it is desirable to do so, because more and more platforms no longer support %n, for "security reasons". In particular, the following platforms: - On glibc2 systems from 2004-10-18 or newer, the use of %n in format strings in writable memory may crash the program (if compiled with _FORTIFY_SOURCE=2). - On Mac OS X 10.13 or newer, the use of %n in format strings in writable memory by default crashes the program. - On Android, starting on 2018-03-07, the use of %n in format strings produces a fatal error (see <https://android.googlesource.com/platform/bionic/+/41398d03b7e8e0dfb951660ae713e682e9fc0336>). On these platforms, HAVE_SNPRINTF_RETVAL_C99 and HAVE_SNPRINTF_TRUNCATION_C99 are 1. We have listed them explicitly in the condition above, in case of cross- compilation (just to be sure). */ /* On native Windows systems (such as mingw), we can avoid using %n because: - Although the gl_SNPRINTF_TRUNCATION_C99 test fails, snprintf does not write more than the specified number of bytes. (snprintf (buf, 3, "%d %d", 4567, 89) writes '4', '5', '6' into buf, not '4', '5', '\0'.) - Although the gl_SNPRINTF_RETVAL_C99 test fails, snprintf allows us to recognize the case of an insufficient buffer size: it returns -1 in this case. On native Windows systems (such as mingw) where the OS is Windows Vista, the use of %n in format strings by default crashes the program. See <https://gcc.gnu.org/ml/gcc/2007-06/msg00122.html> and <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/set-printf-count-output> So we should avoid %n in this situation. */ fbp[1] = '\0'; # else /* AIX <= 5.1, HP-UX, IRIX, OSF/1, Solaris <= 9, BeOS */ fbp[1] = '%'; fbp[2] = 'n'; fbp[3] = '\0'; # endif #else fbp[1] = '\0'; #endif /* Construct the arguments for calling snprintf or sprintf. */ prefix_count = 0; if (!pad_ourselves && dp->width_arg_index != ARG_NONE) { if (!(a.arg[dp->width_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->width_arg_index].a.a_int; } if (!prec_ourselves && dp->precision_arg_index != ARG_NONE) { if (!(a.arg[dp->precision_arg_index].type == TYPE_INT)) abort (); prefixes[prefix_count++] = a.arg[dp->precision_arg_index].a.a_int; } #if USE_SNPRINTF /* The SNPRINTF result is appended after result[0..length]. The latter is an array of DCHAR_T; SNPRINTF appends an array of TCHAR_T to it. This is possible because sizeof (TCHAR_T) divides sizeof (DCHAR_T) and alignof (TCHAR_T) <= alignof (DCHAR_T). */ # define TCHARS_PER_DCHAR (sizeof (DCHAR_T) / sizeof (TCHAR_T)) /* Ensure that maxlen below will be >= 2. Needed on BeOS, where an snprintf() with maxlen==1 acts like sprintf(). */ ENSURE_ALLOCATION (xsum (length, (2 + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR)); /* Prepare checking whether snprintf returns the count via %n. */ *(TCHAR_T *) (result + length) = '\0'; #endif orig_errno = errno; for (;;) { int count = -1; #if USE_SNPRINTF int retcount = 0; size_t maxlen = allocated - length; /* SNPRINTF can fail if its second argument is > INT_MAX. */ if (maxlen > INT_MAX / TCHARS_PER_DCHAR) maxlen = INT_MAX / TCHARS_PER_DCHAR; maxlen = maxlen * TCHARS_PER_DCHAR; # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ arg, &count); \ break; \ case 1: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], arg, &count); \ break; \ case 2: \ retcount = SNPRINTF ((TCHAR_T *) (result + length), \ maxlen, buf, \ prefixes[0], prefixes[1], arg, \ &count); \ break; \ default: \ abort (); \ } #else # define SNPRINTF_BUF(arg) \ switch (prefix_count) \ { \ case 0: \ count = sprintf (tmp, buf, arg); \ break; \ case 1: \ count = sprintf (tmp, buf, prefixes[0], arg); \ break; \ case 2: \ count = sprintf (tmp, buf, prefixes[0], prefixes[1],\ arg); \ break; \ default: \ abort (); \ } #endif errno = 0; switch (type) { case TYPE_SCHAR: { int arg = a.arg[dp->arg_index].a.a_schar; SNPRINTF_BUF (arg); } break; case TYPE_UCHAR: { unsigned int arg = a.arg[dp->arg_index].a.a_uchar; SNPRINTF_BUF (arg); } break; case TYPE_SHORT: { int arg = a.arg[dp->arg_index].a.a_short; SNPRINTF_BUF (arg); } break; case TYPE_USHORT: { unsigned int arg = a.arg[dp->arg_index].a.a_ushort; SNPRINTF_BUF (arg); } break; case TYPE_INT: { int arg = a.arg[dp->arg_index].a.a_int; SNPRINTF_BUF (arg); } break; case TYPE_UINT: { unsigned int arg = a.arg[dp->arg_index].a.a_uint; SNPRINTF_BUF (arg); } break; case TYPE_LONGINT: { long int arg = a.arg[dp->arg_index].a.a_longint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGINT: { unsigned long int arg = a.arg[dp->arg_index].a.a_ulongint; SNPRINTF_BUF (arg); } break; case TYPE_LONGLONGINT: { long long int arg = a.arg[dp->arg_index].a.a_longlongint; SNPRINTF_BUF (arg); } break; case TYPE_ULONGLONGINT: { unsigned long long int arg = a.arg[dp->arg_index].a.a_ulonglongint; SNPRINTF_BUF (arg); } break; case TYPE_DOUBLE: { double arg = a.arg[dp->arg_index].a.a_double; SNPRINTF_BUF (arg); } break; case TYPE_LONGDOUBLE: { long double arg = a.arg[dp->arg_index].a.a_longdouble; SNPRINTF_BUF (arg); } break; case TYPE_CHAR: { int arg = a.arg[dp->arg_index].a.a_char; SNPRINTF_BUF (arg); } break; #if HAVE_WINT_T case TYPE_WIDE_CHAR: { wint_t arg = a.arg[dp->arg_index].a.a_wide_char; SNPRINTF_BUF (arg); } break; #endif case TYPE_STRING: { const char *arg = a.arg[dp->arg_index].a.a_string; SNPRINTF_BUF (arg); } break; #if HAVE_WCHAR_T case TYPE_WIDE_STRING: { const wchar_t *arg = a.arg[dp->arg_index].a.a_wide_string; SNPRINTF_BUF (arg); } break; #endif case TYPE_POINTER: { void *arg = a.arg[dp->arg_index].a.a_pointer; SNPRINTF_BUF (arg); } break; default: abort (); } #if USE_SNPRINTF /* Portability: Not all implementations of snprintf() are ISO C 99 compliant. Determine the number of bytes that snprintf() has produced or would have produced. */ if (count >= 0) { /* Verify that snprintf() has NUL-terminated its result. */ if ((unsigned int) count < maxlen && ((TCHAR_T *) (result + length)) [count] != '\0') abort (); /* Portability hack. */ if (retcount > count) count = retcount; } else { /* snprintf() doesn't understand the '%n' directive. */ if (fbp[1] != '\0') { /* Don't use the '%n' directive; instead, look at the snprintf() return value. */ fbp[1] = '\0'; continue; } else { /* Look at the snprintf() return value. */ if (retcount < 0) { # if !HAVE_SNPRINTF_RETVAL_C99 || USE_MSVC__SNPRINTF /* HP-UX 10.20 snprintf() is doubly deficient: It doesn't understand the '%n' directive, *and* it returns -1 (rather than the length that would have been required) when the buffer is too small. But a failure at this point can also come from other reasons than a too small buffer, such as an invalid wide string argument to the %ls directive, or possibly an invalid floating-point argument. */ size_t tmp_length = MAX_ROOM_NEEDED (&a, dp->arg_index, dp->conversion, type, flags, width, has_precision, precision, pad_ourselves); if (maxlen < tmp_length) { /* Make more room. But try to do through this reallocation only once. */ size_t bigger_need = xsum (length, xsum (tmp_length, TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); /* And always grow proportionally. (There may be several arguments, each needing a little more room than the previous one.) */ size_t bigger_need2 = xsum (xtimes (allocated, 2), 12); if (bigger_need < bigger_need2) bigger_need = bigger_need2; ENSURE_ALLOCATION (bigger_need); continue; } # endif } else count = retcount; } } #endif /* Attempt to handle failure. */ if (count < 0) { /* SNPRINTF or sprintf failed. Use the errno that it has set, if any. */ if (errno == 0) { if (dp->conversion == 'c' || dp->conversion == 's') errno = EILSEQ; else errno = EINVAL; } if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } #if USE_SNPRINTF /* Handle overflow of the allocated buffer. If such an overflow occurs, a C99 compliant snprintf() returns a count >= maxlen. However, a non-compliant snprintf() function returns only count = maxlen - 1. To cover both cases, test whether count >= maxlen - 1. */ if ((unsigned int) count + 1 >= maxlen) { /* If maxlen already has attained its allowed maximum, allocating more memory will not increase maxlen. Instead of looping, bail out. */ if (maxlen == INT_MAX / TCHARS_PER_DCHAR) goto overflow; else { /* Need at least (count + 1) * sizeof (TCHAR_T) bytes. (The +1 is for the trailing NUL.) But ask for (count + 2) * sizeof (TCHAR_T) bytes, so that in the next round, we likely get maxlen > (unsigned int) count + 1 and so we don't get here again. And allocate proportionally, to avoid looping eternally if snprintf() reports a too small count. */ size_t n = xmax (xsum (length, ((unsigned int) count + 2 + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); continue; } } #endif #if NEED_PRINTF_UNBOUNDED_PRECISION if (prec_ourselves) { /* Handle the precision. */ TCHAR_T *prec_ptr = # if USE_SNPRINTF (TCHAR_T *) (result + length); # else tmp; # endif size_t prefix_count; size_t move; prefix_count = 0; /* Put the additional zeroes after the sign. */ if (count >= 1 && (*prec_ptr == '-' || *prec_ptr == '+' || *prec_ptr == ' ')) prefix_count = 1; /* Put the additional zeroes after the 0x prefix if (flags & FLAG_ALT) || (dp->conversion == 'p'). */ else if (count >= 2 && prec_ptr[0] == '0' && (prec_ptr[1] == 'x' || prec_ptr[1] == 'X')) prefix_count = 2; move = count - prefix_count; if (precision > move) { /* Insert zeroes. */ size_t insert = precision - move; TCHAR_T *prec_end; # if USE_SNPRINTF size_t n = xsum (length, (count + insert + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR); length += (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; ENSURE_ALLOCATION (n); length -= (count + TCHARS_PER_DCHAR - 1) / TCHARS_PER_DCHAR; prec_ptr = (TCHAR_T *) (result + length); # endif prec_end = prec_ptr + count; prec_ptr += prefix_count; while (prec_end > prec_ptr) { prec_end--; prec_end[insert] = prec_end[0]; } prec_end += insert; do *--prec_end = '0'; while (prec_end > prec_ptr); count += insert; } } #endif #if !USE_SNPRINTF if (count >= tmp_length) /* tmp_length was incorrectly calculated - fix the code above! */ abort (); #endif #if !DCHAR_IS_TCHAR /* Convert from TCHAR_T[] to DCHAR_T[]. */ if (dp->conversion == 'c' || dp->conversion == 's') { /* type = TYPE_CHAR or TYPE_WIDE_CHAR or TYPE_STRING TYPE_WIDE_STRING. The result string is not certainly ASCII. */ const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t tmpdst_len; /* This code assumes that TCHAR_T is 'char'. */ verify (sizeof (TCHAR_T) == 1); # if USE_SNPRINTF tmpsrc = (TCHAR_T *) (result + length); # else tmpsrc = tmp; # endif tmpdst = DCHAR_CONV_FROM_ENCODING (locale_charset (), iconveh_question_mark, tmpsrc, count, NULL, NULL, &tmpdst_len); if (tmpdst == NULL) { if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); return NULL; } ENSURE_ALLOCATION_ELSE (xsum (length, tmpdst_len), { free (tmpdst); goto out_of_memory; }); DCHAR_CPY (result + length, tmpdst, tmpdst_len); free (tmpdst); count = tmpdst_len; } else { /* The result string is ASCII. Simple 1:1 conversion. */ # if USE_SNPRINTF /* If sizeof (DCHAR_T) == sizeof (TCHAR_T), it's a no-op conversion, in-place on the array starting at (result + length). */ if (sizeof (DCHAR_T) != sizeof (TCHAR_T)) # endif { const TCHAR_T *tmpsrc; DCHAR_T *tmpdst; size_t n; # if USE_SNPRINTF if (result == resultbuf) { tmpsrc = (TCHAR_T *) (result + length); /* ENSURE_ALLOCATION will not move tmpsrc (because it's part of resultbuf). */ ENSURE_ALLOCATION (xsum (length, count)); } else { /* ENSURE_ALLOCATION will move the array (because it uses realloc(). */ ENSURE_ALLOCATION (xsum (length, count)); tmpsrc = (TCHAR_T *) (result + length); } # else tmpsrc = tmp; ENSURE_ALLOCATION (xsum (length, count)); # endif tmpdst = result + length; /* Copy backwards, because of overlapping. */ tmpsrc += count; tmpdst += count; for (n = count; n > 0; n--) *--tmpdst = *--tmpsrc; } } #endif #if DCHAR_IS_TCHAR && !USE_SNPRINTF /* Make room for the result. */ if (count > allocated - length) { /* Need at least count elements. But allocate proportionally. */ size_t n = xmax (xsum (length, count), xtimes (allocated, 2)); ENSURE_ALLOCATION (n); } #endif /* Here count <= allocated - length. */ /* Perform padding. */ #if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO || NEED_PRINTF_FLAG_LEFTADJUST || NEED_PRINTF_FLAG_ZERO || NEED_PRINTF_UNBOUNDED_PRECISION if (pad_ourselves && has_width) { size_t w; # if ENABLE_UNISTDIO /* Outside POSIX, it's preferable to compare the width against the number of _characters_ of the converted value. */ w = DCHAR_MBSNLEN (result + length, count); # else /* The width is compared against the number of _bytes_ of the converted value, says POSIX. */ w = count; # endif if (w < width) { size_t pad = width - w; /* Make room for the result. */ if (xsum (count, pad) > allocated - length) { /* Need at least count + pad elements. But allocate proportionally. */ size_t n = xmax (xsum3 (length, count, pad), xtimes (allocated, 2)); # if USE_SNPRINTF length += count; ENSURE_ALLOCATION (n); length -= count; # else ENSURE_ALLOCATION (n); # endif } /* Here count + pad <= allocated - length. */ { # if !DCHAR_IS_TCHAR || USE_SNPRINTF DCHAR_T * const rp = result + length; # else DCHAR_T * const rp = tmp; # endif DCHAR_T *p = rp + count; DCHAR_T *end = p + pad; DCHAR_T *pad_ptr; # if !DCHAR_IS_TCHAR || ENABLE_UNISTDIO if (dp->conversion == 'c' || dp->conversion == 's') /* No zero-padding for string directives. */ pad_ptr = NULL; else # endif { pad_ptr = (*rp == '-' ? rp + 1 : rp); /* No zero-padding of "inf" and "nan". */ if ((*pad_ptr >= 'A' && *pad_ptr <= 'Z') || (*pad_ptr >= 'a' && *pad_ptr <= 'z')) pad_ptr = NULL; } /* The generated string now extends from rp to p, with the zero padding insertion point being at pad_ptr. */ count = count + pad; /* = end - rp */ if (flags & FLAG_LEFT) { /* Pad with spaces on the right. */ for (; pad > 0; pad--) *p++ = ' '; } else if ((flags & FLAG_ZERO) && pad_ptr != NULL) { /* Pad with zeroes. */ DCHAR_T *q = end; while (p > pad_ptr) *--q = *--p; for (; pad > 0; pad--) *p++ = '0'; } else { /* Pad with spaces on the left. */ DCHAR_T *q = end; while (p > rp) *--q = *--p; for (; pad > 0; pad--) *p++ = ' '; } } } } #endif /* Here still count <= allocated - length. */ #if !DCHAR_IS_TCHAR || USE_SNPRINTF /* The snprintf() result did fit. */ #else /* Append the sprintf() result. */ memcpy (result + length, tmp, count * sizeof (DCHAR_T)); #endif #if !USE_SNPRINTF if (tmp != tmpbuf) free (tmp); #endif #if NEED_PRINTF_DIRECTIVE_F if (dp->conversion == 'F') { /* Convert the %f result to upper case for %F. */ DCHAR_T *rp = result + length; size_t rc; for (rc = count; rc > 0; rc--, rp++) if (*rp >= 'a' && *rp <= 'z') *rp = *rp - 'a' + 'A'; } #endif length += count; break; } errno = orig_errno; #undef pad_ourselves #undef prec_ourselves } } } /* Add the final NUL. */ ENSURE_ALLOCATION (xsum (length, 1)); result[length] = '\0'; if (result != resultbuf && length + 1 < allocated) { /* Shrink the allocated memory if possible. */ DCHAR_T *memory; memory = (DCHAR_T *) realloc (result, (length + 1) * sizeof (DCHAR_T)); if (memory != NULL) result = memory; } if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); *lengthp = length; /* Note that we can produce a big string of a length > INT_MAX. POSIX says that snprintf() fails with errno = EOVERFLOW in this case, but that's only because snprintf() returns an 'int'. This function does not have this limitation. */ return result; #if USE_SNPRINTF overflow: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); CLEANUP (); errno = EOVERFLOW; return NULL; #endif out_of_memory: if (!(result == resultbuf || result == NULL)) free (result); if (buf_malloced != NULL) free (buf_malloced); out_of_memory_1: CLEANUP (); errno = ENOMEM; return NULL; } } #undef MAX_ROOM_NEEDED #undef TCHARS_PER_DCHAR #undef SNPRINTF #undef USE_SNPRINTF #undef DCHAR_SET #undef DCHAR_CPY #undef PRINTF_PARSE #undef DIRECTIVES #undef DIRECTIVE #undef DCHAR_IS_TCHAR #undef TCHAR_T #undef DCHAR_T #undef FCHAR_T #undef VASNPRINTF ���������������������������������������������������������������������recutils-1.9/lib/base64.h���������������������������������������������������������������������������0000644�0000000�0000000�00000004262�14226564447�012131� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* base64.h -- Encode binary data using printable characters. Copyright (C) 2004-2006, 2009-2022 Free Software Foundation, Inc. Written by Simon Josefsson. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef BASE64_H # define BASE64_H /* Get idx_t. */ # include <idx.h> /* Get bool. */ # include <stdbool.h> # ifdef __cplusplus extern "C" { # endif /* This uses that the expression (n+(k-1))/k means the smallest integer >= n/k, i.e., the ceiling of n/k. */ # define BASE64_LENGTH(inlen) ((((inlen) + 2) / 3) * 4) struct base64_decode_context { int i; char buf[4]; }; extern bool isbase64 (char ch) _GL_ATTRIBUTE_CONST; extern void base64_encode (const char *restrict in, idx_t inlen, char *restrict out, idx_t outlen); extern idx_t base64_encode_alloc (const char *in, idx_t inlen, char **out); extern void base64_decode_ctx_init (struct base64_decode_context *ctx); extern bool base64_decode_ctx (struct base64_decode_context *ctx, const char *restrict in, idx_t inlen, char *restrict out, idx_t *outlen); extern bool base64_decode_alloc_ctx (struct base64_decode_context *ctx, const char *in, idx_t inlen, char **out, idx_t *outlen); #define base64_decode(in, inlen, out, outlen) \ base64_decode_ctx (NULL, in, inlen, out, outlen) #define base64_decode_alloc(in, inlen, out, outlen) \ base64_decode_alloc_ctx (NULL, in, inlen, out, outlen) # ifdef __cplusplus } # endif #endif /* BASE64_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/strerror-override.h����������������������������������������������������������������0000644�0000000�0000000�00000004050�14226564451�014532� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strerror-override.h --- POSIX compatible system error routine Copyright (C) 2010-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_STRERROR_OVERRIDE_H # define _GL_STRERROR_OVERRIDE_H # include <errno.h> # include <stddef.h> /* Reasonable buffer size that should never trigger ERANGE; if this proves too small, we intentionally abort(), to remind us to fix this value. */ # define STACKBUF_LEN 256 /* If ERRNUM maps to an errno value defined by gnulib, return a string describing the error. Otherwise return NULL. */ # if REPLACE_STRERROR_0 \ || GNULIB_defined_ESOCK \ || GNULIB_defined_ESTREAMS \ || GNULIB_defined_EWINSOCK \ || GNULIB_defined_ENOMSG \ || GNULIB_defined_EIDRM \ || GNULIB_defined_ENOLINK \ || GNULIB_defined_EPROTO \ || GNULIB_defined_EMULTIHOP \ || GNULIB_defined_EBADMSG \ || GNULIB_defined_EOVERFLOW \ || GNULIB_defined_ENOTSUP \ || GNULIB_defined_ENETRESET \ || GNULIB_defined_ECONNABORTED \ || GNULIB_defined_ESTALE \ || GNULIB_defined_EDQUOT \ || GNULIB_defined_ECANCELED \ || GNULIB_defined_EOWNERDEAD \ || GNULIB_defined_ENOTRECOVERABLE \ || GNULIB_defined_EILSEQ extern const char *strerror_override (int errnum) _GL_ATTRIBUTE_CONST; # else # define strerror_override(ignored) NULL # define GNULIB_defined_strerror_override_macro 1 # endif #endif /* _GL_STRERROR_OVERRIDE_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getpass.c��������������������������������������������������������������������������0000644�0000000�0000000�00000012523�14226564450�012477� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992-2001, 2003-2007, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc warns for the null checks on 'prompt' below. */ # define _GL_ARG_NONNULL(params) # include <config.h> #endif #include "getpass.h" #include <stdio.h> #if !(defined _WIN32 && !defined __CYGWIN__) # include <stdbool.h> # if HAVE_DECL___FSETLOCKING && HAVE___FSETLOCKING # if HAVE_STDIO_EXT_H # include <stdio_ext.h> # endif # else # define __fsetlocking(stream, type) /* empty */ # endif # if HAVE_TERMIOS_H # include <termios.h> # endif # if USE_UNLOCKED_IO # include "unlocked-io.h" # else # if !HAVE_DECL_FFLUSH_UNLOCKED # undef fflush_unlocked # define fflush_unlocked(x) fflush (x) # endif # if !HAVE_DECL_FLOCKFILE # undef flockfile # define flockfile(x) ((void) 0) # endif # if !HAVE_DECL_FUNLOCKFILE # undef funlockfile # define funlockfile(x) ((void) 0) # endif # if !HAVE_DECL_FPUTS_UNLOCKED # undef fputs_unlocked # define fputs_unlocked(str,stream) fputs (str, stream) # endif # if !HAVE_DECL_PUTC_UNLOCKED # undef putc_unlocked # define putc_unlocked(c,stream) putc (c, stream) # endif # endif /* It is desirable to use this bit on systems that have it. The only bit of terminal state we want to twiddle is echoing, which is done in software; there is no need to change the state of the terminal hardware. */ # ifndef TCSASOFT # define TCSASOFT 0 # endif static void call_fclose (void *arg) { if (arg != NULL) fclose (arg); } char * getpass (const char *prompt) { FILE *tty; FILE *in, *out; # if HAVE_TCGETATTR struct termios s, t; # endif bool tty_changed = false; static char *buf; static size_t bufsize; ssize_t nread; /* Try to write to and read from the terminal if we can. If we can't open the terminal, use stderr and stdin. */ tty = fopen ("/dev/tty", "w+e"); if (tty == NULL) { in = stdin; out = stderr; } else { /* We do the locking ourselves. */ __fsetlocking (tty, FSETLOCKING_BYCALLER); out = in = tty; } flockfile (out); /* Turn echoing off if it is on now. */ # if HAVE_TCGETATTR if (tcgetattr (fileno (in), &t) == 0) { /* Save the old one. */ s = t; /* Tricky, tricky. */ t.c_lflag &= ~(ECHO | ISIG); tty_changed = (tcsetattr (fileno (in), TCSAFLUSH | TCSASOFT, &t) == 0); } # endif if (prompt) { /* Write the prompt. */ fputs_unlocked (prompt, out); fflush_unlocked (out); } /* Read the password. */ nread = getline (&buf, &bufsize, in); /* According to the C standard, input may not be followed by output on the same stream without an intervening call to a file positioning function. Suppose in == out; then without this fseek call, on Solaris, HP-UX, AIX, OSF/1, the previous input gets echoed, whereas on IRIX, the following newline is not output as it should be. POSIX imposes similar restrictions if fileno (in) == fileno (out). The POSIX restrictions are tricky and change from POSIX version to POSIX version, so play it safe and invoke fseek even if in != out. */ fseeko (out, 0, SEEK_CUR); if (buf != NULL) { if (nread < 0) buf[0] = '\0'; else if (buf[nread - 1] == '\n') { /* Remove the newline. */ buf[nread - 1] = '\0'; if (tty_changed) { /* Write the newline that was not echoed. */ putc_unlocked ('\n', out); } } } /* Restore the original setting. */ # if HAVE_TCSETATTR if (tty_changed) tcsetattr (fileno (in), TCSAFLUSH | TCSASOFT, &s); # endif funlockfile (out); call_fclose (tty); return buf; } #else /* W32 native */ /* Windows implementation by Martin Lambers <marlam@marlam.de>, improved by Simon Josefsson. */ /* For PASS_MAX. */ # include <limits.h> /* For _getch(). */ # include <conio.h> /* For strdup(). */ # include <string.h> # ifndef PASS_MAX # define PASS_MAX 512 # endif char * getpass (const char *prompt) { char getpassbuf[PASS_MAX + 1]; size_t i = 0; int c; if (prompt) { fputs (prompt, stderr); fflush (stderr); } for (;;) { c = _getch (); if (c == '\r') { getpassbuf[i] = '\0'; break; } else if (i < PASS_MAX) { getpassbuf[i++] = c; } if (i >= PASS_MAX) { getpassbuf[i] = '\0'; break; } } if (prompt) { fputs ("\r\n", stderr); fflush (stderr); } return strdup (getpassbuf); } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getcwd.c���������������������������������������������������������������������������0000644�0000000�0000000�00000033135�14226564446�012315� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if !_LIBC # include <config.h> # include <unistd.h> # include "pathmax.h" #else # define HAVE_OPENAT 1 # define D_INO_IN_DIRENT 1 # define HAVE_MSVC_INVALID_PARAMETER_HANDLER 0 # define HAVE_MINIMALLY_WORKING_GETCWD 0 #endif #include <errno.h> #include <sys/types.h> #include <sys/stat.h> #include <stdbool.h> #include <stddef.h> #include <fcntl.h> /* For AT_FDCWD on Solaris 9. */ /* If this host provides the openat function or if we're using the gnulib replacement function with a native fdopendir, then enable code below to make getcwd more efficient and robust. */ #if defined HAVE_OPENAT || (defined GNULIB_OPENAT && defined HAVE_FDOPENDIR) # define HAVE_OPENAT_SUPPORT 1 #else # define HAVE_OPENAT_SUPPORT 0 #endif #ifndef __set_errno # define __set_errno(val) (errno = (val)) #endif #include <dirent.h> #ifndef _D_EXACT_NAMLEN # define _D_EXACT_NAMLEN(d) strlen ((d)->d_name) #endif #ifndef _D_ALLOC_NAMLEN # define _D_ALLOC_NAMLEN(d) (_D_EXACT_NAMLEN (d) + 1) #endif #include <unistd.h> #include <stdlib.h> #include <string.h> #if _LIBC # ifndef mempcpy # define mempcpy __mempcpy # endif #endif #ifndef MAX # define MAX(a, b) ((a) < (b) ? (b) : (a)) #endif #ifndef MIN # define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif /* In this file, PATH_MAX only serves as a threshold for choosing among two algorithms. */ #ifndef PATH_MAX # define PATH_MAX 8192 #endif #if D_INO_IN_DIRENT # define MATCHING_INO(dp, ino) ((dp)->d_ino == (ino)) #else # define MATCHING_INO(dp, ino) true #endif #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #if !_LIBC # define GETCWD_RETURN_TYPE char * # define __close_nocancel_nostatus close # define __getcwd_generic rpl_getcwd # undef stat64 # define stat64 stat # define __fstat64 fstat # define __fstatat64 fstatat # define __lstat64 lstat # define __closedir closedir # define __opendir opendir # define __readdir64 readdir # define __fdopendir fdopendir # define __openat openat # define __rewinddir rewinddir # define __openat64 openat # define dirent64 dirent #else # include <not-cancel.h> #endif /* The results of opendir() in this file are not used with dirfd and fchdir, and we do not leak fds to any single-threaded code that could use stdio, therefore save some unnecessary recursion in fchdir.c. FIXME - if the kernel ever adds support for multi-thread safety for avoiding standard fds, then we should use opendir_safer and openat_safer. */ #ifdef GNULIB_defined_opendir # undef opendir #endif #ifdef GNULIB_defined_closedir # undef closedir #endif #if defined _WIN32 && !defined __CYGWIN__ # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static char * getcwd_nothrow (char *buf, size_t size) { char *result; TRY_MSVC_INVAL { result = _getcwd (buf, size); } CATCH_MSVC_INVAL { result = NULL; errno = ERANGE; } DONE_MSVC_INVAL; return result; } # else # define getcwd_nothrow _getcwd # endif # define getcwd_system getcwd_nothrow #else # define getcwd_system getcwd #endif /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Returns NULL with errno set if the directory couldn't be determined or SIZE was too small. If successful, returns BUF. In GNU, if BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ GETCWD_RETURN_TYPE __getcwd_generic (char *buf, size_t size) { /* Lengths of big file name components and entire file names, and a deep level of file name nesting. These numbers are not upper bounds; they are merely large values suitable for initial allocations, designed to be large enough for most real-world uses. */ enum { BIG_FILE_NAME_COMPONENT_LENGTH = 255, BIG_FILE_NAME_LENGTH = MIN (4095, PATH_MAX - 1), DEEP_NESTING = 100 }; #if HAVE_OPENAT_SUPPORT int fd = AT_FDCWD; bool fd_needs_closing = false; #else char dots[DEEP_NESTING * sizeof ".." + BIG_FILE_NAME_COMPONENT_LENGTH + 1]; char *dotlist = dots; size_t dotsize = sizeof dots; size_t dotlen = 0; #endif DIR *dirstream = NULL; dev_t rootdev, thisdev; ino_t rootino, thisino; char *dir; register char *dirp; struct stat64 st; size_t allocated = size; size_t used; #if HAVE_MINIMALLY_WORKING_GETCWD /* If AT_FDCWD is not defined, the algorithm below is O(N**2) and this is much slower than the system getcwd (at least on GNU/Linux). So trust the system getcwd's results unless they look suspicious. Use the system getcwd even if we have openat support, since the system getcwd works even when a parent is unreadable, while the openat-based approach does not. But on AIX 5.1..7.1, the system getcwd is not even minimally working: If the current directory name is slightly longer than PATH_MAX, it omits the first directory component and returns this wrong result with errno = 0. */ # undef getcwd dir = getcwd_system (buf, size); if (dir || (size && errno == ERANGE)) return dir; /* Solaris getcwd (NULL, 0) fails with errno == EINVAL, but it has internal magic that lets it work even if an ancestor directory is inaccessible, which is better in many cases. So in this case try again with a buffer that's almost always big enough. */ if (errno == EINVAL && buf == NULL && size == 0) { char big_buffer[BIG_FILE_NAME_LENGTH + 1]; dir = getcwd_system (big_buffer, sizeof big_buffer); if (dir) return strdup (dir); } # if HAVE_PARTLY_WORKING_GETCWD /* The system getcwd works, except it sometimes fails when it shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT. */ if (errno != ERANGE && errno != ENAMETOOLONG && errno != ENOENT) return NULL; # endif #endif if (size == 0) { if (buf != NULL) { __set_errno (EINVAL); return NULL; } allocated = BIG_FILE_NAME_LENGTH + 1; } if (buf == NULL) { dir = malloc (allocated); if (dir == NULL) return NULL; } else dir = buf; dirp = dir + allocated; *--dirp = '\0'; if (__lstat64 (".", &st) < 0) goto lose; thisdev = st.st_dev; thisino = st.st_ino; if (__lstat64 ("/", &st) < 0) goto lose; rootdev = st.st_dev; rootino = st.st_ino; while (!(thisdev == rootdev && thisino == rootino)) { struct dirent64 *d; dev_t dotdev; ino_t dotino; bool mount_point; int parent_status; size_t dirroom; size_t namlen; bool use_d_ino = true; /* Look at the parent directory. */ #if HAVE_OPENAT_SUPPORT fd = __openat64 (fd, "..", O_RDONLY); if (fd < 0) goto lose; fd_needs_closing = true; parent_status = __fstat64 (fd, &st); #else dotlist[dotlen++] = '.'; dotlist[dotlen++] = '.'; dotlist[dotlen] = '\0'; parent_status = __lstat64 (dotlist, &st); #endif if (parent_status != 0) goto lose; if (dirstream && __closedir (dirstream) != 0) { dirstream = NULL; goto lose; } /* Figure out if this directory is a mount point. */ dotdev = st.st_dev; dotino = st.st_ino; mount_point = dotdev != thisdev; /* Search for the last directory. */ #if HAVE_OPENAT_SUPPORT dirstream = __fdopendir (fd); if (dirstream == NULL) goto lose; fd_needs_closing = false; #else dirstream = __opendir (dotlist); if (dirstream == NULL) goto lose; dotlist[dotlen++] = '/'; #endif for (;;) { /* Clear errno to distinguish EOF from error if readdir returns NULL. */ __set_errno (0); d = __readdir64 (dirstream); /* When we've iterated through all directory entries without finding one with a matching d_ino, rewind the stream and consider each name again, but this time, using lstat. This is necessary in a chroot on at least one system (glibc-2.3.6 + linux 2.6.12), where .., ../.., ../../.., etc. all had the same device number, yet the d_ino values for entries in / did not match those obtained via lstat. */ if (d == NULL && errno == 0 && use_d_ino) { use_d_ino = false; __rewinddir (dirstream); d = __readdir64 (dirstream); } if (d == NULL) { if (errno == 0) /* EOF on dirstream, which can mean e.g., that the current directory has been removed. */ __set_errno (ENOENT); goto lose; } if (d->d_name[0] == '.' && (d->d_name[1] == '\0' || (d->d_name[1] == '.' && d->d_name[2] == '\0'))) continue; if (use_d_ino) { bool match = (MATCHING_INO (d, thisino) || mount_point); if (! match) continue; } { int entry_status; #if HAVE_OPENAT_SUPPORT entry_status = __fstatat64 (fd, d->d_name, &st, AT_SYMLINK_NOFOLLOW); #else /* Compute size needed for this file name, or for the file name ".." in the same directory, whichever is larger. Room for ".." might be needed the next time through the outer loop. */ size_t name_alloc = _D_ALLOC_NAMLEN (d); size_t filesize = dotlen + MAX (sizeof "..", name_alloc); if (filesize < dotlen) goto memory_exhausted; if (dotsize < filesize) { /* My, what a deep directory tree you have, Grandma. */ size_t newsize = MAX (filesize, dotsize * 2); size_t i; if (newsize < dotsize) goto memory_exhausted; if (dotlist != dots) free (dotlist); dotlist = malloc (newsize); if (dotlist == NULL) goto lose; dotsize = newsize; i = 0; do { dotlist[i++] = '.'; dotlist[i++] = '.'; dotlist[i++] = '/'; } while (i < dotlen); } memcpy (dotlist + dotlen, d->d_name, _D_ALLOC_NAMLEN (d)); entry_status = __lstat64 (dotlist, &st); #endif /* We don't fail here if we cannot stat() a directory entry. This can happen when (network) file systems fail. If this entry is in fact the one we are looking for we will find out soon as we reach the end of the directory without having found anything. */ if (entry_status == 0 && S_ISDIR (st.st_mode) && st.st_dev == thisdev && st.st_ino == thisino) break; } } dirroom = dirp - dir; namlen = _D_EXACT_NAMLEN (d); if (dirroom <= namlen) { if (size != 0) { __set_errno (ERANGE); goto lose; } else { char *tmp; size_t oldsize = allocated; allocated += MAX (allocated, namlen); if (allocated < oldsize || ! (tmp = realloc (dir, allocated))) goto memory_exhausted; /* Move current contents up to the end of the buffer. This is guaranteed to be non-overlapping. */ dirp = memcpy (tmp + allocated - (oldsize - dirroom), tmp + dirroom, oldsize - dirroom); dir = tmp; } } dirp -= namlen; memcpy (dirp, d->d_name, namlen); *--dirp = '/'; thisdev = dotdev; thisino = dotino; } if (dirstream && __closedir (dirstream) != 0) { dirstream = NULL; goto lose; } if (dirp == &dir[allocated - 1]) *--dirp = '/'; #if ! HAVE_OPENAT_SUPPORT if (dotlist != dots) free (dotlist); #endif used = dir + allocated - dirp; memmove (dir, dirp, used); if (size == 0) /* Ensure that the buffer is only as large as necessary. */ buf = (used < allocated ? realloc (dir, used) : dir); if (buf == NULL) /* Either buf was NULL all along, or 'realloc' failed but we still have the original string. */ buf = dir; return buf; memory_exhausted: __set_errno (ENOMEM); lose: { int save = errno; if (dirstream) __closedir (dirstream); #if HAVE_OPENAT_SUPPORT if (fd_needs_closing) __close_nocancel_nostatus (fd); #else if (dotlist != dots) free (dotlist); #endif if (buf == NULL) free (dir); __set_errno (save); } return NULL; } #if defined _LIBC && !defined GETCWD_RETURN_TYPE libc_hidden_def (__getcwd) weak_alias (__getcwd, getcwd) #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/isnand.c���������������������������������������������������������������������������0000644�0000000�0000000�00000001511�14226564450�012300� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ #include "isnan.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/printf-frexpl.h��������������������������������������������������������������������0000644�0000000�0000000�00000002125�14226564450�013633� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Write a finite, positive number x as x = mantissa * 2^exp where exp >= LDBL_MIN_EXP - 1, mantissa < 2.0, if x is not a denormalized number then mantissa >= 1.0. Store exp in *EXPPTR and return mantissa. */ extern long double printf_frexpl (long double x, int *expptr); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/group-member.c���������������������������������������������������������������������0000644�0000000�0000000�00000005165�14226564450�013436� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* group-member.c -- determine whether group id is in calling user's group list Copyright (C) 1994, 1997-1998, 2003, 2005-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <stdio.h> #include <sys/types.h> #include <stdlib.h> #include "intprops.h" /* Most processes have no more than this many groups, and for these processes we can avoid using malloc. */ enum { GROUPBUF_SIZE = 100 }; struct group_info { gid_t *group; gid_t groupbuf[GROUPBUF_SIZE]; }; static void free_group_info (struct group_info const *g) { if (g->group != g->groupbuf) free (g->group); } static int get_group_info (struct group_info *gi) { int n_groups = getgroups (GROUPBUF_SIZE, gi->groupbuf); gi->group = gi->groupbuf; if (n_groups < 0) { int n_group_slots = getgroups (0, NULL); size_t nbytes; if (! INT_MULTIPLY_WRAPV (n_group_slots, sizeof *gi->group, &nbytes)) { gi->group = malloc (nbytes); if (gi->group) n_groups = getgroups (n_group_slots, gi->group); } } /* In case of error, the user loses. */ return n_groups; } /* Return non-zero if GID is one that we have in our groups list. Note that the groups list is not guaranteed to contain the current or effective group ID, so they should generally be checked separately. */ int group_member (gid_t gid) { int i; int found; struct group_info gi; int n_groups = get_group_info (&gi); /* Search through the list looking for GID. */ found = 0; for (i = 0; i < n_groups; i++) { if (gid == gi.group[i]) { found = 1; break; } } free_group_info (&gi); return found; } #ifdef TEST int main (int argc, char **argv) { int i; for (i = 1; i < argc; i++) { gid_t gid; gid = atoi (argv[i]); printf ("%d: %s\n", gid, group_member (gid) ? "yes" : "no"); } exit (0); } #endif /* TEST */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/strchrnul.c������������������������������������������������������������������������0000644�0000000�0000000�00000013037�14226564451�013057� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Searching in a string. Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> /* Find the first occurrence of C in S or the final NUL byte. */ char * strchrnul (const char *s, int c_in) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned char c; c = (unsigned char) c_in; if (!c) return rawmemchr (s, 0); /* Handle the first few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s; (size_t) char_ptr % sizeof (longword) != 0; ++char_ptr) if (!*char_ptr || *char_ptr == c) return (char *) char_ptr; longword_ptr = (const longword *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to NUL or c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 or longword2 is zero. Let's consider longword1. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. The test whether any byte in longword1 or longword2 is zero is equivalent to testing whether tmp1 is nonzero or tmp2 is nonzero. We can combine this into a single test, whether (tmp1 | tmp2) is nonzero. This test can read more than one byte beyond the end of a string, depending on where the terminating NUL is encountered. However, this is considered safe since the initialization phase ensured that the read will be aligned, therefore, the read will not cross page boundaries and will not cause a fault. */ while (1) { longword longword1 = *longword_ptr ^ repeated_c; longword longword2 = *longword_ptr; if (((((longword1 - repeated_one) & ~longword1) | ((longword2 - repeated_one) & ~longword2)) & (repeated_one << 7)) != 0) break; longword_ptr++; } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that one of the sizeof (longword) bytes starting at char_ptr is == 0 or == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ char_ptr = (unsigned char *) longword_ptr; while (*char_ptr && (*char_ptr != c)) char_ptr++; return (char *) char_ptr; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/sig-handler.c����������������������������������������������������������������������0000644�0000000�0000000�00000001552�14226564450�013226� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience declarations when working with <signal.h>. Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define SIG_HANDLER_INLINE _GL_EXTERN_INLINE #include "sig-handler.h" ������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/setenv.c���������������������������������������������������������������������������0000644�0000000�0000000�00000025077�14226564450�012345� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992, 1995-2003, 2005-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if !_LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ # define _GL_ARG_NONNULL(params) # define _GL_USE_STDLIB_ALLOC 1 # include <config.h> #endif #include <alloca.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #ifndef __set_errno # define __set_errno(ev) ((errno) = (ev)) #endif #include <string.h> #if _LIBC || HAVE_UNISTD_H # include <unistd.h> #endif #if !_LIBC # include "malloca.h" #endif #if _LIBC || !HAVE_SETENV #if !_LIBC # define __environ environ #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include <bits/libc-lock.h> __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif /* In the GNU C library we must keep the namespace clean. */ #ifdef _LIBC # define setenv __setenv # define clearenv __clearenv # define tfind __tfind # define tsearch __tsearch #endif /* In the GNU C library implementation we try to be more clever and allow arbitrarily many changes of the environment given that the used values are from a small set. Outside glibc this will eat up all memory after a while. */ #if defined _LIBC || (defined HAVE_SEARCH_H && defined HAVE_TSEARCH \ && (defined __GNUC__ || defined __clang__)) # define USE_TSEARCH 1 # include <search.h> typedef int (*compar_fn_t) (const void *, const void *); /* This is a pointer to the root of the search tree with the known values. */ static void *known_values; # define KNOWN_VALUE(Str) \ ({ \ void *value = tfind (Str, &known_values, (compar_fn_t) strcmp); \ value != NULL ? *(char **) value : NULL; \ }) # define STORE_VALUE(Str) \ tsearch (Str, &known_values, (compar_fn_t) strcmp) #else # undef USE_TSEARCH # define KNOWN_VALUE(Str) NULL # define STORE_VALUE(Str) do { } while (0) #endif /* If this variable is not a null pointer we allocated the current environment. */ static char **last_environ; /* This function is used by 'setenv' and 'putenv'. The difference between the two functions is that for the former must create a new string which is then placed in the environment, while the argument of 'putenv' must be used directly. This is all complicated by the fact that we try to reuse values once generated for a 'setenv' call since we can never free the strings. */ int __add_to_environ (const char *name, const char *value, const char *combined, int replace) { char **ep; size_t size; const size_t namelen = strlen (name); const size_t vallen = value != NULL ? strlen (value) + 1 : 0; LOCK; /* We have to get the pointer now that we have the lock and not earlier since another thread might have created a new environment. */ ep = __environ; size = 0; if (ep != NULL) { for (; *ep != NULL; ++ep) if (!strncmp (*ep, name, namelen) && (*ep)[namelen] == '=') break; else ++size; } if (ep == NULL || *ep == NULL) { char **new_environ; #ifdef USE_TSEARCH char *new_value; #endif /* We allocated this space; we can extend it. */ new_environ = (char **) (last_environ == NULL ? malloc ((size + 2) * sizeof (char *)) : realloc (last_environ, (size + 2) * sizeof (char *))); if (new_environ == NULL) { /* It's easier to set errno to ENOMEM than to rely on the 'malloc-posix' and 'realloc-posix' gnulib modules. */ __set_errno (ENOMEM); UNLOCK; return -1; } /* If the whole entry is given add it. */ if (combined != NULL) /* We must not add the string to the search tree since it belongs to the user. */ new_environ[size] = (char *) combined; else { /* See whether the value is already known. */ #ifdef USE_TSEARCH # ifdef _LIBC new_value = (char *) alloca (namelen + 1 + vallen); __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), value, vallen); # else new_value = (char *) malloca (namelen + 1 + vallen); if (new_value == NULL) { __set_errno (ENOMEM); UNLOCK; return -1; } memcpy (new_value, name, namelen); new_value[namelen] = '='; memcpy (&new_value[namelen + 1], value, vallen); # endif new_environ[size] = KNOWN_VALUE (new_value); if (new_environ[size] == NULL) #endif { new_environ[size] = (char *) malloc (namelen + 1 + vallen); if (new_environ[size] == NULL) { #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif __set_errno (ENOMEM); UNLOCK; return -1; } #ifdef USE_TSEARCH memcpy (new_environ[size], new_value, namelen + 1 + vallen); #else memcpy (new_environ[size], name, namelen); new_environ[size][namelen] = '='; memcpy (&new_environ[size][namelen + 1], value, vallen); #endif /* And save the value now. We cannot do this when we remove the string since then we cannot decide whether it is a user string or not. */ STORE_VALUE (new_environ[size]); } #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif } if (__environ != last_environ) memcpy ((char *) new_environ, (char *) __environ, size * sizeof (char *)); new_environ[size + 1] = NULL; last_environ = __environ = new_environ; } else if (replace) { char *np; /* Use the user string if given. */ if (combined != NULL) np = (char *) combined; else { #ifdef USE_TSEARCH char *new_value; # ifdef _LIBC new_value = alloca (namelen + 1 + vallen); __mempcpy (__mempcpy (__mempcpy (new_value, name, namelen), "=", 1), value, vallen); # else new_value = malloca (namelen + 1 + vallen); if (new_value == NULL) { __set_errno (ENOMEM); UNLOCK; return -1; } memcpy (new_value, name, namelen); new_value[namelen] = '='; memcpy (&new_value[namelen + 1], value, vallen); # endif np = KNOWN_VALUE (new_value); if (np == NULL) #endif { np = (char *) malloc (namelen + 1 + vallen); if (np == NULL) { #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif __set_errno (ENOMEM); UNLOCK; return -1; } #ifdef USE_TSEARCH memcpy (np, new_value, namelen + 1 + vallen); #else memcpy (np, name, namelen); np[namelen] = '='; memcpy (&np[namelen + 1], value, vallen); #endif /* And remember the value. */ STORE_VALUE (np); } #if defined USE_TSEARCH && !defined _LIBC freea (new_value); #endif } *ep = np; } UNLOCK; return 0; } int setenv (const char *name, const char *value, int replace) { if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } return __add_to_environ (name, value, NULL, replace); } /* The 'clearenv' was planned to be added to POSIX.1 but probably never made it. Nevertheless the POSIX.9 standard (POSIX bindings for Fortran 77) requires this function. */ int clearenv (void) { LOCK; if (__environ == last_environ && __environ != NULL) { /* We allocated this environment so we can free it. */ free (__environ); last_environ = NULL; } /* Clear the environment pointer removes the whole environment. */ __environ = NULL; UNLOCK; return 0; } #ifdef _LIBC static void free_mem (void) { /* Remove all traces. */ clearenv (); /* Now remove the search tree. */ __tdestroy (known_values, free); known_values = NULL; } text_set_element (__libc_subfreeres, free_mem); # undef setenv # undef clearenv weak_alias (__setenv, setenv) weak_alias (__clearenv, clearenv) #endif #endif /* _LIBC || !HAVE_SETENV */ /* The rest of this file is called into use when replacing an existing but buggy setenv. Known bugs include failure to diagnose invalid name, and consuming a leading '=' from value. */ #if HAVE_SETENV # undef setenv # if !HAVE_DECL_SETENV extern int setenv (const char *, const char *, int); # endif # define STREQ(a, b) (strcmp (a, b) == 0) int rpl_setenv (const char *name, const char *value, int replace) { int result; if (!name || !*name || strchr (name, '=')) { errno = EINVAL; return -1; } /* Call the real setenv even if replace is 0, in case implementation has underlying data to update, such as when environ changes. */ result = setenv (name, value, replace); if (result == 0 && replace && *value == '=') { char *tmp = getenv (name); if (!STREQ (tmp, value)) { int saved_errno; size_t len = strlen (value); tmp = malloca (len + 2); /* Since leading '=' is eaten, double it up. */ *tmp = '='; memcpy (tmp + 1, value, len + 1); result = setenv (name, tmp, replace); saved_errno = errno; freea (tmp); errno = saved_errno; } } return result; } #endif /* HAVE_SETENV */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/windows-rwlock.h�������������������������������������������������������������������0000644�0000000�0000000�00000005134�14226564451�014030� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read-write locks (native Windows implementation). Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #ifndef _WINDOWS_RWLOCK_H #define _WINDOWS_RWLOCK_H #define WIN32_LEAN_AND_MEAN /* avoid including junk */ #include <windows.h> #include "windows-initguard.h" /* It is impossible to implement read-write locks using plain locks, without introducing an extra thread dedicated to managing read-write locks. Therefore here we need to use the low-level Event type. */ typedef struct { HANDLE *array; /* array of waiting threads, each represented by an event */ unsigned int count; /* number of waiting threads */ unsigned int alloc; /* length of allocated array */ unsigned int offset; /* index of first waiting thread in array */ } glwthread_carray_waitqueue_t; typedef struct { glwthread_initguard_t guard; /* protects the initialization */ CRITICAL_SECTION lock; /* protects the remaining fields */ glwthread_carray_waitqueue_t waiting_readers; /* waiting readers */ glwthread_carray_waitqueue_t waiting_writers; /* waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } glwthread_rwlock_t; #define GLWTHREAD_RWLOCK_INIT { GLWTHREAD_INITGUARD_INIT } #ifdef __cplusplus extern "C" { #endif extern void glwthread_rwlock_init (glwthread_rwlock_t *lock); extern int glwthread_rwlock_rdlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_wrlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_tryrdlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_trywrlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_unlock (glwthread_rwlock_t *lock); extern int glwthread_rwlock_destroy (glwthread_rwlock_t *lock); #ifdef __cplusplus } #endif #endif /* _WINDOWS_RWLOCK_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getrandom.c������������������������������������������������������������������������0000644�0000000�0000000�00000013212�14226564450�013005� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Obtain a series of random bytes. Copyright 2020-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include <sys/random.h> #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> # if HAVE_BCRYPT_H # include <bcrypt.h> # else # define NTSTATUS LONG typedef void * BCRYPT_ALG_HANDLE; # define BCRYPT_USE_SYSTEM_PREFERRED_RNG 0x00000002 # if HAVE_LIB_BCRYPT extern NTSTATUS WINAPI BCryptGenRandom (BCRYPT_ALG_HANDLE, UCHAR *, ULONG, ULONG); # endif # endif # if !HAVE_LIB_BCRYPT # include <wincrypt.h> # ifndef CRYPT_VERIFY_CONTEXT # define CRYPT_VERIFY_CONTEXT 0xF0000000 # endif # endif #endif #include "minmax.h" #if defined _WIN32 && ! defined __CYGWIN__ /* Don't assume that UNICODE is not defined. */ # undef LoadLibrary # define LoadLibrary LoadLibraryA # undef CryptAcquireContext # define CryptAcquireContext CryptAcquireContextA # if !HAVE_LIB_BCRYPT /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress /* BCryptGenRandom with the BCRYPT_USE_SYSTEM_PREFERRED_RNG flag works only starting with Windows 7. */ typedef NTSTATUS (WINAPI * BCryptGenRandomFuncType) (BCRYPT_ALG_HANDLE, UCHAR *, ULONG, ULONG); static BCryptGenRandomFuncType BCryptGenRandomFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE bcrypt = LoadLibrary ("bcrypt.dll"); if (bcrypt != NULL) { BCryptGenRandomFunc = (BCryptGenRandomFuncType) GetProcAddress (bcrypt, "BCryptGenRandom"); } initialized = TRUE; } # else # define BCryptGenRandomFunc BCryptGenRandom # endif #else /* These devices exist on all platforms except native Windows. */ /* Name of a device through which the kernel returns high quality random numbers, from an entropy pool. When the pool is empty, the call blocks until entropy sources have added enough bits of entropy. */ # ifndef NAME_OF_RANDOM_DEVICE # define NAME_OF_RANDOM_DEVICE "/dev/random" # endif /* Name of a device through which the kernel returns random or pseudo-random numbers. It uses an entropy pool, but, in order to avoid blocking, adds bits generated by a pseudo-random number generator, as needed. */ # ifndef NAME_OF_NONCE_DEVICE # define NAME_OF_NONCE_DEVICE "/dev/urandom" # endif #endif /* Set BUFFER (of size LENGTH) to random bytes under the control of FLAGS. Return the number of bytes written (> 0). Upon error, return -1 and set errno. */ ssize_t getrandom (void *buffer, size_t length, unsigned int flags) #undef getrandom { #if defined _WIN32 && ! defined __CYGWIN__ /* BCryptGenRandom, defined in <bcrypt.h> <https://docs.microsoft.com/en-us/windows/win32/api/bcrypt/nf-bcrypt-bcryptgenrandom> with the BCRYPT_USE_SYSTEM_PREFERRED_RNG flag works in Windows 7 and newer. */ static int bcrypt_not_working /* = 0 */; if (!bcrypt_not_working) { # if !HAVE_LIB_BCRYPT if (!initialized) initialize (); # endif if (BCryptGenRandomFunc != NULL && BCryptGenRandomFunc (NULL, buffer, length, BCRYPT_USE_SYSTEM_PREFERRED_RNG) == 0 /*STATUS_SUCCESS*/) return length; bcrypt_not_working = 1; } # if !HAVE_LIB_BCRYPT /* CryptGenRandom, defined in <wincrypt.h> <https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptgenrandom> works in older releases as well, but is now deprecated. CryptAcquireContext, defined in <wincrypt.h> <https://docs.microsoft.com/en-us/windows/win32/api/wincrypt/nf-wincrypt-cryptacquirecontexta> */ { static int crypt_initialized /* = 0 */; static HCRYPTPROV provider; if (!crypt_initialized) { if (CryptAcquireContext (&provider, NULL, NULL, PROV_RSA_FULL, CRYPT_VERIFY_CONTEXT)) crypt_initialized = 1; else crypt_initialized = -1; } if (crypt_initialized >= 0) { if (!CryptGenRandom (provider, length, buffer)) { errno = EIO; return -1; } return length; } } # endif errno = ENOSYS; return -1; #elif HAVE_GETRANDOM return getrandom (buffer, length, flags); #else static int randfd[2] = { -1, -1 }; bool devrandom = (flags & GRND_RANDOM) != 0; int fd = randfd[devrandom]; if (fd < 0) { static char const randdevice[][MAX (sizeof NAME_OF_NONCE_DEVICE, sizeof NAME_OF_RANDOM_DEVICE)] = { NAME_OF_NONCE_DEVICE, NAME_OF_RANDOM_DEVICE }; int oflags = (O_RDONLY + O_CLOEXEC + (flags & GRND_NONBLOCK ? O_NONBLOCK : 0)); fd = open (randdevice[devrandom], oflags); if (fd < 0) { if (errno == ENOENT || errno == ENOTDIR) errno = ENOSYS; return -1; } randfd[devrandom] = fd; } return read (fd, buffer, length); #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/close.c����������������������������������������������������������������������������0000644�0000000�0000000�00000003143�14226564447�012142� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* close replacement. Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include "fd-hook.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef close #if defined _WIN32 && !defined __CYGWIN__ # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int close_nothrow (int fd) { int result; TRY_MSVC_INVAL { result = _close (fd); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define close_nothrow _close # endif #else # define close_nothrow close #endif /* Override close() to call into other gnulib modules. */ int rpl_close (int fd) { #if WINDOWS_SOCKETS int retval = execute_all_close_hooks (close_nothrow, fd); #else int retval = close_nothrow (fd); #endif #if REPLACE_FCHDIR if (retval >= 0) _gl_unregister_fd (fd); #endif return retval; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/signbitl.c�������������������������������������������������������������������������0000644�0000000�0000000�00000004164�14226564451�012647� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* signbit() macro: Determine the sign bit of a floating-point number. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <math.h> #include <string.h> #include "isnanl-nolibm.h" #include "float+.h" #ifdef gl_signbitl_OPTIMIZED_MACRO # undef gl_signbitl #endif int gl_signbitl (long double arg) { #if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT /* The use of a union to extract the bits of the representation of a 'long double' is safe in practice, despite of the "aliasing rules" of C99, because the GCC docs say "Even with '-fstrict-aliasing', type-punning is allowed, provided the memory is accessed through the union type." and similarly for other compilers. */ # define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) union { long double value; unsigned int word[NWORDS]; } m; m.value = arg; return (m.word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; #elif HAVE_COPYSIGNL_IN_LIBC return copysignl (1.0L, arg) < 0; #else /* This does not do the right thing for NaN, but this is irrelevant for most use cases. */ if (isnanl (arg)) return 0; if (arg < 0.0L) return 1; else if (arg == 0.0L) { /* Distinguish 0.0L and -0.0L. */ static long double plus_zero = 0.0L; long double arg_mem = arg; return (memcmp (&plus_zero, &arg_mem, SIZEOF_LDBL) != 0); } else return 0; #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/acl_entries.c����������������������������������������������������������������������0000644�0000000�0000000�00000004452�14226564447�013331� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the number of entries in an ACL. Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert and Andreas Gruenbacher. */ #include <config.h> #include "acl-internal.h" /* This file assumes POSIX-draft like ACLs (Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5). */ /* Return the number of entries in ACL. Return -1 and set errno upon failure to determine it. */ int acl_entries (acl_t acl) { int count = 0; if (acl != NULL) { #if HAVE_ACL_FIRST_ENTRY /* Linux, FreeBSD, Mac OS X, Cygwin >= 2.5 */ # if HAVE_ACL_TYPE_EXTENDED /* Mac OS X */ /* acl_get_entry returns 0 when it successfully fetches an entry, and -1/EINVAL at the end. */ acl_entry_t ace; int got_one; for (got_one = acl_get_entry (acl, ACL_FIRST_ENTRY, &ace); got_one >= 0; got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace)) count++; # else /* Linux, FreeBSD, Cygwin >= 2.5 */ /* acl_get_entry returns 1 when it successfully fetches an entry, and 0 at the end. */ acl_entry_t ace; int got_one; for (got_one = acl_get_entry (acl, ACL_FIRST_ENTRY, &ace); got_one > 0; got_one = acl_get_entry (acl, ACL_NEXT_ENTRY, &ace)) count++; if (got_one < 0) return -1; # endif #else /* IRIX, Tru64 */ # if HAVE_ACL_TO_SHORT_TEXT /* IRIX */ /* Don't use acl_get_entry: it is undocumented. */ count = acl->acl_cnt; # endif # if HAVE_ACL_FREE_TEXT /* Tru64 */ /* Don't use acl_get_entry: it takes only one argument and does not work. */ count = acl->acl_num; # endif #endif } return count; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/alloca.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000004674�14226564447�012714� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Memory allocation on the stack. Copyright (C) 1995, 1999, 2001-2004, 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Avoid using the symbol _ALLOCA_H here, as Bison assumes _ALLOCA_H means there is a real alloca function. */ #ifndef _GL_ALLOCA_H #define _GL_ALLOCA_H /* alloca (N) returns a pointer to N bytes of memory allocated on the stack, which will last until the function returns. Use of alloca should be avoided: - inside arguments of function calls - undefined behaviour, - in inline functions - the allocation may actually last until the calling function returns, - for huge N (say, N >= 65536) - you never know how large (or small) the stack is, and when the stack cannot fulfill the memory allocation request, the program just crashes. */ #ifndef alloca /* Some version of mingw have an <alloca.h> that causes trouble when included after 'alloca' gets defined as a macro. As a workaround, include this <alloca.h> first and define 'alloca' as a macro afterwards if needed. */ # if defined __GNUC__ && (defined _WIN32 && ! defined __CYGWIN__) && @HAVE_ALLOCA_H@ # include_next <alloca.h> # endif #endif #ifndef alloca # if defined __GNUC__ || (__clang_major__ >= 4) # define alloca __builtin_alloca # elif defined _AIX # define alloca __alloca # elif defined _MSC_VER # include <malloc.h> # define alloca _alloca # elif defined __DECC && defined __VMS # define alloca __ALLOCA # elif defined __TANDEM && defined _TNS_E_TARGET # ifdef __cplusplus extern "C" # endif void *_alloca (unsigned short); # pragma intrinsic (_alloca) # define alloca _alloca # elif defined __MVS__ # include <stdlib.h> # else # include <stddef.h> # ifdef __cplusplus extern "C" # endif void *alloca (size_t); # endif #endif #endif /* _GL_ALLOCA_H */ ��������������������������������������������������������������������recutils-1.9/lib/windows-mutex.c��������������������������������������������������������������������0000644�0000000�0000000�00000005240�14226564451�013662� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain mutexes (native Windows implementation). Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-mutex.h" #include <errno.h> void glwthread_mutex_init (glwthread_mutex_t *mutex) { InitializeCriticalSection (&mutex->lock); mutex->guard.done = 1; } int glwthread_mutex_lock (glwthread_mutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_mutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!mutex->guard.done) Sleep (0); } } EnterCriticalSection (&mutex->lock); return 0; } int glwthread_mutex_trylock (glwthread_mutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_mutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Let another thread finish initializing this mutex, and let it also lock this mutex. */ return EBUSY; } } if (!TryEnterCriticalSection (&mutex->lock)) return EBUSY; return 0; } int glwthread_mutex_unlock (glwthread_mutex_t *mutex) { if (!mutex->guard.done) return EINVAL; LeaveCriticalSection (&mutex->lock); return 0; } int glwthread_mutex_destroy (glwthread_mutex_t *mutex) { if (!mutex->guard.done) return EINVAL; DeleteCriticalSection (&mutex->lock); mutex->guard.done = 0; return 0; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/mempcpy.c��������������������������������������������������������������������������0000644�0000000�0000000�00000002213�14226564447�012504� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy memory area and return pointer after last written byte. Copyright (C) 2003, 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> /* A function definition is only needed if HAVE_MEMPCPY is not defined. */ #if !HAVE_MEMPCPY /* Copy N bytes of SRC to DEST, return pointer to bytes after the last written byte. */ void * mempcpy (void *dest, const void *src, size_t n) { return (char *) memcpy (dest, src, n) + n; } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/unistd.c���������������������������������������������������������������������������0000644�0000000�0000000�00000001541�14226564451�012336� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <unistd.h>. Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define _GL_UNISTD_INLINE _GL_EXTERN_INLINE #include "unistd.h" typedef int dummy; ���������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/setlocale-lock.c�������������������������������������������������������������������0000644�0000000�0000000�00000010530�14226564450�013726� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the internal lock used by setlocale_null_r. Copyright (C) 2019-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #include <config.h> /* When it is known that the gl_get_setlocale_null_lock function is defined by a dependency library, it should not be defined here. */ #if OMIT_SETLOCALE_LOCK /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #else /* This file defines the internal lock used by setlocale_null_r. It is a separate compilation unit, so that only one copy of it is present when linking statically. */ /* Prohibit renaming this symbol. */ # undef gl_get_setlocale_null_lock /* Macro for exporting a symbol (function, not variable) defined in this file, when compiled into a shared library. */ # ifndef DLL_EXPORTED # if HAVE_VISIBILITY /* Override the effect of the compiler option '-fvisibility=hidden'. */ # define DLL_EXPORTED __attribute__((__visibility__("default"))) # elif defined _WIN32 || defined __CYGWIN__ # define DLL_EXPORTED __declspec(dllexport) # else # define DLL_EXPORTED # endif # endif # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-initguard.h" /* The return type is a 'CRITICAL_SECTION *', not a 'glwthread_mutex_t *', because the latter is not guaranteed to be a stable ABI in the future. */ /* Make sure the function gets exported from DLLs. */ DLL_EXPORTED CRITICAL_SECTION *gl_get_setlocale_null_lock (void); static glwthread_initguard_t guard = GLWTHREAD_INITGUARD_INIT; static CRITICAL_SECTION lock; /* Returns the internal lock used by setlocale_null_r. */ CRITICAL_SECTION * gl_get_setlocale_null_lock (void) { if (!guard.done) { if (InterlockedIncrement (&guard.started) == 0) { /* This thread is the first one to need the lock. Initialize it. */ InitializeCriticalSection (&lock); guard.done = 1; } else { /* Don't let guard.started grow and wrap around. */ InterlockedDecrement (&guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!guard.done) Sleep (0); } } return &lock; } # elif HAVE_PTHREAD_API # include <pthread.h> static pthread_mutex_t mutex = PTHREAD_MUTEX_INITIALIZER; /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED pthread_mutex_t *gl_get_setlocale_null_lock (void); /* Returns the internal lock used by setlocale_null_r. */ pthread_mutex_t * gl_get_setlocale_null_lock (void) { return &mutex; } # elif HAVE_THREADS_H # include <threads.h> # include <stdlib.h> static int volatile init_needed = 1; static once_flag init_once = ONCE_FLAG_INIT; static mtx_t mutex; static void atomic_init (void) { if (mtx_init (&mutex, mtx_plain) != thrd_success) abort (); init_needed = 0; } /* Make sure the function gets exported from shared libraries. */ DLL_EXPORTED mtx_t *gl_get_setlocale_null_lock (void); /* Returns the internal lock used by setlocale_null_r. */ mtx_t * gl_get_setlocale_null_lock (void) { if (init_needed) call_once (&init_once, atomic_init); return &mutex; } # endif # if (defined _WIN32 || defined __CYGWIN__) && !defined _MSC_VER /* Make sure the '__declspec(dllimport)' in setlocale_null.c does not cause a link failure when no DLLs are involved. */ # if defined _WIN64 || defined _LP64 # define IMP(x) __imp_##x # else # define IMP(x) _imp__##x # endif void * IMP(gl_get_setlocale_null_lock) = &gl_get_setlocale_null_lock; # endif #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/cloexec.h��������������������������������������������������������������������������0000644�0000000�0000000�00000002755�14226564447�012474� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* cloexec.c - set or clear the close-on-exec descriptor flag Copyright (C) 2004, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <stdbool.h> /* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, or clear the flag if VALUE is false. Return 0 on success, or -1 on error with 'errno' set. Note that on MingW, this function does NOT protect DESC from being inherited into spawned children. Instead, either use dup_cloexec followed by closing the original DESC, or use interfaces such as open or pipe2 that accept flags like O_CLOEXEC to create DESC non-inheritable in the first place. */ int set_cloexec_flag (int desc, bool value); /* Duplicates a file handle FD, while marking the copy to be closed prior to exec or spawn. Returns -1 and sets errno if FD could not be duplicated. */ int dup_cloexec (int fd); �������������������recutils-1.9/lib/file-set.h�������������������������������������������������������������������������0000644�0000000�0000000�00000002307�14226564446�012552� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Very specialized set-of-files code. Copyright (C) 2007-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering, 2007. */ #include <sys/types.h> #include <sys/stat.h> #include <stdbool.h> #include "hash.h" extern void record_file (Hash_table *ht, char const *file, struct stat const *stats) #if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ __attribute__ ((__nonnull__ (2, 3))) #endif ; extern bool seen_file (Hash_table const *ht, char const *file, struct stat const *stats); �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/strncasecmp.c����������������������������������������������������������������������0000644�0000000�0000000�00000003601�14226564451�013351� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* strncasecmp.c -- case insensitive string comparator Copyright (C) 1998-1999, 2005-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <ctype.h> #include <limits.h> #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Compare no more than N bytes of strings S1 and S2, ignoring case, returning less than, equal to or greater than zero if S1 is lexicographically less than, equal to or greater than S2. Note: This function cannot work correctly in multibyte locales. */ int strncasecmp (const char *s1, const char *s2, size_t n) { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2 || n == 0) return 0; do { c1 = TOLOWER (*p1); c2 = TOLOWER (*p2); if (--n == 0 || c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } �������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/libc-config.h����������������������������������������������������������������������0000644�0000000�0000000�00000013400�14226564450�013205� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* System definitions for code taken from the GNU C Library Copyright 2017-2022 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program; if not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ /* This is intended to be a good-enough substitute for glibc system macros like those defined in <sys/cdefs.h>, so that Gnulib code shared with glibc can do this as the first #include: #ifndef _LIBC # include <libc-config.h> #endif When compiled as part of glibc this is a no-op; when compiled as part of Gnulib this includes Gnulib's <config.h> and defines macros that glibc library code would normally assume. Note: This header file MUST NOT be included by public header files of Gnulib. */ #include <config.h> /* On glibc this includes <features.h> and <sys/cdefs.h> and #defines _FEATURES_H, __WORDSIZE, and __set_errno. On FreeBSD 11 and DragonFlyBSD 5.9 it includes <sys/cdefs.h> which defines __nonnull. Elsewhere it is harmless. */ #include <errno.h> /* From glibc <errno.h>. */ #ifndef __set_errno # define __set_errno(val) (errno = (val)) #endif /* From glibc <features.h>. */ #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_MINOR__ # define __GNUC_PREREQ(maj, min) ((maj) < __GNUC__ + ((min) <= __GNUC_MINOR__)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif #ifndef __glibc_clang_prereq # if defined __clang_major__ && defined __clang_minor__ # ifdef __apple_build_version__ /* Apple for some reason renumbers __clang_major__ and __clang_minor__. Gnulib code uses only __glibc_clang_prereq (3, 5); map it to 6000000 <= __apple_build_version__. Support for other calls to __glibc_clang_prereq can be added here as needed. */ # define __glibc_clang_prereq(maj, min) \ ((maj) == 3 && (min) == 5 ? 6000000 <= __apple_build_version__ : 0) # else # define __glibc_clang_prereq(maj, min) \ ((maj) < __clang_major__ + ((min) <= __clang_minor__)) # endif # else # define __glibc_clang_prereq(maj, min) 0 # endif #endif #ifndef __attribute_nonnull__ /* <sys/cdefs.h> either does not exist, or is too old for Gnulib. Prepare to include <cdefs.h>, which is Gnulib's version of a more-recent glibc <sys/cdefs.h>. */ /* Define _FEATURES_H so that <cdefs.h> does not include <features.h>. */ # ifndef _FEATURES_H # define _FEATURES_H 1 # endif /* Define __GNULIB_CDEFS so that <cdefs.h> does not attempt to include nonexistent files. */ # define __GNULIB_CDEFS /* Undef the macros unconditionally defined by our copy of glibc <sys/cdefs.h>, so that they do not clash with any system-defined versions. */ # undef _SYS_CDEFS_H # undef __ASMNAME # undef __ASMNAME2 # undef __BEGIN_DECLS # undef __CONCAT # undef __END_DECLS # undef __HAVE_GENERIC_SELECTION # undef __LDBL_COMPAT # undef __LDBL_REDIR # undef __LDBL_REDIR1 # undef __LDBL_REDIR1_DECL # undef __LDBL_REDIR1_NTH # undef __LDBL_REDIR2_DECL # undef __LDBL_REDIR_DECL # undef __LDBL_REDIR_NTH # undef __LEAF # undef __LEAF_ATTR # undef __NTH # undef __NTHNL # undef __REDIRECT # undef __REDIRECT_LDBL # undef __REDIRECT_NTH # undef __REDIRECT_NTHNL # undef __REDIRECT_NTH_LDBL # undef __STRING # undef __THROW # undef __THROWNL # undef __attr_access # undef __attr_access_none # undef __attr_dealloc # undef __attr_dealloc_free # undef __attribute__ # undef __attribute_alloc_size__ # undef __attribute_artificial__ # undef __attribute_const__ # undef __attribute_deprecated__ # undef __attribute_deprecated_msg__ # undef __attribute_format_arg__ # undef __attribute_format_strfmon__ # undef __attribute_malloc__ # undef __attribute_noinline__ # undef __attribute_nonstring__ # undef __attribute_pure__ # undef __attribute_returns_twice__ # undef __attribute_used__ # undef __attribute_warn_unused_result__ # undef __bos # undef __bos0 # undef __errordecl # undef __extension__ # undef __extern_always_inline # undef __extern_inline # undef __flexarr # undef __fortify_function # undef __glibc_c99_flexarr_available # undef __glibc_has_attribute # undef __glibc_has_builtin # undef __glibc_has_extension # undef __glibc_macro_warning # undef __glibc_macro_warning1 # undef __glibc_objsize # undef __glibc_objsize0 # undef __glibc_unlikely # undef __inline # undef __ptr_t # undef __restrict # undef __restrict_arr # undef __va_arg_pack # undef __va_arg_pack_len # undef __warnattr /* Include our copy of glibc <sys/cdefs.h>. */ # include <cdefs.h> /* <cdefs.h> __inline is too pessimistic for non-GCC. */ # undef __inline # ifndef HAVE___INLINE # if 199901 <= __STDC_VERSION__ || defined inline # define __inline inline # else # define __inline # endif # endif #endif /* defined __glibc_likely */ /* A substitute for glibc <libc-symbols.h>, good enough for Gnulib. */ #define attribute_hidden #define libc_hidden_proto(name) #define libc_hidden_def(name) #define libc_hidden_weak(name) #define libc_hidden_ver(local, name) #define strong_alias(name, aliasname) #define weak_alias(name, aliasname) /* A substitute for glibc <shlib-compat.h>, good enough for Gnulib. */ #define SHLIB_COMPAT(lib, introduced, obsoleted) 0 #define compat_symbol(lib, local, symbol, version) extern int dummy #define versioned_symbol(lib, local, symbol, version) extern int dummy ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fatal-signal.c���������������������������������������������������������������������0000644�0000000�0000000�00000023677�14226564447�013415� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Emergency actions in case of a fatal signal. Copyright (C) 2003-2004, 2006-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "fatal-signal.h" #include <stdbool.h> #include <stdlib.h> #include <signal.h> #include <unistd.h> #include "glthread/lock.h" #include "thread-optim.h" #include "sig-handler.h" #define SIZEOF(a) (sizeof(a) / sizeof(a[0])) /* ========================================================================= */ /* The list of fatal signals. These are those signals whose default action is to terminate the process without a core dump, except SIGKILL - because it cannot be caught, SIGALRM SIGUSR1 SIGUSR2 SIGPOLL SIGIO SIGLOST - because applications often use them for their own purpose, SIGPROF SIGVTALRM - because they are used for profiling, SIGSTKFLT - because it is more similar to SIGFPE, SIGSEGV, SIGBUS, SIGSYS - because it is more similar to SIGABRT, SIGSEGV, SIGPWR - because it of too special use, SIGRTMIN...SIGRTMAX - because they are reserved for application use. plus SIGXCPU, SIGXFSZ - because they are quite similar to SIGTERM. */ static int fatal_signals[] = { /* ISO C 99 signals. */ #ifdef SIGINT SIGINT, #endif #ifdef SIGTERM SIGTERM, #endif /* POSIX:2001 signals. */ #ifdef SIGHUP SIGHUP, #endif #ifdef SIGPIPE SIGPIPE, #endif /* BSD signals. */ #ifdef SIGXCPU SIGXCPU, #endif #ifdef SIGXFSZ SIGXFSZ, #endif /* Native Windows signals. */ #ifdef SIGBREAK SIGBREAK, #endif 0 }; #define num_fatal_signals (SIZEOF (fatal_signals) - 1) /* Eliminate signals whose signal handler is SIG_IGN. */ static void init_fatal_signals (void) { /* This function is multithread-safe even without synchronization, because if two threads execute it simultaneously, the fatal_signals[] array will not change any more after the first of the threads has completed this function. */ static bool fatal_signals_initialized = false; if (!fatal_signals_initialized) { size_t i; for (i = 0; i < num_fatal_signals; i++) { struct sigaction action; if (sigaction (fatal_signals[i], NULL, &action) >= 0 && get_handler (&action) == SIG_IGN) fatal_signals[i] = -1; } fatal_signals_initialized = true; } } /* ========================================================================= */ typedef _GL_ASYNC_SAFE void (*action_t) (int sig); /* Type of an entry in the actions array. The 'action' field is accessed from within the fatal_signal_handler(), therefore we mark it as 'volatile'. */ typedef struct { volatile action_t action; } actions_entry_t; /* The registered cleanup actions. */ static actions_entry_t static_actions[32]; static actions_entry_t * volatile actions = static_actions; static sig_atomic_t volatile actions_count = 0; static size_t actions_allocated = SIZEOF (static_actions); /* The saved signal handlers. Size 32 would not be sufficient: On HP-UX, SIGXCPU = 33, SIGXFSZ = 34. */ static struct sigaction saved_sigactions[64]; /* Uninstall the handlers. */ static _GL_ASYNC_SAFE void uninstall_handlers (void) { size_t i; for (i = 0; i < num_fatal_signals; i++) if (fatal_signals[i] >= 0) { int sig = fatal_signals[i]; if (saved_sigactions[sig].sa_handler == SIG_IGN) saved_sigactions[sig].sa_handler = SIG_DFL; sigaction (sig, &saved_sigactions[sig], NULL); } } /* The signal handler. It gets called asynchronously. */ static _GL_ASYNC_SAFE void fatal_signal_handler (int sig) { for (;;) { /* Get the last registered cleanup action, in a reentrant way. */ action_t action; size_t n = actions_count; if (n == 0) break; n--; actions_count = n; action = actions[n].action; /* Execute the action. */ action (sig); } /* Now execute the signal's default action. If the signal being delivered was blocked, the re-raised signal would be delivered when this handler returns. But the way we install this handler, no signal is blocked, and the re-raised signal is delivered already during raise(). */ uninstall_handlers (); raise (sig); } /* Install the handlers. */ static void install_handlers (void) { size_t i; struct sigaction action; action.sa_handler = &fatal_signal_handler; /* If we get a fatal signal while executing fatal_signal_handler, enter fatal_signal_handler recursively, since it is reentrant. Hence no SA_RESETHAND. */ action.sa_flags = SA_NODEFER; sigemptyset (&action.sa_mask); for (i = 0; i < num_fatal_signals; i++) if (fatal_signals[i] >= 0) { int sig = fatal_signals[i]; if (!(sig < sizeof (saved_sigactions) / sizeof (saved_sigactions[0]))) abort (); sigaction (sig, &action, &saved_sigactions[sig]); } } /* Lock that makes at_fatal_signal multi-thread safe. */ gl_lock_define_initialized (static, at_fatal_signal_lock) /* Register a cleanup function to be executed when a catchable fatal signal occurs. */ int at_fatal_signal (action_t action) { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (at_fatal_signal_lock); static bool cleanup_initialized = false; if (!cleanup_initialized) { init_fatal_signals (); install_handlers (); cleanup_initialized = true; } int ret = 0; if (actions_count == actions_allocated) { /* Extend the actions array. Note that we cannot use xrealloc(), because then the cleanup() function could access an already deallocated array. */ actions_entry_t *old_actions = actions; size_t old_actions_allocated = actions_allocated; size_t new_actions_allocated = 2 * actions_allocated; actions_entry_t *new_actions = (actions_entry_t *) malloc (new_actions_allocated * sizeof (actions_entry_t)); if (new_actions == NULL) { ret = -1; goto done; } size_t k; /* Don't use memcpy() here, because memcpy takes non-volatile arguments and is therefore not guaranteed to complete all memory stores before the next statement. */ for (k = 0; k < old_actions_allocated; k++) new_actions[k] = old_actions[k]; actions = new_actions; actions_allocated = new_actions_allocated; /* Now we can free the old actions array. */ /* No, we can't do that. If fatal_signal_handler is running in a different thread and has already fetched the actions pointer (getting old_actions) but not yet accessed its n-th element, that thread may crash when accessing an element of the already freed old_actions array. */ #if 0 if (old_actions != static_actions) free (old_actions); #endif } /* The two uses of 'volatile' in the types above (and ISO C 99 section 5.1.2.3.(5)) ensure that we increment the actions_count only after the new action has been written to the memory location actions[actions_count]. */ actions[actions_count].action = action; actions_count++; done: if (mt) gl_lock_unlock (at_fatal_signal_lock); return ret; } /* ========================================================================= */ static sigset_t fatal_signal_set; static void do_init_fatal_signal_set (void) { size_t i; init_fatal_signals (); sigemptyset (&fatal_signal_set); for (i = 0; i < num_fatal_signals; i++) if (fatal_signals[i] >= 0) sigaddset (&fatal_signal_set, fatal_signals[i]); } /* Ensure that do_init_fatal_signal_set is called once only. */ gl_once_define(static, fatal_signal_set_once) static void init_fatal_signal_set (void) { gl_once (fatal_signal_set_once, do_init_fatal_signal_set); } /* Lock and counter that allow block_fatal_signals/unblock_fatal_signals pairs to occur in different threads and even overlap in time. */ gl_lock_define_initialized (static, fatal_signals_block_lock) static unsigned int fatal_signals_block_counter = 0; /* Temporarily delay the catchable fatal signals. */ void block_fatal_signals (void) { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (fatal_signals_block_lock); if (fatal_signals_block_counter++ == 0) { init_fatal_signal_set (); sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); } if (mt) gl_lock_unlock (fatal_signals_block_lock); } /* Stop delaying the catchable fatal signals. */ void unblock_fatal_signals (void) { bool mt = gl_multithreaded (); if (mt) gl_lock_lock (fatal_signals_block_lock); if (fatal_signals_block_counter == 0) /* There are more calls to unblock_fatal_signals() than to block_fatal_signals(). */ abort (); if (--fatal_signals_block_counter == 0) { init_fatal_signal_set (); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); } if (mt) gl_lock_unlock (fatal_signals_block_lock); } unsigned int get_fatal_signals (int signals[64]) { init_fatal_signal_set (); { int *p = signals; size_t i; for (i = 0; i < num_fatal_signals; i++) if (fatal_signals[i] >= 0) *p++ = fatal_signals[i]; return p - signals; } } const sigset_t * get_fatal_signal_set (void) { init_fatal_signal_set (); return &fatal_signal_set; } �����������������������������������������������������������������recutils-1.9/lib/lseek.c����������������������������������������������������������������������������0000644�0000000�0000000�00000005431�14226564450�012134� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* An lseek() function that detects pipes. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Windows platforms. */ /* Get GetFileType. */ # include <windows.h> /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif #else # include <sys/stat.h> #endif #include <errno.h> #undef lseek off_t rpl_lseek (int fd, off_t offset, int whence) { #if defined _WIN32 && ! defined __CYGWIN__ /* mingw lseek mistakenly succeeds on pipes, sockets, and terminals. */ HANDLE h = (HANDLE) _get_osfhandle (fd); if (h == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } if (GetFileType (h) != FILE_TYPE_DISK) { errno = ESPIPE; return -1; } #elif defined __APPLE__ && defined __MACH__ && defined SEEK_DATA if (whence == SEEK_DATA) { /* If OFFSET points to data, macOS lseek+SEEK_DATA returns the start S of the first data region that begins *after* OFFSET, where the region from OFFSET to S consists of possibly-empty data followed by a possibly-empty hole. To work around this portability glitch, check whether OFFSET is within data by using lseek+SEEK_HOLE, and if so return to OFFSET by using lseek+SEEK_SET. Also, contrary to the macOS documentation, lseek+SEEK_HOLE can fail with ENXIO if there are no holes on or after OFFSET. What a mess! */ off_t next_hole = lseek (fd, offset, SEEK_HOLE); if (next_hole < 0) return errno == ENXIO ? offset : next_hole; if (next_hole != offset) whence = SEEK_SET; } #else /* BeOS lseek mistakenly succeeds on pipes... */ struct stat statbuf; if (fstat (fd, &statbuf) < 0) return -1; if (!S_ISREG (statbuf.st_mode)) { errno = ESPIPE; return -1; } #endif #if _GL_WINDOWS_64_BIT_OFF_T || (defined __MINGW32__ && defined _FILE_OFFSET_BITS && (_FILE_OFFSET_BITS == 64)) return _lseeki64 (fd, offset, whence); #else return lseek (fd, offset, whence); #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/sys_file.in.h����������������������������������������������������������������������0000644�0000000�0000000�00000003664�14226564451�013267� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/file.h. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Richard W.M. Jones. */ #ifndef _@GUARD_PREFIX@_SYS_FILE_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SYS_FILE_H@ # @INCLUDE_NEXT@ @NEXT_SYS_FILE_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_FILE_H #define _@GUARD_PREFIX@_SYS_FILE_H #ifndef LOCK_SH /* Operations for the 'flock' call (same as Linux kernel constants). */ # define LOCK_SH 1 /* Shared lock. */ # define LOCK_EX 2 /* Exclusive lock. */ # define LOCK_UN 8 /* Unlock. */ /* Can be OR'd in to one of the above. */ # define LOCK_NB 4 /* Don't block when locking. */ #endif /* The definition of _GL_WARN_ON_USE is copied here. */ #if @GNULIB_FLOCK@ /* Apply or remove advisory locks on an open file. Return 0 if successful, otherwise -1 and errno set. */ # if !@HAVE_FLOCK@ extern int flock (int fd, int operation); # endif #elif defined GNULIB_POSIXCHECK # undef flock # if HAVE_RAW_DECL_FLOCK _GL_WARN_ON_USE (flock, "flock is unportable - " "use gnulib module flock for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SYS_FILE_H */ #endif /* _@GUARD_PREFIX@_SYS_FILE_H */ ����������������������������������������������������������������������������recutils-1.9/lib/acl-errno-valid.c������������������������������������������������������������������0000644�0000000�0000000�00000003131�14226564447�014011� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test whether ACLs are well supported on this system. Copyright 2013-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert. */ #include <config.h> #include <acl.h> #include <errno.h> /* Return true if errno value ERRNUM indicates that ACLs are well supported on this system. ERRNUM should be an errno value obtained after an ACL-related system call fails. */ bool acl_errno_valid (int errnum) { /* Recognize some common errors such as from an NFS mount that does not support ACLs, even when local drives do. */ switch (errnum) { case EBUSY: return false; case EINVAL: return false; #if defined __APPLE__ && defined __MACH__ case ENOENT: return false; #endif case ENOSYS: return false; #if defined ENOTSUP && ENOTSUP != EOPNOTSUPP # if ENOTSUP != ENOSYS /* Needed for the MS-Windows port of GNU Emacs. */ case ENOTSUP: return false; # endif #endif case EOPNOTSUPP: return false; default: return true; } } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/read-file.h������������������������������������������������������������������������0000644�0000000�0000000�00000002544�14226564450�012670� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* read-file.h -- read file contents into a string Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. Written by Simon Josefsson. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef READ_FILE_H #define READ_FILE_H /* Get size_t, free(). */ #include <stdlib.h> /* Get FILE. */ #include <stdio.h> /* Indicate that the file is treated as binary. */ #define RF_BINARY 0x1 /* Indicate that the file content contains sensitive information. */ #define RF_SENSITIVE 0x2 extern char *fread_file (FILE * stream, int flags, size_t * length) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; extern char *read_file (const char *filename, int flags, size_t * length) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; #endif /* READ_FILE_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/gl_array_list.c��������������������������������������������������������������������0000644�0000000�0000000�00000044244�14226564450�013671� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sequential list data type implemented by an array. Copyright (C) 2006-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2006. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "gl_array_list.h" #include <stdint.h> #include <stdlib.h> /* Get memcpy. */ #include <string.h> /* Checked size_t computations. */ #include "xsize.h" /* -------------------------- gl_list_t Data Type -------------------------- */ /* Concrete gl_list_impl type, valid for this file only. */ struct gl_list_impl { struct gl_list_impl_base base; /* An array of ALLOCATED elements, of which the first COUNT are used. 0 <= COUNT <= ALLOCATED. */ const void **elements; size_t count; size_t allocated; }; /* struct gl_list_node_impl doesn't exist here. The pointers are actually indices + 1. */ #define INDEX_TO_NODE(index) (gl_list_node_t)(uintptr_t)(size_t)((index) + 1) #define NODE_TO_INDEX(node) ((uintptr_t)(node) - 1) static gl_list_t gl_array_nx_create_empty (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates) { struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); if (list == NULL) return NULL; list->base.vtable = implementation; list->base.equals_fn = equals_fn; list->base.hashcode_fn = hashcode_fn; list->base.dispose_fn = dispose_fn; list->base.allow_duplicates = allow_duplicates; list->elements = NULL; list->count = 0; list->allocated = 0; return list; } static gl_list_t gl_array_nx_create (gl_list_implementation_t implementation, gl_listelement_equals_fn equals_fn, gl_listelement_hashcode_fn hashcode_fn, gl_listelement_dispose_fn dispose_fn, bool allow_duplicates, size_t count, const void **contents) { struct gl_list_impl *list = (struct gl_list_impl *) malloc (sizeof (struct gl_list_impl)); if (list == NULL) return NULL; list->base.vtable = implementation; list->base.equals_fn = equals_fn; list->base.hashcode_fn = hashcode_fn; list->base.dispose_fn = dispose_fn; list->base.allow_duplicates = allow_duplicates; if (count > 0) { if (size_overflow_p (xtimes (count, sizeof (const void *)))) goto fail; list->elements = (const void **) malloc (count * sizeof (const void *)); if (list->elements == NULL) goto fail; memcpy (list->elements, contents, count * sizeof (const void *)); } else list->elements = NULL; list->count = count; list->allocated = count; return list; fail: free (list); return NULL; } static size_t _GL_ATTRIBUTE_PURE gl_array_size (gl_list_t list) { return list->count; } static const void * _GL_ATTRIBUTE_PURE gl_array_node_value (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->count)) /* Invalid argument. */ abort (); return list->elements[index]; } static int gl_array_node_nx_set_value (gl_list_t list, gl_list_node_t node, const void *elt) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->count)) /* Invalid argument. */ abort (); list->elements[index] = elt; return 0; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_next_node (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->count)) /* Invalid argument. */ abort (); index++; if (index < list->count) return INDEX_TO_NODE (index); else return NULL; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_previous_node (gl_list_t list, gl_list_node_t node) { uintptr_t index = NODE_TO_INDEX (node); if (!(index < list->count)) /* Invalid argument. */ abort (); if (index > 0) return INDEX_TO_NODE (index - 1); else return NULL; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_first_node (gl_list_t list) { if (list->count > 0) return INDEX_TO_NODE (0); else return NULL; } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_last_node (gl_list_t list) { if (list->count > 0) return INDEX_TO_NODE (list->count - 1); else return NULL; } static const void * _GL_ATTRIBUTE_PURE gl_array_get_at (gl_list_t list, size_t position) { size_t count = list->count; if (!(position < count)) /* Invalid argument. */ abort (); return list->elements[position]; } static gl_list_node_t gl_array_nx_set_at (gl_list_t list, size_t position, const void *elt) { size_t count = list->count; if (!(position < count)) /* Invalid argument. */ abort (); list->elements[position] = elt; return INDEX_TO_NODE (position); } static size_t _GL_ATTRIBUTE_PURE gl_array_indexof_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { size_t count = list->count; if (!(start_index <= end_index && end_index <= count)) /* Invalid arguments. */ abort (); if (start_index < end_index) { gl_listelement_equals_fn equals = list->base.equals_fn; if (equals != NULL) { size_t i; for (i = start_index;;) { if (equals (elt, list->elements[i])) return i; i++; if (i == end_index) break; } } else { size_t i; for (i = start_index;;) { if (elt == list->elements[i]) return i; i++; if (i == end_index) break; } } } return (size_t)(-1); } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_search_from_to (gl_list_t list, size_t start_index, size_t end_index, const void *elt) { size_t index = gl_array_indexof_from_to (list, start_index, end_index, elt); return INDEX_TO_NODE (index); } /* Ensure that list->allocated > list->count. Return 0 upon success, -1 upon out-of-memory. */ static int grow (gl_list_t list) { size_t new_allocated; size_t memory_size; const void **memory; new_allocated = xtimes (list->allocated, 2); new_allocated = xsum (new_allocated, 1); memory_size = xtimes (new_allocated, sizeof (const void *)); if (size_overflow_p (memory_size)) /* Overflow, would lead to out of memory. */ return -1; memory = (const void **) realloc (list->elements, memory_size); if (memory == NULL) /* Out of memory. */ return -1; list->elements = memory; list->allocated = new_allocated; return 0; } static gl_list_node_t gl_array_nx_add_first (gl_list_t list, const void *elt) { size_t count = list->count; const void **elements; size_t i; if (count == list->allocated) if (grow (list) < 0) return NULL; elements = list->elements; for (i = count; i > 0; i--) elements[i] = elements[i - 1]; elements[0] = elt; list->count = count + 1; return INDEX_TO_NODE (0); } static gl_list_node_t gl_array_nx_add_last (gl_list_t list, const void *elt) { size_t count = list->count; if (count == list->allocated) if (grow (list) < 0) return NULL; list->elements[count] = elt; list->count = count + 1; return INDEX_TO_NODE (count); } static gl_list_node_t gl_array_nx_add_before (gl_list_t list, gl_list_node_t node, const void *elt) { size_t count = list->count; uintptr_t index = NODE_TO_INDEX (node); size_t position; const void **elements; size_t i; if (!(index < count)) /* Invalid argument. */ abort (); position = index; if (count == list->allocated) if (grow (list) < 0) return NULL; elements = list->elements; for (i = count; i > position; i--) elements[i] = elements[i - 1]; elements[position] = elt; list->count = count + 1; return INDEX_TO_NODE (position); } static gl_list_node_t gl_array_nx_add_after (gl_list_t list, gl_list_node_t node, const void *elt) { size_t count = list->count; uintptr_t index = NODE_TO_INDEX (node); size_t position; const void **elements; size_t i; if (!(index < count)) /* Invalid argument. */ abort (); position = index + 1; if (count == list->allocated) if (grow (list) < 0) return NULL; elements = list->elements; for (i = count; i > position; i--) elements[i] = elements[i - 1]; elements[position] = elt; list->count = count + 1; return INDEX_TO_NODE (position); } static gl_list_node_t gl_array_nx_add_at (gl_list_t list, size_t position, const void *elt) { size_t count = list->count; const void **elements; size_t i; if (!(position <= count)) /* Invalid argument. */ abort (); if (count == list->allocated) if (grow (list) < 0) return NULL; elements = list->elements; for (i = count; i > position; i--) elements[i] = elements[i - 1]; elements[position] = elt; list->count = count + 1; return INDEX_TO_NODE (position); } static bool gl_array_remove_node (gl_list_t list, gl_list_node_t node) { size_t count = list->count; uintptr_t index = NODE_TO_INDEX (node); size_t position; const void **elements; size_t i; if (!(index < count)) /* Invalid argument. */ abort (); position = index; elements = list->elements; if (list->base.dispose_fn != NULL) list->base.dispose_fn (elements[position]); for (i = position + 1; i < count; i++) elements[i - 1] = elements[i]; list->count = count - 1; return true; } static bool gl_array_remove_at (gl_list_t list, size_t position) { size_t count = list->count; const void **elements; size_t i; if (!(position < count)) /* Invalid argument. */ abort (); elements = list->elements; if (list->base.dispose_fn != NULL) list->base.dispose_fn (elements[position]); for (i = position + 1; i < count; i++) elements[i - 1] = elements[i]; list->count = count - 1; return true; } static bool gl_array_remove (gl_list_t list, const void *elt) { size_t position = gl_array_indexof_from_to (list, 0, list->count, elt); if (position == (size_t)(-1)) return false; else return gl_array_remove_at (list, position); } static void gl_array_list_free (gl_list_t list) { if (list->elements != NULL) { if (list->base.dispose_fn != NULL) { size_t count = list->count; if (count > 0) { gl_listelement_dispose_fn dispose = list->base.dispose_fn; const void **elements = list->elements; do dispose (*elements++); while (--count > 0); } } free (list->elements); } free (list); } /* --------------------- gl_list_iterator_t Data Type --------------------- */ static gl_list_iterator_t _GL_ATTRIBUTE_PURE gl_array_iterator (gl_list_t list) { gl_list_iterator_t result; result.vtable = list->base.vtable; result.list = list; result.count = list->count; result.p = list->elements + 0; result.q = list->elements + list->count; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; #endif return result; } static gl_list_iterator_t _GL_ATTRIBUTE_PURE gl_array_iterator_from_to (gl_list_t list, size_t start_index, size_t end_index) { gl_list_iterator_t result; if (!(start_index <= end_index && end_index <= list->count)) /* Invalid arguments. */ abort (); result.vtable = list->base.vtable; result.list = list; result.count = list->count; result.p = list->elements + start_index; result.q = list->elements + end_index; #if defined GCC_LINT || defined lint result.i = 0; result.j = 0; #endif return result; } static bool gl_array_iterator_next (gl_list_iterator_t *iterator, const void **eltp, gl_list_node_t *nodep) { gl_list_t list = iterator->list; if (iterator->count != list->count) { if (iterator->count != list->count + 1) /* Concurrent modifications were done on the list. */ abort (); /* The last returned element was removed. */ iterator->count--; iterator->p = (const void **) iterator->p - 1; iterator->q = (const void **) iterator->q - 1; } if (iterator->p < iterator->q) { const void **p = (const void **) iterator->p; *eltp = *p; if (nodep != NULL) *nodep = INDEX_TO_NODE (p - list->elements); iterator->p = p + 1; return true; } else return false; } static void gl_array_iterator_free (_GL_ATTRIBUTE_MAYBE_UNUSED gl_list_iterator_t *iterator) { } /* ---------------------- Sorted gl_list_t Data Type ---------------------- */ static size_t _GL_ATTRIBUTE_PURE gl_array_sortedlist_indexof_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t low, size_t high, const void *elt) { if (!(low <= high && high <= list->count)) /* Invalid arguments. */ abort (); if (low < high) { /* At each loop iteration, low < high; for indices < low the values are smaller than ELT; for indices >= high the values are greater than ELT. So, if the element occurs in the list, it is at low <= position < high. */ do { size_t mid = low + (high - low) / 2; /* low <= mid < high */ int cmp = compar (list->elements[mid], elt); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid; else /* cmp == 0 */ { /* We have an element equal to ELT at index MID. But we need the minimal such index. */ high = mid; /* At each loop iteration, low <= high and compar (list->elements[high], elt) == 0, and we know that the first occurrence of the element is at low <= position <= high. */ while (low < high) { size_t mid2 = low + (high - low) / 2; /* low <= mid2 < high */ int cmp2 = compar (list->elements[mid2], elt); if (cmp2 < 0) low = mid2 + 1; else if (cmp2 > 0) /* The list was not sorted. */ abort (); else /* cmp2 == 0 */ { if (mid2 == low) break; high = mid2 - 1; } } return low; } } while (low < high); /* Here low == high. */ } return (size_t)(-1); } static size_t _GL_ATTRIBUTE_PURE gl_array_sortedlist_indexof (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { return gl_array_sortedlist_indexof_from_to (list, compar, 0, list->count, elt); } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_sortedlist_search_from_to (gl_list_t list, gl_listelement_compar_fn compar, size_t low, size_t high, const void *elt) { size_t index = gl_array_sortedlist_indexof_from_to (list, compar, low, high, elt); return INDEX_TO_NODE (index); } static gl_list_node_t _GL_ATTRIBUTE_PURE gl_array_sortedlist_search (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { size_t index = gl_array_sortedlist_indexof_from_to (list, compar, 0, list->count, elt); return INDEX_TO_NODE (index); } static gl_list_node_t gl_array_sortedlist_nx_add (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { size_t count = list->count; size_t low = 0; size_t high = count; /* At each loop iteration, low <= high; for indices < low the values are smaller than ELT; for indices >= high the values are greater than ELT. */ while (low < high) { size_t mid = low + (high - low) / 2; /* low <= mid < high */ int cmp = compar (list->elements[mid], elt); if (cmp < 0) low = mid + 1; else if (cmp > 0) high = mid; else /* cmp == 0 */ { low = mid; break; } } return gl_array_nx_add_at (list, low, elt); } static bool gl_array_sortedlist_remove (gl_list_t list, gl_listelement_compar_fn compar, const void *elt) { size_t index = gl_array_sortedlist_indexof (list, compar, elt); if (index == (size_t)(-1)) return false; else return gl_array_remove_at (list, index); } const struct gl_list_implementation gl_array_list_implementation = { gl_array_nx_create_empty, gl_array_nx_create, gl_array_size, gl_array_node_value, gl_array_node_nx_set_value, gl_array_next_node, gl_array_previous_node, gl_array_first_node, gl_array_last_node, gl_array_get_at, gl_array_nx_set_at, gl_array_search_from_to, gl_array_indexof_from_to, gl_array_nx_add_first, gl_array_nx_add_last, gl_array_nx_add_before, gl_array_nx_add_after, gl_array_nx_add_at, gl_array_remove_node, gl_array_remove_at, gl_array_remove, gl_array_list_free, gl_array_iterator, gl_array_iterator_from_to, gl_array_iterator_next, gl_array_iterator_free, gl_array_sortedlist_search, gl_array_sortedlist_search_from_to, gl_array_sortedlist_indexof, gl_array_sortedlist_indexof_from_to, gl_array_sortedlist_nx_add, gl_array_sortedlist_remove }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stdio-write.c����������������������������������������������������������������������0000644�0000000�0000000�00000016706�14226564447�013320� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible FILE stream write function. Copyright (C) 2008-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <stdio.h> /* Replace these functions only if module 'nonblocking' or module 'sigpipe' is requested. */ #if GNULIB_NONBLOCKING || GNULIB_SIGPIPE /* On native Windows platforms, SIGPIPE does not exist. When write() is called on a pipe with no readers, WriteFile() fails with error GetLastError() = ERROR_NO_DATA, and write() in consequence fails with error EINVAL. This write() function is at the basis of the function which flushes the buffer of a FILE stream. */ # if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <signal.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA # if GNULIB_NONBLOCKING # define CLEAR_ERRNO \ errno = 0; # define HANDLE_ENOSPC \ if (errno == ENOSPC && ferror (stream)) \ { \ int fd = fileno (stream); \ if (fd >= 0) \ { \ HANDLE h = (HANDLE) _get_osfhandle (fd); \ if (GetFileType (h) == FILE_TYPE_PIPE) \ { \ /* h is a pipe or socket. */ \ DWORD state; \ if (GetNamedPipeHandleState (h, &state, NULL, NULL, \ NULL, NULL, 0) \ && (state & PIPE_NOWAIT) != 0) \ /* h is a pipe in non-blocking mode. \ Change errno from ENOSPC to EAGAIN. */ \ errno = EAGAIN; \ } \ } \ } \ else # else # define CLEAR_ERRNO # define HANDLE_ENOSPC # endif # if GNULIB_SIGPIPE # define CLEAR_LastError \ SetLastError (0); # define HANDLE_ERROR_NO_DATA \ if (GetLastError () == ERROR_NO_DATA && ferror (stream)) \ { \ int fd = fileno (stream); \ if (fd >= 0 \ && GetFileType ((HANDLE) _get_osfhandle (fd)) \ == FILE_TYPE_PIPE) \ { \ /* Try to raise signal SIGPIPE. */ \ raise (SIGPIPE); \ /* If it is currently blocked or ignored, change errno from \ EINVAL to EPIPE. */ \ errno = EPIPE; \ } \ } \ else # else # define CLEAR_LastError # define HANDLE_ERROR_NO_DATA # endif # define CALL_WITH_SIGPIPE_EMULATION(RETTYPE, EXPRESSION, FAILED) \ if (ferror (stream)) \ return (EXPRESSION); \ else \ { \ RETTYPE ret; \ CLEAR_ERRNO \ CLEAR_LastError \ ret = (EXPRESSION); \ if (FAILED) \ { \ HANDLE_ENOSPC \ HANDLE_ERROR_NO_DATA \ ; \ } \ return ret; \ } # if !REPLACE_PRINTF_POSIX /* avoid collision with printf.c */ int printf (const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfprintf (stdout, format, args); va_end (args); return retval; } # endif # if !REPLACE_FPRINTF_POSIX /* avoid collision with fprintf.c */ int fprintf (FILE *stream, const char *format, ...) { int retval; va_list args; va_start (args, format); retval = vfprintf (stream, format, args); va_end (args); return retval; } # endif # if !REPLACE_VPRINTF_POSIX /* avoid collision with vprintf.c */ int vprintf (const char *format, va_list args) { return vfprintf (stdout, format, args); } # endif # if !REPLACE_VFPRINTF_POSIX /* avoid collision with vfprintf.c */ int vfprintf (FILE *stream, const char *format, va_list args) #undef vfprintf { CALL_WITH_SIGPIPE_EMULATION (int, vfprintf (stream, format, args), ret == EOF) } # endif int putchar (int c) { return fputc (c, stdout); } int fputc (int c, FILE *stream) #undef fputc { CALL_WITH_SIGPIPE_EMULATION (int, fputc (c, stream), ret == EOF) } int fputs (const char *string, FILE *stream) #undef fputs { CALL_WITH_SIGPIPE_EMULATION (int, fputs (string, stream), ret == EOF) } int puts (const char *string) #undef puts { FILE *stream = stdout; CALL_WITH_SIGPIPE_EMULATION (int, puts (string), ret == EOF) } size_t fwrite (const void *ptr, size_t s, size_t n, FILE *stream) #undef fwrite { CALL_WITH_SIGPIPE_EMULATION (size_t, fwrite (ptr, s, n, stream), ret < n) } # endif #endif ����������������������������������������������������������recutils-1.9/lib/errno.in.h�������������������������������������������������������������������������0000644�0000000�0000000�00000016447�14226564447�012607� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A POSIX-like <errno.h>. Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_ERRNO_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_ERRNO_H@ #ifndef _@GUARD_PREFIX@_ERRNO_H #define _@GUARD_PREFIX@_ERRNO_H /* On native Windows platforms, many macros are not defined. */ # if defined _WIN32 && ! defined __CYGWIN__ /* These are the same values as defined by MSVC 10, for interoperability. */ # ifndef ENOMSG # define ENOMSG 122 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 111 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 121 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 134 # define GNULIB_defined_EPROTO 1 # endif # ifndef EBADMSG # define EBADMSG 104 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 132 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 129 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 117 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 106 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ECANCELED # define ECANCELED 105 # define GNULIB_defined_ECANCELED 1 # endif # ifndef EOWNERDEAD # define EOWNERDEAD 133 # define GNULIB_defined_EOWNERDEAD 1 # endif # ifndef ENOTRECOVERABLE # define ENOTRECOVERABLE 127 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EINPROGRESS # define EINPROGRESS 112 # define EALREADY 103 # define ENOTSOCK 128 # define EDESTADDRREQ 109 # define EMSGSIZE 115 # define EPROTOTYPE 136 # define ENOPROTOOPT 123 # define EPROTONOSUPPORT 135 # define EOPNOTSUPP 130 # define EAFNOSUPPORT 102 # define EADDRINUSE 100 # define EADDRNOTAVAIL 101 # define ENETDOWN 116 # define ENETUNREACH 118 # define ECONNRESET 108 # define ENOBUFS 119 # define EISCONN 113 # define ENOTCONN 126 # define ETIMEDOUT 138 # define ECONNREFUSED 107 # define ELOOP 114 # define EHOSTUNREACH 110 # define EWOULDBLOCK 140 # define GNULIB_defined_ESOCK 1 # endif # ifndef ETXTBSY # define ETXTBSY 139 # define ENODATA 120 /* not required by POSIX */ # define ENOSR 124 /* not required by POSIX */ # define ENOSTR 125 /* not required by POSIX */ # define ETIME 137 /* not required by POSIX */ # define EOTHER 131 /* not required by POSIX */ # define GNULIB_defined_ESTREAMS 1 # endif /* These are intentionally the same values as the WSA* error numbers, defined in <winsock2.h>. */ # define ESOCKTNOSUPPORT 10044 /* not required by POSIX */ # define EPFNOSUPPORT 10046 /* not required by POSIX */ # define ESHUTDOWN 10058 /* not required by POSIX */ # define ETOOMANYREFS 10059 /* not required by POSIX */ # define EHOSTDOWN 10064 /* not required by POSIX */ # define EPROCLIM 10067 /* not required by POSIX */ # define EUSERS 10068 /* not required by POSIX */ # define EDQUOT 10069 # define ESTALE 10070 # define EREMOTE 10071 /* not required by POSIX */ # define GNULIB_defined_EWINSOCK 1 # endif /* On OSF/1 5.1, when _XOPEN_SOURCE_EXTENDED is not defined, the macros EMULTIHOP, ENOLINK, EOVERFLOW are not defined. */ # if @EMULTIHOP_HIDDEN@ # define EMULTIHOP @EMULTIHOP_VALUE@ # define GNULIB_defined_EMULTIHOP 1 # endif # if @ENOLINK_HIDDEN@ # define ENOLINK @ENOLINK_VALUE@ # define GNULIB_defined_ENOLINK 1 # endif # if @EOVERFLOW_HIDDEN@ # define EOVERFLOW @EOVERFLOW_VALUE@ # define GNULIB_defined_EOVERFLOW 1 # endif /* On OpenBSD 4.0 and on native Windows, the macros ENOMSG, EIDRM, ENOLINK, EPROTO, EMULTIHOP, EBADMSG, EOVERFLOW, ENOTSUP, ECANCELED are not defined. Likewise, on NonStop Kernel, EDQUOT is not defined. Define them here. Values >= 2000 seem safe to use: Solaris ESTALE = 151, HP-UX EWOULDBLOCK = 246, IRIX EDQUOT = 1133. Note: When one of these systems defines some of these macros some day, binaries will have to be recompiled so that they recognizes the new errno values from the system. */ # ifndef ENOMSG # define ENOMSG 2000 # define GNULIB_defined_ENOMSG 1 # endif # ifndef EIDRM # define EIDRM 2001 # define GNULIB_defined_EIDRM 1 # endif # ifndef ENOLINK # define ENOLINK 2002 # define GNULIB_defined_ENOLINK 1 # endif # ifndef EPROTO # define EPROTO 2003 # define GNULIB_defined_EPROTO 1 # endif # ifndef EMULTIHOP # define EMULTIHOP 2004 # define GNULIB_defined_EMULTIHOP 1 # endif # ifndef EBADMSG # define EBADMSG 2005 # define GNULIB_defined_EBADMSG 1 # endif # ifndef EOVERFLOW # define EOVERFLOW 2006 # define GNULIB_defined_EOVERFLOW 1 # endif # ifndef ENOTSUP # define ENOTSUP 2007 # define GNULIB_defined_ENOTSUP 1 # endif # ifndef ENETRESET # define ENETRESET 2011 # define GNULIB_defined_ENETRESET 1 # endif # ifndef ECONNABORTED # define ECONNABORTED 2012 # define GNULIB_defined_ECONNABORTED 1 # endif # ifndef ESTALE # define ESTALE 2009 # define GNULIB_defined_ESTALE 1 # endif # ifndef EDQUOT # define EDQUOT 2010 # define GNULIB_defined_EDQUOT 1 # endif # ifndef ECANCELED # define ECANCELED 2008 # define GNULIB_defined_ECANCELED 1 # endif /* On many platforms, the macros EOWNERDEAD and ENOTRECOVERABLE are not defined. */ # ifndef EOWNERDEAD # if defined __sun /* Use the same values as defined for Solaris >= 8, for interoperability. */ # define EOWNERDEAD 58 # define ENOTRECOVERABLE 59 # elif defined _WIN32 && ! defined __CYGWIN__ /* We have a conflict here: pthreads-win32 defines these values differently than MSVC 10. It's hairy to decide which one to use. */ # if defined __MINGW32__ && !defined USE_WINDOWS_THREADS /* Use the same values as defined by pthreads-win32, for interoperability. */ # define EOWNERDEAD 43 # define ENOTRECOVERABLE 44 # else /* Use the same values as defined by MSVC 10, for interoperability. */ # define EOWNERDEAD 133 # define ENOTRECOVERABLE 127 # endif # else # define EOWNERDEAD 2013 # define ENOTRECOVERABLE 2014 # endif # define GNULIB_defined_EOWNERDEAD 1 # define GNULIB_defined_ENOTRECOVERABLE 1 # endif # ifndef EILSEQ # define EILSEQ 2015 # define GNULIB_defined_EILSEQ 1 # endif #endif /* _@GUARD_PREFIX@_ERRNO_H */ #endif /* _@GUARD_PREFIX@_ERRNO_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/isnand-nolibm.h��������������������������������������������������������������������0000644�0000000�0000000�00000002306�14226564450�013566� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if HAVE_ISNAND_IN_LIBC /* Get declaration of isnan macro. */ # include <math.h> # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. */ # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) # else # undef isnand # define isnand(x) isnan ((double)(x)) # endif #else /* Test whether X is a NaN. */ # undef isnand # define isnand rpl_isnand extern int isnand (double x); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stdio.in.h�������������������������������������������������������������������������0000644�0000000�0000000�00000172272�14226564451�012576� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <stdio.h>. Copyright (C) 2004, 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined __need_FILE || defined __need___FILE || defined _GL_ALREADY_INCLUDING_STDIO_H /* Special invocation convention: - Inside glibc header files. - On OSF/1 5.1 we have a sequence of nested includes <stdio.h> -> <getopt.h> -> <ctype.h> -> <sys/localedef.h> -> <sys/lc_core.h> -> <nl_types.h> -> <mesg.h> -> <stdio.h>. In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_STDIO_H #define _GL_ALREADY_INCLUDING_STDIO_H /* The include_next requires a split double-inclusion guard. */ #@INCLUDE_NEXT@ @NEXT_STDIO_H@ #undef _GL_ALREADY_INCLUDING_STDIO_H #ifndef _@GUARD_PREFIX@_STDIO_H #define _@GUARD_PREFIX@_STDIO_H /* Get va_list. Needed on many systems, including glibc 2.8. */ #include <stdarg.h> #include <stddef.h> /* Get off_t and ssize_t. Needed on many systems, including glibc 2.8 and eglibc 2.11.2. May also define off_t to a 64-bit type on native Windows. */ #include <sys/types.h> /* Solaris 10 and NetBSD 7.0 declare renameat in <unistd.h>, not in <stdio.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && (defined __sun || defined __NetBSD__) \ && ! defined __GLIBC__ # include <unistd.h> #endif /* Android 4.3 declares renameat in <sys/stat.h>, not in <stdio.h>. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_RENAMEAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ && ! defined __GLIBC__ # include <sys/stat.h> #endif /* MSVC declares 'perror' in <stdlib.h>, not in <stdio.h>. We must include it before we #define perror rpl_perror. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_PERROR@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include <stdlib.h> #endif /* MSVC declares 'remove' in <io.h>, not in <stdio.h>. We must include it before we #define remove rpl_remove. */ /* MSVC declares 'rename' in <io.h>, not in <stdio.h>. We must include it before we #define rename rpl_rename. */ /* But in any case avoid namespace pollution on glibc systems. */ #if (@GNULIB_REMOVE@ || @GNULIB_RENAME@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__) \ && ! defined __GLIBC__ # include <io.h> #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. */ #ifndef _GL_ATTRIBUTE_DEALLOC # if __GNUC__ >= 11 # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) # else # define _GL_ATTRIBUTE_DEALLOC(f, i) # endif #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The __-protected variants of the attributes 'format' and 'printf' are accepted by gcc versions 2.6.4 (effectively 2.7) and later. We enable _GL_ATTRIBUTE_FORMAT only if these are supported too, because gnulib and libintl do '#define printf __printf__' when they override the 'printf' function. */ #ifndef _GL_ATTRIBUTE_FORMAT # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7) || defined __clang__ # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) # else # define _GL_ATTRIBUTE_FORMAT(spec) /* empty */ # endif #endif /* An __attribute__ __format__ specifier for a function that takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD */ /* __gnu_printf__ is supported in GCC >= 4.4. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __gnu_printf__ #else # define _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD __printf__ #endif /* An __attribute__ __format__ specifier for a function that takes a format string and arguments, where the format string directives are the ones of the system printf(), rather than the ones standardized by ISO C99 and POSIX. _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM */ /* On mingw, Gnulib sets __USE_MINGW_ANSI_STDIO in order to get closer to the standards. The macro GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU indicates whether this change is effective. On older mingw, it is not. */ #if GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU # define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD #else # define _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM __printf__ #endif /* _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, formatstring_parameter, first_argument)) /* _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD, except that it indicates to GCC that the supported format string directives are the ones of the system printf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, formatstring_parameter, first_argument)) /* _GL_ATTRIBUTE_FORMAT_SCANF indicates to GCC that the function takes a format string and arguments, where the format string directives are the ones standardized by ISO C99 and POSIX. */ #if __GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4) # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__gnu_scanf__, formatstring_parameter, first_argument)) #else # define _GL_ATTRIBUTE_FORMAT_SCANF(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) #endif /* _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM is like _GL_ATTRIBUTE_FORMAT_SCANF, except that it indicates to GCC that the supported format string directives are the ones of the system scanf(), rather than the ones standardized by ISO C99 and POSIX. */ #define _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM(formatstring_parameter, first_argument) \ _GL_ATTRIBUTE_FORMAT ((__scanf__, formatstring_parameter, first_argument)) /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Macros for stringification. */ #define _GL_STDIO_STRINGIZE(token) #token #define _GL_STDIO_MACROEXPAND_AND_STRINGIZE(token) _GL_STDIO_STRINGIZE(token) /* When also using extern inline, suppress the use of static inline in standard headers of problematic Apple configurations, as Libc at least through Libc-825.26 (2013-04-09) mishandles it; see, e.g., <https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html>. Perhaps Apple will fix this some day. */ #if (defined _GL_EXTERN_INLINE_IN_USE && defined __APPLE__ \ && defined __GNUC__ && defined __STDC__) # undef putc_unlocked #endif #if @GNULIB_DPRINTF@ # if @REPLACE_DPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dprintf rpl_dprintf # endif _GL_FUNCDECL_RPL (dprintf, int, (int fd, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (dprintf, int, (int fd, const char *restrict format, ...)); # else # if !@HAVE_DPRINTF@ _GL_FUNCDECL_SYS (dprintf, int, (int fd, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (dprintf, int, (int fd, const char *restrict format, ...)); # endif _GL_CXXALIASWARN (dprintf); #elif defined GNULIB_POSIXCHECK # undef dprintf # if HAVE_RAW_DECL_DPRINTF _GL_WARN_ON_USE (dprintf, "dprintf is unportable - " "use gnulib module dprintf for portability"); # endif #endif #if @GNULIB_FCLOSE@ /* Close STREAM and its underlying file descriptor. */ # if @REPLACE_FCLOSE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fclose rpl_fclose # endif _GL_FUNCDECL_RPL (fclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fclose, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fclose, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fclose); # endif #elif defined GNULIB_POSIXCHECK # undef fclose /* Assume fclose is always declared. */ _GL_WARN_ON_USE (fclose, "fclose is not always POSIX compliant - " "use gnulib module fclose for portable POSIX compliance"); #endif #if @GNULIB_MDA_FCLOSEALL@ /* On native Windows, map 'fcloseall' to '_fcloseall', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fcloseall on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fcloseall # define fcloseall _fcloseall # endif _GL_CXXALIAS_MDA (fcloseall, int, (void)); # else # if @HAVE_DECL_FCLOSEALL@ # if defined __FreeBSD__ || defined __DragonFly__ _GL_CXXALIAS_SYS (fcloseall, void, (void)); # else _GL_CXXALIAS_SYS (fcloseall, int, (void)); # endif # endif # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_DECL_FCLOSEALL@ _GL_CXXALIASWARN (fcloseall); # endif #endif #if @GNULIB_FDOPEN@ # if @REPLACE_FDOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen rpl_fdopen # endif _GL_FUNCDECL_RPL (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); _GL_CXXALIAS_RPL (fdopen, FILE *, (int fd, const char *mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen _fdopen # endif _GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); #else # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fdopen /* For -Wmismatched-dealloc: Associate fdopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fdopen, FILE *, (int fd, const char *mode) _GL_ARG_NONNULL ((2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif # if defined GNULIB_POSIXCHECK # undef fdopen /* Assume fdopen is always declared. */ _GL_WARN_ON_USE (fdopen, "fdopen on native Windows platforms is not POSIX compliant - " "use gnulib module fdopen for portability"); # elif @GNULIB_MDA_FDOPEN@ /* On native Windows, map 'fdopen' to '_fdopen', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fdopen always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fdopen # define fdopen _fdopen # endif _GL_CXXALIAS_MDA (fdopen, FILE *, (int fd, const char *mode)); # else _GL_CXXALIAS_SYS (fdopen, FILE *, (int fd, const char *mode)); # endif _GL_CXXALIASWARN (fdopen); # endif #endif #if @GNULIB_FFLUSH@ /* Flush all pending data on STREAM according to POSIX rules. Both output and seekable input streams are supported. Note! LOSS OF DATA can occur if fflush is applied on an input stream that is _not_seekable_ or on an update stream that is _not_seekable_ and in which the most recent operation was input. Seekability can be tested with lseek(fileno(fp),0,SEEK_CUR). */ # if @REPLACE_FFLUSH@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fflush rpl_fflush # endif _GL_FUNCDECL_RPL (fflush, int, (FILE *gl_stream)); _GL_CXXALIAS_RPL (fflush, int, (FILE *gl_stream)); # else _GL_CXXALIAS_SYS (fflush, int, (FILE *gl_stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fflush); # endif #elif defined GNULIB_POSIXCHECK # undef fflush /* Assume fflush is always declared. */ _GL_WARN_ON_USE (fflush, "fflush is not always POSIX compliant - " "use gnulib module fflush for portable POSIX compliance"); #endif #if @GNULIB_FGETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgetc # define fgetc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (fgetc, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fgetc); # endif #endif #if @GNULIB_FGETS@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fgets # define fgets rpl_fgets # endif _GL_FUNCDECL_RPL (fgets, char *, (char *restrict s, int n, FILE *restrict stream) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (fgets, char *, (char *restrict s, int n, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fgets, char *, (char *restrict s, int n, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fgets); # endif #endif #if @GNULIB_MDA_FILENO@ /* On native Windows, map 'fileno' to '_fileno', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::fileno always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fileno # define fileno _fileno # endif _GL_CXXALIAS_MDA (fileno, int, (FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fileno, int, (FILE *restrict stream)); # endif _GL_CXXALIASWARN (fileno); #endif #if @GNULIB_FOPEN@ # if (@GNULIB_FOPEN@ && @REPLACE_FOPEN@) \ || (@GNULIB_FOPEN_GNU@ && @REPLACE_FOPEN_FOR_FOPEN_GNU@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fopen # define fopen rpl_fopen # endif _GL_FUNCDECL_RPL (fopen, FILE *, (const char *restrict filename, const char *restrict mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); _GL_CXXALIAS_RPL (fopen, FILE *, (const char *restrict filename, const char *restrict mode)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fopen, FILE *, (const char *restrict filename, const char *restrict mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif _GL_CXXALIAS_SYS (fopen, FILE *, (const char *restrict filename, const char *restrict mode)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fopen); # endif #else # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined fopen /* For -Wmismatched-dealloc: Associate fopen with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (fopen, FILE *, (const char *restrict filename, const char *restrict mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif # if defined GNULIB_POSIXCHECK # undef fopen /* Assume fopen is always declared. */ _GL_WARN_ON_USE (fopen, "fopen on native Windows platforms is not POSIX compliant - " "use gnulib module fopen for portability"); # endif #endif #if @GNULIB_FPRINTF_POSIX@ || @GNULIB_FPRINTF@ # if (@GNULIB_FPRINTF_POSIX@ && @REPLACE_FPRINTF@) \ || (@GNULIB_FPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fprintf rpl_fprintf # endif # define GNULIB_overrides_fprintf 1 # if @GNULIB_FPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (fprintf, int, (FILE *restrict fp, const char *restrict format, ...)); # else _GL_CXXALIAS_SYS (fprintf, int, (FILE *restrict fp, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fprintf); # endif #endif #if !@GNULIB_FPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_fprintf # undef fprintf # endif /* Assume fprintf is always declared. */ _GL_WARN_ON_USE (fprintf, "fprintf is not always POSIX compliant - " "use gnulib module fprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_FPURGE@ /* Discard all pending buffered I/O data on STREAM. STREAM must not be wide-character oriented. When discarding pending output, the file position is set back to where it was before the write calls. When discarding pending input, the file position is advanced to match the end of the previously read input. Return 0 if successful. Upon error, return -1 and set errno. */ # if @REPLACE_FPURGE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define fpurge rpl_fpurge # endif _GL_FUNCDECL_RPL (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fpurge, int, (FILE *gl_stream)); # else # if !@HAVE_DECL_FPURGE@ _GL_FUNCDECL_SYS (fpurge, int, (FILE *gl_stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fpurge, int, (FILE *gl_stream)); # endif _GL_CXXALIASWARN (fpurge); #elif defined GNULIB_POSIXCHECK # undef fpurge # if HAVE_RAW_DECL_FPURGE _GL_WARN_ON_USE (fpurge, "fpurge is not always present - " "use gnulib module fpurge for portability"); # endif #endif #if @GNULIB_FPUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputc # define fputc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (fputc, int, (int c, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fputc); # endif #endif #if @GNULIB_FPUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fputs # define fputs rpl_fputs # endif _GL_FUNCDECL_RPL (fputs, int, (const char *restrict string, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fputs, int, (const char *restrict string, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fputs, int, (const char *restrict string, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fputs); # endif #endif #if @GNULIB_FREAD@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fread # define fread rpl_fread # endif _GL_FUNCDECL_RPL (fread, size_t, (void *restrict ptr, size_t s, size_t n, FILE *restrict stream) _GL_ARG_NONNULL ((4))); _GL_CXXALIAS_RPL (fread, size_t, (void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fread, size_t, (void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fread); # endif #endif #if @GNULIB_FREOPEN@ # if @REPLACE_FREOPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef freopen # define freopen rpl_freopen # endif _GL_FUNCDECL_RPL (freopen, FILE *, (const char *restrict filename, const char *restrict mode, FILE *restrict stream) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (freopen, FILE *, (const char *restrict filename, const char *restrict mode, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (freopen, FILE *, (const char *restrict filename, const char *restrict mode, FILE *restrict stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (freopen); # endif #elif defined GNULIB_POSIXCHECK # undef freopen /* Assume freopen is always declared. */ _GL_WARN_ON_USE (freopen, "freopen on native Windows platforms is not POSIX compliant - " "use gnulib module freopen for portability"); #endif #if @GNULIB_FSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fscanf # define fscanf rpl_fscanf # endif _GL_FUNCDECL_RPL (fscanf, int, (FILE *restrict stream, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (fscanf, int, (FILE *restrict stream, const char *restrict format, ...)); # else _GL_CXXALIAS_SYS (fscanf, int, (FILE *restrict stream, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fscanf); # endif #endif /* Set up the following warnings, based on which modules are in use. GNU Coding Standards discourage the use of fseek, since it imposes an arbitrary limitation on some 32-bit hosts. Remember that the fseek module depends on the fseeko module, so we only have three cases to consider: 1. The developer is not using either module. Issue a warning under GNULIB_POSIXCHECK for both functions, to remind them that both functions have bugs on some systems. _GL_NO_LARGE_FILES has no impact on this warning. 2. The developer is using both modules. They may be unaware of the arbitrary limitations of fseek, so issue a warning under GNULIB_POSIXCHECK. On the other hand, they may be using both modules intentionally, so the developer can define _GL_NO_LARGE_FILES in the compilation units where the use of fseek is safe, to silence the warning. 3. The developer is using the fseeko module, but not fseek. Gnulib guarantees that fseek will still work around platform bugs in that case, but we presume that the developer is aware of the pitfalls of fseek and was trying to avoid it, so issue a warning even when GNULIB_POSIXCHECK is undefined. Again, _GL_NO_LARGE_FILES can be defined to silence the warning in particular compilation units. In C++ compilations with GNULIB_NAMESPACE, in order to avoid that fseek gets defined as a macro, it is recommended that the developer uses the fseek module, even if he is not calling the fseek function. Most gnulib clients that perform stream operations should fall into category 3. */ #if @GNULIB_FSEEK@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 2, above. */ # undef fseek # endif # if @REPLACE_FSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseek # define fseek rpl_fseek # endif _GL_FUNCDECL_RPL (fseek, int, (FILE *fp, long offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseek, int, (FILE *fp, long offset, int whence)); # else _GL_CXXALIAS_SYS (fseek, int, (FILE *fp, long offset, int whence)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fseek); # endif #endif #if @GNULIB_FSEEKO@ # if !@GNULIB_FSEEK@ && !defined _GL_NO_LARGE_FILES # define _GL_FSEEK_WARN /* Category 3, above. */ # undef fseek # endif # if @REPLACE_FSEEKO@ /* Provide an fseeko function that is aware of a preceding fflush(), and which detects pipes. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fseeko # define fseeko rpl_fseeko # endif _GL_FUNCDECL_RPL (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (fseeko, int, (FILE *fp, off_t offset, int whence)); # else # if ! @HAVE_DECL_FSEEKO@ _GL_FUNCDECL_SYS (fseeko, int, (FILE *fp, off_t offset, int whence) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (fseeko, int, (FILE *fp, off_t offset, int whence)); # endif _GL_CXXALIASWARN (fseeko); #elif defined GNULIB_POSIXCHECK # define _GL_FSEEK_WARN /* Category 1, above. */ # undef fseek # undef fseeko # if HAVE_RAW_DECL_FSEEKO _GL_WARN_ON_USE (fseeko, "fseeko is unportable - " "use gnulib module fseeko for portability"); # endif #endif #ifdef _GL_FSEEK_WARN # undef _GL_FSEEK_WARN /* Here, either fseek is undefined (but C89 guarantees that it is declared), or it is defined as rpl_fseek (declared above). */ _GL_WARN_ON_USE (fseek, "fseek cannot handle files larger than 4 GB " "on 32-bit platforms - " "use fseeko function for handling of large files"); #endif /* ftell, ftello. See the comments on fseek/fseeko. */ #if @GNULIB_FTELL@ # if defined GNULIB_POSIXCHECK && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 2, above. */ # undef ftell # endif # if @REPLACE_FTELL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftell # define ftell rpl_ftell # endif _GL_FUNCDECL_RPL (ftell, long, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftell, long, (FILE *fp)); # else _GL_CXXALIAS_SYS (ftell, long, (FILE *fp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ftell); # endif #endif #if @GNULIB_FTELLO@ # if !@GNULIB_FTELL@ && !defined _GL_NO_LARGE_FILES # define _GL_FTELL_WARN /* Category 3, above. */ # undef ftell # endif # if @REPLACE_FTELLO@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftello # define ftello rpl_ftello # endif _GL_FUNCDECL_RPL (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ftello, off_t, (FILE *fp)); # else # if ! @HAVE_DECL_FTELLO@ _GL_FUNCDECL_SYS (ftello, off_t, (FILE *fp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (ftello, off_t, (FILE *fp)); # endif _GL_CXXALIASWARN (ftello); #elif defined GNULIB_POSIXCHECK # define _GL_FTELL_WARN /* Category 1, above. */ # undef ftell # undef ftello # if HAVE_RAW_DECL_FTELLO _GL_WARN_ON_USE (ftello, "ftello is unportable - " "use gnulib module ftello for portability"); # endif #endif #ifdef _GL_FTELL_WARN # undef _GL_FTELL_WARN /* Here, either ftell is undefined (but C89 guarantees that it is declared), or it is defined as rpl_ftell (declared above). */ _GL_WARN_ON_USE (ftell, "ftell cannot handle files larger than 4 GB " "on 32-bit platforms - " "use ftello function for handling of large files"); #endif #if @GNULIB_FWRITE@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fwrite # define fwrite rpl_fwrite # endif _GL_FUNCDECL_RPL (fwrite, size_t, (const void *restrict ptr, size_t s, size_t n, FILE *restrict stream) _GL_ARG_NONNULL ((1, 4))); _GL_CXXALIAS_RPL (fwrite, size_t, (const void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (fwrite, size_t, (const void *restrict ptr, size_t s, size_t n, FILE *restrict stream)); /* Work around bug 11959 when fortifying glibc 2.4 through 2.15 <https://sourceware.org/bugzilla/show_bug.cgi?id=11959>, which sometimes causes an unwanted diagnostic for fwrite calls. This affects only function declaration attributes under certain versions of gcc and clang, and is not needed for C++. */ # if (0 < __USE_FORTIFY_LEVEL \ && __GLIBC__ == 2 && 4 <= __GLIBC_MINOR__ && __GLIBC_MINOR__ <= 15 \ && 3 < __GNUC__ + (4 <= __GNUC_MINOR__) \ && !defined __cplusplus) # undef fwrite # undef fwrite_unlocked extern size_t __REDIRECT (rpl_fwrite, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite); extern size_t __REDIRECT (rpl_fwrite_unlocked, (const void *__restrict, size_t, size_t, FILE *__restrict), fwrite_unlocked); # define fwrite rpl_fwrite # define fwrite_unlocked rpl_fwrite_unlocked # endif # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fwrite); # endif #endif #if @GNULIB_GETC@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getc # define getc rpl_fgetc # endif _GL_FUNCDECL_RPL (fgetc, int, (FILE *stream) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (getc, rpl_fgetc, int, (FILE *stream)); # else _GL_CXXALIAS_SYS (getc, int, (FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getc); # endif #endif #if @GNULIB_GETCHAR@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getchar # define getchar rpl_getchar # endif _GL_FUNCDECL_RPL (getchar, int, (void)); _GL_CXXALIAS_RPL (getchar, int, (void)); # else _GL_CXXALIAS_SYS (getchar, int, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (getchar); # endif #endif #if @GNULIB_GETDELIM@ /* Read input, up to (and including) the next occurrence of DELIMITER, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETDELIM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdelim # define getdelim rpl_getdelim # endif _GL_FUNCDECL_RPL (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 4))); _GL_CXXALIAS_RPL (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream)); # else # if !@HAVE_DECL_GETDELIM@ _GL_FUNCDECL_SYS (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 4))); # endif _GL_CXXALIAS_SYS (getdelim, ssize_t, (char **restrict lineptr, size_t *restrict linesize, int delimiter, FILE *restrict stream)); # endif _GL_CXXALIASWARN (getdelim); #elif defined GNULIB_POSIXCHECK # undef getdelim # if HAVE_RAW_DECL_GETDELIM _GL_WARN_ON_USE (getdelim, "getdelim is unportable - " "use gnulib module getdelim for portability"); # endif #endif #if @GNULIB_GETLINE@ /* Read a line, up to (and including) the next newline, from STREAM, store it in *LINEPTR (and NUL-terminate it). *LINEPTR is a pointer returned from malloc (or NULL), pointing to *LINESIZE bytes of space. It is realloc'd as necessary. Return the number of bytes read and stored at *LINEPTR (not including the NUL terminator), or -1 on error or EOF. */ # if @REPLACE_GETLINE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getline # define getline rpl_getline # endif _GL_FUNCDECL_RPL (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 3))); _GL_CXXALIAS_RPL (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream)); # else # if !@HAVE_DECL_GETLINE@ _GL_FUNCDECL_SYS (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (getline, ssize_t, (char **restrict lineptr, size_t *restrict linesize, FILE *restrict stream)); # endif # if @HAVE_DECL_GETLINE@ _GL_CXXALIASWARN (getline); # endif #elif defined GNULIB_POSIXCHECK # undef getline # if HAVE_RAW_DECL_GETLINE _GL_WARN_ON_USE (getline, "getline is unportable - " "use gnulib module getline for portability"); # endif #endif /* It is very rare that the developer ever has full control of stdin, so any use of gets warrants an unconditional warning; besides, C11 removed it. */ #undef gets #if HAVE_RAW_DECL_GETS && !defined __cplusplus _GL_WARN_ON_USE (gets, "gets is a security hole - use fgets instead"); #endif #if @GNULIB_MDA_GETW@ /* On native Windows, map 'getw' to '_getw', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::getw always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getw # define getw _getw # endif _GL_CXXALIAS_MDA (getw, int, (FILE *restrict stream)); # else _GL_CXXALIAS_SYS (getw, int, (FILE *restrict stream)); # endif _GL_CXXALIASWARN (getw); #endif #if @GNULIB_OBSTACK_PRINTF@ || @GNULIB_OBSTACK_PRINTF_POSIX@ struct obstack; /* Grow an obstack with formatted output. Return the number of bytes added to OBS. No trailing nul byte is added, and the object should be closed with obstack_finish before use. Upon memory allocation error, call obstack_alloc_failed_handler. Upon other error, return -1. */ # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_printf rpl_obstack_printf # endif _GL_FUNCDECL_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_printf, int, (struct obstack *obs, const char *format, ...)); # endif _GL_CXXALIASWARN (obstack_printf); # if @REPLACE_OBSTACK_PRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define obstack_vprintf rpl_obstack_vprintf # endif _GL_FUNCDECL_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # else # if !@HAVE_DECL_OBSTACK_PRINTF@ _GL_FUNCDECL_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (obstack_vprintf, int, (struct obstack *obs, const char *format, va_list args)); # endif _GL_CXXALIASWARN (obstack_vprintf); #endif #if @GNULIB_PCLOSE@ # if !@HAVE_PCLOSE@ _GL_FUNCDECL_SYS (pclose, int, (FILE *stream) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pclose, int, (FILE *stream)); _GL_CXXALIASWARN (pclose); #elif defined GNULIB_POSIXCHECK # undef pclose # if HAVE_RAW_DECL_PCLOSE _GL_WARN_ON_USE (pclose, "pclose is unportable - " "use gnulib module pclose for more portability"); # endif #endif #if @GNULIB_PERROR@ /* Print a message to standard error, describing the value of ERRNO, (if STRING is not NULL and not empty) prefixed with STRING and ": ", and terminated with a newline. */ # if @REPLACE_PERROR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define perror rpl_perror # endif _GL_FUNCDECL_RPL (perror, void, (const char *string)); _GL_CXXALIAS_RPL (perror, void, (const char *string)); # else _GL_CXXALIAS_SYS (perror, void, (const char *string)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (perror); # endif #elif defined GNULIB_POSIXCHECK # undef perror /* Assume perror is always declared. */ _GL_WARN_ON_USE (perror, "perror is not always POSIX compliant - " "use gnulib module perror for portability"); #endif #if @GNULIB_POPEN@ # if @REPLACE_POPEN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef popen # define popen rpl_popen # endif _GL_FUNCDECL_RPL (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); _GL_CXXALIAS_RPL (popen, FILE *, (const char *cmd, const char *mode)); # else # if !@HAVE_POPEN@ || __GNUC__ >= 11 _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); # endif _GL_CXXALIAS_SYS (popen, FILE *, (const char *cmd, const char *mode)); # endif _GL_CXXALIASWARN (popen); #else # if @GNULIB_PCLOSE@ && __GNUC__ >= 11 && !defined popen /* For -Wmismatched-dealloc: Associate popen with pclose or rpl_pclose. */ _GL_FUNCDECL_SYS (popen, FILE *, (const char *cmd, const char *mode) _GL_ARG_NONNULL ((1, 2)) _GL_ATTRIBUTE_DEALLOC (pclose, 1)); # endif # if defined GNULIB_POSIXCHECK # undef popen # if HAVE_RAW_DECL_POPEN _GL_WARN_ON_USE (popen, "popen is buggy on some platforms - " "use gnulib module popen or pipe for more portability"); # endif # endif #endif #if @GNULIB_PRINTF_POSIX@ || @GNULIB_PRINTF@ # if (@GNULIB_PRINTF_POSIX@ && @REPLACE_PRINTF@) \ || (@GNULIB_PRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if defined __GNUC__ || defined __clang__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) /* Don't break __attribute__((format(printf,M,N))). */ # define printf __printf__ # endif # if @GNULIB_PRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL_1 (__printf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_printf)) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL_1 (printf, __printf__, int, (const char *format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define printf rpl_printf # endif _GL_FUNCDECL_RPL (printf, int, (const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (printf, int, (const char *restrict format, ...)); # endif # define GNULIB_overrides_printf 1 # else _GL_CXXALIAS_SYS (printf, int, (const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (printf); # endif #endif #if !@GNULIB_PRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_printf # undef printf # endif /* Assume printf is always declared. */ _GL_WARN_ON_USE (printf, "printf is not always POSIX compliant - " "use gnulib module printf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_PUTC@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putc # define putc rpl_fputc # endif _GL_FUNCDECL_RPL (fputc, int, (int c, FILE *stream) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL_1 (putc, rpl_fputc, int, (int c, FILE *stream)); # else _GL_CXXALIAS_SYS (putc, int, (int c, FILE *stream)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (putc); # endif #endif #if @GNULIB_PUTCHAR@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putchar # define putchar rpl_putchar # endif _GL_FUNCDECL_RPL (putchar, int, (int c)); _GL_CXXALIAS_RPL (putchar, int, (int c)); # else _GL_CXXALIAS_SYS (putchar, int, (int c)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (putchar); # endif #endif #if @GNULIB_PUTS@ # if @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef puts # define puts rpl_puts # endif _GL_FUNCDECL_RPL (puts, int, (const char *string) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (puts, int, (const char *string)); # else _GL_CXXALIAS_SYS (puts, int, (const char *string)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (puts); # endif #endif #if @GNULIB_MDA_PUTW@ /* On native Windows, map 'putw' to '_putw', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::putw always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef putw # define putw _putw # endif _GL_CXXALIAS_MDA (putw, int, (int w, FILE *restrict stream)); # else _GL_CXXALIAS_SYS (putw, int, (int w, FILE *restrict stream)); # endif _GL_CXXALIASWARN (putw); #endif #if @GNULIB_REMOVE@ # if @REPLACE_REMOVE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remove # define remove rpl_remove # endif _GL_FUNCDECL_RPL (remove, int, (const char *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (remove, int, (const char *name)); # else _GL_CXXALIAS_SYS (remove, int, (const char *name)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (remove); # endif #elif defined GNULIB_POSIXCHECK # undef remove /* Assume remove is always declared. */ _GL_WARN_ON_USE (remove, "remove cannot handle directories on some platforms - " "use gnulib module remove for more portability"); #endif #if @GNULIB_RENAME@ # if @REPLACE_RENAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rename # define rename rpl_rename # endif _GL_FUNCDECL_RPL (rename, int, (const char *old_filename, const char *new_filename) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (rename, int, (const char *old_filename, const char *new_filename)); # else _GL_CXXALIAS_SYS (rename, int, (const char *old_filename, const char *new_filename)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (rename); # endif #elif defined GNULIB_POSIXCHECK # undef rename /* Assume rename is always declared. */ _GL_WARN_ON_USE (rename, "rename is buggy on some platforms - " "use gnulib module rename for more portability"); #endif #if @GNULIB_RENAMEAT@ # if @REPLACE_RENAMEAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef renameat # define renameat rpl_renameat # endif _GL_FUNCDECL_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # else # if !@HAVE_RENAMEAT@ _GL_FUNCDECL_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (renameat, int, (int fd1, char const *file1, int fd2, char const *file2)); # endif _GL_CXXALIASWARN (renameat); #elif defined GNULIB_POSIXCHECK # undef renameat # if HAVE_RAW_DECL_RENAMEAT _GL_WARN_ON_USE (renameat, "renameat is not portable - " "use gnulib module renameat for portability"); # endif #endif #if @GNULIB_SCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if defined __GNUC__ || defined __clang__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf /* Don't break __attribute__((format(scanf,M,N))). */ # define scanf __scanf__ # endif _GL_FUNCDECL_RPL_1 (__scanf__, int, (const char *restrict format, ...) __asm__ (@ASM_SYMBOL_PREFIX@ _GL_STDIO_MACROEXPAND_AND_STRINGIZE(rpl_scanf)) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL_1 (scanf, __scanf__, int, (const char *restrict format, ...)); # else # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef scanf # define scanf rpl_scanf # endif _GL_FUNCDECL_RPL (scanf, int, (const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 2) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (scanf, int, (const char *restrict format, ...)); # endif # else _GL_CXXALIAS_SYS (scanf, int, (const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (scanf); # endif #endif #if @GNULIB_SNPRINTF@ # if @REPLACE_SNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define snprintf rpl_snprintf # endif # define GNULIB_overrides_snprintf 1 _GL_FUNCDECL_RPL (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...)); # else # if !@HAVE_DECL_SNPRINTF@ _GL_FUNCDECL_SYS (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 4) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (snprintf, int, (char *restrict str, size_t size, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (snprintf); # endif #elif defined GNULIB_POSIXCHECK # undef snprintf # if HAVE_RAW_DECL_SNPRINTF _GL_WARN_ON_USE (snprintf, "snprintf is unportable - " "use gnulib module snprintf for portability"); # endif #endif /* Some people would argue that all sprintf uses should be warned about (for example, OpenBSD issues a link warning for it), since it can cause security holes due to buffer overruns. However, we believe that sprintf can be used safely, and is more efficient than snprintf in those safe cases; and as proof of our belief, we use sprintf in several gnulib modules. So this header intentionally avoids adding a warning to sprintf except when GNULIB_POSIXCHECK is defined. */ #if @GNULIB_SPRINTF_POSIX@ # if @REPLACE_SPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define sprintf rpl_sprintf # endif # define GNULIB_overrides_sprintf 1 _GL_FUNCDECL_RPL (sprintf, int, (char *restrict str, const char *restrict format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (sprintf, int, (char *restrict str, const char *restrict format, ...)); # else _GL_CXXALIAS_SYS (sprintf, int, (char *restrict str, const char *restrict format, ...)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sprintf); # endif #elif defined GNULIB_POSIXCHECK # undef sprintf /* Assume sprintf is always declared. */ _GL_WARN_ON_USE (sprintf, "sprintf is not always POSIX compliant - " "use gnulib module sprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_MDA_TEMPNAM@ /* On native Windows, map 'tempnam' to '_tempnam', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::tempnam always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tempnam # define tempnam _tempnam # endif _GL_CXXALIAS_MDA (tempnam, char *, (const char *dir, const char *prefix)); # else _GL_CXXALIAS_SYS (tempnam, char *, (const char *dir, const char *prefix)); # endif _GL_CXXALIASWARN (tempnam); #endif #if @GNULIB_TMPFILE@ # if @REPLACE_TMPFILE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define tmpfile rpl_tmpfile # endif _GL_FUNCDECL_RPL (tmpfile, FILE *, (void) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); _GL_CXXALIAS_RPL (tmpfile, FILE *, (void)); # else # if __GNUC__ >= 11 /* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (tmpfile, FILE *, (void) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif _GL_CXXALIAS_SYS (tmpfile, FILE *, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (tmpfile); # endif #else # if @GNULIB_FCLOSE@ && __GNUC__ >= 11 && !defined tmpfile /* For -Wmismatched-dealloc: Associate tmpfile with fclose or rpl_fclose. */ _GL_FUNCDECL_SYS (tmpfile, FILE *, (void) _GL_ATTRIBUTE_DEALLOC (fclose, 1)); # endif # if defined GNULIB_POSIXCHECK # undef tmpfile # if HAVE_RAW_DECL_TMPFILE _GL_WARN_ON_USE (tmpfile, "tmpfile is not usable on mingw - " "use gnulib module tmpfile for portability"); # endif # endif #endif #if @GNULIB_VASPRINTF@ /* Write formatted output to a string dynamically allocated with malloc(). If the memory allocation succeeds, store the address of the string in *RESULT and return the number of resulting bytes, excluding the trailing NUL. Upon memory allocation error, or some other error, return -1. */ # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define asprintf rpl_asprintf # endif # define GNULIB_overrides_asprintf _GL_FUNCDECL_RPL (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (asprintf, int, (char **result, const char *format, ...)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (asprintf, int, (char **result, const char *format, ...) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 3) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (asprintf, int, (char **result, const char *format, ...)); # endif _GL_CXXALIASWARN (asprintf); # if @REPLACE_VASPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vasprintf rpl_vasprintf # endif # define GNULIB_overrides_vasprintf 1 _GL_FUNCDECL_RPL (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vasprintf, int, (char **result, const char *format, va_list args)); # else # if !@HAVE_VASPRINTF@ _GL_FUNCDECL_SYS (vasprintf, int, (char **result, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (vasprintf, int, (char **result, const char *format, va_list args)); # endif _GL_CXXALIASWARN (vasprintf); #endif #if @GNULIB_VDPRINTF@ # if @REPLACE_VDPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vdprintf rpl_vdprintf # endif _GL_FUNCDECL_RPL (vdprintf, int, (int fd, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (vdprintf, int, (int fd, const char *restrict format, va_list args)); # else # if !@HAVE_VDPRINTF@ _GL_FUNCDECL_SYS (vdprintf, int, (int fd, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((2))); # endif /* Need to cast, because on Solaris, the third parameter will likely be __va_list args. */ _GL_CXXALIAS_SYS_CAST (vdprintf, int, (int fd, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vdprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vdprintf # if HAVE_RAW_DECL_VDPRINTF _GL_WARN_ON_USE (vdprintf, "vdprintf is unportable - " "use gnulib module vdprintf for portability"); # endif #endif #if @GNULIB_VFPRINTF_POSIX@ || @GNULIB_VFPRINTF@ # if (@GNULIB_VFPRINTF_POSIX@ && @REPLACE_VFPRINTF@) \ || (@GNULIB_VFPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vfprintf rpl_vfprintf # endif # define GNULIB_overrides_vfprintf 1 # if @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); # else _GL_FUNCDECL_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_RPL (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vfprintf, int, (FILE *restrict fp, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vfprintf); # endif #endif #if !@GNULIB_VFPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vfprintf # undef vfprintf # endif /* Assume vfprintf is always declared. */ _GL_WARN_ON_USE (vfprintf, "vfprintf is not always POSIX compliant - " "use gnulib module vfprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VFSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vfscanf # define vfscanf rpl_vfscanf # endif _GL_FUNCDECL_RPL (vfscanf, int, (FILE *restrict stream, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vfscanf, int, (FILE *restrict stream, const char *restrict format, va_list args)); # else _GL_CXXALIAS_SYS (vfscanf, int, (FILE *restrict stream, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vfscanf); # endif #endif #if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VPRINTF@ # if (@GNULIB_VPRINTF_POSIX@ && @REPLACE_VPRINTF@) \ || (@GNULIB_VPRINTF@ && @REPLACE_STDIO_WRITE_FUNCS@ && (@GNULIB_STDIO_H_NONBLOCKING@ || @GNULIB_STDIO_H_SIGPIPE@)) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vprintf rpl_vprintf # endif # define GNULIB_overrides_vprintf 1 # if @GNULIB_VPRINTF_POSIX@ || @GNULIB_VFPRINTF_POSIX@ _GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (1, 0) _GL_ARG_NONNULL ((1))); # else _GL_FUNCDECL_RPL (vprintf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_RPL (vprintf, int, (const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the second parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vprintf, int, (const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vprintf); # endif #endif #if !@GNULIB_VPRINTF_POSIX@ && defined GNULIB_POSIXCHECK # if !GNULIB_overrides_vprintf # undef vprintf # endif /* Assume vprintf is always declared. */ _GL_WARN_ON_USE (vprintf, "vprintf is not always POSIX compliant - " "use gnulib module vprintf-posix for portable " "POSIX compliance"); #endif #if @GNULIB_VSCANF@ # if @REPLACE_STDIO_READ_FUNCS@ && @GNULIB_STDIO_H_NONBLOCKING@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef vscanf # define vscanf rpl_vscanf # endif _GL_FUNCDECL_RPL (vscanf, int, (const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_SCANF_SYSTEM (1, 0) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (vscanf, int, (const char *restrict format, va_list args)); # else _GL_CXXALIAS_SYS (vscanf, int, (const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vscanf); # endif #endif #if @GNULIB_VSNPRINTF@ # if @REPLACE_VSNPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsnprintf rpl_vsnprintf # endif # define GNULIB_overrides_vsnprintf 1 _GL_FUNCDECL_RPL (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3))); _GL_CXXALIAS_RPL (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args)); # else # if !@HAVE_DECL_VSNPRINTF@ _GL_FUNCDECL_SYS (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (3, 0) _GL_ARG_NONNULL ((3))); # endif _GL_CXXALIAS_SYS (vsnprintf, int, (char *restrict str, size_t size, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vsnprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vsnprintf # if HAVE_RAW_DECL_VSNPRINTF _GL_WARN_ON_USE (vsnprintf, "vsnprintf is unportable - " "use gnulib module vsnprintf for portability"); # endif #endif #if @GNULIB_VSPRINTF_POSIX@ # if @REPLACE_VSPRINTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define vsprintf rpl_vsprintf # endif # define GNULIB_overrides_vsprintf 1 _GL_FUNCDECL_RPL (vsprintf, int, (char *restrict str, const char *restrict format, va_list args) _GL_ATTRIBUTE_FORMAT_PRINTF_STANDARD (2, 0) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (vsprintf, int, (char *restrict str, const char *restrict format, va_list args)); # else /* Need to cast, because on Solaris, the third parameter is __va_list args and GCC's fixincludes did not change this to __gnuc_va_list. */ _GL_CXXALIAS_SYS_CAST (vsprintf, int, (char *restrict str, const char *restrict format, va_list args)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (vsprintf); # endif #elif defined GNULIB_POSIXCHECK # undef vsprintf /* Assume vsprintf is always declared. */ _GL_WARN_ON_USE (vsprintf, "vsprintf is not always POSIX compliant - " "use gnulib module vsprintf-posix for portable " "POSIX compliance"); #endif #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif /* _@GUARD_PREFIX@_STDIO_H */ #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/localcharset.c���������������������������������������������������������������������0000644�0000000�0000000�00000115722�14226564450�013502� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Determine a canonical name for the current locale's character encoding. Copyright (C) 2000-2006, 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ #include <config.h> /* Specification. */ #include "localcharset.h" #include <stddef.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #if defined __APPLE__ && defined __MACH__ && HAVE_LANGINFO_CODESET # define DARWIN7 /* Darwin 7 or newer, i.e. Mac OS X 10.3 or newer */ #endif #if defined _WIN32 && !defined __CYGWIN__ # define WINDOWS_NATIVE # include <locale.h> #endif #if defined __EMX__ /* Assume EMX program runs on OS/2, even if compiled under DOS. */ # ifndef OS2 # define OS2 # endif #endif #if !defined WINDOWS_NATIVE # if HAVE_LANGINFO_CODESET # include <langinfo.h> # else # if 0 /* see comment regarding use of setlocale(), below */ # include <locale.h> # endif # endif # ifdef __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> # endif #elif defined WINDOWS_NATIVE # define WIN32_LEAN_AND_MEAN # include <windows.h> /* For the use of setlocale() below, the Gnulib override in setlocale.c is not needed; see the platform lists in setlocale_null.m4. */ # undef setlocale #endif #if defined OS2 # define INCL_DOS # include <os2.h> #endif /* For MB_CUR_MAX_L */ #if defined DARWIN7 # include <xlocale.h> #endif #if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 /* On these platforms, we use a mapping from non-canonical encoding name to GNU canonical encoding name. */ /* With glibc-2.1 or newer, we don't need any canonicalization, because glibc has iconv and both glibc and libiconv support all GNU canonical names directly. */ # if !((defined __GNU_LIBRARY__ && __GLIBC__ >= 2) || defined __UCLIBC__) struct table_entry { const char alias[11+1]; const char canonical[11+1]; }; /* Table of platform-dependent mappings, sorted in ascending order. */ static const struct table_entry alias_table[] = { # if defined __FreeBSD__ /* FreeBSD */ /*{ "ARMSCII-8", "ARMSCII-8" },*/ { "Big5", "BIG5" }, { "C", "ASCII" }, /*{ "CP1131", "CP1131" },*/ /*{ "CP1251", "CP1251" },*/ /*{ "CP866", "CP866" },*/ /*{ "GB18030", "GB18030" },*/ /*{ "GB2312", "GB2312" },*/ /*{ "GBK", "GBK" },*/ /*{ "ISCII-DEV", "?" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-9", "ISO-8859-9" }, /*{ "KOI8-R", "KOI8-R" },*/ /*{ "KOI8-U", "KOI8-U" },*/ { "SJIS", "SHIFT_JIS" }, { "US-ASCII", "ASCII" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" } # define alias_table_defined # endif # if defined __NetBSD__ /* NetBSD */ { "646", "ASCII" }, /*{ "ARMSCII-8", "ARMSCII-8" },*/ /*{ "BIG5", "BIG5" },*/ { "Big5-HKSCS", "BIG5-HKSCS" }, /*{ "CP1251", "CP1251" },*/ /*{ "CP866", "CP866" },*/ /*{ "GB18030", "GB18030" },*/ /*{ "GB2312", "GB2312" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, /*{ "KOI8-R", "KOI8-R" },*/ /*{ "KOI8-U", "KOI8-U" },*/ /*{ "PT154", "PT154" },*/ { "SJIS", "SHIFT_JIS" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" } # define alias_table_defined # endif # if defined __OpenBSD__ /* OpenBSD */ { "646", "ASCII" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "US-ASCII", "ASCII" } # define alias_table_defined # endif # if defined __APPLE__ && defined __MACH__ /* Mac OS X */ /* Darwin 7.5 has nl_langinfo(CODESET), but sometimes its value is useless: - It returns the empty string when LANG is set to a locale of the form ll_CC, although ll_CC/LC_CTYPE is a symlink to an UTF-8 LC_CTYPE file. - The environment variables LANG, LC_CTYPE, LC_ALL are not set by the system; nl_langinfo(CODESET) returns "US-ASCII" in this case. - The documentation says: "... all code that calls BSD system routines should ensure that the const *char parameters of these routines are in UTF-8 encoding. All BSD system functions expect their string parameters to be in UTF-8 encoding and nothing else." It also says "An additional caveat is that string parameters for files, paths, and other file-system entities must be in canonical UTF-8. In a canonical UTF-8 Unicode string, all decomposable characters are decomposed ..." but this is not true: You can pass non-decomposed UTF-8 strings to file system functions, and it is the OS which will convert them to decomposed UTF-8 before accessing the file system. - The Apple Terminal application displays UTF-8 by default. - However, other applications are free to use different encodings: - xterm uses ISO-8859-1 by default. - TextEdit uses MacRoman by default. We prefer UTF-8 over decomposed UTF-8-MAC because one should minimize the use of decomposed Unicode. Unfortunately, through the Darwin file system, decomposed UTF-8 strings are leaked into user space nevertheless. Then there are also the locales with encodings other than US-ASCII and UTF-8. These locales can be occasionally useful to users (e.g. when grepping through ISO-8859-1 encoded text files), when all their file names are in US-ASCII. */ { "ARMSCII-8", "ARMSCII-8" }, { "Big5", "BIG5" }, { "Big5HKSCS", "BIG5-HKSCS" }, { "CP1131", "CP1131" }, { "CP1251", "CP1251" }, { "CP866", "CP866" }, { "CP949", "CP949" }, { "GB18030", "GB18030" }, { "GB2312", "GB2312" }, { "GBK", "GBK" }, /*{ "ISCII-DEV", "?" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-9", "ISO-8859-9" }, { "KOI8-R", "KOI8-R" }, { "KOI8-U", "KOI8-U" }, { "PT154", "PT154" }, { "SJIS", "SHIFT_JIS" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" } # define alias_table_defined # endif # if defined _AIX /* AIX */ /*{ "GBK", "GBK" },*/ { "IBM-1046", "CP1046" }, { "IBM-1124", "CP1124" }, { "IBM-1129", "CP1129" }, { "IBM-1252", "CP1252" }, { "IBM-850", "CP850" }, { "IBM-856", "CP856" }, { "IBM-921", "ISO-8859-13" }, { "IBM-922", "CP922" }, { "IBM-932", "CP932" }, { "IBM-943", "CP943" }, { "IBM-eucCN", "GB2312" }, { "IBM-eucJP", "EUC-JP" }, { "IBM-eucKR", "EUC-KR" }, { "IBM-eucTW", "EUC-TW" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-6", "ISO-8859-6" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "TIS-620", "TIS-620" }, /*{ "UTF-8", "UTF-8" },*/ { "big5", "BIG5" } # define alias_table_defined # endif # if defined __hpux /* HP-UX */ { "SJIS", "SHIFT_JIS" }, { "arabic8", "HP-ARABIC8" }, { "big5", "BIG5" }, { "cp1251", "CP1251" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" }, { "gb18030", "GB18030" }, { "greek8", "HP-GREEK8" }, { "hebrew8", "HP-HEBREW8" }, { "hkbig5", "BIG5-HKSCS" }, { "hp15CN", "GB2312" }, { "iso88591", "ISO-8859-1" }, { "iso885913", "ISO-8859-13" }, { "iso885915", "ISO-8859-15" }, { "iso88592", "ISO-8859-2" }, { "iso88594", "ISO-8859-4" }, { "iso88595", "ISO-8859-5" }, { "iso88596", "ISO-8859-6" }, { "iso88597", "ISO-8859-7" }, { "iso88598", "ISO-8859-8" }, { "iso88599", "ISO-8859-9" }, { "kana8", "HP-KANA8" }, { "koi8r", "KOI8-R" }, { "roman8", "HP-ROMAN8" }, { "tis620", "TIS-620" }, { "turkish8", "HP-TURKISH8" }, { "utf8", "UTF-8" } # define alias_table_defined # endif # if defined __sgi /* IRIX */ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-9", "ISO-8859-9" }, { "eucCN", "GB2312" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" } # define alias_table_defined # endif # if defined __osf__ /* OSF/1 */ /*{ "GBK", "GBK" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "KSC5601", "CP949" }, { "SJIS", "SHIFT_JIS" }, { "TACTIS", "TIS-620" }, /*{ "UTF-8", "UTF-8" },*/ { "big5", "BIG5" }, { "cp850", "CP850" }, { "dechanyu", "DEC-HANYU" }, { "dechanzi", "GB2312" }, { "deckanji", "DEC-KANJI" }, { "deckorean", "EUC-KR" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW", "EUC-TW" }, { "sdeckanji", "EUC-JP" } # define alias_table_defined # endif # if defined __sun /* Solaris */ { "5601", "EUC-KR" }, { "646", "ASCII" }, /*{ "BIG5", "BIG5" },*/ { "Big5-HKSCS", "BIG5-HKSCS" }, { "GB18030", "GB18030" }, /*{ "GBK", "GBK" },*/ { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-11", "TIS-620" }, { "ISO8859-13", "ISO-8859-13" }, { "ISO8859-15", "ISO-8859-15" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-3", "ISO-8859-3" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-6", "ISO-8859-6" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "PCK", "SHIFT_JIS" }, { "TIS620.2533", "TIS-620" }, /*{ "UTF-8", "UTF-8" },*/ { "ansi-1251", "CP1251" }, { "cns11643", "EUC-TW" }, { "eucJP", "EUC-JP" }, { "gb2312", "GB2312" }, { "koi8-r", "KOI8-R" } # define alias_table_defined # endif # if defined __minix /* Minix */ { "646", "ASCII" } # define alias_table_defined # endif # if defined WINDOWS_NATIVE || defined __CYGWIN__ /* Windows */ { "CP1361", "JOHAB" }, { "CP20127", "ASCII" }, { "CP20866", "KOI8-R" }, { "CP20936", "GB2312" }, { "CP21866", "KOI8-RU" }, { "CP28591", "ISO-8859-1" }, { "CP28592", "ISO-8859-2" }, { "CP28593", "ISO-8859-3" }, { "CP28594", "ISO-8859-4" }, { "CP28595", "ISO-8859-5" }, { "CP28596", "ISO-8859-6" }, { "CP28597", "ISO-8859-7" }, { "CP28598", "ISO-8859-8" }, { "CP28599", "ISO-8859-9" }, { "CP28605", "ISO-8859-15" }, { "CP38598", "ISO-8859-8" }, { "CP51932", "EUC-JP" }, { "CP51936", "GB2312" }, { "CP51949", "EUC-KR" }, { "CP51950", "EUC-TW" }, { "CP54936", "GB18030" }, { "CP65001", "UTF-8" }, { "CP936", "GBK" } # define alias_table_defined # endif # if defined OS2 /* OS/2 */ /* The list of encodings is taken from "List of OS/2 Codepages" by Alex Taylor: <http://altsan.org/os2/toolkits/uls/index.html#codepages>. See also "__convcp() of kLIBC": <https://github.com/bitwiseworks/libc/blob/master/src/emx/src/lib/locale/__convcp.c>. */ { "CP1004", "CP1252" }, /*{ "CP1041", "CP943" },*/ /*{ "CP1088", "CP949" },*/ { "CP1089", "ISO-8859-6" }, /*{ "CP1114", "CP950" },*/ /*{ "CP1115", "GB2312" },*/ { "CP1208", "UTF-8" }, /*{ "CP1380", "GB2312" },*/ { "CP1381", "GB2312" }, { "CP1383", "GB2312" }, { "CP1386", "GBK" }, /*{ "CP301", "CP943" },*/ { "CP3372", "EUC-JP" }, { "CP4946", "CP850" }, /*{ "CP5048", "JIS_X0208-1990" },*/ /*{ "CP5049", "JIS_X0212-1990" },*/ /*{ "CP5067", "KS_C_5601-1987" },*/ { "CP813", "ISO-8859-7" }, { "CP819", "ISO-8859-1" }, { "CP878", "KOI8-R" }, /*{ "CP897", "CP943" },*/ { "CP912", "ISO-8859-2" }, { "CP913", "ISO-8859-3" }, { "CP914", "ISO-8859-4" }, { "CP915", "ISO-8859-5" }, { "CP916", "ISO-8859-8" }, { "CP920", "ISO-8859-9" }, { "CP921", "ISO-8859-13" }, { "CP923", "ISO-8859-15" }, /*{ "CP941", "CP943" },*/ /*{ "CP947", "CP950" },*/ /*{ "CP951", "CP949" },*/ /*{ "CP952", "JIS_X0208-1990" },*/ /*{ "CP953", "JIS_X0212-1990" },*/ { "CP954", "EUC-JP" }, { "CP964", "EUC-TW" }, { "CP970", "EUC-KR" }, /*{ "CP971", "KS_C_5601-1987" },*/ { "IBM-1004", "CP1252" }, /*{ "IBM-1006", "?" },*/ /*{ "IBM-1008", "?" },*/ /*{ "IBM-1041", "CP943" },*/ /*{ "IBM-1051", "?" },*/ /*{ "IBM-1088", "CP949" },*/ { "IBM-1089", "ISO-8859-6" }, /*{ "IBM-1098", "?" },*/ /*{ "IBM-1114", "CP950" },*/ /*{ "IBM-1115", "GB2312" },*/ /*{ "IBM-1116", "?" },*/ /*{ "IBM-1117", "?" },*/ /*{ "IBM-1118", "?" },*/ /*{ "IBM-1119", "?" },*/ { "IBM-1124", "CP1124" }, { "IBM-1125", "CP1125" }, { "IBM-1131", "CP1131" }, { "IBM-1208", "UTF-8" }, { "IBM-1250", "CP1250" }, { "IBM-1251", "CP1251" }, { "IBM-1252", "CP1252" }, { "IBM-1253", "CP1253" }, { "IBM-1254", "CP1254" }, { "IBM-1255", "CP1255" }, { "IBM-1256", "CP1256" }, { "IBM-1257", "CP1257" }, /*{ "IBM-1275", "?" },*/ /*{ "IBM-1276", "?" },*/ /*{ "IBM-1277", "?" },*/ /*{ "IBM-1280", "?" },*/ /*{ "IBM-1281", "?" },*/ /*{ "IBM-1282", "?" },*/ /*{ "IBM-1283", "?" },*/ /*{ "IBM-1380", "GB2312" },*/ { "IBM-1381", "GB2312" }, { "IBM-1383", "GB2312" }, { "IBM-1386", "GBK" }, /*{ "IBM-301", "CP943" },*/ { "IBM-3372", "EUC-JP" }, { "IBM-367", "ASCII" }, { "IBM-437", "CP437" }, { "IBM-4946", "CP850" }, /*{ "IBM-5048", "JIS_X0208-1990" },*/ /*{ "IBM-5049", "JIS_X0212-1990" },*/ /*{ "IBM-5067", "KS_C_5601-1987" },*/ { "IBM-813", "ISO-8859-7" }, { "IBM-819", "ISO-8859-1" }, { "IBM-850", "CP850" }, /*{ "IBM-851", "?" },*/ { "IBM-852", "CP852" }, { "IBM-855", "CP855" }, { "IBM-856", "CP856" }, { "IBM-857", "CP857" }, /*{ "IBM-859", "?" },*/ { "IBM-860", "CP860" }, { "IBM-861", "CP861" }, { "IBM-862", "CP862" }, { "IBM-863", "CP863" }, { "IBM-864", "CP864" }, { "IBM-865", "CP865" }, { "IBM-866", "CP866" }, /*{ "IBM-868", "?" },*/ { "IBM-869", "CP869" }, { "IBM-874", "CP874" }, { "IBM-878", "KOI8-R" }, /*{ "IBM-895", "?" },*/ /*{ "IBM-897", "CP943" },*/ /*{ "IBM-907", "?" },*/ /*{ "IBM-909", "?" },*/ { "IBM-912", "ISO-8859-2" }, { "IBM-913", "ISO-8859-3" }, { "IBM-914", "ISO-8859-4" }, { "IBM-915", "ISO-8859-5" }, { "IBM-916", "ISO-8859-8" }, { "IBM-920", "ISO-8859-9" }, { "IBM-921", "ISO-8859-13" }, { "IBM-922", "CP922" }, { "IBM-923", "ISO-8859-15" }, { "IBM-932", "CP932" }, /*{ "IBM-941", "CP943" },*/ /*{ "IBM-942", "?" },*/ { "IBM-943", "CP943" }, /*{ "IBM-947", "CP950" },*/ { "IBM-949", "CP949" }, { "IBM-950", "CP950" }, /*{ "IBM-951", "CP949" },*/ /*{ "IBM-952", "JIS_X0208-1990" },*/ /*{ "IBM-953", "JIS_X0212-1990" },*/ { "IBM-954", "EUC-JP" }, /*{ "IBM-955", "?" },*/ { "IBM-964", "EUC-TW" }, { "IBM-970", "EUC-KR" }, /*{ "IBM-971", "KS_C_5601-1987" },*/ { "IBM-eucCN", "GB2312" }, { "IBM-eucJP", "EUC-JP" }, { "IBM-eucKR", "EUC-KR" }, { "IBM-eucTW", "EUC-TW" }, { "IBM33722", "EUC-JP" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-3", "ISO-8859-3" }, { "ISO8859-4", "ISO-8859-4" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-6", "ISO-8859-6" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, /*{ "JISX0201-1976", "JISX0201-1976" },*/ /*{ "JISX0208-1978", "?" },*/ /*{ "JISX0208-1983", "JIS_X0208-1983" },*/ /*{ "JISX0208-1990", "JIS_X0208-1990" },*/ /*{ "JISX0212-1990", "JIS_X0212-1990" },*/ /*{ "KSC5601-1987", "KS_C_5601-1987" },*/ { "SJIS-1", "CP943" }, { "SJIS-2", "CP943" }, { "eucJP", "EUC-JP" }, { "eucKR", "EUC-KR" }, { "eucTW-1993", "EUC-TW" } # define alias_table_defined # endif # if defined VMS /* OpenVMS */ /* The list of encodings is taken from the OpenVMS 7.3-1 documentation "Compaq C Run-Time Library Reference Manual for OpenVMS systems" section 10.7 "Handling Different Character Sets". */ { "DECHANYU", "DEC-HANYU" }, { "DECHANZI", "GB2312" }, { "DECKANJI", "DEC-KANJI" }, { "DECKOREAN", "EUC-KR" }, { "ISO8859-1", "ISO-8859-1" }, { "ISO8859-2", "ISO-8859-2" }, { "ISO8859-5", "ISO-8859-5" }, { "ISO8859-7", "ISO-8859-7" }, { "ISO8859-8", "ISO-8859-8" }, { "ISO8859-9", "ISO-8859-9" }, { "SDECKANJI", "EUC-JP" }, { "SJIS", "SHIFT_JIS" }, { "eucJP", "EUC-JP" }, { "eucTW", "EUC-TW" } # define alias_table_defined # endif # ifndef alias_table_defined /* Just a dummy entry, to avoid a C syntax error. */ { "", "" } # endif }; # endif #else /* On these platforms, we use a mapping from locale name to GNU canonical encoding name. */ struct table_entry { const char locale[17+1]; const char canonical[11+1]; }; /* Table of platform-dependent mappings, sorted in ascending order. */ static const struct table_entry locale_table[] = { # if defined __FreeBSD__ /* FreeBSD 4.2 */ { "cs_CZ.ISO_8859-2", "ISO-8859-2" }, { "da_DK.DIS_8859-15", "ISO-8859-15" }, { "da_DK.ISO_8859-1", "ISO-8859-1" }, { "de_AT.DIS_8859-15", "ISO-8859-15" }, { "de_AT.ISO_8859-1", "ISO-8859-1" }, { "de_CH.DIS_8859-15", "ISO-8859-15" }, { "de_CH.ISO_8859-1", "ISO-8859-1" }, { "de_DE.DIS_8859-15", "ISO-8859-15" }, { "de_DE.ISO_8859-1", "ISO-8859-1" }, { "en_AU.DIS_8859-15", "ISO-8859-15" }, { "en_AU.ISO_8859-1", "ISO-8859-1" }, { "en_CA.DIS_8859-15", "ISO-8859-15" }, { "en_CA.ISO_8859-1", "ISO-8859-1" }, { "en_GB.DIS_8859-15", "ISO-8859-15" }, { "en_GB.ISO_8859-1", "ISO-8859-1" }, { "en_US.DIS_8859-15", "ISO-8859-15" }, { "en_US.ISO_8859-1", "ISO-8859-1" }, { "es_ES.DIS_8859-15", "ISO-8859-15" }, { "es_ES.ISO_8859-1", "ISO-8859-1" }, { "fi_FI.DIS_8859-15", "ISO-8859-15" }, { "fi_FI.ISO_8859-1", "ISO-8859-1" }, { "fr_BE.DIS_8859-15", "ISO-8859-15" }, { "fr_BE.ISO_8859-1", "ISO-8859-1" }, { "fr_CA.DIS_8859-15", "ISO-8859-15" }, { "fr_CA.ISO_8859-1", "ISO-8859-1" }, { "fr_CH.DIS_8859-15", "ISO-8859-15" }, { "fr_CH.ISO_8859-1", "ISO-8859-1" }, { "fr_FR.DIS_8859-15", "ISO-8859-15" }, { "fr_FR.ISO_8859-1", "ISO-8859-1" }, { "hr_HR.ISO_8859-2", "ISO-8859-2" }, { "hu_HU.ISO_8859-2", "ISO-8859-2" }, { "is_IS.DIS_8859-15", "ISO-8859-15" }, { "is_IS.ISO_8859-1", "ISO-8859-1" }, { "it_CH.DIS_8859-15", "ISO-8859-15" }, { "it_CH.ISO_8859-1", "ISO-8859-1" }, { "it_IT.DIS_8859-15", "ISO-8859-15" }, { "it_IT.ISO_8859-1", "ISO-8859-1" }, { "ja_JP.EUC", "EUC-JP" }, { "ja_JP.SJIS", "SHIFT_JIS" }, { "ja_JP.Shift_JIS", "SHIFT_JIS" }, { "ko_KR.EUC", "EUC-KR" }, { "la_LN.ASCII", "ASCII" }, { "la_LN.DIS_8859-15", "ISO-8859-15" }, { "la_LN.ISO_8859-1", "ISO-8859-1" }, { "la_LN.ISO_8859-2", "ISO-8859-2" }, { "la_LN.ISO_8859-4", "ISO-8859-4" }, { "lt_LN.ASCII", "ASCII" }, { "lt_LN.DIS_8859-15", "ISO-8859-15" }, { "lt_LN.ISO_8859-1", "ISO-8859-1" }, { "lt_LN.ISO_8859-2", "ISO-8859-2" }, { "lt_LT.ISO_8859-4", "ISO-8859-4" }, { "nl_BE.DIS_8859-15", "ISO-8859-15" }, { "nl_BE.ISO_8859-1", "ISO-8859-1" }, { "nl_NL.DIS_8859-15", "ISO-8859-15" }, { "nl_NL.ISO_8859-1", "ISO-8859-1" }, { "no_NO.DIS_8859-15", "ISO-8859-15" }, { "no_NO.ISO_8859-1", "ISO-8859-1" }, { "pl_PL.ISO_8859-2", "ISO-8859-2" }, { "pt_PT.DIS_8859-15", "ISO-8859-15" }, { "pt_PT.ISO_8859-1", "ISO-8859-1" }, { "ru_RU.CP866", "CP866" }, { "ru_RU.ISO_8859-5", "ISO-8859-5" }, { "ru_RU.KOI8-R", "KOI8-R" }, { "ru_SU.CP866", "CP866" }, { "ru_SU.ISO_8859-5", "ISO-8859-5" }, { "ru_SU.KOI8-R", "KOI8-R" }, { "sl_SI.ISO_8859-2", "ISO-8859-2" }, { "sv_SE.DIS_8859-15", "ISO-8859-15" }, { "sv_SE.ISO_8859-1", "ISO-8859-1" }, { "uk_UA.KOI8-U", "KOI8-U" }, { "zh_CN.EUC", "GB2312" }, { "zh_TW.BIG5", "BIG5" }, { "zh_TW.Big5", "BIG5" } # define locale_table_defined # endif # if defined __DJGPP__ /* DOS / DJGPP 2.03 */ /* The encodings given here may not all be correct. If you find that the encoding given for your language and country is not the one your DOS machine actually uses, just correct it in this file, and send a mail to Juan Manuel Guerrero <juan.guerrero@gmx.de> and <bug-gnulib@gnu.org>. */ { "C", "ASCII" }, { "ar", "CP864" }, { "ar_AE", "CP864" }, { "ar_DZ", "CP864" }, { "ar_EG", "CP864" }, { "ar_IQ", "CP864" }, { "ar_IR", "CP864" }, { "ar_JO", "CP864" }, { "ar_KW", "CP864" }, { "ar_MA", "CP864" }, { "ar_OM", "CP864" }, { "ar_QA", "CP864" }, { "ar_SA", "CP864" }, { "ar_SY", "CP864" }, { "be", "CP866" }, { "be_BE", "CP866" }, { "bg", "CP866" }, /* not CP855 ?? */ { "bg_BG", "CP866" }, /* not CP855 ?? */ { "ca", "CP850" }, { "ca_ES", "CP850" }, { "cs", "CP852" }, { "cs_CZ", "CP852" }, { "da", "CP865" }, /* not CP850 ?? */ { "da_DK", "CP865" }, /* not CP850 ?? */ { "de", "CP850" }, { "de_AT", "CP850" }, { "de_CH", "CP850" }, { "de_DE", "CP850" }, { "el", "CP869" }, { "el_GR", "CP869" }, { "en", "CP850" }, { "en_AU", "CP850" }, /* not CP437 ?? */ { "en_CA", "CP850" }, { "en_GB", "CP850" }, { "en_NZ", "CP437" }, { "en_US", "CP437" }, { "en_ZA", "CP850" }, /* not CP437 ?? */ { "eo", "CP850" }, { "eo_EO", "CP850" }, { "es", "CP850" }, { "es_AR", "CP850" }, { "es_BO", "CP850" }, { "es_CL", "CP850" }, { "es_CO", "CP850" }, { "es_CR", "CP850" }, { "es_CU", "CP850" }, { "es_DO", "CP850" }, { "es_EC", "CP850" }, { "es_ES", "CP850" }, { "es_GT", "CP850" }, { "es_HN", "CP850" }, { "es_MX", "CP850" }, { "es_NI", "CP850" }, { "es_PA", "CP850" }, { "es_PE", "CP850" }, { "es_PY", "CP850" }, { "es_SV", "CP850" }, { "es_UY", "CP850" }, { "es_VE", "CP850" }, { "et", "CP850" }, { "et_EE", "CP850" }, { "eu", "CP850" }, { "eu_ES", "CP850" }, { "fi", "CP850" }, { "fi_FI", "CP850" }, { "fr", "CP850" }, { "fr_BE", "CP850" }, { "fr_CA", "CP850" }, { "fr_CH", "CP850" }, { "fr_FR", "CP850" }, { "ga", "CP850" }, { "ga_IE", "CP850" }, { "gd", "CP850" }, { "gd_GB", "CP850" }, { "gl", "CP850" }, { "gl_ES", "CP850" }, { "he", "CP862" }, { "he_IL", "CP862" }, { "hr", "CP852" }, { "hr_HR", "CP852" }, { "hu", "CP852" }, { "hu_HU", "CP852" }, { "id", "CP850" }, /* not CP437 ?? */ { "id_ID", "CP850" }, /* not CP437 ?? */ { "is", "CP861" }, /* not CP850 ?? */ { "is_IS", "CP861" }, /* not CP850 ?? */ { "it", "CP850" }, { "it_CH", "CP850" }, { "it_IT", "CP850" }, { "ja", "CP932" }, { "ja_JP", "CP932" }, { "kr", "CP949" }, /* not CP934 ?? */ { "kr_KR", "CP949" }, /* not CP934 ?? */ { "lt", "CP775" }, { "lt_LT", "CP775" }, { "lv", "CP775" }, { "lv_LV", "CP775" }, { "mk", "CP866" }, /* not CP855 ?? */ { "mk_MK", "CP866" }, /* not CP855 ?? */ { "mt", "CP850" }, { "mt_MT", "CP850" }, { "nb", "CP865" }, /* not CP850 ?? */ { "nb_NO", "CP865" }, /* not CP850 ?? */ { "nl", "CP850" }, { "nl_BE", "CP850" }, { "nl_NL", "CP850" }, { "nn", "CP865" }, /* not CP850 ?? */ { "nn_NO", "CP865" }, /* not CP850 ?? */ { "no", "CP865" }, /* not CP850 ?? */ { "no_NO", "CP865" }, /* not CP850 ?? */ { "pl", "CP852" }, { "pl_PL", "CP852" }, { "pt", "CP850" }, { "pt_BR", "CP850" }, { "pt_PT", "CP850" }, { "ro", "CP852" }, { "ro_RO", "CP852" }, { "ru", "CP866" }, { "ru_RU", "CP866" }, { "sk", "CP852" }, { "sk_SK", "CP852" }, { "sl", "CP852" }, { "sl_SI", "CP852" }, { "sq", "CP852" }, { "sq_AL", "CP852" }, { "sr", "CP852" }, /* CP852 or CP866 or CP855 ?? */ { "sr_CS", "CP852" }, /* CP852 or CP866 or CP855 ?? */ { "sr_YU", "CP852" }, /* CP852 or CP866 or CP855 ?? */ { "sv", "CP850" }, { "sv_SE", "CP850" }, { "th", "CP874" }, { "th_TH", "CP874" }, { "tr", "CP857" }, { "tr_TR", "CP857" }, { "uk", "CP1125" }, { "uk_UA", "CP1125" }, { "zh_CN", "GBK" }, { "zh_TW", "CP950" } /* not CP938 ?? */ # define locale_table_defined # endif # ifndef locale_table_defined /* Just a dummy entry, to avoid a C syntax error. */ { "", "" } # endif }; #endif /* Determine the current locale's character encoding, and canonicalize it into one of the canonical names listed below. The result must not be freed; it is statically allocated. The result becomes invalid when setlocale() is used to change the global locale, or when the value of one of the environment variables LC_ALL, LC_CTYPE, LANG is changed; threads in multithreaded programs should not do this. If the canonical name cannot be determined, the result is a non-canonical name. */ #ifdef STATIC STATIC #endif const char * locale_charset (void) { const char *codeset; /* This function must be multithread-safe. To achieve this without using thread-local storage, we use a simple strcpy or memcpy to fill this static buffer. Filling it through, for example, strcpy + strcat would not be guaranteed to leave the buffer's contents intact if another thread is currently accessing it. If necessary, the contents is first assembled in a stack-allocated buffer. */ #if HAVE_LANGINFO_CODESET || defined WINDOWS_NATIVE || defined OS2 # if HAVE_LANGINFO_CODESET /* Most systems support nl_langinfo (CODESET) nowadays. */ codeset = nl_langinfo (CODESET); # ifdef __CYGWIN__ /* Cygwin < 1.7 does not have locales. nl_langinfo (CODESET) always returns "US-ASCII". Return the suffix of the locale name from the environment variables (if present) or the codepage as a number. */ if (codeset != NULL && strcmp (codeset, "US-ASCII") == 0) { const char *locale; static char resultbuf[2 + 10 + 1]; locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (resultbuf)) { /* This way of filling resultbuf is multithread-safe. */ memcpy (resultbuf, dot, modifier - dot); resultbuf [modifier - dot] = '\0'; return resultbuf; } } } /* The Windows API has a function returning the locale's codepage as a number: GetACP(). This encoding is used by Cygwin, unless the user has set the environment variable CYGWIN=codepage:oem (which very few people do). Output directed to console windows needs to be converted (to GetOEMCP() if the console is using a raster font, or to GetConsoleOutputCP() if it is using a TrueType font). Cygwin does this conversion transparently (see winsup/cygwin/fhandler_console.cc), converting to GetConsoleOutputCP(). This leads to correct results, except when SetConsoleOutputCP has been called and a raster font is in use. */ { char buf[2 + 10 + 1]; sprintf (buf, "CP%u", GetACP ()); strcpy (resultbuf, buf); codeset = resultbuf; } } # endif if (codeset == NULL) /* The canonical name cannot be determined. */ codeset = ""; # elif defined WINDOWS_NATIVE char buf[2 + 10 + 1]; static char resultbuf[2 + 10 + 1]; /* The Windows API has a function returning the locale's codepage as a number, but the value doesn't change according to what the 'setlocale' call specified. So we use it as a last resort, in case the string returned by 'setlocale' doesn't specify the codepage. */ char *current_locale = setlocale (LC_CTYPE, NULL); char *pdot = strrchr (current_locale, '.'); if (pdot && 2 + strlen (pdot + 1) + 1 <= sizeof (buf)) sprintf (buf, "CP%s", pdot + 1); else { /* The Windows API has a function returning the locale's codepage as a number: GetACP(). When the output goes to a console window, it needs to be provided in GetOEMCP() encoding if the console is using a raster font, or in GetConsoleOutputCP() encoding if it is using a TrueType font. But in GUI programs and for output sent to files and pipes, GetACP() encoding is the best bet. */ sprintf (buf, "CP%u", GetACP ()); } /* For a locale name such as "French_France.65001", in Windows 10, setlocale now returns "French_France.utf8" instead. */ if (strcmp (buf + 2, "65001") == 0 || strcmp (buf + 2, "utf8") == 0) codeset = "UTF-8"; else { strcpy (resultbuf, buf); codeset = resultbuf; } # elif defined OS2 const char *locale; static char resultbuf[2 + 10 + 1]; ULONG cp[3]; ULONG cplen; codeset = NULL; /* Allow user to override the codeset, as set in the operating system, with standard language environment variables. */ locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); } if (locale != NULL && locale[0] != '\0') { /* If the locale name contains an encoding after the dot, return it. */ const char *dot = strchr (locale, '.'); if (dot != NULL) { const char *modifier; dot++; /* Look for the possible @... trailer and remove it, if any. */ modifier = strchr (dot, '@'); if (modifier == NULL) return dot; if (modifier - dot < sizeof (resultbuf)) { /* This way of filling resultbuf is multithread-safe. */ memcpy (resultbuf, dot, modifier - dot); resultbuf [modifier - dot] = '\0'; return resultbuf; } } /* For the POSIX locale, don't use the system's codepage. */ if (strcmp (locale, "C") == 0 || strcmp (locale, "POSIX") == 0) codeset = ""; } if (codeset == NULL) { /* OS/2 has a function returning the locale's codepage as a number. */ if (DosQueryCp (sizeof (cp), cp, &cplen)) codeset = ""; else { char buf[2 + 10 + 1]; sprintf (buf, "CP%u", cp[0]); strcpy (resultbuf, buf); codeset = resultbuf; } } # else # error "Add code for other platforms here." # endif /* Resolve alias. */ { # ifdef alias_table_defined /* On some platforms, UTF-8 locales are the most frequently used ones. Speed up the common case and slow down the less common cases by testing for this case first. */ # if defined __OpenBSD__ || (defined __APPLE__ && defined __MACH__) || defined __sun || defined __CYGWIN__ if (strcmp (codeset, "UTF-8") == 0) goto done_table_lookup; else # endif { const struct table_entry * const table = alias_table; size_t const table_size = sizeof (alias_table) / sizeof (struct table_entry); /* The table is sorted. Perform a binary search. */ size_t hi = table_size; size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, strcmp (table[i].alias, codeset) < 0, for i >= hi, strcmp (table[i].alias, codeset) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = strcmp (table[mid].alias, codeset); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with strcmp (table[i].alias, codeset) == 0. */ codeset = table[mid].canonical; goto done_table_lookup; } } } if (0) done_table_lookup: ; else # endif { /* Did not find it in the table. */ /* On Mac OS X, all modern locales use the UTF-8 encoding. BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ # if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ codeset = "UTF-8"; # else /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ if (codeset[0] == '\0') codeset = "ASCII"; # endif } } #else /* On old systems which lack it, use setlocale or getenv. */ const char *locale = NULL; /* But most old systems don't have a complete set of locales. Some (like DJGPP) have only the C locale. Therefore we don't use setlocale here; it would return "C" when it doesn't support the locale name the user has set. */ # if 0 locale = setlocale (LC_CTYPE, NULL); # endif if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_ALL"); if (locale == NULL || locale[0] == '\0') { locale = getenv ("LC_CTYPE"); if (locale == NULL || locale[0] == '\0') locale = getenv ("LANG"); if (locale == NULL) locale = ""; } } /* Map locale name to canonical encoding name. */ { # ifdef locale_table_defined const struct table_entry * const table = locale_table; size_t const table_size = sizeof (locale_table) / sizeof (struct table_entry); /* The table is sorted. Perform a binary search. */ size_t hi = table_size; size_t lo = 0; while (lo < hi) { /* Invariant: for i < lo, strcmp (table[i].locale, locale) < 0, for i >= hi, strcmp (table[i].locale, locale) > 0. */ size_t mid = (hi + lo) >> 1; /* >= lo, < hi */ int cmp = strcmp (table[mid].locale, locale); if (cmp < 0) lo = mid + 1; else if (cmp > 0) hi = mid; else { /* Found an i with strcmp (table[i].locale, locale) == 0. */ codeset = table[mid].canonical; goto done_table_lookup; } } if (0) done_table_lookup: ; else # endif { /* Did not find it in the table. */ /* On Mac OS X, all modern locales use the UTF-8 encoding. BeOS and Haiku have a single locale, and it has UTF-8 encoding. */ # if (defined __APPLE__ && defined __MACH__) || defined __BEOS__ || defined __HAIKU__ codeset = "UTF-8"; # else /* The canonical name cannot be determined. */ /* Don't return an empty string. GNU libc and GNU libiconv interpret the empty string as denoting "the locale's character encoding", thus GNU libiconv would call this function a second time. */ codeset = "ASCII"; # endif } } #endif #ifdef DARWIN7 /* Mac OS X sets MB_CUR_MAX to 1 when LC_ALL=C, and "UTF-8" (the default codeset) does not work when MB_CUR_MAX is 1. */ if (strcmp (codeset, "UTF-8") == 0 && MB_CUR_MAX_L (uselocale (NULL)) <= 1) codeset = "ASCII"; #endif return codeset; } ����������������������������������������������recutils-1.9/lib/mbrtowc-impl.h���������������������������������������������������������������������0000644�0000000�0000000�00000016240�14226564450�013452� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2008. */ /* This file contains the body of the mbrtowc and mbrtoc32 functions, when GNULIB_defined_mbstate_t is defined. */ char *pstate = (char *)ps; if (s == NULL) { pwc = NULL; s = ""; n = 1; } if (n == 0) return (size_t)(-2); /* Here n > 0. */ if (pstate == NULL) pstate = internal_state; { size_t nstate = pstate[0]; char buf[4]; const char *p; size_t m; enc_t enc; int res; switch (nstate) { case 0: p = s; m = n; break; case 3: buf[2] = pstate[3]; FALLTHROUGH; case 2: buf[1] = pstate[2]; FALLTHROUGH; case 1: buf[0] = pstate[1]; p = buf; m = nstate; buf[m++] = s[0]; if (n >= 2 && m < 4) { buf[m++] = s[1]; if (n >= 3 && m < 4) buf[m++] = s[2]; } break; default: errno = EINVAL; return (size_t)(-1); } /* Here m > 0. */ enc = locale_encoding_classification (); if (enc == enc_utf8) /* UTF-8 */ { /* Achieve - multi-thread safety and - the ability to produce wide character values > WCHAR_MAX by not calling mbtowc() at all. */ #include "mbrtowc-impl-utf8.h" } else { /* The hidden internal state of mbtowc would make this function not multi-thread safe. Achieve multi-thread safety through a lock. */ wchar_t wc; res = mbtowc_with_lock (&wc, p, m); if (res >= 0) { if ((wc == 0) != (res == 0)) abort (); if (pwc != NULL) *pwc = wc; goto success; } /* mbtowc does not distinguish between invalid and incomplete multibyte sequences. But mbrtowc needs to make this distinction. There are two possible approaches: - Use iconv() and its return value. - Use built-in knowledge about the possible encodings. Given the low quality of implementation of iconv() on the systems that lack mbrtowc(), we use the second approach. The possible encodings are: - 8-bit encodings, - EUC-JP, EUC-KR, GB2312, EUC-TW, BIG5, GB18030, SJIS, - UTF-8 (already handled above). Use specialized code for each. */ if (m >= 4 || m >= MB_CUR_MAX) goto invalid; /* Here MB_CUR_MAX > 1 and 0 < m < 4. */ switch (enc) { /* As a reference for this code, you can use the GNU libiconv implementation. Look for uses of the RET_TOOFEW macro. */ case enc_eucjp: /* EUC-JP */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0xa1 && c < 0xff) || c == 0x8e || c == 0x8f) goto incomplete; } if (m == 2) { unsigned char c = (unsigned char) p[0]; if (c == 0x8f) { unsigned char c2 = (unsigned char) p[1]; if (c2 >= 0xa1 && c2 < 0xff) goto incomplete; } } goto invalid; } case enc_94: /* EUC-KR, GB2312, BIG5 */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if (c >= 0xa1 && c < 0xff) goto incomplete; } goto invalid; } case enc_euctw: /* EUC-TW */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0xa1 && c < 0xff) || c == 0x8e) goto incomplete; } else /* m == 2 || m == 3 */ { unsigned char c = (unsigned char) p[0]; if (c == 0x8e) goto incomplete; } goto invalid; } case enc_gb18030: /* GB18030 */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0x90 && c <= 0xe3) || (c >= 0xf8 && c <= 0xfe)) goto incomplete; } else /* m == 2 || m == 3 */ { unsigned char c = (unsigned char) p[0]; if (c >= 0x90 && c <= 0xe3) { unsigned char c2 = (unsigned char) p[1]; if (c2 >= 0x30 && c2 <= 0x39) { if (m == 2) goto incomplete; else /* m == 3 */ { unsigned char c3 = (unsigned char) p[2]; if (c3 >= 0x81 && c3 <= 0xfe) goto incomplete; } } } } goto invalid; } case enc_sjis: /* SJIS */ { if (m == 1) { unsigned char c = (unsigned char) p[0]; if ((c >= 0x81 && c <= 0x9f) || (c >= 0xe0 && c <= 0xea) || (c >= 0xf0 && c <= 0xf9)) goto incomplete; } goto invalid; } default: /* An unknown multibyte encoding. */ goto incomplete; } } success: /* res >= 0 is the corrected return value of mbtowc_with_lock (&wc, p, m). */ if (nstate >= (res > 0 ? res : 1)) abort (); res -= nstate; pstate[0] = 0; return res; incomplete: { size_t k = nstate; /* Here 0 <= k < m < 4. */ pstate[++k] = s[0]; if (k < m) { pstate[++k] = s[1]; if (k < m) pstate[++k] = s[2]; } if (k != m) abort (); } pstate[0] = m; return (size_t)(-2); invalid: errno = EILSEQ; /* The conversion state is undefined, says POSIX. */ return (size_t)(-1); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stdint.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000054754�14226564451�012765� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2001-2002, 2004-2022 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Sam Steingold, Peter Burwood. This file is part of gnulib. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* * ISO C 99 <stdint.h> for platforms that lack it. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/stdint.h.html> */ #ifndef _@GUARD_PREFIX@_STDINT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* When including a system file that in turn includes <inttypes.h>, use the system <inttypes.h>, not our substitute. This avoids problems with (for example) VMS, whose <sys/bitypes.h> includes <inttypes.h>. */ #define _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* On Android (Bionic libc), <sys/types.h> includes this file before having defined 'time_t'. Therefore in this case avoid including other system header files; just include the system's <stdint.h>. Ideally we should test __BIONIC__ here, but it is only defined after <sys/cdefs.h> has been included; hence test __ANDROID__ instead. */ #if defined __ANDROID__ && defined _GL_INCLUDING_SYS_TYPES_H # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #else /* Get those types that are already defined in other system include files, so that we can "#define int8_t signed char" below without worrying about a later system include file containing a "typedef signed char int8_t;" that will get messed up by our macro. Our macros should all be consistent with the system versions, except for the "fast" types and macros, which we recommend against using in public interfaces due to compiler differences. */ #if @HAVE_STDINT_H@ # if defined __sgi && ! defined __c99 /* Bypass IRIX's <stdint.h> if in C89 mode, since it merely annoys users with "This header file is to be used only for c99 mode compilations" diagnostics. */ # define __STDINT_H__ # endif /* Some pre-C++11 <stdint.h> implementations need this. */ # ifdef __cplusplus # ifndef __STDC_CONSTANT_MACROS # define __STDC_CONSTANT_MACROS 1 # endif # ifndef __STDC_LIMIT_MACROS # define __STDC_LIMIT_MACROS 1 # endif # endif /* Other systems may have an incomplete or buggy <stdint.h>. Include it before <inttypes.h>, since any "#include <stdint.h>" in <inttypes.h> would reinclude us, skipping our contents because _@GUARD_PREFIX@_STDINT_H is defined. The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_STDINT_H@ #endif #if ! defined _@GUARD_PREFIX@_STDINT_H && ! defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H #define _@GUARD_PREFIX@_STDINT_H /* Get SCHAR_MIN, SCHAR_MAX, UCHAR_MAX, INT_MIN, INT_MAX, LONG_MIN, LONG_MAX, ULONG_MAX, _GL_INTEGER_WIDTH. */ #include <limits.h> /* Override WINT_MIN and WINT_MAX if gnulib's <wchar.h> or <wctype.h> overrides wint_t. */ #if @GNULIBHEADERS_OVERRIDE_WINT_T@ # undef WINT_MIN # undef WINT_MAX # define WINT_MIN 0x0U # define WINT_MAX 0xffffffffU #endif #if ! @HAVE_C99_STDINT_H@ /* <sys/types.h> defines some of the stdint.h types as well, on glibc, IRIX 6.5, and OpenBSD 3.8 (via <machine/types.h>). AIX 5.2 <sys/types.h> isn't needed and causes troubles. Mac OS X 10.4.6 <sys/types.h> includes <stdint.h> (which is us), but relies on the system <stdint.h> definitions, so include <sys/types.h> after @NEXT_STDINT_H@. */ # if @HAVE_SYS_TYPES_H@ && ! defined _AIX # include <sys/types.h> # endif # if @HAVE_INTTYPES_H@ /* In OpenBSD 3.8, <inttypes.h> includes <machine/types.h>, which defines int{8,16,32,64}_t, uint{8,16,32,64}_t and __BIT_TYPES_DEFINED__. <inttypes.h> also defines intptr_t and uintptr_t. */ # include <inttypes.h> # elif @HAVE_SYS_INTTYPES_H@ /* Solaris 7 <sys/inttypes.h> has the types except the *_fast*_t types, and the macros except for *_FAST*_*, INTPTR_MIN, PTRDIFF_MIN, PTRDIFF_MAX. */ # include <sys/inttypes.h> # endif # if @HAVE_SYS_BITYPES_H@ && ! defined __BIT_TYPES_DEFINED__ /* Linux libc4 >= 4.6.7 and libc5 have a <sys/bitypes.h> that defines int{8,16,32,64}_t and __BIT_TYPES_DEFINED__. In libc5 >= 5.2.2 it is included by <sys/types.h>. */ # include <sys/bitypes.h> # endif # undef _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H /* Minimum and maximum values for an integer type under the usual assumption. Return an unspecified value if BITS == 0, adding a check to pacify picky compilers. */ /* These are separate macros, because if you try to merge these macros into a single one, HP-UX cc rejects the resulting expression in constant expressions. */ # define _STDINT_UNSIGNED_MIN(bits, zero) \ (zero) # define _STDINT_SIGNED_MIN(bits, zero) \ (~ _STDINT_MAX (1, bits, zero)) # define _STDINT_MAX(signed, bits, zero) \ (((((zero) + 1) << ((bits) ? (bits) - 1 - (signed) : 0)) - 1) * 2 + 1) #if !GNULIB_defined_stdint_types /* 7.18.1.1. Exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef int8_t # undef uint8_t typedef signed char gl_int8_t; typedef unsigned char gl_uint8_t; # define int8_t gl_int8_t # define uint8_t gl_uint8_t # undef int16_t # undef uint16_t typedef short int gl_int16_t; typedef unsigned short int gl_uint16_t; # define int16_t gl_int16_t # define uint16_t gl_uint16_t # undef int32_t # undef uint32_t typedef int gl_int32_t; typedef unsigned int gl_uint32_t; # define int32_t gl_int32_t # define uint32_t gl_uint32_t /* If the system defines INT64_MAX, assume int64_t works. That way, if the underlying platform defines int64_t to be a 64-bit long long int, the code below won't mistakenly define it to be a 64-bit long int, which would mess up C++ name mangling. We must use #ifdef rather than #if, to avoid an error with HP-UX 10.20 cc. */ # ifdef INT64_MAX # define GL_INT64_T # else /* Do not undefine int64_t if gnulib is not being used with 64-bit types, since otherwise it breaks platforms like Tandem/NSK. */ # if LONG_MAX >> 31 >> 31 == 1 # undef int64_t typedef long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # elif defined _MSC_VER # undef int64_t typedef __int64 gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # else # undef int64_t typedef long long int gl_int64_t; # define int64_t gl_int64_t # define GL_INT64_T # endif # endif # ifdef UINT64_MAX # define GL_UINT64_T # else # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # undef uint64_t typedef unsigned long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # elif defined _MSC_VER # undef uint64_t typedef unsigned __int64 gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # else # undef uint64_t typedef unsigned long long int gl_uint64_t; # define uint64_t gl_uint64_t # define GL_UINT64_T # endif # endif /* Avoid collision with Solaris 2.5.1 <pthread.h> etc. */ # define _UINT8_T # define _UINT32_T # define _UINT64_T /* 7.18.1.2. Minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef int_least8_t # undef uint_least8_t # undef int_least16_t # undef uint_least16_t # undef int_least32_t # undef uint_least32_t # undef int_least64_t # undef uint_least64_t # define int_least8_t int8_t # define uint_least8_t uint8_t # define int_least16_t int16_t # define uint_least16_t uint16_t # define int_least32_t int32_t # define uint_least32_t uint32_t # ifdef GL_INT64_T # define int_least64_t int64_t # endif # ifdef GL_UINT64_T # define uint_least64_t uint64_t # endif /* 7.18.1.3. Fastest minimum-width integer types */ /* Note: Other <stdint.h> substitutes may define these types differently. It is not recommended to use these types in public header files. */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. The following code normally uses types consistent with glibc, as that lessens the chance of incompatibility with older GNU hosts. */ # undef int_fast8_t # undef uint_fast8_t # undef int_fast16_t # undef uint_fast16_t # undef int_fast32_t # undef uint_fast32_t # undef int_fast64_t # undef uint_fast64_t typedef signed char gl_int_fast8_t; typedef unsigned char gl_uint_fast8_t; # ifdef __sun /* Define types compatible with SunOS 5.10, so that code compiled under earlier SunOS versions works with code compiled under SunOS 5.10. */ typedef int gl_int_fast32_t; typedef unsigned int gl_uint_fast32_t; # else typedef long int gl_int_fast32_t; typedef unsigned long int gl_uint_fast32_t; # endif typedef gl_int_fast32_t gl_int_fast16_t; typedef gl_uint_fast32_t gl_uint_fast16_t; # define int_fast8_t gl_int_fast8_t # define uint_fast8_t gl_uint_fast8_t # define int_fast16_t gl_int_fast16_t # define uint_fast16_t gl_uint_fast16_t # define int_fast32_t gl_int_fast32_t # define uint_fast32_t gl_uint_fast32_t # ifdef GL_INT64_T # define int_fast64_t int64_t # endif # ifdef GL_UINT64_T # define uint_fast64_t uint64_t # endif /* 7.18.1.4. Integer types capable of holding object pointers */ /* kLIBC's <stdint.h> defines _INTPTR_T_DECLARED and needs its own definitions of intptr_t and uintptr_t (which use int and unsigned) to avoid clashes with declarations of system functions like sbrk. Similarly, MinGW WSL-5.4.1 <stdint.h> needs its own intptr_t and uintptr_t to avoid conflicting declarations of system functions like _findclose in <io.h>. */ # if !((defined __KLIBC__ && defined _INTPTR_T_DECLARED) \ || defined __MINGW32__) # undef intptr_t # undef uintptr_t # ifdef _WIN64 typedef long long int gl_intptr_t; typedef unsigned long long int gl_uintptr_t; # else typedef long int gl_intptr_t; typedef unsigned long int gl_uintptr_t; # endif # define intptr_t gl_intptr_t # define uintptr_t gl_uintptr_t # endif /* 7.18.1.5. Greatest-width integer types */ /* Note: These types are compiler dependent. It may be unwise to use them in public header files. */ /* If the system defines INTMAX_MAX, assume that intmax_t works, and similarly for UINTMAX_MAX and uintmax_t. This avoids problems with assuming one type where another is used by the system. */ # ifndef INTMAX_MAX # undef INTMAX_C # undef intmax_t # if LONG_MAX >> 30 == 1 typedef long long int gl_intmax_t; # define intmax_t gl_intmax_t # elif defined GL_INT64_T # define intmax_t int64_t # else typedef long int gl_intmax_t; # define intmax_t gl_intmax_t # endif # endif # ifndef UINTMAX_MAX # undef UINTMAX_C # undef uintmax_t # if ULONG_MAX >> 31 == 1 typedef unsigned long long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # elif defined GL_UINT64_T # define uintmax_t uint64_t # else typedef unsigned long int gl_uintmax_t; # define uintmax_t gl_uintmax_t # endif # endif /* Verify that intmax_t and uintmax_t have the same size. Too much code breaks if this is not the case. If this check fails, the reason is likely to be found in the autoconf macros. */ typedef int _verify_intmax_size[sizeof (intmax_t) == sizeof (uintmax_t) ? 1 : -1]; # define GNULIB_defined_stdint_types 1 # endif /* !GNULIB_defined_stdint_types */ /* 7.18.2. Limits of specified-width integer types */ /* 7.18.2.1. Limits of exact-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. */ # undef INT8_MIN # undef INT8_MAX # undef UINT8_MAX # define INT8_MIN (~ INT8_MAX) # define INT8_MAX 127 # define UINT8_MAX 255 # undef INT16_MIN # undef INT16_MAX # undef UINT16_MAX # define INT16_MIN (~ INT16_MAX) # define INT16_MAX 32767 # define UINT16_MAX 65535 # undef INT32_MIN # undef INT32_MAX # undef UINT32_MAX # define INT32_MIN (~ INT32_MAX) # define INT32_MAX 2147483647 # define UINT32_MAX 4294967295U # if defined GL_INT64_T && ! defined INT64_MAX /* Prefer (- INTMAX_C (1) << 63) over (~ INT64_MAX) because SunPRO C 5.0 evaluates the latter incorrectly in preprocessor expressions. */ # define INT64_MIN (- INTMAX_C (1) << 63) # define INT64_MAX INTMAX_C (9223372036854775807) # endif # if defined GL_UINT64_T && ! defined UINT64_MAX # define UINT64_MAX UINTMAX_C (18446744073709551615) # endif /* 7.18.2.2. Limits of minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the leastN_t types are the same as the corresponding N_t types. */ # undef INT_LEAST8_MIN # undef INT_LEAST8_MAX # undef UINT_LEAST8_MAX # define INT_LEAST8_MIN INT8_MIN # define INT_LEAST8_MAX INT8_MAX # define UINT_LEAST8_MAX UINT8_MAX # undef INT_LEAST16_MIN # undef INT_LEAST16_MAX # undef UINT_LEAST16_MAX # define INT_LEAST16_MIN INT16_MIN # define INT_LEAST16_MAX INT16_MAX # define UINT_LEAST16_MAX UINT16_MAX # undef INT_LEAST32_MIN # undef INT_LEAST32_MAX # undef UINT_LEAST32_MAX # define INT_LEAST32_MIN INT32_MIN # define INT_LEAST32_MAX INT32_MAX # define UINT_LEAST32_MAX UINT32_MAX # undef INT_LEAST64_MIN # undef INT_LEAST64_MAX # ifdef GL_INT64_T # define INT_LEAST64_MIN INT64_MIN # define INT_LEAST64_MAX INT64_MAX # endif # undef UINT_LEAST64_MAX # ifdef GL_UINT64_T # define UINT_LEAST64_MAX UINT64_MAX # endif /* 7.18.2.3. Limits of fastest minimum-width integer types */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits. Therefore the fastN_t types are taken from the same list of types. */ # undef INT_FAST8_MIN # undef INT_FAST8_MAX # undef UINT_FAST8_MAX # define INT_FAST8_MIN SCHAR_MIN # define INT_FAST8_MAX SCHAR_MAX # define UINT_FAST8_MAX UCHAR_MAX # undef INT_FAST16_MIN # undef INT_FAST16_MAX # undef UINT_FAST16_MAX # define INT_FAST16_MIN INT_FAST32_MIN # define INT_FAST16_MAX INT_FAST32_MAX # define UINT_FAST16_MAX UINT_FAST32_MAX # undef INT_FAST32_MIN # undef INT_FAST32_MAX # undef UINT_FAST32_MAX # ifdef __sun # define INT_FAST32_MIN INT_MIN # define INT_FAST32_MAX INT_MAX # define UINT_FAST32_MAX UINT_MAX # else # define INT_FAST32_MIN LONG_MIN # define INT_FAST32_MAX LONG_MAX # define UINT_FAST32_MAX ULONG_MAX # endif # undef INT_FAST64_MIN # undef INT_FAST64_MAX # ifdef GL_INT64_T # define INT_FAST64_MIN INT64_MIN # define INT_FAST64_MAX INT64_MAX # endif # undef UINT_FAST64_MAX # ifdef GL_UINT64_T # define UINT_FAST64_MAX UINT64_MAX # endif /* 7.18.2.4. Limits of integer types capable of holding object pointers */ # undef INTPTR_MIN # undef INTPTR_MAX # undef UINTPTR_MAX # ifdef _WIN64 # define INTPTR_MIN LLONG_MIN # define INTPTR_MAX LLONG_MAX # define UINTPTR_MAX ULLONG_MAX # else # define INTPTR_MIN LONG_MIN # define INTPTR_MAX LONG_MAX # define UINTPTR_MAX ULONG_MAX # endif /* 7.18.2.5. Limits of greatest-width integer types */ # ifndef INTMAX_MAX # undef INTMAX_MIN # ifdef INT64_MAX # define INTMAX_MIN INT64_MIN # define INTMAX_MAX INT64_MAX # else # define INTMAX_MIN INT32_MIN # define INTMAX_MAX INT32_MAX # endif # endif # ifndef UINTMAX_MAX # ifdef UINT64_MAX # define UINTMAX_MAX UINT64_MAX # else # define UINTMAX_MAX UINT32_MAX # endif # endif /* 7.18.3. Limits of other integer types */ /* ptrdiff_t limits */ # undef PTRDIFF_MIN # undef PTRDIFF_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define PTRDIFF_MIN _STDINT_SIGNED_MIN (64, 0l) # define PTRDIFF_MAX _STDINT_MAX (1, 64, 0l) # else # define PTRDIFF_MIN _STDINT_SIGNED_MIN (32, 0) # define PTRDIFF_MAX _STDINT_MAX (1, 32, 0) # endif # else # define PTRDIFF_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # define PTRDIFF_MAX \ _STDINT_MAX (1, @BITSIZEOF_PTRDIFF_T@, 0@PTRDIFF_T_SUFFIX@) # endif /* sig_atomic_t limits */ # undef SIG_ATOMIC_MIN # undef SIG_ATOMIC_MAX # if @HAVE_SIGNED_SIG_ATOMIC_T@ # define SIG_ATOMIC_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # else # define SIG_ATOMIC_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_SIG_ATOMIC_T@, 0@SIG_ATOMIC_T_SUFFIX@) # endif # define SIG_ATOMIC_MAX \ _STDINT_MAX (@HAVE_SIGNED_SIG_ATOMIC_T@, @BITSIZEOF_SIG_ATOMIC_T@, \ 0@SIG_ATOMIC_T_SUFFIX@) /* size_t limit */ # undef SIZE_MAX # if @APPLE_UNIVERSAL_BUILD@ # ifdef _LP64 # define SIZE_MAX _STDINT_MAX (0, 64, 0ul) # else # define SIZE_MAX _STDINT_MAX (0, 32, 0ul) # endif # else # define SIZE_MAX _STDINT_MAX (0, @BITSIZEOF_SIZE_T@, 0@SIZE_T_SUFFIX@) # endif /* wchar_t limits */ /* Get WCHAR_MIN, WCHAR_MAX. This include is not on the top, above, because on OSF/1 4.0 we have a sequence of nested includes <wchar.h> -> <stdio.h> -> <getopt.h> -> <stdlib.h>, and the latter includes <stdint.h> and assumes its types are already defined. */ # if @HAVE_WCHAR_H@ && ! (defined WCHAR_MIN && defined WCHAR_MAX) # define _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # include <wchar.h> # undef _GL_JUST_INCLUDE_SYSTEM_WCHAR_H # endif # undef WCHAR_MIN # undef WCHAR_MAX # if @HAVE_SIGNED_WCHAR_T@ # define WCHAR_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # else # define WCHAR_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) # endif # define WCHAR_MAX \ _STDINT_MAX (@HAVE_SIGNED_WCHAR_T@, @BITSIZEOF_WCHAR_T@, 0@WCHAR_T_SUFFIX@) /* wint_t limits */ /* If gnulib's <wchar.h> or <wctype.h> overrides wint_t, @WINT_T_SUFFIX@ is not accurate, therefore use the definitions from above. */ # if !@GNULIBHEADERS_OVERRIDE_WINT_T@ # undef WINT_MIN # undef WINT_MAX # if @HAVE_SIGNED_WINT_T@ # define WINT_MIN \ _STDINT_SIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # else # define WINT_MIN \ _STDINT_UNSIGNED_MIN (@BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif # define WINT_MAX \ _STDINT_MAX (@HAVE_SIGNED_WINT_T@, @BITSIZEOF_WINT_T@, 0@WINT_T_SUFFIX@) # endif /* 7.18.4. Macros for integer constants */ /* 7.18.4.1. Macros for minimum-width integer constants */ /* According to ISO C 99 Technical Corrigendum 1 */ /* Here we assume a standard architecture where the hardware integer types have 8, 16, 32, optionally 64 bits, and int is 32 bits. */ # undef INT8_C # undef UINT8_C # define INT8_C(x) x # define UINT8_C(x) x # undef INT16_C # undef UINT16_C # define INT16_C(x) x # define UINT16_C(x) x # undef INT32_C # undef UINT32_C # define INT32_C(x) x # define UINT32_C(x) x ## U # undef INT64_C # undef UINT64_C # if LONG_MAX >> 31 >> 31 == 1 # define INT64_C(x) x##L # elif defined _MSC_VER # define INT64_C(x) x##i64 # else # define INT64_C(x) x##LL # endif # if ULONG_MAX >> 31 >> 31 >> 1 == 1 # define UINT64_C(x) x##UL # elif defined _MSC_VER # define UINT64_C(x) x##ui64 # else # define UINT64_C(x) x##ULL # endif /* 7.18.4.2. Macros for greatest-width integer constants */ # ifndef INTMAX_C # if LONG_MAX >> 30 == 1 # define INTMAX_C(x) x##LL # elif defined GL_INT64_T # define INTMAX_C(x) INT64_C(x) # else # define INTMAX_C(x) x##L # endif # endif # ifndef UINTMAX_C # if ULONG_MAX >> 31 == 1 # define UINTMAX_C(x) x##ULL # elif defined GL_UINT64_T # define UINTMAX_C(x) UINT64_C(x) # else # define UINTMAX_C(x) x##UL # endif # endif #endif /* !@HAVE_C99_STDINT_H@ */ /* Macros specified by ISO/IEC TS 18661-1:2014. */ #if (!defined UINTMAX_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__)) # ifdef INT8_MAX # define INT8_WIDTH _GL_INTEGER_WIDTH (INT8_MIN, INT8_MAX) # endif # ifdef UINT8_MAX # define UINT8_WIDTH _GL_INTEGER_WIDTH (0, UINT8_MAX) # endif # ifdef INT16_MAX # define INT16_WIDTH _GL_INTEGER_WIDTH (INT16_MIN, INT16_MAX) # endif # ifdef UINT16_MAX # define UINT16_WIDTH _GL_INTEGER_WIDTH (0, UINT16_MAX) # endif # ifdef INT32_MAX # define INT32_WIDTH _GL_INTEGER_WIDTH (INT32_MIN, INT32_MAX) # endif # ifdef UINT32_MAX # define UINT32_WIDTH _GL_INTEGER_WIDTH (0, UINT32_MAX) # endif # ifdef INT64_MAX # define INT64_WIDTH _GL_INTEGER_WIDTH (INT64_MIN, INT64_MAX) # endif # ifdef UINT64_MAX # define UINT64_WIDTH _GL_INTEGER_WIDTH (0, UINT64_MAX) # endif # define INT_LEAST8_WIDTH _GL_INTEGER_WIDTH (INT_LEAST8_MIN, INT_LEAST8_MAX) # define UINT_LEAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST8_MAX) # define INT_LEAST16_WIDTH _GL_INTEGER_WIDTH (INT_LEAST16_MIN, INT_LEAST16_MAX) # define UINT_LEAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST16_MAX) # define INT_LEAST32_WIDTH _GL_INTEGER_WIDTH (INT_LEAST32_MIN, INT_LEAST32_MAX) # define UINT_LEAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST32_MAX) # define INT_LEAST64_WIDTH _GL_INTEGER_WIDTH (INT_LEAST64_MIN, INT_LEAST64_MAX) # define UINT_LEAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_LEAST64_MAX) # define INT_FAST8_WIDTH _GL_INTEGER_WIDTH (INT_FAST8_MIN, INT_FAST8_MAX) # define UINT_FAST8_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST8_MAX) # define INT_FAST16_WIDTH _GL_INTEGER_WIDTH (INT_FAST16_MIN, INT_FAST16_MAX) # define UINT_FAST16_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST16_MAX) # define INT_FAST32_WIDTH _GL_INTEGER_WIDTH (INT_FAST32_MIN, INT_FAST32_MAX) # define UINT_FAST32_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST32_MAX) # define INT_FAST64_WIDTH _GL_INTEGER_WIDTH (INT_FAST64_MIN, INT_FAST64_MAX) # define UINT_FAST64_WIDTH _GL_INTEGER_WIDTH (0, UINT_FAST64_MAX) # define INTPTR_WIDTH _GL_INTEGER_WIDTH (INTPTR_MIN, INTPTR_MAX) # define UINTPTR_WIDTH _GL_INTEGER_WIDTH (0, UINTPTR_MAX) # define INTMAX_WIDTH _GL_INTEGER_WIDTH (INTMAX_MIN, INTMAX_MAX) # define UINTMAX_WIDTH _GL_INTEGER_WIDTH (0, UINTMAX_MAX) # define PTRDIFF_WIDTH _GL_INTEGER_WIDTH (PTRDIFF_MIN, PTRDIFF_MAX) # define SIZE_WIDTH _GL_INTEGER_WIDTH (0, SIZE_MAX) # define WCHAR_WIDTH _GL_INTEGER_WIDTH (WCHAR_MIN, WCHAR_MAX) # ifdef WINT_MAX # define WINT_WIDTH _GL_INTEGER_WIDTH (WINT_MIN, WINT_MAX) # endif # ifdef SIG_ATOMIC_MAX # define SIG_ATOMIC_WIDTH _GL_INTEGER_WIDTH (SIG_ATOMIC_MIN, SIG_ATOMIC_MAX) # endif #endif /* !WINT_WIDTH && (_GNU_SOURCE || __STDC_WANT_IEC_60559_BFP_EXT__) */ #endif /* _@GUARD_PREFIX@_STDINT_H */ #endif /* !(defined __ANDROID__ && ...) */ #endif /* !defined _@GUARD_PREFIX@_STDINT_H && !defined _GL_JUST_INCLUDE_SYSTEM_STDINT_H */ ��������������������recutils-1.9/lib/c-strcasecmp.c���������������������������������������������������������������������0000644�0000000�0000000�00000003066�14226564447�013425� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* c-strcasecmp.c -- case insensitive string comparator in C locale Copyright (C) 1998-1999, 2005-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "c-strcase.h" #include <limits.h> #include "c-ctype.h" int c_strcasecmp (const char *s1, const char *s2) { register const unsigned char *p1 = (const unsigned char *) s1; register const unsigned char *p2 = (const unsigned char *) s2; unsigned char c1, c2; if (p1 == p2) return 0; do { c1 = c_tolower (*p1); c2 = c_tolower (*p2); if (c1 == '\0') break; ++p1; ++p2; } while (c1 == c2); if (UCHAR_MAX <= INT_MAX) return c1 - c2; else /* On machines where 'char' and 'int' are types of the same size, the difference of two 'unsigned char' values - including the sign bit - doesn't fit in an 'int'. */ return _GL_CMP (c1, c2); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/findprog-in.c����������������������������������������������������������������������0000644�0000000�0000000�00000032524�14226564446�013255� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locating a program in a given path. Copyright (C) 2001-2004, 2006-2022 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001, 2019. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "findprog.h" #include <errno.h> #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/stat.h> #include "filename.h" #include "concat-filename.h" #if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Native Windows, OS/2, DOS */ # define NATIVE_SLASH '\\' #else /* Unix */ # define NATIVE_SLASH '/' #endif /* Separator in PATH like lists of pathnames. */ #if (defined _WIN32 && !defined __CYGWIN__) || defined __EMX__ || defined __DJGPP__ /* Native Windows, OS/2, DOS */ # define PATH_SEPARATOR ';' #else /* Unix */ # define PATH_SEPARATOR ':' #endif /* The list of suffixes that the execlp/execvp function tries when searching for the program. */ static const char * const suffixes[] = { #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ "", ".com", ".exe", ".bat", ".cmd" /* Note: Files without any suffix are not considered executable. */ /* Note: The cmd.exe program does a different lookup: It searches according to the PATHEXT environment variable. See <https://stackoverflow.com/questions/7839150/>. Also, it executes files ending in .bat and .cmd directly without letting the kernel interpret the program file. */ #elif defined __CYGWIN__ "", ".exe", ".com" #elif defined __EMX__ "", ".exe" #elif defined __DJGPP__ "", ".com", ".exe", ".bat" #else /* Unix */ "" #endif }; const char * find_in_given_path (const char *progname, const char *path, const char *directory, bool optimize_for_exec) { { bool has_slash = false; { const char *p; for (p = progname; *p != '\0'; p++) if (ISSLASH (*p)) { has_slash = true; break; } } if (has_slash) { /* If progname contains a slash, it is either absolute or relative to the current directory. PATH is not used. */ if (optimize_for_exec) /* The execl/execv/execlp/execvp functions will try the various suffixes anyway and fail if no executable is found. */ return progname; else { /* Try the various suffixes and see whether one of the files with such a suffix is actually executable. */ int failure_errno; size_t i; const char *directory_as_prefix = (directory != NULL && IS_RELATIVE_FILE_NAME (progname) ? directory : ""); #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ const char *progbasename; { const char *p; progbasename = progname; for (p = progname; *p != '\0'; p++) if (ISSLASH (*p)) progbasename = p + 1; } bool progbasename_has_dot = (strchr (progbasename, '.') != NULL); #endif /* Try all platform-dependent suffixes. */ failure_errno = ENOENT; for (i = 0; i < sizeof (suffixes) / sizeof (suffixes[0]); i++) { const char *suffix = suffixes[i]; #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ /* File names without a '.' are not considered executable, and for file names with a '.' no additional suffix is tried. */ if ((*suffix != '\0') != progbasename_has_dot) #endif { /* Concatenate directory_as_prefix, progname, suffix. */ char *progpathname = concatenated_filename (directory_as_prefix, progname, suffix); if (progpathname == NULL) return NULL; /* errno is set here */ /* On systems which have the eaccess() system call, let's use it. On other systems, let's hope that this program is not installed setuid or setgid, so that it is ok to call access() despite its design flaw. */ if (eaccess (progpathname, X_OK) == 0) { /* Check that the progpathname does not point to a directory. */ struct stat statbuf; if (stat (progpathname, &statbuf) >= 0) { if (! S_ISDIR (statbuf.st_mode)) { /* Found! */ if (strcmp (progpathname, progname) == 0) { free (progpathname); return progname; } else return progpathname; } errno = EACCES; } } if (errno != ENOENT) failure_errno = errno; free (progpathname); } } #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ if (failure_errno == ENOENT && !progbasename_has_dot) { /* In the loop above, we skipped suffix = "". Do this loop round now, merely to provide a better errno than ENOENT. */ char *progpathname = concatenated_filename (directory_as_prefix, progname, ""); if (progpathname == NULL) return NULL; /* errno is set here */ if (eaccess (progpathname, X_OK) == 0) { struct stat statbuf; if (stat (progpathname, &statbuf) >= 0) { if (! S_ISDIR (statbuf.st_mode)) errno = ENOEXEC; else errno = EACCES; } } failure_errno = errno; free (progpathname); } #endif errno = failure_errno; return NULL; } } } if (path == NULL) /* If PATH is not set, the default search path is implementation dependent. In practice, it is treated like an empty PATH. */ path = ""; { /* Make a copy, to prepare for destructive modifications. */ char *path_copy = strdup (path); if (path_copy == NULL) return NULL; /* errno is set here */ int failure_errno; char *path_rest; char *cp; #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ bool progname_has_dot = (strchr (progname, '.') != NULL); #endif failure_errno = ENOENT; for (path_rest = path_copy; ; path_rest = cp + 1) { const char *dir; bool last; char *dir_as_prefix_to_free; const char *dir_as_prefix; size_t i; /* Extract next directory in PATH. */ dir = path_rest; for (cp = path_rest; *cp != '\0' && *cp != PATH_SEPARATOR; cp++) ; last = (*cp == '\0'); *cp = '\0'; /* Empty PATH components designate the current directory. */ if (dir == cp) dir = "."; /* Concatenate directory and dir. */ if (directory != NULL && IS_RELATIVE_FILE_NAME (dir)) { dir_as_prefix_to_free = concatenated_filename (directory, dir, NULL); if (dir_as_prefix_to_free == NULL) { /* errno is set here. */ failure_errno = errno; goto failed; } dir_as_prefix = dir_as_prefix_to_free; } else { dir_as_prefix_to_free = NULL; dir_as_prefix = dir; } /* Try all platform-dependent suffixes. */ for (i = 0; i < sizeof (suffixes) / sizeof (suffixes[0]); i++) { const char *suffix = suffixes[i]; #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ /* File names without a '.' are not considered executable, and for file names with a '.' no additional suffix is tried. */ if ((*suffix != '\0') != progname_has_dot) #endif { /* Concatenate dir_as_prefix, progname, and suffix. */ char *progpathname = concatenated_filename (dir_as_prefix, progname, suffix); if (progpathname == NULL) { /* errno is set here. */ failure_errno = errno; free (dir_as_prefix_to_free); goto failed; } /* On systems which have the eaccess() system call, let's use it. On other systems, let's hope that this program is not installed setuid or setgid, so that it is ok to call access() despite its design flaw. */ if (eaccess (progpathname, X_OK) == 0) { /* Check that the progpathname does not point to a directory. */ struct stat statbuf; if (stat (progpathname, &statbuf) >= 0) { if (! S_ISDIR (statbuf.st_mode)) { /* Found! */ if (strcmp (progpathname, progname) == 0) { free (progpathname); /* Add the "./" prefix for real, that concatenated_filename() optimized away. This avoids a second PATH search when the caller uses execl/execv/execlp/execvp. */ progpathname = (char *) malloc (2 + strlen (progname) + 1); if (progpathname == NULL) { /* errno is set here. */ failure_errno = errno; free (dir_as_prefix_to_free); goto failed; } progpathname[0] = '.'; progpathname[1] = NATIVE_SLASH; memcpy (progpathname + 2, progname, strlen (progname) + 1); } free (dir_as_prefix_to_free); free (path_copy); return progpathname; } errno = EACCES; } } if (errno != ENOENT) failure_errno = errno; free (progpathname); } } #if defined _WIN32 && !defined __CYGWIN__ /* Native Windows */ if (failure_errno == ENOENT && !progname_has_dot) { /* In the loop above, we skipped suffix = "". Do this loop round now, merely to provide a better errno than ENOENT. */ char *progpathname = concatenated_filename (dir_as_prefix, progname, ""); if (progpathname == NULL) { /* errno is set here. */ failure_errno = errno; free (dir_as_prefix_to_free); goto failed; } if (eaccess (progpathname, X_OK) == 0) { struct stat statbuf; if (stat (progpathname, &statbuf) >= 0) { if (! S_ISDIR (statbuf.st_mode)) errno = ENOEXEC; else errno = EACCES; } } failure_errno = errno; free (progpathname); } #endif free (dir_as_prefix_to_free); if (last) break; } failed: /* Not found in PATH. */ free (path_copy); errno = failure_errno; return NULL; } } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/unlocked-io.h����������������������������������������������������������������������0000644�0000000�0000000�00000007457�14226564451�013262� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Prefer faster, non-thread-safe stdio functions if available. Copyright (C) 2001-2004, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #ifndef UNLOCKED_IO_H # define UNLOCKED_IO_H 1 /* These are wrappers for functions/macros from the GNU C library, and from other C libraries supporting POSIX's optional thread-safe functions. The standard I/O functions are thread-safe. These *_unlocked ones are more efficient but not thread-safe. That they're not thread-safe is fine since all of the applications in this package are single threaded. Also, some code that is shared with the GNU C library may invoke the *_unlocked functions directly. On hosts that lack those functions, invoke the non-thread-safe versions instead. */ # include <stdio.h> # if HAVE_DECL_CLEARERR_UNLOCKED || defined clearerr_unlocked # undef clearerr # define clearerr(x) clearerr_unlocked (x) # else # define clearerr_unlocked(x) clearerr (x) # endif # if HAVE_DECL_FEOF_UNLOCKED || defined feof_unlocked # undef feof # define feof(x) feof_unlocked (x) # else # define feof_unlocked(x) feof (x) # endif # if HAVE_DECL_FERROR_UNLOCKED || defined ferror_unlocked # undef ferror # define ferror(x) ferror_unlocked (x) # else # define ferror_unlocked(x) ferror (x) # endif # if HAVE_DECL_FFLUSH_UNLOCKED || defined fflush_unlocked # undef fflush # define fflush(x) fflush_unlocked (x) # else # define fflush_unlocked(x) fflush (x) # endif # if HAVE_DECL_FGETS_UNLOCKED || defined fgets_unlocked # undef fgets # define fgets(x,y,z) fgets_unlocked (x,y,z) # else # define fgets_unlocked(x,y,z) fgets (x,y,z) # endif # if HAVE_DECL_FPUTC_UNLOCKED || defined fputc_unlocked # undef fputc # define fputc(x,y) fputc_unlocked (x,y) # else # define fputc_unlocked(x,y) fputc (x,y) # endif # if HAVE_DECL_FPUTS_UNLOCKED || defined fputs_unlocked # undef fputs # define fputs(x,y) fputs_unlocked (x,y) # else # define fputs_unlocked(x,y) fputs (x,y) # endif # if HAVE_DECL_FREAD_UNLOCKED || defined fread_unlocked # undef fread # define fread(w,x,y,z) fread_unlocked (w,x,y,z) # else # define fread_unlocked(w,x,y,z) fread (w,x,y,z) # endif # if HAVE_DECL_FWRITE_UNLOCKED || defined fwrite_unlocked # undef fwrite # define fwrite(w,x,y,z) fwrite_unlocked (w,x,y,z) # else # define fwrite_unlocked(w,x,y,z) fwrite (w,x,y,z) # endif # if HAVE_DECL_GETC_UNLOCKED || defined get_unlocked # undef getc # define getc(x) getc_unlocked (x) # else # define getc_unlocked(x) getc (x) # endif # if HAVE_DECL_GETCHAR_UNLOCKED || defined getchar_unlocked # undef getchar # define getchar() getchar_unlocked () # else # define getchar_unlocked() getchar () # endif # if HAVE_DECL_PUTC_UNLOCKED || defined putc_unlocked # undef putc # define putc(x,y) putc_unlocked (x,y) # else # define putc_unlocked(x,y) putc (x,y) # endif # if HAVE_DECL_PUTCHAR_UNLOCKED || defined putchar_unlocked # undef putchar # define putchar(x) putchar_unlocked (x) # else # define putchar_unlocked(x) putchar (x) # endif # undef flockfile # define flockfile(x) ((void) 0) # undef ftrylockfile # define ftrylockfile(x) 0 # undef funlockfile # define funlockfile(x) ((void) 0) #endif /* UNLOCKED_IO_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/set-permissions.c������������������������������������������������������������������0000644�0000000�0000000�00000062261�14226564450�014201� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Set permissions of a file. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include <config.h> #include "acl.h" #include "acl-internal.h" #if USE_ACL # if ! defined HAVE_ACL_FROM_MODE && defined HAVE_ACL_FROM_TEXT /* FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ # if HAVE_ACL_GET_FILE && !HAVE_ACL_TYPE_EXTENDED static acl_t acl_from_mode (mode_t mode) { # if HAVE_ACL_FREE_TEXT /* Tru64 */ char acl_text[] = "u::---,g::---,o::---,"; # else /* FreeBSD, IRIX, Cygwin >= 2.5 */ char acl_text[] = "u::---,g::---,o::---"; # endif if (mode & S_IRUSR) acl_text[ 3] = 'r'; if (mode & S_IWUSR) acl_text[ 4] = 'w'; if (mode & S_IXUSR) acl_text[ 5] = 'x'; if (mode & S_IRGRP) acl_text[10] = 'r'; if (mode & S_IWGRP) acl_text[11] = 'w'; if (mode & S_IXGRP) acl_text[12] = 'x'; if (mode & S_IROTH) acl_text[17] = 'r'; if (mode & S_IWOTH) acl_text[18] = 'w'; if (mode & S_IXOTH) acl_text[19] = 'x'; return acl_from_text (acl_text); } # endif # endif # if HAVE_FACL && defined GETACL /* Solaris, Cygwin < 2.5, not HP-UX */ static int set_acls_from_mode (const char *name, int desc, mode_t mode, bool *must_chmod) { # ifdef ACE_GETACL /* Solaris also has a different variant of ACLs, used in ZFS and NFSv4 file systems (whereas the other ones are used in UFS file systems). */ /* The flags in the ace_t structure changed in a binary incompatible way when ACL_NO_TRIVIAL etc. were introduced in <sys/acl.h> version 1.15. How to distinguish the two conventions at runtime? We fetch the existing ACL. In the old convention, usually three ACEs have a_flags = ACE_OWNER / ACE_GROUP / ACE_OTHER, in the range 0x0100..0x0400. In the new convention, these values are not used. */ int convention; { /* Initially, try to read the entries into a stack-allocated buffer. Use malloc if it does not fit. */ enum { alloc_init = 4000 / sizeof (ace_t), /* >= 3 */ alloc_max = MIN (INT_MAX, SIZE_MAX / sizeof (ace_t)) }; ace_t buf[alloc_init]; size_t alloc = alloc_init; ace_t *entries = buf; ace_t *malloced = NULL; int count; for (;;) { count = (desc != -1 ? facl (desc, ACE_GETACL, alloc, entries) : acl (name, ACE_GETACL, alloc, entries)); if (count < 0 && errno == ENOSPC) { /* Increase the size of the buffer. */ free (malloced); if (alloc > alloc_max / 2) { errno = ENOMEM; return -1; } alloc = 2 * alloc; /* <= alloc_max */ entries = malloced = (ace_t *) malloc (alloc * sizeof (ace_t)); if (entries == NULL) { errno = ENOMEM; return -1; } continue; } break; } if (count <= 0) convention = -1; else { int i; convention = 0; for (i = 0; i < count; i++) if (entries[i].a_flags & (OLD_ACE_OWNER | OLD_ACE_GROUP | OLD_ACE_OTHER)) { convention = 1; break; } } free (malloced); } if (convention >= 0) { ace_t entries[6]; int count; int ret; if (convention) { /* Running on Solaris 10. */ entries[0].a_type = OLD_ALLOW; entries[0].a_flags = OLD_ACE_OWNER; entries[0].a_who = 0; /* irrelevant */ entries[0].a_access_mask = (mode >> 6) & 7; entries[1].a_type = OLD_ALLOW; entries[1].a_flags = OLD_ACE_GROUP; entries[1].a_who = 0; /* irrelevant */ entries[1].a_access_mask = (mode >> 3) & 7; entries[2].a_type = OLD_ALLOW; entries[2].a_flags = OLD_ACE_OTHER; entries[2].a_who = 0; entries[2].a_access_mask = mode & 7; count = 3; } else { /* Running on Solaris 10 (newer version) or Solaris 11. The details here were found through "/bin/ls -lvd somefiles". */ entries[0].a_type = NEW_ACE_ACCESS_DENIED_ACE_TYPE; entries[0].a_flags = NEW_ACE_OWNER; entries[0].a_who = 0; /* irrelevant */ entries[0].a_access_mask = 0; entries[1].a_type = NEW_ACE_ACCESS_ALLOWED_ACE_TYPE; entries[1].a_flags = NEW_ACE_OWNER; entries[1].a_who = 0; /* irrelevant */ entries[1].a_access_mask = NEW_ACE_WRITE_NAMED_ATTRS | NEW_ACE_WRITE_ATTRIBUTES | NEW_ACE_WRITE_ACL | NEW_ACE_WRITE_OWNER; if (mode & 0400) entries[1].a_access_mask |= NEW_ACE_READ_DATA; else entries[0].a_access_mask |= NEW_ACE_READ_DATA; if (mode & 0200) entries[1].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; else entries[0].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; if (mode & 0100) entries[1].a_access_mask |= NEW_ACE_EXECUTE; else entries[0].a_access_mask |= NEW_ACE_EXECUTE; entries[2].a_type = NEW_ACE_ACCESS_DENIED_ACE_TYPE; entries[2].a_flags = NEW_ACE_GROUP | NEW_ACE_IDENTIFIER_GROUP; entries[2].a_who = 0; /* irrelevant */ entries[2].a_access_mask = 0; entries[3].a_type = NEW_ACE_ACCESS_ALLOWED_ACE_TYPE; entries[3].a_flags = NEW_ACE_GROUP | NEW_ACE_IDENTIFIER_GROUP; entries[3].a_who = 0; /* irrelevant */ entries[3].a_access_mask = 0; if (mode & 0040) entries[3].a_access_mask |= NEW_ACE_READ_DATA; else entries[2].a_access_mask |= NEW_ACE_READ_DATA; if (mode & 0020) entries[3].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; else entries[2].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; if (mode & 0010) entries[3].a_access_mask |= NEW_ACE_EXECUTE; else entries[2].a_access_mask |= NEW_ACE_EXECUTE; entries[4].a_type = NEW_ACE_ACCESS_DENIED_ACE_TYPE; entries[4].a_flags = NEW_ACE_EVERYONE; entries[4].a_who = 0; entries[4].a_access_mask = NEW_ACE_WRITE_NAMED_ATTRS | NEW_ACE_WRITE_ATTRIBUTES | NEW_ACE_WRITE_ACL | NEW_ACE_WRITE_OWNER; entries[5].a_type = NEW_ACE_ACCESS_ALLOWED_ACE_TYPE; entries[5].a_flags = NEW_ACE_EVERYONE; entries[5].a_who = 0; entries[5].a_access_mask = NEW_ACE_READ_NAMED_ATTRS | NEW_ACE_READ_ATTRIBUTES | NEW_ACE_READ_ACL | NEW_ACE_SYNCHRONIZE; if (mode & 0004) entries[5].a_access_mask |= NEW_ACE_READ_DATA; else entries[4].a_access_mask |= NEW_ACE_READ_DATA; if (mode & 0002) entries[5].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; else entries[4].a_access_mask |= NEW_ACE_WRITE_DATA | NEW_ACE_APPEND_DATA; if (mode & 0001) entries[5].a_access_mask |= NEW_ACE_EXECUTE; else entries[4].a_access_mask |= NEW_ACE_EXECUTE; count = 6; } if (desc != -1) ret = facl (desc, ACE_SETACL, count, entries); else ret = acl (name, ACE_SETACL, count, entries); if (ret < 0 && errno != EINVAL && errno != ENOTSUP) { if (errno == ENOSYS) { *must_chmod = true; return 0; } return -1; } if (ret == 0) return 0; } # endif { aclent_t entries[3]; int ret; entries[0].a_type = USER_OBJ; entries[0].a_id = 0; /* irrelevant */ entries[0].a_perm = (mode >> 6) & 7; entries[1].a_type = GROUP_OBJ; entries[1].a_id = 0; /* irrelevant */ entries[1].a_perm = (mode >> 3) & 7; entries[2].a_type = OTHER_OBJ; entries[2].a_id = 0; entries[2].a_perm = mode & 7; if (desc != -1) ret = facl (desc, SETACL, sizeof (entries) / sizeof (aclent_t), entries); else ret = acl (name, SETACL, sizeof (entries) / sizeof (aclent_t), entries); if (ret < 0) { if (errno == ENOSYS || errno == EOPNOTSUPP) { *must_chmod = true; return 0; } return -1; } return 0; } } # elif HAVE_GETACL /* HP-UX */ static int context_acl_from_mode (struct permission_context *ctx, const char *name, int desc) { struct stat statbuf; int ret; if (desc != -1) ret = fstat (desc, &statbuf); else ret = stat (name, &statbuf); if (ret < 0) return -1; ctx->entries[0].uid = statbuf.st_uid; ctx->entries[0].gid = ACL_NSGROUP; ctx->entries[0].mode = (ctx->mode >> 6) & 7; ctx->entries[1].uid = ACL_NSUSER; ctx->entries[1].gid = statbuf.st_gid; ctx->entries[1].mode = (ctx->mode >> 3) & 7; ctx->entries[2].uid = ACL_NSUSER; ctx->entries[2].gid = ACL_NSGROUP; ctx->entries[2].mode = ctx->mode & 7; ctx->count = 3; return 0; } # if HAVE_ACLV_H /* HP-UX >= 11.11 */ static int context_aclv_from_mode (struct permission_context *ctx) { int ret; ctx->aclv_entries[0].a_type = USER_OBJ; ctx->aclv_entries[0].a_id = 0; /* irrelevant */ ctx->aclv_entries[0].a_perm = (ctx->mode >> 6) & 7; ctx->aclv_entries[1].a_type = GROUP_OBJ; ctx->aclv_entries[1].a_id = 0; /* irrelevant */ ctx->aclv_entries[1].a_perm = (ctx->mode >> 3) & 7; ctx->aclv_entries[2].a_type = CLASS_OBJ; ctx->aclv_entries[2].a_id = 0; ctx->aclv_entries[2].a_perm = (ctx->mode >> 3) & 7; ctx->aclv_entries[3].a_type = OTHER_OBJ; ctx->aclv_entries[3].a_id = 0; ctx->aclv_entries[3].a_perm = ctx->mode & 7; ctx->aclv_count = 4; ret = aclsort (ctx->aclv_count, 1, ctx->aclv_entries); if (ret > 0) abort (); return ret; } # endif # elif HAVE_ACLX_GET && defined ACL_AIX_WIP /* AIX */ static int set_acls_from_mode (const char *name, int desc, mode_t mode, bool *must_chmod) { acl_type_list_t types; size_t types_size = sizeof (types); acl_type_t type; if (aclx_gettypes (name, &types, &types_size) < 0 || types.num_entries == 0) { *must_chmod = true; return 0; } /* XXX Do we need to clear all types of ACLs for the given file, or is it sufficient to clear the first one? */ type = types.entries[0]; if (type.u64 == ACL_AIXC) { union { struct acl a; char room[128]; } u; int ret; u.a.acl_len = (char *) &u.a.acl_ext[0] - (char *) &u.a; /* no entries */ u.a.acl_mode = mode & ~(S_IXACL | 0777); u.a.u_access = (mode >> 6) & 7; u.a.g_access = (mode >> 3) & 7; u.a.o_access = mode & 7; if (desc != -1) ret = aclx_fput (desc, SET_ACL | SET_MODE_S_BITS, type, &u.a, u.a.acl_len, mode); else ret = aclx_put (name, SET_ACL | SET_MODE_S_BITS, type, &u.a, u.a.acl_len, mode); if (!(ret < 0 && errno == ENOSYS)) return ret; } else if (type.u64 == ACL_NFS4) { union { nfs4_acl_int_t a; char room[128]; } u; nfs4_ace_int_t *ace; int ret; u.a.aclVersion = NFS4_ACL_INT_STRUCT_VERSION; u.a.aclEntryN = 0; ace = &u.a.aclEntry[0]; { ace->flags = ACE4_ID_SPECIAL; ace->aceWho.special_whoid = ACE4_WHO_OWNER; ace->aceType = ACE4_ACCESS_ALLOWED_ACE_TYPE; ace->aceFlags = 0; ace->aceMask = (mode & 0400 ? ACE4_READ_DATA | ACE4_LIST_DIRECTORY : 0) | (mode & 0200 ? ACE4_WRITE_DATA | ACE4_ADD_FILE | ACE4_APPEND_DATA | ACE4_ADD_SUBDIRECTORY : 0) | (mode & 0100 ? ACE4_EXECUTE : 0); ace->aceWhoString[0] = '\0'; ace->entryLen = (char *) &ace->aceWhoString[4] - (char *) ace; ace = (nfs4_ace_int_t *) (char *) &ace->aceWhoString[4]; u.a.aclEntryN++; } { ace->flags = ACE4_ID_SPECIAL; ace->aceWho.special_whoid = ACE4_WHO_GROUP; ace->aceType = ACE4_ACCESS_ALLOWED_ACE_TYPE; ace->aceFlags = 0; ace->aceMask = (mode & 0040 ? ACE4_READ_DATA | ACE4_LIST_DIRECTORY : 0) | (mode & 0020 ? ACE4_WRITE_DATA | ACE4_ADD_FILE | ACE4_APPEND_DATA | ACE4_ADD_SUBDIRECTORY : 0) | (mode & 0010 ? ACE4_EXECUTE : 0); ace->aceWhoString[0] = '\0'; ace->entryLen = (char *) &ace->aceWhoString[4] - (char *) ace; ace = (nfs4_ace_int_t *) (char *) &ace->aceWhoString[4]; u.a.aclEntryN++; } { ace->flags = ACE4_ID_SPECIAL; ace->aceWho.special_whoid = ACE4_WHO_EVERYONE; ace->aceType = ACE4_ACCESS_ALLOWED_ACE_TYPE; ace->aceFlags = 0; ace->aceMask = (mode & 0004 ? ACE4_READ_DATA | ACE4_LIST_DIRECTORY : 0) | (mode & 0002 ? ACE4_WRITE_DATA | ACE4_ADD_FILE | ACE4_APPEND_DATA | ACE4_ADD_SUBDIRECTORY : 0) | (mode & 0001 ? ACE4_EXECUTE : 0); ace->aceWhoString[0] = '\0'; ace->entryLen = (char *) &ace->aceWhoString[4] - (char *) ace; ace = (nfs4_ace_int_t *) (char *) &ace->aceWhoString[4]; u.a.aclEntryN++; } u.a.aclLength = (char *) ace - (char *) &u.a; if (desc != -1) ret = aclx_fput (desc, SET_ACL | SET_MODE_S_BITS, type, &u.a, u.a.aclLength, mode); else ret = aclx_put (name, SET_ACL | SET_MODE_S_BITS, type, &u.a, u.a.aclLength, mode); if (!(ret < 0 && errno == ENOSYS)) return ret; } *must_chmod = true; return 0; } # elif HAVE_STATACL /* older AIX */ static int context_acl_from_mode (struct permission_context *ctx) { ctx->u.a.acl_len = (char *) &ctx->u.a.acl_ext[0] - (char *) &ctx->u.a; /* no entries */ ctx->u.a.acl_mode = ctx->mode & ~(S_IXACL | 0777); ctx->u.a.u_access = (ctx->mode >> 6) & 7; ctx->u.a.g_access = (ctx->mode >> 3) & 7; ctx->u.a.o_access = ctx->mode & 7; ctx->have_u = true; return 0; } # elif HAVE_ACLSORT /* NonStop Kernel */ static int context_acl_from_mode (struct permission_context *ctx) { int ret; ctx->entries[0].a_type = USER_OBJ; ctx->entries[0].a_id = 0; /* irrelevant */ ctx->entries[0].a_perm = (ctx->mode >> 6) & 7; ctx->entries[1].a_type = GROUP_OBJ; ctx->entries[1].a_id = 0; /* irrelevant */ ctx->entries[1].a_perm = (ctx->mode >> 3) & 7; ctx->entries[2].a_type = CLASS_OBJ; ctx->entries[2].a_id = 0; ctx->entries[2].a_perm = (ctx->mode >> 3) & 7; ctx->entries[3].a_type = OTHER_OBJ; ctx->entries[3].a_id = 0; ctx->entries[3].a_perm = ctx->mode & 7; ctx->count = 4; ret = aclsort (ctx->count, 1, entries); if (ret > 0) abort (); return ret; } # endif static int set_acls (struct permission_context *ctx, const char *name, int desc, int from_mode, bool *must_chmod, bool *acls_set) { int ret = 0; # if HAVE_ACL_GET_FILE /* POSIX 1003.1e (draft 17 -- abandoned) specific version. */ /* Linux, FreeBSD, Mac OS X, IRIX, Tru64, Cygwin >= 2.5 */ # if !HAVE_ACL_TYPE_EXTENDED /* Linux, FreeBSD, IRIX, Tru64, Cygwin >= 2.5 */ # ifndef HAVE_ACL_FROM_TEXT # error Must have acl_from_text (see POSIX 1003.1e draft 17). # endif # ifndef HAVE_ACL_DELETE_DEF_FILE # error Must have acl_delete_def_file (see POSIX 1003.1e draft 17). # endif if (! ctx->acls_not_supported) { if (ret == 0 && from_mode) { if (ctx->acl) acl_free (ctx->acl); ctx->acl = acl_from_mode (ctx->mode); if (ctx->acl == NULL) ret = -1; } if (ret == 0 && ctx->acl) { if (HAVE_ACL_SET_FD && desc != -1) ret = acl_set_fd (desc, ctx->acl); else ret = acl_set_file (name, ACL_TYPE_ACCESS, ctx->acl); if (ret != 0) { if (! acl_errno_valid (errno)) { ctx->acls_not_supported = true; if (from_mode || acl_access_nontrivial (ctx->acl) == 0) ret = 0; } } else { *acls_set = true; if (S_ISDIR(ctx->mode)) { if (! from_mode && ctx->default_acl && acl_default_nontrivial (ctx->default_acl)) ret = acl_set_file (name, ACL_TYPE_DEFAULT, ctx->default_acl); else ret = acl_delete_def_file (name); } } } } # if HAVE_ACL_TYPE_NFS4 /* FreeBSD */ /* File systems either support POSIX ACLs (for example, ufs) or NFS4 ACLs (for example, zfs). */ /* TODO: Implement setting ACLs once get_permissions() reads them. */ # endif # else /* HAVE_ACL_TYPE_EXTENDED */ /* Mac OS X */ /* On Mac OS X, acl_get_file (name, ACL_TYPE_ACCESS) and acl_get_file (name, ACL_TYPE_DEFAULT) always return NULL / EINVAL. You have to use acl_get_file (name, ACL_TYPE_EXTENDED) or acl_get_fd (open (name, ...)) to retrieve an ACL. On the other hand, acl_set_file (name, ACL_TYPE_ACCESS, acl) and acl_set_file (name, ACL_TYPE_DEFAULT, acl) have the same effect as acl_set_file (name, ACL_TYPE_EXTENDED, acl): Each of these calls sets the file's ACL. */ if (ctx->acl == NULL) { acl_t acl; /* Remove ACLs if the file has ACLs. */ if (HAVE_ACL_GET_FD && desc != -1) acl = acl_get_fd (desc); else acl = acl_get_file (name, ACL_TYPE_EXTENDED); if (acl) { acl_free (acl); acl = acl_init (0); if (acl) { if (HAVE_ACL_SET_FD && desc != -1) ret = acl_set_fd (desc, acl); else ret = acl_set_file (name, ACL_TYPE_EXTENDED, acl); acl_free (acl); } else ret = -1; } } else { if (HAVE_ACL_SET_FD && desc != -1) ret = acl_set_fd (desc, ctx->acl); else ret = acl_set_file (name, ACL_TYPE_EXTENDED, ctx->acl); if (ret != 0) { if (! acl_errno_valid (errno) && ! acl_extended_nontrivial (ctx->acl)) ret = 0; } } *acls_set = true; # endif # elif defined GETACL /* Solaris, Cygwin, not HP-UX */ /* Solaris 2.5 through Solaris 10, Cygwin, and contemporaneous versions of Unixware. The acl() call returns the access and default ACL both at once. */ /* If both ace_entries and entries are available, try SETACL before ACE_SETACL, because SETACL cannot fail with ENOTSUP whereas ACE_SETACL can. */ if (from_mode) return set_acls_from_mode (name, desc, ctx->mode, must_chmod); if (ret == 0 && ctx->count) { if (desc != -1) ret = facl (desc, SETACL, ctx->count, ctx->entries); else ret = acl (name, SETACL, ctx->count, ctx->entries); if (ret < 0) { if ((errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) && acl_nontrivial (ctx->count, ctx->entries) == 0) ret = 0; } else *acls_set = true; } # ifdef ACE_GETACL if (ret == 0 && ctx->ace_count) { if (desc != -1) ret = facl (desc, ACE_SETACL, ctx->ace_count, ctx->ace_entries); else ret = acl (name, ACE_SETACL, ctx->ace_count, ctx->ace_entries); if (ret < 0) { if ((errno == ENOSYS || errno == EINVAL || errno == ENOTSUP) && acl_ace_nontrivial (ctx->ace_count, ctx->ace_entries) == 0) ret = 0; } else *acls_set = true; } # endif # elif HAVE_GETACL /* HP-UX */ if (from_mode) ret = context_acl_from_mode (ctx, name, desc); if (ret == 0 && ctx->count > 0) { if (desc != -1) ret = fsetacl (desc, ctx->count, ctx->entries); else ret = setacl (name, ctx->count, ctx->entries); if (ret < 0) { if ((errno == ENOSYS || errno == EOPNOTSUPP || errno == ENOTSUP) && (from_mode || !acl_nontrivial (ctx->count, ctx->entries))) ret = 0; } else *acls_set = true; } # if HAVE_ACLV_H if (from_mode) ret = context_aclv_from_mode (ctx); if (ret == 0 && ctx->aclv_count > 0) { ret = acl ((char *) name, ACL_SET, ctx->aclv_count, ctx->aclv_entries); if (ret < 0) { if ((errno == ENOSYS || errno == EOPNOTSUPP || errno == EINVAL) && (from_mode || !aclv_nontrivial (ctx->aclv_count, ctx->aclv_entries))) ret = 0; } else *acls_set = true; } # endif # elif HAVE_ACLX_GET && ACL_AIX_WIP /* AIX */ /* TODO: Implement setting ACLs once get_permissions() reads them. */ if (from_mode) ret = set_acls_from_mode (name, desc, mode, must_chmod); # elif HAVE_STATACL /* older AIX */ if (from_mode) ret = context_acl_from_mode (ctx); if (ret == 0 && ctx->have_u) { if (desc != -1) ret = fchacl (desc, &ctx->u.a, ctx->u.a.acl_len); else ret = chacl ((char *) name, &ctx->u.a, ctx->u.a.acl_len); if (ret < 0) { if (errno == ENOSYS && from_mode) ret = 0; } else *acls_set = true; } # elif HAVE_ACLSORT /* NonStop Kernel */ if (from_mode) ret = context_acl_from_mode (ctx); if (ret == 0 && ctx->count) { ret = acl ((char *) name, ACL_SET, ctx->count, ctx->entries); if (ret != 0) { if (!acl_nontrivial (ctx->count, ctx->entries)) ret = 0; } else *acls_set = true; } # else /* No ACLs */ /* Nothing to do. */ # endif return ret; } #endif /* If DESC is a valid file descriptor use fchmod to change the file's mode to MODE on systems that have fchmod. On systems that don't have fchmod and if DESC is invalid, use chmod on NAME instead. Return 0 if successful. Return -1 and set errno upon failure. */ int chmod_or_fchmod (const char *name, int desc, mode_t mode) { if (HAVE_FCHMOD && desc != -1) return fchmod (desc, mode); else return chmod (name, mode); } /* Set the permissions in CTX on a file. If DESC is a valid file descriptor, use file descriptor operations, else use filename based operations on NAME. If access control lists are not available, fchmod the target file to the mode in CTX. Also sets the non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX) to those from the mode in CTX if any are set. Return 0 if successful. Return -1 and set errno upon failure. */ int set_permissions (struct permission_context *ctx, const char *name, int desc) { _GL_UNUSED bool acls_set = false; bool early_chmod; bool must_chmod = false; int ret = 0; #if USE_ACL # if HAVE_STATACL /* older AIX */ /* There is no need to call chmod_or_fchmod, since the mode bits S_ISUID, S_ISGID, S_ISVTX are also stored in the ACL. */ early_chmod = false; # else /* All other platforms */ /* On Cygwin, it is necessary to call chmod before acl, because chmod can change the contents of the ACL (in ways that don't change the allowed accesses, but still visible). */ early_chmod = (! MODE_INSIDE_ACL || (ctx->mode & (S_ISUID | S_ISGID | S_ISVTX))); # endif #else /* No ACLs */ early_chmod = true; #endif if (early_chmod) { ret = chmod_or_fchmod (name, desc, ctx->mode); if (ret != 0) return -1; } #if USE_ACL ret = set_acls (ctx, name, desc, false, &must_chmod, &acls_set); if (! acls_set) { int saved_errno = ret ? errno : 0; /* If we can't set an acl which we expect to be able to set, try setting the permissions to ctx->mode. Due to possible inherited permissions, we cannot simply chmod. */ ret = set_acls (ctx, name, desc, true, &must_chmod, &acls_set); if (! acls_set) must_chmod = true; if (saved_errno) { errno = saved_errno; ret = -1; } } #endif if (must_chmod && ! early_chmod) { int saved_errno = ret ? errno : 0; ret = chmod_or_fchmod (name, desc, ctx->mode); if (saved_errno) { errno = saved_errno; ret = -1; } } return ret; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/copy-file.h������������������������������������������������������������������������0000644�0000000�0000000�00000003505�14226564447�012733� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copying of files. Copyright (C) 2001-2003, 2009-2022 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef __cplusplus extern "C" { #endif /* Error codes returned by qcopy_file_preserving. */ enum { GL_COPY_ERR_OPEN_READ = -1, GL_COPY_ERR_OPEN_BACKUP_WRITE = -2, GL_COPY_ERR_READ = -3, GL_COPY_ERR_WRITE = -4, GL_COPY_ERR_AFTER_READ = -5, GL_COPY_ERR_GET_ACL = -6, GL_COPY_ERR_SET_ACL = -7 }; /* Copy a regular file: from src_filename to dest_filename. The destination file is assumed to be a backup file. Modification times, owner, group and access permissions are preserved as far as possible. Return 0 if successful, otherwise set errno and return one of the error codes above. */ extern int qcopy_file_preserving (const char *src_filename, const char *dest_filename); /* Copy a regular file: from src_filename to dest_filename. The destination file is assumed to be a backup file. Modification times, owner, group and access permissions are preserved as far as possible. Exit upon failure. */ extern void copy_file_preserving (const char *src_filename, const char *dest_filename); #ifdef __cplusplus } #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/se-label.c�������������������������������������������������������������������������0000644�0000000�0000000�00000001534�14226564447�012523� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacements for <selinux/label.h> functions. Copyright 2020-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define SE_LABEL_INLINE _GL_EXTERN_INLINE #include <selinux/label.h> ��������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/wait-process.c���������������������������������������������������������������������0000644�0000000�0000000�00000026454�14226564451�013462� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Waiting for a subprocess to finish. Copyright (C) 2001-2003, 2005-2022 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "wait-process.h" #include <errno.h> #include <stdlib.h> #include <string.h> #include <signal.h> #include <sys/types.h> #include <sys/wait.h> #include "error.h" #include "fatal-signal.h" #include "xalloc.h" #include "gettext.h" #define _(str) gettext (str) #define SIZEOF(a) (sizeof(a) / sizeof(a[0])) #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> /* The return value of _spawnvp() is really a process handle as returned by CreateProcess(). Therefore we can kill it using TerminateProcess. */ # define kill(pid,sig) TerminateProcess ((HANDLE) (pid), sig) #endif /* Type of an entry in the slaves array. The 'used' bit determines whether this entry is currently in use. (If pid_t was an atomic type like sig_atomic_t, we could just set the 'child' field to 0 when unregistering a slave process, and wouldn't need the 'used' field.) The 'used' and 'child' fields are accessed from within the cleanup_slaves() action, therefore we mark them as 'volatile'. */ typedef struct { volatile sig_atomic_t used; volatile pid_t child; } slaves_entry_t; /* The registered slave subprocesses. */ static slaves_entry_t static_slaves[32]; static slaves_entry_t * volatile slaves = static_slaves; static sig_atomic_t volatile slaves_count = 0; static size_t slaves_allocated = SIZEOF (static_slaves); /* The termination signal for slave subprocesses. 2003-10-07: Terminator becomes Governator. */ #ifdef SIGHUP # define TERMINATOR SIGHUP #else # define TERMINATOR SIGTERM #endif /* The cleanup action. It gets called asynchronously. */ static _GL_ASYNC_SAFE void cleanup_slaves (void) { for (;;) { /* Get the last registered slave. */ size_t n = slaves_count; if (n == 0) break; n--; slaves_count = n; /* Skip unused entries in the slaves array. */ if (slaves[n].used) { pid_t slave = slaves[n].child; /* Kill the slave. */ kill (slave, TERMINATOR); } } } /* The cleanup action, taking a signal argument. It gets called asynchronously. */ static _GL_ASYNC_SAFE void cleanup_slaves_action (_GL_UNUSED int sig) { cleanup_slaves (); } /* Register a subprocess as being a slave process. This means that the subprocess will be terminated when its creator receives a catchable fatal signal or exits normally. Registration ends when wait_subprocess() notices that the subprocess has exited. */ void register_slave_subprocess (pid_t child) { static bool cleanup_slaves_registered = false; if (!cleanup_slaves_registered) { atexit (cleanup_slaves); if (at_fatal_signal (cleanup_slaves_action) < 0) xalloc_die (); cleanup_slaves_registered = true; } /* Try to store the new slave in an unused entry of the slaves array. */ { slaves_entry_t *s = slaves; slaves_entry_t *s_end = s + slaves_count; for (; s < s_end; s++) if (!s->used) { /* The two uses of 'volatile' in the slaves_entry_t type above (and ISO C 99 section 5.1.2.3.(5)) ensure that we mark the entry as used only after the child pid has been written to the memory location s->child. */ s->child = child; s->used = 1; return; } } if (slaves_count == slaves_allocated) { /* Extend the slaves array. Note that we cannot use xrealloc(), because then the cleanup_slaves() function could access an already deallocated array. */ slaves_entry_t *old_slaves = slaves; size_t new_slaves_allocated = 2 * slaves_allocated; slaves_entry_t *new_slaves = (slaves_entry_t *) malloc (new_slaves_allocated * sizeof (slaves_entry_t)); if (new_slaves == NULL) { /* xalloc_die() will call exit() which will invoke cleanup_slaves(). Additionally we need to kill child, because it's not yet among the slaves list. */ kill (child, TERMINATOR); xalloc_die (); } memcpy (new_slaves, old_slaves, slaves_allocated * sizeof (slaves_entry_t)); slaves = new_slaves; slaves_allocated = new_slaves_allocated; /* Now we can free the old slaves array. */ if (old_slaves != static_slaves) free (old_slaves); } /* The three uses of 'volatile' in the types above (and ISO C 99 section 5.1.2.3.(5)) ensure that we increment the slaves_count only after the new slave and its 'used' bit have been written to the memory locations that make up slaves[slaves_count]. */ slaves[slaves_count].child = child; slaves[slaves_count].used = 1; slaves_count++; } /* Unregister a child from the list of slave subprocesses. */ static void unregister_slave_subprocess (pid_t child) { /* The easiest way to remove an entry from a list that can be used by an asynchronous signal handler is just to mark it as unused. For this, we rely on sig_atomic_t. */ slaves_entry_t *s = slaves; slaves_entry_t *s_end = s + slaves_count; for (; s < s_end; s++) if (s->used && s->child == child) s->used = 0; } /* Wait for a subprocess to finish. Return its exit code. If it didn't terminate correctly, exit if exit_on_error is true, otherwise return 127. */ int wait_subprocess (pid_t child, const char *progname, bool ignore_sigpipe, bool null_stderr, bool slave_process, bool exit_on_error, int *termsigp) { #if HAVE_WAITID && defined WNOWAIT && 0 /* Commented out because waitid() without WEXITED and with WNOWAIT doesn't work: On Solaris 7 and OSF/1 4.0, it returns -1 and sets errno = ECHILD, and on HP-UX 10.20 it just hangs. */ /* Use of waitid() with WNOWAIT avoids a race condition: If slave_process is true, and this process sleeps a very long time between the return from waitpid() and the execution of unregister_slave_subprocess(), and meanwhile another process acquires the same PID as child, and then - still before unregister_slave_subprocess() - this process gets a fatal signal, it would kill the other totally unrelated process. */ siginfo_t info; if (termsigp != NULL) *termsigp = 0; for (;;) { if (waitid (P_PID, child, &info, WEXITED | (slave_process ? WNOWAIT : 0)) < 0) { # ifdef EINTR if (errno == EINTR) continue; # endif if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, errno, _("%s subprocess"), progname); return 127; } /* info.si_code is set to one of CLD_EXITED, CLD_KILLED, CLD_DUMPED, CLD_TRAPPED, CLD_STOPPED, CLD_CONTINUED. Loop until the program terminates. */ if (info.si_code == CLD_EXITED || info.si_code == CLD_KILLED || info.si_code == CLD_DUMPED) break; } /* The child process has exited or was signalled. */ if (slave_process) { /* Unregister the child from the list of slave subprocesses, so that later, when we exit, we don't kill a totally unrelated process which may have acquired the same pid. */ unregister_slave_subprocess (child); /* Now remove the zombie from the process list. */ for (;;) { if (waitid (P_PID, child, &info, WEXITED) < 0) { # ifdef EINTR if (errno == EINTR) continue; # endif if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, errno, _("%s subprocess"), progname); return 127; } break; } } switch (info.si_code) { case CLD_KILLED: case CLD_DUMPED: if (termsigp != NULL) *termsigp = info.si_status; /* TODO: or info.si_signo? */ # ifdef SIGPIPE if (info.si_status == SIGPIPE && ignore_sigpipe) return 0; # endif if (exit_on_error || (!null_stderr && termsigp == NULL)) error (exit_on_error ? EXIT_FAILURE : 0, 0, _("%s subprocess got fatal signal %d"), progname, info.si_status); return 127; case CLD_EXITED: if (info.si_status == 127) { if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, 0, _("%s subprocess failed"), progname); return 127; } return info.si_status; default: abort (); } #else /* waitpid() is just as portable as wait() nowadays. */ int status; if (termsigp != NULL) *termsigp = 0; status = 0; for (;;) { int result = waitpid (child, &status, 0); if (result != child) { # ifdef EINTR if (errno == EINTR) continue; # endif # if 0 /* defined ECHILD */ if (errno == ECHILD) { /* Child process nonexistent?! Assume it terminated successfully. */ status = 0; break; } # endif if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, errno, _("%s subprocess"), progname); return 127; } /* One of WIFSIGNALED (status), WIFEXITED (status), WIFSTOPPED (status) must always be true, since we did not specify WCONTINUED in the waitpid() call. Loop until the program terminates. */ if (!WIFSTOPPED (status)) break; } /* The child process has exited or was signalled. */ if (slave_process) /* Unregister the child from the list of slave subprocesses, so that later, when we exit, we don't kill a totally unrelated process which may have acquired the same pid. */ unregister_slave_subprocess (child); if (WIFSIGNALED (status)) { if (termsigp != NULL) *termsigp = WTERMSIG (status); # ifdef SIGPIPE if (WTERMSIG (status) == SIGPIPE && ignore_sigpipe) return 0; # endif if (exit_on_error || (!null_stderr && termsigp == NULL)) error (exit_on_error ? EXIT_FAILURE : 0, 0, _("%s subprocess got fatal signal %d"), progname, (int) WTERMSIG (status)); return 127; } if (!WIFEXITED (status)) abort (); if (WEXITSTATUS (status) == 127) { if (exit_on_error || !null_stderr) error (exit_on_error ? EXIT_FAILURE : 0, 0, _("%s subprocess failed"), progname); return 127; } return WEXITSTATUS (status); #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/openat-priv.h����������������������������������������������������������������������0000644�0000000�0000000�00000005064�14226564447�013312� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Internals for openat-like functions. Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #ifndef _GL_HEADER_OPENAT_PRIV #define _GL_HEADER_OPENAT_PRIV #include <errno.h> #include <limits.h> #include <stdlib.h> /* Maximum number of bytes that it is safe to allocate as a single array on the stack, and that is known as a compile-time constant. The assumption is that we'll touch the array very quickly, or a temporary very near the array, provoking an out-of-memory trap. On some operating systems, there is only one guard page for the stack, and a page size can be as small as 4096 bytes. Subtract 64 in the hope that this will let the compiler touch a nearby temporary and provoke a trap. */ #define SAFER_ALLOCA_MAX (4096 - 64) #define SAFER_ALLOCA(m) ((m) < SAFER_ALLOCA_MAX ? (m) : SAFER_ALLOCA_MAX) #if defined PATH_MAX # define OPENAT_BUFFER_SIZE SAFER_ALLOCA (PATH_MAX) #elif defined _XOPEN_PATH_MAX # define OPENAT_BUFFER_SIZE SAFER_ALLOCA (_XOPEN_PATH_MAX) #else # define OPENAT_BUFFER_SIZE SAFER_ALLOCA (1024) #endif char *openat_proc_name (char buf[OPENAT_BUFFER_SIZE], int fd, char const *file); /* Trying to access a BUILD_PROC_NAME file will fail on systems without /proc support, and even on systems *with* ProcFS support. Return nonzero if the failure may be legitimate, e.g., because /proc is not readable, or the particular .../fd/N directory is not present. */ #define EXPECTED_ERRNO(Errno) \ ((Errno) == ENOTDIR || (Errno) == ENOENT \ || (Errno) == EPERM || (Errno) == EACCES \ || (Errno) == ENOSYS /* Solaris 8 */ \ || (Errno) == EOPNOTSUPP /* FreeBSD */) /* Wrapper function shared among linkat and renameat. */ int at_func2 (int fd1, char const *file1, int fd2, char const *file2, int (*func) (char const *file1, char const *file2)); #endif /* _GL_HEADER_OPENAT_PRIV */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/vasprintf.c������������������������������������������������������������������������0000644�0000000�0000000�00000002534�14226564451�013047� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to strings. Copyright (C) 1999, 2002, 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #ifdef IN_LIBASPRINTF # include "vasprintf.h" #else # include <stdio.h> #endif #include <errno.h> #include <limits.h> #include <stdlib.h> #include "vasnprintf.h" int vasprintf (char **resultp, const char *format, va_list args) { size_t length; char *result = vasnprintf (NULL, &length, format, args); if (result == NULL) return -1; if (length > INT_MAX) { free (result); errno = EOVERFLOW; return -1; } *resultp = result; /* Return the number of resulting bytes, excluding the trailing NUL. */ return length; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/mbtowc.c���������������������������������������������������������������������������0000644�0000000�0000000�00000001670�14226564450�012325� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 2011-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <errno.h> #include <string.h> #include <wchar.h> #include "mbtowc-impl.h" ������������������������������������������������������������������������recutils-1.9/lib/base64.c���������������������������������������������������������������������������0000644�0000000�0000000�00000047403�14226564447�012130� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* base64.c -- Encode binary data using printable characters. Copyright (C) 1999-2001, 2004-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson. Partially adapted from GNU MailUtils * (mailbox/filter_trans.c, as of 2004-11-28). Improved by review * from Paul Eggert, Bruno Haible, and Stepan Kasal. * * See also RFC 4648 <https://www.ietf.org/rfc/rfc4648.txt>. * * Be careful with error checking. Here is how you would typically * use these functions: * * bool ok = base64_decode_alloc (in, inlen, &out, &outlen); * if (!ok) * FAIL: input was not valid base64 * if (out == NULL) * FAIL: memory allocation error * OK: data in OUT/OUTLEN * * idx_t outlen = base64_encode_alloc (in, inlen, &out); * if (out == NULL && outlen == 0 && inlen != 0) * FAIL: input too long * if (out == NULL) * FAIL: memory allocation error * OK: data in OUT/OUTLEN. * */ #include <config.h> /* Get prototype. */ #include "base64.h" /* Get imalloc. */ #include <ialloc.h> #include <intprops.h> /* Get UCHAR_MAX. */ #include <limits.h> #include <string.h> /* Convert 'char' to 'unsigned char' without casting. */ static unsigned char to_uchar (char ch) { return ch; } static const char b64c[64] = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; /* Base64 encode IN array of size INLEN into OUT array. OUT needs to be of length >= BASE64_LENGTH(INLEN), and INLEN needs to be a multiple of 3. */ static void base64_encode_fast (const char *restrict in, idx_t inlen, char *restrict out) { while (inlen) { *out++ = b64c[(to_uchar (in[0]) >> 2) & 0x3f]; *out++ = b64c[((to_uchar (in[0]) << 4) + (to_uchar (in[1]) >> 4)) & 0x3f]; *out++ = b64c[((to_uchar (in[1]) << 2) + (to_uchar (in[2]) >> 6)) & 0x3f]; *out++ = b64c[to_uchar (in[2]) & 0x3f]; inlen -= 3; in += 3; } } /* Base64 encode IN array of size INLEN into OUT array of size OUTLEN. If OUTLEN is less than BASE64_LENGTH(INLEN), write as many bytes as possible. If OUTLEN is larger than BASE64_LENGTH(INLEN), also zero terminate the output buffer. */ void base64_encode (const char *restrict in, idx_t inlen, char *restrict out, idx_t outlen) { /* Note this outlen constraint can be enforced at compile time. I.E. that the output buffer is exactly large enough to hold the encoded inlen bytes. The inlen constraints (of corresponding to outlen, and being a multiple of 3) can change at runtime at the end of input. However the common case when reading large inputs is to have both constraints satisfied, so we depend on both in base_encode_fast(). */ if (outlen % 4 == 0 && inlen == (outlen >> 2) * 3) { base64_encode_fast (in, inlen, out); return; } while (inlen && outlen) { *out++ = b64c[(to_uchar (in[0]) >> 2) & 0x3f]; if (!--outlen) break; *out++ = b64c[((to_uchar (in[0]) << 4) + (--inlen ? to_uchar (in[1]) >> 4 : 0)) & 0x3f]; if (!--outlen) break; *out++ = (inlen ? b64c[((to_uchar (in[1]) << 2) + (--inlen ? to_uchar (in[2]) >> 6 : 0)) & 0x3f] : '='); if (!--outlen) break; *out++ = inlen ? b64c[to_uchar (in[2]) & 0x3f] : '='; if (!--outlen) break; if (inlen) inlen--; if (inlen) in += 3; } if (outlen) *out = '\0'; } /* Allocate a buffer and store zero terminated base64 encoded data from array IN of size INLEN, returning BASE64_LENGTH(INLEN), i.e., the length of the encoded data, excluding the terminating zero. On return, the OUT variable will hold a pointer to newly allocated memory that must be deallocated by the caller. If output string length would overflow, 0 is returned and OUT is set to NULL. If memory allocation failed, OUT is set to NULL, and the return value indicates length of the requested memory block, i.e., BASE64_LENGTH(inlen) + 1. */ idx_t base64_encode_alloc (const char *in, idx_t inlen, char **out) { /* Check for overflow in outlen computation. Treat negative INLEN as overflow, for better compatibility with pre-2021-08-27 API, which used size_t. */ idx_t in_over_3 = inlen / 3 + (inlen % 3 != 0), outlen; if (! INT_MULTIPLY_OK (in_over_3, 4, &outlen) || inlen < 0) { *out = NULL; return 0; } outlen++; *out = imalloc (outlen); if (!*out) return outlen; base64_encode (in, inlen, *out, outlen); return outlen - 1; } /* With this approach this file works independent of the charset used (think EBCDIC). However, it does assume that the characters in the Base64 alphabet (A-Za-z0-9+/) are encoded in 0..255. POSIX 1003.1-2001 require that char and unsigned char are 8-bit quantities, though, taking care of that problem. But this may be a potential problem on non-POSIX C99 platforms. IBM C V6 for AIX mishandles "#define B64(x) ...'x'...", so use "_" as the formal parameter rather than "x". */ #define B64(_) \ ((_) == 'A' ? 0 \ : (_) == 'B' ? 1 \ : (_) == 'C' ? 2 \ : (_) == 'D' ? 3 \ : (_) == 'E' ? 4 \ : (_) == 'F' ? 5 \ : (_) == 'G' ? 6 \ : (_) == 'H' ? 7 \ : (_) == 'I' ? 8 \ : (_) == 'J' ? 9 \ : (_) == 'K' ? 10 \ : (_) == 'L' ? 11 \ : (_) == 'M' ? 12 \ : (_) == 'N' ? 13 \ : (_) == 'O' ? 14 \ : (_) == 'P' ? 15 \ : (_) == 'Q' ? 16 \ : (_) == 'R' ? 17 \ : (_) == 'S' ? 18 \ : (_) == 'T' ? 19 \ : (_) == 'U' ? 20 \ : (_) == 'V' ? 21 \ : (_) == 'W' ? 22 \ : (_) == 'X' ? 23 \ : (_) == 'Y' ? 24 \ : (_) == 'Z' ? 25 \ : (_) == 'a' ? 26 \ : (_) == 'b' ? 27 \ : (_) == 'c' ? 28 \ : (_) == 'd' ? 29 \ : (_) == 'e' ? 30 \ : (_) == 'f' ? 31 \ : (_) == 'g' ? 32 \ : (_) == 'h' ? 33 \ : (_) == 'i' ? 34 \ : (_) == 'j' ? 35 \ : (_) == 'k' ? 36 \ : (_) == 'l' ? 37 \ : (_) == 'm' ? 38 \ : (_) == 'n' ? 39 \ : (_) == 'o' ? 40 \ : (_) == 'p' ? 41 \ : (_) == 'q' ? 42 \ : (_) == 'r' ? 43 \ : (_) == 's' ? 44 \ : (_) == 't' ? 45 \ : (_) == 'u' ? 46 \ : (_) == 'v' ? 47 \ : (_) == 'w' ? 48 \ : (_) == 'x' ? 49 \ : (_) == 'y' ? 50 \ : (_) == 'z' ? 51 \ : (_) == '0' ? 52 \ : (_) == '1' ? 53 \ : (_) == '2' ? 54 \ : (_) == '3' ? 55 \ : (_) == '4' ? 56 \ : (_) == '5' ? 57 \ : (_) == '6' ? 58 \ : (_) == '7' ? 59 \ : (_) == '8' ? 60 \ : (_) == '9' ? 61 \ : (_) == '+' ? 62 \ : (_) == '/' ? 63 \ : -1) static const signed char b64[0x100] = { B64 (0), B64 (1), B64 (2), B64 (3), B64 (4), B64 (5), B64 (6), B64 (7), B64 (8), B64 (9), B64 (10), B64 (11), B64 (12), B64 (13), B64 (14), B64 (15), B64 (16), B64 (17), B64 (18), B64 (19), B64 (20), B64 (21), B64 (22), B64 (23), B64 (24), B64 (25), B64 (26), B64 (27), B64 (28), B64 (29), B64 (30), B64 (31), B64 (32), B64 (33), B64 (34), B64 (35), B64 (36), B64 (37), B64 (38), B64 (39), B64 (40), B64 (41), B64 (42), B64 (43), B64 (44), B64 (45), B64 (46), B64 (47), B64 (48), B64 (49), B64 (50), B64 (51), B64 (52), B64 (53), B64 (54), B64 (55), B64 (56), B64 (57), B64 (58), B64 (59), B64 (60), B64 (61), B64 (62), B64 (63), B64 (64), B64 (65), B64 (66), B64 (67), B64 (68), B64 (69), B64 (70), B64 (71), B64 (72), B64 (73), B64 (74), B64 (75), B64 (76), B64 (77), B64 (78), B64 (79), B64 (80), B64 (81), B64 (82), B64 (83), B64 (84), B64 (85), B64 (86), B64 (87), B64 (88), B64 (89), B64 (90), B64 (91), B64 (92), B64 (93), B64 (94), B64 (95), B64 (96), B64 (97), B64 (98), B64 (99), B64 (100), B64 (101), B64 (102), B64 (103), B64 (104), B64 (105), B64 (106), B64 (107), B64 (108), B64 (109), B64 (110), B64 (111), B64 (112), B64 (113), B64 (114), B64 (115), B64 (116), B64 (117), B64 (118), B64 (119), B64 (120), B64 (121), B64 (122), B64 (123), B64 (124), B64 (125), B64 (126), B64 (127), B64 (128), B64 (129), B64 (130), B64 (131), B64 (132), B64 (133), B64 (134), B64 (135), B64 (136), B64 (137), B64 (138), B64 (139), B64 (140), B64 (141), B64 (142), B64 (143), B64 (144), B64 (145), B64 (146), B64 (147), B64 (148), B64 (149), B64 (150), B64 (151), B64 (152), B64 (153), B64 (154), B64 (155), B64 (156), B64 (157), B64 (158), B64 (159), B64 (160), B64 (161), B64 (162), B64 (163), B64 (164), B64 (165), B64 (166), B64 (167), B64 (168), B64 (169), B64 (170), B64 (171), B64 (172), B64 (173), B64 (174), B64 (175), B64 (176), B64 (177), B64 (178), B64 (179), B64 (180), B64 (181), B64 (182), B64 (183), B64 (184), B64 (185), B64 (186), B64 (187), B64 (188), B64 (189), B64 (190), B64 (191), B64 (192), B64 (193), B64 (194), B64 (195), B64 (196), B64 (197), B64 (198), B64 (199), B64 (200), B64 (201), B64 (202), B64 (203), B64 (204), B64 (205), B64 (206), B64 (207), B64 (208), B64 (209), B64 (210), B64 (211), B64 (212), B64 (213), B64 (214), B64 (215), B64 (216), B64 (217), B64 (218), B64 (219), B64 (220), B64 (221), B64 (222), B64 (223), B64 (224), B64 (225), B64 (226), B64 (227), B64 (228), B64 (229), B64 (230), B64 (231), B64 (232), B64 (233), B64 (234), B64 (235), B64 (236), B64 (237), B64 (238), B64 (239), B64 (240), B64 (241), B64 (242), B64 (243), B64 (244), B64 (245), B64 (246), B64 (247), B64 (248), B64 (249), B64 (250), B64 (251), B64 (252), B64 (253), B64 (254), B64 (255) }; #if UCHAR_MAX == 255 # define uchar_in_range(c) true #else # define uchar_in_range(c) ((c) <= 255) #endif /* Return true if CH is a character from the Base64 alphabet, and false otherwise. Note that '=' is padding and not considered to be part of the alphabet. */ bool isbase64 (char ch) { return uchar_in_range (to_uchar (ch)) && 0 <= b64[to_uchar (ch)]; } /* Initialize decode-context buffer, CTX. */ void base64_decode_ctx_init (struct base64_decode_context *ctx) { ctx->i = 0; } /* If CTX->i is 0 or 4, there are four or more bytes in [*IN..IN_END), and none of those four is a newline, then return *IN. Otherwise, copy up to 4 - CTX->i non-newline bytes from that range into CTX->buf, starting at index CTX->i and setting CTX->i to reflect the number of bytes copied, and return CTX->buf. In either case, advance *IN to point to the byte after the last one processed, and set *N_NON_NEWLINE to the number of verified non-newline bytes accessible through the returned pointer. */ static char * get_4 (struct base64_decode_context *ctx, char const *restrict *in, char const *restrict in_end, idx_t *n_non_newline) { if (ctx->i == 4) ctx->i = 0; if (ctx->i == 0) { char const *t = *in; if (4 <= in_end - *in && memchr (t, '\n', 4) == NULL) { /* This is the common case: no newline. */ *in += 4; *n_non_newline = 4; return (char *) t; } } { /* Copy non-newline bytes into BUF. */ char const *p = *in; while (p < in_end) { char c = *p++; if (c != '\n') { ctx->buf[ctx->i++] = c; if (ctx->i == 4) break; } } *in = p; *n_non_newline = ctx->i; return ctx->buf; } } #define return_false \ do \ { \ *outp = out; \ return false; \ } \ while (false) /* Decode up to four bytes of base64-encoded data, IN, of length INLEN into the output buffer, *OUT, of size *OUTLEN bytes. Return true if decoding is successful, false otherwise. If *OUTLEN is too small, as many bytes as possible are written to *OUT. On return, advance *OUT to point to the byte after the last one written, and decrement *OUTLEN to reflect the number of bytes remaining in *OUT. */ static bool decode_4 (char const *restrict in, idx_t inlen, char *restrict *outp, idx_t *outleft) { char *out = *outp; if (inlen < 2) return false; if (!isbase64 (in[0]) || !isbase64 (in[1])) return false; if (*outleft) { *out++ = ((b64[to_uchar (in[0])] << 2) | (b64[to_uchar (in[1])] >> 4)); --*outleft; } if (inlen == 2) return_false; if (in[2] == '=') { if (inlen != 4) return_false; if (in[3] != '=') return_false; } else { if (!isbase64 (in[2])) return_false; if (*outleft) { *out++ = (((b64[to_uchar (in[1])] << 4) & 0xf0) | (b64[to_uchar (in[2])] >> 2)); --*outleft; } if (inlen == 3) return_false; if (in[3] == '=') { if (inlen != 4) return_false; } else { if (!isbase64 (in[3])) return_false; if (*outleft) { *out++ = (((b64[to_uchar (in[2])] << 6) & 0xc0) | b64[to_uchar (in[3])]); --*outleft; } } } *outp = out; return true; } /* Decode base64-encoded input array IN of length INLEN to output array OUT that can hold *OUTLEN bytes. The input data may be interspersed with newlines. Return true if decoding was successful, i.e. if the input was valid base64 data, false otherwise. If *OUTLEN is too small, as many bytes as possible will be written to OUT. On return, *OUTLEN holds the length of decoded bytes in OUT. Note that as soon as any non-alphabet, non-newline character is encountered, decoding is stopped and false is returned. If INLEN is zero, then process only whatever data is stored in CTX. Initially, CTX must have been initialized via base64_decode_ctx_init. Subsequent calls to this function must reuse whatever state is recorded in that buffer. It is necessary for when a quadruple of base64 input bytes spans two input buffers. If CTX is NULL then newlines are treated as garbage and the input buffer is processed as a unit. */ bool base64_decode_ctx (struct base64_decode_context *ctx, const char *restrict in, idx_t inlen, char *restrict out, idx_t *outlen) { idx_t outleft = *outlen; bool ignore_newlines = ctx != NULL; bool flush_ctx = false; unsigned int ctx_i = 0; if (ignore_newlines) { ctx_i = ctx->i; flush_ctx = inlen == 0; } while (true) { idx_t outleft_save = outleft; if (ctx_i == 0 && !flush_ctx) { while (true) { /* Save a copy of outleft, in case we need to re-parse this block of four bytes. */ outleft_save = outleft; if (!decode_4 (in, inlen, &out, &outleft)) break; in += 4; inlen -= 4; } } if (inlen == 0 && !flush_ctx) break; /* Handle the common case of 72-byte wrapped lines. This also handles any other multiple-of-4-byte wrapping. */ if (inlen && *in == '\n' && ignore_newlines) { ++in; --inlen; continue; } /* Restore OUT and OUTLEFT. */ out -= outleft_save - outleft; outleft = outleft_save; { char const *in_end = in + inlen; char const *non_nl; if (ignore_newlines) non_nl = get_4 (ctx, &in, in_end, &inlen); else non_nl = in; /* Might have nl in this case. */ /* If the input is empty or consists solely of newlines (0 non-newlines), then we're done. Likewise if there are fewer than 4 bytes when not flushing context and not treating newlines as garbage. */ if (inlen == 0 || (inlen < 4 && !flush_ctx && ignore_newlines)) { inlen = 0; break; } if (!decode_4 (non_nl, inlen, &out, &outleft)) break; inlen = in_end - in; } } *outlen -= outleft; return inlen == 0; } /* Allocate an output buffer in *OUT, and decode the base64 encoded data stored in IN of size INLEN to the *OUT buffer. On return, the size of the decoded data is stored in *OUTLEN. OUTLEN may be NULL, if the caller is not interested in the decoded length. *OUT may be NULL to indicate an out of memory error, in which case *OUTLEN contains the size of the memory block needed. The function returns true on successful decoding and memory allocation errors. (Use the *OUT and *OUTLEN parameters to differentiate between successful decoding and memory error.) The function returns false if the input was invalid, in which case *OUT is NULL and *OUTLEN is undefined. */ bool base64_decode_alloc_ctx (struct base64_decode_context *ctx, const char *in, idx_t inlen, char **out, idx_t *outlen) { /* This may allocate a few bytes too many, depending on input, but it's not worth the extra CPU time to compute the exact size. The exact size is 3 * (inlen + (ctx ? ctx->i : 0)) / 4, minus 1 if the input ends with "=" and minus another 1 if the input ends with "==". Shifting before multiplying avoids the possibility of overflow. */ idx_t needlen = 3 * ((inlen >> 2) + 1); *out = imalloc (needlen); if (!*out) return true; if (!base64_decode_ctx (ctx, in, inlen, *out, &needlen)) { free (*out); *out = NULL; return false; } if (outlen) *outlen = needlen; return true; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fpending.c�������������������������������������������������������������������������0000644�0000000�0000000�00000005126�14226564447�012632� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* fpending.c -- return the number of pending output bytes on a stream Copyright (C) 2000, 2004, 2006-2007, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> /* Specification. */ #include "fpending.h" #include "stdio-impl.h" /* This file is not used on systems that already have the __fpending function, namely glibc >= 2.2, Solaris >= 7, UnixWare >= 7.1.4.MP4, Cygwin >= 1.7.34, Android API >= 23. */ /* Return the number of pending (aka buffered, unflushed) bytes on the stream, FP, that is open for writing. */ size_t __fpending (FILE *fp) { /* Most systems provide FILE as a struct and the necessary bitmask in <stdio.h>, because they need it for implementing getc() and putc() as fast macros. */ #if defined _IO_EOF_SEEN || defined _IO_ftrylockfile || __GNU_LIBRARY__ == 1 /* GNU libc, BeOS, Haiku, Linux libc5 */ return fp->_IO_write_ptr - fp->_IO_write_base; #elif defined __sferror || defined __DragonFly__ || defined __ANDROID__ /* FreeBSD, NetBSD, OpenBSD, DragonFly, Mac OS X, Cygwin < 1.7.34, Minix 3, Android */ return fp->_p - fp->_bf._base; #elif defined __EMX__ /* emx+gcc */ return fp->_ptr - fp->_buffer; #elif defined __minix /* Minix */ return fp_->_ptr - fp_->_buf; #elif defined _IOERR /* AIX, HP-UX, IRIX, OSF/1, Solaris, OpenServer, UnixWare, mingw, MSVC, NonStop Kernel, OpenVMS */ return (fp_->_ptr ? fp_->_ptr - fp_->_base : 0); #elif defined __UCLIBC__ /* uClibc */ return (fp->__modeflags & __FLAG_WRITING ? fp->__bufpos - fp->__bufstart : 0); #elif defined __QNX__ /* QNX */ return (fp->_Mode & 0x2000 /*_MWRITE*/ ? fp->_Next - fp->_Buf : 0); #elif defined __MINT__ /* Atari FreeMiNT */ return fp->__bufp - fp->__buffer; #elif defined EPLAN9 /* Plan9 */ return fp->wp - fp->buf; #else # error "Please port gnulib fpending.c to your platform!" return 1; #endif } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/btowc.c����������������������������������������������������������������������������0000644�0000000�0000000�00000002131�14226564447�012147� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert unibyte character to wide character. Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <stdio.h> #include <stdlib.h> wint_t btowc (int c) { if (c != EOF) { char buf[1]; wchar_t wc; buf[0] = c; if (mbtowc (&wc, buf, 1) >= 0) return wc; } return WEOF; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/glthread/��������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577414�012540� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/glthread/lock.c��������������������������������������������������������������������0000644�0000000�0000000�00000044211�14226564450�013552� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locking in multithreaded situations. Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h. */ #include <config.h> #include "glthread/lock.h" /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ int glthread_lock_init (gl_lock_t *lock) { if (mtx_init (&lock->mutex, mtx_plain) != thrd_success) return ENOMEM; lock->init_needed = 0; return 0; } int glthread_lock_lock (gl_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->mutex) != thrd_success) return EAGAIN; return 0; } int glthread_lock_unlock (gl_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_unlock (&lock->mutex) != thrd_success) return EINVAL; return 0; } int glthread_lock_destroy (gl_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); mtx_destroy (&lock->mutex); return 0; } /* ------------------------- gl_rwlock_t datatype ------------------------- */ int glthread_rwlock_init (gl_rwlock_t *lock) { if (mtx_init (&lock->lock, mtx_plain) != thrd_success || cnd_init (&lock->waiting_readers) != thrd_success || cnd_init (&lock->waiting_writers) != thrd_success) return ENOMEM; lock->waiting_writers_count = 0; lock->runcount = 0; lock->init_needed = 0; return 0; } int glthread_rwlock_rdlock (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->lock) != thrd_success) return EAGAIN; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ if (cnd_wait (&lock->waiting_readers, &lock->lock) != thrd_success) { mtx_unlock (&lock->lock); return EINVAL; } } lock->runcount++; if (mtx_unlock (&lock->lock) != thrd_success) return EINVAL; return 0; } int glthread_rwlock_wrlock (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->lock) != thrd_success) return EAGAIN; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; if (cnd_wait (&lock->waiting_writers, &lock->lock) != thrd_success) { lock->waiting_writers_count--; mtx_unlock (&lock->lock); return EINVAL; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ if (mtx_unlock (&lock->lock) != thrd_success) return EINVAL; return 0; } int glthread_rwlock_unlock (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->lock) != thrd_success) return EAGAIN; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { mtx_unlock (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { mtx_unlock (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ if (cnd_signal (&lock->waiting_writers) != thrd_success) { mtx_unlock (&lock->lock); return EINVAL; } } else { /* Wake up all waiting readers. */ if (cnd_broadcast (&lock->waiting_readers) != thrd_success) { mtx_unlock (&lock->lock); return EINVAL; } } } if (mtx_unlock (&lock->lock) != thrd_success) return EINVAL; return 0; } int glthread_rwlock_destroy (gl_rwlock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); mtx_destroy (&lock->lock); cnd_destroy (&lock->waiting_readers); cnd_destroy (&lock->waiting_writers); return 0; } /* --------------------- gl_recursive_lock_t datatype --------------------- */ int glthread_recursive_lock_init (gl_recursive_lock_t *lock) { if (mtx_init (&lock->mutex, mtx_plain | mtx_recursive) != thrd_success) return ENOMEM; lock->init_needed = 0; return 0; } int glthread_recursive_lock_lock (gl_recursive_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_lock (&lock->mutex) != thrd_success) return EAGAIN; return 0; } int glthread_recursive_lock_unlock (gl_recursive_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); if (mtx_unlock (&lock->mutex) != thrd_success) return EINVAL; return 0; } int glthread_recursive_lock_destroy (gl_recursive_lock_t *lock) { if (lock->init_needed) call_once (&lock->init_once, lock->init_func); mtx_destroy (&lock->mutex); return 0; } /* -------------------------- gl_once_t datatype -------------------------- */ #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* -------------------------- gl_lock_t datatype -------------------------- */ /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) # if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP # if !HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock) { pthread_rwlockattr_t attributes; int err; err = pthread_rwlockattr_init (&attributes); if (err != 0) return err; /* Note: PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP is the only value that causes the writer to be preferred. PTHREAD_RWLOCK_PREFER_WRITER_NP does not do this; see http://man7.org/linux/man-pages/man3/pthread_rwlockattr_setkind_np.3.html */ err = pthread_rwlockattr_setkind_np (&attributes, PTHREAD_RWLOCK_PREFER_WRITER_NONRECURSIVE_NP); if (err == 0) err = pthread_rwlock_init(lock, &attributes); /* pthread_rwlockattr_destroy always returns 0. It cannot influence the return value. */ pthread_rwlockattr_destroy (&attributes); return err; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_rwlock_init (&lock->rwlock, NULL); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_rdlock (&lock->rwlock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_rwlock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_rwlock_wrlock (&lock->rwlock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_rwlock_unlock (&lock->rwlock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_rwlock_destroy (&lock->rwlock); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_init (&lock->lock, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_readers, NULL); if (err != 0) return err; err = pthread_cond_init (&lock->waiting_writers, NULL); if (err != 0) return err; lock->waiting_writers_count = 0; lock->runcount = 0; return 0; } int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether only readers are currently running, and whether the runcount field will not overflow, and whether no writer is waiting. The latter condition is because POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ while (!(lock->runcount + 1 > 0 && lock->waiting_writers_count == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_readers. */ err = pthread_cond_wait (&lock->waiting_readers, &lock->lock); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } lock->runcount++; return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; /* Test whether no readers or writers are currently running. */ while (!(lock->runcount == 0)) { /* This thread has to wait for a while. Enqueue it among the waiting_writers. */ lock->waiting_writers_count++; err = pthread_cond_wait (&lock->waiting_writers, &lock->lock); if (err != 0) { lock->waiting_writers_count--; pthread_mutex_unlock (&lock->lock); return err; } lock->waiting_writers_count--; } lock->runcount--; /* runcount becomes -1 */ return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_lock (&lock->lock); if (err != 0) return err; if (lock->runcount < 0) { /* Drop a writer lock. */ if (!(lock->runcount == -1)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount = 0; } else { /* Drop a reader lock. */ if (!(lock->runcount > 0)) { pthread_mutex_unlock (&lock->lock); return EINVAL; } lock->runcount--; } if (lock->runcount == 0) { /* POSIX recommends that "write locks shall take precedence over read locks", to avoid "writer starvation". */ if (lock->waiting_writers_count > 0) { /* Wake up one of the waiting writers. */ err = pthread_cond_signal (&lock->waiting_writers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } else { /* Wake up all waiting readers. */ err = pthread_cond_broadcast (&lock->waiting_readers); if (err != 0) { pthread_mutex_unlock (&lock->lock); return err; } } } return pthread_mutex_unlock (&lock->lock); } int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock) { int err; err = pthread_mutex_destroy (&lock->lock); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_readers); if (err != 0) return err; err = pthread_cond_destroy (&lock->waiting_writers); if (err != 0) return err; return 0; } # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (lock, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; return 0; } # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { pthread_mutexattr_t attributes; int err; err = pthread_mutexattr_init (&attributes); if (err != 0) return err; err = pthread_mutexattr_settype (&attributes, PTHREAD_MUTEX_RECURSIVE); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutex_init (&lock->recmutex, &attributes); if (err != 0) { pthread_mutexattr_destroy (&attributes); return err; } err = pthread_mutexattr_destroy (&attributes); if (err != 0) return err; lock->initialized = 1; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) { int err; err = pthread_mutex_lock (&lock->guard); if (err != 0) return err; if (!lock->initialized) { err = glthread_recursive_lock_init_multithreaded (lock); if (err != 0) { pthread_mutex_unlock (&lock->guard); return err; } } err = pthread_mutex_unlock (&lock->guard); if (err != 0) return err; } return pthread_mutex_lock (&lock->recmutex); } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (!lock->initialized) return EINVAL; return pthread_mutex_unlock (&lock->recmutex); } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { int err; if (!lock->initialized) return EINVAL; err = pthread_mutex_destroy (&lock->recmutex); if (err != 0) return err; lock->initialized = 0; return 0; } # endif # else int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock) { int err; err = pthread_mutex_init (&lock->mutex, NULL); if (err != 0) return err; lock->owner = (pthread_t) 0; lock->depth = 0; return 0; } int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock) { pthread_t self = pthread_self (); if (lock->owner != self) { int err; err = pthread_mutex_lock (&lock->mutex); if (err != 0) return err; lock->owner = self; } if (++(lock->depth) == 0) /* wraparound? */ { lock->depth--; return EAGAIN; } return 0; } int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != pthread_self ()) return EPERM; if (lock->depth == 0) return EINVAL; if (--(lock->depth) == 0) { lock->owner = (pthread_t) 0; return pthread_mutex_unlock (&lock->mutex); } else return 0; } int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock) { if (lock->owner != (pthread_t) 0) return EBUSY; return pthread_mutex_destroy (&lock->mutex); } # endif /* -------------------------- gl_once_t datatype -------------------------- */ static const pthread_once_t fresh_once = PTHREAD_ONCE_INIT; int glthread_once_singlethreaded (pthread_once_t *once_control) { /* We don't know whether pthread_once_t is an integer type, a floating-point type, a pointer type, or a structure type. */ char *firstbyte = (char *)once_control; if (*firstbyte == *(const char *)&fresh_once) { /* First time use of once_control. Invert the first byte. */ *firstbyte = ~ *(const char *)&fresh_once; return 1; } else return 0; } # if !(PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK) int glthread_once_multithreaded (pthread_once_t *once_control, void (*init_function) (void)) { int err = pthread_once (once_control, init_function); if (err == ENOSYS) { /* This happens on FreeBSD 11: The pthread_once function in libc returns ENOSYS. */ if (glthread_once_singlethreaded (once_control)) init_function (); return 0; } return err; } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS #endif /* ========================================================================= */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/glthread/lock.h��������������������������������������������������������������������0000644�0000000�0000000�00000075466�14226564450�013577� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locking in multithreaded situations. Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-posix.h, gthr-posix95.h, gthr-win32.h. */ /* This file contains locking primitives for use with a given thread library. It does not contain primitives for creating threads or for other synchronization primitives. Normal (non-recursive) locks: Type: gl_lock_t Declaration: gl_lock_define(extern, name) Initializer: gl_lock_define_initialized(, name) Initialization: gl_lock_init (name); Taking the lock: gl_lock_lock (name); Releasing the lock: gl_lock_unlock (name); De-initialization: gl_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_lock_init (&name); Taking the lock: err = glthread_lock_lock (&name); Releasing the lock: err = glthread_lock_unlock (&name); De-initialization: err = glthread_lock_destroy (&name); Read-Write (non-recursive) locks: Type: gl_rwlock_t Declaration: gl_rwlock_define(extern, name) Initializer: gl_rwlock_define_initialized(, name) Initialization: gl_rwlock_init (name); Taking the lock: gl_rwlock_rdlock (name); gl_rwlock_wrlock (name); Releasing the lock: gl_rwlock_unlock (name); De-initialization: gl_rwlock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_rwlock_init (&name); Taking the lock: err = glthread_rwlock_rdlock (&name); err = glthread_rwlock_wrlock (&name); Releasing the lock: err = glthread_rwlock_unlock (&name); De-initialization: err = glthread_rwlock_destroy (&name); Recursive locks: Type: gl_recursive_lock_t Declaration: gl_recursive_lock_define(extern, name) Initializer: gl_recursive_lock_define_initialized(, name) Initialization: gl_recursive_lock_init (name); Taking the lock: gl_recursive_lock_lock (name); Releasing the lock: gl_recursive_lock_unlock (name); De-initialization: gl_recursive_lock_destroy (name); Equivalent functions with control of error handling: Initialization: err = glthread_recursive_lock_init (&name); Taking the lock: err = glthread_recursive_lock_lock (&name); Releasing the lock: err = glthread_recursive_lock_unlock (&name); De-initialization: err = glthread_recursive_lock_destroy (&name); Once-only execution: Type: gl_once_t Initializer: gl_once_define(extern, name) Execution: gl_once (name, initfunction); Equivalent functions with control of error handling: Execution: err = glthread_once (&name, initfunction); */ #ifndef _LOCK_H #define _LOCK_H #include <errno.h> #include <stdlib.h> #if !defined c11_threads_in_use # if HAVE_THREADS_H && USE_POSIX_THREADS_FROM_LIBC # define c11_threads_in_use() 1 # elif HAVE_THREADS_H && USE_POSIX_THREADS_WEAK # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif #endif /* ========================================================================= */ #if USE_ISOC_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the ISO C threads library. */ # include <threads.h> # ifdef __cplusplus extern "C" { # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); mtx_t mutex; } gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_lock_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_lock_init (&(NAME))) \ abort (); \ } extern int glthread_lock_init (gl_lock_t *lock); extern int glthread_lock_lock (gl_lock_t *lock); extern int glthread_lock_unlock (gl_lock_t *lock); extern int glthread_lock_destroy (gl_lock_t *lock); /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); mtx_t lock; /* protects the remaining fields */ cnd_t waiting_readers; /* waiting readers */ cnd_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_rwlock_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_rwlock_init (&(NAME))) \ abort (); \ } extern int glthread_rwlock_init (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock (gl_rwlock_t *lock); extern int glthread_rwlock_unlock (gl_rwlock_t *lock); extern int glthread_rwlock_destroy (gl_rwlock_t *lock); /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef struct { int volatile init_needed; once_flag init_once; void (*init_func) (void); mtx_t mutex; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ static void _atomic_init_##NAME (void); \ STORAGECLASS gl_recursive_lock_t NAME = \ { 1, ONCE_FLAG_INIT, _atomic_init_##NAME }; \ static void _atomic_init_##NAME (void) \ { \ if (glthread_recursive_lock_init (&(NAME))) \ abort (); \ } extern int glthread_recursive_lock_init (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy (gl_recursive_lock_t *lock); /* -------------------------- gl_once_t datatype -------------------------- */ typedef once_flag gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS once_flag NAME = ONCE_FLAG_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (call_once (ONCE_CONTROL, INITFUNCTION), 0) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_POSIX_THREADS /* Use the POSIX threads library. */ # include <pthread.h> # ifdef __cplusplus extern "C" { # endif # if PTHREAD_IN_USE_DETECTION_HARD /* The pthread_in_use() detection needs to be done at runtime. */ # define pthread_in_use() \ glthread_in_use () extern int glthread_in_use (void); # endif # if USE_POSIX_THREADS_WEAK /* Use weak references to the POSIX threads library. */ /* Weak references avoid dragging in external libraries if the other parts of the program don't use them. Here we use them, because we don't want every program that uses libintl to depend on libpthread. This assumes that libpthread would not be loaded after libintl; i.e. if libintl is loaded first, by an executable that does not depend on libpthread, and then a module is dynamically loaded that depends on libpthread, libintl will not be multithread-safe. */ /* The way to test at runtime whether libpthread is present is to test whether a function pointer's value, such as &pthread_mutex_init, is non-NULL. However, some versions of GCC have a bug through which, in PIC mode, &foo != NULL always evaluates to true if there is a direct call to foo(...) in the same function. To avoid this, we test the address of a function in libpthread that we don't use. */ # pragma weak pthread_mutex_init # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock # pragma weak pthread_mutex_destroy # pragma weak pthread_rwlock_init # pragma weak pthread_rwlock_rdlock # pragma weak pthread_rwlock_wrlock # pragma weak pthread_rwlock_unlock # pragma weak pthread_rwlock_destroy # pragma weak pthread_once # pragma weak pthread_cond_init # pragma weak pthread_cond_wait # pragma weak pthread_cond_signal # pragma weak pthread_cond_broadcast # pragma weak pthread_cond_destroy # pragma weak pthread_mutexattr_init # pragma weak pthread_mutexattr_settype # pragma weak pthread_mutexattr_destroy # pragma weak pthread_rwlockattr_init # if __GNU_LIBRARY__ > 1 # pragma weak pthread_rwlockattr_setkind_np # endif # pragma weak pthread_rwlockattr_destroy # ifndef pthread_self # pragma weak pthread_self # endif # if !PTHREAD_IN_USE_DETECTION_HARD /* Considering all platforms with USE_POSIX_THREADS_WEAK, only few symbols can be used to determine whether libpthread is in use. These are: pthread_mutexattr_gettype pthread_rwlockattr_destroy pthread_rwlockattr_init */ # pragma weak pthread_mutexattr_gettype # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # endif # else # if !PTHREAD_IN_USE_DETECTION_HARD # define pthread_in_use() 1 # endif # endif /* -------------------------- gl_lock_t datatype -------------------------- */ typedef pthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_lock_initializer; # define gl_lock_initializer \ PTHREAD_MUTEX_INITIALIZER # define glthread_lock_init(LOCK) \ (pthread_in_use () ? pthread_mutex_init (LOCK, NULL) : 0) # define glthread_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ # if HAVE_PTHREAD_RWLOCK && (HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER || (defined PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP && (__GNU_LIBRARY__ > 1))) # if defined PTHREAD_RWLOCK_INITIALIZER || defined PTHREAD_RWLOCK_INITIALIZER_NP typedef pthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_rwlock_t NAME = gl_rwlock_initializer; # if HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER # if defined PTHREAD_RWLOCK_INITIALIZER # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER # else # define gl_rwlock_initializer \ PTHREAD_RWLOCK_INITIALIZER_NP # endif # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? pthread_rwlock_init (LOCK, NULL) : 0) # else /* glibc with bug https://sourceware.org/bugzilla/show_bug.cgi?id=13701 */ # define gl_rwlock_initializer \ PTHREAD_RWLOCK_WRITER_NONRECURSIVE_INITIALIZER_NP # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_for_glibc (LOCK) : 0) extern int glthread_rwlock_init_for_glibc (pthread_rwlock_t *lock); # endif # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_rdlock (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_wrlock (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? pthread_rwlock_unlock (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? pthread_rwlock_destroy (LOCK) : 0) # else typedef struct { int initialized; pthread_mutex_t guard; /* protects the initialization */ pthread_rwlock_t rwlock; /* read-write lock */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { 0, PTHREAD_MUTEX_INITIALIZER } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif # else typedef struct { pthread_mutex_t lock; /* protects the remaining fields */ pthread_cond_t waiting_readers; /* waiting readers */ pthread_cond_t waiting_writers; /* waiting writers */ unsigned int waiting_writers_count; /* number of waiting writers */ int runcount; /* number of readers running, or -1 when a writer runs */ } gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_COND_INITIALIZER, PTHREAD_COND_INITIALIZER, 0, 0 } # define glthread_rwlock_init(LOCK) \ (pthread_in_use () ? glthread_rwlock_init_multithreaded (LOCK) : 0) # define glthread_rwlock_rdlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_rdlock_multithreaded (LOCK) : 0) # define glthread_rwlock_wrlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_wrlock_multithreaded (LOCK) : 0) # define glthread_rwlock_unlock(LOCK) \ (pthread_in_use () ? glthread_rwlock_unlock_multithreaded (LOCK) : 0) # define glthread_rwlock_destroy(LOCK) \ (pthread_in_use () ? glthread_rwlock_destroy_multithreaded (LOCK) : 0) extern int glthread_rwlock_init_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_rdlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_wrlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_unlock_multithreaded (gl_rwlock_t *lock); extern int glthread_rwlock_destroy_multithreaded (gl_rwlock_t *lock); # endif /* --------------------- gl_recursive_lock_t datatype --------------------- */ # if HAVE_PTHREAD_MUTEX_RECURSIVE # if defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER || defined PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP typedef pthread_mutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS pthread_mutex_t NAME = gl_recursive_lock_initializer; # ifdef PTHREAD_RECURSIVE_MUTEX_INITIALIZER # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER # else # define gl_recursive_lock_initializer \ PTHREAD_RECURSIVE_MUTEX_INITIALIZER_NP # endif # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? pthread_mutex_lock (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? pthread_mutex_unlock (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? pthread_mutex_destroy (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); # else typedef struct { pthread_mutex_t recmutex; /* recursive mutex */ pthread_mutex_t guard; /* protects the initialization */ int initialized; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, PTHREAD_MUTEX_INITIALIZER, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif # else /* Old versions of POSIX threads on Solaris did not have recursive locks. We have to implement them ourselves. */ typedef struct { pthread_mutex_t mutex; pthread_t owner; unsigned long depth; } gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ { PTHREAD_MUTEX_INITIALIZER, (pthread_t) 0, 0 } # define glthread_recursive_lock_init(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_init_multithreaded (LOCK) : 0) # define glthread_recursive_lock_lock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_lock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_unlock(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_unlock_multithreaded (LOCK) : 0) # define glthread_recursive_lock_destroy(LOCK) \ (pthread_in_use () ? glthread_recursive_lock_destroy_multithreaded (LOCK) : 0) extern int glthread_recursive_lock_init_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_lock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_unlock_multithreaded (gl_recursive_lock_t *lock); extern int glthread_recursive_lock_destroy_multithreaded (gl_recursive_lock_t *lock); # endif /* -------------------------- gl_once_t datatype -------------------------- */ typedef pthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS pthread_once_t NAME = PTHREAD_ONCE_INIT; # if PTHREAD_IN_USE_DETECTION_HARD || USE_POSIX_THREADS_WEAK # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pthread_in_use () \ ? pthread_once (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) # else # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (pthread_in_use () \ ? glthread_once_multithreaded (ONCE_CONTROL, INITFUNCTION) \ : (glthread_once_singlethreaded (ONCE_CONTROL) ? (INITFUNCTION (), 0) : 0)) extern int glthread_once_multithreaded (pthread_once_t *once_control, void (*init_function) (void)); # endif extern int glthread_once_singlethreaded (pthread_once_t *once_control); # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if USE_WINDOWS_THREADS # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # include "windows-mutex.h" # include "windows-rwlock.h" # include "windows-recmutex.h" # include "windows-once.h" # ifdef __cplusplus extern "C" { # endif /* We can use CRITICAL_SECTION directly, rather than the native Windows Event, Mutex, Semaphore types, because - we need only to synchronize inside a single process (address space), not inter-process locking, - we don't need to support trylock operations. (TryEnterCriticalSection does not work on Windows 95/98/ME. Packages that need trylock usually define their own mutex type.) */ /* There is no way to statically initialize a CRITICAL_SECTION. It needs to be done lazily, once only. For this we need spinlocks. */ /* -------------------------- gl_lock_t datatype -------------------------- */ typedef glwthread_mutex_t gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME; # define gl_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_lock_t NAME = gl_lock_initializer; # define gl_lock_initializer \ GLWTHREAD_MUTEX_INIT # define glthread_lock_init(LOCK) \ (glwthread_mutex_init (LOCK), 0) # define glthread_lock_lock(LOCK) \ glwthread_mutex_lock (LOCK) # define glthread_lock_unlock(LOCK) \ glwthread_mutex_unlock (LOCK) # define glthread_lock_destroy(LOCK) \ glwthread_mutex_destroy (LOCK) /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef glwthread_rwlock_t gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME; # define gl_rwlock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_rwlock_t NAME = gl_rwlock_initializer; # define gl_rwlock_initializer \ GLWTHREAD_RWLOCK_INIT # define glthread_rwlock_init(LOCK) \ (glwthread_rwlock_init (LOCK), 0) # define glthread_rwlock_rdlock(LOCK) \ glwthread_rwlock_rdlock (LOCK) # define glthread_rwlock_wrlock(LOCK) \ glwthread_rwlock_wrlock (LOCK) # define glthread_rwlock_unlock(LOCK) \ glwthread_rwlock_unlock (LOCK) # define glthread_rwlock_destroy(LOCK) \ glwthread_rwlock_destroy (LOCK) /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef glwthread_recmutex_t gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME; # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) \ STORAGECLASS gl_recursive_lock_t NAME = gl_recursive_lock_initializer; # define gl_recursive_lock_initializer \ GLWTHREAD_RECMUTEX_INIT # define glthread_recursive_lock_init(LOCK) \ (glwthread_recmutex_init (LOCK), 0) # define glthread_recursive_lock_lock(LOCK) \ glwthread_recmutex_lock (LOCK) # define glthread_recursive_lock_unlock(LOCK) \ glwthread_recmutex_unlock (LOCK) # define glthread_recursive_lock_destroy(LOCK) \ glwthread_recmutex_destroy (LOCK) /* -------------------------- gl_once_t datatype -------------------------- */ typedef glwthread_once_t gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = GLWTHREAD_ONCE_INIT; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (glwthread_once (ONCE_CONTROL, INITFUNCTION), 0) # ifdef __cplusplus } # endif #endif /* ========================================================================= */ #if !(USE_ISOC_THREADS || USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS || USE_WINDOWS_THREADS) /* Provide dummy implementation if threads are not supported. */ /* -------------------------- gl_lock_t datatype -------------------------- */ typedef int gl_lock_t; # define gl_lock_define(STORAGECLASS, NAME) # define gl_lock_define_initialized(STORAGECLASS, NAME) # define glthread_lock_init(NAME) 0 # define glthread_lock_lock(NAME) 0 # define glthread_lock_unlock(NAME) 0 # define glthread_lock_destroy(NAME) 0 /* ------------------------- gl_rwlock_t datatype ------------------------- */ typedef int gl_rwlock_t; # define gl_rwlock_define(STORAGECLASS, NAME) # define gl_rwlock_define_initialized(STORAGECLASS, NAME) # define glthread_rwlock_init(NAME) 0 # define glthread_rwlock_rdlock(NAME) 0 # define glthread_rwlock_wrlock(NAME) 0 # define glthread_rwlock_unlock(NAME) 0 # define glthread_rwlock_destroy(NAME) 0 /* --------------------- gl_recursive_lock_t datatype --------------------- */ typedef int gl_recursive_lock_t; # define gl_recursive_lock_define(STORAGECLASS, NAME) # define gl_recursive_lock_define_initialized(STORAGECLASS, NAME) # define glthread_recursive_lock_init(NAME) 0 # define glthread_recursive_lock_lock(NAME) 0 # define glthread_recursive_lock_unlock(NAME) 0 # define glthread_recursive_lock_destroy(NAME) 0 /* -------------------------- gl_once_t datatype -------------------------- */ typedef int gl_once_t; # define gl_once_define(STORAGECLASS, NAME) \ STORAGECLASS gl_once_t NAME = 0; # define glthread_once(ONCE_CONTROL, INITFUNCTION) \ (*(ONCE_CONTROL) == 0 ? (*(ONCE_CONTROL) = ~ 0, INITFUNCTION (), 0) : 0) #endif /* ========================================================================= */ /* Macros with built-in error handling. */ /* -------------------------- gl_lock_t datatype -------------------------- */ #define gl_lock_init(NAME) \ do \ { \ if (glthread_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_lock(NAME) \ do \ { \ if (glthread_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_unlock(NAME) \ do \ { \ if (glthread_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_lock_destroy(NAME) \ do \ { \ if (glthread_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* ------------------------- gl_rwlock_t datatype ------------------------- */ #define gl_rwlock_init(NAME) \ do \ { \ if (glthread_rwlock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_rdlock(NAME) \ do \ { \ if (glthread_rwlock_rdlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_wrlock(NAME) \ do \ { \ if (glthread_rwlock_wrlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_unlock(NAME) \ do \ { \ if (glthread_rwlock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_rwlock_destroy(NAME) \ do \ { \ if (glthread_rwlock_destroy (&NAME)) \ abort (); \ } \ while (0) /* --------------------- gl_recursive_lock_t datatype --------------------- */ #define gl_recursive_lock_init(NAME) \ do \ { \ if (glthread_recursive_lock_init (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_lock(NAME) \ do \ { \ if (glthread_recursive_lock_lock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_unlock(NAME) \ do \ { \ if (glthread_recursive_lock_unlock (&NAME)) \ abort (); \ } \ while (0) #define gl_recursive_lock_destroy(NAME) \ do \ { \ if (glthread_recursive_lock_destroy (&NAME)) \ abort (); \ } \ while (0) /* -------------------------- gl_once_t datatype -------------------------- */ #define gl_once(NAME, INITFUNCTION) \ do \ { \ if (glthread_once (&NAME, INITFUNCTION)) \ abort (); \ } \ while (0) /* ========================================================================= */ #endif /* _LOCK_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/glthread/threadlib.c���������������������������������������������������������������0000644�0000000�0000000�00000005120�14226564450�014554� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Multithreading primitives. Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. */ #include <config.h> /* ========================================================================= */ #if USE_POSIX_THREADS || USE_ISOC_AND_POSIX_THREADS /* Use the POSIX threads library. */ # include <errno.h> # include <pthread.h> # include <stdlib.h> # if PTHREAD_IN_USE_DETECTION_HARD # if defined __FreeBSD__ || defined __DragonFly__ /* FreeBSD */ /* Test using pthread_key_create. */ int glthread_in_use (void) { static int tested; static int result; /* 1: linked with -lpthread, 0: only with libc */ if (!tested) { pthread_key_t key; int err = pthread_key_create (&key, NULL); if (err == ENOSYS) result = 0; else { result = 1; if (err == 0) pthread_key_delete (key); } tested = 1; } return result; } # else /* Solaris, HP-UX */ /* Test using pthread_create. */ /* The function to be executed by a dummy thread. */ static void * dummy_thread_func (void *arg) { return arg; } int glthread_in_use (void) { static int tested; static int result; /* 1: linked with -lpthread, 0: only with libc */ if (!tested) { pthread_t thread; if (pthread_create (&thread, NULL, dummy_thread_func, NULL) != 0) /* Thread creation failed. */ result = 0; else { /* Thread creation works. */ void *retval; if (pthread_join (thread, &retval) != 0) abort (); result = 1; } tested = 1; } return result; } # endif # endif #endif /* ========================================================================= */ /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/tmpdir.c���������������������������������������������������������������������������0000644�0000000�0000000�00000010344�14226564451�012330� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1999, 2001-2002, 2006, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Extracted from sysdeps/posix/tempname.c. */ #include <config.h> /* Specification. */ #include "tmpdir.h" #include <stdbool.h> #include <stdlib.h> #include <string.h> #include <errno.h> #ifndef __set_errno # define __set_errno(Val) errno = (Val) #endif #include <stdio.h> #ifndef P_tmpdir # ifdef _P_tmpdir /* native Windows */ # define P_tmpdir _P_tmpdir # else # define P_tmpdir "/tmp" # endif #endif #include <sys/stat.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> #endif #include "pathmax.h" #if defined _WIN32 && ! defined __CYGWIN__ /* Don't assume that UNICODE is not defined. */ # undef GetTempPath # define GetTempPath GetTempPathA #endif #if _LIBC # define struct_stat64 struct stat64 #else # define struct_stat64 struct stat # define __libc_secure_getenv secure_getenv # define __xstat64(version, path, buf) stat (path, buf) #endif /* Pathname support. ISSLASH(C) tests whether C is a directory separator character. */ #if defined _WIN32 || defined __CYGWIN__ || defined __EMX__ || defined __DJGPP__ /* Native Windows, Cygwin, OS/2, DOS */ # define ISSLASH(C) ((C) == '/' || (C) == '\\') #else /* Unix */ # define ISSLASH(C) ((C) == '/') #endif /* Return nonzero if DIR is an existent directory. */ static bool direxists (const char *dir) { struct_stat64 buf; return __xstat64 (_STAT_VER, dir, &buf) == 0 && S_ISDIR (buf.st_mode); } /* Path search algorithm, for tmpnam, tmpfile, etc. If DIR is non-null and exists, uses it; otherwise uses the first of $TMPDIR, P_tmpdir, /tmp that exists. Copies into TMPL a template suitable for use with mk[s]temp. Will fail (-1) if DIR is non-null and doesn't exist, none of the searched dirs exists, or there's not enough space in TMPL. */ int path_search (char *tmpl, size_t tmpl_len, const char *dir, const char *pfx, bool try_tmpdir) { const char *d; size_t dlen, plen; bool add_slash; if (!pfx || !pfx[0]) { pfx = "file"; plen = 4; } else { plen = strlen (pfx); if (plen > 5) plen = 5; } if (try_tmpdir) { d = __libc_secure_getenv ("TMPDIR"); if (d != NULL && direxists (d)) dir = d; else if (dir != NULL && direxists (dir)) /* nothing */ ; else dir = NULL; } if (dir == NULL) { #if defined _WIN32 && ! defined __CYGWIN__ char dirbuf[PATH_MAX]; DWORD retval; /* Find Windows temporary file directory. We try this before P_tmpdir because Windows defines P_tmpdir to "\\" and will therefore try to put all temporary files in the root directory (unless $TMPDIR is set). */ retval = GetTempPath (PATH_MAX, dirbuf); if (retval > 0 && retval < PATH_MAX && direxists (dirbuf)) dir = dirbuf; else #endif if (direxists (P_tmpdir)) dir = P_tmpdir; else if (strcmp (P_tmpdir, "/tmp") != 0 && direxists ("/tmp")) dir = "/tmp"; else { __set_errno (ENOENT); return -1; } } dlen = strlen (dir); #ifdef __VMS add_slash = 0; #else add_slash = dlen != 0 && !ISSLASH (dir[dlen - 1]); #endif /* check we have room for "${dir}/${pfx}XXXXXX\0" */ if (tmpl_len < dlen + add_slash + plen + 6 + 1) { __set_errno (EINVAL); return -1; } memcpy (tmpl, dir, dlen); sprintf (tmpl + dlen, &"/%.*sXXXXXX"[!add_slash], (int) plen, pfx); return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/c-ctype.c��������������������������������������������������������������������������0000644�0000000�0000000�00000001513�14226564447�012400� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character handling in C locale. Copyright (C) 2003-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define C_CTYPE_INLINE _GL_EXTERN_INLINE #include "c-ctype.h" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/obstack.c��������������������������������������������������������������������������0000644�0000000�0000000�00000027552�14226564450�012467� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* obstack.c - subroutines used implicitly by object stack macros Copyright (C) 1988-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef _LIBC # include <obstack.h> #else # include <config.h> # include "obstack.h" #endif /* NOTE BEFORE MODIFYING THIS FILE: _OBSTACK_INTERFACE_VERSION in obstack.h must be incremented whenever callers compiled using an old obstack.h can no longer properly call the functions in this file. */ /* Comment out all this code if we are using the GNU C Library, and are not actually compiling the library itself, and the installed library supports the same library interface we do. This code is part of the GNU C Library, but also included in many other GNU distributions. Compiling and linking in this code is a waste when using the GNU C library (especially if it is a shared library). Rather than having every GNU program understand 'configure --with-gnu-libc' and omit the object files, it is simpler to just do this in the source for each such file. */ #if !defined _LIBC && defined __GNU_LIBRARY__ && __GNU_LIBRARY__ > 1 # include <gnu-versions.h> # if (_GNU_OBSTACK_INTERFACE_VERSION == _OBSTACK_INTERFACE_VERSION \ || (_GNU_OBSTACK_INTERFACE_VERSION == 1 \ && _OBSTACK_INTERFACE_VERSION == 2 \ && defined SIZEOF_INT && defined SIZEOF_SIZE_T \ && SIZEOF_INT == SIZEOF_SIZE_T)) # define _OBSTACK_ELIDE_CODE # endif #endif #ifndef _OBSTACK_ELIDE_CODE /* If GCC, or if an oddball (testing?) host that #defines __alignof__, use the already-supplied __alignof__. Otherwise, this must be Gnulib (as glibc assumes GCC); defer to Gnulib's alignof_type. */ # if !defined __GNUC__ && !defined __alignof__ # include <alignof.h> # define __alignof__(type) alignof_type (type) # endif # include <stdlib.h> # include <stdint.h> # ifndef MAX # define MAX(a,b) ((a) > (b) ? (a) : (b)) # endif /* Determine default alignment. */ /* If malloc were really smart, it would round addresses to DEFAULT_ALIGNMENT. But in fact it might be less smart and round addresses to as much as DEFAULT_ROUNDING. So we prepare for it to do that. DEFAULT_ALIGNMENT cannot be an enum constant; see gnulib's alignof.h. */ #define DEFAULT_ALIGNMENT MAX (__alignof__ (long double), \ MAX (__alignof__ (uintmax_t), \ __alignof__ (void *))) #define DEFAULT_ROUNDING MAX (sizeof (long double), \ MAX (sizeof (uintmax_t), \ sizeof (void *))) /* Call functions with either the traditional malloc/free calling interface, or the mmalloc/mfree interface (that adds an extra first argument), based on the value of use_extra_arg. */ static void * call_chunkfun (struct obstack *h, size_t size) { if (h->use_extra_arg) return h->chunkfun.extra (h->extra_arg, size); else return h->chunkfun.plain (size); } static void call_freefun (struct obstack *h, void *old_chunk) { if (h->use_extra_arg) h->freefun.extra (h->extra_arg, old_chunk); else h->freefun.plain (old_chunk); } /* Initialize an obstack H for use. Specify chunk size SIZE (0 means default). Objects start on multiples of ALIGNMENT (0 means use default). Return nonzero if successful, calls obstack_alloc_failed_handler if allocation fails. */ static int _obstack_begin_worker (struct obstack *h, _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment) { struct _obstack_chunk *chunk; /* points to new chunk */ if (alignment == 0) alignment = DEFAULT_ALIGNMENT; if (size == 0) /* Default size is what GNU malloc can fit in a 4096-byte block. */ { /* 12 is sizeof (mhead) and 4 is EXTRA from GNU malloc. Use the values for range checking, because if range checking is off, the extra bytes won't be missed terribly, but if range checking is on and we used a larger request, a whole extra 4096 bytes would be allocated. These number are irrelevant to the new GNU malloc. I suspect it is less sensitive to the size of the request. */ int extra = ((((12 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)) + 4 + DEFAULT_ROUNDING - 1) & ~(DEFAULT_ROUNDING - 1)); size = 4096 - extra; } h->chunk_size = size; h->alignment_mask = alignment - 1; chunk = h->chunk = call_chunkfun (h, h->chunk_size); if (!chunk) (*obstack_alloc_failed_handler) (); h->next_free = h->object_base = __PTR_ALIGN ((char *) chunk, chunk->contents, alignment - 1); h->chunk_limit = chunk->limit = (char *) chunk + h->chunk_size; chunk->prev = 0; /* The initial chunk now contains no empty object. */ h->maybe_empty_object = 0; h->alloc_failed = 0; return 1; } int _obstack_begin (struct obstack *h, _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment, void *(*chunkfun) (size_t), void (*freefun) (void *)) { h->chunkfun.plain = chunkfun; h->freefun.plain = freefun; h->use_extra_arg = 0; return _obstack_begin_worker (h, size, alignment); } int _obstack_begin_1 (struct obstack *h, _OBSTACK_SIZE_T size, _OBSTACK_SIZE_T alignment, void *(*chunkfun) (void *, size_t), void (*freefun) (void *, void *), void *arg) { h->chunkfun.extra = chunkfun; h->freefun.extra = freefun; h->extra_arg = arg; h->use_extra_arg = 1; return _obstack_begin_worker (h, size, alignment); } /* Allocate a new current chunk for the obstack *H on the assumption that LENGTH bytes need to be added to the current object, or a new object of length LENGTH allocated. Copies any partial object from the end of the old chunk to the beginning of the new one. */ void _obstack_newchunk (struct obstack *h, _OBSTACK_SIZE_T length) { struct _obstack_chunk *old_chunk = h->chunk; struct _obstack_chunk *new_chunk = 0; size_t obj_size = h->next_free - h->object_base; char *object_base; /* Compute size for new chunk. */ size_t sum1 = obj_size + length; size_t sum2 = sum1 + h->alignment_mask; size_t new_size = sum2 + (obj_size >> 3) + 100; if (new_size < sum2) new_size = sum2; if (new_size < h->chunk_size) new_size = h->chunk_size; /* Allocate and initialize the new chunk. */ if (obj_size <= sum1 && sum1 <= sum2) new_chunk = call_chunkfun (h, new_size); if (!new_chunk) (*obstack_alloc_failed_handler)(); h->chunk = new_chunk; new_chunk->prev = old_chunk; new_chunk->limit = h->chunk_limit = (char *) new_chunk + new_size; /* Compute an aligned object_base in the new chunk */ object_base = __PTR_ALIGN ((char *) new_chunk, new_chunk->contents, h->alignment_mask); /* Move the existing object to the new chunk. */ memcpy (object_base, h->object_base, obj_size); /* If the object just copied was the only data in OLD_CHUNK, free that chunk and remove it from the chain. But not if that chunk might contain an empty object. */ if (!h->maybe_empty_object && (h->object_base == __PTR_ALIGN ((char *) old_chunk, old_chunk->contents, h->alignment_mask))) { new_chunk->prev = old_chunk->prev; call_freefun (h, old_chunk); } h->object_base = object_base; h->next_free = h->object_base + obj_size; /* The new chunk certainly contains no empty object yet. */ h->maybe_empty_object = 0; } /* Return nonzero if object OBJ has been allocated from obstack H. This is here for debugging. If you use it in a program, you are probably losing. */ /* Suppress -Wmissing-prototypes warning. We don't want to declare this in obstack.h because it is just for debugging. */ int _obstack_allocated_p (struct obstack *h, void *obj) __attribute_pure__; int _obstack_allocated_p (struct obstack *h, void *obj) { struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ struct _obstack_chunk *plp; /* point to previous chunk if any */ lp = (h)->chunk; /* We use >= rather than > since the object cannot be exactly at the beginning of the chunk but might be an empty object exactly at the end of an adjacent chunk. */ while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj)) { plp = lp->prev; lp = plp; } return lp != 0; } /* Free objects in obstack H, including OBJ and everything allocate more recently than OBJ. If OBJ is zero, free everything in H. */ void _obstack_free (struct obstack *h, void *obj) { struct _obstack_chunk *lp; /* below addr of any objects in this chunk */ struct _obstack_chunk *plp; /* point to previous chunk if any */ lp = h->chunk; /* We use >= because there cannot be an object at the beginning of a chunk. But there can be an empty object at that address at the end of another chunk. */ while (lp != 0 && ((void *) lp >= obj || (void *) (lp)->limit < obj)) { plp = lp->prev; call_freefun (h, lp); lp = plp; /* If we switch chunks, we can't tell whether the new current chunk contains an empty object, so assume that it may. */ h->maybe_empty_object = 1; } if (lp) { h->object_base = h->next_free = (char *) (obj); h->chunk_limit = lp->limit; h->chunk = lp; } else if (obj != 0) /* obj is not in any of the chunks! */ abort (); } _OBSTACK_SIZE_T _obstack_memory_used (struct obstack *h) { struct _obstack_chunk *lp; _OBSTACK_SIZE_T nbytes = 0; for (lp = h->chunk; lp != 0; lp = lp->prev) { nbytes += lp->limit - (char *) lp; } return nbytes; } # ifndef _OBSTACK_NO_ERROR_HANDLER /* Define the error handler. */ # include <stdio.h> /* Exit value used when 'print_and_abort' is used. */ # ifdef _LIBC int obstack_exit_failure = EXIT_FAILURE; # else # include "exitfail.h" # define obstack_exit_failure exit_failure # endif # ifdef _LIBC # include <libintl.h> # else # include "gettext.h" # endif # ifndef _ # define _(msgid) gettext (msgid) # endif # ifdef _LIBC # include <libio/iolibio.h> # endif static __attribute_noreturn__ void print_and_abort (void) { /* Don't change any of these strings. Yes, it would be possible to add the newline to the string and use fputs or so. But this must not happen because the "memory exhausted" message appears in other places like this and the translation should be reused instead of creating a very similar string which requires a separate translation. */ # ifdef _LIBC (void) __fxprintf (NULL, "%s\n", _("memory exhausted")); # else fprintf (stderr, "%s\n", _("memory exhausted")); # endif exit (obstack_exit_failure); } /* The functions allocating more room by calling 'obstack_chunk_alloc' jump to the handler pointed to by 'obstack_alloc_failed_handler'. This can be set to a user defined function which should either abort gracefully or use longjump - but shouldn't return. This variable by default points to the internal function 'print_and_abort'. */ __attribute_noreturn__ void (*obstack_alloc_failed_handler) (void) = print_and_abort; # endif /* !_OBSTACK_NO_ERROR_HANDLER */ #endif /* !_OBSTACK_ELIDE_CODE */ ������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/remove.c���������������������������������������������������������������������������0000644�0000000�0000000�00000003016�14226564450�012323� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Remove a file or directory. Copyright (C) 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Eric Blake */ #include <config.h> #include <stdio.h> #include <errno.h> #include <unistd.h> #undef remove /* Remove NAME from the file system. This works around C89 platforms that don't handle directories like POSIX requires; it also works around Solaris 9 bugs with trailing slash. */ int rpl_remove (char const *name) { /* It is faster to just try rmdir, and fall back on unlink, than it is to use lstat to see what we are about to remove. Technically, it is more likely that we want unlink, not rmdir, but we cannot guarantee the safety of unlink on directories. Trailing slash bugs are handled by our rmdir and unlink wrappers. */ int result = rmdir (name); if (result && errno == ENOTDIR) result = unlink (name); return result; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/windows-spawn.h��������������������������������������������������������������������0000644�0000000�0000000�00000015720�14226564447�013666� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary functions for the creation of subprocesses. Native Windows API. Copyright (C) 2001, 2003-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _WINDOWS_SPAWN_H #define _WINDOWS_SPAWN_H #include <stdbool.h> #include <stdint.h> #include <stdlib.h> /* Get declarations of the native Windows API functions. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> /* Prepares an argument vector before calling spawn(). Note that spawn() does not by itself call the command interpreter (getenv ("COMSPEC") != NULL ? getenv ("COMSPEC") : ({ OSVERSIONINFO v; v.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); GetVersionEx(&v); v.dwPlatformId == VER_PLATFORM_WIN32_NT; }) ? "cmd.exe" : "command.com"). Instead it simply concatenates the arguments, separated by ' ', and calls CreateProcess(). We must quote the arguments since Windows CreateProcess() interprets characters like ' ', '\t', '\\', '"' (but not '<' and '>') in a special way: - Space and tab are interpreted as delimiters. They are not treated as delimiters if they are surrounded by double quotes: "...". - Unescaped double quotes are removed from the input. Their only effect is that within double quotes, space and tab are treated like normal characters. - Backslashes not followed by double quotes are not special. - But 2*n+1 backslashes followed by a double quote become n backslashes followed by a double quote (n >= 0): \" -> " \\\" -> \" \\\\\" -> \\" - '*', '?' characters may get expanded through wildcard expansion in the callee: By default, in the callee, the initialization code before main() takes the result of GetCommandLine(), wildcard-expands it, and passes it to main(). The exceptions to this rule are: - programs that inspect GetCommandLine() and ignore argv, - mingw programs that have a global variable 'int _CRT_glob = 0;', - Cygwin programs, when invoked from a Cygwin program. prepare_spawn creates and returns a new argument vector, where the arguments are appropriately quoted and an additional argument "sh.exe" has been added at the beginning. The new argument vector is freshly allocated. The memory for all its elements is allocated within *MEM_TO_FREE, which is freshly allocated as well. In case of memory allocation failure, NULL is returned, with errno set. */ extern const char ** prepare_spawn (const char * const *argv, char **mem_to_free); /* Composes the command to be passed to CreateProcess(). ARGV must contain appropriately quoted arguments, as returned by prepare_spawn. Returns a freshly allocated string. In case of memory allocation failure, NULL is returned, with errno set. */ extern char * compose_command (const char * const *argv) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; /* Composes the block of memory that contains the environment variables. ENVP must contain an environment (a NULL-terminated array of string of the form VARIABLE=VALUE). Returns a freshly allocated block of memory. In case of memory allocation failure, NULL is returned, with errno set. */ extern char * compose_envblock (const char * const *envp) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; /* This struct keeps track of which handles to pass to a subprocess, and with which flags. All of the handles here are inheritable. Regarding handle inheritance, see <https://docs.microsoft.com/en-us/windows/win32/sysinfo/handle-inheritance> */ struct inheritable_handles { /* The number of occupied entries in the two arrays below. 3 <= count <= allocated. */ size_t count; /* The number of allocated entries in the two arrays below. */ size_t allocated; /* handles[0..count-1] are the occupied entries. handles[fd] is either INVALID_HANDLE_VALUE or an inheritable handle. */ HANDLE *handles; /* flags[0..count-1] are the occupied entries. flags[fd] is only relevant if handles[fd] != INVALID_HANDLE_VALUE. It is a bit mask consisting of: - 32 for O_APPEND. */ unsigned char *flags; }; /* Initializes a set of inheritable handles, filling in all inheritable handles assigned to file descriptors. If DUPLICATE is true, the handles stored in the set are duplicates. Returns 0 upon success. In case of failure, -1 is returned, with errno set. */ extern int init_inheritable_handles (struct inheritable_handles *inh_handles, bool duplicate); /* Fills a set of inheritable handles into a STARTUPINFO for CreateProcess(). Returns 0 upon success. In case of failure, -1 is returned, with errno set. */ extern int compose_handles_block (const struct inheritable_handles *inh_handles, STARTUPINFOA *sinfo); /* Frees the memory held by a set of inheritable handles. */ extern void free_inheritable_handles (struct inheritable_handles *inh_handles); /* Converts a CreateProcess() error code (retrieved through GetLastError()) to an errno value. */ extern int convert_CreateProcess_error (DWORD error); /* Creates a subprocess. MODE is either P_WAIT or P_NOWAIT. PROGNAME is the program to invoke. ARGV is the NULL-terminated array of arguments, ARGV[0] being PROGNAME by convention. ENVP is the NULL-terminated set of environment variable assignments, or NULL to inherit the initial environ variable assignments from the caller and ignore all calls to putenv(), setenv(), unsetenv() done in the caller. CURRDIR is the directory in which to start the program, or NULL to inherit the working directory from the caller. STDIN_HANDLE, STDOUT_HANDLE, STDERR_HANDLE are the handles to use for the first three file descriptors in the callee process. Returns - 0 for success (if MODE is P_WAIT), or - a handle that be passed to _cwait (on Windows) or waitpid (on OS/2), or - -1 upon error, with errno set. */ extern intptr_t spawnpvech (int mode, const char *progname, const char * const *argv, const char * const *envp, const char *currdir, HANDLE stdin_handle, HANDLE stdout_handle, HANDLE stderr_handle); #endif /* _WINDOWS_SPAWN_H */ ������������������������������������������������recutils-1.9/lib/printf-args.h����������������������������������������������������������������������0000644�0000000�0000000�00000007406�14226564450�013276� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Decomposed printf argument list. Copyright (C) 1999, 2002-2003, 2006-2007, 2011-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _PRINTF_ARGS_H #define _PRINTF_ARGS_H /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. PRINTF_FETCHARGS Name of the function to be declared. STATIC Set to 'static' to declare the function static. */ /* Default parameters. */ #ifndef PRINTF_FETCHARGS # define PRINTF_FETCHARGS printf_fetchargs #endif /* Get size_t. */ #include <stddef.h> /* Get wchar_t. */ #if HAVE_WCHAR_T # include <stddef.h> #endif /* Get wint_t. */ #if HAVE_WINT_T # include <wchar.h> #endif /* Get va_list. */ #include <stdarg.h> /* Argument types */ typedef enum { TYPE_NONE, TYPE_SCHAR, TYPE_UCHAR, TYPE_SHORT, TYPE_USHORT, TYPE_INT, TYPE_UINT, TYPE_LONGINT, TYPE_ULONGINT, TYPE_LONGLONGINT, TYPE_ULONGLONGINT, TYPE_DOUBLE, TYPE_LONGDOUBLE, TYPE_CHAR, #if HAVE_WINT_T TYPE_WIDE_CHAR, #endif TYPE_STRING, #if HAVE_WCHAR_T TYPE_WIDE_STRING, #endif TYPE_POINTER, TYPE_COUNT_SCHAR_POINTER, TYPE_COUNT_SHORT_POINTER, TYPE_COUNT_INT_POINTER, TYPE_COUNT_LONGINT_POINTER, TYPE_COUNT_LONGLONGINT_POINTER #if ENABLE_UNISTDIO /* The unistdio extensions. */ , TYPE_U8_STRING , TYPE_U16_STRING , TYPE_U32_STRING #endif } arg_type; /* Polymorphic argument */ typedef struct { arg_type type; union { signed char a_schar; unsigned char a_uchar; short a_short; unsigned short a_ushort; int a_int; unsigned int a_uint; long int a_longint; unsigned long int a_ulongint; long long int a_longlongint; unsigned long long int a_ulonglongint; float a_float; double a_double; long double a_longdouble; int a_char; #if HAVE_WINT_T wint_t a_wide_char; #endif const char* a_string; #if HAVE_WCHAR_T const wchar_t* a_wide_string; #endif void* a_pointer; signed char * a_count_schar_pointer; short * a_count_short_pointer; int * a_count_int_pointer; long int * a_count_longint_pointer; long long int * a_count_longlongint_pointer; #if ENABLE_UNISTDIO /* The unistdio extensions. */ const uint8_t * a_u8_string; const uint16_t * a_u16_string; const uint32_t * a_u32_string; #endif } a; } argument; /* Number of directly allocated arguments (no malloc() needed). */ #define N_DIRECT_ALLOC_ARGUMENTS 7 typedef struct { size_t count; argument *arg; argument direct_alloc_arg[N_DIRECT_ALLOC_ARGUMENTS]; } arguments; /* Fetch the arguments, putting them into a. */ #ifdef STATIC STATIC #else extern #endif int PRINTF_FETCHARGS (va_list args, arguments *a); #endif /* _PRINTF_ARGS_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/malloc.c���������������������������������������������������������������������������0000644�0000000�0000000�00000002430�14226564450�012274� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* malloc() function that is glibc compatible. Copyright (C) 1997-1998, 2006-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering and Bruno Haible */ #define _GL_USE_STDLIB_ALLOC 1 #include <config.h> #include <stdlib.h> #include <errno.h> #include "xalloc-oversized.h" /* Allocate an N-byte block of memory from the heap, even if N is 0. */ void * rpl_malloc (size_t n) { if (n == 0) n = 1; if (xalloc_oversized (n, 1)) { errno = ENOMEM; return NULL; } void *result = malloc (n); #if !HAVE_MALLOC_POSIX if (result == NULL) errno = ENOMEM; #endif return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/isnanl-nolibm.h��������������������������������������������������������������������0000644�0000000�0000000�00000002502�14226564450�013574� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if HAVE_ISNANL_IN_LIBC /* Get declaration of isnan macro or (older) isnanl function. */ # include <math.h> # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. GCC >= 4.0 also provides __builtin_isnanl, but clang doesn't. */ # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) # elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) # endif #else /* Test whether X is a NaN. */ # undef isnanl # define isnanl rpl_isnanl extern int isnanl (long double x); #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/wctomb-impl.h����������������������������������������������������������������������0000644�0000000�0000000�00000002134�14226564451�013266� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to multibyte character. Copyright (C) 2011-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ int wctomb (char *s, wchar_t wc) { if (s == NULL) return 0; else { mbstate_t state; size_t result; memset (&state, 0, sizeof (mbstate_t)); result = wcrtomb (s, wc, &state); if (result == (size_t)-1) return -1; return result; } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/dup-safer-flag.c�������������������������������������������������������������������0000644�0000000�0000000�00000002444�14226564446�013634� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate a file descriptor result, avoiding clobbering STD{IN,OUT,ERR}_FILENO, with specific flags. Copyright (C) 2001, 2004-2006, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Eric Blake. */ #include <config.h> /* Specification. */ #include "unistd-safer.h" #include <fcntl.h> #include <unistd.h> /* Like dup, but do not return STDIN_FILENO, STDOUT_FILENO, or STDERR_FILENO. If FLAG contains O_CLOEXEC, behave like fcntl(F_DUPFD_CLOEXEC) rather than fcntl(F_DUPFD). */ int dup_safer_flag (int fd, int flag) { return fcntl (fd, (flag & O_CLOEXEC) ? F_DUPFD_CLOEXEC : F_DUPFD, STDERR_FILENO + 1); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/cloexec.c��������������������������������������������������������������������������0000644�0000000�0000000�00000004454�14226564447�012465� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* cloexec.c - set or clear the close-on-exec descriptor flag Copyright (C) 1991, 2004-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* The code is taken from glibc/manual/llio.texi */ #include <config.h> #include "cloexec.h" #include <errno.h> #include <fcntl.h> #include <unistd.h> /* Set the 'FD_CLOEXEC' flag of DESC if VALUE is true, or clear the flag if VALUE is false. Return 0 on success, or -1 on error with 'errno' set. Note that on MingW, this function does NOT protect DESC from being inherited into spawned children. Instead, either use dup_cloexec followed by closing the original DESC, or use interfaces such as open or pipe2 that accept flags like O_CLOEXEC to create DESC non-inheritable in the first place. */ int set_cloexec_flag (int desc, bool value) { #ifdef F_SETFD int flags = fcntl (desc, F_GETFD, 0); if (0 <= flags) { int newflags = (value ? flags | FD_CLOEXEC : flags & ~FD_CLOEXEC); if (flags == newflags || fcntl (desc, F_SETFD, newflags) != -1) return 0; } return -1; #else /* !F_SETFD */ /* Use dup2 to reject invalid file descriptors; the cloexec flag will be unaffected. */ if (desc < 0) { errno = EBADF; return -1; } if (dup2 (desc, desc) < 0) /* errno is EBADF here. */ return -1; /* There is nothing we can do on this kind of platform. Punt. */ return 0; #endif /* !F_SETFD */ } /* Duplicates a file handle FD, while marking the copy to be closed prior to exec or spawn. Returns -1 and sets errno if FD could not be duplicated. */ int dup_cloexec (int fd) { return fcntl (fd, F_DUPFD_CLOEXEC, 0); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getopt-ext.h�����������������������������������������������������������������������0000644�0000000�0000000�00000005753�14226564450�013145� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt (GNU extensions). Copyright (C) 1989-2022 Free Software Foundation, Inc. This file is part of the GNU C Library and is also part of gnulib. Patches to this file should be submitted to both projects. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_EXT_H #define _GETOPT_EXT_H 1 /* This header should not be used directly; include getopt.h instead. Unlike most bits headers, it does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ __BEGIN_DECLS /* Describe the long-named options requested by the application. The LONG_OPTIONS argument to getopt_long or getopt_long_only is a vector of 'struct option' terminated by an element containing a name which is zero. The field 'has_arg' is: no_argument (or 0) if the option does not take an argument, required_argument (or 1) if the option requires an argument, optional_argument (or 2) if the option takes an optional argument. If the field 'flag' is not NULL, it points to a variable that is set to the value given in the field 'val' when the option is found, but left unchanged if the option is not found. To have a long-named option do something other than set an 'int' to a compiled-in constant, such as set a value from 'optarg', set the option's 'flag' field to zero and its 'val' field to a nonzero value (the equivalent single-letter option character, if there is one). For long options that have a zero 'flag' field, 'getopt' returns the contents of the 'val' field. */ struct option { const char *name; /* has_arg can't be an enum because some compilers complain about type mismatches in all the code that assumes it is an int. */ int has_arg; int *flag; int val; }; /* Names for the values of the 'has_arg' field of 'struct option'. */ #define no_argument 0 #define required_argument 1 #define optional_argument 2 extern int getopt_long (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); extern int getopt_long_only (int ___argc, char *__getopt_argv_const *___argv, const char *__shortopts, const struct option *__longopts, int *__longind) __THROW _GL_ARG_NONNULL ((2, 3)); __END_DECLS #endif /* _GETOPT_EXT_H */ ���������������������recutils-1.9/lib/nstrftime.c������������������������������������������������������������������������0000644�0000000�0000000�00000140410�14226564450�013041� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1991-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef _LIBC # define USE_IN_EXTENDED_LOCALE_MODEL 1 # define HAVE_STRUCT_ERA_ENTRY 1 # define HAVE_TM_GMTOFF 1 # define HAVE_STRUCT_TM_TM_ZONE 1 # define HAVE_TZNAME 1 # include "../locale/localeinfo.h" #else # include <libc-config.h> # if FPRINTFTIME # include "fprintftime.h" # else # include "strftime.h" # endif # include "time-internal.h" #endif #include <ctype.h> #include <errno.h> #include <time.h> #if HAVE_TZNAME && !HAVE_DECL_TZNAME extern char *tzname[]; #endif /* Do multibyte processing if multibyte encodings are supported, unless multibyte sequences are safe in formats. Multibyte sequences are safe if they cannot contain byte sequences that look like format conversion specifications. The multibyte encodings used by the C library on the various platforms (UTF-8, GB2312, GBK, CP936, GB18030, EUC-TW, BIG5, BIG5-HKSCS, CP950, EUC-JP, EUC-KR, CP949, SHIFT_JIS, CP932, JOHAB) are safe for formats, because the byte '%' cannot occur in a multibyte character except in the first byte. The DEC-HANYU encoding used on OSF/1 is not safe for formats, but this encoding has never been seen in real-life use, so we ignore it. */ #if !(defined __osf__ && 0) # define MULTIBYTE_IS_FORMAT_SAFE 1 #endif #define DO_MULTIBYTE (! MULTIBYTE_IS_FORMAT_SAFE) #if DO_MULTIBYTE # include <wchar.h> static const mbstate_t mbstate_zero; #endif #include <limits.h> #include <stddef.h> #include <stdlib.h> #include <string.h> #include <stdbool.h> #include "attribute.h" #include <intprops.h> #ifdef COMPILE_WIDE # include <endian.h> # define CHAR_T wchar_t # define UCHAR_T unsigned int # define L_(Str) L##Str # define NLW(Sym) _NL_W##Sym # define MEMCPY(d, s, n) __wmemcpy (d, s, n) # define STRLEN(s) __wcslen (s) #else # define CHAR_T char # define UCHAR_T unsigned char # define L_(Str) Str # define NLW(Sym) Sym # define ABALTMON_1 _NL_ABALTMON_1 # define MEMCPY(d, s, n) memcpy (d, s, n) # define STRLEN(s) strlen (s) #endif /* Shift A right by B bits portably, by dividing A by 2**B and truncating towards minus infinity. A and B should be free of side effects, and B should be in the range 0 <= B <= INT_BITS - 2, where INT_BITS is the number of useful bits in an int. GNU code can assume that INT_BITS is at least 32. ISO C99 says that A >> B is implementation-defined if A < 0. Some implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift right in the usual way when A < 0, so SHR falls back on division if ordinary A >> B doesn't seem to be the usual signed shift. */ #define SHR(a, b) \ (-1 >> 1 == -1 \ ? (a) >> (b) \ : ((a) + ((a) < 0)) / (1 << (b)) - ((a) < 0)) #define TM_YEAR_BASE 1900 #ifndef __isleap /* Nonzero if YEAR is a leap year (every 4 years, except every 100th isn't, and every 400th is). */ # define __isleap(year) \ ((year) % 4 == 0 && ((year) % 100 != 0 || (year) % 400 == 0)) #endif #ifdef _LIBC # define mktime_z(tz, tm) mktime (tm) # define tzname __tzname # define tzset __tzset #endif #ifndef FPRINTFTIME # define FPRINTFTIME 0 #endif #if FPRINTFTIME # define STREAM_OR_CHAR_T FILE # define STRFTIME_ARG(x) /* empty */ #else # define STREAM_OR_CHAR_T CHAR_T # define STRFTIME_ARG(x) x, #endif #if FPRINTFTIME # define memset_byte(P, Len, Byte) \ do { size_t _i; for (_i = 0; _i < Len; _i++) fputc (Byte, P); } while (0) # define memset_space(P, Len) memset_byte (P, Len, ' ') # define memset_zero(P, Len) memset_byte (P, Len, '0') #elif defined COMPILE_WIDE # define memset_space(P, Len) (wmemset (P, L' ', Len), (P) += (Len)) # define memset_zero(P, Len) (wmemset (P, L'0', Len), (P) += (Len)) #else # define memset_space(P, Len) (memset (P, ' ', Len), (P) += (Len)) # define memset_zero(P, Len) (memset (P, '0', Len), (P) += (Len)) #endif #if FPRINTFTIME # define advance(P, N) #else # define advance(P, N) ((P) += (N)) #endif #define add(n, f) width_add (width, n, f) #define width_add(width, n, f) \ do \ { \ size_t _n = (n); \ size_t _w = pad == L_('-') || width < 0 ? 0 : width; \ size_t _incr = _n < _w ? _w : _n; \ if (_incr >= maxsize - i) \ { \ errno = ERANGE; \ return 0; \ } \ if (p) \ { \ if (_n < _w) \ { \ size_t _delta = _w - _n; \ if (pad == L_('0') || pad == L_('+')) \ memset_zero (p, _delta); \ else \ memset_space (p, _delta); \ } \ f; \ advance (p, _n); \ } \ i += _incr; \ } while (0) #define add1(c) width_add1 (width, c) #if FPRINTFTIME # define width_add1(width, c) width_add (width, 1, fputc (c, p)) #else # define width_add1(width, c) width_add (width, 1, *p = c) #endif #define cpy(n, s) width_cpy (width, n, s) #if FPRINTFTIME # define width_cpy(width, n, s) \ width_add (width, n, \ do \ { \ if (to_lowcase) \ fwrite_lowcase (p, (s), _n); \ else if (to_uppcase) \ fwrite_uppcase (p, (s), _n); \ else \ { \ /* Ignore the value of fwrite. The caller can determine whether \ an error occurred by inspecting ferror (P). All known fwrite \ implementations set the stream's error indicator when they \ fail due to ENOMEM etc., even though C11 and POSIX.1-2008 do \ not require this. */ \ fwrite (s, _n, 1, p); \ } \ } \ while (0) \ ) #else # define width_cpy(width, n, s) \ width_add (width, n, \ if (to_lowcase) \ memcpy_lowcase (p, (s), _n LOCALE_ARG); \ else if (to_uppcase) \ memcpy_uppcase (p, (s), _n LOCALE_ARG); \ else \ MEMCPY ((void *) p, (void const *) (s), _n)) #endif #ifdef COMPILE_WIDE # ifndef USE_IN_EXTENDED_LOCALE_MODEL # undef __mbsrtowcs_l # define __mbsrtowcs_l(d, s, l, st, loc) __mbsrtowcs (d, s, l, st) # endif # define widen(os, ws, l) \ { \ mbstate_t __st; \ const char *__s = os; \ memset (&__st, '\0', sizeof (__st)); \ l = __mbsrtowcs_l (NULL, &__s, 0, &__st, loc); \ ws = (wchar_t *) alloca ((l + 1) * sizeof (wchar_t)); \ (void) __mbsrtowcs_l (ws, &__s, l, &__st, loc); \ } #endif #if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL /* We use this code also for the extended locale handling where the function gets as an additional argument the locale which has to be used. To access the values we have to redefine the _NL_CURRENT macro. */ # define strftime __strftime_l # define wcsftime __wcsftime_l # undef _NL_CURRENT # define _NL_CURRENT(category, item) \ (current->values[_NL_ITEM_INDEX (item)].string) # define LOCALE_PARAM , locale_t loc # define LOCALE_ARG , loc # define HELPER_LOCALE_ARG , current #else # define LOCALE_PARAM # define LOCALE_ARG # ifdef _LIBC # define HELPER_LOCALE_ARG , _NL_CURRENT_DATA (LC_TIME) # else # define HELPER_LOCALE_ARG # endif #endif #ifdef COMPILE_WIDE # ifdef USE_IN_EXTENDED_LOCALE_MODEL # define TOUPPER(Ch, L) __towupper_l (Ch, L) # define TOLOWER(Ch, L) __towlower_l (Ch, L) # else # define TOUPPER(Ch, L) towupper (Ch) # define TOLOWER(Ch, L) towlower (Ch) # endif #else # ifdef USE_IN_EXTENDED_LOCALE_MODEL # define TOUPPER(Ch, L) __toupper_l (Ch, L) # define TOLOWER(Ch, L) __tolower_l (Ch, L) # else # define TOUPPER(Ch, L) toupper (Ch) # define TOLOWER(Ch, L) tolower (Ch) # endif #endif /* We don't use 'isdigit' here since the locale dependent interpretation is not what we want here. We only need to accept the arabic digits in the ASCII range. One day there is perhaps a more reliable way to accept other sets of digits. */ #define ISDIGIT(Ch) ((unsigned int) (Ch) - L_('0') <= 9) #if FPRINTFTIME static void fwrite_lowcase (FILE *fp, const CHAR_T *src, size_t len) { while (len-- > 0) { fputc (TOLOWER ((UCHAR_T) *src, loc), fp); ++src; } } static void fwrite_uppcase (FILE *fp, const CHAR_T *src, size_t len) { while (len-- > 0) { fputc (TOUPPER ((UCHAR_T) *src, loc), fp); ++src; } } #else static CHAR_T *memcpy_lowcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM); static CHAR_T * memcpy_lowcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM) { while (len-- > 0) dest[len] = TOLOWER ((UCHAR_T) src[len], loc); return dest; } static CHAR_T *memcpy_uppcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM); static CHAR_T * memcpy_uppcase (CHAR_T *dest, const CHAR_T *src, size_t len LOCALE_PARAM) { while (len-- > 0) dest[len] = TOUPPER ((UCHAR_T) src[len], loc); return dest; } #endif #if ! HAVE_TM_GMTOFF /* Yield the difference between *A and *B, measured in seconds, ignoring leap seconds. */ # define tm_diff ftime_tm_diff static int tm_diff (const struct tm *, const struct tm *); static int tm_diff (const struct tm *a, const struct tm *b) { /* Compute intervening leap days correctly even if year is negative. Take care to avoid int overflow in leap day calculations, but it's OK to assume that A and B are close to each other. */ int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); int a100 = (a4 + (a4 < 0)) / 25 - (a4 < 0); int b100 = (b4 + (b4 < 0)) / 25 - (b4 < 0); int a400 = SHR (a100, 2); int b400 = SHR (b100, 2); int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); int years = a->tm_year - b->tm_year; int days = (365 * years + intervening_leap_days + (a->tm_yday - b->tm_yday)); return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + (a->tm_min - b->tm_min)) + (a->tm_sec - b->tm_sec)); } #endif /* ! HAVE_TM_GMTOFF */ /* The number of days from the first day of the first ISO week of this year to the year day YDAY with week day WDAY. ISO weeks start on Monday; the first ISO week has the year's first Thursday. YDAY may be as small as YDAY_MINIMUM. */ #define ISO_WEEK_START_WDAY 1 /* Monday */ #define ISO_WEEK1_WDAY 4 /* Thursday */ #define YDAY_MINIMUM (-366) static int iso_week_days (int, int); static __inline int iso_week_days (int yday, int wday) { /* Add enough to the first operand of % to make it nonnegative. */ int big_enough_multiple_of_7 = (-YDAY_MINIMUM / 7 + 2) * 7; return (yday - (yday - wday + ISO_WEEK1_WDAY + big_enough_multiple_of_7) % 7 + ISO_WEEK1_WDAY - ISO_WEEK_START_WDAY); } /* When compiling this file, GNU applications can #define my_strftime to a symbol (typically nstrftime) to get an extended strftime with extra arguments TZ and NS. */ #if FPRINTFTIME # undef my_strftime # define my_strftime fprintftime #endif #ifdef my_strftime # define extra_args , tz, ns # define extra_args_spec , timezone_t tz, int ns #else # if defined COMPILE_WIDE # define my_strftime wcsftime # define nl_get_alt_digit _nl_get_walt_digit # else # define my_strftime strftime # define nl_get_alt_digit _nl_get_alt_digit # endif # define extra_args # define extra_args_spec /* We don't have this information in general. */ # define tz 1 # define ns 0 #endif static size_t __strftime_internal (STREAM_OR_CHAR_T *, STRFTIME_ARG (size_t) const CHAR_T *, const struct tm *, bool, int, int, bool * extra_args_spec LOCALE_PARAM); /* Write information from TP into S according to the format string FORMAT, writing no more that MAXSIZE characters (including the terminating '\0') and returning number of characters written. If S is NULL, nothing will be written anywhere, so to determine how many characters would be written, use NULL for S and (size_t) -1 for MAXSIZE. */ size_t my_strftime (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) const CHAR_T *format, const struct tm *tp extra_args_spec LOCALE_PARAM) { bool tzset_called = false; return __strftime_internal (s, STRFTIME_ARG (maxsize) format, tp, false, 0, -1, &tzset_called extra_args LOCALE_ARG); } libc_hidden_def (my_strftime) /* Just like my_strftime, above, but with more parameters. UPCASE indicates that the result should be converted to upper case. YR_SPEC and WIDTH specify the padding and width for the year. *TZSET_CALLED indicates whether tzset has been called here. */ static size_t __strftime_internal (STREAM_OR_CHAR_T *s, STRFTIME_ARG (size_t maxsize) const CHAR_T *format, const struct tm *tp, bool upcase, int yr_spec, int width, bool *tzset_called extra_args_spec LOCALE_PARAM) { #if defined _LIBC && defined USE_IN_EXTENDED_LOCALE_MODEL struct __locale_data *const current = loc->__locales[LC_TIME]; #endif #if FPRINTFTIME size_t maxsize = (size_t) -1; #endif int saved_errno = errno; int hour12 = tp->tm_hour; #ifdef _NL_CURRENT /* We cannot make the following values variables since we must delay the evaluation of these values until really needed since some expressions might not be valid in every situation. The 'struct tm' might be generated by a strptime() call that initialized only a few elements. Dereference the pointers only if the format requires this. Then it is ok to fail if the pointers are invalid. */ # define a_wkday \ ((const CHAR_T *) (tp->tm_wday < 0 || tp->tm_wday > 6 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(ABDAY_1) + tp->tm_wday))) # define f_wkday \ ((const CHAR_T *) (tp->tm_wday < 0 || tp->tm_wday > 6 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(DAY_1) + tp->tm_wday))) # define a_month \ ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(ABMON_1) + tp->tm_mon))) # define f_month \ ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(MON_1) + tp->tm_mon))) # define a_altmonth \ ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(ABALTMON_1) + tp->tm_mon))) # define f_altmonth \ ((const CHAR_T *) (tp->tm_mon < 0 || tp->tm_mon > 11 \ ? "?" : _NL_CURRENT (LC_TIME, NLW(ALTMON_1) + tp->tm_mon))) # define ampm \ ((const CHAR_T *) _NL_CURRENT (LC_TIME, tp->tm_hour > 11 \ ? NLW(PM_STR) : NLW(AM_STR))) # define aw_len STRLEN (a_wkday) # define am_len STRLEN (a_month) # define aam_len STRLEN (a_altmonth) # define ap_len STRLEN (ampm) #endif #if HAVE_TZNAME char **tzname_vec = tzname; #endif const char *zone; size_t i = 0; STREAM_OR_CHAR_T *p = s; const CHAR_T *f; #if DO_MULTIBYTE && !defined COMPILE_WIDE const char *format_end = NULL; #endif zone = NULL; #if HAVE_STRUCT_TM_TM_ZONE /* The POSIX test suite assumes that setting the environment variable TZ to a new value before calling strftime() will influence the result (the %Z format) even if the information in TP is computed with a totally different time zone. This is bogus: though POSIX allows bad behavior like this, POSIX does not require it. Do the right thing instead. */ zone = (const char *) tp->tm_zone; #endif #if HAVE_TZNAME if (!tz) { if (! (zone && *zone)) zone = "GMT"; } else { # if !HAVE_STRUCT_TM_TM_ZONE /* Infer the zone name from *TZ instead of from TZNAME. */ tzname_vec = tz->tzname_copy; # endif } /* The tzset() call might have changed the value. */ if (!(zone && *zone) && tp->tm_isdst >= 0) { /* POSIX.1 requires that local time zone information be used as though strftime called tzset. */ # ifndef my_strftime if (!*tzset_called) { tzset (); *tzset_called = true; } # endif zone = tzname_vec[tp->tm_isdst != 0]; } #endif if (! zone) zone = ""; if (hour12 > 12) hour12 -= 12; else if (hour12 == 0) hour12 = 12; for (f = format; *f != '\0'; width = -1, f++) { int pad = 0; /* Padding for number ('_', '-', '+', '0', or 0). */ int modifier; /* Field modifier ('E', 'O', or 0). */ int digits = 0; /* Max digits for numeric format. */ int number_value; /* Numeric value to be printed. */ unsigned int u_number_value; /* (unsigned int) number_value. */ bool negative_number; /* The number is negative. */ bool always_output_a_sign; /* +/- should always be output. */ int tz_colon_mask; /* Bitmask of where ':' should appear. */ const CHAR_T *subfmt; CHAR_T *bufp; CHAR_T buf[1 + 2 /* for the two colons in a %::z or %:::z time zone */ + (sizeof (int) < sizeof (time_t) ? INT_STRLEN_BOUND (time_t) : INT_STRLEN_BOUND (int))]; bool to_lowcase = false; bool to_uppcase = upcase; size_t colons; bool change_case = false; int format_char; int subwidth; #if DO_MULTIBYTE && !defined COMPILE_WIDE switch (*f) { case L_('%'): break; case L_('\b'): case L_('\t'): case L_('\n'): case L_('\v'): case L_('\f'): case L_('\r'): case L_(' '): case L_('!'): case L_('"'): case L_('#'): case L_('&'): case L_('\''): case L_('('): case L_(')'): case L_('*'): case L_('+'): case L_(','): case L_('-'): case L_('.'): case L_('/'): case L_('0'): case L_('1'): case L_('2'): case L_('3'): case L_('4'): case L_('5'): case L_('6'): case L_('7'): case L_('8'): case L_('9'): case L_(':'): case L_(';'): case L_('<'): case L_('='): case L_('>'): case L_('?'): case L_('A'): case L_('B'): case L_('C'): case L_('D'): case L_('E'): case L_('F'): case L_('G'): case L_('H'): case L_('I'): case L_('J'): case L_('K'): case L_('L'): case L_('M'): case L_('N'): case L_('O'): case L_('P'): case L_('Q'): case L_('R'): case L_('S'): case L_('T'): case L_('U'): case L_('V'): case L_('W'): case L_('X'): case L_('Y'): case L_('Z'): case L_('['): case L_('\\'): case L_(']'): case L_('^'): case L_('_'): case L_('a'): case L_('b'): case L_('c'): case L_('d'): case L_('e'): case L_('f'): case L_('g'): case L_('h'): case L_('i'): case L_('j'): case L_('k'): case L_('l'): case L_('m'): case L_('n'): case L_('o'): case L_('p'): case L_('q'): case L_('r'): case L_('s'): case L_('t'): case L_('u'): case L_('v'): case L_('w'): case L_('x'): case L_('y'): case L_('z'): case L_('{'): case L_('|'): case L_('}'): case L_('~'): /* The C Standard requires these 98 characters (plus '%') to be in the basic execution character set. None of these characters can start a multibyte sequence, so they need not be analyzed further. */ add1 (*f); continue; default: /* Copy this multibyte sequence until we reach its end, find an error, or come back to the initial shift state. */ { mbstate_t mbstate = mbstate_zero; size_t len = 0; size_t fsize; if (! format_end) format_end = f + strlen (f) + 1; fsize = format_end - f; do { size_t bytes = mbrlen (f + len, fsize - len, &mbstate); if (bytes == 0) break; if (bytes == (size_t) -2) { len += strlen (f + len); break; } if (bytes == (size_t) -1) { len++; break; } len += bytes; } while (! mbsinit (&mbstate)); cpy (len, f); f += len - 1; continue; } } #else /* ! DO_MULTIBYTE */ /* Either multibyte encodings are not supported, they are safe for formats, so any non-'%' byte can be copied through, or this is the wide character version. */ if (*f != L_('%')) { add1 (*f); continue; } #endif /* ! DO_MULTIBYTE */ char const *percent = f; /* Check for flags that can modify a format. */ while (1) { switch (*++f) { /* This influences the number formats. */ case L_('_'): case L_('-'): case L_('+'): case L_('0'): pad = *f; continue; /* This changes textual output. */ case L_('^'): to_uppcase = true; continue; case L_('#'): change_case = true; continue; default: break; } break; } if (ISDIGIT (*f)) { width = 0; do { if (INT_MULTIPLY_WRAPV (width, 10, &width) || INT_ADD_WRAPV (width, *f - L_('0'), &width)) width = INT_MAX; ++f; } while (ISDIGIT (*f)); } /* Check for modifiers. */ switch (*f) { case L_('E'): case L_('O'): modifier = *f++; break; default: modifier = 0; break; } /* Now do the specified format. */ format_char = *f; switch (format_char) { #define DO_NUMBER(d, v) \ do \ { \ digits = d; \ number_value = v; \ goto do_number; \ } \ while (0) #define DO_SIGNED_NUMBER(d, negative, v) \ DO_MAYBE_SIGNED_NUMBER (d, negative, v, do_signed_number) #define DO_YEARISH(d, negative, v) \ DO_MAYBE_SIGNED_NUMBER (d, negative, v, do_yearish) #define DO_MAYBE_SIGNED_NUMBER(d, negative, v, label) \ do \ { \ digits = d; \ negative_number = negative; \ u_number_value = v; \ goto label; \ } \ while (0) /* The mask is not what you might think. When the ordinal i'th bit is set, insert a colon before the i'th digit of the time zone representation. */ #define DO_TZ_OFFSET(d, mask, v) \ do \ { \ digits = d; \ tz_colon_mask = mask; \ u_number_value = v; \ goto do_tz_offset; \ } \ while (0) #define DO_NUMBER_SPACEPAD(d, v) \ do \ { \ digits = d; \ number_value = v; \ goto do_number_spacepad; \ } \ while (0) case L_('%'): if (f - 1 != percent) goto bad_percent; add1 (*f); break; case L_('a'): if (modifier != 0) goto bad_format; if (change_case) { to_uppcase = true; to_lowcase = false; } #ifdef _NL_CURRENT cpy (aw_len, a_wkday); break; #else goto underlying_strftime; #endif case 'A': if (modifier != 0) goto bad_format; if (change_case) { to_uppcase = true; to_lowcase = false; } #ifdef _NL_CURRENT cpy (STRLEN (f_wkday), f_wkday); break; #else goto underlying_strftime; #endif case L_('b'): case L_('h'): if (change_case) { to_uppcase = true; to_lowcase = false; } if (modifier == L_('E')) goto bad_format; #ifdef _NL_CURRENT if (modifier == L_('O')) cpy (aam_len, a_altmonth); else cpy (am_len, a_month); break; #else goto underlying_strftime; #endif case L_('B'): if (modifier == L_('E')) goto bad_format; if (change_case) { to_uppcase = true; to_lowcase = false; } #ifdef _NL_CURRENT if (modifier == L_('O')) cpy (STRLEN (f_altmonth), f_altmonth); else cpy (STRLEN (f_month), f_month); break; #else goto underlying_strftime; #endif case L_('c'): if (modifier == L_('O')) goto bad_format; #ifdef _NL_CURRENT if (! (modifier == L_('E') && (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_D_T_FMT))) != '\0'))) subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_T_FMT)); #else goto underlying_strftime; #endif subformat: subwidth = -1; subformat_width: { size_t len = __strftime_internal (NULL, STRFTIME_ARG ((size_t) -1) subfmt, tp, to_uppcase, pad, subwidth, tzset_called extra_args LOCALE_ARG); add (len, __strftime_internal (p, STRFTIME_ARG (maxsize - i) subfmt, tp, to_uppcase, pad, subwidth, tzset_called extra_args LOCALE_ARG)); } break; #if !(defined _NL_CURRENT && HAVE_STRUCT_ERA_ENTRY) underlying_strftime: { /* The relevant information is available only via the underlying strftime implementation, so use that. */ char ufmt[5]; char *u = ufmt; char ubuf[1024]; /* enough for any single format in practice */ size_t len; /* Make sure we're calling the actual underlying strftime. In some cases, config.h contains something like "#define strftime rpl_strftime". */ # ifdef strftime # undef strftime size_t strftime (); # endif /* The space helps distinguish strftime failure from empty output. */ *u++ = ' '; *u++ = '%'; if (modifier != 0) *u++ = modifier; *u++ = format_char; *u = '\0'; len = strftime (ubuf, sizeof ubuf, ufmt, tp); if (len != 0) cpy (len - 1, ubuf + 1); } break; #endif case L_('C'): if (modifier == L_('E')) { #if HAVE_STRUCT_ERA_ENTRY struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); if (era) { # ifdef COMPILE_WIDE size_t len = __wcslen (era->era_wname); cpy (len, era->era_wname); # else size_t len = strlen (era->era_name); cpy (len, era->era_name); # endif break; } #else goto underlying_strftime; #endif } { bool negative_year = tp->tm_year < - TM_YEAR_BASE; bool zero_thru_1899 = !negative_year & (tp->tm_year < 0); int century = ((tp->tm_year - 99 * zero_thru_1899) / 100 + TM_YEAR_BASE / 100); DO_YEARISH (2, negative_year, century); } case L_('x'): if (modifier == L_('O')) goto bad_format; #ifdef _NL_CURRENT if (! (modifier == L_('E') && (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_D_FMT))) != L_('\0')))) subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(D_FMT)); goto subformat; #else goto underlying_strftime; #endif case L_('D'): if (modifier != 0) goto bad_format; subfmt = L_("%m/%d/%y"); goto subformat; case L_('d'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, tp->tm_mday); case L_('e'): if (modifier == L_('E')) goto bad_format; DO_NUMBER_SPACEPAD (2, tp->tm_mday); /* All numeric formats set DIGITS and NUMBER_VALUE (or U_NUMBER_VALUE) and then jump to one of these labels. */ do_tz_offset: always_output_a_sign = true; goto do_number_body; do_yearish: if (pad == 0) pad = yr_spec; always_output_a_sign = (pad == L_('+') && ((digits == 2 ? 99 : 9999) < u_number_value || digits < width)); goto do_maybe_signed_number; do_number_spacepad: if (pad == 0) pad = L_('_'); do_number: /* Format NUMBER_VALUE according to the MODIFIER flag. */ negative_number = number_value < 0; u_number_value = number_value; do_signed_number: always_output_a_sign = false; do_maybe_signed_number: tz_colon_mask = 0; do_number_body: /* Format U_NUMBER_VALUE according to the MODIFIER flag. NEGATIVE_NUMBER is nonzero if the original number was negative; in this case it was converted directly to unsigned int (i.e., modulo (UINT_MAX + 1)) without negating it. */ if (modifier == L_('O') && !negative_number) { #ifdef _NL_CURRENT /* Get the locale specific alternate representation of the number. If none exist NULL is returned. */ const CHAR_T *cp = nl_get_alt_digit (u_number_value HELPER_LOCALE_ARG); if (cp != NULL) { size_t digitlen = STRLEN (cp); if (digitlen != 0) { cpy (digitlen, cp); break; } } #else goto underlying_strftime; #endif } bufp = buf + sizeof (buf) / sizeof (buf[0]); if (negative_number) u_number_value = - u_number_value; do { if (tz_colon_mask & 1) *--bufp = ':'; tz_colon_mask >>= 1; *--bufp = u_number_value % 10 + L_('0'); u_number_value /= 10; } while (u_number_value != 0 || tz_colon_mask != 0); do_number_sign_and_padding: if (pad == 0) pad = L_('0'); if (width < 0) width = digits; { CHAR_T sign_char = (negative_number ? L_('-') : always_output_a_sign ? L_('+') : 0); int numlen = buf + sizeof buf / sizeof buf[0] - bufp; int shortage = width - !!sign_char - numlen; int padding = pad == L_('-') || shortage <= 0 ? 0 : shortage; if (sign_char) { if (pad == L_('_')) { if (p) memset_space (p, padding); i += padding; width -= padding; } width_add1 (0, sign_char); width--; } cpy (numlen, bufp); } break; case L_('F'): if (modifier != 0) goto bad_format; if (pad == 0 && width < 0) { pad = L_('+'); subwidth = 4; } else { subwidth = width - 6; if (subwidth < 0) subwidth = 0; } subfmt = L_("%Y-%m-%d"); goto subformat_width; case L_('H'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, tp->tm_hour); case L_('I'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, hour12); case L_('k'): /* GNU extension. */ if (modifier == L_('E')) goto bad_format; DO_NUMBER_SPACEPAD (2, tp->tm_hour); case L_('l'): /* GNU extension. */ if (modifier == L_('E')) goto bad_format; DO_NUMBER_SPACEPAD (2, hour12); case L_('j'): if (modifier == L_('E')) goto bad_format; DO_SIGNED_NUMBER (3, tp->tm_yday < -1, tp->tm_yday + 1U); case L_('M'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, tp->tm_min); case L_('m'): if (modifier == L_('E')) goto bad_format; DO_SIGNED_NUMBER (2, tp->tm_mon < -1, tp->tm_mon + 1U); #ifndef _LIBC case L_('N'): /* GNU extension. */ if (modifier == L_('E')) goto bad_format; { int n = ns, ns_digits = 9; if (width <= 0) width = ns_digits; int ndigs = ns_digits; while (width < ndigs || (1 < ndigs && n % 10 == 0)) ndigs--, n /= 10; for (int j = ndigs; 0 < j; j--) buf[j - 1] = n % 10 + L_('0'), n /= 10; if (!pad) pad = L_('0'); width_cpy (0, ndigs, buf); width_add (width - ndigs, 0, (void) 0); } break; #endif case L_('n'): add1 (L_('\n')); break; case L_('P'): to_lowcase = true; #ifndef _NL_CURRENT format_char = L_('p'); #endif FALLTHROUGH; case L_('p'): if (change_case) { to_uppcase = false; to_lowcase = true; } #ifdef _NL_CURRENT cpy (ap_len, ampm); break; #else goto underlying_strftime; #endif case L_('q'): /* GNU extension. */ DO_SIGNED_NUMBER (1, false, ((tp->tm_mon * 11) >> 5) + 1); case L_('R'): subfmt = L_("%H:%M"); goto subformat; case L_('r'): #ifdef _NL_CURRENT if (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(T_FMT_AMPM))) == L_('\0')) subfmt = L_("%I:%M:%S %p"); goto subformat; #else goto underlying_strftime; #endif case L_('S'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, tp->tm_sec); case L_('s'): /* GNU extension. */ { struct tm ltm; time_t t; ltm = *tp; ltm.tm_yday = -1; t = mktime_z (tz, <m); if (ltm.tm_yday < 0) { errno = EOVERFLOW; return 0; } /* Generate string value for T using time_t arithmetic; this works even if sizeof (long) < sizeof (time_t). */ bufp = buf + sizeof (buf) / sizeof (buf[0]); negative_number = t < 0; do { int d = t % 10; t /= 10; *--bufp = (negative_number ? -d : d) + L_('0'); } while (t != 0); digits = 1; always_output_a_sign = false; goto do_number_sign_and_padding; } case L_('X'): if (modifier == L_('O')) goto bad_format; #ifdef _NL_CURRENT if (! (modifier == L_('E') && (*(subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(ERA_T_FMT))) != L_('\0')))) subfmt = (const CHAR_T *) _NL_CURRENT (LC_TIME, NLW(T_FMT)); goto subformat; #else goto underlying_strftime; #endif case L_('T'): subfmt = L_("%H:%M:%S"); goto subformat; case L_('t'): add1 (L_('\t')); break; case L_('u'): DO_NUMBER (1, (tp->tm_wday - 1 + 7) % 7 + 1); case L_('U'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, (tp->tm_yday - tp->tm_wday + 7) / 7); case L_('V'): case L_('g'): case L_('G'): if (modifier == L_('E')) goto bad_format; { /* YEAR is a leap year if and only if (tp->tm_year + TM_YEAR_BASE) is a leap year, except that YEAR and YEAR - 1 both work correctly even when (tp->tm_year + TM_YEAR_BASE) would overflow. */ int year = (tp->tm_year + (tp->tm_year < 0 ? TM_YEAR_BASE % 400 : TM_YEAR_BASE % 400 - 400)); int year_adjust = 0; int days = iso_week_days (tp->tm_yday, tp->tm_wday); if (days < 0) { /* This ISO week belongs to the previous year. */ year_adjust = -1; days = iso_week_days (tp->tm_yday + (365 + __isleap (year - 1)), tp->tm_wday); } else { int d = iso_week_days (tp->tm_yday - (365 + __isleap (year)), tp->tm_wday); if (0 <= d) { /* This ISO week belongs to the next year. */ year_adjust = 1; days = d; } } switch (*f) { case L_('g'): { int yy = (tp->tm_year % 100 + year_adjust) % 100; DO_YEARISH (2, false, (0 <= yy ? yy : tp->tm_year < -TM_YEAR_BASE - year_adjust ? -yy : yy + 100)); } case L_('G'): DO_YEARISH (4, tp->tm_year < -TM_YEAR_BASE - year_adjust, (tp->tm_year + (unsigned int) TM_YEAR_BASE + year_adjust)); default: DO_NUMBER (2, days / 7 + 1); } } case L_('W'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (2, (tp->tm_yday - (tp->tm_wday - 1 + 7) % 7 + 7) / 7); case L_('w'): if (modifier == L_('E')) goto bad_format; DO_NUMBER (1, tp->tm_wday); case L_('Y'): if (modifier == L_('E')) { #if HAVE_STRUCT_ERA_ENTRY struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); if (era) { # ifdef COMPILE_WIDE subfmt = era->era_wformat; # else subfmt = era->era_format; # endif if (pad == 0) pad = yr_spec; goto subformat; } #else goto underlying_strftime; #endif } if (modifier == L_('O')) goto bad_format; DO_YEARISH (4, tp->tm_year < -TM_YEAR_BASE, tp->tm_year + (unsigned int) TM_YEAR_BASE); case L_('y'): if (modifier == L_('E')) { #if HAVE_STRUCT_ERA_ENTRY struct era_entry *era = _nl_get_era_entry (tp HELPER_LOCALE_ARG); if (era) { int delta = tp->tm_year - era->start_date[0]; if (pad == 0) pad = yr_spec; DO_NUMBER (2, (era->offset + delta * era->absolute_direction)); } #else goto underlying_strftime; #endif } { int yy = tp->tm_year % 100; if (yy < 0) yy = tp->tm_year < - TM_YEAR_BASE ? -yy : yy + 100; DO_YEARISH (2, false, yy); } case L_('Z'): if (change_case) { to_uppcase = false; to_lowcase = true; } #ifdef COMPILE_WIDE { /* The zone string is always given in multibyte form. We have to transform it first. */ wchar_t *wczone; size_t len; widen (zone, wczone, len); cpy (len, wczone); } #else cpy (strlen (zone), zone); #endif break; case L_(':'): /* :, ::, and ::: are valid only just before 'z'. :::: etc. are rejected later. */ for (colons = 1; f[colons] == L_(':'); colons++) continue; if (f[colons] != L_('z')) goto bad_format; f += colons; goto do_z_conversion; case L_('z'): colons = 0; do_z_conversion: if (tp->tm_isdst < 0) break; { int diff; int hour_diff; int min_diff; int sec_diff; #if HAVE_TM_GMTOFF diff = tp->tm_gmtoff; #else if (!tz) diff = 0; else { struct tm gtm; struct tm ltm; time_t lt; /* POSIX.1 requires that local time zone information be used as though strftime called tzset. */ # ifndef my_strftime if (!*tzset_called) { tzset (); *tzset_called = true; } # endif ltm = *tp; ltm.tm_wday = -1; lt = mktime_z (tz, <m); if (ltm.tm_wday < 0 || ! localtime_rz (0, <, >m)) break; diff = tm_diff (<m, >m); } #endif negative_number = diff < 0 || (diff == 0 && *zone == '-'); hour_diff = diff / 60 / 60; min_diff = diff / 60 % 60; sec_diff = diff % 60; switch (colons) { case 0: /* +hhmm */ DO_TZ_OFFSET (5, 0, hour_diff * 100 + min_diff); case 1: tz_hh_mm: /* +hh:mm */ DO_TZ_OFFSET (6, 04, hour_diff * 100 + min_diff); case 2: tz_hh_mm_ss: /* +hh:mm:ss */ DO_TZ_OFFSET (9, 024, hour_diff * 10000 + min_diff * 100 + sec_diff); case 3: /* +hh if possible, else +hh:mm, else +hh:mm:ss */ if (sec_diff != 0) goto tz_hh_mm_ss; if (min_diff != 0) goto tz_hh_mm; DO_TZ_OFFSET (3, 0, hour_diff); default: goto bad_format; } } case L_('\0'): /* GNU extension: % at end of format. */ bad_percent: --f; FALLTHROUGH; default: /* Unknown format; output the format, including the '%', since this is most likely the right thing to do if a multibyte string has been misparsed. */ bad_format: cpy (f - percent + 1, percent); break; } } #if ! FPRINTFTIME if (p && maxsize != 0) *p = L_('\0'); #endif errno = saved_errno; return i; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/readlink.c�������������������������������������������������������������������������0000644�0000000�0000000�00000006223�14226564450�012622� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Read the contents of a symbolic link. Copyright (C) 2003-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <string.h> #include <sys/stat.h> #if !HAVE_READLINK /* readlink() substitute for systems that don't have a readlink() function, such as DJGPP 2.03 and mingw32. */ ssize_t readlink (char const *file, _GL_UNUSED char *buf, _GL_UNUSED size_t bufsize) { struct stat statbuf; /* In general we should use lstat() here, not stat(). But on platforms without symbolic links, lstat() - if it exists - would be equivalent to stat(), therefore we can use stat(). This saves us a configure check. */ if (stat (file, &statbuf) >= 0) errno = EINVAL; return -1; } #else /* HAVE_READLINK */ # undef readlink /* readlink() wrapper that uses correct types, for systems like cygwin 1.5.x where readlink returns int, and which rejects trailing slash, for Solaris 9. */ ssize_t rpl_readlink (char const *file, char *buf, size_t bufsize) { # if READLINK_TRAILING_SLASH_BUG size_t file_len = strlen (file); if (file_len && file[file_len - 1] == '/') { /* Even if FILE without the slash is a symlink to a directory, both lstat() and stat() must resolve the trailing slash to the directory rather than the symlink. We can therefore safely use stat() to distinguish between EINVAL and ENOTDIR/ENOENT, avoiding extra overhead of rpl_lstat(). */ struct stat st; if (stat (file, &st) == 0 || errno == EOVERFLOW) errno = EINVAL; return -1; } # endif /* READLINK_TRAILING_SLASH_BUG */ ssize_t r = readlink (file, buf, bufsize); # if READLINK_TRUNCATE_BUG if (r < 0 && errno == ERANGE) { /* Try again with a bigger buffer. This is just for test cases; real code invariably discards short reads. */ char stackbuf[4032]; r = readlink (file, stackbuf, sizeof stackbuf); if (r < 0) { if (errno == ERANGE) { /* Clear the buffer, which is good enough for real code. Thankfully, no test cases try short reads of enormous symlinks and what would be the point anyway? */ r = bufsize; memset (buf, 0, r); } } else { if (bufsize < r) r = bufsize; memcpy (buf, stackbuf, r); } } # endif return r; } #endif /* HAVE_READLINK */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/vasnprintf.h�����������������������������������������������������������������������0000644�0000000�0000000�00000005031�14226564451�013225� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* vsprintf with automatic memory allocation. Copyright (C) 2002-2004, 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _VASNPRINTF_H #define _VASNPRINTF_H /* Get va_list. */ #include <stdarg.h> /* Get size_t. */ #include <stddef.h> /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD. */ #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* Write formatted output to a string dynamically allocated with malloc(). You can pass a preallocated buffer for the result in RESULTBUF and its size in *LENGTHP; otherwise you pass RESULTBUF = NULL. If successful, return the address of the string (this may be = RESULTBUF if no dynamic memory allocation was necessary) and set *LENGTHP to the number of resulting bytes, excluding the trailing NUL. Upon error, set errno and return NULL. When dynamic memory allocation occurs, the preallocated buffer is left alone (with possibly modified contents). This makes it possible to use a statically allocated or stack-allocated buffer, like this: char buf[100]; size_t len = sizeof (buf); char *output = vasnprintf (buf, &len, format, args); if (output == NULL) ... error handling ...; else { ... use the output string ...; if (output != buf) free (output); } */ #if REPLACE_VASNPRINTF # define asnprintf rpl_asnprintf # define vasnprintf rpl_vasnprintf #endif extern char * asnprintf (char *restrict resultbuf, size_t *lengthp, const char *format, ...) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)); extern char * vasnprintf (char *restrict resultbuf, size_t *lengthp, const char *format, va_list args) _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 0)); #ifdef __cplusplus } #endif #endif /* _VASNPRINTF_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/streq.h����������������������������������������������������������������������������0000644�0000000�0000000�00000007703�14226564451�012201� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Optimized string comparison. Copyright (C) 2001-2002, 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ #ifndef _GL_STREQ_H #define _GL_STREQ_H #include <string.h> /* STREQ_OPT allows to optimize string comparison with a small literal string. STREQ_OPT (s, "EUC-KR", 'E', 'U', 'C', '-', 'K', 'R', 0, 0, 0) is semantically equivalent to strcmp (s, "EUC-KR") == 0 just faster. */ /* Help GCC to generate good code for string comparisons with immediate strings. */ #if (defined __GNUC__ || defined __clang__) && defined __OPTIMIZE__ static inline int streq9 (const char *s1, const char *s2) { return strcmp (s1 + 9, s2 + 9) == 0; } static inline int streq8 (const char *s1, const char *s2, char s28) { if (s1[8] == s28) { if (s28 == 0) return 1; else return streq9 (s1, s2); } else return 0; } static inline int streq7 (const char *s1, const char *s2, char s27, char s28) { if (s1[7] == s27) { if (s27 == 0) return 1; else return streq8 (s1, s2, s28); } else return 0; } static inline int streq6 (const char *s1, const char *s2, char s26, char s27, char s28) { if (s1[6] == s26) { if (s26 == 0) return 1; else return streq7 (s1, s2, s27, s28); } else return 0; } static inline int streq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) { if (s1[5] == s25) { if (s25 == 0) return 1; else return streq6 (s1, s2, s26, s27, s28); } else return 0; } static inline int streq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) { if (s1[4] == s24) { if (s24 == 0) return 1; else return streq5 (s1, s2, s25, s26, s27, s28); } else return 0; } static inline int streq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[3] == s23) { if (s23 == 0) return 1; else return streq4 (s1, s2, s24, s25, s26, s27, s28); } else return 0; } static inline int streq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[2] == s22) { if (s22 == 0) return 1; else return streq3 (s1, s2, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int streq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[1] == s21) { if (s21 == 0) return 1; else return streq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int streq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (s1[0] == s20) { if (s20 == 0) return 1; else return streq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); } else return 0; } #define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ streq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) #else #define STREQ_OPT(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ (strcmp (s1, s2) == 0) #endif #endif /* _GL_STREQ_H */ �������������������������������������������������������������recutils-1.9/lib/printf-parse.h���������������������������������������������������������������������0000644�0000000�0000000�00000012225�14226564450�013447� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Parse printf format string. Copyright (C) 1999, 2002-2003, 2005, 2007, 2010-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _PRINTF_PARSE_H #define _PRINTF_PARSE_H /* This file can be parametrized with the following macros: ENABLE_UNISTDIO Set to 1 to enable the unistdio extensions. STATIC Set to 'static' to declare the function static. */ #if HAVE_FEATURES_H # include <features.h> /* for __GLIBC__, __UCLIBC__ */ #endif #include "printf-args.h" /* Flags */ #define FLAG_GROUP 1 /* ' flag */ #define FLAG_LEFT 2 /* - flag */ #define FLAG_SHOWSIGN 4 /* + flag */ #define FLAG_SPACE 8 /* space flag */ #define FLAG_ALT 16 /* # flag */ #define FLAG_ZERO 32 #if __GLIBC__ >= 2 && !defined __UCLIBC__ # define FLAG_LOCALIZED 64 /* I flag, uses localized digits */ #endif /* arg_index value indicating that no argument is consumed. */ #define ARG_NONE (~(size_t)0) /* xxx_directive: A parsed directive. xxx_directives: A parsed format string. */ /* Number of directly allocated directives (no malloc() needed). */ #define N_DIRECT_ALLOC_DIRECTIVES 7 /* A parsed directive. */ typedef struct { const char* dir_start; const char* dir_end; int flags; const char* width_start; const char* width_end; size_t width_arg_index; const char* precision_start; const char* precision_end; size_t precision_arg_index; char conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } char_directive; /* A parsed format string. */ typedef struct { size_t count; char_directive *dir; size_t max_width_length; size_t max_precision_length; char_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } char_directives; #if ENABLE_UNISTDIO /* A parsed directive. */ typedef struct { const uint8_t* dir_start; const uint8_t* dir_end; int flags; const uint8_t* width_start; const uint8_t* width_end; size_t width_arg_index; const uint8_t* precision_start; const uint8_t* precision_end; size_t precision_arg_index; uint8_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u8_directive; /* A parsed format string. */ typedef struct { size_t count; u8_directive *dir; size_t max_width_length; size_t max_precision_length; u8_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u8_directives; /* A parsed directive. */ typedef struct { const uint16_t* dir_start; const uint16_t* dir_end; int flags; const uint16_t* width_start; const uint16_t* width_end; size_t width_arg_index; const uint16_t* precision_start; const uint16_t* precision_end; size_t precision_arg_index; uint16_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u16_directive; /* A parsed format string. */ typedef struct { size_t count; u16_directive *dir; size_t max_width_length; size_t max_precision_length; u16_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u16_directives; /* A parsed directive. */ typedef struct { const uint32_t* dir_start; const uint32_t* dir_end; int flags; const uint32_t* width_start; const uint32_t* width_end; size_t width_arg_index; const uint32_t* precision_start; const uint32_t* precision_end; size_t precision_arg_index; uint32_t conversion; /* d i o u x X f F e E g G a A c s p n U % but not C S */ size_t arg_index; } u32_directive; /* A parsed format string. */ typedef struct { size_t count; u32_directive *dir; size_t max_width_length; size_t max_precision_length; u32_directive direct_alloc_dir[N_DIRECT_ALLOC_DIRECTIVES]; } u32_directives; #endif /* Parses the format string. Fills in the number N of directives, and fills in directives[0], ..., directives[N-1], and sets directives[N].dir_start to the end of the format string. Also fills in the arg_type fields of the arguments and the needed count of arguments. */ #if ENABLE_UNISTDIO extern int ulc_printf_parse (const char *format, char_directives *d, arguments *a); extern int u8_printf_parse (const uint8_t *format, u8_directives *d, arguments *a); extern int u16_printf_parse (const uint16_t *format, u16_directives *d, arguments *a); extern int u32_printf_parse (const uint32_t *format, u32_directives *d, arguments *a); #else # ifdef STATIC STATIC # else extern # endif int printf_parse (const char *format, char_directives *d, arguments *a); #endif #endif /* _PRINTF_PARSE_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/rmdir.c����������������������������������������������������������������������������0000644�0000000�0000000�00000003166�14226564450�012151� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Work around rmdir bugs. Copyright (C) 1988, 1990, 1999, 2003-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include <unistd.h> #include <errno.h> #include <string.h> #include "filename.h" #undef rmdir #if defined _WIN32 && !defined __CYGWIN__ # define rmdir _rmdir #endif /* Remove directory DIR. Return 0 if successful, -1 if not. */ int rpl_rmdir (char const *dir) { /* Work around cygwin 1.5.x bug where rmdir("dir/./") succeeds. */ size_t len = strlen (dir); int result; while (len && ISSLASH (dir[len - 1])) len--; if (len && dir[len - 1] == '.' && (1 == len || ISSLASH (dir[len - 2]))) { errno = EINVAL; return -1; } result = rmdir (dir); /* Work around mingw bug, where rmdir("file/") fails with EINVAL instead of ENOTDIR. We've already filtered out trailing ., the only reason allowed by POSIX for EINVAL. */ if (result == -1 && errno == EINVAL) errno = ENOTDIR; return result; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/hash-triple.h����������������������������������������������������������������������0000644�0000000�0000000�00000002744�14226564446�013267� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hash functions for file-related (name, device, inode) triples. Copyright (C) 2007-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering, 2007. */ #ifndef HASH_TRIPLE_H #define HASH_TRIPLE_H #include <sys/types.h> #include <sys/stat.h> #include <stdbool.h> /* Describe a just-created or just-renamed destination file. */ struct F_triple { char *name; ino_t st_ino; dev_t st_dev; }; /* Defined in module 'hash-triple-simple'. */ extern size_t triple_hash (void const *x, size_t table_size) _GL_ATTRIBUTE_PURE; extern bool triple_compare_ino_str (void const *x, void const *y) _GL_ATTRIBUTE_PURE; extern void triple_free (void *x); /* Defined in module 'hash-triple'. */ extern size_t triple_hash_no_name (void const *x, size_t table_size) _GL_ATTRIBUTE_PURE; extern bool triple_compare (void const *x, void const *y); #endif ����������������������������recutils-1.9/lib/hash-triple-simple.c���������������������������������������������������������������0000644�0000000�0000000�00000003167�14226564446�014551� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hash functions for file-related triples: name, device, inode. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> /* Specification. */ #include "hash-triple.h" #include <stdlib.h> #include <string.h> #include "hash-pjw.h" #include "same-inode.h" #define STREQ(a, b) (strcmp (a, b) == 0) /* Hash an F_triple, and *do* consider the file name. */ size_t triple_hash (void const *x, size_t table_size) { struct F_triple const *p = x; size_t tmp = hash_pjw (p->name, table_size); /* Ignoring the device number here should be fine. */ return (tmp ^ p->st_ino) % table_size; } /* Compare two F_triple structs. */ bool triple_compare_ino_str (void const *x, void const *y) { struct F_triple const *a = x; struct F_triple const *b = y; return (SAME_INODE (*a, *b) && STREQ (a->name, b->name)) ? true : false; } /* Free an F_triple. */ void triple_free (void *x) { struct F_triple *a = x; free (a->name); free (a); } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/sched.in.h�������������������������������������������������������������������������0000644�0000000�0000000�00000005204�14226564450�012527� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <sched.h>. Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_SCHED_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SCHED_H@ # if @HAVE_SYS_CDEFS_H@ # include <sys/cdefs.h> # endif # @INCLUDE_NEXT@ @NEXT_SCHED_H@ #endif #ifndef _@GUARD_PREFIX@_SCHED_H #define _@GUARD_PREFIX@_SCHED_H /* Get pid_t. This is needed on glibc 2.11 (see glibc bug <https://sourceware.org/bugzilla/show_bug.cgi?id=13198>) and Mac OS X 10.5. */ #include <sys/types.h> #ifdef __KLIBC__ /* On OS/2 kLIBC, struct sched_param is in spawn.h. */ # include <spawn.h> #endif #ifdef __VMS /* On OpenVMS, struct sched_param is in <pthread.h>. */ # include <pthread.h> #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #if !@HAVE_STRUCT_SCHED_PARAM@ # if !GNULIB_defined_struct_sched_param struct sched_param { int sched_priority; }; # define GNULIB_defined_struct_sched_param 1 # endif #endif #if !(defined SCHED_FIFO && defined SCHED_RR && defined SCHED_OTHER) # define SCHED_FIFO 1 # define SCHED_RR 2 # define SCHED_OTHER 0 #endif #if @GNULIB_SCHED_YIELD@ # if @REPLACE_SCHED_YIELD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sched_yield # define sched_yield rpl_sched_yield # endif _GL_FUNCDECL_RPL (sched_yield, int, (void)); _GL_CXXALIAS_RPL (sched_yield, int, (void)); # else # if !@HAVE_SCHED_YIELD@ _GL_FUNCDECL_SYS (sched_yield, int, (void)); # endif _GL_CXXALIAS_SYS (sched_yield, int, (void)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sched_yield); # endif #elif defined GNULIB_POSIXCHECK # undef sched_yield # if HAVE_RAW_DECL_SCHED_YIELD _GL_WARN_ON_USE (sched_yield, "sched_yield is not portable - " "use gnulib module sched_yield for portability"); # endif #endif #endif /* _@GUARD_PREFIX@_SCHED_H */ #endif /* _@GUARD_PREFIX@_SCHED_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getopt.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000004121�14226564450�012740� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declarations for getopt. Copyright (C) 1989-2022 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library, which supplies a different version of this file. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_GETOPT_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* The include_next requires a split double-inclusion guard. We must also inform the replacement unistd.h to not recursively use <getopt.h>; our definitions will be present soon enough. */ #if @HAVE_GETOPT_H@ # define _GL_SYSTEM_GETOPT # @INCLUDE_NEXT@ @NEXT_GETOPT_H@ # undef _GL_SYSTEM_GETOPT #endif #define _@GUARD_PREFIX@_GETOPT_H 1 /* Standalone applications should #define __GETOPT_PREFIX to an identifier that prefixes the external functions and variables defined in getopt-core.h and getopt-ext.h. When this happens, include the headers that might declare getopt so that they will not cause confusion if included after this file (if the system had <getopt.h>, we have already included it). */ #if defined __GETOPT_PREFIX # if !@HAVE_GETOPT_H@ # define __need_system_stdlib_h # include <stdlib.h> # undef __need_system_stdlib_h # include <stdio.h> # include <unistd.h> # endif #endif /* The definition of _GL_ARG_NONNULL is copied here. */ #include <getopt-cdefs.h> #include <getopt-pfx-core.h> #include <getopt-pfx-ext.h> #endif /* _@GUARD_PREFIX@_GETOPT_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/closedir.c�������������������������������������������������������������������������0000644�0000000�0000000�00000003017�14226564446�012640� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Stop reading the entries of a directory. Copyright (C) 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <dirent.h> #if REPLACE_FCHDIR # include <unistd.h> #endif #if HAVE_CLOSEDIR /* Override closedir(), to keep track of the open file descriptors. Needed because there is a function dirfd(). */ #else # include <stdlib.h> # include "dirent-private.h" #endif int closedir (DIR *dirp) { # if REPLACE_FCHDIR || REPLACE_DIRFD int fd = dirfd (dirp); # endif int retval; #if HAVE_CLOSEDIR # undef closedir retval = closedir (dirp); # ifdef __KLIBC__ if (!retval) _gl_unregister_dirp_fd (fd); # endif #else if (dirp->current != INVALID_HANDLE_VALUE) FindClose (dirp->current); free (dirp); retval = 0; #endif #if REPLACE_FCHDIR if (retval >= 0) _gl_unregister_fd (fd); #endif return retval; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/arg-nonnull.h����������������������������������������������������������������������0000644�0000000�0000000�00000002353�14226564447�013300� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A C macro for declaring that specific arguments must not be NULL. Copyright (C) 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* _GL_ARG_NONNULL((n,...,m)) tells the compiler and static analyzer tools that the values passed as arguments n, ..., m must be non-NULL pointers. n = 1 stands for the first argument, n = 2 for the second argument etc. */ #ifndef _GL_ARG_NONNULL # if __GNUC__ > 3 || (__GNUC__ == 3 && __GNUC_MINOR__ >= 3) || defined __clang__ # define _GL_ARG_NONNULL(params) __attribute__ ((__nonnull__ params)) # else # define _GL_ARG_NONNULL(params) # endif #endif �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/filenamecat.h����������������������������������������������������������������������0000644�0000000�0000000�00000002317�14226564446�013313� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Concatenate two arbitrary file names. Copyright (C) 1996-1997, 2003, 2005, 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <stdlib.h> #if GNULIB_FILENAMECAT char *file_name_concat (char const *dir, char const *base, char **base_in_result) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; #endif char *mfile_name_concat (char const *dir, char const *base, char **base_in_result) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/float.c����������������������������������������������������������������������������0000644�0000000�0000000�00000002526�14226564447�012146� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary definitions for <float.h>. Copyright (C) 2011-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <float.h> #if (defined _ARCH_PPC || defined _POWER) && (defined _AIX || defined __linux__) && (LDBL_MANT_DIG == 106) && defined __GNUC__ const union gl_long_double_union gl_LDBL_MAX = { { DBL_MAX, DBL_MAX / (double)134217728UL / (double)134217728UL } }; #elif defined __i386__ const union gl_long_double_union gl_LDBL_MAX = { { 0xFFFFFFFF, 0xFFFFFFFF, 32766 } }; #else /* This declaration is solely to ensure that after preprocessing this file is never empty. */ typedef int dummy; #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/flexmember.h�����������������������������������������������������������������������0000644�0000000�0000000�00000005065�14226564447�013175� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Sizes of structs with flexible array members. Copyright 2016-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert. */ #include <stddef.h> /* Nonzero multiple of alignment of TYPE, suitable for FLEXSIZEOF below. On older platforms without _Alignof, use a pessimistic bound that is safe in practice even if FLEXIBLE_ARRAY_MEMBER is 1. On newer platforms, use _Alignof to get a tighter bound. */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 # define FLEXALIGNOF(type) (sizeof (type) & ~ (sizeof (type) - 1)) #else # define FLEXALIGNOF(type) _Alignof (type) #endif /* Yield a properly aligned upper bound on the size of a struct of type TYPE with a flexible array member named MEMBER that is followed by N bytes of other data. The result is suitable as an argument to malloc. For example: struct s { int n; char d[FLEXIBLE_ARRAY_MEMBER]; }; struct s *p = malloc (FLEXSIZEOF (struct s, d, n * sizeof (char))); FLEXSIZEOF (TYPE, MEMBER, N) is not simply (sizeof (TYPE) + N), since FLEXIBLE_ARRAY_MEMBER may be 1 on pre-C11 platforms. Nor is it simply (offsetof (TYPE, MEMBER) + N), as that might yield a size that causes malloc to yield a pointer that is not properly aligned for TYPE; for example, if sizeof (int) == alignof (int) == 4, malloc (offsetof (struct s, d) + 3 * sizeof (char)) is equivalent to malloc (7) and might yield a pointer that is not a multiple of 4 (which means the pointer is not properly aligned for struct s), whereas malloc (FLEXSIZEOF (struct s, d, 3 * sizeof (char))) is equivalent to malloc (8) and must yield a pointer that is a multiple of 4. Yield a value less than N if and only if arithmetic overflow occurs. */ #define FLEXSIZEOF(type, member, n) \ ((offsetof (type, member) + FLEXALIGNOF (type) - 1 + (n)) \ & ~ (FLEXALIGNOF (type) - 1)) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/windows-recmutex.c�����������������������������������������������������������������0000644�0000000�0000000�00000006542�14226564451�014362� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Plain recursive mutexes (native Windows implementation). Copyright (C) 2005-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2005. Based on GCC's gthr-win32.h. */ #include <config.h> /* Specification. */ #include "windows-recmutex.h" #include <errno.h> void glwthread_recmutex_init (glwthread_recmutex_t *mutex) { mutex->owner = 0; mutex->depth = 0; InitializeCriticalSection (&mutex->lock); mutex->guard.done = 1; } int glwthread_recmutex_lock (glwthread_recmutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_recmutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Yield the CPU while waiting for another thread to finish initializing this mutex. */ while (!mutex->guard.done) Sleep (0); } } { DWORD self = GetCurrentThreadId (); if (mutex->owner != self) { EnterCriticalSection (&mutex->lock); mutex->owner = self; } if (++(mutex->depth) == 0) /* wraparound? */ { mutex->depth--; return EAGAIN; } } return 0; } int glwthread_recmutex_trylock (glwthread_recmutex_t *mutex) { if (!mutex->guard.done) { if (InterlockedIncrement (&mutex->guard.started) == 0) /* This thread is the first one to need this mutex. Initialize it. */ glwthread_recmutex_init (mutex); else { /* Don't let mutex->guard.started grow and wrap around. */ InterlockedDecrement (&mutex->guard.started); /* Let another thread finish initializing this mutex, and let it also lock this mutex. */ return EBUSY; } } { DWORD self = GetCurrentThreadId (); if (mutex->owner != self) { if (!TryEnterCriticalSection (&mutex->lock)) return EBUSY; mutex->owner = self; } if (++(mutex->depth) == 0) /* wraparound? */ { mutex->depth--; return EAGAIN; } } return 0; } int glwthread_recmutex_unlock (glwthread_recmutex_t *mutex) { if (mutex->owner != GetCurrentThreadId ()) return EPERM; if (mutex->depth == 0) return EINVAL; if (--(mutex->depth) == 0) { mutex->owner = 0; LeaveCriticalSection (&mutex->lock); } return 0; } int glwthread_recmutex_destroy (glwthread_recmutex_t *mutex) { if (mutex->owner != 0) return EBUSY; DeleteCriticalSection (&mutex->lock); mutex->guard.done = 0; return 0; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/mbtowc-lock.h����������������������������������������������������������������������0000644�0000000�0000000�00000006304�14226564450�013257� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Use the internal lock used by mbrtowc and mbrtoc32. Copyright (C) 2019-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019-2020. */ /* Use a lock, so that no two threads can invoke mbtowc at the same time. */ static inline int mbtowc_unlocked (wchar_t *pwc, const char *p, size_t m) { /* Put the hidden internal state of mbtowc into its initial state. This is needed at least with glibc, uClibc, and MSVC CRT. See <https://sourceware.org/bugzilla/show_bug.cgi?id=9674>. */ mbtowc (NULL, NULL, 0); return mbtowc (pwc, p, m); } /* Prohibit renaming this symbol. */ #undef gl_get_mbtowc_lock #if GNULIB_MBRTOWC_SINGLE_THREAD /* All uses of this function are in a single thread. No locking needed. */ static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { return mbtowc_unlocked (pwc, p, m); } #elif defined _WIN32 && !defined __CYGWIN__ extern __declspec(dllimport) CRITICAL_SECTION *gl_get_mbtowc_lock (void); static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { CRITICAL_SECTION *lock = gl_get_mbtowc_lock (); int ret; EnterCriticalSection (lock); ret = mbtowc_unlocked (pwc, p, m); LeaveCriticalSection (lock); return ret; } #elif HAVE_PTHREAD_API /* AIX, IRIX, Cygwin */ extern # if defined _WIN32 || defined __CYGWIN__ __declspec(dllimport) # endif pthread_mutex_t *gl_get_mbtowc_lock (void); # if HAVE_WEAK_SYMBOLS /* IRIX */ /* Avoid the need to link with '-lpthread'. */ # pragma weak pthread_mutex_lock # pragma weak pthread_mutex_unlock /* Determine whether libpthread is in use. */ # pragma weak pthread_mutexattr_gettype /* See the comments in lock.h. */ # define pthread_in_use() \ (pthread_mutexattr_gettype != NULL || c11_threads_in_use ()) # else # define pthread_in_use() 1 # endif static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { if (pthread_in_use()) { pthread_mutex_t *lock = gl_get_mbtowc_lock (); int ret; if (pthread_mutex_lock (lock)) abort (); ret = mbtowc_unlocked (pwc, p, m); if (pthread_mutex_unlock (lock)) abort (); return ret; } else return mbtowc_unlocked (pwc, p, m); } #elif HAVE_THREADS_H extern mtx_t *gl_get_mbtowc_lock (void); static int mbtowc_with_lock (wchar_t *pwc, const char *p, size_t m) { mtx_t *lock = gl_get_mbtowc_lock (); int ret; if (mtx_lock (lock) != thrd_success) abort (); ret = mbtowc_unlocked (pwc, p, m); if (mtx_unlock (lock) != thrd_success) abort (); return ret; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/c-strcaseeq.h����������������������������������������������������������������������0000644�0000000�0000000�00000010526�14226564447�013257� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Optimized case-insensitive string comparison in C locale. Copyright (C) 2001-2002, 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>. */ #include "c-strcase.h" #include "c-ctype.h" /* STRCASEEQ allows to optimize string comparison with a small literal string. STRCASEEQ (s, "UTF-8", 'U','T','F','-','8',0,0,0,0) is semantically equivalent to c_strcasecmp (s, "UTF-8") == 0 just faster. */ /* Help GCC to generate good code for string comparisons with immediate strings. */ #if (defined __GNUC__ || defined __clang__) && defined __OPTIMIZE__ /* Case insensitive comparison of ASCII characters. */ # if C_CTYPE_ASCII # define CASEEQ(other,upper) \ (c_isupper (upper) ? ((other) & ~0x20) == (upper) : (other) == (upper)) # else # define CASEEQ(other,upper) \ (c_toupper (other) == (upper)) # endif static inline int strcaseeq9 (const char *s1, const char *s2) { return c_strcasecmp (s1 + 9, s2 + 9) == 0; } static inline int strcaseeq8 (const char *s1, const char *s2, char s28) { if (CASEEQ (s1[8], s28)) { if (s28 == 0) return 1; else return strcaseeq9 (s1, s2); } else return 0; } static inline int strcaseeq7 (const char *s1, const char *s2, char s27, char s28) { if (CASEEQ (s1[7], s27)) { if (s27 == 0) return 1; else return strcaseeq8 (s1, s2, s28); } else return 0; } static inline int strcaseeq6 (const char *s1, const char *s2, char s26, char s27, char s28) { if (CASEEQ (s1[6], s26)) { if (s26 == 0) return 1; else return strcaseeq7 (s1, s2, s27, s28); } else return 0; } static inline int strcaseeq5 (const char *s1, const char *s2, char s25, char s26, char s27, char s28) { if (CASEEQ (s1[5], s25)) { if (s25 == 0) return 1; else return strcaseeq6 (s1, s2, s26, s27, s28); } else return 0; } static inline int strcaseeq4 (const char *s1, const char *s2, char s24, char s25, char s26, char s27, char s28) { if (CASEEQ (s1[4], s24)) { if (s24 == 0) return 1; else return strcaseeq5 (s1, s2, s25, s26, s27, s28); } else return 0; } static inline int strcaseeq3 (const char *s1, const char *s2, char s23, char s24, char s25, char s26, char s27, char s28) { if (CASEEQ (s1[3], s23)) { if (s23 == 0) return 1; else return strcaseeq4 (s1, s2, s24, s25, s26, s27, s28); } else return 0; } static inline int strcaseeq2 (const char *s1, const char *s2, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (CASEEQ (s1[2], s22)) { if (s22 == 0) return 1; else return strcaseeq3 (s1, s2, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int strcaseeq1 (const char *s1, const char *s2, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (CASEEQ (s1[1], s21)) { if (s21 == 0) return 1; else return strcaseeq2 (s1, s2, s22, s23, s24, s25, s26, s27, s28); } else return 0; } static inline int strcaseeq0 (const char *s1, const char *s2, char s20, char s21, char s22, char s23, char s24, char s25, char s26, char s27, char s28) { if (CASEEQ (s1[0], s20)) { if (s20 == 0) return 1; else return strcaseeq1 (s1, s2, s21, s22, s23, s24, s25, s26, s27, s28); } else return 0; } #define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ strcaseeq0 (s1, s2, s20, s21, s22, s23, s24, s25, s26, s27, s28) #else #define STRCASEEQ(s1,s2,s20,s21,s22,s23,s24,s25,s26,s27,s28) \ (c_strcasecmp (s1, s2) == 0) #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/readline.c�������������������������������������������������������������������������0000644�0000000�0000000�00000003405�14226564450�012613� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* readline.c --- Simple implementation of readline. Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc. Written by Simon Josefsson This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* This module is intended to be used when the application only needs the readline interface. If you need more functions from the readline library, it is recommended to require the readline library (or improve this module) rather than #if-protect part of your application (doing so would add assumptions of this module into your application). The application should use #include "readline.h", that header file will include <readline/readline.h> if the real library is present on the system. */ /* Get specification. */ #include "readline.h" #include <stdio.h> #include <string.h> char * readline (const char *prompt) { char *out = NULL; size_t size = 0; if (prompt) { fputs (prompt, stdout); fflush (stdout); } if (getline (&out, &size, stdin) < 0) return NULL; while (*out && (out[strlen (out) - 1] == '\r' || out[strlen (out) - 1] == '\n')) out[strlen (out) - 1] = '\0'; return out; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/read.c�����������������������������������������������������������������������������0000644�0000000�0000000�00000004466�14226564450�011753� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* POSIX compatible read() function. Copyright (C) 2008-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2011. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <errno.h> # include <io.h> # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif /* Don't assume that UNICODE is not defined. */ # undef GetNamedPipeHandleState # define GetNamedPipeHandleState GetNamedPipeHandleStateA # undef read # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static ssize_t read_nothrow (int fd, void *buf, size_t count) { ssize_t result; TRY_MSVC_INVAL { result = _read (fd, buf, count); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define read_nothrow _read # endif ssize_t rpl_read (int fd, void *buf, size_t count) { ssize_t ret = read_nothrow (fd, buf, count); # if GNULIB_NONBLOCKING if (ret < 0 && GetLastError () == ERROR_NO_DATA) { HANDLE h = (HANDLE) _get_osfhandle (fd); if (GetFileType (h) == FILE_TYPE_PIPE) { /* h is a pipe or socket. */ DWORD state; if (GetNamedPipeHandleState (h, &state, NULL, NULL, NULL, NULL, 0) && (state & PIPE_NOWAIT) != 0) /* h is a pipe in non-blocking mode. Change errno from EINVAL to EAGAIN. */ errno = EAGAIN; } } # endif return ret; } #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/opendir.c��������������������������������������������������������������������������0000644�0000000�0000000�00000007727�14226564447�012511� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Start reading the entries of a directory. Copyright (C) 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <dirent.h> #include <errno.h> #include <stddef.h> #if HAVE_OPENDIR /* Override opendir(), to keep track of the open file descriptors. Needed because there is a function dirfd(). */ #else # include <stdlib.h> # include "dirent-private.h" # include "filename.h" #endif #if REPLACE_FCHDIR # include <unistd.h> #endif #ifdef __KLIBC__ # include <io.h> # include <fcntl.h> #endif #if defined _WIN32 && ! defined __CYGWIN__ /* Don't assume that UNICODE is not defined. */ # undef WIN32_FIND_DATA # define WIN32_FIND_DATA WIN32_FIND_DATAA # undef GetFullPathName # define GetFullPathName GetFullPathNameA # undef FindFirstFile # define FindFirstFile FindFirstFileA #endif DIR * opendir (const char *dir_name) { #if HAVE_OPENDIR # undef opendir DIR *dirp; dirp = opendir (dir_name); if (dirp == NULL) return NULL; # ifdef __KLIBC__ { int fd = open (dir_name, O_RDONLY); if (fd == -1 || _gl_register_dirp_fd (fd, dirp)) { int saved_errno = errno; close (fd); closedir (dirp); errno = saved_errno; return NULL; } } # endif #else char dir_name_mask[MAX_PATH + 1 + 1 + 1]; int status; HANDLE current; WIN32_FIND_DATA entry; struct gl_directory *dirp; if (dir_name[0] == '\0') { errno = ENOENT; return NULL; } /* Make the dir_name absolute, so that we continue reading the same directory if the current directory changed between this opendir() call and a subsequent rewinddir() call. */ if (!GetFullPathName (dir_name, MAX_PATH, dir_name_mask, NULL)) { errno = EINVAL; return NULL; } /* Append the mask. "*" and "*.*" appear to be equivalent. */ { char *p; p = dir_name_mask + strlen (dir_name_mask); if (p > dir_name_mask && !ISSLASH (p[-1])) *p++ = '\\'; *p++ = '*'; *p = '\0'; } /* Start searching the directory. */ status = -1; current = FindFirstFile (dir_name_mask, &entry); if (current == INVALID_HANDLE_VALUE) { switch (GetLastError ()) { case ERROR_FILE_NOT_FOUND: status = -2; break; case ERROR_PATH_NOT_FOUND: errno = ENOENT; return NULL; case ERROR_DIRECTORY: errno = ENOTDIR; return NULL; case ERROR_ACCESS_DENIED: errno = EACCES; return NULL; default: errno = EIO; return NULL; } } /* Allocate the result. */ dirp = (struct gl_directory *) malloc (offsetof (struct gl_directory, dir_name_mask[0]) + strlen (dir_name_mask) + 1); if (dirp == NULL) { if (current != INVALID_HANDLE_VALUE) FindClose (current); errno = ENOMEM; return NULL; } dirp->status = status; dirp->current = current; if (status == -1) memcpy (&dirp->entry, &entry, sizeof (WIN32_FIND_DATA)); strcpy (dirp->dir_name_mask, dir_name_mask); #endif #if REPLACE_FCHDIR { int fd = dirfd (dirp); if (0 <= fd && _gl_register_fd (fd, dir_name) != fd) { int saved_errno = errno; closedir (dirp); errno = saved_errno; return NULL; } } #endif return dirp; } �����������������������������������������recutils-1.9/lib/printf-frexpl.c��������������������������������������������������������������������0000644�0000000�0000000�00000002122�14226564450�013623� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a 'long double' into fraction and mantissa, for hexadecimal printf. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #if HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Specification. */ # include "printf-frexpl.h" # include "printf-frexp.h" long double printf_frexpl (long double x, int *expptr) { return printf_frexp (x, expptr); } #else # define USE_LONG_DOUBLE # include "printf-frexp.c" #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/gettime.c��������������������������������������������������������������������������0000644�0000000�0000000�00000002546�14226564450�012473� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* gettime -- get the system clock Copyright (C) 2002, 2004-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #include <config.h> #include "timespec.h" #include <sys/time.h> /* Get the system time into *TS. */ void gettime (struct timespec *ts) { #if defined CLOCK_REALTIME && HAVE_CLOCK_GETTIME clock_gettime (CLOCK_REALTIME, ts); #elif defined HAVE_TIMESPEC_GET timespec_get (ts, TIME_UTC); #else struct timeval tv; gettimeofday (&tv, NULL); ts->tv_sec = tv.tv_sec; ts->tv_nsec = tv.tv_usec * 1000; #endif } /* Return the current system time as a struct timespec. */ struct timespec current_timespec (void) { struct timespec ts; gettime (&ts); return ts; } ����������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/regex.h����������������������������������������������������������������������������0000644�0000000�0000000�00000062460�14226564450�012155� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Definitions for data structures and routines for the regular expression library. Copyright (C) 1985, 1989-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _REGEX_H #define _REGEX_H 1 #include <sys/types.h> /* Allow the use in C++ code. */ #ifdef __cplusplus extern "C" { #endif /* Define __USE_GNU to declare GNU extensions that violate the POSIX name space rules. */ #ifdef _GNU_SOURCE # define __USE_GNU 1 #endif #ifdef _REGEX_LARGE_OFFSETS /* Use types and values that are wide enough to represent signed and unsigned byte offsets in memory. This currently works only when the regex code is used outside of the GNU C library; it is not yet supported within glibc itself, and glibc users should not define _REGEX_LARGE_OFFSETS. */ /* The type of object sizes. */ typedef size_t __re_size_t; /* The type of object sizes, in places where the traditional code uses unsigned long int. */ typedef size_t __re_long_size_t; #else /* The traditional GNU regex implementation mishandles strings longer than INT_MAX. */ typedef unsigned int __re_size_t; typedef unsigned long int __re_long_size_t; #endif /* The following two types have to be signed and unsigned integer type wide enough to hold a value of a pointer. For most ANSI compilers ptrdiff_t and size_t should be likely OK. Still size of these two types is 2 for Microsoft C. Ugh... */ typedef long int s_reg_t; typedef unsigned long int active_reg_t; /* The following bits are used to determine the regexp syntax we recognize. The set/not-set meanings are chosen so that Emacs syntax remains the value 0. The bits are given in alphabetical order, and the definitions shifted by one from the previous bit; thus, when we add or remove a bit, only one other definition need change. */ typedef unsigned long int reg_syntax_t; #ifdef __USE_GNU /* If this bit is not set, then \ inside a bracket expression is literal. If set, then such a \ quotes the following character. */ # define RE_BACKSLASH_ESCAPE_IN_LISTS ((unsigned long int) 1) /* If this bit is not set, then + and ? are operators, and \+ and \? are literals. If set, then \+ and \? are operators and + and ? are literals. */ # define RE_BK_PLUS_QM (RE_BACKSLASH_ESCAPE_IN_LISTS << 1) /* If this bit is set, then character classes are supported. They are: [:alpha:], [:upper:], [:lower:], [:digit:], [:alnum:], [:xdigit:], [:space:], [:print:], [:punct:], [:graph:], and [:cntrl:]. If not set, then character classes are not supported. */ # define RE_CHAR_CLASSES (RE_BK_PLUS_QM << 1) /* If this bit is set, then ^ and $ are always anchors (outside bracket expressions, of course). If this bit is not set, then it depends: ^ is an anchor if it is at the beginning of a regular expression or after an open-group or an alternation operator; $ is an anchor if it is at the end of a regular expression, or before a close-group or an alternation operator. This bit could be (re)combined with RE_CONTEXT_INDEP_OPS, because POSIX draft 11.2 says that * etc. in leading positions is undefined. We already implemented a previous draft which made those constructs invalid, though, so we haven't changed the code back. */ # define RE_CONTEXT_INDEP_ANCHORS (RE_CHAR_CLASSES << 1) /* If this bit is set, then special characters are always special regardless of where they are in the pattern. If this bit is not set, then special characters are special only in some contexts; otherwise they are ordinary. Specifically, * + ? and intervals are only special when not after the beginning, open-group, or alternation operator. */ # define RE_CONTEXT_INDEP_OPS (RE_CONTEXT_INDEP_ANCHORS << 1) /* If this bit is set, then *, +, ?, and { cannot be first in an re or immediately after an alternation or begin-group operator. */ # define RE_CONTEXT_INVALID_OPS (RE_CONTEXT_INDEP_OPS << 1) /* If this bit is set, then . matches newline. If not set, then it doesn't. */ # define RE_DOT_NEWLINE (RE_CONTEXT_INVALID_OPS << 1) /* If this bit is set, then . doesn't match NUL. If not set, then it does. */ # define RE_DOT_NOT_NULL (RE_DOT_NEWLINE << 1) /* If this bit is set, nonmatching lists [^...] do not match newline. If not set, they do. */ # define RE_HAT_LISTS_NOT_NEWLINE (RE_DOT_NOT_NULL << 1) /* If this bit is set, either \{...\} or {...} defines an interval, depending on RE_NO_BK_BRACES. If not set, \{, \}, {, and } are literals. */ # define RE_INTERVALS (RE_HAT_LISTS_NOT_NEWLINE << 1) /* If this bit is set, +, ? and | aren't recognized as operators. If not set, they are. */ # define RE_LIMITED_OPS (RE_INTERVALS << 1) /* If this bit is set, newline is an alternation operator. If not set, newline is literal. */ # define RE_NEWLINE_ALT (RE_LIMITED_OPS << 1) /* If this bit is set, then '{...}' defines an interval, and \{ and \} are literals. If not set, then '\{...\}' defines an interval. */ # define RE_NO_BK_BRACES (RE_NEWLINE_ALT << 1) /* If this bit is set, (...) defines a group, and \( and \) are literals. If not set, \(...\) defines a group, and ( and ) are literals. */ # define RE_NO_BK_PARENS (RE_NO_BK_BRACES << 1) /* If this bit is set, then \<digit> matches <digit>. If not set, then \<digit> is a back-reference. */ # define RE_NO_BK_REFS (RE_NO_BK_PARENS << 1) /* If this bit is set, then | is an alternation operator, and \| is literal. If not set, then \| is an alternation operator, and | is literal. */ # define RE_NO_BK_VBAR (RE_NO_BK_REFS << 1) /* If this bit is set, then an ending range point collating higher than the starting range point, as in [z-a], is invalid. If not set, then when ending range point collates higher than the starting range point, the range is ignored. */ # define RE_NO_EMPTY_RANGES (RE_NO_BK_VBAR << 1) /* If this bit is set, then an unmatched ) is ordinary. If not set, then an unmatched ) is invalid. */ # define RE_UNMATCHED_RIGHT_PAREN_ORD (RE_NO_EMPTY_RANGES << 1) /* If this bit is set, succeed as soon as we match the whole pattern, without further backtracking. */ # define RE_NO_POSIX_BACKTRACKING (RE_UNMATCHED_RIGHT_PAREN_ORD << 1) /* If this bit is set, do not process the GNU regex operators. If not set, then the GNU regex operators are recognized. */ # define RE_NO_GNU_OPS (RE_NO_POSIX_BACKTRACKING << 1) /* If this bit is set, turn on internal regex debugging. If not set, and debugging was on, turn it off. This only works if regex.c is compiled -DDEBUG. We define this bit always, so that all that's needed to turn on debugging is to recompile regex.c; the calling code can always have this bit set, and it won't affect anything in the normal case. */ # define RE_DEBUG (RE_NO_GNU_OPS << 1) /* If this bit is set, a syntactically invalid interval is treated as a string of ordinary characters. For example, the ERE 'a{1' is treated as 'a\{1'. */ # define RE_INVALID_INTERVAL_ORD (RE_DEBUG << 1) /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ # define RE_ICASE (RE_INVALID_INTERVAL_ORD << 1) /* This bit is used internally like RE_CONTEXT_INDEP_ANCHORS but only for ^, because it is difficult to scan the regex backwards to find whether ^ should be special. */ # define RE_CARET_ANCHORS_HERE (RE_ICASE << 1) /* If this bit is set, then \{ cannot be first in a regex or immediately after an alternation, open-group or \} operator. */ # define RE_CONTEXT_INVALID_DUP (RE_CARET_ANCHORS_HERE << 1) /* If this bit is set, then no_sub will be set to 1 during re_compile_pattern. */ # define RE_NO_SUB (RE_CONTEXT_INVALID_DUP << 1) #endif /* This global variable defines the particular regexp syntax to use (for some interfaces). When a regexp is compiled, the syntax used is stored in the pattern buffer, so changing this does not affect already-compiled regexps. */ extern reg_syntax_t re_syntax_options; #ifdef __USE_GNU /* Define combinations of the above bits for the standard possibilities. (The [[[ comments delimit what gets put into the Texinfo file, so don't delete them!) */ /* [[[begin syntaxes]]] */ # define RE_SYNTAX_EMACS 0 # define RE_SYNTAX_AWK \ (RE_BACKSLASH_ESCAPE_IN_LISTS | RE_DOT_NOT_NULL \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_NO_EMPTY_RANGES \ | RE_DOT_NEWLINE | RE_CONTEXT_INDEP_ANCHORS \ | RE_CHAR_CLASSES \ | RE_UNMATCHED_RIGHT_PAREN_ORD | RE_NO_GNU_OPS) # define RE_SYNTAX_GNU_AWK \ ((RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INVALID_INTERVAL_ORD) \ & ~(RE_DOT_NOT_NULL | RE_CONTEXT_INDEP_OPS \ | RE_CONTEXT_INVALID_OPS )) # define RE_SYNTAX_POSIX_AWK \ (RE_SYNTAX_POSIX_EXTENDED | RE_BACKSLASH_ESCAPE_IN_LISTS \ | RE_INTERVALS | RE_NO_GNU_OPS \ | RE_INVALID_INTERVAL_ORD) # define RE_SYNTAX_GREP \ ((RE_SYNTAX_POSIX_BASIC | RE_NEWLINE_ALT) \ & ~(RE_CONTEXT_INVALID_DUP | RE_DOT_NOT_NULL)) # define RE_SYNTAX_EGREP \ ((RE_SYNTAX_POSIX_EXTENDED | RE_INVALID_INTERVAL_ORD | RE_NEWLINE_ALT) \ & ~(RE_CONTEXT_INVALID_OPS | RE_DOT_NOT_NULL)) /* POSIX grep -E behavior is no longer incompatible with GNU. */ # define RE_SYNTAX_POSIX_EGREP \ RE_SYNTAX_EGREP /* P1003.2/D11.2, section 4.20.7.1, lines 5078ff. */ # define RE_SYNTAX_ED RE_SYNTAX_POSIX_BASIC # define RE_SYNTAX_SED RE_SYNTAX_POSIX_BASIC /* Syntax bits common to both basic and extended POSIX regex syntax. */ # define _RE_SYNTAX_POSIX_COMMON \ (RE_CHAR_CLASSES | RE_DOT_NEWLINE | RE_DOT_NOT_NULL \ | RE_INTERVALS | RE_NO_EMPTY_RANGES) # define RE_SYNTAX_POSIX_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_BK_PLUS_QM | RE_CONTEXT_INVALID_DUP) /* Differs from ..._POSIX_BASIC only in that RE_BK_PLUS_QM becomes RE_LIMITED_OPS, i.e., \? \+ \| are not recognized. Actually, this isn't minimal, since other operators, such as \`, aren't disabled. */ # define RE_SYNTAX_POSIX_MINIMAL_BASIC \ (_RE_SYNTAX_POSIX_COMMON | RE_LIMITED_OPS) # define RE_SYNTAX_POSIX_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INDEP_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_VBAR \ | RE_CONTEXT_INVALID_OPS | RE_UNMATCHED_RIGHT_PAREN_ORD) /* Differs from ..._POSIX_EXTENDED in that RE_CONTEXT_INDEP_OPS is removed and RE_NO_BK_REFS is added. */ # define RE_SYNTAX_POSIX_MINIMAL_EXTENDED \ (_RE_SYNTAX_POSIX_COMMON | RE_CONTEXT_INDEP_ANCHORS \ | RE_CONTEXT_INVALID_OPS | RE_NO_BK_BRACES \ | RE_NO_BK_PARENS | RE_NO_BK_REFS \ | RE_NO_BK_VBAR | RE_UNMATCHED_RIGHT_PAREN_ORD) /* [[[end syntaxes]]] */ /* Maximum number of duplicates an interval can allow. POSIX-conforming systems might define this in <limits.h>, but we want our value, so remove any previous define. */ # ifdef _REGEX_INCLUDE_LIMITS_H # include <limits.h> # endif # ifdef RE_DUP_MAX # undef RE_DUP_MAX # endif /* RE_DUP_MAX is 2**15 - 1 because an earlier implementation stored the counter as a 2-byte signed integer. This is no longer true, so RE_DUP_MAX could be increased to (INT_MAX / 10 - 1), or to ((SIZE_MAX - 9) / 10) if _REGEX_LARGE_OFFSETS is defined. However, there would be a huge performance problem if someone actually used a pattern like a\{214748363\}, so RE_DUP_MAX retains its historical value. */ # define RE_DUP_MAX (0x7fff) #endif /* POSIX 'cflags' bits (i.e., information for 'regcomp'). */ /* If this bit is set, then use extended regular expression syntax. If not set, then use basic regular expression syntax. */ #define REG_EXTENDED 1 /* If this bit is set, then ignore case when matching. If not set, then case is significant. */ #define REG_ICASE (1 << 1) /* If this bit is set, then anchors do not match at newline characters in the string. If not set, then anchors do match at newlines. */ #define REG_NEWLINE (1 << 2) /* If this bit is set, then report only success or fail in regexec. If not set, then returns differ between not matching and errors. */ #define REG_NOSUB (1 << 3) /* POSIX 'eflags' bits (i.e., information for regexec). */ /* If this bit is set, then the beginning-of-line operator doesn't match the beginning of the string (presumably because it's not the beginning of a line). If not set, then the beginning-of-line operator does match the beginning of the string. */ #define REG_NOTBOL 1 /* Like REG_NOTBOL, except for the end-of-line. */ #define REG_NOTEOL (1 << 1) /* Use PMATCH[0] to delimit the start and end of the search in the buffer. */ #define REG_STARTEND (1 << 2) /* If any error codes are removed, changed, or added, update the '__re_error_msgid' table in regcomp.c. */ typedef enum { _REG_ENOSYS = -1, /* This will never happen for this implementation. */ _REG_NOERROR = 0, /* Success. */ _REG_NOMATCH, /* Didn't find a match (for regexec). */ /* POSIX regcomp return error codes. (In the order listed in the standard.) */ _REG_BADPAT, /* Invalid pattern. */ _REG_ECOLLATE, /* Invalid collating element. */ _REG_ECTYPE, /* Invalid character class name. */ _REG_EESCAPE, /* Trailing backslash. */ _REG_ESUBREG, /* Invalid back reference. */ _REG_EBRACK, /* Unmatched left bracket. */ _REG_EPAREN, /* Parenthesis imbalance. */ _REG_EBRACE, /* Unmatched \{. */ _REG_BADBR, /* Invalid contents of \{\}. */ _REG_ERANGE, /* Invalid range end. */ _REG_ESPACE, /* Ran out of memory. */ _REG_BADRPT, /* No preceding re for repetition op. */ /* Error codes we've added. */ _REG_EEND, /* Premature end. */ _REG_ESIZE, /* Too large (e.g., repeat count too large). */ _REG_ERPAREN /* Unmatched ) or \); not returned from regcomp. */ } reg_errcode_t; #if defined _XOPEN_SOURCE || defined __USE_XOPEN2K # define REG_ENOSYS _REG_ENOSYS #endif #define REG_NOERROR _REG_NOERROR #define REG_NOMATCH _REG_NOMATCH #define REG_BADPAT _REG_BADPAT #define REG_ECOLLATE _REG_ECOLLATE #define REG_ECTYPE _REG_ECTYPE #define REG_EESCAPE _REG_EESCAPE #define REG_ESUBREG _REG_ESUBREG #define REG_EBRACK _REG_EBRACK #define REG_EPAREN _REG_EPAREN #define REG_EBRACE _REG_EBRACE #define REG_BADBR _REG_BADBR #define REG_ERANGE _REG_ERANGE #define REG_ESPACE _REG_ESPACE #define REG_BADRPT _REG_BADRPT #define REG_EEND _REG_EEND #define REG_ESIZE _REG_ESIZE #define REG_ERPAREN _REG_ERPAREN /* This data structure represents a compiled pattern. Before calling the pattern compiler, the fields 'buffer', 'allocated', 'fastmap', and 'translate' can be set. After the pattern has been compiled, the fields 're_nsub', 'not_bol' and 'not_eol' are available. All other fields are private to the regex routines. */ #ifndef RE_TRANSLATE_TYPE # define __RE_TRANSLATE_TYPE unsigned char * # ifdef __USE_GNU # define RE_TRANSLATE_TYPE __RE_TRANSLATE_TYPE # endif #endif #ifdef __USE_GNU # define __REPB_PREFIX(name) name #else # define __REPB_PREFIX(name) __##name #endif struct re_pattern_buffer { /* Space that holds the compiled pattern. The type 'struct re_dfa_t' is private and is not declared here. */ struct re_dfa_t *__REPB_PREFIX(buffer); /* Number of bytes to which 'buffer' points. */ __re_long_size_t __REPB_PREFIX(allocated); /* Number of bytes actually used in 'buffer'. */ __re_long_size_t __REPB_PREFIX(used); /* Syntax setting with which the pattern was compiled. */ reg_syntax_t __REPB_PREFIX(syntax); /* Pointer to a fastmap, if any, otherwise zero. re_search uses the fastmap, if there is one, to skip over impossible starting points for matches. */ char *__REPB_PREFIX(fastmap); /* Either a translate table to apply to all characters before comparing them, or zero for no translation. The translation is applied to a pattern when it is compiled and to a string when it is matched. */ __RE_TRANSLATE_TYPE __REPB_PREFIX(translate); /* Number of subexpressions found by the compiler. */ size_t re_nsub; /* Zero if this pattern cannot match the empty string, one else. Well, in truth it's used only in 're_search_2', to see whether or not we should use the fastmap, so we don't set this absolutely perfectly; see 're_compile_fastmap' (the "duplicate" case). */ unsigned __REPB_PREFIX(can_be_null) : 1; /* If REGS_UNALLOCATED, allocate space in the 'regs' structure for 'max (RE_NREGS, re_nsub + 1)' groups. If REGS_REALLOCATE, reallocate space if necessary. If REGS_FIXED, use what's there. */ #ifdef __USE_GNU # define REGS_UNALLOCATED 0 # define REGS_REALLOCATE 1 # define REGS_FIXED 2 #endif unsigned __REPB_PREFIX(regs_allocated) : 2; /* Set to zero when 're_compile_pattern' compiles a pattern; set to one by 're_compile_fastmap' if it updates the fastmap. */ unsigned __REPB_PREFIX(fastmap_accurate) : 1; /* If set, 're_match_2' does not return information about subexpressions. */ unsigned __REPB_PREFIX(no_sub) : 1; /* If set, a beginning-of-line anchor doesn't match at the beginning of the string. */ unsigned __REPB_PREFIX(not_bol) : 1; /* Similarly for an end-of-line anchor. */ unsigned __REPB_PREFIX(not_eol) : 1; /* If true, an anchor at a newline matches. */ unsigned __REPB_PREFIX(newline_anchor) : 1; }; typedef struct re_pattern_buffer regex_t; /* Type for byte offsets within the string. POSIX mandates this. */ #ifdef _REGEX_LARGE_OFFSETS /* POSIX 1003.1-2008 requires that regoff_t be at least as wide as ptrdiff_t and ssize_t. We don't know of any hosts where ptrdiff_t is wider than ssize_t, so ssize_t is safe. ptrdiff_t is not visible here, so use ssize_t. */ typedef ssize_t regoff_t; #else /* The traditional GNU regex implementation mishandles strings longer than INT_MAX. */ typedef int regoff_t; #endif #ifdef __USE_GNU /* This is the structure we store register match data in. See regex.texinfo for a full description of what registers match. */ struct re_registers { __re_size_t num_regs; regoff_t *start; regoff_t *end; }; /* If 'regs_allocated' is REGS_UNALLOCATED in the pattern buffer, 're_match_2' returns information about at least this many registers the first time a 'regs' structure is passed. */ # ifndef RE_NREGS # define RE_NREGS 30 # endif #endif /* POSIX specification for registers. Aside from the different names than 're_registers', POSIX uses an array of structures, instead of a structure of arrays. */ typedef struct { regoff_t rm_so; /* Byte offset from string's start to substring's start. */ regoff_t rm_eo; /* Byte offset from string's start to substring's end. */ } regmatch_t; /* Declarations for routines. */ #ifndef _REGEX_NELTS # if (defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \ && !defined __STDC_NO_VLA__) # define _REGEX_NELTS(n) n # else # define _REGEX_NELTS(n) # endif #endif #if defined __GNUC__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # pragma GCC diagnostic push # pragma GCC diagnostic ignored "-Wvla" #endif #ifndef _Attr_access_ # ifdef __attr_access # define _Attr_access_(arg) __attr_access (arg) # elif defined __GNUC__ && 10 <= __GNUC__ # define _Attr_access_(x) __attribute__ ((__access__ x)) # else # define _Attr_access_(x) # endif #endif #ifdef __USE_GNU /* Sets the current default syntax to SYNTAX, and return the old syntax. You can also simply assign to the 're_syntax_options' variable. */ extern reg_syntax_t re_set_syntax (reg_syntax_t __syntax); /* Compile the regular expression PATTERN, with length LENGTH and syntax given by the global 're_syntax_options', into the buffer BUFFER. Return NULL if successful, and an error string if not. To free the allocated storage, you must call 'regfree' on BUFFER. Note that the translate table must either have been initialized by 'regcomp', with a malloc'ed value, or set to NULL before calling 'regfree'. */ extern const char *re_compile_pattern (const char *__pattern, size_t __length, struct re_pattern_buffer *__buffer) _Attr_access_ ((__read_only__, 1, 2)); /* Compile a fastmap for the compiled pattern in BUFFER; used to accelerate searches. Return 0 if successful and -2 if was an internal error. */ extern int re_compile_fastmap (struct re_pattern_buffer *__buffer); /* Search in the string STRING (with length LENGTH) for the pattern compiled into BUFFER. Start searching at position START, for RANGE characters. Return the starting position of the match, -1 for no match, or -2 for an internal error. Also return register information in REGS (if REGS and BUFFER->no_sub are nonzero). */ extern regoff_t re_search (struct re_pattern_buffer *__buffer, const char *__String, regoff_t __length, regoff_t __start, regoff_t __range, struct re_registers *__regs) _Attr_access_ ((__read_only__, 2, 3)); /* Like 're_search', but search in the concatenation of STRING1 and STRING2. Also, stop searching at index START + STOP. */ extern regoff_t re_search_2 (struct re_pattern_buffer *__buffer, const char *__string1, regoff_t __length1, const char *__string2, regoff_t __length2, regoff_t __start, regoff_t __range, struct re_registers *__regs, regoff_t __stop) _Attr_access_ ((__read_only__, 2, 3)) _Attr_access_ ((__read_only__, 4, 5)); /* Like 're_search', but return how many characters in STRING the regexp in BUFFER matched, starting at position START. */ extern regoff_t re_match (struct re_pattern_buffer *__buffer, const char *__String, regoff_t __length, regoff_t __start, struct re_registers *__regs) _Attr_access_ ((__read_only__, 2, 3)); /* Relates to 're_match' as 're_search_2' relates to 're_search'. */ extern regoff_t re_match_2 (struct re_pattern_buffer *__buffer, const char *__string1, regoff_t __length1, const char *__string2, regoff_t __length2, regoff_t __start, struct re_registers *__regs, regoff_t __stop) _Attr_access_ ((__read_only__, 2, 3)) _Attr_access_ ((__read_only__, 4, 5)); /* Set REGS to hold NUM_REGS registers, storing them in STARTS and ENDS. Subsequent matches using BUFFER and REGS will use this memory for recording register information. STARTS and ENDS must be allocated with malloc, and must each be at least 'NUM_REGS * sizeof (regoff_t)' bytes long. If NUM_REGS == 0, then subsequent matches should allocate their own register data. Unless this function is called, the first search or match using BUFFER will allocate its own register data, without freeing the old data. */ extern void re_set_registers (struct re_pattern_buffer *__buffer, struct re_registers *__regs, __re_size_t __num_regs, regoff_t *__starts, regoff_t *__ends); #endif /* Use GNU */ #if defined _REGEX_RE_COMP || (defined _LIBC && defined __USE_MISC) /* 4.2 bsd compatibility. */ extern char *re_comp (const char *); extern int re_exec (const char *); #endif /* For plain 'restrict', use glibc's __restrict if defined. Otherwise, GCC 2.95 and later have "__restrict"; C99 compilers have "restrict", and "configure" may have defined "restrict". Other compilers use __restrict, __restrict__, and _Restrict, and 'configure' might #define 'restrict' to those words, so pick a different name. */ #ifndef _Restrict_ # if defined __restrict \ || 2 < __GNUC__ + (95 <= __GNUC_MINOR__) \ || __clang_major__ >= 3 # define _Restrict_ __restrict # elif 199901L <= __STDC_VERSION__ || defined restrict # define _Restrict_ restrict # else # define _Restrict_ # endif #endif /* For the ISO C99 syntax array_name[restrict] use glibc's __restrict_arr if available. Otherwise, GCC 3.1 and clang support this syntax (but not in C++ mode). Other ISO C99 compilers support it as well. */ #ifndef _Restrict_arr_ # ifdef __restrict_arr # define _Restrict_arr_ __restrict_arr # elif ((199901L <= __STDC_VERSION__ \ || 3 < __GNUC__ + (1 <= __GNUC_MINOR__) \ || __clang_major__ >= 3) \ && !defined __cplusplus) # define _Restrict_arr_ _Restrict_ # else # define _Restrict_arr_ # endif #endif /* POSIX compatibility. */ extern int regcomp (regex_t *_Restrict_ __preg, const char *_Restrict_ __pattern, int __cflags); extern int regexec (const regex_t *_Restrict_ __preg, const char *_Restrict_ __String, size_t __nmatch, regmatch_t __pmatch[_Restrict_arr_ _REGEX_NELTS (__nmatch)], int __eflags); extern size_t regerror (int __errcode, const regex_t *_Restrict_ __preg, char *_Restrict_ __errbuf, size_t __errbuf_size) _Attr_access_ ((__write_only__, 3, 4)); extern void regfree (regex_t *__preg); #if defined __GNUC__ && 4 < __GNUC__ + (6 <= __GNUC_MINOR__) # pragma GCC diagnostic pop #endif #ifdef __cplusplus } #endif /* C++ */ #endif /* regex.h */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/mbrtowc.c��������������������������������������������������������������������������0000644�0000000�0000000�00000007165�14226564450�012514� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert multibyte character to wide character. Copyright (C) 1999-2002, 2005-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #if GNULIB_defined_mbstate_t /* Implement mbrtowc() on top of mbtowc() for the non-UTF-8 locales and directly for the UTF-8 locales. */ # include <errno.h> # include <stdint.h> # include <stdlib.h> # if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN /* avoid including junk */ # include <windows.h> # elif HAVE_PTHREAD_API # include <pthread.h> # if HAVE_THREADS_H && HAVE_WEAK_SYMBOLS # include <threads.h> # pragma weak thrd_exit # define c11_threads_in_use() (thrd_exit != NULL) # else # define c11_threads_in_use() 0 # endif # elif HAVE_THREADS_H # include <threads.h> # endif # include "attribute.h" # include "verify.h" # include "lc-charset-dispatch.h" # include "mbtowc-lock.h" verify (sizeof (mbstate_t) >= 4); static char internal_state[4]; size_t mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { # define FITS_IN_CHAR_TYPE(wc) ((wc) <= WCHAR_MAX) # include "mbrtowc-impl.h" } #else /* Override the system's mbrtowc() function. */ # if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ # include "hard-locale.h" # include <locale.h> # endif # undef mbrtowc size_t rpl_mbrtowc (wchar_t *pwc, const char *s, size_t n, mbstate_t *ps) { size_t ret; wchar_t wc; # if MBRTOWC_NULL_ARG2_BUG || MBRTOWC_RETVAL_BUG || MBRTOWC_EMPTY_INPUT_BUG if (s == NULL) { pwc = NULL; s = ""; n = 1; } # endif # if MBRTOWC_EMPTY_INPUT_BUG if (n == 0) return (size_t) -2; # endif if (! pwc) pwc = &wc; # if MBRTOWC_RETVAL_BUG { static mbstate_t internal_state; /* Override mbrtowc's internal state. We cannot call mbsinit() on the hidden internal state, but we can call it on our variable. */ if (ps == NULL) ps = &internal_state; if (!mbsinit (ps)) { /* Parse the rest of the multibyte character byte for byte. */ size_t count = 0; for (; n > 0; s++, n--) { ret = mbrtowc (&wc, s, 1, ps); if (ret == (size_t)(-1)) return (size_t)(-1); count++; if (ret != (size_t)(-2)) { /* The multibyte character has been completed. */ *pwc = wc; return (wc == 0 ? 0 : count); } } return (size_t)(-2); } } # endif # if MBRTOWC_STORES_INCOMPLETE_BUG ret = mbrtowc (&wc, s, n, ps); if (ret < (size_t) -2 && pwc != NULL) *pwc = wc; # else ret = mbrtowc (pwc, s, n, ps); # endif # if MBRTOWC_NUL_RETVAL_BUG if (ret < (size_t) -2 && !*pwc) return 0; # endif # if MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ if ((size_t) -2 <= ret && n != 0 && ! hard_locale (LC_CTYPE)) { unsigned char uc = *s; *pwc = uc; return 1; } # endif return ret; } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/closeout.c�������������������������������������������������������������������������0000644�0000000�0000000�00000011417�14226564447�012675� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Close standard output and standard error, exiting with a diagnostic on error. Copyright (C) 1998-2002, 2004, 2006, 2008-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "closeout.h" #include <errno.h> #include <stdbool.h> #include <stdio.h> #include <unistd.h> #include "gettext.h" #define _(msgid) gettext (msgid) #include "close-stream.h" #include "error.h" #include "exitfail.h" #include "quotearg.h" #ifndef __has_feature # define __has_feature(a) false #endif #if defined __SANITIZE_ADDRESS__ || __has_feature (address_sanitizer) enum { SANITIZE_ADDRESS = true }; #else enum { SANITIZE_ADDRESS = false }; #endif static const char *file_name; /* Set the file name to be reported in the event an error is detected by close_stdout. */ void close_stdout_set_file_name (const char *file) { file_name = file; } static bool ignore_EPIPE /* = false */; /* Specify the reaction to an EPIPE error during the closing of stdout: - If ignore = true, it shall be ignored. - If ignore = false, it shall evoke a diagnostic, along with a nonzero exit status. The default is ignore = false. This setting matters only if the SIGPIPE signal is ignored (i.e. its handler set to SIG_IGN) or blocked. Only particular programs need to temporarily ignore SIGPIPE. If SIGPIPE is ignored or blocked because it was ignored or blocked in the parent process when it created the child process, it usually is a bug in the parent process: It is bad practice to have SIGPIPE ignored or blocked while creating a child process. EPIPE occurs when writing to a pipe or socket that has no readers now, when SIGPIPE is ignored or blocked. The ignore = false setting is suitable for a scenario where it is normally guaranteed that the pipe writer terminates before the pipe reader. In this case, an EPIPE is an indication of a premature termination of the pipe reader and should lead to a diagnostic and a nonzero exit status. The ignore = true setting is suitable for a scenario where you don't know ahead of time whether the pipe writer or the pipe reader will terminate first. In this case, an EPIPE is an indication that the pipe writer can stop doing useless write() calls; this is what close_stdout does anyway. EPIPE is part of the normal pipe/socket shutdown protocol in this case, and should not lead to a diagnostic message. */ void close_stdout_set_ignore_EPIPE (bool ignore) { ignore_EPIPE = ignore; } /* Close standard output. On error, issue a diagnostic and _exit with status 'exit_failure'. Also close standard error. On error, _exit with status 'exit_failure'. Since close_stdout is commonly registered via 'atexit', POSIX and the C standard both say that it should not call 'exit', because the behavior is undefined if 'exit' is called more than once. So it calls '_exit' instead of 'exit'. If close_stdout is registered via atexit before other functions are registered, the other functions can act before this _exit is invoked. Applications that use close_stdout should flush any streams other than stdout and stderr before exiting, since the call to _exit will bypass other buffer flushing. Applications should be flushing and closing other streams anyway, to check for I/O errors. Also, applications should not use tmpfile, since _exit can bypass the removal of these files. It's important to detect such failures and exit nonzero because many tools (most notably 'make' and other build-management systems) depend on being able to detect failure in other tools via their exit status. */ void close_stdout (void) { if (close_stream (stdout) != 0 && !(ignore_EPIPE && errno == EPIPE)) { char const *write_error = _("write error"); if (file_name) error (0, errno, "%s: %s", quotearg_colon (file_name), write_error); else error (0, errno, "%s", write_error); _exit (exit_failure); } /* Close stderr only if not sanitizing, as sanitizers may report to stderr after this function returns. */ if (!SANITIZE_ADDRESS && close_stream (stderr) != 0) _exit (exit_failure); } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/copy-file.c������������������������������������������������������������������������0000644�0000000�0000000�00000013024�14226564447�012723� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copying of files. Copyright (C) 2001-2003, 2006-2007, 2009-2022 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "copy-file.h" #include <errno.h> #include <fcntl.h> #include <stddef.h> #include <stdlib.h> #include <sys/stat.h> #include <unistd.h> #include "error.h" #include "ignore-value.h" #include "safe-read.h" #include "full-write.h" #include "stat-time.h" #include "utimens.h" #include "acl.h" #include "binary-io.h" #include "quote.h" #include "gettext.h" #define _(str) gettext (str) enum { IO_SIZE = 32 * 1024 }; int qcopy_file_preserving (const char *src_filename, const char *dest_filename) { int err = 0; int src_fd; struct stat statbuf; int mode; int dest_fd; src_fd = open (src_filename, O_RDONLY | O_BINARY | O_CLOEXEC); if (src_fd < 0) return GL_COPY_ERR_OPEN_READ; if (fstat (src_fd, &statbuf) < 0) { err = GL_COPY_ERR_OPEN_READ; goto error_src; } mode = statbuf.st_mode & 07777; off_t inbytes = S_ISREG (statbuf.st_mode) ? statbuf.st_size : -1; bool empty_regular_file = inbytes == 0; dest_fd = open (dest_filename, O_WRONLY | O_CREAT | O_TRUNC | O_BINARY | O_CLOEXEC, 0600); if (dest_fd < 0) { err = GL_COPY_ERR_OPEN_BACKUP_WRITE; goto error_src; } /* Copy the file contents. FIXME: Do not copy holes. */ while (0 < inbytes) { size_t copy_max = -1; copy_max -= copy_max % IO_SIZE; size_t len = inbytes < copy_max ? inbytes : copy_max; ssize_t copied = copy_file_range (src_fd, NULL, dest_fd, NULL, len, 0); if (copied <= 0) break; inbytes -= copied; } /* Finish up with read/write, in case the file was not a regular file, or the file shrank or had I/O errors (in which case find whether it was a read or write error). Read empty regular files since they might be in /proc with their true sizes unknown until they are read. */ if (inbytes != 0 || empty_regular_file) { char smallbuf[1024]; int bufsize = IO_SIZE; char *buf = malloc (bufsize); if (!buf) buf = smallbuf, bufsize = sizeof smallbuf; while (true) { size_t n_read = safe_read (src_fd, buf, bufsize); if (n_read == 0) break; if (n_read == SAFE_READ_ERROR) { err = GL_COPY_ERR_READ; break; } if (full_write (dest_fd, buf, n_read) < n_read) { err = GL_COPY_ERR_WRITE; break; } } if (buf != smallbuf) free (buf); if (err) goto error_src_dest; } #if !USE_ACL if (close (dest_fd) < 0) { err = GL_COPY_ERR_WRITE; goto error_src; } if (close (src_fd) < 0) return GL_COPY_ERR_AFTER_READ; #endif /* Preserve the access and modification times. */ { struct timespec ts[2]; ts[0] = get_stat_atime (&statbuf); ts[1] = get_stat_mtime (&statbuf); utimens (dest_filename, ts); } #if HAVE_CHOWN /* Preserve the owner and group. */ ignore_value (chown (dest_filename, statbuf.st_uid, statbuf.st_gid)); #endif /* Preserve the access permissions. */ #if USE_ACL switch (qcopy_acl (src_filename, src_fd, dest_filename, dest_fd, mode)) { case -2: err = GL_COPY_ERR_GET_ACL; goto error_src_dest; case -1: err = GL_COPY_ERR_SET_ACL; goto error_src_dest; } #else chmod (dest_filename, mode); #endif #if USE_ACL if (close (dest_fd) < 0) { err = GL_COPY_ERR_WRITE; goto error_src; } if (close (src_fd) < 0) return GL_COPY_ERR_AFTER_READ; #endif return 0; error_src_dest: close (dest_fd); error_src: close (src_fd); return err; } void copy_file_preserving (const char *src_filename, const char *dest_filename) { switch (qcopy_file_preserving (src_filename, dest_filename)) { case 0: return; case GL_COPY_ERR_OPEN_READ: error (EXIT_FAILURE, errno, _("error while opening %s for reading"), quote (src_filename)); case GL_COPY_ERR_OPEN_BACKUP_WRITE: error (EXIT_FAILURE, errno, _("cannot open backup file %s for writing"), quote (dest_filename)); case GL_COPY_ERR_READ: error (EXIT_FAILURE, errno, _("error reading %s"), quote (src_filename)); case GL_COPY_ERR_WRITE: error (EXIT_FAILURE, errno, _("error writing %s"), quote (dest_filename)); case GL_COPY_ERR_AFTER_READ: error (EXIT_FAILURE, errno, _("error after reading %s"), quote (src_filename)); case GL_COPY_ERR_GET_ACL: error (EXIT_FAILURE, errno, "%s", quote (src_filename)); case GL_COPY_ERR_SET_ACL: error (EXIT_FAILURE, errno, _("preserving permissions for %s"), quote (dest_filename)); default: abort (); } } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/frexp.c����������������������������������������������������������������������������0000644�0000000�0000000�00000010403�14226564447�012156� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Split a double into fraction and mantissa. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paolo Bonzini <bonzini@gnu.org>, 2003, and Bruno Haible <bruno@clisp.org>, 2007. */ #if ! defined USE_LONG_DOUBLE # include <config.h> #endif /* Specification. */ #include <math.h> #include <float.h> #ifdef USE_LONG_DOUBLE # include "isnanl-nolibm.h" # include "fpucw.h" #else # include "isnand-nolibm.h" #endif /* This file assumes FLT_RADIX = 2. If FLT_RADIX is a power of 2 greater than 2, or not even a power of 2, some rounding errors can occur, so that then the returned mantissa is only guaranteed to be <= 1.0, not < 1.0. */ #ifdef USE_LONG_DOUBLE # define FUNC frexpl # define DOUBLE long double # define ISNAN isnanl # define DECL_ROUNDING DECL_LONG_DOUBLE_ROUNDING # define BEGIN_ROUNDING() BEGIN_LONG_DOUBLE_ROUNDING () # define END_ROUNDING() END_LONG_DOUBLE_ROUNDING () # define L_(literal) literal##L #else # define FUNC frexp # define DOUBLE double # define ISNAN isnand # define DECL_ROUNDING # define BEGIN_ROUNDING() # define END_ROUNDING() # define L_(literal) literal #endif DOUBLE FUNC (DOUBLE x, int *expptr) { int sign; int exponent; DECL_ROUNDING /* Test for NaN, infinity, and zero. */ if (ISNAN (x) || x + x == x) { *expptr = 0; return x; } sign = 0; if (x < 0) { x = - x; sign = -1; } BEGIN_ROUNDING (); { /* Since the exponent is an 'int', it fits in 64 bits. Therefore the loops are executed no more than 64 times. */ DOUBLE pow2[64]; /* pow2[i] = 2^2^i */ DOUBLE powh[64]; /* powh[i] = 2^-2^i */ int i; exponent = 0; if (x >= L_(1.0)) { /* A positive exponent. */ DOUBLE pow2_i; /* = pow2[i] */ DOUBLE powh_i; /* = powh[i] */ /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, x * 2^exponent = argument, x >= 1.0. */ for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); ; i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) { if (x >= pow2_i) { exponent += (1 << i); x *= powh_i; } else break; pow2[i] = pow2_i; powh[i] = powh_i; } /* Avoid making x too small, as it could become a denormalized number and thus lose precision. */ while (i > 0 && x < pow2[i - 1]) { i--; powh_i = powh[i]; } exponent += (1 << i); x *= powh_i; /* Here 2^-2^i <= x < 1.0. */ } else { /* A negative or zero exponent. */ DOUBLE pow2_i; /* = pow2[i] */ DOUBLE powh_i; /* = powh[i] */ /* Invariants: pow2_i = 2^2^i, powh_i = 2^-2^i, x * 2^exponent = argument, x < 1.0. */ for (i = 0, pow2_i = L_(2.0), powh_i = L_(0.5); ; i++, pow2_i = pow2_i * pow2_i, powh_i = powh_i * powh_i) { if (x < powh_i) { exponent -= (1 << i); x *= pow2_i; } else break; pow2[i] = pow2_i; powh[i] = powh_i; } /* Here 2^-2^i <= x < 1.0. */ } /* Invariants: x * 2^exponent = argument, and 2^-2^i <= x < 1.0. */ while (i > 0) { i--; if (x < powh[i]) { exponent -= (1 << i); x *= pow2[i]; } } /* Here 0.5 <= x < 1.0. */ } if (sign < 0) x = - x; END_ROUNDING (); *expptr = exponent; return x; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/limits.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000010725�14226564450�012746� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <limits.h>. Copyright 2016-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_ALREADY_INCLUDING_LIMITS_H /* Special invocation convention: On Haiku/x86_64, we have a sequence of nested includes <limits.h> -> <syslimits.h> -> <limits.h>. In this situation, LONG_MAX and INT_MAX are not yet defined, therefore we should not attempt to define LONG_BIT. */ #@INCLUDE_NEXT@ @NEXT_LIMITS_H@ #else /* Normal invocation convention. */ #ifndef _@GUARD_PREFIX@_LIMITS_H # define _GL_ALREADY_INCLUDING_LIMITS_H /* The include_next requires a split double-inclusion guard. */ # @INCLUDE_NEXT@ @NEXT_LIMITS_H@ # undef _GL_ALREADY_INCLUDING_LIMITS_H #ifndef _@GUARD_PREFIX@_LIMITS_H #define _@GUARD_PREFIX@_LIMITS_H #ifndef LLONG_MIN # if defined LONG_LONG_MIN /* HP-UX 11.31 */ # define LLONG_MIN LONG_LONG_MIN # elif defined LONGLONG_MIN /* IRIX 6.5 */ # define LLONG_MIN LONGLONG_MIN # elif defined __GNUC__ # define LLONG_MIN (- __LONG_LONG_MAX__ - 1LL) # endif #endif #ifndef LLONG_MAX # if defined LONG_LONG_MAX /* HP-UX 11.31 */ # define LLONG_MAX LONG_LONG_MAX # elif defined LONGLONG_MAX /* IRIX 6.5 */ # define LLONG_MAX LONGLONG_MAX # elif defined __GNUC__ # define LLONG_MAX __LONG_LONG_MAX__ # endif #endif #ifndef ULLONG_MAX # if defined ULONG_LONG_MAX /* HP-UX 11.31 */ # define ULLONG_MAX ULONG_LONG_MAX # elif defined ULONGLONG_MAX /* IRIX 6.5 */ # define ULLONG_MAX ULONGLONG_MAX # elif defined __GNUC__ # define ULLONG_MAX (__LONG_LONG_MAX__ * 2ULL + 1ULL) # endif #endif /* The number of usable bits in an unsigned or signed integer type with minimum value MIN and maximum value MAX, as an int expression suitable in #if. Cover all known practical hosts. This implementation exploits the fact that MAX is 1 less than a power of 2, and merely counts the number of 1 bits in MAX; "COBn" means "count the number of 1 bits in the low-order n bits"). */ #define _GL_INTEGER_WIDTH(min, max) (((min) < 0) + _GL_COB128 (max)) #define _GL_COB128(n) (_GL_COB64 ((n) >> 31 >> 31 >> 2) + _GL_COB64 (n)) #define _GL_COB64(n) (_GL_COB32 ((n) >> 31 >> 1) + _GL_COB32 (n)) #define _GL_COB32(n) (_GL_COB16 ((n) >> 16) + _GL_COB16 (n)) #define _GL_COB16(n) (_GL_COB8 ((n) >> 8) + _GL_COB8 (n)) #define _GL_COB8(n) (_GL_COB4 ((n) >> 4) + _GL_COB4 (n)) #define _GL_COB4(n) (!!((n) & 8) + !!((n) & 4) + !!((n) & 2) + !!((n) & 1)) #ifndef WORD_BIT /* Assume 'int' is 32 bits wide. */ # define WORD_BIT 32 #endif #ifndef LONG_BIT /* Assume 'long' is 32 or 64 bits wide. */ # if LONG_MAX == INT_MAX # define LONG_BIT 32 # else # define LONG_BIT 64 # endif #endif /* Macros specified by C2x and by ISO/IEC TS 18661-1:2014. */ #if (! defined ULLONG_WIDTH \ && (defined _GNU_SOURCE || defined __STDC_WANT_IEC_60559_BFP_EXT__ \ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__))) # define CHAR_WIDTH _GL_INTEGER_WIDTH (CHAR_MIN, CHAR_MAX) # define SCHAR_WIDTH _GL_INTEGER_WIDTH (SCHAR_MIN, SCHAR_MAX) # define UCHAR_WIDTH _GL_INTEGER_WIDTH (0, UCHAR_MAX) # define SHRT_WIDTH _GL_INTEGER_WIDTH (SHRT_MIN, SHRT_MAX) # define USHRT_WIDTH _GL_INTEGER_WIDTH (0, USHRT_MAX) # define INT_WIDTH _GL_INTEGER_WIDTH (INT_MIN, INT_MAX) # define UINT_WIDTH _GL_INTEGER_WIDTH (0, UINT_MAX) # define LONG_WIDTH _GL_INTEGER_WIDTH (LONG_MIN, LONG_MAX) # define ULONG_WIDTH _GL_INTEGER_WIDTH (0, ULONG_MAX) # define LLONG_WIDTH _GL_INTEGER_WIDTH (LLONG_MIN, LLONG_MAX) # define ULLONG_WIDTH _GL_INTEGER_WIDTH (0, ULLONG_MAX) #endif /* Macros specified by C2x. */ #if (! defined BOOL_WIDTH \ && (defined _GNU_SOURCE \ || (defined __STDC_VERSION__ && 201710 < __STDC_VERSION__))) # define BOOL_MAX 1 # define BOOL_WIDTH 1 #endif #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif /* _@GUARD_PREFIX@_LIMITS_H */ #endif �������������������������������������������recutils-1.9/lib/chdir-long.h�����������������������������������������������������������������������0000644�0000000�0000000�00000002070�14226564446�013065� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a chdir function that tries not to fail due to ENAMETOOLONG Copyright (C) 2004-2005, 2009-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <unistd.h> #include <limits.h> #include "pathmax.h" /* On systems without PATH_MAX, presume that chdir accepts arbitrarily long directory names. */ #ifndef PATH_MAX # define chdir_long(Dir) chdir (Dir) #else int chdir_long (char *dir); #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/time.in.h��������������������������������������������������������������������������0000644�0000000�0000000�00000040660�14226564451�012405� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A more-standard <time.h>. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Don't get in the way of glibc when it includes time.h merely to declare a few standard symbols, rather than to declare all the symbols. (However, skip this for MinGW as it treats __need_time_t incompatibly.) Also, Solaris 8 <time.h> eventually includes itself recursively; if that is happening, just include the system <time.h> without adding our own declarations. */ #if (((defined __need_time_t || defined __need_clock_t \ || defined __need_timespec) \ && !defined __MINGW32__) \ || defined _@GUARD_PREFIX@_TIME_H) # @INCLUDE_NEXT@ @NEXT_TIME_H@ #else # define _@GUARD_PREFIX@_TIME_H /* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ # if defined __MINGW32__ # include <unistd.h> # endif # @INCLUDE_NEXT@ @NEXT_TIME_H@ /* NetBSD 5.0 mis-defines NULL. */ # include <stddef.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Some systems don't define struct timespec (e.g., AIX 4.1). Or they define it with the wrong member names or define it in <sys/time.h> (e.g., FreeBSD circa 1997). Stock Mingw prior to 3.0 does not define it, but the pthreads-win32 library defines it in <pthread.h>. */ # if ! @TIME_H_DEFINES_STRUCT_TIMESPEC@ # if @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ # include <sys/time.h> # elif @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ # include <pthread.h> # elif @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ # include <unistd.h> # else # ifdef __cplusplus extern "C" { # endif # if !GNULIB_defined_struct_timespec # undef timespec # define timespec rpl_timespec struct timespec { time_t tv_sec; long int tv_nsec; }; # define GNULIB_defined_struct_timespec 1 # endif # ifdef __cplusplus } # endif # endif # endif # if !GNULIB_defined_struct_time_t_must_be_integral /* https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/sys_types.h.html requires time_t to be an integer type, even though C99 permits floating point. We don't know of any implementation that uses floating point, and it is much easier to write code that doesn't have to worry about that corner case, so we force the issue. */ struct __time_t_must_be_integral { unsigned int __floating_time_t_unsupported : (time_t) 1; }; # define GNULIB_defined_struct_time_t_must_be_integral 1 # endif /* Define TIME_UTC, a positive integer constant used for timespec_get(). */ # if ! @TIME_H_DEFINES_TIME_UTC@ # if !GNULIB_defined_TIME_UTC # define TIME_UTC 1 # define GNULIB_defined_TIME_UTC 1 # endif # endif /* Set *TS to the current time, and return BASE. Upon failure, return 0. */ # if @GNULIB_TIMESPEC_GET@ # if ! @HAVE_TIMESPEC_GET@ _GL_FUNCDECL_SYS (timespec_get, int, (struct timespec *ts, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timespec_get, int, (struct timespec *ts, int base)); _GL_CXXALIASWARN (timespec_get); # endif /* Set *TS to the current time resolution, and return BASE. Upon failure, return 0. */ # if @GNULIB_TIMESPEC_GETRES@ # if ! @HAVE_TIMESPEC_GETRES@ _GL_FUNCDECL_SYS (timespec_getres, int, (struct timespec *ts, int base) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timespec_getres, int, (struct timespec *ts, int base)); _GL_CXXALIASWARN (timespec_getres); # endif /* Sleep for at least RQTP seconds unless interrupted, If interrupted, return -1 and store the remaining time into RMTP. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/nanosleep.html>. */ # if @GNULIB_NANOSLEEP@ # if @REPLACE_NANOSLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define nanosleep rpl_nanosleep # endif _GL_FUNCDECL_RPL (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp)); # else # if ! @HAVE_NANOSLEEP@ _GL_FUNCDECL_SYS (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (nanosleep, int, (struct timespec const *__rqtp, struct timespec *__rmtp)); # endif _GL_CXXALIASWARN (nanosleep); # endif /* Initialize time conversion information. */ # if @GNULIB_TZSET@ # if @REPLACE_TZSET@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset rpl_tzset # endif _GL_FUNCDECL_RPL (tzset, void, (void)); _GL_CXXALIAS_RPL (tzset, void, (void)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset _tzset # endif _GL_CXXALIAS_MDA (tzset, void, (void)); # else _GL_CXXALIAS_SYS (tzset, void, (void)); # endif _GL_CXXALIASWARN (tzset); # elif @GNULIB_MDA_TZSET@ /* On native Windows, map 'tzset' to '_tzset', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::tzset always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tzset # define tzset _tzset # endif _GL_CXXALIAS_MDA (tzset, void, (void)); # else _GL_CXXALIAS_SYS (tzset, void, (void)); # endif _GL_CXXALIASWARN (tzset); # endif /* Return the 'time_t' representation of TP and normalize TP. */ # if @GNULIB_MKTIME@ # if @REPLACE_MKTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define mktime rpl_mktime # endif _GL_FUNCDECL_RPL (mktime, time_t, (struct tm *__tp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (mktime, time_t, (struct tm *__tp)); # else _GL_CXXALIAS_SYS (mktime, time_t, (struct tm *__tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (mktime); # endif # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime_r.html> and <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime_r.html>. */ # if @GNULIB_TIME_R@ # if @REPLACE_LOCALTIME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localtime_r # define localtime_r rpl_localtime_r # endif _GL_FUNCDECL_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # else # if ! @HAVE_DECL_LOCALTIME_R@ _GL_FUNCDECL_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (localtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # endif # if @HAVE_DECL_LOCALTIME_R@ _GL_CXXALIASWARN (localtime_r); # endif # if @REPLACE_LOCALTIME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gmtime_r # define gmtime_r rpl_gmtime_r # endif _GL_FUNCDECL_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # else # if ! @HAVE_DECL_LOCALTIME_R@ _GL_FUNCDECL_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (gmtime_r, struct tm *, (time_t const *restrict __timer, struct tm *restrict __result)); # endif # if @HAVE_DECL_LOCALTIME_R@ _GL_CXXALIASWARN (gmtime_r); # endif # endif /* Convert TIMER to RESULT, assuming local time and UTC respectively. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/localtime.html> and <https://pubs.opengroup.org/onlinepubs/9699919799/functions/gmtime.html>. */ # if @GNULIB_LOCALTIME@ || @REPLACE_LOCALTIME@ # if @REPLACE_LOCALTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef localtime # define localtime rpl_localtime # endif _GL_FUNCDECL_RPL (localtime, struct tm *, (time_t const *__timer) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (localtime, struct tm *, (time_t const *__timer)); # else _GL_CXXALIAS_SYS (localtime, struct tm *, (time_t const *__timer)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (localtime); # endif # endif # if 0 || @REPLACE_GMTIME@ # if @REPLACE_GMTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gmtime # define gmtime rpl_gmtime # endif _GL_FUNCDECL_RPL (gmtime, struct tm *, (time_t const *__timer) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gmtime, struct tm *, (time_t const *__timer)); # else _GL_CXXALIAS_SYS (gmtime, struct tm *, (time_t const *__timer)); # endif _GL_CXXALIASWARN (gmtime); # endif /* Parse BUF as a timestamp, assuming FORMAT specifies its layout, and store the resulting broken-down time into TM. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strptime.html>. */ # if @GNULIB_STRPTIME@ # if ! @HAVE_STRPTIME@ _GL_FUNCDECL_SYS (strptime, char *, (char const *restrict __buf, char const *restrict __format, struct tm *restrict __tm) _GL_ARG_NONNULL ((1, 2, 3))); # endif _GL_CXXALIAS_SYS (strptime, char *, (char const *restrict __buf, char const *restrict __format, struct tm *restrict __tm)); _GL_CXXALIASWARN (strptime); # endif /* Convert *TP to a date and time string. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ctime.html>. */ # if @GNULIB_CTIME@ # if @REPLACE_CTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define ctime rpl_ctime # endif _GL_FUNCDECL_RPL (ctime, char *, (time_t const *__tp) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (ctime, char *, (time_t const *__tp)); # else _GL_CXXALIAS_SYS (ctime, char *, (time_t const *__tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ctime); # endif # endif /* Convert *TP to a date and time string. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/strftime.html>. */ # if @GNULIB_STRFTIME@ # if @REPLACE_STRFTIME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define strftime rpl_strftime # endif _GL_FUNCDECL_RPL (strftime, size_t, (char *restrict __buf, size_t __bufsize, const char *restrict __fmt, const struct tm *restrict __tp) _GL_ARG_NONNULL ((1, 3, 4))); _GL_CXXALIAS_RPL (strftime, size_t, (char *restrict __buf, size_t __bufsize, const char *restrict __fmt, const struct tm *restrict __tp)); # else _GL_CXXALIAS_SYS (strftime, size_t, (char *restrict __buf, size_t __bufsize, const char *restrict __fmt, const struct tm *restrict __tp)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (strftime); # endif # endif # if defined _GNU_SOURCE && @GNULIB_TIME_RZ@ && ! @HAVE_TIMEZONE_T@ /* Functions that use a first-class time zone data type, instead of relying on an implicit global time zone. Inspired by NetBSD. */ /* Represents a time zone. (timezone_t) NULL stands for UTC. */ typedef struct tm_zone *timezone_t; /* tzalloc (name) Returns a time zone object for the given time zone NAME. This object represents the time zone that other functions would use it the TZ environment variable was set to NAME. If NAME is NULL, the result represents the time zone that other functions would use it the TZ environment variable was unset. May return NULL if NAME is invalid (this is platform dependent) or upon memory allocation failure. */ _GL_FUNCDECL_SYS (tzalloc, timezone_t, (char const *__name)); _GL_CXXALIAS_SYS (tzalloc, timezone_t, (char const *__name)); /* tzfree (tz) Frees a time zone object. The argument must have been returned by tzalloc(). */ _GL_FUNCDECL_SYS (tzfree, void, (timezone_t __tz)); _GL_CXXALIAS_SYS (tzfree, void, (timezone_t __tz)); /* localtime_rz (tz, &t, &result) Converts an absolute time T to a broken-down time RESULT, assuming the time zone TZ. This function is like 'localtime_r', but relies on the argument TZ instead of an implicit global time zone. */ _GL_FUNCDECL_SYS (localtime_rz, struct tm *, (timezone_t __tz, time_t const *restrict __timer, struct tm *restrict __result) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_SYS (localtime_rz, struct tm *, (timezone_t __tz, time_t const *restrict __timer, struct tm *restrict __result)); /* mktime_z (tz, &tm) Normalizes the broken-down time TM and converts it to an absolute time, assuming the time zone TZ. Returns the absolute time. This function is like 'mktime', but relies on the argument TZ instead of an implicit global time zone. */ _GL_FUNCDECL_SYS (mktime_z, time_t, (timezone_t __tz, struct tm *restrict __tm) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_SYS (mktime_z, time_t, (timezone_t __tz, struct tm *restrict __tm)); /* Time zone abbreviation strings (returned by 'localtime_rz' or 'mktime_z' in the 'tm_zone' member of 'struct tm') are valid as long as - the 'struct tm' argument is not destroyed or overwritten, and - the 'timezone_t' argument is not freed through tzfree(). */ # endif /* Convert TM to a time_t value, assuming UTC. */ # if @GNULIB_TIMEGM@ # if @REPLACE_TIMEGM@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef timegm # define timegm rpl_timegm # endif _GL_FUNCDECL_RPL (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (timegm, time_t, (struct tm *__tm)); # else # if ! @HAVE_TIMEGM@ _GL_FUNCDECL_SYS (timegm, time_t, (struct tm *__tm) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (timegm, time_t, (struct tm *__tm)); # endif _GL_CXXALIASWARN (timegm); # endif /* Encourage applications to avoid unsafe functions that can overrun buffers when given outlandish struct tm values. Portable applications should use strftime (or even sprintf) instead. */ # if defined GNULIB_POSIXCHECK # undef asctime _GL_WARN_ON_USE (asctime, "asctime can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # if defined GNULIB_POSIXCHECK # undef asctime_r _GL_WARN_ON_USE (asctime_r, "asctime_r can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # if defined GNULIB_POSIXCHECK # undef ctime _GL_WARN_ON_USE (ctime, "ctime can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif # if defined GNULIB_POSIXCHECK # undef ctime_r _GL_WARN_ON_USE (ctime_r, "ctime_r can overrun buffers in some cases - " "better use strftime (or even sprintf) instead"); # endif #endif ��������������������������������������������������������������������������������recutils-1.9/lib/explicit_bzero.c�������������������������������������������������������������������0000644�0000000�0000000�00000004744�14226564447�014067� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Erasure of sensitive data, generic implementation. Copyright (C) 2016-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ /* An assembler implementation of explicit_bzero can be created as an assembler alias of an optimized bzero implementation. Architecture-specific implementations also need to define __explicit_bzero_chk. */ #if !_LIBC # include <config.h> #endif /* memset_s need this define */ #if HAVE_MEMSET_S # define __STDC_WANT_LIB_EXT1__ 1 #endif #include <string.h> #if defined _WIN32 && !defined __CYGWIN__ # define WIN32_LEAN_AND_MEAN # include <windows.h> #endif #if _LIBC /* glibc-internal users use __explicit_bzero_chk, and explicit_bzero redirects to that. */ # undef explicit_bzero #endif /* Set LEN bytes of S to 0. The compiler will not delete a call to this function, even if S is dead after the call. */ void explicit_bzero (void *s, size_t len) { #if defined _WIN32 && !defined __CYGWIN__ (void) SecureZeroMemory (s, len); #elif HAVE_EXPLICIT_MEMSET explicit_memset (s, '\0', len); #elif HAVE_MEMSET_S (void) memset_s (s, len, '\0', len); #elif defined __GNUC__ && !defined __clang__ memset (s, '\0', len); /* Compiler barrier. */ asm volatile ("" ::: "memory"); #elif defined __clang__ memset (s, '\0', len); /* Compiler barrier. */ /* With asm ("" ::: "memory") LLVM analyzes uses of 's' and finds that the whole thing is dead and eliminates it. Use 'g' to work around this problem. See <https://bugs.llvm.org/show_bug.cgi?id=15495#c11>. */ __asm__ volatile ("" : : "g"(s) : "memory"); #else /* Invoke memset through a volatile function pointer. This defeats compiler optimizations. */ void * (* const volatile volatile_memset) (void *, int, size_t) = memset; (void) volatile_memset (s, '\0', len); #endif } ����������������������������recutils-1.9/lib/canonicalize.c���������������������������������������������������������������������0000644�0000000�0000000�00000036631�14226564446�013503� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the canonical absolute name of a given file. Copyright (C) 1996-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "canonicalize.h" #include <errno.h> #include <fcntl.h> #include <stdbool.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include <filename.h> #include <idx.h> #include <intprops.h> #include <scratch_buffer.h> #include "attribute.h" #include "file-set.h" #include "hash-triple.h" #include "xalloc.h" /* Suppress bogus GCC -Wmaybe-uninitialized warnings. */ #if defined GCC_LINT || defined lint # define IF_LINT(Code) Code #else # define IF_LINT(Code) /* empty */ #endif #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT false #endif #if ISSLASH ('\\') # define SLASHES "/\\" #else # define SLASHES "/" #endif /* Return true if FILE's existence can be shown, false (setting errno) otherwise. Follow symbolic links. */ static bool file_accessible (char const *file) { # if HAVE_FACCESSAT return faccessat (AT_FDCWD, file, F_OK, AT_EACCESS) == 0; # else struct stat st; return stat (file, &st) == 0 || errno == EOVERFLOW; # endif } /* True if concatenating END as a suffix to a file name means that the code needs to check that the file name is that of a searchable directory, since the canonicalize_filename_mode_stk code won't check this later anyway when it checks an ordinary file name component within END. END must either be empty, or start with a slash. */ static bool _GL_ATTRIBUTE_PURE suffix_requires_dir_check (char const *end) { /* If END does not start with a slash, the suffix is OK. */ while (ISSLASH (*end)) { /* Two or more slashes act like a single slash. */ do end++; while (ISSLASH (*end)); switch (*end++) { default: return false; /* An ordinary file name component is OK. */ case '\0': return true; /* Trailing "/" is trouble. */ case '.': break; /* Possibly "." or "..". */ } /* Trailing "/.", or "/.." even if not trailing, is trouble. */ if (!*end || (*end == '.' && (!end[1] || ISSLASH (end[1])))) return true; } return false; } /* Append this to a file name to test whether it is a searchable directory. On POSIX platforms "/" suffices, but "/./" is sometimes needed on macOS 10.13 <https://bugs.gnu.org/30350>, and should also work on platforms like AIX 7.2 that need at least "/.". */ #ifdef LSTAT_FOLLOWS_SLASHED_SYMLINK static char const dir_suffix[] = "/"; #else static char const dir_suffix[] = "/./"; #endif /* Return true if DIR is a searchable dir, false (setting errno) otherwise. DIREND points to the NUL byte at the end of the DIR string. Store garbage into DIREND[0 .. strlen (dir_suffix)]. */ static bool dir_check (char *dir, char *dirend) { strcpy (dirend, dir_suffix); return file_accessible (dir); } #if !((HAVE_CANONICALIZE_FILE_NAME && FUNC_REALPATH_WORKS) \ || GNULIB_CANONICALIZE_LGPL) /* Return the canonical absolute name of file NAME. A canonical name does not contain any ".", ".." components nor any repeated file name separators ('/') or symlinks. All components must exist. The result is malloc'd. */ char * canonicalize_file_name (const char *name) { return canonicalize_filename_mode (name, CAN_EXISTING); } #endif /* !HAVE_CANONICALIZE_FILE_NAME */ static bool multiple_bits_set (canonicalize_mode_t i) { return (i & (i - 1)) != 0; } /* Return true if we've already seen the triple, <FILENAME, dev, ino>. If *HT is not initialized, initialize it. */ static bool seen_triple (Hash_table **ht, char const *filename, struct stat const *st) { if (*ht == NULL) { idx_t initial_capacity = 7; *ht = hash_initialize (initial_capacity, NULL, triple_hash, triple_compare_ino_str, triple_free); if (*ht == NULL) xalloc_die (); } if (seen_file (*ht, filename, st)) return true; record_file (*ht, filename, st); return false; } /* Act like canonicalize_filename_mode (see below), with an additional argument rname_buf that can be used as temporary storage. If GCC_LINT is defined, do not inline this function with GCC 10.1 and later, to avoid creating a pointer to the stack that GCC -Wreturn-local-addr incorrectly complains about. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644 Although the noinline attribute can hurt performance a bit, no better way to pacify GCC is known; even an explicit #pragma does not pacify GCC. When the GCC bug is fixed this workaround should be limited to the broken GCC versions. */ #if _GL_GNUC_PREREQ (10, 1) # if defined GCC_LINT || defined lint __attribute__ ((__noinline__)) # elif __OPTIMIZE__ && !__NO_INLINE__ # define GCC_BOGUS_WRETURN_LOCAL_ADDR # endif #endif static char * canonicalize_filename_mode_stk (const char *name, canonicalize_mode_t can_mode, struct scratch_buffer *rname_buf) { char *dest; char const *start; char const *end; Hash_table *ht = NULL; bool logical = (can_mode & CAN_NOLINKS) != 0; int num_links = 0; canonicalize_mode_t can_exist = can_mode & CAN_MODE_MASK; if (multiple_bits_set (can_exist)) { errno = EINVAL; return NULL; } if (name == NULL) { errno = EINVAL; return NULL; } if (name[0] == '\0') { errno = ENOENT; return NULL; } struct scratch_buffer extra_buffer, link_buffer; scratch_buffer_init (&extra_buffer); scratch_buffer_init (&link_buffer); scratch_buffer_init (rname_buf); char *rname_on_stack = rname_buf->data; char *rname = rname_on_stack; bool end_in_extra_buffer = false; bool failed = true; /* This is always zero for Posix hosts, but can be 2 for MS-Windows and MS-DOS X:/foo/bar file names. */ idx_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); if (!IS_ABSOLUTE_FILE_NAME (name)) { while (!getcwd (rname, rname_buf->length)) { switch (errno) { case ERANGE: if (scratch_buffer_grow (rname_buf)) break; FALLTHROUGH; case ENOMEM: xalloc_die (); default: dest = rname; goto error; } rname = rname_buf->data; } dest = rawmemchr (rname, '\0'); start = name; prefix_len = FILE_SYSTEM_PREFIX_LEN (rname); } else { dest = mempcpy (rname, name, prefix_len); *dest++ = '/'; if (DOUBLE_SLASH_IS_DISTINCT_ROOT) { if (prefix_len == 0 /* implies ISSLASH (name[0]) */ && ISSLASH (name[1]) && !ISSLASH (name[2])) { *dest++ = '/'; #if defined _WIN32 && !defined __CYGWIN__ /* For UNC file names '\\server\path\to\file', extend the prefix to include the server: '\\server\'. */ { idx_t i; for (i = 2; name[i] != '\0' && !ISSLASH (name[i]); ) i++; if (name[i] != '\0' /* implies ISSLASH (name[i]) */ && i + 1 < rname_buf->length) { prefix_len = i; memcpy (dest, name + 2, i - 2 + 1); dest += i - 2 + 1; } else { /* Either name = '\\server'; this is an invalid file name. Or name = '\\server\...' and server is more than rname_buf->length - 4 bytes long. In either case, stop the UNC processing. */ } } #endif } *dest = '\0'; } start = name + prefix_len; } for ( ; *start; start = end) { /* Skip sequence of multiple file name separators. */ while (ISSLASH (*start)) ++start; /* Find end of component. */ for (end = start; *end && !ISSLASH (*end); ++end) /* Nothing. */; /* Length of this file name component; it can be zero if a file name ends in '/'. */ idx_t startlen = end - start; if (startlen == 0) break; else if (startlen == 1 && start[0] == '.') /* nothing */; else if (startlen == 2 && start[0] == '.' && start[1] == '.') { /* Back up to previous component, ignore if at root already. */ if (dest > rname + prefix_len + 1) for (--dest; dest > rname && !ISSLASH (dest[-1]); --dest) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && !prefix_len && ISSLASH (*dest) && !ISSLASH (dest[1])) dest++; } else { if (!ISSLASH (dest[-1])) *dest++ = '/'; while (rname + rname_buf->length - dest < startlen + sizeof dir_suffix) { idx_t dest_offset = dest - rname; if (!scratch_buffer_grow_preserve (rname_buf)) xalloc_die (); rname = rname_buf->data; dest = rname + dest_offset; } dest = mempcpy (dest, start, startlen); *dest = '\0'; char *buf; ssize_t n = -1; if (!logical) { while (true) { buf = link_buffer.data; idx_t bufsize = link_buffer.length; n = readlink (rname, buf, bufsize - 1); if (n < bufsize - 1) break; if (!scratch_buffer_grow (&link_buffer)) xalloc_die (); } } if (0 <= n) { /* A physical traversal and RNAME is a symbolic link. */ if (num_links < 20) num_links++; else if (*start) { /* Enough symlinks have been seen that it is time to worry about being in a symlink cycle. Get the device and inode of the parent directory, as pre-2017 POSIX says this info is not reliable for symlinks. */ struct stat st; dest[- startlen] = '\0'; if (stat (*rname ? rname : ".", &st) != 0) goto error; dest[- startlen] = *start; /* Detect loops. We cannot use the cycle-check module here, since it's possible to encounter the same parent directory more than once in a given traversal. However, encountering the same (parentdir, START) pair twice does indicate a loop. */ if (seen_triple (&ht, start, &st)) { if (can_exist == CAN_MISSING) continue; errno = ELOOP; goto error; } } buf[n] = '\0'; char *extra_buf = extra_buffer.data; idx_t end_idx IF_LINT (= 0); if (end_in_extra_buffer) end_idx = end - extra_buf; size_t len = strlen (end); if (INT_ADD_OVERFLOW (len, n)) xalloc_die (); while (extra_buffer.length <= len + n) { if (!scratch_buffer_grow_preserve (&extra_buffer)) xalloc_die (); extra_buf = extra_buffer.data; } if (end_in_extra_buffer) end = extra_buf + end_idx; /* Careful here, end may be a pointer into extra_buf... */ memmove (&extra_buf[n], end, len + 1); name = end = memcpy (extra_buf, buf, n); end_in_extra_buffer = true; if (IS_ABSOLUTE_FILE_NAME (buf)) { idx_t pfxlen = FILE_SYSTEM_PREFIX_LEN (buf); dest = mempcpy (rname, buf, pfxlen); *dest++ = '/'; /* It's an absolute symlink */ if (DOUBLE_SLASH_IS_DISTINCT_ROOT) { if (ISSLASH (buf[1]) && !ISSLASH (buf[2]) && !pfxlen) *dest++ = '/'; *dest = '\0'; } /* Install the new prefix to be in effect hereafter. */ prefix_len = pfxlen; } else { /* Back up to previous component, ignore if at root already: */ if (dest > rname + prefix_len + 1) for (--dest; dest > rname && !ISSLASH (dest[-1]); --dest) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && ISSLASH (*dest) && !ISSLASH (dest[1]) && !prefix_len) dest++; } } else if (! (can_exist == CAN_MISSING || (suffix_requires_dir_check (end) ? dir_check (rname, dest) : !logical ? errno == EINVAL : *end || file_accessible (rname)) || (can_exist == CAN_ALL_BUT_LAST && errno == ENOENT && !end[strspn (end, SLASHES)]))) goto error; } } if (dest > rname + prefix_len + 1 && ISSLASH (dest[-1])) --dest; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && !prefix_len && ISSLASH (*dest) && !ISSLASH (dest[1])) dest++; failed = false; error: if (ht) hash_free (ht); scratch_buffer_free (&extra_buffer); scratch_buffer_free (&link_buffer); if (failed) { scratch_buffer_free (rname_buf); return NULL; } *dest++ = '\0'; char *result = scratch_buffer_dupfree (rname_buf, dest - rname); if (!result) xalloc_die (); return result; } /* Return the canonical absolute name of file NAME, while treating missing elements according to CAN_MODE. A canonical name does not contain any ".", ".." components nor any repeated file name separators ('/') or, depending on other CAN_MODE flags, symlinks. Whether components must exist or not depends on canonicalize mode. The result is malloc'd. */ char * canonicalize_filename_mode (const char *name, canonicalize_mode_t can_mode) { #ifdef GCC_BOGUS_WRETURN_LOCAL_ADDR #warning "GCC might issue a bogus -Wreturn-local-addr warning here." #warning "See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644>." #endif struct scratch_buffer rname_buffer; return canonicalize_filename_mode_stk (name, can_mode, &rname_buffer); } �������������������������������������������������������������������������������������������������������recutils-1.9/lib/isnanf-nolibm.h��������������������������������������������������������������������0000644�0000000�0000000�00000003074�14226564450�013573� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if HAVE_ISNANF_IN_LIBC /* Get declaration of isnan macro or (older) isnanf function. */ # include <math.h> # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. GCC >= 4.0 also provides __builtin_isnanf, but clang doesn't. */ # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) # elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) # else /* Get declaration of isnanf(), if not declared in <math.h>. */ # if defined __sgi /* We can't include <ieeefp.h>, because it conflicts with our definition of isnand. Therefore declare isnanf separately. */ extern int isnanf (float x); # endif # endif #else /* Test whether X is a NaN. */ # undef isnanf # define isnanf rpl_isnanf extern int isnanf (float x); #endif ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getprogname.h����������������������������������������������������������������������0000644�0000000�0000000�00000002223�14226564450�013342� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Program name management. Copyright (C) 2016-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 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 Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GL_GETPROGNAME_H #define _GL_GETPROGNAME_H #include <stdlib.h> #ifdef __cplusplus extern "C" { #endif /* Return the base name of the executing program. On native Windows this will usually end in ".exe" or ".EXE". */ #ifndef HAVE_GETPROGNAME extern char const *getprogname (void) # ifdef HAVE_DECL_PROGRAM_INVOCATION_NAME _GL_ATTRIBUTE_PURE # endif ; #endif #ifdef __cplusplus } #endif #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/timespec.h�������������������������������������������������������������������������0000644�0000000�0000000�00000005435�14226564451�012654� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* timespec -- System time interface Copyright (C) 2000, 2002, 2004-2005, 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if ! defined TIMESPEC_H #define TIMESPEC_H #include <time.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_TIMESPEC_INLINE # define _GL_TIMESPEC_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif #include "arg-nonnull.h" /* Inverse resolution of timespec timestamps (in units per second), and log base 10 of the inverse resolution. */ enum { TIMESPEC_HZ = 1000000000 }; enum { LOG10_TIMESPEC_HZ = 9 }; /* Obsolescent names for backward compatibility. They are misnomers, because TIMESPEC_RESOLUTION is not a resolution. */ enum { TIMESPEC_RESOLUTION = TIMESPEC_HZ }; enum { LOG10_TIMESPEC_RESOLUTION = LOG10_TIMESPEC_HZ }; /* Return a timespec with seconds S and nanoseconds NS. */ _GL_TIMESPEC_INLINE struct timespec make_timespec (time_t s, long int ns) { struct timespec r; r.tv_sec = s; r.tv_nsec = ns; return r; } /* Return negative, zero, positive if A < B, A == B, A > B, respectively. */ _GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE timespec_cmp (struct timespec a, struct timespec b) { return 2 * _GL_CMP (a.tv_sec, b.tv_sec) + _GL_CMP (a.tv_nsec, b.tv_nsec); } /* Return -1, 0, 1, depending on the sign of A. A.tv_nsec must be nonnegative. */ _GL_TIMESPEC_INLINE int _GL_ATTRIBUTE_PURE timespec_sign (struct timespec a) { return _GL_CMP (a.tv_sec, 0) + (!a.tv_sec & !!a.tv_nsec); } struct timespec timespec_add (struct timespec, struct timespec) _GL_ATTRIBUTE_CONST; struct timespec timespec_sub (struct timespec, struct timespec) _GL_ATTRIBUTE_CONST; struct timespec dtotimespec (double) _GL_ATTRIBUTE_CONST; /* Return an approximation to A, of type 'double'. */ _GL_TIMESPEC_INLINE double timespectod (struct timespec a) { return a.tv_sec + a.tv_nsec / 1e9; } long int gettime_res (void); struct timespec current_timespec (void); void gettime (struct timespec *) _GL_ARG_NONNULL ((1)); int settime (struct timespec const *) _GL_ARG_NONNULL ((1)); #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/error.h����������������������������������������������������������������������������0000644�0000000�0000000�00000004460�14226564447�012176� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Declaration for error-reporting function Copyright (C) 1995-1997, 2003, 2006, 2008-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _ERROR_H #define _ERROR_H 1 /* Get _GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, _GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM. */ #include <stdio.h> #ifdef __cplusplus extern "C" { #endif /* Print a message with 'fprintf (stderr, FORMAT, ...)'; if ERRNUM is nonzero, follow it with ": " and strerror (ERRNUM). If STATUS is nonzero, terminate the program with 'exit (STATUS)'. */ extern void error (int __status, int __errnum, const char *__format, ...) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 3, 4)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 3, 4)) #endif ; extern void error_at_line (int __status, int __errnum, const char *__fname, unsigned int __lineno, const char *__format, ...) #if GNULIB_VFPRINTF_POSIX _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_STANDARD, 5, 6)) #else _GL_ATTRIBUTE_FORMAT ((_GL_ATTRIBUTE_SPEC_PRINTF_SYSTEM, 5, 6)) #endif ; /* If NULL, error will flush stdout, then print on stderr the program name, a colon and a space. Otherwise, error will call this function without parameters instead. */ extern void (*error_print_progname) (void); /* This variable is incremented each time 'error' is called. */ extern unsigned int error_message_count; /* Sometimes we want to have at most one error per line. This variable controls whether this mode is selected or not. */ extern int error_one_per_line; #ifdef __cplusplus } #endif #endif /* error.h */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fprintf.c��������������������������������������������������������������������������0000644�0000000�0000000�00000003254�14226564447�012510� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2004, 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include "fseterr.h" #include "vasnprintf.h" /* Print formatted output to the stream FP. Return string length of formatted string. On error, return a negative value. */ int fprintf (FILE *fp, const char *format, ...) { char buf[2000]; char *output; size_t len; size_t lenbuf = sizeof (buf); va_list args; va_start (args, format); output = vasnprintf (buf, &lenbuf, format, args); len = lenbuf; va_end (args); if (!output) { fseterr (fp); return -1; } if (fwrite (output, 1, len, fp) < len) { if (output != buf) free (output); return -1; } if (output != buf) free (output); if (len > INT_MAX) { errno = EOVERFLOW; fseterr (fp); return -1; } return len; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/basename-lgpl.h��������������������������������������������������������������������0000644�0000000�0000000�00000005324�14226564447�013554� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Extract the last component (base name) of a file name. Copyright (C) 1998, 2001, 2003-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _BASENAME_LGPL_H #define _BASENAME_LGPL_H #include <stddef.h> #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT 0 #endif #ifdef __cplusplus extern "C" { #endif /* Return the address of the last file name component of FILENAME. If FILENAME has some trailing slash(es), they are considered to be part of the last component. If FILENAME has no relative file name components because it is a file system root, return the empty string. Examples: FILENAME RESULT "foo.c" "foo.c" "foo/bar.c" "bar.c" "/foo/bar.c" "bar.c" "foo/bar/" "bar/" "foo/bar//" "bar//" "/" "" "//" "" "" "" The return value is a tail of the given FILENAME; do NOT free() it! */ /* This function was traditionally called 'basename', but we avoid this function name because * Various platforms have different functions in their libc. In particular, the glibc basename(), defined in <string.h>, does not consider trailing slashes to be part of the component: FILENAME RESULT "foo/bar/" "" "foo/bar//" "" * The 'basename' command eliminates trailing slashes and for a root produces a non-empty result: FILENAME RESULT "foo/bar/" "bar" "foo/bar//" "bar" "/" "/" "//" "/" */ extern char *last_component (char const *filename) _GL_ATTRIBUTE_PURE; /* Return the length of the basename FILENAME. Typically FILENAME is the value returned by base_name or last_component. Act like strlen (FILENAME), except omit all trailing slashes. */ extern size_t base_len (char const *filename) _GL_ATTRIBUTE_PURE; #ifdef __cplusplus } /* extern "C" */ #endif #endif /* _BASENAME_LGPL_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/math.c�����������������������������������������������������������������������������0000644�0000000�0000000�00000001533�14226564450�011761� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Inline functions for <math.h>. Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #define _GL_MATH_INLINE _GL_EXTERN_INLINE #include "math.h" typedef int dummy; ���������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/inttypes.in.h����������������������������������������������������������������������0000644�0000000�0000000�00000051232�14226564450�013322� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2006-2022 Free Software Foundation, Inc. Written by Paul Eggert, Bruno Haible, Derek Price. This file is part of gnulib. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* * ISO C 99 <inttypes.h> for platforms that lack it. * <https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/inttypes.h.html> */ #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* Include the original <inttypes.h> if it exists, and if this file has not been included yet or if this file includes gnulib stdint.h which in turn includes this file. The include_next requires a split double-inclusion guard. */ #if ! defined INTTYPES_H || defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H # if @HAVE_INTTYPES_H@ /* Some pre-C++11 <stdint.h> implementations need this. */ # if defined __cplusplus && ! defined __STDC_FORMAT_MACROS # define __STDC_FORMAT_MACROS 1 # endif # @INCLUDE_NEXT@ @NEXT_INTTYPES_H@ # define _GL_FINISHED_INCLUDING_SYSTEM_INTTYPES_H # endif #endif #if ! defined INTTYPES_H && ! defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H #define INTTYPES_H /* Include <stdint.h> or the gnulib replacement. But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <stdint.h> #endif /* Get CHAR_BIT, INT_MAX, LONG_MAX, etc. */ #include <limits.h> /* On mingw, __USE_MINGW_ANSI_STDIO only works if <stdio.h> is also included */ #if defined _WIN32 && ! defined __CYGWIN__ # include <stdio.h> #endif #if !(INT_MAX == 0x7fffffff && INT_MIN + INT_MAX == -1) # error "This file assumes that 'int' is 32-bit two's complement. Please report your platform and compiler to <bug-gnulib@gnu.org>." #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* 7.8.1 Macros for format specifiers */ #if defined _TNS_R_TARGET /* Tandem NonStop R series and compatible platforms released before July 2005 support %Ld but not %lld. */ # define _LONG_LONG_FORMAT_PREFIX "L" #else # define _LONG_LONG_FORMAT_PREFIX "ll" #endif #if !defined PRId8 # ifdef INT8_MAX # define PRId8 "d" # endif #endif #if !defined PRIi8 # ifdef INT8_MAX # define PRIi8 "i" # endif #endif #if !defined PRIo8 # ifdef UINT8_MAX # define PRIo8 "o" # endif #endif #if !defined PRIu8 # ifdef UINT8_MAX # define PRIu8 "u" # endif #endif #if !defined PRIx8 # ifdef UINT8_MAX # define PRIx8 "x" # endif #endif #if !defined PRIX8 # ifdef UINT8_MAX # define PRIX8 "X" # endif #endif #if !defined PRId16 # ifdef INT16_MAX # define PRId16 "d" # endif #endif #if !defined PRIi16 # ifdef INT16_MAX # define PRIi16 "i" # endif #endif #if !defined PRIo16 # ifdef UINT16_MAX # define PRIo16 "o" # endif #endif #if !defined PRIu16 # ifdef UINT16_MAX # define PRIu16 "u" # endif #endif #if !defined PRIx16 # ifdef UINT16_MAX # define PRIx16 "x" # endif #endif #if !defined PRIX16 # ifdef UINT16_MAX # define PRIX16 "X" # endif #endif #if !defined PRId32 # ifdef INT32_MAX # define PRId32 "d" # endif #endif #if !defined PRIi32 # ifdef INT32_MAX # define PRIi32 "i" # endif #endif #if !defined PRIo32 # ifdef UINT32_MAX # define PRIo32 "o" # endif #endif #if !defined PRIu32 # ifdef UINT32_MAX # define PRIu32 "u" # endif #endif #if !defined PRIx32 # ifdef UINT32_MAX # define PRIx32 "x" # endif #endif #if !defined PRIX32 # ifdef UINT32_MAX # define PRIX32 "X" # endif #endif #ifdef INT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) # define _PRI64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _PRI64_PREFIX "I64" # elif LONG_MAX >> 30 == 1 # define _PRI64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRId64 # define PRId64 _PRI64_PREFIX "d" # endif # if !defined PRIi64 # define PRIi64 _PRI64_PREFIX "i" # endif #endif #ifdef UINT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) # define _PRIu64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _PRIu64_PREFIX "I64" # elif ULONG_MAX >> 31 == 1 # define _PRIu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined PRIo64 # define PRIo64 _PRIu64_PREFIX "o" # endif # if !defined PRIu64 # define PRIu64 _PRIu64_PREFIX "u" # endif # if !defined PRIx64 # define PRIx64 _PRIu64_PREFIX "x" # endif # if !defined PRIX64 # define PRIX64 _PRIu64_PREFIX "X" # endif #endif #if !defined PRIdLEAST8 # define PRIdLEAST8 "d" #endif #if !defined PRIiLEAST8 # define PRIiLEAST8 "i" #endif #if !defined PRIoLEAST8 # define PRIoLEAST8 "o" #endif #if !defined PRIuLEAST8 # define PRIuLEAST8 "u" #endif #if !defined PRIxLEAST8 # define PRIxLEAST8 "x" #endif #if !defined PRIXLEAST8 # define PRIXLEAST8 "X" #endif #if !defined PRIdLEAST16 # define PRIdLEAST16 "d" #endif #if !defined PRIiLEAST16 # define PRIiLEAST16 "i" #endif #if !defined PRIoLEAST16 # define PRIoLEAST16 "o" #endif #if !defined PRIuLEAST16 # define PRIuLEAST16 "u" #endif #if !defined PRIxLEAST16 # define PRIxLEAST16 "x" #endif #if !defined PRIXLEAST16 # define PRIXLEAST16 "X" #endif #if !defined PRIdLEAST32 # define PRIdLEAST32 "d" #endif #if !defined PRIiLEAST32 # define PRIiLEAST32 "i" #endif #if !defined PRIoLEAST32 # define PRIoLEAST32 "o" #endif #if !defined PRIuLEAST32 # define PRIuLEAST32 "u" #endif #if !defined PRIxLEAST32 # define PRIxLEAST32 "x" #endif #if !defined PRIXLEAST32 # define PRIXLEAST32 "X" #endif #ifdef INT64_MAX # if !defined PRIdLEAST64 # define PRIdLEAST64 PRId64 # endif # if !defined PRIiLEAST64 # define PRIiLEAST64 PRIi64 # endif #endif #ifdef UINT64_MAX # if !defined PRIoLEAST64 # define PRIoLEAST64 PRIo64 # endif # if !defined PRIuLEAST64 # define PRIuLEAST64 PRIu64 # endif # if !defined PRIxLEAST64 # define PRIxLEAST64 PRIx64 # endif # if !defined PRIXLEAST64 # define PRIXLEAST64 PRIX64 # endif #endif #if !defined PRIdFAST8 # if INT_FAST8_MAX > INT32_MAX # define PRIdFAST8 PRId64 # else # define PRIdFAST8 "d" # endif #endif #if !defined PRIiFAST8 # if INT_FAST8_MAX > INT32_MAX # define PRIiFAST8 PRIi64 # else # define PRIiFAST8 "i" # endif #endif #if !defined PRIoFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIoFAST8 PRIo64 # else # define PRIoFAST8 "o" # endif #endif #if !defined PRIuFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIuFAST8 PRIu64 # else # define PRIuFAST8 "u" # endif #endif #if !defined PRIxFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIxFAST8 PRIx64 # else # define PRIxFAST8 "x" # endif #endif #if !defined PRIXFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define PRIXFAST8 PRIX64 # else # define PRIXFAST8 "X" # endif #endif #if !defined PRIdFAST16 # if INT_FAST16_MAX > INT32_MAX # define PRIdFAST16 PRId64 # else # define PRIdFAST16 "d" # endif #endif #if !defined PRIiFAST16 # if INT_FAST16_MAX > INT32_MAX # define PRIiFAST16 PRIi64 # else # define PRIiFAST16 "i" # endif #endif #if !defined PRIoFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIoFAST16 PRIo64 # else # define PRIoFAST16 "o" # endif #endif #if !defined PRIuFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIuFAST16 PRIu64 # else # define PRIuFAST16 "u" # endif #endif #if !defined PRIxFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIxFAST16 PRIx64 # else # define PRIxFAST16 "x" # endif #endif #if !defined PRIXFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define PRIXFAST16 PRIX64 # else # define PRIXFAST16 "X" # endif #endif #if !defined PRIdFAST32 # if INT_FAST32_MAX > INT32_MAX # define PRIdFAST32 PRId64 # else # define PRIdFAST32 "d" # endif #endif #if !defined PRIiFAST32 # if INT_FAST32_MAX > INT32_MAX # define PRIiFAST32 PRIi64 # else # define PRIiFAST32 "i" # endif #endif #if !defined PRIoFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIoFAST32 PRIo64 # else # define PRIoFAST32 "o" # endif #endif #if !defined PRIuFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIuFAST32 PRIu64 # else # define PRIuFAST32 "u" # endif #endif #if !defined PRIxFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIxFAST32 PRIx64 # else # define PRIxFAST32 "x" # endif #endif #if !defined PRIXFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define PRIXFAST32 PRIX64 # else # define PRIXFAST32 "X" # endif #endif #ifdef INT64_MAX # if !defined PRIdFAST64 # define PRIdFAST64 PRId64 # endif # if !defined PRIiFAST64 # define PRIiFAST64 PRIi64 # endif #endif #ifdef UINT64_MAX # if !defined PRIoFAST64 # define PRIoFAST64 PRIo64 # endif # if !defined PRIuFAST64 # define PRIuFAST64 PRIu64 # endif # if !defined PRIxFAST64 # define PRIxFAST64 PRIx64 # endif # if !defined PRIXFAST64 # define PRIXFAST64 PRIX64 # endif #endif #if !defined PRIdMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define PRIdMAX PRId64 # else # define PRIdMAX "ld" # endif #endif #if !defined PRIiMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define PRIiMAX PRIi64 # else # define PRIiMAX "li" # endif #endif #if !defined PRIoMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIoMAX PRIo64 # else # define PRIoMAX "lo" # endif #endif #if !defined PRIuMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIuMAX PRIu64 # else # define PRIuMAX "lu" # endif #endif #if !defined PRIxMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIxMAX PRIx64 # else # define PRIxMAX "lx" # endif #endif #if !defined PRIXMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define PRIXMAX PRIX64 # else # define PRIXMAX "lX" # endif #endif #if !defined PRIdPTR # ifdef INTPTR_MAX # define PRIdPTR @PRIPTR_PREFIX@ "d" # endif #endif #if !defined PRIiPTR # ifdef INTPTR_MAX # define PRIiPTR @PRIPTR_PREFIX@ "i" # endif #endif #if !defined PRIoPTR # ifdef UINTPTR_MAX # define PRIoPTR @PRIPTR_PREFIX@ "o" # endif #endif #if !defined PRIuPTR # ifdef UINTPTR_MAX # define PRIuPTR @PRIPTR_PREFIX@ "u" # endif #endif #if !defined PRIxPTR # ifdef UINTPTR_MAX # define PRIxPTR @PRIPTR_PREFIX@ "x" # endif #endif #if !defined PRIXPTR # ifdef UINTPTR_MAX # define PRIXPTR @PRIPTR_PREFIX@ "X" # endif #endif #if !defined SCNd8 # ifdef INT8_MAX # define SCNd8 "hhd" # endif #endif #if !defined SCNi8 # ifdef INT8_MAX # define SCNi8 "hhi" # endif #endif #if !defined SCNo8 # ifdef UINT8_MAX # define SCNo8 "hho" # endif #endif #if !defined SCNu8 # ifdef UINT8_MAX # define SCNu8 "hhu" # endif #endif #if !defined SCNx8 # ifdef UINT8_MAX # define SCNx8 "hhx" # endif #endif #if !defined SCNd16 # ifdef INT16_MAX # define SCNd16 "hd" # endif #endif #if !defined SCNi16 # ifdef INT16_MAX # define SCNi16 "hi" # endif #endif #if !defined SCNo16 # ifdef UINT16_MAX # define SCNo16 "ho" # endif #endif #if !defined SCNu16 # ifdef UINT16_MAX # define SCNu16 "hu" # endif #endif #if !defined SCNx16 # ifdef UINT16_MAX # define SCNx16 "hx" # endif #endif #if !defined SCNd32 # ifdef INT32_MAX # define SCNd32 "d" # endif #endif #if !defined SCNi32 # ifdef INT32_MAX # define SCNi32 "i" # endif #endif #if !defined SCNo32 # ifdef UINT32_MAX # define SCNo32 "o" # endif #endif #if !defined SCNu32 # ifdef UINT32_MAX # define SCNu32 "u" # endif #endif #if !defined SCNx32 # ifdef UINT32_MAX # define SCNx32 "x" # endif #endif #ifdef INT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @INT64_MAX_EQ_LONG_MAX@) # define _SCN64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _SCN64_PREFIX "I64" # elif LONG_MAX >> 30 == 1 # define _SCN64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNd64 # define SCNd64 _SCN64_PREFIX "d" # endif # if !defined SCNi64 # define SCNi64 _SCN64_PREFIX "i" # endif #endif #ifdef UINT64_MAX # if (@APPLE_UNIVERSAL_BUILD@ ? defined _LP64 : @UINT64_MAX_EQ_ULONG_MAX@) # define _SCNu64_PREFIX "l" # elif defined _MSC_VER || defined __MINGW32__ # define _SCNu64_PREFIX "I64" # elif ULONG_MAX >> 31 == 1 # define _SCNu64_PREFIX _LONG_LONG_FORMAT_PREFIX # endif # if !defined SCNo64 # define SCNo64 _SCNu64_PREFIX "o" # endif # if !defined SCNu64 # define SCNu64 _SCNu64_PREFIX "u" # endif # if !defined SCNx64 # define SCNx64 _SCNu64_PREFIX "x" # endif #endif #if !defined SCNdLEAST8 # define SCNdLEAST8 "hhd" #endif #if !defined SCNiLEAST8 # define SCNiLEAST8 "hhi" #endif #if !defined SCNoLEAST8 # define SCNoLEAST8 "hho" #endif #if !defined SCNuLEAST8 # define SCNuLEAST8 "hhu" #endif #if !defined SCNxLEAST8 # define SCNxLEAST8 "hhx" #endif #if !defined SCNdLEAST16 # define SCNdLEAST16 "hd" #endif #if !defined SCNiLEAST16 # define SCNiLEAST16 "hi" #endif #if !defined SCNoLEAST16 # define SCNoLEAST16 "ho" #endif #if !defined SCNuLEAST16 # define SCNuLEAST16 "hu" #endif #if !defined SCNxLEAST16 # define SCNxLEAST16 "hx" #endif #if !defined SCNdLEAST32 # define SCNdLEAST32 "d" #endif #if !defined SCNiLEAST32 # define SCNiLEAST32 "i" #endif #if !defined SCNoLEAST32 # define SCNoLEAST32 "o" #endif #if !defined SCNuLEAST32 # define SCNuLEAST32 "u" #endif #if !defined SCNxLEAST32 # define SCNxLEAST32 "x" #endif #ifdef INT64_MAX # if !defined SCNdLEAST64 # define SCNdLEAST64 SCNd64 # endif # if !defined SCNiLEAST64 # define SCNiLEAST64 SCNi64 # endif #endif #ifdef UINT64_MAX # if !defined SCNoLEAST64 # define SCNoLEAST64 SCNo64 # endif # if !defined SCNuLEAST64 # define SCNuLEAST64 SCNu64 # endif # if !defined SCNxLEAST64 # define SCNxLEAST64 SCNx64 # endif #endif #if !defined SCNdFAST8 # if INT_FAST8_MAX > INT32_MAX # define SCNdFAST8 SCNd64 # elif INT_FAST8_MAX == 0x7fff # define SCNdFAST8 "hd" # elif INT_FAST8_MAX == 0x7f # define SCNdFAST8 "hhd" # else # define SCNdFAST8 "d" # endif #endif #if !defined SCNiFAST8 # if INT_FAST8_MAX > INT32_MAX # define SCNiFAST8 SCNi64 # elif INT_FAST8_MAX == 0x7fff # define SCNiFAST8 "hi" # elif INT_FAST8_MAX == 0x7f # define SCNiFAST8 "hhi" # else # define SCNiFAST8 "i" # endif #endif #if !defined SCNoFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNoFAST8 SCNo64 # elif UINT_FAST8_MAX == 0xffff # define SCNoFAST8 "ho" # elif UINT_FAST8_MAX == 0xff # define SCNoFAST8 "hho" # else # define SCNoFAST8 "o" # endif #endif #if !defined SCNuFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNuFAST8 SCNu64 # elif UINT_FAST8_MAX == 0xffff # define SCNuFAST8 "hu" # elif UINT_FAST8_MAX == 0xff # define SCNuFAST8 "hhu" # else # define SCNuFAST8 "u" # endif #endif #if !defined SCNxFAST8 # if UINT_FAST8_MAX > UINT32_MAX # define SCNxFAST8 SCNx64 # elif UINT_FAST8_MAX == 0xffff # define SCNxFAST8 "hx" # elif UINT_FAST8_MAX == 0xff # define SCNxFAST8 "hhx" # else # define SCNxFAST8 "x" # endif #endif #if !defined SCNdFAST16 # if INT_FAST16_MAX > INT32_MAX # define SCNdFAST16 SCNd64 # elif INT_FAST16_MAX == 0x7fff # define SCNdFAST16 "hd" # else # define SCNdFAST16 "d" # endif #endif #if !defined SCNiFAST16 # if INT_FAST16_MAX > INT32_MAX # define SCNiFAST16 SCNi64 # elif INT_FAST16_MAX == 0x7fff # define SCNiFAST16 "hi" # else # define SCNiFAST16 "i" # endif #endif #if !defined SCNoFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNoFAST16 SCNo64 # elif UINT_FAST16_MAX == 0xffff # define SCNoFAST16 "ho" # else # define SCNoFAST16 "o" # endif #endif #if !defined SCNuFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNuFAST16 SCNu64 # elif UINT_FAST16_MAX == 0xffff # define SCNuFAST16 "hu" # else # define SCNuFAST16 "u" # endif #endif #if !defined SCNxFAST16 # if UINT_FAST16_MAX > UINT32_MAX # define SCNxFAST16 SCNx64 # elif UINT_FAST16_MAX == 0xffff # define SCNxFAST16 "hx" # else # define SCNxFAST16 "x" # endif #endif #if !defined SCNdFAST32 # if INT_FAST32_MAX > INT32_MAX # define SCNdFAST32 SCNd64 # else # define SCNdFAST32 "d" # endif #endif #if !defined SCNiFAST32 # if INT_FAST32_MAX > INT32_MAX # define SCNiFAST32 SCNi64 # else # define SCNiFAST32 "i" # endif #endif #if !defined SCNoFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNoFAST32 SCNo64 # else # define SCNoFAST32 "o" # endif #endif #if !defined SCNuFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNuFAST32 SCNu64 # else # define SCNuFAST32 "u" # endif #endif #if !defined SCNxFAST32 # if UINT_FAST32_MAX > UINT32_MAX # define SCNxFAST32 SCNx64 # else # define SCNxFAST32 "x" # endif #endif #ifdef INT64_MAX # if !defined SCNdFAST64 # define SCNdFAST64 SCNd64 # endif # if !defined SCNiFAST64 # define SCNiFAST64 SCNi64 # endif #endif #ifdef UINT64_MAX # if !defined SCNoFAST64 # define SCNoFAST64 SCNo64 # endif # if !defined SCNuFAST64 # define SCNuFAST64 SCNu64 # endif # if !defined SCNxFAST64 # define SCNxFAST64 SCNx64 # endif #endif #if !defined SCNdMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define SCNdMAX SCNd64 # else # define SCNdMAX "ld" # endif #endif #if !defined SCNiMAX # if @INT32_MAX_LT_INTMAX_MAX@ # define SCNiMAX SCNi64 # else # define SCNiMAX "li" # endif #endif #if !defined SCNoMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNoMAX SCNo64 # else # define SCNoMAX "lo" # endif #endif #if !defined SCNuMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNuMAX SCNu64 # else # define SCNuMAX "lu" # endif #endif #if !defined SCNxMAX # if @UINT32_MAX_LT_UINTMAX_MAX@ # define SCNxMAX SCNx64 # else # define SCNxMAX "lx" # endif #endif #if !defined SCNdPTR # ifdef INTPTR_MAX # define SCNdPTR @PRIPTR_PREFIX@ "d" # endif #endif #if !defined SCNiPTR # ifdef INTPTR_MAX # define SCNiPTR @PRIPTR_PREFIX@ "i" # endif #endif #if !defined SCNoPTR # ifdef UINTPTR_MAX # define SCNoPTR @PRIPTR_PREFIX@ "o" # endif #endif #if !defined SCNuPTR # ifdef UINTPTR_MAX # define SCNuPTR @PRIPTR_PREFIX@ "u" # endif #endif #if !defined SCNxPTR # ifdef UINTPTR_MAX # define SCNxPTR @PRIPTR_PREFIX@ "x" # endif #endif /* 7.8.2 Functions for greatest-width integer types */ #ifdef __cplusplus extern "C" { #endif #if @GNULIB_IMAXABS@ # if !@HAVE_DECL_IMAXABS@ extern intmax_t imaxabs (intmax_t); # endif #elif defined GNULIB_POSIXCHECK # undef imaxabs # if HAVE_RAW_DECL_IMAXABS _GL_WARN_ON_USE (imaxabs, "imaxabs is unportable - " "use gnulib module imaxabs for portability"); # endif #endif #if @GNULIB_IMAXDIV@ # if !@HAVE_IMAXDIV_T@ # if !GNULIB_defined_imaxdiv_t typedef struct { intmax_t quot; intmax_t rem; } imaxdiv_t; # define GNULIB_defined_imaxdiv_t 1 # endif # endif # if !@HAVE_DECL_IMAXDIV@ extern imaxdiv_t imaxdiv (intmax_t, intmax_t); # endif #elif defined GNULIB_POSIXCHECK # undef imaxdiv # if HAVE_RAW_DECL_IMAXDIV _GL_WARN_ON_USE (imaxdiv, "imaxdiv is unportable - " "use gnulib module imaxdiv for portability"); # endif #endif #if @GNULIB_STRTOIMAX@ # if @REPLACE_STRTOIMAX@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtoimax # define strtoimax rpl_strtoimax # endif _GL_FUNCDECL_RPL (strtoimax, intmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoimax, intmax_t, (const char *restrict, char **restrict, int)); # else # if !@HAVE_DECL_STRTOIMAX@ # undef strtoimax _GL_FUNCDECL_SYS (strtoimax, intmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoimax, intmax_t, (const char *restrict, char **restrict, int)); # endif _GL_CXXALIASWARN (strtoimax); #elif defined GNULIB_POSIXCHECK # undef strtoimax # if HAVE_RAW_DECL_STRTOIMAX _GL_WARN_ON_USE (strtoimax, "strtoimax is unportable - " "use gnulib module strtoimax for portability"); # endif #endif #if @GNULIB_STRTOUMAX@ # if @REPLACE_STRTOUMAX@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef strtoumax # define strtoumax rpl_strtoumax # endif _GL_FUNCDECL_RPL (strtoumax, uintmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (strtoumax, uintmax_t, (const char *restrict, char **restrict, int)); # else # if !@HAVE_DECL_STRTOUMAX@ # undef strtoumax _GL_FUNCDECL_SYS (strtoumax, uintmax_t, (const char *restrict, char **restrict, int) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (strtoumax, uintmax_t, (const char *restrict, char **restrict, int)); # endif _GL_CXXALIASWARN (strtoumax); #elif defined GNULIB_POSIXCHECK # undef strtoumax # if HAVE_RAW_DECL_STRTOUMAX _GL_WARN_ON_USE (strtoumax, "strtoumax is unportable - " "use gnulib module strtoumax for portability"); # endif #endif /* Don't bother defining or declaring wcstoimax and wcstoumax, since wide-character functions like this are hardly ever useful. */ #ifdef __cplusplus } #endif #endif /* !defined INTTYPES_H && !defined _GL_JUST_INCLUDE_SYSTEM_INTTYPES_H */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/pipe.c�����������������������������������������������������������������������������0000644�0000000�0000000�00000002536�14226564447�011777� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Create a pipe. Copyright (C) 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ /* Native Windows API. */ /* Get _pipe(). */ # include <io.h> /* Get _O_BINARY. */ # include <fcntl.h> int pipe (int fd[2]) { /* Mingw changes fd to {-1,-1} on failure, but this violates http://austingroupbugs.net/view.php?id=467 */ int tmp[2]; int result = _pipe (tmp, 4096, _O_BINARY); if (!result) { fd[0] = tmp[0]; fd[1] = tmp[1]; } return result; } #else # error "This platform lacks a pipe function, and Gnulib doesn't provide a replacement. This is a bug in Gnulib." #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/unsetenv.c�������������������������������������������������������������������������0000644�0000000�0000000�00000005514�14226564451�012703� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992, 1995-2002, 2005-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ #define _GL_ARG_NONNULL(params) #include <config.h> /* Specification. */ #include <stdlib.h> #include <errno.h> #if !_LIBC # define __set_errno(ev) ((errno) = (ev)) #endif #include <string.h> #include <unistd.h> #if !_LIBC # define __environ environ #endif #if _LIBC /* This lock protects against simultaneous modifications of 'environ'. */ # include <bits/libc-lock.h> __libc_lock_define_initialized (static, envlock) # define LOCK __libc_lock_lock (envlock) # define UNLOCK __libc_lock_unlock (envlock) #else # define LOCK # define UNLOCK #endif /* In the GNU C library we must keep the namespace clean. */ #ifdef _LIBC # define unsetenv __unsetenv #endif #if _LIBC || !HAVE_UNSETENV int unsetenv (const char *name) { size_t len; char **ep; if (name == NULL || *name == '\0' || strchr (name, '=') != NULL) { __set_errno (EINVAL); return -1; } len = strlen (name); LOCK; ep = __environ; while (*ep != NULL) if (!strncmp (*ep, name, len) && (*ep)[len] == '=') { /* Found it. Remove this pointer by moving later ones back. */ char **dp = ep; do dp[0] = dp[1]; while (*dp++); /* Continue the loop in case NAME appears again. */ } else ++ep; UNLOCK; return 0; } #ifdef _LIBC # undef unsetenv weak_alias (__unsetenv, unsetenv) #endif #else /* HAVE_UNSETENV */ # undef unsetenv # if !HAVE_DECL_UNSETENV # if VOID_UNSETENV extern void unsetenv (const char *); # else extern int unsetenv (const char *); # endif # endif /* Call the underlying unsetenv, in case there is hidden bookkeeping that needs updating beyond just modifying environ. */ int rpl_unsetenv (const char *name) { int result = 0; if (!name || !*name || strchr (name, '=')) { errno = EINVAL; return -1; } while (getenv (name)) # if !VOID_UNSETENV result = # endif unsetenv (name); return result; } #endif /* HAVE_UNSETENV */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/spawn_faction_addchdir.c�����������������������������������������������������������0000644�0000000�0000000�00000004107�14226564447�015513� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2018-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <errno.h> #include <stdlib.h> #include <string.h> #if REPLACE_POSIX_SPAWN # include "spawn_int.h" #endif /* Add an action to FILE-ACTIONS which tells the implementation to call 'chdir' to the given directory during the 'spawn' call. */ int posix_spawn_file_actions_addchdir (posix_spawn_file_actions_t *file_actions, const char *path) #undef posix_spawn_file_actions_addchdir { #if !REPLACE_POSIX_SPAWN return posix_spawn_file_actions_addchdir_np (file_actions, path); #else { /* Copy PATH, because the caller may free it before calling posix_spawn() or posix_spawnp(). */ char *path_copy = strdup (path); if (path_copy == NULL) return ENOMEM; /* Allocate more memory if needed. */ if (file_actions->_used == file_actions->_allocated && __posix_spawn_file_actions_realloc (file_actions) != 0) { /* This can only mean we ran out of memory. */ free (path_copy); return ENOMEM; } { struct __spawn_action *rec; /* Add the new value. */ rec = &file_actions->_actions[file_actions->_used]; rec->tag = spawn_do_chdir; rec->action.chdir_action.path = path_copy; /* Account for the new entry. */ ++file_actions->_used; return 0; } } #endif } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/euidaccess.c�����������������������������������������������������������������������0000644�0000000�0000000�00000014157�14226564447�013154� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* euidaccess -- check if effective user id can access file Copyright (C) 1990-1991, 1995, 1998, 2000, 2003-2006, 2008-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by David MacKenzie and Torbjorn Granlund. Adapted for GNU C library by Roland McGrath. */ #ifndef _LIBC # include <config.h> #endif #include <fcntl.h> #include <sys/types.h> #include <sys/stat.h> #include <unistd.h> #if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> #else # include "root-uid.h" #endif #if HAVE_LIBGEN_H # include <libgen.h> #endif #include <errno.h> #ifndef __set_errno # define __set_errno(val) errno = (val) #endif #if defined EACCES && !defined EACCESS # define EACCESS EACCES #endif #ifndef F_OK # define F_OK 0 # define X_OK 1 # define W_OK 2 # define R_OK 4 #endif #ifdef _LIBC # define access __access # define getuid __getuid # define getgid __getgid # define geteuid __geteuid # define getegid __getegid # define group_member __group_member # define euidaccess __euidaccess # undef stat # define stat stat64 #endif /* Return 0 if the user has permission of type MODE on FILE; otherwise, return -1 and set 'errno'. Like access, except that it uses the effective user and group id's instead of the real ones, and it does not always check for read-only file system, text busy, etc. */ int euidaccess (const char *file, int mode) { #if HAVE_FACCESSAT /* glibc, AIX 7, Solaris 11, Cygwin 1.7 */ return faccessat (AT_FDCWD, file, mode, AT_EACCESS); #elif defined EFF_ONLY_OK /* IRIX, OSF/1, Interix */ return access (file, mode | EFF_ONLY_OK); #elif defined ACC_SELF /* AIX */ return accessx (file, mode, ACC_SELF); #elif HAVE_EACCESS /* FreeBSD */ return eaccess (file, mode); #elif defined _WIN32 && ! defined __CYGWIN__ /* mingw */ return _access (file, mode); #else /* Mac OS X, NetBSD, OpenBSD, HP-UX, Solaris, Cygwin, BeOS */ uid_t uid = getuid (); gid_t gid = getgid (); uid_t euid = geteuid (); gid_t egid = getegid (); struct stat stats; # if HAVE_DECL_SETREGID && PREFER_NONREENTRANT_EUIDACCESS /* Define PREFER_NONREENTRANT_EUIDACCESS if you prefer euidaccess to return the correct result even if this would make it nonreentrant. Define this only if your entire application is safe even if the uid or gid might temporarily change. If your application uses signal handlers or threads it is probably not safe. */ if (mode == F_OK) { int result = stat (file, &stats); return result != 0 && errno == EOVERFLOW ? 0 : result; } else { int result; int saved_errno; if (uid != euid) setreuid (euid, uid); if (gid != egid) setregid (egid, gid); result = access (file, mode); saved_errno = errno; /* Restore them. */ if (uid != euid) setreuid (uid, euid); if (gid != egid) setregid (gid, egid); errno = saved_errno; return result; } # else /* The following code assumes the traditional Unix model, and is not correct on systems that have ACLs or the like. However, it's better than nothing, and it is reentrant. */ unsigned int granted; if (uid == euid && gid == egid) /* If we are not set-uid or set-gid, access does the same. */ return access (file, mode); if (stat (file, &stats) == -1) return mode == F_OK && errno == EOVERFLOW ? 0 : -1; /* The super-user can read and write any file, and execute any file that anyone can execute. */ if (euid == ROOT_UID && ((mode & X_OK) == 0 || (stats.st_mode & (S_IXUSR | S_IXGRP | S_IXOTH)))) return 0; /* Convert the mode to traditional form, clearing any bogus bits. */ if (R_OK == 4 && W_OK == 2 && X_OK == 1 && F_OK == 0) mode &= 7; else mode = ((mode & R_OK ? 4 : 0) + (mode & W_OK ? 2 : 0) + (mode & X_OK ? 1 : 0)); if (mode == 0) return 0; /* The file exists. */ /* Convert the file's permission bits to traditional form. */ if (S_IRUSR == (4 << 6) && S_IWUSR == (2 << 6) && S_IXUSR == (1 << 6) && S_IRGRP == (4 << 3) && S_IWGRP == (2 << 3) && S_IXGRP == (1 << 3) && S_IROTH == (4 << 0) && S_IWOTH == (2 << 0) && S_IXOTH == (1 << 0)) granted = stats.st_mode; else granted = ((stats.st_mode & S_IRUSR ? 4 << 6 : 0) + (stats.st_mode & S_IWUSR ? 2 << 6 : 0) + (stats.st_mode & S_IXUSR ? 1 << 6 : 0) + (stats.st_mode & S_IRGRP ? 4 << 3 : 0) + (stats.st_mode & S_IWGRP ? 2 << 3 : 0) + (stats.st_mode & S_IXGRP ? 1 << 3 : 0) + (stats.st_mode & S_IROTH ? 4 << 0 : 0) + (stats.st_mode & S_IWOTH ? 2 << 0 : 0) + (stats.st_mode & S_IXOTH ? 1 << 0 : 0)); if (euid == stats.st_uid) granted >>= 6; else if (egid == stats.st_gid || group_member (stats.st_gid)) granted >>= 3; if ((mode & ~granted) == 0) return 0; __set_errno (EACCESS); return -1; # endif #endif } #undef euidaccess #ifdef weak_alias weak_alias (__euidaccess, euidaccess) #endif #ifdef TEST # include <error.h> # include <stdio.h> # include <stdlib.h> int main (int argc, char **argv) { char *file; int mode; int err; if (argc < 3) abort (); file = argv[1]; mode = atoi (argv[2]); err = euidaccess (file, mode); printf ("%d\n", err); if (err != 0) error (0, errno, "%s", file); exit (0); } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/strftime.h�������������������������������������������������������������������������0000644�0000000�0000000�00000002644�14226564451�012677� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* declarations for strftime.c Copyright (C) 2002, 2004, 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <time.h> #ifdef __cplusplus extern "C" { #endif /* Just like strftime, but with two more arguments: POSIX requires that strftime use the local timezone information. Use the timezone __TZ instead. Use __NS as the number of nanoseconds in the %N directive. On error, set errno and return 0. Otherwise, return the number of bytes generated (not counting the trailing NUL), preserving errno if the number is 0. This errno behavior is in draft POSIX 202x plus some requested changes to POSIX. */ size_t nstrftime (char *restrict, size_t, char const *, struct tm const *, timezone_t __tz, int __ns); #ifdef __cplusplus } #endif ��������������������������������������������������������������������������������������������recutils-1.9/lib/msvc-inval.h�����������������������������������������������������������������������0000644�0000000�0000000�00000021226�14226564450�013115� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _MSVC_INVAL_H #define _MSVC_INVAL_H /* With MSVC runtime libraries with the "invalid parameter handler" concept, functions like fprintf(), dup2(), or close() crash when the caller passes an invalid argument. But POSIX wants error codes (such as EINVAL or EBADF) instead. This file defines macros that turn such an invalid parameter notification into a non-local exit. An error code can then be produced at the target of this exit. You can thus write code like TRY_MSVC_INVAL { <Code that can trigger an invalid parameter notification but does not do 'return', 'break', 'continue', nor 'goto'.> } CATCH_MSVC_INVAL { <Code that handles an invalid parameter notification but does not do 'return', 'break', 'continue', nor 'goto'.> } DONE_MSVC_INVAL; This entire block expands to a single statement. The handling of invalid parameters can be done in three ways: * The default way, which is reasonable for programs (not libraries): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [DEFAULT_HANDLING]) * The way for libraries that make "hairy" calls (like close(-1), or fclose(fp) where fileno(fp) is closed, or simply getdtablesize()): AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [HAIRY_LIBRARY_HANDLING]) * The way for libraries that make no "hairy" calls: AC_DEFINE([MSVC_INVALID_PARAMETER_HANDLING], [SANE_LIBRARY_HANDLING]) */ #define DEFAULT_HANDLING 0 #define HAIRY_LIBRARY_HANDLING 1 #define SANE_LIBRARY_HANDLING 2 #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* A native Windows platform with the "invalid parameter handler" concept, and either DEFAULT_HANDLING or HAIRY_LIBRARY_HANDLING. */ # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING /* Default handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that just returns. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) # else /* Handling for hairy libraries. */ # include <excpt.h> /* Gnulib can define its own status codes, as described in the page "Raising Software Exceptions" on microsoft.com <https://docs.microsoft.com/en-us/cpp/cpp/raising-software-exceptions>. Our status codes are composed of - 0xE0000000, mandatory for all user-defined status codes, - 0x474E550, a API identifier ("GNU"), - 0, 1, 2, ..., used to distinguish different status codes from the same API. */ # define STATUS_GNULIB_INVALID_PARAMETER (0xE0000000 + 0x474E550 + 0) # if defined _MSC_VER /* A compiler that supports __try/__except, as described in the page "try-except statement" on microsoft.com <https://docs.microsoft.com/en-us/cpp/cpp/try-except-statement>. With __try/__except, we can use the multithread-safe exception handling. */ # ifdef __cplusplus extern "C" { # endif /* Ensure that the invalid parameter handler in installed that raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ gl_msvc_inval_ensure_handler (); \ __try # define CATCH_MSVC_INVAL \ __except (GetExceptionCode () == STATUS_GNULIB_INVALID_PARAMETER \ ? EXCEPTION_EXECUTE_HANDLER \ : EXCEPTION_CONTINUE_SEARCH) # define DONE_MSVC_INVAL \ } \ while (0) # else /* Any compiler. We can only use setjmp/longjmp. */ # include <setjmp.h> # ifdef __cplusplus extern "C" { # endif struct gl_msvc_inval_per_thread { /* The restart that will resume execution at the code between CATCH_MSVC_INVAL and DONE_MSVC_INVAL. It is enabled only between TRY_MSVC_INVAL and CATCH_MSVC_INVAL. */ jmp_buf restart; /* Tells whether the contents of restart is valid. */ int restart_valid; }; /* Ensure that the invalid parameter handler in installed that passes control to the gl_msvc_inval_restart if it is valid, or raises a software exception with code STATUS_GNULIB_INVALID_PARAMETER otherwise. Because we assume no other part of the program installs a different invalid parameter handler, this solution is multithread-safe. */ extern void gl_msvc_inval_ensure_handler (void); /* Return a pointer to the per-thread data for the current thread. */ extern struct gl_msvc_inval_per_thread *gl_msvc_inval_current (void); # ifdef __cplusplus } # endif # define TRY_MSVC_INVAL \ do \ { \ struct gl_msvc_inval_per_thread *msvc_inval_current; \ gl_msvc_inval_ensure_handler (); \ msvc_inval_current = gl_msvc_inval_current (); \ /* First, initialize gl_msvc_inval_restart. */ \ if (setjmp (msvc_inval_current->restart) == 0) \ { \ /* Then, mark it as valid. */ \ msvc_inval_current->restart_valid = 1; # define CATCH_MSVC_INVAL \ /* Execution completed. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; \ } \ else \ { \ /* Execution triggered an invalid parameter notification. \ Mark gl_msvc_inval_restart as invalid. */ \ msvc_inval_current->restart_valid = 0; # define DONE_MSVC_INVAL \ } \ } \ while (0) # endif # endif #else /* A platform that does not need to the invalid parameter handler, or when SANE_LIBRARY_HANDLING is desired. */ /* The braces here avoid GCC warnings like "warning: suggest explicit braces to avoid ambiguous 'else'". */ # define TRY_MSVC_INVAL \ do \ { \ if (1) # define CATCH_MSVC_INVAL \ else # define DONE_MSVC_INVAL \ } \ while (0) #endif #endif /* _MSVC_INVAL_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/setlocale_null.h�������������������������������������������������������������������0000644�0000000�0000000�00000006664�14226564450�014054� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Query the name of the current global locale. Copyright (C) 2019-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2019. */ #ifndef _SETLOCALE_NULL_H #define _SETLOCALE_NULL_H #include <stddef.h> #include "arg-nonnull.h" #ifdef __cplusplus extern "C" { #endif /* Recommended size of a buffer for a locale name for a single category. On glibc systems, you can have locale names that are relative file names; assume a maximum length 256. In native Windows, in 2018 the longest locale name was of length 58 ("FYRO Macedonian_Former Yugoslav Republic of Macedonia.1251"). */ #define SETLOCALE_NULL_MAX (256+1) /* Recommended size of a buffer for a locale name with all categories. On glibc systems, you can have locale names that are relative file names; assume maximum length 256 for each. There are 12 categories; so, the maximum total length is 148+12*256. In native Windows, there are 5 categories, and the maximum total length is 55+5*58. */ #define SETLOCALE_NULL_ALL_MAX (148+12*256+1) /* setlocale_null_r (CATEGORY, BUF, BUFSIZE) is like setlocale (CATEGORY, NULL), except that - it is guaranteed to be multithread-safe, - it returns the resulting locale category name or locale name in the user-supplied buffer BUF, which must be BUFSIZE bytes long. The recommended minimum buffer size is - SETLOCALE_NULL_MAX for CATEGORY != LC_ALL, and - SETLOCALE_NULL_ALL_MAX for CATEGORY == LC_ALL. The return value is an error code: 0 if the call is successful, EINVAL if CATEGORY is invalid, or ERANGE if BUFSIZE is smaller than the length needed size (including the trailing NUL byte). In the latter case, a truncated result is returned in BUF, but still NUL-terminated if BUFSIZE > 0. For this call to be multithread-safe, *all* calls to setlocale (CATEGORY, NULL) in all other threads must have been converted to use setlocale_null_r or setlocale_null as well, and the other threads must not make other setlocale invocations (since changing the global locale has side effects on all threads). */ extern int setlocale_null_r (int category, char *buf, size_t bufsize) _GL_ARG_NONNULL ((2)); /* setlocale_null (CATEGORY) is like setlocale (CATEGORY, NULL), except that it is guaranteed to be multithread-safe. The return value is NULL if CATEGORY is invalid. For this call to be multithread-safe, *all* calls to setlocale (CATEGORY, NULL) in all other threads must have been converted to use setlocale_null_r or setlocale_null as well, and the other threads must not make other setlocale invocations (since changing the global locale has side effects on all threads). */ extern const char *setlocale_null (int category); #ifdef __cplusplus } #endif #endif /* _SETLOCALE_NULL_H */ ����������������������������������������������������������������������������recutils-1.9/lib/sys_time.in.h����������������������������������������������������������������������0000644�0000000�0000000�00000017450�14226564451�013304� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide a more complete sys/time.h. Copyright (C) 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef _@GUARD_PREFIX@_SYS_TIME_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ /* On Cygwin and on many BSDish systems, <sys/time.h> includes itself recursively via <sys/select.h>. Simply delegate to the system's header in this case; it is a no-op. Without this extra ifdef, the C++ gettimeofday declaration below would be a forward declaration in gnulib's nested <sys/time.h>. */ #if defined _CYGWIN_SYS_TIME_H || defined _SYS_TIME_H || defined _SYS_TIME_H_ # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ #else /* The include_next requires a split double-inclusion guard. */ #if @HAVE_SYS_TIME_H@ # @INCLUDE_NEXT@ @NEXT_SYS_TIME_H@ #endif #ifndef _@GUARD_PREFIX@_SYS_TIME_H #define _@GUARD_PREFIX@_SYS_TIME_H #if ! @HAVE_SYS_TIME_H@ # include <time.h> #endif /* On native Windows with MSVC, get the 'struct timeval' type. Also, on native Windows with a 64-bit time_t, where we are overriding the 'struct timeval' type, get all declarations of system functions whose signature contains 'struct timeval'. */ #if (defined _MSC_VER || @REPLACE_STRUCT_TIMEVAL@) && @HAVE_WINSOCK2_H@ && !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include <winsock2.h> # undef _GL_INCLUDING_WINSOCK2_H #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #ifdef __cplusplus extern "C" { #endif #if !@HAVE_STRUCT_TIMEVAL@ || @REPLACE_STRUCT_TIMEVAL@ # if @REPLACE_STRUCT_TIMEVAL@ # define timeval rpl_timeval # endif # if !GNULIB_defined_struct_timeval struct timeval { time_t tv_sec; long int tv_usec; }; # define GNULIB_defined_struct_timeval 1 # endif #endif #ifdef __cplusplus } #endif #if @GNULIB_GETTIMEOFDAY@ # if @REPLACE_GETTIMEOFDAY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gettimeofday # define gettimeofday rpl_gettimeofday # endif _GL_FUNCDECL_RPL (gettimeofday, int, (struct timeval *restrict, void *restrict) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gettimeofday, int, (struct timeval *restrict, void *restrict)); # else # if !@HAVE_GETTIMEOFDAY@ _GL_FUNCDECL_SYS (gettimeofday, int, (struct timeval *restrict, void *restrict) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on glibc systems, by default, the second argument is struct timezone *. */ _GL_CXXALIAS_SYS_CAST (gettimeofday, int, (struct timeval *restrict, void *restrict)); # endif _GL_CXXALIASWARN (gettimeofday); # if defined __cplusplus && defined GNULIB_NAMESPACE namespace GNULIB_NAMESPACE { typedef ::timeval # undef timeval timeval; # if @REPLACE_STRUCT_TIMEVAL@ # define timeval rpl_timeval typedef ::timeval timeval; # endif } # endif #elif defined GNULIB_POSIXCHECK # undef gettimeofday # if HAVE_RAW_DECL_GETTIMEOFDAY _GL_WARN_ON_USE (gettimeofday, "gettimeofday is unportable - " "use gnulib module gettimeofday for portability"); # endif #endif /* Hide some function declarations from <winsock2.h>. */ #if defined _MSC_VER && @HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_UNISTD_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close close_used_without_including_unistd_h # elif !defined __clang__ _GL_WARN_ON_USE (close, "close() used without including <unistd.h>"); # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname gethostname_used_without_including_unistd_h # else _GL_WARN_ON_USE (gethostname, "gethostname() used without including <unistd.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including <sys/socket.h>"); _GL_WARN_ON_USE (connect, "connect() used without including <sys/socket.h>"); _GL_WARN_ON_USE (accept, "accept() used without including <sys/socket.h>"); _GL_WARN_ON_USE (bind, "bind() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getpeername, "getpeername() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockname, "getsockname() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (listen, "listen() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recv, "recv() used without including <sys/socket.h>"); _GL_WARN_ON_USE (send, "send() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including <sys/socket.h>"); _GL_WARN_ON_USE (sendto, "sendto() used without including <sys/socket.h>"); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (shutdown, "shutdown() used without including <sys/socket.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including <sys/select.h>"); # endif # endif #endif #endif /* _@GUARD_PREFIX@_SYS_TIME_H */ #endif /* _CYGWIN_SYS_TIME_H */ #endif /* _@GUARD_PREFIX@_SYS_TIME_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/size_max.h�������������������������������������������������������������������������0000644�0000000�0000000�00000002253�14226564451�012655� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* size_max.h -- declare SIZE_MAX through system headers Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc. Written by Simon Josefsson. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef GNULIB_SIZE_MAX_H #define GNULIB_SIZE_MAX_H /* Get SIZE_MAX declaration on systems like Solaris 7/8/9. */ # include <limits.h> /* Get SIZE_MAX declaration on systems like glibc 2. */ # if HAVE_STDINT_H # include <stdint.h> # endif /* On systems where these include files don't define it, SIZE_MAX is defined in config.h. */ #endif /* GNULIB_SIZE_MAX_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/isnanf.c���������������������������������������������������������������������������0000644�0000000�0000000�00000001541�14226564450�012305� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Test for NaN that does not need libm. Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Bruno Haible <bruno@clisp.org>, 2007. */ #define USE_FLOAT #include "isnan.c" ���������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/stdalign.in.h����������������������������������������������������������������������0000644�0000000�0000000�00000011557�14226564451�013257� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A substitute for ISO C11 <stdalign.h>. Copyright 2011-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert and Bruno Haible. */ #ifndef _GL_STDALIGN_H #define _GL_STDALIGN_H /* ISO C11 <stdalign.h> for platforms that lack it. References: ISO C11 (latest free draft <http://www.open-std.org/jtc1/sc22/wg14/www/docs/n1570.pdf>) sections 6.5.3.4, 6.7.5, 7.15. C++11 (latest free draft <http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2011/n3242.pdf>) section 18.10. */ /* alignof (TYPE), also known as _Alignof (TYPE), yields the alignment requirement of a structure member (i.e., slot or field) that is of type TYPE, as an integer constant expression. This differs from GCC's and clang's __alignof__ operator, which can yield a better-performing alignment for an object of that type. For example, on x86 with GCC and on Linux/x86 with clang, __alignof__ (double) and __alignof__ (long long) are 8, whereas alignof (double) and alignof (long long) are 4 unless the option '-malign-double' is used. The result cannot be used as a value for an 'enum' constant, if you want to be portable to HP-UX 10.20 cc and AIX 3.2.5 xlc. Include <stddef.h> for offsetof. */ #include <stddef.h> /* FreeBSD 9.1 <sys/cdefs.h>, included by <stddef.h> and lots of other standard headers, defines conflicting implementations of _Alignas and _Alignof that are no better than ours; override them. */ #undef _Alignas #undef _Alignof /* GCC releases before GCC 4.9 had a bug in _Alignof. See GCC bug 52023 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. clang versions < 8.0.0 have the same bug. */ #if (!defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 \ || (defined __GNUC__ && __GNUC__ < 4 + (__GNUC_MINOR__ < 9) \ && !defined __clang__) \ || (defined __clang__ && __clang_major__ < 8)) # ifdef __cplusplus # if 201103 <= __cplusplus # define _Alignof(type) alignof (type) # else template <class __t> struct __alignof_helper { char __a; __t __b; }; # define _Alignof(type) offsetof (__alignof_helper<type>, __b) # endif # else # define _Alignof(type) offsetof (struct { char __a; type __b; }, __b) # endif #endif #if ! (defined __cplusplus && 201103 <= __cplusplus) # define alignof _Alignof #endif #define __alignof_is_defined 1 /* alignas (A), also known as _Alignas (A), aligns a variable or type to the alignment A, where A is an integer constant expression. For example: int alignas (8) foo; struct s { int a; int alignas (8) bar; }; aligns the address of FOO and the offset of BAR to be multiples of 8. A should be a power of two that is at least the type's alignment and at most the implementation's alignment limit. This limit is 2**28 on typical GNUish hosts, and 2**13 on MSVC. To be portable to MSVC through at least version 10.0, A should be an integer constant, as MSVC does not support expressions such as 1 << 3. To be portable to Sun C 5.11, do not align auto variables to anything stricter than their default alignment. The following C11 requirements are not supported here: - If A is zero, alignas has no effect. - alignas can be used multiple times; the strictest one wins. - alignas (TYPE) is equivalent to alignas (alignof (TYPE)). */ #if !defined __STDC_VERSION__ || __STDC_VERSION__ < 201112 # if defined __cplusplus && 201103 <= __cplusplus # define _Alignas(a) alignas (a) # elif (!defined __attribute__ \ && ((defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__ && !defined __ibmxl__) \ || (4 <= __clang_major__) \ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__)) # define _Alignas(a) __attribute__ ((__aligned__ (a))) # elif 1300 <= _MSC_VER # define _Alignas(a) __declspec (align (a)) # endif #endif #if ((defined _Alignas && ! (defined __cplusplus && 201103 <= __cplusplus)) \ || (defined __STDC_VERSION__ && 201112 <= __STDC_VERSION__)) # define alignas _Alignas #endif #if defined alignas || (defined __cplusplus && 201103 <= __cplusplus) # define __alignas_is_defined 1 #endif #endif /* _GL_STDALIGN_H */ �������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/openat-die.c�����������������������������������������������������������������������0000644�0000000�0000000�00000003506�14226564447�013065� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Report a save- or restore-cwd failure in our openat replacement and then exit. Copyright (C) 2005-2006, 2008-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> #include "openat.h" #include <stdlib.h> #ifndef GNULIB_LIBPOSIX # include "error.h" #endif #include "exitfail.h" #include "gettext.h" #define _(msgid) gettext (msgid) _Noreturn void openat_save_fail (int errnum) { #ifndef GNULIB_LIBPOSIX error (exit_failure, errnum, _("unable to record current working directory")); #endif /* _Noreturn cannot be applied to error, since it returns when its first argument is 0. To help compilers understand that this function does not return, call abort. Also, the abort is a safety feature if exit_failure is 0 (which shouldn't happen). */ abort (); } /* Exit with an error about failure to restore the working directory during an openat emulation. The caller must ensure that fd 2 is not a just-opened fd, even when openat_safer is not in use. */ _Noreturn void openat_restore_fail (int errnum) { #ifndef GNULIB_LIBPOSIX error (exit_failure, errnum, _("failed to return to initial working directory")); #endif /* As above. */ abort (); } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/dup2.c�����������������������������������������������������������������������������0000644�0000000�0000000�00000007742�14226564447�011720� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate an open file descriptor to a specified file descriptor. Copyright (C) 1999, 2004-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Paul Eggert */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #include <fcntl.h> #undef dup2 #if defined _WIN32 && ! defined __CYGWIN__ /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" # endif /* Get _get_osfhandle. */ # if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" # else # include <io.h> # endif # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int dup2_nothrow (int fd, int desired_fd) { int result; TRY_MSVC_INVAL { result = _dup2 (fd, desired_fd); } CATCH_MSVC_INVAL { errno = EBADF; result = -1; } DONE_MSVC_INVAL; return result; } # else # define dup2_nothrow _dup2 # endif static int ms_windows_dup2 (int fd, int desired_fd) { int result; /* If fd is closed, mingw hangs on dup2 (fd, fd). If fd is open, dup2 (fd, fd) returns 0, but all further attempts to use fd in future dup2 calls will hang. */ if (fd == desired_fd) { if ((HANDLE) _get_osfhandle (fd) == INVALID_HANDLE_VALUE) { errno = EBADF; return -1; } return fd; } /* Wine 1.0.1 return 0 when desired_fd is negative but not -1: https://bugs.winehq.org/show_bug.cgi?id=21289 */ if (desired_fd < 0) { errno = EBADF; return -1; } result = dup2_nothrow (fd, desired_fd); if (result == 0) result = desired_fd; return result; } # define dup2 ms_windows_dup2 #elif defined __KLIBC__ # include <InnoTekLIBC/backend.h> static int klibc_dup2dirfd (int fd, int desired_fd) { int tempfd; int dupfd; tempfd = open ("NUL", O_RDONLY); if (tempfd == -1) return -1; if (tempfd == desired_fd) { close (tempfd); char path[_MAX_PATH]; if (__libc_Back_ioFHToPath (fd, path, sizeof (path))) return -1; return open(path, O_RDONLY); } dupfd = klibc_dup2dirfd (fd, desired_fd); close (tempfd); return dupfd; } static int klibc_dup2 (int fd, int desired_fd) { int dupfd; struct stat sbuf; dupfd = dup2 (fd, desired_fd); if (dupfd == -1 && errno == ENOTSUP \ && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { close (desired_fd); return klibc_dup2dirfd (fd, desired_fd); } return dupfd; } # define dup2 klibc_dup2 #endif int rpl_dup2 (int fd, int desired_fd) { int result; #ifdef F_GETFL /* On Linux kernels 2.6.26-2.6.29, dup2 (fd, fd) returns -EBADF. On Cygwin 1.5.x, dup2 (1, 1) returns 0. On Cygwin 1.7.17, dup2 (1, -1) dumps core. On Cygwin 1.7.25, dup2 (1, 256) can dump core. On Haiku, dup2 (fd, fd) mistakenly clears FD_CLOEXEC. */ # if HAVE_SETDTABLESIZE setdtablesize (desired_fd + 1); # endif if (desired_fd < 0) fd = desired_fd; if (fd == desired_fd) return fcntl (fd, F_GETFL) == -1 ? -1 : fd; #endif result = dup2 (fd, desired_fd); /* Correct an errno value on FreeBSD 6.1 and Cygwin 1.5.x. */ if (result == -1 && errno == EMFILE) errno = EBADF; #if REPLACE_FCHDIR if (fd != desired_fd && result != -1) result = _gl_register_dup (fd, result); #endif return result; } ������������������������������recutils-1.9/lib/math.in.h��������������������������������������������������������������������������0000644�0000000�0000000�00000231327�14226564450�012401� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A GNU-like <math.h>. Copyright (C) 2002-2003, 2007-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_MATH_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if defined _GL_INCLUDING_MATH_H /* Special invocation convention: - On FreeBSD 12.2 we have a sequence of nested includes <math.h> -> <stdlib.h> -> <sys/wait.h> -> <sys/types.h> -> <sys/select.h> -> <signal.h> -> <pthread.h> -> <stdlib.h> -> <math.h> In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ #else /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #define _GL_INCLUDING_MATH_H #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ #undef _GL_INCLUDING_MATH_H #ifndef _@GUARD_PREFIX@_MATH_H #define _@GUARD_PREFIX@_MATH_H /* On OpenVMS, NAN, INFINITY, and HUGEVAL macros are defined in <fp.h>. */ #if defined __VMS && ! defined NAN # include <fp.h> #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_MATH_INLINE # define _GL_MATH_INLINE _GL_INLINE #endif /* The __attribute__ feature is available in gcc versions 2.5 and later. The attribute __const__ was added in gcc 2.95. */ #ifndef _GL_ATTRIBUTE_CONST # if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 95) || defined __clang__ # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) # else # define _GL_ATTRIBUTE_CONST /* empty */ # endif #endif /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ #ifdef __cplusplus /* Helper macros to define type-generic function FUNC as overloaded functions, rather than as macros like in C. POSIX declares these with an argument of real-floating (that is, one of float, double, or long double). */ # define _GL_MATH_CXX_REAL_FLOATING_DECL_1(func) \ static inline int \ _gl_cxx_ ## func ## f (float f) \ { \ return func (f); \ } \ static inline int \ _gl_cxx_ ## func ## d (double d) \ { \ return func (d); \ } \ static inline int \ _gl_cxx_ ## func ## l (long double l) \ { \ return func (l); \ } # define _GL_MATH_CXX_REAL_FLOATING_DECL_2(func,rpl_func,rettype) \ _GL_BEGIN_NAMESPACE \ inline rettype \ rpl_func (float f) \ { \ return _gl_cxx_ ## func ## f (f); \ } \ inline rettype \ rpl_func (double d) \ { \ return _gl_cxx_ ## func ## d (d); \ } \ inline rettype \ rpl_func (long double l) \ { \ return _gl_cxx_ ## func ## l (l); \ } \ _GL_END_NAMESPACE #endif /* Helper macros to define a portability warning for the classification macro FUNC called with VALUE. POSIX declares the classification macros with an argument of real-floating (that is, one of float, double, or long double). */ #define _GL_WARN_REAL_FLOATING_DECL(func) \ _GL_MATH_INLINE int \ _GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ "use gnulib module " #func " for portability") \ rpl_ ## func ## f (float f) \ { \ return func (f); \ } \ _GL_MATH_INLINE int \ _GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ "use gnulib module " #func " for portability") \ rpl_ ## func ## d (double d) \ { \ return func (d); \ } \ _GL_MATH_INLINE int \ _GL_WARN_ON_USE_ATTRIBUTE (#func " is unportable - " \ "use gnulib module " #func " for portability") \ rpl_ ## func ## l (long double l) \ { \ return func (l); \ } #define _GL_WARN_REAL_FLOATING_IMPL(func, value) \ (sizeof (value) == sizeof (float) ? rpl_ ## func ## f (value) \ : sizeof (value) == sizeof (double) ? rpl_ ## func ## d (value) \ : rpl_ ## func ## l (value)) #if @REPLACE_ITOLD@ /* Pull in a function that fixes the 'int' to 'long double' conversion of glibc 2.7. */ _GL_EXTERN_C void _Qp_itoq (long double *, int); static void (*_gl_math_fix_itold) (long double *, int) = _Qp_itoq; #endif /* POSIX allows platforms that don't support NAN. But all major machines in the past 15 years have supported something close to IEEE NaN, so we define this unconditionally. We also must define it on platforms like Solaris 10, where NAN is present but defined as a function pointer rather than a floating point constant. */ #if !defined NAN || @REPLACE_NAN@ # if !GNULIB_defined_NAN # undef NAN /* The Compaq (ex-DEC) C 6.4 compiler and the Microsoft MSVC 9 compiler choke on the expression 0.0 / 0.0. */ # if defined __DECC || defined _MSC_VER _GL_MATH_INLINE float _NaN () { static float zero = 0.0f; return zero / zero; } # define NAN (_NaN()) # else # define NAN (0.0f / 0.0f) # endif # define GNULIB_defined_NAN 1 # endif #endif /* Solaris 10 defines HUGE_VAL, but as a function pointer rather than a floating point constant. */ #if @REPLACE_HUGE_VAL@ # undef HUGE_VALF # define HUGE_VALF (1.0f / 0.0f) # undef HUGE_VAL # define HUGE_VAL (1.0 / 0.0) # undef HUGE_VALL # define HUGE_VALL (1.0L / 0.0L) #endif /* HUGE_VALF is a 'float' Infinity. */ #ifndef HUGE_VALF # if defined _MSC_VER /* The Microsoft MSVC 9 compiler chokes on the expression 1.0f / 0.0f. */ # define HUGE_VALF (1e25f * 1e25f) # else # define HUGE_VALF (1.0f / 0.0f) # endif #endif /* HUGE_VAL is a 'double' Infinity. */ #ifndef HUGE_VAL # if defined _MSC_VER /* The Microsoft MSVC 9 compiler chokes on the expression 1.0 / 0.0. */ # define HUGE_VAL (1e250 * 1e250) # else # define HUGE_VAL (1.0 / 0.0) # endif #endif /* HUGE_VALL is a 'long double' Infinity. */ #ifndef HUGE_VALL # if defined _MSC_VER /* The Microsoft MSVC 9 compiler chokes on the expression 1.0L / 0.0L. */ # define HUGE_VALL (1e250L * 1e250L) # else # define HUGE_VALL (1.0L / 0.0L) # endif #endif #if defined FP_ILOGB0 && defined FP_ILOGBNAN /* Ensure FP_ILOGB0 and FP_ILOGBNAN are correct. */ # if defined __HAIKU__ /* Haiku: match what ilogb() does */ # undef FP_ILOGB0 # undef FP_ILOGBNAN # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # endif #else /* Ensure FP_ILOGB0 and FP_ILOGBNAN are defined. */ # if defined __NetBSD__ || defined __sgi /* NetBSD, IRIX 6.5: match what ilogb() does */ # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # elif defined _AIX /* AIX 5.1: match what ilogb() does in AIX >= 5.2 */ # define FP_ILOGB0 (- 2147483647 - 1) /* INT_MIN */ # define FP_ILOGBNAN 2147483647 /* INT_MAX */ # elif defined __sun /* Solaris 9: match what ilogb() does */ # define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ # define FP_ILOGBNAN 2147483647 /* INT_MAX */ # else /* Gnulib defined values. */ # define FP_ILOGB0 (- 2147483647) /* - INT_MAX */ # define FP_ILOGBNAN (- 2147483647 - 1) /* INT_MIN */ # endif #endif #if @GNULIB_ACOSF@ # if @REPLACE_ACOSF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef acosf # define acosf rpl_acosf # endif _GL_FUNCDECL_RPL (acosf, float, (float x)); _GL_CXXALIAS_RPL (acosf, float, (float x)); # else # if !@HAVE_ACOSF@ # undef acosf _GL_FUNCDECL_SYS (acosf, float, (float x)); # endif _GL_CXXALIAS_SYS (acosf, float, (float x)); # endif _GL_CXXALIASWARN (acosf); #elif defined GNULIB_POSIXCHECK # undef acosf # if HAVE_RAW_DECL_ACOSF _GL_WARN_ON_USE (acosf, "acosf is unportable - " "use gnulib module acosf for portability"); # endif #endif #if @GNULIB_ACOSL@ # if !@HAVE_ACOSL@ || !@HAVE_DECL_ACOSL@ # undef acosl _GL_FUNCDECL_SYS (acosl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (acosl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (acosl); # endif #elif defined GNULIB_POSIXCHECK # undef acosl # if HAVE_RAW_DECL_ACOSL _GL_WARN_ON_USE (acosl, "acosl is unportable - " "use gnulib module acosl for portability"); # endif #endif #if @GNULIB_ASINF@ # if @REPLACE_ASINF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef asinf # define asinf rpl_asinf # endif _GL_FUNCDECL_RPL (asinf, float, (float x)); _GL_CXXALIAS_RPL (asinf, float, (float x)); # else # if !@HAVE_ASINF@ # undef asinf _GL_FUNCDECL_SYS (asinf, float, (float x)); # endif _GL_CXXALIAS_SYS (asinf, float, (float x)); # endif _GL_CXXALIASWARN (asinf); #elif defined GNULIB_POSIXCHECK # undef asinf # if HAVE_RAW_DECL_ASINF _GL_WARN_ON_USE (asinf, "asinf is unportable - " "use gnulib module asinf for portability"); # endif #endif #if @GNULIB_ASINL@ # if !@HAVE_ASINL@ || !@HAVE_DECL_ASINL@ # undef asinl _GL_FUNCDECL_SYS (asinl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (asinl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (asinl); # endif #elif defined GNULIB_POSIXCHECK # undef asinl # if HAVE_RAW_DECL_ASINL _GL_WARN_ON_USE (asinl, "asinl is unportable - " "use gnulib module asinl for portability"); # endif #endif #if @GNULIB_ATANF@ # if @REPLACE_ATANF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef atanf # define atanf rpl_atanf # endif _GL_FUNCDECL_RPL (atanf, float, (float x)); _GL_CXXALIAS_RPL (atanf, float, (float x)); # else # if !@HAVE_ATANF@ # undef atanf _GL_FUNCDECL_SYS (atanf, float, (float x)); # endif _GL_CXXALIAS_SYS (atanf, float, (float x)); # endif _GL_CXXALIASWARN (atanf); #elif defined GNULIB_POSIXCHECK # undef atanf # if HAVE_RAW_DECL_ATANF _GL_WARN_ON_USE (atanf, "atanf is unportable - " "use gnulib module atanf for portability"); # endif #endif #if @GNULIB_ATANL@ # if !@HAVE_ATANL@ || !@HAVE_DECL_ATANL@ # undef atanl _GL_FUNCDECL_SYS (atanl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (atanl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (atanl); # endif #elif defined GNULIB_POSIXCHECK # undef atanl # if HAVE_RAW_DECL_ATANL _GL_WARN_ON_USE (atanl, "atanl is unportable - " "use gnulib module atanl for portability"); # endif #endif #if @GNULIB_ATAN2F@ # if @REPLACE_ATAN2F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef atan2f # define atan2f rpl_atan2f # endif _GL_FUNCDECL_RPL (atan2f, float, (float y, float x)); _GL_CXXALIAS_RPL (atan2f, float, (float y, float x)); # else # if !@HAVE_ATAN2F@ # undef atan2f _GL_FUNCDECL_SYS (atan2f, float, (float y, float x)); # endif _GL_CXXALIAS_SYS (atan2f, float, (float y, float x)); # endif _GL_CXXALIASWARN (atan2f); #elif defined GNULIB_POSIXCHECK # undef atan2f # if HAVE_RAW_DECL_ATAN2F _GL_WARN_ON_USE (atan2f, "atan2f is unportable - " "use gnulib module atan2f for portability"); # endif #endif #if @GNULIB_CBRTF@ # if @REPLACE_CBRTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef cbrtf # define cbrtf rpl_cbrtf # endif _GL_FUNCDECL_RPL (cbrtf, float, (float x)); _GL_CXXALIAS_RPL (cbrtf, float, (float x)); # else # if !@HAVE_DECL_CBRTF@ _GL_FUNCDECL_SYS (cbrtf, float, (float x)); # endif _GL_CXXALIAS_SYS (cbrtf, float, (float x)); # endif _GL_CXXALIASWARN (cbrtf); #elif defined GNULIB_POSIXCHECK # undef cbrtf # if HAVE_RAW_DECL_CBRTF _GL_WARN_ON_USE (cbrtf, "cbrtf is unportable - " "use gnulib module cbrtf for portability"); # endif #endif #if @GNULIB_CBRT@ # if !@HAVE_CBRT@ _GL_FUNCDECL_SYS (cbrt, double, (double x)); # endif _GL_CXXALIAS_SYS (cbrt, double, (double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (cbrt, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef cbrt # if HAVE_RAW_DECL_CBRT _GL_WARN_ON_USE (cbrt, "cbrt is unportable - " "use gnulib module cbrt for portability"); # endif #endif #if @GNULIB_CBRTL@ # if @REPLACE_CBRTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef cbrtl # define cbrtl rpl_cbrtl # endif _GL_FUNCDECL_RPL (cbrtl, long double, (long double x)); _GL_CXXALIAS_RPL (cbrtl, long double, (long double x)); # else # if !@HAVE_DECL_CBRTL@ _GL_FUNCDECL_SYS (cbrtl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (cbrtl, long double, (long double x)); # endif _GL_CXXALIASWARN (cbrtl); #elif defined GNULIB_POSIXCHECK # undef cbrtl # if HAVE_RAW_DECL_CBRTL _GL_WARN_ON_USE (cbrtl, "cbrtl is unportable - " "use gnulib module cbrtl for portability"); # endif #endif #if @GNULIB_CEILF@ # if @REPLACE_CEILF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ceilf # define ceilf rpl_ceilf # endif _GL_FUNCDECL_RPL (ceilf, float, (float x)); _GL_CXXALIAS_RPL (ceilf, float, (float x)); # else # if !@HAVE_DECL_CEILF@ # undef ceilf _GL_FUNCDECL_SYS (ceilf, float, (float x)); # endif _GL_CXXALIAS_SYS (ceilf, float, (float x)); # endif _GL_CXXALIASWARN (ceilf); #elif defined GNULIB_POSIXCHECK # undef ceilf # if HAVE_RAW_DECL_CEILF _GL_WARN_ON_USE (ceilf, "ceilf is unportable - " "use gnulib module ceilf for portability"); # endif #endif #if @GNULIB_CEIL@ # if @REPLACE_CEIL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ceil # define ceil rpl_ceil # endif _GL_FUNCDECL_RPL (ceil, double, (double x)); _GL_CXXALIAS_RPL (ceil, double, (double x)); # else _GL_CXXALIAS_SYS (ceil, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (ceil, double, (double x)); # endif #endif #if @GNULIB_CEILL@ # if @REPLACE_CEILL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ceill # define ceill rpl_ceill # endif _GL_FUNCDECL_RPL (ceill, long double, (long double x)); _GL_CXXALIAS_RPL (ceill, long double, (long double x)); # else # if !@HAVE_DECL_CEILL@ # undef ceill _GL_FUNCDECL_SYS (ceill, long double, (long double x)); # endif _GL_CXXALIAS_SYS (ceill, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ceill); # endif #elif defined GNULIB_POSIXCHECK # undef ceill # if HAVE_RAW_DECL_CEILL _GL_WARN_ON_USE (ceill, "ceill is unportable - " "use gnulib module ceill for portability"); # endif #endif #if @GNULIB_COPYSIGNF@ # if !@HAVE_DECL_COPYSIGNF@ # undef copysignf _GL_FUNCDECL_SYS (copysignf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (copysignf, float, (float x, float y)); _GL_CXXALIASWARN (copysignf); #elif defined GNULIB_POSIXCHECK # undef copysignf # if HAVE_RAW_DECL_COPYSIGNF _GL_WARN_ON_USE (copysignf, "copysignf is unportable - " "use gnulib module copysignf for portability"); # endif #endif #if @GNULIB_COPYSIGN@ # if !@HAVE_COPYSIGN@ _GL_FUNCDECL_SYS (copysign, double, (double x, double y)); # endif _GL_CXXALIAS_SYS (copysign, double, (double x, double y)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (copysign, double, (double x, double y)); # endif #elif defined GNULIB_POSIXCHECK # undef copysign # if HAVE_RAW_DECL_COPYSIGN _GL_WARN_ON_USE (copysign, "copysign is unportable - " "use gnulib module copysign for portability"); # endif #endif #if @GNULIB_COPYSIGNL@ # if !@HAVE_COPYSIGNL@ _GL_FUNCDECL_SYS (copysignl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (copysignl, long double, (long double x, long double y)); _GL_CXXALIASWARN (copysignl); #elif defined GNULIB_POSIXCHECK # undef copysignl # if HAVE_RAW_DECL_COPYSIGNL _GL_WARN_ON_USE (copysign, "copysignl is unportable - " "use gnulib module copysignl for portability"); # endif #endif #if @GNULIB_COSF@ # if @REPLACE_COSF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef cosf # define cosf rpl_cosf # endif _GL_FUNCDECL_RPL (cosf, float, (float x)); _GL_CXXALIAS_RPL (cosf, float, (float x)); # else # if !@HAVE_COSF@ # undef cosf _GL_FUNCDECL_SYS (cosf, float, (float x)); # endif _GL_CXXALIAS_SYS (cosf, float, (float x)); # endif _GL_CXXALIASWARN (cosf); #elif defined GNULIB_POSIXCHECK # undef cosf # if HAVE_RAW_DECL_COSF _GL_WARN_ON_USE (cosf, "cosf is unportable - " "use gnulib module cosf for portability"); # endif #endif #if @GNULIB_COSL@ # if !@HAVE_COSL@ || !@HAVE_DECL_COSL@ # undef cosl _GL_FUNCDECL_SYS (cosl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (cosl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (cosl); # endif #elif defined GNULIB_POSIXCHECK # undef cosl # if HAVE_RAW_DECL_COSL _GL_WARN_ON_USE (cosl, "cosl is unportable - " "use gnulib module cosl for portability"); # endif #endif #if @GNULIB_COSHF@ # if @REPLACE_COSHF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef coshf # define coshf rpl_coshf # endif _GL_FUNCDECL_RPL (coshf, float, (float x)); _GL_CXXALIAS_RPL (coshf, float, (float x)); # else # if !@HAVE_COSHF@ # undef coshf _GL_FUNCDECL_SYS (coshf, float, (float x)); # endif _GL_CXXALIAS_SYS (coshf, float, (float x)); # endif _GL_CXXALIASWARN (coshf); #elif defined GNULIB_POSIXCHECK # undef coshf # if HAVE_RAW_DECL_COSHF _GL_WARN_ON_USE (coshf, "coshf is unportable - " "use gnulib module coshf for portability"); # endif #endif #if @GNULIB_EXPF@ # if @REPLACE_EXPF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expf # define expf rpl_expf # endif _GL_FUNCDECL_RPL (expf, float, (float x)); _GL_CXXALIAS_RPL (expf, float, (float x)); # else # if !@HAVE_EXPF@ # undef expf _GL_FUNCDECL_SYS (expf, float, (float x)); # endif _GL_CXXALIAS_SYS (expf, float, (float x)); # endif _GL_CXXALIASWARN (expf); #elif defined GNULIB_POSIXCHECK # undef expf # if HAVE_RAW_DECL_EXPF _GL_WARN_ON_USE (expf, "expf is unportable - " "use gnulib module expf for portability"); # endif #endif #if @GNULIB_EXPL@ # if @REPLACE_EXPL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expl # define expl rpl_expl # endif _GL_FUNCDECL_RPL (expl, long double, (long double x)); _GL_CXXALIAS_RPL (expl, long double, (long double x)); # else # if !@HAVE_EXPL@ || !@HAVE_DECL_EXPL@ # undef expl _GL_FUNCDECL_SYS (expl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (expl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (expl); # endif #elif defined GNULIB_POSIXCHECK # undef expl # if HAVE_RAW_DECL_EXPL _GL_WARN_ON_USE (expl, "expl is unportable - " "use gnulib module expl for portability"); # endif #endif #if @GNULIB_EXP2F@ # if !@HAVE_DECL_EXP2F@ _GL_FUNCDECL_SYS (exp2f, float, (float x)); # endif _GL_CXXALIAS_SYS (exp2f, float, (float x)); _GL_CXXALIASWARN (exp2f); #elif defined GNULIB_POSIXCHECK # undef exp2f # if HAVE_RAW_DECL_EXP2F _GL_WARN_ON_USE (exp2f, "exp2f is unportable - " "use gnulib module exp2f for portability"); # endif #endif #if @GNULIB_EXP2@ # if @REPLACE_EXP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef exp2 # define exp2 rpl_exp2 # endif _GL_FUNCDECL_RPL (exp2, double, (double x)); _GL_CXXALIAS_RPL (exp2, double, (double x)); # else # if !@HAVE_DECL_EXP2@ _GL_FUNCDECL_SYS (exp2, double, (double x)); # endif _GL_CXXALIAS_SYS (exp2, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (exp2, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef exp2 # if HAVE_RAW_DECL_EXP2 _GL_WARN_ON_USE (exp2, "exp2 is unportable - " "use gnulib module exp2 for portability"); # endif #endif #if @GNULIB_EXP2L@ # if @REPLACE_EXP2L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef exp2l # define exp2l rpl_exp2l # endif _GL_FUNCDECL_RPL (exp2l, long double, (long double x)); _GL_CXXALIAS_RPL (exp2l, long double, (long double x)); # else # if !@HAVE_DECL_EXP2L@ # undef exp2l _GL_FUNCDECL_SYS (exp2l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (exp2l, long double, (long double x)); # endif _GL_CXXALIASWARN (exp2l); #elif defined GNULIB_POSIXCHECK # undef exp2l # if HAVE_RAW_DECL_EXP2L _GL_WARN_ON_USE (exp2l, "exp2l is unportable - " "use gnulib module exp2l for portability"); # endif #endif #if @GNULIB_EXPM1F@ # if @REPLACE_EXPM1F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expm1f # define expm1f rpl_expm1f # endif _GL_FUNCDECL_RPL (expm1f, float, (float x)); _GL_CXXALIAS_RPL (expm1f, float, (float x)); # else # if !@HAVE_EXPM1F@ _GL_FUNCDECL_SYS (expm1f, float, (float x)); # endif _GL_CXXALIAS_SYS (expm1f, float, (float x)); # endif _GL_CXXALIASWARN (expm1f); #elif defined GNULIB_POSIXCHECK # undef expm1f # if HAVE_RAW_DECL_EXPM1F _GL_WARN_ON_USE (expm1f, "expm1f is unportable - " "use gnulib module expm1f for portability"); # endif #endif #if @GNULIB_EXPM1@ # if @REPLACE_EXPM1@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expm1 # define expm1 rpl_expm1 # endif _GL_FUNCDECL_RPL (expm1, double, (double x)); _GL_CXXALIAS_RPL (expm1, double, (double x)); # else # if !@HAVE_EXPM1@ _GL_FUNCDECL_SYS (expm1, double, (double x)); # endif _GL_CXXALIAS_SYS (expm1, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (expm1, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef expm1 # if HAVE_RAW_DECL_EXPM1 _GL_WARN_ON_USE (expm1, "expm1 is unportable - " "use gnulib module expm1 for portability"); # endif #endif #if @GNULIB_EXPM1L@ # if @REPLACE_EXPM1L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef expm1l # define expm1l rpl_expm1l # endif _GL_FUNCDECL_RPL (expm1l, long double, (long double x)); _GL_CXXALIAS_RPL (expm1l, long double, (long double x)); # else # if !@HAVE_DECL_EXPM1L@ # undef expm1l # if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (expm1l, long double, (long double x)); # endif # endif _GL_CXXALIAS_SYS (expm1l, long double, (long double x)); # endif _GL_CXXALIASWARN (expm1l); #elif defined GNULIB_POSIXCHECK # undef expm1l # if HAVE_RAW_DECL_EXPM1L _GL_WARN_ON_USE (expm1l, "expm1l is unportable - " "use gnulib module expm1l for portability"); # endif #endif #if @GNULIB_FABSF@ # if !@HAVE_FABSF@ # undef fabsf _GL_FUNCDECL_SYS (fabsf, float, (float x)); # endif _GL_CXXALIAS_SYS (fabsf, float, (float x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fabsf); # endif #elif defined GNULIB_POSIXCHECK # undef fabsf # if HAVE_RAW_DECL_FABSF _GL_WARN_ON_USE (fabsf, "fabsf is unportable - " "use gnulib module fabsf for portability"); # endif #endif #if @GNULIB_FABSL@ # if @REPLACE_FABSL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fabsl # define fabsl rpl_fabsl # endif _GL_FUNCDECL_RPL (fabsl, long double, (long double x)); _GL_CXXALIAS_RPL (fabsl, long double, (long double x)); # else # if !@HAVE_FABSL@ # undef fabsl _GL_FUNCDECL_SYS (fabsl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (fabsl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fabsl); # endif #elif defined GNULIB_POSIXCHECK # undef fabsl # if HAVE_RAW_DECL_FABSL _GL_WARN_ON_USE (fabsl, "fabsl is unportable - " "use gnulib module fabsl for portability"); # endif #endif #if @GNULIB_FLOORF@ # if @REPLACE_FLOORF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef floorf # define floorf rpl_floorf # endif _GL_FUNCDECL_RPL (floorf, float, (float x)); _GL_CXXALIAS_RPL (floorf, float, (float x)); # else # if !@HAVE_DECL_FLOORF@ # undef floorf _GL_FUNCDECL_SYS (floorf, float, (float x)); # endif _GL_CXXALIAS_SYS (floorf, float, (float x)); # endif _GL_CXXALIASWARN (floorf); #elif defined GNULIB_POSIXCHECK # undef floorf # if HAVE_RAW_DECL_FLOORF _GL_WARN_ON_USE (floorf, "floorf is unportable - " "use gnulib module floorf for portability"); # endif #endif #if @GNULIB_FLOOR@ # if @REPLACE_FLOOR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef floor # define floor rpl_floor # endif _GL_FUNCDECL_RPL (floor, double, (double x)); _GL_CXXALIAS_RPL (floor, double, (double x)); # else _GL_CXXALIAS_SYS (floor, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (floor, double, (double x)); # endif #endif #if @GNULIB_FLOORL@ # if @REPLACE_FLOORL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef floorl # define floorl rpl_floorl # endif _GL_FUNCDECL_RPL (floorl, long double, (long double x)); _GL_CXXALIAS_RPL (floorl, long double, (long double x)); # else # if !@HAVE_DECL_FLOORL@ # undef floorl _GL_FUNCDECL_SYS (floorl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (floorl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (floorl); # endif #elif defined GNULIB_POSIXCHECK # undef floorl # if HAVE_RAW_DECL_FLOORL _GL_WARN_ON_USE (floorl, "floorl is unportable - " "use gnulib module floorl for portability"); # endif #endif #if @GNULIB_FMAF@ # if @REPLACE_FMAF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmaf # define fmaf rpl_fmaf # endif _GL_FUNCDECL_RPL (fmaf, float, (float x, float y, float z)); _GL_CXXALIAS_RPL (fmaf, float, (float x, float y, float z)); # else # if !@HAVE_FMAF@ # undef fmaf _GL_FUNCDECL_SYS (fmaf, float, (float x, float y, float z)); # endif _GL_CXXALIAS_SYS (fmaf, float, (float x, float y, float z)); # endif _GL_CXXALIASWARN (fmaf); #elif defined GNULIB_POSIXCHECK # undef fmaf # if HAVE_RAW_DECL_FMAF _GL_WARN_ON_USE (fmaf, "fmaf is unportable - " "use gnulib module fmaf for portability"); # endif #endif #if @GNULIB_FMA@ # if @REPLACE_FMA@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fma # define fma rpl_fma # endif _GL_FUNCDECL_RPL (fma, double, (double x, double y, double z)); _GL_CXXALIAS_RPL (fma, double, (double x, double y, double z)); # else # if !@HAVE_FMA@ # undef fma _GL_FUNCDECL_SYS (fma, double, (double x, double y, double z)); # endif _GL_CXXALIAS_SYS (fma, double, (double x, double y, double z)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (fma, double, (double x, double y, double z)); # endif #elif defined GNULIB_POSIXCHECK # undef fma # if HAVE_RAW_DECL_FMA _GL_WARN_ON_USE (fma, "fma is unportable - " "use gnulib module fma for portability"); # endif #endif #if @GNULIB_FMAL@ # if @REPLACE_FMAL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmal # define fmal rpl_fmal # endif _GL_FUNCDECL_RPL (fmal, long double, (long double x, long double y, long double z)); _GL_CXXALIAS_RPL (fmal, long double, (long double x, long double y, long double z)); # else # if !@HAVE_FMAL@ # undef fmal # if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (fmal, long double, (long double x, long double y, long double z)); # endif # endif _GL_CXXALIAS_SYS (fmal, long double, (long double x, long double y, long double z)); # endif _GL_CXXALIASWARN (fmal); #elif defined GNULIB_POSIXCHECK # undef fmal # if HAVE_RAW_DECL_FMAL _GL_WARN_ON_USE (fmal, "fmal is unportable - " "use gnulib module fmal for portability"); # endif #endif #if @GNULIB_FMODF@ # if @REPLACE_FMODF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmodf # define fmodf rpl_fmodf # endif _GL_FUNCDECL_RPL (fmodf, float, (float x, float y)); _GL_CXXALIAS_RPL (fmodf, float, (float x, float y)); # else # if !@HAVE_FMODF@ # undef fmodf _GL_FUNCDECL_SYS (fmodf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (fmodf, float, (float x, float y)); # endif _GL_CXXALIASWARN (fmodf); #elif defined GNULIB_POSIXCHECK # undef fmodf # if HAVE_RAW_DECL_FMODF _GL_WARN_ON_USE (fmodf, "fmodf is unportable - " "use gnulib module fmodf for portability"); # endif #endif #if @GNULIB_FMOD@ # if @REPLACE_FMOD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmod # define fmod rpl_fmod # endif _GL_FUNCDECL_RPL (fmod, double, (double x, double y)); _GL_CXXALIAS_RPL (fmod, double, (double x, double y)); # else _GL_CXXALIAS_SYS (fmod, double, (double x, double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (fmod, double, (double x, double y)); # endif #elif defined GNULIB_POSIXCHECK # undef fmod # if HAVE_RAW_DECL_FMOD _GL_WARN_ON_USE (fmod, "fmod has portability problems - " "use gnulib module fmod for portability"); # endif #endif #if @GNULIB_FMODL@ # if @REPLACE_FMODL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fmodl # define fmodl rpl_fmodl # endif _GL_FUNCDECL_RPL (fmodl, long double, (long double x, long double y)); _GL_CXXALIAS_RPL (fmodl, long double, (long double x, long double y)); # else # if !@HAVE_FMODL@ # undef fmodl _GL_FUNCDECL_SYS (fmodl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (fmodl, long double, (long double x, long double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (fmodl); # endif #elif defined GNULIB_POSIXCHECK # undef fmodl # if HAVE_RAW_DECL_FMODL _GL_WARN_ON_USE (fmodl, "fmodl is unportable - " "use gnulib module fmodl for portability"); # endif #endif /* Write x as x = mantissa * 2^exp where If x finite and nonzero: 0.5 <= |mantissa| < 1.0. If x is zero: mantissa = x, exp = 0. If x is infinite or NaN: mantissa = x, exp unspecified. Store exp in *EXPPTR and return mantissa. */ #if @GNULIB_FREXPF@ # if @REPLACE_FREXPF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef frexpf # define frexpf rpl_frexpf # endif _GL_FUNCDECL_RPL (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (frexpf, float, (float x, int *expptr)); # else # if !@HAVE_FREXPF@ # undef frexpf _GL_FUNCDECL_SYS (frexpf, float, (float x, int *expptr) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (frexpf, float, (float x, int *expptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (frexpf); # endif #elif defined GNULIB_POSIXCHECK # undef frexpf # if HAVE_RAW_DECL_FREXPF _GL_WARN_ON_USE (frexpf, "frexpf is unportable - " "use gnulib module frexpf for portability"); # endif #endif /* Write x as x = mantissa * 2^exp where If x finite and nonzero: 0.5 <= |mantissa| < 1.0. If x is zero: mantissa = x, exp = 0. If x is infinite or NaN: mantissa = x, exp unspecified. Store exp in *EXPPTR and return mantissa. */ #if @GNULIB_FREXP@ # if @REPLACE_FREXP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef frexp # define frexp rpl_frexp # endif _GL_FUNCDECL_RPL (frexp, double, (double x, int *expptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (frexp, double, (double x, int *expptr)); # else _GL_CXXALIAS_SYS (frexp, double, (double x, int *expptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (frexp, double, (double x, int *expptr)); # endif #elif defined GNULIB_POSIXCHECK # undef frexp /* Assume frexp is always declared. */ _GL_WARN_ON_USE (frexp, "frexp is unportable - " "use gnulib module frexp for portability"); #endif /* Write x as x = mantissa * 2^exp where If x finite and nonzero: 0.5 <= |mantissa| < 1.0. If x is zero: mantissa = x, exp = 0. If x is infinite or NaN: mantissa = x, exp unspecified. Store exp in *EXPPTR and return mantissa. */ #if @GNULIB_FREXPL@ && @REPLACE_FREXPL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef frexpl # define frexpl rpl_frexpl # endif _GL_FUNCDECL_RPL (frexpl, long double, (long double x, int *expptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (frexpl, long double, (long double x, int *expptr)); #else # if !@HAVE_DECL_FREXPL@ _GL_FUNCDECL_SYS (frexpl, long double, (long double x, int *expptr) _GL_ARG_NONNULL ((2))); # endif # if @GNULIB_FREXPL@ _GL_CXXALIAS_SYS (frexpl, long double, (long double x, int *expptr)); # endif #endif #if @GNULIB_FREXPL@ && !(@REPLACE_FREXPL@ && !@HAVE_DECL_FREXPL@) # if __GLIBC__ >= 2 _GL_CXXALIASWARN (frexpl); # endif #endif #if !@GNULIB_FREXPL@ && defined GNULIB_POSIXCHECK # undef frexpl # if HAVE_RAW_DECL_FREXPL _GL_WARN_ON_USE (frexpl, "frexpl is unportable - " "use gnulib module frexpl for portability"); # endif #endif /* Return sqrt(x^2+y^2). */ #if @GNULIB_HYPOTF@ # if @REPLACE_HYPOTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef hypotf # define hypotf rpl_hypotf # endif _GL_FUNCDECL_RPL (hypotf, float, (float x, float y)); _GL_CXXALIAS_RPL (hypotf, float, (float x, float y)); # else # if !@HAVE_HYPOTF@ _GL_FUNCDECL_SYS (hypotf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (hypotf, float, (float x, float y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (hypotf); # endif #elif defined GNULIB_POSIXCHECK # undef hypotf # if HAVE_RAW_DECL_HYPOTF _GL_WARN_ON_USE (hypotf, "hypotf is unportable - " "use gnulib module hypotf for portability"); # endif #endif /* Return sqrt(x^2+y^2). */ #if @GNULIB_HYPOT@ # if @REPLACE_HYPOT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef hypot # define hypot rpl_hypot # endif _GL_FUNCDECL_RPL (hypot, double, (double x, double y)); _GL_CXXALIAS_RPL (hypot, double, (double x, double y)); # else _GL_CXXALIAS_SYS (hypot, double, (double x, double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (hypot, double, (double x, double y)); # endif #elif defined GNULIB_POSIXCHECK # undef hypot # if HAVE_RAW_DECL_HYPOT _GL_WARN_ON_USE (hypotf, "hypot has portability problems - " "use gnulib module hypot for portability"); # endif #endif /* Return sqrt(x^2+y^2). */ #if @GNULIB_HYPOTL@ # if @REPLACE_HYPOTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef hypotl # define hypotl rpl_hypotl # endif _GL_FUNCDECL_RPL (hypotl, long double, (long double x, long double y)); _GL_CXXALIAS_RPL (hypotl, long double, (long double x, long double y)); # else # if !@HAVE_HYPOTL@ _GL_FUNCDECL_SYS (hypotl, long double, (long double x, long double y)); # endif _GL_CXXALIAS_SYS (hypotl, long double, (long double x, long double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (hypotl); # endif #elif defined GNULIB_POSIXCHECK # undef hypotl # if HAVE_RAW_DECL_HYPOTL _GL_WARN_ON_USE (hypotl, "hypotl is unportable - " "use gnulib module hypotl for portability"); # endif #endif #if @GNULIB_ILOGBF@ # if @REPLACE_ILOGBF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ilogbf # define ilogbf rpl_ilogbf # endif _GL_FUNCDECL_RPL (ilogbf, int, (float x)); _GL_CXXALIAS_RPL (ilogbf, int, (float x)); # else # if !@HAVE_ILOGBF@ _GL_FUNCDECL_SYS (ilogbf, int, (float x)); # endif _GL_CXXALIAS_SYS (ilogbf, int, (float x)); # endif _GL_CXXALIASWARN (ilogbf); #elif defined GNULIB_POSIXCHECK # undef ilogbf # if HAVE_RAW_DECL_ILOGBF _GL_WARN_ON_USE (ilogbf, "ilogbf is unportable - " "use gnulib module ilogbf for portability"); # endif #endif #if @GNULIB_ILOGB@ # if @REPLACE_ILOGB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ilogb # define ilogb rpl_ilogb # endif _GL_FUNCDECL_RPL (ilogb, int, (double x)); _GL_CXXALIAS_RPL (ilogb, int, (double x)); # else # if !@HAVE_ILOGB@ _GL_FUNCDECL_SYS (ilogb, int, (double x)); # endif _GL_CXXALIAS_SYS (ilogb, int, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (ilogb, int, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef ilogb # if HAVE_RAW_DECL_ILOGB _GL_WARN_ON_USE (ilogb, "ilogb is unportable - " "use gnulib module ilogb for portability"); # endif #endif #if @GNULIB_ILOGBL@ # if @REPLACE_ILOGBL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ilogbl # define ilogbl rpl_ilogbl # endif _GL_FUNCDECL_RPL (ilogbl, int, (long double x)); _GL_CXXALIAS_RPL (ilogbl, int, (long double x)); # else # if !@HAVE_ILOGBL@ # undef ilogbl _GL_FUNCDECL_SYS (ilogbl, int, (long double x)); # endif _GL_CXXALIAS_SYS (ilogbl, int, (long double x)); # endif _GL_CXXALIASWARN (ilogbl); #elif defined GNULIB_POSIXCHECK # undef ilogbl # if HAVE_RAW_DECL_ILOGBL _GL_WARN_ON_USE (ilogbl, "ilogbl is unportable - " "use gnulib module ilogbl for portability"); # endif #endif #if @GNULIB_MDA_J0@ /* On native Windows, map 'j0' to '_j0', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::j0 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef j0 # define j0 _j0 # endif _GL_CXXALIAS_MDA (j0, double, (double x)); # else _GL_CXXALIAS_SYS (j0, double, (double x)); # endif _GL_CXXALIASWARN (j0); #endif #if @GNULIB_MDA_J1@ /* On native Windows, map 'j1' to '_j1', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::j1 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef j1 # define j1 _j1 # endif _GL_CXXALIAS_MDA (j1, double, (double x)); # else _GL_CXXALIAS_SYS (j1, double, (double x)); # endif _GL_CXXALIASWARN (j1); #endif #if @GNULIB_MDA_JN@ /* On native Windows, map 'jn' to '_jn', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::jn always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef jn # define jn _jn # endif _GL_CXXALIAS_MDA (jn, double, (int n, double x)); # else _GL_CXXALIAS_SYS (jn, double, (int n, double x)); # endif _GL_CXXALIASWARN (jn); #endif /* Return x * 2^exp. */ #if @GNULIB_LDEXPF@ # if !@HAVE_LDEXPF@ # undef ldexpf _GL_FUNCDECL_SYS (ldexpf, float, (float x, int exp)); # endif _GL_CXXALIAS_SYS (ldexpf, float, (float x, int exp)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ldexpf); # endif #elif defined GNULIB_POSIXCHECK # undef ldexpf # if HAVE_RAW_DECL_LDEXPF _GL_WARN_ON_USE (ldexpf, "ldexpf is unportable - " "use gnulib module ldexpf for portability"); # endif #endif /* Return x * 2^exp. */ #if @GNULIB_LDEXPL@ && @REPLACE_LDEXPL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ldexpl # define ldexpl rpl_ldexpl # endif _GL_FUNCDECL_RPL (ldexpl, long double, (long double x, int exp)); _GL_CXXALIAS_RPL (ldexpl, long double, (long double x, int exp)); #else # if !@HAVE_DECL_LDEXPL@ _GL_FUNCDECL_SYS (ldexpl, long double, (long double x, int exp)); # endif # if @GNULIB_LDEXPL@ _GL_CXXALIAS_SYS (ldexpl, long double, (long double x, int exp)); # endif #endif #if @GNULIB_LDEXPL@ # if __GLIBC__ >= 2 _GL_CXXALIASWARN (ldexpl); # endif #endif #if !@GNULIB_LDEXPL@ && defined GNULIB_POSIXCHECK # undef ldexpl # if HAVE_RAW_DECL_LDEXPL _GL_WARN_ON_USE (ldexpl, "ldexpl is unportable - " "use gnulib module ldexpl for portability"); # endif #endif #if @GNULIB_LOGF@ # if @REPLACE_LOGF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logf # define logf rpl_logf # endif _GL_FUNCDECL_RPL (logf, float, (float x)); _GL_CXXALIAS_RPL (logf, float, (float x)); # else # if !@HAVE_LOGF@ # undef logf _GL_FUNCDECL_SYS (logf, float, (float x)); # endif _GL_CXXALIAS_SYS (logf, float, (float x)); # endif _GL_CXXALIASWARN (logf); #elif defined GNULIB_POSIXCHECK # undef logf # if HAVE_RAW_DECL_LOGF _GL_WARN_ON_USE (logf, "logf is unportable - " "use gnulib module logf for portability"); # endif #endif #if @GNULIB_LOG@ # if @REPLACE_LOG@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log # define log rpl_log # endif _GL_FUNCDECL_RPL (log, double, (double x)); _GL_CXXALIAS_RPL (log, double, (double x)); # else _GL_CXXALIAS_SYS (log, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (log, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef log # if HAVE_RAW_DECL_LOG _GL_WARN_ON_USE (log, "log has portability problems - " "use gnulib module log for portability"); # endif #endif #if @GNULIB_LOGL@ # if @REPLACE_LOGL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logl # define logl rpl_logl # endif _GL_FUNCDECL_RPL (logl, long double, (long double x)); _GL_CXXALIAS_RPL (logl, long double, (long double x)); # else # if !@HAVE_LOGL@ || !@HAVE_DECL_LOGL@ # undef logl _GL_FUNCDECL_SYS (logl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (logl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (logl); # endif #elif defined GNULIB_POSIXCHECK # undef logl # if HAVE_RAW_DECL_LOGL _GL_WARN_ON_USE (logl, "logl is unportable - " "use gnulib module logl for portability"); # endif #endif #if @GNULIB_LOG10F@ # if @REPLACE_LOG10F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log10f # define log10f rpl_log10f # endif _GL_FUNCDECL_RPL (log10f, float, (float x)); _GL_CXXALIAS_RPL (log10f, float, (float x)); # else # if !@HAVE_LOG10F@ # undef log10f _GL_FUNCDECL_SYS (log10f, float, (float x)); # endif _GL_CXXALIAS_SYS (log10f, float, (float x)); # endif _GL_CXXALIASWARN (log10f); #elif defined GNULIB_POSIXCHECK # undef log10f # if HAVE_RAW_DECL_LOG10F _GL_WARN_ON_USE (log10f, "log10f is unportable - " "use gnulib module log10f for portability"); # endif #endif #if @GNULIB_LOG10@ # if @REPLACE_LOG10@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log10 # define log10 rpl_log10 # endif _GL_FUNCDECL_RPL (log10, double, (double x)); _GL_CXXALIAS_RPL (log10, double, (double x)); # else _GL_CXXALIAS_SYS (log10, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (log10, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef log10 # if HAVE_RAW_DECL_LOG10 _GL_WARN_ON_USE (log10, "log10 has portability problems - " "use gnulib module log10 for portability"); # endif #endif #if @GNULIB_LOG10L@ # if @REPLACE_LOG10L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log10l # define log10l rpl_log10l # endif _GL_FUNCDECL_RPL (log10l, long double, (long double x)); _GL_CXXALIAS_RPL (log10l, long double, (long double x)); # else # if !@HAVE_LOG10L@ || !@HAVE_DECL_LOG10L@ # undef log10l _GL_FUNCDECL_SYS (log10l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (log10l, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (log10l); # endif #elif defined GNULIB_POSIXCHECK # undef log10l # if HAVE_RAW_DECL_LOG10L _GL_WARN_ON_USE (log10l, "log10l is unportable - " "use gnulib module log10l for portability"); # endif #endif #if @GNULIB_LOG1PF@ # if @REPLACE_LOG1PF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log1pf # define log1pf rpl_log1pf # endif _GL_FUNCDECL_RPL (log1pf, float, (float x)); _GL_CXXALIAS_RPL (log1pf, float, (float x)); # else # if !@HAVE_LOG1PF@ _GL_FUNCDECL_SYS (log1pf, float, (float x)); # endif _GL_CXXALIAS_SYS (log1pf, float, (float x)); # endif _GL_CXXALIASWARN (log1pf); #elif defined GNULIB_POSIXCHECK # undef log1pf # if HAVE_RAW_DECL_LOG1PF _GL_WARN_ON_USE (log1pf, "log1pf is unportable - " "use gnulib module log1pf for portability"); # endif #endif #if @GNULIB_LOG1P@ # if @REPLACE_LOG1P@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log1p # define log1p rpl_log1p # endif _GL_FUNCDECL_RPL (log1p, double, (double x)); _GL_CXXALIAS_RPL (log1p, double, (double x)); # else # if !@HAVE_LOG1P@ _GL_FUNCDECL_SYS (log1p, double, (double x)); # endif _GL_CXXALIAS_SYS (log1p, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (log1p, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef log1p # if HAVE_RAW_DECL_LOG1P _GL_WARN_ON_USE (log1p, "log1p has portability problems - " "use gnulib module log1p for portability"); # endif #endif #if @GNULIB_LOG1PL@ # if @REPLACE_LOG1PL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log1pl # define log1pl rpl_log1pl # endif _GL_FUNCDECL_RPL (log1pl, long double, (long double x)); _GL_CXXALIAS_RPL (log1pl, long double, (long double x)); # else # if !@HAVE_LOG1PL@ _GL_FUNCDECL_SYS (log1pl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (log1pl, long double, (long double x)); # endif _GL_CXXALIASWARN (log1pl); #elif defined GNULIB_POSIXCHECK # undef log1pl # if HAVE_RAW_DECL_LOG1PL _GL_WARN_ON_USE (log1pl, "log1pl has portability problems - " "use gnulib module log1pl for portability"); # endif #endif #if @GNULIB_LOG2F@ # if @REPLACE_LOG2F@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log2f # define log2f rpl_log2f # endif _GL_FUNCDECL_RPL (log2f, float, (float x)); _GL_CXXALIAS_RPL (log2f, float, (float x)); # else # if !@HAVE_DECL_LOG2F@ # undef log2f _GL_FUNCDECL_SYS (log2f, float, (float x)); # endif _GL_CXXALIAS_SYS (log2f, float, (float x)); # endif _GL_CXXALIASWARN (log2f); #elif defined GNULIB_POSIXCHECK # undef log2f # if HAVE_RAW_DECL_LOG2F _GL_WARN_ON_USE (log2f, "log2f is unportable - " "use gnulib module log2f for portability"); # endif #endif #if @GNULIB_LOG2@ # if @REPLACE_LOG2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log2 # define log2 rpl_log2 # endif _GL_FUNCDECL_RPL (log2, double, (double x)); _GL_CXXALIAS_RPL (log2, double, (double x)); # else # if !@HAVE_DECL_LOG2@ # undef log2 _GL_FUNCDECL_SYS (log2, double, (double x)); # endif _GL_CXXALIAS_SYS (log2, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (log2, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef log2 # if HAVE_RAW_DECL_LOG2 _GL_WARN_ON_USE (log2, "log2 is unportable - " "use gnulib module log2 for portability"); # endif #endif #if @GNULIB_LOG2L@ # if @REPLACE_LOG2L@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef log2l # define log2l rpl_log2l # endif _GL_FUNCDECL_RPL (log2l, long double, (long double x)); _GL_CXXALIAS_RPL (log2l, long double, (long double x)); # else # if !@HAVE_DECL_LOG2L@ _GL_FUNCDECL_SYS (log2l, long double, (long double x)); # endif _GL_CXXALIAS_SYS (log2l, long double, (long double x)); # endif _GL_CXXALIASWARN (log2l); #elif defined GNULIB_POSIXCHECK # undef log2l # if HAVE_RAW_DECL_LOG2L _GL_WARN_ON_USE (log2l, "log2l is unportable - " "use gnulib module log2l for portability"); # endif #endif #if @GNULIB_LOGBF@ # if @REPLACE_LOGBF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logbf # define logbf rpl_logbf # endif _GL_FUNCDECL_RPL (logbf, float, (float x)); _GL_CXXALIAS_RPL (logbf, float, (float x)); # else # if !@HAVE_LOGBF@ _GL_FUNCDECL_SYS (logbf, float, (float x)); # endif _GL_CXXALIAS_SYS (logbf, float, (float x)); # endif _GL_CXXALIASWARN (logbf); #elif defined GNULIB_POSIXCHECK # undef logbf # if HAVE_RAW_DECL_LOGBF _GL_WARN_ON_USE (logbf, "logbf is unportable - " "use gnulib module logbf for portability"); # endif #endif #if @GNULIB_LOGB@ # if @REPLACE_LOGB@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logb # define logb rpl_logb # endif _GL_FUNCDECL_RPL (logb, double, (double x)); _GL_CXXALIAS_RPL (logb, double, (double x)); # else # if !@HAVE_DECL_LOGB@ _GL_FUNCDECL_SYS (logb, double, (double x)); # endif _GL_CXXALIAS_SYS (logb, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (logb, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef logb # if HAVE_RAW_DECL_LOGB _GL_WARN_ON_USE (logb, "logb is unportable - " "use gnulib module logb for portability"); # endif #endif #if @GNULIB_LOGBL@ # if @REPLACE_LOGBL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef logbl # define logbl rpl_logbl # endif _GL_FUNCDECL_RPL (logbl, long double, (long double x)); _GL_CXXALIAS_RPL (logbl, long double, (long double x)); # else # if !@HAVE_LOGBL@ _GL_FUNCDECL_SYS (logbl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (logbl, long double, (long double x)); # endif _GL_CXXALIASWARN (logbl); #elif defined GNULIB_POSIXCHECK # undef logbl # if HAVE_RAW_DECL_LOGBL _GL_WARN_ON_USE (logbl, "logbl is unportable - " "use gnulib module logbl for portability"); # endif #endif #if @GNULIB_MODFF@ # if @REPLACE_MODFF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef modff # define modff rpl_modff # endif _GL_FUNCDECL_RPL (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (modff, float, (float x, float *iptr)); # else # if !@HAVE_MODFF@ # undef modff _GL_FUNCDECL_SYS (modff, float, (float x, float *iptr) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (modff, float, (float x, float *iptr)); # endif _GL_CXXALIASWARN (modff); #elif defined GNULIB_POSIXCHECK # undef modff # if HAVE_RAW_DECL_MODFF _GL_WARN_ON_USE (modff, "modff is unportable - " "use gnulib module modff for portability"); # endif #endif #if @GNULIB_MODF@ # if @REPLACE_MODF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef modf # define modf rpl_modf # endif _GL_FUNCDECL_RPL (modf, double, (double x, double *iptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (modf, double, (double x, double *iptr)); # else _GL_CXXALIAS_SYS (modf, double, (double x, double *iptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (modf, double, (double x, double *iptr)); # endif #elif defined GNULIB_POSIXCHECK # undef modf # if HAVE_RAW_DECL_MODF _GL_WARN_ON_USE (modf, "modf has portability problems - " "use gnulib module modf for portability"); # endif #endif #if @GNULIB_MODFL@ # if @REPLACE_MODFL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef modfl # define modfl rpl_modfl # endif _GL_FUNCDECL_RPL (modfl, long double, (long double x, long double *iptr) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (modfl, long double, (long double x, long double *iptr)); # else # if !@HAVE_MODFL@ # undef modfl _GL_FUNCDECL_SYS (modfl, long double, (long double x, long double *iptr) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (modfl, long double, (long double x, long double *iptr)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (modfl); # endif #elif defined GNULIB_POSIXCHECK # undef modfl # if HAVE_RAW_DECL_MODFL _GL_WARN_ON_USE (modfl, "modfl is unportable - " "use gnulib module modfl for portability"); # endif #endif #if @GNULIB_POWF@ # if !@HAVE_POWF@ # undef powf _GL_FUNCDECL_SYS (powf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (powf, float, (float x, float y)); _GL_CXXALIASWARN (powf); #elif defined GNULIB_POSIXCHECK # undef powf # if HAVE_RAW_DECL_POWF _GL_WARN_ON_USE (powf, "powf is unportable - " "use gnulib module powf for portability"); # endif #endif #if @GNULIB_REMAINDERF@ # if @REPLACE_REMAINDERF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remainderf # define remainderf rpl_remainderf # endif _GL_FUNCDECL_RPL (remainderf, float, (float x, float y)); _GL_CXXALIAS_RPL (remainderf, float, (float x, float y)); # else # if !@HAVE_REMAINDERF@ _GL_FUNCDECL_SYS (remainderf, float, (float x, float y)); # endif _GL_CXXALIAS_SYS (remainderf, float, (float x, float y)); # endif _GL_CXXALIASWARN (remainderf); #elif defined GNULIB_POSIXCHECK # undef remainderf # if HAVE_RAW_DECL_REMAINDERF _GL_WARN_ON_USE (remainderf, "remainderf is unportable - " "use gnulib module remainderf for portability"); # endif #endif #if @GNULIB_REMAINDER@ # if @REPLACE_REMAINDER@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remainder # define remainder rpl_remainder # endif _GL_FUNCDECL_RPL (remainder, double, (double x, double y)); _GL_CXXALIAS_RPL (remainder, double, (double x, double y)); # else # if !@HAVE_REMAINDER@ || !@HAVE_DECL_REMAINDER@ _GL_FUNCDECL_SYS (remainder, double, (double x, double y)); # endif _GL_CXXALIAS_SYS (remainder, double, (double x, double y)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (remainder, double, (double x, double y)); # endif #elif defined GNULIB_POSIXCHECK # undef remainder # if HAVE_RAW_DECL_REMAINDER _GL_WARN_ON_USE (remainder, "remainder is unportable - " "use gnulib module remainder for portability"); # endif #endif #if @GNULIB_REMAINDERL@ # if @REPLACE_REMAINDERL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef remainderl # define remainderl rpl_remainderl # endif _GL_FUNCDECL_RPL (remainderl, long double, (long double x, long double y)); _GL_CXXALIAS_RPL (remainderl, long double, (long double x, long double y)); # else # if !@HAVE_DECL_REMAINDERL@ # undef remainderl # if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (remainderl, long double, (long double x, long double y)); # endif # endif _GL_CXXALIAS_SYS (remainderl, long double, (long double x, long double y)); # endif _GL_CXXALIASWARN (remainderl); #elif defined GNULIB_POSIXCHECK # undef remainderl # if HAVE_RAW_DECL_REMAINDERL _GL_WARN_ON_USE (remainderl, "remainderl is unportable - " "use gnulib module remainderl for portability"); # endif #endif #if @GNULIB_RINTF@ # if !@HAVE_DECL_RINTF@ _GL_FUNCDECL_SYS (rintf, float, (float x)); # endif _GL_CXXALIAS_SYS (rintf, float, (float x)); _GL_CXXALIASWARN (rintf); #elif defined GNULIB_POSIXCHECK # undef rintf # if HAVE_RAW_DECL_RINTF _GL_WARN_ON_USE (rintf, "rintf is unportable - " "use gnulib module rintf for portability"); # endif #endif #if @GNULIB_RINT@ # if !@HAVE_RINT@ _GL_FUNCDECL_SYS (rint, double, (double x)); # endif _GL_CXXALIAS_SYS (rint, double, (double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (rint, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef rint # if HAVE_RAW_DECL_RINT _GL_WARN_ON_USE (rint, "rint is unportable - " "use gnulib module rint for portability"); # endif #endif #if @GNULIB_RINTL@ # if @REPLACE_RINTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rintl # define rintl rpl_rintl # endif _GL_FUNCDECL_RPL (rintl, long double, (long double x)); _GL_CXXALIAS_RPL (rintl, long double, (long double x)); # else # if !@HAVE_RINTL@ _GL_FUNCDECL_SYS (rintl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (rintl, long double, (long double x)); # endif _GL_CXXALIASWARN (rintl); #elif defined GNULIB_POSIXCHECK # undef rintl # if HAVE_RAW_DECL_RINTL _GL_WARN_ON_USE (rintl, "rintl is unportable - " "use gnulib module rintl for portability"); # endif #endif #if @GNULIB_ROUNDF@ # if @REPLACE_ROUNDF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef roundf # define roundf rpl_roundf # endif _GL_FUNCDECL_RPL (roundf, float, (float x)); _GL_CXXALIAS_RPL (roundf, float, (float x)); # else # if !@HAVE_DECL_ROUNDF@ _GL_FUNCDECL_SYS (roundf, float, (float x)); # endif _GL_CXXALIAS_SYS (roundf, float, (float x)); # endif _GL_CXXALIASWARN (roundf); #elif defined GNULIB_POSIXCHECK # undef roundf # if HAVE_RAW_DECL_ROUNDF _GL_WARN_ON_USE (roundf, "roundf is unportable - " "use gnulib module roundf for portability"); # endif #endif #if @GNULIB_ROUND@ # if @REPLACE_ROUND@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef round # define round rpl_round # endif _GL_FUNCDECL_RPL (round, double, (double x)); _GL_CXXALIAS_RPL (round, double, (double x)); # else # if !@HAVE_DECL_ROUND@ _GL_FUNCDECL_SYS (round, double, (double x)); # endif _GL_CXXALIAS_SYS (round, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (round, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef round # if HAVE_RAW_DECL_ROUND _GL_WARN_ON_USE (round, "round is unportable - " "use gnulib module round for portability"); # endif #endif #if @GNULIB_ROUNDL@ # if @REPLACE_ROUNDL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef roundl # define roundl rpl_roundl # endif _GL_FUNCDECL_RPL (roundl, long double, (long double x)); _GL_CXXALIAS_RPL (roundl, long double, (long double x)); # else # if !@HAVE_DECL_ROUNDL@ # undef roundl # if !(defined __cplusplus && defined _AIX) _GL_FUNCDECL_SYS (roundl, long double, (long double x)); # endif # endif _GL_CXXALIAS_SYS (roundl, long double, (long double x)); # endif _GL_CXXALIASWARN (roundl); #elif defined GNULIB_POSIXCHECK # undef roundl # if HAVE_RAW_DECL_ROUNDL _GL_WARN_ON_USE (roundl, "roundl is unportable - " "use gnulib module roundl for portability"); # endif #endif #if @GNULIB_SINF@ # if @REPLACE_SINF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sinf # define sinf rpl_sinf # endif _GL_FUNCDECL_RPL (sinf, float, (float x)); _GL_CXXALIAS_RPL (sinf, float, (float x)); # else # if !@HAVE_SINF@ # undef sinf _GL_FUNCDECL_SYS (sinf, float, (float x)); # endif _GL_CXXALIAS_SYS (sinf, float, (float x)); # endif _GL_CXXALIASWARN (sinf); #elif defined GNULIB_POSIXCHECK # undef sinf # if HAVE_RAW_DECL_SINF _GL_WARN_ON_USE (sinf, "sinf is unportable - " "use gnulib module sinf for portability"); # endif #endif #if @GNULIB_SINL@ # if !@HAVE_SINL@ || !@HAVE_DECL_SINL@ # undef sinl _GL_FUNCDECL_SYS (sinl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (sinl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sinl); # endif #elif defined GNULIB_POSIXCHECK # undef sinl # if HAVE_RAW_DECL_SINL _GL_WARN_ON_USE (sinl, "sinl is unportable - " "use gnulib module sinl for portability"); # endif #endif #if @GNULIB_SINHF@ # if @REPLACE_SINHF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sinhf # define sinhf rpl_sinhf # endif _GL_FUNCDECL_RPL (sinhf, float, (float x)); _GL_CXXALIAS_RPL (sinhf, float, (float x)); # else # if !@HAVE_SINHF@ # undef sinhf _GL_FUNCDECL_SYS (sinhf, float, (float x)); # endif _GL_CXXALIAS_SYS (sinhf, float, (float x)); # endif _GL_CXXALIASWARN (sinhf); #elif defined GNULIB_POSIXCHECK # undef sinhf # if HAVE_RAW_DECL_SINHF _GL_WARN_ON_USE (sinhf, "sinhf is unportable - " "use gnulib module sinhf for portability"); # endif #endif #if @GNULIB_SQRTF@ # if @REPLACE_SQRTF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sqrtf # define sqrtf rpl_sqrtf # endif _GL_FUNCDECL_RPL (sqrtf, float, (float x)); _GL_CXXALIAS_RPL (sqrtf, float, (float x)); # else # if !@HAVE_SQRTF@ # undef sqrtf _GL_FUNCDECL_SYS (sqrtf, float, (float x)); # endif _GL_CXXALIAS_SYS (sqrtf, float, (float x)); # endif _GL_CXXALIASWARN (sqrtf); #elif defined GNULIB_POSIXCHECK # undef sqrtf # if HAVE_RAW_DECL_SQRTF _GL_WARN_ON_USE (sqrtf, "sqrtf is unportable - " "use gnulib module sqrtf for portability"); # endif #endif #if @GNULIB_SQRTL@ # if @REPLACE_SQRTL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sqrtl # define sqrtl rpl_sqrtl # endif _GL_FUNCDECL_RPL (sqrtl, long double, (long double x)); _GL_CXXALIAS_RPL (sqrtl, long double, (long double x)); # else # if !@HAVE_SQRTL@ || !@HAVE_DECL_SQRTL@ # undef sqrtl _GL_FUNCDECL_SYS (sqrtl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (sqrtl, long double, (long double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN (sqrtl); # endif #elif defined GNULIB_POSIXCHECK # undef sqrtl # if HAVE_RAW_DECL_SQRTL _GL_WARN_ON_USE (sqrtl, "sqrtl is unportable - " "use gnulib module sqrtl for portability"); # endif #endif #if @GNULIB_TANF@ # if @REPLACE_TANF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tanf # define tanf rpl_tanf # endif _GL_FUNCDECL_RPL (tanf, float, (float x)); _GL_CXXALIAS_RPL (tanf, float, (float x)); # else # if !@HAVE_TANF@ # undef tanf _GL_FUNCDECL_SYS (tanf, float, (float x)); # endif _GL_CXXALIAS_SYS (tanf, float, (float x)); # endif _GL_CXXALIASWARN (tanf); #elif defined GNULIB_POSIXCHECK # undef tanf # if HAVE_RAW_DECL_TANF _GL_WARN_ON_USE (tanf, "tanf is unportable - " "use gnulib module tanf for portability"); # endif #endif #if @GNULIB_TANL@ # if !@HAVE_TANL@ || !@HAVE_DECL_TANL@ # undef tanl _GL_FUNCDECL_SYS (tanl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (tanl, long double, (long double x)); # if __GLIBC__ >= 2 _GL_CXXALIASWARN (tanl); # endif #elif defined GNULIB_POSIXCHECK # undef tanl # if HAVE_RAW_DECL_TANL _GL_WARN_ON_USE (tanl, "tanl is unportable - " "use gnulib module tanl for portability"); # endif #endif #if @GNULIB_TANHF@ # if @REPLACE_TANHF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef tanhf # define tanhf rpl_tanhf # endif _GL_FUNCDECL_RPL (tanhf, float, (float x)); _GL_CXXALIAS_RPL (tanhf, float, (float x)); # else # if !@HAVE_TANHF@ # undef tanhf _GL_FUNCDECL_SYS (tanhf, float, (float x)); # endif _GL_CXXALIAS_SYS (tanhf, float, (float x)); # endif _GL_CXXALIASWARN (tanhf); #elif defined GNULIB_POSIXCHECK # undef tanhf # if HAVE_RAW_DECL_TANHF _GL_WARN_ON_USE (tanhf, "tanhf is unportable - " "use gnulib module tanhf for portability"); # endif #endif #if @GNULIB_TRUNCF@ # if @REPLACE_TRUNCF@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncf # define truncf rpl_truncf # endif _GL_FUNCDECL_RPL (truncf, float, (float x)); _GL_CXXALIAS_RPL (truncf, float, (float x)); # else # if !@HAVE_DECL_TRUNCF@ _GL_FUNCDECL_SYS (truncf, float, (float x)); # endif _GL_CXXALIAS_SYS (truncf, float, (float x)); # endif _GL_CXXALIASWARN (truncf); #elif defined GNULIB_POSIXCHECK # undef truncf # if HAVE_RAW_DECL_TRUNCF _GL_WARN_ON_USE (truncf, "truncf is unportable - " "use gnulib module truncf for portability"); # endif #endif #if @GNULIB_TRUNC@ # if @REPLACE_TRUNC@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef trunc # define trunc rpl_trunc # endif _GL_FUNCDECL_RPL (trunc, double, (double x)); _GL_CXXALIAS_RPL (trunc, double, (double x)); # else # if !@HAVE_DECL_TRUNC@ _GL_FUNCDECL_SYS (trunc, double, (double x)); # endif _GL_CXXALIAS_SYS (trunc, double, (double x)); # endif # if __GLIBC__ >= 2 _GL_CXXALIASWARN1 (trunc, double, (double x)); # endif #elif defined GNULIB_POSIXCHECK # undef trunc # if HAVE_RAW_DECL_TRUNC _GL_WARN_ON_USE (trunc, "trunc is unportable - " "use gnulib module trunc for portability"); # endif #endif #if @GNULIB_TRUNCL@ # if @REPLACE_TRUNCL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncl # define truncl rpl_truncl # endif _GL_FUNCDECL_RPL (truncl, long double, (long double x)); _GL_CXXALIAS_RPL (truncl, long double, (long double x)); # else # if !@HAVE_DECL_TRUNCL@ _GL_FUNCDECL_SYS (truncl, long double, (long double x)); # endif _GL_CXXALIAS_SYS (truncl, long double, (long double x)); # endif _GL_CXXALIASWARN (truncl); #elif defined GNULIB_POSIXCHECK # undef truncl # if HAVE_RAW_DECL_TRUNCL _GL_WARN_ON_USE (truncl, "truncl is unportable - " "use gnulib module truncl for portability"); # endif #endif #if @GNULIB_MDA_Y0@ /* On native Windows, map 'y0' to '_y0', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::y0 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef y0 # define y0 _y0 # endif _GL_CXXALIAS_MDA (y0, double, (double x)); # else _GL_CXXALIAS_SYS (y0, double, (double x)); # endif _GL_CXXALIASWARN (y0); #endif #if @GNULIB_MDA_Y1@ /* On native Windows, map 'y1' to '_y1', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::y1 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef y1 # define y1 _y1 # endif _GL_CXXALIAS_MDA (y1, double, (double x)); # else _GL_CXXALIAS_SYS (y1, double, (double x)); # endif _GL_CXXALIASWARN (y1); #endif #if @GNULIB_MDA_YN@ /* On native Windows, map 'yn' to '_yn', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::yn always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef yn # define yn _yn # endif _GL_CXXALIAS_MDA (yn, double, (int n, double x)); # else _GL_CXXALIAS_SYS (yn, double, (int n, double x)); # endif _GL_CXXALIASWARN (yn); #endif /* Definitions of function-like macros come here, after the function declarations. */ #if @GNULIB_ISFINITE@ # if @REPLACE_ISFINITE@ _GL_EXTERN_C int gl_isfinitef (float x); _GL_EXTERN_C int gl_isfinited (double x); _GL_EXTERN_C int gl_isfinitel (long double x); # undef isfinite # define isfinite(x) \ (sizeof (x) == sizeof (long double) ? gl_isfinitel (x) : \ sizeof (x) == sizeof (double) ? gl_isfinited (x) : \ gl_isfinitef (x)) # endif # ifdef __cplusplus # if defined isfinite || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isfinite) # undef isfinite # if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined _AIX || (defined _WIN32 && !defined __CYGWIN__))) /* This platform's <cmath> possibly defines isfinite through a set of inline functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, rpl_isfinite, bool) # define isfinite rpl_isfinite # define GNULIB_NAMESPACE_LACKS_ISFINITE 1 # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isfinite, isfinite, bool) # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if defined isfinite _GL_WARN_REAL_FLOATING_DECL (isfinite); # undef isfinite # define isfinite(x) _GL_WARN_REAL_FLOATING_IMPL (isfinite, x) # endif #endif #if @GNULIB_ISINF@ # if @REPLACE_ISINF@ _GL_EXTERN_C int gl_isinff (float x); _GL_EXTERN_C int gl_isinfd (double x); _GL_EXTERN_C int gl_isinfl (long double x); # undef isinf # define isinf(x) \ (sizeof (x) == sizeof (long double) ? gl_isinfl (x) : \ sizeof (x) == sizeof (double) ? gl_isinfd (x) : \ gl_isinff (x)) # endif # ifdef __cplusplus # if defined isinf || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isinf) # undef isinf # if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || (defined _WIN32 && !defined __CYGWIN__))) /* This platform's <cmath> possibly defines isinf through a set of inline functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, rpl_isinf, bool) # define isinf rpl_isinf # define GNULIB_NAMESPACE_LACKS_ISINF 1 # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isinf, isinf, bool) # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if defined isinf _GL_WARN_REAL_FLOATING_DECL (isinf); # undef isinf # define isinf(x) _GL_WARN_REAL_FLOATING_IMPL (isinf, x) # endif #endif #if @GNULIB_ISNANF@ /* Test for NaN for 'float' numbers. */ # if @HAVE_ISNANF@ /* The original <math.h> included above provides a declaration of isnan macro or (older) isnanf function. */ # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. GCC >= 4.0 also provides __builtin_isnanf, but clang doesn't. */ # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) # elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) # endif # else /* Test whether X is a NaN. */ # undef isnanf # define isnanf rpl_isnanf _GL_EXTERN_C int isnanf (float x); # endif #endif #if @GNULIB_ISNAND@ /* Test for NaN for 'double' numbers. This function is a gnulib extension, unlike isnan() which applied only to 'double' numbers earlier but now is a type-generic macro. */ # if @HAVE_ISNAND@ /* The original <math.h> included above provides a declaration of isnan macro. */ # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. */ # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) # else # undef isnand # define isnand(x) isnan ((double)(x)) # endif # else /* Test whether X is a NaN. */ # undef isnand # define isnand rpl_isnand _GL_EXTERN_C int isnand (double x); # endif #endif #if @GNULIB_ISNANL@ /* Test for NaN for 'long double' numbers. */ # if @HAVE_ISNANL@ /* The original <math.h> included above provides a declaration of isnan macro or (older) isnanl function. */ # if (__GNUC__ >= 4) || (__clang_major__ >= 4) /* GCC >= 4.0 and clang provide a type-generic built-in for isnan. GCC >= 4.0 also provides __builtin_isnanl, but clang doesn't. */ # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) # elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) # endif # else /* Test whether X is a NaN. */ # undef isnanl # define isnanl rpl_isnanl _GL_EXTERN_C int isnanl (long double x) _GL_ATTRIBUTE_CONST; # endif #endif /* This must come *after* the snippets for GNULIB_ISNANF and GNULIB_ISNANL! */ #if @GNULIB_ISNAN@ # if @REPLACE_ISNAN@ /* We can't just use the isnanf macro (e.g.) as exposed by isnanf.h (e.g.) here, because those may end up being macros that recursively expand back to isnan. So use the gnulib replacements for them directly. */ # if @HAVE_ISNANF@ && (__GNUC__ >= 4) || (__clang_major__ >= 4) # define gl_isnan_f(x) __builtin_isnan ((float)(x)) # else _GL_EXTERN_C int rpl_isnanf (float x); # define gl_isnan_f(x) rpl_isnanf (x) # endif # if @HAVE_ISNAND@ && (__GNUC__ >= 4) || (__clang_major__ >= 4) # define gl_isnan_d(x) __builtin_isnan ((double)(x)) # else _GL_EXTERN_C int rpl_isnand (double x); # define gl_isnan_d(x) rpl_isnand (x) # endif # if @HAVE_ISNANL@ && (__GNUC__ >= 4) || (__clang_major__ >= 4) # define gl_isnan_l(x) __builtin_isnan ((long double)(x)) # else _GL_EXTERN_C int rpl_isnanl (long double x) _GL_ATTRIBUTE_CONST; # define gl_isnan_l(x) rpl_isnanl (x) # endif # undef isnan # define isnan(x) \ (sizeof (x) == sizeof (long double) ? gl_isnan_l (x) : \ sizeof (x) == sizeof (double) ? gl_isnan_d (x) : \ gl_isnan_f (x)) # elif (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnan # define isnan(x) \ (sizeof (x) == sizeof (long double) ? __builtin_isnan ((long double)(x)) : \ sizeof (x) == sizeof (double) ? __builtin_isnan ((double)(x)) : \ __builtin_isnan ((float)(x))) # endif # ifdef __cplusplus # if defined isnan || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (isnan) # undef isnan # if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__ && __clang_major__ < 12) || (defined __FreeBSD__ && __clang_major__ < 7) || defined __OpenBSD__ || (defined _WIN32 && !defined __CYGWIN__))) /* This platform's <cmath> possibly defines isnan through a set of inline functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, rpl_isnan, bool) # define isnan rpl_isnan # define GNULIB_NAMESPACE_LACKS_ISNAN 1 # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (isnan, isnan, bool) # endif # endif # else /* Ensure isnan is a macro. */ # ifndef isnan # define isnan isnan # endif # endif #elif defined GNULIB_POSIXCHECK # if defined isnan _GL_WARN_REAL_FLOATING_DECL (isnan); # undef isnan # define isnan(x) _GL_WARN_REAL_FLOATING_IMPL (isnan, x) # endif #endif #if @GNULIB_SIGNBIT@ # if (@REPLACE_SIGNBIT_USING_BUILTINS@ \ && (!defined __cplusplus || __cplusplus < 201103)) # undef signbit /* GCC >= 4.0 and clang provide three built-ins for signbit. */ # define signbit(x) \ (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ __builtin_signbitf (x)) # endif # if @REPLACE_SIGNBIT@ && !GNULIB_defined_signbit # undef signbit _GL_EXTERN_C int gl_signbitf (float arg); _GL_EXTERN_C int gl_signbitd (double arg); _GL_EXTERN_C int gl_signbitl (long double arg); # if (__GNUC__ >= 2 || defined __clang__) && !defined __STRICT_ANSI__ # define _GL_NUM_UINT_WORDS(type) \ ((sizeof (type) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) # if defined FLT_SIGNBIT_WORD && defined FLT_SIGNBIT_BIT && !defined gl_signbitf # define gl_signbitf_OPTIMIZED_MACRO # define gl_signbitf(arg) \ ({ union { float _value; \ unsigned int _word[_GL_NUM_UINT_WORDS (float)]; \ } _m; \ _m._value = (arg); \ (_m._word[FLT_SIGNBIT_WORD] >> FLT_SIGNBIT_BIT) & 1; \ }) # endif # if defined DBL_SIGNBIT_WORD && defined DBL_SIGNBIT_BIT && !defined gl_signbitd # define gl_signbitd_OPTIMIZED_MACRO # define gl_signbitd(arg) \ ({ union { double _value; \ unsigned int _word[_GL_NUM_UINT_WORDS (double)]; \ } _m; \ _m._value = (arg); \ (_m._word[DBL_SIGNBIT_WORD] >> DBL_SIGNBIT_BIT) & 1; \ }) # endif # if defined LDBL_SIGNBIT_WORD && defined LDBL_SIGNBIT_BIT && !defined gl_signbitl # define gl_signbitl_OPTIMIZED_MACRO # define gl_signbitl(arg) \ ({ union { long double _value; \ unsigned int _word[_GL_NUM_UINT_WORDS (long double)]; \ } _m; \ _m._value = (arg); \ (_m._word[LDBL_SIGNBIT_WORD] >> LDBL_SIGNBIT_BIT) & 1; \ }) # endif # endif # define signbit(x) \ (sizeof (x) == sizeof (long double) ? gl_signbitl (x) : \ sizeof (x) == sizeof (double) ? gl_signbitd (x) : \ gl_signbitf (x)) # define GNULIB_defined_signbit 1 # endif # ifdef __cplusplus # if defined signbit || defined GNULIB_NAMESPACE _GL_MATH_CXX_REAL_FLOATING_DECL_1 (signbit) # undef signbit # if __GNUC__ >= 6 || (defined __clang__ && !((defined __APPLE__ && defined __MACH__) || defined __FreeBSD__ || defined __OpenBSD__ || defined _AIX || (defined _WIN32 && !defined __CYGWIN__))) /* This platform's <cmath> possibly defines signbit through a set of inline functions. */ _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, rpl_signbit, bool) # define signbit rpl_signbit # define GNULIB_NAMESPACE_LACKS_SIGNBIT 1 # else _GL_MATH_CXX_REAL_FLOATING_DECL_2 (signbit, signbit, bool) # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if defined signbit _GL_WARN_REAL_FLOATING_DECL (signbit); # undef signbit # define signbit(x) _GL_WARN_REAL_FLOATING_IMPL (signbit, x) # endif #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_MATH_H */ #endif /* _GL_INCLUDING_MATH_H */ #endif /* _@GUARD_PREFIX@_MATH_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/cdefs.h����������������������������������������������������������������������������0000644�0000000�0000000�00000064117�14226564447�012136� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 1992-2022 Free Software Foundation, Inc. Copyright The GNU Toolchain Authors. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _SYS_CDEFS_H #define _SYS_CDEFS_H 1 /* We are almost always included from features.h. */ #ifndef _FEATURES_H # include <features.h> #endif /* The GNU libc does not support any K&R compilers or the traditional mode of ISO C compilers anymore. Check for some of the combinations not supported anymore. */ #if defined __GNUC__ && !defined __STDC__ # error "You need a ISO C conforming compiler to use the glibc headers" #endif /* Some user header file might have defined this before. */ #undef __P #undef __PMT /* Compilers that lack __has_attribute may object to #if defined __has_attribute && __has_attribute (...) even though they do not need to evaluate the right-hand side of the &&. Similarly for __has_builtin, etc. */ #if (defined __has_attribute \ && (!defined __clang_minor__ \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))) # define __glibc_has_attribute(attr) __has_attribute (attr) #else # define __glibc_has_attribute(attr) 0 #endif #ifdef __has_builtin # define __glibc_has_builtin(name) __has_builtin (name) #else # define __glibc_has_builtin(name) 0 #endif #ifdef __has_extension # define __glibc_has_extension(ext) __has_extension (ext) #else # define __glibc_has_extension(ext) 0 #endif #if defined __GNUC__ || defined __clang__ /* All functions, except those with callbacks or those that synchronize memory, are leaf functions. */ # if __GNUC_PREREQ (4, 6) && !defined _LIBC # define __LEAF , __leaf__ # define __LEAF_ATTR __attribute__ ((__leaf__)) # else # define __LEAF # define __LEAF_ATTR # endif /* GCC can always grok prototypes. For C++ programs we add throw() to help it optimize the function calls. But this only works with gcc 2.8.x and egcs. For gcc 3.4 and up we even mark C functions as non-throwing using a function attribute since programs can use the -fexceptions options for C code as well. */ # if !defined __cplusplus \ && (__GNUC_PREREQ (3, 4) || __glibc_has_attribute (__nothrow__)) # define __THROW __attribute__ ((__nothrow__ __LEAF)) # define __THROWNL __attribute__ ((__nothrow__)) # define __NTH(fct) __attribute__ ((__nothrow__ __LEAF)) fct # define __NTHNL(fct) __attribute__ ((__nothrow__)) fct # else # if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major >= 4) # if __cplusplus >= 201103L # define __THROW noexcept (true) # else # define __THROW throw () # endif # define __THROWNL __THROW # define __NTH(fct) __LEAF_ATTR fct __THROW # define __NTHNL(fct) fct __THROW # else # define __THROW # define __THROWNL # define __NTH(fct) fct # define __NTHNL(fct) fct # endif # endif #else /* Not GCC or clang. */ # if (defined __cplusplus \ || (defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L)) # define __inline inline # else # define __inline /* No inline functions. */ # endif # define __THROW # define __THROWNL # define __NTH(fct) fct #endif /* GCC || clang. */ /* These two macros are not used in glibc anymore. They are kept here only because some other projects expect the macros to be defined. */ #define __P(args) args #define __PMT(args) args /* For these things, GCC behaves the ANSI way normally, and the non-ANSI way under -traditional. */ #define __CONCAT(x,y) x ## y #define __STRING(x) #x /* This is not a typedef so `const __ptr_t' does the right thing. */ #define __ptr_t void * /* C++ needs to know that types and declarations are C, not C++. */ #ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # define __END_DECLS } #else # define __BEGIN_DECLS # define __END_DECLS #endif /* Fortify support. */ #define __bos(ptr) __builtin_object_size (ptr, __USE_FORTIFY_LEVEL > 1) #define __bos0(ptr) __builtin_object_size (ptr, 0) /* Use __builtin_dynamic_object_size at _FORTIFY_SOURCE=3 when available. */ #if __USE_FORTIFY_LEVEL == 3 && (__glibc_clang_prereq (9, 0) \ || __GNUC_PREREQ (12, 0)) # define __glibc_objsize0(__o) __builtin_dynamic_object_size (__o, 0) # define __glibc_objsize(__o) __builtin_dynamic_object_size (__o, 1) #else # define __glibc_objsize0(__o) __bos0 (__o) # define __glibc_objsize(__o) __bos (__o) #endif /* Compile time conditions to choose between the regular, _chk and _chk_warn variants. These conditions should get evaluated to constant and optimized away. */ #define __glibc_safe_len_cond(__l, __s, __osz) ((__l) <= (__osz) / (__s)) #define __glibc_unsigned_or_positive(__l) \ ((__typeof (__l)) 0 < (__typeof (__l)) -1 \ || (__builtin_constant_p (__l) && (__l) > 0)) /* Length is known to be safe at compile time if the __L * __S <= __OBJSZ condition can be folded to a constant and if it is true. The -1 check is redundant because since it implies that __glibc_safe_len_cond is true. */ #define __glibc_safe_or_unknown_len(__l, __s, __osz) \ (__glibc_unsigned_or_positive (__l) \ && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ __s, __osz)) \ && __glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz)) /* Conversely, we know at compile time that the length is unsafe if the __L * __S <= __OBJSZ condition can be folded to a constant and if it is false. */ #define __glibc_unsafe_len(__l, __s, __osz) \ (__glibc_unsigned_or_positive (__l) \ && __builtin_constant_p (__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), \ __s, __osz)) \ && !__glibc_safe_len_cond ((__SIZE_TYPE__) (__l), __s, __osz)) /* Fortify function f. __f_alias, __f_chk and __f_chk_warn must be declared. */ #define __glibc_fortify(f, __l, __s, __osz, ...) \ (__glibc_safe_or_unknown_len (__l, __s, __osz) \ ? __ ## f ## _alias (__VA_ARGS__) \ : (__glibc_unsafe_len (__l, __s, __osz) \ ? __ ## f ## _chk_warn (__VA_ARGS__, __osz) \ : __ ## f ## _chk (__VA_ARGS__, __osz))) \ /* Fortify function f, where object size argument passed to f is the number of elements and not total size. */ #define __glibc_fortify_n(f, __l, __s, __osz, ...) \ (__glibc_safe_or_unknown_len (__l, __s, __osz) \ ? __ ## f ## _alias (__VA_ARGS__) \ : (__glibc_unsafe_len (__l, __s, __osz) \ ? __ ## f ## _chk_warn (__VA_ARGS__, (__osz) / (__s)) \ : __ ## f ## _chk (__VA_ARGS__, (__osz) / (__s)))) \ #if __GNUC_PREREQ (4,3) # define __warnattr(msg) __attribute__((__warning__ (msg))) # define __errordecl(name, msg) \ extern void name (void) __attribute__((__error__ (msg))) #else # define __warnattr(msg) # define __errordecl(name, msg) extern void name (void) #endif /* Support for flexible arrays. Headers that should use flexible arrays only if they're "real" (e.g. only if they won't affect sizeof()) should test #if __glibc_c99_flexarr_available. */ #if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L && !defined __HP_cc # define __flexarr [] # define __glibc_c99_flexarr_available 1 #elif __GNUC_PREREQ (2,97) || defined __clang__ /* GCC 2.97 and clang support C99 flexible array members as an extension, even when in C89 mode or compiling C++ (any version). */ # define __flexarr [] # define __glibc_c99_flexarr_available 1 #elif defined __GNUC__ /* Pre-2.97 GCC did not support C99 flexible arrays but did have an equivalent extension with slightly different notation. */ # define __flexarr [0] # define __glibc_c99_flexarr_available 1 #else /* Some other non-C99 compiler. Approximate with [1]. */ # define __flexarr [1] # define __glibc_c99_flexarr_available 0 #endif /* __asm__ ("xyz") is used throughout the headers to rename functions at the assembly language level. This is wrapped by the __REDIRECT macro, in order to support compilers that can do this some other way. When compilers don't support asm-names at all, we have to do preprocessor tricks instead (which don't have exactly the right semantics, but it's the best we can do). Example: int __REDIRECT(setpgrp, (__pid_t pid, __pid_t pgrp), setpgid); */ #if (defined __GNUC__ && __GNUC__ >= 2) || (__clang_major__ >= 4) # define __REDIRECT(name, proto, alias) name proto __asm__ (__ASMNAME (#alias)) # ifdef __cplusplus # define __REDIRECT_NTH(name, proto, alias) \ name proto __THROW __asm__ (__ASMNAME (#alias)) # define __REDIRECT_NTHNL(name, proto, alias) \ name proto __THROWNL __asm__ (__ASMNAME (#alias)) # else # define __REDIRECT_NTH(name, proto, alias) \ name proto __asm__ (__ASMNAME (#alias)) __THROW # define __REDIRECT_NTHNL(name, proto, alias) \ name proto __asm__ (__ASMNAME (#alias)) __THROWNL # endif # define __ASMNAME(cname) __ASMNAME2 (__USER_LABEL_PREFIX__, cname) # define __ASMNAME2(prefix, cname) __STRING (prefix) cname /* #elif __SOME_OTHER_COMPILER__ # define __REDIRECT(name, proto, alias) name proto; \ _Pragma("let " #name " = " #alias) */ #endif /* GCC and clang have various useful declarations that can be made with the '__attribute__' syntax. All of the ways we use this do fine if they are omitted for compilers that don't understand it. */ #if !(defined __GNUC__ || defined __clang__) # define __attribute__(xyz) /* Ignore */ #endif /* At some point during the gcc 2.96 development the `malloc' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__malloc__) # define __attribute_malloc__ __attribute__ ((__malloc__)) #else # define __attribute_malloc__ /* Ignore */ #endif /* Tell the compiler which arguments to an allocation function indicate the size of the allocation. */ #if __GNUC_PREREQ (4, 3) # define __attribute_alloc_size__(params) \ __attribute__ ((__alloc_size__ params)) #else # define __attribute_alloc_size__(params) /* Ignore. */ #endif /* Tell the compiler which argument to an allocation function indicates the alignment of the allocation. */ #if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__alloc_align__) # define __attribute_alloc_align__(param) \ __attribute__ ((__alloc_align__ param)) #else # define __attribute_alloc_align__(param) /* Ignore. */ #endif /* At some point during the gcc 2.96 development the `pure' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (2,96) || __glibc_has_attribute (__pure__) # define __attribute_pure__ __attribute__ ((__pure__)) #else # define __attribute_pure__ /* Ignore */ #endif /* This declaration tells the compiler that the value is constant. */ #if __GNUC_PREREQ (2,5) || __glibc_has_attribute (__const__) # define __attribute_const__ __attribute__ ((__const__)) #else # define __attribute_const__ /* Ignore */ #endif #if __GNUC_PREREQ (2,7) || __glibc_has_attribute (__unused__) # define __attribute_maybe_unused__ __attribute__ ((__unused__)) #else # define __attribute_maybe_unused__ /* Ignore */ #endif /* At some point during the gcc 3.1 development the `used' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (3,1) || __glibc_has_attribute (__used__) # define __attribute_used__ __attribute__ ((__used__)) # define __attribute_noinline__ __attribute__ ((__noinline__)) #else # define __attribute_used__ __attribute__ ((__unused__)) # define __attribute_noinline__ /* Ignore */ #endif /* Since version 3.2, gcc allows marking deprecated functions. */ #if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__deprecated__) # define __attribute_deprecated__ __attribute__ ((__deprecated__)) #else # define __attribute_deprecated__ /* Ignore */ #endif /* Since version 4.5, gcc also allows one to specify the message printed when a deprecated function is used. clang claims to be gcc 4.2, but may also support this feature. */ #if __GNUC_PREREQ (4,5) \ || __glibc_has_extension (__attribute_deprecated_with_message__) # define __attribute_deprecated_msg__(msg) \ __attribute__ ((__deprecated__ (msg))) #else # define __attribute_deprecated_msg__(msg) __attribute_deprecated__ #endif /* At some point during the gcc 2.8 development the `format_arg' attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. If several `format_arg' attributes are given for the same function, in gcc-3.0 and older, all but the last one are ignored. In newer gccs, all designated arguments are considered. */ #if __GNUC_PREREQ (2,8) || __glibc_has_attribute (__format_arg__) # define __attribute_format_arg__(x) __attribute__ ((__format_arg__ (x))) #else # define __attribute_format_arg__(x) /* Ignore */ #endif /* At some point during the gcc 2.97 development the `strfmon' format attribute for functions was introduced. We don't want to use it unconditionally (although this would be possible) since it generates warnings. */ #if __GNUC_PREREQ (2,97) || __glibc_has_attribute (__format__) # define __attribute_format_strfmon__(a,b) \ __attribute__ ((__format__ (__strfmon__, a, b))) #else # define __attribute_format_strfmon__(a,b) /* Ignore */ #endif /* The nonnull function attribute marks pointer parameters that must not be NULL. This has the name __nonnull in glibc, and __attribute_nonnull__ in files shared with Gnulib to avoid collision with a different __nonnull in DragonFlyBSD 5.9. */ #ifndef __attribute_nonnull__ # if __GNUC_PREREQ (3,3) || __glibc_has_attribute (__nonnull__) # define __attribute_nonnull__(params) __attribute__ ((__nonnull__ params)) # else # define __attribute_nonnull__(params) # endif #endif #ifndef __nonnull # define __nonnull(params) __attribute_nonnull__ (params) #endif /* The returns_nonnull function attribute marks the return type of the function as always being non-null. */ #ifndef __returns_nonnull # if __GNUC_PREREQ (4, 9) || __glibc_has_attribute (__returns_nonnull__) # define __returns_nonnull __attribute__ ((__returns_nonnull__)) # else # define __returns_nonnull # endif #endif /* If fortification mode, we warn about unused results of certain function calls which can lead to problems. */ #if __GNUC_PREREQ (3,4) || __glibc_has_attribute (__warn_unused_result__) # define __attribute_warn_unused_result__ \ __attribute__ ((__warn_unused_result__)) # if defined __USE_FORTIFY_LEVEL && __USE_FORTIFY_LEVEL > 0 # define __wur __attribute_warn_unused_result__ # endif #else # define __attribute_warn_unused_result__ /* empty */ #endif #ifndef __wur # define __wur /* Ignore */ #endif /* Forces a function to be always inlined. */ #if __GNUC_PREREQ (3,2) || __glibc_has_attribute (__always_inline__) /* The Linux kernel defines __always_inline in stddef.h (283d7573), and it conflicts with this definition. Therefore undefine it first to allow either header to be included first. */ # undef __always_inline # define __always_inline __inline __attribute__ ((__always_inline__)) #else # undef __always_inline # define __always_inline __inline #endif /* Associate error messages with the source location of the call site rather than with the source location inside the function. */ #if __GNUC_PREREQ (4,3) || __glibc_has_attribute (__artificial__) # define __attribute_artificial__ __attribute__ ((__artificial__)) #else # define __attribute_artificial__ /* Ignore */ #endif /* GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. Using __GNUC_STDC_INLINE__ or __GNUC_GNU_INLINE is not a good enough check for gcc because gcc versions older than 4.3 may define these macros and still not guarantee GNU inlining semantics. clang++ identifies itself as gcc-4.2, but has support for GNU inlining semantics, that can be checked for by using the __GNUC_STDC_INLINE_ and __GNUC_GNU_INLINE__ macro definitions. */ #if (!defined __cplusplus || __GNUC_PREREQ (4,3) \ || (defined __clang__ && (defined __GNUC_STDC_INLINE__ \ || defined __GNUC_GNU_INLINE__))) # if defined __GNUC_STDC_INLINE__ || defined __cplusplus # define __extern_inline extern __inline __attribute__ ((__gnu_inline__)) # define __extern_always_inline \ extern __always_inline __attribute__ ((__gnu_inline__)) # else # define __extern_inline extern __inline # define __extern_always_inline extern __always_inline # endif #endif #ifdef __extern_always_inline # define __fortify_function __extern_always_inline __attribute_artificial__ #endif /* GCC 4.3 and above allow passing all anonymous arguments of an __extern_always_inline function to some other vararg function. */ #if __GNUC_PREREQ (4,3) # define __va_arg_pack() __builtin_va_arg_pack () # define __va_arg_pack_len() __builtin_va_arg_pack_len () #endif /* It is possible to compile containing GCC extensions even if GCC is run in pedantic mode if the uses are carefully marked using the `__extension__' keyword. But this is not generally available before version 2.8. */ #if !(__GNUC_PREREQ (2,8) || defined __clang__) # define __extension__ /* Ignore */ #endif /* __restrict is known in EGCS 1.2 and above, and in clang. It works also in C++ mode (outside of arrays), but only when spelled as '__restrict', not 'restrict'. */ #if !(__GNUC_PREREQ (2,92) || __clang_major__ >= 3) # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L # define __restrict restrict # else # define __restrict /* Ignore */ # endif #endif /* ISO C99 also allows to declare arrays as non-overlapping. The syntax is array_name[restrict] GCC 3.1 and clang support this. This syntax is not usable in C++ mode. */ #if (__GNUC_PREREQ (3,1) || __clang_major__ >= 3) && !defined __cplusplus # define __restrict_arr __restrict #else # ifdef __GNUC__ # define __restrict_arr /* Not supported in old GCC. */ # else # if defined __STDC_VERSION__ && __STDC_VERSION__ >= 199901L # define __restrict_arr restrict # else /* Some other non-C99 compiler. */ # define __restrict_arr /* Not supported. */ # endif # endif #endif #if (__GNUC__ >= 3) || __glibc_has_builtin (__builtin_expect) # define __glibc_unlikely(cond) __builtin_expect ((cond), 0) # define __glibc_likely(cond) __builtin_expect ((cond), 1) #else # define __glibc_unlikely(cond) (cond) # define __glibc_likely(cond) (cond) #endif #if (!defined _Noreturn \ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ && !(__GNUC_PREREQ (4,7) \ || (3 < __clang_major__ + (5 <= __clang_minor__)))) # if __GNUC_PREREQ (2,8) # define _Noreturn __attribute__ ((__noreturn__)) # else # define _Noreturn # endif #endif #if __GNUC_PREREQ (8, 0) /* Describes a char array whose address can safely be passed as the first argument to strncpy and strncat, as the char array is not necessarily a NUL-terminated string. */ # define __attribute_nonstring__ __attribute__ ((__nonstring__)) #else # define __attribute_nonstring__ #endif /* Undefine (also defined in libc-symbols.h). */ #undef __attribute_copy__ #if __GNUC_PREREQ (9, 0) /* Copies attributes from the declaration or type referenced by the argument. */ # define __attribute_copy__(arg) __attribute__ ((__copy__ (arg))) #else # define __attribute_copy__(arg) #endif #if (!defined _Static_assert && !defined __cplusplus \ && (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) < 201112 \ && (!(__GNUC_PREREQ (4, 6) || __clang_major__ >= 4) \ || defined __STRICT_ANSI__)) # define _Static_assert(expr, diagnostic) \ extern int (*__Static_assert_function (void)) \ [!!sizeof (struct { int __error_if_negative: (expr) ? 2 : -1; })] #endif /* Gnulib avoids including these, as they don't work on non-glibc or older glibc platforms. */ #ifndef __GNULIB_CDEFS # include <bits/wordsize.h> # include <bits/long-double.h> #endif #if __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 1 # ifdef __REDIRECT /* Alias name defined automatically. */ # define __LDBL_REDIR(name, proto) ... unused__ldbl_redir # define __LDBL_REDIR_DECL(name) \ extern __typeof (name) name __asm (__ASMNAME ("__" #name "ieee128")); /* Alias name defined automatically, with leading underscores. */ # define __LDBL_REDIR2_DECL(name) \ extern __typeof (__##name) __##name \ __asm (__ASMNAME ("__" #name "ieee128")); /* Alias name defined manually. */ # define __LDBL_REDIR1(name, proto, alias) ... unused__ldbl_redir1 # define __LDBL_REDIR1_DECL(name, alias) \ extern __typeof (name) name __asm (__ASMNAME (#alias)); # define __LDBL_REDIR1_NTH(name, proto, alias) \ __REDIRECT_NTH (name, proto, alias) # define __REDIRECT_NTH_LDBL(name, proto, alias) \ __LDBL_REDIR1_NTH (name, proto, __##alias##ieee128) /* Unused. */ # define __REDIRECT_LDBL(name, proto, alias) ... unused__redirect_ldbl # define __LDBL_REDIR_NTH(name, proto) ... unused__ldbl_redir_nth # else _Static_assert (0, "IEEE 128-bits long double requires redirection on this platform"); # endif #elif defined __LONG_DOUBLE_MATH_OPTIONAL && defined __NO_LONG_DOUBLE_MATH # define __LDBL_COMPAT 1 # ifdef __REDIRECT # define __LDBL_REDIR1(name, proto, alias) __REDIRECT (name, proto, alias) # define __LDBL_REDIR(name, proto) \ __LDBL_REDIR1 (name, proto, __nldbl_##name) # define __LDBL_REDIR1_NTH(name, proto, alias) __REDIRECT_NTH (name, proto, alias) # define __LDBL_REDIR_NTH(name, proto) \ __LDBL_REDIR1_NTH (name, proto, __nldbl_##name) # define __LDBL_REDIR2_DECL(name) \ extern __typeof (__##name) __##name __asm (__ASMNAME ("__nldbl___" #name)); # define __LDBL_REDIR1_DECL(name, alias) \ extern __typeof (name) name __asm (__ASMNAME (#alias)); # define __LDBL_REDIR_DECL(name) \ extern __typeof (name) name __asm (__ASMNAME ("__nldbl_" #name)); # define __REDIRECT_LDBL(name, proto, alias) \ __LDBL_REDIR1 (name, proto, __nldbl_##alias) # define __REDIRECT_NTH_LDBL(name, proto, alias) \ __LDBL_REDIR1_NTH (name, proto, __nldbl_##alias) # endif #endif #if (!defined __LDBL_COMPAT && __LDOUBLE_REDIRECTS_TO_FLOAT128_ABI == 0) \ || !defined __REDIRECT # define __LDBL_REDIR1(name, proto, alias) name proto # define __LDBL_REDIR(name, proto) name proto # define __LDBL_REDIR1_NTH(name, proto, alias) name proto __THROW # define __LDBL_REDIR_NTH(name, proto) name proto __THROW # define __LDBL_REDIR2_DECL(name) # define __LDBL_REDIR_DECL(name) # ifdef __REDIRECT # define __REDIRECT_LDBL(name, proto, alias) __REDIRECT (name, proto, alias) # define __REDIRECT_NTH_LDBL(name, proto, alias) \ __REDIRECT_NTH (name, proto, alias) # endif #endif /* __glibc_macro_warning (MESSAGE) issues warning MESSAGE. This is intended for use in preprocessor macros. Note: MESSAGE must be a _single_ string; concatenation of string literals is not supported. */ #if __GNUC_PREREQ (4,8) || __glibc_clang_prereq (3,5) # define __glibc_macro_warning1(message) _Pragma (#message) # define __glibc_macro_warning(message) \ __glibc_macro_warning1 (GCC warning message) #else # define __glibc_macro_warning(msg) #endif /* Generic selection (ISO C11) is a C-only feature, available in GCC since version 4.9. Previous versions do not provide generic selection, even though they might set __STDC_VERSION__ to 201112L, when in -std=c11 mode. Thus, we must check for !defined __GNUC__ when testing __STDC_VERSION__ for generic selection support. On the other hand, Clang also defines __GNUC__, so a clang-specific check is required to enable the use of generic selection. */ #if !defined __cplusplus \ && (__GNUC_PREREQ (4, 9) \ || __glibc_has_extension (c_generic_selections) \ || (!defined __GNUC__ && defined __STDC_VERSION__ \ && __STDC_VERSION__ >= 201112L)) # define __HAVE_GENERIC_SELECTION 1 #else # define __HAVE_GENERIC_SELECTION 0 #endif #if __GNUC_PREREQ (10, 0) /* Designates a 1-based positional argument ref-index of pointer type that can be used to access size-index elements of the pointed-to array according to access mode, or at least one element when size-index is not provided: access (access-mode, <ref-index> [, <size-index>]) */ # define __attr_access(x) __attribute__ ((__access__ x)) /* For _FORTIFY_SOURCE == 3 we use __builtin_dynamic_object_size, which may use the access attribute to get object sizes from function definition arguments, so we can't use them on functions we fortify. Drop the object size hints for such functions. */ # if __USE_FORTIFY_LEVEL == 3 # define __fortified_attr_access(a, o, s) __attribute__ ((__access__ (a, o))) # else # define __fortified_attr_access(a, o, s) __attr_access ((a, o, s)) # endif # if __GNUC_PREREQ (11, 0) # define __attr_access_none(argno) __attribute__ ((__access__ (__none__, argno))) # else # define __attr_access_none(argno) # endif #else # define __fortified_attr_access(a, o, s) # define __attr_access(x) # define __attr_access_none(argno) #endif #if __GNUC_PREREQ (11, 0) /* Designates dealloc as a function to call to deallocate objects allocated by the declared function. */ # define __attr_dealloc(dealloc, argno) \ __attribute__ ((__malloc__ (dealloc, argno))) # define __attr_dealloc_free __attr_dealloc (__builtin_free, 1) #else # define __attr_dealloc(dealloc, argno) # define __attr_dealloc_free #endif /* Specify that a function such as setjmp or vfork may return twice. */ #if __GNUC_PREREQ (4, 1) # define __attribute_returns_twice__ __attribute__ ((__returns_twice__)) #else # define __attribute_returns_twice__ /* Ignore. */ #endif #endif /* sys/cdefs.h */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/dup.c������������������������������������������������������������������������������0000644�0000000�0000000�00000003637�14226564446�011634� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Duplicate an open file descriptor. Copyright (C) 2011-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <unistd.h> #include <errno.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef dup #if defined _WIN32 && !defined __CYGWIN__ # if HAVE_MSVC_INVALID_PARAMETER_HANDLER static int dup_nothrow (int fd) { int result; TRY_MSVC_INVAL { result = _dup (fd); } CATCH_MSVC_INVAL { result = -1; errno = EBADF; } DONE_MSVC_INVAL; return result; } # else # define dup_nothrow _dup # endif #elif defined __KLIBC__ # include <fcntl.h> # include <sys/stat.h> # include <InnoTekLIBC/backend.h> static int dup_nothrow (int fd) { int dupfd; struct stat sbuf; dupfd = dup (fd); if (dupfd == -1 && errno == ENOTSUP \ && !fstat (fd, &sbuf) && S_ISDIR (sbuf.st_mode)) { char path[_MAX_PATH]; /* Get a path from fd */ if (!__libc_Back_ioFHToPath (fd, path, sizeof (path))) dupfd = open (path, O_RDONLY); } return dupfd; } #else # define dup_nothrow dup #endif int rpl_dup (int fd) { int result = dup_nothrow (fd); #if REPLACE_FCHDIR if (result >= 0) result = _gl_register_dup (fd, result); #endif return result; } �������������������������������������������������������������������������������������������������recutils-1.9/lib/wctob.c����������������������������������������������������������������������������0000644�0000000�0000000�00000002304�14226564451�012144� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convert wide character to unibyte character. Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2008. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <wchar.h> #include <stdio.h> #include <stdlib.h> int wctob (wint_t wc) { char buf[64]; if (!(MB_CUR_MAX <= sizeof (buf))) abort (); /* Handle the case where WEOF is a value that does not fit in a wchar_t. */ if (wc == (wchar_t)wc) if (wctomb (buf, (wchar_t)wc) == 1) return (unsigned char) buf[0]; return EOF; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getcwd-lgpl.c����������������������������������������������������������������������0000644�0000000�0000000�00000006266�14226564446�013256� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2011-2022 Free Software Foundation, Inc. This file is part of gnulib. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification */ #include <unistd.h> #include <errno.h> #include <stdlib.h> #include <string.h> #if GNULIB_GETCWD /* Favor GPL getcwd.c if both getcwd and getcwd-lgpl modules are in use. */ typedef int dummy; #else /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Returns NULL if the directory couldn't be determined (perhaps because the absolute name was longer than PATH_MAX, or because of missing read/search permissions on parent directories) or SIZE was too small. If successful, returns BUF. If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ # undef getcwd # if defined _WIN32 && !defined __CYGWIN__ # define getcwd _getcwd # endif char * rpl_getcwd (char *buf, size_t size) { char *ptr; char *result; /* Handle single size operations. */ if (buf) { if (!size) { errno = EINVAL; return NULL; } return getcwd (buf, size); } if (size) { buf = malloc (size); if (!buf) { errno = ENOMEM; return NULL; } result = getcwd (buf, size); if (!result) free (buf); return result; } /* Flexible sizing requested. Avoid over-allocation for the common case of a name that fits within a 4k page, minus some space for local variables, to be sure we don't skip over a guard page. */ { char tmp[4032]; size = sizeof tmp; ptr = getcwd (tmp, size); if (ptr) { result = strdup (ptr); if (!result) errno = ENOMEM; return result; } if (errno != ERANGE) return NULL; } /* My what a large directory name we have. */ do { size <<= 1; ptr = realloc (buf, size); if (ptr == NULL) { free (buf); errno = ENOMEM; return NULL; } buf = ptr; result = getcwd (buf, size); } while (!result && errno == ERANGE); if (!result) free (buf); else { /* Here result == buf. */ /* Shrink result before returning it. */ size_t actual_size = strlen (result) + 1; if (actual_size < size) { char *shrinked_result = realloc (result, actual_size); if (shrinked_result != NULL) result = shrinked_result; } } return result; } #endif ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/qcopy-acl.c������������������������������������������������������������������������0000644�0000000�0000000�00000003544�14226564450�012724� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copy access control list from one file to another. -*- coding: utf-8 -*- Copyright (C) 2002-2003, 2005-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. Written by Paul Eggert, Andreas Grünbacher, and Bruno Haible. */ #include <config.h> #include "acl.h" #include "acl-internal.h" /* Copy access control lists from one file to another. If SOURCE_DESC is a valid file descriptor, use file descriptor operations, else use filename based operations on SRC_NAME. Likewise for DEST_DESC and DST_NAME. If access control lists are not available, fchmod the target file to MODE. Also sets the non-permission bits of the destination file (S_ISUID, S_ISGID, S_ISVTX) to those from MODE if any are set. Return 0 if successful. Return -2 and set errno for an error relating to the source file. Return -1 and set errno for an error relating to the destination file. */ int qcopy_acl (const char *src_name, int source_desc, const char *dst_name, int dest_desc, mode_t mode) { struct permission_context ctx; int ret; ret = get_permissions (src_name, source_desc, mode, &ctx); if (ret != 0) return -2; ret = set_permissions (&ctx, dst_name, dest_desc); free_permission_context (&ctx); return ret; } ������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/eloop-threshold.h������������������������������������������������������������������0000644�0000000�0000000�00000006334�14226564446�014156� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Threshold at which to diagnose ELOOP. Generic version. Copyright (C) 2012-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _ELOOP_THRESHOLD_H #define _ELOOP_THRESHOLD_H 1 #include <limits.h> #ifdef _LIBC # include <sys/param.h> # define _GL_ATTRIBUTE_CONST __attribute__ ((const)) #else # include <unistd.h> # include "minmax.h" # define __sysconf sysconf # if (!defined SYMLOOP_MAX \ && ! (defined _SC_SYMLOOP_MAX && defined _POSIX_SYMLOOP_MAX)) # define SYMLOOP_MAX 8 # endif #endif /* POSIX specifies SYMLOOP_MAX as the "Maximum number of symbolic links that can be reliably traversed in the resolution of a pathname in the absence of a loop." This makes it a minimum that we should certainly accept. But it leaves open the possibility that more might sometimes work--just not "reliably". For example, Linux implements a complex policy whereby there is a small limit on the number of direct symlink traversals (a symlink to a symlink to a symlink), but larger limit on the total number of symlink traversals overall. Hence the SYMLOOP_MAX number should be the small one, but the limit library functions enforce on users should be the larger one. So, we use the larger of the reported SYMLOOP_MAX (if any) and our own constant MIN_ELOOP_THRESHOLD, below. This constant should be large enough that it never rules out a file name and directory tree that the underlying system (i.e. calls to 'open' et al) would resolve successfully. It should be small enough that actual loops are detected without a huge number of iterations. */ #ifndef MIN_ELOOP_THRESHOLD # define MIN_ELOOP_THRESHOLD 40 #endif /* Return the maximum number of symlink traversals to permit before diagnosing ELOOP. */ static inline unsigned int _GL_ATTRIBUTE_CONST __eloop_threshold (void) { #ifdef SYMLOOP_MAX const int symloop_max = SYMLOOP_MAX; #else /* The function is marked 'const' even though we use memory and call a function, because sysconf is required to return the same value in every call and so it must always be safe to call __eloop_threshold exactly once and reuse the value. */ static long int sysconf_symloop_max; if (sysconf_symloop_max == 0) sysconf_symloop_max = __sysconf (_SC_SYMLOOP_MAX); const unsigned int symloop_max = (sysconf_symloop_max <= 0 ? _POSIX_SYMLOOP_MAX : sysconf_symloop_max); #endif return MAX (symloop_max, MIN_ELOOP_THRESHOLD); } #endif /* eloop-threshold.h */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/unistd.in.h������������������������������������������������������������������������0000644�0000000�0000000�00000235717�14226564451�012766� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Substitute for and wrapper around <unistd.h>. Copyright (C) 2003-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _@GUARD_PREFIX@_UNISTD_H #if __GNUC__ >= 3 @PRAGMA_SYSTEM_HEADER@ #endif @PRAGMA_COLUMNS@ #if @HAVE_UNISTD_H@ && defined _GL_INCLUDING_UNISTD_H /* Special invocation convention: - On Mac OS X 10.3.9 we have a sequence of nested includes <unistd.h> -> <signal.h> -> <pthread.h> -> <unistd.h> In this situation, the functions are not yet declared, therefore we cannot provide the C++ aliases. */ #@INCLUDE_NEXT@ @NEXT_UNISTD_H@ #else /* Normal invocation convention. */ /* The include_next requires a split double-inclusion guard. */ #if @HAVE_UNISTD_H@ # define _GL_INCLUDING_UNISTD_H # @INCLUDE_NEXT@ @NEXT_UNISTD_H@ # undef _GL_INCLUDING_UNISTD_H #endif /* Get all possible declarations of gethostname(). */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ \ && !defined _GL_INCLUDING_WINSOCK2_H # define _GL_INCLUDING_WINSOCK2_H # include <winsock2.h> # undef _GL_INCLUDING_WINSOCK2_H #endif #if !defined _@GUARD_PREFIX@_UNISTD_H && !defined _GL_INCLUDING_WINSOCK2_H #define _@GUARD_PREFIX@_UNISTD_H /* NetBSD 5.0 mis-defines NULL. Also get size_t. */ /* But avoid namespace pollution on glibc systems. */ #ifndef __GLIBC__ # include <stddef.h> #endif /* mingw doesn't define the SEEK_* or *_FILENO macros in <unistd.h>. */ /* MSVC declares 'unlink' in <stdio.h>, not in <unistd.h>. We must include it before we #define unlink rpl_unlink. */ /* Cygwin 1.7.1 declares symlinkat in <stdio.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (!(defined SEEK_CUR && defined SEEK_END && defined SEEK_SET) \ || ((@GNULIB_UNLINK@ || defined GNULIB_POSIXCHECK) \ && (defined _WIN32 && ! defined __CYGWIN__)) \ || ((@GNULIB_SYMLINKAT@ || defined GNULIB_POSIXCHECK) \ && defined __CYGWIN__)) \ && ! defined __GLIBC__ # include <stdio.h> #endif /* Cygwin 1.7.1 and Android 4.3 declare unlinkat in <fcntl.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_UNLINKAT@ || defined GNULIB_POSIXCHECK) \ && (defined __CYGWIN__ || defined __ANDROID__) \ && ! defined __GLIBC__ # include <fcntl.h> #endif /* mingw fails to declare _exit in <unistd.h>. */ /* mingw, MSVC, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ /* Solaris declares getcwd not only in <unistd.h> but also in <stdlib.h>. */ /* OSF Tru64 Unix cannot see gnulib rpl_strtod when system <stdlib.h> is included here. */ /* But avoid namespace pollution on glibc systems. */ #if !defined __GLIBC__ && !defined __osf__ # define __need_system_stdlib_h # include <stdlib.h> # undef __need_system_stdlib_h #endif /* Native Windows platforms declare _chdir, _getcwd, _rmdir in <io.h> and/or <direct.h>, not in <unistd.h>. They also declare _access(), _chmod(), _close(), _dup(), _dup2(), _isatty(), _lseek(), _read(), _unlink(), _write() in <io.h>. */ #if defined _WIN32 && !defined __CYGWIN__ # include <io.h> # include <direct.h> #endif /* Native Windows platforms declare _execl*, _execv* in <process.h>. */ #if defined _WIN32 && !defined __CYGWIN__ # include <process.h> #endif /* AIX and OSF/1 5.1 declare getdomainname in <netdb.h>, not in <unistd.h>. NonStop Kernel declares gethostname in <netdb.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if ((@GNULIB_GETDOMAINNAME@ && (defined _AIX || defined __osf__)) \ || (@GNULIB_GETHOSTNAME@ && defined __TANDEM)) \ && !defined __GLIBC__ # include <netdb.h> #endif /* Mac OS X 10.13, Solaris 11.4, and Android 9.0 declare getentropy in <sys/random.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_GETENTROPY@ || defined GNULIB_POSIXCHECK) \ && ((defined __APPLE__ && defined __MACH__) || defined __sun \ || defined __ANDROID__) \ && @UNISTD_H_HAVE_SYS_RANDOM_H@ \ && !defined __GLIBC__ # include <sys/random.h> #endif /* Android 4.3 declares fchownat in <sys/stat.h>, not in <unistd.h>. */ /* But avoid namespace pollution on glibc systems. */ #if (@GNULIB_FCHOWNAT@ || defined GNULIB_POSIXCHECK) && defined __ANDROID__ \ && !defined __GLIBC__ # include <sys/stat.h> #endif /* MSVC defines off_t in <sys/types.h>. May also define off_t to a 64-bit type on native Windows. */ /* Get off_t, ssize_t, mode_t. */ #include <sys/types.h> /* The definitions of _GL_FUNCDECL_RPL etc. are copied here. */ /* The definition of _GL_ARG_NONNULL is copied here. */ /* The definition of _GL_WARN_ON_USE is copied here. */ /* Get getopt(), optarg, optind, opterr, optopt. */ #if @GNULIB_GETOPT_POSIX@ && @GNULIB_UNISTD_H_GETOPT@ && !defined _GL_SYSTEM_GETOPT # include <getopt-cdefs.h> # include <getopt-pfx-core.h> #endif #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef _GL_UNISTD_INLINE # define _GL_UNISTD_INLINE _GL_INLINE #endif /* Hide some function declarations from <winsock2.h>. */ #if @GNULIB_GETHOSTNAME@ && @UNISTD_H_HAVE_WINSOCK2_H@ # if !defined _@GUARD_PREFIX@_SYS_SOCKET_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef socket # define socket socket_used_without_including_sys_socket_h # undef connect # define connect connect_used_without_including_sys_socket_h # undef accept # define accept accept_used_without_including_sys_socket_h # undef bind # define bind bind_used_without_including_sys_socket_h # undef getpeername # define getpeername getpeername_used_without_including_sys_socket_h # undef getsockname # define getsockname getsockname_used_without_including_sys_socket_h # undef getsockopt # define getsockopt getsockopt_used_without_including_sys_socket_h # undef listen # define listen listen_used_without_including_sys_socket_h # undef recv # define recv recv_used_without_including_sys_socket_h # undef send # define send send_used_without_including_sys_socket_h # undef recvfrom # define recvfrom recvfrom_used_without_including_sys_socket_h # undef sendto # define sendto sendto_used_without_including_sys_socket_h # undef setsockopt # define setsockopt setsockopt_used_without_including_sys_socket_h # undef shutdown # define shutdown shutdown_used_without_including_sys_socket_h # else _GL_WARN_ON_USE (socket, "socket() used without including <sys/socket.h>"); _GL_WARN_ON_USE (connect, "connect() used without including <sys/socket.h>"); _GL_WARN_ON_USE (accept, "accept() used without including <sys/socket.h>"); _GL_WARN_ON_USE (bind, "bind() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getpeername, "getpeername() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockname, "getsockname() used without including <sys/socket.h>"); _GL_WARN_ON_USE (getsockopt, "getsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (listen, "listen() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recv, "recv() used without including <sys/socket.h>"); _GL_WARN_ON_USE (send, "send() used without including <sys/socket.h>"); _GL_WARN_ON_USE (recvfrom, "recvfrom() used without including <sys/socket.h>"); _GL_WARN_ON_USE (sendto, "sendto() used without including <sys/socket.h>"); _GL_WARN_ON_USE (setsockopt, "setsockopt() used without including <sys/socket.h>"); _GL_WARN_ON_USE (shutdown, "shutdown() used without including <sys/socket.h>"); # endif # endif # if !defined _@GUARD_PREFIX@_SYS_SELECT_H # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef select # define select select_used_without_including_sys_select_h # else _GL_WARN_ON_USE (select, "select() used without including <sys/select.h>"); # endif # endif #endif /* OS/2 EMX lacks these macros. */ #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif /* Ensure *_OK macros exist. */ #ifndef F_OK # define F_OK 0 # define X_OK 1 # define W_OK 2 # define R_OK 4 #endif /* Declare overridden functions. */ #if @GNULIB_ACCESS@ # if @REPLACE_ACCESS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access rpl_access # endif _GL_FUNCDECL_RPL (access, int, (const char *file, int mode) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (access, int, (const char *file, int mode)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access _access # endif _GL_CXXALIAS_MDA (access, int, (const char *file, int mode)); # else _GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); # endif _GL_CXXALIASWARN (access); #elif defined GNULIB_POSIXCHECK # undef access # if HAVE_RAW_DECL_ACCESS /* The access() function is a security risk. */ _GL_WARN_ON_USE (access, "access does not always support X_OK - " "use gnulib module access for portability; " "also, this function is a security risk - " "use the gnulib module faccessat instead"); # endif #elif @GNULIB_MDA_ACCESS@ /* On native Windows, map 'access' to '_access', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::access always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef access # define access _access # endif _GL_CXXALIAS_MDA (access, int, (const char *file, int mode)); # else _GL_CXXALIAS_SYS (access, int, (const char *file, int mode)); # endif _GL_CXXALIASWARN (access); #endif #if @GNULIB_CHDIR@ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chdir # define chdir _chdir # endif _GL_CXXALIAS_MDA (chdir, int, (const char *file)); # else _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIASWARN (chdir); #elif defined GNULIB_POSIXCHECK # undef chdir # if HAVE_RAW_DECL_CHDIR _GL_WARN_ON_USE (chown, "chdir is not always in <unistd.h> - " "use gnulib module chdir for portability"); # endif #elif @GNULIB_MDA_CHDIR@ /* On native Windows, map 'chdir' to '_chdir', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::chdir always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chdir # define chdir _chdir # endif _GL_CXXALIAS_MDA (chdir, int, (const char *file)); # else _GL_CXXALIAS_SYS (chdir, int, (const char *file) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIASWARN (chdir); #endif #if @GNULIB_CHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/chown.html. */ # if @REPLACE_CHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef chown # define chown rpl_chown # endif _GL_FUNCDECL_RPL (chown, int, (const char *file, uid_t uid, gid_t gid) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (chown, int, (const char *file, uid_t uid, gid_t gid)); # else # if !@HAVE_CHOWN@ _GL_FUNCDECL_SYS (chown, int, (const char *file, uid_t uid, gid_t gid) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (chown, int, (const char *file, uid_t uid, gid_t gid)); # endif _GL_CXXALIASWARN (chown); #elif defined GNULIB_POSIXCHECK # undef chown # if HAVE_RAW_DECL_CHOWN _GL_WARN_ON_USE (chown, "chown fails to follow symlinks on some systems and " "doesn't treat a uid or gid of -1 on some systems - " "use gnulib module chown for portability"); # endif #endif #if @GNULIB_CLOSE@ # if @REPLACE_CLOSE@ /* Automatically included by modules that need a replacement for close. */ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close rpl_close # endif _GL_FUNCDECL_RPL (close, int, (int fd)); _GL_CXXALIAS_RPL (close, int, (int fd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close _close # endif _GL_CXXALIAS_MDA (close, int, (int fd)); # else _GL_CXXALIAS_SYS (close, int, (int fd)); # endif _GL_CXXALIASWARN (close); #elif @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ # undef close # define close close_used_without_requesting_gnulib_module_close #elif defined GNULIB_POSIXCHECK # undef close /* Assume close is always declared. */ _GL_WARN_ON_USE (close, "close does not portably work on sockets - " "use gnulib module close for portability"); #elif @GNULIB_MDA_CLOSE@ /* On native Windows, map 'close' to '_close', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::close always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef close # define close _close # endif _GL_CXXALIAS_MDA (close, int, (int fd)); # else _GL_CXXALIAS_SYS (close, int, (int fd)); # endif _GL_CXXALIASWARN (close); #endif #if @GNULIB_COPY_FILE_RANGE@ # if @REPLACE_COPY_FILE_RANGE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef copy_file_range # define copy_file_range rpl_copy_file_range # endif _GL_FUNCDECL_RPL (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); _GL_CXXALIAS_RPL (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); # else # if !@HAVE_COPY_FILE_RANGE@ _GL_FUNCDECL_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); # endif _GL_CXXALIAS_SYS (copy_file_range, ssize_t, (int ifd, off_t *ipos, int ofd, off_t *opos, size_t len, unsigned flags)); # endif _GL_CXXALIASWARN (copy_file_range); #elif defined GNULIB_POSIXCHECK # undef copy_file_range # if HAVE_RAW_DECL_COPY_FILE_RANGE _GL_WARN_ON_USE (copy_file_range, "copy_file_range is unportable - " "use gnulib module copy_file_range for portability"); # endif #endif #if @GNULIB_DUP@ # if @REPLACE_DUP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup rpl_dup # endif _GL_FUNCDECL_RPL (dup, int, (int oldfd)); _GL_CXXALIAS_RPL (dup, int, (int oldfd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup # define dup _dup # endif _GL_CXXALIAS_MDA (dup, int, (int oldfd)); # else _GL_CXXALIAS_SYS (dup, int, (int oldfd)); # endif _GL_CXXALIASWARN (dup); #elif defined GNULIB_POSIXCHECK # undef dup # if HAVE_RAW_DECL_DUP _GL_WARN_ON_USE (dup, "dup is unportable - " "use gnulib module dup for portability"); # endif #elif @GNULIB_MDA_DUP@ /* On native Windows, map 'dup' to '_dup', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::dup always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup # define dup _dup # endif _GL_CXXALIAS_MDA (dup, int, (int oldfd)); # else _GL_CXXALIAS_SYS (dup, int, (int oldfd)); # endif _GL_CXXALIASWARN (dup); #endif #if @GNULIB_DUP2@ /* Copy the file descriptor OLDFD into file descriptor NEWFD. Do nothing if NEWFD = OLDFD, otherwise close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/dup2.html>. */ # if @REPLACE_DUP2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup2 rpl_dup2 # endif _GL_FUNCDECL_RPL (dup2, int, (int oldfd, int newfd)); _GL_CXXALIAS_RPL (dup2, int, (int oldfd, int newfd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup2 # define dup2 _dup2 # endif _GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd)); # else _GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIASWARN (dup2); #elif defined GNULIB_POSIXCHECK # undef dup2 # if HAVE_RAW_DECL_DUP2 _GL_WARN_ON_USE (dup2, "dup2 is unportable - " "use gnulib module dup2 for portability"); # endif #elif @GNULIB_MDA_DUP2@ /* On native Windows, map 'dup2' to '_dup2', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::dup2 always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef dup2 # define dup2 _dup2 # endif _GL_CXXALIAS_MDA (dup2, int, (int oldfd, int newfd)); # else _GL_CXXALIAS_SYS (dup2, int, (int oldfd, int newfd)); # endif _GL_CXXALIASWARN (dup2); #endif #if @GNULIB_DUP3@ /* Copy the file descriptor OLDFD into file descriptor NEWFD, with the specified flags. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). Close NEWFD first if it is open. Return newfd if successful, otherwise -1 and errno set. See the Linux man page at <https://www.kernel.org/doc/man-pages/online/pages/man2/dup3.2.html>. */ # if @HAVE_DUP3@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define dup3 rpl_dup3 # endif _GL_FUNCDECL_RPL (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_RPL (dup3, int, (int oldfd, int newfd, int flags)); # else _GL_FUNCDECL_SYS (dup3, int, (int oldfd, int newfd, int flags)); _GL_CXXALIAS_SYS (dup3, int, (int oldfd, int newfd, int flags)); # endif _GL_CXXALIASWARN (dup3); #elif defined GNULIB_POSIXCHECK # undef dup3 # if HAVE_RAW_DECL_DUP3 _GL_WARN_ON_USE (dup3, "dup3 is unportable - " "use gnulib module dup3 for portability"); # endif #endif #if @GNULIB_ENVIRON@ # if defined __CYGWIN__ && !defined __i386__ /* The 'environ' variable is defined in a DLL. Therefore its declaration needs the '__declspec(dllimport)' attribute, but the system's <unistd.h> lacks it. This leads to a link error on 64-bit Cygwin when the option -Wl,--disable-auto-import is in use. */ _GL_EXTERN_C __declspec(dllimport) char **environ; # endif # if !@HAVE_DECL_ENVIRON@ /* Set of environment variables and values. An array of strings of the form "VARIABLE=VALUE", terminated with a NULL. */ # if defined __APPLE__ && defined __MACH__ # include <TargetConditionals.h> # if !TARGET_OS_IPHONE && !TARGET_IPHONE_SIMULATOR # define _GL_USE_CRT_EXTERNS # endif # endif # ifdef _GL_USE_CRT_EXTERNS # include <crt_externs.h> # define environ (*_NSGetEnviron ()) # else # ifdef __cplusplus extern "C" { # endif extern char **environ; # ifdef __cplusplus } # endif # endif # endif #elif defined GNULIB_POSIXCHECK # if HAVE_RAW_DECL_ENVIRON _GL_UNISTD_INLINE char *** _GL_WARN_ON_USE_ATTRIBUTE ("environ is unportable - " "use gnulib module environ for portability") rpl_environ (void) { return &environ; } # undef environ # define environ (*rpl_environ ()) # endif #endif #if @GNULIB_EUIDACCESS@ /* Like access(), except that it uses the effective user id and group id of the current process. */ # if !@HAVE_EUIDACCESS@ _GL_FUNCDECL_SYS (euidaccess, int, (const char *filename, int mode) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (euidaccess, int, (const char *filename, int mode)); _GL_CXXALIASWARN (euidaccess); # if defined GNULIB_POSIXCHECK /* Like access(), this function is a security risk. */ _GL_WARN_ON_USE (euidaccess, "the euidaccess function is a security risk - " "use the gnulib module faccessat instead"); # endif #elif defined GNULIB_POSIXCHECK # undef euidaccess # if HAVE_RAW_DECL_EUIDACCESS _GL_WARN_ON_USE (euidaccess, "euidaccess is unportable - " "use gnulib module euidaccess for portability"); # endif #endif #if @GNULIB_EXECL@ # if @REPLACE_EXECL@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execl # define execl rpl_execl # endif _GL_FUNCDECL_RPL (execl, int, (const char *program, const char *arg, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (execl, int, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execl); #elif defined GNULIB_POSIXCHECK # undef execl # if HAVE_RAW_DECL_EXECL _GL_WARN_ON_USE (execl, "execl behaves very differently on mingw - " "use gnulib module execl for portability"); # endif #elif @GNULIB_MDA_EXECL@ /* On native Windows, map 'execl' to '_execl', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execl always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execl # define execl _execl # endif _GL_CXXALIAS_MDA (execl, intptr_t, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execl, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execl); #endif #if @GNULIB_EXECLE@ # if @REPLACE_EXECLE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execle # define execle rpl_execle # endif _GL_FUNCDECL_RPL (execle, int, (const char *program, const char *arg, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (execle, int, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execle); #elif defined GNULIB_POSIXCHECK # undef execle # if HAVE_RAW_DECL_EXECLE _GL_WARN_ON_USE (execle, "execle behaves very differently on mingw - " "use gnulib module execle for portability"); # endif #elif @GNULIB_MDA_EXECLE@ /* On native Windows, map 'execle' to '_execle', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execle always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execle # define execle _execle # endif _GL_CXXALIAS_MDA (execle, intptr_t, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execle, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execle); #endif #if @GNULIB_EXECLP@ # if @REPLACE_EXECLP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execlp # define execlp rpl_execlp # endif _GL_FUNCDECL_RPL (execlp, int, (const char *program, const char *arg, ...) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (execlp, int, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execlp); #elif defined GNULIB_POSIXCHECK # undef execlp # if HAVE_RAW_DECL_EXECLP _GL_WARN_ON_USE (execlp, "execlp behaves very differently on mingw - " "use gnulib module execlp for portability"); # endif #elif @GNULIB_MDA_EXECLP@ /* On native Windows, map 'execlp' to '_execlp', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execlp always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execlp # define execlp _execlp # endif _GL_CXXALIAS_MDA (execlp, intptr_t, (const char *program, const char *arg, ...)); # else _GL_CXXALIAS_SYS (execlp, int, (const char *program, const char *arg, ...)); # endif _GL_CXXALIASWARN (execlp); #endif #if @GNULIB_EXECV@ # if @REPLACE_EXECV@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execv # define execv rpl_execv # endif _GL_FUNCDECL_RPL (execv, int, (const char *program, char * const *argv) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execv, int, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execv); #elif defined GNULIB_POSIXCHECK # undef execv # if HAVE_RAW_DECL_EXECV _GL_WARN_ON_USE (execv, "execv behaves very differently on mingw - " "use gnulib module execv for portability"); # endif #elif @GNULIB_MDA_EXECV@ /* On native Windows, map 'execv' to '_execv', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execv always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execv # define execv _execv # endif _GL_CXXALIAS_MDA_CAST (execv, intptr_t, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execv, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execv); #endif #if @GNULIB_EXECVE@ # if @REPLACE_EXECVE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execve # define execve rpl_execve # endif _GL_FUNCDECL_RPL (execve, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execve, int, (const char *program, char * const *argv, char * const *env)); # else _GL_CXXALIAS_SYS (execve, int, (const char *program, char * const *argv, char * const *env)); # endif _GL_CXXALIASWARN (execve); #elif defined GNULIB_POSIXCHECK # undef execve # if HAVE_RAW_DECL_EXECVE _GL_WARN_ON_USE (execve, "execve behaves very differently on mingw - " "use gnulib module execve for portability"); # endif #elif @GNULIB_MDA_EXECVE@ /* On native Windows, map 'execve' to '_execve', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execve always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execve # define execve _execve # endif _GL_CXXALIAS_MDA_CAST (execve, intptr_t, (const char *program, char * const *argv, char * const *env)); # else _GL_CXXALIAS_SYS (execve, int, (const char *program, char * const *argv, char * const *env)); # endif _GL_CXXALIASWARN (execve); #endif #if @GNULIB_EXECVP@ # if @REPLACE_EXECVP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvp # define execvp rpl_execvp # endif _GL_FUNCDECL_RPL (execvp, int, (const char *program, char * const *argv) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execvp, int, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execvp); #elif defined GNULIB_POSIXCHECK # undef execvp # if HAVE_RAW_DECL_EXECVP _GL_WARN_ON_USE (execvp, "execvp behaves very differently on mingw - " "use gnulib module execvp for portability"); # endif #elif @GNULIB_MDA_EXECVP@ /* On native Windows, map 'execvp' to '_execvp', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execvp always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvp # define execvp _execvp # endif _GL_CXXALIAS_MDA_CAST (execvp, intptr_t, (const char *program, char * const *argv)); # else _GL_CXXALIAS_SYS (execvp, int, (const char *program, char * const *argv)); # endif _GL_CXXALIASWARN (execvp); #endif #if @GNULIB_EXECVPE@ # if @REPLACE_EXECVPE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvpe # define execvpe rpl_execvpe # endif _GL_FUNCDECL_RPL (execvpe, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (execvpe, int, (const char *program, char * const *argv, char * const *env)); # else # if !@HAVE_DECL_EXECVPE@ _GL_FUNCDECL_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env)); # endif _GL_CXXALIASWARN (execvpe); #elif defined GNULIB_POSIXCHECK # undef execvpe # if HAVE_RAW_DECL_EXECVPE _GL_WARN_ON_USE (execvpe, "execvpe behaves very differently on mingw - " "use gnulib module execvpe for portability"); # endif #elif @GNULIB_MDA_EXECVPE@ /* On native Windows, map 'execvpe' to '_execvpe', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::execvpe on all platforms that have it. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef execvpe # define execvpe _execvpe # endif _GL_CXXALIAS_MDA_CAST (execvpe, intptr_t, (const char *program, char * const *argv, char * const *env)); # elif @HAVE_EXECVPE@ # if !@HAVE_DECL_EXECVPE@ _GL_FUNCDECL_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (execvpe, int, (const char *program, char * const *argv, char * const *env)); # endif # if (defined _WIN32 && !defined __CYGWIN__) || @HAVE_EXECVPE@ _GL_CXXALIASWARN (execvpe); # endif #endif #if @GNULIB_FACCESSAT@ # if @REPLACE_FACCESSAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef faccessat # define faccessat rpl_faccessat # endif _GL_FUNCDECL_RPL (faccessat, int, (int fd, char const *name, int mode, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (faccessat, int, (int fd, char const *name, int mode, int flag)); # else # if !@HAVE_FACCESSAT@ _GL_FUNCDECL_SYS (faccessat, int, (int fd, char const *file, int mode, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (faccessat, int, (int fd, char const *file, int mode, int flag)); # endif _GL_CXXALIASWARN (faccessat); #elif defined GNULIB_POSIXCHECK # undef faccessat # if HAVE_RAW_DECL_FACCESSAT _GL_WARN_ON_USE (faccessat, "faccessat is not portable - " "use gnulib module faccessat for portability"); # endif #endif #if @GNULIB_FCHDIR@ /* Change the process' current working directory to the directory on which the given file descriptor is open. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fchdir.html>. */ # if ! @HAVE_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); /* Gnulib internal hooks needed to maintain the fchdir metadata. */ _GL_EXTERN_C int _gl_register_fd (int fd, const char *filename) _GL_ARG_NONNULL ((2)); _GL_EXTERN_C void _gl_unregister_fd (int fd); _GL_EXTERN_C int _gl_register_dup (int oldfd, int newfd); _GL_EXTERN_C const char *_gl_directory_name (int fd); # else # if !@HAVE_DECL_FCHDIR@ _GL_FUNCDECL_SYS (fchdir, int, (int /*fd*/)); # endif # endif _GL_CXXALIAS_SYS (fchdir, int, (int /*fd*/)); _GL_CXXALIASWARN (fchdir); #elif defined GNULIB_POSIXCHECK # undef fchdir # if HAVE_RAW_DECL_FCHDIR _GL_WARN_ON_USE (fchdir, "fchdir is unportable - " "use gnulib module fchdir for portability"); # endif #endif #if @GNULIB_FCHOWNAT@ # if @REPLACE_FCHOWNAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef fchownat # define fchownat rpl_fchownat # endif _GL_FUNCDECL_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # else # if !@HAVE_FCHOWNAT@ _GL_FUNCDECL_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (fchownat, int, (int fd, char const *file, uid_t owner, gid_t group, int flag)); # endif _GL_CXXALIASWARN (fchownat); #elif defined GNULIB_POSIXCHECK # undef fchownat # if HAVE_RAW_DECL_FCHOWNAT _GL_WARN_ON_USE (fchownat, "fchownat is not portable - " "use gnulib module fchownat for portability"); # endif #endif #if @GNULIB_FDATASYNC@ /* Synchronize changes to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fdatasync.html>. */ # if !@HAVE_FDATASYNC@ || !@HAVE_DECL_FDATASYNC@ _GL_FUNCDECL_SYS (fdatasync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fdatasync, int, (int fd)); _GL_CXXALIASWARN (fdatasync); #elif defined GNULIB_POSIXCHECK # undef fdatasync # if HAVE_RAW_DECL_FDATASYNC _GL_WARN_ON_USE (fdatasync, "fdatasync is unportable - " "use gnulib module fdatasync for portability"); # endif #endif #if @GNULIB_FSYNC@ /* Synchronize changes, including metadata, to a file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/fsync.html>. */ # if !@HAVE_FSYNC@ _GL_FUNCDECL_SYS (fsync, int, (int fd)); # endif _GL_CXXALIAS_SYS (fsync, int, (int fd)); _GL_CXXALIASWARN (fsync); #elif defined GNULIB_POSIXCHECK # undef fsync # if HAVE_RAW_DECL_FSYNC _GL_WARN_ON_USE (fsync, "fsync is unportable - " "use gnulib module fsync for portability"); # endif #endif #if @GNULIB_FTRUNCATE@ /* Change the size of the file to which FD is opened to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/ftruncate.html>. */ # if @REPLACE_FTRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ftruncate # define ftruncate rpl_ftruncate # endif _GL_FUNCDECL_RPL (ftruncate, int, (int fd, off_t length)); _GL_CXXALIAS_RPL (ftruncate, int, (int fd, off_t length)); # else # if !@HAVE_FTRUNCATE@ _GL_FUNCDECL_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIAS_SYS (ftruncate, int, (int fd, off_t length)); # endif _GL_CXXALIASWARN (ftruncate); #elif defined GNULIB_POSIXCHECK # undef ftruncate # if HAVE_RAW_DECL_FTRUNCATE _GL_WARN_ON_USE (ftruncate, "ftruncate is unportable - " "use gnulib module ftruncate for portability"); # endif #endif #if @GNULIB_GETCWD@ /* Get the name of the current working directory, and put it in SIZE bytes of BUF. Return BUF if successful, or NULL if the directory couldn't be determined or SIZE was too small. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getcwd.html>. Additionally, the gnulib module 'getcwd' guarantees the following GNU extension: If BUF is NULL, an array is allocated with 'malloc'; the array is SIZE bytes long, unless SIZE == 0, in which case it is as big as necessary. */ # if @REPLACE_GETCWD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getcwd rpl_getcwd # endif _GL_FUNCDECL_RPL (getcwd, char *, (char *buf, size_t size)); _GL_CXXALIAS_RPL (getcwd, char *, (char *buf, size_t size)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getcwd # define getcwd _getcwd # endif _GL_CXXALIAS_MDA (getcwd, char *, (char *buf, size_t size)); # else /* Need to cast, because on mingw, the second parameter is int size. */ _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); # endif _GL_CXXALIASWARN (getcwd); #elif defined GNULIB_POSIXCHECK # undef getcwd # if HAVE_RAW_DECL_GETCWD _GL_WARN_ON_USE (getcwd, "getcwd is unportable - " "use gnulib module getcwd for portability"); # endif #elif @GNULIB_MDA_GETCWD@ /* On native Windows, map 'getcwd' to '_getcwd', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::getcwd always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getcwd # define getcwd _getcwd # endif /* Need to cast, because on mingw, the second parameter is either 'int size' or 'size_t size'. */ _GL_CXXALIAS_MDA_CAST (getcwd, char *, (char *buf, size_t size)); # else _GL_CXXALIAS_SYS_CAST (getcwd, char *, (char *buf, size_t size)); # endif _GL_CXXALIASWARN (getcwd); #endif #if @GNULIB_GETDOMAINNAME@ /* Return the NIS domain name of the machine. WARNING! The NIS domain name is unrelated to the fully qualified host name of the machine. It is also unrelated to email addresses. WARNING! The NIS domain name is usually the empty string or "(none)" when not using NIS. Put up to LEN bytes of the NIS domain name into NAME. Null terminate it if the name is shorter than LEN. If the NIS domain name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @REPLACE_GETDOMAINNAME@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdomainname # define getdomainname rpl_getdomainname # endif _GL_FUNCDECL_RPL (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getdomainname, int, (char *name, size_t len)); # else # if !@HAVE_DECL_GETDOMAINNAME@ _GL_FUNCDECL_SYS (getdomainname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getdomainname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (getdomainname); #elif defined GNULIB_POSIXCHECK # undef getdomainname # if HAVE_RAW_DECL_GETDOMAINNAME _GL_WARN_ON_USE (getdomainname, "getdomainname is unportable - " "use gnulib module getdomainname for portability"); # endif #endif #if @GNULIB_GETDTABLESIZE@ /* Return the maximum number of file descriptors in the current process. In POSIX, this is same as sysconf (_SC_OPEN_MAX). */ # if @REPLACE_GETDTABLESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getdtablesize # define getdtablesize rpl_getdtablesize # endif _GL_FUNCDECL_RPL (getdtablesize, int, (void)); _GL_CXXALIAS_RPL (getdtablesize, int, (void)); # else # if !@HAVE_GETDTABLESIZE@ _GL_FUNCDECL_SYS (getdtablesize, int, (void)); # endif /* Need to cast, because on AIX, the parameter list is (...). */ _GL_CXXALIAS_SYS_CAST (getdtablesize, int, (void)); # endif _GL_CXXALIASWARN (getdtablesize); #elif defined GNULIB_POSIXCHECK # undef getdtablesize # if HAVE_RAW_DECL_GETDTABLESIZE _GL_WARN_ON_USE (getdtablesize, "getdtablesize is unportable - " "use gnulib module getdtablesize for portability"); # endif #endif #if @GNULIB_GETENTROPY@ /* Fill a buffer with random bytes. */ # if !@HAVE_GETENTROPY@ _GL_FUNCDECL_SYS (getentropy, int, (void *buffer, size_t length)); # endif _GL_CXXALIAS_SYS (getentropy, int, (void *buffer, size_t length)); _GL_CXXALIASWARN (getentropy); #elif defined GNULIB_POSIXCHECK # undef getentropy # if HAVE_RAW_DECL_GETENTROPY _GL_WARN_ON_USE (getentropy, "getentropy is unportable - " "use gnulib module getentropy for portability"); # endif #endif #if @GNULIB_GETGROUPS@ /* Return the supplemental groups that the current process belongs to. It is unspecified whether the effective group id is in the list. If N is 0, return the group count; otherwise, N describes how many entries are available in GROUPS. Return -1 and set errno if N is not 0 and not large enough. Fails with ENOSYS on some systems. */ # if @REPLACE_GETGROUPS@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getgroups # define getgroups rpl_getgroups # endif _GL_FUNCDECL_RPL (getgroups, int, (int n, gid_t *groups)); _GL_CXXALIAS_RPL (getgroups, int, (int n, gid_t *groups)); # else # if !@HAVE_GETGROUPS@ _GL_FUNCDECL_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIAS_SYS (getgroups, int, (int n, gid_t *groups)); # endif _GL_CXXALIASWARN (getgroups); #elif defined GNULIB_POSIXCHECK # undef getgroups # if HAVE_RAW_DECL_GETGROUPS _GL_WARN_ON_USE (getgroups, "getgroups is unportable - " "use gnulib module getgroups for portability"); # endif #endif #if @GNULIB_GETHOSTNAME@ /* Return the standard host name of the machine. WARNING! The host name may or may not be fully qualified. Put up to LEN bytes of the host name into NAME. Null terminate it if the name is shorter than LEN. If the host name is longer than LEN, set errno = EINVAL and return -1. Return 0 if successful, otherwise set errno and return -1. */ # if @UNISTD_H_HAVE_WINSOCK2_H@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef gethostname # define gethostname rpl_gethostname # endif _GL_FUNCDECL_RPL (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (gethostname, int, (char *name, size_t len)); # else # if !@HAVE_GETHOSTNAME@ _GL_FUNCDECL_SYS (gethostname, int, (char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 and OSF/1 5.1 systems, the second parameter is int len. */ _GL_CXXALIAS_SYS_CAST (gethostname, int, (char *name, size_t len)); # endif _GL_CXXALIASWARN (gethostname); #elif @UNISTD_H_HAVE_WINSOCK2_H@ # undef gethostname # define gethostname gethostname_used_without_requesting_gnulib_module_gethostname #elif defined GNULIB_POSIXCHECK # undef gethostname # if HAVE_RAW_DECL_GETHOSTNAME _GL_WARN_ON_USE (gethostname, "gethostname is unportable - " "use gnulib module gethostname for portability"); # endif #endif #if @GNULIB_GETLOGIN@ /* Returns the user's login name, or NULL if it cannot be found. Upon error, returns NULL with errno set. See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>. Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if !@HAVE_DECL_GETLOGIN@ _GL_FUNCDECL_SYS (getlogin, char *, (void)); # endif _GL_CXXALIAS_SYS (getlogin, char *, (void)); _GL_CXXALIASWARN (getlogin); #elif defined GNULIB_POSIXCHECK # undef getlogin # if HAVE_RAW_DECL_GETLOGIN _GL_WARN_ON_USE (getlogin, "getlogin is unportable - " "use gnulib module getlogin for portability"); # endif #endif #if @GNULIB_GETLOGIN_R@ /* Copies the user's login name to NAME. The array pointed to by NAME has room for SIZE bytes. Returns 0 if successful. Upon error, an error number is returned, or -1 in the case that the login name cannot be found but no specific error is provided (this case is hopefully rare but is left open by the POSIX spec). See <https://pubs.opengroup.org/onlinepubs/9699919799/functions/getlogin.html>. Most programs don't need to use this function, because the information is available through environment variables: ${LOGNAME-$USER} on Unix platforms, $USERNAME on native Windows platforms. */ # if @REPLACE_GETLOGIN_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getlogin_r rpl_getlogin_r # endif _GL_FUNCDECL_RPL (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getlogin_r, int, (char *name, size_t size)); # else # if !@HAVE_DECL_GETLOGIN_R@ _GL_FUNCDECL_SYS (getlogin_r, int, (char *name, size_t size) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 10 systems, the second argument is int size. */ _GL_CXXALIAS_SYS_CAST (getlogin_r, int, (char *name, size_t size)); # endif _GL_CXXALIASWARN (getlogin_r); #elif defined GNULIB_POSIXCHECK # undef getlogin_r # if HAVE_RAW_DECL_GETLOGIN_R _GL_WARN_ON_USE (getlogin_r, "getlogin_r is unportable - " "use gnulib module getlogin_r for portability"); # endif #endif #if @GNULIB_GETPAGESIZE@ # if @REPLACE_GETPAGESIZE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize rpl_getpagesize # endif _GL_FUNCDECL_RPL (getpagesize, int, (void)); _GL_CXXALIAS_RPL (getpagesize, int, (void)); # else /* On HP-UX, getpagesize exists, but it is not declared in <unistd.h> even if the compiler options -D_HPUX_SOURCE -D_XOPEN_SOURCE=600 are used. */ # if defined __hpux _GL_FUNCDECL_SYS (getpagesize, int, (void)); # endif # if !@HAVE_GETPAGESIZE@ # if !defined getpagesize /* This is for POSIX systems. */ # if !defined _gl_getpagesize && defined _SC_PAGESIZE # if ! (defined __VMS && __VMS_VER < 70000000) # define _gl_getpagesize() sysconf (_SC_PAGESIZE) # endif # endif /* This is for older VMS. */ # if !defined _gl_getpagesize && defined __VMS # ifdef __ALPHA # define _gl_getpagesize() 8192 # else # define _gl_getpagesize() 512 # endif # endif /* This is for BeOS. */ # if !defined _gl_getpagesize && @HAVE_OS_H@ # include <OS.h> # if defined B_PAGE_SIZE # define _gl_getpagesize() B_PAGE_SIZE # endif # endif /* This is for AmigaOS4.0. */ # if !defined _gl_getpagesize && defined __amigaos4__ # define _gl_getpagesize() 2048 # endif /* This is for older Unix systems. */ # if !defined _gl_getpagesize && @HAVE_SYS_PARAM_H@ # include <sys/param.h> # ifdef EXEC_PAGESIZE # define _gl_getpagesize() EXEC_PAGESIZE # else # ifdef NBPG # ifndef CLSIZE # define CLSIZE 1 # endif # define _gl_getpagesize() (NBPG * CLSIZE) # else # ifdef NBPC # define _gl_getpagesize() NBPC # endif # endif # endif # endif # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define getpagesize() _gl_getpagesize () # else # if !GNULIB_defined_getpagesize_function _GL_UNISTD_INLINE int getpagesize () { return _gl_getpagesize (); } # define GNULIB_defined_getpagesize_function 1 # endif # endif # endif # endif /* Need to cast, because on Cygwin 1.5.x systems, the return type is size_t. */ _GL_CXXALIAS_SYS_CAST (getpagesize, int, (void)); # endif # if @HAVE_DECL_GETPAGESIZE@ _GL_CXXALIASWARN (getpagesize); # endif #elif defined GNULIB_POSIXCHECK # undef getpagesize # if HAVE_RAW_DECL_GETPAGESIZE _GL_WARN_ON_USE (getpagesize, "getpagesize is unportable - " "use gnulib module getpagesize for portability"); # endif #endif #if @GNULIB_GETPASS@ /* Function getpass() from module 'getpass': Read a password from /dev/tty or stdin. Function getpass() from module 'getpass-gnu': Read a password of arbitrary length from /dev/tty or stdin. */ # if (@GNULIB_GETPASS@ && @REPLACE_GETPASS@) \ || (@GNULIB_GETPASS_GNU@ && @REPLACE_GETPASS_FOR_GETPASS_GNU@) # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getpass # define getpass rpl_getpass # endif _GL_FUNCDECL_RPL (getpass, char *, (const char *prompt) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (getpass, char *, (const char *prompt)); # else # if !@HAVE_GETPASS@ _GL_FUNCDECL_SYS (getpass, char *, (const char *prompt) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (getpass, char *, (const char *prompt)); # endif _GL_CXXALIASWARN (getpass); #elif defined GNULIB_POSIXCHECK # undef getpass # if HAVE_RAW_DECL_GETPASS _GL_WARN_ON_USE (getpass, "getpass is unportable - " "use gnulib module getpass or getpass-gnu for portability"); # endif #endif #if @GNULIB_MDA_GETPID@ /* On native Windows, map 'getpid' to '_getpid', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::getpid always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef getpid # define getpid _getpid # endif _GL_CXXALIAS_MDA (getpid, int, (void)); # else _GL_CXXALIAS_SYS (getpid, pid_t, (void)); # endif _GL_CXXALIASWARN (getpid); #endif #if @GNULIB_GETUSERSHELL@ /* Return the next valid login shell on the system, or NULL when the end of the list has been reached. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (getusershell, char *, (void)); # endif _GL_CXXALIAS_SYS (getusershell, char *, (void)); _GL_CXXALIASWARN (getusershell); #elif defined GNULIB_POSIXCHECK # undef getusershell # if HAVE_RAW_DECL_GETUSERSHELL _GL_WARN_ON_USE (getusershell, "getusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Rewind to pointer that is advanced at each getusershell() call. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (setusershell, void, (void)); # endif _GL_CXXALIAS_SYS (setusershell, void, (void)); _GL_CXXALIASWARN (setusershell); #elif defined GNULIB_POSIXCHECK # undef setusershell # if HAVE_RAW_DECL_SETUSERSHELL _GL_WARN_ON_USE (setusershell, "setusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GETUSERSHELL@ /* Free the pointer that is advanced at each getusershell() call and associated resources. */ # if !@HAVE_DECL_GETUSERSHELL@ _GL_FUNCDECL_SYS (endusershell, void, (void)); # endif _GL_CXXALIAS_SYS (endusershell, void, (void)); _GL_CXXALIASWARN (endusershell); #elif defined GNULIB_POSIXCHECK # undef endusershell # if HAVE_RAW_DECL_ENDUSERSHELL _GL_WARN_ON_USE (endusershell, "endusershell is unportable - " "use gnulib module getusershell for portability"); # endif #endif #if @GNULIB_GROUP_MEMBER@ /* Determine whether group id is in calling user's group list. */ # if !@HAVE_GROUP_MEMBER@ _GL_FUNCDECL_SYS (group_member, int, (gid_t gid)); # endif _GL_CXXALIAS_SYS (group_member, int, (gid_t gid)); _GL_CXXALIASWARN (group_member); #elif defined GNULIB_POSIXCHECK # undef group_member # if HAVE_RAW_DECL_GROUP_MEMBER _GL_WARN_ON_USE (group_member, "group_member is unportable - " "use gnulib module group-member for portability"); # endif #endif #if @GNULIB_ISATTY@ # if @REPLACE_ISATTY@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty rpl_isatty # endif # define GNULIB_defined_isatty 1 _GL_FUNCDECL_RPL (isatty, int, (int fd)); _GL_CXXALIAS_RPL (isatty, int, (int fd)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty _isatty # endif _GL_CXXALIAS_MDA (isatty, int, (int fd)); # else _GL_CXXALIAS_SYS (isatty, int, (int fd)); # endif _GL_CXXALIASWARN (isatty); #elif defined GNULIB_POSIXCHECK # undef isatty # if HAVE_RAW_DECL_ISATTY _GL_WARN_ON_USE (isatty, "isatty has portability problems on native Windows - " "use gnulib module isatty for portability"); # endif #elif @GNULIB_MDA_ISATTY@ /* On native Windows, map 'isatty' to '_isatty', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::isatty always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef isatty # define isatty _isatty # endif _GL_CXXALIAS_MDA (isatty, int, (int fd)); # else _GL_CXXALIAS_SYS (isatty, int, (int fd)); # endif _GL_CXXALIASWARN (isatty); #endif #if @GNULIB_LCHOWN@ /* Change the owner of FILE to UID (if UID is not -1) and the group of FILE to GID (if GID is not -1). Do not follow symbolic links. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lchown.html>. */ # if @REPLACE_LCHOWN@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lchown # define lchown rpl_lchown # endif _GL_FUNCDECL_RPL (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (lchown, int, (char const *file, uid_t owner, gid_t group)); # else # if !@HAVE_LCHOWN@ _GL_FUNCDECL_SYS (lchown, int, (char const *file, uid_t owner, gid_t group) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (lchown, int, (char const *file, uid_t owner, gid_t group)); # endif _GL_CXXALIASWARN (lchown); #elif defined GNULIB_POSIXCHECK # undef lchown # if HAVE_RAW_DECL_LCHOWN _GL_WARN_ON_USE (lchown, "lchown is unportable to pre-POSIX.1-2001 systems - " "use gnulib module lchown for portability"); # endif #endif #if @GNULIB_LINK@ /* Create a new hard link for an existing file. Return 0 if successful, otherwise -1 and errno set. See POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/link.html>. */ # if @REPLACE_LINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define link rpl_link # endif _GL_FUNCDECL_RPL (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (link, int, (const char *path1, const char *path2)); # else # if !@HAVE_LINK@ _GL_FUNCDECL_SYS (link, int, (const char *path1, const char *path2) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (link, int, (const char *path1, const char *path2)); # endif _GL_CXXALIASWARN (link); #elif defined GNULIB_POSIXCHECK # undef link # if HAVE_RAW_DECL_LINK _GL_WARN_ON_USE (link, "link is unportable - " "use gnulib module link for portability"); # endif #endif #if @GNULIB_LINKAT@ /* Create a new hard link for an existing file, relative to two directories. FLAG controls whether symlinks are followed. Return 0 if successful, otherwise -1 and errno set. */ # if @REPLACE_LINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef linkat # define linkat rpl_linkat # endif _GL_FUNCDECL_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); _GL_CXXALIAS_RPL (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # else # if !@HAVE_LINKAT@ _GL_FUNCDECL_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag) _GL_ARG_NONNULL ((2, 4))); # endif _GL_CXXALIAS_SYS (linkat, int, (int fd1, const char *path1, int fd2, const char *path2, int flag)); # endif _GL_CXXALIASWARN (linkat); #elif defined GNULIB_POSIXCHECK # undef linkat # if HAVE_RAW_DECL_LINKAT _GL_WARN_ON_USE (linkat, "linkat is unportable - " "use gnulib module linkat for portability"); # endif #endif #if @GNULIB_LSEEK@ /* Set the offset of FD relative to SEEK_SET, SEEK_CUR, or SEEK_END. Return the new offset if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/lseek.html>. */ # if @REPLACE_LSEEK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define lseek rpl_lseek # endif _GL_FUNCDECL_RPL (lseek, off_t, (int fd, off_t offset, int whence)); _GL_CXXALIAS_RPL (lseek, off_t, (int fd, off_t offset, int whence)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lseek # define lseek _lseek # endif _GL_CXXALIAS_MDA (lseek, off_t, (int fd, off_t offset, int whence)); # else _GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); # endif _GL_CXXALIASWARN (lseek); #elif defined GNULIB_POSIXCHECK # undef lseek # if HAVE_RAW_DECL_LSEEK _GL_WARN_ON_USE (lseek, "lseek does not fail with ESPIPE on pipes on some " "systems - use gnulib module lseek for portability"); # endif #elif @GNULIB_MDA_LSEEK@ /* On native Windows, map 'lseek' to '_lseek', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::lseek always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef lseek # define lseek _lseek # endif _GL_CXXALIAS_MDA (lseek, long, (int fd, long offset, int whence)); # else _GL_CXXALIAS_SYS (lseek, off_t, (int fd, off_t offset, int whence)); # endif _GL_CXXALIASWARN (lseek); #endif #if @GNULIB_PIPE@ /* Create a pipe, defaulting to O_BINARY mode. Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. */ # if !@HAVE_PIPE@ _GL_FUNCDECL_SYS (pipe, int, (int fd[2]) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (pipe, int, (int fd[2])); _GL_CXXALIASWARN (pipe); #elif defined GNULIB_POSIXCHECK # undef pipe # if HAVE_RAW_DECL_PIPE _GL_WARN_ON_USE (pipe, "pipe is unportable - " "use gnulib module pipe-posix for portability"); # endif #endif #if @GNULIB_PIPE2@ /* Create a pipe, applying the given flags when opening the read-end of the pipe and the write-end of the pipe. The flags are a bitmask, possibly including O_CLOEXEC (defined in <fcntl.h>) and O_TEXT, O_BINARY (defined in "binary-io.h"). Store the read-end as fd[0] and the write-end as fd[1]. Return 0 upon success, or -1 with errno set upon failure. See also the Linux man page at <https://www.kernel.org/doc/man-pages/online/pages/man2/pipe2.2.html>. */ # if @HAVE_PIPE2@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define pipe2 rpl_pipe2 # endif _GL_FUNCDECL_RPL (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (pipe2, int, (int fd[2], int flags)); # else _GL_FUNCDECL_SYS (pipe2, int, (int fd[2], int flags) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_SYS (pipe2, int, (int fd[2], int flags)); # endif _GL_CXXALIASWARN (pipe2); #elif defined GNULIB_POSIXCHECK # undef pipe2 # if HAVE_RAW_DECL_PIPE2 _GL_WARN_ON_USE (pipe2, "pipe2 is unportable - " "use gnulib module pipe2 for portability"); # endif #endif #if @GNULIB_PREAD@ /* Read at most BUFSIZE bytes from FD into BUF, starting at OFFSET. Return the number of bytes placed into BUF if successful, otherwise set errno and return -1. 0 indicates EOF. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pread.html>. */ # if @REPLACE_PREAD@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pread # define pread rpl_pread # endif _GL_FUNCDECL_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PREAD@ _GL_FUNCDECL_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pread, ssize_t, (int fd, void *buf, size_t bufsize, off_t offset)); # endif _GL_CXXALIASWARN (pread); #elif defined GNULIB_POSIXCHECK # undef pread # if HAVE_RAW_DECL_PREAD _GL_WARN_ON_USE (pread, "pread is unportable - " "use gnulib module pread for portability"); # endif #endif #if @GNULIB_PWRITE@ /* Write at most BUFSIZE bytes from BUF into FD, starting at OFFSET. Return the number of bytes written if successful, otherwise set errno and return -1. 0 indicates nothing written. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/pwrite.html>. */ # if @REPLACE_PWRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef pwrite # define pwrite rpl_pwrite # endif _GL_FUNCDECL_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # else # if !@HAVE_PWRITE@ _GL_FUNCDECL_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (pwrite, ssize_t, (int fd, const void *buf, size_t bufsize, off_t offset)); # endif _GL_CXXALIASWARN (pwrite); #elif defined GNULIB_POSIXCHECK # undef pwrite # if HAVE_RAW_DECL_PWRITE _GL_WARN_ON_USE (pwrite, "pwrite is unportable - " "use gnulib module pwrite for portability"); # endif #endif #if @GNULIB_READ@ /* Read up to COUNT bytes from file descriptor FD into the buffer starting at BUF. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/read.html>. */ # if @REPLACE_READ@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read rpl_read # endif _GL_FUNCDECL_RPL (read, ssize_t, (int fd, void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (read, ssize_t, (int fd, void *buf, size_t count)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read _read # endif _GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, size_t count)); # else _GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #elif @GNULIB_MDA_READ@ /* On native Windows, map 'read' to '_read', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::read always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef read # define read _read # endif # ifdef __MINGW32__ _GL_CXXALIAS_MDA (read, int, (int fd, void *buf, unsigned int count)); # else _GL_CXXALIAS_MDA (read, ssize_t, (int fd, void *buf, unsigned int count)); # endif # else _GL_CXXALIAS_SYS (read, ssize_t, (int fd, void *buf, size_t count)); # endif _GL_CXXALIASWARN (read); #endif #if @GNULIB_READLINK@ /* Read the contents of the symbolic link FILE and place the first BUFSIZE bytes of it into BUF. Return the number of bytes placed into BUF if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/readlink.html>. */ # if @REPLACE_READLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlink rpl_readlink # endif _GL_FUNCDECL_RPL (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize)); # else # if !@HAVE_READLINK@ _GL_FUNCDECL_SYS (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (readlink, ssize_t, (const char *restrict file, char *restrict buf, size_t bufsize)); # endif _GL_CXXALIASWARN (readlink); #elif defined GNULIB_POSIXCHECK # undef readlink # if HAVE_RAW_DECL_READLINK _GL_WARN_ON_USE (readlink, "readlink is unportable - " "use gnulib module readlink for portability"); # endif #endif #if @GNULIB_READLINKAT@ # if @REPLACE_READLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define readlinkat rpl_readlinkat # endif _GL_FUNCDECL_RPL (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len) _GL_ARG_NONNULL ((2, 3))); _GL_CXXALIAS_RPL (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len)); # else # if !@HAVE_READLINKAT@ _GL_FUNCDECL_SYS (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len) _GL_ARG_NONNULL ((2, 3))); # endif _GL_CXXALIAS_SYS (readlinkat, ssize_t, (int fd, char const *restrict file, char *restrict buf, size_t len)); # endif _GL_CXXALIASWARN (readlinkat); #elif defined GNULIB_POSIXCHECK # undef readlinkat # if HAVE_RAW_DECL_READLINKAT _GL_WARN_ON_USE (readlinkat, "readlinkat is not portable - " "use gnulib module readlinkat for portability"); # endif #endif #if @GNULIB_RMDIR@ /* Remove the directory DIR. */ # if @REPLACE_RMDIR@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # define rmdir rpl_rmdir # endif _GL_FUNCDECL_RPL (rmdir, int, (char const *name) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (rmdir, int, (char const *name)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rmdir # define rmdir _rmdir # endif _GL_CXXALIAS_MDA (rmdir, int, (char const *name)); # else _GL_CXXALIAS_SYS (rmdir, int, (char const *name)); # endif _GL_CXXALIASWARN (rmdir); #elif defined GNULIB_POSIXCHECK # undef rmdir # if HAVE_RAW_DECL_RMDIR _GL_WARN_ON_USE (rmdir, "rmdir is unportable - " "use gnulib module rmdir for portability"); # endif #elif @GNULIB_MDA_RMDIR@ /* On native Windows, map 'rmdir' to '_rmdir', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::rmdir always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef rmdir # define rmdir _rmdir # endif _GL_CXXALIAS_MDA (rmdir, int, (char const *name)); # else _GL_CXXALIAS_SYS (rmdir, int, (char const *name)); # endif _GL_CXXALIASWARN (rmdir); #endif #if @GNULIB_SETHOSTNAME@ /* Set the host name of the machine. The host name may or may not be fully qualified. Put LEN bytes of NAME into the host name. Return 0 if successful, otherwise, set errno and return -1. Platforms with no ability to set the hostname return -1 and set errno = ENOSYS. */ # if !@HAVE_SETHOSTNAME@ || !@HAVE_DECL_SETHOSTNAME@ _GL_FUNCDECL_SYS (sethostname, int, (const char *name, size_t len) _GL_ARG_NONNULL ((1))); # endif /* Need to cast, because on Solaris 11 2011-10, Mac OS X 10.5, IRIX 6.5 and FreeBSD 6.4 the second parameter is int. On Solaris 11 2011-10, the first parameter is not const. */ _GL_CXXALIAS_SYS_CAST (sethostname, int, (const char *name, size_t len)); _GL_CXXALIASWARN (sethostname); #elif defined GNULIB_POSIXCHECK # undef sethostname # if HAVE_RAW_DECL_SETHOSTNAME _GL_WARN_ON_USE (sethostname, "sethostname is unportable - " "use gnulib module sethostname for portability"); # endif #endif #if @GNULIB_SLEEP@ /* Pause the execution of the current thread for N seconds. Returns the number of seconds left to sleep. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/sleep.html>. */ # if @REPLACE_SLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef sleep # define sleep rpl_sleep # endif _GL_FUNCDECL_RPL (sleep, unsigned int, (unsigned int n)); _GL_CXXALIAS_RPL (sleep, unsigned int, (unsigned int n)); # else # if !@HAVE_SLEEP@ _GL_FUNCDECL_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIAS_SYS (sleep, unsigned int, (unsigned int n)); # endif _GL_CXXALIASWARN (sleep); #elif defined GNULIB_POSIXCHECK # undef sleep # if HAVE_RAW_DECL_SLEEP _GL_WARN_ON_USE (sleep, "sleep is unportable - " "use gnulib module sleep for portability"); # endif #endif #if @GNULIB_MDA_SWAB@ /* On native Windows, map 'swab' to '_swab', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::swab always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef swab # define swab _swab # endif /* Need to cast, because in old mingw the arguments are (const char *from, char *to, size_t n). */ _GL_CXXALIAS_MDA_CAST (swab, void, (char *from, char *to, int n)); # else # if defined __hpux /* HP-UX */ _GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, int n)); # elif defined __sun && !defined _XPG4 /* Solaris */ _GL_CXXALIAS_SYS (swab, void, (const char *from, char *to, ssize_t n)); # else _GL_CXXALIAS_SYS (swab, void, (const void *from, void *to, ssize_t n)); # endif # endif _GL_CXXALIASWARN (swab); #endif #if @GNULIB_SYMLINK@ # if @REPLACE_SYMLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlink # define symlink rpl_symlink # endif _GL_FUNCDECL_RPL (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); _GL_CXXALIAS_RPL (symlink, int, (char const *contents, char const *file)); # else # if !@HAVE_SYMLINK@ _GL_FUNCDECL_SYS (symlink, int, (char const *contents, char const *file) _GL_ARG_NONNULL ((1, 2))); # endif _GL_CXXALIAS_SYS (symlink, int, (char const *contents, char const *file)); # endif _GL_CXXALIASWARN (symlink); #elif defined GNULIB_POSIXCHECK # undef symlink # if HAVE_RAW_DECL_SYMLINK _GL_WARN_ON_USE (symlink, "symlink is not portable - " "use gnulib module symlink for portability"); # endif #endif #if @GNULIB_SYMLINKAT@ # if @REPLACE_SYMLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef symlinkat # define symlinkat rpl_symlinkat # endif _GL_FUNCDECL_RPL (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); _GL_CXXALIAS_RPL (symlinkat, int, (char const *contents, int fd, char const *file)); # else # if !@HAVE_SYMLINKAT@ _GL_FUNCDECL_SYS (symlinkat, int, (char const *contents, int fd, char const *file) _GL_ARG_NONNULL ((1, 3))); # endif _GL_CXXALIAS_SYS (symlinkat, int, (char const *contents, int fd, char const *file)); # endif _GL_CXXALIASWARN (symlinkat); #elif defined GNULIB_POSIXCHECK # undef symlinkat # if HAVE_RAW_DECL_SYMLINKAT _GL_WARN_ON_USE (symlinkat, "symlinkat is not portable - " "use gnulib module symlinkat for portability"); # endif #endif #if @GNULIB_TRUNCATE@ /* Change the size of the file designated by FILENAME to become equal to LENGTH. Return 0 if successful, otherwise -1 and errno set. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/truncate.html>. */ # if @REPLACE_TRUNCATE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef truncate # define truncate rpl_truncate # endif _GL_FUNCDECL_RPL (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (truncate, int, (const char *filename, off_t length)); # else # if !@HAVE_DECL_TRUNCATE@ _GL_FUNCDECL_SYS (truncate, int, (const char *filename, off_t length) _GL_ARG_NONNULL ((1))); # endif _GL_CXXALIAS_SYS (truncate, int, (const char *filename, off_t length)); # endif _GL_CXXALIASWARN (truncate); #elif defined GNULIB_POSIXCHECK # undef truncate # if HAVE_RAW_DECL_TRUNCATE _GL_WARN_ON_USE (truncate, "truncate is unportable - " "use gnulib module truncate for portability"); # endif #endif #if @GNULIB_TTYNAME_R@ /* Store at most BUFLEN characters of the pathname of the terminal FD is open on in BUF. Return 0 on success, otherwise an error number. */ # if @REPLACE_TTYNAME_R@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef ttyname_r # define ttyname_r rpl_ttyname_r # endif _GL_FUNCDECL_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (ttyname_r, int, (int fd, char *buf, size_t buflen)); # else # if !@HAVE_DECL_TTYNAME_R@ _GL_FUNCDECL_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (ttyname_r, int, (int fd, char *buf, size_t buflen)); # endif _GL_CXXALIASWARN (ttyname_r); #elif defined GNULIB_POSIXCHECK # undef ttyname_r # if HAVE_RAW_DECL_TTYNAME_R _GL_WARN_ON_USE (ttyname_r, "ttyname_r is not portable - " "use gnulib module ttyname_r for portability"); # endif #endif #if @GNULIB_UNLINK@ # if @REPLACE_UNLINK@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink rpl_unlink # endif _GL_FUNCDECL_RPL (unlink, int, (char const *file) _GL_ARG_NONNULL ((1))); _GL_CXXALIAS_RPL (unlink, int, (char const *file)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink _unlink # endif _GL_CXXALIAS_MDA (unlink, int, (char const *file)); # else _GL_CXXALIAS_SYS (unlink, int, (char const *file)); # endif _GL_CXXALIASWARN (unlink); #elif defined GNULIB_POSIXCHECK # undef unlink # if HAVE_RAW_DECL_UNLINK _GL_WARN_ON_USE (unlink, "unlink is not portable - " "use gnulib module unlink for portability"); # endif #elif @GNULIB_MDA_UNLINK@ /* On native Windows, map 'unlink' to '_unlink', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::unlink always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlink # define unlink _unlink # endif _GL_CXXALIAS_MDA (unlink, int, (char const *file)); # else _GL_CXXALIAS_SYS (unlink, int, (char const *file)); # endif _GL_CXXALIASWARN (unlink); #endif #if @GNULIB_UNLINKAT@ # if @REPLACE_UNLINKAT@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef unlinkat # define unlinkat rpl_unlinkat # endif _GL_FUNCDECL_RPL (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (unlinkat, int, (int fd, char const *file, int flag)); # else # if !@HAVE_UNLINKAT@ _GL_FUNCDECL_SYS (unlinkat, int, (int fd, char const *file, int flag) _GL_ARG_NONNULL ((2))); # endif _GL_CXXALIAS_SYS (unlinkat, int, (int fd, char const *file, int flag)); # endif _GL_CXXALIASWARN (unlinkat); #elif defined GNULIB_POSIXCHECK # undef unlinkat # if HAVE_RAW_DECL_UNLINKAT _GL_WARN_ON_USE (unlinkat, "unlinkat is not portable - " "use gnulib module unlinkat for portability"); # endif #endif #if @GNULIB_USLEEP@ /* Pause the execution of the current thread for N microseconds. Returns 0 on completion, or -1 on range error. See the POSIX:2001 specification <https://pubs.opengroup.org/onlinepubs/009695399/functions/usleep.html>. */ # if @REPLACE_USLEEP@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef usleep # define usleep rpl_usleep # endif _GL_FUNCDECL_RPL (usleep, int, (useconds_t n)); _GL_CXXALIAS_RPL (usleep, int, (useconds_t n)); # else # if !@HAVE_USLEEP@ _GL_FUNCDECL_SYS (usleep, int, (useconds_t n)); # endif /* Need to cast, because on Haiku, the first parameter is unsigned int n. */ _GL_CXXALIAS_SYS_CAST (usleep, int, (useconds_t n)); # endif _GL_CXXALIASWARN (usleep); #elif defined GNULIB_POSIXCHECK # undef usleep # if HAVE_RAW_DECL_USLEEP _GL_WARN_ON_USE (usleep, "usleep is unportable - " "use gnulib module usleep for portability"); # endif #endif #if @GNULIB_WRITE@ /* Write up to COUNT bytes starting at BUF to file descriptor FD. See the POSIX:2008 specification <https://pubs.opengroup.org/onlinepubs/9699919799/functions/write.html>. */ # if @REPLACE_WRITE@ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write rpl_write # endif _GL_FUNCDECL_RPL (write, ssize_t, (int fd, const void *buf, size_t count) _GL_ARG_NONNULL ((2))); _GL_CXXALIAS_RPL (write, ssize_t, (int fd, const void *buf, size_t count)); # elif defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write _write # endif _GL_CXXALIAS_MDA (write, ssize_t, (int fd, const void *buf, size_t count)); # else _GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #elif @GNULIB_MDA_WRITE@ /* On native Windows, map 'write' to '_write', so that -loldnames is not required. In C++ with GNULIB_NAMESPACE, avoid differences between platforms by defining GNULIB_NAMESPACE::write always. */ # if defined _WIN32 && !defined __CYGWIN__ # if !(defined __cplusplus && defined GNULIB_NAMESPACE) # undef write # define write _write # endif # ifdef __MINGW32__ _GL_CXXALIAS_MDA (write, int, (int fd, const void *buf, unsigned int count)); # else _GL_CXXALIAS_MDA (write, ssize_t, (int fd, const void *buf, unsigned int count)); # endif # else _GL_CXXALIAS_SYS (write, ssize_t, (int fd, const void *buf, size_t count)); # endif _GL_CXXALIASWARN (write); #endif _GL_INLINE_HEADER_END #endif /* _@GUARD_PREFIX@_UNISTD_H */ #endif /* _GL_INCLUDING_UNISTD_H */ #endif /* _@GUARD_PREFIX@_UNISTD_H */ �������������������������������������������������recutils-1.9/lib/strcasestr.c�����������������������������������������������������������������������0000644�0000000�0000000�00000006001�14226564451�013221� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Case-insensitive searching in a string. Copyright (C) 2005-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2005. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <string.h> #include <ctype.h> #include <stdbool.h> #include <strings.h> #define TOLOWER(Ch) (isupper (Ch) ? tolower (Ch) : (Ch)) /* Two-Way algorithm. */ #define RETURN_TYPE char * #define AVAILABLE(h, h_l, j, n_l) \ (!memchr ((h) + (h_l), '\0', (j) + (n_l) - (h_l)) \ && ((h_l) = (j) + (n_l))) #define CANON_ELEMENT(c) TOLOWER (c) #define CMP_FUNC(p1, p2, l) \ strncasecmp ((const char *) (p1), (const char *) (p2), l) #include "str-two-way.h" /* Find the first occurrence of NEEDLE in HAYSTACK, using case-insensitive comparison. This function gives unspecified results in multibyte locales. */ char * strcasestr (const char *haystack_start, const char *needle_start) { const char *haystack = haystack_start; const char *needle = needle_start; size_t needle_len; /* Length of NEEDLE. */ size_t haystack_len; /* Known minimum length of HAYSTACK. */ bool ok = true; /* True if NEEDLE is prefix of HAYSTACK. */ /* Determine length of NEEDLE, and in the process, make sure HAYSTACK is at least as long (no point processing all of a long NEEDLE if HAYSTACK is too short). */ while (*haystack && *needle) { ok &= (TOLOWER ((unsigned char) *haystack) == TOLOWER ((unsigned char) *needle)); haystack++; needle++; } if (*needle) return NULL; if (ok) return (char *) haystack_start; needle_len = needle - needle_start; haystack = haystack_start + 1; haystack_len = needle_len - 1; /* Perform the search. Abstract memory is considered to be an array of 'unsigned char' values, not an array of 'char' values. See ISO C 99 section 6.2.6.1. */ if (needle_len < LONG_NEEDLE_THRESHOLD) return two_way_short_needle ((const unsigned char *) haystack, haystack_len, (const unsigned char *) needle_start, needle_len); return two_way_long_needle ((const unsigned char *) haystack, haystack_len, (const unsigned char *) needle_start, needle_len); } #undef LONG_NEEDLE_THRESHOLD �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/canonicalize-lgpl.c����������������������������������������������������������������0000644�0000000�0000000�00000035502�14226564447�014434� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Return the canonical absolute name of a given file. Copyright (C) 1996-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBC /* Don't use __attribute__ __nonnull__ in this compilation unit. Otherwise gcc optimizes away the name == NULL test below. */ # define _GL_ARG_NONNULL(params) # include <libc-config.h> #endif /* Specification. */ #include <stdlib.h> #include <errno.h> #include <fcntl.h> #include <limits.h> #include <stdbool.h> #include <string.h> #include <sys/stat.h> #include <unistd.h> #include <eloop-threshold.h> #include <filename.h> #include <idx.h> #include <intprops.h> #include <scratch_buffer.h> #ifdef _LIBC # include <shlib-compat.h> # define GCC_LINT 1 # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define __canonicalize_file_name canonicalize_file_name # define __realpath realpath # include "pathmax.h" # define __faccessat faccessat # if defined _WIN32 && !defined __CYGWIN__ # define __getcwd _getcwd # elif HAVE_GETCWD # if IN_RELOCWRAPPER /* When building the relocatable program wrapper, use the system's getcwd function, not the gnulib override, otherwise we would get a link error. */ # undef getcwd # endif # if defined VMS && !defined getcwd /* We want the directory in Unix syntax, not in VMS syntax. The gnulib override of 'getcwd' takes 2 arguments; the original VMS 'getcwd' takes 3 arguments. */ # define __getcwd(buf, max) getcwd (buf, max, 0) # else # define __getcwd getcwd # endif # else # define __getcwd(buf, max) getwd (buf) # endif # define __mempcpy mempcpy # define __pathconf pathconf # define __rawmemchr rawmemchr # define __readlink readlink # if IN_RELOCWRAPPER /* When building the relocatable program wrapper, use the system's memmove function, not the gnulib override, otherwise we would get a link error. */ # undef memmove # endif #endif /* Suppress bogus GCC -Wmaybe-uninitialized warnings. */ #if defined GCC_LINT || defined lint # define IF_LINT(Code) Code #else # define IF_LINT(Code) /* empty */ #endif #ifndef DOUBLE_SLASH_IS_DISTINCT_ROOT # define DOUBLE_SLASH_IS_DISTINCT_ROOT false #endif #if defined _LIBC || !FUNC_REALPATH_WORKS /* Return true if FILE's existence can be shown, false (setting errno) otherwise. Follow symbolic links. */ static bool file_accessible (char const *file) { # if defined _LIBC || HAVE_FACCESSAT return __faccessat (AT_FDCWD, file, F_OK, AT_EACCESS) == 0; # else struct stat st; return stat (file, &st) == 0 || errno == EOVERFLOW; # endif } /* True if concatenating END as a suffix to a file name means that the code needs to check that the file name is that of a searchable directory, since the canonicalize_filename_mode_stk code won't check this later anyway when it checks an ordinary file name component within END. END must either be empty, or start with a slash. */ static bool _GL_ATTRIBUTE_PURE suffix_requires_dir_check (char const *end) { /* If END does not start with a slash, the suffix is OK. */ while (ISSLASH (*end)) { /* Two or more slashes act like a single slash. */ do end++; while (ISSLASH (*end)); switch (*end++) { default: return false; /* An ordinary file name component is OK. */ case '\0': return true; /* Trailing "/" is trouble. */ case '.': break; /* Possibly "." or "..". */ } /* Trailing "/.", or "/.." even if not trailing, is trouble. */ if (!*end || (*end == '.' && (!end[1] || ISSLASH (end[1])))) return true; } return false; } /* Append this to a file name to test whether it is a searchable directory. On POSIX platforms "/" suffices, but "/./" is sometimes needed on macOS 10.13 <https://bugs.gnu.org/30350>, and should also work on platforms like AIX 7.2 that need at least "/.". */ # if defined _LIBC || defined LSTAT_FOLLOWS_SLASHED_SYMLINK static char const dir_suffix[] = "/"; # else static char const dir_suffix[] = "/./"; # endif /* Return true if DIR is a searchable dir, false (setting errno) otherwise. DIREND points to the NUL byte at the end of the DIR string. Store garbage into DIREND[0 .. strlen (dir_suffix)]. */ static bool dir_check (char *dir, char *dirend) { strcpy (dirend, dir_suffix); return file_accessible (dir); } static idx_t get_path_max (void) { # ifdef PATH_MAX long int path_max = PATH_MAX; # else /* The caller invoked realpath with a null RESOLVED, even though PATH_MAX is not defined as a constant. The glibc manual says programs should not do this, and POSIX says the behavior is undefined. Historically, glibc here used the result of pathconf, or 1024 if that failed; stay consistent with this (dubious) historical practice. */ int err = errno; long int path_max = __pathconf ("/", _PC_PATH_MAX); __set_errno (err); # endif return path_max < 0 ? 1024 : path_max <= IDX_MAX ? path_max : IDX_MAX; } /* Act like __realpath (see below), with an additional argument rname_buf that can be used as temporary storage. If GCC_LINT is defined, do not inline this function with GCC 10.1 and later, to avoid creating a pointer to the stack that GCC -Wreturn-local-addr incorrectly complains about. See: https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644 Although the noinline attribute can hurt performance a bit, no better way to pacify GCC is known; even an explicit #pragma does not pacify GCC. When the GCC bug is fixed this workaround should be limited to the broken GCC versions. */ # if __GNUC_PREREQ (10, 1) # if defined GCC_LINT || defined lint __attribute__ ((__noinline__)) # elif __OPTIMIZE__ && !__NO_INLINE__ # define GCC_BOGUS_WRETURN_LOCAL_ADDR # endif # endif static char * realpath_stk (const char *name, char *resolved, struct scratch_buffer *rname_buf) { char *dest; char const *start; char const *end; int num_links = 0; if (name == NULL) { /* As per Single Unix Specification V2 we must return an error if either parameter is a null pointer. We extend this to allow the RESOLVED parameter to be NULL in case the we are expected to allocate the room for the return value. */ __set_errno (EINVAL); return NULL; } if (name[0] == '\0') { /* As per Single Unix Specification V2 we must return an error if the name argument points to an empty string. */ __set_errno (ENOENT); return NULL; } struct scratch_buffer extra_buffer, link_buffer; scratch_buffer_init (&extra_buffer); scratch_buffer_init (&link_buffer); scratch_buffer_init (rname_buf); char *rname_on_stack = rname_buf->data; char *rname = rname_on_stack; bool end_in_extra_buffer = false; bool failed = true; /* This is always zero for Posix hosts, but can be 2 for MS-Windows and MS-DOS X:/foo/bar file names. */ idx_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); if (!IS_ABSOLUTE_FILE_NAME (name)) { while (!__getcwd (rname, rname_buf->length)) { if (errno != ERANGE) { dest = rname; goto error; } if (!scratch_buffer_grow (rname_buf)) goto error_nomem; rname = rname_buf->data; } dest = __rawmemchr (rname, '\0'); start = name; prefix_len = FILE_SYSTEM_PREFIX_LEN (rname); } else { dest = __mempcpy (rname, name, prefix_len); *dest++ = '/'; if (DOUBLE_SLASH_IS_DISTINCT_ROOT) { if (prefix_len == 0 /* implies ISSLASH (name[0]) */ && ISSLASH (name[1]) && !ISSLASH (name[2])) *dest++ = '/'; *dest = '\0'; } start = name + prefix_len; } for ( ; *start; start = end) { /* Skip sequence of multiple file name separators. */ while (ISSLASH (*start)) ++start; /* Find end of component. */ for (end = start; *end && !ISSLASH (*end); ++end) /* Nothing. */; /* Length of this file name component; it can be zero if a file name ends in '/'. */ idx_t startlen = end - start; if (startlen == 0) break; else if (startlen == 1 && start[0] == '.') /* nothing */; else if (startlen == 2 && start[0] == '.' && start[1] == '.') { /* Back up to previous component, ignore if at root already. */ if (dest > rname + prefix_len + 1) for (--dest; dest > rname && !ISSLASH (dest[-1]); --dest) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && !prefix_len && ISSLASH (*dest) && !ISSLASH (dest[1])) dest++; } else { if (!ISSLASH (dest[-1])) *dest++ = '/'; while (rname + rname_buf->length - dest < startlen + sizeof dir_suffix) { idx_t dest_offset = dest - rname; if (!scratch_buffer_grow_preserve (rname_buf)) goto error_nomem; rname = rname_buf->data; dest = rname + dest_offset; } dest = __mempcpy (dest, start, startlen); *dest = '\0'; char *buf; ssize_t n; while (true) { buf = link_buffer.data; idx_t bufsize = link_buffer.length; n = __readlink (rname, buf, bufsize - 1); if (n < bufsize - 1) break; if (!scratch_buffer_grow (&link_buffer)) goto error_nomem; } if (0 <= n) { if (++num_links > __eloop_threshold ()) { __set_errno (ELOOP); goto error; } buf[n] = '\0'; char *extra_buf = extra_buffer.data; idx_t end_idx IF_LINT (= 0); if (end_in_extra_buffer) end_idx = end - extra_buf; size_t len = strlen (end); if (INT_ADD_OVERFLOW (len, n)) { __set_errno (ENOMEM); goto error_nomem; } while (extra_buffer.length <= len + n) { if (!scratch_buffer_grow_preserve (&extra_buffer)) goto error_nomem; extra_buf = extra_buffer.data; } if (end_in_extra_buffer) end = extra_buf + end_idx; /* Careful here, end may be a pointer into extra_buf... */ memmove (&extra_buf[n], end, len + 1); name = end = memcpy (extra_buf, buf, n); end_in_extra_buffer = true; if (IS_ABSOLUTE_FILE_NAME (buf)) { idx_t pfxlen = FILE_SYSTEM_PREFIX_LEN (buf); dest = __mempcpy (rname, buf, pfxlen); *dest++ = '/'; /* It's an absolute symlink */ if (DOUBLE_SLASH_IS_DISTINCT_ROOT) { if (ISSLASH (buf[1]) && !ISSLASH (buf[2]) && !pfxlen) *dest++ = '/'; *dest = '\0'; } /* Install the new prefix to be in effect hereafter. */ prefix_len = pfxlen; } else { /* Back up to previous component, ignore if at root already: */ if (dest > rname + prefix_len + 1) for (--dest; dest > rname && !ISSLASH (dest[-1]); --dest) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && ISSLASH (*dest) && !ISSLASH (dest[1]) && !prefix_len) dest++; } } else if (! (suffix_requires_dir_check (end) ? dir_check (rname, dest) : errno == EINVAL)) goto error; } } if (dest > rname + prefix_len + 1 && ISSLASH (dest[-1])) --dest; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && dest == rname + 1 && !prefix_len && ISSLASH (*dest) && !ISSLASH (dest[1])) dest++; failed = false; error: *dest++ = '\0'; if (resolved != NULL && dest - rname <= get_path_max ()) rname = strcpy (resolved, rname); error_nomem: scratch_buffer_free (&extra_buffer); scratch_buffer_free (&link_buffer); if (failed || rname == resolved) { scratch_buffer_free (rname_buf); return failed ? NULL : resolved; } return scratch_buffer_dupfree (rname_buf, dest - rname); } /* Return the canonical absolute name of file NAME. A canonical name does not contain any ".", ".." components nor any repeated file name separators ('/') or symlinks. All file name components must exist. If RESOLVED is null, the result is malloc'd; otherwise, if the canonical name is PATH_MAX chars or more, returns null with 'errno' set to ENAMETOOLONG; if the name fits in fewer than PATH_MAX chars, returns the name in RESOLVED. If the name cannot be resolved and RESOLVED is non-NULL, it contains the name of the first component that cannot be resolved. If the name can be resolved, RESOLVED holds the same value as the value returned. */ char * __realpath (const char *name, char *resolved) { #ifdef GCC_BOGUS_WRETURN_LOCAL_ADDR #warning "GCC might issue a bogus -Wreturn-local-addr warning here." #warning "See <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=93644>." #endif struct scratch_buffer rname_buffer; return realpath_stk (name, resolved, &rname_buffer); } libc_hidden_def (__realpath) versioned_symbol (libc, __realpath, realpath, GLIBC_2_3); #endif /* defined _LIBC || !FUNC_REALPATH_WORKS */ #if SHLIB_COMPAT(libc, GLIBC_2_0, GLIBC_2_3) char * attribute_compat_text_section __old_realpath (const char *name, char *resolved) { if (resolved == NULL) { __set_errno (EINVAL); return NULL; } return __realpath (name, resolved); } compat_symbol (libc, __old_realpath, realpath, GLIBC_2_0); #endif char * __canonicalize_file_name (const char *name) { return __realpath (name, NULL); } weak_alias (__canonicalize_file_name, canonicalize_file_name) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/dirname.h��������������������������������������������������������������������������0000644�0000000�0000000�00000003052�14226564447�012460� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Take file names apart into directory and base names. Copyright (C) 1998, 2001, 2003-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef DIRNAME_H_ # define DIRNAME_H_ 1 # include <stdbool.h> # include <stdlib.h> # include "filename.h" # include "basename-lgpl.h" # ifndef DIRECTORY_SEPARATOR # define DIRECTORY_SEPARATOR '/' # endif #ifdef __cplusplus extern "C" { #endif # if GNULIB_DIRNAME char *base_name (char const *file) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; char *dir_name (char const *file) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_RETURNS_NONNULL; # endif char *mdir_name (char const *file) _GL_ATTRIBUTE_MALLOC _GL_ATTRIBUTE_DEALLOC_FREE; size_t dir_len (char const *file) _GL_ATTRIBUTE_PURE; bool strip_trailing_slashes (char *file); #ifdef __cplusplus } /* extern "C" */ #endif #endif /* not DIRNAME_H_ */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/c-ctype.h��������������������������������������������������������������������������0000644�0000000�0000000�00000022467�14226564447�012420� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Character handling in C locale. These functions work like the corresponding functions in <ctype.h>, except that they have the C (POSIX) locale hardwired, whereas the <ctype.h> functions' behaviour depends on the current locale set via setlocale. Copyright (C) 2000-2003, 2006, 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef C_CTYPE_H #define C_CTYPE_H #include <stdbool.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef C_CTYPE_INLINE # define C_CTYPE_INLINE _GL_INLINE #endif #ifdef __cplusplus extern "C" { #endif /* The functions defined in this file assume the "C" locale and a character set without diacritics (ASCII-US or EBCDIC-US or something like that). Even if the "C" locale on a particular system is an extension of the ASCII character set (like on BeOS, where it is UTF-8, or on AmigaOS, where it is ISO-8859-1), the functions in this file recognize only the ASCII characters. */ #if (' ' == 32) && ('!' == 33) && ('"' == 34) && ('#' == 35) \ && ('%' == 37) && ('&' == 38) && ('\'' == 39) && ('(' == 40) \ && (')' == 41) && ('*' == 42) && ('+' == 43) && (',' == 44) \ && ('-' == 45) && ('.' == 46) && ('/' == 47) && ('0' == 48) \ && ('1' == 49) && ('2' == 50) && ('3' == 51) && ('4' == 52) \ && ('5' == 53) && ('6' == 54) && ('7' == 55) && ('8' == 56) \ && ('9' == 57) && (':' == 58) && (';' == 59) && ('<' == 60) \ && ('=' == 61) && ('>' == 62) && ('?' == 63) && ('A' == 65) \ && ('B' == 66) && ('C' == 67) && ('D' == 68) && ('E' == 69) \ && ('F' == 70) && ('G' == 71) && ('H' == 72) && ('I' == 73) \ && ('J' == 74) && ('K' == 75) && ('L' == 76) && ('M' == 77) \ && ('N' == 78) && ('O' == 79) && ('P' == 80) && ('Q' == 81) \ && ('R' == 82) && ('S' == 83) && ('T' == 84) && ('U' == 85) \ && ('V' == 86) && ('W' == 87) && ('X' == 88) && ('Y' == 89) \ && ('Z' == 90) && ('[' == 91) && ('\\' == 92) && (']' == 93) \ && ('^' == 94) && ('_' == 95) && ('a' == 97) && ('b' == 98) \ && ('c' == 99) && ('d' == 100) && ('e' == 101) && ('f' == 102) \ && ('g' == 103) && ('h' == 104) && ('i' == 105) && ('j' == 106) \ && ('k' == 107) && ('l' == 108) && ('m' == 109) && ('n' == 110) \ && ('o' == 111) && ('p' == 112) && ('q' == 113) && ('r' == 114) \ && ('s' == 115) && ('t' == 116) && ('u' == 117) && ('v' == 118) \ && ('w' == 119) && ('x' == 120) && ('y' == 121) && ('z' == 122) \ && ('{' == 123) && ('|' == 124) && ('}' == 125) && ('~' == 126) /* The character set is ASCII or one of its variants or extensions, not EBCDIC. Testing the value of '\n' and '\r' is not relevant. */ # define C_CTYPE_ASCII 1 #elif ! (' ' == '\x40' && '0' == '\xf0' \ && 'A' == '\xc1' && 'J' == '\xd1' && 'S' == '\xe2' \ && 'a' == '\x81' && 'j' == '\x91' && 's' == '\xa2') # error "Only ASCII and EBCDIC are supported" #endif #if 'A' < 0 # error "EBCDIC and char is signed -- not supported" #endif /* Cases for control characters. */ #define _C_CTYPE_CNTRL \ case '\a': case '\b': case '\f': case '\n': \ case '\r': case '\t': case '\v': \ _C_CTYPE_OTHER_CNTRL /* ASCII control characters other than those with \-letter escapes. */ #if C_CTYPE_ASCII # define _C_CTYPE_OTHER_CNTRL \ case '\x00': case '\x01': case '\x02': case '\x03': \ case '\x04': case '\x05': case '\x06': case '\x0e': \ case '\x0f': case '\x10': case '\x11': case '\x12': \ case '\x13': case '\x14': case '\x15': case '\x16': \ case '\x17': case '\x18': case '\x19': case '\x1a': \ case '\x1b': case '\x1c': case '\x1d': case '\x1e': \ case '\x1f': case '\x7f' #else /* Use EBCDIC code page 1047's assignments for ASCII control chars; assume all EBCDIC code pages agree about these assignments. */ # define _C_CTYPE_OTHER_CNTRL \ case '\x00': case '\x01': case '\x02': case '\x03': \ case '\x07': case '\x0e': case '\x0f': case '\x10': \ case '\x11': case '\x12': case '\x13': case '\x18': \ case '\x19': case '\x1c': case '\x1d': case '\x1e': \ case '\x1f': case '\x26': case '\x27': case '\x2d': \ case '\x2e': case '\x32': case '\x37': case '\x3c': \ case '\x3d': case '\x3f' #endif /* Cases for lowercase hex letters, and lowercase letters, all offset by N. */ #define _C_CTYPE_LOWER_A_THRU_F_N(N) \ case 'a' + (N): case 'b' + (N): case 'c' + (N): case 'd' + (N): \ case 'e' + (N): case 'f' + (N) #define _C_CTYPE_LOWER_N(N) \ _C_CTYPE_LOWER_A_THRU_F_N(N): \ case 'g' + (N): case 'h' + (N): case 'i' + (N): case 'j' + (N): \ case 'k' + (N): case 'l' + (N): case 'm' + (N): case 'n' + (N): \ case 'o' + (N): case 'p' + (N): case 'q' + (N): case 'r' + (N): \ case 's' + (N): case 't' + (N): case 'u' + (N): case 'v' + (N): \ case 'w' + (N): case 'x' + (N): case 'y' + (N): case 'z' + (N) /* Cases for hex letters, digits, lower, punct, and upper. */ #define _C_CTYPE_A_THRU_F \ _C_CTYPE_LOWER_A_THRU_F_N (0): \ _C_CTYPE_LOWER_A_THRU_F_N ('A' - 'a') #define _C_CTYPE_DIGIT \ case '0': case '1': case '2': case '3': \ case '4': case '5': case '6': case '7': \ case '8': case '9' #define _C_CTYPE_LOWER _C_CTYPE_LOWER_N (0) #define _C_CTYPE_PUNCT \ case '!': case '"': case '#': case '$': \ case '%': case '&': case '\'': case '(': \ case ')': case '*': case '+': case ',': \ case '-': case '.': case '/': case ':': \ case ';': case '<': case '=': case '>': \ case '?': case '@': case '[': case '\\': \ case ']': case '^': case '_': case '`': \ case '{': case '|': case '}': case '~' #define _C_CTYPE_UPPER _C_CTYPE_LOWER_N ('A' - 'a') /* Function definitions. */ /* Unlike the functions in <ctype.h>, which require an argument in the range of the 'unsigned char' type, the functions here operate on values that are in the 'unsigned char' range or in the 'char' range. In other words, when you have a 'char' value, you need to cast it before using it as argument to a <ctype.h> function: const char *s = ...; if (isalpha ((unsigned char) *s)) ... but you don't need to cast it for the functions defined in this file: const char *s = ...; if (c_isalpha (*s)) ... */ C_CTYPE_INLINE bool c_isalnum (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isalpha (int c) { switch (c) { _C_CTYPE_LOWER: _C_CTYPE_UPPER: return true; default: return false; } } /* The function isascii is not locale dependent. Its use in EBCDIC is questionable. */ C_CTYPE_INLINE bool c_isascii (int c) { switch (c) { case ' ': _C_CTYPE_CNTRL: _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isblank (int c) { return c == ' ' || c == '\t'; } C_CTYPE_INLINE bool c_iscntrl (int c) { switch (c) { _C_CTYPE_CNTRL: return true; default: return false; } } C_CTYPE_INLINE bool c_isdigit (int c) { switch (c) { _C_CTYPE_DIGIT: return true; default: return false; } } C_CTYPE_INLINE bool c_isgraph (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_islower (int c) { switch (c) { _C_CTYPE_LOWER: return true; default: return false; } } C_CTYPE_INLINE bool c_isprint (int c) { switch (c) { case ' ': _C_CTYPE_DIGIT: _C_CTYPE_LOWER: _C_CTYPE_PUNCT: _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_ispunct (int c) { switch (c) { _C_CTYPE_PUNCT: return true; default: return false; } } C_CTYPE_INLINE bool c_isspace (int c) { switch (c) { case ' ': case '\t': case '\n': case '\v': case '\f': case '\r': return true; default: return false; } } C_CTYPE_INLINE bool c_isupper (int c) { switch (c) { _C_CTYPE_UPPER: return true; default: return false; } } C_CTYPE_INLINE bool c_isxdigit (int c) { switch (c) { _C_CTYPE_DIGIT: _C_CTYPE_A_THRU_F: return true; default: return false; } } C_CTYPE_INLINE int c_tolower (int c) { switch (c) { _C_CTYPE_UPPER: return c - 'A' + 'a'; default: return c; } } C_CTYPE_INLINE int c_toupper (int c) { switch (c) { _C_CTYPE_LOWER: return c - 'a' + 'A'; default: return c; } } #ifdef __cplusplus } #endif _GL_INLINE_HEADER_END #endif /* C_CTYPE_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/spawn_faction_destroy.c������������������������������������������������������������0000644�0000000�0000000�00000003336�14226564451�015440� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <stdlib.h> #if REPLACE_POSIX_SPAWN # include "spawn_int.h" #endif /* Initialize data structure for file attribute for 'spawn' call. */ int posix_spawn_file_actions_destroy (posix_spawn_file_actions_t *file_actions) #undef posix_spawn_file_actions_destroy { #if !REPLACE_POSIX_SPAWN return posix_spawn_file_actions_destroy (file_actions); #else int i; /* Free the paths in the open actions. */ for (i = 0; i < file_actions->_used; ++i) { struct __spawn_action *sa = &file_actions->_actions[i]; switch (sa->tag) { case spawn_do_open: free (sa->action.open_action.path); break; case spawn_do_chdir: free (sa->action.chdir_action.path); break; default: /* No cleanup required. */ break; } } /* Free the array of actions. */ free (file_actions->_actions); return 0; #endif } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/msvc-nothrow.c���������������������������������������������������������������������0000644�0000000�0000000�00000002556�14226564450�013504� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Wrappers that don't throw invalid parameter notifications with MSVC runtime libraries. Copyright (C) 2011-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "msvc-nothrow.h" /* Get declarations of the native Windows API functions. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #if HAVE_MSVC_INVALID_PARAMETER_HANDLER # include "msvc-inval.h" #endif #undef _get_osfhandle #if HAVE_MSVC_INVALID_PARAMETER_HANDLER intptr_t _gl_nothrow_get_osfhandle (int fd) { intptr_t result; TRY_MSVC_INVAL { result = _get_osfhandle (fd); } CATCH_MSVC_INVAL { result = (intptr_t) INVALID_HANDLE_VALUE; } DONE_MSVC_INVAL; return result; } #endif ��������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/rawmemchr.valgrind�����������������������������������������������������������������0000644�0000000�0000000�00000001714�14226564450�014402� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Suppress a valgrind message about use of uninitialized memory in rawmemchr(). # Copyright (C) 2008-2022 Free Software Foundation, Inc. # # This file is free software: you can redistribute it and/or modify # it under the terms of the GNU Lesser General Public License as # published by the Free Software Foundation; either version 2.1 of the # License, or (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU Lesser General Public License for more details. # # You should have received a copy of the GNU Lesser General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # This use is OK because it provides only a speedup. { rawmemchr-value4 Memcheck:Value4 fun:rawmemchr } { rawmemchr-value8 Memcheck:Value8 fun:rawmemchr } ����������������������������������������������������recutils-1.9/lib/chdir-long.c�����������������������������������������������������������������������0000644�0000000�0000000�00000015266�14226564446�013073� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* provide a chdir function that tries not to fail due to ENAMETOOLONG Copyright (C) 2004-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> #include "chdir-long.h" #include <errno.h> #include <fcntl.h> #include <stdlib.h> #include <stdbool.h> #include <string.h> #include <stdio.h> #include "assure.h" #ifndef PATH_MAX # error "compile this file only if your system defines PATH_MAX" #endif /* The results of openat() in this file are not leaked to any single-threaded code that could use stdio. FIXME - if the kernel ever adds support for multi-thread safety for avoiding standard fds, then we should use openat_safer. */ struct cd_buf { int fd; }; static void cdb_init (struct cd_buf *cdb) { cdb->fd = AT_FDCWD; } static int cdb_fchdir (struct cd_buf const *cdb) { return fchdir (cdb->fd); } static void cdb_free (struct cd_buf const *cdb) { if (0 <= cdb->fd) { bool close_fail = close (cdb->fd); assure (! close_fail); } } /* Given a file descriptor of an open directory (or AT_FDCWD), CDB->fd, try to open the CDB->fd-relative directory, DIR. If the open succeeds, update CDB->fd with the resulting descriptor, close the incoming file descriptor, and return zero. Upon failure, return -1 and set errno. */ static int cdb_advance_fd (struct cd_buf *cdb, char const *dir) { int new_fd = openat (cdb->fd, dir, O_SEARCH | O_DIRECTORY | O_NOCTTY | O_NONBLOCK); if (new_fd < 0) return -1; cdb_free (cdb); cdb->fd = new_fd; return 0; } /* Return a pointer to the first non-slash in S. */ static char * _GL_ATTRIBUTE_PURE find_non_slash (char const *s) { size_t n_slash = strspn (s, "/"); return (char *) s + n_slash; } /* This is a function much like chdir, but without the PATH_MAX limitation on the length of the directory name. A significant difference is that it must be able to modify (albeit only temporarily) the directory name. It handles an arbitrarily long directory name by operating on manageable portions of the name. On systems without the openat syscall, this means changing the working directory to more and more "distant" points along the long directory name and then restoring the working directory. If any of those attempts to save or restore the working directory fails, this function exits nonzero. Note that this function may still fail with errno == ENAMETOOLONG, but only if the specified directory name contains a component that is long enough to provoke such a failure all by itself (e.g. if the component has length PATH_MAX or greater on systems that define PATH_MAX). */ int chdir_long (char *dir) { int e = chdir (dir); if (e == 0 || errno != ENAMETOOLONG) return e; { size_t len = strlen (dir); char *dir_end = dir + len; struct cd_buf cdb; size_t n_leading_slash; cdb_init (&cdb); /* If DIR is the empty string, then the chdir above must have failed and set errno to ENOENT. */ assure (0 < len); assure (PATH_MAX <= len); /* Count leading slashes. */ n_leading_slash = strspn (dir, "/"); /* Handle any leading slashes as well as any name that matches the regular expression, m!^//hostname[/]*! . Handling this prefix separately usually results in a single additional cdb_advance_fd call, but it's worthwhile, since it makes the code in the following loop cleaner. */ if (n_leading_slash == 2) { int err; /* Find next slash. We already know that dir[2] is neither a slash nor '\0'. */ char *slash = memchr (dir + 3, '/', dir_end - (dir + 3)); if (slash == NULL) { errno = ENAMETOOLONG; return -1; } *slash = '\0'; err = cdb_advance_fd (&cdb, dir); *slash = '/'; if (err != 0) goto Fail; dir = find_non_slash (slash + 1); } else if (n_leading_slash) { if (cdb_advance_fd (&cdb, "/") != 0) goto Fail; dir += n_leading_slash; } assure (*dir != '/'); assure (dir <= dir_end); while (PATH_MAX <= dir_end - dir) { int err; /* Find a slash that is PATH_MAX or fewer bytes away from dir. I.e. see if there is a slash that will give us a name of length PATH_MAX-1 or less. */ char *slash = memrchr (dir, '/', PATH_MAX); if (slash == NULL) { errno = ENAMETOOLONG; return -1; } *slash = '\0'; assure (slash - dir < PATH_MAX); err = cdb_advance_fd (&cdb, dir); *slash = '/'; if (err != 0) goto Fail; dir = find_non_slash (slash + 1); } if (dir < dir_end) { if (cdb_advance_fd (&cdb, dir) != 0) goto Fail; } if (cdb_fchdir (&cdb) != 0) goto Fail; cdb_free (&cdb); return 0; Fail: { int saved_errno = errno; cdb_free (&cdb); errno = saved_errno; return -1; } } } #if TEST_CHDIR # include "closeout.h" # include "error.h" int main (int argc, char *argv[]) { char *line = NULL; size_t n = 0; int len; atexit (close_stdout); len = getline (&line, &n, stdin); if (len < 0) { int saved_errno = errno; if (feof (stdin)) exit (0); error (EXIT_FAILURE, saved_errno, "reading standard input"); } else if (len == 0) exit (0); if (line[len-1] == '\n') line[len-1] = '\0'; if (chdir_long (line) != 0) error (EXIT_FAILURE, errno, "chdir_long failed: %s", line); if (argc <= 1) { /* Using 'pwd' here makes sense only if it is a robust implementation, like the one in coreutils after the 2004-04-19 changes. */ char const *cmd = "pwd"; execlp (cmd, (char *) NULL); error (EXIT_FAILURE, errno, "%s", cmd); } fclose (stdin); fclose (stderr); exit (EXIT_SUCCESS); } #endif /* Local Variables: compile-command: "gcc -DTEST_CHDIR=1 -g -O -W -Wall chdir-long.c libcoreutils.a" End: */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/spawnattr_setflags.c���������������������������������������������������������������0000644�0000000�0000000�00000003222�14226564451�014741� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Copyright (C) 2000, 2004, 2009-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include <spawn.h> #include <errno.h> #include <string.h> #define ALL_FLAGS (POSIX_SPAWN_RESETIDS \ | POSIX_SPAWN_SETPGROUP \ | POSIX_SPAWN_SETSIGDEF \ | POSIX_SPAWN_SETSIGMASK \ | POSIX_SPAWN_SETSCHEDPARAM \ | POSIX_SPAWN_SETSCHEDULER \ | POSIX_SPAWN_USEVFORK) /* Store flags in the attribute structure. */ int posix_spawnattr_setflags (posix_spawnattr_t *attr, short int flags) { /* Check no invalid bits are set. */ if (flags & ~ALL_FLAGS) return EINVAL; /* Store the flag word. */ attr->_flags = flags; return 0; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/getopt-cdefs.in.h������������������������������������������������������������������0000644�0000000�0000000�00000004046�14226564450�014030� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* getopt-on-non-glibc compatibility macros. Copyright (C) 1989-2022 Free Software Foundation, Inc. This file is part of gnulib. Unlike most of the getopt implementation, it is NOT shared with the GNU C Library. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _GETOPT_CDEFS_H #define _GETOPT_CDEFS_H 1 /* This header should not be used directly; include getopt.h or unistd.h instead. It does not have a protective #error, because the guard macro for getopt.h in gnulib is not fixed. */ /* getopt-core.h and getopt-ext.h are shared with GNU libc, and expect a number of the internal macros supplied to GNU libc's headers by sys/cdefs.h. Provide fallback definitions for all of them. */ #if @HAVE_SYS_CDEFS_H@ # include <sys/cdefs.h> #endif #ifndef __BEGIN_DECLS # ifdef __cplusplus # define __BEGIN_DECLS extern "C" { # else # define __BEGIN_DECLS /* nothing */ # endif #endif #ifndef __END_DECLS # ifdef __cplusplus # define __END_DECLS } # else # define __END_DECLS /* nothing */ # endif #endif #ifndef __GNUC_PREREQ # if defined __GNUC__ && defined __GNUC_VERSION__ # define __GNUC_PREREQ(maj, min) \ ((__GNUC__ << 16) + __GNUC_MINOR__ >= ((maj) << 16) + (min)) # else # define __GNUC_PREREQ(maj, min) 0 # endif #endif #ifndef __THROW # if defined __cplusplus && (__GNUC_PREREQ (2,8) || __clang_major__ >= 4) # define __THROW throw () # else # define __THROW # endif #endif #endif /* _GETOPT_CDEFS_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/msvc-inval.c�����������������������������������������������������������������������0000644�0000000�0000000�00000007553�14226564450�013117� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Invalid parameter handler for MSVC runtime libraries. Copyright (C) 2011-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "msvc-inval.h" #if HAVE_MSVC_INVALID_PARAMETER_HANDLER \ && !(MSVC_INVALID_PARAMETER_HANDLING == SANE_LIBRARY_HANDLING) /* Get _invalid_parameter_handler type and _set_invalid_parameter_handler declaration. */ # include <stdlib.h> # if MSVC_INVALID_PARAMETER_HANDLING == DEFAULT_HANDLING static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { } # else /* Get declarations of the native Windows API functions. */ # define WIN32_LEAN_AND_MEAN # include <windows.h> # if defined _MSC_VER static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # else /* An index to thread-local storage. */ static DWORD tls_index; static int tls_initialized /* = 0 */; /* Used as a fallback only. */ static struct gl_msvc_inval_per_thread not_per_thread; struct gl_msvc_inval_per_thread * gl_msvc_inval_current (void) { if (!tls_initialized) { tls_index = TlsAlloc (); tls_initialized = 1; } if (tls_index == TLS_OUT_OF_INDEXES) /* TlsAlloc had failed. */ return ¬_per_thread; else { struct gl_msvc_inval_per_thread *pointer = (struct gl_msvc_inval_per_thread *) TlsGetValue (tls_index); if (pointer == NULL) { /* First call. Allocate a new 'struct gl_msvc_inval_per_thread'. */ pointer = (struct gl_msvc_inval_per_thread *) malloc (sizeof (struct gl_msvc_inval_per_thread)); if (pointer == NULL) /* Could not allocate memory. Use the global storage. */ pointer = ¬_per_thread; TlsSetValue (tls_index, pointer); } return pointer; } } static void __cdecl gl_msvc_invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { struct gl_msvc_inval_per_thread *current = gl_msvc_inval_current (); if (current->restart_valid) longjmp (current->restart, 1); else /* An invalid parameter notification from outside the gnulib code. Give the caller a chance to intervene. */ RaiseException (STATUS_GNULIB_INVALID_PARAMETER, 0, 0, NULL); } # endif # endif static int gl_msvc_inval_initialized /* = 0 */; void gl_msvc_inval_ensure_handler (void) { if (gl_msvc_inval_initialized == 0) { _set_invalid_parameter_handler (gl_msvc_invalid_parameter_handler); gl_msvc_inval_initialized = 1; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/bitrotate.h������������������������������������������������������������������������0000644�0000000�0000000�00000011030�14226564446�013030� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* bitrotate.h - Rotate bits in integers Copyright (C) 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Simon Josefsson <simon@josefsson.org>, 2008. */ #ifndef _GL_BITROTATE_H #define _GL_BITROTATE_H #include <limits.h> #include <stdint.h> #include <sys/types.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef BITROTATE_INLINE # define BITROTATE_INLINE _GL_INLINE #endif #ifdef UINT64_MAX /* Given an unsigned 64-bit argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 and 63 inclusive. */ BITROTATE_INLINE uint64_t rotl64 (uint64_t x, int n) { return ((x << n) | (x >> (64 - n))) & UINT64_MAX; } /* Given an unsigned 64-bit argument X, return the value corresponding to rotating the bits N steps to the right. N must be between 1 to 63 inclusive.*/ BITROTATE_INLINE uint64_t rotr64 (uint64_t x, int n) { return ((x >> n) | (x << (64 - n))) & UINT64_MAX; } #endif /* Given an unsigned 32-bit argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 and 31 inclusive. */ BITROTATE_INLINE uint32_t rotl32 (uint32_t x, int n) { return ((x << n) | (x >> (32 - n))) & UINT32_MAX; } /* Given an unsigned 32-bit argument X, return the value corresponding to rotating the bits N steps to the right. N must be between 1 to 31 inclusive.*/ BITROTATE_INLINE uint32_t rotr32 (uint32_t x, int n) { return ((x >> n) | (x << (32 - n))) & UINT32_MAX; } /* Given a size_t argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 and (CHAR_BIT * sizeof (size_t) - 1) inclusive. */ BITROTATE_INLINE size_t rotl_sz (size_t x, int n) { return ((x << n) | (x >> ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX; } /* Given a size_t argument X, return the value corresponding to rotating the bits N steps to the right. N must be between 1 to (CHAR_BIT * sizeof (size_t) - 1) inclusive. */ BITROTATE_INLINE size_t rotr_sz (size_t x, int n) { return ((x >> n) | (x << ((CHAR_BIT * sizeof x) - n))) & SIZE_MAX; } /* Given an unsigned 16-bit argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 to 15 inclusive, but on most relevant targets N can also be 0 and 16 because 'int' is at least 32 bits and the arguments must widen before shifting. */ BITROTATE_INLINE uint16_t rotl16 (uint16_t x, int n) { return (((unsigned int) x << n) | ((unsigned int) x >> (16 - n))) & UINT16_MAX; } /* Given an unsigned 16-bit argument X, return the value corresponding to rotating the bits N steps to the right. N must be in 1 to 15 inclusive, but on most relevant targets N can also be 0 and 16 because 'int' is at least 32 bits and the arguments must widen before shifting. */ BITROTATE_INLINE uint16_t rotr16 (uint16_t x, int n) { return (((unsigned int) x >> n) | ((unsigned int) x << (16 - n))) & UINT16_MAX; } /* Given an unsigned 8-bit argument X, return the value corresponding to rotating the bits N steps to the left. N must be between 1 to 7 inclusive, but on most relevant targets N can also be 0 and 8 because 'int' is at least 32 bits and the arguments must widen before shifting. */ BITROTATE_INLINE uint8_t rotl8 (uint8_t x, int n) { return (((unsigned int) x << n) | ((unsigned int) x >> (8 - n))) & UINT8_MAX; } /* Given an unsigned 8-bit argument X, return the value corresponding to rotating the bits N steps to the right. N must be in 1 to 7 inclusive, but on most relevant targets N can also be 0 and 8 because 'int' is at least 32 bits and the arguments must widen before shifting. */ BITROTATE_INLINE uint8_t rotr8 (uint8_t x, int n) { return (((unsigned int) x >> n) | ((unsigned int) x << (8 - n))) & UINT8_MAX; } _GL_INLINE_HEADER_END #endif /* _GL_BITROTATE_H */ ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/parse-datetime.y�������������������������������������������������������������������0000644�0000000�0000000�00000224270�14226564450�013767� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������%{ /* Parse a string into an internal timestamp. Copyright (C) 1999-2000, 2002-2022 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Originally written by Steven M. Bellovin <smb@research.att.com> while at the University of North Carolina at Chapel Hill. Later tweaked by a couple of people on Usenet. Completely overhauled by Rich $alz <rsalz@bbn.com> and Jim Berets <jberets@bbn.com> in August, 1990. Modified by Assaf Gordon <assafgordon@gmail.com> in 2016 to add debug output. Modified by Paul Eggert <eggert@twinsun.com> in 1999 to do the right thing about local DST. Also modified by Paul Eggert <eggert@cs.ucla.edu> in 2004 to support nanosecond-resolution timestamps, in 2004 to support TZ strings in dates, and in 2017 and 2020 to check for integer overflow and to support longer-than-'long' 'time_t' and 'tv_nsec'. */ #include <config.h> #include "parse-datetime.h" #include "idx.h" #include "intprops.h" #include "timespec.h" #include "verify.h" #include "strftime.h" /* There's no need to extend the stack, so there's no need to involve alloca. */ #define YYSTACK_USE_ALLOCA 0 /* Tell Bison how much stack space is needed. 20 should be plenty for this grammar, which is not right recursive. Beware setting it too high, since that might cause problems on machines whose implementations have lame stack-overflow checking. */ #define YYMAXDEPTH 20 #define YYINITDEPTH YYMAXDEPTH /* Since the code of parse-datetime.y is not included in the Emacs executable itself, there is no need to #define static in this file. Even if the code were included in the Emacs executable, it probably wouldn't do any harm to #undef it here; this will only cause problems if we try to write to a static variable, which I don't think this code needs to do. */ #ifdef emacs # undef static #endif #include <inttypes.h> #include <c-ctype.h> #include <stdarg.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include "gettext.h" #define _(str) gettext (str) /* Bison's skeleton tests _STDLIB_H, while some stdlib.h headers use _STDLIB_H_ as witness. Map the latter to the one bison uses. */ /* FIXME: this is temporary. Remove when we have a mechanism to ensure that the version we're using is fixed, too. */ #ifdef _STDLIB_H_ # undef _STDLIB_H # define _STDLIB_H 1 #endif /* Shift A right by B bits portably, by dividing A by 2**B and truncating towards minus infinity. A and B should be free of side effects, and B should be in the range 0 <= B <= INT_BITS - 2, where INT_BITS is the number of useful bits in an int. GNU code can assume that INT_BITS is at least 32. ISO C99 says that A >> B is implementation-defined if A < 0. Some implementations (e.g., UNICOS 9.0 on a Cray Y-MP EL) don't shift right in the usual way when A < 0, so SHR falls back on division if ordinary A >> B doesn't seem to be the usual signed shift. */ #define SHR(a, b) \ (-1 >> 1 == -1 \ ? (a) >> (b) \ : (a) / (1 << (b)) - ((a) % (1 << (b)) < 0)) #define HOUR(x) (60 * 60 * (x)) #define STREQ(a, b) (strcmp (a, b) == 0) /* Verify that time_t is an integer as POSIX requires, and that every time_t value fits in intmax_t. Please file a bug report if these assumptions are false on your platform. */ verify (TYPE_IS_INTEGER (time_t)); verify (!TYPE_SIGNED (time_t) || INTMAX_MIN <= TYPE_MINIMUM (time_t)); verify (TYPE_MAXIMUM (time_t) <= INTMAX_MAX); /* True if N is out of range for time_t. */ static bool time_overflow (intmax_t n) { return ! ((TYPE_SIGNED (time_t) ? TYPE_MINIMUM (time_t) <= n : 0 <= n) && n <= TYPE_MAXIMUM (time_t)); } /* Convert a possibly-signed character to an unsigned character. This is a bit safer than casting to unsigned char, since it catches some type errors that the cast doesn't. */ static unsigned char to_uchar (char ch) { return ch; } static void _GL_ATTRIBUTE_FORMAT ((__printf__, 1, 2)) dbg_printf (char const *msg, ...) { va_list args; /* TODO: use gnulib's 'program_name' instead? */ fputs ("date: ", stderr); va_start (args, msg); vfprintf (stderr, msg, args); va_end (args); } /* An integer value, and the number of digits in its textual representation. */ typedef struct { bool negative; intmax_t value; idx_t digits; } textint; /* An entry in the lexical lookup table. */ typedef struct { char const *name; int type; int value; } table; /* Meridian: am, pm, or 24-hour style. */ enum { MERam, MERpm, MER24 }; /* A reasonable upper bound for the buffer used in debug output. */ enum { DBGBUFSIZE = 100 }; enum { BILLION = 1000000000, LOG10_BILLION = 9 }; /* Relative times. */ typedef struct { /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ intmax_t year; intmax_t month; intmax_t day; intmax_t hour; intmax_t minutes; intmax_t seconds; int ns; } relative_time; #if HAVE_COMPOUND_LITERALS # define RELATIVE_TIME_0 ((relative_time) { 0, 0, 0, 0, 0, 0, 0 }) #else static relative_time const RELATIVE_TIME_0; #endif /* Information passed to and from the parser. */ typedef struct { /* The input string remaining to be parsed. */ const char *input; /* N, if this is the Nth Tuesday. */ intmax_t day_ordinal; /* Day of week; Sunday is 0. */ int day_number; /* tm_isdst flag for the local zone. */ int local_isdst; /* Time zone, in seconds east of UT. */ int time_zone; /* Style used for time. */ int meridian; /* Gregorian year, month, day, hour, minutes, seconds, and nanoseconds. */ textint year; intmax_t month; intmax_t day; intmax_t hour; intmax_t minutes; struct timespec seconds; /* includes nanoseconds */ /* Relative year, month, day, hour, minutes, seconds, and nanoseconds. */ relative_time rel; /* Presence or counts of nonterminals of various flavors parsed so far. */ bool timespec_seen; bool rels_seen; idx_t dates_seen; idx_t days_seen; idx_t local_zones_seen; idx_t dsts_seen; idx_t times_seen; idx_t zones_seen; bool year_seen; #ifdef GNULIB_PARSE_DATETIME2 /* Print debugging output to stderr. */ bool parse_datetime_debug; #endif /* Which of the 'seen' parts have been printed when debugging. */ bool debug_dates_seen; bool debug_days_seen; bool debug_local_zones_seen; bool debug_times_seen; bool debug_zones_seen; bool debug_year_seen; /* The user specified explicit ordinal day value. */ bool debug_ordinal_day_seen; /* Table of local time zone abbreviations, terminated by a null entry. */ table local_time_zone_table[3]; } parser_control; static bool debugging (parser_control const *pc) { #ifdef GNULIB_PARSE_DATETIME2 return pc->parse_datetime_debug; #else return false; #endif } union YYSTYPE; static int yylex (union YYSTYPE *, parser_control *); static int yyerror (parser_control const *, char const *); static bool time_zone_hhmm (parser_control *, textint, intmax_t); /* Extract into *PC any date and time info from a string of digits of the form e.g., YYYYMMDD, YYMMDD, HHMM, HH (and sometimes YYY, YYYY, ...). */ static void digits_to_date_time (parser_control *pc, textint text_int) { if (pc->dates_seen && ! pc->year.digits && ! pc->rels_seen && (pc->times_seen || 2 < text_int.digits)) { pc->year_seen = true; pc->year = text_int; } else { if (4 < text_int.digits) { pc->dates_seen++; pc->day = text_int.value % 100; pc->month = (text_int.value / 100) % 100; pc->year.value = text_int.value / 10000; pc->year.digits = text_int.digits - 4; } else { pc->times_seen++; if (text_int.digits <= 2) { pc->hour = text_int.value; pc->minutes = 0; } else { pc->hour = text_int.value / 100; pc->minutes = text_int.value % 100; } pc->seconds.tv_sec = 0; pc->seconds.tv_nsec = 0; pc->meridian = MER24; } } } /* Increment PC->rel by FACTOR * REL (FACTOR is 1 or -1). Return true if successful, false if an overflow occurred. */ static bool apply_relative_time (parser_control *pc, relative_time rel, int factor) { if (factor < 0 ? (INT_SUBTRACT_WRAPV (pc->rel.ns, rel.ns, &pc->rel.ns) | INT_SUBTRACT_WRAPV (pc->rel.seconds, rel.seconds, &pc->rel.seconds) | INT_SUBTRACT_WRAPV (pc->rel.minutes, rel.minutes, &pc->rel.minutes) | INT_SUBTRACT_WRAPV (pc->rel.hour, rel.hour, &pc->rel.hour) | INT_SUBTRACT_WRAPV (pc->rel.day, rel.day, &pc->rel.day) | INT_SUBTRACT_WRAPV (pc->rel.month, rel.month, &pc->rel.month) | INT_SUBTRACT_WRAPV (pc->rel.year, rel.year, &pc->rel.year)) : (INT_ADD_WRAPV (pc->rel.ns, rel.ns, &pc->rel.ns) | INT_ADD_WRAPV (pc->rel.seconds, rel.seconds, &pc->rel.seconds) | INT_ADD_WRAPV (pc->rel.minutes, rel.minutes, &pc->rel.minutes) | INT_ADD_WRAPV (pc->rel.hour, rel.hour, &pc->rel.hour) | INT_ADD_WRAPV (pc->rel.day, rel.day, &pc->rel.day) | INT_ADD_WRAPV (pc->rel.month, rel.month, &pc->rel.month) | INT_ADD_WRAPV (pc->rel.year, rel.year, &pc->rel.year))) return false; pc->rels_seen = true; return true; } /* Set PC-> hour, minutes, seconds and nanoseconds members from arguments. */ static void set_hhmmss (parser_control *pc, intmax_t hour, intmax_t minutes, time_t sec, int nsec) { pc->hour = hour; pc->minutes = minutes; pc->seconds.tv_sec = sec; pc->seconds.tv_nsec = nsec; } /* Return a textual representation of the day ordinal/number values in the parser_control struct (e.g., "last wed", "this tues", "thu"). */ static const char * str_days (parser_control *pc, char *buffer, int n) { /* TODO: use relative_time_table for reverse lookup. */ static char const ordinal_values[][11] = { "last", "this", "next/first", "(SECOND)", /* SECOND is commented out in relative_time_table. */ "third", "fourth", "fifth", "sixth", "seventh", "eight", "ninth", "tenth", "eleventh", "twelfth" }; static char const days_values[][4] = { "Sun", "Mon", "Tue", "Wed", "Thu", "Fri", "Sat" }; int len; /* Don't add an ordinal prefix if the user didn't specify it (e.g., "this wed" vs "wed"). */ if (pc->debug_ordinal_day_seen) { /* Use word description if possible (e.g., -1 = last, 3 = third). */ len = (-1 <= pc->day_ordinal && pc->day_ordinal <= 12 ? snprintf (buffer, n, "%s", ordinal_values[pc->day_ordinal + 1]) : snprintf (buffer, n, "%"PRIdMAX, pc->day_ordinal)); } else { buffer[0] = '\0'; len = 0; } /* Add the day name */ if (0 <= pc->day_number && pc->day_number <= 6 && 0 <= len && len < n) snprintf (buffer + len, n - len, &" %s"[len == 0], days_values[pc->day_number]); else { /* invalid day_number value - should never happen */ } return buffer; } /* Convert a time zone to its string representation. */ enum { TIME_ZONE_BUFSIZE = INT_STRLEN_BOUND (intmax_t) + sizeof ":MM:SS" } ; static char const * time_zone_str (int time_zone, char time_zone_buf[TIME_ZONE_BUFSIZE]) { char *p = time_zone_buf; char sign = time_zone < 0 ? '-' : '+'; int hour = abs (time_zone / (60 * 60)); p += sprintf (time_zone_buf, "%c%02d", sign, hour); int offset_from_hour = abs (time_zone % (60 * 60)); if (offset_from_hour != 0) { int mm = offset_from_hour / 60; int ss = offset_from_hour % 60; *p++ = ':'; *p++ = '0' + mm / 10; *p++ = '0' + mm % 10; if (ss) { *p++ = ':'; *p++ = '0' + ss / 10; *p++ = '0' + ss % 10; } *p = '\0'; } return time_zone_buf; } /* debugging: print the current time in the parser_control structure. The parser will increment "*_seen" members for those which were parsed. This function will print only newly seen parts. */ static void debug_print_current_time (char const *item, parser_control *pc) { bool space = false; if (!debugging (pc)) return; /* no newline, more items printed below */ dbg_printf (_("parsed %s part: "), item); if (pc->dates_seen && !pc->debug_dates_seen) { /*TODO: use pc->year.negative? */ fprintf (stderr, "(Y-M-D) %04"PRIdMAX"-%02"PRIdMAX"-%02"PRIdMAX, pc->year.value, pc->month, pc->day); pc->debug_dates_seen = true; space = true; } if (pc->year_seen != pc->debug_year_seen) { if (space) fputc (' ', stderr); fprintf (stderr, _("year: %04"PRIdMAX), pc->year.value); pc->debug_year_seen = pc->year_seen; space = true; } if (pc->times_seen && !pc->debug_times_seen) { intmax_t sec = pc->seconds.tv_sec; fprintf (stderr, &" %02"PRIdMAX":%02"PRIdMAX":%02"PRIdMAX[!space], pc->hour, pc->minutes, sec); if (pc->seconds.tv_nsec != 0) { int nsec = pc->seconds.tv_nsec; fprintf (stderr, ".%09d", nsec); } if (pc->meridian == MERpm) fputs ("pm", stderr); pc->debug_times_seen = true; space = true; } if (pc->days_seen && !pc->debug_days_seen) { if (space) fputc (' ', stderr); char tmp[DBGBUFSIZE]; fprintf (stderr, _("%s (day ordinal=%"PRIdMAX" number=%d)"), str_days (pc, tmp, sizeof tmp), pc->day_ordinal, pc->day_number); pc->debug_days_seen = true; space = true; } /* local zone strings only change the DST settings, not the timezone value. If seen, inform about the DST. */ if (pc->local_zones_seen && !pc->debug_local_zones_seen) { fprintf (stderr, &" isdst=%d%s"[!space], pc->local_isdst, pc->dsts_seen ? " DST" : ""); pc->debug_local_zones_seen = true; space = true; } if (pc->zones_seen && !pc->debug_zones_seen) { char time_zone_buf[TIME_ZONE_BUFSIZE]; fprintf (stderr, &" UTC%s"[!space], time_zone_str (pc->time_zone, time_zone_buf)); pc->debug_zones_seen = true; space = true; } if (pc->timespec_seen) { intmax_t sec = pc->seconds.tv_sec; if (space) fputc (' ', stderr); fprintf (stderr, _("number of seconds: %"PRIdMAX), sec); } fputc ('\n', stderr); } /* Debugging: print the current relative values. */ static bool print_rel_part (bool space, intmax_t val, char const *name) { if (val == 0) return space; fprintf (stderr, &" %+"PRIdMAX" %s"[!space], val, name); return true; } static void debug_print_relative_time (char const *item, parser_control const *pc) { bool space = false; if (!debugging (pc)) return; /* no newline, more items printed below */ dbg_printf (_("parsed %s part: "), item); if (pc->rel.year == 0 && pc->rel.month == 0 && pc->rel.day == 0 && pc->rel.hour == 0 && pc->rel.minutes == 0 && pc->rel.seconds == 0 && pc->rel.ns == 0) { /* Special case: relative time of this/today/now */ fputs (_("today/this/now\n"), stderr); return; } space = print_rel_part (space, pc->rel.year, "year(s)"); space = print_rel_part (space, pc->rel.month, "month(s)"); space = print_rel_part (space, pc->rel.day, "day(s)"); space = print_rel_part (space, pc->rel.hour, "hour(s)"); space = print_rel_part (space, pc->rel.minutes, "minutes"); space = print_rel_part (space, pc->rel.seconds, "seconds"); print_rel_part (space, pc->rel.ns, "nanoseconds"); fputc ('\n', stderr); } %} /* We want a reentrant parser, even if the TZ manipulation and the calls to localtime and gmtime are not reentrant. */ %define api.pure %parse-param { parser_control *pc } %lex-param { parser_control *pc } /* This grammar has 31 shift/reduce conflicts. */ %expect 31 %union { intmax_t intval; textint textintval; struct timespec timespec; relative_time rel; } %token <intval> tAGO %token tDST %token tYEAR_UNIT tMONTH_UNIT tHOUR_UNIT tMINUTE_UNIT tSEC_UNIT %token <intval> tDAY_UNIT tDAY_SHIFT %token <intval> tDAY tDAYZONE tLOCAL_ZONE tMERIDIAN %token <intval> tMONTH tORDINAL tZONE %token <textintval> tSNUMBER tUNUMBER %token <timespec> tSDECIMAL_NUMBER tUDECIMAL_NUMBER %type <intval> o_colon_minutes %type <timespec> seconds signed_seconds unsigned_seconds %type <rel> relunit relunit_snumber dayshift %% spec: timespec | items ; timespec: '@' seconds { pc->seconds = $2; pc->timespec_seen = true; debug_print_current_time (_("number of seconds"), pc); } ; items: /* empty */ | items item ; item: datetime { pc->times_seen++; pc->dates_seen++; debug_print_current_time (_("datetime"), pc); } | time { pc->times_seen++; debug_print_current_time (_("time"), pc); } | local_zone { pc->local_zones_seen++; debug_print_current_time (_("local_zone"), pc); } | zone { pc->zones_seen++; debug_print_current_time (_("zone"), pc); } | date { pc->dates_seen++; debug_print_current_time (_("date"), pc); } | day { pc->days_seen++; debug_print_current_time (_("day"), pc); } | rel { debug_print_relative_time (_("relative"), pc); } | number { debug_print_current_time (_("number"), pc); } | hybrid { debug_print_relative_time (_("hybrid"), pc); } ; datetime: iso_8601_datetime ; iso_8601_datetime: iso_8601_date 'T' iso_8601_time ; time: tUNUMBER tMERIDIAN { set_hhmmss (pc, $1.value, 0, 0, 0); pc->meridian = $2; } | tUNUMBER ':' tUNUMBER tMERIDIAN { set_hhmmss (pc, $1.value, $3.value, 0, 0); pc->meridian = $4; } | tUNUMBER ':' tUNUMBER ':' unsigned_seconds tMERIDIAN { set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec); pc->meridian = $6; } | iso_8601_time ; iso_8601_time: tUNUMBER zone_offset { set_hhmmss (pc, $1.value, 0, 0, 0); pc->meridian = MER24; } | tUNUMBER ':' tUNUMBER o_zone_offset { set_hhmmss (pc, $1.value, $3.value, 0, 0); pc->meridian = MER24; } | tUNUMBER ':' tUNUMBER ':' unsigned_seconds o_zone_offset { set_hhmmss (pc, $1.value, $3.value, $5.tv_sec, $5.tv_nsec); pc->meridian = MER24; } ; o_zone_offset: /* empty */ | zone_offset ; zone_offset: tSNUMBER o_colon_minutes { pc->zones_seen++; if (! time_zone_hhmm (pc, $1, $2)) YYABORT; } ; /* Local zone strings affect only the DST setting, and take effect only if the current TZ setting is relevant. Example 1: 'EEST' is parsed as tLOCAL_ZONE, as it relates to the effective TZ: TZ='Europe/Helsinki' date -d '2016-06-30 EEST' Example 2: 'EEST' is parsed as tDAYZONE: TZ='Asia/Tokyo' date -d '2016-06-30 EEST' This is implemented by probing the next three calendar quarters of the effective timezone and looking for DST changes - if found, the timezone name (EEST) is inserted into the lexical lookup table with type tLOCAL_ZONE. (Search for 'quarter' comment in 'parse_datetime2'.) */ local_zone: tLOCAL_ZONE { pc->local_isdst = $1; } | tLOCAL_ZONE tDST { pc->local_isdst = 1; pc->dsts_seen++; } ; /* Note 'T' is a special case, as it is used as the separator in ISO 8601 date and time of day representation. */ zone: tZONE { pc->time_zone = $1; } | 'T' { pc->time_zone = -HOUR (7); } | tZONE relunit_snumber { pc->time_zone = $1; if (! apply_relative_time (pc, $2, 1)) YYABORT; debug_print_relative_time (_("relative"), pc); } | 'T' relunit_snumber { pc->time_zone = -HOUR (7); if (! apply_relative_time (pc, $2, 1)) YYABORT; debug_print_relative_time (_("relative"), pc); } | tZONE tSNUMBER o_colon_minutes { if (! time_zone_hhmm (pc, $2, $3)) YYABORT; if (INT_ADD_WRAPV (pc->time_zone, $1, &pc->time_zone)) YYABORT; } | tDAYZONE { pc->time_zone = $1 + 60 * 60; } | tZONE tDST { pc->time_zone = $1 + 60 * 60; } ; day: tDAY { pc->day_ordinal = 0; pc->day_number = $1; } | tDAY ',' { pc->day_ordinal = 0; pc->day_number = $1; } | tORDINAL tDAY { pc->day_ordinal = $1; pc->day_number = $2; pc->debug_ordinal_day_seen = true; } | tUNUMBER tDAY { pc->day_ordinal = $1.value; pc->day_number = $2; pc->debug_ordinal_day_seen = true; } ; date: tUNUMBER '/' tUNUMBER { pc->month = $1.value; pc->day = $3.value; } | tUNUMBER '/' tUNUMBER '/' tUNUMBER { /* Interpret as YYYY/MM/DD if the first value has 4 or more digits, otherwise as MM/DD/YY. The goal in recognizing YYYY/MM/DD is solely to support legacy machine-generated dates like those in an RCS log listing. If you want portability, use the ISO 8601 format. */ if (4 <= $1.digits) { if (debugging (pc)) { intmax_t digits = $1.digits; dbg_printf (_("warning: value %"PRIdMAX" has %"PRIdMAX" digits. " "Assuming YYYY/MM/DD\n"), $1.value, digits); } pc->year = $1; pc->month = $3.value; pc->day = $5.value; } else { if (debugging (pc)) dbg_printf (_("warning: value %"PRIdMAX" has less than 4 digits. " "Assuming MM/DD/YY[YY]\n"), $1.value); pc->month = $1.value; pc->day = $3.value; pc->year = $5; } } | tUNUMBER tMONTH tSNUMBER { /* E.g., 17-JUN-1992. */ pc->day = $1.value; pc->month = $2; if (INT_SUBTRACT_WRAPV (0, $3.value, &pc->year.value)) YYABORT; pc->year.digits = $3.digits; } | tMONTH tSNUMBER tSNUMBER { /* E.g., JUN-17-1992. */ pc->month = $1; if (INT_SUBTRACT_WRAPV (0, $2.value, &pc->day)) YYABORT; if (INT_SUBTRACT_WRAPV (0, $3.value, &pc->year.value)) YYABORT; pc->year.digits = $3.digits; } | tMONTH tUNUMBER { pc->month = $1; pc->day = $2.value; } | tMONTH tUNUMBER ',' tUNUMBER { pc->month = $1; pc->day = $2.value; pc->year = $4; } | tUNUMBER tMONTH { pc->day = $1.value; pc->month = $2; } | tUNUMBER tMONTH tUNUMBER { pc->day = $1.value; pc->month = $2; pc->year = $3; } | iso_8601_date ; iso_8601_date: tUNUMBER tSNUMBER tSNUMBER { /* ISO 8601 format. YYYY-MM-DD. */ pc->year = $1; if (INT_SUBTRACT_WRAPV (0, $2.value, &pc->month)) YYABORT; if (INT_SUBTRACT_WRAPV (0, $3.value, &pc->day)) YYABORT; } ; rel: relunit tAGO { if (! apply_relative_time (pc, $1, $2)) YYABORT; } | relunit { if (! apply_relative_time (pc, $1, 1)) YYABORT; } | dayshift { if (! apply_relative_time (pc, $1, 1)) YYABORT; } ; relunit: tORDINAL tYEAR_UNIT { $$ = RELATIVE_TIME_0; $$.year = $1; } | tUNUMBER tYEAR_UNIT { $$ = RELATIVE_TIME_0; $$.year = $1.value; } | tYEAR_UNIT { $$ = RELATIVE_TIME_0; $$.year = 1; } | tORDINAL tMONTH_UNIT { $$ = RELATIVE_TIME_0; $$.month = $1; } | tUNUMBER tMONTH_UNIT { $$ = RELATIVE_TIME_0; $$.month = $1.value; } | tMONTH_UNIT { $$ = RELATIVE_TIME_0; $$.month = 1; } | tORDINAL tDAY_UNIT { $$ = RELATIVE_TIME_0; if (INT_MULTIPLY_WRAPV ($1, $2, &$$.day)) YYABORT; } | tUNUMBER tDAY_UNIT { $$ = RELATIVE_TIME_0; if (INT_MULTIPLY_WRAPV ($1.value, $2, &$$.day)) YYABORT; } | tDAY_UNIT { $$ = RELATIVE_TIME_0; $$.day = $1; } | tORDINAL tHOUR_UNIT { $$ = RELATIVE_TIME_0; $$.hour = $1; } | tUNUMBER tHOUR_UNIT { $$ = RELATIVE_TIME_0; $$.hour = $1.value; } | tHOUR_UNIT { $$ = RELATIVE_TIME_0; $$.hour = 1; } | tORDINAL tMINUTE_UNIT { $$ = RELATIVE_TIME_0; $$.minutes = $1; } | tUNUMBER tMINUTE_UNIT { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; } | tMINUTE_UNIT { $$ = RELATIVE_TIME_0; $$.minutes = 1; } | tORDINAL tSEC_UNIT { $$ = RELATIVE_TIME_0; $$.seconds = $1; } | tUNUMBER tSEC_UNIT { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; } | tSDECIMAL_NUMBER tSEC_UNIT { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; } | tUDECIMAL_NUMBER tSEC_UNIT { $$ = RELATIVE_TIME_0; $$.seconds = $1.tv_sec; $$.ns = $1.tv_nsec; } | tSEC_UNIT { $$ = RELATIVE_TIME_0; $$.seconds = 1; } | relunit_snumber ; relunit_snumber: tSNUMBER tYEAR_UNIT { $$ = RELATIVE_TIME_0; $$.year = $1.value; } | tSNUMBER tMONTH_UNIT { $$ = RELATIVE_TIME_0; $$.month = $1.value; } | tSNUMBER tDAY_UNIT { $$ = RELATIVE_TIME_0; if (INT_MULTIPLY_WRAPV ($1.value, $2, &$$.day)) YYABORT; } | tSNUMBER tHOUR_UNIT { $$ = RELATIVE_TIME_0; $$.hour = $1.value; } | tSNUMBER tMINUTE_UNIT { $$ = RELATIVE_TIME_0; $$.minutes = $1.value; } | tSNUMBER tSEC_UNIT { $$ = RELATIVE_TIME_0; $$.seconds = $1.value; } ; dayshift: tDAY_SHIFT { $$ = RELATIVE_TIME_0; $$.day = $1; } ; seconds: signed_seconds | unsigned_seconds; signed_seconds: tSDECIMAL_NUMBER | tSNUMBER { if (time_overflow ($1.value)) YYABORT; $$.tv_sec = $1.value; $$.tv_nsec = 0; } ; unsigned_seconds: tUDECIMAL_NUMBER | tUNUMBER { if (time_overflow ($1.value)) YYABORT; $$.tv_sec = $1.value; $$.tv_nsec = 0; } ; number: tUNUMBER { digits_to_date_time (pc, $1); } ; hybrid: tUNUMBER relunit_snumber { /* Hybrid all-digit and relative offset, so that we accept e.g., "YYYYMMDD +N days" as well as "YYYYMMDD N days". */ digits_to_date_time (pc, $1); if (! apply_relative_time (pc, $2, 1)) YYABORT; } ; o_colon_minutes: /* empty */ { $$ = -1; } | ':' tUNUMBER { $$ = $2.value; } ; %% static table const meridian_table[] = { { "AM", tMERIDIAN, MERam }, { "A.M.", tMERIDIAN, MERam }, { "PM", tMERIDIAN, MERpm }, { "P.M.", tMERIDIAN, MERpm }, { NULL, 0, 0 } }; static table const dst_table[] = { { "DST", tDST, 0 } }; static table const month_and_day_table[] = { { "JANUARY", tMONTH, 1 }, { "FEBRUARY", tMONTH, 2 }, { "MARCH", tMONTH, 3 }, { "APRIL", tMONTH, 4 }, { "MAY", tMONTH, 5 }, { "JUNE", tMONTH, 6 }, { "JULY", tMONTH, 7 }, { "AUGUST", tMONTH, 8 }, { "SEPTEMBER",tMONTH, 9 }, { "SEPT", tMONTH, 9 }, { "OCTOBER", tMONTH, 10 }, { "NOVEMBER", tMONTH, 11 }, { "DECEMBER", tMONTH, 12 }, { "SUNDAY", tDAY, 0 }, { "MONDAY", tDAY, 1 }, { "TUESDAY", tDAY, 2 }, { "TUES", tDAY, 2 }, { "WEDNESDAY",tDAY, 3 }, { "WEDNES", tDAY, 3 }, { "THURSDAY", tDAY, 4 }, { "THUR", tDAY, 4 }, { "THURS", tDAY, 4 }, { "FRIDAY", tDAY, 5 }, { "SATURDAY", tDAY, 6 }, { NULL, 0, 0 } }; static table const time_units_table[] = { { "YEAR", tYEAR_UNIT, 1 }, { "MONTH", tMONTH_UNIT, 1 }, { "FORTNIGHT",tDAY_UNIT, 14 }, { "WEEK", tDAY_UNIT, 7 }, { "DAY", tDAY_UNIT, 1 }, { "HOUR", tHOUR_UNIT, 1 }, { "MINUTE", tMINUTE_UNIT, 1 }, { "MIN", tMINUTE_UNIT, 1 }, { "SECOND", tSEC_UNIT, 1 }, { "SEC", tSEC_UNIT, 1 }, { NULL, 0, 0 } }; /* Assorted relative-time words. */ static table const relative_time_table[] = { { "TOMORROW", tDAY_SHIFT, 1 }, { "YESTERDAY",tDAY_SHIFT, -1 }, { "TODAY", tDAY_SHIFT, 0 }, { "NOW", tDAY_SHIFT, 0 }, { "LAST", tORDINAL, -1 }, { "THIS", tORDINAL, 0 }, { "NEXT", tORDINAL, 1 }, { "FIRST", tORDINAL, 1 }, /*{ "SECOND", tORDINAL, 2 }, */ { "THIRD", tORDINAL, 3 }, { "FOURTH", tORDINAL, 4 }, { "FIFTH", tORDINAL, 5 }, { "SIXTH", tORDINAL, 6 }, { "SEVENTH", tORDINAL, 7 }, { "EIGHTH", tORDINAL, 8 }, { "NINTH", tORDINAL, 9 }, { "TENTH", tORDINAL, 10 }, { "ELEVENTH", tORDINAL, 11 }, { "TWELFTH", tORDINAL, 12 }, { "AGO", tAGO, -1 }, { "HENCE", tAGO, 1 }, { NULL, 0, 0 } }; /* The universal time zone table. These labels can be used even for timestamps that would not otherwise be valid, e.g., GMT timestamps oin London during summer. */ static table const universal_time_zone_table[] = { { "GMT", tZONE, HOUR ( 0) }, /* Greenwich Mean */ { "UT", tZONE, HOUR ( 0) }, /* Universal (Coordinated) */ { "UTC", tZONE, HOUR ( 0) }, { NULL, 0, 0 } }; /* The time zone table. This table is necessarily incomplete, as time zone abbreviations are ambiguous; e.g., Australians interpret "EST" as Eastern time in Australia, not as US Eastern Standard Time. You cannot rely on parse_datetime to handle arbitrary time zone abbreviations; use numeric abbreviations like "-0500" instead. */ static table const time_zone_table[] = { { "WET", tZONE, HOUR ( 0) }, /* Western European */ { "WEST", tDAYZONE, HOUR ( 0) }, /* Western European Summer */ { "BST", tDAYZONE, HOUR ( 0) }, /* British Summer */ { "ART", tZONE, -HOUR ( 3) }, /* Argentina */ { "BRT", tZONE, -HOUR ( 3) }, /* Brazil */ { "BRST", tDAYZONE, -HOUR ( 3) }, /* Brazil Summer */ { "NST", tZONE, -(HOUR ( 3) + 30 * 60) }, /* Newfoundland Standard */ { "NDT", tDAYZONE,-(HOUR ( 3) + 30 * 60) }, /* Newfoundland Daylight */ { "AST", tZONE, -HOUR ( 4) }, /* Atlantic Standard */ { "ADT", tDAYZONE, -HOUR ( 4) }, /* Atlantic Daylight */ { "CLT", tZONE, -HOUR ( 4) }, /* Chile */ { "CLST", tDAYZONE, -HOUR ( 4) }, /* Chile Summer */ { "EST", tZONE, -HOUR ( 5) }, /* Eastern Standard */ { "EDT", tDAYZONE, -HOUR ( 5) }, /* Eastern Daylight */ { "CST", tZONE, -HOUR ( 6) }, /* Central Standard */ { "CDT", tDAYZONE, -HOUR ( 6) }, /* Central Daylight */ { "MST", tZONE, -HOUR ( 7) }, /* Mountain Standard */ { "MDT", tDAYZONE, -HOUR ( 7) }, /* Mountain Daylight */ { "PST", tZONE, -HOUR ( 8) }, /* Pacific Standard */ { "PDT", tDAYZONE, -HOUR ( 8) }, /* Pacific Daylight */ { "AKST", tZONE, -HOUR ( 9) }, /* Alaska Standard */ { "AKDT", tDAYZONE, -HOUR ( 9) }, /* Alaska Daylight */ { "HST", tZONE, -HOUR (10) }, /* Hawaii Standard */ { "HAST", tZONE, -HOUR (10) }, /* Hawaii-Aleutian Standard */ { "HADT", tDAYZONE, -HOUR (10) }, /* Hawaii-Aleutian Daylight */ { "SST", tZONE, -HOUR (12) }, /* Samoa Standard */ { "WAT", tZONE, HOUR ( 1) }, /* West Africa */ { "CET", tZONE, HOUR ( 1) }, /* Central European */ { "CEST", tDAYZONE, HOUR ( 1) }, /* Central European Summer */ { "MET", tZONE, HOUR ( 1) }, /* Middle European */ { "MEZ", tZONE, HOUR ( 1) }, /* Middle European */ { "MEST", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ { "MESZ", tDAYZONE, HOUR ( 1) }, /* Middle European Summer */ { "EET", tZONE, HOUR ( 2) }, /* Eastern European */ { "EEST", tDAYZONE, HOUR ( 2) }, /* Eastern European Summer */ { "CAT", tZONE, HOUR ( 2) }, /* Central Africa */ { "SAST", tZONE, HOUR ( 2) }, /* South Africa Standard */ { "EAT", tZONE, HOUR ( 3) }, /* East Africa */ { "MSK", tZONE, HOUR ( 3) }, /* Moscow */ { "MSD", tDAYZONE, HOUR ( 3) }, /* Moscow Daylight */ { "IST", tZONE, (HOUR ( 5) + 30 * 60) }, /* India Standard */ { "SGT", tZONE, HOUR ( 8) }, /* Singapore */ { "KST", tZONE, HOUR ( 9) }, /* Korea Standard */ { "JST", tZONE, HOUR ( 9) }, /* Japan Standard */ { "GST", tZONE, HOUR (10) }, /* Guam Standard */ { "NZST", tZONE, HOUR (12) }, /* New Zealand Standard */ { "NZDT", tDAYZONE, HOUR (12) }, /* New Zealand Daylight */ { NULL, 0, 0 } }; /* Military time zone table. RFC 822 got these backwards, but RFC 5322 makes the incorrect treatment optional, so do them the right way here. Note 'T' is a special case, as it is used as the separator in ISO 8601 date and time of day representation. */ static table const military_table[] = { { "A", tZONE, HOUR ( 1) }, { "B", tZONE, HOUR ( 2) }, { "C", tZONE, HOUR ( 3) }, { "D", tZONE, HOUR ( 4) }, { "E", tZONE, HOUR ( 5) }, { "F", tZONE, HOUR ( 6) }, { "G", tZONE, HOUR ( 7) }, { "H", tZONE, HOUR ( 8) }, { "I", tZONE, HOUR ( 9) }, { "K", tZONE, HOUR (10) }, { "L", tZONE, HOUR (11) }, { "M", tZONE, HOUR (12) }, { "N", tZONE, -HOUR ( 1) }, { "O", tZONE, -HOUR ( 2) }, { "P", tZONE, -HOUR ( 3) }, { "Q", tZONE, -HOUR ( 4) }, { "R", tZONE, -HOUR ( 5) }, { "S", tZONE, -HOUR ( 6) }, { "T", 'T', 0 }, { "U", tZONE, -HOUR ( 8) }, { "V", tZONE, -HOUR ( 9) }, { "W", tZONE, -HOUR (10) }, { "X", tZONE, -HOUR (11) }, { "Y", tZONE, -HOUR (12) }, { "Z", tZONE, HOUR ( 0) }, { NULL, 0, 0 } }; /* Convert a time zone expressed as HH:MM into an integer count of seconds. If MM is negative, then S is of the form HHMM and needs to be picked apart; otherwise, S is of the form HH. As specified in https://pubs.opengroup.org/onlinepubs/9699919799/basedefs/V1_chap08.html#tag_08_03, allow only valid TZ range, and consider first two digits as hours, if no minutes specified. Return true if successful. */ static bool time_zone_hhmm (parser_control *pc, textint s, intmax_t mm) { intmax_t n_minutes; bool overflow = false; /* If the length of S is 1 or 2 and no minutes are specified, interpret it as a number of hours. */ if (s.digits <= 2 && mm < 0) s.value *= 100; if (mm < 0) n_minutes = (s.value / 100) * 60 + s.value % 100; else { overflow |= INT_MULTIPLY_WRAPV (s.value, 60, &n_minutes); overflow |= (s.negative ? INT_SUBTRACT_WRAPV (n_minutes, mm, &n_minutes) : INT_ADD_WRAPV (n_minutes, mm, &n_minutes)); } if (overflow || ! (-24 * 60 <= n_minutes && n_minutes <= 24 * 60)) return false; pc->time_zone = n_minutes * 60; return true; } static int to_hour (intmax_t hours, int meridian) { switch (meridian) { default: /* Pacify GCC. */ case MER24: return 0 <= hours && hours < 24 ? hours : -1; case MERam: return 0 < hours && hours < 12 ? hours : hours == 12 ? 0 : -1; case MERpm: return 0 < hours && hours < 12 ? hours + 12 : hours == 12 ? 12 : -1; } } enum { TM_YEAR_BASE = 1900 }; enum { TM_YEAR_BUFSIZE = INT_BUFSIZE_BOUND (int) + 1 }; /* Convert TM_YEAR, a year minus 1900, to a string that is numerically correct even if subtracting 1900 would overflow. */ static char const * tm_year_str (int tm_year, char buf[TM_YEAR_BUFSIZE]) { verify (TM_YEAR_BASE % 100 == 0); sprintf (buf, &"-%02d%02d"[-TM_YEAR_BASE <= tm_year], abs (tm_year / 100 + TM_YEAR_BASE / 100), abs (tm_year % 100)); return buf; } /* Convert a text year number to a year minus 1900, working correctly even if the input is in the range INT_MAX .. INT_MAX + 1900 - 1. */ static bool to_tm_year (textint textyear, bool debug, int *tm_year) { intmax_t year = textyear.value; /* XPG4 suggests that years 00-68 map to 2000-2068, and years 69-99 map to 1969-1999. */ if (0 <= year && textyear.digits == 2) { year += year < 69 ? 2000 : 1900; if (debug) dbg_printf (_("warning: adjusting year value %"PRIdMAX " to %"PRIdMAX"\n"), textyear.value, year); } if (year < 0 ? INT_SUBTRACT_WRAPV (-TM_YEAR_BASE, year, tm_year) : INT_SUBTRACT_WRAPV (year, TM_YEAR_BASE, tm_year)) { if (debug) dbg_printf (_("error: out-of-range year %"PRIdMAX"\n"), year); return false; } return true; } static table const * _GL_ATTRIBUTE_PURE lookup_zone (parser_control const *pc, char const *name) { table const *tp; for (tp = universal_time_zone_table; tp->name; tp++) if (strcmp (name, tp->name) == 0) return tp; /* Try local zone abbreviations before those in time_zone_table, as the local ones are more likely to be right. */ for (tp = pc->local_time_zone_table; tp->name; tp++) if (strcmp (name, tp->name) == 0) return tp; for (tp = time_zone_table; tp->name; tp++) if (strcmp (name, tp->name) == 0) return tp; return NULL; } #if ! HAVE_TM_GMTOFF /* Yield the difference between *A and *B, measured in seconds, ignoring leap seconds. The body of this function is taken directly from the GNU C Library; see strftime.c. */ static int tm_diff (const struct tm *a, const struct tm *b) { /* Compute intervening leap days correctly even if year is negative. Take care to avoid int overflow in leap day calculations, but it's OK to assume that A and B are close to each other. */ int a4 = SHR (a->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (a->tm_year & 3); int b4 = SHR (b->tm_year, 2) + SHR (TM_YEAR_BASE, 2) - ! (b->tm_year & 3); int a100 = a4 / 25 - (a4 % 25 < 0); int b100 = b4 / 25 - (b4 % 25 < 0); int a400 = SHR (a100, 2); int b400 = SHR (b100, 2); int intervening_leap_days = (a4 - b4) - (a100 - b100) + (a400 - b400); int years = a->tm_year - b->tm_year; int days = (365 * years + intervening_leap_days + (a->tm_yday - b->tm_yday)); return (60 * (60 * (24 * days + (a->tm_hour - b->tm_hour)) + (a->tm_min - b->tm_min)) + (a->tm_sec - b->tm_sec)); } #endif /* ! HAVE_TM_GMTOFF */ static table const * lookup_word (parser_control const *pc, char *word) { char *p; char *q; idx_t wordlen; table const *tp; bool period_found; bool abbrev; /* Make it uppercase. */ for (p = word; *p; p++) *p = c_toupper (to_uchar (*p)); for (tp = meridian_table; tp->name; tp++) if (strcmp (word, tp->name) == 0) return tp; /* See if we have an abbreviation for a month. */ wordlen = strlen (word); abbrev = wordlen == 3 || (wordlen == 4 && word[3] == '.'); for (tp = month_and_day_table; tp->name; tp++) if ((abbrev ? strncmp (word, tp->name, 3) : strcmp (word, tp->name)) == 0) return tp; if ((tp = lookup_zone (pc, word))) return tp; if (strcmp (word, dst_table[0].name) == 0) return dst_table; for (tp = time_units_table; tp->name; tp++) if (strcmp (word, tp->name) == 0) return tp; /* Strip off any plural and try the units table again. */ if (word[wordlen - 1] == 'S') { word[wordlen - 1] = '\0'; for (tp = time_units_table; tp->name; tp++) if (strcmp (word, tp->name) == 0) return tp; word[wordlen - 1] = 'S'; /* For "this" in relative_time_table. */ } for (tp = relative_time_table; tp->name; tp++) if (strcmp (word, tp->name) == 0) return tp; /* Military time zones. */ if (wordlen == 1) for (tp = military_table; tp->name; tp++) if (word[0] == tp->name[0]) return tp; /* Drop out any periods and try the time zone table again. */ for (period_found = false, p = q = word; (*p = *q); q++) if (*q == '.') period_found = true; else p++; if (period_found && (tp = lookup_zone (pc, word))) return tp; return NULL; } static int yylex (union YYSTYPE *lvalp, parser_control *pc) { unsigned char c; for (;;) { while (c = *pc->input, c_isspace (c)) pc->input++; if (c_isdigit (c) || c == '-' || c == '+') { char const *p = pc->input; int sign; if (c == '-' || c == '+') { sign = c == '-' ? -1 : 1; while (c = *(pc->input = ++p), c_isspace (c)) continue; if (! c_isdigit (c)) /* skip the '-' sign */ continue; } else sign = 0; time_t value = 0; do { if (INT_MULTIPLY_WRAPV (value, 10, &value)) return '?'; if (INT_ADD_WRAPV (value, sign < 0 ? '0' - c : c - '0', &value)) return '?'; c = *++p; } while (c_isdigit (c)); if ((c == '.' || c == ',') && c_isdigit (p[1])) { time_t s = value; int digits; /* Accumulate fraction, to ns precision. */ p++; int ns = *p++ - '0'; for (digits = 2; digits <= LOG10_BILLION; digits++) { ns *= 10; if (c_isdigit (*p)) ns += *p++ - '0'; } /* Skip excess digits, truncating toward -Infinity. */ if (sign < 0) for (; c_isdigit (*p); p++) if (*p != '0') { ns++; break; } while (c_isdigit (*p)) p++; /* Adjust to the timespec convention, which is that tv_nsec is always a positive offset even if tv_sec is negative. */ if (sign < 0 && ns) { if (INT_SUBTRACT_WRAPV (s, 1, &s)) return '?'; ns = BILLION - ns; } lvalp->timespec.tv_sec = s; lvalp->timespec.tv_nsec = ns; pc->input = p; return sign ? tSDECIMAL_NUMBER : tUDECIMAL_NUMBER; } else { lvalp->textintval.negative = sign < 0; lvalp->textintval.value = value; lvalp->textintval.digits = p - pc->input; pc->input = p; return sign ? tSNUMBER : tUNUMBER; } } if (c_isalpha (c)) { char buff[20]; char *p = buff; table const *tp; do { if (p < buff + sizeof buff - 1) *p++ = c; c = *++pc->input; } while (c_isalpha (c) || c == '.'); *p = '\0'; tp = lookup_word (pc, buff); if (! tp) { if (debugging (pc)) dbg_printf (_("error: unknown word '%s'\n"), buff); return '?'; } lvalp->intval = tp->value; return tp->type; } if (c != '(') return to_uchar (*pc->input++); idx_t count = 0; do { c = *pc->input++; if (c == '\0') return c; if (c == '(') count++; else if (c == ')') count--; } while (count != 0); } } /* Do nothing if the parser reports an error. */ static int yyerror (_GL_UNUSED parser_control const *pc, _GL_UNUSED char const *s) { return 0; } /* If *TM0 is the old and *TM1 is the new value of a struct tm after passing it to mktime_z, return true if it's OK. It's not OK if mktime failed or if *TM0 has out-of-range mainline members. The caller should set TM1->tm_wday to -1 before calling mktime, as a negative tm_wday is how mktime failure is inferred. */ static bool mktime_ok (struct tm const *tm0, struct tm const *tm1) { if (tm1->tm_wday < 0) return false; return ! ((tm0->tm_sec ^ tm1->tm_sec) | (tm0->tm_min ^ tm1->tm_min) | (tm0->tm_hour ^ tm1->tm_hour) | (tm0->tm_mday ^ tm1->tm_mday) | (tm0->tm_mon ^ tm1->tm_mon) | (tm0->tm_year ^ tm1->tm_year)); } /* Debugging: format a 'struct tm' into a buffer, taking the parser's timezone information into account (if pc != NULL). */ static char const * debug_strfdatetime (struct tm const *tm, parser_control const *pc, char *buf, int n) { /* TODO: 1. find an optimal way to print date string in a clear and unambiguous format. Currently, always add '(Y-M-D)' prefix. Consider '2016y01m10d' or 'year(2016) month(01) day(10)'. If the user needs debug printing, it means he/she already having issues with the parsing - better to avoid formats that could be mis-interpreted (e.g., just YYYY-MM-DD). 2. Can strftime be used instead? depends if it is portable and can print invalid dates on all systems. 3. Print timezone information ? 4. Print DST information ? 5. Print nanosecond information ? NOTE: Printed date/time values might not be valid, e.g., '2016-02-31' or '2016-19-2016' . These are the values as parsed from the user string, before validation. */ int m = nstrftime (buf, n, "(Y-M-D) %Y-%m-%d %H:%M:%S", tm, 0, 0); /* If parser_control information was provided (for timezone), and there's enough space in the buffer, add timezone info. */ if (pc && m < n && pc->zones_seen) { int tz = pc->time_zone; /* Account for DST if tLOCAL_ZONE was seen. */ if (pc->local_zones_seen && !pc->zones_seen && 0 < pc->local_isdst) tz += 60 * 60; char time_zone_buf[TIME_ZONE_BUFSIZE]; snprintf (&buf[m], n - m, " TZ=%s", time_zone_str (tz, time_zone_buf)); } return buf; } static char const * debug_strfdate (struct tm const *tm, char *buf, int n) { char tm_year_buf[TM_YEAR_BUFSIZE]; snprintf (buf, n, "(Y-M-D) %s-%02d-%02d", tm_year_str (tm->tm_year, tm_year_buf), tm->tm_mon + 1, tm->tm_mday); return buf; } static char const * debug_strftime (struct tm const *tm, char *buf, int n) { snprintf (buf, n, "%02d:%02d:%02d", tm->tm_hour, tm->tm_min, tm->tm_sec); return buf; } /* If mktime_ok failed, display the failed time values, and provide possible hints. Example output: date: error: invalid date/time value: date: user provided time: '(Y-M-D) 2006-04-02 02:45:00' date: normalized time: '(Y-M-D) 2006-04-02 03:45:00' date: __ date: possible reasons: date: non-existing due to daylight-saving time; date: numeric values overflow; date: missing timezone; */ static void debug_mktime_not_ok (struct tm const *tm0, struct tm const *tm1, parser_control const *pc, bool time_zone_seen) { /* TODO: handle t == -1 (as in 'mktime_ok'). */ char tmp[DBGBUFSIZE]; int i; const bool eq_sec = (tm0->tm_sec == tm1->tm_sec); const bool eq_min = (tm0->tm_min == tm1->tm_min); const bool eq_hour = (tm0->tm_hour == tm1->tm_hour); const bool eq_mday = (tm0->tm_mday == tm1->tm_mday); const bool eq_month = (tm0->tm_mon == tm1->tm_mon); const bool eq_year = (tm0->tm_year == tm1->tm_year); const bool dst_shift = eq_sec && eq_min && !eq_hour && eq_mday && eq_month && eq_year; if (!debugging (pc)) return; dbg_printf (_("error: invalid date/time value:\n")); dbg_printf (_(" user provided time: '%s'\n"), debug_strfdatetime (tm0, pc, tmp, sizeof tmp)); dbg_printf (_(" normalized time: '%s'\n"), debug_strfdatetime (tm1, pc, tmp, sizeof tmp)); /* The format must be aligned with debug_strfdatetime and the two DEBUG statements above. This string is not translated. */ i = snprintf (tmp, sizeof tmp, " %4s %2s %2s %2s %2s %2s", eq_year ? "" : "----", eq_month ? "" : "--", eq_mday ? "" : "--", eq_hour ? "" : "--", eq_min ? "" : "--", eq_sec ? "" : "--"); /* Trim trailing whitespace. */ if (0 <= i) { if (sizeof tmp - 1 < i) i = sizeof tmp - 1; while (0 < i && tmp[i - 1] == ' ') --i; tmp[i] = '\0'; } dbg_printf ("%s\n", tmp); dbg_printf (_(" possible reasons:\n")); if (dst_shift) dbg_printf (_(" non-existing due to daylight-saving time;\n")); if (!eq_mday && !eq_month) dbg_printf (_(" invalid day/month combination;\n")); dbg_printf (_(" numeric values overflow;\n")); dbg_printf (" %s\n", (time_zone_seen ? _("incorrect timezone") : _("missing timezone"))); } /* Parse a date/time string, storing the resulting time value into *RESULT. The string itself is pointed to by P. Return true if successful. P can be an incomplete or relative time specification; if so, use *NOW as the basis for the returned time. Default to timezone TZDEFAULT, which corresponds to tzalloc (TZSTRING). */ static bool parse_datetime_body (struct timespec *result, char const *p, struct timespec const *now, unsigned int flags, timezone_t tzdefault, char const *tzstring) { struct tm tm; struct tm tm0; char time_zone_buf[TIME_ZONE_BUFSIZE]; char dbg_tm[DBGBUFSIZE]; bool ok = false; char const *input_sentinel = p + strlen (p); char *tz1alloc = NULL; /* A reasonable upper bound for the size of ordinary TZ strings. Use heap allocation if TZ's length exceeds this. */ enum { TZBUFSIZE = 100 }; char tz1buf[TZBUFSIZE]; struct timespec gettime_buffer; if (! now) { gettime (&gettime_buffer); now = &gettime_buffer; } time_t Start = now->tv_sec; int Start_ns = now->tv_nsec; unsigned char c; while (c = *p, c_isspace (c)) p++; timezone_t tz = tzdefault; /* Store a local copy prior to first "goto". Without this, a prior use below of RELATIVE_TIME_0 on the RHS might translate to an assignment- to-temporary, which would trigger a -Wjump-misses-init warning. */ const relative_time rel_time_0 = RELATIVE_TIME_0; if (strncmp (p, "TZ=\"", 4) == 0) { char const *tzbase = p + 4; idx_t tzsize = 1; char const *s; for (s = tzbase; *s; s++, tzsize++) if (*s == '\\') { s++; if (! (*s == '\\' || *s == '"')) break; } else if (*s == '"') { timezone_t tz1; char *tz1string = tz1buf; char *z; if (TZBUFSIZE < tzsize) { tz1alloc = malloc (tzsize); if (!tz1alloc) goto fail; tz1string = tz1alloc; } z = tz1string; for (s = tzbase; *s != '"'; s++) *z++ = *(s += *s == '\\'); *z = '\0'; tz1 = tzalloc (tz1string); if (!tz1) goto fail; tz = tz1; tzstring = tz1string; p = s + 1; while (c = *p, c_isspace (c)) p++; break; } } struct tm tmp; if (! localtime_rz (tz, &now->tv_sec, &tmp)) goto fail; /* As documented, be careful to treat the empty string just like a date string of "0". Without this, an empty string would be declared invalid when parsed during a DST transition. */ if (*p == '\0') p = "0"; parser_control pc; pc.input = p; #ifdef GNULIB_PARSE_DATETIME2 pc.parse_datetime_debug = (flags & PARSE_DATETIME_DEBUG) != 0; #endif if (INT_ADD_WRAPV (tmp.tm_year, TM_YEAR_BASE, &pc.year.value)) { if (debugging (&pc)) dbg_printf (_("error: initial year out of range\n")); goto fail; } pc.year.digits = 0; pc.month = tmp.tm_mon + 1; pc.day = tmp.tm_mday; pc.hour = tmp.tm_hour; pc.minutes = tmp.tm_min; pc.seconds.tv_sec = tmp.tm_sec; pc.seconds.tv_nsec = Start_ns; tm.tm_isdst = tmp.tm_isdst; pc.meridian = MER24; pc.rel = rel_time_0; pc.timespec_seen = false; pc.rels_seen = false; pc.dates_seen = 0; pc.days_seen = 0; pc.times_seen = 0; pc.local_zones_seen = 0; pc.dsts_seen = 0; pc.zones_seen = 0; pc.year_seen = false; pc.debug_dates_seen = false; pc.debug_days_seen = false; pc.debug_times_seen = false; pc.debug_local_zones_seen = false; pc.debug_zones_seen = false; pc.debug_year_seen = false; pc.debug_ordinal_day_seen = false; #if HAVE_STRUCT_TM_TM_ZONE pc.local_time_zone_table[0].name = tmp.tm_zone; pc.local_time_zone_table[0].type = tLOCAL_ZONE; pc.local_time_zone_table[0].value = tmp.tm_isdst; pc.local_time_zone_table[1].name = NULL; /* Probe the names used in the next three calendar quarters, looking for a tm_isdst different from the one we already have. */ { int quarter; for (quarter = 1; quarter <= 3; quarter++) { time_t probe; if (INT_ADD_WRAPV (Start, quarter * (90 * 24 * 60 * 60), &probe)) break; struct tm probe_tm; if (localtime_rz (tz, &probe, &probe_tm) && probe_tm.tm_zone && probe_tm.tm_isdst != pc.local_time_zone_table[0].value) { { pc.local_time_zone_table[1].name = probe_tm.tm_zone; pc.local_time_zone_table[1].type = tLOCAL_ZONE; pc.local_time_zone_table[1].value = probe_tm.tm_isdst; pc.local_time_zone_table[2].name = NULL; } break; } } } #else #if HAVE_TZNAME { # if !HAVE_DECL_TZNAME extern char *tzname[]; # endif int i; for (i = 0; i < 2; i++) { pc.local_time_zone_table[i].name = tzname[i]; pc.local_time_zone_table[i].type = tLOCAL_ZONE; pc.local_time_zone_table[i].value = i; } pc.local_time_zone_table[i].name = NULL; } #else pc.local_time_zone_table[0].name = NULL; #endif #endif if (pc.local_time_zone_table[0].name && pc.local_time_zone_table[1].name && ! strcmp (pc.local_time_zone_table[0].name, pc.local_time_zone_table[1].name)) { /* This locale uses the same abbreviation for standard and daylight times. So if we see that abbreviation, we don't know whether it's daylight time. */ pc.local_time_zone_table[0].value = -1; pc.local_time_zone_table[1].name = NULL; } if (yyparse (&pc) != 0) { if (debugging (&pc)) dbg_printf ((input_sentinel <= pc.input ? _("error: parsing failed\n") : _("error: parsing failed, stopped at '%s'\n")), pc.input); goto fail; } /* Determine effective timezone source. */ if (debugging (&pc)) { dbg_printf (_("input timezone: ")); if (pc.timespec_seen) fprintf (stderr, _("'@timespec' - always UTC")); else if (pc.zones_seen) fprintf (stderr, _("parsed date/time string")); else if (tzstring) { if (tz != tzdefault) fprintf (stderr, _("TZ=\"%s\" in date string"), tzstring); else if (STREQ (tzstring, "UTC0")) { /* Special case: 'date -u' sets TZ="UTC0". */ fprintf (stderr, _("TZ=\"UTC0\" environment value or -u")); } else fprintf (stderr, _("TZ=\"%s\" environment value"), tzstring); } else fprintf (stderr, _("system default")); /* Account for DST changes if tLOCAL_ZONE was seen. local timezone only changes DST and is relative to the default timezone.*/ if (pc.local_zones_seen && !pc.zones_seen && 0 < pc.local_isdst) fprintf (stderr, ", dst"); if (pc.zones_seen) fprintf (stderr, " (%s)", time_zone_str (pc.time_zone, time_zone_buf)); fputc ('\n', stderr); } if (pc.timespec_seen) *result = pc.seconds; else { if (1 < (pc.times_seen | pc.dates_seen | pc.days_seen | pc.dsts_seen | (pc.local_zones_seen + pc.zones_seen))) { if (debugging (&pc)) { if (pc.times_seen > 1) dbg_printf ("error: seen multiple time parts\n"); if (pc.dates_seen > 1) dbg_printf ("error: seen multiple date parts\n"); if (pc.days_seen > 1) dbg_printf ("error: seen multiple days parts\n"); if (pc.dsts_seen > 1) dbg_printf ("error: seen multiple daylight-saving parts\n"); if ((pc.local_zones_seen + pc.zones_seen) > 1) dbg_printf ("error: seen multiple time-zone parts\n"); } goto fail; } if (! to_tm_year (pc.year, debugging (&pc), &tm.tm_year) || INT_ADD_WRAPV (pc.month, -1, &tm.tm_mon) || INT_ADD_WRAPV (pc.day, 0, &tm.tm_mday)) { if (debugging (&pc)) dbg_printf (_("error: year, month, or day overflow\n")); goto fail; } if (pc.times_seen || (pc.rels_seen && ! pc.dates_seen && ! pc.days_seen)) { tm.tm_hour = to_hour (pc.hour, pc.meridian); if (tm.tm_hour < 0) { char const *mrd = (pc.meridian == MERam ? "am" : pc.meridian == MERpm ?"pm" : ""); if (debugging (&pc)) dbg_printf (_("error: invalid hour %"PRIdMAX"%s\n"), pc.hour, mrd); goto fail; } tm.tm_min = pc.minutes; tm.tm_sec = pc.seconds.tv_sec; if (debugging (&pc)) dbg_printf ((pc.times_seen ? _("using specified time as starting value: '%s'\n") : _("using current time as starting value: '%s'\n")), debug_strftime (&tm, dbg_tm, sizeof dbg_tm)); } else { tm.tm_hour = tm.tm_min = tm.tm_sec = 0; pc.seconds.tv_nsec = 0; if (debugging (&pc)) dbg_printf ("warning: using midnight as starting time: 00:00:00\n"); } /* Let mktime deduce tm_isdst if we have an absolute timestamp. */ if (pc.dates_seen | pc.days_seen | pc.times_seen) tm.tm_isdst = -1; /* But if the input explicitly specifies local time with or without DST, give mktime that information. */ if (pc.local_zones_seen) tm.tm_isdst = pc.local_isdst; tm0.tm_sec = tm.tm_sec; tm0.tm_min = tm.tm_min; tm0.tm_hour = tm.tm_hour; tm0.tm_mday = tm.tm_mday; tm0.tm_mon = tm.tm_mon; tm0.tm_year = tm.tm_year; tm0.tm_isdst = tm.tm_isdst; tm.tm_wday = -1; Start = mktime_z (tz, &tm); if (! mktime_ok (&tm0, &tm)) { bool repaired = false; bool time_zone_seen = pc.zones_seen != 0; if (time_zone_seen) { /* Guard against falsely reporting errors near the time_t boundaries when parsing times in other time zones. For example, suppose the input string "1969-12-31 23:00:00 -0100", the current time zone is 8 hours ahead of UTC, and the min time_t value is 1970-01-01 00:00:00 UTC. Then the min localtime value is 1970-01-01 08:00:00, and mktime will therefore fail on 1969-12-31 23:00:00. To work around the problem, set the time zone to 1 hour behind UTC temporarily by setting TZ="XXX1:00" and try mktime again. */ char tz2buf[sizeof "XXX" - 1 + TIME_ZONE_BUFSIZE]; tz2buf[0] = tz2buf[1] = tz2buf[2] = 'X'; time_zone_str (pc.time_zone, &tz2buf[3]); timezone_t tz2 = tzalloc (tz2buf); if (!tz2) { if (debugging (&pc)) dbg_printf (_("error: tzalloc (\"%s\") failed\n"), tz2buf); goto fail; } tm.tm_sec = tm0.tm_sec; tm.tm_min = tm0.tm_min; tm.tm_hour = tm0.tm_hour; tm.tm_mday = tm0.tm_mday; tm.tm_mon = tm0.tm_mon; tm.tm_year = tm0.tm_year; tm.tm_isdst = tm0.tm_isdst; tm.tm_wday = -1; Start = mktime_z (tz2, &tm); repaired = mktime_ok (&tm0, &tm); tzfree (tz2); } if (! repaired) { debug_mktime_not_ok (&tm0, &tm, &pc, time_zone_seen); goto fail; } } char dbg_ord[DBGBUFSIZE]; if (pc.days_seen && ! pc.dates_seen) { intmax_t dayincr; tm.tm_yday = -1; if (! (INT_MULTIPLY_WRAPV ((pc.day_ordinal - (0 < pc.day_ordinal && tm.tm_wday != pc.day_number)), 7, &dayincr) || INT_ADD_WRAPV ((pc.day_number - tm.tm_wday + 7) % 7, dayincr, &dayincr) || INT_ADD_WRAPV (dayincr, tm.tm_mday, &tm.tm_mday))) { tm.tm_isdst = -1; Start = mktime_z (tz, &tm); } if (tm.tm_yday < 0) { if (debugging (&pc)) dbg_printf (_("error: day '%s' " "(day ordinal=%"PRIdMAX" number=%d) " "resulted in an invalid date: '%s'\n"), str_days (&pc, dbg_ord, sizeof dbg_ord), pc.day_ordinal, pc.day_number, debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); goto fail; } if (debugging (&pc)) dbg_printf (_("new start date: '%s' is '%s'\n"), str_days (&pc, dbg_ord, sizeof dbg_ord), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); } if (debugging (&pc)) { if (!pc.dates_seen && !pc.days_seen) dbg_printf (_("using current date as starting value: '%s'\n"), debug_strfdate (&tm, dbg_tm, sizeof dbg_tm)); if (pc.days_seen && pc.dates_seen) dbg_printf (_("warning: day (%s) ignored when explicit dates " "are given\n"), str_days (&pc, dbg_ord, sizeof dbg_ord)); dbg_printf (_("starting date/time: '%s'\n"), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); } /* Add relative date. */ if (pc.rel.year | pc.rel.month | pc.rel.day) { if (debugging (&pc)) { if ((pc.rel.year != 0 || pc.rel.month != 0) && tm.tm_mday != 15) dbg_printf (_("warning: when adding relative months/years, " "it is recommended to specify the 15th of the " "months\n")); if (pc.rel.day != 0 && tm.tm_hour != 12) dbg_printf (_("warning: when adding relative days, " "it is recommended to specify noon\n")); } int year, month, day; if (INT_ADD_WRAPV (tm.tm_year, pc.rel.year, &year) || INT_ADD_WRAPV (tm.tm_mon, pc.rel.month, &month) || INT_ADD_WRAPV (tm.tm_mday, pc.rel.day, &day)) { if (debugging (&pc)) dbg_printf (_("error: %s:%d\n"), __FILE__, __LINE__); goto fail; } tm.tm_year = year; tm.tm_mon = month; tm.tm_mday = day; tm.tm_hour = tm0.tm_hour; tm.tm_min = tm0.tm_min; tm.tm_sec = tm0.tm_sec; tm.tm_isdst = tm0.tm_isdst; tm.tm_wday = -1; Start = mktime_z (tz, &tm); if (tm.tm_wday < 0) { if (debugging (&pc)) dbg_printf (_("error: adding relative date resulted " "in an invalid date: '%s'\n"), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); goto fail; } if (debugging (&pc)) { dbg_printf (_("after date adjustment " "(%+"PRIdMAX" years, %+"PRIdMAX" months, " "%+"PRIdMAX" days),\n"), pc.rel.year, pc.rel.month, pc.rel.day); dbg_printf (_(" new date/time = '%s'\n"), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm)); /* Warn about crossing DST due to time adjustment. Example: https://bugs.gnu.org/8357 env TZ=Europe/Helsinki \ date --debug \ -d 'Mon Mar 28 00:36:07 2011 EEST 1 day ago' This case is different than DST changes due to time adjustment, i.e., "1 day ago" vs "24 hours ago" are calculated in different places. 'tm0.tm_isdst' contains the DST of the input date, 'tm.tm_isdst' is the normalized result after calling mktime (&tm). */ if (tm0.tm_isdst != -1 && tm.tm_isdst != tm0.tm_isdst) dbg_printf (_("warning: daylight saving time changed after " "date adjustment\n")); /* Warn if the user did not ask to adjust days but mday changed, or user did not ask to adjust months/days but the month changed. Example for first case: 2016-05-31 + 1 month => 2016-06-31 => 2016-07-01. User asked to adjust month, but the day changed from 31 to 01. Example for second case: 2016-02-29 + 1 year => 2017-02-29 => 2017-03-01. User asked to adjust year, but the month changed from 02 to 03. */ if (pc.rel.day == 0 && (tm.tm_mday != day || (pc.rel.month == 0 && tm.tm_mon != month))) { dbg_printf (_("warning: month/year adjustment resulted in " "shifted dates:\n")); char tm_year_buf[TM_YEAR_BUFSIZE]; dbg_printf (_(" adjusted Y M D: %s %02d %02d\n"), tm_year_str (year, tm_year_buf), month + 1, day); dbg_printf (_(" normalized Y M D: %s %02d %02d\n"), tm_year_str (tm.tm_year, tm_year_buf), tm.tm_mon + 1, tm.tm_mday); } } } /* The only "output" of this if-block is an updated Start value, so this block must follow others that clobber Start. */ if (pc.zones_seen) { bool overflow = false; #ifdef HAVE_TM_GMTOFF long int utcoff = tm.tm_gmtoff; #else time_t t = Start; struct tm gmt; int utcoff = (gmtime_r (&t, &gmt) ? tm_diff (&tm, &gmt) : (overflow = true, 0)); #endif intmax_t delta; overflow |= INT_SUBTRACT_WRAPV (pc.time_zone, utcoff, &delta); time_t t1; overflow |= INT_SUBTRACT_WRAPV (Start, delta, &t1); if (overflow) { if (debugging (&pc)) dbg_printf (_("error: timezone %d caused time_t overflow\n"), pc.time_zone); goto fail; } Start = t1; } if (debugging (&pc)) { intmax_t Starti = Start; dbg_printf (_("'%s' = %"PRIdMAX" epoch-seconds\n"), debug_strfdatetime (&tm, &pc, dbg_tm, sizeof dbg_tm), Starti); } /* Add relative hours, minutes, and seconds. On hosts that support leap seconds, ignore the possibility of leap seconds; e.g., "+ 10 minutes" adds 600 seconds, even if one of them is a leap second. Typically this is not what the user wants, but it's too hard to do it the other way, because the time zone indicator must be applied before relative times, and if mktime is applied again the time zone will be lost. */ { intmax_t orig_ns = pc.seconds.tv_nsec; intmax_t sum_ns = orig_ns + pc.rel.ns; int normalized_ns = (sum_ns % BILLION + BILLION) % BILLION; int d4 = (sum_ns - normalized_ns) / BILLION; intmax_t d1, t1, d2, t2, t3; time_t t4; if (INT_MULTIPLY_WRAPV (pc.rel.hour, 60 * 60, &d1) || INT_ADD_WRAPV (Start, d1, &t1) || INT_MULTIPLY_WRAPV (pc.rel.minutes, 60, &d2) || INT_ADD_WRAPV (t1, d2, &t2) || INT_ADD_WRAPV (t2, pc.rel.seconds, &t3) || INT_ADD_WRAPV (t3, d4, &t4)) { if (debugging (&pc)) dbg_printf (_("error: adding relative time caused an " "overflow\n")); goto fail; } result->tv_sec = t4; result->tv_nsec = normalized_ns; if (debugging (&pc) && (pc.rel.hour | pc.rel.minutes | pc.rel.seconds | pc.rel.ns)) { dbg_printf (_("after time adjustment (%+"PRIdMAX" hours, " "%+"PRIdMAX" minutes, " "%+"PRIdMAX" seconds, %+d ns),\n"), pc.rel.hour, pc.rel.minutes, pc.rel.seconds, pc.rel.ns); intmax_t t4i = t4; dbg_printf (_(" new time = %"PRIdMAX" epoch-seconds\n"), t4i); /* Warn about crossing DST due to time adjustment. Example: https://bugs.gnu.org/8357 env TZ=Europe/Helsinki \ date --debug \ -d 'Mon Mar 28 00:36:07 2011 EEST 24 hours ago' This case is different than DST changes due to days adjustment, i.e., "1 day ago" vs "24 hours ago" are calculated in different places. 'tm.tm_isdst' contains the date after date adjustment. */ struct tm lmt; if (tm.tm_isdst != -1 && localtime_rz (tz, &result->tv_sec, &lmt) && tm.tm_isdst != lmt.tm_isdst) dbg_printf (_("warning: daylight saving time changed after " "time adjustment\n")); } } } if (debugging (&pc)) { /* Special case: using 'date -u' simply set TZ=UTC0 */ if (! tzstring) dbg_printf (_("timezone: system default\n")); else if (STREQ (tzstring, "UTC0")) dbg_printf (_("timezone: Universal Time\n")); else dbg_printf (_("timezone: TZ=\"%s\" environment value\n"), tzstring); intmax_t sec = result->tv_sec; int nsec = result->tv_nsec; dbg_printf (_("final: %"PRIdMAX".%09d (epoch-seconds)\n"), sec, nsec); struct tm gmt, lmt; bool got_utc = !!gmtime_r (&result->tv_sec, &gmt); if (got_utc) dbg_printf (_("final: %s (UTC)\n"), debug_strfdatetime (&gmt, NULL, dbg_tm, sizeof dbg_tm)); if (localtime_rz (tz, &result->tv_sec, &lmt)) { #ifdef HAVE_TM_GMTOFF bool got_utcoff = true; long int utcoff = lmt.tm_gmtoff; #else bool got_utcoff = got_utc; int utcoff; if (got_utcoff) utcoff = tm_diff (&lmt, &gmt); #endif if (got_utcoff) dbg_printf (_("final: %s (UTC%s)\n"), debug_strfdatetime (&lmt, NULL, dbg_tm, sizeof dbg_tm), time_zone_str (utcoff, time_zone_buf)); else dbg_printf (_("final: %s (unknown time zone offset)\n"), debug_strfdatetime (&lmt, NULL, dbg_tm, sizeof dbg_tm)); } } ok = true; fail: if (tz != tzdefault) tzfree (tz); free (tz1alloc); return ok; } #ifdef GNULIB_PARSE_DATETIME2 /* Parse a date/time string, storing the resulting time value into *RESULT. The string itself is pointed to by P. Return true if successful. P can be an incomplete or relative time specification; if so, use *NOW as the basis for the returned time. Default to timezone TZDEFAULT, which corresponds to tzalloc (TZSTRING). */ bool parse_datetime2 (struct timespec *result, char const *p, struct timespec const *now, unsigned int flags, timezone_t tzdefault, char const *tzstring) { return parse_datetime_body (result, p, now, flags, tzdefault, tzstring); } #endif /* The plain interface: run with debug=false and the default timezone. */ bool parse_datetime (struct timespec *result, char const *p, struct timespec const *now) { char const *tzstring = getenv ("TZ"); timezone_t tz = tzalloc (tzstring); if (!tz) return false; bool ok = parse_datetime_body (result, p, now, 0, tz, tzstring); tzfree (tz); return ok; } #if TEST int main (int ac, char **av) { char buff[BUFSIZ]; printf ("Enter date, or blank line to exit.\n\t> "); fflush (stdout); buff[BUFSIZ - 1] = '\0'; while (fgets (buff, BUFSIZ - 1, stdin) && buff[0]) { struct timespec d; struct tm const *tm; if (! parse_datetime (&d, buff, NULL)) printf ("Bad format - couldn't convert.\n"); else if (! (tm = localtime (&d.tv_sec))) { intmax_t sec = d.tv_sec; printf ("localtime (%"PRIdMAX") failed\n", sec); } else { int ns = d.tv_nsec; char tm_year_buf[TM_YEAR_BUFSIZE]; printf ("%s-%02d-%02d %02d:%02d:%02d.%09d\n", tm_year_str (tm->tm_year, tm_year_buf), tm->tm_mon + 1, tm->tm_mday, tm->tm_hour, tm->tm_min, tm->tm_sec, ns); } printf ("\t> "); fflush (stdout); } return 0; } #endif /* TEST */ ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/vfprintf.c�������������������������������������������������������������������������0000644�0000000�0000000�00000003172�14226564451�012670� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Formatted output to a stream. Copyright (C) 2004, 2006-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifdef HAVE_CONFIG_H # include <config.h> #endif /* Specification. */ #include <stdio.h> #include <errno.h> #include <limits.h> #include <stdarg.h> #include <stdlib.h> #include "fseterr.h" #include "vasnprintf.h" /* Print formatted output to the stream FP. Return string length of formatted string. On error, return a negative value. */ int vfprintf (FILE *fp, const char *format, va_list args) { char buf[2000]; char *output; size_t len; size_t lenbuf = sizeof (buf); output = vasnprintf (buf, &lenbuf, format, args); len = lenbuf; if (!output) { fseterr (fp); return -1; } if (fwrite (output, 1, len, fp) < len) { if (output != buf) free (output); return -1; } if (output != buf) free (output); if (len > INT_MAX) { errno = EOVERFLOW; fseterr (fp); return -1; } return len; } ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/se-label.in.h����������������������������������������������������������������������0000644�0000000�0000000�00000004414�14226564447�013135� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Replacement <selinux/label.h> for platforms that lack it. Copyright 2020-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Paul Eggert. */ #ifndef SELINUX_LABEL_H #define SELINUX_LABEL_H #include <selinux/selinux.h> #include <errno.h> #ifndef _GL_INLINE_HEADER_BEGIN #error "Please include config.h first." #endif _GL_INLINE_HEADER_BEGIN #ifndef SE_LABEL_INLINE # define SE_LABEL_INLINE _GL_INLINE #endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ #ifndef _GL_ATTRIBUTE_MAYBE_UNUSED # if 0 /* no GCC or clang version supports this yet */ # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] # elif defined __GNUC__ || defined __clang__ # define _GL_ATTRIBUTE_MAYBE_UNUSED __attribute__ ((__unused__)) # else # define _GL_ATTRIBUTE_MAYBE_UNUSED # endif #endif #define SELABEL_CTX_FILE 0 struct selabel_handle; SE_LABEL_INLINE int selabel_lookup (_GL_ATTRIBUTE_MAYBE_UNUSED struct selabel_handle *hnd, _GL_ATTRIBUTE_MAYBE_UNUSED char **context, _GL_ATTRIBUTE_MAYBE_UNUSED char const *key, _GL_ATTRIBUTE_MAYBE_UNUSED int type) { errno = ENOTSUP; return -1; } SE_LABEL_INLINE struct selabel_handle * selabel_open (_GL_ATTRIBUTE_MAYBE_UNUSED int backend, _GL_ATTRIBUTE_MAYBE_UNUSED struct selinux_opt *options, _GL_ATTRIBUTE_MAYBE_UNUSED unsigned nopt) { errno = ENOTSUP; return 0; } SE_LABEL_INLINE void selabel_close (_GL_ATTRIBUTE_MAYBE_UNUSED struct selabel_handle *hnd) { errno = ENOTSUP; } _GL_INLINE_HEADER_END #endif ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/findprog.h�������������������������������������������������������������������������0000644�0000000�0000000�00000006343�14226564446�012656� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Locating a program in PATH. Copyright (C) 2001-2003, 2009-2022 Free Software Foundation, Inc. Written by Bruno Haible <haible@clisp.cons.org>, 2001. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _FINDPROG_H #define _FINDPROG_H #include <stdbool.h> #ifdef __cplusplus extern "C" { #endif /* Looks up a program in the PATH. Attempts to determine the pathname that would be called by execlp/execvp of PROGNAME. If successful, it returns a pathname containing a slash (either absolute or relative to the current directory). Otherwise, it returns PROGNAME unmodified. Because of the latter case, callers should use execlp/execvp, not execl/execv on the returned pathname. The returned string is freshly malloc()ed if it is != PROGNAME. */ extern const char *find_in_path (const char *progname); /* Looks up a program in the given PATH-like string. The PATH argument consists of a list of directories, separated by ':' or (on native Windows) by ';'. An empty PATH element designates the current directory. A null PATH is equivalent to an empty PATH, that is, to the singleton list that contains only the current directory. If DIRECTORY is not NULL, all relative filenames (i.e. PROGNAME when it contains a slash, and the PATH elements) are considered relative to DIRECTORY instead of relative to the current directory of this process. Determines the pathname that would be called by execlp/execvp of PROGNAME. - If successful, it returns a pathname containing a slash (either absolute or relative to the current directory). The returned string can be used with either execl/execv or execlp/execvp. It is freshly malloc()ed if it is != PROGNAME. - Otherwise, it sets errno and returns NULL. Specific errno values include: - ENOENT: means that the program's file was not found. - EACCES: means that the program's file cannot be accessed (due to some issue with one of the ancestor directories) or lacks the execute permissions. - ENOMEM: means out of memory. If OPTIMIZE_FOR_EXEC is true, the function saves some work, under the assumption that the resulting pathname will not be accessed directly, only through execl/execv or execlp/execvp. Here, a "slash" means: - On POSIX systems excluding Cygwin: a '/', - On Windows, OS/2, DOS platforms: a '/' or '\'. */ extern const char *find_in_given_path (const char *progname, const char *path, const char *directory, bool optimize_for_exec); #ifdef __cplusplus } #endif #endif /* _FINDPROG_H */ ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/dirfd.c����������������������������������������������������������������������������0000644�0000000�0000000�00000004447�14226564446�012134� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* dirfd.c -- return the file descriptor associated with an open DIR* Copyright (C) 2001, 2006, 2008-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by Jim Meyering. */ #include <config.h> #include <dirent.h> #include <errno.h> #ifdef __KLIBC__ # include <stdlib.h> # include <io.h> static struct dirp_fd_list { DIR *dirp; int fd; struct dirp_fd_list *next; } *dirp_fd_start = NULL; /* Register fd associated with dirp to dirp_fd_list. */ int _gl_register_dirp_fd (int fd, DIR *dirp) { struct dirp_fd_list *new_dirp_fd = malloc (sizeof *new_dirp_fd); if (!new_dirp_fd) return -1; new_dirp_fd->dirp = dirp; new_dirp_fd->fd = fd; new_dirp_fd->next = dirp_fd_start; dirp_fd_start = new_dirp_fd; return 0; } /* Unregister fd from dirp_fd_list with closing it */ void _gl_unregister_dirp_fd (int fd) { struct dirp_fd_list *dirp_fd; struct dirp_fd_list *dirp_fd_prev; for (dirp_fd_prev = NULL, dirp_fd = dirp_fd_start; dirp_fd; dirp_fd_prev = dirp_fd, dirp_fd = dirp_fd->next) { if (dirp_fd->fd == fd) { if (dirp_fd_prev) dirp_fd_prev->next = dirp_fd->next; else /* dirp_fd == dirp_fd_start */ dirp_fd_start = dirp_fd_start->next; close (fd); free (dirp_fd); break; } } } #endif int dirfd (DIR *dir_p) { int fd = DIR_TO_FD (dir_p); if (fd == -1) #ifndef __KLIBC__ errno = ENOTSUP; #else { struct dirp_fd_list *dirp_fd; for (dirp_fd = dirp_fd_start; dirp_fd; dirp_fd = dirp_fd->next) if (dirp_fd->dirp == dir_p) return dirp_fd->fd; errno = EINVAL; } #endif return fd; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/memrchr.c��������������������������������������������������������������������������0000644�0000000�0000000�00000013115�14226564447�012472� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* memrchr -- find the last occurrence of a byte in a memory block Copyright (C) 1991, 1993, 1996-1997, 1999-2000, 2003-2022 Free Software Foundation, Inc. Based on strlen implementation by Torbjorn Granlund (tege@sics.se), with help from Dan Sahlin (dan@sics.se) and commentary by Jim Blandy (jimb@ai.mit.edu); adaptation to memchr suggested by Dick Karpinski (dick@cca.ucsf.edu), and implemented by Roland McGrath (roland@ai.mit.edu). This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #if defined _LIBC # include <memcopy.h> #else # include <config.h> # define reg_char char #endif #include <string.h> #include <limits.h> #undef __memrchr #ifdef _LIBC # undef memrchr #endif #ifndef weak_alias # define __memrchr memrchr #endif /* Search no more than N bytes of S for C. */ void * __memrchr (void const *s, int c_in, size_t n) { /* On 32-bit hardware, choosing longword to be a 32-bit unsigned long instead of a 64-bit uintmax_t tends to give better performance. On 64-bit hardware, unsigned long is generally 64 bits already. Change this typedef to experiment with performance. */ typedef unsigned long int longword; const unsigned char *char_ptr; const longword *longword_ptr; longword repeated_one; longword repeated_c; unsigned reg_char c; c = (unsigned char) c_in; /* Handle the last few bytes by reading one byte at a time. Do this until CHAR_PTR is aligned on a longword boundary. */ for (char_ptr = (const unsigned char *) s + n; n > 0 && (size_t) char_ptr % sizeof (longword) != 0; --n) if (*--char_ptr == c) return (void *) char_ptr; longword_ptr = (const void *) char_ptr; /* All these elucidatory comments refer to 4-byte longwords, but the theory applies equally well to any size longwords. */ /* Compute auxiliary longword values: repeated_one is a value which has a 1 in every byte. repeated_c has c in every byte. */ repeated_one = 0x01010101; repeated_c = c | (c << 8); repeated_c |= repeated_c << 16; if (0xffffffffU < (longword) -1) { repeated_one |= repeated_one << 31 << 1; repeated_c |= repeated_c << 31 << 1; if (8 < sizeof (longword)) { size_t i; for (i = 64; i < sizeof (longword) * 8; i *= 2) { repeated_one |= repeated_one << i; repeated_c |= repeated_c << i; } } } /* Instead of the traditional loop which tests each byte, we will test a longword at a time. The tricky part is testing if *any of the four* bytes in the longword in question are equal to c. We first use an xor with repeated_c. This reduces the task to testing whether *any of the four* bytes in longword1 is zero. We compute tmp = ((longword1 - repeated_one) & ~longword1) & (repeated_one << 7). That is, we perform the following operations: 1. Subtract repeated_one. 2. & ~longword1. 3. & a mask consisting of 0x80 in every byte. Consider what happens in each byte: - If a byte of longword1 is zero, step 1 and 2 transform it into 0xff, and step 3 transforms it into 0x80. A carry can also be propagated to more significant bytes. - If a byte of longword1 is nonzero, let its lowest 1 bit be at position k (0 <= k <= 7); so the lowest k bits are 0. After step 1, the byte ends in a single bit of value 0 and k bits of value 1. After step 2, the result is just k bits of value 1: 2^k - 1. After step 3, the result is 0. And no carry is produced. So, if longword1 has only non-zero bytes, tmp is zero. Whereas if longword1 has a zero byte, call j the position of the least significant zero byte. Then the result has a zero at positions 0, ..., j-1 and a 0x80 at position j. We cannot predict the result at the more significant bytes (positions j+1..3), but it does not matter since we already have a non-zero bit at position 8*j+7. So, the test whether any byte in longword1 is zero is equivalent to testing whether tmp is nonzero. */ while (n >= sizeof (longword)) { longword longword1 = *--longword_ptr ^ repeated_c; if ((((longword1 - repeated_one) & ~longword1) & (repeated_one << 7)) != 0) { longword_ptr++; break; } n -= sizeof (longword); } char_ptr = (const unsigned char *) longword_ptr; /* At this point, we know that either n < sizeof (longword), or one of the sizeof (longword) bytes starting at char_ptr is == c. On little-endian machines, we could determine the first such byte without any further memory accesses, just by looking at the tmp result from the last loop iteration. But this does not work on big-endian machines. Choose code that works in both cases. */ while (n-- > 0) { if (*--char_ptr == c) return (void *) char_ptr; } return NULL; } #ifdef weak_alias weak_alias (__memrchr, memrchr) #endif ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/fd-hook.c��������������������������������������������������������������������������0000644�0000000�0000000�00000007025�14226564447�012367� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Hook for making file descriptor functions close(), ioctl() extensible. Copyright (C) 2009-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2009. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "fd-hook.h" #include <stdlib.h> /* Currently, this entire code is only needed for the handling of sockets on native Windows platforms. */ #if WINDOWS_SOCKETS /* The first and last link in the doubly linked list. Initially the list is empty. */ static struct fd_hook anchor = { &anchor, &anchor, NULL, NULL }; int execute_close_hooks (const struct fd_hook *remaining_list, gl_close_fn primary, int fd) { if (remaining_list == &anchor) /* End of list reached. */ return primary (fd); else return remaining_list->private_close_fn (remaining_list->private_next, primary, fd); } int execute_all_close_hooks (gl_close_fn primary, int fd) { return execute_close_hooks (anchor.private_next, primary, fd); } int execute_ioctl_hooks (const struct fd_hook *remaining_list, gl_ioctl_fn primary, int fd, int request, void *arg) { if (remaining_list == &anchor) /* End of list reached. */ return primary (fd, request, arg); else return remaining_list->private_ioctl_fn (remaining_list->private_next, primary, fd, request, arg); } int execute_all_ioctl_hooks (gl_ioctl_fn primary, int fd, int request, void *arg) { return execute_ioctl_hooks (anchor.private_next, primary, fd, request, arg); } void register_fd_hook (close_hook_fn close_hook, ioctl_hook_fn ioctl_hook, struct fd_hook *link) { if (close_hook == NULL) close_hook = execute_close_hooks; if (ioctl_hook == NULL) ioctl_hook = execute_ioctl_hooks; if (link->private_next == NULL && link->private_prev == NULL) { /* Add the link to the doubly linked list. */ link->private_next = anchor.private_next; link->private_prev = &anchor; link->private_close_fn = close_hook; link->private_ioctl_fn = ioctl_hook; anchor.private_next->private_prev = link; anchor.private_next = link; } else { /* The link is already in use. */ if (link->private_close_fn != close_hook || link->private_ioctl_fn != ioctl_hook) abort (); } } void unregister_fd_hook (struct fd_hook *link) { struct fd_hook *next = link->private_next; struct fd_hook *prev = link->private_prev; if (next != NULL && prev != NULL) { /* The link is in use. Remove it from the doubly linked list. */ prev->private_next = next; next->private_prev = prev; /* Clear the link, to mark it unused. */ link->private_next = NULL; link->private_prev = NULL; link->private_close_fn = NULL; link->private_ioctl_fn = NULL; } } #endif �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/gettimeofday.c���������������������������������������������������������������������0000644�0000000�0000000�00000011304�14226564450�013506� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Provide gettimeofday for systems that don't have it or for which it's broken. Copyright (C) 2001-2003, 2005-2007, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* written by Jim Meyering */ #include <config.h> /* Specification. */ #include <sys/time.h> #include <time.h> #if defined _WIN32 && ! defined __CYGWIN__ # define WINDOWS_NATIVE # include <windows.h> #endif #ifdef WINDOWS_NATIVE /* Don't assume that UNICODE is not defined. */ # undef LoadLibrary # define LoadLibrary LoadLibraryA # if !(_WIN32_WINNT >= _WIN32_WINNT_WIN8) /* Avoid warnings from gcc -Wcast-function-type. */ # define GetProcAddress \ (void *) GetProcAddress /* GetSystemTimePreciseAsFileTime was introduced only in Windows 8. */ typedef void (WINAPI * GetSystemTimePreciseAsFileTimeFuncType) (FILETIME *lpTime); static GetSystemTimePreciseAsFileTimeFuncType GetSystemTimePreciseAsFileTimeFunc = NULL; static BOOL initialized = FALSE; static void initialize (void) { HMODULE kernel32 = LoadLibrary ("kernel32.dll"); if (kernel32 != NULL) { GetSystemTimePreciseAsFileTimeFunc = (GetSystemTimePreciseAsFileTimeFuncType) GetProcAddress (kernel32, "GetSystemTimePreciseAsFileTime"); } initialized = TRUE; } # else # define GetSystemTimePreciseAsFileTimeFunc GetSystemTimePreciseAsFileTime # endif #endif /* This is a wrapper for gettimeofday. It is used only on systems that lack this function, or whose implementation of this function causes problems. Work around the bug in some systems whereby gettimeofday clobbers the static buffer that localtime uses for its return value. The gettimeofday function from Mac OS X 10.0.4 (i.e., Darwin 1.3.7) has this problem. */ int gettimeofday (struct timeval *restrict tv, void *restrict tz) { #undef gettimeofday #ifdef WINDOWS_NATIVE /* On native Windows, there are two ways to get the current time: GetSystemTimeAsFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimeasfiletime> or GetSystemTimePreciseAsFileTime <https://docs.microsoft.com/en-us/windows/desktop/api/sysinfoapi/nf-sysinfoapi-getsystemtimepreciseasfiletime>. GetSystemTimeAsFileTime produces values that jump by increments of 15.627 milliseconds (!) on average. Whereas GetSystemTimePreciseAsFileTime values usually jump by 1 or 2 microseconds. More discussion on this topic: <http://www.windowstimestamp.com/description>. */ FILETIME current_time; # if !(_WIN32_WINNT >= _WIN32_WINNT_WIN8) if (!initialized) initialize (); # endif if (GetSystemTimePreciseAsFileTimeFunc != NULL) GetSystemTimePreciseAsFileTimeFunc (¤t_time); else GetSystemTimeAsFileTime (¤t_time); /* Convert from FILETIME to 'struct timeval'. */ /* FILETIME: <https://docs.microsoft.com/en-us/windows/desktop/api/minwinbase/ns-minwinbase-filetime> */ ULONGLONG since_1601 = ((ULONGLONG) current_time.dwHighDateTime << 32) | (ULONGLONG) current_time.dwLowDateTime; /* Between 1601-01-01 and 1970-01-01 there were 280 normal years and 89 leap years, in total 134774 days. */ ULONGLONG since_1970 = since_1601 - (ULONGLONG) 134774 * (ULONGLONG) 86400 * (ULONGLONG) 10000000; ULONGLONG microseconds_since_1970 = since_1970 / (ULONGLONG) 10; tv->tv_sec = microseconds_since_1970 / (ULONGLONG) 1000000; tv->tv_usec = microseconds_since_1970 % (ULONGLONG) 1000000; return 0; #else # if HAVE_GETTIMEOFDAY # if defined timeval /* 'struct timeval' overridden by gnulib? */ # undef timeval struct timeval otv; int result = gettimeofday (&otv, (struct timezone *) tz); if (result == 0) { tv->tv_sec = otv.tv_sec; tv->tv_usec = otv.tv_usec; } # else int result = gettimeofday (tv, (struct timezone *) tz); # endif return result; # else # if !defined OK_TO_USE_1S_CLOCK # error "Only 1-second nominal clock resolution found. Is that intended?" \ "If so, compile with the -DOK_TO_USE_1S_CLOCK option." # endif tv->tv_sec = time (NULL); tv->tv_usec = 0; return 0; # endif #endif } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/idx.h������������������������������������������������������������������������������0000644�0000000�0000000�00000012062�14226564446�011625� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A type for indices and sizes. Copyright (C) 2020-2022 Free Software Foundation, Inc. This file is part of the GNU C Library. The GNU C Library is free software; you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. The GNU C Library is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with the GNU C Library; if not, see <https://www.gnu.org/licenses/>. */ #ifndef _IDX_H #define _IDX_H /* Get ptrdiff_t. */ #include <stddef.h> /* Get PTRDIFF_MAX. */ #include <stdint.h> /* The type 'idx_t' holds an (array) index or an (object) size. Its implementation promotes to a signed integer type, which can hold the values 0..2^63-1 (on 64-bit platforms) or 0..2^31-1 (on 32-bit platforms). Why a signed integer type? * Security: Signed types can be checked for overflow via '-fsanitize=undefined', but unsigned types cannot. * Comparisons without surprises: ISO C99 § 6.3.1.8 specifies a few surprising results for comparisons, such as (int) -3 < (unsigned long) 7 => false (int) -3 < (unsigned int) 7 => false and on 32-bit machines: (long) -3 < (unsigned int) 7 => false This is surprising because the natural comparison order is by value in the realm of infinite-precision signed integers (ℤ). The best way to get rid of such surprises is to use signed types for numerical integer values, and use unsigned types only for bit masks and enums. Why not use 'size_t' directly? * Because 'size_t' is an unsigned type, and a signed type is better. See above. Why not use 'ssize_t'? * 'ptrdiff_t' is more portable; it is standardized by ISO C whereas 'ssize_t' is standardized only by POSIX. * 'ssize_t' is not required to be as wide as 'size_t', and some now-obsolete POSIX platforms had 'size_t' wider than 'ssize_t'. * Conversely, some now-obsolete platforms had 'ptrdiff_t' wider than 'size_t', which can be a win and conforms to POSIX. Won't this cause a problem with objects larger than PTRDIFF_MAX? * Typical modern or large platforms do not allocate such objects, so this is not much of a problem in practice; for example, you can safely write 'idx_t len = strlen (s);'. To port to older small platforms where allocations larger than PTRDIFF_MAX could in theory be a problem, you can use Gnulib's ialloc module, or functions like ximalloc in Gnulib's xalloc module. Why not use 'ptrdiff_t' directly? * Maintainability: When reading and modifying code, it helps to know that a certain variable cannot have negative values. For example, when you have a loop int n = ...; for (int i = 0; i < n; i++) ... or ptrdiff_t n = ...; for (ptrdiff_t i = 0; i < n; i++) ... you have to ask yourself "what if n < 0?". Whereas in idx_t n = ...; for (idx_t i = 0; i < n; i++) ... you know that this case cannot happen. Similarly, when a programmer writes idx_t = ptr2 - ptr1; there is an implied assertion that ptr1 and ptr2 point into the same object and that ptr1 <= ptr2. * Being future-proof: In the future, range types (integers which are constrained to a certain range of values) may be added to C compilers or to the C standard. Several programming languages (Ada, Haskell, Common Lisp, Pascal) already have range types. Such range types may help producing good code and good warnings. The type 'idx_t' could then be typedef'ed to a range type that is signed after promotion. */ /* In the future, idx_t could be typedef'ed to a signed range type. The clang "extended integer types", supported in Clang 11 or newer <https://clang.llvm.org/docs/LanguageExtensions.html#extended-integer-types>, are a special case of range types. However, these types don't support binary operators with plain integer types (e.g. expressions such as x > 1). Therefore, they don't behave like signed types (and not like unsigned types either). So, we cannot use them here. */ /* Use the signed type 'ptrdiff_t'. */ /* Note: ISO C does not mandate that 'size_t' and 'ptrdiff_t' have the same size, but it is so on all platforms we have seen since 1990. */ typedef ptrdiff_t idx_t; /* IDX_MAX is the maximum value of an idx_t. */ #define IDX_MAX PTRDIFF_MAX /* So far no need has been found for an IDX_WIDTH macro. Perhaps there should be another macro IDX_VALUE_BITS that does not count the sign bit and is therefore one less than PTRDIFF_WIDTH. */ #endif /* _IDX_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/gettext.h��������������������������������������������������������������������������0000644�0000000�0000000�00000025015�14226564450�012522� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Convenience header for conditional use of GNU <libintl.h>. Copyright (C) 1995-1998, 2000-2002, 2004-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #ifndef _LIBGETTEXT_H #define _LIBGETTEXT_H 1 /* NLS can be disabled through the configure --disable-nls option or through "#define ENABLE NLS 0" before including this file. */ #if defined ENABLE_NLS && ENABLE_NLS /* Get declarations of GNU message catalog functions. */ # include <libintl.h> /* You can set the DEFAULT_TEXT_DOMAIN macro to specify the domain used by the gettext() and ngettext() macros. This is an alternative to calling textdomain(), and is useful for libraries. */ # ifdef DEFAULT_TEXT_DOMAIN # undef gettext # define gettext(Msgid) \ dgettext (DEFAULT_TEXT_DOMAIN, Msgid) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ dngettext (DEFAULT_TEXT_DOMAIN, Msgid1, Msgid2, N) # endif #else /* Solaris /usr/include/locale.h includes /usr/include/libintl.h, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of <locale.h> a NOP. We don't include <libintl.h> as well because people using "gettext.h" will not include <libintl.h>, and also including <libintl.h> would fail on SunOS 4, whereas <locale.h> is OK. */ #if defined(__sun) # include <locale.h> #endif /* Many header files from the libstdc++ coming with g++ 3.3 or newer include <libintl.h>, which chokes if dcgettext is defined as a macro. So include it now, to make later inclusions of <libintl.h> a NOP. */ #if defined(__cplusplus) && defined(__GNUG__) && (__GNUC__ >= 3) # include <cstdlib> # if (__GLIBC__ >= 2 && !defined __UCLIBC__) || _GLIBCXX_HAVE_LIBINTL_H # include <libintl.h> # endif #endif /* Disabled NLS. The casts to 'const char *' serve the purpose of producing warnings for invalid uses of the value returned from these functions. On pre-ANSI systems without 'const', the config.h file is supposed to contain "#define const". */ # undef gettext # define gettext(Msgid) ((const char *) (Msgid)) # undef dgettext # define dgettext(Domainname, Msgid) ((void) (Domainname), gettext (Msgid)) # undef dcgettext # define dcgettext(Domainname, Msgid, Category) \ ((void) (Category), dgettext (Domainname, Msgid)) # undef ngettext # define ngettext(Msgid1, Msgid2, N) \ ((N) == 1 \ ? ((void) (Msgid2), (const char *) (Msgid1)) \ : ((void) (Msgid1), (const char *) (Msgid2))) # undef dngettext # define dngettext(Domainname, Msgid1, Msgid2, N) \ ((void) (Domainname), ngettext (Msgid1, Msgid2, N)) # undef dcngettext # define dcngettext(Domainname, Msgid1, Msgid2, N, Category) \ ((void) (Category), dngettext (Domainname, Msgid1, Msgid2, N)) # undef textdomain # define textdomain(Domainname) ((const char *) (Domainname)) # undef bindtextdomain # define bindtextdomain(Domainname, Dirname) \ ((void) (Domainname), (const char *) (Dirname)) # undef bind_textdomain_codeset # define bind_textdomain_codeset(Domainname, Codeset) \ ((void) (Domainname), (const char *) (Codeset)) #endif /* Prefer gnulib's setlocale override over libintl's setlocale override. */ #ifdef GNULIB_defined_setlocale # undef setlocale # define setlocale rpl_setlocale #endif /* A pseudo function call that serves as a marker for the automated extraction of messages, but does not call gettext(). The run-time translation is done at a different place in the code. The argument, String, should be a literal string. Concatenated strings and other string expressions won't work. The macro's expansion is not parenthesized, so that it is suitable as initializer for static 'char[]' or 'const char[]' variables. */ #define gettext_noop(String) String /* The separator between msgctxt and msgid in a .mo file. */ #define GETTEXT_CONTEXT_GLUE "\004" /* Pseudo function calls, taking a MSGCTXT and a MSGID instead of just a MSGID. MSGCTXT and MSGID must be string literals. MSGCTXT should be short and rarely need to change. The letter 'p' stands for 'particular' or 'special'. */ #ifdef DEFAULT_TEXT_DOMAIN # define pgettext(Msgctxt, Msgid) \ pgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #else # define pgettext(Msgctxt, Msgid) \ pgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #endif #define dpgettext(Domainname, Msgctxt, Msgid) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, LC_MESSAGES) #define dcpgettext(Domainname, Msgctxt, Msgid, Category) \ pgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, Category) #ifdef DEFAULT_TEXT_DOMAIN # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (DEFAULT_TEXT_DOMAIN, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #else # define npgettext(Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (NULL, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #endif #define dnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, LC_MESSAGES) #define dcnpgettext(Domainname, Msgctxt, Msgid, MsgidPlural, N, Category) \ npgettext_aux (Domainname, Msgctxt GETTEXT_CONTEXT_GLUE Msgid, Msgid, MsgidPlural, N, Category) #if defined __GNUC__ || defined __clang__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * pgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, int category) { const char *translation = dcgettext (domain, msg_ctxt_id, category); if (translation == msg_ctxt_id) return msgid; else return translation; } #if defined __GNUC__ || defined __clang__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * npgettext_aux (const char *domain, const char *msg_ctxt_id, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { const char *translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); if (translation == msg_ctxt_id || translation == msgid_plural) return (n == 1 ? msgid : msgid_plural); else return translation; } /* The same thing extended for non-constant arguments. Here MSGCTXT and MSGID can be arbitrary expressions. But for string literals these macros are less efficient than those above. */ #include <string.h> /* GNULIB_NO_VLA can be defined to disable use of VLAs even if supported. This relates to the -Wvla and -Wvla-larger-than warnings, enabled in the default GCC many warnings set. This allows programs to disable use of VLAs, which may be unintended, or may be awkward to support portably, or may have security implications due to non-deterministic stack usage. */ #if (!defined GNULIB_NO_VLA \ && defined __STDC_VERSION__ && 199901L <= __STDC_VERSION__ \ && !defined __STDC_NO_VLA__) # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 1 #else # define _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS 0 #endif #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS #include <stdlib.h> #endif #define pgettext_expr(Msgctxt, Msgid) \ dcpgettext_expr (NULL, Msgctxt, Msgid, LC_MESSAGES) #define dpgettext_expr(Domainname, Msgctxt, Msgid) \ dcpgettext_expr (Domainname, Msgctxt, Msgid, LC_MESSAGES) #if defined __GNUC__ || defined __clang__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcgettext (domain, msg_ctxt_id, category); found_translation = (translation != msg_ctxt_id); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return msgid; } #define npgettext_expr(Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (NULL, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #define dnpgettext_expr(Domainname, Msgctxt, Msgid, MsgidPlural, N) \ dcnpgettext_expr (Domainname, Msgctxt, Msgid, MsgidPlural, N, LC_MESSAGES) #if defined __GNUC__ || defined __clang__ __inline #else #ifdef __cplusplus inline #endif #endif static const char * dcnpgettext_expr (const char *domain, const char *msgctxt, const char *msgid, const char *msgid_plural, unsigned long int n, int category) { size_t msgctxt_len = strlen (msgctxt) + 1; size_t msgid_len = strlen (msgid) + 1; const char *translation; #if _LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS char msg_ctxt_id[msgctxt_len + msgid_len]; #else char buf[1024]; char *msg_ctxt_id = (msgctxt_len + msgid_len <= sizeof (buf) ? buf : (char *) malloc (msgctxt_len + msgid_len)); if (msg_ctxt_id != NULL) #endif { int found_translation; memcpy (msg_ctxt_id, msgctxt, msgctxt_len - 1); msg_ctxt_id[msgctxt_len - 1] = '\004'; memcpy (msg_ctxt_id + msgctxt_len, msgid, msgid_len); translation = dcngettext (domain, msg_ctxt_id, msgid_plural, n, category); found_translation = !(translation == msg_ctxt_id || translation == msgid_plural); #if !_LIBGETTEXT_HAVE_VARIABLE_SIZE_ARRAYS if (msg_ctxt_id != buf) free (msg_ctxt_id); #endif if (found_translation) return translation; } return (n == 1 ? msgid : msgid_plural); } #endif /* _LIBGETTEXT_H */ �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/windows-spawn.c��������������������������������������������������������������������0000644�0000000�0000000�00000052101�14226564447�013653� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* Auxiliary functions for the creation of subprocesses. Native Windows API. Copyright (C) 2001, 2003-2022 Free Software Foundation, Inc. Written by Bruno Haible <bruno@clisp.org>, 2003. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "windows-spawn.h" /* Get declarations of the native Windows API functions. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <errno.h> /* Get _get_osfhandle(). */ #if GNULIB_MSVC_NOTHROW # include "msvc-nothrow.h" #else # include <io.h> #endif #include <process.h> #include "findprog.h" /* Don't assume that UNICODE is not defined. */ #undef STARTUPINFO #define STARTUPINFO STARTUPINFOA #undef CreateProcess #define CreateProcess CreateProcessA #define SHELL_SPECIAL_CHARS "\"\\ \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037*?" #define SHELL_SPACE_CHARS " \001\002\003\004\005\006\007\010\011\012\013\014\015\016\017\020\021\022\023\024\025\026\027\030\031\032\033\034\035\036\037" /* Returns the length of a quoted argument string. */ static size_t quoted_arg_length (const char *string) { bool quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); size_t length; unsigned int backslashes; const char *s; length = 0; backslashes = 0; if (quote_around) length++; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') length += backslashes + 1; length++; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) length += backslashes + 1; return length; } /* Produces a quoted argument string. Stores exactly quoted_arg_length (STRING) + 1 bytes, including the final NUL byte, at MEM. Returns a pointer past the stored quoted argument string. */ static char * quoted_arg_string (const char *string, char *mem) { bool quote_around = (strpbrk (string, SHELL_SPACE_CHARS) != NULL); char *p; unsigned int backslashes; const char *s; p = mem; backslashes = 0; if (quote_around) *p++ = '"'; for (s = string; *s != '\0'; s++) { char c = *s; if (c == '"') { unsigned int j; for (j = backslashes + 1; j > 0; j--) *p++ = '\\'; } *p++ = c; if (c == '\\') backslashes++; else backslashes = 0; } if (quote_around) { unsigned int j; for (j = backslashes; j > 0; j--) *p++ = '\\'; *p++ = '"'; } *p++ = '\0'; return p; } const char ** prepare_spawn (const char * const *argv, char **mem_to_free) { size_t argc; const char **new_argv; size_t i; /* Count number of arguments. */ for (argc = 0; argv[argc] != NULL; argc++) ; /* Allocate new argument vector. */ new_argv = (const char **) malloc ((1 + argc + 1) * sizeof (const char *)); /* Add an element upfront that can be used when argv[0] turns out to be a script, not a program. On Unix, this would be "/bin/sh". On native Windows, "sh" is actually "sh.exe". We have to omit the directory part and rely on the search in PATH, because the mingw "mount points" are not visible inside Windows CreateProcess(). */ new_argv[0] = "sh.exe"; /* Put quoted arguments into the new argument vector. */ size_t needed_size = 0; for (i = 0; i < argc; i++) { const char *string = argv[i]; size_t length; if (string[0] == '\0') length = strlen ("\"\""); else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) length = quoted_arg_length (string); else length = strlen (string); needed_size += length + 1; } char *mem; if (needed_size == 0) mem = NULL; else { mem = (char *) malloc (needed_size); if (mem == NULL) { /* Memory allocation failure. */ free (new_argv); errno = ENOMEM; return NULL; } } *mem_to_free = mem; for (i = 0; i < argc; i++) { const char *string = argv[i]; new_argv[1 + i] = mem; if (string[0] == '\0') { size_t length = strlen ("\"\""); memcpy (mem, "\"\"", length + 1); mem += length + 1; } else if (strpbrk (string, SHELL_SPECIAL_CHARS) != NULL) { mem = quoted_arg_string (string, mem); } else { size_t length = strlen (string); memcpy (mem, string, length + 1); mem += length + 1; } } new_argv[1 + argc] = NULL; return new_argv; } char * compose_command (const char * const *argv) { /* Just concatenate the argv[] strings, separated by spaces. */ char *command; /* Determine the size of the needed block of memory. */ size_t total_size = 0; const char * const *ap; const char *p; for (ap = argv; (p = *ap) != NULL; ap++) total_size += strlen (p) + 1; size_t command_size = (total_size > 0 ? total_size : 1); /* Allocate the block of memory. */ command = (char *) malloc (command_size); if (command == NULL) { errno = ENOMEM; return NULL; } /* Fill it. */ if (total_size > 0) { char *cp = command; for (ap = argv; (p = *ap) != NULL; ap++) { size_t size = strlen (p) + 1; memcpy (cp, p, size - 1); cp += size; cp[-1] = ' '; } cp[-1] = '\0'; } else *command = '\0'; return command; } char * compose_envblock (const char * const *envp) { /* This is a bit hairy, because we don't have a lock that would prevent other threads from making modifications in ENVP. So, just make sure we don't crash; but if other threads are making modifications, part of the result may be wrong. */ retry: { /* Guess the size of the needed block of memory. The guess will be exact if other threads don't make modifications. */ size_t total_size = 0; const char * const *ep; const char *p; for (ep = envp; (p = *ep) != NULL; ep++) total_size += strlen (p) + 1; size_t envblock_size = total_size; /* Allocate the block of memory. */ char *envblock = (char *) malloc (envblock_size + 1); if (envblock == NULL) { errno = ENOMEM; return NULL; } size_t envblock_used = 0; for (ep = envp; (p = *ep) != NULL; ep++) { size_t size = strlen (p) + 1; if (envblock_used + size > envblock_size) { /* Other threads did modifications. Need more memory. */ envblock_size += envblock_size / 2; if (envblock_used + size > envblock_size) envblock_size = envblock_used + size; char *new_envblock = (char *) realloc (envblock, envblock_size + 1); if (new_envblock == NULL) { free (envblock); errno = ENOMEM; return NULL; } envblock = new_envblock; } memcpy (envblock + envblock_used, p, size); envblock_used += size; if (envblock[envblock_used - 1] != '\0') { /* Other threads did modifications. Restart. */ free (envblock); goto retry; } } envblock[envblock_used] = '\0'; return envblock; } } int init_inheritable_handles (struct inheritable_handles *inh_handles, bool duplicate) { /* Determine the minimal count of handles we need to care about. */ size_t handles_count; { /* _getmaxstdio <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/getmaxstdio> Default value is 512. */ unsigned int fdmax = _getmaxstdio (); if (fdmax < 3) fdmax = 3; for (; fdmax > 3; fdmax--) { unsigned int fd = fdmax - 1; /* _get_osfhandle <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/get-osfhandle> */ HANDLE handle = (HANDLE) _get_osfhandle (fd); if (handle != INVALID_HANDLE_VALUE) { DWORD hflags; /* GetHandleInformation <https://docs.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-gethandleinformation> */ if (GetHandleInformation (handle, &hflags)) { if ((hflags & HANDLE_FLAG_INHERIT) != 0) /* fd denotes an inheritable descriptor. */ break; } } } handles_count = fdmax; } /* Note: handles_count >= 3. */ /* Allocate the arrays. */ size_t handles_allocated = handles_count; HANDLE *handles_array = (HANDLE *) malloc (handles_allocated * sizeof (HANDLE)); if (handles_array == NULL) { errno = ENOMEM; return -1; } unsigned char *flags_array = (unsigned char *) malloc (handles_allocated * sizeof (unsigned char)); if (flags_array == NULL) { free (handles_array); errno = ENOMEM; return -1; } /* Fill in the two arrays. */ { HANDLE curr_process = (duplicate ? GetCurrentProcess () : INVALID_HANDLE_VALUE); unsigned int fd; for (fd = 0; fd < handles_count; fd++) { handles_array[fd] = INVALID_HANDLE_VALUE; /* _get_osfhandle <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/get-osfhandle> */ HANDLE handle = (HANDLE) _get_osfhandle (fd); if (handle != INVALID_HANDLE_VALUE) { DWORD hflags; /* GetHandleInformation <https://docs.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-gethandleinformation> */ if (GetHandleInformation (handle, &hflags)) { if ((hflags & HANDLE_FLAG_INHERIT) != 0) { /* fd denotes an inheritable descriptor. */ if (duplicate) { if (!DuplicateHandle (curr_process, handle, curr_process, &handles_array[fd], 0, TRUE, DUPLICATE_SAME_ACCESS)) { unsigned int i; for (i = 0; i < fd; i++) if (handles_array[i] != INVALID_HANDLE_VALUE) CloseHandle (handles_array[i]); free (flags_array); free (handles_array); errno = EBADF; /* arbitrary */ return -1; } } else handles_array[fd] = handle; flags_array[fd] = 0; } } } } } /* Return the result. */ inh_handles->count = handles_count; inh_handles->allocated = handles_allocated; inh_handles->handles = handles_array; inh_handles->flags = flags_array; return 0; } int compose_handles_block (const struct inheritable_handles *inh_handles, STARTUPINFO *sinfo) { /* STARTUPINFO <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa> */ sinfo->dwFlags = STARTF_USESTDHANDLES; sinfo->hStdInput = inh_handles->handles[0]; sinfo->hStdOutput = inh_handles->handles[1]; sinfo->hStdError = inh_handles->handles[2]; /* On newer versions of Windows, more file descriptors / handles than the first three can be passed. The format is as follows: Let N be an exclusive upper bound for the file descriptors to be passed. Two arrays are constructed in memory: - flags[0..N-1], of element type 'unsigned char', - handles[0..N-1], of element type 'HANDLE' or 'intptr_t'. For used entries, handles[i] is the handle, and flags[i] is a set of flags, a combination of: 1 for open file descriptors, 64 for handles of type FILE_TYPE_CHAR, 8 for handles of type FILE_TYPE_PIPE, 32 for O_APPEND. For unused entries - this may include any of the first three, since they are already passed above -, handles[i] is INVALID_HANDLE_VALUE and flags[i] is zero. lpReserved2 now is a pointer to the concatenation (without padding) of: - an 'unsigned int' whose value is N, - the contents of the flags[0..N-1] array, - the contents of the handles[0..N-1] array. cbReserved2 is the size (in bytes) of the object at lpReserved2. */ size_t handles_count = inh_handles->count; sinfo->cbReserved2 = sizeof (unsigned int) + handles_count * sizeof (unsigned char) + handles_count * sizeof (HANDLE); /* Add some padding, so that we can work with a properly aligned HANDLE array. */ char *hblock = (char *) malloc (sinfo->cbReserved2 + (sizeof (HANDLE) - 1)); if (hblock == NULL) { errno = ENOMEM; return -1; } unsigned char *flags = (unsigned char *) (hblock + sizeof (unsigned int)); char *handles = (char *) (flags + handles_count); HANDLE *handles_aligned = (HANDLE *) (((uintptr_t) handles + (sizeof (HANDLE) - 1)) & - (uintptr_t) sizeof (HANDLE)); * (unsigned int *) hblock = handles_count; { unsigned int fd; for (fd = 0; fd < handles_count; fd++) { handles_aligned[fd] = INVALID_HANDLE_VALUE; flags[fd] = 0; HANDLE handle = inh_handles->handles[fd]; if (handle != INVALID_HANDLE_VALUE /* The first three are possibly already passed above. But they need to passed here as well, if they have some flags. */ && (fd >= 3 || inh_handles->flags[fd] != 0)) { DWORD hflags; /* GetHandleInformation <https://docs.microsoft.com/en-us/windows/win32/api/handleapi/nf-handleapi-gethandleinformation> */ if (GetHandleInformation (handle, &hflags)) { if ((hflags & HANDLE_FLAG_INHERIT) != 0) { /* fd denotes an inheritable descriptor. */ handles_aligned[fd] = handle; /* On Microsoft Windows, it would be sufficient to set flags[fd] = 1. But on ReactOS or Wine, adding the bit that indicates the handle type may be necessary. So, just do it everywhere. */ flags[fd] = 1 | inh_handles->flags[fd]; switch (GetFileType (handle)) { case FILE_TYPE_CHAR: flags[fd] |= 64; break; case FILE_TYPE_PIPE: flags[fd] |= 8; break; default: break; } } else /* We shouldn't have any non-inheritable handles in inh_handles->handles. */ abort (); } } } } if (handles != (char *) handles_aligned) memmove (handles, (char *) handles_aligned, handles_count * sizeof (HANDLE)); sinfo->lpReserved2 = (BYTE *) hblock; return 0; } void free_inheritable_handles (struct inheritable_handles *inh_handles) { free (inh_handles->flags); free (inh_handles->handles); } int convert_CreateProcess_error (DWORD error) { /* Some of these errors probably cannot happen. But who knows... */ switch (error) { case ERROR_FILE_NOT_FOUND: case ERROR_PATH_NOT_FOUND: case ERROR_BAD_PATHNAME: case ERROR_BAD_NET_NAME: case ERROR_INVALID_NAME: case ERROR_DIRECTORY: return ENOENT; break; case ERROR_ACCESS_DENIED: case ERROR_SHARING_VIOLATION: return EACCES; break; case ERROR_OUTOFMEMORY: return ENOMEM; break; case ERROR_BUFFER_OVERFLOW: case ERROR_FILENAME_EXCED_RANGE: return ENAMETOOLONG; break; case ERROR_BAD_FORMAT: case ERROR_BAD_EXE_FORMAT: return ENOEXEC; break; default: return EINVAL; break; } } intptr_t spawnpvech (int mode, const char *progname, const char * const *argv, const char * const *envp, const char *currdir, HANDLE stdin_handle, HANDLE stdout_handle, HANDLE stderr_handle) { /* Validate the arguments. */ if (!(mode == P_WAIT || mode == P_NOWAIT || mode == P_DETACH || mode == P_OVERLAY) || progname == NULL || argv == NULL) { errno = EINVAL; return -1; } /* Implement the 'p' letter: search for PROGNAME in getenv ("PATH"). */ const char *resolved_progname = find_in_given_path (progname, getenv ("PATH"), NULL, false); if (resolved_progname == NULL) return -1; /* Compose the command. */ char *command = compose_command (argv); if (command == NULL) goto out_of_memory_1; /* Copy *ENVP into a contiguous block of memory. */ char *envblock; if (envp == NULL) envblock = NULL; else { envblock = compose_envblock (envp); if (envblock == NULL) goto out_of_memory_2; } /* Collect the inheritable handles. */ struct inheritable_handles inh_handles; if (init_inheritable_handles (&inh_handles, false) < 0) { int saved_errno = errno; if (envblock != NULL) free (envblock); free (command); if (resolved_progname != progname) free ((char *) resolved_progname); errno = saved_errno; return -1; } inh_handles.handles[0] = stdin_handle; inh_handles.flags[0] = 0; inh_handles.handles[1] = stdout_handle; inh_handles.flags[1] = 0; inh_handles.handles[2] = stderr_handle; inh_handles.flags[2] = 0; /* CreateProcess <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/nf-processthreadsapi-createprocessa> */ /* <https://docs.microsoft.com/en-us/windows/win32/procthread/process-creation-flags> */ DWORD process_creation_flags = (mode == P_DETACH ? DETACHED_PROCESS : 0); /* STARTUPINFO <https://docs.microsoft.com/en-us/windows/win32/api/processthreadsapi/ns-processthreadsapi-startupinfoa> */ STARTUPINFO sinfo; sinfo.cb = sizeof (STARTUPINFO); sinfo.lpReserved = NULL; sinfo.lpDesktop = NULL; sinfo.lpTitle = NULL; if (compose_handles_block (&inh_handles, &sinfo) < 0) { int saved_errno = errno; free_inheritable_handles (&inh_handles); if (envblock != NULL) free (envblock); free (command); if (resolved_progname != progname) free ((char *) resolved_progname); errno = saved_errno; return -1; } PROCESS_INFORMATION pinfo; if (!CreateProcess (resolved_progname, command, NULL, NULL, TRUE, process_creation_flags, envblock, currdir, &sinfo, &pinfo)) { DWORD error = GetLastError (); free (sinfo.lpReserved2); free_inheritable_handles (&inh_handles); if (envblock != NULL) free (envblock); free (command); if (resolved_progname != progname) free ((char *) resolved_progname); errno = convert_CreateProcess_error (error); return -1; } if (pinfo.hThread) CloseHandle (pinfo.hThread); free (sinfo.lpReserved2); free_inheritable_handles (&inh_handles); if (envblock != NULL) free (envblock); free (command); if (resolved_progname != progname) free ((char *) resolved_progname); switch (mode) { case P_WAIT: { /* Wait until it terminates. Then get its exit status code. */ switch (WaitForSingleObject (pinfo.hProcess, INFINITE)) { case WAIT_OBJECT_0: break; case WAIT_FAILED: errno = ECHILD; return -1; default: abort (); } DWORD exit_code; if (!GetExitCodeProcess (pinfo.hProcess, &exit_code)) { errno = ECHILD; return -1; } CloseHandle (pinfo.hProcess); return exit_code; } case P_NOWAIT: /* Return pinfo.hProcess, not pinfo.dwProcessId. */ return (intptr_t) pinfo.hProcess; case P_DETACH: case P_OVERLAY: CloseHandle (pinfo.hProcess); return 0; default: /* Already checked above. */ abort (); } /*NOTREACHED*/ out_of_memory_2: free (command); out_of_memory_1: if (resolved_progname != progname) free ((char *) resolved_progname); errno = ENOMEM; return -1; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/lib/basename-lgpl.c��������������������������������������������������������������������0000644�0000000�0000000�00000003465�14226564447�013553� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* basename.c -- return the last element in a file name Copyright (C) 1990, 1998-2001, 2003-2006, 2009-2022 Free Software Foundation, Inc. This file is free software: you can redistribute it and/or modify it under the terms of the GNU Lesser General Public License as published by the Free Software Foundation; either version 2.1 of the License, or (at your option) any later version. This file is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more details. You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ #include <config.h> /* Specification. */ #include "basename-lgpl.h" #include <stdbool.h> #include <string.h> #include "filename.h" char * last_component (char const *name) { char const *base = name + FILE_SYSTEM_PREFIX_LEN (name); char const *p; bool last_was_slash = false; while (ISSLASH (*base)) base++; for (p = base; *p; p++) { if (ISSLASH (*p)) last_was_slash = true; else if (last_was_slash) { base = p; last_was_slash = false; } } return (char *) base; } size_t base_len (char const *name) { size_t len; size_t prefix_len = FILE_SYSTEM_PREFIX_LEN (name); for (len = strlen (name); 1 < len && ISSLASH (name[len - 1]); len--) continue; if (DOUBLE_SLASH_IS_DISTINCT_ROOT && len == 1 && ISSLASH (name[0]) && ISSLASH (name[1]) && ! name[2]) return 2; if (FILE_SYSTEM_DRIVE_PREFIX_CAN_BE_RELATIVE && prefix_len && len == prefix_len && ISSLASH (name[prefix_len])) return prefix_len + 1; return len; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/man/�����������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�010755� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/man/Makefile.am������������������������������������������������������������������������0000644�0000000�0000000�00000005601�14226563465�012732� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.am for recutils/man # Copyright (C) 2010, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. man_MANS = recdel.1 \ recfix.1 \ recinf.1 \ recins.1 \ recsel.1 \ recset.1 \ recfmt.1 \ csv2rec.1 \ rec2csv.1 if COMPILE_MDB2REC man_MANS += mdb2rec.1 endif EXTRA_DIST = $(man_MANS) MAINTAINERCLEANFILES = $(man_MANS) # The man pages depend on the --help strings and the version number. common_mandeps = $(top_srcdir)/configure.ac \ $(top_srcdir)/utils/recutl.c # Depend on the source, not the binary; we don't need to regenerate # the binary when any source file changes, only the main one. # Use -o so that the `missing' program can infer the output file. rec2csv.1: $(top_srcdir)/utils/rec2csv.c $(common_mandeps) $(HELP2MAN) -p recutils --name="rec to csv converter" $(builddir)/../utils/rec2csv -o $@ csv2rec.1: $(top_srcdir)/utils/csv2rec.c $(common_mandeps) $(HELP2MAN) -p recutils --name="csv to rec converter" $(builddir)/../utils/csv2rec -o $@ mdb2rec.1: $(top_srcdir)/utils/mdb2rec.c $(common_mandeps) $(HELP2MAN) -p recutils --name="mdb to rec converter" $(builddir)/../utils/mdb2rec -o $@ recdel.1: $(top_srcdir)/utils/recdel.c $(common_mandeps) $(HELP2MAN) -p recutils --name="remove records from a recfile" $(builddir)/../utils/recdel -o $@ recfix.1: $(top_srcdir)/utils/recfix.c $(common_mandeps) $(HELP2MAN) -p recutils --name="check a recfile for errors" $(builddir)/../utils/recfix -o $@ recinf.1: $(top_srcdir)/utils/recinf.c $(common_mandeps) $(HELP2MAN) -p recutils --name="print information about a recfile" $(builddir)/../utils/recinf -o $@ recins.1: $(top_srcdir)/utils/recins.c $(common_mandeps) $(HELP2MAN) -p recutils --name="insert records in a recfile" $(builddir)/../utils/recins -o $@ recsel.1: $(top_srcdir)/utils/recsel.c $(common_mandeps) $(HELP2MAN) -p recutils --name="print records from a recfile" $(builddir)/../utils/recsel -o $@ recset.1: $(top_srcdir)/utils/recset.c $(common_mandeps) $(HELP2MAN) -p recutils --name="manipulate fields in a recfile" $(builddir)/../utils/recset -o $@ recfmt.1: $(top_srcdir)/utils/recfmt.c $(common_mandeps) $(HELP2MAN) -p recutils --name="apply a template to records" $(builddir)/../utils/recfmt -o $@ # End of Makefile.am �������������������������������������������������������������������������������������������������������������������������������recutils-1.9/man/recinf.1���������������������������������������������������������������������������0000644�0000000�0000000�00000003023�14226576633�012223� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .TH RECINF "1" "April 2022" "recinf 1.9" "User Commands" .SH NAME recinf \- print information about a recfile .SH SYNOPSIS .B recinf [\fI\,OPTION\/\fR]... [\fI\,FILE\/\fR]... .SH DESCRIPTION Print information about the types of records stored in the input. .TP \fB\-t\fR, \fB\-\-type\fR=\fI\,RECORD_TYPE\/\fR print information on the records having the specified type. .TP \fB\-d\fR, \fB\-\-descriptor\fR include the full record descriptors. .TP \fB\-n\fR, \fB\-\-names\-only\fR output just the names of the record files found in the input. .TP \fB\-\-help\fR print a help message and exit. .TP \fB\-\-version\fR show version and exit. .SS "Special options:" .TP \fB\-S\fR, \fB\-\-print\-sexps\fR print the data in sexps instead of rec format. .SH AUTHOR Written by Jose E. Marchesi. .SH "REPORTING BUGS" Report bugs to: bug\-recutils@gnu.org .br GNU recutils home page: <https://www.gnu.org/software/recutils/> .br General help using GNU software: <http://www.gnu.org/gethelp/> .SH COPYRIGHT Copyright \(co 2010\-2020 Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" The full documentation for .B recinf is maintained as a Texinfo manual. If the .B info and .B recinf programs are properly installed at your site, the command .IP .B info recutils .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/man/recdel.1���������������������������������������������������������������������������0000644�0000000�0000000�00000004364�14226576633�012224� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .TH RECDEL "1" "April 2022" "recdel 1.9" "User Commands" .SH NAME recdel \- remove records from a recfile .SH SYNOPSIS .B recdel [\fI\,OPTIONS\/\fR]... [\fI\,-t TYPE\/\fR] [\fI\,-n NUM | -e RECORD_EXPR | -q STR | -m NUM\/\fR] [\fI\,FILE\/\fR] .SH DESCRIPTION Remove (or comment out) records from a rec file. .TP \fB\-c\fR, \fB\-\-comment\fR comment out the matching records instead of deleting them. .TP \fB\-\-force\fR delete even in potentially dangerous situations, and if the deletion is violating record restrictions. .TP \fB\-\-no\-external\fR don't use external descriptors. .TP \fB\-\-verbose\fR give a detailed report if the integrity check fails. .TP \fB\-\-help\fR print a help message and exit. .TP \fB\-\-version\fR show version and exit. .SS "Record selection options:" .TP \fB\-i\fR, \fB\-\-case\-insensitive\fR make strings case\-insensitive in selection expressions. .TP \fB\-t\fR, \fB\-\-type\fR=\fI\,TYPE\/\fR operate on records of the specified type only. .TP \fB\-e\fR, \fB\-\-expression\fR=\fI\,RECORD_EXPR\/\fR selection expression. .TP \fB\-q\fR, \fB\-\-quick\fR=\fI\,STR\/\fR select records with fields containing a string. .TP \fB\-n\fR, \fB\-\-number\fR=\fI\,NUM\/\fR,... select specific records by position, with ranges. .TP \fB\-m\fR, \fB\-\-random\fR=\fI\,NUM\/\fR select a given number of random records. .PP If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. .SH AUTHOR Written by Jose E. Marchesi. .SH "REPORTING BUGS" Report bugs to: bug\-recutils@gnu.org .br GNU recutils home page: <https://www.gnu.org/software/recutils/> .br General help using GNU software: <http://www.gnu.org/gethelp/> .SH COPYRIGHT Copyright \(co 2010\-2020 Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" The full documentation for .B recdel is maintained as a Texinfo manual. If the .B info and .B recdel programs are properly installed at your site, the command .IP .B info recutils .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/man/recfix.1���������������������������������������������������������������������������0000644�0000000�0000000�00000003552�14226576633�012244� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .TH RECFIX "1" "April 2022" "recfix 1.9" "User Commands" .SH NAME recfix \- check a recfile for errors .SH SYNOPSIS .B recfix [\fI\,OPTION\/\fR]... [\fI\,OPERATION\/\fR] [\fI\,OP_OPTION\/\fR]... [\fI\,FILE\/\fR] .SH DESCRIPTION Check and fix rec files. .TP \fB\-\-no\-external\fR don't use external descriptors. .TP \fB\-\-force\fR force the requested operation. .TP \fB\-\-help\fR print a help message and exit. .TP \fB\-\-version\fR show version and exit. .SS "Operations:" .TP \fB\-\-check\fR check integrity of the specified file. Default. .TP \fB\-\-sort\fR sort the records in the specified file. .TP \fB\-\-auto\fR insert auto\-generated fields in records missing them. .TP \fB\-\-encrypt\fR encrypt confidential fields in the specified file. .TP \fB\-\-decrypt\fR decrypt confidential fields in the specified file. .SS "De/Encryption options:" .TP \fB\-s\fR, \fB\-\-password\fR=\fI\,PASSWORD\/\fR encrypt/decrypt with this password. .PP If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. .SH AUTHOR Written by Jose E. Marchesi. .SH "REPORTING BUGS" Report bugs to: bug\-recutils@gnu.org .br GNU recutils home page: <https://www.gnu.org/software/recutils/> .br General help using GNU software: <http://www.gnu.org/gethelp/> .SH COPYRIGHT Copyright \(co 2010\-2020 Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" The full documentation for .B recfix is maintained as a Texinfo manual. If the .B info and .B recfix programs are properly installed at your site, the command .IP .B info recutils .PP should give you access to the complete manual. ������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/man/recsel.1���������������������������������������������������������������������������0000644�0000000�0000000�00000005774�14226576634�012252� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .TH RECSEL "1" "April 2022" "recsel 1.9" "User Commands" .SH NAME recsel \- print records from a recfile .SH SYNOPSIS .B recsel [\fI\,OPTION\/\fR]... [\fI\,-t TYPE\/\fR] [\fI\,-j FIELD\/\fR] [\fI\,-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM\/\fR] [\fI\,-c | (-p|-P) FIELD_EXPR\/\fR] [\fI\,FILE\/\fR]... .SH DESCRIPTION Select and print rec data. .TP \fB\-d\fR, \fB\-\-include\-descriptors\fR print record descriptors along with the matched records. .TP \fB\-C\fR, \fB\-\-collapse\fR do not section the result in records with newlines. .TP \fB\-S\fR, \fB\-\-sort\fR=\fI\,FIELD\/\fR,... sort the output by the specified fields. .TP \fB\-G\fR, \fB\-\-group\-by\fR=\fI\,FIELD\/\fR,... group records by the specified fields. .TP \fB\-U\fR, \fB\-\-uniq\fR remove duplicated fields in the output records. .TP \fB\-s\fR, \fB\-\-password\fR=\fI\,STR\/\fR decrypt confidential fields with the given password. .TP \fB\-\-help\fR print a help message and exit. .TP \fB\-\-version\fR show version and exit. .SS "Record selection options:" .TP \fB\-i\fR, \fB\-\-case\-insensitive\fR make strings case\-insensitive in selection expressions. .TP \fB\-t\fR, \fB\-\-type\fR=\fI\,TYPE\/\fR operate on records of the specified type only. .TP \fB\-e\fR, \fB\-\-expression\fR=\fI\,RECORD_EXPR\/\fR selection expression. .TP \fB\-q\fR, \fB\-\-quick\fR=\fI\,STR\/\fR select records with fields containing a string. .TP \fB\-n\fR, \fB\-\-number\fR=\fI\,NUM\/\fR,... select specific records by position, with ranges. .TP \fB\-m\fR, \fB\-\-random\fR=\fI\,NUM\/\fR select a given number of random records. .TP \fB\-j\fR, \fB\-\-join\fR=\fI\,FIELD\/\fR perform an inner join using the specified field. .SS "Output options:" .TP \fB\-p\fR, \fB\-\-print\fR=\fI\,FIELDS\/\fR comma\-separated list of fields to print for each matching record. .TP \fB\-P\fR, \fB\-\-print\-values\fR=\fI\,FIELDS\/\fR as \fB\-p\fR, but print only the values of the selected fields. .TP \fB\-R\fR, \fB\-\-print\-row\fR=\fI\,FIELDS\/\fR as \fB\-P\fR, but separate the values with spaces instead of newlines. .TP \fB\-c\fR, \fB\-\-count\fR print a count of the matching records instead of the records themselves. .SS "Special options:" .TP \fB\-\-print\-sexps\fR print the data in sexps instead of rec format. .SH AUTHOR Written by Jose E. Marchesi. .SH "REPORTING BUGS" Report bugs to: bug\-recutils@gnu.org .br GNU recutils home page: <https://www.gnu.org/software/recutils/> .br General help using GNU software: <http://www.gnu.org/gethelp/> .SH COPYRIGHT Copyright \(co 2010\-2020 Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" The full documentation for .B recsel is maintained as a Texinfo manual. If the .B info and .B recsel programs are properly installed at your site, the command .IP .B info recutils .PP should give you access to the complete manual. ����recutils-1.9/man/recins.1���������������������������������������������������������������������������0000644�0000000�0000000�00000005101�14226576633�012237� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .TH RECINS "1" "April 2022" "recins 1.9" "User Commands" .SH NAME recins \- insert records in a recfile .SH SYNOPSIS .B recins [\fI\,OPTION\/\fR]... [\fI\,-t TYPE\/\fR] [\fI\,-n NUM | -e RECORD_EXPR | -q STR | -m NUM\/\fR] [\fI\,(-f NAME -v STR) | -r RECDATA\/\fR]... [\fI\,FILE\/\fR] .SH DESCRIPTION Insert new records in a rec database. .TP \fB\-f\fR, \fB\-\-field\fR=\fI\,STR\/\fR field name; should be followed by a \fB\-v\fR. .TP \fB\-v\fR, \fB\-\-value\fR=\fI\,STR\/\fR field value; should be preceded by an \fB\-f\fR. .TP \fB\-r\fR, \fB\-\-record\fR=\fI\,STR\/\fR record that will be inserted in the file. .TP \fB\-\-force\fR insert the record even if it is violating record restrictions. .TP \fB\-\-no\-external\fR don't use external descriptors. .TP \fB\-\-no\-auto\fR don't insert auto generated fields. .TP \fB\-\-verbose\fR give a detailed report if the integrity check fails. .TP \fB\-s\fR, \fB\-\-password\fR=\fI\,STR\/\fR encrypt confidential fields with the given password. .TP \fB\-\-help\fR print a help message and exit. .TP \fB\-\-version\fR show version and exit. .SS "Record selection options:" .TP \fB\-i\fR, \fB\-\-case\-insensitive\fR make strings case\-insensitive in selection expressions. .TP \fB\-t\fR, \fB\-\-type\fR=\fI\,TYPE\/\fR operate on records of the specified type only. .TP \fB\-e\fR, \fB\-\-expression\fR=\fI\,RECORD_EXPR\/\fR selection expression. .TP \fB\-q\fR, \fB\-\-quick\fR=\fI\,STR\/\fR select records with fields containing a string. .TP \fB\-n\fR, \fB\-\-number\fR=\fI\,NUM\/\fR,... select specific records by position, with ranges. .TP \fB\-m\fR, \fB\-\-random\fR=\fI\,NUM\/\fR select a given number of random records. .PP If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. .SH AUTHOR Written by Jose E. Marchesi. .SH "REPORTING BUGS" Report bugs to: bug\-recutils@gnu.org .br GNU recutils home page: <https://www.gnu.org/software/recutils/> .br General help using GNU software: <http://www.gnu.org/gethelp/> .SH COPYRIGHT Copyright \(co 2010\-2020 Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" The full documentation for .B recins is maintained as a Texinfo manual. If the .B info and .B recins programs are properly installed at your site, the command .IP .B info recutils .PP should give you access to the complete manual. ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/man/Makefile.in������������������������������������������������������������������������0000644�0000000�0000000�00000230665�14226573150�012745� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Makefile.am for recutils/man # Copyright (C) 2010, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @COMPILE_MDB2REC_TRUE@am__append_1 = mdb2rec.1 subdir = man ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 \ $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/calloc.m4 \ $(top_srcdir)/m4/canonicalize.m4 \ $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/clock_time.m4 \ $(top_srcdir)/m4/close.m4 $(top_srcdir)/m4/closedir.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/copy-file-range.m4 \ $(top_srcdir)/m4/copy-file.m4 $(top_srcdir)/m4/d-ino.m4 \ $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup.m4 \ $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eaccess.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ $(top_srcdir)/m4/explicit_bzero.m4 \ $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 \ $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fchdir.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \ $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \ $(top_srcdir)/m4/filenamecat.m4 \ $(top_srcdir)/m4/findprog-in.m4 $(top_srcdir)/m4/flexmember.m4 \ $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/flock.m4 \ $(top_srcdir)/m4/floor.m4 $(top_srcdir)/m4/fopen.m4 \ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ $(top_srcdir)/m4/fseek.m4 $(top_srcdir)/m4/fseeko.m4 \ $(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \ $(top_srcdir)/m4/fstatat.m4 $(top_srcdir)/m4/ftell.m4 \ $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ $(top_srcdir)/m4/getcwd-abort-bug.m4 \ $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \ $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \ $(top_srcdir)/m4/getpass.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/getrandom.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/group-member.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexpl.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrlen.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/minmax.m4 \ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkostemp.m4 \ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \ $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/opendir.m4 \ $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ $(top_srcdir)/m4/posix_spawn_faction_addchdir.m4 \ $(top_srcdir)/m4/printf-frexp.m4 \ $(top_srcdir)/m4/printf-frexpl.m4 \ $(top_srcdir)/m4/printf-posix-rpl.m4 \ $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readdir.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/remove.m4 \ $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rewinddir.m4 \ $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/safe-read.m4 \ $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/save-cwd.m4 \ $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ $(top_srcdir)/m4/selinux-context-h.m4 \ $(top_srcdir)/m4/selinux-label-h.m4 \ $(top_srcdir)/m4/selinux-selinux-h.m4 \ $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/setlocale_null.m4 \ $(top_srcdir)/m4/sh-filename.m4 \ $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ $(top_srcdir)/m4/signal_h.m4 \ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/stdio_h.m4 \ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/stpcpy.m4 \ $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ $(top_srcdir)/m4/sys_random_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink.m4 \ $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utime.m4 \ $(top_srcdir)/m4/utime_h.m4 $(top_srcdir)/m4/utimens.m4 \ $(top_srcdir)/m4/utimes.m4 \ $(top_srcdir)/m4/vasnprintf-posix.m4 \ $(top_srcdir)/m4/vasnprintf.m4 \ $(top_srcdir)/m4/vasprintf-posix.m4 \ $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ $(top_srcdir)/m4/vfprintf-posix.m4 \ $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/write.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/year2038.m4 \ $(top_srcdir)/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } man1dir = $(mandir)/man1 am__installdirs = "$(DESTDIR)$(man1dir)" NROFF = nroff MANS = $(man_MANS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_HEADERS = @BASH_HEADERS@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CURLLIBS = @CURLLIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ FLOOR_LIBM = @FLOOR_LIBM@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POSIX_SPAWN = @GL_GNULIB_POSIX_SPAWN@ GL_GNULIB_POSIX_SPAWNATTR_DESTROY = @GL_GNULIB_POSIX_SPAWNATTR_DESTROY@ GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ GL_GNULIB_POSIX_SPAWNATTR_INIT = @GL_GNULIB_POSIX_SPAWNATTR_INIT@ GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ GL_GNULIB_POSIX_SPAWNP = @GL_GNULIB_POSIX_SPAWNP@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIME = @GL_GNULIB_UTIME@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FLOCK = @HAVE_FLOCK@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SPAWN_H = @HAVE_SPAWN_H@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIME = @HAVE_UTIME@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_UTIME_H = @HAVE_UTIME_H@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGCRYPT = @LIBGCRYPT@ LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIB_ACL = @LIB_ACL@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ LIB_EACCESS = @LIB_EACCESS@ LIB_GETRANDOM = @LIB_GETRANDOM@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELINUX = @LIB_SELINUX@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBGCRYPT = @LTLIBGCRYPT@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBREADLINE = @LTLIBREADLINE@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MDBLIBS = @MDBLIBS@ MDB_DATETIME = @MDB_DATETIME@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_UTIME_H = @NEXT_AS_FIRST_DIRECTIVE_UTIME_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_SPAWN_H = @NEXT_SPAWN_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_UTIME_H = @NEXT_UTIME_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PARSE_DATETIME_BISON = @PARSE_DATETIME_BISON@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIME = @REPLACE_UTIME@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ SELINUX_LABEL_H = @SELINUX_LABEL_H@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_ACL = @USE_ACL@ USE_NLS = @USE_NLS@ UUIDLIBS = @UUIDLIBS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ crypt_support = @crypt_support@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ have_uuid = @have_uuid@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ man_MANS = recdel.1 recfix.1 recinf.1 recins.1 recsel.1 recset.1 \ recfmt.1 csv2rec.1 rec2csv.1 $(am__append_1) EXTRA_DIST = $(man_MANS) MAINTAINERCLEANFILES = $(man_MANS) # The man pages depend on the --help strings and the version number. common_mandeps = $(top_srcdir)/configure.ac \ $(top_srcdir)/utils/recutl.c all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu man/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu man/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-man1: $(man_MANS) @$(NORMAL_INSTALL) @list1=''; \ list2='$(man_MANS)'; \ test -n "$(man1dir)" \ && test -n "`echo $$list1$$list2`" \ || exit 0; \ echo " $(MKDIR_P) '$(DESTDIR)$(man1dir)'"; \ $(MKDIR_P) "$(DESTDIR)$(man1dir)" || exit 1; \ { for i in $$list1; do echo "$$i"; done; \ if test -n "$$list2"; then \ for i in $$list2; do echo "$$i"; done \ | sed -n '/\.1[a-z]*$$/p'; \ fi; \ } | while read p; do \ if test -f $$p; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; echo "$$p"; \ done | \ sed -e 'n;s,.*/,,;p;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,' | \ sed 'N;N;s,\n, ,g' | { \ list=; while read file base inst; do \ if test "$$base" = "$$inst"; then list="$$list $$file"; else \ echo " $(INSTALL_DATA) '$$file' '$(DESTDIR)$(man1dir)/$$inst'"; \ $(INSTALL_DATA) "$$file" "$(DESTDIR)$(man1dir)/$$inst" || exit $$?; \ fi; \ done; \ for i in $$list; do echo "$$i"; done | $(am__base_list) | \ while read files; do \ test -z "$$files" || { \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(man1dir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(man1dir)" || exit $$?; }; \ done; } uninstall-man1: @$(NORMAL_UNINSTALL) @list=''; test -n "$(man1dir)" || exit 0; \ files=`{ for i in $$list; do echo "$$i"; done; \ l2='$(man_MANS)'; for i in $$l2; do echo "$$i"; done | \ sed -n '/\.1[a-z]*$$/p'; \ } | sed -e 's,.*/,,;h;s,.*\.,,;s,^[^1][0-9a-z]*$$,1,;x' \ -e 's,\.[0-9a-z]*$$,,;$(transform);G;s,\n,.,'`; \ dir='$(DESTDIR)$(man1dir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(MANS) installdirs: for dir in "$(DESTDIR)$(man1dir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -test -z "$(MAINTAINERCLEANFILES)" || rm -f $(MAINTAINERCLEANFILES) clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-man install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-man1 install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-man uninstall-man: uninstall-man1 .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am install-dvi \ install-dvi-am install-exec install-exec-am install-html \ install-html-am install-info install-info-am install-man \ install-man1 install-pdf install-pdf-am install-ps \ install-ps-am install-strip installcheck installcheck-am \ installdirs maintainer-clean maintainer-clean-generic \ mostlyclean mostlyclean-generic mostlyclean-libtool pdf pdf-am \ ps ps-am tags-am uninstall uninstall-am uninstall-man \ uninstall-man1 .PRECIOUS: Makefile # Depend on the source, not the binary; we don't need to regenerate # the binary when any source file changes, only the main one. # Use -o so that the `missing' program can infer the output file. rec2csv.1: $(top_srcdir)/utils/rec2csv.c $(common_mandeps) $(HELP2MAN) -p recutils --name="rec to csv converter" $(builddir)/../utils/rec2csv -o $@ csv2rec.1: $(top_srcdir)/utils/csv2rec.c $(common_mandeps) $(HELP2MAN) -p recutils --name="csv to rec converter" $(builddir)/../utils/csv2rec -o $@ mdb2rec.1: $(top_srcdir)/utils/mdb2rec.c $(common_mandeps) $(HELP2MAN) -p recutils --name="mdb to rec converter" $(builddir)/../utils/mdb2rec -o $@ recdel.1: $(top_srcdir)/utils/recdel.c $(common_mandeps) $(HELP2MAN) -p recutils --name="remove records from a recfile" $(builddir)/../utils/recdel -o $@ recfix.1: $(top_srcdir)/utils/recfix.c $(common_mandeps) $(HELP2MAN) -p recutils --name="check a recfile for errors" $(builddir)/../utils/recfix -o $@ recinf.1: $(top_srcdir)/utils/recinf.c $(common_mandeps) $(HELP2MAN) -p recutils --name="print information about a recfile" $(builddir)/../utils/recinf -o $@ recins.1: $(top_srcdir)/utils/recins.c $(common_mandeps) $(HELP2MAN) -p recutils --name="insert records in a recfile" $(builddir)/../utils/recins -o $@ recsel.1: $(top_srcdir)/utils/recsel.c $(common_mandeps) $(HELP2MAN) -p recutils --name="print records from a recfile" $(builddir)/../utils/recsel -o $@ recset.1: $(top_srcdir)/utils/recset.c $(common_mandeps) $(HELP2MAN) -p recutils --name="manipulate fields in a recfile" $(builddir)/../utils/recset -o $@ recfmt.1: $(top_srcdir)/utils/recfmt.c $(common_mandeps) $(HELP2MAN) -p recutils --name="apply a template to records" $(builddir)/../utils/recfmt -o $@ # End of Makefile.am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ���������������������������������������������������������������������������recutils-1.9/man/mdb2rec.1��������������������������������������������������������������������������0000644�0000000�0000000�00000002561�14226576634�012302� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .TH MDB2REC "1" "April 2022" "mdb2rec 1.9" "User Commands" .SH NAME mdb2rec \- mdb to rec converter .SH SYNOPSIS .B mdb2rec [\fI\,OPTIONS\/\fR]... \fI\,MDB_FILE \/\fR[\fI\,TABLE\/\fR] .SH DESCRIPTION Convert an mdb file into a rec file. .TP \fB\-s\fR, \fB\-\-system\-tables\fR include system tables. .TP \fB\-e\fR, \fB\-\-keep\-empty\-fields\fR don't prune empty fields in the rec output. .TP \fB\-l\fR, \fB\-\-list\-tables\fR dump a list of the table names contained in the mdb file. .TP \fB\-\-help\fR print a help message and exit. .TP \fB\-\-version\fR show version and exit. .SH AUTHOR Written by Jose E. Marchesi. .SH "REPORTING BUGS" Report bugs to: bug\-recutils@gnu.org .br GNU recutils home page: <https://www.gnu.org/software/recutils/> .br General help using GNU software: <http://www.gnu.org/gethelp/> .SH COPYRIGHT Copyright \(co 2010\-2020 Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" The full documentation for .B mdb2rec is maintained as a Texinfo manual. If the .B info and .B mdb2rec programs are properly installed at your site, the command .IP .B info recutils .PP should give you access to the complete manual. �����������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/man/csv2rec.1��������������������������������������������������������������������������0000644�0000000�0000000�00000002541�14226576634�012331� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .TH CSV2REC "1" "April 2022" "csv2rec 1.9" "User Commands" .SH NAME csv2rec \- csv to rec converter .SH SYNOPSIS .B csv2rec [\fI\,OPTIONS\/\fR]... [\fI\,CSV_FILE\/\fR] .SH DESCRIPTION Convert csv data into rec data. .TP \fB\-t\fR, \fB\-\-type\fR=\fI\,TYPE\/\fR type name for the converted records; if this parameter is omitted then no type is used. .TP \fB\-s\fR, \fB\-\-strict\fR be strict parsing the csv file. .TP \fB\-e\fR, \fB\-\-omit\-empty\fR omit empty fields. .TP \fB\-\-help\fR print a help message and exit. .TP \fB\-\-version\fR show version and exit. .SH AUTHOR Written by Jose E. Marchesi. .SH "REPORTING BUGS" Report bugs to: bug\-recutils@gnu.org .br GNU recutils home page: <https://www.gnu.org/software/recutils/> .br General help using GNU software: <http://www.gnu.org/gethelp/> .SH COPYRIGHT Copyright \(co 2010\-2020 Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" The full documentation for .B csv2rec is maintained as a Texinfo manual. If the .B info and .B csv2rec programs are properly installed at your site, the command .IP .B info recutils .PP should give you access to the complete manual. ���������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/man/rec2csv.1��������������������������������������������������������������������������0000644�0000000�0000000�00000002631�14226576634�012331� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .TH REC2CSV "1" "April 2022" "rec2csv 1.9" "User Commands" .SH NAME rec2csv \- rec to csv converter .SH SYNOPSIS .B rec2csv [\fI\,OPTIONS\/\fR]... [\fI\,REC_FILE\/\fR] .SH DESCRIPTION Convert rec data into csv data. .TP \fB\-d\fR, \fB\-\-delim\fR=\fI\,char\/\fR sets the deliminator (default ',') .TP \fB\-t\fR, \fB\-\-type\fR=\fI\,TYPE\/\fR record set to convert to csv; if this parameter is omitted then the default record set is used .TP \fB\-S\fR, \fB\-\-sort\fR=\fI\,FIELDS\/\fR sort the output by the specified fields. .TP \fB\-\-help\fR print a help message and exit. .TP \fB\-\-version\fR show version and exit. .SH AUTHOR Written by Jose E. Marchesi. .SH "REPORTING BUGS" Report bugs to: bug\-recutils@gnu.org .br GNU recutils home page: <https://www.gnu.org/software/recutils/> .br General help using GNU software: <http://www.gnu.org/gethelp/> .SH COPYRIGHT Copyright \(co 2010\-2020 Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" The full documentation for .B rec2csv is maintained as a Texinfo manual. If the .B info and .B rec2csv programs are properly installed at your site, the command .IP .B info recutils .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������recutils-1.9/man/recfmt.1���������������������������������������������������������������������������0000644�0000000�0000000�00000002323�14226576634�012240� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .TH RECFMT "1" "April 2022" "recfmt 1.9" "User Commands" .SH NAME recfmt \- apply a template to records .SH SYNOPSIS .B recfmt [\fI\,OPTION\/\fR]... [\fI\,TEMPLATE\/\fR] .SH DESCRIPTION Apply a template to records read from standard input. .TP \fB\-f\fR, \fB\-\-file\fR=\fI\,FILENAME\/\fR read the template to apply from a file. .TP \fB\-\-help\fR print a help message and exit. .TP \fB\-\-version\fR show version and exit. .SH AUTHOR Written by Jose E. Marchesi. .SH "REPORTING BUGS" Report bugs to: bug\-recutils@gnu.org .br GNU recutils home page: <https://www.gnu.org/software/recutils/> .br General help using GNU software: <http://www.gnu.org/gethelp/> .SH COPYRIGHT Copyright \(co 2010\-2020 Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" The full documentation for .B recfmt is maintained as a Texinfo manual. If the .B info and .B recfmt programs are properly installed at your site, the command .IP .B info recutils .PP should give you access to the complete manual. �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/man/recset.1���������������������������������������������������������������������������0000644�0000000�0000000�00000005130�14226576634�012244� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������.\" DO NOT MODIFY THIS FILE! It was generated by help2man 1.47.4. .TH RECSET "1" "April 2022" "recset 1.9" "User Commands" .SH NAME recset \- manipulate fields in a recfile .SH SYNOPSIS .B recset [\fI\,OPTION\/\fR]... [\fI\,FILE\/\fR]... .SH DESCRIPTION Alter or delete fields in records. .TP \fB\-\-no\-external\fR don't use external descriptors. .TP \fB\-\-force\fR alter the records even if violating record restrictions. .TP \fB\-\-help\fR print a help message and exit. .TP \fB\-\-version\fR show version and exit. .SS "Record selection options:" .TP \fB\-i\fR, \fB\-\-case\-insensitive\fR make strings case\-insensitive in selection expressions. .TP \fB\-t\fR, \fB\-\-type\fR=\fI\,TYPE\/\fR operate on records of the specified type only. .TP \fB\-e\fR, \fB\-\-expression\fR=\fI\,RECORD_EXPR\/\fR selection expression. .TP \fB\-q\fR, \fB\-\-quick\fR=\fI\,STR\/\fR select records with fields containing a string. .TP \fB\-n\fR, \fB\-\-number\fR=\fI\,NUM\/\fR,... select specific records by position, with ranges. .TP \fB\-m\fR, \fB\-\-random\fR=\fI\,NUM\/\fR select a given number of random records. .SS "Field selection options:" .TP \fB\-f\fR, \fB\-\-fields\fR=\fI\,FIELDS\/\fR comma\-separated list of field names with optional subscripts. .SS "Actions:" .TP \fB\-s\fR, \fB\-\-set\fR=\fI\,VALUE\/\fR change the value of the selected fields. .TP \fB\-a\fR, \fB\-\-add\fR=\fI\,VALUE\/\fR add the selected fields with the given value. .TP \fB\-S\fR, \fB\-\-set\-add\fR=\fI\,VALUE\/\fR change the value of the selected fields. If they don't exist then add a new field with that value. .TP \fB\-r\fR, \fB\-\-rename\fR=\fI\,NAME\/\fR rename the selected fields to a given name. If an entire record set is selected then the field is renamed in the record descriptor as well. .TP \fB\-d\fR, \fB\-\-delete\fR delete the selected fields. .TP \fB\-c\fR, \fB\-\-comment\fR comment out the selected fields. .SH AUTHOR Written by Jose E. Marchesi. .SH "REPORTING BUGS" Report bugs to: bug\-recutils@gnu.org .br GNU recutils home page: <https://www.gnu.org/software/recutils/> .br General help using GNU software: <http://www.gnu.org/gethelp/> .SH COPYRIGHT Copyright \(co 2010\-2020 Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. .br This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. .SH "SEE ALSO" The full documentation for .B recset is maintained as a Texinfo manual. If the .B info and .B recset programs are properly installed at your site, the command .IP .B info recutils .PP should give you access to the complete manual. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/aclocal.m4�����������������������������������������������������������������������������0000644�0000000�0000000�00000143670�14226573136�011770� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# generated automatically by aclocal 1.16.5 -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. m4_ifndef([AC_CONFIG_MACRO_DIRS], [m4_defun([_AM_CONFIG_MACRO_DIRS], [])m4_defun([AC_CONFIG_MACRO_DIRS], [_AM_CONFIG_MACRO_DIRS($@)])]) m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl m4_if(m4_defn([AC_AUTOCONF_VERSION]), [2.71],, [m4_warning([this file was generated for autoconf 2.71. You have another version of autoconf. It may work, but is not guaranteed to. If you have problems, you may need to regenerate the build system entirely. To do so, use the procedure documented by the package, typically 'autoreconf'.])]) # Copyright (C) 2002-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_AUTOMAKE_VERSION(VERSION) # ---------------------------- # Automake X.Y traces this macro to ensure aclocal.m4 has been # generated from the m4 files accompanying Automake X.Y. # (This private macro should not be called outside this file.) AC_DEFUN([AM_AUTOMAKE_VERSION], [am__api_version='1.16' dnl Some users find AM_AUTOMAKE_VERSION and mistake it for a way to dnl require some minimum version. Point them to the right macro. m4_if([$1], [1.16.5], [], [AC_FATAL([Do not call $0, use AM_INIT_AUTOMAKE([$1]).])])dnl ]) # _AM_AUTOCONF_VERSION(VERSION) # ----------------------------- # aclocal traces this macro to find the Autoconf version. # This is a private macro too. Using m4_define simplifies # the logic in aclocal, which can simply ignore this definition. m4_define([_AM_AUTOCONF_VERSION], []) # AM_SET_CURRENT_AUTOMAKE_VERSION # ------------------------------- # Call AM_AUTOMAKE_VERSION and AM_AUTOMAKE_VERSION so they can be traced. # This function is AC_REQUIREd by AM_INIT_AUTOMAKE. AC_DEFUN([AM_SET_CURRENT_AUTOMAKE_VERSION], [AM_AUTOMAKE_VERSION([1.16.5])dnl m4_ifndef([AC_AUTOCONF_VERSION], [m4_copy([m4_PACKAGE_VERSION], [AC_AUTOCONF_VERSION])])dnl _AM_AUTOCONF_VERSION(m4_defn([AC_AUTOCONF_VERSION]))]) # AM_AUX_DIR_EXPAND -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # For projects using AC_CONFIG_AUX_DIR([foo]), Autoconf sets # $ac_aux_dir to '$srcdir/foo'. In other projects, it is set to # '$srcdir', '$srcdir/..', or '$srcdir/../..'. # # Of course, Automake must honor this variable whenever it calls a # tool from the auxiliary directory. The problem is that $srcdir (and # therefore $ac_aux_dir as well) can be either absolute or relative, # depending on how configure is run. This is pretty annoying, since # it makes $ac_aux_dir quite unusable in subdirectories: in the top # source directory, any form will work fine, but in subdirectories a # relative path needs to be adjusted first. # # $ac_aux_dir/missing # fails when called from a subdirectory if $ac_aux_dir is relative # $top_srcdir/$ac_aux_dir/missing # fails if $ac_aux_dir is absolute, # fails when called from a subdirectory in a VPATH build with # a relative $ac_aux_dir # # The reason of the latter failure is that $top_srcdir and $ac_aux_dir # are both prefixed by $srcdir. In an in-source build this is usually # harmless because $srcdir is '.', but things will broke when you # start a VPATH build or use an absolute $srcdir. # # So we could use something similar to $top_srcdir/$ac_aux_dir/missing, # iff we strip the leading $srcdir from $ac_aux_dir. That would be: # am_aux_dir='\$(top_srcdir)/'`expr "$ac_aux_dir" : "$srcdir//*\(.*\)"` # and then we would define $MISSING as # MISSING="\${SHELL} $am_aux_dir/missing" # This will work as long as MISSING is not called from configure, because # unfortunately $(top_srcdir) has no meaning in configure. # However there are other variables, like CC, which are often used in # configure, and could therefore not use this "fixed" $ac_aux_dir. # # Another solution, used here, is to always expand $ac_aux_dir to an # absolute PATH. The drawback is that using absolute paths prevent a # configured tree to be moved without reconfiguration. AC_DEFUN([AM_AUX_DIR_EXPAND], [AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` ]) # AM_COND_IF -*- Autoconf -*- # Copyright (C) 2008-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_COND_IF # _AM_COND_ELSE # _AM_COND_ENDIF # -------------- # These macros are only used for tracing. m4_define([_AM_COND_IF]) m4_define([_AM_COND_ELSE]) m4_define([_AM_COND_ENDIF]) # AM_COND_IF(COND, [IF-TRUE], [IF-FALSE]) # --------------------------------------- # If the shell condition COND is true, execute IF-TRUE, otherwise execute # IF-FALSE. Allow automake to learn about conditional instantiating macros # (the AC_CONFIG_FOOS). AC_DEFUN([AM_COND_IF], [m4_ifndef([_AM_COND_VALUE_$1], [m4_fatal([$0: no such condition "$1"])])dnl _AM_COND_IF([$1])dnl if test -z "$$1_TRUE"; then : m4_n([$2])[]dnl m4_ifval([$3], [_AM_COND_ELSE([$1])dnl else $3 ])dnl _AM_COND_ENDIF([$1])dnl fi[]dnl ]) # AM_CONDITIONAL -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_CONDITIONAL(NAME, SHELL-CONDITION) # ------------------------------------- # Define a conditional. AC_DEFUN([AM_CONDITIONAL], [AC_PREREQ([2.52])dnl m4_if([$1], [TRUE], [AC_FATAL([$0: invalid condition: $1])], [$1], [FALSE], [AC_FATAL([$0: invalid condition: $1])])dnl AC_SUBST([$1_TRUE])dnl AC_SUBST([$1_FALSE])dnl _AM_SUBST_NOTMAKE([$1_TRUE])dnl _AM_SUBST_NOTMAKE([$1_FALSE])dnl m4_define([_AM_COND_VALUE_$1], [$2])dnl if $2; then $1_TRUE= $1_FALSE='#' else $1_TRUE='#' $1_FALSE= fi AC_CONFIG_COMMANDS_PRE( [if test -z "${$1_TRUE}" && test -z "${$1_FALSE}"; then AC_MSG_ERROR([[conditional "$1" was never defined. Usually this means the macro was only invoked conditionally.]]) fi])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are a few dirty hacks below to avoid letting 'AC_PROG_CC' be # written in clear, in which case automake, when reading aclocal.m4, # will think it sees a *use*, and therefore will trigger all it's # C support machinery. Also note that it means that autoscan, seeing # CC etc. in the Makefile, will ask for an AC_PROG_CC use... # _AM_DEPENDENCIES(NAME) # ---------------------- # See how the compiler implements dependency checking. # NAME is "CC", "CXX", "OBJC", "OBJCXX", "UPC", or "GJC". # We try a few techniques and use that to set a single cache variable. # # We don't AC_REQUIRE the corresponding AC_PROG_CC since the latter was # modified to invoke _AM_DEPENDENCIES(CC); we would have a circular # dependency, and given that the user is not expected to run this macro, # just rely on AC_PROG_CC. AC_DEFUN([_AM_DEPENDENCIES], [AC_REQUIRE([AM_SET_DEPDIR])dnl AC_REQUIRE([AM_OUTPUT_DEPENDENCY_COMMANDS])dnl AC_REQUIRE([AM_MAKE_INCLUDE])dnl AC_REQUIRE([AM_DEP_TRACK])dnl m4_if([$1], [CC], [depcc="$CC" am_compiler_list=], [$1], [CXX], [depcc="$CXX" am_compiler_list=], [$1], [OBJC], [depcc="$OBJC" am_compiler_list='gcc3 gcc'], [$1], [OBJCXX], [depcc="$OBJCXX" am_compiler_list='gcc3 gcc'], [$1], [UPC], [depcc="$UPC" am_compiler_list=], [$1], [GCJ], [depcc="$GCJ" am_compiler_list='gcc3 gcc'], [depcc="$$1" am_compiler_list=]) AC_CACHE_CHECK([dependency style of $depcc], [am_cv_$1_dependencies_compiler_type], [if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_$1_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n ['s/^#*\([a-zA-Z0-9]*\))$/\1/p'] < ./depcomp` fi am__universal=false m4_case([$1], [CC], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac], [CXX], [case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac]) for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_$1_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_$1_dependencies_compiler_type=none fi ]) AC_SUBST([$1DEPMODE], [depmode=$am_cv_$1_dependencies_compiler_type]) AM_CONDITIONAL([am__fastdep$1], [ test "x$enable_dependency_tracking" != xno \ && test "$am_cv_$1_dependencies_compiler_type" = gcc3]) ]) # AM_SET_DEPDIR # ------------- # Choose a directory name for dependency files. # This macro is AC_REQUIREd in _AM_DEPENDENCIES. AC_DEFUN([AM_SET_DEPDIR], [AC_REQUIRE([AM_SET_LEADING_DOT])dnl AC_SUBST([DEPDIR], ["${am__leading_dot}deps"])dnl ]) # AM_DEP_TRACK # ------------ AC_DEFUN([AM_DEP_TRACK], [AC_ARG_ENABLE([dependency-tracking], [dnl AS_HELP_STRING( [--enable-dependency-tracking], [do not reject slow dependency extractors]) AS_HELP_STRING( [--disable-dependency-tracking], [speeds up one-time build])]) if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi AM_CONDITIONAL([AMDEP], [test "x$enable_dependency_tracking" != xno]) AC_SUBST([AMDEPBACKSLASH])dnl _AM_SUBST_NOTMAKE([AMDEPBACKSLASH])dnl AC_SUBST([am__nodep])dnl _AM_SUBST_NOTMAKE([am__nodep])dnl ]) # Generate code to set up dependency tracking. -*- Autoconf -*- # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_OUTPUT_DEPENDENCY_COMMANDS # ------------------------------ AC_DEFUN([_AM_OUTPUT_DEPENDENCY_COMMANDS], [{ # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. AS_CASE([$CONFIG_FILES], [*\'*], [eval set x "$CONFIG_FILES"], [*], [set x $CONFIG_FILES]) shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`AS_ECHO(["$am_mf"]) | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`AS_DIRNAME(["$am_mf"])` am_filepart=`AS_BASENAME(["$am_mf"])` AM_RUN_LOG([cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles]) || am_rc=$? done if test $am_rc -ne 0; then AC_MSG_FAILURE([Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE="gmake" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking).]) fi AS_UNSET([am_dirpart]) AS_UNSET([am_filepart]) AS_UNSET([am_mf]) AS_UNSET([am_rc]) rm -f conftest-deps.mk } ])# _AM_OUTPUT_DEPENDENCY_COMMANDS # AM_OUTPUT_DEPENDENCY_COMMANDS # ----------------------------- # This macro should only be invoked once -- use via AC_REQUIRE. # # This code is only required when automatic dependency tracking is enabled. # This creates each '.Po' and '.Plo' makefile fragment that we'll need in # order to bootstrap the dependency handling code. AC_DEFUN([AM_OUTPUT_DEPENDENCY_COMMANDS], [AC_CONFIG_COMMANDS([depfiles], [test x"$AMDEP_TRUE" != x"" || _AM_OUTPUT_DEPENDENCY_COMMANDS], [AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}"])]) # Do all the work for Automake. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This macro actually does too much. Some checks are only needed if # your package does certain things. But this isn't really a big deal. dnl Redefine AC_PROG_CC to automatically invoke _AM_PROG_CC_C_O. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC]) [_AM_PROG_CC_C_O ]) # AM_INIT_AUTOMAKE(PACKAGE, VERSION, [NO-DEFINE]) # AM_INIT_AUTOMAKE([OPTIONS]) # ----------------------------------------------- # The call with PACKAGE and VERSION arguments is the old style # call (pre autoconf-2.50), which is being phased out. PACKAGE # and VERSION should now be passed to AC_INIT and removed from # the call to AM_INIT_AUTOMAKE. # We support both call styles for the transition. After # the next Automake release, Autoconf can make the AC_INIT # arguments mandatory, and then we can depend on a new Autoconf # release and drop the old call support. AC_DEFUN([AM_INIT_AUTOMAKE], [AC_PREREQ([2.65])dnl m4_ifdef([_$0_ALREADY_INIT], [m4_fatal([$0 expanded multiple times ]m4_defn([_$0_ALREADY_INIT]))], [m4_define([_$0_ALREADY_INIT], m4_expansion_stack)])dnl dnl Autoconf wants to disallow AM_ names. We explicitly allow dnl the ones we care about. m4_pattern_allow([^AM_[A-Z]+FLAGS$])dnl AC_REQUIRE([AM_SET_CURRENT_AUTOMAKE_VERSION])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." AC_SUBST([am__isrc], [' -I$(srcdir)'])_AM_SUBST_NOTMAKE([am__isrc])dnl # test to see if srcdir already configured if test -f $srcdir/config.status; then AC_MSG_ERROR([source directory already configured; run "make distclean" there first]) fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi AC_SUBST([CYGPATH_W]) # Define the identity of the package. dnl Distinguish between old-style and new-style calls. m4_ifval([$2], [AC_DIAGNOSE([obsolete], [$0: two- and three-arguments forms are deprecated.]) m4_ifval([$3], [_AM_SET_OPTION([no-define])])dnl AC_SUBST([PACKAGE], [$1])dnl AC_SUBST([VERSION], [$2])], [_AM_SET_OPTIONS([$1])dnl dnl Diagnose old-style AC_INIT with new-style AM_AUTOMAKE_INIT. m4_if( m4_ifset([AC_PACKAGE_NAME], [ok]):m4_ifset([AC_PACKAGE_VERSION], [ok]), [ok:ok],, [m4_fatal([AC_INIT should be called with package and version arguments])])dnl AC_SUBST([PACKAGE], ['AC_PACKAGE_TARNAME'])dnl AC_SUBST([VERSION], ['AC_PACKAGE_VERSION'])])dnl _AM_IF_OPTION([no-define],, [AC_DEFINE_UNQUOTED([PACKAGE], ["$PACKAGE"], [Name of package]) AC_DEFINE_UNQUOTED([VERSION], ["$VERSION"], [Version number of package])])dnl # Some tools Automake needs. AC_REQUIRE([AM_SANITY_CHECK])dnl AC_REQUIRE([AC_ARG_PROGRAM])dnl AM_MISSING_PROG([ACLOCAL], [aclocal-${am__api_version}]) AM_MISSING_PROG([AUTOCONF], [autoconf]) AM_MISSING_PROG([AUTOMAKE], [automake-${am__api_version}]) AM_MISSING_PROG([AUTOHEADER], [autoheader]) AM_MISSING_PROG([MAKEINFO], [makeinfo]) AC_REQUIRE([AM_PROG_INSTALL_SH])dnl AC_REQUIRE([AM_PROG_INSTALL_STRIP])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> AC_SUBST([mkdir_p], ['$(MKDIR_P)']) # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AM_SET_LEADING_DOT])dnl _AM_IF_OPTION([tar-ustar], [_AM_PROG_TAR([ustar])], [_AM_IF_OPTION([tar-pax], [_AM_PROG_TAR([pax])], [_AM_PROG_TAR([v7])])]) _AM_IF_OPTION([no-dependencies],, [AC_PROVIDE_IFELSE([AC_PROG_CC], [_AM_DEPENDENCIES([CC])], [m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[_AM_DEPENDENCIES([CC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_CXX], [_AM_DEPENDENCIES([CXX])], [m4_define([AC_PROG_CXX], m4_defn([AC_PROG_CXX])[_AM_DEPENDENCIES([CXX])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJC], [_AM_DEPENDENCIES([OBJC])], [m4_define([AC_PROG_OBJC], m4_defn([AC_PROG_OBJC])[_AM_DEPENDENCIES([OBJC])])])dnl AC_PROVIDE_IFELSE([AC_PROG_OBJCXX], [_AM_DEPENDENCIES([OBJCXX])], [m4_define([AC_PROG_OBJCXX], m4_defn([AC_PROG_OBJCXX])[_AM_DEPENDENCIES([OBJCXX])])])dnl ]) # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi AC_SUBST([CTAGS]) if test -z "$ETAGS"; then ETAGS=etags fi AC_SUBST([ETAGS]) if test -z "$CSCOPE"; then CSCOPE=cscope fi AC_SUBST([CSCOPE]) AC_REQUIRE([AM_SILENT_RULES])dnl dnl The testsuite driver may need to know about EXEEXT, so add the dnl 'am__EXEEXT' conditional if _AM_COMPILER_EXEEXT was seen. This dnl macro is hooked onto _AC_COMPILER_EXEEXT early, see below. AC_CONFIG_COMMANDS_PRE(dnl [m4_provide_if([_AM_COMPILER_EXEEXT], [AM_CONDITIONAL([am__EXEEXT], [test -n "$EXEEXT"])])])dnl # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: <https://www.gnu.org/software/coreutils/>. If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END AC_MSG_ERROR([Your 'rm' program is bad, sorry.]) fi fi dnl The trailing newline in this macro's definition is deliberate, for dnl backward compatibility and to allow trailing 'dnl'-style comments dnl after the AM_INIT_AUTOMAKE invocation. See automake bug#16841. ]) dnl Hook into '_AC_COMPILER_EXEEXT' early to learn its expansion. Do not dnl add the conditional right here, as _AC_COMPILER_EXEEXT may be further dnl mangled by Autoconf and run in a shell conditional statement. m4_define([_AC_COMPILER_EXEEXT], m4_defn([_AC_COMPILER_EXEEXT])[m4_provide([_AM_COMPILER_EXEEXT])]) # When config.status generates a header, we must update the stamp-h file. # This file resides in the same directory as the config header # that is generated. The stamp files are numbered to have different names. # Autoconf calls _AC_AM_CONFIG_HEADER_HOOK (when defined) in the # loop where config.status creates the headers, so we can generate # our stamp files there. AC_DEFUN([_AC_AM_CONFIG_HEADER_HOOK], [# Compute $1's index in $config_headers. _am_arg=$1 _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`AS_DIRNAME(["$_am_arg"])`/stamp-h[]$_am_stamp_count]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_SH # ------------------ # Define $install_sh. AC_DEFUN([AM_PROG_INSTALL_SH], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi AC_SUBST([install_sh])]) # Copyright (C) 2003-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Check whether the underlying file-system supports filenames # with a leading dot. For instance MS-DOS doesn't. AC_DEFUN([AM_SET_LEADING_DOT], [rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null AC_SUBST([am__leading_dot])]) # Check to see how 'make' treats includes. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MAKE_INCLUDE() # ----------------- # Check whether make has an 'include' directive that can support all # the idioms we need for our automatic dependency tracking code. AC_DEFUN([AM_MAKE_INCLUDE], [AC_MSG_CHECKING([whether ${MAKE-make} supports the include directive]) cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do AM_RUN_LOG([${MAKE-make} -f confmf.$s && cat confinc.out]) AS_CASE([$?:`cat confinc.out 2>/dev/null`], ['0:this is the am__doit target'], [AS_CASE([$s], [BSD], [am__include='.include' am__quote='"'], [am__include='include' am__quote=''])]) if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* AC_MSG_RESULT([${_am_result}]) AC_SUBST([am__include])]) AC_SUBST([am__quote])]) # Fake the existence of programs that GNU maintainers use. -*- Autoconf -*- # Copyright (C) 1997-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_MISSING_PROG(NAME, PROGRAM) # ------------------------------ AC_DEFUN([AM_MISSING_PROG], [AC_REQUIRE([AM_MISSING_HAS_RUN]) $1=${$1-"${am_missing_run}$2"} AC_SUBST($1)]) # AM_MISSING_HAS_RUN # ------------------ # Define MISSING if not defined so far and test if it is modern enough. # If it is, set am_missing_run to use it, otherwise, to nothing. AC_DEFUN([AM_MISSING_HAS_RUN], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([missing])dnl if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= AC_MSG_WARN(['missing' script is too old or missing]) fi ]) # Helper functions for option handling. -*- Autoconf -*- # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_MANGLE_OPTION(NAME) # ----------------------- AC_DEFUN([_AM_MANGLE_OPTION], [[_AM_OPTION_]m4_bpatsubst($1, [[^a-zA-Z0-9_]], [_])]) # _AM_SET_OPTION(NAME) # -------------------- # Set option NAME. Presently that only means defining a flag for this option. AC_DEFUN([_AM_SET_OPTION], [m4_define(_AM_MANGLE_OPTION([$1]), [1])]) # _AM_SET_OPTIONS(OPTIONS) # ------------------------ # OPTIONS is a space-separated list of Automake options. AC_DEFUN([_AM_SET_OPTIONS], [m4_foreach_w([_AM_Option], [$1], [_AM_SET_OPTION(_AM_Option)])]) # _AM_IF_OPTION(OPTION, IF-SET, [IF-NOT-SET]) # ------------------------------------------- # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. AC_DEFUN([_AM_IF_OPTION], [m4_ifset(_AM_MANGLE_OPTION([$1]), [$2], [$3])]) # Copyright (C) 1999-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_CC_C_O # --------------- # Like AC_PROG_CC_C_O, but changed for automake. We rewrite AC_PROG_CC # to automatically call this. AC_DEFUN([_AM_PROG_CC_C_O], [AC_REQUIRE([AM_AUX_DIR_EXPAND])dnl AC_REQUIRE_AUX_FILE([compile])dnl AC_LANG_PUSH([C])dnl AC_CACHE_CHECK( [whether $CC understands -c and -o together], [am_cv_prog_cc_c_o], [AC_LANG_CONFTEST([AC_LANG_PROGRAM([])]) # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if AM_RUN_LOG([$CC -c conftest.$ac_ext -o conftest2.$ac_objext]) \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i]) if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi AC_LANG_POP([C])]) # For backward compatibility. AC_DEFUN_ONCE([AM_PROG_CC_C_O], [AC_REQUIRE([AC_PROG_CC])]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_RUN_LOG(COMMAND) # ------------------- # Run COMMAND, save the exit status in ac_status, and log it. # (This has been adapted from Autoconf's _AC_RUN_LOG macro.) AC_DEFUN([AM_RUN_LOG], [{ echo "$as_me:$LINENO: $1" >&AS_MESSAGE_LOG_FD ($1) >&AS_MESSAGE_LOG_FD 2>&AS_MESSAGE_LOG_FD ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD (exit $ac_status); }]) # Check to make sure that the build environment is sane. -*- Autoconf -*- # Copyright (C) 1996-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SANITY_CHECK # --------------- AC_DEFUN([AM_SANITY_CHECK], [AC_MSG_CHECKING([whether build environment is sane]) # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[[\\\"\#\$\&\'\`$am_lf]]*) AC_MSG_ERROR([unsafe absolute working directory name]);; esac case $srcdir in *[[\\\"\#\$\&\'\`$am_lf\ \ ]]*) AC_MSG_ERROR([unsafe srcdir value: '$srcdir']);; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$[*]" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$[*]" != "X $srcdir/configure conftest.file" \ && test "$[*]" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". AC_MSG_ERROR([ls -t appears to fail. Make sure there is not a broken alias in your environment]) fi if test "$[2]" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$[2]" = conftest.file ) then # Ok. : else AC_MSG_ERROR([newly created file is older than distributed files! Check your system clock]) fi AC_MSG_RESULT([yes]) # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi AC_CONFIG_COMMANDS_PRE( [AC_MSG_CHECKING([that generated files are newer than configure]) if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi AC_MSG_RESULT([done])]) rm -f conftest.file ]) # Copyright (C) 2009-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_SILENT_RULES([DEFAULT]) # -------------------------- # Enable less verbose build rules; with the default set to DEFAULT # ("yes" being less verbose, "no" or empty being verbose). AC_DEFUN([AM_SILENT_RULES], [AC_ARG_ENABLE([silent-rules], [dnl AS_HELP_STRING( [--enable-silent-rules], [less verbose build output (undo: "make V=1")]) AS_HELP_STRING( [--disable-silent-rules], [verbose build output (undo: "make V=0")])dnl ]) case $enable_silent_rules in @%:@ ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=m4_if([$1], [yes], [0], [1]);; esac dnl dnl A few 'make' implementations (e.g., NonStop OS and NextStep) dnl do not support nested variable expansions. dnl See automake bug#9928 and bug#10237. am_make=${MAKE-make} AC_CACHE_CHECK([whether $am_make supports nested variables], [am_cv_make_support_nested_variables], [if AS_ECHO([['TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit']]) | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi]) if test $am_cv_make_support_nested_variables = yes; then dnl Using '$V' instead of '$(V)' breaks IRIX make. AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AC_SUBST([AM_V])dnl AM_SUBST_NOTMAKE([AM_V])dnl AC_SUBST([AM_DEFAULT_V])dnl AM_SUBST_NOTMAKE([AM_DEFAULT_V])dnl AC_SUBST([AM_DEFAULT_VERBOSITY])dnl AM_BACKSLASH='\' AC_SUBST([AM_BACKSLASH])dnl _AM_SUBST_NOTMAKE([AM_BACKSLASH])dnl ]) # Copyright (C) 2001-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # AM_PROG_INSTALL_STRIP # --------------------- # One issue with vendor 'install' (even GNU) is that you can't # specify the program used to strip binaries. This is especially # annoying in cross-compiling environments, where the build's strip # is unlikely to handle the host's binaries. # Fortunately install-sh will honor a STRIPPROG variable, so we # always use install-sh in "make install-strip", and initialize # STRIPPROG with the value of the STRIP variable (set by the user). AC_DEFUN([AM_PROG_INSTALL_STRIP], [AC_REQUIRE([AM_PROG_INSTALL_SH])dnl # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. dnl Don't test for $cross_compiling = yes, because it might be 'maybe'. if test "$cross_compiling" != no; then AC_CHECK_TOOL([STRIP], [strip], :) fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" AC_SUBST([INSTALL_STRIP_PROGRAM])]) # Copyright (C) 2006-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_SUBST_NOTMAKE(VARIABLE) # --------------------------- # Prevent Automake from outputting VARIABLE = @VARIABLE@ in Makefile.in. # This macro is traced by Automake. AC_DEFUN([_AM_SUBST_NOTMAKE]) # AM_SUBST_NOTMAKE(VARIABLE) # -------------------------- # Public sister of _AM_SUBST_NOTMAKE. AC_DEFUN([AM_SUBST_NOTMAKE], [_AM_SUBST_NOTMAKE($@)]) # Check how to create a tarball. -*- Autoconf -*- # Copyright (C) 2004-2021 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # _AM_PROG_TAR(FORMAT) # -------------------- # Check how to create a tarball in format FORMAT. # FORMAT should be one of 'v7', 'ustar', or 'pax'. # # Substitute a variable $(am__tar) that is a command # writing to stdout a FORMAT-tarball containing the directory # $tardir. # tardir=directory && $(am__tar) > result.tar # # Substitute a variable $(am__untar) that extract such # a tarball read from stdin. # $(am__untar) < result.tar # AC_DEFUN([_AM_PROG_TAR], [# Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AC_SUBST([AMTAR], ['$${TAR-tar}']) # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar m4_if([$1], [ustar], [plaintar]) pax cpio none' m4_if([$1], [v7], [am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -'], [m4_case([$1], [ustar], [# The POSIX 1988 'ustar' format is defined with fixed-size fields. # There is notably a 21 bits limit for the UID and the GID. In fact, # the 'pax' utility can hang on bigger UID/GID (see automake bug#8343 # and bug#13588). am_max_uid=2097151 # 2^21 - 1 am_max_gid=$am_max_uid # The $UID and $GID variables are not portable, so we need to resort # to the POSIX-mandated id(1) utility. Errors in the 'id' calls # below are definitely unexpected, so allow the users to see them # (that is, avoid stderr redirection). am_uid=`id -u || echo unknown` am_gid=`id -g || echo unknown` AC_MSG_CHECKING([whether UID '$am_uid' is supported by ustar format]) if test $am_uid -le $am_max_uid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi AC_MSG_CHECKING([whether GID '$am_gid' is supported by ustar format]) if test $am_gid -le $am_max_gid; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) _am_tools=none fi], [pax], [], [m4_fatal([Unknown tar format])]) AC_MSG_CHECKING([how to create a $1 tar archive]) # Go ahead even if we have the value already cached. We do so because we # need to set the values for the 'am__tar' and 'am__untar' variables. _am_tools=${am_cv_prog_tar_$1-$_am_tools} for _am_tool in $_am_tools; do case $_am_tool in gnutar) for _am_tar in tar gnutar gtar; do AM_RUN_LOG([$_am_tar --version]) && break done am__tar="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$$tardir"' am__tar_="$_am_tar --format=m4_if([$1], [pax], [posix], [$1]) -chf - "'"$tardir"' am__untar="$_am_tar -xf -" ;; plaintar) # Must skip GNU tar: if it does not support --format= it doesn't create # ustar tarball either. (tar --version) >/dev/null 2>&1 && continue am__tar='tar chf - "$$tardir"' am__tar_='tar chf - "$tardir"' am__untar='tar xf -' ;; pax) am__tar='pax -L -x $1 -w "$$tardir"' am__tar_='pax -L -x $1 -w "$tardir"' am__untar='pax -r' ;; cpio) am__tar='find "$$tardir" -print | cpio -o -H $1 -L' am__tar_='find "$tardir" -print | cpio -o -H $1 -L' am__untar='cpio -i -H $1 -d' ;; none) am__tar=false am__tar_=false am__untar=false ;; esac # If the value was cached, stop now. We just wanted to have am__tar # and am__untar set. test -n "${am_cv_prog_tar_$1}" && break # tar/untar a dummy directory, and stop if the command works. rm -rf conftest.dir mkdir conftest.dir echo GrepMe > conftest.dir/file AM_RUN_LOG([tardir=conftest.dir && eval $am__tar_ >conftest.tar]) rm -rf conftest.dir if test -s conftest.tar; then AM_RUN_LOG([$am__untar <conftest.tar]) AM_RUN_LOG([cat conftest.dir/file]) grep GrepMe conftest.dir/file >/dev/null 2>&1 && break fi done rm -rf conftest.dir AC_CACHE_VAL([am_cv_prog_tar_$1], [am_cv_prog_tar_$1=$_am_tool]) AC_MSG_RESULT([$am_cv_prog_tar_$1])]) AC_SUBST([am__tar]) AC_SUBST([am__untar]) ]) # _AM_PROG_TAR m4_include([m4/00gnulib.m4]) m4_include([m4/__inline.m4]) m4_include([m4/absolute-header.m4]) m4_include([m4/access.m4]) m4_include([m4/acl.m4]) m4_include([m4/alloca.m4]) m4_include([m4/asm-underscore.m4]) m4_include([m4/autobuild.m4]) m4_include([m4/base64.m4]) m4_include([m4/bison.m4]) m4_include([m4/btowc.m4]) m4_include([m4/builtin-expect.m4]) m4_include([m4/calloc.m4]) m4_include([m4/canonicalize.m4]) m4_include([m4/chdir-long.m4]) m4_include([m4/clock_time.m4]) m4_include([m4/close.m4]) m4_include([m4/closedir.m4]) m4_include([m4/codeset.m4]) m4_include([m4/copy-file-range.m4]) m4_include([m4/copy-file.m4]) m4_include([m4/d-ino.m4]) m4_include([m4/dirent_h.m4]) m4_include([m4/dirfd.m4]) m4_include([m4/double-slash-root.m4]) m4_include([m4/dup.m4]) m4_include([m4/dup2.m4]) m4_include([m4/eaccess.m4]) m4_include([m4/eealloc.m4]) m4_include([m4/environ.m4]) m4_include([m4/errno_h.m4]) m4_include([m4/error.m4]) m4_include([m4/euidaccess.m4]) m4_include([m4/execute.m4]) m4_include([m4/explicit_bzero.m4]) m4_include([m4/exponentd.m4]) m4_include([m4/exponentf.m4]) m4_include([m4/exponentl.m4]) m4_include([m4/extensions.m4]) m4_include([m4/extern-inline.m4]) m4_include([m4/fatal-signal.m4]) m4_include([m4/fchdir.m4]) m4_include([m4/fcntl-o.m4]) m4_include([m4/fcntl.m4]) m4_include([m4/fcntl_h.m4]) m4_include([m4/fdopendir.m4]) m4_include([m4/filenamecat.m4]) m4_include([m4/findprog-in.m4]) m4_include([m4/flexmember.m4]) m4_include([m4/float_h.m4]) m4_include([m4/flock.m4]) m4_include([m4/floor.m4]) m4_include([m4/fopen.m4]) m4_include([m4/fpending.m4]) m4_include([m4/fpieee.m4]) m4_include([m4/fprintf-posix.m4]) m4_include([m4/free.m4]) m4_include([m4/frexp.m4]) m4_include([m4/frexpl.m4]) m4_include([m4/fseek.m4]) m4_include([m4/fseeko.m4]) m4_include([m4/fseterr.m4]) m4_include([m4/fstat.m4]) m4_include([m4/fstatat.m4]) m4_include([m4/ftell.m4]) m4_include([m4/ftello.m4]) m4_include([m4/fwriting.m4]) m4_include([m4/getcwd-abort-bug.m4]) m4_include([m4/getcwd-path-max.m4]) m4_include([m4/getcwd.m4]) m4_include([m4/getdelim.m4]) m4_include([m4/getdtablesize.m4]) m4_include([m4/getgroups.m4]) m4_include([m4/getline.m4]) m4_include([m4/getopt.m4]) m4_include([m4/getpagesize.m4]) m4_include([m4/getpass.m4]) m4_include([m4/getprogname.m4]) m4_include([m4/getrandom.m4]) m4_include([m4/gettext.m4]) m4_include([m4/gettime.m4]) m4_include([m4/gettimeofday.m4]) m4_include([m4/gnulib-common.m4]) m4_include([m4/gnulib-comp.m4]) m4_include([m4/group-member.m4]) m4_include([m4/host-cpu-c-abi.m4]) m4_include([m4/iconv.m4]) m4_include([m4/include_next.m4]) m4_include([m4/intlmacosx.m4]) m4_include([m4/intmax_t.m4]) m4_include([m4/inttypes.m4]) m4_include([m4/inttypes_h.m4]) m4_include([m4/isnand.m4]) m4_include([m4/isnanf.m4]) m4_include([m4/isnanl.m4]) m4_include([m4/langinfo_h.m4]) m4_include([m4/largefile.m4]) m4_include([m4/ldexpl.m4]) m4_include([m4/lib-ld.m4]) m4_include([m4/lib-link.m4]) m4_include([m4/lib-prefix.m4]) m4_include([m4/libtool.m4]) m4_include([m4/limits-h.m4]) m4_include([m4/localcharset.m4]) m4_include([m4/locale-fr.m4]) m4_include([m4/locale-ja.m4]) m4_include([m4/locale-zh.m4]) m4_include([m4/locale_h.m4]) m4_include([m4/localeconv.m4]) m4_include([m4/lock.m4]) m4_include([m4/lseek.m4]) m4_include([m4/lstat.m4]) m4_include([m4/ltoptions.m4]) m4_include([m4/ltsugar.m4]) m4_include([m4/ltversion.m4]) m4_include([m4/lt~obsolete.m4]) m4_include([m4/malloc.m4]) m4_include([m4/malloca.m4]) m4_include([m4/math_h.m4]) m4_include([m4/mbrlen.m4]) m4_include([m4/mbrtowc.m4]) m4_include([m4/mbsinit.m4]) m4_include([m4/mbstate_t.m4]) m4_include([m4/mbtowc.m4]) m4_include([m4/memchr.m4]) m4_include([m4/mempcpy.m4]) m4_include([m4/memrchr.m4]) m4_include([m4/minmax.m4]) m4_include([m4/mkdir.m4]) m4_include([m4/mkostemp.m4]) m4_include([m4/mkstemp.m4]) m4_include([m4/mktime.m4]) m4_include([m4/mmap-anon.m4]) m4_include([m4/mode_t.m4]) m4_include([m4/msvc-inval.m4]) m4_include([m4/msvc-nothrow.m4]) m4_include([m4/multiarch.m4]) m4_include([m4/nl_langinfo.m4]) m4_include([m4/nls.m4]) m4_include([m4/nocrash.m4]) m4_include([m4/nstrftime.m4]) m4_include([m4/obstack.m4]) m4_include([m4/off_t.m4]) m4_include([m4/open-cloexec.m4]) m4_include([m4/open-slash.m4]) m4_include([m4/open.m4]) m4_include([m4/openat.m4]) m4_include([m4/opendir.m4]) m4_include([m4/parse-datetime.m4]) m4_include([m4/pathmax.m4]) m4_include([m4/pipe.m4]) m4_include([m4/pkg.m4]) m4_include([m4/po.m4]) m4_include([m4/posix_spawn.m4]) m4_include([m4/posix_spawn_faction_addchdir.m4]) m4_include([m4/printf-frexp.m4]) m4_include([m4/printf-frexpl.m4]) m4_include([m4/printf-posix-rpl.m4]) m4_include([m4/printf.m4]) m4_include([m4/progtest.m4]) m4_include([m4/pthread_rwlock_rdlock.m4]) m4_include([m4/quote.m4]) m4_include([m4/quotearg.m4]) m4_include([m4/raise.m4]) m4_include([m4/random_r.m4]) m4_include([m4/rawmemchr.m4]) m4_include([m4/read-file.m4]) m4_include([m4/read.m4]) m4_include([m4/readdir.m4]) m4_include([m4/readline.m4]) m4_include([m4/readlink.m4]) m4_include([m4/realloc.m4]) m4_include([m4/reallocarray.m4]) m4_include([m4/regex.m4]) m4_include([m4/remove.m4]) m4_include([m4/rename.m4]) m4_include([m4/rewinddir.m4]) m4_include([m4/rmdir.m4]) m4_include([m4/safe-read.m4]) m4_include([m4/safe-write.m4]) m4_include([m4/save-cwd.m4]) m4_include([m4/sched_h.m4]) m4_include([m4/secure_getenv.m4]) m4_include([m4/selinux-context-h.m4]) m4_include([m4/selinux-label-h.m4]) m4_include([m4/selinux-selinux-h.m4]) m4_include([m4/setenv.m4]) m4_include([m4/setlocale_null.m4]) m4_include([m4/sh-filename.m4]) m4_include([m4/sig_atomic_t.m4]) m4_include([m4/sigaction.m4]) m4_include([m4/signal_h.m4]) m4_include([m4/signalblocking.m4]) m4_include([m4/signbit.m4]) m4_include([m4/size_max.m4]) m4_include([m4/spawn_h.m4]) m4_include([m4/ssize_t.m4]) m4_include([m4/stat-time.m4]) m4_include([m4/stat.m4]) m4_include([m4/stdalign.m4]) m4_include([m4/stdarg.m4]) m4_include([m4/stdbool.m4]) m4_include([m4/stddef_h.m4]) m4_include([m4/stdint.m4]) m4_include([m4/stdint_h.m4]) m4_include([m4/stdio_h.m4]) m4_include([m4/stdlib_h.m4]) m4_include([m4/stpcpy.m4]) m4_include([m4/strcase.m4]) m4_include([m4/strcasestr.m4]) m4_include([m4/strchrnul.m4]) m4_include([m4/strdup.m4]) m4_include([m4/strerror.m4]) m4_include([m4/string_h.m4]) m4_include([m4/strings_h.m4]) m4_include([m4/strsep.m4]) m4_include([m4/strverscmp.m4]) m4_include([m4/sys_file_h.m4]) m4_include([m4/sys_random_h.m4]) m4_include([m4/sys_socket_h.m4]) m4_include([m4/sys_stat_h.m4]) m4_include([m4/sys_time_h.m4]) m4_include([m4/sys_types_h.m4]) m4_include([m4/sys_wait_h.m4]) m4_include([m4/tempname.m4]) m4_include([m4/threadlib.m4]) m4_include([m4/time_h.m4]) m4_include([m4/time_r.m4]) m4_include([m4/time_rz.m4]) m4_include([m4/timegm.m4]) m4_include([m4/timespec.m4]) m4_include([m4/tm_gmtoff.m4]) m4_include([m4/tmpdir.m4]) m4_include([m4/tzset.m4]) m4_include([m4/ungetc.m4]) m4_include([m4/unistd-safer.m4]) m4_include([m4/unistd_h.m4]) m4_include([m4/unlink.m4]) m4_include([m4/unlocked-io.m4]) m4_include([m4/utime.m4]) m4_include([m4/utime_h.m4]) m4_include([m4/utimens.m4]) m4_include([m4/utimes.m4]) m4_include([m4/vasnprintf-posix.m4]) m4_include([m4/vasnprintf.m4]) m4_include([m4/vasprintf-posix.m4]) m4_include([m4/vasprintf.m4]) m4_include([m4/version-etc.m4]) m4_include([m4/vfprintf-posix.m4]) m4_include([m4/visibility.m4]) m4_include([m4/wait-process.m4]) m4_include([m4/waitpid.m4]) m4_include([m4/warn-on-use.m4]) m4_include([m4/wchar_h.m4]) m4_include([m4/wchar_t.m4]) m4_include([m4/wcrtomb.m4]) m4_include([m4/wctob.m4]) m4_include([m4/wctomb.m4]) m4_include([m4/wctype_h.m4]) m4_include([m4/wint_t.m4]) m4_include([m4/write.m4]) m4_include([m4/xalloc.m4]) m4_include([m4/xsize.m4]) m4_include([m4/year2038.m4]) m4_include([m4/zzgnulib.m4]) ������������������������������������������������������������������������recutils-1.9/ChangeLog������������������������������������������������������������������������������0000644�0000000�0000000�00001047320�14226571711�011673� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������2022-04-16 Jose E. Marchesi <jemarch@gnu.org> * configure.ac: Bump version to 1.9. 2022-04-16 Jose E. Marchesi <jemarch@gnu.org> CVE-2021-46019 CVE-2021-46022 CVE-2021-46022 * src/rec-parser.c (rec_parse_comment): Avoid 0xff being interpreted as (int) -1. 2022-04-16 Jose E. Marchesi <jemarch@gnu.org> * configure.ac: Remove algol68 bindings support. * Makefile.am: Remove algol68 from subdirs. * algol68: Delete. 2022-04-16 Jose E. Marchesi <jemarch@gnu.org> * src/rec.h (enum rec_std_field_e): New entry REC_FIELD_SINGULAR. * src/rec-field-name.c (fnames): Add "singular". * src/rec-rset.c (rec_rset_rename_field): Handle REC_FIELD_SINGULAR. * src/rec-int.c (rec_int_check_record_singular): Define. * torture/utils/recfix.sh: New tests. * doc/recutils.texi: Document singular fields. 2022-01-20 Liliana Marie Prikler <liliana.prikler@ist.tugraz.at> * utils/recfmt.c (recfmt_apply_template): Add open brace as excluded character in regexp. * torture/utils/recfmt.sh (recfmt-curly): New test. 2020-11-18 Jose E. Marchesi <jemarch@gnu.org> * src/rec-parser.c (rec_parse_db): Fix error reporting. 2020-11-11 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el: Delete. * etc/ob-rec.el: Likewise. * etc/Makefile.am (dist_lisp_DATA): Remove. * doc/rec-mode.texi: Delete. * doc/Makefile.am (info_TEXINFOS): Remove rec-mode.texi. * m4/pkg.m4: New file. 2020-11-09 Antoine Kalmbach <ane@iki.fi> * utils/recutl.c (recutl_read_file): Update to latest signature from gnulib 2020-11-07 Antoine Kalmbach <ane@iki.fi> * etc/rec-mode.el (rec-summary-fields): split by comma and space (rec-cmd-show-summary): split minibuffer input 2020-11-06 John Soo <jsoo1@asu.edu> * doc/recutils.texi: Fix long option name for -j/--join. 2020-10-18 Jose E. Marchesi <jemarch@gnu.org> * src/rec.c: Simplify code. * src/rec.h: Likewise. * src/rec-buf.c: Likewise. * src/rec-comment.c: Likewise. * src/rec-crypt.c: Likewise. * src/rec-crypt-dummy.c: Likewise. * src/rec-db.c: Likewise. * src/rec-fex.c: Likewise. * src/rec-field.c: Likewise. * src/rec-field-name.c: Likewise. * src/rec-int.c: Likewise. * src/rec-parser.c: Likewise. * src/rec-record.c: Likewise. * src/rec-rset.c: Likewise. * src/rec-sex.c: Likewise. * src/rec-sex-ast.c: Likewise. * src/rec-sex-ast.h: Likewise. * src/rec-sex-lex.l: Likewise. * src/rec-sex-parser.c: Likewise. * src/rec-sex-parser.h: Likewise. * src/rec-sex-tab.y: Likewise. * src/rec-types.c: Likewise. * src/rec-utils.c: Likewise. * src/rec-utils.h: Likewise. * src/rec-writer.c: Likewise. * utils/csv2rec.c: Likewise. * utils/mdb2rec.c: Likewise. * utils/rec2csv.c: Likewise. * utils/recdel.c: Likewise. * utils/recfix.c: Likewise. * utils/recfmt.c: Likewise. * utils/recinf.c: Likewise. * utils/recins.c: Likewise. * utils/recsel.c: Likewise. * utils/recset.c: Likewise. * utils/recutl.c: Likewise. * utils/recutl.h: Likewise. 2020-10-16 Jose E. Marchesi <jemarch@gnu.org> * src/rec-mset.c: Simplify code. * src/rec.h: Likewise. 2020-06-02 Jose E. Marchesi <jemarch@gnu.org> * utils/recfix.c (recfix_do_check): Print an error message when a file cannot be read. (recfix_do_sort): Likewise. (recfix_do_crypt): Likewise. (recfix_do_auto): Likewise. 2020-04-28 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi: Templates have slots, not spots. 2020-03-29 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Simple Selections): Fix typo. 2020-02-04 Jose E. Marchesi <jemarch@gnu.org> * src/rec-rset.c (rec_rset_type_field_fex): Allow blanks before the FEX in a %type field. * torture/utils/recfix.sh (blanks-before-fex-in-type): New test file. (recfix-blanks-before-fex-in-type): New test. * NEWS: Updated. 2020-01-29 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Invoking recins): Do not claim that recins creates non-existent files. * NEWS: Update. 2020-01-29 Dominic Walden <dominic@dwalden.co.uk> * doc/recutils.texi (Using ob-rec.el): New chapter. 2020-01-29 Jose E. Marchesi <jemarch@gnu.org> * utils/csv2rec.c (field_cb): Detect and error when a row contains too many columns. 2020-01-28 Jose E. Marchesi <jemarch@gnu.org> * utils/recutl.c (recutl_print_version): Update copyright. * src/rec-crypt-dummy.c: Likewise. 2020-01-28 Jose E. Marchesi <jemarch@gnu.org> * configure.ac: Update version to 1.8.90. * NEWS: Updated for 1.8.90. 2020-01-28 Jose E. Marchesi <jose.marchesi@oracle.com> * bootstrap.conf (gnulib_modules): Import the modules copy-file and remove. * utils/recutl.c (recutl_write_db_to_file): Copy and remove instead of rename temporary files. 2020-01-27 Jose E. Marchesi <jemarch@gnu.org> * bootstrap.conf (gnulib_modules): Import module update-copyright. * gnulib: Update submodule reference to latest master. 2019-06-23 Jose E. Marchesi <jemarch@gnu.org> * utils/csv2rec.c (recutl_print_help): Spelling fix: ommited -> omitted. * man/csv2rec.1: Regenerated. Reported by Sven Wick. 2019-02-04 Brandon Invergo <brandon@invergo.net> * utils/rec2csv.c (DELIM_ARG): New long option. (rec2csv_parse_args): Use DELIM_ARG and put RECORD_TYPE_ARG in the right place. 2019-01-07 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Top): Spurious menu header "Remote Descriptors" removed. 2019-01-03 Jose E. Marchesi <jose.marchesi@oracle.com> * configure.ac: Bump version to 1.8. * NEWS: Likewise. 2018-05-31 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Bash Builtins): Note that some systems require the full path to the bash builtin shared object. 2018-03-19 Jose E. Marchesi <jemarch@gnu.org> * configure.ac: Bump version to 1.7.91. * NEWS: Likewise. 2018-03-19 Jose E. Marchesi <jemarch@gnu.org> * bootstrap.conf (gnulib_modules): Use the signal-h module to guarantee a GNU-like signal.h. 2018-03-18 Jose E. Marchesi <jose.marchesi@oracle.com> * utils/recutl.c (PATH_MAX): handle systems where it is not defined such as GNU/Hurd. 2018-03-18 Jose E. Marchesi <jose.marchesi@oracle.com> * src/rec-aggregate.c (REC_AGGREGATE_ACCUM_FUNC): Use %g instead of %zd to print the result of aggregate functions. * torture/utils/recsel.sh: Adjust expected result. 2018-03-17 Jose E. Marchesi <jemarch@gnu.org> * bash/readrec.c (readrec_builtin): Immediately return EX_USAGE if no_options returns != 0. Fixes readrec --help. 2018-03-17 Jose E. Marchesi <jemarch@gnu.org> * utils/recutl.c (recutl_print_version): Update copyright years. * bash/readrec.c: Include config.h. * bash/Makefile.am (COMMON_CPPFLAGS): Include the builddir lib. * src/rec-sex-tab.y: Use new form of %name-prefix. 2018-03-17 gettextize <bug-gnu-gettext@gnu.org> * m4/iconv.m4: Upgrade to gettext-0.19.8.1. * m4/lib-ld.m4: Upgrade to gettext-0.19.8.1. * m4/lib-link.m4: Upgrade to gettext-0.19.8.1. * m4/lib-prefix.m4: Upgrade to gettext-0.19.8.1. * m4/progtest.m4: Upgrade to gettext-0.19.8.1. * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.19.8. 2018-03-17 Jose E. Marchesi <jemarch@gnu.org> * src/Makefile.am (AM_CPPFLAGS): Include the builddir lib. * configure.ac: Update version to 1.8. * doc/recutils.texi (Bash Builtins): Add missing -f in enable example. * bash/Makefile.am (COMMON_CPPFLAGS): Add BASH_HEADERS/include to the headers search path. 2018-02-24 Jose E. Marchesi <jemarch@gnu.org> * configure.ac: Use the subdir-object automake option in AM_INIT_AUTOMAKE. 2018-02-15 Jose E. Marchesi <jose.marchesi@oracle.com> * utils/recutl.c (recutl_write_db_to_file): Do not use the current directory to hold temporary files. 2017-01-31 Jose E. Marchesi <jose.marchesi@oracle.com> * README-dev: Correct typo. 2017-01-26 Jose E. Marchesi <jose.marchesi@oracle.com> * etc/rec-mode.el: Require tabulated-list. 2016-12-19 Jose E. Marchesi <jemarch@gnu.org> * NEWS: Prepare release 1.8. 2016-10-18 Jose E. Marchesi <jose.marchesi@oracle.com> * etc/rec-mode.el (rec-mode): Fix typo and run the actual rec-mode-hook. 2016-10-05 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-remove-continuation-line-marker-overlays): Fix setq typo. 2016-09-13 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi: "Latinajo" fixed. Reported by Giovanni Ridolfi. 2016-06-21 Jose E. Marchesi <jemarch@gnu.org> * etc/ob-rec.el (org-babel-execute:rec): orb-babel switched to lexical-binding. Define a result-params locally. 2015-11-02 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-field-name-face): New face. (rec-keyword-face): Likewise. (rec-continuation-line-face): Likewise. (rec-font-lock-keywords): Use the rec-* faces. 2015-05-05 Jose E. Marchesi <jemarch@gnu.org> src,torture: numeric results from aggregated functions are signed. * src/rec-aggregate.c (REC_AGGREGATE_ACCUM_FUNC): Numeric results from aggregated functions are signed. * torture/utils/recsel.sh (negative_fields): New test input file. (recsel-aggregate-sum-negative): New test. 2015-04-28 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-cmd-compile): Quote the file name argument before to pass it to recfix in a shell. 2015-04-27 Jose E. Marchesi <jemarch@gnu.org> * README: Copyright years updated. * utils/recutl.h: Likewise. * utils/recutl.c: Likewise. * utils/recset.c: Likewise. * utils/recsel.c: Likewise. * utils/recins.c: Likewise. * utils/recinf.c: Likewise. * utils/recfmt.c: Likewise. * utils/recfix.c: Likewise. * utils/recdel.c: Likewise. * utils/rec2csv.c: Likewise. * utils/mdb2rec.c: Likewise. * utils/Makefile.am: Likewise. * utils/csv2rec.c: Likewise. * torture/utils/testutils.sh: Likewise. * torture/utils/recset.sh: Likewise. * torture/utils/recsel.sh: Likewise. * torture/utils/recins.sh: Likewise. * torture/utils/recinf.sh: Likewise. * torture/utils/recfmt.sh: Likewise. * torture/utils/recfix.sh: Likewise. * torture/utils/recdel.sh: Likewise. * torture/utils/rec2csv.sh: Likewise. * torture/utils/p-recsel.sh: Likewise. * torture/utils/Makefile.am: Likewise. * torture/utils/csv2rec.sh: Likewise. * torture/utils/config.sh.in: Likewise. * torture/runtests.c: Likewise. * torture/rec-writer/tsuite-rec-writer.c: Likewise. * torture/rec-writer/rec-write-rset.c: Likewise. * torture/rec-writer/rec-writer-new.c: Likewise. * torture/rec-writer/rec-write-record.c: Likewise. * torture/rec-writer/rec-writer-destroy.c: Likewise. * torture/rec-writer/rec-write-field-str.c: Likewise. * torture/rec-writer/rec-write-field-name-str.c: Likewise. * torture/rec-writer/rec-write-field-name.c: Likewise. * torture/rec-writer/rec-write-field.c: Likewise. * torture/rec-writer/rec-write-db.c: Likewise. * torture/rec-writer/rec-write-comment-str.c: Likewise. * torture/rec-writer/rec-write-comment.c: Likewise. * torture/rec-type-reg/tsuite-rec-type-reg.c: Likewise. * torture/rec-type-reg/rec-type-reg-new.c: Likewise. * torture/rec-type-reg/rec-type-reg-get.c: Likewise. * torture/rec-type-reg/rec-type-reg-destroy.c: Likewise. * torture/rec-type/tsuite-rec-type.c: Likewise. * torture/rec-type/rec-type-set-name.c: Likewise. * torture/rec-type/rec-type-new.c: Likewise. * torture/rec-type/rec-type-name.c: Likewise. * torture/rec-type/rec-type-kind-str.c: Likewise. * torture/rec-type/rec-type-kind.c: Likewise. * torture/rec-type/rec-type-equal-p.c: Likewise. * torture/rec-type/rec-type-destroy.c: Likewise. * torture/rec-type/rec-type-descr-p.c: Likewise. * torture/rec-type/rec-type-check.c: Likewise. * torture/rec-sex/tsuite-rec-sex.c: Likewise. * torture/rec-sex/rec-sex-new.c: Likewise. * torture/rec-sex/rec-sex-eval.c: Likewise. * torture/rec-sex/rec-sex-destroy.c: Likewise. * torture/rec-sex/rec-sex-compile.c: Likewise. * torture/rec-record/tsuite-rec-record.c: Likewise. * torture/rec-record/rec-record-size.c: Likewise. * torture/rec-record/rec-record-remove-field.c: Likewise. * torture/rec-record/rec-record-new.c: Likewise. * torture/rec-record/rec-record-insert-field.c: Likewise. * torture/rec-record/rec-record-field-p.c: Likewise. * torture/rec-parser/tsuite-rec-parser.c: Likewise. * torture/rec-parser/rec-parse-rset.c: Likewise. * torture/rec-parser/rec-parser-seek-mem.c: Likewise. * torture/rec-parser/rec-parser-reset.c: Likewise. * torture/rec-parser/rec-parser-perror.c: Likewise. * torture/rec-parser/rec-parser-new-str.c: Likewise. * torture/rec-parser/rec-parser-new-mem.c: Likewise. * torture/rec-parser/rec-parser-new.c: Likewise. * torture/rec-parser/rec-parser-error.c: Likewise. * torture/rec-parser/rec-parser-eof.c: Likewise. * torture/rec-parser/rec-parse-record-str.c: Likewise. * torture/rec-parser/rec-parse-record.c: Likewise. * torture/rec-parser/rec-parser-destroy.c: Likewise. * torture/rec-parser/rec-parse-field-name-str.c: Likewise. * torture/rec-parser/rec-parse-field-name.c: Likewise. * torture/rec-parser/rec-parse-field.c: Likewise. * torture/rec-parser/rec-parse-db.c: Likewise. * torture/rec-mset/tsuite-rec-mset.c: Likewise. * torture/rec-mset/rec-mset-type-p.c: Likewise. * torture/rec-mset/rec-mset-register-type.c: Likewise. * torture/rec-mset/rec-mset-new.c: Likewise. * torture/rec-mset/rec-mset-get-at.c: Likewise. * torture/rec-mset/rec-mset-dup.c: Likewise. * torture/rec-mset/rec-mset-count.c: Likewise. * torture/rec-mset/elem-types.h: Likewise. * torture/rec-field-name/tsuite-rec-field-name.c: Likewise. * torture/rec-field-name/rec-field-name-p.c: Likewise. * torture/rec-field-name/rec-field-name-normalise.c: Likewise. * torture/rec-field-name/rec-field-name-equal-p.c: Likewise. * torture/rec-field/tsuite-rec-field.c: Likewise. * torture/rec-field/rec-field-value.c: Likewise. * torture/rec-field/rec-field-to-comment.c: Likewise. * torture/rec-field/rec-field-source.c: Likewise. * torture/rec-field/rec-field-set-value.c: Likewise. * torture/rec-field/rec-field-set-source.c: Likewise. * torture/rec-field/rec-field-set-name.c: Likewise. * torture/rec-field/rec-field-set-location.c: Likewise. * torture/rec-field/rec-field-set-char-location.c: Likewise. * torture/rec-field/rec-field-new.c: Likewise. * torture/rec-field/rec-field-name.c: Likewise. * torture/rec-field/rec-field-location-str.c: Likewise. * torture/rec-field/rec-field-location.c: Likewise. * torture/rec-field/rec-field-equal-p.c: Likewise. * torture/rec-field/rec-field-dup.c: Likewise. * torture/rec-field/rec-field-destroy.c: Likewise. * torture/rec-field/rec-field-char-location-str.c: Likewise. * torture/rec-field/rec-field-char-location.c: Likewise. * torture/rec-fex/tsuite-rec-fex.c: Likewise. * torture/rec-fex/rec-fex-str.c: Likewise. * torture/rec-fex/rec-fex-sort.c: Likewise. * torture/rec-fex/rec-fex-size.c: Likewise. * torture/rec-fex/rec-fex-new.c: Likewise. * torture/rec-fex/rec-fex-get.c: Likewise. * torture/rec-fex/rec-fex-elem-rewrite-to.c: Likewise. * torture/rec-fex/rec-fex-elem-min.c: Likewise. * torture/rec-fex/rec-fex-elem-max.c: Likewise. * torture/rec-fex/rec-fex-elem-field-name.c: Likewise. * torture/rec-fex/rec-fex-destroy.c: Likewise. * torture/rec-fex/rec-fex-check.c: Likewise. * torture/rec-comment/tsuite-rec-comment.c: Likewise. * torture/rec-comment/rec-comment-text.c: Likewise. * torture/rec-comment/rec-comment-set-text.c: Likewise. * torture/rec-comment/rec-comment-new.c: Likewise. * torture/rec-comment/rec-comment-equal-p.c: Likewise. * torture/rec-comment/rec-comment-dup.c: Likewise. * torture/rec-comment/rec-comment-destroy.c: Likewise. * torture/Makefile.am: Likewise. * src/rec-writer.c: Likewise. * src/rec-utils.h: Likewise. * src/rec-utils.c: Likewise. * src/rec-types.c: Likewise. * src/rec-sex-tab.y: Likewise. * src/rec-sex-parser.h: Likewise. * src/rec-sex-parser.c: Likewise. * src/rec-sex-lex.l: Likewise. * src/rec-sex.c: Likewise. * src/rec-sex-ast.h: Likewise. * src/rec-sex-ast.c: Likewise. * src/rec-rset.c: Likewise. * src/rec-record.c: Likewise. * src/rec-int.c: Likewise. * src/rec.h: Likewise. * src/rec-field-name.c: Likewise. * src/rec-field.c: Likewise. * src/rec-fex.c: Likewise. * src/rec-db.c: Likewise. * src/rec-crypt-dummy.c: Likewise. * src/rec-crypt.c: Likewise. * src/rec-comment.c: Likewise. * src/rec.c: Likewise. * src/rec-aggregate.c: Likewise. * src/rec-buf.c: Likewise. * src/Makefile.am: Likewise. * libcsv/libcsv.c: Likewise. * libcsv/Makefile.am: Likewise. * etc/rec-mode.el: Likewise. * etc/ob-rec.el: Likewise. * etc/Makefile.am: Likewise. * doc/recutils.texi: Likewise. * doc/rec-mode.texi: Likewise. * bash/testrec.c: Likewise. * bash/readrec.c: Likewise. * bash/Makefile.am: Likewise. * algol68/rec.a68: Likewise. * algol68/Makefile.am: Likewise. * README-dev: Likewise. * NEWS: Likewise. * Makefile.am: Likewise. * configure.ac: Likewise. * ChangeLog: Likewise. 2015-04-27 Jose E. Marchesi <jose.marchesi@oracle.com> * src/rec-mset.c (rec_mset_dup): Check for the right variable in order to duplicate names. 2015-04-27 Jose E. Marchesi <jemarch@gnu.org> * src/rec-parser.c: Some minor stylish changes. 2015-04-09 Jose E. Marchesi <jemarch@gnu.org> rec-mode: support search-insensitive searches. * doc/rec-mode.texi (Searches): Document prefix arguments in both rec-cmd-selext-fast and rec-cmd-select-sex. * etc/rec-mode.el (rec-cmd-select-fast): Support case-insensitive searches. (rec-cmd-select-sex): Likewise. 2014-10-10 MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu> Fix detection of check on systems where it needs extra CFLAGS or libraries. * configure.ac: Use PKG_CHECK_MODULES to detect check. * torture/Makefile.am (runtests_CFLAGS, runtests_LDADD): Pass CFLAGS and LIBS that pkg-config specifies for check. 2014-04-20 Jose E. Marchesi <jemarch@gnu.org> src,torture: fix evaluation of sexes containing #NAME expressions. * torture/utils/recsel.sh (recurrent-fields-2): New input file. (recsel-sex-sharp-multiple-2): New test. * src/rec-sex.c (rec_sex_eval): Do not permute fields appearing as arguments to the # operator in the selection expression. * src/rec-sex-ast.c (rec_sex_ast_hash_name_p_1): New function. (rec_sex_ast_name_p): Likewise. 2014-03-27 Jose E. Marchesi <jemarch@gnu.org> * utils/csv2rec.c (field_cb): Fix printf template slots to avoid warnings when compiled with -Wformat. Patch by Daiki Ueno. 2014-03-26 Jose E. Marchesi <jemarch@gnu.org> * .gitignore: Ignore some more files. 2014-03-26 Jose E. Marchesi <jemarch@gnu.org> torture: fix make -j check. * torture/utils/recins.sh: Fix names of input files so they contain a reference to he test suite. * torture/utils/testutils.sh (test_declare_input_file): prepend the test suite name to the input files in order to prevent collisions with other tests. (test_tool): Likewise. 2014-03-24 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.7. * configure.ac: Version bumped to 1.7. * FSD (Version): Updated to 1.7. 2014-03-22 Jose E. Marchesi <jose.marchesi@oracle.com> * configure.ac: fix non-portable test construct. 2014-03-21 Jose E. Marchesi <jose.marchesi@oracle.com> rec-mode: fix a call to string-match-p with invalid arguments. * etc/rec-mode.el (rec-check-type): fix a call to string-match-p. 2014-03-21 Jose E. Marchesi <jose.marchesi@oracle.com> rec-mode: several fixes while removing byte-compilation warnings. * etc/rec-mode.el (require): Require cl only at compile time. (rec-record-assoc): Use mapc instead of mapcar. (rec-field-type): Likewise. (rec-record-names): Likewise. (rec-cmd-edit-field): Likewise. (rec-update-buffer-descriptors): Likewise. (rec-goto-type): Likewise. (rec-cmd-statistic): Likewise. (rec-mode): Defvar all buffer-local variables. (rec-cmd-edit-field): Likewise. (rec-cmd-show-info): Make it work when the buffer is not associated with a file on disk. (rec-cmd-compile): Use insert-buffer-substring instead of insert-buffer. (rec-cmd-show-info): Likewise. (rec-update-buffer-descriptors-and-check): Use with-current-buffer instead of save-excursion+set-buffer. (rec-idle-scheduler-mode): Use called-interactively-p instead of interactive-p. (rec-parse-type): Use string-to-number instead of string-to-int. (rec-check-type): Likewise. Rec-idle related functions removed. 2014-03-20 Jose E. Marchesi <jemarch@gnu.org> * utils/recutl.c (recutl_print_version): Update copyright year. 2014-03-19 Jose E. Marchesi <jemarch@gnu.org> * NEWS: Added entry for 1.6.90 listing changes since 1.6. * configure.ac: Version bumped to 1.6.90. 2014-03-19 Jose E. Marchesi <jemarch@gnu.org> manual: clarify how auto fields are generated. * doc/recutils.texi (Counters): mention 'recins' instead of the 'conforming application'. (Auto-Generated Fields): Clarify that auto fields are physically inserted in the recfile by recins. 2014-03-19 Jose E. Marchesi <jemarch@gnu.org> src: simplify the implementation of mandatory/unique/prohibit integrity checking. * src/rec-int.c (rec_int_check_record_mandatory): Rewrote to use rec_int_collect_field_list. (rec_int_check_record_unique): Likewise. (rec_int_check_record_prohibit): Likewise. 2014-03-18 Jose E. Marchesi <jemarch@gnu.org> src,torture,doc: support for the %allowed special field. * doc/recutils.texi (Record Sets Properties): Link to the new section Allowed Fields. (Allowed Fields): New section. * torture/utils/recfix.sh (allowed-ok-1): New input file. (allowed-ok-2): Likewise. (allowed-ok-3): Likewise. (allowed-ok-4): Likewise. (allowed-ok-5): Likewise. (allowed-xfail-1): Likewise. (allowed-xfail-2): Likewise. (allowed-xfail-3): Likewise. (recfix-allowed-ok-1): New test. (recfix-allowed-ok-2): Likewise. (recfix-allowed-ok-3): Likewise. (recfix-allowed-ok-4): Likewise. (recfix-allowed-ok-5): Likewise. (recfix-allowed-xfail-1): Likewise. (recfix-allowed-xfail-2): Likewise. (recfix-allowed-xfail-3): Likewise. * src/rec-int.c (rec_int_check_record_allowed): New function. (rec_int_collect_field_list): Likewise. (rec_int_check_descriptor): Support %allowed. (rec_int_check_record): Call rec_int_check_record_allowed. * src/rec-field-name.c (fnames): added entry for %allowed. 2014-03-18 Jose E. Marchesi <jemarch@gnu.org> src,doc: allow merging anonymous records coming from several files in a single record set. * doc/recutils.texi (Simple Selections): Document that anonymous records from several files will be merged. * src/rec.h: Prototype and doc for rec_mset_elem_dup_data. * src/rec-mset.c (rec_mset_elem_dup_data): New function. (rec_mset_iterator_next): Update data only if it is not NULL. * utils/recutl.c (recutl_parse_db_from_file): do not complain about duplicated default record sets. (recutl_parse_db_from_file): append anonymous records to the anonymous rset of the database if it exists. 2014-03-17 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Simple Selections): Improve the readability of side-to-side example sections. 2014-03-06 Jose E. Marchesi <jose.marchesi@oracle.com> rec-mode: fix selection commands when there are more than one record sets on the recfile. * etc/rec-mode.el (rec-cmd-select-fast): Use the current record set. (rec-cmd-select-sex): Likewise. 2014-03-02 Jose E. Marchesi <jemarch@gnu.org> src: do not abort with an error when decrypting partially encrypted records. * src/rec-crypt.c (rec_decrypt_record): Stop decrypting fields in case of an error. (rec_encrypt_field): Return true in case a field is not encrypted. 2014-02-25 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi: all @w and @kbd macros used to denote command line options removed. 2014-02-24 Jose E. Marchesi <jemarch@gnu.org> src: an ignored tab can also separate field names from field values. * src/rec-parser.c (rec_parse_field_name): tabs also finish field names. * torture/utils/recsel.sh (ignored-first-blanks): New input file. (recsel-ignored-first-blanks): New test. 2014-02-24 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi: Many English changes in the manual. Patch by Karl Berry. (Selecting by Type): use LastRelease instead of URL in the gnu.rec example. 2014-02-24 Jose E. Marchesi <jemarch@gnu.org> * src/Makefile.am (librec_la_LDFLAGS): Bump current version to 1. 2014-02-19 Jose E. Marchesi <jemarch@gnu.org> bash: fix librec linking issue. * bash/Makefile.am (readrec_la_LIBADD): Link with the built librec. (testrec_la_LIBADD): Likewise. 2014-02-19 Jose E. Marchesi <jemarch@gnu.org> src,utils,manual,torture: new writer option to omit comments when outputting rsets and comments. recsel now uses this option to avoid emitting record fields. * torture/rec-writer/rec-write-record.c (rec_write_record_skip_comments): New test. * src/rec-writer.c (rec_write_record): Do not write out comments in records if the writer was configured to skip them. (rec_write_rset): Likewise. * utils/recsel.c (recsel_process_data): Configure the writer to skip comments. * torture/utils/recsel.sh (record-with-comments): New input file. (recsel-record-with-comments): New test. * torture/rec-writer/rec-write-comment.c (rec_write_comment_sexp): Adapted to new writer api. (rec_write_comment_nominal): Likewise. * torture/rec-writer/rec-write-record.c (rec_write_record_nominal): Likewise. (rec_write_record_sexp): Likewise. (rec_write_record_values): Likewise. (rec_write_record_values_row): Likewise. * torture/rec-writer/rec-write-field-name.c (rec_write_field_name_nominal): Likewise. (rec_write_field_name_sexp): Likewise. * torture/rec-writer/rec-write-field.c (rec_write_field_nominal): Likewise. (rec_write_field_values): Likewise. (rec_write_field_values_row): Likewise. (rec_write_field_sexp): Likewise. * torture/rec-writer/rec-write-rset.c (rec_write_rset_nominal): Likewise. * utils/recinf.c (print_info_file): Use the new interface for setting a writer's mode. * bash/readrec.c (readrec_builtin): Likewise. * utils/recsel.c (recsel_process_data): Likewise. * src/rec-writer.c (rec_writer_set_skip_comments): New function. (rec_writer_set_mode): Likewise. (rec_writer_new_common): Set default values for the skip_comments_p and mode writer options. (rec_write_comment): Use the writer mode attribute instead of an extra argument to determine how to output the entity. (rec_write_field): Likewise. (rec_write_field_name): Likewise. (rec_write_record): Likewise. (rec_write_rset): Likewise. (rec_write_field_str): Likewise. (rec_write_field_name_str): Likewise. (rec_write_comment_str): Likewise. * src/rec.h: Copyright year updated. Prototypes for rec_writer_set_skip_comments and rec_writer_set_mode added. * src/rec-writer.c (struct rec_writer_s): New fields skip_comments_p and mode. 2014-02-18 Jose E. Marchesi <jemarch@gnu.org> manual: clarify decryption using several passwords. * doc/recutils.texi (Confidential Fields): Added a note clarifying that it is not possible to specify several passwords in a single invocation of recsel. 2014-02-17 Jose E. Marchesi <jemarch@gnu.org> manual: follow the standard way in naming the utility invokation nodes. * doc/recutils.texi (Invoking recinf): Renamed from node recinf. (Invoking recsel): Likewise. (Invoking recins): Likewise. (Invoking recdel): Likewise. (Invoking recset): Likewise. (Invoking recfix): Likewise. (Invoking recfmt): Likewise. (Invoking csv2rec): Likewise. (Invoking rec2csv): Likewise. (Invoking mdb2rec): Likewise. "Fast" access links in the "Individual utilities" dircategory fixed to point to the nodes renamed above. (Documenting Records): Xref fixed. (Sorted Output): Likewise. (Deleting Records): Likewise. (Editing Fields): Likewise. (CSV Files): Likewise. 2014-02-17 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Scalar Field Types): Improve misleading example. * doc/recutils.texi (SEX Operands): Improve wording. 2014-02-17 Jose E. Marchesi <jemarch@gnu.org> * src/rec-types.c (rec_type_parse_enum): Code typo fixed. Reported by David Binderman. 2014-02-05 Jose E. Marchesi <jemarch@gnu.org> utils: avoid segfaults in several utilities when reading invalid rec data. * utils/rec2csv.c (main): Avoid a segmentation fault when a file containing invalid data is fetched to rec2csv. * utils/recfmt.c (main): Likewise for recfmt. 2014-01-02 Jose E. Marchesi <jemarch@gnu.org> doc: document the -d|--delim command line argument for rec2csv. * doc/recutils.texi (rec2csv): Document -d|--delim. 2014-01-02 Jose E. Marchesi <jemarch@gnu.org> utils: add support for arbitrary delimiter characters in rec2csv. Patch provided by Sebastian Fischmeister. * utils/rec2csv.c: New global variable rec2csv_delim. (recutl_print_help): Documentation of -d. (rec2csv_parse_args): Process the new -d|--delim command line argument. (rec2csv_generate_csv): Likewise. 2014-01-02 Jose E. Marchesi <jemarch@gnu.org> Do not maintain local copies of .po files which are available in the translation project. * po/fr.po: file removed. * po/sr.po: Likewise. * po/uk.po: Likewise. * po/vi.po: Likewise. 2012-12-04 Julio C. M. Ramirez <rikijpn@member.fsf.org> * etc/rec-mode.el: adding numeric prefix to next/previous records commands for recmode on emacs. * doc/rec-mode.texi: adding mention for feature above. 2013-11-04 Jose E. Marchesi <jemarch@gnu.org> * .gitignore: Updated with the files generated when building the rec-mode manual. 2013-11-03 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.6. * configure.ac: Version number bumped to 1.6. * NEWS: Updated for 1.6. 2013-11-01 Jose E. Marchesi <jemarch@gnu.org> src,doc,torture: support single-char fields in selection expressions. * torture/utils/recsel.sh (single-char-field-names): New input file. (recsel-sex-single-char-field-names): New test. * doc/recutils.texi (Fields): Update regexp denoting field names to allow fields composed by just one character. * src/rec-sex-lex.l: Allow fields composed by just one character in selection expressions. 2013-10-29 Jose E. Marchesi <jose.marchesi@oracle.com> * NEWS: Updated for 1.5.90. * bash/readrec.c: Do not check for HAVE_UNISTD_H. It is always true with the corresponding gnulib module. * bash/testrec.c: Likewise. * configure.ac: Version number bumped to 1.5.90. 2013-10-29 Jose E. Marchesi <jose.marchesi@oracle.com> * doc/recutils.texi (Auto-Generated Fields): Finished. (Counters): Written. (Unique Identifiers): Likewise. (Time-Stamps): Likewise. 2013-10-17 Jose E. Marchesi <jose.marchesi@oracle.com> manual: document grouping and aggregate functions. * doc/recutils.texi (Grouping Records): New section. (Aggregate Functions): Likewise. 2013-09-24 Jose E. Marchesi <jose.marchesi@oracle.com> recfmt: do not append a newline to the expansion of templates. Reported by Aikido Guy. * torture/utils/recfmt.sh: Adjust tests to not expect a newline inserted between applications of a template. * utils/recfmt.c (recfmt_process_db): Do not append a newline to the expansion of a template. 2013-08-29 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-fast-selection): Avoid an extra useless window when using rec-fast-selection. 2013-08-25 Jose E. Marchesi <jemarch@gnu.org> utils: avoid the replication of out-of-memory string literals. * utils/csv2rec.c (field_cb): Use recutl_out_of_memory. (record_cb): Likewise. (record_cb): Likewise. * utils/recsel.c (recsel_process_data): Likewise. * utils/recins.c (recins_add_new_record): Likewise. (recins_add_new_record): Likewise. * utils/recfix.c (recfix_do_sort): Likewise. (recfix_do_auto): Likewise. * utils/recdel.c (recdel_delete_records): Likewise. * utils/rec2csv.c (rec2csv_generate_csv): Likewise. (rec2csv_generate_csv): Likewise. (rec2csv_process_data): Likewise. * utils/mdb2rec.c (process_table): Likewise. (process_mdb): Likewise. * utils/recutl.c (recutl_out_of_memory): New function. 2013-08-25 Jose E. Marchesi <jemarch@gnu.org> manual: documentation for the readrec bash built-in. * doc/recutils.texi (Bash Builtins): Written. (readrec): Written. 2013-08-25 Jose E. Marchesi <jemarch@gnu.org> src: remove hard limit on the number of types registered in a types registry. * src/rec-types.c (REC_TYPE_REG_ALLOC_TYPES): New constant. (rec_type_reg_destroy): Free the dynamically allocated list of types. (rec_type_reg_new): Initialize new->types to NULL. (rec_type_reg_add): Adjusted to new semantics. (rec_type_reg_add_synonym): Likewise. 2013-08-25 Jose E. Marchesi <jemarch@gnu.org> src: remove hard limit on the number of literals in enum types. * src/rec-types.c (REC_ENUM_NAMES): Removed. (REC_ENUM_ALLOC_NAMES): Created. (rec_type_new): Initialize the size of the type to 0. (rec_type_parse_enum): Allocate memory for the enumeration names in chunks. (rec_type_equal_p): Adjusted to new semantics. (rec_type_check_enum): Likewise. 2013-08-25 Jose E. Marchesi <jemarch@gnu.org> csv2rec: remove hard limit on the number of fields in the input csv file. * utils/csv2rec.c (MAX_FIELDS): Removed. (process_csv): Initialize ctx.field_names to NULL. (field_cb): Re-allocate memory for fields when needed, in blocks with size ALLOC_FIELDS. 2013-08-25 Jose E. Marchesi <jemarch@gnu.org> * bash/readrec.c (readrec_builtin): Define variables after fields in the read records. 2013-08-24 Jose E. Marchesi <jemarch@gnu.org> * bash/Makefile.am (testrec_la_LDFLAGS): Define. (testrec_la_LIBADD): Likewise. (testrec_la_SOURCES): Likewise. * bash/testrec.c: New file. (testrec_builtin): New function. 2013-08-24 Jose E. Marchesi <jemarch@gnu.org> manual: empty stub sections for the bash bulitins. * doc/recutils.texi (Bash Builtins): New stub chapter. (readrec): Likewise. (testrec): Likewise. 2013-08-24 Jose E. Marchesi <jemarch@gnu.org> bash: readrec builtin. * Makefile.am (SUBDIRS): Recurse to the bash/ subdirectory. * configure.ac: Handle --enable-bash-builtins and detection of bash headers. Handle --with-bash-headers. * bash/Makefile.am: New file. * bash/readrec.c: New file. (readrec_builtin): New function. 2013-08-21 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Replacing Records With recins): New section. 2013-08-16 Jose E. Marchesi <jemarch@gnu.org> src: optimize the sex evaluator. * src/rec-sex.c (rec_sex_eval): Optimize the evaluator, avoiding discarding the same field twice. 2013-08-16 Jose E. Marchesi <jemarch@gnu.org> src: support for field marks in records. * src/rec-record.c (rec_record_reset_marks): New function. (rec_record_mark_field): Likewise. (rec_record_field_mark): Likewise. * src/rec-field.c (struct rec_field_s): New attribute 'mark' for fields. (rec_field_dup): Field mark. (rec_field_set_mark): New function. (rec_field_mark): Likewise. * src/rec.h: Prototypes for the new field marks related functions. 2013-08-15 Giuseppe Scrivano <gscrivan@redhat.com> * src/rec-aggregate.c (rec_aggregate_std_count): Fix formatting string. (rec_aggregate_std_avg): Likewise. (REC_AGGREGATE_ACCUM_FUNC): Likewise. * src/rec-fex.c (rec_fex_parse_str_simple): Wrap assignment in if statement in parentheses. * src/rec-sex-lex.l (top): Specify options header-file, noinput and nounput. (rec_sex_lex_extract_subname): Remove unused variable `res'. * src/rec-sex-tab.y: Include "rec-sex-lex.h". * src/rec-sex-ast.c (rec_sex_ast_print_node): Use name[0] to access the name. * src/rec-sex-parser.c: Include "rec-sex-lex.h" and "rec-sex-tab.h". * src/rec-sex-lex.l: Generate the header file "rec-sex-lex.h". * src/rec-int.c (rec_int_check_field_type): Removed unused variable `field_name'. * src/rec-db.c (rec_db_query): Removed unused variable `selected'. (rec_db_query): Removed unused variable `n_rset'. Remove declaration for the static function `rec_db_set_act_setadd'. * src/rec-rset.c (rec_rset_record_compare_fn): Removed unused variables `field1' and `field2'. (rec_rset_update_field_props): Removed unused variable `type_name'. * src/rec-mset.c (rec_mset_elem_init): Remove unused function. 2013-08-08 Jose E. Marchesi <jemarch@gnu.org> src: optimize the evaluation of sex expressions, avoiding permutations on fields not appearing in the expression. * src/rec-sex-ast.c (rec_sex_ast_name_p_1): New function. (rec_sex_ast_name_p): Likewise. * src/rec-sex.c (rec_sex_eval): Do not permute on fields not featured on the selection expression. 2013-08-08 Jose E. Marchesi <jemarch@gnu.org> src,torture,doc: support the usage of MIN and MAX keywords in range types. * doc/recutils.texi (Scalar Field Types): Document the MIN and MAX keywords in range specifications. * torture/utils/recfix.sh (range_min_ok): New test. (range_min_invalid): Likewise. (range_max_ok): Likewise. (range_max_invalid): Likewise. (range_minmax_ok): Likewise. (range_minmax_invalid): Likewise. * src/rec-types.c (rec_type_parse_range): Support MIN and MAX keywords in range definitions. (rec_type_parse_range_point): New function. Include limits.h. * src/rec-utils.c (rec_parse_int): update 'ret' only if hte parsing was successful. (rec_parse_regexp): Likewise. * src/rec-types.c (REC_TYPE_RANGE_DESCR_RE): Allow MIN and MAX literals as well as numeric literals. (REC_TYPE_RANGE_MINMAX_RE): New constant. (REC_TYPE_DESCR_RE): Duplicate check for REC_TYPE_RANGE_DESCR_RE removed. 2013-08-08 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Inserting Records): basic operation of recins documented. 2013-08-08 Jose E. Marchesi <jemarch@gnu.org> * utils/recins.c (recutl_print_help): typo fixed in help string: -R must be -r. 2013-08-08 Jose E. Marchesi <jemarch@gnu.org> maint: syntax-check fixes. * etc/rec-mode.el (rec-summary-rec-buffer): Trailing blanks removed from line. * AUTHORS (John Darrington): Likewise. * .gitignore: Newline added at EOF to keep syntax-check happy. * etc/rec-mode.el (rec-mode): Typo in comment fixed. 2013-07-29 MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu> src: fix memory leak. * src/rec-rset.c (struct rec_rset_fprops_s): Remove const from fname, since it can be dynamically allocated. (rec_rset_destroy): Free fname. (rec_rset_update_field_props): Destroy the temporary fex. 2013-06-23 Jose E. Marchesi <jemarch@gnu.org> src,doc,torture: fix the insertion of anonymous records in dbs. * doc/recutils.texi (Inserting Anonymous Records): New section. * torture/utils/recins.sh (marks): New input file. * src/rec-db.c (rec_db_get_rset): The position cant be zero since size_t is unsigned so don't check for it. (rec_db_insert_rset): Likewise. (rec_db_remove_rset): Likewise. (rec_db_insert): Fix the index of the default rset. 2013-06-23 Jose E. Marchesi <jemarch@gnu.org> src,doc,elisp: remove support for hyphens in field names. * torture/utils/recfix.sh (recfix-hyphens-in-field-names): new test. * src/rec.h (REC_FNAME_RE): Don't allow hyphens in field names. * src/rec-parser.c (rec_parse_field_name): Likewise. * doc/recutils.texi (Fields): Likewise. (Declaring Types): Likewise. * etc/rec-mode.el (rec-field-name-re): Likewise. (rec-font-lock-keywords): Likewise. (rec-parse-type): Likewise. (rec-check-type): Likewise. (rec-field-type): Likewise. 2013-05-22 Jose E. Marchesi <jemarch@gnu.org> utils: interactively ask for a password twice to avoid loosing data because of typing errors. * utils/recins.c (recins_add_new_record): Use recutl_getpass. * utils/recsel.c (recsel_process_data): Likewise. * utils/recfix.c (recfix_parse_args): Likewise. * utils/recutl.c (recutl_getpass): New function. 2013-05-22 Jose E. Marchesi <jose.marchesi@oracle.com> * etc/ob-rec.el (org-babel-execute:rec): Add support for GroupBy. (org-babel-execute:rec): Add support for joins. 2013-05-09 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Sorted Output): Renamed from Sorting. (Sorting Records): New section. (Editing Records): Intro written. 2013-03-14 Jose E. Marchesi <jemarch@gnu.org> doc: minor improvements in the manual. * doc/recutils.texi: Add John as an author. (Selecting by Type): Document the -d command line option to recsel. 2013-02-12 Jose E. Marchesi <jemarch@gnu.org> manual: get recutils.texi compiling again. * doc/recutils.texi (Joining Records): Empty section created. (Foreign Keys): Likewise. (Top): Entry in menu fixed to avoid an invalid reference. 2013-02-11 Jose E. Marchesi <jemarch@gnu.org> manual: Field Restrictions introduction written. * doc/recutils.texi (Field Restrictions): Introduction to the chapter written. 2013-02-10 MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu> * configure.ac: Use AC_CONFIG_HEADERS, LT_INIT and AC_CONFIG_FILES instead of deprecated AM_CONFIG_HEADER, AC_PROG_LIBTOOL and argument of AC_OUTPUT. 2013-02-10 Jose E. Marchesi <jemarch@gnu.org> * doc/rec-mode.texi: Copyright updated. * doc/recutils.texi (Random Records): Clarify how the internal algorihtm works. Copyright updated. 2013-02-10 Jose E. Marchesi <jemarch@gnu.org> * src/rec-db.c (rec_db_process_fex): Avoid a segmentation fault when the function is called with a NULL record. 2013-02-10 Jose E. Marchesi <jemarch@gnu.org> manual: record sets and simple selection techniques documented. * doc/recutils.texi (Record Sets): New subsection. (Naming Record Types): Likewise. (The Special Fields): Likewise. (Selecting by Position): Written. (Random Records): Likewise. 2013-02-04 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-summary-populate): Use the first header as the sorting criteria. (rec-cmd-show-summary): Store the record position as the ID of the tabular row. (rec-summary-rec-buffer): New variable. (rec-cmd-show-summary): Set the buffer local variable rec-summary-rec-buffer the proper value. 2013-02-03 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-keyword-summary): New constant. (rec-summary-fields): New function. (rec-join-string): Likewise. * src/rec-db.c (rec_db_process_fex): Don't loose the location information in records processed by fexes. 2013-02-02 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-summary-mode): New function. (rec-summary-mode-map): New variable. (rec-mode-map): Map 'h' to rec-cmd-show-summary. (rec-mode-edit-map): Map 'C-ch' to rec-cmd-show-summary. (rec-cmd-show-summary): New function. (rec-summary-populate): Likewise. (rec-query): Use --print-sexps even if a fex was specified. 2013-02-02 Jose E. Marchesi <jemarch@gnu.org> writer: quote special characters when printing lisp strings. * torture/utils/recsel.sh (unquoted-lisp-strings): New input file. (recsel-unquoted-lisp-strings): New test. * src/rec-writer.c (rec_write_field): Escape double quotes and backslashes when writing the field values in lisp strings. 2013-02-02 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Checking Recfiles for Errors): format typo fixed. 2013-02-02 Jose E. Marchesi <jemarch@gnu.org> src: allow duplicated fields in grouped record sets. * src/rec-rset.c (rec_rset_merge_records): Don't remove duplicated fields when grouping record sets. 2013-01-30 Jose E. Marchesi <jemarch@gnu.org> * README-dev: Mention bootstrap instead of autogen.sh. * src/Makefile.am (librec_la_LIBADD): Rename libgnu.la to librecutils.la. * utils/Makefile.am (COMMONLIBS): Likewise. * configure.ac: Invoke gl_EARLY after AC_PROG_CC. 2013-01-30 Jose E. Marchesi <jemarch@gnu.org> static gnulib removed. * bootstrap: Imported. * bootstrap.conf: New file. Many files deleted. 2013-01-20 Jose E. Marchesi <jemarch@gnu.org> manual: new sections on configuring rec-mode. * doc/rec-mode.texi (Records appearance): Section completed. (Finding the recutils): New section. (Top): Detailed menu updated. 2013-01-07 Jose E. Marchesi <jemarch@gnu.org> rec-mode: be smart assigning letters to enumerated entries. * etc/rec-mode.el (rec-cmd-edit-field): Assign letters to enumerated entries in a "smart" way. 2013-01-07 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el: Copyright years updated. 2013-01-04 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-mode-version): New constant. 2012-12-26 Jose E. Marchesi <jemarch@gnu.org> src,torture: simplify the creation of the descriptor of joined record sets. * torture/utils/recsel.sh (recsel-join-descriptor): New test. * src/rec-db.c (rec_db_join): The descriptor of joined records only features a %rec: entry. 2012-12-26 Jose E. Marchesi <jemarch@gnu.org> src: fix the parser in order to accept lines with blanks just after records. * torture/utils/recfix.sh (blank-line-after-record): New input file. (blank-line-after-record-invalid): Likewise. (recfix-blank-line-after-record): New test. (recfix-blank-line-after-record-invalid): Likewise. * src/rec-parser.c (rec_parse_record): Ignore lines composed by only blank characters when they appear immediately after a record. 2012-12-26 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-finish-editing-field): dont hide continuation line markers if the command was invoked from an editing mode. 2012-12-12 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-finish-editing-field): Do the right thing when the selected window is the only window in the frame. 2012-12-06 Jose E. Marchesi <jemarch@gnu.org> src,torture: support several foreign keys with the same name in a record. * torture/utils/recsel.sh (several-foreign-keys): New input file. (recsel-several-foreign-keys): New test. * src/rec-db.c (rec_db_join): A record may contain more than one foreign field. 2012-11-21 Jose E. Marchesi <jemarch@gnu.org> manual: little fix in the introduction. * doc/recutils.texi (Introduction): Don't enumerate the different utilities. 2012-11-21 Jose E. Marchesi <jemarch@gnu.org> utils: make recsel to honour --print-row and --print-values. * torture/utils/recsel.sh (recsel-row-long): New test. (recsel-values-long): New test. * utils/recsel.c (recsel_parse_args): Honour --print-row and --print-values. 2012-11-21 Julio C. M. Ramirez <rikijpn@member.fsf.org> * doc/recutils.texi : Grammar corrections and rephrasing some parts for easier reading. 2012-11-21 John Darrington <john@darrington.wattle.id.au> * doc/recutils.texi: Updated so that Texinfo 4.13.90 does not show errors. 2012-11-15 Jose E. Marchesi <jemarch@gnu.org> rec-mode: visiting an empty file works again. * etc/rec-mode.el (rec-buffer-valid-p): New function. (rec-update-buffer-descriptors-and-check): Use rec-buffer-valid-p to determine if the buffer contains valid rec data, instead of rec-update-buffer-descriptors. 2012-11-12 Jose E. Marchesi <jemarch@gnu.org> rec-mode: support for a mode hook. * etc/rec-mode.el (rec-mode-hook): New custom. (rec-mode): Run the hooks installed in rec-mode-hook. 2012-11-11 Jose E. Marchesi <jemarch@gnu.org> doc: some work on the rec-mode manual. * doc/rec-mode.texi (Opening recfiles): New section. (Editing records and fields): Likewise. (Edition modes): Likewise. (Edition mode): Likewise. (Data integrity): Likewise. (Statistics): Likewise. (Editing fields): Likewise. (Searches): Likewise. (Motion): Likewise. (Navigation mode): Likewise. (Field navigation and folding): Likewise. (reccmd): New macro. (ie): Likewise. (Records appearance): New section. 2012-11-11 Jose E. Marchesi <jemarch@gnu.org> utils: a NULL file name means stdout, which is always writable. * utils/recutl.c (recutl_file_is_writable): Return true if the file name is NULL. 2012-11-10 Jose E. Marchesi <jemarch@gnu.org> utils: honor file permissions when doing in-place operations. * utils/recset.c (main): Likewise. * utils/recins.c (main): Likewise. * utils/recfix.c (recfix_do_sort): Likewise. * utils/recdel.c (main): Check for the writeability of the file before writing to it. * utils/recutl.c (recutl_check_file_is_writable): new function. 2012-11-10 Jose E. Marchesi <jemarch@gnu.org> * gnulib module euidaccess imported. 2012-11-10 Jose E. Marchesi <jemarch@gnu.org> rec-mode: check for the validity of the contents of the buffers before going to navigation mode. * etc/rec-mode.el (rec-mode): Do not activate the rec-mode if the contents of the buffer are not valid rec data. Show an error message in the modeline instead. (rec-update-buffer-descriptors-and-check): New function. (rec-finish-editing): Warn and don't abandon edit mode if there are errors in the rec data in the buffer. * utils/recinf.c (main): Recognize parse errors when stdin is used to read the rec data. * torture/utils/recinf.sh (invalid): New input file. (recinf-invalid): New test. * src/rec-parser.c (rec_parse_db): Keep track of the result of rec_parse_rset so an invalid database is properly reported. * utils/recinf.c (print_info_file): Return false if there is a parse error in the input. * etc/rec-mode.el (rec-update-buffer-descriptors): Return nil if the : 2012-11-10 Jose E. Marchesi <jemarch@gnu.org> rec-mode: avoid trying to delete the sole window in the current frame. (rec-finish-editing-field): avoid trying to delete the edit window if it is the only window in the frame. Switch to show the rec buffer instead. 2012-11-10 Jose E. Marchesi <jemarch@gnu.org> rec-mode: rec-end-of-field-pos now works properly when a field ends with the end of file mark. * etc/rec-mode.el (rec-end-of-field-pos): Do not add one to the end-of-field position. (rec-delete-field): Delete the trailing \n after the field, if any. 2012-11-07 Jose E. Marchesi <jemarch@gnu.org> src: emit a useful message when an invalid enum literal is found in a field. * src/rec-types.c (rec_type_check_enum): Add a meaningful error message when the string to check is empty or otherwise an invvalid enum literal. 2012-11-07 Jose E. Marchesi <jemarch@gnu.org> man: do not require help2man unless the sources are changed. * .gitignore: generated manpages removed. * man/csv2rec.1: Added to the repo. * man/recset.1: Likewise. * man/recsel.1: Likewise. * man/recins.1: Likewise. * man/recinf.1: Likewise. * man/recfmt.1: Likewise. * man/recfix.1: Likewise. * man/recdel.1: Likewise. * man/rec2csv.1: Likewise. * man/mdb2rec.1: Likewise. 2012-10-08 Jose E. Marchesi <jemarch@gnu.org> csv2rec: diagnostic messages improved. * utils/csv2rec.c (struct csv2rec_ctx): New field lineno. (process_csv): Initialize lineno. (field_cb): Improve the error message. 2012-10-07 John Darrington <john@darrington.wattle.id.au> utils/recutl.c: (recutl_write_db_to_file) Fixed memory leak 2012-09-07 Jose E. Marchesi <jemarch@gnu.org> rec-mode: fixed to allow comments in records. * etc/rec-mode.el (rec-hide-continuation-line-markers): Fixed to ignore comments in records. (rec-hide-record-fields): Likewise. (rec-record-elems): Renamed from rec-record-fields. (rec-insert-record): Use rec-record-elems. (rec-record-assoc): Likewise. (rec-record-names): Likewise. (rec-hide-continuation-line-markers): Likewise. (rec-hide-record-fields): Likewise. (rec-unfold-record-fields): Likewise. (rec-log-current-defun): Likewise. 2012-09-07 Jose E. Marchesi <jemarch@gnu.org> rec-mode: don't move the pointer after switching to edit buffer or edit type mode. * etc/rec-mode.el (rec-edit-buffer): Don't move the pointer to the beginning of the buffer. (rec-edit-type): Likewise. 2012-09-06 John Darrington <john@darrington.wattle.id.au> * doc/recutils.texi : Minor markup alterations * doc/recutils.texi : Added some index entries 2012-09-04 Jose E. Marchesi <jco@terma.com> rec-mode: improve rec-log-current-defun so it works in all cases. * etc/rec-mode.el (rec-log-current-defun): Cover the case where there is a defined key but the field is not present in the record. 2012-09-03 Jose E. Marchesi <jemarch@gnu.org> rec-mode: provide a sensible log-current-defun for the add-log function. * etc/rec-mode.el (rec-log-current-defun): New function. (rec-mode): Set the buffer local value of add-log-current-defun-function to rec-log-current-defun. 2012-09-03 Jose E. Marchesi <jemarch@gnu.org> * AUTHORS: Daiki, Ralf, John and MichaÅ‚ added. 2012-08-31 John Darrington <john@darrington.wattle.id.au> * doc/recutils.texi : Merge Fields and Records, and Comments into one chapter * doc/recutils.texi : Added the start of a tutorial chapter 2012-08-27 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Top): Concept Index added to the menu. 2012-08-27 Jose E. Marchesi <jco@terma.com> * .x-sc_prohibit_strncpy: New file. 2012-08-27 John Darrington <john@darrington.wattle.id.au> * doc/recutils.texi: Replaced one remaining instance of "i.e." with the respective macro. Also added @: to the macro definition to improve spacing. * doc/recutils.texi: Added @. where appropriate. * doc/recutils.texi: Added an index. 2012-08-26 Jose E. Marchesi <jemarch@gnu.org> doc: minor fixes in the manual. * doc/recutils.texi (Conversion Utilities): @acronym removed. (Record Descriptors): Relocate the menu to the end of the section and remove the now uneeded list of special fields. (Scalar types): The type identifier for integers is 'int' and not 'integer'. 2012-08-26 John Darrington <john@darrington.wattle.id.au> * doc/recutils.texi: Reorganised sectioning, in favour of fewer, but bigger chapters. 2012-08-23 Jose E. Marchesi <jemarch@gnu.org> syntax-check fixes. * etc/rec-mode.el: Trailing blanks removed from file. * doc/recutils.texi (recsel Grouping): Don't use @acronym{}. http://lists.gnu.org/archive/html/bug-gnulib/2010-03/msg00321.html explains why. * src/rec-db.c (rec_db_merge_records): Use memcpy instead of strncpy. (rec_db_process_fex): Likewise. * utils/recfmt.c (recfmt_apply_template): Likewise. * utils/mdb2rec.c (process_table): Likewise. * utils/csv2rec.c (field_cb): Likewise. * src/rec-utils.c (rec_extract_file): Likewise. (rec_extract_url): Likewise. (rec_extract_type): Likewise. (rec_parse_regexp): Likewise. (rec_concat_strings): Likewise. * src/rec-sex-lex.l: Likewise. * src/rec-sex.c (rec_sex_eval_node): Likewise. (rec_sex_eval_node): Likewise. * src/rec-parser.c (rec_parse_field_name_str): Likewise. * src/rec-int.c (rec_int_merge_remote): Likewise. * src/rec-field-name.c (rec_field_name_normalise): Likewise. * .x-sc_prohibit_strncpy: New file. 2012-08-22 Jose E. Marchesi <jemarch@gnu.org> * src/rec-types.c (rec_type_destroy): Be a no-operation in case the passed type is NULL. 2012-08-21 MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu> src,torture: Fix memory leaks found by valgrind in unit tests. * src/rec-fex.c (rec_fex_destroy): Free rewrite_to of each element. (rec_fex_parse_str_simple): Free fex_str, rewrite_to of each element and use common code for destroying partial results on error. (rec_fex_parse_str_subscripts): Free fex_str and in case of error field_name and str of each element. (rec_fex_parse_elem): Free elem->str, elem->field_name and elem->rewrite_to on error. * src/rec-parser.c (rec_parser_perror): Don't allocate number_str, asprintf will do it. (rec_parse_record): Free the record on error. (rec_parse_comment): Free the comment string not only on error. * src/rec-rset.c (rec_rset_destroy): Free constraints. * src/rec-sex-ast.c (rec_sex_ast_node_destroy): Free the node. * src/rec-types.c (rec_type_new): Free the type on error. (rec_type_destroy): Free the data of enum and regexp types. * torture/rec-fex/rec-fex-new.c (rec_fex_new_subscripts): Destroy the fex after use. * torture/rec-fex/rec-fex-str.c (rec_fex_str_nominal): Likewise. * torture/rec-field/rec-field-set-name.c (rec_field_set_name_empty): Destroy the field after use. (rec_field_set_name_nonempty): Likewise. * torture/rec-field/rec-field-set-value.c (rec_field_set_value_empty): Likewise. (rec_field_set_value_nonempty): Likewise. * torture/rec-field/rec-field-value.c (rec_field_value_empty): Likewise. (rec_field_value_nonempty): Likewise. * torture/rec-parser/rec-parse-record-str.c (rec_parse_record_str_nominal): Free fname after use. * torture/rec-parser/rec-parse-record.c (rec_parse_record_nominal): Likewise. * torture/rec-parser/rec-parse-rset.c (rec_parse_rset_nominal): Destroy the rset after use. * torture/rec-parser/rec-parser-new-mem.c (rec_parser_new_mem_nominal): Likewise. * torture/rec-parser/rec-parser-seek-mem.c (rec_parser_seek_mem_skip): Destroy the record after use. * torture/rec-writer/rec-write-comment-str.c (rec_write_comment_str_nominal): Free str after use. (rec_write_comment_str_sexp): Likewise. * torture/rec-writer/rec-write-field-name-str.c (rec_write_field_name_str_nominal): Likewise. (rec_write_field_name_str_sexp): Likewise. * torture/rec-writer/rec-write-field-str.c (rec_write_field_str_nominal): Likewise. (rec_write_field_str_sexp): Likewise. 2012-08-21 MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu> src: Initialize unused fields to 0 in rec_fex_append. * src/rec-fex.c (rec_fex_append): Zero new_elem content. 2012-08-21 MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu> src: Fix an invalid read in an unit test detected by valgrind. * src/rec-parser.c (rec_parse_field_name_str): Do the check for trailing ':' only for nonempty strings. 2012-08-16 John Darrington <john@darrington.wattle.id.au> doc: Reals always use the dot as separator * doc/recutils.texi: Added a note to the effect that the LC_NUMERIC locale class does not affect how real types are interpreted. 2012-08-16 John Darrington <john@darrington.wattle.id.au> doc: Grammar and typos * doc/recutils.texi: Corrected various minor grammatical and typographical errors. 2012-08-16 John Darrington <john@darrington.wattle.id.au> doc: Comments vs. %doc * doc/recutils.texi: Elaborated on the distinction between comments and %doc fields. Added an example for %doc 2012-08-16 John Darrington <john@darrington.wattle.id.au> doc: Grammar * doc/recutils.texi: "allows to" is not correct English. Added a subject or reformulated as appropriate. 2012-08-15 John Darrington <john@darrington.wattle.id.au> doc: Correct typo * doc/recutils.texi: adquisition --> acquisition 2012-08-15 John Darrington <john@darrington.wattle.id.au> doc: Add a macro for id est * doc/recutils.texi: In English text, I think its easier to recognise these latin abbreviations in italics. So I've added a macro for i.e. 2012-08-15 John Darrington <john@darrington.wattle.id.au> doc: "data" is plural ("datum" is the singular) * doc/recutils.texi: I find conjugations like "this data" just sound wrong. 2012-08-14 Jose E. Marchesi <jemarch@gnu.org> src: compare real numbers with LC_NUMERIC=C. * src/rec-utils.c: Include locale.h. (rec_atod): Make sure that the dot is the decimal separator regardless of the locale in the environment. 2012-08-09 Jose E. Marchesi <jemarch@gnu.org> doc: typo fixed in manual. * doc/recutils.texi: Incorrect "escalar" replaced by "scalar". 2012-08-05 Jose E. Marchesi <jemarch@gnu.org> src,doc: support for dot notation in simple fexes. * doc/recutils.texi (Field Expressions): Document dot notation in field expressions. * src/rec-fex.c (rec_fex_parse_str_simple): Support for dot notation in field names in simple fexes. 2012-08-05 Jose E. Marchesi <jemarch@gnu.org> src,torture: don't try to perform a join if the referred type does not exist in the database. * src/rec-db.c (rec_db_query): Don't perform a join if records of the referred type cannot be found in the database. * torture/utils/recsel.sh (non-existant-foreign-key): New input file. (recsel-non-existant-foreign-key): New test. 2012-08-04 MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu> src,torture: fix a recfix crash reported by John Darrington. * src/rec-rset.c (rec_rset_get_field_type): Don't call rec_type_reg_get with NULL as type name. * torture/utils/recfix.sh (unused-type): New input file. (recfix-unused-type): New test. 2012-08-01 Jose E. Marchesi <jemarch@gnu.org> rec-mode: copy/kill fields and records commands. * etc/rec-mode.el (rec-cmd-kill-field): New function. (rec-cmd-copy-field): Likewise. (rec-cmd-kill-record): Likewise. (rec-cmd-copy-record): Likewise. (rec-mode-edit-map): Map the copy/kill commands for fields and records. (rec-mode-map): Likewise. 2012-07-31 Jose E. Marchesi <jemarch@gnu.org> src,doc,torture: support for the %constraint special field. * doc/recutils.texi (%size and %constraint): Document the usage of the %constraint special field. * src/rec-rset.c (rec_rset_num_sex_constraints): New function. (rec_rset_sex_constraint): Likewise. * src/rec-int.c (rec_int_check_record): Call to rec_int_check_record_sex_constraints. (rec_int_check_record_sex_constraints): New function. * torture/utils/recfix.sh (constraint-sex-valid): New input file. (constraint-sex-invalid): Likewise. (constraint-sex-invalid-empty): Likewise. (constraint-sex-several-valid): Likewise. (constraint-sex-several-invalid): Likewise. (constraint-sex-with-violation): Likewise. (recfix-constraint-sex-valid): New test. (recfix-constraint-sex-invalid): Likewise. (recfix-constraint-sex-invalid-empty): Likewise. (recfix-constraint-sex-several-valid): Likewise. (recfix-constraint-sex-several-invalid): Likewise. (recfix-constraint-sex-with-violation): Likewise. * src/rec-int.c (rec_int_check_descriptor): Check for the integrity of the %constraint fields. * src/rec-rset.c (rec_rset_new): Initialize the internal constraints structures to empty. (rec_rset_destroy): Destroy the internal constraints structures. (rec_rset_dup): Dup constraints. (rec_rset_set_descriptor): Update sex constraints. (rec_rset_update_sex_constraints): New function. * src/rec.h (enum rec_std_field_e): New member REC_FIELD_CONSTRAINT. * src/rec-field-name.c (fnames): New special field name %constraint. 2012-07-31 Jose E. Marchesi <jemarch@gnu.org> torture: test for the => operator in sexes. * torture/utils/recsel.sh (implications): New input file. (recsel-sex-implies-1): New test. 2012-07-28 Jose E. Marchesi <jemarch@gnu.org> doc: documentation of the => operator. * doc/recutils.texi (SEX Operators): Document the => operator. 2012-07-27 Jose E. Marchesi <jemarch@gnu.org> src: implementation of the => sex operator. * src/rec-sex.c (rec_sex_eval_node): Implementation of the "implies" operator. * src/rec-sex-ast.h (enum rec_sex_ast_node_type_e): New value REC_SEX_OP_IMPLIES. * src/rec-sex-tab.y: Rule for the implies operator. * src/rec-sex-lex.l ("=>"): New token for the "implies" operator. 2012-07-23 Jose E. Marchesi <jemarch@gnu.org> rec-mode: new command rec-cmd-statistics. * etc/rec-mode.el (rec-cmd-statistic): New function. (rec-mode-map): Map rec-cmd-statistic with %. 2012-07-23 Jose E. Marchesi <jemarch@gnu.org> rec-mode: rec-cmd-count now suggests a default selection expression when invoked with a numeric prefix. * etc/rec-mode.el (rec-cmd-count): Use a default expression using the field under point when invoked with a prefix argument. 2012-07-20 Jose E. Marchesi <jemarch@gnu.org> * .x-sc_prohibit_defined_have_decl_tests: New file. 2012-07-20 Jose E. Marchesi <jemarch@gnu.org> * gnulib module flock imported. 2012-07-17 Jose E. Marchesi <jemarch@gnu.org> rec-mode: support for undo in navigation mode. * etc/rec-mode.el (rec-mode-map): Remap `undo' into rec-cmd-undo when in navigation mode. (rec-cmd-undo): New function. 2012-07-17 Jose E. Marchesi <jemarch@gnu.org> rec-mode: support for multiple field names in %type entries. * etc/rec-mode.el (rec-field-type): Support for multiple field names in %type entries. 2012-07-17 Jose E. Marchesi <jemarch@gnu.org> rec-mode: time-stamps are now triggered with `t' instead of `n'. * etc/rec-mode.el (rec-cmd-edit-field): Change the key to trigger a time-stamp from `n' to `t'. 2012-07-17 Jose E. Marchesi <jemarch@gnu.org> rec-mode: support for generating time-stamps in date fields. * etc/rec-mode.el (rec-cmd-edit-field): Support for getting a timestamp when editing date fields. (rec-time-stamp-format): New constant. 2012-07-17 Jose E. Marchesi <jemarch@gnu.org> rec-mode: fix edition of the default record set. * etc/rec-mode.el (rec-record-descriptor): Return `nil' for a non-existant record descriptor, not "". 2012-07-17 Jose E. Marchesi <jemarch@gnu.org> rec-mode: allow the user to cancel the edit date operation by quitting the calendar window. * etc/rec-mode.el (rec-cmd-edit-field): Remap "q" in the calendar to remove the modified local map in the *Calendar* buffer if the user quits the calendar. 2012-07-17 Jose E. Marchesi <jemarch@gnu.org> rec-mode: rec-cmd-edit-field supports a numeric argument. * etc/rec-mode.el (rec-cmd-edit-field): Use the more general input method for reading field values regardless their types if a numeric argument is passed to the function. 2012-07-17 Jose E. Marchesi <jemarch@gnu.org> rec-mode: support for editing date fields using the calendar. * etc/rec-mode.el (rec-cmd-edit-field): Support for editing date fields using the calendar. (rec-popup-calendar): New customized variable. 2012-07-10 Jose E. Marchesi <jemarch@gnu.org> algol68: several new wrappers for librec functions. * algol68/rec.a68 (MODE RSET): New mode. (rec rset new): New wrapper. (rec rset destroy): Likewise. (rec rset dup): Likewise. (MODE MSET): New mode. (MODE MSETELEM): Likewise. (mset any): New constant. (rec mset new): New wrapper. (rec mset destroy): Likewise. (rec mset dup): Likewise. (rec mset type p): Likewise. (rec mset get at): Likewise. (rec mset insert at): Likewise. (rec mset insert after): Likewise. (rec mset append): Likewise. (rec mset add sorted): Likewise. (rec mset remove at): Likewise. (rec mset remove elem): Likewise. (rec mset search): Likewise. 2012-07-10 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 14 resolved to 'DONE'. 2012-07-08 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-cmd-select-fast): New function. (rec-cmd-select-sex): Likewise. (rec-mode-edit-map): Bindings for selection functions added. (rec-mode-map): Likewise. 2012-06-22 Jose E. Marchesi <jco@terma.com> manual: some work in the grouping section. * doc/recutils.texi (recsel Grouping): Some work in the section. 2012-06-11 Jose E. Marchesi <jemarch@gnu.org> rec-mode: new functions returning properties of the current record set. * etc/rec-mode.el (rec-keyword-mandatory): New constant. (rec-keyword-key): Likewise. (rec-mandatory-fields): New function. (rec-key): Likewise. 2012-06-10 Jose E. Marchesi <jemarch@gnu.org> rec-mode: bug affecting the hiding of continuation line markers fixed. * etc/rec-mode.el (rec-hide-continuation-line-markers): Use rec-insert-field-value in order to determine the length. 2012-06-08 Jose E. Marchesi <jemarch@gnu.org> rec-mode: presentation of continuation lines in navigation modes, and other improvements. * etc/rec-mode.el (rec-query): renamed from rec-select, and completed. (cl): Package required, for keyword arguments support. (rec-show-record): Call rec-hide-continuation-line-markers. (rec-hide-continuation-line-markers): New function. (rec-continuation-line-markers-overlays): New variable. (rec-continuation-line-markers-width): New variable. (rec-remove-continuation-line-marker-overlays): New function. (rec-mode-syntax-table): Put " and ' in the word-constituent syntax class to avoid unwanted font-locking and pairing. 2012-06-05 Jose E. Marchesi <jemarch@gnu.org> manual: some more dummy sections for the rec-mode manual. * doc/rec-mode.texi (Summary): New section. (Installation): Likewise. (Feedback): Likewise. 2012-06-05 Jose E. Marchesi <jemarch@gnu.org> manual: skeleton for the rec-mode manual. * .gitignore: Ignore doc/version-rec-mode.texi * doc/Makefile.am (info_TEXINFOS): Added rec-mode.texi. * doc/rec-mode.texi: New file. (Introduction): New chapter. (GNU Free Documentation License): New chapter. 2012-06-05 Jose E. Marchesi <jemarch@gnu.org> rec-mode: support for selection expressions in rec-count. * etc/rec-mode.el (rec-count): Support for selection expressions in counts. (rec-cmd-count): Likewise. 2012-06-05 Jose E. Marchesi <jemarch@gnu.org> rec-mode: folding of fields. * etc/rec-mode.el (rec-show-record): Call to rec-hide-record-fields. (rec-hide-record-fields): New function. (rec-toggle-field-visibility): Likewise. (rec-cmd-toggle-field-visibility): Likewise. (rec-mode-edit-map): Bind SPC with rec-cmd-toggle-field-visibility. (rec-mode-map): Likewise. (rec-mode): Add an invisibility spec for fields. (rec-show-fields-all): New function. (rec-field-folded-p): Likewise. (rec-fold-field): Likewise. (rec-cmd-beginning-of-line): Removed. (rec-max-lines-in-fields): Default to 15. (rec-unfold-record-fields): New function. (rec-unfold-all-fields): New function. (rec-edit-type): Unfold all fields before switching to edit mode. (rec-edit-buffer): Likewise. (rec-edit-record): Likewise. 2012-06-04 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-cmd-edit-field): Support editing boolean fields as special enum values. 2012-06-04 Jose E. Marchesi <jemarch@gnu.org> rec-mode: complete support for editing fields storing enumerated values. * etc/rec-mode.el (rec-cmd-show-type): Use display-message-or-buffer in order to avoid overflowing the echo area. (rec-cmd-edit-field): Complete support for editing fields containing enum values. 2012-06-04 Jose E. Marchesi <jemarch@gnu.org> rec-mode: avoid security problems in calls to message by using %s. * etc/rec-mode.el (rec-cmd-show-type): Use "%s" in message to avoid security problems. (rec-cmd-goto-next-rec): Likewise. (rec-cmd-goto-previous-rec): Likewise. (rec-cmd-count): Likewise. (rec-cmd-show-info): Likewise. 2012-06-03 Jose E. Marchesi <jemarch@gnu.org> * etc/rec-mode.el (rec-parse-field-name-from-string): Deleted. (rec-mode-map): Use "d" to show descriptors, not t. (rec-mode-edit-map): Likewise with C-cd. (rec-mode-edit-map): New entry for rec-cmd-show-type. (rec-mode-map): Likewise. (rec-type-descriptor): New function. (rec-parse-type): Allow comments in parenthesis in enum descriptions. (rec-cmd-edit-field): Edit the field value in several ways, depending on its type. (rec-type-data): New function. (rec-type-kind): Likewise. 2012-06-03 Jose E. Marchesi <jemarch@gnu.org> rec-mode: several functions to support field types. * etc/rec-mode.el (rec-types): New variable. (rec-type-kind-p): New function. (rec-parse-type): Likewise. (rec-parse-type-int): Likewise. (rec-check-type): Likewise. 2012-06-01 Jose E. Marchesi <jemarch@gnu.org> rec-mode: misc small fixes. * etc/rec-mode.el (rec-mode): docstring updated to reflect the real URL. (rec-keyword-rec): Use rec-keyword-prefix. (rec-mode-edit-map): Remove obsolete or not-working entries. (rec-mode-map): Likewise. (rec-field-trim-value): Don't remove the initial newline when trimming when there is only one. (rec-update-buffer-descriptors-xxx): Removed. (rec-map): Removed. (rec-do): Removed. (rec-sel): Removed. (rec-field-eq): Removed. (rec-field-count): Removed. (rec-init-selections): Removed. (rec-finish-editing): Don't call rec-init-selections. (rec-finish-editing-field): Likewise. (rec-search-first): Removed. (rec-selection-list): Removed. (rec-cmd-sel): Removed. (rec-mode): Wide the buffer after killing local variables. 2012-06-01 Jose E. Marchesi <jemarch@gnu.org> rec-mode: fixes in goto-type and show-type. * etc/rec-mode.el (rec-buffer-types): Return the values of the first %rec entry in each record, not a list. (rec-show-type): Show the first data record of the selected type, if it exists. (rec-show-type): Get an optional argument show-descriptor. (rec-cmd-show-descriptor): Call rec-show-type with show-descriptor t. 2012-06-01 Jose E. Marchesi <jemarch@gnu.org> rec-mode: field names are no longer lists of parts. * etc/rec-mode.el (rec-parse-record): Docstring updated. (rec-field-name-re): Updated. (rec-insert-field-name): Updated to new field structure. (rec-buffer-types): Call rec-record-assoc with a string field name, not a list. (rec-record-descriptor-p): Likewise, and use rec-keyword-rec. (rec-goto-type): Likewise. (rec-regular-p): Likewise. (rec-record-type): Likewise. (rec-search-first): Likewise. (rec-init-selections): Likewise. 2012-05-31 Jose E. Marchesi <jemarch@gnu.org> rec-mode: editing of individual fields now works. * etc/rec-mode.el (rec-insert-field): Fixed to work with the new field structured. 2012-05-31 Jose E. Marchesi <jemarch@gnu.org> src: fix sorting code to properly handle interleaved comments. * src/rec-rset.c (rec_rset_record_compare_fn): Return 1 if elem2 is a comment. * torture/utils/recsel.sh (sort-with-comment): New input file. (sort-with-comment): New test. 2012-05-29 Jose E. Marchesi <jemarch@gnu.org> Syntax fixes. * python/setup.py: Trailing blank removed. * doc/recutils.texi (recins Encryption): Fix usage of @pxref. 2012-05-25 MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu> src,torture: support changing parser position. * src/rec-parser.c (rec_parser_seek, rec_parser_tell): New functions. * src/rec.h: Prototypes for rec_parser_seek, rec_parser_tell. * torture/Makefile.am (REC_PARSER_TSUITE): rec-parser-seek-mem.c added. * torture/rec-parser/rec-parser-seek-mem.c: New file. * torture/rec-parser/tsuite-rec-parser.c (tsuite_rec_parser): Added test_rec_parser_seek_mem. 2012-05-25 MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu> src,torture: support parsing non-null terminated buffers. * src/rec-parser.c (struct rec_parser_s): New field in_size. * src/rec-parser.c (rec_parser_new): Initialize in_size to an invalid value. * src/rec-parser.c (rec_parser_getc): Use in_size instead of null check to find EOF in memory buffers. * src/rec-parser.c (rec_parser_new_mem): New function. * src/rec-parser.c (rec_parser_new_str): Use rec_parser_new_mem. * src/rec.h: Prototype for rec_parser_new_mem. * torture/Makefile.am (REC_PARSER_TSUITE): rec-parser-new-mem.c added. * torture/rec-parser/rec-parser-new-mem.c: New file. * torture/rec-parser/tsuite-rec-parser.c (tsuite_rec_parser): Added test_rec_parser_new_mem. 2012-05-25 Jose E. Marchesi <jemarch@gnu.org> build,src: support versions of mdbtools using MDB_SDATETIME and MDB_DATETIME. * utils/mdb2rec.c (process_table): Use MDB_DATETIME instead of MDB_SDATETIME. * utils/Makefile.am (mdb2rec_CPPFLAGS): Set MDB_DATETIME to the proper symbol. * configure.ac (MDB_DATETIME): Check whether mdblib is using MDB_SDATETIME or MDB_DATETIME. 2012-05-25 Jose E. Marchesi <jemarch@gnu.org> torture,src: tests for aggregates and multiple-field grouping, and several fixes. * src/rec-aggregate.c (REC_AGGREGATE_ACCUM_FUNC): Get an INIT_VAL argument. Use DBL_MAX and DBL_MIN. (rec_aggregate_std_avg): avg must be a double for the average. * torture/utils/recsel.sh (sales): New input file. (recsel-group-multiple-fields): New test. (recsel-aggregate-field-name): Likewise. (recsel-aggregate-case-insensitive): Likewise. (recsel-aggregate-rewrite-rule): Likewise. (recsel-aggregate-count-overall): Likewise. (recsel-aggregate-count-grouped): Likewise. (recsel-aggregate-sum-overall): Likewise. (recsel-aggregate-sum-grouped): Likewise. (recsel-aggregate-min-overall): Likewise. (recsel-aggregate-min-grouped): Likewise. (recsel-aggregate-max-overall): Likewise. (recsel-aggregate-max-grouped): Likewise. 2012-05-25 Jose E. Marchesi <jemarch@gnu.org> utils: fix the detection of invalid fexes in -G and -S. * utils/rec2csv.c (rec2csv_parse_args): Use rec_fex_check to validate the list of fields in the command line. * utils/recsel.c (recsel_parse_args): Likewise. 2012-05-25 Jose E. Marchesi <jemarch@gnu.org> src,doc: support for grouping by several fields. * doc/recutils.texi (recsel Invocation): Document that -G accepts a comma separated list of fields. * utils/recsel.c: recutl_group_by_fields is now a fex. (recsel_parse_args): Adjust error messages to that fact and parse the fex. (recutl_print_help): Likewise. (recsel_process_data): Use recsel_group_by_fields. * src/rec-db.c (rec_db_set): group-by is now a fex. * src/rec-rset.c (rec_rset_merge_records): Get a fex argument with the list of fields used for grouping. (rec_rset_group): Group by multiple fields. 2012-05-24 Jose E. Marchesi <jemarch@gnu.org> src: new function rec_rset_compare_typed_records. * src/rec-rset.c (rec_rset_compare_typed_records): New function. (rec_rset_record_compare_fn): Use rec_rset_compare_typed_records. 2012-05-16 Jose E. Marchesi <jemarch@gnu.org> doc,manual: document the sorting with several fields. * utils/recsel.c (recutl_print_help): Document that -S now gets a FIELDS argument. * utils/rec2csv.c (recutl_print_help): Likewise. * doc/recutils.texi (recsel Invocation): Likewise. (rec2csv Invocation): Likewise. (%sort): Document that several fields can be used as sorting criteria. 2012-05-16 Jose E. Marchesi <jemarch@gnu.org> torture: tests for sorting with multiple fields. * torture/utils/recsel.sh (sort-multiple): New input file. (recsel-sort-multiple): New test. (recsel-sort-field-multiple): Likewise. * torture/utils/recfix.sh (unsorted-multiple): New input file. (recfix-sort-multiple): New test. 2012-05-16 Jose E. Marchesi <jemarch@gnu.org> src,utils: implementation for sorting with multiple fields. * src/rec-fex.c (rec_fex_parse_str_simple): Initialize function_name, function_data and rewrite_to to NULL. * utils/rec2csv.c: rec2csv_sort_by_fields is now a fex. (rec2csv_process_data): Pass the fex to rec_rset_sort. * utils/recsel.c: recutl_sort_by_fields is now a fex. (recsel_parse_args): Handle several field names in -S. (recsel_process_data): Pass the fex to rec_db_query. * src/rec-db.c (rec_db_query): The sort_by parameter is now a fex. * src/rec-rset.c (rec_rset_record_compare_fn): Use rec_type_values_cmp. (rec_rset_record_compare_fn): Rewritten to work on multiple fields. * src/rec-types.c (rec_type_values_cmp): New function. (REC_TYPE_BOOL_TRUE_VALUES_RE): New constant. (REC_TYPE_BOOL_FALSE_VALUES_RE): Likewise. (REC_TYPE_BOOL_VALUE_RE): Use REC_TYPE_BOOL_TRUE_VALUES_RE and REC_TYPE_BOOL_FALSE_VALUES_RE. * src/rec-int.c (rec_int_check_descriptor): The %sort special field now acccepts a simple_fex as its value. * src/rec-rset.c (rec_rset_update_field_props): Use fexes as order_by fields. * src/rec-rset.c (rec_rset_dup): Use rec_fex_dup to duplicate the fex containing the sort_by fields. (rec_rset_set_order_by_field): Get a fex. (rec_rset_order_by_field): Return a fex. (rec_rset_sort): Get a fex. * src/rec-fex.c (rec_fex_dup): New function. * src/rec-rset.c (rec_rset_s): order_by_fields is now a fex. (REC_RSET_MAX_ORDER): Unused constant removed. (rec_rset_new): order_by_field renamed to order_by_fields. (rec_rset_destroy): Destroy rset->order_by_fields with rec_fex_destroy. 2012-05-08 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (recsel Grouping): New section documenting the -G operation. 2012-05-05 Jose E. Marchesi <jemarch@gnu.org> src: new aggregate Avg. * src/rec-aggregate.c (std_aggregates): New aggregate "avg". (rec_aggregate_std_avg): New function. (rec_aggregate_std_avg_record): Likewise. 2012-05-05 Jose E. Marchesi <jemarch@gnu.org> src: improvements in the aggregates implementation to avoid code duplication. * src/rec-aggregate.c: New global variable std_aggregates containing descriptors for the standard aggregates. (rec_aggregate_reg_add_standard): Use std_aggregates. (rec_aggregate_std_p): Likewise. (REC_AGGREGATE_ACCUM_FUNC): New macro. 2012-05-03 Jose E. Marchesi <jemarch@gnu.org> src: new aggregates min and max. * src/rec-aggregate.c (rec_aggregate_std_min): New function. (rec_aggregate_std_min_record): Likewise. (rec_aggregate_std_max): Likewise. (rec_aggregate_std_max_record): Likewise. (rec_aggregate_reg_add_standard): Register aggregates 'Min' and 'Max'. (rec_aggregate_std_p): Likewise. gnulib module minmax imported. 2012-05-03 Jose E. Marchesi <jemarch@gnu.org> src,utils: recsel now complains if a non-existing aggregate function is called in a fex. * utils/recsel.c (recsel_parse_args): Check for the validity of the aggregate functions used in the field expressions. * src/rec-aggregate.c (rec_aggregate_std_p): New function. 2012-05-03 Jose E. Marchesi <jemarch@gnu.org> gnulib module floor imported. 2012-05-03 Jose E. Marchesi <jco@terma.com> src: aggregate function names are case-insensitive. * src/rec-aggregate.c (rec_aggregate_reg_get): Be case-insensitive when retrieving functions from a registry. 2012-05-03 Jose E. Marchesi <jco@terma.com> src: implementation of the SUM aggregate. * src/rec-aggregate.c (rec_aggregate_std_sum): New function. (rec_aggregate_std_sum_record): Likewise. 2012-05-03 Jose E. Marchesi <jco@terma.com> src: sort after grouping so -S works with -G. * src/rec-db.c (rec_db_query): Sort after grouping, so -S works with -G. 2012-05-03 Jose E. Marchesi <jco@terma.com> src: new semantics and interfaces for aggregates. * src/rec-db.c (rec_db_process_fex): Use _ to separate the function name and the field name when generating names for aggregated fields. * src/rec-fex.c (rec_fex_all_calls_p): New function. * src/rec-aggregate.c (rec_aggregate_std_count): Rewritten with new semantics. 2012-05-03 Jose E. Marchesi <jco@terma.com> src: don't allow subscripts in the fields passed to function calls in fexes and aggregates. * src/rec.h: rec_aggregate_t modified to not get min and max arguments. (REC_FEX_CALL): Don't allow subscripts in the field names used in the function calls. * src/rec-aggregate.c (rec_aggregate_std_count): Don't get 'min' and 'max' arguments. 2012-05-03 Jose E. Marchesi <jco@terma.com> src: field functions renamed to aggregates. * src/rec-aggregate.c (rec_aggregate_std_count): Return a char* instead of a record. * src/rec-db.c (struct rec_db_s): Field functions_reg renamed to aggregates. * src/Makefile.am (librec_la_SOURCES): rec-func.c is now called rec-aggregate.c. * src/rec-aggregate.c: Renamed from src/rec-func.c, and all rec_func_* symbols renamed to rec_aggregate_*. * src/rec.h: rec_func_t modified to return a string instead of a record and renamed to rec_aggregate_t. * src/rec-db.c (rec_db_query): Perform the group-by operation before the selection. 2012-04-27 Jose E. Marchesi <jemarch@gnu.org> src,utils: implementation of field functions, and Count. * src/rec-record.c (rec_record_contains_field): New function. * src/rec-rset.c (rec_rset_merge_records): The merge operation must not create duplicated fields on the resulting record. * src/rec-db.c (rec_db_new): Add standard field functions to the database functions registry. * src/rec-func.c (rec_func_reg_add_standard): New function. (rec_func_std_count): New function. * src/Makefile.am (librec_la_SOURCES): Added rec-func.c * src/rec-db.c (rec_db_s): New field 'functions_reg'. (rec_db_new): Initialize the functions register of the database. (rec_db_destroy): Dispose the memory used by the functions register when destroying the databse. (rec_db_functions): New function. * utils/recutl.c (recutl_build_db): Return NULL if there is not enough memory to create the database. * src/rec-func.c (rec_func_reg_s): New structure. (rec_type_reg_new): New function. (rec_func_reg_destroy): Likewise. (rec_func_reg_add): Likewise. (rec_func_reg_et): Likewise. * src/rec-fex.c (rec_fex_elem_function_data): New function. (rec_fex_elem_s): New field function_data. (rec_fex_parse_elem): Initialize function_data to NULL. * src/rec.h: Data types and functions declarations for the field functions and the function registries. * src/rec-func.c: New file. * src/rec-record.c (rec_record_append): New function. * src/rec-db.c (rec_db_process_fex): Fetch and invoke the corresponding field functions if the fex contains function calls. * src/rec-fex.c (rec_fex_elem_s): New member function_name. (rec_fex_parse_elem): Parse function calls. (rec_fex_elem_function_name): New function. 2012-04-22 Jose E. Marchesi <jemarch@gnu.org> * src/rec.h (REC_FEX_FNAME): New constant. (REC_FEX_CALL): Likewise. (REC_FNAME_FEX_RE): Modified to allow call entries. 2012-04-22 Jose E. Marchesi <jemarch@gnu.org> syntax-check fixes. * python/recmodule.c: Include config.h 2012-04-22 Jose E. Marchesi <jemarch@gnu.org> src: support for >= and <= in selection expressions. * torture/utils/recsel.sh (rec-sex-integer-lessequalthan): New test. (rec-sex-integer-greaterequalthan): Likewise. * src/rec-sex.c (rec_sex_eval_node): Semantics of REC_SEX_OP_GTE and REC_SEX_OP_LTE implemented. * src/rec-sex-ast.h (rec_sex_ast_node_type_e): New entries REC_SEX_OP_LTE and REC_SEX_OP_GTE. * src/rec-sex-tab.y: New tokens REC_SEX_TOK_LTE and REC_SEX_TOK_GTE. (exp): Rules for the >= and <= infix operators. * src/rec-sex-lex.l ("<="): New rule. (">="): Likewise. 2012-04-18 Jose E. Marchesi <jemarch@gnu.org> doc: new CSS file adapted from lilypond. * doc/css/recutils-manuals.css: New file, adapted from lilypond-manuals.css. 2012-04-17 Jose E. Marchesi <jemarch@gnu.org> manual: missing documentation added for some command line options, and inconsistencies removed. * utils/recfix.c (recutl_print_help): Don't document -t|--type, because it is not yet implemented. * doc/recutils.texi (recinf Invocation): Document that -S is the short form for --print-sexps. (recsel Invocation): Document -i|--case-insensitive. (recdel Invocation): Likewise. (recins Invocation): Document the --force command line option. (recfix Invocation): Likewise. (recdel Invocation): -f is not an alias for --force. 2012-04-17 Jose E. Marchesi <jemarch@gnu.org> manual: documentation for field expressions fixed. * doc/recutils.texi (Field Expressions): Documentation fixed in order to reflect the fact that it is possible to repeat the same field in the same field expression. 2012-04-17 Jose E. Marchesi <jemarch@gnu.org> src: make the string comparison operators case-insensitive in selection expressions when requested. * torture/utils/recsel.sh (rec-sex-string-equal): New test. (rec-sex-string-non-equal): Likewise. (rec-sex-string-equal-insensitive): Likewise. (rec-sex-string-non-equal-insensitive): Likewise. * src/rec-sex.c (rec_sex_eval_node): Make the = and != operators case insensitive with strings when applicable. 2012-04-17 Jose E. Marchesi <jemarch@gnu.org> utils,doc: fix the --number command line option. * torture/utils/recsel.sh (recsel-index-long): New test. * utils/recutl.h (RECORD_SELECTION_LONG_ARGS): The long version of -n is --number, not --num. * doc/recutils.texi (recsel Invocation): Document --number as the long version of -n. (recins Invocation): Likewise. (recdel Invocation): Likewise. (recset Invocation): Likewise. 2012-04-16 MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu> src,utils: fix several memory leaks. * src/rec-field.c (rec_field_destroy): Free the value, like the other structure members. * src/rec-mset.c (rec_mset_destroy): Free type names and the mset when destroying it. * src/rec-parser.c (rec_parse_field): Free field name and value after setting them, since only copies are used later. * utils/recutl.c (recutl_parse_db_from_file): Destroy the parser after using it. 2012-04-17 Jose E. Marchesi <jco@terma.com> src: weird duplication of the file contens in rec-crypt-dummy.c fixed. * src/rec-crypt-dummy.c: Weird duplication of file fixed. WTF... 2012-04-15 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Common Options): Typo fixed. 2012-04-09 Jose E. Marchesi <jemarch@gnu.org> rec-mode: don't use a fixed list of keywords when font-locking special fields and other minor fixes. * etc/rec-mode.el (rec-mode): Don't go into navigation mode if the file is empty. (rec-keyword-prefix): New constant. Copyright years list updated. (rec-font-lock-keywords): Recognize as special fields any field whose name starts with %. 2012-04-09 Daiki Ueno <ueno@unixuser.org> rec-mode: fix error when rec-finish-editing on newly created file. * etc/rec-mode.el (rec-update-buffer-descriptors): Don't assume that the current buffer is already saved on the disk. 2012-04-04 Daiki Ueno <ueno@unixuser.org> src: use a pinch of salt when encrypting confidential fields. * src/rec-crypt.c (rec_encrypt): Insert a random salt to improve security. (rec_decrypt): Extract the salt of the encrypted data. 2012-04-03 Daiki Ueno <ueno@unixuser.org> src: several leaks fixed in rec-crypt.c. * src/rec-crypt.c (rec_encrypt): Avoid leaks by properly closing the gcrypt handlers in case of errors. 2012-03-27 MichaÅ‚ MasÅ‚owski <mtjm@mtjm.eu> src: always provide encryption routines and their prototypes. * src/Makefile.am [!CRYPT]: Build rec-crypt-dummy.c instead of rec-crypt.c if encryption is disabled. * src/rec-crypt-dummy.c: New file. * src/rec.h: Unconditionalize encryption routine declarations. 2012-03-13 Jose E. Marchesi <jemarch@gnu.org> * src/rec.h (GNU_REC_H): Sentinel of the header file renamed from REC_H in order to avoid potential conflicts. 2012-03-07 Jose E. Marchesi <jemarch@gnu.org> torture: some system tests for the recsel join functionality. * torture/utils/recsel.sh (recsel-join-default-rset): New test. (recsel-join-no-foreign): Likewise. 2012-03-04 Giuseppe Scrivano <gscrivano@gnu.org> src,lib: use the `read-file' module from gnulib. * lib/read-file.h: Imported from gnulib. * lib/read-file.c: Likewise. * utils/recutl.c (recutl_read_file): Call `fread_file' instead of reimplementing it. 2012-03-02 Giuseppe Scrivano <giuseppe@southpole.se> src: make some variables static. * utils/recutl.c (recutl_sort_p): Make it static. (recutl_order_rset): Likewise. (recutl_order_by_field): Likewise. (recutl_interactive_p): Likewise. (recutl_indexes): Likewise. (recutl_indexes_size): Likewise. 2012-03-02 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (recsel Invocation): Document -j|--join. 2012-03-02 Jose E. Marchesi <jco@terma.com> src: partial implementation of rset mixing in joins. * src/rec-db.c (rec_db_join): Add a record descriptor to the joined record set. 2012-03-01 Jose E. Marchesi <jemarch@gnu.org> src: make the # operator to work with field subnames. * src/rec-fex.c (rec_fex_parse_elem): Use rec_concat_strings. * src/rec-utils.c (rec_concat_strings): New function. * src/rec-sex.c (rec_sex_eval_node): Use the subname of the name node, if present, in the evaluation of OP_SHA operations. * torture/utils/recsel.sh (package-maintainers): New input file. (recsel-sex-sharp-subname): New test. 2012-03-01 Jose E. Marchesi <jemarch@gnu.org> src: support for field subnames with dot notation in fexes. * src/rec-fex.c (rec_fex_parse_elem): Support subnames in fexes. * src/rec.h (REC_FNAME_FEX_RE): New constant. 2012-03-01 Jose E. Marchesi <jemarch@gnu.org> src,torture: fix a bug that caused to have empty records in query results. * torture/utils/recsel.sh (recsel-nonexistent-print): New test. * src/rec-db.c (rec_db_query): Do not add empty records to the result record set. 2012-03-01 Jose E. Marchesi <jemarch@gnu.org> src,utils: inner join implementation. * src/rec-db.c (rec_db_merge_records): New function. * utils/recsel.c (recsel_join): New global. (recutl_print_help): Include help for -j. (recsel_parse_args): Process the new command line option -j|--join. (recsel_process_data): Invoke rec_db_query with the proper join option. * src/rec-db.c (rec_db_query): Get a 'join' argument. 2012-03-01 Jose E. Marchesi <jemarch@gnu.org> src,torture,doc: implementation of the 'rec' field type. * doc/recutils.texi (Other types): Documentation for the 'rec' field type. * torture/utils/recfix.sh (type-rec-norset): New input file. (type-rec-nokey): Likewise. (type-rec-key-notype): Likewise. (type-rec-key-type): Likewise. (type-rec-key-type-invalid): Likewise. (recfix-type-rec-norset): New test. (recfix-type-rec-nokey): Likewise. (recfix-type-rec-key-notype): Likewise. (recfix-type-rec-type): Likewise. (recfix-type-rec-key-type-invalid): Likewise. * src/rec-int.c (rec_int_check_field_type): Check using the type of the key of the referred record set (if any) if the field is of type 'rec'. * src/rec-rset.c (rec_rset_fprops_s): New property key_p. (rec_rset_update_field_props): Reset key_p. (rec_rset_get_props): Initialize key_p. (rec_rset_update_field_props): Update the key_p property. (rec_rset_key): New function. * src/rec-types.c (rec_type_rec): New function. * torture/utils/recfix.sh (type-rec-valid): New input file. (type-rec-invalid-empty): Likewise. (type-rec-invalid-malformed): Likewise. (recfix-type-rec-valid): New test. (recfix-type-rec-invalid-empty): Likewise. (recfix-type-rec-invalid-malformed): Likewise. * src/rec-types.c (REC_TYPE_REC_DESCR_RE): New constant. (REC_TYPE_DESCR_RE): Updated. (rec_type_parse_rec): New function. (rec_type_check_rec): Likewise. * src/rec-int.c (rec_int_rec_type_p): Use REC_RECORD_TYPE_RE. * src/rec.h (REC_RECORD_TYPE_RE): New constant. * src/rec-types.c (REC_TYPE_REC_NAME): New constant. (REC_TYPE_CLASS_RE): Updated. 2012-02-29 Jose E. Marchesi <jemarch@gnu.org> src: support for dot notation in selection expressions. * src/rec-sex-ast.c (rec_sex_ast_node_s): Name structs now contain a name and a subname. (rec_sex_ast_node_set_name): Get a 'subname' argument. (rec_sex_ast_node_name): Return the name. (rec_sex_ast_node_destroy): Destroy both name and subname in a name node. (rec_sex_ast_node_subname): New function. * src/rec-sex-lex.l: Rule for field names modified to accept two field names separated by a dot character. (rec_sex_lex_extract_subname): New function. 2012-02-29 Jose E. Marchesi <jemarch@gnu.org> src: remove obsolete and unused functionality from the rec writer. * src/rec-writer.c (rec_write_record_with_rset): Function removed. (rec_write_field_with_rset): Likewise. (rec_write_field): Don't get a 'name' argument. (rec_writer_s): Field 'password' removed. (rec_writer_new_common): Don't initialize password. (rec_write_field): Encryption support removed. (rec_writer_set_password): Function removed. * torture/Makefile.am (REC_WRITER_TSUITE): Tests for rec_write_record_with_fex removed. * src/rec-writer.c (rec_write_record_with_fex): Function removed. * utils/recutl.c (recutl_eval_field_expression): Likewise. 2012-02-29 Jose E. Marchesi <jemarch@gnu.org> torture: failing unit test adapted to new API. * torture/rec-writer/rec-write-rset.c: Add the 'mode' argument when calling rec_write_rset. 2012-02-29 Jose E. Marchesi <jemarch@gnu.org> src,utils: set high-level logic moved to librec and recset adapted. * utils/recset.c (recset_process_add): Function removed. (recset_process_set): Likewise. (recset_process_ren): Likewise. (recset_process_del): Likewise. (recset_process_actions): Use the new function in the library. * src/rec-db.c (rec_db_set): New function. (rec_db_set_act_rename): Likewise. (rec_db_set_act_set): Likewise. (rec_db_set_act_add): Likewise. (rec_db_set_act_delete): Likewise. 2012-02-29 Jose E. Marchesi <jemarch@gnu.org> src,utils: query, insert and delete high-level logic moved to librec and utilities adapted. * torture/utils/recdel.sh (recdel-index-list): New test. (recdel-case-insensitive): Likewise. (recdel-case-sensitive): Likewise. * src/rec-db.c (rec_db_delete): New function. * torture/utils/recins.sh (multiple-records-case): New input file. (recins-case-insensitive): New test. (recins-case-sensitive): New test. * src/rec-rset.c (rec_rset_set_type): Get a const char* for the 'type' argument. * src/rec-db.c (rec_db_insert): New function. * torture/utils/recsel.sh (recsel_descriptor): New test. * src/rec-writer.c (rec_writer_s): New field "collapse_p". (rec_writer_new_common): Writers don't collapse output by default. (rec_writer_set_collapse): New function. * utils/recutl.c (recutl_indexes): Global is now a pointer to size_t. (recutl_init): Initialize recutl_indexes. (recutl_index_p): Removed. (recutl_index_add_random): Likewise. (recutl_reset_indexes): Adapted to *size_t. (recutl_num_indexes): Likewise. (recutl_index): New function. * src/rec-writer.c (rec_write_rset): Get a 'mode' argument. * src/rec-db.c (rec_db_query): Uniq the records if requested by the user. * utils/recsel.c (recsel_parse_args): Set recsel_write_mode when -P and -R are found. (recsel_print_values): Global removed. (recsel_print_row): Global removed. 2012-02-28 Jose E. Marchesi <jemarch@gnu.org> src,utils,torture: new writer modes values and values_row, and some improvements in the writer algorithms. * utils/recutl.c (recutl_write_db_to_file): Write the db into the file only if there are record sets to write. Otherwise create an empty file. * src/rec-writer.c (rec_write_string): New function. * torture/rec-writer/rec-write-comment.c (rec_write_comment_nominal): Added test with three lines. * torture/rec-writer/rec-write-record.c (rec_write_record_values): New unit test. (rec_write_record_values_row): Likewise. * torture/rec-writer/rec-write-field.c (rec_write_field_values): New unit test. (rec_write_field_values_row): Likewise. * src/rec-writer.c (rec_write_field_with_rset): Implement REC_WRITER_VALUES and REC_WRITER_VALUES_ROW semantics. * src/rec.h (rec_writer_mode_e): New write modes REC_WRITER_VALUES and REC_WRITER_VALUES_ROW. 2012-02-28 Jose E. Marchesi <jemarch@gnu.org> src: random indexes support added to rec_db_query. * src/rec-db.c (rec_db_query): Get an INDEX paramerter pointing to a list of index intervals. (rec_db_record_selected_p): Likewise. (rec_db_record_selected_p): Handle indexes. (rec_db_add_random_indexes): New function. (rec_db_indexes_p): New function. 2012-02-28 Jose E. Marchesi <jemarch@gnu.org> src: first version of rec_db_query. * src/rec-db.c (rec_db_query): New function. (rec_db_process_fex): New function. (rec_db_record_selected_p): New function. * src/rec.h: Prototype for rec_db_query. 2012-02-27 Jose E. Marchesi <jemarch@gnu.org> src: small changes in rec-db. * src/rec-db.c (rec_db_s): Field 'size' is now of type size_t. (rec_db_destroy): Be a no-operation if NULL is passed. (rec_db_size): Return a size_t value. (rec_db_get_rset): The 'position' argument is now a size_t. (rec_db_insert_rset): Likewise. (rec_db_remove_rset): Likewise. (rec_db_type_p): Get a const char* argument. 2012-02-27 Jose E. Marchesi <jemarch@gnu.org> torture: fix offline make perf. * torture/utils/Makefile.am (perf): Invoke $(srcdir)/p-recsel.sh and set srcdir. 2012-02-26 Jose E. Marchesi <jemarch@gnu.org> python: start of the python bindings for librec. * python/README: New file. * python/setup.py: Likewise. * python/recmodule.c: Likewise. (prec_version): New function. (initrec): Likewise. (prec_functions): New global. 2012-02-26 Jose E. Marchesi <jemarch@gnu.org> src,doc,torture: support for UUID field type and UUID auto fields. * torture/utils/config.sh.in (UUID_SUPPORT): Set to @have_uuid@. * torture/utils/recfix.sh (uuid-fields-ok): New input file. (uuid-fields-invalid): Likewise. (recfix-uuid-ok): New test. (recfix-uuid-invalid): Likewise. * doc/recutils.texi (Other types): UUID type documented. (%auto): Likewise. * src/rec-int.c (rec_int_check_descriptor): Allow auto-incremented fields of type uuid if suuport for uuids is compiled in. * src/rec-rset.c (rec_rset_add_auto_fields): Handle REC_TYPE_UUID. (rec_rset_add_auto_field_uuid): New function. * src/rec.h (rec_type_kind_e): Added entry REC_TYPE_UUID. * src/rec-types.c (REC_TYPE_UUID_NAME): New constant. (REC_TYPE_CLASS_RE): Add REC_TYPE_UUID_NAME. (rec_type_check_uuid): New function. (rec_type_new): Handle REC_TYPE_UUID. (rec_type_kind_str): Likewise. (rec_type_check): Likewise. (rec_type_parse_type_kind): Likewise. * src/Makefile.am (librec_la_LIBADD): link with UUIDLIBS when appropriate. * configure.ac: Check for libuuid and subst UUIDLIBS. Define the automake conditional UUID_TYPE. * README-dev: List the dependency on libuuid. 2012-02-26 Jose E. Marchesi <jemarch@gnu.org> src,doc,torture: support for rewrite rules in field expressions. * torture/utils/recsel.sh (recsel-fex-rewrite-all): New test. (recsel-fex-rewrite-subscript-single): Likewise. (recsel-fex-rewrite-subscript-multi): Likewise. (recsel-fex-rewrite-several): Likewise. * torture/rec-fex/rec-fex-elem-rewrite-to.c (rec_fex_elem_field_rewrite_to_default): New unit test. (rec_fex_elem_field_rewrite_to_nominal): Likewise. * torture/Makefile.am (REC_FEX_TSUITE): Added rec-fex/rec-fex-elem-field-rewrite-to.c. * torture/rec-fex/tsuite-rec-fex.c (tsuite_rec_fex): Added test_rec_fex_elem_rewrite_to. * torture/rec-fex/rec-fex-elem-rewrite-to.c: New file. (test_rec_fex_elem_rewrite_to): New function. * doc/recutils.texi (Field Expressions): Documentation for rewrite rules added. * torture/rec-writer/rec-write-field.c (rec_write_field_rewrite): New unit test. (rec_write_field_sexp_rewrite): Likewise. * src/rec-writer.c (rec_write_record_with_fex): Invoke rec_write_field passing the rewrite_to property of the fex elem. (rec_write_field): Get an extra argument 'name'. (rec_write_field_with_rset): Likewise. (rec_write_record_with_rset): Adapt to new rec_write_field_with_rset. (rec_write_field_str): Likewise. * src/rec-fex.c (rec_fex_parse_elem): The 'str' field must contain a copy of the textual entry (including rewrite rules and subscripts) and not just the field name. (rec_fex_elem_rewrite_to): New function. * src/rec.h (REC_FNAME_SUB_RE): Allow the inclusion of a rewrite rule at the end of the entry. * src/rec-fex.c (rec_fex_elem_s): New field 'rewrite_to'. (rec_fex_parse_elem): Parse the rewrite rule if it is present in the fex entry. 2012-02-26 Jose E. Marchesi <jemarch@gnu.org> * TESTS: Regenerated. 2012-02-26 Jose E. Marchesi <jemarch@gnu.org> torture: performance tests for recsel using a sex with regexp matching. * torture/utils/p-recsel.sh (recsel-200-records-sex-regexp): New test. (recsel-500-records-sex-regexp): Likewise. (recsel-1000-records-sex-regexp): Likewise. (recsel-10000-records-sex-regexp): Likewise. (recsel-20000-records-sex-regexp): Likewise. 2012-02-25 Jose E. Marchesi <jemarch@gnu.org> torture: support for performance test, and some performance recsel tests. * torture/utils/testutils.sh: Get a second parameter 'perf'. (test_tool): Calculate and print timing statistics if $perf is not empty. * torture/utils/p-recsel.sh: New file. * torture/utils/Makefile.am (perf): New rule. * Makefile.am (perf): Likewise. 2012-02-25 Jose E. Marchesi <jemarch@gnu.org> utils: fix short option for --random in help strings. * utils/recutl.c (recutl_print_help_record_selection): The short command line option for --random is -m not -R. 2012-02-25 Jose E. Marchesi <jemarch@gnu.org> src,utils,torture: support for compound field names removed, and code cleanup. * torture/utils/recset.sh (recset-rename-all-key): Don't use a compound field name. * doc/recutils.texi (Compound Field Names): Section removed, because it is now obsolete. (mdb2rec Examples): Removed examples involving compound field names. * src/rec.h (REC_FNAME_RE): Remove the trailing colon. * torture/utils/recsel.sh (compound-names): Input file removed, since there are not compound names anymore. (recsel-sex-field-names): Test removed. (recsel-sex-field-names-2): Likewise. * src/rec-sex-lex.l (FIELD_NAME): Set to contain just one name part. * src/rec-fex.c (rec_fex_parse_str_simple): Remove the trailing : from the field names if present. (rec_fex_parse_elem): Likewise. * torture/rec-fex/rec-fex-elem-field-name-str.c: Removed. * torture/rec-field-name/rec-field-name-p.c: Renamed. * torture/rec-field-name/rec-field-name-normalise.c: Renamed from rec-field-name-part-normalise.c. * torture/rec-field-name/rec-field-name-destroy.c: File removed. * torture/rec-field-name/rec-field-name-str-p.c: Likewise. * torture/rec-field-name/rec-field-name-size.c: Likewise. * torture/rec-field-name/rec-field-name-set.c: Likewise. * torture/rec-field-name/rec-field-name-ref-p.c: Likewise. * torture/rec-field-name/rec-field-name-new.c: Likewise. * torture/rec-field-name/rec-field-name-get.c: Likewise. * torture/rec-field-name/rec-field-name-eql-p.c: Likewise. * torture/rec-field-name/rec-field-name-dup.c: Likewise. * torture/rec-field-name/tsuite-rec-field-name.c: Removed test cases for the no longer existing rec_field_name_* functions. * utils/recins.c (recins_parse_args): Adapted to the new field names. * utils/mdb2rec.c (get_field_name): Likewise. (process_table): Likewise. * utils/rec2csv.c (rec2csv_parse_args): Likewise. (rec2csv_generate_csv): Likewise. * utils/csv2rec.c (field_cb): Likewise. * utils/recset.c (recset_process_add): Likewise. (recset_process_set): Likewise. (recset_process_ren): Likewise. (recset_process_del): Likewise. * utils/recutl.c (recutl_order_by_field): Field name is now a NULL terminated string. * utils/recsel.c (recutl_sort_by_field): Likewise. (recsel_group_by_field): Likewise. * src/rec-types.c (rec_type_check_int): Get a const char* argument. (rec_type_check_bool): Likewise. (rec_type_check_range): Likewise. (rec_type_check_real): Likewise. (rec_type_check_size): Likewise. (rec_type_check_line): Likewise. (rec_type_check_regexp): Likewise. (rec_type_check_date): Likewise. (rec_type_check_email): Likewise. (rec_type_check_enum): Likewise. (rec_type_check_field): Likewise. * src/rec-crypt.c (rec_encrypt): Get const char* arguments. (rec_decrypt): Likewise. (rec_decrypt_field): Likewise. (rec_decrypt_record): Likewise. (rec_encrypt_field): Likewise. * src/rec-sex-parser.c (rec_sex_parser_set_in): Get a const char * argument. (rec_sex_parser_run): Likewise. * src/rec-sex.c (rec_sex_destroy): Be a no-operation if NULL is passed. (rec_sex_compile): Get a const char * argument. (rec_sex_eval_node): Adapted to new field names. * src/rec-int.c (rec_int_rec_type_p): Get a const char * argument. (rec_int_rec_type_p): Use REC_FNAME_RE instead of REC_FNAME_PART_RE. * src/rec-types.c (rec_type_check): Get a const char * argument. * src/rec-int.c (rec_int_check_field_type): Simplified, since there are no compound field names anymore. (rec_int_check_record_mandatory): Adapted to the new field names. (rec_int_check_record_unique): Likewise. (rec_int_check_record_prohibit): Likewise. (rec_int_check_record_key): Likewise. (rec_int_check_descriptor): Likewise. * src/rec-writer.c (rec_writer_destroy): Be a no-operation if NULL is passed. (rec_write_field_with_rset): Adapted to the new field names. (rec_write_field_name): Likewise. (rec_write_record_with_fex): Likewise. * src/rec-parser.c (rec_parser_new): Get a const char* argument. (rec_parser_new_str): Likewise. (rec_parser_destroy): Be a no-operation if a NULL pointer is passed. (rec_parse_field_name): Store the field name in a char string. (rec_parse_field_name_part): Removed. (rec_parse_field): Adapted to the new field names. (rec_parse_field_name_str): Removed. (rec_parse_field_name_str): Return a char*. (rec_parse_record_str): Get a const char* argument. * src/rec-fex.c (struct rec_fex_elem_s): Use a const char* for the referred field(s) name. (rec_fex_init): New function. (rec_fex_destroy): Be a no-operation if a NULL pointed is passed. (rec_fex_new): Use const chars* for the field names. (rec_fex_check): Get const char* parameters for the strings. (rec_fex_size): Return a size_t. (rec_fex_elem_field_name): Return a const char *. (rec_fex_elem_set_field_name): Get a const char * argument and return a boolean denoting out-of-memory. (rec_fex_elem_field_name_str): Removed. (rec_fex_member_p): Get a const char * argument for the field names. (rec_fex_append): Likewise. (rec_fex_parse_str_simple): Get const char* arguments for the strings. (rec_fex_parse_str_subscripts): Likewise. (rec_fex_parse_elem): Likewise. * src/rec-rset.c (struct rec_rset_fprops_s): fname is now a const char *. (struct rec_rset_s): order_by_field is now a const char*. (rec_rset_order_by_field): Return a const char *. (rec_rset_destroy): Adapted to the new field names. (rec_rset_dup): Likewise. (rec_rset_set_type): Likewise. (rec_rset_rename_field): Likewise. (rec_rset_field_confidential_p): Likewise. (rec_rset_get_field_type): Likewise. (rec_rset_set_order_by_field): Likewise. (rec_rset_sort): Likewise. (rec_rset_group): Likewise. (rec_rset_record_compare_fn): Likewise. (rec_rset_update_field_props): Likewise. (rec_rset_get_props): Likewise. (rec_rset_add_auto_field_int): Likewise. (rec_rset_add_auto_field_date): Likewise. * src/rec-field-name.c (rec_field_name_equal_p): New function. * src/rec-record.c (rec_record_field_p): Get a const char* for the field name. (rec_record_get_num_fields_by_name): Likewise. (rec_record_get_field_by_name): Likewise. (rec_record_remove_field_by_name): Likewise. (rec_record_uniq): Adapted to the new field names. * src/rec-field.c (rec_field_name_str): Removed. (rec_field_equal_p): Use strcmp to compare field names. (rec_field_destroy): Be a no-operation if passed a NULL pointer. (rec_field_init): New function. (rec_field_new): Adapted to the new field names, and handle out of memory eventualities. (rec_field_dup): Likewise. (rec_field_to_comment): Handle out-of-memory conditions properly. * src/rec-field-name.c (rec_field_name_normalise): Renamed from rec_field_name_part_normalise. (rec_field_name_p): Renamed from rec_field_name_str_p. (rec_std_field_name_new): Removed. (rec_field_name_destroy): Likewise. (rec_field_name_size): Likewise. (rec_field_name_get): Likewise. (rec_field_name_set): Likewise. (rec_field_name_dup): Likewise. (rec_field_name_eql_p): Likewise. (rec_field_name_equal_p): Likewise. (rec_field_name_ref_p): Likewise. (rec_field_name_str_p): Likewise. (rec_field_name_part_str_p): Remove (rec_std_field_name): Return a const char*. * src/rec.h (REC_FNAME_PART_RE): Removed. (rec_field_name_*): Function prototypes removed. * src/rec-field.c (rec_field_s): Change the 'name' field to be a NULL terminated string. (rec_field_name): Return a const char*. (rec_field_set_name): Get the name as a const char * and return a boolean indicating out-of-memory. (rec_field_value): Return a const char*. (rec_field_source): Return a const char*. (rec_field_set_source): Get a const char * and return a boolean indicating out-of-memory. (rec_field_location_str): Return a const char*. (rec_field_char_location_str): Return a const char*. 2012-02-24 Jose E. Marchesi <jemarch@gnu.org> src: documentation improvements in the public header. * src/rec.h: Improve the documentation of the functions related with the rec_field ADT. 2012-02-22 Jose E. Marchesi <jemarch@gnu.org> src,utils: handle out-of-memory conditions. * src/rec-rset.c (rec_rset_add_auto_field_date): Return a boolean indicating whether there was enough memory to complete the operation. (rec_rset_add_auto_field_int): Likewise. (rec_rset_add_auto_fields): Return a copy of the record set or NULL in an out-of-memory condition. (rec_rset_sort): Return a copy of the record set, or NULL in an out-of-memory condition. * utils/recsel.c (recsel_process_data): Emit an out of error message when appropriate. * utils/recins.c (recins_insert_record): Likewise. (recins_add_new_record): Likewise. * utils/recfix.c (recfix_do_auto): Likewise. (recfix_do_sort): Likewise. * utils/rec2csv.c (rec2csv_process_data): Likewise. * src/rec-rset.c (rec_rset_init): New function. (rec_rset_new): Use rec_rset_init and rec_rset_destroy in out-of-memory conditions. (rec_rset_destroy): Be a no-operation if NULL is passed. (rec_rset_destroy): Also assume that other ADT destructors behave the same. (rec_rset_dup): Use rec_rset_init and rec_rset_destroy in out-of-memory conditions. (rec_rset_group): Return a copy of RSET or NULL if out of memory. (rec_rset_merge_records): Return a copy of TO_RECORD, or NULL if out of memory. * src/rec-mset.c (rec_mset_destroy): Be a no-op if the passed pointer is NULL. (rec_mset_init): New function. (rec_mset_new): Call to rec_mset_init and rec_mset_destroy if in an end-of-memory condition. (rec_mset_dup): Likewise. (rec_mset_sort): API changed to return false if there is not enough memory to perform the operation, leaving the original mset untoched. (rec_mset_insert_at): Call rec_mset_elem_destroy when out of memory. (rec_mset_elem_init): New function. (rec_mset_insert_after): Call rec_mset_elem_destroy when out of memory. (rec_mset_add_sorted): Likewise. (rec_mset_elem_destroy): Be a no-operation if called with NULL. * src/rec-record.c (rec_record_dup): Use rec_record_init and rec_record_destroy in out-of-memory conditions. (rec_record_init): New function. (rec_record_new): Use rec_record_init. (rec_record_destroy): Be a no-op if the passed pointer is NULL. * src/rec-field-name.c (rec_field_name_set): Return false if strdup returns NULL. * src/rec-crypt.c (rec_encrypt_field): Return false if strdup returns NULL. * src/rec-field.c (rec_field_set_location): Avoid a segmentation fault if malloc returns NULL. 2012-02-20 Giuseppe Scrivano <giuseppe@southpole.se> (tiny change) src,utils: fail gracefully on allocation errors. * src/rec-parser.c (rec_parse_field): Return an error if `new' was not allocated correctly. * utils/recsel.c (main): Fail gracefully if `db' was not allocated correctly. 2012-01-19 Jose E. Marchesi <jemarch@gnu.org> utils: error reporting must always use recutl_fatal or recutl_error. * utils/recutl.h (RECORD_SELECTION_ARGS_CASES): Use recutl_fatal instead of fprintf. (RECORD_SELECTION_ARGS_CASES): Added a trailing \n to an error message missing it. 2012-01-17 Jose E. Marchesi <jemarch@gnu.org> doc: use same optarg names in --help outputs and the manual. * doc/recutils.texi (recsel Invocation): Use same optarg names than in the synopsis used in --help. (recins Invocation): Likewise. (recdel Invocation): Likewise. (recset Invocation): Likewise. * utils/recutl.c (recutl_print_help_record_selection): Likewise. 2012-01-17 Jose E. Marchesi <jemarch@gnu.org> doc: make the texinfo documentation easier to find. * man/Makefile.am (rec2csv.1): Use the 'recutils' manual instead of the name of the utilities. (csv2rec.1): Likewise. (mdb2rec.1): Likewise. (recdel.1): Likewise. (recfix.1): Likewise. (recinf.1): Likewise. (recins.1): Likewise. (recsel.1): Likewise. (recset.1): Likewise. (recfmt.1): Likewise. * doc/recutils.texi: Entries for the individual utilities in the info index. 2012-01-16 Jose E. Marchesi <jemarch@gnu.org> src,utils: fixes of typos in message strings. * src/rec-int.c (rec_int_check_rset): Use 'shall' instead of 'should' in text messages. (rec_int_check_descriptor): Likewise. * utils/recins.c (recutl_print_help): Typos in help strings fixed. 2012-01-15 Jose E. Marchesi <jemarch@gnu.org> recsel: print an error if an invalid fex is passed to -p,-P or -R. * utils/recsel.c (recsel_parse_args): Print an error message if an invalid fex is passed to -p, -P or -R. 2012-01-14 Jose E. Marchesi <jemarch@gnu.org> manual: documentation of -G,--group-by. * doc/recutils.texi (recsel Invocation): Documentation of -G|--group-by. 2012-01-14 Jose E. Marchesi <jemarch@gnu.org> torture: tests for the group-by operation. * torture/utils/recsel.sh (group-records): New input file. (recsel-group-records): New test. (recsel-group-records-sort): Likewise. (recsel-group-records-non-existing-field): Likewise. (recsel-group-one-record): Likewise. (recsel-group-records-missing): Likewise. 2012-01-14 Jose E. Marchesi <jemarch@gnu.org> librec,torture: record sorting criteria adjusted to keep the relative positions of 'equal' records. * torture/utils/recfix.sh (Bool): Fix expected result to expect the sorting algorithm to keep the relative order of equal fields. (unsorted-int-with-equals): New input file. (unsorted-range-with-equals): Likewise. (unsorted-real-with-equals): Likewise. (unsorted-lex-with-equals): Likewise. (unsorted-date-with-equals): Likewise. (recfix-sort-ints-with-equals): New test. (recfix-sort-ranges-with-equals): Likewise. (recfix-sort-reals-with-equals): Likewise. (recfix-sort-lex-with-equals): Likewise. (recfix-sort-dates-with-equals): Likewise. * src/rec-rset.c (rec_rset_record_compare_fn): Keep the relative order of 'equal' fields when sorting. This implies a penalty in performance, but makes the sorting algorithm to show a more predictable behaviour, especially when using for record grouping. 2012-01-14 Jose E. Marchesi <jemarch@gnu.org> recsel,librec: implementation of the group-by operation. * src/rec-rset.c (rec_rset_group): New function. (rec_rset_merge_records): New function. * utils/recsel.c (recsel_process_data): Invoke rec_rset_group_by if a group-by field was specified in the command line. * src/rec.h: Prototype for rec_rset_group. * utils/recsel.c (recsel_group_by_field): New global. (GNU_longOptions): New option --group-by. (recutl_print_help): Documentation for -G|--group-by. (recsel_parse_args): Manage -G|--group-by. 2012-01-13 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.5. * utils/recutl.c: Include time.h. * NEWS: Date updated in the 1.5 entry. * configure.ac: Version number changed to 1.5. 2012-01-13 Jose E. Marchesi <jemarch@gnu.org> torture,utils: make the tests run properly in CRLF systems, and missing header included in recutl.c. * utils/recutl.c: Include stdint.h, since int32_t is used in the file. * torture/utils/testutils.sh: Post-process the output of the tools to remove CR characters. This avoid the tests to fail when running in MSDOS or Windows systems. Problem reported and patch sent by Bruno Haible. 2012-01-13 Jose E. Marchesi <jemarch@gnu.org> * gnulib update. 2012-01-12 Jose E. Marchesi <jco@terma.com> librec: enumeration mixing in rec-parser fixed. * src/rec-parser.c (rec_parser_init_common): Reset parser->error to REC_PARSER_NOERROR. 2012-01-12 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.4.93. * configure.ac: Version number changed to 1.4.93. 2012-01-12 Jose E. Marchesi <jemarch@gnu.org> Portability issues with random and variadic macros fixed. * utils/recutl.c (recutl_index_add_random): Use random_r and srandom_r instead of random and srandom. (recutl_index_add_random): Be careful to generate the requested number of randoms. * lib/random_r.c: Imported from gnulib. * m4/random_r.m4: Likewise. * configure.ac: Require C99 with the macro AC_PROG_CC_C99. 2012-01-11 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.4.92. * configure.ac: Version number changed to 1.4.92. 2012-01-11 Jose E. Marchesi <jemarch@gnu.org> torture: don't run encryption related tests if crypt support was not compiled into the library. * torture/utils/recsel.sh: Run encryption related tests only if crypt_support is "yes". It defaults to "yes". * torture/utils/Makefile.am (TESTS_ENVIRONMENT): Pass crypt_support to the test scripts. 2012-01-11 Jose E. Marchesi <jemarch@gnu.org> utils: accept -s|--password only if compiled with encryption support. * utils/recutl.h: Define ENCRYPTION_SHORT_ARGS. * utils/recins.c (recins_parse_args): Likewise. * utils/recsel.c (recsel_parse_args): Process -s|--password only if compiled with encryption support. 2012-01-11 Jose E. Marchesi <jemarch@gnu.org> * gnulib modules fprintf-posix, vasprintf-posix and printf-posix imported. 2012-01-10 Jose E. Marchesi <jemarch@gnu.org> * strcasestr gnulib module imported. * gnulib update. 2012-01-10 Jose E. Marchesi <jemarch@gnu.org> librec,utils: handle the return values of asprintf and fread. * utils/recutl.c (recutl_read_file): Handle fread errors. * src/rec-int.c (ADD_ERROR): Don't ignore the value returned by asprintf. * utils/rec2csv.c (rec2csv_generate_csv): Likewise. * src/rec-types.c (rec_type_check_range): Likewise. (rec_type_check_size): Likewise. * src/rec-rset.c (rec_rset_add_auto_field_int): Likewise. * src/rec-parser.c (rec_parser_perror): Likewise. * src/rec-fex.c (rec_fex_str): Likewise. 2012-01-10 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.4.91. * configure.ac: Version number changed to 1.4.91. 2012-01-10 Jose E. Marchesi <jemarch@gnu.org> librec: compilation problem in remote descriptors support fixed. * src/rec-int.c (rec_int_merge_remote): Missing variable tmpfile_des added. 2012-01-10 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.4.90. * NEWS: Entry for 1.5. * configure.ac: Version number changed to 1.4.90. * po/de.po: Updated. * po/fi.po: Likewise. * po/nl.po: Likewise. * po/recutils.pot: Likewise. * po/sv.po: Likewise. 2012-01-10 Jose E. Marchesi <jemarch@gnu.org> Warning fixes. * utils/recfmt.c (recfmt_process_db): Useless variable rset_size removed. * src/rec-mset.c (rec_mset_dup): Useless variable new_elem removed. (rec_mset_sort): Likewise. (rec_mset_dump): Use %zd in printf to print size_t values. * utils/recinf.c (print_info_file): Likewise. * src/rec-int.c (rec_int_check_rset): Likewise. (rec_int_check_descriptor): Likewise. * libcsv/libcsv.c: Copyright year update. 2012-01-10 Jose E. Marchesi <jco@terma.com> * doc/recutils.texi: FSF copyright years updated in recutils.texi. 2012-01-10 Jose E. Marchesi <jemach@gnu.org> Removal of warnings. * utils/recutl.h (RECORD_SELECTION_ARGS_CASES): Likewise. * utils/recutl.c (recutl_index_list_parse): Likewise. * src/rec-fex.c (rec_fex_check): Likewise. * src/rec-int.c (rec_int_merge_remote): Likewise. * src/rec-rset.c (rec_rset_rename_field): Likewise. * src/rec-record.c (rec_record_subset_p): Unused variables removed. (rec_record_uniq): Likewise. * src/rec-types.c (rec_type_check_re): Unused function removed. * src/rec-field-name.c: Include rec-utils.h. * src/rec-mset.c (rec_mset_iterator_next): Unused variable removed. 2012-01-10 Jose E. Marchesi <jemarch@gnu.org> Unit tests fixes. * src/rec-writer.c (rec_write_field_with_rset): Don't write the blank character before field values if printin sexps. * torture/rec-field/rec-field-to-comment.c (rec_field_to_comment_nominal): Adjusted to the new behaviour of the writer with fields having empty values. 2012-01-09 Jose E. Marchesi <jemarch@gnu.org> librec: rec_mset_append gets an extra argument indicating the type of element for counting. * src/rec-mset.c (rec_mset_append): Get an argument elem_type. (rec_mset_dup): Use new rec_mset_append. * src/rec.h: New argument elem_type to rec_mset_append. * utils/recset.c (recset_process_add): Likewise. (recset_process_set): Likewise. * utils/recins.c (recins_insert_record): Likewise. (recins_parse_args): Likewise. * utils/mdb2rec.c (process_table): Likewise. (process_table): Likewise. * utils/csv2rec.c (field_cb): Likewise. (record_cb): Likewise. * src/rec-int.c (rec_int_merge_remote): Likewise. * src/rec-parser.c (rec_parse_record): Likewise. (rec_parse_record): Likewise. (rec_parse_record): Likewise. * src/rec-rset.c (rec_rset_set_type): Likewise. 2012-01-09 Jose E. Marchesi <jemarch@gnu.org> torture: adapt unit tests to the new librec api. * torture/rec-parser/rec-parse-record.c: Adapted to the new librec API. * torture/rec-writer/rec-write-db.c: Likewise. * torture/rec-writer/rec-write-record-with-fex.c: Likewise. * torture/rec-writer/rec-write-rset.c: Likewise. * torture/rec-writer/rec-write-record.c: Likewise. * torture/rec-parser/rec-parse-record-str.c: Likewise. 2012-01-09 Jose E. Marchesi <jemarch@gnu.org> algol68: dist problem fixed. * algol68/Makefile.am (nodist_librec_a68_a_SOURCES): Don't distribute the generated C files from the algol68 sources. 2012-01-09 Jose E. Marchesi <jco@terma.com> torture: get some unit tests up to date. * torture/Makefile.am (REC_MSET_TSUITE): rec-mset-get.c renamed to rec-mset-get-at.c. * torture/rec-mset/rec-mset-get.c (rec_mset_get_empty): Likewise. * torture/rec-mset/rec-mset-count.c: Include rec.h instead of rec-mset.h. (rec_mset_count_existing): Adapted to the new mset semantics. * torture/rec-mset/rec-mset-type-p.c: Likewise. * torture/rec-mset/rec-mset-register-type.c: Likewise. * torture/rec-mset/rec-mset-new.c: Likewise. * torture/rec-mset/rec-mset-get.c: Likewise. * torture/rec-mset/rec-mset-dup.c: Likewise. (rec_mset_dup_nonempty): Adapted to the new mset semantics. 2012-01-08 Jose E. Marchesi <jemarch@gnu.org> utils: support for the selection of random records in recsel, recins, recdel and recset. * torture/utils/recset.sh (recset-random-all): New test. (recset-random-one): Likewise. * torture/utils/recdel.sh (recdel-random-all): New test. (recdel-random-all-force): Likewise. * torture/utils/recins.sh (one-record): New input file. (recins-random-all): New test. (recins-random-one): Likewise. * torture/utils/recsel.sh (recsel-random-all): New test. (recsel-random-one): Likewise. (recsel-num-and-random): Likewise. (recsel-sex-and-random): Likewise. (recsel-quick-and-random): Likewise. * doc/recutils.texi (recsel Invocation): --random|-m documented. (recins Invocation): Likewise. (recdel Invocation): Likewise. (recset Invocation): Likewise. * utils/recset.c (recutl_random): New global. (recset_process_actions): Manage random records. * utils/recdel.c (recutl_random): New global. (recdel_delete_records): Manage random records. (recutl_print_help): Document --random|-r. * utils/recins.c (recutl_random): New global. (recins_add_new_record): Manage random records. * doc/recutils.texi (recins Invocation): Likewise. * utils/recsel.c (recsel_process_data): Manage random indexes. * utils/recutl.c (recutl_reset_indexes): New function. * utils/recsel.c (recutl_print_help): Synopsis updated with -r. * utils/recutl.h (RECORD_SELECTION_ARGS): RANDOM_ARG added. (RECORD_SELECTION_LONG_ARGS): Entry for random. (RECORD_SELECTION_SHORT_ARGS): Likewise. * utils/recsel.c (recutl_random): New global. * utils/recutl.h (RECORD_SELECTION_ARGS_CASES): Manage --random|-r. * utils/recutl.c (recutl_index_add_random): New function. (recutl_print_help_record_selection): Documentation for --random|-r. (recutl_random): New global variable. * utils/recutl.h (recutl_index_add_random): New function prototype. 2012-01-08 Jose E. Marchesi <jemarch@gnu.org> recutl: remove an arbitrary limit in the number of indexes. * utils/recutl.c (recutl_index_s): New structure. (recutl_index_list_parse): Allocate the indexes list dynamically. 2012-01-08 Jose E. Marchesi <jemarch@gnu.org> Copyright years update. * utils/recutl.c (recutl_print_version): Copyright updated. * doc/recutils.texi: Likewise. 2012-01-08 Jose E. Marchesi <jemarch@gnu.org> manual: documentation for the new indexes system. * utils/recsel.c (recutl_print_help): Documentation updated. * utils/recutl.c (recutl_print_help_record_selection): Likewise. * doc/recutils.texi (recsel Invocation): Update description of -n. (recins Invocation): Likewise. (recdel Invocation): Likewise. (recset Invocation): Likewise. 2012-01-08 Jose E. Marchesi <jemarch@gnu.org> torture: tests for the new indexes system. * utils/recins.c (recins_add_new_record): Dup the record to insert, since it could be used to replace more than one record. * torture/utils/recins.sh (recins-replace-range): New test. (recins-replace-several-indexes): Likewise. * torture/utils/recset.sh (recset-set-field-in-range): New test. (recset-set-field-in-several-indexes): Likewise. * torture/utils/recsel.sh (recsel-index-toobig): New test. (recsel-index-range-1): Likewise. (recsel-index-range-2): Likewise. (recsel-index-range-3): Likewise. (recsel-index-several): Likewise. (recsel-index-invalid-1): Likewise. (recsel-index-invalid-2): Likewise. (recsel-index-invalid-3): Likewise. (recsel-index-invalid-4): Likewise. 2012-01-07 Jose E. Marchesi <jemarch@gnu.org> utils: support for lists of indexes including ranges. * utils/recset.c (recutl_num): Global variable removed. (recset_process_actions): Use the new indexes system. (recset_process_ren): Likewise. * utils/recins.c (recutl_num): Global variable removed. (recins_add_new_record): Use the new indexes system. * utils/recdel.c (recutl_num): Global variable removed. (recdel_delete_records): Use new indexes system. (recdel_parse_args): Likewise. (main): Likewise. * utils/recsel.c (recsel_process_data): Use new indexes system. * utils/recutl.h (RECORD_SELECTION_ARGS_CASES): Use recutl_index_list_parse to handle -n. * utils/recutl.c (recutl_num_indexes): New function. (recutl_index_p): New function. * utils/recsel.c (recutl_num): Global variable deleted. * utils/recutl.c (INDEX_LIST_ENTRY_RE): New constant. (INDEX_LIST_RE): Likewise. (recutl_index_list_parse): New function. * utils/recutl.h (recutl_index_list_s): New structure. 2012-01-07 Jose E. Marchesi <jemarch@gnu.org> recins: implement the auto fields using the rec_rset facilities. * utils/recins.c (recins_add_auto_field_int): Function deleted. (recins_add_auto_field_date): Likewise. (recins_add_auto_fields): Likewise. (recins_insert_record): Use rec_rset_add_auto_fields instead of recins_add_auto_fields. (recins_insert_record): Likewise. 2012-01-07 Jose E. Marchesi <jemarch@gnu.org> recfix: New operation --auto. * torture/utils/recfix.sh (missing-auto-fields): New input file. (recfix-missing-auto-fields): New test. * doc/recutils.texi (recfix Invocation): Documentation for the --auto operation. (recfix Examples): Example with --auto added. * utils/recfix.c (recfix_op): RECFIX_OP_AUTO. (GNU_longOptions): Entry for --auto. (recutl_print_help): Documentation for --auto. (recfix_parse_args): Handle the --auto operation. (main): Likewise. * src/rec-rset.c (rec_rset_add_auto_fields): New function. (rec_rset_add_auto_field_int): Likewise. (rec_rset_add_auto_field_date): Likewise. Include errno.h and locale.h. * utils/recfix.c (recfix_do_auto): New function. 2012-01-07 Jose E. Marchesi <jemarch@gnu.org> recsel: Support for --uniq|-U. * torture/utils/recsel.sh (duplicated-fields): New input file. (recsel-uniq): New test. (recsel-uniq-long): New test. * doc/recutils.texi (recsel Invocation): Documentation for --uniq|-U. * utils/recsel.c (GNU_longOptions): New command line argument --uniq|-U. (recutl_print_help): Documentation for --uniq|-U. (recsel_parse_args): Handle --uniq|-U. (recsel_uniq): New global. (recsel_process_data): Remove duplicated fields in the processed records if requested by the user with --uniq|-U. 2012-01-04 Jose E. Marchesi <jemarch@gnu.org> librec: Initial implementation of the rec_record_uniq function. * src/rec-record.c (rec_record_uniq): New function. * src/rec.h: Prototype for rec_record_uniq. 2012-01-02 Jose E. Marchesi <jemarch@gnu.org> mset: disposal callback is now actually used. Memory leak fixed. * src/rec-mset.c (rec_mset_elem_destroy): Dispose the data stored in elements upon removal. 2012-01-02 Jose E. Marchesi <jemarch@gnu.org> librec: improved sort support. * src/rec-record.c (rec_record_dup): Don't pass a 'sorted' argument to rec_mset_dup. * src/rec-rset.c (rec_rset_dup): Likewise. (rec_rset_sort): Use rec_mset_sort. * src/rec-mset.c (rec_mset_sort): New function. (rec_mset_dup): Don't sort. * src/rec.h: New prototype for rec_mset_sort, and rec_mset_dup modified to not get the 'sorted' argument. 2011-12-28 Jose E. Marchesi <jemarch@gnu.org> writer: don't write a blank after the field name if the field value is empty. * torture/utils/recsel.sh (empty-field-values): New input file. (recsel-empty-field-values): New test. * src/rec-writer.c (rec_write_field_with_rset): Print a blank after the field name only if the field value is not the empty string. 2011-12-28 Jose E. Marchesi <jemarch@gnu.org> torture: system tests for csv2rec. * torture/utils/csv2rec.sh: New file. (simple-table): New input file. (csv2rec-simple-table): New test. (simple-table-quotes): New input file. (csv2rec-simple-table-quotes): New test. (empty-columns): New input file. (csv2rec-empty-columns): New test. (csv2rec-empty-columns-omit): Likewise. (multi-line): New input file. (csv2rec-multi-line): New test. * torture/utils/Makefile.am (TESTS): csv2rec.sh added. 2011-12-28 Jose E. Marchesi <jemarch@gnu.org> * src/rec.h: Documentation for the rec_int_check_* functions. 2011-12-26 Jose E. Marchesi <jemarch@gnu.org> librec,utils: new sorting mechanism on top of the new mset implementation. * torture/utils/rec2csv.sh (sort): New input file. (rec2csv-sort): New test. (rec2csv-sort-field): Likewise. * src/rec-rset.c (rec_rset_record_compare_fn): Incorrect results were being calculated if a non-existing field was given to -S. * torture/utils/recsel.sh (sort): New input file. (recsel-sort): New test. (recsel-sort-field): Likewise. (recsel-sort-field-nonexist): Likewise. * utils/recfix.c (recfix_do_sort): Rewritten to use rec_rset_sort. * utils/rec2csv.c (rec2csv_process_data): Likewise. * utils/recsel.c (recsel_process_data): Likewise. * src/rec-rset.c (struct rec_rset_s): Field ordered removed. (rec_rset_set_ordered): Function removed. (rec_rset_ordered): Function removed. * utils/rec2csv.c (rec2csv_parse_args): Likewise. * utils/recfmt.c (main): Likewise. * utils/recfix.c (recfix_do_sort): Likewise. * utils/recsel.c (recsel_parse_args): Don't use a sorting parser. * utils/recutl.c (recutl_sorting_parser): Function removed. * src/rec-parser.c (struct rec_parser_s): Fiels related with sorting removed. (rec_parse_rset): Don't sort. (rec_parser_set_ordered): Function removed. (rec_parser_ordered): Likewise. (rec_parser_sort_rset): Likewise. * src/rec-record.c (rec_record_dup): Pass sorted=false to rec_mset_dup. * src/rec-mset.c (rec_mset_dup): Take a new parameter 'sort'. 2011-12-25 Jose E. Marchesi <jemarch@gnu.org> mset,recins: fix some problems on the removal of elements. * src/rec-mset.c (rec_mset_remove_elem): Update statistics. (rec_mset_remove_at): Don't update statistics, because rec_mset_remove_elem already does that internally. * utils/recins.c (recins_add_new_record): Fix the replace of selected record using the provided record. 2011-12-25 Jose E. Marchesi <jemarch@gnu.org> utils: missing rec_record_set_container added. * utils/mdb2rec.c (process_table): Set the rset container in the record to insert. * utils/recins.c (recins_insert_record): Likewise. 2011-12-25 Jose E. Marchesi <jemarch@gnu.org> librec,utils: new mset iterators and API used in the codebase. * utils/mdb2rec.c (process_table): Use rec_mset_append. * utils/rec2csv.c (rec2csv_generate_csv): Use iterators. (rec2csv_determine_fields): Likewise. * utils/csv2rec.c (field_cb): Use rec_mset_append. (record_cb): Likewise. * utils/recfix.c (recfix_do_crypt): Use iterators. * utils/recfmt.c (recfmt_process_db): Likewise. * utils/recset.c (recset_process_actions): Use iterators. (recset_process_add): Use rec_mset_append. (recset_process_set): Likewise. * src/rec-mset.c (rec_mset_elem_destroy): Don't invoke the disposal callback, since that is executed as part of gl_list_remove_node. (rec_mset_elem_set_type): New function. (rec_mset_iterator_next): Update the list_node field of the mset elements retrieved by iterating the list. * utils/recins.c (recins_add_auto_field_int): Use iterators and new mset API. (recins_add_auto_field_date): Likewise. (recins_insert_record): Likewise. (recins_parse_args): Likewise. (recins_add_new_record): Likewise. * src/rec-parser.c (rec_parse_rset): Set the container for new records. * src/rec-record.c (rec_record_s): New field 'container' to hold a pointer managed by the user of the record. (rec_record_new): Initialize the container pointer. (rec_record_dup): Copy the container pointer. (rec_record_container): New function. (rec_record_set_container): New function. * utils/recsel.c (recsel_process_data): Use iterators. * src/rec-parser.c (rec_parse_rset): Use mset functions. (rec_parse_record): Likewise. * src/rec-sex.c (rec_sex_eval): Use iterators. * src/rec-int.c (rec_int_check_rset): Use iterators. (rec_int_check_record_types): Likewise. (rec_int_check_record_secrets): Likewise. (rec_int_check_record_key): Likewise. (rec_int_check_descriptor): Likewise. (rec_int_merge_remote): Likewise. * src/rec-writer.c (rec_write_record_with_rset): Use iterators. (rec_write_rset): Likewise. * src/rec-rset.c (rec_rset_num_elems): Return a size_t type. (rec_rset_num_records): Likewise. (rec_rset_num_comments): Likewise. (rec_rset_mset): New function. (rec_rset_update_field_props): Use iterators. (rec_rset_update_types): Likewise. * src/rec-record.c (rec_record_get_num_fields_by_name): Use iterators. (rec_record_get_field_by_name): Likewise. * src/rec-mset.c (rec_mset_search): Use iterators. * src/rec-record.c (rec_record_get_field_index): Use iterators. (rec_record_get_field_index_by_name): Likewise. (rec_record_contains_value): Likewise. (rec_record_get_field): Function removed. (rec_record_get_comment): Likewise. (rec_record_remove_at): Likewise. * src/rec-mset.c (rec_mset_iter_gl2mset): New function. (rec_mset_iter_mset2gl): Likewise. (rec_mset_iterator_next): Use gl2mset and mset2gl instead of memcpy. * src/rec-rset.c (rec_rset_rename_field): Use iterators. * src/rec-record.c (rec_record_new): Note about MSET_FIELD and MSET_COMMENT added. (rec_record_subset_p): Rewritten to use mset iterators. (rec_record_mset): New function. (rec_record_get_elem): Function removed. * src/rec.h (MSET_FIELD): New constant. (MSET_COMMENT): Likewise. 2011-12-22 Jose E. Marchesi <jemarch@gnu.org> * src/rec.h: Comments API properly documented. 2011-12-22 Jose E. Marchesi <jemarch@gnu.org> mset: implementation of iterators ala gl_lib. * src/rec-mset.c (rec_mset_iterator): New function. (rec_mset_iterator_next): Likewise. (rec_mset_iterator_free): Likewise. * src/rec.h: Prototypes for new functions related to iterators: rec_mset_iterator, rec_mset_iterator_next and rec_mset_iterator_free. 2011-12-22 Jose E. Marchesi <jemarch@gnu.org> mset: use an explicit type for element types. * src/rec-mset.c (struct rec_mset_elem_s): Use rec_mset_type_t. (struct rec_mset_s): count is now of type size_t. (rec_mset_get_at): Use new types. (rec_mset_remove_at): Likewise. (rec_mset_insert_at): Likewise. (rec_mset_type_p): Likewise. (rec_mset_register_type): Likewise. (rec_mset_count): Likewise. (rec_mset_get_at): Likewise. (rec_mset_first): Likewise. (rec_mset_next): Likewise. * src/rec.h: Change mset functions using positions to use size_t variables instead of ints. (rec_mset_type_t): New data type. 2011-12-22 Jose E. Marchesi <jemarch@gnu.org> src: move the stuff of rec-mset.h to rec.h and document the API. * src/rec-record.c: Stop including rec-mset.h. * src/rec-rset.c: Likewise. * src/rec-mset.c: Include rec.h instead of rec-mset.h. * src/Makefile.am (librec_la_SOURCES): rec-mset.h removed. * src/rec-mset.h: File deleted. * src/rec.h: Stuff from rec-mset.h moved there. (rec_mset_new): New prototype, and documented. (rec_mset_destroy): Likewise. (rec_mset_dup): Likewise. (rec_mset_type_p): Likewise. (rec_mset_register_type): Likewise. (rec_mset_get_at): Likewise. (rec_mset_insert_at): Likewise. (rec_mset_append): Likewise. (rec_mset_add_sorted): Likewise. (rec_mset_insert_after): Likewise. (rec_mset_remove_at): Likewise. (rec_mset_remove): Likewise. (rec_mset_search): Likewise. (rec_mset_first): Likewise. (rec_mset_next): Likewise. (rec_mset_elem_new): Likewise. (rec_mset_elem_destroy): Likewise. (rec_mset_elem_type): Likewise. (rec_mset_elem_data): Likewise. (rec_mset_elem_set_data): Likewise. (rec_mset_elem_equal_p): Likewise. 2011-12-22 Jose E. Marchesi <jemarch@gnu.org> mset: several optimizations. * src/rec-rset.c (rec_rset_get_elem): Likewise. (rec_rset_get_record): Likewise. (rec_rset_get_comment): Likewise. * src/rec-record.c (rec_record_get_elem): rec_mset_get is now called rec_mset_get_at. (rec_record_get_field): Likewise. (rec_record_get_comment): Likewise. * src/rec-mset.c (rec_mset_remove_at): Use gl_list_get_at instead of gl_list_remove_at. (rec_mset_get): Optimization when the requested element is of any type. (rec_mset_get_at): Renamed from rec_mset_get. 2011-12-22 Jose E. Marchesi <jemarch@gnu.org> torture: xfail tests failing are reported as failures. * torture/utils/testutils.sh: Accumulate an error if an xfail test does not fail. 2011-12-22 Jose E. Marchesi <jemarch@gnu.org> src: auto fields not having an explicit type are now implicitly typed as integers. * doc/recutils.texi (%auto): Document that auto fields are integers by default. * torture/utils/recins.sh (auto-notype): New input file. (recins-auto-notype): New test. * torture/utils/recfix.sh (recfix-auto-notype): Adapted to new semantics. (auto-invalid-type): New input file. (recfix-auto-invalid-type): New test. * src/rec-rset.c (rec_rset_update_field_props): Auto fields not having an explicit type are implicitly typed as integers. 2011-12-20 Jose Marchesi <jco@wilhelm> Tasktool operations. * TODO: Task 20 resolved to 'DISCARDED'. Note added for task 24. Task 16 resolved to 'DISCARDED'. Task 10 edited. Task 35 resolved to 'DONE'. Task 26 resolved to 'DONE'. 2011-12-20 Jose E. Marchesi <jco@terma.com> recfix: interactive password prompt. * doc/recutils.texi (recfix Invocation): Document the interactive behaviour of recfix when it needs a password. * utils/recfix.c (recfix_parse_args): Prompt for a password to the user if needed, and ignore empty passwords. 2011-12-20 Jose E. Marchesi <jco@terma.com> recins: avoid code duplication in encryption code. * utils/recins.c (recins_encrypt_record): New function. (recins_insert_record): Use recins_encrypt_record. (recins_add_new_record): Likewise. 2011-12-20 Jose E. Marchesi <jco@terma.com> utils: interactive password prompt in recins. * doc/recutils.texi (recins Encryption): Document the interactive behaviour of recins when it needs a password. * utils/recins.c (recins_insert_record): Prompt for a password to the user if needed, and ignore empty passwords. (recins_add_new_record): Likewise. 2011-12-20 Jose E. Marchesi <jco@terma.com> utils: interactive password prompt in recsel. * utils/recsel.c (recsel_process_data): Use the provided password only if it not the empty string. * doc/recutils.texi (recsel Encryption): Document the interactive behaviour of recsel when it needs a password. * utils/recsel.c (recsel_process_data): Ask for a password if recsel was called interactively, a password is needed and -s was provided alone. (GNU_longOptions): allow optional arguments to PASSWORD_ARG. * utils/recutl.c: New global variable recutl_interactive_p. (recutl_interactive): New function. (recutl_init): Initialize recutl_interactive. 2011-12-20 Jose E. Marchesi <jemarch@gnu.org> * gnulib module getpass-gnu imported. 2011-12-20 Jose E. Marchesi <jemarch@gnu.org> src: support for hexadecimal and octal literals in selection expressions. * doc/recutils.texi (SEX Operands): Document the usage of hexadecimal and octal literals in selection expressions. * torture/utils/recsel.sh (recsel-sex-integer-equal-hex): New test. (recsel-sex-integer-equal-oct): Likewise. * src/rec-sex-lex.l: Modified to recognize hexadecimal and octal literals as integers. 2011-12-19 Jose E. Marchesi <jemarch@gnu.org> src: support for hexadecimal and octal numbers in type descriptions, field values and %size entries. * doc/recutils.texi (%size): Mention that hexadecimal and octal numbers can be used in %size entries. * src/rec-utils.h (REC_INT_SIZE_RE): Rewritten to allow hex and octal constants. * torture/utils/recfix.sh (size-exact-hex): New input file. (size-exact-oct): Likewise. (recfix-size-exact-hex): New test. (recfix-size-exact-oct): Likewise. * doc/recutils.texi (Escalar types): Document that hexadecimal and octal numbers can be used to define ranges. (String types): Ditto for 'size' types. * src/rec-types.c (rec_type_parse_size): Make sure the user specified type is not negative. * torture/utils/recfix.sh (ranges-hex-invalid): New input file. (recfix-range-hex-xfail): New test. (ranges-oct-ok): New input file. (ranges-oct-invalid): Likewise. (recfix-range-oct-ok): New test. (recfix-range-oct-xfail): Likewise. (type-size-valid): New input file. (type-size-valid-hex): Likewise. (type-size-valid-oct): Likewise. (type-size-invalid): Likewise. (type-size-invalid-negative): Likewise. (recfix-type-size-valid): New test. (recfix-type-size-valid-hex): Likewise. (recfix-type-size-valid-oct): Likewise. (recfix-type-size-invalid): Likewise. (recfix-type-size-invalid-negative): Likewise. * src/rec-utils.c (rec_parse_int): Support hexadecimal numbers. * src/rec-types.c (REC_TYPE_INT_RE): New constant. (REC_TYPE_RANGE_DESCR_RE): Use REC_TYPE_INT_RE. (REC_TYPE_SIZE_DESCR_RE): Likewise. * torture/utils/recfix.sh (type-int-valid): Add integers in both hexadecimal and octal formats. (type-int-invalid): Likewise. (ranges-hex-ok): New input file. (recfix-ranges-hex-ok): New test. * src/rec-types.c (REC_TYPE_INT_VALUE_RE): Allow letters a-f and A-F in hexadecimal constants. 2011-12-10 Jose E. Marchesi <jemarch@gnu.org> src,utils: initial support for hexadecimal and octal numbers. * src/rec-types.c (REC_TYPE_RANGE_DESCR_RE): Use REC_TYPE_INT_VALUE_RE. (REC_TYPE_SIZE_DESCR_RE): Likewise. * src/rec-int.c (rec_int_check_descriptor): Error message fixed. * doc/recutils.texi (Escalar types): Document octal and hexadecimal numbers. * src/rec-types.c (REC_TYPE_INT_VALUE_RE): Modified to allow a 0x prefix. * src/rec-utils.c (rec_atoi): Pass 'base' as 0 to strtol to support numbers in hexadecimal and octal representation. 2011-12-19 Jose E. Marchesi <jco@terma.com> utils: make recfix to exit with an error status if there is a parse error. * utils/recutl.c (recutl_parse_db_from_file): Return 'false' if a syntax error is found by the parser. 2011-12-06 Jose E. Marchesi <jemarch@gnu.org> src: allow tabs in blank lines between records. * src/rec-parser.c (rec_parse_rset): Make the parser to ignore tabs appearing between records. 2011-12-05 Jose E. Marchesi <jemarch@gnu.org> src: support for several numeration bases in rec_atoi. * src/rec-utils.c (rec_parse_int): Likewise. * src/rec-sex-lex.l (rec_sex_lex_extract_index): Likewise. * src/rec-sex.c (ATOI_VAL): Likewise. (rec_sex_op_real_p): Likewise. * src/rec-rset.c (rec_rset_record_compare_fn): Pass the base argument to rec_atoi. * src/rec-utils.c (rec_atoi): Get a new argument with the base of the number. 2011-11-27 Jose E. Marchesi <jemarch@gnu.org> librec: use rec_match intead of regex functions. * src/rec-fex.c (rec_fex_check): Use rec_match instead of regcomp/regexec. 2011-11-27 Jose E. Marchesi <jemarch@gnu.org> qa: syntax fixes. * algol68/rec.a68: Trailing blanks removed. * .x-sc_prohibit_xalloc_without_use: New file. 2011-11-27 Jose E. Marchesi <jemarch@gnu.org> utils,librec: encrypted fields are now decrypted when using field expressions in recsel. * torture/utils/recsel.sh (confidential): New input file. (recsel-confidential): New test. (recsel-confidential-fex): New test. (recsel-confidential-fex-value): New test. (recsel-confidential-num): New test. * utils/recsel.c (recsel_process_data): Pass recsel_password to recutl_eval_field_expression. * utils/recutl.c (recutl_eval_field_expression): Get a new argument, 'password'. (recutl_eval_field_expression): Set the passed password, if any, to decrypt confidential fields. * src/rec-writer.c (rec_write_record_with_fex): Decrypt confidential fields before printing them out. 2011-11-27 Jose E. Marchesi <jemarch@gnu.org> librec: initialize passwords in writers, and avoid code replication. * src/rec-writer.c (rec_writer_new_str): Initialize the password field to NULL. (rec_writer_new_common): New function. (rec_writer_new): Use rec_writer_new_common. (rec_writer_new_str): Likewise. 2011-11-26 Jose E. Marchesi <jemarch@gnu.org> Distribution fixes. * etc/Makefile.am (dist_lisp_DATA): Install and distribute ob-rec.el. * README-dev: Remove information incorrectly copied from the libgnupdf README-dev file. 2011-11-23 Jose E. Marchesi <jemarch@gnu.org> Wrappers for flexible buffers in the Algol68 frontend. * algol68/rec.a68: Cast pointers to void* for values of mode CSTR. Keep 'rec init' and 'rec fini'. (MODE RECBUF): New mode. (rec buf new): New procedure. (rec buf close): New procedure. (rec buf putc): New procedure. (rec buf puts): New procedure. (rec buf rewind): New procedure. 2011-11-20 Jose E. Marchesi <jemarch@gnu.org> librec: avoid duplication of regular expressions and generalize the usage of the rec_match_* functions. * src/rec-types.c (rec_type_check_int): Use rec_match instead of rec_type_check_re. (rec_type_check_field): Likewise. (rec_type_check_bool): Likewise. (rec_type_check_real): Likewise. (rec_type_check_line): Likewise. (rec_type_check_email): Likewise. (rec_type_check_enum): Likewise. (rec_type_check_re): Function deleted. * src/rec-sex.c (rec_sex_eval_node): Use rec_match and rec_match_insensitive. * src/rec-utils.c (rec_match_int): New function. (rec_match_insensitive): New function. * src/rec-rset.c (rec_rset_type_field_p): Use REC_FNAME_LIST_CS_RE. (rec_rset_type_field_fex): Likewise. (rec_rset_type_field_type): Likewise. * src/rec-field-name.c (rec_field_name_part_str_p): Use rec_match instead of regcomp/regexec. (rec_field_name_str_p): Likewise. * src/rec-int.c (rec_int_rec_type_p): Likewise. * src/rec-fex.c (rec_fex_check): Use the REC_*_RE constants. * src/rec-utils.h (REC_FNAME_LIST_CS_RE): New constant. (REC_FNAME_LIST_RE): Likewise. (REC_FNAME_LIST_SUB_RE): Likewise. 2011-11-20 Jose E. Marchesi <jemarch@gnu.org> librec: avoid duplication of error reporting code in rec-int.c. * src/rec-int.c (ADD_ERROR): New macro. (rec_int_check_rset): Use ADD_ERROR. (rec_int_check_rset): Likewise. (rec_int_check_record_mandatory): Likewise. (rec_int_check_record_unique): Likewise. (rec_int_check_record_prohibit): Likewise. (rec_int_check_record_secrets): Likewise. (rec_int_check_record_key): Likewise. (rec_int_check_descriptor): Likewise. (rec_int_merge_remote): Likewise. 2011-11-20 Jose E. Marchesi <jemarch@gnu.org> librec: avoid duplication of special field names in the codebase. * src/rec-parser.c (rec_parse_rset): Use rec_std_field_name. * src/rec-int.c (rec_int_check_descriptor): Use rec_std_field_name. (rec_int_merge_remote): Likewise. (rec_int_check_record_mandatory): Likewise. (rec_int_check_record_unique): Likewise. (rec_int_check_record_prohibit): Likewise. (rec_int_check_record_key): Likewise. * src/rec-rset.c (rec_rset_rename_field): Use rec_std_field_name. (rec_rset_set_type): Likewise. (rec_rset_type): Likewise. (rec_rset_url): Likewise. (rec_rset_update_size_constraints): Likewise. (rec_rset_update_field_props): Likewise. (rec_rset_update_types): Likewise. * src/rec-field-name.c (rec_std_field_name_s): New structure type. (rec_std_field_name_s): Global containing the names for the standard fields. (rec_std_field_name): New function. 2011-11-19 Jose E. Marchesi <jemarch@gnu.org> utils: new function recutl_yesno. * utils/recutl.c (recutl_yesno): New function. 2011-11-19 Jose E. Marchesi <jemarch@gnu.org> * gnulib update, and module readline imported. 2011-11-19 Jose E. Marchesi <jemarch@gnu.org> manual: document the -q,--quick command line argument in the utilities supporting it. * doc/recutils.texi (recsel Invocation): Documentation for the -q,--quick command line argument. (recdel Invocation): Likewise. (recins Invocation): Likewise. (recset Invocation): Likewise. 2011-11-19 Jose E. Marchesi <jemarch@gnu.org> torture: tests for -q,--quick. * torture/utils/recset.sh (multiple-records): New input file. (recset-quick-simple): New test. * torture/utils/recins.sh (recins-quick-simple): New test. * torture/utils/recdel.sh (recdel-quick-simple): New test. * torture/utils/recsel.sh (recsel-quick-simple): New test. (recsel-quick-and-sex): Likewise. (recsel-sex-and-quick): Likewise. (recsel-num-and-quick): Likewise. (recsel-quick-and-num): Likewise. 2011-11-19 Jose E. Marchesi <jemarch@gnu.org> recins: memory bug when several records get replaced fixed. * utils/recins.c (recins_add_new_record): Insert copies of the new record to insert, to cover cases where more than one record is replaced. 2011-11-19 Jose E. Marchesi <jemarch@gnu.org> utils: recset, recins, recdel and recsel adapted to support the -q, --quick option. * utils/recset.c (recset_process_actions): Honour recutl_quick_str. (recset_process_ren): Likewise. * utils/recins.c (recins_add_new_record): Honour recutl_quick_str. * utils/recdel.c (recdel_delete_records): Honour recutl_quick_str. (recdel_parse_args): Take into account recutl_quick_str when deciding whether a request to delete all records. (main): Likewise. * src/rec-record.c (rec_record_contains_value): New function. * utils/recutl.h (RECORD_SELECTION_SHORT_ARGS): Updated with q:. * utils/recset.c: New global recutl_quick_str. * utils/recdel.c: New global recutl_quick_str. (recutl_print_help): Document the usae of -q, --quick. * utils/recins.c: New global recutl_quick_str. (recutl_print_help): Document the usage of -q, --quick. * utils/recutl.c (recutl_print_help_record_selection): Document the usage of -q, --quick. * utils/recutl.h (RECORD_SELECTION_ARGS): QUICK_ARG added. (RECORD_SELECTION_LONG_ARGS): Entry for QUICK_ARG. (RECORD_SELECTION_ARGS_CASES): Likewise. * utils/recsel.c (recsel_process_data): Improve grammar in comment. (recutl_print_help): Document the usage of -q, --quick. (recutl_quick_str): New global variable. 2011-11-15 Jose E. Marchesi <jemarch@gnu.org> rec-init and rec-fini defined in the algol68 binding. * algol68/rec.a68 (rec init): New procedure. (rec fini): Likewise. 2011-11-13 Jose E. Marchesi <jemarch@gnu.org> Initial work on the Algol 68 binding for librec. * algol68/nameseed: New file. * Makefile.am (SUBDIRS): Recurse into algol68/ in case an Algol68 compiler is available. * configure.ac: Check for the ca68 compiler. * algol68/Makefile.am: New file. * algol68/rec.a68: New file. Define 'rec major version', 'rec minor version' and 'rec version string'. 2011-11-06 Jose E. Marchesi <jemarch@gnu.org> configure: generation of the lexer fixed. * configure.ac: Define LEX_OUTPUT_ROOT so ylwrap can work propertly when flex is installed. 2011-11-03 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.4. * NEWS: Updated. * configure.ac: Version number changed to 1.4. 2011-11-02 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.3.91. * configure.ac: Version number changed to 1.3.91. 2011-11-02 Jose E. Marchesi <jemarch@gnu.org> src: endianess problem fixed in rec_encrypt/rec_decrypt. * src/rec-utils.h: Include stdlib.h and declare rec_endian_swap. * src/rec-utils.c (rec_endian_swap): New function. * src/rec-crypt.c (rec_encrypt): Store the crc always in little-endian. (rec_decrypt): Restore the crc in little-endian. 2011-11-01 Jose E. Marchesi <jemarch@gnu.org> * src/rec-crypt.c (rec_encrypt): Store the crc bytes in a way independant of the endianess. 2011-11-01 Jose E. Marchesi <jemarch@gnu.org> torture: portability problem with malloc.h fixed. * torture/rec-fex/rec-fex-str.c: Include stdlib.h instead of malloc.h to avoid problems in systems not featuring the second header. 2011-10-31 Jose E. Marchesi <jemarch@gnu.org> torture: support the running of the tests in Windows. * torture/utils/testutils.sh: Append $EXEEXT to the utility name. Source config.sh. * torture/utils/config.sh.in (EXEEXT): Make it available to the tests. 2011-10-31 Jose E. Marchesi <jemarch@gnu.org> Fixes to avoid warnings while compiling the codebase. * src/rec-utils.c (rec_parse_regexp): Set result to NULL if there is not match. * src/rec-types.c (rec_type_descr_p): Get a const char* parameter. (rec_type_new): Likewise. * src/rec-rset.c (rec_rset_update_field_props): Make p and q const char*. * src/rec-utils.c (rec_skip_blanks): Get a const char** parameter. (rec_parse_regexp): Likewise. (rec_atoi): Likewise. (rec_atod): Likewise. (rec_extract_file): Likewise. (rec_extract_url): Likewise. (rec_extract_type): Likewise. (rec_parse_int): Likewise. (rec_extract_size_condition): Likewise. * src/rec-rset.c (rec_rset_type_field_p): Make local pointer p const. * src/rec-writer.c (rec_write_record): Return rec_write_record_with_rset. (rec_write_field): Likewise with rec_write_field_with_rset. * utils/recset.c (recset_process_actions): Parenthesis around && and || added. * utils/recdel.c (recdel_delete_records): Likewise. * utils/mdb2rec.c (process_table): Use column_name instead of col->name. * utils/recfix.c (recfix_do_crypt): Unused variable elem_record removed. (main): Unused variable db removed. * utils/recutl.c: Include sys/stat.h. 2011-10-31 Jose E. Marchesi <jemarch@gnu.org> torture: fix warnings in the rec-mset unit tests. * torture/rec-mset/elem-types.h (type1_disp): Free s instead of the void pointer. (type2_disp): Likewise. 2011-10-31 Jose E. Marchesi <jemarch@gnu.org>a Examples sections removed from the --help outputs. * utils/csv2rec.c (recutl_print_help): Examples removed from --help output. * utils/recset.c (recutl_print_help): Likewise. * utils/recsel.c (recutl_print_help): Likewise. * utils/recins.c (recutl_print_help): Likewise. * utils/recinf.c (recutl_print_help): Likewise. * utils/recfmt.c (recutl_print_help): Likewise. * utils/recdel.c (recutl_print_help): Likewise. * utils/rec2csv.c (recutl_print_help): Likewise. * utils/mdb2rec.c (recutl_print_help): Likewise. 2011-10-31 Jose E. Marchesi <jemarch@gnu.org> gnulib update. 2011-10-30 Jose E. Marchesi <jemarch@gnu.org> configure: do not require flex and bison at build time. * utils/recdel.c: Include xalloc.h. * configure.ac: Use gl_BISON instead of AM_PROG_YACC. 2011-10-30 Jose E. Marchesi <jemarch@gnu.org> Don't run tests associated with confidential fields when building the tools without crypt support. * .gitignore: torture/utils/config.sh added. * torture/utils/recfix.sh: include config.sh and test the encryption support only if the utilities were built with that support. * configure.ac: Generate torture/utils/config.sh * torture/utils/config.sh.in: New file. * configure.ac (REC_CRYPT_SUPPORT): Define and subst CRYPT_SUPPORT. 2011-10-30 Jose E. Marchesi <jemarch@gnu.org> Fixes for problems detected by the clang analyzer. * src/rec-sex.c (rec_sex_eval_node): Take care about possible divisions by zero when evaluating / and %. * utils/csv2rec.c (main): Unused local variable 'out' removed. * utils/recfmt.c (recfmt_process_db): Use rset_size to avoid calculating the size of the rset at every iteration. * torture/rec-comment/rec-comment-set-text.c (rec_comment_set_text_nominal): Use new version of rec_comment_set_text. * src/rec-comment.c (rec_comment_set_text): Get a pointer to comment in order to set its value. * src/rec-mset.c (rec_mset_remove_at): Unused local elem_type removed. * src/rec-parser.c (rec_parser_perror): Usage of uninitialized pointer fixed. 2011-10-30 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.3.90. * NEWS: Updated for 1.3.90. * configure.ac: Version updated to 1.3.90. 2011-10-30 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (recsel Encryption): Written. (recins Encryption): Written. 2011-10-29 Jose E. Marchesi <jemarch@gnu.org> manual: documentation for %confidential fields. * doc/recutils.texi (%confidential): Written. 2011-10-27 Jose E. Marchesi <jemarch@gnu.org> Don't allow several %sort entries in record descriptors. * doc/recutils.texi (%sort): Document that only one %sort per record descriptor is allowed. * torture/utils/recfix.sh (recfix-sort-several-fields-invalid): New test. * src/rec-int.c (rec_int_check_descriptor): It is an error to have several %sort fields in a record descriptor. 2011-10-27 Jose E. Marchesi <jemarch@gnu.org> manual: documentation for %sort. * doc/recutils.texi (%sort): Written. 2011-10-26 Jose E. Marchesi <jemarch@gnu.org> manual: documenttion for %mandatory, %prohibit, %unique, %key and %auto rewritten. * doc/recutils.texi (%mandatory and %prohibit): Written. (%unique and %key): Written. (%auto): Improved and relocated. 2011-10-25 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Record Descriptors): Reworked and simplified. 2011-10-16 Jose E. Marchesi <jemarch@gnu.org> syntax fixes. * utils/recdel.c: Don't include xalloc.h. * .x-sc_prohibit_undesirable_word_seq: New file. * .x-sc_prohibit_strings_without_use: New file. * .x-sc_prohibit_path_max_allocation: New file. * .x-sc_prohibit_doubled_word: Ignored lib/*. * README-dev: Spell file systme. 2011-10-13 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Comments): Relocated. (Fields and Records): Matusalen -> Matusalem. 2011-10-13 Jose E. Marchesi <jemarch@gnu.org> manual: document the encryption options in recsel and recins. * doc/recutils.texi (recsel Invocation): Global options added, including a description of the --password argument. (recins Invocation): Document --password. (recins Invocation): Document --case-insensitive. 2011-10-12 Jose E. Marchesi <jemarch@gnu.org> torture: tests for the --sort operation of recfix. * torture/utils/recfix.sh (recfix-sort-ints): New test. (recfix-sort-ranges): New test. (recfix-sort-reals): New test. (recfix-sort-lex): New test. (recfix-sort-dates): New test. (recfix-sort-booleans): New test. 2011-10-11 Jose E. Marchesi <jemarch@gnu.org> * README-dev: URL to the git repo updated. 2011-10-07 Jose E. Marchesi <jemarch@gnu.org> recfix: manage --encrypt when there are already encrypted fields in the database. * torture/utils/recfix.sh (recfix-encrypt-already-encrypted): New test. (recfix-encrypt-already-encrypted-force): New test. * utils/recfix.c (recfix_do_crypt): Emit an error if an already encrypted field is found, unless --force was specified in the command line. (recutl_print_help): --force documented. (recfix_parse_args): Recognize --force. * src/rec-crypt.c (rec_encrypt_field): Make sure the field is not already encrypted before encrypting it. 2011-10-07 Jose E. Marchesi <jemarch@gnu.org> utils: typo fixed in help string. * utils/recsel.c (recutl_print_help): Typo in help string fixed. 2011-10-06 Jose E. Marchesi <jemarch@gnu.org> build: documentation of dependencies updated. * README-dev: Dependency on libgcrypt documented. 2011-10-05 Jose E. Marchesi <jemarch@gnu.org> manual: little fix. * doc/recutils.texi (mdb2rec Examples): Example fixed. Reported by Sven Wick. 2011-10-04 Jose E. Marchesi <jemarch@gnu.org> torture: tests for the --encrypt and --decrypt options of recfix. * torture/utils/recfix.sh (recfix-encrypt): New test. (recfix-encrypt-password-long): Likewise. (recfix-encrypt-without-password): Likewise. (recfix-encrypt-password-before-operation): Likewise. (recfix-decrypt-invalid-password): Likewise. 2011-10-03 Jose E. Marchesi <jemarch@gnu.org> torture: tests for the --check operation of recfix regarding encryption, and some fixes. * src/rec-int.c (rec_int_check_record_secrets): Return the number of errors that occurred while checking the integrity. * torture/utils/recfix.sh (recfix-with-operation): New test. (recfix-confidential): Likewise. (recfix-invalid-confidential): Likewise. (recfix-confidential-with-unencrypted-fields): Likewise. 2011-10-03 Jose E. Marchesi <jemarch@gnu.org> manual: documentation for recfix updated. * doc/recutils.texi (recfix Invocation): Documentation for the new synopsis of recfix, including a description of all the supported operations. (recfix Examples): Add more examples covering the several supported operations. 2011-10-03 Jose E. Marchesi <jemarch@gnu.org> * utils/recfix.c (recfix_do_crypt): Don't check integrity before doing an en/decryption operation. 2011-10-03 Jose E. Marchesi <jemarch@gnu.org> librec: more encryption related routines, and encryption support in recfix. * utils/recfix.c (recfix_do_crypt): Use rec_decrypt_record. * src/rec-crypt.c (rec_decrypt_record): New function. * src/rec-writer.c (rec_write_field_with_rset): Use rec_decrypt_field. * src/rec-crypt.c (rec_decrypt_field): New function. * utils/recfix.c (recfix_do_crypt): Adapted to the new semantics of rec_encrypt_record. * utils/recins.c (recins_insert_record): Likewise. (recins_add_new_record): Likewise. * src/rec-crypt.c (rec_encrypt_field): New function. (rec_encrypt_record): Use rec_encrypt_field. 2011-09-30 Jose E. Marchesi <jemarch@gnu.org> * utils/recins.c (recins_insert_record): Use rec_encrypt_record. (recins_encrypt_fields): Function removed. * src/rec-crypt.c (rec_encrypt_record): New function. * utils/recfix.c (main): Invoke the recfix_do_* functions depending on the selected operation. (recfix_do_check): New function. (recfix_check_database): Renamed from recfix_process_data. (recfix_parse_args): Made static, and adapted to use the new recfix_do_* functions. (recfix_do_sort): New function. 2011-09-30 Jose E. Marchesi <jemarch@gnu.org> build: install lisp files in the proper directory. * etc/Makefile.am: Install rec-mode.el in the proper place, and use the dist_ prefix instead of the EXTRA_DIST automake variable. Suggested by Ludovic Courtes. 2011-09-19 Jose E. Marchesi <jemarch@gnu.org> lib: missing sorting cases added. * src/rec-rset.c (rec_rset_record_compare_fn): Date sorting algorithm fixed. (rec_rset_record_compare_fn): Real sorting implemented. (rec_rset_record_compare_fn): Likewise for booleans. 2011-09-11 Jose E. Marchesi <jemarch@gnu.org> manual: argument description fixed. * doc/recutils.texi (Common Options): The description of the '--' option was truncated. Fixed. 2011-09-04 Jose E. Marchesi <jemarch@gnu.org> recfix: normalise invocation to allow more commands. * utils/recfix.c: New type recfix_op. (recutl_print_help): Adapted to the new synopsis of recfix. (recutl_print_help): Don't include examples in the --help output. 2011-09-01 Jose E. Marchesi <jemarch@gnu.org> build: linking with libgcrypt fixed. * src/Makefile.am (librec_la_LIBADD): Link with $LTLIBGCRYPT if compiling with encryption support. * utils/Makefile.am (COMMONLIBS): Likewise. 2011-08-28 Jose E. Marchesi <jemarch@gnu.org> crypt: fix build with crypt support disabled. * src/rec-rset.c (rec_rset_get_props): Update confidential_p only if compiling with encryption support. 2011-08-28 Jose E. Marchesi <jemarch@gnu.org> recfix: check for non-encrypted confidential fields. * src/rec-int.c: Copyright year updated. (rec_int_check_record): Call rec_int_check_record_secrets. (rec_int_check_record_secrets): New function. 2011-08-28 Jose E. Marchesi <jemarch@gnu.org> lib: regression affecting auto fields fixed. * utils/recins.c (recins_add_new_record): Fix regression causing the loosing of the auto fields. (recins_add_new_record): Avoid memory leak destroying recins_record. * src/rec-rset.c (rec_rset_get_props): Initialize confidential_p to false. 2011-08-28 Jose E. Marchesi <jemarch@gnu.org> crypt: support for CRC and encrypted prefix. * src/rec-crypt.c: Include crc.h. (rec_decrypt): Check the CRC of decrypted data. (rec_encrypt): Append the CRC when encrypting. 2011-08-28 Jose E. Marchesi <jemarch@gnu.org> gnulib: imported module crc. * lib/crc.c: Imported from gnulib. * lib/crc.h: Likewise. 2011-08-28 Jose E. Marchesi <jemarch@gnu.org> * src/rec-writer.c (rec_write_record_with_rset): New function. (rec_write_field_with_rset): New function. * utils/recsel.c (recsel_process_data): Set the password of the writer, if specified on the command line. * src/rec-writer.c (rec_writer_new): Initialize the password field of the writer structure. (rec_writer_destroy): Free the memory used by the password, if any. (rec_writer_set_password): New function. * utils/recsel.c (recutl_print_help): Support the -s, --password option. (recsel_parse_args): Likewise. * src/rec-crypt.c (rec_decrypt): New function. 2011-08-27 Jose E. Marchesi <jemarch@gnu.org> * utils/recins.c: Include base64.h. * gnulib base64 module imported. 2011-08-26 Jose E. Marchesi <jemarch@gnu.org> * src/Makefile.am (librec_la_SOURCES): Compile rec-crypt.c if encryption is supported. * src/rec-crypt.c: New file. * utils/recins.c (recins_encrypt_fields): New function. * src/rec-rset.c (rec_rset_confidential): New function. * utils/recins.c: New variable recins_password. (recutl_print_help): Document -s,--password. (recins_parse_args): Set recins_password. * src/rec-utils.c (rec_encrypt): New function. (rec_decrypt): New function. (rec_passphrase_cb): New function. * src/rec-utils.c: Include gcrypt.h. * src/rec-int.c (rec_int_check_descriptor): Check for the value of %confidential entries. * src/rec-rset.c (rec_rset_rename_field): Rename field names in %confidential fields. (rec_rset_update_field_props): Set the confidential property of fields. 2011-08-25 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (recfmt Templates): Typo fixed. 2011-08-24 Jose E. Marchesi <jemarch@gnu.org> * doc/recutils.texi (Introduction): Comment about YAML. 2011-08-24 Jose E. Marchesi <jemarch@gnu.org> * configure.ac: Complain if flex or bison are not found and exit. 2011-08-24 Jose E. Marchesi <jemarch@gnu.org> * Time-stamp marks removed from the entire codebase and syntax checks fixes. 2011-08-15 Thien-Thi Nguyen <ttn@gnuvola.org> (tiny change) librec: Don't #include <config.h> in rec.h. * src/rec.h: Don't #include <config.h>. 2011-08-05 Jose E. Marchesi <jemarch@gnu.org> librec: acknowledge %sort entries when renaming fields. * src/rec-rset.c (rec_rset_rename_field): Rename fields used as sorting criteria in %sort: entries. * torture/utils/recset.sh: Tests renaming fields updated to cover %sort entries. 2011-08-05 Jose E. Marchesi <jco@terma.com> * etc/ob-rec.el (org-babel-execute:rec): Separate header when generating tables. (org-babel-execute:rec): Generate raw data when executed with results: verbatim. 2011-08-05 Jose E. Marchesi <jemarch@gnu.org> ob-rec: support for :sort and minor fixes. * etc/ob-rec.el (org-babel-execute:rec): Support for :sort added. (org-babel-execute:rec): Emit rec data, and not csv, when executed with results: scalar, html or code. 2011-07-29 Jose E. Marchesi <jemarch@gnu.org> librec: sorting by date values implemented. * src/rec-rset.c (rec_rset_record_compare_fn): Sorting by date value implementing. * src/rec-sex.c (rec_sex_eval_node): Use rec_timespec_subtract. * src/rec-utils.c (rec_timespec_subtract): Moved from rec-sex.c. 2011-07-28 Jose E. Marchesi <jemarch@gnu.org> manual: documentation for %sort and %typedef. * doc/recutils.texi (Record Descriptors): Document %typedef in the list of special fields. (Record Descriptors): Likewise for %sort. (recsel Invocation): Document -S,--sort. (rec2csv Invocation): Likewise. 2011-07-21 Jose E. Marchesi <jemarch@gnu.org> manual: documentation for the sorting option of recfix. * doc/recutils.texi (recfix Invocation): Synopsis fixed. (recfix Invocation): Document the --sort operation. (recfix Examples): Example of --sort added. 2011-07-21 Jose E. Marchesi <jemarch@gnu.org> recfix: support the phisical sort operation. * utils/recfix.c (main): Use recutl_read_db_from_file. (recfix_parse_args): Set the value of recfix_file from the command line and complain if no file was provided. (recutl_print_help): Document the new usage of the command. (recutl_print_help): Documnt the --sort option. (recfix_parse_args): Manage --sort. (main): Update the rec file if an operation requires it. 2011-07-21 Jose E. Marchesi <jemarch@gnu.org> librec: check the integrity of %sort entries, and tests. * torture/utils/recfix.sh (recfix-sortcheck-valid): New test. (recfix-sortcheck-with-blanks): Likewise. (recfix-sortcheck-invalid-empty): Likewise. (recfix-sortcheck-invalid-field-name): Likewise. * src/rec-int.c (rec_int_check_descriptor): Make sure that %sort fields have correct values. 2011-07-21 Jose E. Marchesi <jemarch@gnu.org> librec: options -S,--sort supported in recsel and rec2csv. * utils/rec2csv.c (recutl_print_help): Documentation for --sort,-S. (rec2csv_parse_args): Manage --sort, -S. * utils/recsel.c: New command-line argument --sort, -S. (recutl_print_help): Documentation for --sort, -S. (recsel_parse_args): Manage -S. * doc/recutils.texi (recinf Invocation): -S is not like --print-sexps anymore. * utils/recutl.c (recutl_sorting_parser): Get a field name as a sorting criteria. * src/rec-rset.c (rec_rset_update_field_props): %sort only has an effect if order_by_field is not already set in the record set. * src/rec-parser.c (rec_parser_new): Initialize order_by_field to NULL. (rec_parser_set_order_by_field): New function. * src/rec-rset.c: New function. (rec_rset_order_by_field): New function. 2011-07-19 Jose E. Marchesi <jemarch@gnu.org> librec: record sorting implementation, and tools adjusted. * utils/recsel.c (main): Likewise. * utils/recfmt.c (main): Likewise. * utils/rec2csv.c (main): Call recutl_sorting_parser with the appropriate value. * utils/recutl.c (recutl_sorting_parser): New function. * utils/recutl.c (recutl_parse_db_from_file): Set the ordered attribute of the parser to the value of the global recutl_sort_p. * src/rec-parser.c (rec_parser_new): Initialise ordered_p to false. (rec_parser_set_ordered): New function. (rec_parser_ordered): New function. (rec_parse_rset): Set the ordered attribute of the newly created record set to the desired value. * src/rec-rset.c: New structure rec_rset_comment_s. (rec_rset_elem_comment_new): Use rec_rset_comment_s. (rec_rset_elem_comment): Likewise. (rec_rset_comment_disp_fn): Likewise. (rec_rset_comment_dup_fn): Likewise. (rec_rset_set_ordered): New function. (rec_rset_ordered): New function. (rec_rset_insert_at): Insert sorting only if ordered_p. (rec_rset_append): Likewise. (rec_rset_append_record): Likewise. (rec_rset_insert_after): Likewise. (rec_rset_dup): Copy ordered_p. 2011-07-19 Jose E. Marchesi <jco@terma.com> librec: use mset_add_sort in all record inserting operations in rec-rset. * src/rec-rset.c (rec_rset_insert_at): If the rset has a sort by field and the element to be inserted is a record, insert it using the sorting criteria instead of the requested location. (rec_rset_append): Likewise. (rec_rset_insert_after): Likewise. 2011-07-18 Jose E. Marchesi <jemarch@gnu.org> librec: initial support for %sort. * src/rec-rset.c (rec_rset_comment_compare_fn): New function. (rec_rset_record_compare_fn): New function. (rec_rset_update_field_props): Manage the %sort special field. * src/rec-record.c (rec_record_new): Pass NULL for the compare function to rec_mset_register_type. * src/rec-mset.c (rec_mset_add_sorted): New function. (rec_mset_new): Initialize the compare_fn function for types to NULL. (rec_mset_dup): Make a copy of compare_fn. (rec_mset_register_type): Get a compare_fn argument. (rec_mset_elem_compare_fn): New function. * src/rec-mset.h: New type rec_mset_compare_fn_t. * src/rec-rset.c: New attribute 'order_by_field' in struct rec_rsets. New structure rec_rset_record_s. (rec_rset_new): Initialise the order by field name to NULL. (rec_rset_destroy): Destroy the order by field name if it exists in the record set. (rec_rset_dup): Care about the order by field, if any. (rec_rset_append_record): Use rec_mset_add_sorted to add the record to the mset if there is a sort by field. (rec_rset_elem_record_new): Insert a rec_rset_record_t instead of a rec_record_t in the mset. (rec_rset_record_disp_fn): Destroy a rec_rset_record_t structure, including the contained record. (rec_rset_record_dup_fn): Dup a rec_rset_record_t structure, including the contained record. 2011-07-17 Jose E. Marchesi <jemarch@gnu.org> torture: system tests for typedefs. * torture/utils/recfix.sh (typedef-valid): New input file. (typedef-valid-xfail): Likewise. (typedef-valid-with-blanks): Likewise. (typedef-valid-with-blanks-xfail): Likewise. (typedef-valid-order): Likewise. (typedef-valid-order-xfail): Likewise. (typedef-valid-chain): Likewise. (typedef-valid-chain-xfail): Likewise. (typedef-valid-multiple): Likewise. (typedef-valid-multiple-xfail): Likewise. (typedef-invalid-bad-type): Likewise. (typedef-invalid-chain-undefined): Likewise. (typedef-invalid-chain-loop): Likewise. (recfix-typedef-valid): New test. (recfix-typedef-valid-xfail): Likewise. (recfix-typedef-valid-with-blanks): Likewise. (recfix-typedef-valid-with-blanks-xfail): Likewise. (recfix-typedef-valid-order): Likewise. (recfix-typedef-valid-order-xfail): Likewise. (recfix-typedef-valid-chain): Likewise. (recfix-typedef-valid-chain-xfail): Likewise. (recfix-typedef-valid-multiple): Likewise. (recfix-typedef-valid-multiple-xfail): Likewise. (recfix-typedef-invalid-bad-type): Likewise. (recfix-typedef-invalid-chain-undefined): Likewise. (recfix-typedef-invalid-chain-loop): Likewise. 2011-07-17 Jose E. Marchesi <jemarch@gnu.org> manual: documentation for %typedef. * doc/recutils.texi (Field Types): Rewritten to introduce field types in a clearer way. (Declaring types): New section. (Type descriptions): New section. (Escalar types): Rewritten as a subsection. (String types): Likewise. (Enumerated types): Likewise. (Other types): Likewise. (Types and fields): New section. 2011-07-17 Jose E. Marchesi <jemarch@gnu.org> librec: support for synonyms in type registries. * src/rec-rset.c (rec_rset_update_types): Manage the declaration of synonyms in %typedef entries. * src/rec-types.c: New struct rec_type_reg_entry_s. (rec_type_reg_destroy): Adapted to the new structure of type registry entries. (rec_type_reg_add): Likewise. (rec_type_reg_get): Likewise. (rec_type_reg_add_synonym): New function. * src/rec-int.c (rec_int_check_descriptor): Check for the existance of referred named types. 2011-07-17 Jose E. Marchesi <jemarch@gnu.org> librec: support for %typedef. * src/rec-int.c (rec_int_check_descriptor): Verify %typedef entries. * src/rec-types.c: REC_TYPE_NAME_RE renamed to REC_TYPE_CLASS_RE to not collide with the macro of the same name defined in rec.h. * src/rec.h (REC_TYPE_NAME_RE): New constant. * src/rec-int.c (rec_int_check_descriptor): Accept type names in type descriptions. * src/rec-rset.c (rec_rset_rename_field): Update field props after the rename of a field. (rec_rset_update_types): Rewritten to process %typedef entries. (rec_rset_type_field_p): Allow %type entries with named types. 2011-07-16 Jose E. Marchesi <jemarch@gnu.org> librec: manage anonymous types using the fields props structures. * src/rec-rset.c (rec_rset_new): Create an empty types registry. * src/rec-types.c: Data structures storing the associations removed. (rec_type_reg_destroy): Assocs code removed. Destroy the types. (rec_type_reg_assoc): Deleted. (rec_type_reg_assoc_anon): Deleted. (rec_type_reg_field_type): Deleted. * src/rec-int.c (rec_int_check_field_type): Use rec_rset_get_field_name instead of the type registry of the rset. (rec_int_check_descriptor): Likewise. * src/rec-rset.c (rec_rset_update_field_props): Renamed from rec_rset_update_auto_fields. (rec_rset_get_field_type): Use the field properties to find and return the type of a given field. (rec_rset_update_field_props): Update type properties in the field props. 2011-07-16 Jose E. Marchesi <jemarch@gnu.org> librec: manage auto fields with the new fields properties structure in record sets. * utils/recins.c (recins_add_auto_fields): rec_rset_auto now returns the auto fields in the right order, so no need to reverse it. * src/rec-rset.c: New structure rec_rset_fprops_s to hold the properties of a field. New field field_props in the rec_rset_s struct. (rec_rset_new): Initialise field_props to NULL. (rec_rset_get_props): New function. (rec_rset_update_auto_fields): Update field_props instead of the auto_fields fex. (rec_rset_auto): Build a fex from the contents of field_props and return it. (rec_rset_destroy): Destroy field_props. 2011-07-16 Jose E. Marchesi <jemarch@gnu.org> torture: type-reg tests adapted. * torture/rec-type-reg/rec-type-reg-assoc-anon.c: Renamed from rec-type-reg-register.c, and adapted to the new semantics. * torture/rec-type-reg/rec-type-reg-get.c: Adapted to the new semantics of rec_type_reg_get. 2011-07-15 Jose E. Marchesi <jemarch@gnu.org> librec: support for named types in type registries. * src/rec-rset.c (rec_rset_get_field_type): Likewise. * src/rec-int.c (rec_int_check_field_type): Use rec_type_reg_get_type instead of rec_type_reg_get. (rec_int_check_descriptor): Likewise. * src/rec-types.c (rec_type_reg_add): New function. (rec_type_reg_assoc_anon): Renamed from rec_type_reg_register. (rec_type_reg_assoc): New function. (rec_type_reg_get): New function. (rec_type_reg_assoc): Renamed from rec_type_reg_get and adapted to use the new registry internal structure. 2011-07-14 Jose E. Marchesi <jemarch@gnu.org> librec: attribute 'name' for types. * torture/rec-type/tsuite-rec-type.c (tsuite_rec_type): Test cases for rec_type_name and rec_type_set_name added. * torture/rec-type/rec-type-name.c: New file. (rec_type_name_anonymous): New test. (rec_type_name_nominal): New test. * torture/rec-type/rec-type-set-name.c: New file. (rec_type_set_name_nominal): New test. * src/rec-types.c: New field 'name' in struct rec_type_s to hold the name of the type, or NULL for an anonymous type. (rec_type_name): New function. (rec_type_set_name): New function. (rec_type_new): Initialize the name to NULL. (rec_type_new): type_name_str renamed to type_kind_str to avoid confusion. (rec_type_destroy): Deallocate type->name upon destruction. 2011-07-14 Jose E. Marchesi <jemarch@gnu.org> librec: improvements in the api of rec_type. * torture/rec-type/rec-type-check.c: Changed to use the new rec_type_* API. * torture/rec-type/rec-type-descr-p.c: Likewise. * torture/rec-type-reg/rec-type-reg-get.c: Likewise. * torture/rec-type-reg/rec-type-reg-register.c: Likewise. * torture/rec-type/rec-type-new.c: Likewise. * torture/rec-type/rec-type-kind-str.c: Likewise. * torture/rec-type/rec-type-kind.c: Likewise. * torture/rec-type/rec-type-equal-p.c: Likewise. * torture/rec-type/rec-type-destroy.c: Likewise. * torture/rec-type/tsuite-rec-type.c: Tests for rec_type_descr_fex and rec_type_descr_type removed. * src/rec-rset.c (rec_rset_type_field_type): New function. (rec_rset_rename_field): Use rec_rset_type_field_type instead of rec_type_descr_type. * src/rec-types.c: rec_type_descr_fex function removed. * src/rec.h: Likewise. * src/rec-rset.c (rec_rset_update_types): Parse the list of fields before invoking rec_type_new while processing %type: special fields. (rec_rset_type_field_p): New function. (rec_rset_update_types): Use rec_rset_type_field_p instead of rec_type_descr_p. (rec_rset_rename_field): Likewise. (rec_rset_type_field_fex): New function. (rec_rset_rename_field): Use rec_rset_type_field_fex instead of rec_type_descr_fex. (rec_rset_update_types): Likewise. * src/rec-int.c (rec_int_check_descriptor): Likewise. * src/rec-types.c (rec_type_new): Do not expect the list of field names in the STR parameter. * src/rec-utils.c (rec_parse_regexp): Don't store the result of the parsing in 'result' if it is NULL. 2011-06-21 Jose E. Marchesi <jco@terma.com> build: get offline builds working again. * man/Makefile.am (rec2csv.1): Use $(builddir) to get offline builds working. (csv2rec.1): Likewise. (mdb2rec.1): Likewise. (recdel.1): Likewise. (recfix.1): Likewise. (recinf.1): Likewise. (recins.1): Likewise. (recsel.1): Likewise. (recset.1): Likewise. (recfmt.1): Likewise. * .gitignore: build-aux/config.guess, build-aux/config.sub. 2011-06-19 Jose E. Marchesi <jemarch@gnu.org> utils: avoid the truncation of the result of getopt_long in architectures featuring unsigned chars. * utils/recfix.c (recfix_parse_args): 'ret' shall be an integer to not truncate the -1 returned by getopt_long in architectures featuring unsigned chars. * utils/recsel.c (recsel_parse_args): Likewise. * utils/recinf.c (main): Likewise. * utils/recfmt.c (recfmt_parse_args): Likewise. 2011-06-19 Jose E. Marchesi <jemarch@gnu.org> m4: files installed by libtool removed. They were causing a clash on some systems shipping old versions of libtool. * m4/ltoptions.m4: Deleted. 2011-06-17 Jose E. Marchesi <jemarch@gnu.org> recins: create the specified file if it does not exist. * doc/recutils.texi (recins Invocation): recins will create a new file if it does not exist. * utils/recset.c (main): Likewise. * utils/recdel.c (main): Print an error message if the file could not be opened. * utils/recutl.c (recutl_read_db_from_file): Return NULL if the file could not be opened. * utils/recins.c (main): If the specified file does not exist then create and populate an empty database. 2011-06-17 Jose E. Marchesi <jemarch@gnu.org> recins: generate parseable dates that are locale independent. * utils/recins.c: Include locale.h. (recins_add_auto_field_date): Set the LC_TIME locale setting to "C" before calling strftime and restore it to the environment value afterwards. 2011-06-09 Jose E. Marchesi <jemarch@gnu.org> ob-rec.el is not part of Emacs. * etc/ob-rec.el: Not part of Emacs yet. 2011-06-09 Jose E. Marchesi <jemarch@gnu.org> gitignore updated. * .gitignore: Several entries added to the ignore list. 2011-05-24 Jose E. Marchesi <jemarch@gnu.org> On MAC OS X, GNU libtoolize is named 'glibtoolize'. * autogen.sh: Use glibtoolize instead of libtoolize in Darwin systems. Reported and fixed by Sven Wick. 2011-05-18 Jose E. Marchesi <jemarch@gnu.org> Updates to the FSD file. * FSD (Version): Updated to 1.3 (MaturityLevel): Updated to Production. (HelpList): New entry. 2011-05-16 Jose E. Marchesi <jemarch@gnu.org> Fix size constraint handling on LP64 systems. Patch sent by Daiki Ueno. 2011-05-10 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 25 resolved to 'DONE'. Task 35 created. 2011-05-10 Jose E. Marchesi <jemarch@gnu.org> librec: support for double quotes for delimiting string literals, and unescaped newline characters. * torture/utils/recsel.sh (recsel-sex-string-single-quote): New test. (recsel-sex-string-double-quote): New test. (recsel-sex-string-multiline): New test. * doc/recutils.texi (SEX Operands): Description of string literals updated to cover the usage of " as a delimiter and the support for non-scaped newline characters. * src/rec-sex-lex.l: Regular expression for string literals changed to support both ' and " style quotes and to support newline characters. 2011-05-05 Jose E. Marchesi <jemarch@gnu.org> Remove unneeded library linkages. Problem reported by Sven Wick. * utils/Makefile.am (mdb2rec_LDADD): Don't link mdb2rec with glib in a direct way. (COMMONLIBS): Don't link the utilities with libgnu.la. * torture/Makefile.am (runtests_LDADD): Typo fixed: CHECK_LIBS to CHECKLIBS. * src/Makefile.am (librec_la_LIBADD): Link with libcurl only if the REMOVE_ESCRIPTORS automake conditional is set. * configure.ac: Avoid automatic linking with libcurl by specifying an action for library-if-found in AC_CHECK_LIB. Same for libcheck. Subst CHECKLIBS. 2011-05-04 Jose E. Marchesi <jemarch@gnu.org> ob-rec.el imported in the repo. * etc/ob-rec.el: New file. 2011-03-23 Jose E. Marchesi <jemarch@gnu.org> readme: added note about year intervals in the copyrights. * README: The GNU maintainers guide asks to include an explicit statement explaining the usage of year intervals in the copyright notifications. 2011-02-11 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.3. * .gitignore: Trailing empty line removed. * configure.ac: Version changed to 1.3. 2011-02-11 Jose E. Marchesi <jemarch@gnu.org> Translations updated. * po/de.po: Updated from the translation project. * po/fi.po: Likewise. * po/nl.po: Likewise. * po/sv.po: Likewise. 2011-02-09 Jose E. Marchesi <jemarch@gnu.org> Documentation for %size. * doc/recutils.texi (Record Descriptors): Documentation of the %size special field. 2011-02-09 Jose E. Marchesi <jemarch@gnu.org> Tests for the %size special field. * torture/utils/recfix.sh: New input files size-invalid-1, size-invalid-2, size-exact-zero, size-exact-zero-invalid, size-exact, size-exact-invalid, size-less, size-less-invalid, size-less-equal, size-less-equal-invalid, size-bigger, size-bigger-invalid, size-bigger-equal and size-bigger-equal-invalid. (recfix-size-invalid-1): New test. (recfix-size-invalid-2): New test. (recfix-size-exact-zero): New test. (recfix-size-exact-zero-invalid): New test. (recfix-size-exact): New test. (recfix-size-exact-invalid): New test. (recfix-size-less): New test. (recfix-size-less-invalid): New test. (recfix-size-less-equal): New test. (recfix-size-less-equal-invalid): New test. (recfix-size-bigger): New test. (recfix-size-bigger-invalid): New test. (recfix-size-bigger-equal): New test. (recfix-size-bigger-equal-invalid): New test. 2011-02-08 Jose E. Marchesi <jemarch@gnu.org> portability fix for macos x. * torture/rec-type/rec-type-descr-type.c: Include stdlib.h for malloc, not malloc.h. Macos X does not provide malloc.h 2011-02-08 Jose E. Marchesi <jemarch@gnu.org> manual: several texinfo fixes and improvements. * doc/recutils.texi: Use @dots{}. Use @: after i.e. and e.g. to avoid texinfo to insert double spacing. (recfmt Examples): Fix incomplete statement. Use @var{} for all the parameters in synopsis. 2011-02-08 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> Fix typos and nits in the manual. * doc/recutils.texi (Introduction, Record Descriptors) (SEX Operands, recsel Invocation, recset Invocation) (recfix Examples, recfmt Templates, rec2csv Conversion): Fix typos, add a few @noindent's. 2011-02-08 Jose E. Marchesi <jemarch@gnu.org> warnings fixed in the codebase. * src/rec-utils.c (rec_extract_size): Cast the second argument to rec_parse_int from size_t* to int*. * src/rec-rset.c (rec_rset_update_size_constraints): Unused variable record_elem removed. (rec_rset_source): Unused variable rset_elem removed. * src/rec-int.c (rec_int_merge_remote): Return 0. (rec_int_check_descriptor): Unused variables size_max, size_min, size and invalid_sizes removed. * utils/recins.c (recins_add_new_record): Unused variables errors_str_size, errors_str and errors_buf removed. (recins_add_auto_field_int): Unused variable new_field removed. * utils/recdel.c (recdel_delete_records): Unused variable 'errors_buf' removed. * utils/recfmt.c (recfmt_apply_template): Unused variable 'n' removed. * utils/rec2csv.c (rec2csv_generate_csv): Unused variable 'field_index' removed. * utils/mdb2rec.c (get_field_name): Unused variables field_part_0, field_part_1 and field_part_2 removed. (process_table): Unused variable j removed. (process_mdb): Unused variables 'in' and 'rset' removed. (main): Set 'ret' to success or failure. * torture/rec-type-reg/rec-type-reg-get.c (START_TEST): Unused variable 'type' removed. * torture/rec-parser/rec-parse-db.c (START_TEST): Unused variable stm removed. * torture/rec-parser/rec-parser-eof.c (START_TEST): Unused variable ci removed. 2011-02-07 Jose E. Marchesi <jemarch@gnu.org> List of ignored files updated. * .gitignore: Ignore generated po/*mo files. Ignore the doc/manual directory. 2011-02-07 Jose E. Marchesi <jemarch@gnu.org> librec: implementation of the %size field. * src/rec-rset.c (rec_rset_min_records): New function. (rec_rset_max_records): New function. (rec_rset_source): New function. * src/rec-int.c (rec_int_check_rset): Verify the size restrictions of the record set. * src/rec-utils.c (rec_extract_size): New function. (rec_extract_size_condition): Likewise. * src/rec-rset.c (rec_rset_update_size_constraints): New function. * src/rec-utils.c (rec_match): New function. * src/rec-rset.c (struct rec_rset_s): New fields min_size and max_size. (rec_rset_new): Initialize rset->size_min and rset->size_max. (rec_rset_set_descriptor): Update size constraints. (rec_rset_update_size_constraints): New function. Include stdint.h for SIZE_MAX. * src/rec-int.c (rec_int_check_descriptor): Check for the validity of values of %size fields. 2011-02-07 Jose E. Marchesi <jemarch@gnu.org> librec: problem with non initialized variable fixed. * src/rec-int.c (rec_int_check_descriptor): Initialize 'res' to 0. 2011-02-04 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.2. * NEWS: Updated for 1.2. * configure.ac: Version changed from 1.1.90 to 1.2. 2011-02-04 Jose E. Marchesi <jemarch@gnu.org> Translations for German, Swedish, Finnish and Ducht. * po/de.po: New file from the FTP. * po/sv.po: Likewise. * po/nl.po: Likewise. * po/fi.po: Likewise. * po/LINGUAS: New file. 2011-02-04 Jose E. Marchesi <jemarch@gnu.org> manual: some examples fixed. * doc/recutils.texi (Escalar types): Fix example. (Enumerated types): Likewise. 2011-02-02 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.1.90. * .x-sc_prohibit_strcmp: Added torture/*. * .x-sc_prohibit_stddef_without_use: New file. * po/recutils.pot: Updated for 1.1.90. * NEWS: Updated for 1.1.90. * configure.ac: Version changed to 1.1.90. 2011-02-02 Jose E. Marchesi <jemarch@gnu.org> rec2csv: documentation. * doc/recutils.texi (rec2csv): New section. (rec2csv Invocation): New section. (rec2csv Examples): New section. (rec2csv Conversion): New section. 2011-02-02 Jose E. Marchesi <jemarch@gnu.org> rec2csv: tests. * torture/utils/Makefile.am (TESTS): rec2csv added. * torture/utils/rec2csv.sh: New file. New input files 'default-records', 'missing-fields', 'missing-fields-first', 'multi-line', 'escape-quotes', 'repeated-fields', 'repeated-missing' and 'several-types'. (rec2csv-default-record): New test. (rec2csv-missing-fields): New test. (rec2csv-missing-fields-first): New test. (rec2csv-multi-line): New test. (rec2csv-escape-quotes): New test. (rec2csv-repeated-fields): New test. (rec2csv-repeated-missing): New test. (rec2csv-default-type): New test. (rec2csv-with-type): New test. (rec2csv-nonexistent-type): New test. 2011-02-02 Jose E. Marchesi <jemarch@gnu.org> rec2csv: print data. * utils/rec2csv.c (rec2csv_process_data): Process either the specified record rset, or the default one, or the only rset existing in the file. 2011-02-02 Jose E. Marchesi <jemarch@gnu.org> rec2csv: print headers. * utils/rec2csv.c (rec2csv_determine_fields): New function. * utils/rec2csv.c (rec2csv_generate_csv): Likewise. * src/rec-fex.c (rec_fex_member_p): Get arguments 'min' and 'max'. * src/rec-rset.c (rec_rset_update_auto_fields): Use the additional parameters of rec_fex_member_p. 2011-01-31 Jose E. Marchesi <jemarch@gnu.org> rec2csv: skeleton of the utility. * man/Makefile.am (man_MANS): rec2csv.1 added. (rec2csv.1): New rule. * utils/Makefile.am (bin_PROGRAMS): rec2csv added. (rec2csv_SOURCES): Defined. (rec2csv_LDADD): Defined. * utils/rec2csv.c: New file. (recutl_print_help): New function. (parse_args): Likewise. (rec2csv_process_data): Likewise. (main): Likewise. 2011-01-30 Jose E. Marchesi <jemarch@gnu.org> recins: prepend the auto-generated fields. * torture/utils/recins.sh: Tests adapted. * utils/recins.c (recins_add_auto_field_int): Prepend the auto-generated field instead of appending it. (recins_add_auto_field_date): Likewise. 2011-01-30 Jose E. Marchesi <jemarch@gnu.org> Documentation for the auto generated fields. * doc/recutils.texi (Record Descriptors): List %auto in the list of allowed special fields. (recins Invocation): Document --no-auto. (Auto Generated Fields): auto-generated fields documentation. 2011-01-30 Jose E. Marchesi <jemarch@gnu.org> Tests for the auto generated fields. * torture/utils/recins.sh: New input files auto-fields and auto-range-overflow. (recins-auto-fields): New test. (recins-no-auto): New test. (recins-auto-range-overflow): New test. (recins-auto-range-overflow-force): New test. * torture/utils/recfix.sh: New input files auto-int, auto-range, auto-date, auto-notype and auto-nofex. (recfix-auto-int): New test. (recfix-auto-range): New test. (recfix-auto-date): New test. (recfix-auto-notype): New test. (recfix-auto-nofex): New test. 2011-01-30 Jose E. Marchesi <jemarch@gnu.org> Implementation of auto generated fields. * utils/recins.c: New argument --no-auto. * src/rec-types.c (rec_type_min): New function. (rec_type_max): New function. * src/rec.h: New function rec_rset_get_field_type. * utils/recins.c (recins_add_new_record): Add auto-set fields when replacing a record. (recins_insert_record): Likewise. (recins_add_auto_fields): New function. (recins_add_auto_field_int): New function. (recins_add_auto_field_date): New function. * torture/rec-fex/rec-fex-new.c: Adapt tests to the new semantics of rec_fex_new (NULL,...). * src/rec.h: New functions rec_fex_append and rec_fex_member_p. * src/rec-fex.c (rec_fex_append): Implemented. (rec_fex_member_p): Implemented. (rec_fex_new): Create an empty FEX if the str parameter is NULL. * src/rec-rset.c (struct rec_rset_s): New 'auto_fields' member. (rec_rset_new): Initialize 'auto_fields'. (rec_rset_set_descriptor): Call rec_rset_update_auto_fields. (rec_rset_update_auto_fields): New function. (rec_rset_auto): New function. * src/rec.h: New function rec_rset_auto, that returns a list with the names of the auto-set fields in the rset. * src/rec-int.c (rec_int_check_descriptor): Check that auto-incremented fields are of type int. 2011-01-29 Jose E. Marchesi <jemarch@gnu.org> utils: recdel now performs an integrity check of the resulting database. * doc/recutils.texi (recdel Invocation): Documentation for '--force' and '--verbose'. (recins Invocation): Likewise. (recset Invocation): Likewise. * torture/utils/recdel.sh: New input file 'integrity-fail'. New input file 'external-types'. New input file 'external'. (recdel-integrity-fail): New test. (recdel-force-restrictions): New test. (recdel-external-fail): New test. (recdel-no-external): New test. * utils/recins.c (recins_add_new_record): Use recutl_check_integrity. * utils/recdel.c: New parameter --verbose. New parameter --no-external. * utils/recutl.h: New function 'recutl_check_integrity'. * uitls/recutl.c: Likewise. 2011-01-29 Jose E. Marchesi <jemarch@gnu.org> utils: fix the output of integrity error messages. * utils/recins.c (recins_add_new_record): Dont use recutl_error to report the integrity errors. * utils/recset.c (recset_process_actions): Likewise. 2011-01-29 Jose E. Marchesi <jemarch@gnu.org> librec: manage problems with the remote descriptors as integrity errors. * src/rec-int.c (rec_int_check_descriptor): Call rec_int_merge_remote. (rec_int_merge_remote): Return 1 if there is an error fetching the remote descriptor. 0 otherwise. (rec_int_merge_remote): Get an errors parameter. (rec_int_merge_remote): Manage errors as integrity errors. 2011-01-28 Jose E. Marchesi <jemarch@gnu.org> librec: avoid descriptor expansion when using remote descriptors. * src/rec-int.c (rec_int_check_rset): Save a backup of the rset descriptor before to merge any remote descriptor, and restore it before returning. * torture/utils/recins.sh: New input files external-descriptor and external-descriptor-types. (recins-external-descriptor): New test. 2011-01-25 Jose E. Marchesi <jemarch@gnu.org> manual: Fix the description of %unique, %prohibit, %mandatory, %url and %type. * doc/recutils.texi (Record Descriptors): Fix the documentation of %prohibit, %mandatory and %unique so it says that the field names are separated by blanks. (Record Descriptors): Note that %url can be followed by an URL or a file path. (Record Descriptors): Clarify that the list of field names in %type shall be separated by commas. Problems reported by Jean-François Ollier. 2011-01-24 Jose E. Marchesi <jemarch@gnu.org> manual: document the supported regexp flavor. * doc/recutils.texi (Regular Expressions): New chapter. (String types): Clarify the supported regexp flavor. (Field Values): Likewise. 2011-01-24 Jose E. Marchesi <jemarch@gnu.org> gnulib: update and import regexprops-generic. * doc/regexprops-generic.texi: New file. * lib/iswblank.c: New file. 2011-01-23 Jose E. Marchesi <jemarch@gnu.org> recutl: make recset and recins to keep the permissions of the operated rec file. * utils/recutl.c (recutl_write_db_to_file): New variables st1 and stat_result. (recutl_write_db_to_file): Record the file attributes of the original rec file and use its mode in the replace file. Copyright updated. Problem reported, and solution outlined by Jean-François Ollier. 2011-01-23 Jose E. Marchesi <jemarch@gnu.org> torture: tests checking the %prohibit restriction. * torture/utils/recfix.sh: New input files prohibited-fields and prohibited-fields-fail. (recfix-prohibited-fields-ok): New test. (recfix-prohibited-fields-fail): New test. 2011-01-22 Jose E. Marchesi <jemarch@gnu.org> Use Task instead of Issue in examples involving TODO. * doc/recutils.texi (recsel Examples): Issue replaced by Task. (recins Examples): Likewise. (recdel Examples): Likewise. * utils/recinf.c (recutl_print_help): Likewise. 2011-01-14 Jose E. Marchesi <jemarch@gnu.org> tasktool: use --set-add. * tasktool (tt_process_cmd_resolve): Use the --set-add option of tasktool to insert the ClosedAt field when resolving to DONE. 2011-01-14 Jose E. Marchesi <jemarch@gnu.org> Tasktool operations. * TODO: Task 29 resolved to 'DONE'. Task 29 resolved to 'DONE'. 2011-01-12 Jose E. Marchesi <jemarch@gnu.org> reset: support for the set-add operation. * doc/recutils.texi (recset Invocation): Documentation for the -S, --set-add command line option. * torture/utils/recset.sh (recset-set-add-1): New test. (recset-set-add-2): New test. (recset-set-add-3): New test. * utils/recset.c (RECSET_ACT_SET_ADD): New action. (COMMON_ARGS): SET_ADD_ACTION_ARG added. (recutl_print_help): Document -S, --set-add. (recset_parse_args): Manage the set-add option. (recset_process_actions): Likewise. (recset_process_set): New parameter 'add_p' that tells whether to add missing fields with the given value. (CHECK_ACTION_PREREQ): New macro. (recset_parse_args): Use CHECK_ACTION_PREREQ to avoid code repetition. 2011-01-10 Jose E. Marchesi <jemarch@gnu.org> TODO: put a comment at the beginning asking to execute ./tasktool --help. * tasktool (tt_db_template_header): Modified to include a note about executing ./tasktool --help. * TODO: Likewise. 2011-01-10 Jose E. Marchesi <jemarch@gnu.org> librec: support for comments in enum descriptions. * doc/recutils.texi (Enumerated types): Comments in enum descriptions documented. Copyright updated. * torture/utils/recfix.sh: New input file 'enum-valid'. New input file 'enum-invalid-1'. New input file 'enum-invalid-2'. (recfix-enum-valid): New test. (recfix-enum-invalid-1): New test. (recfix-enum-invalid-2): New test. * src/rec-types.c (rec_type_parse_enum): Skip comments in enum descriptions. 2010-12-23 Jose E. Marchesi <jemarch@gnu.org> Preparation for 1.1. * .x-sc_prohibit_have_config_h: New file. * po/POTFILES.in: Updated. * m4/pkg.m4: Relicense from GPLv2+ to GPLv3+. * NEWS: Updated to version 1.1. * man/Makefile.am (man_MANS): recfmt.1 added. (recfmt.1): New rule. * configure.ac: Package version changed to 1.1. 2010-12-23 Jose E. Marchesi <jemarch@gnu.org> rec-sex: support for the string concatenation operator. * doc/recutils.texi (SEX Operators): Documentation for the string concatenation operator. * src/rec-sex.c (rec_sex_eval_node): Manage REC_SEX_OP_CONCAT. * src/rec-sex-ast.h: New operation REC_SEX_OP_CONCAT. * src/rec-sex-tab.y: Declare REC_SEX_TOK_AMP as a token. * src/rec-sex-lex.l: Recognize REC_SEX_TOK_AMP. 2010-12-23 Jose E. Marchesi <jemarch@gnu.org> rec-sex: support for the conditional expression. * doc/recutils.texi (SEX Operators): Documentation for the ternary conditional operator added. * src/rec-sex.c (rec_sex_eval_node): Manage REC_SEX_OP_COND. * src/rec-sex-tab.y (CREATE_NODE_OP3): Macro defined. * src/rec-sex-ast.h: New operation REC_SEX_OP_COND. * src/rec-sex-tab.y: Declare REC_SEX_TOK_QM and REC_SEX_TOK_COLON as tokens. * src/rec-sex-lex.l: Recognize REC_SEX_TOK_QM and REC_SEX_TOK_COLON. 2010-12-23 Jose E. Marchesi <jemarch@gnu.org> manual: first draft of the documentation for recfmt. * doc/recutils.texi (recfmt): New chapter. (recfmt Invocation): New section. (recfmt Templates): New section. (recfmt Examples): New section. 2010-12-23 Jose E. Marchesi <jemarch@gnu.org> recfmt: use SEX expressions in template slots and change the slot format. * src/rec-sex.c (rec_sex_compile): Set the parser ast only if the parsing was successful. * src/rec-sex-tab.y (exp): Grammar changed to require an expression. * src/rec-sex.c (rec_sex_eval_str): New function. * utils/recfmt.c (recfmt_apply_template): Use {{...}} marks instead of <#...>. (recfmt_get_subst): New function. 2010-12-22 Jose E. Marchesi <jemarch@gnu.org> recfmt: initial version. * torture/utils/Makefile.am (TESTS): recfmt.sh added. * torture/utils/recfmt.sh: New file. (recfmt-empty-template): New test. (recfmt-empty-file): New test. (recfmt-all-records): New test. (recfmt-slot-beginning): New test. (recfmt-no-prolog): New test. (recfmt-subscripts): New test. (recfmt-non-matching-records): New test. (recfmt-empty-slot): New test. (recfmt-invalid-slot): New test. * src/rec-record.c (rec_record_get_field_by_name): Return NULL if the specified field is not found, instead of the last field of the record. * utils/recutl.h: New function recutl_warning. New function recutl_read_file. * utils/recutl.c (recutl_warning): Implemented. (recutl_read_file): Implemented. * utils/recfmt.c (recfmt_process_db): New function. (rec_fmt_apply_template): New function. * utils/Makefile.am (bin_PROGRAMS): recfmt added. * utils/recfmt.c: New file. (recutl_print_help): New function. (recfmt_parse_args): New function. (main): New function. 2010-12-22 Jose E. Marchesi <jemarch@gnu.org> torture: manage errors when running the utilities in the system tests. * torture/utils/testutils.sh: Make the tests to fail if there is an error running a system test. 2010-12-21 Jose E. Marchesi <jemarch@gnu.org> Portability fixes. * torture/utils/testutils.sh: Use the portable 'expr' instead of 'bc'. * src/Makefile.am (AM_CFLAGS): gcc specific options -Wall and -fno-strict-aliasing removed. * utils/recutl.h: Include progname.h so the declaration of program_name is accessible in all the utilities. * utils/csv2rec.c: program_name global variable removed. * utils/recset.c: Likewise. * utils/recsel.c: Likewise. * utils/recins.c: Likewise. * utils/recinf.c: Likewise. * utils/recfix.c: Likewise. * utils/recdel.c: Likewise. * utils/mdb2rec.c: Likewise. * utils/recutl.c: Include progname.h and use set_progname. * module 'progname' imported from gnulib. * src/rec.c: Remove the setting of a program_name variable when compiling with mingw. * src/rec-sex.c (ATOTS_VAL): Use parse_datetime instead of get_date. Include parse-datetime.h instead of getdate.h. * src/rec-types.c: Likewise. * po/Makevars.template: Removed. * README-dev: libcsv dependency removed. Added a note asking for a recent version of flex. * m4/pkg.m4: Copied from /usr/share/aclocal/pkg.m4. 2010-12-20 Jose E. Marchesi <jemarch@gnu.org> Build a librec.dll in mingw. * src/Makefile.am (AM_LDFLAGS): Use -no-undefined. * src/rec.c: Avoid an undefined symbol in the generated librec.dll. 2010-12-20 Jose E. Marchesi <jemarch@gnu.org> Fix compilation in mingw32. * src/rec-sex-lex.l: Use %top to get config.h included at the top of the generated file. * strsep module imported from gnulib. * mkdstemp module imported from gnulib. 2010-12-20 Jose E. Marchesi <jemarch@gnu.org> echo -n is not recognized in macosx. Use printf instead. * torture/utils/testutils.sh (test_declare_input_file): Use printf instead of echo -n. (test_tool): Likewise. * tasktool (tt_email_p): Likewise. (tt_process_cmd_note): Likewise. (tt_process_cmd_create): Likewise. 2010-12-19 Jose E. Marchesi <jemarch@gnu.org> Misc portability problems fixed. * utils/recutl.h: Make recutl_fatal and recutl_error to get a const char pointer as its first argument. * utils/recutl.c: Include locale.h. * src/rec-writer.c (rec_write_comment): Use strdup instead of strdupa. (rec_write_comment): Avoid freeing a tail of a string returned by strdup. 2010-12-19 Jose E. Marchesi <jemarch@gnu.org> Include gettext.h instead of libintl.h. * src/rec.c: Include gettext.h instead of libintl.h. * utils/recutl.c: Likewise. * utils/recset.c: Likewise. * utils/recsel.c: Likewise. * utils/recins.c: Likewise. * utils/recinf.c: Likewise. * utils/recfix.c: Likewise. * utils/recdel.c: Likewise. * utils/mdb2rec.c: Likewise. * utils/csv2rec.c: Likewise. * src/rec-utils.c: Likewise. * src/rec-types.c: Likewise. * src/rec-parser.c: Likewise. * src/rec-int.c: Likewise. * src/rec-field-name.c: Likewise. * src/rec-fex.c: Likewise. 2010-12-19 Jose E. Marchesi <jemarch@gnu.org> gettext-h module imported from gnulib. * m4/configmake.m4: New file. 2010-12-19 Jose E. Marchesi <jemarch@gnu.org> librec: use %zu instead of %d to print size_t values in *printf calls. * src/rec-field.c (rec_field_set_location): Use %zu instead of %d to print size_t values. (rec_field_set_char_location): Likewise. * src/rec-types.c (rec_type_check_size): Likewise. * src/rec-parser.c (rec_parser_perror): Likewise. * src/rec-record.c (rec_record_set_location): Likewise. (rec_record_set_char_location): Likewise. 2010-12-19 Jose E. Marchesi <jemarch@gnu.org> librec: use the safer construction asprintf instead of sprintf. * src/rec-fex.c (rec_fex_str): Use asprintf instead of sprintf. * src/rec-types.c (rec_type_check_size): Likewise. (rec_type_check_range): Likewise. * src/rec-record.c (rec_record_set_location): Likewise. (rec_record_set_char_location): Likewise. * src/rec-parser.c (rec_parser_perror): Likewise. * src/rec-int.c (rec_int_check_field_type): Likewise. (rec_int_check_record_mandatory): Likewise. (rec_int_check_record_unique): Likewise. (rec_int_check_record_prohibit): Likewise. (rec_int_check_record_key): Likewise. (rec_int_check_descriptor): Likewise. * src/rec-field.c (rec_field_set_location): Likewise. 2010-12-18 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 30 resolved to 'DONE'. 2010-12-18 Jose E. Marchesi <jemarch@gnu.org> Stop using the non portable open_memstream. * torture/rec-writer/rec-write-comment.c: Use the rec_writer_new_str function instead of open_memstream and file streams. * torture/rec-writer/rec-write-rset.c: Likewise. * torture/rec-writer/rec-write-record-with-fex.c: Likewise. * torture/rec-writer/rec-write-record.c: Likewise. * torture/rec-writer/rec-write-field-name.c: Likewise. * torture/rec-writer/rec-write-field.c: Likewise. * torture/rec-writer/rec-write-db.c: Likewise. * utils/recins.c: Don't use open_memstream. * utils/recset.c: Likewise. * utils/recutl.c: Likewise. * src/rec-buf.c: New file. * src/rec.h: Get a char** argument instead of a stream for the 'errors' argument of the function rec_int_check_db, rec_int_check_rset, rec_int_check_record and rec_int_check_field_type. rec_buf_* moved there from pdf-utils.h. * src/rec-writer.c: Support a rec_buf_t backend in the writer. (rec_writer_new_str): New function. (rec_writer_puts): Use the rec_buf backend if selected. (rec_writer_putc): Likewise. (rec_write_field_str): Use a rec_buf_t backed writer. (rec_write_field_name_str): Likewise. (rec_write_comment_str): Likewise. * src/rec-record.c (rec_record_to_comment): Use rec_buf_new instead of the non portable open_memstream. * src/rec-rset.c (rec_rset_rename_field): Likewise. * src/rec-types.c (rec_type_check): Use rec_buf_new instead of the non portable open_memstream. (rec_type_check_int): Likewise. (rec_type_check_field): Likewise. (rec_type_check_bool): Likewise. (rec_type_check_range): Likewise. (rec_type_check_real): Likewise. (rec_type_check_size): Likewise. (rec_type_check_line): Likewise. (rec_type_check_regexp): Likewise. (rec_type_check_date): Likewise. (rec_type_check_email): Likewise. (rec_type_check_enum): Likewise. 2010-12-17 Jose E. Marchesi <jemarch@gnu.org> rec-utils: new open_memstream like API for rec_buf_t. * src/rec-parser.c (rec_parse_field_name_part): Use the new rec_buf_t API. (rec_parse_comment): Likewise. (rec_parse_field_value): Likewise. * src/rec-utils.h: New interface for the rec_buf_t abstract data type, including: rec_buf_new, rec_buf_putc, rec_buf_puts and rec_buf_close. * src/rec-utils.c: rec_buf_new, rec_buf_putc, rec_buf_puts and rec_buf_close implemented based in the old implementation. 2010-12-16 Jose E. Marchesi <jemarch@gnu.org> syntax-check fixes. * libcsv/libcsv.c (VERSION): Changed to 3.0.0-recutils. Include config.h. 2010-12-16 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 34 resolved to 'DONE'. 2010-12-16 Jose E. Marchesi <jemarch@gnu.org> libcsv embedded in the source tree. * utils/csv2rec.c: Include csv.h instead of libcsv/csv.h. * utils/Makefile.am (csv2rec_LDADD): Link with libcsv.la. (AM_CPPFLAGS): Add the libcsv/ directory to the include path. * configure.ac: Checks for libcsv removed. Conditional COMPILE_CSV2REC removed. * Makefile.am (SUBDIRS): libcsv/ added. * libcsv/csv.h: Imported from libcsv-3.0.0.tar.gz and relicensed from LGPL2.1+ to GPLv3. * libcsv/libcsv.c: Likewise. * libcsv/Makefile.am: New file. 2010-12-16 Jose Marchesi <jco@wilhelm> Tasktool operations. * TODO: Task 34 created. 2010-12-15 Jose E. Marchesi <jemarch@gnu.org> tasktool: first version of log subcommand. * tasktool (tt_process_cmd_log): New function. (tt_help_log): New variable. (tt_parse_arguments): Handle the 'log' subcommand. 2010-12-14 Jose E. Marchesi <jemarch@gnu.org> librec: new function rec_buf_add_str in rec-utils. * src/rec-utils.h: New function 'rec_buf_add_str'. * src/rec-utils.c (rec_buf_add_str): New function. 2010-12-14 Jose E. Marchesi <jemarch@gnu.org> librec: rec_parser_buf abstraction moved to rec-utils as rec_buf. * src/rec-parser.c: Use the rec_buf_* functions instead of the rec_parser_buf_* functions. Include rec-utils.h. * src/rec-utils.c: Implementation of the rec_buf_t type and the rec_buf_* functions, moved and adapted from rec-parser.c. * src/rec-utils.h: New rec_buf_t abstract data type, renamed from the rec_parser_buf_t type and functions in rec-parser.h. 2010-12-14 Jose E. Marchesi <jemarch@gnu.org> Tasktool operations. * TODO: Note added for task 30. 2010-12-14 Jose E. Marchesi <jemarch@gnu.org> librec: remove the usage of the non-portable fmemopen. * torture/rec-parser/rec-parse-db.c: Replace uses of fmemopen by buffer backed parsers. * torture/rec-parser/rec-parse-field.c: Likewise. * torture/rec-parser/rec-parse-field-name.c: Likewise. * torture/rec-parser/rec-parse-record.c: Likewise. * torture/rec-parser/rec-parser-eof.c: Likewise. * torture/rec-parser/rec-parser-error.c: Likewise. * torture/rec-parser/rec-parser-perror.c: Likewise. * torture/rec-parser/rec-parser-reset.c: Likewise. * torture/rec-parser/rec-parse-rset.c: Likewise. * src/rec-parser.c (rec_parse_field_name_str): Rewritten to use rec_parser_new_str and rec_parser_eof instead of fmemopen. (rec_parse_record_str): Likewise. * torture/rec-parser/rec-parser-new-str.c: New file. (test_rec_parser_new_str): New function. (rec_parser_new_str_nominal): New test. * src/rec-parser.c: New member 'buffer' in the struct rec_parser_s. (rec_parser_init_common): New function. (rec_parser_getc): Use the buffer backend if the parser was created with rec_parser_new_str. (rec_parser_ungetc): Likewise. 2010-12-13 Jose E. Marchesi <jemarch@gnu.org> rec-mode: several fixes. * etc/rec-mode.el: Several fixes. * utils/recinf.c (print_info_file): Print "unknown" only if generated normal output. It was breaking the sexps. 2010-12-13 Jose E. Marchesi <jemarch@gnu.org> recins: check for integrity problems regardless of operational mode. * utils/recfix.c (recfix_process_data): Use new semantics of rec_int_check_db. * src/rec-int.c (rec_int_check_db): Return the number of errors found while checking the integrity of the database. (rec_int_merge_remote): Unused variable removed. * utils/recins.c (recins_add_new_record): Check for the integrity of the new database in both operation modes: normal and replace. 2010-12-13 Jose Marchesi <jco@wilhelm> Tasktool operations. * TODO: Task 30 edited. Task 30 edited. 2010-12-13 Jose E. Marchesi <jemarch@gnu.org> librec: don't allow several %rec: fields in record descriptors. * src/rec-int.c (rec_int_check_descriptor): Don't allow more than one %rec: fields in record descriptors. * torture/utils/recfix.sh: New tests 'recfix-one-rec' and 'recfix-multiple-rec-in-descriptor'. 2010-12-13 Jose E. Marchesi <jemarch@gnu.org> rec-mode: initial version of rec-cmd-compile. * etc/rec-mode.el (rec-mode-edit-map): Map the rec-cmd-compile command. (rec-mode-map): Likewise. (rec-recfix): New variable. (rec-cmd-compile): New function. 2010-12-10 Jose Marchesi <jemarch@gnu.org> Tasktool operations. * TODO: Task 28 resolved to 'DONE'. 2010-12-10 Jose E. Marchesi <jemarch@gnu.org> tasktool: support for categories. * tasktool (tt_task_categories): New category 'rec-mode'. (tt_process_cmd_list): Support the -c|--category parameter. (tt_db_template_task): Set 'Category' as a mandatory field. * TODO: Updated to reflect the new categories. 2010-12-04 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 30 created. Task 30 edited. 2010-12-04 Jose E. Marchesi <jemarch@gnu.org> librec: do not include malloc.h. Include the more portable stdlib.h instead. * src/rec-fex.c: Include stdlib.h instead of malloc.h. * src/rec-field-name.c: Likewise. * src/rec-field.c: Likewise. * src/rec-parser.c: Likewise. * src/rec-record.c: Likewise. * src/rec-rset.c: Likewise. * src/rec-sex.c: Likewise. * src/rec-writer.c: Likewise. 2010-12-04 Jose E. Marchesi <jemarch@gnu.org> Avoid a segmentation fault in rec_write_rset. * src/rec-writer.c (rec_write_rset): Make sure that the descriptor of a record set exists before to try to write it. Problem reported by Elias Pipping. 2010-12-02 Jose E. Marchesi <jemarch@gnu.org> rec-types: support ranges with implicit minimum limit. * torture/utils/recfix.sh (recfix-ranges-ok): New test. (recfix-ranges-xfail-1): New test. (recfix-ranges-xfail-2): New test. * torture/rec-type/rec-type-new.c: Test ranges with just one index. * src/rec-types.c (REC_TYPE_RANGE_DESCR_RE): Allow the omission of one of the indexes of the range. (rec_type_parse_range): Allow the omission of one of the indexes. 2010-12-02 Jose E. Marchesi <jemarch@gnu.org> mdb2rec: normalise field names appearing in %type fields. * utils/mdb2rec.c (process_table): Use normalised field name parts in the %type: entries for columns. 2010-12-01 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 29 created. 2010-12-01 Jose E. Marchesi <jemarch@gnu.org> tasktool: fix the setting of the close time when resolving. * tasktool (tt_process_cmd_resolve): Add or set the closing time for a task, depending if there is an existing 'ClosedAt' field. 2010-12-01 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 25 edited. Task 28 created. Task 27 created. Task 24 edited. Task 26 created. 2010-12-01 Jose E. Marchesi <jemarch@gnu.org> tasktool: control record support. * TODO: Control record added. * tasktool: Support for the TasktoolControl record and NextFreeId field added. 2010-12-01 Jose E. Marchesi <jemarch@gnu.org> rec-writer: cover an additional special case in rec_write_rset. * src/rec-writer.c (rec_write_rset): Cover the special case where a record set contains a set of comments followed by the record descriptor. * torture/utils/recins.sh: New tests 'recins-only-descriptor' and 'recins-comments-and-descriptor'. 2010-12-01 Jose E. Marchesi <jemarch@gnu.org> tasktool: escape parameters passed to eval. * tasktool (tt_escape_single_quoted): New function. (tt_process_cmd_create): Escape all the parameters used in single quoted strings passed to eval. 2010-11-30 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 19 resolved to 'DONE'. Task 24 edited. Task 24 created. 2010-11-30 Jose E. Marchesi <jemarch@gnu.org> Tests for the before, after and sametime operators. * torture/utils/recsel.sh: New input file 'dates'. (recsel-sex-date-sametime): New test. (recsel-sex-date-before): New test. (recsel-sex-date-after): New test. 2010-11-30 Jose E. Marchesi <jemarch@gnu.org> Documentation of the before, after and sametime operators. * doc/recutils.texi (SEX Operators): Date operators documented. 2010-11-30 Jose E. Marchesi <jemarch@gnu.org> Date operators before, after and sametime implementation. * src/rec-sex.c (timespec_subtract): New function. (rec_sex_eval_node): Manage REC_SEX_OP_BEFORE. (rec_sex_eval_node): Manage REC_SEX_OP_AFTER. (rec_sex_eval_node): Manage REC_SEX_OP_SAMETIME. * src/rec-sex-ast.h: Constants for the date operators. * src/rec-sex-tab.y: Support for the date operators. * src/rec-sex-lex.l: New tokens for date operators '<<', '>>' and '=='. 2010-11-29 Jose E. Marchesi <jemarch@gnu.org> * NEWS: Updated for 1.0 release. 2010-11-27 Jose E. Marchesi <jemarch@gnu.org> Syntax check fixes. * TESTS: Regenerated. * torture/rec-record/rec-record-field-p.c: Trailing blanks removed. * torture/utils/Makefile.am (TESTS_ENVIRONMENT): Use $(PATH_SEPARATOR) instead of ':'. 2010-11-27 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 22 edited. 2010-11-27 Jose E. Marchesi <jemarch@gnu.org> Support for file paths as external descriptors. * src/rec-types.c (rec_type_check_enum): Add digits in enum constants. * doc/recutils.texi (External Descriptors): File paths in external descriptors sources documented. * src/rec-int.c (rec_int_rec_type_p): Use REC_FILE_REGEXP. * src/rec-utils.c (rec_extract_file): New file. 2010-11-25 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 23 edited. Task 18 edited. 2010-11-25 Jose E. Marchesi <jemarch@gnu.org> recset: support for -r|--rename. * torture/rec-type/rec-type-descr-type.c: New file. (test_rec_type_descr_type): New function. (rec_type_descr_type_nominal): New test. (rec_type_descr_type_invalid): New test. * src/rec-types.c (rec_type_descr_type): New function. * TODO: Regenerated. * torture/rec-fex/rec-fex-str.c: New file. (test_rec_fex_str): New function. (rec_fex_str_nominal): New test. * src/rec-fex.c (rec_fex_elem_set_field_name): New function. (rec_fex_str): New function. * src/rec-rset.c (rec_rset_rename_field): New function. * torture/utils/recset.sh: (recset-rename): New test. (recset-rename-first): New test. (recset-rename-middle): New test. (recset-rename-last): New test. (recset-rename-range-first): New test. (recset-rename-range-last): New test. (recset-rename-range-all): New test. (recset-rename-all): New test. (recset-rename-all-descriptor): New test. (recset-rename-all-key): New test. (recset-rename-invalid-fex): New test. * doc/recutils.texi (recset Invocation): Document -r|--rename. (recset Examples): Added example for recset rename. * utils/recset.c (recutl_print_help): New option -r|--rename documented. (RECSET_ACT_RENAME): New constant. (recset_process_ren): New function. 2010-11-23 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 23 created. 2010-11-23 Jose E. Marchesi <jemarch@gnu.org> System tests for the utilities. * torture/utils/recfix.sh: New file. (recfix-type-int-valid): New test. (recfix-type-int-invalid): New test. (recfix-type-real-valid): New test. (recfix-type-real-invalid): New test. (recfix-duplicated-keys): New test. (recfix-missing-mandatory): New test. (recfix-several-unique): New test. (recfix-referred-type): New test. (recfix-hidden-type): New test. * torture/utils/testutils.sh: Support expected statuses 'ok' and 'xfail' in 'test_tool'. * torture/utils/recset.sh: New file. (recset-append-field): New test. (recset-set-field): New test. (recset-delete-field): New test. (recset-comment-out-field): New test. (recset-delete-non-existant): New test. (recset-comment-out-fex-first): New test. (recset-comment-out-fex-last): New test. (recset-force-integrity): New test. * torture/utils/recins.sh: New file. (recins-empty): New test. (recins-empty-with-type): New test. (recins-several-fields): New test. (recins-append): New test. (recins-append-in-type): New test. (recins-append-new-type): New test. (recins-replace): New test. (recins-replace-sex): New test. (recins-force-restrictions): New test. * torture/utils/recdel.sh: New file. (recdel-first): New test. (recdel-second): New test. (recdel-last): New test. (recdel-comment): New test. (recdel-sex): New test. (recdel-type): New test. (recdel-force-all): New test. * utils/recutl.c (recutl_write_db_to_file): Close the stream to 'out' if it is not 'stdout' only. * torture/utils/recinf.sh: New file. (recinf-empty): New test. (recinf-one-record): New test. (recinf-multiple-records): New test. (recinf-multiple-named): New test. (recinf-multiple-named-descriptors): New test. (recinf-multiple-types): New test. (recinf-names-only): New test. * torture/Makefile.am (SUBDIRS): Process the current directory before 'utils/'. (recsel-sex-sharp-zero): New test. (recsel-sex-sharp-one): New test. (recsel-sex-sharp-multiple): New test. (recsel-sex-match): New test. 2010-11-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> manual: fix overlong lines and a couple of examples. * doc/recutils.texi (recsel Invocation, recins Invocation) (recins Examples): Do not recommend appending to a file while reading it. Avoid overlong lines in the synopses and examples. 2010-11-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> Fix make check in VPATH case. * torture/utils/recsel.sh: Ensure $srcdir is set; read testsutils.sh from $srcdir. * torture/utils/testutils.sh: Add $srcdir to PATH. 2010-11-21 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> Tasktool operations. * tasktool (tt_add_changelog_entry): Use portable sed features only. Avoid changing more than the first matching entry. 2010-11-20 Jose E. Marchesi <jemarch@gnu.org> Support negative integer and real literals in selection expressions. * src/rec-sex-lex.l: Support negative integers and reals in the lexer level. * torture/utils/recsel.sh: Integer and real operators tests. 2010-11-20 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 11 edited. 2010-11-20 Jose E. Marchesi <jemarch@gnu.org> * tasktool (tt_process_cmd_list): Do not include tasks in "resolution" status by default. Include the status in the list. 2010-11-19 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 3 edited. 2010-11-15 Jose E. Marchesi <jemarch@gnu.org> * torture/utils/Makefile.am: New file. 2010-11-15 Jose E. Marchesi <jemarch@gnu.org> rec-sex: unit tests. * torture/rec-sex/rec-sex-eval.c: New file. (test_rec_sex_eval): New function. (rec_sex_eval_match): New test. (rec_sex_eval_nomatch): New test. * torture/rec-sex/rec-sex-compile.c: New file. (test_rec_sex_compile): New function. (rec_sex_compile_nominal): New test. (rec_sex_compile_invalid): New test. * torture/rec-sex/rec-sex-destroy.c: New file. (test_rec_sex_destroy): New function. (rec_sex_destroy_nominal): New test. * torture/rec-sex/rec-sex-new.c: New file. (test_rec_sex_new): New function. (rec_sex_new_nominal): New test. * torture/rec-sex/tsuite-rec-sex.c: New file. (tsuite_rec_sex): New function. 2010-11-15 Jose E. Marchesi <jemarch@gnu.org> utils: compilation warnings removed. * utils/recinf.c: Unused variables removed. * utils/recsel.c: Likewise. * utils/recset.c: Likewise. * utils/recins.c: Likewise. 2010-11-15 Jose E. Marchesi <jemarch@gnu.org> rec-writer: unit tests. * torture/rec-writer/rec-write-comment-str.c: New file. (test_rec_write_comment_str): New function. (rec_write_comment_str_nominal): New test. (rec_write_comment_str_sexp): New test. * torture/rec-writer/rec-write-field-str.c: New file. (test_rec_write_field_str): New function. (rec_write_field_str_nominal): New test. (rec_write_field_str_sexp): New test. * torture/rec-writer/rec-write-field-name-str.c: New file. (test_rec_write_field_name_str): New function. (rec_write_field_name_str_nominal): New test. (rec_write_field_name_str_sexp): New test. * torture/rec-writer/rec-write-db.c: New file. (test_rec_write_db): New function. (rec_write_db_nominal): New test. * torture/rec-writer/rec-write-rset.c: New file. (test_rec_write_rset): New function. (rec_write_rset_nominal): New test. * torture/rec-writer/rec-write-record-with-fex.c: New file. (test_rec_write_record_with_fex): New function. (rec_write_record_with_fex_nominal): New test. (rec_write_record_with_fex_values): New test. (rec_write_record_with_fex_rows): New test. 2010-11-14 Jose E. Marchesi <jemarch@gnu.org> rec-write unit tests. * torture/rec-writer/rec-write-record.c: New file. (test_rec_write_record): New function. (rec_write_record_nominal): New test. (rec_write_record_sexp): New test. * torture/rec-writer/rec-write-field-name.c: New file. (test_rec_write_field_name): New function. (rec_write_field_name_nominal): New test. (rec_write_field_name_sexp): New test. * torture/rec-writer/rec-write-field.c: New file. (test_rec_write_field): New function. (rec_write_field_nominal): New test. (rec_write_field_sexp): New test. * torture/rec-writer/rec-write-comment.c: New file. (test_rec_write_comment): New function. (rec_write_comment_nominal): New test. (rec_write_comment_sexp): New test. * torture/rec-writer/rec-writer-destroy.c: New file. (test_rec_writer_destroy): New function. (rec_writer_destroy_nominal): New test. * torture/rec-writer/rec-writer-new.c: New file. (test_rec_writer_new): New function. (rec_writer_new_nominal): New test. * torture/rec-writer/tsuite-rec-writer.c: New file. (tsuite_rec_writer): New function. 2010-11-13 Jose E. Marchesi <jemarch@gnu.org> rec-parser unit tests. * torture/rec-parser/rec-parser-perror.c: New file. (test_rec_parser_perror): New function. (rec_parser_perror_nominal): New test. * torture/rec-parser/rec-parser-reset.c: New file. (test_rec_parser_reset): New function. (rec_parser_reset_nominal): New test. * torture/rec-parser/rec-parser-error.c: New file. (test_rec_parser_error): New function. (rec_parser_error_nominal): New test. * torture/rec-parser/rec-parser-eof.c: New file. (test_rec_parser_eof): New function. (rec_parser_eof_nominal): New test. * torture/rec-parser/rec-parse-db.c: New file. (test_rec_parse_db): New function. (rec_parse_db_nominal): New test. (rec_parse_db_invalid): New test. * torture/rec-parser/rec-parse-rset.c: New file. (test_rec_parse_rset): New function. (rec_parse_rset_nominal): New test. (rec_parse_rset_invalid): New test. * torture/rec-parser/rec-parse-record.c: New file. (test_rec_parse_record): New function. (rec_parse_record_nominal): New test. (rec_parse_record_invalid): New test. * torture/rec-parser/rec-parse-field.c: New file. (test_rec_parse_field): New function. (rec_parse_field_nominal): New test. (rec_parse_field_invalid): New test. * torture/rec-parser/rec-parse-field-name.c: New file. (test_rec_parse_field_name): New function. (rec_parse_field_name_nominal): New test. (rec_parse_field_name_invalid): New test. * torture/rec-parser/rec-parse-field-name-str.c: New file. (test_rec_parse_field_name_str): New function. (rec_parse_field_name_str_nominal): New test. (rec_parse_field_name_str_invalid): New test. * torture/rec-parser/rec-parser-destroy.c: New file. (test_rec_parser_destroy): New function. (rec_parser_destroy_nominal): New test. * torture/rec-parser/rec-parser-new.c: New file. (test_rec_parser_new): New function. (rec_parser_new_nominal): New test. * torture/rec-parser/tsuite-rec-parser.c: New file. (tsuite_rec_parser): New function. 2010-11-12 Jose E. Marchesi <jemarch@gnu.org> rec-field unit tests. * torture/rec-field/rec-field-to-comment.c: New file. (test_rec_field_to_comment): New function. (rec_field_to_comment_nominal): New test. * torture/rec-field/rec-field-set-char-location.c: New file. (test_rec_field_set_char_location): New function. (rec_field_set_char_location_nominal): New test. * torture/rec-field/rec-field-char-location-str.c: New file. (test_rec_field_char_location_str): New function. (rec_field_char_location_str_nominal): New test. * torture/rec-field/rec-field-char-location.c: New file. (test_rec_field_char_location): New function. (rec_field_char_location_nominal): New test. * torture/rec-field/rec-field-set-location.c: New file. (test_rec_field_set_location): New function. (rec_field_set_location_nominal): New test. * torture/rec-field/rec-field-location-str.c: New file. (test_rec_field_location_str): New function. (rec_field_location_str_nominal): New test. * torture/rec-field/rec-field-location.c: New file. (test_rec_field_location): New function. (rec_field_location_nominal): New test. * torture/rec-field/rec-field-set-source.c: New file. (test_rec_field_set_source): New function. (rec_field_set_source_nominal): New test. * torture/rec-field/rec-field-source.c: New file. (test_rec_field_source): New function. (rec_field_source_nominal): New test. * torture/rec-field/rec-field-equal-p.c: New file. (test_rec_field_equal_p): New function. (rec_field_equal_p_equal): New test. (rec_field_equal_p_nonequal): New test. * torture/rec-field/rec-field-name-str.c: New file. (test_rec_field_name_str): New function. (rec_field_name_str_nominal): New test. * torture/rec-field/rec-field-destroy.c: New file. (test_rec_field_destroy): New function. (rec_field_destroy_nominal): New test. * torture/rec-field/rec-field-new-str.c: New file. (test_rec_field_new_str): New function. (rec_field_new_str_nominal): New test. (rec_field_new_str_invalid): New test. * torture/rec-field/rec-field-new.c: New file. (test_rec_field_new): New function. (rec_field_new_nominal): New test. 2010-11-12 Jose E. Marchesi <jemarch@gnu.org> More rec-fex unit tests. * torture/rec-fex/rec-fex-elem-max.c: New file. (test_rec_fex_elem_max): New function. (rec_fex_elem_max_nosubs): New test. (rec_fex_elem_max_min): New test. (rec_fex_elem_max_minmax): New test. * torture/rec-fex/rec-fex-elem-min.c: New file. (test_rec_fex_elem_min): New function. (rec_fex_elem_min_nosubs): New test. (rec_fex_elem_min_min): New test. (rec_fex_elem_min_minmax): New test. * torture/rec-fex/rec-fex-elem-field-name-str.c: New file. (test_rec_fex_elem_field_name_str): New function. (rec_fex_elem_field_name_str_nominal): New test. 2010-11-10 Jose E. Marchesi <jemarch@gnu.org> More rec-fex unit tests. * torture/rec-fex/rec-fex-elem-field-name.c: New file. (test_rec_fex_elem_field_name): New function. (rec_fex_elem_field_name_nominal): New test. * torture/rec-fex/rec-fex-get.c: New file. (test_rec_fex_get): New function. (rec_fex_get_nominal): New test. (rec_fex_get_invalid): New test. 2010-11-09 Jose E. Marchesi <jemarch@gnu.org> rec-fex unit tests and some fixes. * torture/rec-fex/rec-fex-size.c: New file. (test_rec_fex_size): New function. (rec_fex_size_nominal): New test. * torture/rec-fex/rec-fex-sort.c: New file. (test_rec_fex_sort): New function. (rec_fex_sort_nominal): New test. * torture/rec-fex/rec-fex-check.c: New file. (test_rec_fex_check): New funtion. (rec_fex_check_simple_nominal): New test. (rec_fex_check_simple_invalid): New test. (rec_fex_check_csv_nominal): New test. (rec_fex_check_csv_invalid): New test. (rec_fex_check_sub_nominal): New test. (rec_fex_check_sub_invalid): New test. * torture/rec-fex/rec-fex-destroy.c: New file. (test_rec_fex_destroy): New function. (rec_fex_destroy_nominal): New test. * src/rec-fex.c (rec_fex_parse_elem): Support for maximum part in subscripts. * torture/rec-fex/rec-fex-new.c: New file. (test_rec_fex_new): New function. (rec_fex_new_single): New test. (rec_fex_new_simple): New test. (rec_fex_new_subscripts): New test. * torture/rec-fex/tsuite-rec-fex.c: New file. (tsuite_rec_fex): New function. 2010-11-09 Jose E. Marchesi <jemarch@gnu.org> Lists of field names supported in type definitions. Closes task 12. * TESTS: Regenerated. * torture/rec-type/tsuite-rec-type.c: Reference rec-type-descr-fex instead of rec-type-descr-field-name. * torture/Makefile.am (REC_TYPE_TSUITE): Likewise. * torture/rec-type/rec-type-descr-fex.c: File renamed from 'rec-type-descr-field-name.c'. * src/rec-rset.c: Include rec-utils.h. * src/rec-types.c (REC_TYPE_DESCR_RE): Regexp modified to allow a comma-separated list of field names as part of the type descriptor. (rec_type_new): Skip the list of field names. (rec_type_descr_fex): Renamed from 'rec_type_descr_field_name'. 2010-11-08 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 19 created. 2010-11-08 Jose E. Marchesi <jemarch@gnu.org> * tasktool: Make 'test' to use -ne and -eq for integer comparisons. Problem reported by Ralf Wildenhues. 2010-11-07 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> * doc/recutils.texi (recset Invocation): Avoid double `='. * man/Makefile.am (man_MANS): Do not build man pages when associated programs are not present. * tasktool (tt_rec_check_utility): Fix redirection. 2010-11-07 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 16 created. 2010-11-07 Jose E. Marchesi <jemarch@gnu.org> Some improvements. * doc/recutils.texi (Record Descriptors): Documentation of the special fields fixed. 2010-11-07 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 15 created. 2010-11-07 Jose E. Marchesi <jemarch@gnu.org> * AUTHORS: Ralf Wildenhues added. 2010-11-07 Jose E. Marchesi <jemarch@termi> Tasktool operations. * TODO: Task 14 created. Task 22 created. Task 10 edited. Task 21 edited. Task 21 created. Task 9 edited. Task 8 edited. Task 20 created. Task 18 created. Task 17 created. 2010-11-07 Jose E. Marchesi <jemarch@gnu.org> recins: support replace mode. * tasktool (tt_supported_vcs): Use the replace-mode of recins. * doc/recutils.texi (recins Invocation): Replace mode documented. * utils/recins.c (COMMON_ARGS): RECORD_SELECTION_ARGS added. (recutl_print_help): Print the record selection --help output. (recins_parse_args): Manage record selection arguments. 2010-11-07 Jose E. Marchesi <jemarch@gnu.org> recins: support -r|--record. * doc/recutils.texi (recins Invocation): Document -r|--record. * src/rec-parser.c (rec_parse_record_str): New function. * utils/recins.c (COMMON_ARGS): RECORD_ARG added. (recins_parse_args): Manage the -r|--record option. 2010-11-07 Jose E. Marchesi <jemarch@gnu.org> tasktool: support filtering by assigned-to in list command. * tasktool: Support the --assigned-to option in 'list'. (tt_supported_vcs): Use generic names for the fields in the selection expression. (tt_help_edit): New variable. (tt_process_cmd_show): New function. 2010-11-06 Jose E. Marchesi <jemarch@gnu.org> Syntax check fixes. * src/rec-int.c: Useless cpp parens removed. * src/rec.c: Likewise. * .x-sc_prohibit_always_true_header_tests: New file. * cfg.mk (gnulib_dir): Set gnulib_dir. * ChangeLog: Empty lines removed. * .x-sc_trailing_blank: Likewise. More exceptions added. * po/POTFILES.in: Updated. * .x-sc_prohibit_S_IS_definition: New file. * .x-sc_obsolete_symbols: New file. 2010-11-06 Jose E. Marchesi <jemarch@gnu.org> * configure.ac: Generate etc/Makefile. * etc/Makefile.am: New file. 2010-11-06 Jose E. Marchesi <jemarch@gnu.org> * etc/FSD.rec: New file. * doc/recutils.texi: Document the --no-remote command line argument for recins, recfix and recset. * utils/recins.c: Support the --no-remote command line argument. * utils/recfix.c: Likewise. * utils/recset.c: Likewise. * src/rec-int.c (rec_int_check_rset): New function argument 'remote_descriptor_p'. (rec_int_check_rset): Call 'rec_int_merge_remote'. (rec_int_merge_remote): New function. Include regex.h. 2010-11-06 Jose E. Marchesi <jemarch@gnu.org> tasktool: support for ChangeLog annotations. * tasktool (tt_supported_vcs): New function. 2010-11-06 Jose E. Marchesi <jemarch@gnu.org> * configure.ac: Version changed from git to 1.0. * TODO: Some tasks added. 2010-11-05 Jose E. Marchesi <jemarch@gnu.org> * TODO: First serious version. * tasktool: Fixed many problems and 'delete' command implemented. 2010-11-03 Jose E. Marchesi <jemarch@gnu.org> recfix: little fixes. * utils/recfix.c (main): Use EXIT_SUCCESS and EXIT_FAILURE. (recfix_process_data): Fix wrong comparison. 2010-11-02 Jose E. Marchesi <jemarch@gnu.org> Generate manpages using help2man. * configure.ac: Generate man/Makefile. * man/Makefile.am: New file. * configure.ac: Search for help2man if not cross-compiling. 2010-11-01 Jose E. Marchesi <jemarch@gnu.org> Syntax check problems fixed. * src/rec-writer.c: Include config.h. * torture/runtests.c: Likewise. * tasktool: Use test ... && test ... instead of test ... -a ... (likewise for ||). * utils/csv2rec.c (parse_args): Use EXIT_* values. * utils/recutl.h: Likewise. * utils/recutl.c: Likewise. * utils/recset.c: Likewise. * utils/recsel.c: Likewise. * utils/recins.c: Likewise. * utils/recinf.c: Likewise. * utils/recfix.c: Likewise. * utils/recdel.c: Likewise. * utils/mdb2rec.c: Likewise. * src/rec-types.c: Likewise. * src/rec-sex.c: Likewise. 2010-11-01 Jose E. Marchesi <jemarch@gnu.org> Make distcheck to work. * doc/recutils.texi: Include version.texi. * doc/Makefile.am (TEXI_TEXINFOS): Added getdate.texi. * torture/rec-mset/rec-mset-count.c: Include rec-mset/elem-types.h. * torture/rec-mset/rec-mset-type-p.c: Likewise. * torture/rec-mset/rec-mset-register-type.c: Likewise. * torture/rec-mset/rec-mset-dup.c: Likewise. * torture/Makefile.am (AM_CPPFLAGS): -I$(top_srcdir)/torture added. 2010-10-29 Jose E. Marchesi <jemarch@gnu.org> Warnings removed in the codebase. * src/rec-sex.c: Include rec-utils.h. * src/rec-sex.l: Include rec-utils.h. * src/rec-types.c (rec_type_new): Missing cases REC_TYPE_DATE and REC_TYPE_EMAIL added. Include rec-utils.h for rec-atoi. (rec_type_parse_regexp): Unused variable 'b' removed. (rec_type_descr_field_name): Likewise. (rec_type_new): Likewise. (rec_type_parse_size): Unused variable 'ret' removed. (rec_type_parse_regexp_type): Unused variable 'escaping' removed. * src/rec-fex.c: Include rec-utils.h for rec-atoi. Unused static function rec_fex_parse_int removed. 2010-10-29 Jose E. Marchesi <jemarch@gnu.org> Coverage report generation. * build-aux/generate-coverage-report: New file, from libgnupdf. * configure.ac: Support the --enable-coverage switch. * src/Makefile.am (AM_CFLAGS): Add coverage gcc options if compiling the library with coverage support. 2010-10-29 Jose E. Marchesi <jemarch@gnu.org> rec-type-reg unit tests and bug fixes. * torture/rec-type-reg/rec-type-reg-get.c: New file. (test_rec_type_reg_get): New function. (rec_type_reg_get_nominal): New test. (rec_type_reg_get_nonexisting): New test. * torture/rec-type-reg/rec-type-reg-register.c: New file. (test_rec_type_reg_register): New function. (rec_type_reg_register_nominal): New test. * torture/rec-type-reg/rec-type-reg-destroy.c: New file. (test_rec_type_reg_destroy): New function. (rec_type_reg_destroy_nominal): New test. * torture/rec-type-reg/rec-type-reg-new.c: New file. (test_rec_type_reg_new): New function. (rec_type_reg_new_nominal): New test. * torture/rec-type-reg/tsuite-rec-type-reg.c: New file. (tsuite_rec_type_reg): New function. 2010-10-29 Jose E. Marchesi <jemarch@gnu.org> rec-type unit tests and bug fixes. * torture/rec-type/rec-type-check.c: New file. (test_rec_type_check): New function. (rec_type_check_int): New test. (rec_type_check_bool): New test. (rec_type_check_range): New test. (rec_type_check_real): New test. (rec_type_check_size): New test. (rec_type_check_line): New test. (rec_type_check_regexp): New test. (rec_type_check_date): New test. (rec_type_check_enum): New test. (rec_type_check_field): New test. (rec_type_check_email): New test. * torture/rec-type/rec-type-equal-p.c: New file. (test_rec_type_equal_p): New function. (rec_type_equal_p_nominal): New test. * torture/rec-type/rec-type-kind-str.c: New file. (test_rec_type_kind_str): New function. (rec_type_kind_str_nominal): New test. * torture/rec-type/rec-type-kind.c: New file. (test_rec_type_kind): New function. (rec_type_kind_nominal): New test. * torture/rec-type/rec-type-descr-field-name.c: New file. (test_rec_type_descr_field_name): New function. (rec_type_descr_field_name_nominal): New test. (rec_type_descr_field_name_invalid): New test. * torture/rec-type/rec-type-descr-p.c: New file. (test_rec_type_descr_p): New function. (rec_type_descr_p_nominal): New test. (rec_type_descr_p_invalid): New test. * torture/rec-type/rec-type-destroy.c: New file. (test_rec_type_destroy): New function. (rec_type_destroy_nominal): New test. * torture/rec-type/rec-type-new.c: New file. (test_rec_type_new): New function. (rec_type_new_nominal): New test. (rec_type_new_invalid): New test. * torture/rec-type/tsuite-rec-type.c: New file. (tsuite_rec_type): New function. 2010-10-29 Jose E. Marchesi <jemarch@gnu.org> rec-field-name unit tests and bug fixes. * TESTS: Regenerated. * torture/rec-field-name/rec-field-name-part-normalise.c: New file. (test_rec_field_name_part_normalise): New function. (rec_field_name_part_normalise_nominal): New test. * torture/rec-field-name/rec-field-name-str-p.c: New file. (test_rec_field_name_str_p): New function. (rec_field_name_str_p_nominal): New test. * torture/rec-field-name/rec-field-name-part-str-p.c: New file. (test_rec_field_name_part_str_p): New function. (rec_field_name_part_str_p_nominal): New test. * torture/rec-field-name/rec-field-name-get.c: New file. (test_rec_field_name_get): New function. (rec_field_name_get_nominal): New test. * torture/rec-field-name/rec-field-name-set.c: New file. (test_rec_field_name_set): New function. (rec_field_name_set_nominal): New test. * torture/rec-field-name/rec-field-name-size.c: New file. (test_rec_field_name_size): New function. (rec_field_name_size_empty): New test. (rec_field_name_size_nonempty): New test. * torture/rec-field-name/rec-field-name-ref-p.c: New file. (test_rec_field_name_ref_p): New function. (rec_field_name_ref_p_empty): New test. (rec_field_naem_ref_p_nonempty): New test. * torture/rec-field-name/rec-field-name-equal-p.c: New file. (test_rec_field_name_equal_p): New function. (rec_field_name_equal_p_empty): New test. (rec_field_name_equal_p_nonempty): New test. * torture/rec-field-name/rec-field-name-eql-p.c: New file. (test_rec_field_name_eql_p): New function. (rec_field_name_eql_p_empty): New test. (rec_field_naem_eql_p_nonempty): New test. * torture/rec-field-name/rec-field-name-dup.c: New file. (test_rec_field_name_dup): New function. (rec_field_name_dup_empty): New test. (rec_field_name_dup_nominal): New test. * torture/rec-field-name/rec-field-name-destroy.c: New file. (test_rec_field_name_destroy): New function. (rec_field_name_destroy_nominal): New test. * torture/rec-field-name/tsuite-rec-field-name.c: New file. * torture/rec-field-name/rec-field-name-new.c: New file. (test_rec_field_name_new): New function. (rec_field_name_new_nominal): New test. 2010-10-29 Jose E. Marchesi <jemarch@gnu.org> rec-comment unit tests and bug fixes. * TESTS: regenerated. * src/rec-comment.c (rec_comment_new): Check for a NULL argument. * torture/rec-comment/rec-comment/equal-p.c: New file. (test_rec_comment_equal_p): New function. (rec_comment_equal_p_nominal): New test. * torture/rec-comment/rec-comment-set-text.c: New file. (test_rec_comment_set_text): New function. (rec_comment_set_text_nominal): New test. * torture/rec-comment/rec-commment-text.c: New file. (test_rec_comment_text): New function. (rec_comment_text_nominal): New test. (rec_comment_text_empty): New test. * torture/rec-comment/rec-comment-dup.c: New file. (test_rec_comment_dup): New function. (rec_comment_dup_nominal): New test. * torture/rec-comment/rec-comment-new.c: New file. (test_rec_comment_new): New function. (rec_comment_new_nominal): New test. (rec_comment_new_null): New test. * torture/rec-comment/rec-comment-destroy.c: New file. (test_rec_comment_destroy): New function. (rec_comment_destroy_nominal): New test. * torture/runtests.c (main): rec-comment test suite added. * torture/Makefile.am: rec-comment files added. * torture/rec-comment/tsuite-rec-comment.c: New file. (tsuite_rec_comment): New function. 2010-10-28 Jose E. Marchesi <jemarch@gnu.org> Regenerate TESTS. * TESTS: Regenerated. 2010-10-28 Jose E. Marchesi <jemarch@gnu.org> Unit tests for rec_mset_get. * torture/rec-mset/rec-mset-get.c: New file (test_rec_mset_get): New function. (rec_mset_get_empty): New test. (rec_mset_get_existing): New test. (rec_mset_get_any): New test. (rec_mset_get_invalid): New test. 2010-10-28 Jose E. Marchesi <jemarch@gnu.org> Unit tests for rec_mset_count. * torture/rec-mset/rec-mset-count.c: New file. (test_rec_mset_count): New function. (rec_mset_count_empty): New test. (rec_mset_count_existing): New test. (rec_mset_count_nonexisting): New test. 2010-10-28 Jose E. Marchesi <jemarch@gnu.org> Unit tests for rec_mset_register_type. * torture/rec-mset/rec-mset-register-type.c: New file. (test_rec_mset_register_type): New function. (rec_mset_register_type_nominal): New test. 2010-10-28 Jose E. Marchesi <jemarch@gnu.org> Unit tests for rec_mset_type_p. * torture/rec-mset/rec-mset-type-p.c: New file. (test_rec_mset_type_p): New function. (rec_mset_type_p_any): New test. (rec_mset_type_p_existing): New test. (rec_mset_type_p_nonexisting): New test. * torture/rec-mset/elem-types.h: New file. 2010-10-28 Jose E. Marchesi <jemarch@gnu.org> Unit tests for rec_mset_dup, and a bug fixed. * src/rec-mset.c (rec_mset_dup): Avoid duplicating the counter of nodes of the element types. * torture/Makefile.am (REC_MSET_TSUITE): rec-mset-dup.c added. * torture/rec-mset/rec-mset-dup.c: New file. (test_rec_mset_dup): New function. (rec_mset_dup_empty): New test. 2010-10-28 Jose E. Marchesi <jemarch@gnu.org> rec_mset test suite. * torture/runtests.c: rec_mset test suite added. * torture/Makefile.am: Include files from the rec_mset test suite. * torture/rec-mset/rec-mset-new.c: New file. (rec_mset_new_and_destroy): New unit test. * torture/rec-mset/tsuite-rec-mset.c: New file. (tsuite_rec_mset): New function. 2010-10-28 Jose E. Marchesi <jemarch@gnu.org> * tasktool (tt_db_template_header): New variable. (tt_db_template_issue): New variable. (tt_db_template): Use tt_db_template_header and tt_db_template_issue. (tt_db_wish): New variable. (tt_db_wish_id): New variable. (tt_db_wish_summary): New variable. (tt_db_wish_description): New variable. 2010-10-28 Jose E. Marchesi <jemarch@gnu.org> Documentation improvements. * utils/recset.c (recutl_print_help): Don't duplicate the --case-insensitive option in the output of --help. * utils/recinf.c (recutl_print_help): Print a newline before the examples in the output of --help. * doc/recutils.texi: Documentation for recdel, recins, recset and recfix added to the reference manual. 2010-10-25 Jose E. Marchesi <jemarch@gnu.org> User manual work. * doc/recutils.texi (Fields and Records): Wording improvements. (Escalar types): Completed. (String types): Completed. (Time related types): Completed. (recinf Invocation): Document -S|--print-sexps. * doc/recutils.texi (Top): Improve the menu layout. 2010-10-24 Jose E. Marchesi <jemarch@gnu.org> i18n with gettext. * m4/gettext.m4: Upgrade to gettext-0.18.1. * m4/iconv.m4: Upgrade to gettext-0.18.1. * m4/lib-ld.m4: Upgrade to gettext-0.18.1. * m4/lib-link.m4: Upgrade to gettext-0.18.1. * m4/progtest.m4: Upgrade to gettext-0.18.1. * configure.ac (AM_GNU_GETTEXT_VERSION): Bump to 0.18.1. * src/Makefile.am (librec_la_SOURCES): Add rec.c. * src/rec-fex.c: Internationalize strings with gettext. * src/rec-types.c: Likewise. * src/rec-parser.c: Likewise. * src/rec-int.c: Likewise. * src/rec-field-name.c: Likewise. * utils/recutl.c: Likewise. * utils/recset.c: Likewise. * utils/recsel.c: Likewise. * utils/recins.c: Likewise. * utils/recinf.c: Likewise. * utils/recdel.c: Likewise. * utils/mdb2rec.c: Likewise. * utils/csv2rec.c: Likewise. * Makefile.am (SUBDIRS): Add po. 2010-09-23 Jose E. Marchesi <jemarch@gnu.org> * configure.ac: Invoke AB_INIT. 2010-09-19 Jose E. Marchesi <jemarch@gnu.org> Simple fix in --help. * utils/recutl.h (COMMON_ARGS_DOC): Don't mention recsel in the description of the --version option. 2010-09-14 Jose E. Marchesi <jemarch@gnu.org> rec-mode: make C-a to do the right thing. * lisp/rec-mode.el (rec-mode-map): Bind C-a to rec-cmd-beginning-of-line. (rec-mode-edit-map): Likewise. (rec-cmd-beginning-of-line): New function. 2010-09-09 Jose E. Marchesi <jemarch@gnu.org> Support for localization on lisp output. * src/rec-record.c: New fiels 'char_location' and 'char_location_str' in the 'rec_record_s' struct. * src/rec-parser.c (rec_parse_field): Set the char location of fields. (rec_parser_ungetc): Decrease parser->character. * src/rec-field.c: New functions 'rec_field_char_location', 'rec_field_set_char_location' and 'rec_field_char_location_str'. * src/rec-parser.c: Use size_t instead of int for the 'line' field of the rec_parser_s structure. (rec_parser_getc): Update parser->character as well. (rec_parser_new): Initialize parser->character to 0. 2010-09-09 Jose E. Marchesi <jemarch@gnu.org> Support for lisp output. * utils/recinf.c: Support the -S option. * utils/recsel.c: Likewise. * src/rec-writer.c (rec_write_record): New 'mode' argument. (rec_write_field_name): Likewise. (rec_write_field): Likewise. (rec_write_field_str): Likewise. * src/rec.h: New function. (rec_writer_mode_t): New data type. 2010-09-02 Jose E. Marchesi <jemarch@gnu.org> Little doc improvements. * doc/recutils.texi: Little doc improvements. 2010-08-24 Jose E. Marchesi <jemarch@gnu.org> fixes in the parsing of types. * src/rec-int.c (rec_int_check_descriptor): Localize the error in the concrete field. * src/rec-types.c: Parsing routines rewritten. 2010-08-23 Jose E. Marchesi <jemarch@gnu.org> * src/rec-types.c (rec_type_skip_blanks): New function. (rec_type_descr_field_name): Use rec_type_skip_blanks. (rec_type_new): Likewise. (rec_type_parse_int): New function. 2010-08-23 Jose E. Marchesi <jemarch@gnu.org> rec-sex: support for real values in some operators. * src/rec-sex.c (rec_sex_op_real_p): New function. (ATOF_VAL): New macro. 2010-08-23 Jose E. Marchesi <jemarch@gnu.org> utilities: use xmalloc and xstrdup. * utils/csv2rec.c: Use xmalloc instead of malloc. Use xstrdup instead of strdup. Include xalloc.h. * utils/recutl.h: Likewise. * utils/recutl.c: Likewise. * utils/recset.c: Likewise. * utils/recins.c: Likewise. * utils/mdb2rec.c: Likewise. 2010-08-23 Jose E. Marchesi <jemarch@gnu.org> mdb2rec: documentation and management of money fields. * utils/mdb2rec.c (process_table): Declare MONEY fields as real values. * doc/recutils.texi (mdb2rec Examples): Written. 2010-08-23 Jose E. Marchesi <jemarch@gnu.org> rec-types: support for the 'field' type. * src/rec-types.c (REC_TYPE_FIELD_NAME): Defined. (REC_TYPE_FIELD_VALUE_RE): Defined in terms of REC_FNAME_RE. (REC_TYPE_NAME_RE): REC_TYPE_FIELD_NAME added. (REC_TYPE_FIELD_DESCR_RE): Defined. (REC_TYPE_DESCR_RE): REC_TYPE_FIELD_DESCR_RE added. (rec_type_kind_str): Added case for REC_TYPE_FIELD. (rec_type_check): Likewise. (rec_type_parse_type_kind): Likewise. (rec_type_check_field): New function. * src/rec.h (REC_FNAME_RE): Do not include anchors in regexp. 2010-08-23 Jose E. Marchesi <jemarch@gnu.com> mdb2rec: specification of the table in the command line and the list-tables option. * doc/recutils.texi (mdb2rec Invocation): Document the --list-tables command line option. * utils/mdb2rec.c (process_mdb): Print the names of the tables, one per line, if mdb2rec_list_tables was specified. * doc/recutils.texi (mdb2rec Invocation): Document the usage of TABLE in the command line. * utils/mdb2rec.c: New global variable 'mdb2rec_mdb_table'. (parse_args): Set mdb2rec_mdb_table. (process_mdb): Process the requested table only if mdb2rec_mdb_table is initialized. 2010-08-22 Jose E. Marchesi <jemarch@gnu.org> mdb2rec: emit field types for VARCHAR columns. * src/rec-types.c (rec_type_new): Finish the number[] string with a null value. * utils/mdb2rec.c (process_table): Process case when col_size > 0. 2010-08-22 Jose E. Marchesi <jemarch@gnu.org> rec-int: warn on colling types only if the types are different. * src/rec-int.c (rec_int_check_field_type): Emit warning on colliding types only if the types are not equal. * src/rec-types.c (rec_type_equal_p): New function. 2010-08-22 Jose E. Marchesi <jemarch@gnu.org> mdb2rec: use compound field names to reflect relationships between columns in the mdb tables. * utils/mdb2rec.c (get_field_name): New function. (process_table): Use 'get_field_name'. 2010-08-22 Jose E. Marchesi <jemarch@gnu.org> manual: texinfo fixes. * doc/recutils.texi: mdb2rec is a chapter. Fix mdb2rec menu. 2010-08-22 Jose E. Marchesi <jemarch@gnu.org> build: advertise third-party dependencies. * README-dev: Add a note on the dependencies on third party products. 2010-08-22 Jose E. Marchesi <jemarch@gnu.org> Validation of record type names and minor fixes. * utils/mdb2rec.c (process_table): Use 'rec_field_name_part_normalise'. * src/rec-field-name.c (rec_field_name_part_normalise): New function. * utils/mdb2rec.c (process_mdb): Configure libmdb to dump dates in ISO 8601 format. * src/rec-int.c (rec_int_check_descriptor): Check for the validity of the record set type. * utils/recutl.h (RECORD_SELECTION_ARGS_CASES): Check for the validity of the record types passed using -t. * src/rec.h: New function 'rec_field_name_str_p'. New function 'rec_field_name_part_str_p'. (REC_FNAME_PART_RE): Defined. (REC_FNAME_RE): Defined. * src/rec-field-name.c (rec_field_name_str_p): New function. (rec_field_name_part_str_p): New function. * doc/recutils.texi (Record Descriptors): Clarify that the record types have the same format restrictions that field names. 2010-08-22 Jose E. Marchesi <jemarch@gnu.org> build: check for glib as a dependency to build mdb2rec. * configure.ac: Check for glib. * utils/mdb2rec.c: Include glib.h. 2010-08-22 Jose E. Marchesi <jemarch@gnu.org> mdb2rec: normalize field names and new option to keep empty fields in the rec output. * doc/recutils.texi (mdb2rec Invocation): Document '-e'. * utils/mdb2rec.c (parse_args): Manage '-e'. (process_table): Normalize field names. 2010-08-21 Jose E. Marchesi <jemarch@gnu.org> utils: new util mdb2rec. * src/rec-writer.c (rec_write_rset): Manage special case: empty record sets with a record descriptor. * src/rec.h: New function 'rec_field_new_str'. * src/rec-field.c (rec_field_new_str): Idem. 2010-08-20 Jose E. Marchesi <jemarch@gnu.org> * configure.ac: Search for libmdbtools and define MDBLIBS. * utils/Makefile.am: Build mdb2rec. * utils/mdb2rec.c: New file. 2010-08-20 Jose E. Marchesi <jemarch@gnu.org> csv2rec: several minor fixes. * utils/csv2rec.c (main): Make sure a rec database was created before to attempt to write it. * configure.ac: Emit a warning if libcsv is not found, noticing the user that csv2rec won't build. 2010-08-20 Jose E. Marchesi <jemarch@gnu.org> Fixing of memory errors. * src/rec-sex.c (rec_sex_eval_node): Free the memory used by the compiled regexps. * utils/recfix.c (main): Free the memory used by the rec database. * utils/recsel.c (main): Likewise. * utils/recsel.c (recsel_process_data): Free the memory used by the rec writer. * src/rec-parser.c (rec_parser_buf_adjust): Realloc to adjust the memory used by the buffer. * src/rec-sex.l (rec_sex_lex_extract_name): Avoid an invalid write after the res[] buffer. 2010-08-20 Jose E. Marchesi <jemarch@gnu.org> utils: new util csv2rec. * doc/recutils.texi (csv2rec): New chapter. * configure.ac: Check for libcsv and define the LIBCSV automake conditional accondingly. * utils/Makefile.am (bin_PROGRAMS): csv2rec added. (csv2rec_SOURCES): New variable. (csv2rec_LDADD): New variable. * utils/csv2rec.c: New file. 2010-08-20 Jose E. Marchesi <jemarch@gnu.org> build: fix autogen.sh. * autogen.sh: Call libtoolize. Invoke automake with --add-missing. 2010-08-09 Jose E. Marchesi <jemarch@gnu.org> Little script to get cyclomatic metrics from pmccabe. * build-aux/pmccabe2rec: New file. 2010-08-08 Jose E. Marchesi <jemarch@gnu.org> Fix source in parse error messages in recinf. * utils/recinf.c (print_info_file): Specify the file name in parse errors instead of 'stdin'. 2010-08-08 Jose E. Marchesi <jemarch@gnu.org> Generate information about tests in rec format and store it in TESTS. * README-dev: Added a note on updating the TESTS file when a test is added to the test suite. * TESTS (Test): New file, generated ith 'get-test-data'. * build-aux/get-test-data: New file. * torture/rec-record/rec-record-size.c: rec_record_size_001 renamed to rec_record_size_empty. rec_record_size_002 renamed to rec_record_size_nonempty. (test_rec_record_size): Call to rec_record_size_empty and rec_record_size_nonempty. * torture/rec-record/rec-record-remove-field.c: rec_record_remove_field_001 renamed to rec_record_remove_field_existing. (test_rec_record_remove_field): Call to rec_record_remove_field_existing. * torture/rec-record/rec-record-new.c: rec_record_new_001 renamed to rec_record_new_and_destroy. * torture/rec-record/rec-record-insert-field.c: rec_record_insert_field_001 renamed to rec_record_insert_field_empty. rec_record_insert_field_002 renamed to rec_record_insert_field_nonempty. rec_record_insert_field_003 renamed to rec_record_insert_field_duplicated. (test_rec_record_insert_field): Call rec_record_insert_field_empty, rec_record_insert_field_nonempty and rec_record_insert_field_duplicated. * torture/rec-record/rec-record-field-p.c: rec_record_field_p_001 renamed to rec_record_field_existing. rec_record_field_p_002 renamed to rec_record_field_nonexisting. * torture/rec-field/rec-field-value.c: rec_field_value_001 renamed to rec_field_value_empty. rec_field_value_002 renamed to rec_field_value_nonempty. (test_rec_field_value): Call to rec_field_value_empty and rec_field_value_nonempty. * torture/rec-field/rec-field-set-value.c: rec_field_set_value_001 renamed to rec_field_set_value_empty. rec_field_set_value_002 renamed to rec_field_set_value_nonempty. (test_rec_field_set_value): Call to rec_field_set_value_empty and rec_field_set_value_nonempty. * torture/rec-field/rec-field-set-name.c: rec_field_set_name_001 renamed to rec_field_set_name_empty. rec_field_set_name_002 renamed to rec_field_set_name_nonempty. (test_rec_field_set_name): Call to rec_field_set_name_empty and rec_field_set_name_nonempty. * torture/rec-field/rec-field-name.c: rec_field_name_001 renamed to rec_field_name_empty. rec_field_name_002 renamed to rec_field_name_nonempty. (test_rec_field_name): Call to 'rec_field_name_empty' and 'rec_field_name_nonempty'. Comments reformatted to contain rec data. * torture/rec-field/rec-field-dup.c: rec_field_dup_001 renamed to rec_field_dup_empty. rec_field_dup_002 renamed to rec_field_dup_nonempty. (test_rec_field_dup): Call to 'rec_field_dup_empty' and 'rec_field_dup_nonempty'. Comments reformated to contain rec data. 2010-08-07 Jose E. Marchesi <jemarch@gnu.org> Import the gnulib gettext module. * 'gettext' gnulib module imported. 2010-08-06 Jose E. Marchesi <jemarch@gnu.org> Minor fixes in documentation. * src/rec-int.c (rec_int_check_field_type): Out to date comment removed. * doc/recutils.texi (Field Types): New chapter. (Escalar types): New section. (String types): New section. (Enumerated types): New section. (Time related types): New section. (Selection Expressions): New section. 2010-08-05 Jose E. Marchesi <jemarch@gnu.org> Assure proper exit values when redirecting output and some common facilities in recutl.c * utils/recset.c (recset_parse_args): Use 'recutl_fatal' and 'recutl_error'. (main): Use 'recutl_init'. * utils/recins.c (recins_insert_record): Use 'recutl_error'. (main): Use 'recutl_init'. * utils/recinf.c (main): Use 'recutl_init'. * utils/recfix.c (main): Use 'recutl_init'. * utils/recdel.c (recdel_delete_records): Use 'recutl_fatal'. (recdel_delete_records): Likewise. (recdel_parse_args): Likewise. (main): Use 'recutl_init'. * utils/recsel.c (main): Use 'recutl_init'. * utils/recutl.c (recutl_error): New function. * utils/recsel.c (recsel_parse_args): Use 'recutl_fatal'. (recsel_parse_args): Likewise. (recsel_process_data): Use 'recutl_error'. * utils/recutl.c: Include 'closeout.h'. (recutl_init): New function. (recutl_init): Initialize the global variable 'program_name' with 'util_name'. (recutl_init): Install the 'close_stdout' handler to be executed upon exit. (recutl_fini): New function. (recutl_fatal): New function. Include stdarg. * Module 'closeout' imported from gnulib. 2010-08-05 Jose E. Marchesi <jemarch@gnu.org> * README-dev: Imported and adapted from GNU hello. * NEWS: Likewise. * README: Rephrased to follow the GNU hello style. * configure.ac: Invoke AC_PROG_YACC. * autogen.sh: Imported and adapted from GNU hello. 2010-08-02 Jose E. Marchesi <jemarch@gnu.org> lib+utils: check the values returned by malloc. * src/rec-field.c (rec_field_set_location): Check for the return value of 'malloc'. * src/rec-parser.c (rec_parser_perror): Likewise. * src/rec-parser.c (rec_parse_field_name_str): Likewise. * src/rec-record.c (rec_record_set_location): Likewise. * utils/recins.c (recins_parse_args): Likewise. * utils/recutl.c (recutl_write_db_to_file): Likewise. * src/rec-fex.c (rec_fex_check): Emit error message only if there is enough memory to build the message. (rec_fex_parse_str_simple): Check for the return value of 'malloc'. (rec_fex_parse_str_subscripts): Likewise. (rec_fex_parse_elem): Likewise. 2010-08-01 Jose E. Marchesi <jemarch@gnu.org> recutl: avoid printing spurious newline characters when -P or -R is used. * utils/recutl.c (recutl_eval_field_expression): New variable 'written_field'. (recutl_eval_field_expression): Add a newline to a sequence of field values only if some field was actually written. rec-record: Tiny improvement in an algorithm. * src/rec-record.c (rec_record_get_field_by_name): Don't return from the middle of the function. Use a variable and break instead. recsel: allow dashes in field names when checking the field expressions. * src/rec-fex.c (rec_fex_check): Allow dashes '-' in field names in field expressions. recsel: avoid a segmentation fault while printing record descriptors. * utils/recsel.c (recsel_process_data): Test for NULL before printing the record descriptor of a record set. Reported by Kai via savannah. 2010-07-31 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> Fix distcheck: linking tests in torture/. * torture/Makefile.am: Simplify. Use relative path to librec.la so dependencies are tracked correctly and distcheck works. 2010-07-31 Jose E. Marchesi <jemarch@gnu.org> Information for the Free Software Directory added in FSD. * FSD (Description): New file. Make git to ignore some more generated files. * .gitignore: Ignore doc/recutils.aux, doc/recutils.cp, doc/recutils.cps, doc/recutils.fn, doc/recutils.fns, doc/recutils.ky, doc/recutils.log, doc/recutils.pg, doc/recutils.toc, doc/recutils.tp, doc/recutils.vr and doc/recutils.vrs. Ignore lib/alloca.h, lib/c++defs.h, lib/stdlib.h, lib/string.h, lib/sys, lib/time.h, lib/warn-on-use.h, lib/wchar.h. Ignore torture/test 2010-07-30 Ralf Wildenhues <Ralf.Wildenhues@gmx.de> Simplify makefile rules. * utils/Makefile.am: Simplify. * src/Makefile.am: Likewise. Typos and formatting nits. * configure.ac: Fix typo. * doc/recutils.texi: Fix typo, add some @noindents. 2010-07-30 Jose E. Marchesi <jemarch@gnu.org> * gendocs gnulib module imported. 2010-07-25 Jose E. Marchesi <jemarch@gnu.org> Manual: misc improvements. * doc/recutils.texi: Misc improvements. 2010-07-25 Jose E. Marchesi <jemarch@gnu.org> GHM 2010 slides. * doc/recutils.ept: New file. 2010-07-23 Jose E. Marchesi <jemarch@gnu.org> Parametrize the name of the fields in the issues. * tasktool: New variables containing the names of the issue fields: tt_db_field_id, tt_db_field_summary, tt_db_field_type, tt_db_field_status, tt_db_field_originator, tt_db_field_assignee, tt_db_field_assigned, tt_db_field_component, tt_db_field_created, tt_db_field_note, tt_db_field_description. (tt_db_template): Use the variables described above. (tt_version): Likewise. (tt_version): Likewise. (tt_version): Likewise. (tt_supported_vcs): Likewise. (tt_supported_vcs): Likewise. 2010-07-23 Jose E. Marchesi <jemarch@gnu.org> Avoid build dependency with bison. * lib/getdate.c: New file. * build-aux/.gitignore: Ignore ylwrap. 2010-07-23 Jose E. Marchesi <jemarch@gnu.org> Integrate getdate documentation in the manual. * doc/recutils.texi (Top): Entry for the "Date input formats" chapter added. Include 'getdate.texi'. FSF copyright added in the manual. 2010-07-23 Jose E. Marchesi <jemarch@gnu.org> Implementation of the 'date' field type. * tasktool (tt_db_template): Declare Date as a field of type 'date'. * src/Makefile.am (librec_la_LIBADD): LIB_CLOCK_GETTIME added to find the definition of 'clock_gettime'. * src/rec-types.c (rec_type_check_date): Implemented using 'get_date'. Include getdate.h. 2010-07-23 Jose E. Marchesi <jemarch@gnu.org> Gnulib work. * Gnulib updated. * Module 'getdate' imported. 2010-07-18 Jose E. Marchesi <jemarch@gnu.org> Localization of fields and better error reporting. * src/rec-int.c (rec_int_check_record_types): Improve error localization. * utils/recutl.c (recutl_parse_db_from_file): Report parse errors. * src/rec-int.c (rec_int_check_field_type): Use localization information in the warning. * src/rec-parser.c (rec_parse_field): Annotate the fields with their location in the source file. * src/rec-field.c (rec_field_destroy): Free memory occupied by the location properties upon field destruction. * src/rec.h: New functions 'rec_field_source', 'rec_field_set_source', 'rec_field_location', 'rec_field_set_location' and 'rec_field_location_str'. * src/rec-field.c: Implementation of the functions listed above. 2010-07-18 Jose E. Marchesi <jemarch@gnu.org> * src/rec-int.c: Copyright notification added. 2010-07-15 Jose E. Marchesi <jemarch@gnu.org> * src/rec-field-name.c (rec_field_name_ref_p): New function. * src/rec-int.c (rec_int_check_rset): Pass 'db' to 'rec_rset_elem_record'. * utils/recins.c (recins_insert_record): Pass the database containing the rset containing the record to 'rec_int_check_rset'. * utils/recset.c (recset_process_actions): Likewise. * src/rec.h: 'rec_int_check_rset' gets a parameter (optional using NULL) 'db'. Likewise for 'rec_int_check_record'. Likewise for 'rec_int_check_field_type'. * src/rec-int.c (rec_int_check_rset): Likewise. 2010-07-15 Jose E. Marchesi <jemarch@gnu.org> New function re_int_check_db to check the integrity of a database. * utils/recfix.c (recfix_process_data): Use 'rec_int_check_db'. * src/rec-int.h: New function 'rec_int_check_db'. * src/rec-int.c (rec_int_check_db): New function. 2010-07-15 Jose E. Marchesi <jemarch@gnu.org> Relocate data integrity related code to rec-int.c. * src/rec-int.c (rec_int_check_field_type): Use 'rec_rset_get_type_reg' to get the type registry of records sets instead of accessing the data structure. * src/rec.h: New function 'rec_rset_get_type_reg'. * src/rec-rset.c (rec_rset_get_type_reg): New function. * src/Makefile.am (librec_la_SOURCES): 'rec-int.c' added. * utils/recfix.c (recfix_process_data): Use 'rec_int_check_rset' instead of 'rec_rset_check'. * utils/recins.c (recins_insert_record): Likewise. * utils/recset.c (recset_process_actions): Likewise. * src/rec-int.c: New file. * src/rec.h: 'rec_rset_check' renamed to 'rec_int_check_rset'. 'rec_rset_check_record' renamed to 'rec_int_check_record'. 'rec_rset_check_field_type' renamed to 'rec_int_check_field_type'. 2010-07-14 Jose E. Marchesi <jemarch@gnu.com> Change -v|--verbose in recinf for -d|--descriptor. * utils/recinf.c (COMMON_ARGS): VERBOSE_ARG renamed to DESCRIPTOR_ARG. (print_info_file): Process the -d|--descriptor command line argument instead of -v|--verbose. 2010-07-14 Jose E. Marchesi <jemarch@gnu.org> Support for the --type option in recinf. * utils/recinf.c (COMMON_ARGS): New argument 'TYPE_ARG'. (GNU_longOptions): New argument '--type'. (recutl_help_msg): Doc for the new argument 'type'. (recinf_type): New global variable. (print_info_file): If a type was specified at command line, skip records not having that type. 2010-07-14 Jose E. Marchesi <jemarch@gnu.org> Keep the descriptor relative position when inserting records in an empty record set. * utils/recins.c (recins_insert_record): Take into account the descriptor relative position in the record set when inserting a record into an empty rset. 2010-07-14 Jose E. Marchesi <jemarch@gnu.org> Little fixes in tasktool. * tasktool (tt_db_show_task): Use a selection expression implying that Id is an integer, not a string. (tt_supported_vcs): Typo fixed. * tasktool (tt_db_task_p): Likewise. 2010-07-14 Jose E. Marchesi <jemarch@gnu.org> Fix a regression in the definition of the REC_TYPE_DESCR_RE regexp. * src/rec-types.c (REC_TYPE_DESCR_RE): Regexp fixed. 2010-07-13 Jose E. Marchesi <jemarch@gnu.org> Support for the type 'field' removed. * src/rec-types.c: Data types, constants and functions removed for the 'field' type. 2010-07-13 Jose E. Marchesi <jemarch@gnu.org> Bug preventing empty fields without a beginning space fixed. * src/rec-parser.c (rec_parse_field_name): If a newline is found terminating a field name then push it back to the input stream, so it will be part of the field value. 2010-07-13 Jose E. Marchesi <jemarch@gnu.org> Keep information about the position of the record descriptor in a record set. * src/rec-rset.c (rec_rset_set_descriptor_pos): New function. (rec_rset_descriptor_pos): New function. (rec_rset_new): Initialize new->descriptor_pos to 0. (struct rec_rset_s): New field descriptor_pos. * src/rec.h: Prototypes for 'rec_rset_descriptor_pos' and 'rec_rset_set_descriptor_pos'. * src/rec-parser.c (rec_parse_rset): New local variable to store the number of comments added to the record set. In the special case where some comments are preceding the first record descriptor in the file, store the relative position of the descriptor in the record set using rec_rset_descriptor_pos. * src/rec-writer.c (rec_write_rset): Write the descriptor in its relative position into the record set. 2010-06-19 Jose E. Marchesi <jemarch@gnu.org> * utils/recins.c: Help string improved. 2010-04-30 Jose E. Marchesi <jemarch@gnu.org> * lisp/rec-mode.el (rec-count): New implementation based on 'recsel'. 2010-04-28 Jose E. Marchesi <jemarch@gnu.org> * .gitignore: Ignore /utils/recfix. 2010-04-22 Jose E. Marchesi <jemarch@gnu.org> * utils/recset.c (recset_parse_args): Stop the program with an error code if an invalid option is specified in the command line. (recset_process_actions): SET action implemented. 2010-04-21 Jose E. Marchesi <jemarch@gnu.org> * utils/recset.c: Help string completed with record selection options, fields selection options and actions. * doc/recutils.texi (Record Descriptors): Documentation for the record descriptor field '%order'. 2010-04-08 Jose E. Marchesi <jemarch@gnu.org> * src/rec-mset.c: Distribution terms added. * src/rec-mset.h: Likewise. 2010-04-07 Jose E. Marchesi <jemarch@gnu.org> * src/rec-mset.c (rec_mset_elem_next): Added the MSET parameter. Return the first element of the given type if ELEM is NULL. 2010-04-01 Jose E. Marchesi <jemarch@gnu.org> * .gitignore: Ignore backup files. 2010-01-11 Jose E. Marchesi <jemarch@gnu.org> * src/rec-parser.c (rec_parse_field_name_str): New function. 2010-01-09 Jose E. Marchesi <jemarch@gnu.org> * src/Makefile.am (librec_la_SOURCES): rec-sex.l added to the list. * src/rec-sex.y: New file. * src/rec-sex.l: New file. 2009-12-28 Jose E. Marchesi <jemarch@gnu.org> * utils/recinf.h (HELP_ARG): New file. * utils/recinf.c: New file. * utils/Makefile.am (recinf_LDFLAGS): New file. 2009-12-23 Jose E. Marchesi <jemarch@gnu.org> * lisp/rec-mode.el: New file. (rec-field-trim-value): New function. (rec-cmd-trim-field-value): New function. 2009-11-30 Jose E. Marchesi <jemarch@gnu.org> * lisp/rec-mode.el (rec-beginning-of-record-pos): Don't signal an error if the buffer is empty. 2009-10-02 Jose E. Marchesi <jemarch@gnu.org> * lisp/rec-mode.el: New file. 2009-10-01 Jose E. Marchesi <jemarch@gnu.org> * src/rec-record.c (rec_record_new): Allow duplicates. 2009-09-03 Jose E. Marchesi <jemarch@gnu.org> * src/grec.h: Comments clarified. 2009-07-23 Jose E. Marchesi <jemarch@gnu.org> * doc/fdl.texi: New file. * doc/gnurec.texi: New file. 2009-07-13 Jose E. Marchesi <jemarch@gnu.org> * torture/runtests.c (main): Use CK_ENV instead of CK_VERBOSE in srunner_run_all. * Begin of the change log. Copyright 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. Marchesi Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/INSTALL��������������������������������������������������������������������������������0000644�0000000�0000000�00000036626�14226564226�011163� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Installation Instructions ************************* Copyright (C) 1994-1996, 1999-2002, 2004-2017, 2020-2021 Free Software Foundation, Inc. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. This file is offered as-is, without warranty of any kind. Basic Installation ================== Briefly, the shell command './configure && make && make install' should configure, build, and install this package. The following more-detailed instructions are generic; see the 'README' file for instructions specific to this package. Some packages provide this 'INSTALL' file but do not implement all of the features documented below. The lack of an optional feature in a given package is not necessarily a bug. More recommendations for GNU packages can be found in *note Makefile Conventions: (standards)Makefile Conventions. The 'configure' shell script attempts to guess correct values for various system-dependent variables used during compilation. It uses those values to create a 'Makefile' in each directory of the package. It may also create one or more '.h' files containing system-dependent definitions. Finally, it creates a shell script 'config.status' that you can run in the future to recreate the current configuration, and a file 'config.log' containing compiler output (useful mainly for debugging 'configure'). It can also use an optional file (typically called 'config.cache' and enabled with '--cache-file=config.cache' or simply '-C') that saves the results of its tests to speed up reconfiguring. Caching is disabled by default to prevent problems with accidental use of stale cache files. If you need to do unusual things to compile the package, please try to figure out how 'configure' could check whether to do them, and mail diffs or instructions to the address given in the 'README' so they can be considered for the next release. If you are using the cache, and at some point 'config.cache' contains results you don't want to keep, you may remove or edit it. The file 'configure.ac' (or 'configure.in') is used to create 'configure' by a program called 'autoconf'. You need 'configure.ac' if you want to change it or regenerate 'configure' using a newer version of 'autoconf'. The simplest way to compile this package is: 1. 'cd' to the directory containing the package's source code and type './configure' to configure the package for your system. Running 'configure' might take a while. While running, it prints some messages telling which features it is checking for. 2. Type 'make' to compile the package. 3. Optionally, type 'make check' to run any self-tests that come with the package, generally using the just-built uninstalled binaries. 4. Type 'make install' to install the programs and any data files and documentation. When installing into a prefix owned by root, it is recommended that the package be configured and built as a regular user, and only the 'make install' phase executed with root privileges. 5. Optionally, type 'make installcheck' to repeat any self-tests, but this time using the binaries in their final installed location. This target does not install anything. Running this target as a regular user, particularly if the prior 'make install' required root privileges, verifies that the installation completed correctly. 6. You can remove the program binaries and object files from the source code directory by typing 'make clean'. To also remove the files that 'configure' created (so you can compile the package for a different kind of computer), type 'make distclean'. There is also a 'make maintainer-clean' target, but that is intended mainly for the package's developers. If you use it, you may have to get all sorts of other programs in order to regenerate files that came with the distribution. 7. Often, you can also type 'make uninstall' to remove the installed files again. In practice, not all packages have tested that uninstallation works correctly, even though it is required by the GNU Coding Standards. 8. Some packages, particularly those that use Automake, provide 'make distcheck', which can by used by developers to test that all other targets like 'make install' and 'make uninstall' work correctly. This target is generally not run by end users. Compilers and Options ===================== Some systems require unusual options for compilation or linking that the 'configure' script does not know about. Run './configure --help' for details on some of the pertinent environment variables. You can give 'configure' initial values for configuration parameters by setting variables in the command line or in the environment. Here is an example: ./configure CC=c99 CFLAGS=-g LIBS=-lposix *Note Defining Variables::, for more details. Compiling For Multiple Architectures ==================================== You can compile the package for more than one kind of computer at the same time, by placing the object files for each architecture in their own directory. To do this, you can use GNU 'make'. 'cd' to the directory where you want the object files and executables to go and run the 'configure' script. 'configure' automatically checks for the source code in the directory that 'configure' is in and in '..'. This is known as a "VPATH" build. With a non-GNU 'make', it is safer to compile the package for one architecture at a time in the source code directory. After you have installed the package for one architecture, use 'make distclean' before reconfiguring for another architecture. On MacOS X 10.5 and later systems, you can create libraries and executables that work on multiple system types--known as "fat" or "universal" binaries--by specifying multiple '-arch' options to the compiler but only a single '-arch' option to the preprocessor. Like this: ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ CPP="gcc -E" CXXCPP="g++ -E" This is not guaranteed to produce working output in all cases, you may have to build one architecture at a time and combine the results using the 'lipo' tool if you have problems. Installation Names ================== By default, 'make install' installs the package's commands under '/usr/local/bin', include files under '/usr/local/include', etc. You can specify an installation prefix other than '/usr/local' by giving 'configure' the option '--prefix=PREFIX', where PREFIX must be an absolute file name. You can specify separate installation prefixes for architecture-specific files and architecture-independent files. If you pass the option '--exec-prefix=PREFIX' to 'configure', the package uses PREFIX as the prefix for installing programs and libraries. Documentation and other data files still use the regular prefix. In addition, if you use an unusual directory layout you can give options like '--bindir=DIR' to specify different values for particular kinds of files. Run 'configure --help' for a list of the directories you can set and what kinds of files go in them. In general, the default for these options is expressed in terms of '${prefix}', so that specifying just '--prefix' will affect all of the other directory specifications that were not explicitly provided. The most portable way to affect installation locations is to pass the correct locations to 'configure'; however, many packages provide one or both of the following shortcuts of passing variable assignments to the 'make install' command line to change installation locations without having to reconfigure or recompile. The first method involves providing an override variable for each affected directory. For example, 'make install prefix=/alternate/directory' will choose an alternate location for all directory configuration variables that were expressed in terms of '${prefix}'. Any directories that were specified during 'configure', but not in terms of '${prefix}', must each be overridden at install time for the entire installation to be relocated. The approach of makefile variable overrides for each directory variable is required by the GNU Coding Standards, and ideally causes no recompilation. However, some platforms have known limitations with the semantics of shared libraries that end up requiring recompilation when using this method, particularly noticeable in packages that use GNU Libtool. The second method involves providing the 'DESTDIR' variable. For example, 'make install DESTDIR=/alternate/directory' will prepend '/alternate/directory' before all installation names. The approach of 'DESTDIR' overrides is not required by the GNU Coding Standards, and does not work on platforms that have drive letters. On the other hand, it does better at avoiding recompilation issues, and works well even when some directory options were not specified in terms of '${prefix}' at 'configure' time. Optional Features ================= If the package supports it, you can cause programs to be installed with an extra prefix or suffix on their names by giving 'configure' the option '--program-prefix=PREFIX' or '--program-suffix=SUFFIX'. Some packages pay attention to '--enable-FEATURE' options to 'configure', where FEATURE indicates an optional part of the package. They may also pay attention to '--with-PACKAGE' options, where PACKAGE is something like 'gnu-as' or 'x' (for the X Window System). The 'README' should mention any '--enable-' and '--with-' options that the package recognizes. For packages that use the X Window System, 'configure' can usually find the X include and library files automatically, but if it doesn't, you can use the 'configure' options '--x-includes=DIR' and '--x-libraries=DIR' to specify their locations. Some packages offer the ability to configure how verbose the execution of 'make' will be. For these packages, running './configure --enable-silent-rules' sets the default to minimal output, which can be overridden with 'make V=1'; while running './configure --disable-silent-rules' sets the default to verbose, which can be overridden with 'make V=0'. Particular systems ================== On HP-UX, the default C compiler is not ANSI C compatible. If GNU CC is not installed, it is recommended to use the following options in order to use an ANSI C compiler: ./configure CC="cc -Ae -D_XOPEN_SOURCE=500" and if that doesn't work, install pre-built binaries of GCC for HP-UX. HP-UX 'make' updates targets which have the same timestamps as their prerequisites, which makes it generally unusable when shipped generated files such as 'configure' are involved. Use GNU 'make' instead. On OSF/1 a.k.a. Tru64, some versions of the default C compiler cannot parse its '<wchar.h>' header file. The option '-nodtk' can be used as a workaround. If GNU CC is not installed, it is therefore recommended to try ./configure CC="cc" and if that doesn't work, try ./configure CC="cc -nodtk" On Solaris, don't put '/usr/ucb' early in your 'PATH'. This directory contains several dysfunctional programs; working variants of these programs are available in '/usr/bin'. So, if you need '/usr/ucb' in your 'PATH', put it _after_ '/usr/bin'. On Haiku, software installed for all users goes in '/boot/common', not '/usr/local'. It is recommended to use the following options: ./configure --prefix=/boot/common Specifying the System Type ========================== There may be some features 'configure' cannot figure out automatically, but needs to determine by the type of machine the package will run on. Usually, assuming the package is built to be run on the _same_ architectures, 'configure' can figure that out, but if it prints a message saying it cannot guess the machine type, give it the '--build=TYPE' option. TYPE can either be a short name for the system type, such as 'sun4', or a canonical name which has the form: CPU-COMPANY-SYSTEM where SYSTEM can have one of these forms: OS KERNEL-OS See the file 'config.sub' for the possible values of each field. If 'config.sub' isn't included in this package, then this package doesn't need to know the machine type. If you are _building_ compiler tools for cross-compiling, you should use the option '--target=TYPE' to select the type of system they will produce code for. If you want to _use_ a cross compiler, that generates code for a platform different from the build platform, you should specify the "host" platform (i.e., that on which the generated programs will eventually be run) with '--host=TYPE'. Sharing Defaults ================ If you want to set default values for 'configure' scripts to share, you can create a site shell script called 'config.site' that gives default values for variables like 'CC', 'cache_file', and 'prefix'. 'configure' looks for 'PREFIX/share/config.site' if it exists, then 'PREFIX/etc/config.site' if it exists. Or, you can set the 'CONFIG_SITE' environment variable to the location of the site script. A warning: not all 'configure' scripts look for a site script. Defining Variables ================== Variables not defined in a site shell script can be set in the environment passed to 'configure'. However, some packages may run configure again during the build, and the customized values of these variables may be lost. In order to avoid this problem, you should set them in the 'configure' command line, using 'VAR=value'. For example: ./configure CC=/usr/local2/bin/gcc causes the specified 'gcc' to be used as the C compiler (unless it is overridden in the site shell script). Unfortunately, this technique does not work for 'CONFIG_SHELL' due to an Autoconf limitation. Until the limitation is lifted, you can use this workaround: CONFIG_SHELL=/bin/bash ./configure CONFIG_SHELL=/bin/bash 'configure' Invocation ====================== 'configure' recognizes the following options to control how it operates. '--help' '-h' Print a summary of all of the options to 'configure', and exit. '--help=short' '--help=recursive' Print a summary of the options unique to this package's 'configure', and exit. The 'short' variant lists options used only in the top level, while the 'recursive' variant lists options also present in any nested packages. '--version' '-V' Print the version of Autoconf used to generate the 'configure' script, and exit. '--cache-file=FILE' Enable the cache: use and save the results of the tests in FILE, traditionally 'config.cache'. FILE defaults to '/dev/null' to disable caching. '--config-cache' '-C' Alias for '--cache-file=config.cache'. '--quiet' '--silent' '-q' Do not print messages saying which checks are being made. To suppress all normal output, redirect it to '/dev/null' (any error messages will still be shown). '--srcdir=DIR' Look for the package's source code in directory DIR. Usually 'configure' can determine that directory automatically. '--prefix=DIR' Use DIR as the installation prefix. *note Installation Names:: for more details, including other options available for fine-tuning the installation locations. '--no-create' '-n' Run the configure checks, but stop before creating any output files. 'configure' also accepts some other, not widely useful, options. Run 'configure --help' for more details. ����������������������������������������������������������������������������������������������������������recutils-1.9/libcsv/��������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577414�011462� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/libcsv/Makefile.am���������������������������������������������������������������������0000644�0000000�0000000�00000001554�14226563465�013444� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libcsv/ Makefile.am # Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, # 2019, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. noinst_LTLIBRARIES = libcsv.la libcsv_la_SOURCES = csv.h \ libcsv.c # End of Makefile.am ����������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/libcsv/csv.h���������������������������������������������������������������������������0000644�0000000�0000000�00000010002�14226563465�012340� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * libcsv - parse and write csv data * * Original Author: Robert Gamble. * * Copyright (C) 2008 Robert Gamble * Copyright (C) 2010, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 3 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef LIBCSV_H__ #define LIBCSV_H__ #include <stdlib.h> #include <stdio.h> #ifdef __cplusplus extern "C" { #endif #define CSV_MAJOR 3 #define CSV_MINOR 0 #define CSV_RELEASE 0 /* Error Codes */ #define CSV_SUCCESS 0 #define CSV_EPARSE 1 /* Parse error in strict mode */ #define CSV_ENOMEM 2 /* Out of memory while increasing buffer size */ #define CSV_ETOOBIG 3 /* Buffer larger than SIZE_MAX needed */ #define CSV_EINVALID 4 /* Invalid code,should never be received from csv_error*/ /* parser options */ #define CSV_STRICT 1 /* enable strict mode */ #define CSV_REPALL_NL 2 /* report all unquoted carriage returns and linefeeds */ #define CSV_STRICT_FINI 4 /* causes csv_fini to return CSV_EPARSE if last field is quoted and doesn't containg ending quote */ #define CSV_APPEND_NULL 8 /* Ensure that all fields are null-ternimated */ /* Character values */ #define CSV_TAB 0x09 #define CSV_SPACE 0x20 #define CSV_CR 0x0d #define CSV_LF 0x0a #define CSV_COMMA 0x2c #define CSV_QUOTE 0x22 struct csv_parser { int pstate; /* Parser state */ int quoted; /* Is the current field a quoted field? */ size_t spaces; /* Number of continious spaces after quote or in a non-quoted field */ unsigned char * entry_buf; /* Entry buffer */ size_t entry_pos; /* Current position in entry_buf (and current size of entry) */ size_t entry_size; /* Size of entry buffer */ int status; /* Operation status */ unsigned char options; unsigned char quote_char; unsigned char delim_char; int (*is_space)(unsigned char); int (*is_term)(unsigned char); size_t blk_size; void *(*malloc_func)(size_t); void *(*realloc_func)(void *, size_t); void (*free_func)(void *); }; /* Function Prototypes */ int csv_init(struct csv_parser *p, unsigned char options); int csv_fini(struct csv_parser *p, void (*cb1)(void *, size_t, void *), void (*cb2)(int, void *), void *data); void csv_free(struct csv_parser *p); int csv_error(struct csv_parser *p); char * csv_strerror(int error); size_t csv_parse(struct csv_parser *p, const void *s, size_t len, void (*cb1)(void *, size_t, void *), void (*cb2)(int, void *), void *data); size_t csv_write(void *dest, size_t dest_size, const void *src, size_t src_size); int csv_fwrite(FILE *fp, const void *src, size_t src_size); size_t csv_write2(void *dest, size_t dest_size, const void *src, size_t src_size, unsigned char quote); int csv_fwrite2(FILE *fp, const void *src, size_t src_size, unsigned char quote); int csv_get_opts(struct csv_parser *p); int csv_set_opts(struct csv_parser *p, unsigned char options); void csv_set_delim(struct csv_parser *p, unsigned char c); void csv_set_quote(struct csv_parser *p, unsigned char c); unsigned char csv_get_delim(struct csv_parser *p); unsigned char csv_get_quote(struct csv_parser *p); void csv_set_space_func(struct csv_parser *p, int (*f)(unsigned char)); void csv_set_term_func(struct csv_parser *p, int (*f)(unsigned char)); void csv_set_realloc_func(struct csv_parser *p, void *(*)(void *, size_t)); void csv_set_free_func(struct csv_parser *p, void (*)(void *)); void csv_set_blk_size(struct csv_parser *p, size_t); size_t csv_get_buffer_size(struct csv_parser *p); #ifdef __cplusplus } #endif #endif /* End of csv.h */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/libcsv/Makefile.in���������������������������������������������������������������������0000644�0000000�0000000�00000232136�14226573150�013447� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # libcsv/ Makefile.am # Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, # 2019, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = libcsv ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 \ $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/calloc.m4 \ $(top_srcdir)/m4/canonicalize.m4 \ $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/clock_time.m4 \ $(top_srcdir)/m4/close.m4 $(top_srcdir)/m4/closedir.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/copy-file-range.m4 \ $(top_srcdir)/m4/copy-file.m4 $(top_srcdir)/m4/d-ino.m4 \ $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup.m4 \ $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eaccess.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ $(top_srcdir)/m4/explicit_bzero.m4 \ $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 \ $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fchdir.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \ $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \ $(top_srcdir)/m4/filenamecat.m4 \ $(top_srcdir)/m4/findprog-in.m4 $(top_srcdir)/m4/flexmember.m4 \ $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/flock.m4 \ $(top_srcdir)/m4/floor.m4 $(top_srcdir)/m4/fopen.m4 \ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ $(top_srcdir)/m4/fseek.m4 $(top_srcdir)/m4/fseeko.m4 \ $(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \ $(top_srcdir)/m4/fstatat.m4 $(top_srcdir)/m4/ftell.m4 \ $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ $(top_srcdir)/m4/getcwd-abort-bug.m4 \ $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \ $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \ $(top_srcdir)/m4/getpass.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/getrandom.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/group-member.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexpl.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrlen.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/minmax.m4 \ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkostemp.m4 \ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \ $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/opendir.m4 \ $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ $(top_srcdir)/m4/posix_spawn_faction_addchdir.m4 \ $(top_srcdir)/m4/printf-frexp.m4 \ $(top_srcdir)/m4/printf-frexpl.m4 \ $(top_srcdir)/m4/printf-posix-rpl.m4 \ $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readdir.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/remove.m4 \ $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rewinddir.m4 \ $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/safe-read.m4 \ $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/save-cwd.m4 \ $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ $(top_srcdir)/m4/selinux-context-h.m4 \ $(top_srcdir)/m4/selinux-label-h.m4 \ $(top_srcdir)/m4/selinux-selinux-h.m4 \ $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/setlocale_null.m4 \ $(top_srcdir)/m4/sh-filename.m4 \ $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ $(top_srcdir)/m4/signal_h.m4 \ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/stdio_h.m4 \ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/stpcpy.m4 \ $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ $(top_srcdir)/m4/sys_random_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink.m4 \ $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utime.m4 \ $(top_srcdir)/m4/utime_h.m4 $(top_srcdir)/m4/utimens.m4 \ $(top_srcdir)/m4/utimes.m4 \ $(top_srcdir)/m4/vasnprintf-posix.m4 \ $(top_srcdir)/m4/vasnprintf.m4 \ $(top_srcdir)/m4/vasprintf-posix.m4 \ $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ $(top_srcdir)/m4/vfprintf-posix.m4 \ $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/write.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/year2038.m4 \ $(top_srcdir)/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = LTLIBRARIES = $(noinst_LTLIBRARIES) libcsv_la_LIBADD = am_libcsv_la_OBJECTS = libcsv.lo libcsv_la_OBJECTS = $(am_libcsv_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/libcsv.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(libcsv_la_SOURCES) DIST_SOURCES = $(libcsv_la_SOURCES) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp README DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_HEADERS = @BASH_HEADERS@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CURLLIBS = @CURLLIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ FLOOR_LIBM = @FLOOR_LIBM@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POSIX_SPAWN = @GL_GNULIB_POSIX_SPAWN@ GL_GNULIB_POSIX_SPAWNATTR_DESTROY = @GL_GNULIB_POSIX_SPAWNATTR_DESTROY@ GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ GL_GNULIB_POSIX_SPAWNATTR_INIT = @GL_GNULIB_POSIX_SPAWNATTR_INIT@ GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ GL_GNULIB_POSIX_SPAWNP = @GL_GNULIB_POSIX_SPAWNP@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIME = @GL_GNULIB_UTIME@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FLOCK = @HAVE_FLOCK@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SPAWN_H = @HAVE_SPAWN_H@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIME = @HAVE_UTIME@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_UTIME_H = @HAVE_UTIME_H@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGCRYPT = @LIBGCRYPT@ LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIB_ACL = @LIB_ACL@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ LIB_EACCESS = @LIB_EACCESS@ LIB_GETRANDOM = @LIB_GETRANDOM@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELINUX = @LIB_SELINUX@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBGCRYPT = @LTLIBGCRYPT@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBREADLINE = @LTLIBREADLINE@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MDBLIBS = @MDBLIBS@ MDB_DATETIME = @MDB_DATETIME@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_UTIME_H = @NEXT_AS_FIRST_DIRECTIVE_UTIME_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_SPAWN_H = @NEXT_SPAWN_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_UTIME_H = @NEXT_UTIME_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PARSE_DATETIME_BISON = @PARSE_DATETIME_BISON@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIME = @REPLACE_UTIME@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ SELINUX_LABEL_H = @SELINUX_LABEL_H@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_ACL = @USE_ACL@ USE_NLS = @USE_NLS@ UUIDLIBS = @UUIDLIBS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ crypt_support = @crypt_support@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ have_uuid = @have_uuid@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ noinst_LTLIBRARIES = libcsv.la libcsv_la_SOURCES = csv.h \ libcsv.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu libcsv/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu libcsv/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): clean-noinstLTLIBRARIES: -test -z "$(noinst_LTLIBRARIES)" || rm -f $(noinst_LTLIBRARIES) @list='$(noinst_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } libcsv.la: $(libcsv_la_OBJECTS) $(libcsv_la_DEPENDENCIES) $(EXTRA_libcsv_la_DEPENDENCIES) $(AM_V_CCLD)$(LINK) $(libcsv_la_OBJECTS) $(libcsv_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/libcsv.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool clean-noinstLTLIBRARIES \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/libcsv.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/libcsv.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libtool clean-noinstLTLIBRARIES \ cscopelist-am ctags ctags-am distclean distclean-compile \ distclean-generic distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-info install-info-am install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am .PRECIOUS: Makefile # End of Makefile.am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/libcsv/README��������������������������������������������������������������������������0000644�0000000�0000000�00000000377�13253164723�012263� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������This directory contains a copy of the libcsv library, extracted from libcsv-3.0.0.tar.gz. It contains some modifications. The homepage for libcsv is at http://libcsv.sf.net Note that this copy has been relicensed to GPLv3 as per terms of the LGPL 2.1. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/libcsv/libcsv.c������������������������������������������������������������������������0000644�0000000�0000000�00000034710�14226563465�013036� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* * libcsv - parse and write csv data * * Original Author: Robert Gamble. * * Copyright (C) 2008 Robert Gamble * Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2020, 2022 Jose E. * Marchesi */ /* This program is free software: you can redistribute it and/or * modify it under the terms of the GNU General Public License version * 3 as published by the Free Software Foundation. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #if ___STDC_VERSION__ >= 199901L # include <stdint.h> #else # define SIZE_MAX ((size_t)-1) /* C89 doesn't have stdint.h or SIZE_MAX */ #endif #include <config.h> #include "csv.h" #define LIBCSV_VERSION "3.0.0-recutils" #define ROW_NOT_BEGUN 0 #define FIELD_NOT_BEGUN 1 #define FIELD_BEGUN 2 #define FIELD_MIGHT_HAVE_ENDED 3 /* Explanation of states ROW_NOT_BEGUN There have not been any fields encountered for this row FIELD_NOT_BEGUN There have been fields but we are currently not in one FIELD_BEGUN We are in a field FIELD_MIGHT_HAVE_ENDED We encountered a double quote inside a quoted field, the field is either ended or the quote is literal */ #define MEM_BLK_SIZE 128 #define SUBMIT_FIELD(p) \ do { \ if (!quoted) \ entry_pos -= spaces; \ if (p->options & CSV_APPEND_NULL) \ ((p)->entry_buf[entry_pos+1]) = '\0'; \ if (cb1) \ cb1(p->entry_buf, entry_pos, data); \ pstate = FIELD_NOT_BEGUN; \ entry_pos = quoted = spaces = 0; \ } while (0) #define SUBMIT_ROW(p, c) \ do { \ if (cb2) \ cb2(c, data); \ pstate = ROW_NOT_BEGUN; \ entry_pos = quoted = spaces = 0; \ } while (0) #define SUBMIT_CHAR(p, c) ((p)->entry_buf[entry_pos++] = (c)) static char *csv_errors[] = {"success", "error parsing data while strict checking enabled", "memory exhausted while increasing buffer size", "data size too large", "invalid status code"}; int csv_error(struct csv_parser *p) { /* Return the current status of the parser */ return p->status; } char * csv_strerror(int status) { /* Return a textual description of status */ if (status >= CSV_EINVALID || status < 0) return csv_errors[CSV_EINVALID]; else return csv_errors[status]; } int csv_get_opts(struct csv_parser *p) { /* Return the currently set options of parser */ if (p == NULL) return -1; return p->options; } int csv_set_opts(struct csv_parser *p, unsigned char options) { /* Set the options */ if (p == NULL) return -1; p->options = options; return 0; } int csv_init(struct csv_parser *p, unsigned char options) { /* Initialize a csv_parser object returns 0 on success, -1 on error */ if (p == NULL) return -1; p->entry_buf = NULL; p->pstate = ROW_NOT_BEGUN; p->quoted = 0; p->spaces = 0; p->entry_pos = 0; p->entry_size = 0; p->status = 0; p->options = options; p->quote_char = CSV_QUOTE; p->delim_char = CSV_COMMA; p->is_space = NULL; p->is_term = NULL; p->blk_size = MEM_BLK_SIZE; p->malloc_func = NULL; p->realloc_func = realloc; p->free_func = free; return 0; } void csv_free(struct csv_parser *p) { /* Free the entry_buffer of csv_parser object */ if (p == NULL) return; if (p->entry_buf) p->free_func(p->entry_buf); p->entry_buf = NULL; p->entry_size = 0; return; } int csv_fini(struct csv_parser *p, void (*cb1)(void *, size_t, void *), void (*cb2)(int c, void *), void *data) { /* Finalize parsing. Needed, for example, when file does not end in a newline */ int quoted = p->quoted; int pstate = p->pstate; size_t spaces = p->spaces; size_t entry_pos = p->entry_pos; if (p == NULL) return -1; if (p->pstate == FIELD_BEGUN && p->quoted && p->options & CSV_STRICT && p->options & CSV_STRICT_FINI) { /* Current field is quoted, no end-quote was seen, and CSV_STRICT_FINI is set */ p->status = CSV_EPARSE; return -1; } switch (p->pstate) { case FIELD_MIGHT_HAVE_ENDED: p->entry_pos -= p->spaces + 1; /* get rid of spaces and original quote */ /* Fall-through */ case FIELD_NOT_BEGUN: case FIELD_BEGUN: quoted = p->quoted, pstate = p->pstate; spaces = p->spaces, entry_pos = p->entry_pos; SUBMIT_FIELD(p); SUBMIT_ROW(p, -1); case ROW_NOT_BEGUN: /* Already ended properly */ ; } /* Reset parser */ p->spaces = p->quoted = p->entry_pos = p->status = 0; p->pstate = ROW_NOT_BEGUN; return 0; } void csv_set_delim(struct csv_parser *p, unsigned char c) { /* Set the delimiter */ if (p) p->delim_char = c; } void csv_set_quote(struct csv_parser *p, unsigned char c) { /* Set the quote character */ if (p) p->quote_char = c; } unsigned char csv_get_delim(struct csv_parser *p) { /* Get the delimiter */ return p->delim_char; } unsigned char csv_get_quote(struct csv_parser *p) { /* Get the quote character */ return p->quote_char; } void csv_set_space_func(struct csv_parser *p, int (*f)(unsigned char)) { /* Set the space function */ if (p) p->is_space = f; } void csv_set_term_func(struct csv_parser *p, int (*f)(unsigned char)) { /* Set the term function */ if (p) p->is_term = f; } void csv_set_realloc_func(struct csv_parser *p, void *(*f)(void *, size_t)) { /* Set the realloc function used to increase buffer size */ if (p && f) p->realloc_func = f; } void csv_set_free_func(struct csv_parser *p, void (*f)(void *)) { /* Set the free function used to free the buffer */ if (p && f) p->free_func = f; } void csv_set_blk_size(struct csv_parser *p, size_t size) { /* Set the block size used to increment buffer size */ if (p) p->blk_size = size; } size_t csv_get_buffer_size(struct csv_parser *p) { /* Get the size of the entry buffer */ if (p) return p->entry_size; return 0; } static int csv_increase_buffer(struct csv_parser *p) { /* Increase the size of the entry buffer. Attempt to increase size by * p->blk_size, if this is larger than SIZE_MAX try to increase current * buffer size to SIZE_MAX. If allocation fails, try to allocate halve * the size and try again until successful or increment size is zero. */ size_t to_add = p->blk_size; void *vp; if ( p->entry_size >= SIZE_MAX - to_add ) to_add = SIZE_MAX - p->entry_size; if (!to_add) { p->status = CSV_ETOOBIG; return -1; } while ((vp = p->realloc_func(p->entry_buf, p->entry_size + to_add)) == NULL) { to_add /= 2; if (!to_add) { p->status = CSV_ENOMEM; return -1; } } /* Update entry buffer pointer and entry_size if successful */ p->entry_buf = vp; p->entry_size += to_add; return 0; } size_t csv_parse(struct csv_parser *p, const void *s, size_t len, void (*cb1)(void *, size_t, void *), void (*cb2)(int c, void *), void *data) { unsigned const char *us = s; /* Access input data as array of unsigned char */ unsigned char c; /* The character we are currently processing */ size_t pos = 0; /* The number of characters we have processed in this call */ /* Store key fields into local variables for performance */ unsigned char delim = p->delim_char; unsigned char quote = p->quote_char; int (*is_space)(unsigned char) = p->is_space; int (*is_term)(unsigned char) = p->is_term; int quoted = p->quoted; int pstate = p->pstate; size_t spaces = p->spaces; size_t entry_pos = p->entry_pos; if (!p->entry_buf && pos < len) { /* Buffer hasn't been allocated yet and len > 0 */ if (csv_increase_buffer(p) != 0) { p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos; } } while (pos < len) { /* Check memory usage, increase buffer if neccessary */ if (entry_pos == ((p->options & CSV_APPEND_NULL) ? p->entry_size - 1 : p->entry_size) ) { if (csv_increase_buffer(p) != 0) { p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos; } } c = us[pos++]; switch (pstate) { case ROW_NOT_BEGUN: case FIELD_NOT_BEGUN: if (is_space ? is_space(c) : c == CSV_SPACE || c == CSV_TAB) { /* Space or Tab */ continue; } else if (is_term ? is_term(c) : c == CSV_CR || c == CSV_LF) { /* Carriage Return or Line Feed */ if (pstate == FIELD_NOT_BEGUN) { SUBMIT_FIELD(p); SUBMIT_ROW(p, (unsigned char)c); } else { /* ROW_NOT_BEGUN */ /* Don't submit empty rows by default */ if (p->options & CSV_REPALL_NL) { SUBMIT_ROW(p, (unsigned char)c); } } continue; } else if (c == delim) { /* Comma */ SUBMIT_FIELD(p); break; } else if (c == quote) { /* Quote */ pstate = FIELD_BEGUN; quoted = 1; } else { /* Anything else */ pstate = FIELD_BEGUN; quoted = 0; SUBMIT_CHAR(p, c); } break; case FIELD_BEGUN: if (c == quote) { /* Quote */ if (quoted) { SUBMIT_CHAR(p, c); pstate = FIELD_MIGHT_HAVE_ENDED; } else { /* STRICT ERROR - double quote inside non-quoted field */ if (p->options & CSV_STRICT) { p->status = CSV_EPARSE; p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos-1; } SUBMIT_CHAR(p, c); spaces = 0; } } else if (c == delim) { /* Comma */ if (quoted) { SUBMIT_CHAR(p, c); } else { SUBMIT_FIELD(p); } } else if (is_term ? is_term(c) : c == CSV_CR || c == CSV_LF) { /* Carriage Return or Line Feed */ if (!quoted) { SUBMIT_FIELD(p); SUBMIT_ROW(p, (unsigned char)c); } else { SUBMIT_CHAR(p, c); } } else if (!quoted && (is_space? is_space(c) : c == CSV_SPACE || c == CSV_TAB)) { /* Tab or space for non-quoted field */ SUBMIT_CHAR(p, c); spaces++; } else { /* Anything else */ SUBMIT_CHAR(p, c); spaces = 0; } break; case FIELD_MIGHT_HAVE_ENDED: /* This only happens when a quote character is encountered in a quoted field */ if (c == delim) { /* Comma */ entry_pos -= spaces + 1; /* get rid of spaces and original quote */ SUBMIT_FIELD(p); } else if (is_term ? is_term(c) : c == CSV_CR || c == CSV_LF) { /* Carriage Return or Line Feed */ entry_pos -= spaces + 1; /* get rid of spaces and original quote */ SUBMIT_FIELD(p); SUBMIT_ROW(p, (unsigned char)c); } else if (is_space ? is_space(c) : c == CSV_SPACE || c == CSV_TAB) { /* Space or Tab */ SUBMIT_CHAR(p, c); spaces++; } else if (c == quote) { /* Quote */ if (spaces) { /* STRICT ERROR - unescaped double quote */ if (p->options & CSV_STRICT) { p->status = CSV_EPARSE; p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos-1; } spaces = 0; SUBMIT_CHAR(p, c); } else { /* Two quotes in a row */ pstate = FIELD_BEGUN; } } else { /* Anything else */ /* STRICT ERROR - unescaped double quote */ if (p->options & CSV_STRICT) { p->status = CSV_EPARSE; p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos-1; } pstate = FIELD_BEGUN; spaces = 0; SUBMIT_CHAR(p, c); } break; default: break; } } p->quoted = quoted, p->pstate = pstate, p->spaces = spaces, p->entry_pos = entry_pos; return pos; } size_t csv_write (void *dest, size_t dest_size, const void *src, size_t src_size) { unsigned char *cdest = dest; const unsigned char *csrc = src; size_t chars = 0; if (src == NULL) return 0; if (cdest == NULL) dest_size = 0; if (dest_size > 0) *cdest++ = '"'; chars++; while (src_size) { if (*csrc == '"') { if (dest_size > chars) *cdest++ = '"'; if (chars < SIZE_MAX) chars++; } if (dest_size > chars) *cdest++ = *csrc; if (chars < SIZE_MAX) chars++; src_size--; csrc++; } if (dest_size > chars) *cdest = '"'; if (chars < SIZE_MAX) chars++; return chars; } int csv_fwrite (FILE *fp, const void *src, size_t src_size) { const unsigned char *csrc = src; if (fp == NULL || src == NULL) return 0; if (fputc('"', fp) == EOF) return EOF; while (src_size) { if (*csrc == '"') { if (fputc('"', fp) == EOF) return EOF; } if (fputc(*csrc, fp) == EOF) return EOF; src_size--; csrc++; } if (fputc('"', fp) == EOF) { return EOF; } return 0; } size_t csv_write2 (void *dest, size_t dest_size, const void *src, size_t src_size, unsigned char quote) { unsigned char *cdest = dest; const unsigned char *csrc = src; size_t chars = 0; if (src == NULL) return 0; if (dest == NULL) dest_size = 0; if (dest_size > 0) *cdest++ = quote; chars++; while (src_size) { if (*csrc == quote) { if (dest_size > chars) *cdest++ = quote; if (chars < SIZE_MAX) chars++; } if (dest_size > chars) *cdest++ = *csrc; if (chars < SIZE_MAX) chars++; src_size--; csrc++; } if (dest_size > chars) *cdest = quote; if (chars < SIZE_MAX) chars++; return chars; } int csv_fwrite2 (FILE *fp, const void *src, size_t src_size, unsigned char quote) { const unsigned char *csrc = src; if (fp == NULL || src == NULL) return 0; if (fputc(quote, fp) == EOF) return EOF; while (src_size) { if (*csrc == quote) { if (fputc(quote, fp) == EOF) return EOF; } if (fputc(*csrc, fp) == EOF) return EOF; src_size--; csrc++; } if (fputc(quote, fp) == EOF) { return EOF; } return 0; } /* End of libcsv.c */ ��������������������������������������������������������recutils-1.9/configure������������������������������������������������������������������������������0000755�0000000�0000000�00006227541�14226573141�012041� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#! /bin/sh # Guess values for system-dependent variables and create Makefiles. # Generated by GNU Autoconf 2.71 for GNU recutils 1.9. # # Report bugs to <bug-recutils@gnu.org>. # # # 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</dev/null; fi if (exec 3>&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 test -n \"\${ZSH_VERSION+set}\${BASH_VERSION+set}\" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO ECHO=\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO\$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test \"X\`printf %s \$ECHO\`\" = \"X\$ECHO\" \\ || test \"X\`print -r -- \$ECHO\`\" = \"X\$ECHO\" ) || 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 and $0: bug-recutils@gnu.org about your system, including any $0: error possibly output before this message. Then install $0: a modern shell, or manually run the script under such a $0: shell if you do have one." fi exit 1 fi fi fi SHELL=${CONFIG_SHELL-/bin/sh} export SHELL # Unset more variables known to interfere with behavior of common tools. CLICOLOR_FORCE= GREP_OPTIONS= unset CLICOLOR_FORCE GREP_OPTIONS ## --------------------- ## ## M4sh Shell Functions. ## ## --------------------- ## # as_fn_unset VAR # --------------- # Portably unset VAR. as_fn_unset () { { eval $1=; unset $1;} } as_unset=as_fn_unset # as_fn_set_status STATUS # ----------------------- # Set $? to STATUS, without forking. as_fn_set_status () { return $1 } # as_fn_set_status # as_fn_exit STATUS # ----------------- # Exit the shell with STATUS, even in a "trap 0" or "set -e" context. as_fn_exit () { set +e as_fn_set_status $1 exit $1 } # as_fn_exit # as_fn_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'" SHELL=${CONFIG_SHELL-/bin/sh} test -n "$DJDIR" || exec 7<&0 </dev/null exec 6>&1 # Name of the host. # hostname on some systems (SVR3.2, old GNU/Linux) returns a bogus exit status, # so uname gets run too. ac_hostname=`(hostname || uname -n) 2>/dev/null | sed 1q` # # Initializations. # ac_default_prefix=/usr/local ac_clean_files= ac_config_libobj_dir=. LIBOBJS= cross_compiling=no subdirs= MFLAGS= MAKEFLAGS= # Identity of this package. PACKAGE_NAME='GNU recutils' PACKAGE_TARNAME='recutils' PACKAGE_VERSION='1.9' PACKAGE_STRING='GNU recutils 1.9' PACKAGE_BUGREPORT='bug-recutils@gnu.org' PACKAGE_URL='https://www.gnu.org/software/recutils/' # Factoring default headers for most tests. ac_includes_default="\ #include <stddef.h> #ifdef HAVE_STDIO_H # include <stdio.h> #endif #ifdef HAVE_STDLIB_H # include <stdlib.h> #endif #ifdef HAVE_STRING_H # include <string.h> #endif #ifdef HAVE_INTTYPES_H # include <inttypes.h> #endif #ifdef HAVE_STDINT_H # include <stdint.h> #endif #ifdef HAVE_STRINGS_H # include <strings.h> #endif #ifdef HAVE_SYS_TYPES_H # include <sys/types.h> #endif #ifdef HAVE_SYS_STAT_H # include <sys/stat.h> #endif #ifdef HAVE_UNISTD_H # include <unistd.h> #endif" ac_header_c_list= gl_use_threads_default= gl_use_winpthreads_default= ac_config_libobj_dir=lib ac_func_c_list= gl_floor_required=plain gl_getopt_required=POSIX gt_needs= ac_subst_vars='gltests_LIBOBJDEPS gltests_LTLIBOBJS gltests_LIBOBJS gl_LIBOBJDEPS gl_LTLIBOBJS gl_LIBOBJS CONFIG_INCLUDE am__EXEEXT_FALSE am__EXEEXT_TRUE LTLIBOBJS LIBOBJS USE_COVERAGE_FALSE USE_COVERAGE_TRUE POSUB INTLLIBS LTLIBICONV LIBICONV INTL_MACOSX_LIBS XGETTEXT_EXTRA_OPTIONS MSGMERGE XGETTEXT_015 XGETTEXT GMSGFMT_015 MSGFMT_015 GMSGFMT MSGFMT GETTEXT_MACRO_VERSION USE_NLS BASH_BUILTINS_FALSE BASH_BUILTINS_TRUE BASH_HEADERS UUID_TYPE_FALSE UUID_TYPE_TRUE REMOTE_DESCRIPTORS_FALSE REMOTE_DESCRIPTORS_TRUE COMPILE_MDB2REC_FALSE COMPILE_MDB2REC_TRUE MDBLIBS MDB_DATETIME GLIB_LIBS GLIB_CFLAGS crypt_support CRYPT_FALSE CRYPT_TRUE LIBGCRYPT_PREFIX LTLIBGCRYPT LIBGCRYPT HAVE_LIBGCRYPT have_uuid UUIDLIBS CURLLIBS CHECK_FALSE CHECK_TRUE CHECK_LIBS CHECK_CFLAGS PKG_CONFIG_LIBDIR PKG_CONFIG_PATH PKG_CONFIG HELP2MAN GL_CFLAG_GNULIB_WARNINGS GL_CFLAG_ALLOW_WARNINGS gltests_WITNESS GL_COND_OBJ_WRITE_FALSE GL_COND_OBJ_WRITE_TRUE GL_COND_OBJ_WINDOWS_SPAWN_FALSE GL_COND_OBJ_WINDOWS_SPAWN_TRUE GL_COND_OBJ_WINDOWS_RWLOCK_FALSE GL_COND_OBJ_WINDOWS_RWLOCK_TRUE GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE GL_COND_OBJ_WINDOWS_ONCE_FALSE GL_COND_OBJ_WINDOWS_ONCE_TRUE GL_COND_OBJ_WINDOWS_MUTEX_FALSE GL_COND_OBJ_WINDOWS_MUTEX_TRUE GL_GNULIB_TOWCTRANS GL_GNULIB_WCTRANS GL_GNULIB_ISWCTYPE GL_GNULIB_WCTYPE GL_GNULIB_ISWXDIGIT GL_GNULIB_ISWDIGIT GL_GNULIB_ISWBLANK REPLACE_TOWLOWER REPLACE_ISWCNTRL HAVE_WCTYPE_H NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H NEXT_WCTYPE_H HAVE_ISWCNTRL REPLACE_ISWXDIGIT REPLACE_ISWDIGIT REPLACE_ISWBLANK HAVE_WCTRANS_T HAVE_WCTYPE_T HAVE_ISWBLANK GL_COND_OBJ_WCTOMB_FALSE GL_COND_OBJ_WCTOMB_TRUE GL_COND_OBJ_WCTOB_FALSE GL_COND_OBJ_WCTOB_TRUE GL_COND_OBJ_WCRTOMB_FALSE GL_COND_OBJ_WCRTOMB_TRUE HAVE_CRTDEFS_H HAVE_WINT_T NEXT_AS_FIRST_DIRECTIVE_WCHAR_H NEXT_WCHAR_H GL_COND_OBJ_WAITPID_FALSE GL_COND_OBJ_WAITPID_TRUE HAVE_UTIME_H NEXT_AS_FIRST_DIRECTIVE_UTIME_H NEXT_UTIME_H GL_GNULIB_MDA_UTIME GL_GNULIB_UTIME GL_COND_OBJ_UTIME_FALSE GL_COND_OBJ_UTIME_TRUE REPLACE_UTIME HAVE_UTIME GL_COND_OBJ_UNSETENV_FALSE GL_COND_OBJ_UNSETENV_TRUE GL_COND_OBJ_UNLINK_FALSE GL_COND_OBJ_UNLINK_TRUE HAVE_UNISTD_H NEXT_AS_FIRST_DIRECTIVE_UNISTD_H NEXT_UNISTD_H GL_COND_OBJ_TZSET_FALSE GL_COND_OBJ_TZSET_TRUE GL_COND_OBJ_TIMEGM_FALSE GL_COND_OBJ_TIMEGM_TRUE GL_COND_OBJ_TIME_RZ_FALSE GL_COND_OBJ_TIME_RZ_TRUE GL_COND_OBJ_TIME_R_FALSE GL_COND_OBJ_TIME_R_TRUE TIME_H_DEFINES_TIME_UTC UNISTD_H_DEFINES_STRUCT_TIMESPEC PTHREAD_H_DEFINES_STRUCT_TIMESPEC SYS_TIME_H_DEFINES_STRUCT_TIMESPEC TIME_H_DEFINES_STRUCT_TIMESPEC NEXT_AS_FIRST_DIRECTIVE_TIME_H NEXT_TIME_H GL_GNULIB_WAITPID NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H NEXT_SYS_WAIT_H HAVE_SYS_RANDOM_H NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H NEXT_SYS_RANDOM_H HAVE_SYS_FILE_H NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H NEXT_SYS_FILE_H GL_COND_OBJ_STRVERSCMP_FALSE GL_COND_OBJ_STRVERSCMP_TRUE GL_COND_OBJ_STRSEP_FALSE GL_COND_OBJ_STRSEP_TRUE GL_GNULIB_FFS HAVE_STRINGS_H NEXT_AS_FIRST_DIRECTIVE_STRINGS_H NEXT_STRINGS_H NEXT_AS_FIRST_DIRECTIVE_STRING_H NEXT_STRING_H GL_COND_OBJ_STRERROR_OVERRIDE_FALSE GL_COND_OBJ_STRERROR_OVERRIDE_TRUE GL_COND_OBJ_STRERROR_FALSE GL_COND_OBJ_STRERROR_TRUE GL_COND_OBJ_STRDUP_FALSE GL_COND_OBJ_STRDUP_TRUE GL_COND_OBJ_STRCHRNUL_FALSE GL_COND_OBJ_STRCHRNUL_TRUE GL_COND_OBJ_STRNCASECMP_FALSE GL_COND_OBJ_STRNCASECMP_TRUE GL_COND_OBJ_STRCASECMP_FALSE GL_COND_OBJ_STRCASECMP_TRUE HAVE_DECL_STRNCASECMP HAVE_STRCASECMP HAVE_FFS GL_COND_OBJ_STPCPY_FALSE GL_COND_OBJ_STPCPY_TRUE NEXT_AS_FIRST_DIRECTIVE_STDLIB_H NEXT_STDLIB_H GL_COND_OBJ_STDIO_WRITE_FALSE GL_COND_OBJ_STDIO_WRITE_TRUE GL_COND_OBJ_STDIO_READ_FALSE GL_COND_OBJ_STDIO_READ_TRUE NEXT_AS_FIRST_DIRECTIVE_STDIO_H NEXT_STDIO_H GL_GENERATE_STDINT_H_FALSE GL_GENERATE_STDINT_H_TRUE STDINT_H GL_GENERATE_STDDEF_H_FALSE GL_GENERATE_STDDEF_H_TRUE STDDEF_H GL_GENERATE_STDBOOL_H_FALSE GL_GENERATE_STDBOOL_H_TRUE STDBOOL_H HAVE__BOOL GL_GENERATE_STDARG_H_FALSE GL_GENERATE_STDARG_H_TRUE STDARG_H NEXT_AS_FIRST_DIRECTIVE_STDARG_H NEXT_STDARG_H GL_GENERATE_STDALIGN_H_FALSE GL_GENERATE_STDALIGN_H_TRUE STDALIGN_H GL_COND_OBJ_STAT_FALSE GL_COND_OBJ_STAT_TRUE HAVE_SPAWN_H NEXT_AS_FIRST_DIRECTIVE_SPAWN_H NEXT_SPAWN_H GL_COND_OBJ_SIGPROCMASK_FALSE GL_COND_OBJ_SIGPROCMASK_TRUE GL_COND_OBJ_SIGNBIT3_FALSE GL_COND_OBJ_SIGNBIT3_TRUE NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H NEXT_SIGNAL_H GL_COND_OBJ_SIGACTION_FALSE GL_COND_OBJ_SIGACTION_TRUE GL_COND_OBJ_SETLOCALE_LOCK_FALSE GL_COND_OBJ_SETLOCALE_LOCK_TRUE GL_COND_OBJ_SETENV_FALSE GL_COND_OBJ_SETENV_TRUE GL_COND_OBJ_GETFILECON_FALSE GL_COND_OBJ_GETFILECON_TRUE GL_GENERATE_SELINUX_LABEL_H_FALSE GL_GENERATE_SELINUX_LABEL_H_TRUE SELINUX_LABEL_H GL_GENERATE_SELINUX_CONTEXT_H_FALSE GL_GENERATE_SELINUX_CONTEXT_H_TRUE SELINUX_CONTEXT_H NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H NEXT_SELINUX_SELINUX_H LIB_SELINUX GL_COND_OBJ_SECURE_GETENV_FALSE GL_COND_OBJ_SECURE_GETENV_TRUE GL_GNULIB_SCHED_YIELD HAVE_STRUCT_SCHED_PARAM HAVE_SCHED_H NEXT_AS_FIRST_DIRECTIVE_SCHED_H NEXT_SCHED_H REPLACE_SCHED_YIELD HAVE_SCHED_YIELD GL_COND_OBJ_RMDIR_FALSE GL_COND_OBJ_RMDIR_TRUE GL_COND_OBJ_REWINDDIR_FALSE GL_COND_OBJ_REWINDDIR_TRUE GL_COND_OBJ_RENAME_FALSE GL_COND_OBJ_RENAME_TRUE GL_COND_OBJ_REMOVE_FALSE GL_COND_OBJ_REMOVE_TRUE GL_COND_OBJ_REGEX_FALSE GL_COND_OBJ_REGEX_TRUE GL_COND_OBJ_REALLOCARRAY_FALSE GL_COND_OBJ_REALLOCARRAY_TRUE GL_COND_OBJ_READLINK_FALSE GL_COND_OBJ_READLINK_TRUE GL_COND_OBJ_READLINE_FALSE GL_COND_OBJ_READLINE_TRUE LTLIBREADLINE LIBREADLINE GL_COND_OBJ_READDIR_FALSE GL_COND_OBJ_READDIR_TRUE GL_COND_OBJ_READ_FALSE GL_COND_OBJ_READ_TRUE GL_COND_OBJ_RAWMEMCHR_FALSE GL_COND_OBJ_RAWMEMCHR_TRUE GL_COND_OBJ_RANDOM_R_FALSE GL_COND_OBJ_RANDOM_R_TRUE GL_GNULIB_SIGACTION GL_GNULIB_SIGPROCMASK GL_GNULIB_SIGNAL_H_SIGPIPE GL_GNULIB_RAISE GL_GNULIB_PTHREAD_SIGMASK GL_COND_OBJ_RAISE_FALSE GL_COND_OBJ_RAISE_TRUE REPLACE_RAISE REPLACE_PTHREAD_SIGMASK HAVE_SIGHANDLER_T HAVE_TYPE_VOLATILE_SIG_ATOMIC_T HAVE_STRUCT_SIGACTION_SA_SIGACTION HAVE_SIGACTION HAVE_SIGINFO_T HAVE_SIGSET_T HAVE_RAISE HAVE_PTHREAD_SIGMASK HAVE_POSIX_SIGNALBLOCKING ASM_SYMBOL_PREFIX GL_COND_OBJ_SPAWNP_FALSE GL_COND_OBJ_SPAWNP_TRUE GL_COND_OBJ_SPAWNATTR_SETSIGMASK_FALSE GL_COND_OBJ_SPAWNATTR_SETSIGMASK_TRUE GL_COND_OBJ_SPAWNATTR_SETFLAGS_FALSE GL_COND_OBJ_SPAWNATTR_SETFLAGS_TRUE GL_COND_OBJ_SPAWNATTR_INIT_FALSE GL_COND_OBJ_SPAWNATTR_INIT_TRUE GL_COND_OBJ_SPAWNATTR_DESTROY_FALSE GL_COND_OBJ_SPAWNATTR_DESTROY_TRUE GL_COND_OBJ_SPAWN_FACTION_INIT_FALSE GL_COND_OBJ_SPAWN_FACTION_INIT_TRUE GL_COND_OBJ_SPAWN_FACTION_DESTROY_FALSE GL_COND_OBJ_SPAWN_FACTION_DESTROY_TRUE GL_COND_OBJ_SPAWN_FACTION_ADDOPEN_FALSE GL_COND_OBJ_SPAWN_FACTION_ADDOPEN_TRUE GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR_FALSE GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR_TRUE GL_COND_OBJ_SPAWNI_FALSE GL_COND_OBJ_SPAWNI_TRUE GL_GNULIB_POSIX_SPAWNATTR_DESTROY GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS GL_GNULIB_POSIX_SPAWNATTR_INIT GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT GL_GNULIB_POSIX_SPAWNP GL_GNULIB_POSIX_SPAWN GL_COND_OBJ_SPAWN_FALSE GL_COND_OBJ_SPAWN_TRUE LIB_POSIX_SPAWN REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR REPLACE_POSIX_SPAWN HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR HAVE_POSIX_SPAWN_FILE_ACTIONS_T HAVE_POSIX_SPAWNATTR_T HAVE_POSIX_SPAWN GL_COND_OBJ_PIPE_FALSE GL_COND_OBJ_PIPE_TRUE PARSE_DATETIME_BISON GL_COND_OBJ_OPENDIR_FALSE GL_COND_OBJ_OPENDIR_TRUE GL_COND_OBJ_OPENAT_FALSE GL_COND_OBJ_OPENAT_TRUE GL_COND_OBJ_OPEN_FALSE GL_COND_OBJ_OPEN_TRUE GL_COND_OBJ_OBSTACK_FALSE GL_COND_OBJ_OBSTACK_TRUE GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE GL_COND_OBJ_NL_LANGINFO_FALSE GL_COND_OBJ_NL_LANGINFO_TRUE LIB_NL_LANGINFO GL_COND_OBJ_MSVC_NOTHROW_FALSE GL_COND_OBJ_MSVC_NOTHROW_TRUE GL_COND_OBJ_MSVC_INVAL_FALSE GL_COND_OBJ_MSVC_INVAL_TRUE GL_GNULIB_MDA_TZSET GL_GNULIB_TZSET GL_GNULIB_TIME_RZ GL_GNULIB_TIME_R GL_GNULIB_TIMESPEC_GETRES GL_GNULIB_TIMESPEC_GET GL_GNULIB_TIMEGM GL_GNULIB_STRPTIME GL_GNULIB_STRFTIME GL_GNULIB_NANOSLEEP GL_GNULIB_LOCALTIME GL_GNULIB_MKTIME GL_GNULIB_CTIME REPLACE_LOCALTIME REPLACE_GMTIME GNULIB_GETTIMEOFDAY REPLACE_TZSET REPLACE_TIMEGM REPLACE_STRFTIME REPLACE_NANOSLEEP REPLACE_MKTIME REPLACE_LOCALTIME_R REPLACE_CTIME HAVE_TIMEZONE_T HAVE_TIMESPEC_GETRES HAVE_TIMESPEC_GET HAVE_TIMEGM HAVE_STRPTIME HAVE_NANOSLEEP HAVE_DECL_LOCALTIME_R GL_COND_OBJ_MKSTEMP_FALSE GL_COND_OBJ_MKSTEMP_TRUE GL_COND_OBJ_MKOSTEMP_FALSE GL_COND_OBJ_MKOSTEMP_TRUE GL_COND_OBJ_MKDIR_FALSE GL_COND_OBJ_MKDIR_TRUE GL_COND_OBJ_MEMRCHR_FALSE GL_COND_OBJ_MEMRCHR_TRUE GL_COND_OBJ_MEMPCPY_FALSE GL_COND_OBJ_MEMPCPY_TRUE GL_COND_OBJ_MEMCHR_FALSE GL_COND_OBJ_MEMCHR_TRUE GL_COND_OBJ_MBTOWC_FALSE GL_COND_OBJ_MBTOWC_TRUE GL_COND_OBJ_MBSINIT_FALSE GL_COND_OBJ_MBSINIT_TRUE HAVE_VISIBILITY CFLAG_VISIBILITY GL_COND_OBJ_MBRTOWC_FALSE GL_COND_OBJ_MBRTOWC_TRUE GL_COND_OBJ_MBRLEN_FALSE GL_COND_OBJ_MBRLEN_TRUE LIB_MBRTOWC LOCALE_ZH_CN LOCALE_FR_UTF8 LOCALE_JA NEXT_AS_FIRST_DIRECTIVE_MATH_H NEXT_MATH_H GL_COND_OBJ_LSTAT_FALSE GL_COND_OBJ_LSTAT_TRUE GL_COND_OBJ_LSEEK_FALSE GL_COND_OBJ_LSEEK_TRUE LTLIBMULTITHREAD LIBMULTITHREAD LTLIBTHREAD LIBTHREAD LIBSTDTHREAD GL_COND_OBJ_LOCALECONV_FALSE GL_COND_OBJ_LOCALECONV_TRUE GL_GNULIB_LOCALENAME GL_GNULIB_DUPLOCALE GL_GNULIB_SETLOCALE_NULL GL_GNULIB_SETLOCALE GL_GNULIB_LOCALECONV NEXT_AS_FIRST_DIRECTIVE_LOCALE_H NEXT_LOCALE_H HAVE_XLOCALE_H NEXT_AS_FIRST_DIRECTIVE_STDDEF_H NEXT_STDDEF_H HAVE_WCHAR_T HAVE_MAX_ALIGN_T REPLACE_NULL LOCALENAME_ENHANCE_LOCALE_FUNCS REPLACE_STRUCT_LCONV REPLACE_FREELOCALE REPLACE_DUPLOCALE REPLACE_NEWLOCALE REPLACE_SETLOCALE REPLACE_LOCALECONV HAVE_FREELOCALE HAVE_DUPLOCALE HAVE_NEWLOCALE LOCALCHARSET_TESTS_ENVIRONMENT GL_GENERATE_LIMITS_H_FALSE GL_GENERATE_LIMITS_H_TRUE LIMITS_H GL_GNULIB_NL_LANGINFO HAVE_LANGINFO_YESEXPR HAVE_LANGINFO_ERA HAVE_LANGINFO_ALTMON HAVE_LANGINFO_T_FMT_AMPM HAVE_LANGINFO_CODESET HAVE_LANGINFO_H NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H NEXT_LANGINFO_H REPLACE_NL_LANGINFO HAVE_NL_LANGINFO GL_GNULIB_STRTOUMAX GL_GNULIB_STRTOIMAX GL_GNULIB_IMAXDIV GL_GNULIB_IMAXABS NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H NEXT_INTTYPES_H UINT64_MAX_EQ_ULONG_MAX UINT32_MAX_LT_UINTMAX_MAX PRIPTR_PREFIX INT64_MAX_EQ_LONG_MAX INT32_MAX_LT_INTMAX_MAX REPLACE_STRTOUMAX REPLACE_STRTOIMAX HAVE_IMAXDIV_T HAVE_DECL_STRTOUMAX HAVE_DECL_STRTOIMAX HAVE_DECL_IMAXDIV HAVE_DECL_IMAXABS HAVE_SYS_INTTYPES_H HAVE_SYS_BITYPES_H HAVE_C99_STDINT_H WINT_T_SUFFIX WCHAR_T_SUFFIX SIG_ATOMIC_T_SUFFIX SIZE_T_SUFFIX PTRDIFF_T_SUFFIX HAVE_SIGNED_WINT_T HAVE_SIGNED_WCHAR_T HAVE_SIGNED_SIG_ATOMIC_T BITSIZEOF_WINT_T BITSIZEOF_WCHAR_T BITSIZEOF_SIG_ATOMIC_T BITSIZEOF_SIZE_T BITSIZEOF_PTRDIFF_T HAVE_STDINT_H NEXT_AS_FIRST_DIRECTIVE_STDINT_H NEXT_STDINT_H HAVE_SYS_TYPES_H HAVE_INTTYPES_H HAVE_WCHAR_H NEXT_AS_FIRST_DIRECTIVE_LIMITS_H NEXT_LIMITS_H LIB_HARD_LOCALE LIB_SETLOCALE_NULL LIB_SCHED_YIELD LIBPMULTITHREAD LIBPTHREAD GL_COND_OBJ_GROUP_MEMBER_FALSE GL_COND_OBJ_GROUP_MEMBER_TRUE GL_GNULIB_GETTIMEOFDAY GL_COND_OBJ_GETTIMEOFDAY_FALSE GL_COND_OBJ_GETTIMEOFDAY_TRUE NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H NEXT_SYS_TIME_H REPLACE_STRUCT_TIMEVAL REPLACE_GETTIMEOFDAY HAVE_SYS_TIME_H HAVE_STRUCT_TIMEVAL HAVE_GETTIMEOFDAY LTLIBINTL LIBINTL GL_GNULIB_GETRANDOM GL_COND_OBJ_GETRANDOM_FALSE GL_COND_OBJ_GETRANDOM_TRUE LIB_GETRANDOM REPLACE_GETRANDOM HAVE_GETRANDOM GL_COND_OBJ_GETOPT_FALSE GL_COND_OBJ_GETOPT_TRUE GL_GENERATE_GETOPT_CDEFS_H_FALSE GL_GENERATE_GETOPT_CDEFS_H_TRUE GETOPT_CDEFS_H GL_GENERATE_GETOPT_H_FALSE GL_GENERATE_GETOPT_H_TRUE GETOPT_H HAVE_SYS_CDEFS_H HAVE_GETOPT_H NEXT_AS_FIRST_DIRECTIVE_GETOPT_H NEXT_GETOPT_H GL_COND_OBJ_GETLINE_FALSE GL_COND_OBJ_GETLINE_TRUE GL_COND_OBJ_GETGROUPS_FALSE GL_COND_OBJ_GETGROUPS_TRUE GL_COND_OBJ_GETDTABLESIZE_FALSE GL_COND_OBJ_GETDTABLESIZE_TRUE GL_COND_OBJ_GETDELIM_FALSE GL_COND_OBJ_GETDELIM_TRUE GL_COND_OBJ_GETCWD_LGPL_FALSE GL_COND_OBJ_GETCWD_LGPL_TRUE GL_COND_OBJ_GETCWD_FALSE GL_COND_OBJ_GETCWD_TRUE GL_COND_OBJ_FWRITING_FALSE GL_COND_OBJ_FWRITING_TRUE GL_COND_OBJ_FTELLO_FALSE GL_COND_OBJ_FTELLO_TRUE GL_COND_OBJ_FTELL_FALSE GL_COND_OBJ_FTELL_TRUE GL_COND_OBJ_FSTATAT_FALSE GL_COND_OBJ_FSTATAT_TRUE GL_GNULIB_MDA_UMASK GL_GNULIB_MDA_MKDIR GL_GNULIB_MDA_CHMOD GL_GNULIB_OVERRIDES_STRUCT_STAT GL_GNULIB_UTIMENSAT GL_GNULIB_STAT GL_GNULIB_MKNODAT GL_GNULIB_MKNOD GL_GNULIB_MKFIFOAT GL_GNULIB_MKFIFO GL_GNULIB_MKDIRAT GL_GNULIB_MKDIR GL_GNULIB_LSTAT GL_GNULIB_LCHMOD GL_GNULIB_GETUMASK GL_GNULIB_FUTIMENS GL_GNULIB_FSTATAT GL_GNULIB_FSTAT GL_GNULIB_FCHMODAT WINDOWS_64_BIT_ST_SIZE WINDOWS_STAT_TIMESPEC NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H NEXT_SYS_STAT_H GL_COND_OBJ_FSTAT_FALSE GL_COND_OBJ_FSTAT_TRUE REPLACE_UTIMENSAT REPLACE_STAT REPLACE_MKNODAT REPLACE_MKNOD REPLACE_MKFIFOAT REPLACE_MKFIFO REPLACE_MKDIR REPLACE_LSTAT REPLACE_FUTIMENS REPLACE_FSTATAT REPLACE_FSTAT REPLACE_FCHMODAT HAVE_UTIMENSAT HAVE_MKNODAT HAVE_MKNOD HAVE_MKFIFOAT HAVE_MKFIFO HAVE_MKDIRAT HAVE_LSTAT HAVE_LCHMOD HAVE_GETUMASK HAVE_FUTIMENS HAVE_FSTATAT HAVE_FCHMODAT GL_COND_OBJ_FSETERR_FALSE GL_COND_OBJ_FSETERR_TRUE GL_COND_OBJ_FSEEKO_FALSE GL_COND_OBJ_FSEEKO_TRUE GL_COND_OBJ_FSEEK_FALSE GL_COND_OBJ_FSEEK_TRUE WINDOWS_STAT_INODES WINDOWS_64_BIT_OFF_T NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H NEXT_SYS_TYPES_H GL_COND_OBJ_FREE_FALSE GL_COND_OBJ_FREE_TRUE HAVE_FEATURES_H GNULIBHEADERS_OVERRIDE_WINT_T APPLE_UNIVERSAL_BUILD HAVE_SAME_LONG_DOUBLE_AS_DOUBLE GL_COND_OBJ_FPENDING_FALSE GL_COND_OBJ_FPENDING_TRUE GL_GNULIB_MDA_TEMPNAM GL_GNULIB_MDA_PUTW GL_GNULIB_MDA_GETW GL_GNULIB_MDA_FILENO GL_GNULIB_MDA_FDOPEN GL_GNULIB_MDA_FCLOSEALL GL_GNULIB_VSPRINTF_POSIX GL_GNULIB_VSNPRINTF GL_GNULIB_VPRINTF_POSIX GL_GNULIB_VPRINTF GL_GNULIB_VFPRINTF_POSIX GL_GNULIB_VFPRINTF GL_GNULIB_VDPRINTF GL_GNULIB_VSCANF GL_GNULIB_VFSCANF GL_GNULIB_VASPRINTF GL_GNULIB_TMPFILE GL_GNULIB_STDIO_H_SIGPIPE GL_GNULIB_STDIO_H_NONBLOCKING GL_GNULIB_SPRINTF_POSIX GL_GNULIB_SNPRINTF GL_GNULIB_SCANF GL_GNULIB_RENAMEAT GL_GNULIB_RENAME GL_GNULIB_REMOVE GL_GNULIB_PUTS GL_GNULIB_PUTCHAR GL_GNULIB_PUTC GL_GNULIB_PRINTF_POSIX GL_GNULIB_PRINTF GL_GNULIB_POPEN GL_GNULIB_PERROR GL_GNULIB_PCLOSE GL_GNULIB_OBSTACK_PRINTF_POSIX GL_GNULIB_OBSTACK_PRINTF GL_GNULIB_GETLINE GL_GNULIB_GETDELIM GL_GNULIB_GETCHAR GL_GNULIB_GETC GL_GNULIB_FWRITE GL_GNULIB_FTELLO GL_GNULIB_FTELL GL_GNULIB_FSEEKO GL_GNULIB_FSEEK GL_GNULIB_FSCANF GL_GNULIB_FREOPEN GL_GNULIB_FREAD GL_GNULIB_FPUTS GL_GNULIB_FPUTC GL_GNULIB_FPURGE GL_GNULIB_FPRINTF_POSIX GL_GNULIB_FPRINTF GL_GNULIB_FOPEN_GNU GL_GNULIB_FOPEN GL_GNULIB_FGETS GL_GNULIB_FGETC GL_GNULIB_FFLUSH GL_GNULIB_FDOPEN GL_GNULIB_FCLOSE GL_GNULIB_DPRINTF REPLACE_VSPRINTF REPLACE_VSNPRINTF REPLACE_VPRINTF REPLACE_VFPRINTF REPLACE_VDPRINTF REPLACE_VASPRINTF REPLACE_TMPFILE REPLACE_STDIO_WRITE_FUNCS REPLACE_STDIO_READ_FUNCS REPLACE_SPRINTF REPLACE_SNPRINTF REPLACE_RENAMEAT REPLACE_RENAME REPLACE_REMOVE REPLACE_PRINTF REPLACE_POPEN REPLACE_PERROR REPLACE_OBSTACK_PRINTF REPLACE_GETLINE REPLACE_GETDELIM REPLACE_FTELLO REPLACE_FTELL REPLACE_FSEEKO REPLACE_FSEEK REPLACE_FREOPEN REPLACE_FPURGE REPLACE_FPRINTF REPLACE_FOPEN_FOR_FOPEN_GNU REPLACE_FOPEN REPLACE_FFLUSH REPLACE_FDOPEN REPLACE_FCLOSE REPLACE_DPRINTF HAVE_VDPRINTF HAVE_VASPRINTF HAVE_RENAMEAT HAVE_POPEN HAVE_PCLOSE HAVE_FTELLO HAVE_FSEEKO HAVE_DPRINTF HAVE_DECL_VSNPRINTF HAVE_DECL_SNPRINTF HAVE_DECL_OBSTACK_PRINTF HAVE_DECL_GETLINE HAVE_DECL_GETDELIM HAVE_DECL_FTELLO HAVE_DECL_FSEEKO HAVE_DECL_FPURGE HAVE_DECL_FCLOSEALL GL_GNULIB_MDA_YN GL_GNULIB_MDA_Y1 GL_GNULIB_MDA_Y0 GL_GNULIB_MDA_JN GL_GNULIB_MDA_J1 GL_GNULIB_MDA_J0 GL_GNULIB_TRUNCL GL_GNULIB_TRUNCF GL_GNULIB_TRUNC GL_GNULIB_TANHF GL_GNULIB_TANL GL_GNULIB_TANF GL_GNULIB_SQRTL GL_GNULIB_SQRTF GL_GNULIB_SINHF GL_GNULIB_SINL GL_GNULIB_SINF GL_GNULIB_SIGNBIT GL_GNULIB_ROUNDL GL_GNULIB_ROUNDF GL_GNULIB_ROUND GL_GNULIB_RINTL GL_GNULIB_RINTF GL_GNULIB_RINT GL_GNULIB_REMAINDERL GL_GNULIB_REMAINDERF GL_GNULIB_REMAINDER GL_GNULIB_POWF GL_GNULIB_MODFL GL_GNULIB_MODFF GL_GNULIB_MODF GL_GNULIB_LOGBL GL_GNULIB_LOGBF GL_GNULIB_LOGB GL_GNULIB_LOG2L GL_GNULIB_LOG2F GL_GNULIB_LOG2 GL_GNULIB_LOG1PL GL_GNULIB_LOG1PF GL_GNULIB_LOG1P GL_GNULIB_LOG10L GL_GNULIB_LOG10F GL_GNULIB_LOG10 GL_GNULIB_LOGL GL_GNULIB_LOGF GL_GNULIB_LOG GL_GNULIB_LDEXPL GL_GNULIB_LDEXPF GL_GNULIB_ISNANL GL_GNULIB_ISNAND GL_GNULIB_ISNANF GL_GNULIB_ISNAN GL_GNULIB_ISINF GL_GNULIB_ISFINITE GL_GNULIB_ILOGBL GL_GNULIB_ILOGBF GL_GNULIB_ILOGB GL_GNULIB_HYPOTL GL_GNULIB_HYPOTF GL_GNULIB_HYPOT GL_GNULIB_FREXPL GL_GNULIB_FREXP GL_GNULIB_FREXPF GL_GNULIB_FMODL GL_GNULIB_FMODF GL_GNULIB_FMOD GL_GNULIB_FMAL GL_GNULIB_FMAF GL_GNULIB_FMA GL_GNULIB_FLOORL GL_GNULIB_FLOORF GL_GNULIB_FLOOR GL_GNULIB_FABSL GL_GNULIB_FABSF GL_GNULIB_EXPM1L GL_GNULIB_EXPM1F GL_GNULIB_EXPM1 GL_GNULIB_EXP2L GL_GNULIB_EXP2F GL_GNULIB_EXP2 GL_GNULIB_EXPL GL_GNULIB_EXPF GL_GNULIB_COSHF GL_GNULIB_COSL GL_GNULIB_COSF GL_GNULIB_COPYSIGNL GL_GNULIB_COPYSIGNF GL_GNULIB_COPYSIGN GL_GNULIB_CEILL GL_GNULIB_CEILF GL_GNULIB_CEIL GL_GNULIB_CBRTL GL_GNULIB_CBRTF GL_GNULIB_CBRT GL_GNULIB_ATAN2F GL_GNULIB_ATANL GL_GNULIB_ATANF GL_GNULIB_ASINL GL_GNULIB_ASINF GL_GNULIB_ACOSL GL_GNULIB_ACOSF GL_COND_OBJ_FLOOR_FALSE GL_COND_OBJ_FLOOR_TRUE FLOOR_LIBM REPLACE_TRUNCL REPLACE_TRUNCF REPLACE_TRUNC REPLACE_TANHF REPLACE_TANF REPLACE_SQRTL REPLACE_SQRTF REPLACE_SINHF REPLACE_SINF REPLACE_SIGNBIT_USING_BUILTINS REPLACE_SIGNBIT REPLACE_ROUNDL REPLACE_ROUNDF REPLACE_ROUND REPLACE_RINTL REPLACE_REMAINDERL REPLACE_REMAINDERF REPLACE_REMAINDER REPLACE_NAN REPLACE_MODFL REPLACE_MODFF REPLACE_MODF REPLACE_LOGBL REPLACE_LOGBF REPLACE_LOGB REPLACE_LOG2L REPLACE_LOG2F REPLACE_LOG2 REPLACE_LOG1PL REPLACE_LOG1PF REPLACE_LOG1P REPLACE_LOG10L REPLACE_LOG10F REPLACE_LOG10 REPLACE_LOGL REPLACE_LOGF REPLACE_LOG REPLACE_LDEXPL REPLACE_ISNAN REPLACE_ISINF REPLACE_ISFINITE REPLACE_ILOGBL REPLACE_ILOGBF REPLACE_ILOGB REPLACE_HYPOTL REPLACE_HYPOTF REPLACE_HYPOT REPLACE_HUGE_VAL REPLACE_FREXPL REPLACE_FREXP REPLACE_FREXPF REPLACE_FMODL REPLACE_FMODF REPLACE_FMOD REPLACE_FMAL REPLACE_FMAF REPLACE_FMA REPLACE_FLOORL REPLACE_FLOORF REPLACE_FLOOR REPLACE_FABSL REPLACE_EXP2L REPLACE_EXP2 REPLACE_EXPM1L REPLACE_EXPM1F REPLACE_EXPM1 REPLACE_EXPL REPLACE_EXPF REPLACE_COSHF REPLACE_COSF REPLACE_CEILL REPLACE_CEILF REPLACE_CEIL REPLACE_CBRTL REPLACE_CBRTF REPLACE_ATAN2F REPLACE_ATANF REPLACE_ASINF REPLACE_ACOSF HAVE_DECL_TRUNCL HAVE_DECL_TRUNCF HAVE_DECL_TRUNC HAVE_DECL_TANL HAVE_DECL_SQRTL HAVE_DECL_SINL HAVE_DECL_ROUNDL HAVE_DECL_ROUNDF HAVE_DECL_ROUND HAVE_DECL_RINTF HAVE_DECL_REMAINDERL HAVE_DECL_REMAINDER HAVE_DECL_LOGB HAVE_DECL_LOG2L HAVE_DECL_LOG2F HAVE_DECL_LOG2 HAVE_DECL_LOG10L HAVE_DECL_LOGL HAVE_DECL_LDEXPL HAVE_DECL_FREXPL HAVE_DECL_FLOORL HAVE_DECL_FLOORF HAVE_DECL_EXPM1L HAVE_DECL_EXP2L HAVE_DECL_EXP2F HAVE_DECL_EXP2 HAVE_DECL_EXPL HAVE_DECL_COSL HAVE_DECL_COPYSIGNF HAVE_DECL_CEILL HAVE_DECL_CEILF HAVE_DECL_CBRTL HAVE_DECL_CBRTF HAVE_DECL_ATANL HAVE_DECL_ASINL HAVE_DECL_ACOSL HAVE_TANHF HAVE_TANL HAVE_TANF HAVE_SQRTL HAVE_SQRTF HAVE_SINHF HAVE_SINL HAVE_SINF HAVE_RINTL HAVE_RINT HAVE_REMAINDERF HAVE_REMAINDER HAVE_POWF HAVE_MODFL HAVE_MODFF HAVE_LOGBL HAVE_LOGBF HAVE_LOG1PL HAVE_LOG1PF HAVE_LOG1P HAVE_LOG10L HAVE_LOG10F HAVE_LOGL HAVE_LOGF HAVE_LDEXPF HAVE_ISNANL HAVE_ISNAND HAVE_ISNANF HAVE_ILOGBL HAVE_ILOGBF HAVE_ILOGB HAVE_HYPOTL HAVE_HYPOTF HAVE_FREXPF HAVE_FMODL HAVE_FMODF HAVE_FMAL HAVE_FMAF HAVE_FMA HAVE_FABSL HAVE_FABSF HAVE_EXPM1F HAVE_EXPM1 HAVE_EXPL HAVE_EXPF HAVE_COSHF HAVE_COSL HAVE_COSF HAVE_COPYSIGNL HAVE_COPYSIGN HAVE_CBRTL HAVE_CBRTF HAVE_CBRT HAVE_ATAN2F HAVE_ATANL HAVE_ATANF HAVE_ASINL HAVE_ASINF HAVE_ACOSL HAVE_ACOSF GL_GNULIB_FLOCK GL_COND_OBJ_FLOCK_FALSE GL_COND_OBJ_FLOCK_TRUE HAVE_FLOCK GL_COND_OBJ_ITOLD_FALSE GL_COND_OBJ_ITOLD_TRUE GL_COND_OBJ_FLOAT_FALSE GL_COND_OBJ_FLOAT_TRUE GL_GENERATE_FLOAT_H_FALSE GL_GENERATE_FLOAT_H_TRUE FLOAT_H REPLACE_ITOLD NEXT_AS_FIRST_DIRECTIVE_FLOAT_H NEXT_FLOAT_H GL_COND_OBJ_FDOPENDIR_FALSE GL_COND_OBJ_FDOPENDIR_TRUE NEXT_AS_FIRST_DIRECTIVE_FCNTL_H NEXT_FCNTL_H GL_GNULIB_MDA_OPEN GL_GNULIB_MDA_CREAT GL_GNULIB_OPENAT GL_GNULIB_OPEN GL_GNULIB_NONBLOCKING GL_GNULIB_FCNTL GL_GNULIB_CREAT GL_COND_OBJ_FCNTL_FALSE GL_COND_OBJ_FCNTL_TRUE REPLACE_OPENAT REPLACE_OPEN REPLACE_FCNTL REPLACE_CREAT HAVE_OPENAT HAVE_FCNTL GL_COND_OBJ_FCHDIR_FALSE GL_COND_OBJ_FCHDIR_TRUE GL_GNULIB_MDA_STRDUP GL_GNULIB_MDA_MEMCCPY GL_GNULIB_STRVERSCMP GL_GNULIB_STRSIGNAL GL_GNULIB_SIGDESCR_NP GL_GNULIB_SIGABBREV_NP GL_GNULIB_STRERRORNAME_NP GL_GNULIB_STRERROR_R GL_GNULIB_STRERROR GL_GNULIB_MBSTOK_R GL_GNULIB_MBSSEP GL_GNULIB_MBSSPN GL_GNULIB_MBSPBRK GL_GNULIB_MBSCSPN GL_GNULIB_MBSCASESTR GL_GNULIB_MBSPCASECMP GL_GNULIB_MBSNCASECMP GL_GNULIB_MBSCASECMP GL_GNULIB_MBSSTR GL_GNULIB_MBSRCHR GL_GNULIB_MBSCHR GL_GNULIB_MBSNLEN GL_GNULIB_MBSLEN GL_GNULIB_STRTOK_R GL_GNULIB_STRCASESTR GL_GNULIB_STRSTR GL_GNULIB_STRSEP GL_GNULIB_STRPBRK GL_GNULIB_STRNLEN GL_GNULIB_STRNDUP GL_GNULIB_STRNCAT GL_GNULIB_STRDUP GL_GNULIB_STRCHRNUL GL_GNULIB_STPNCPY GL_GNULIB_STPCPY GL_GNULIB_RAWMEMCHR GL_GNULIB_MEMRCHR GL_GNULIB_MEMPCPY GL_GNULIB_MEMMEM GL_GNULIB_MEMCHR GL_GNULIB_FFSLL GL_GNULIB_FFSL GL_GNULIB_EXPLICIT_BZERO GL_COND_OBJ_EXPLICIT_BZERO_FALSE GL_COND_OBJ_EXPLICIT_BZERO_TRUE UNDEFINE_STRTOK_R REPLACE_STRSIGNAL REPLACE_STRERRORNAME_NP REPLACE_STRERROR_R REPLACE_STRERROR REPLACE_STRTOK_R REPLACE_STRCASESTR REPLACE_STRSTR REPLACE_STRNLEN REPLACE_STRNDUP REPLACE_STRNCAT REPLACE_STRDUP REPLACE_STRCHRNUL REPLACE_STPNCPY REPLACE_MEMMEM REPLACE_MEMCHR REPLACE_FFSLL HAVE_STRVERSCMP HAVE_DECL_STRSIGNAL HAVE_SIGDESCR_NP HAVE_SIGABBREV_NP HAVE_STRERRORNAME_NP HAVE_DECL_STRERROR_R HAVE_DECL_STRTOK_R HAVE_STRCASESTR HAVE_STRSEP HAVE_STRPBRK HAVE_DECL_STRNLEN HAVE_DECL_STRNDUP HAVE_DECL_STRDUP HAVE_STRCHRNUL HAVE_STPNCPY HAVE_STPCPY HAVE_RAWMEMCHR HAVE_DECL_MEMRCHR HAVE_MEMPCPY HAVE_DECL_MEMMEM HAVE_FFSLL HAVE_FFSL HAVE_EXPLICIT_BZERO HAVE_MBSLEN LIB_EACCESS GL_COND_OBJ_EUIDACCESS_FALSE GL_COND_OBJ_EUIDACCESS_TRUE GL_COND_OBJ_ERROR_FALSE GL_COND_OBJ_ERROR_TRUE GL_GENERATE_ERRNO_H_FALSE GL_GENERATE_ERRNO_H_TRUE ERRNO_H EOVERFLOW_VALUE EOVERFLOW_HIDDEN ENOLINK_VALUE ENOLINK_HIDDEN EMULTIHOP_VALUE EMULTIHOP_HIDDEN NEXT_AS_FIRST_DIRECTIVE_ERRNO_H NEXT_ERRNO_H GL_COND_OBJ_DUP2_FALSE GL_COND_OBJ_DUP2_TRUE GL_COND_OBJ_DUP_FALSE GL_COND_OBJ_DUP_TRUE GL_COND_OBJ_DIRFD_FALSE GL_COND_OBJ_DIRFD_TRUE HAVE_DIRENT_H NEXT_AS_FIRST_DIRECTIVE_DIRENT_H NEXT_DIRENT_H PRAGMA_COLUMNS PRAGMA_SYSTEM_HEADER INCLUDE_NEXT_AS_FIRST_DIRECTIVE INCLUDE_NEXT GL_COND_OBJ_COPY_FILE_RANGE_FALSE GL_COND_OBJ_COPY_FILE_RANGE_TRUE GL_GNULIB_ALPHASORT GL_GNULIB_SCANDIR GL_GNULIB_FDOPENDIR GL_GNULIB_DIRFD GL_GNULIB_CLOSEDIR GL_GNULIB_REWINDDIR GL_GNULIB_READDIR GL_GNULIB_OPENDIR GL_COND_OBJ_CLOSEDIR_FALSE GL_COND_OBJ_CLOSEDIR_TRUE REPLACE_FDOPENDIR REPLACE_DIRFD REPLACE_CLOSEDIR REPLACE_OPENDIR HAVE_ALPHASORT HAVE_SCANDIR HAVE_FDOPENDIR HAVE_DECL_FDOPENDIR HAVE_DECL_DIRFD HAVE_CLOSEDIR HAVE_REWINDDIR HAVE_READDIR HAVE_OPENDIR GL_COND_OBJ_CLOSE_FALSE GL_COND_OBJ_CLOSE_TRUE HAVE_WINSOCK2_H HAVE_MSVC_INVALID_PARAMETER_HANDLER LIB_CLOCK_GETTIME GL_COND_OBJ_CHDIR_LONG_FALSE GL_COND_OBJ_CHDIR_LONG_TRUE GL_COND_OBJ_CANONICALIZE_LGPL_FALSE GL_COND_OBJ_CANONICALIZE_LGPL_TRUE REPLACE_WCTOMB REPLACE_UNSETENV REPLACE_STRTOULL REPLACE_STRTOUL REPLACE_STRTOLL REPLACE_STRTOLD REPLACE_STRTOL REPLACE_STRTOD REPLACE_SETSTATE REPLACE_SETENV REPLACE_REALPATH REPLACE_REALLOCARRAY REPLACE_REALLOC_FOR_REALLOC_POSIX REPLACE_REALLOC_FOR_REALLOC_GNU REPLACE_RANDOM_R REPLACE_RANDOM REPLACE_QSORT_R REPLACE_PUTENV REPLACE_PTSNAME_R REPLACE_PTSNAME REPLACE_POSIX_MEMALIGN REPLACE_MKSTEMP REPLACE_MBTOWC REPLACE_MALLOC_FOR_MALLOC_POSIX REPLACE_MALLOC_FOR_MALLOC_GNU REPLACE_INITSTATE REPLACE_FREE REPLACE_CANONICALIZE_FILE_NAME REPLACE_CALLOC_FOR_CALLOC_POSIX REPLACE_CALLOC_FOR_CALLOC_GNU REPLACE_ALIGNED_ALLOC HAVE_DECL_UNSETENV HAVE_UNLOCKPT HAVE_SYS_LOADAVG_H HAVE_STRUCT_RANDOM_DATA HAVE_STRTOULL HAVE_STRTOUL HAVE_STRTOLL HAVE_STRTOLD HAVE_STRTOL HAVE_STRTOD HAVE_DECL_SETSTATE HAVE_SETSTATE HAVE_DECL_SETENV HAVE_SETENV HAVE_SECURE_GETENV HAVE_RPMATCH HAVE_REALPATH HAVE_REALLOCARRAY HAVE_RANDOM_R HAVE_RANDOM_H HAVE_RANDOM HAVE_QSORT_R HAVE_PTSNAME_R HAVE_PTSNAME HAVE_POSIX_OPENPT HAVE_POSIX_MEMALIGN HAVE_MKSTEMPS HAVE_MKSTEMP HAVE_MKOSTEMPS HAVE_MKOSTEMP HAVE_MKDTEMP HAVE_MBTOWC HAVE_DECL_INITSTATE HAVE_INITSTATE HAVE_GRANTPT HAVE_GETSUBOPT HAVE_DECL_GETLOADAVG HAVE_DECL_GCVT HAVE_DECL_FCVT HAVE_DECL_ECVT HAVE_CANONICALIZE_FILE_NAME HAVE_ATOLL HAVE_ALIGNED_ALLOC HAVE__EXIT GL_GNULIB_MDA_PUTENV GL_GNULIB_MDA_MKTEMP GL_GNULIB_MDA_GCVT GL_GNULIB_MDA_FCVT GL_GNULIB_MDA_ECVT GL_GNULIB_WCTOMB GL_GNULIB_UNSETENV GL_GNULIB_UNLOCKPT GL_GNULIB_SYSTEM_POSIX GL_GNULIB_STRTOULL GL_GNULIB_STRTOUL GL_GNULIB_STRTOLL GL_GNULIB_STRTOLD GL_GNULIB_STRTOL GL_GNULIB_STRTOD GL_GNULIB_SETENV GL_GNULIB_SECURE_GETENV GL_GNULIB_RPMATCH GL_GNULIB_REALPATH GL_GNULIB_REALLOC_POSIX GL_GNULIB_REALLOC_GNU GL_GNULIB_REALLOCARRAY GL_GNULIB_RANDOM_R GL_GNULIB_RANDOM GL_GNULIB_QSORT_R GL_GNULIB_PUTENV GL_GNULIB_PTSNAME_R GL_GNULIB_PTSNAME GL_GNULIB_POSIX_OPENPT GL_GNULIB_POSIX_MEMALIGN GL_GNULIB_MKSTEMPS GL_GNULIB_MKSTEMP GL_GNULIB_MKOSTEMPS GL_GNULIB_MKOSTEMP GL_GNULIB_MKDTEMP GL_GNULIB_MBTOWC GL_GNULIB_MALLOC_POSIX GL_GNULIB_MALLOC_GNU GL_GNULIB_GRANTPT GL_GNULIB_GETSUBOPT GL_GNULIB_GETLOADAVG GL_GNULIB_FREE_POSIX GL_GNULIB_CANONICALIZE_FILE_NAME GL_GNULIB_CALLOC_POSIX GL_GNULIB_CALLOC_GNU GL_GNULIB_ATOLL GL_GNULIB_ALIGNED_ALLOC GL_GNULIB__EXIT GL_GNULIB_MDA_WCSDUP GL_GNULIB_WCSFTIME GL_GNULIB_WCSWIDTH GL_GNULIB_WCSTOK GL_GNULIB_WCSSTR GL_GNULIB_WCSPBRK GL_GNULIB_WCSSPN GL_GNULIB_WCSCSPN GL_GNULIB_WCSRCHR GL_GNULIB_WCSCHR GL_GNULIB_WCSDUP GL_GNULIB_WCSXFRM GL_GNULIB_WCSCOLL GL_GNULIB_WCSNCASECMP GL_GNULIB_WCSCASECMP GL_GNULIB_WCSNCMP GL_GNULIB_WCSCMP GL_GNULIB_WCSNCAT GL_GNULIB_WCSCAT GL_GNULIB_WCPNCPY GL_GNULIB_WCSNCPY GL_GNULIB_WCPCPY GL_GNULIB_WCSCPY GL_GNULIB_WCSNLEN GL_GNULIB_WCSLEN GL_GNULIB_WMEMSET GL_GNULIB_WMEMPCPY GL_GNULIB_WMEMMOVE GL_GNULIB_WMEMCPY GL_GNULIB_WMEMCMP GL_GNULIB_WMEMCHR GL_GNULIB_WCWIDTH GL_GNULIB_WCSNRTOMBS GL_GNULIB_WCSRTOMBS GL_GNULIB_WCRTOMB GL_GNULIB_MBSNRTOWCS GL_GNULIB_MBSRTOWCS GL_GNULIB_MBRLEN GL_GNULIB_MBRTOWC GL_GNULIB_MBSINIT GL_GNULIB_WCTOB GL_GNULIB_BTOWC GL_COND_OBJ_BTOWC_FALSE GL_COND_OBJ_BTOWC_TRUE LOCALE_FR REPLACE_WCSTOK REPLACE_WCSFTIME REPLACE_WCSWIDTH REPLACE_WCWIDTH REPLACE_WCSNRTOMBS REPLACE_WCSRTOMBS REPLACE_WCRTOMB REPLACE_MBSNRTOWCS REPLACE_MBSRTOWCS REPLACE_MBRLEN REPLACE_MBRTOWC REPLACE_MBSINIT REPLACE_WCTOB REPLACE_BTOWC REPLACE_MBSTATE_T HAVE_DECL_WCWIDTH HAVE_DECL_WCSDUP HAVE_DECL_WCTOB HAVE_WCSFTIME HAVE_WCSWIDTH HAVE_WCSTOK HAVE_WCSSTR HAVE_WCSPBRK HAVE_WCSSPN HAVE_WCSCSPN HAVE_WCSRCHR HAVE_WCSCHR HAVE_WCSDUP HAVE_WCSXFRM HAVE_WCSCOLL HAVE_WCSNCASECMP HAVE_WCSCASECMP HAVE_WCSNCMP HAVE_WCSCMP HAVE_WCSNCAT HAVE_WCSCAT HAVE_WCPNCPY HAVE_WCSNCPY HAVE_WCPCPY HAVE_WCSCPY HAVE_WCSNLEN HAVE_WCSLEN HAVE_WMEMSET HAVE_WMEMPCPY HAVE_WMEMMOVE HAVE_WMEMCPY HAVE_WMEMCMP HAVE_WMEMCHR HAVE_WCSNRTOMBS HAVE_WCSRTOMBS HAVE_WCRTOMB HAVE_MBSNRTOWCS HAVE_MBSRTOWCS HAVE_MBRLEN HAVE_MBRTOWC HAVE_MBSINIT HAVE_BTOWC GL_GENERATE_ALLOCA_H_FALSE GL_GENERATE_ALLOCA_H_TRUE ALLOCA_H HAVE_ALLOCA_H ALLOCA LTALLOCA USE_ACL LIB_ACL GL_GNULIB_MDA_WRITE GL_GNULIB_MDA_UNLINK GL_GNULIB_MDA_SWAB GL_GNULIB_MDA_RMDIR GL_GNULIB_MDA_READ GL_GNULIB_MDA_LSEEK GL_GNULIB_MDA_ISATTY GL_GNULIB_MDA_GETPID GL_GNULIB_MDA_GETCWD GL_GNULIB_MDA_EXECVPE GL_GNULIB_MDA_EXECVP GL_GNULIB_MDA_EXECVE GL_GNULIB_MDA_EXECV GL_GNULIB_MDA_EXECLP GL_GNULIB_MDA_EXECLE GL_GNULIB_MDA_EXECL GL_GNULIB_MDA_DUP2 GL_GNULIB_MDA_DUP GL_GNULIB_MDA_CLOSE GL_GNULIB_MDA_CHDIR GL_GNULIB_MDA_ACCESS GL_GNULIB_WRITE GL_GNULIB_USLEEP GL_GNULIB_UNLINKAT GL_GNULIB_UNLINK GL_GNULIB_UNISTD_H_SIGPIPE GL_GNULIB_UNISTD_H_NONBLOCKING GL_GNULIB_UNISTD_H_GETOPT GL_GNULIB_TTYNAME_R GL_GNULIB_TRUNCATE GL_GNULIB_SYMLINKAT GL_GNULIB_SYMLINK GL_GNULIB_SLEEP GL_GNULIB_SETHOSTNAME GL_GNULIB_RMDIR GL_GNULIB_READLINKAT GL_GNULIB_READLINK GL_GNULIB_READ GL_GNULIB_PWRITE GL_GNULIB_PREAD GL_GNULIB_PIPE2 GL_GNULIB_PIPE GL_GNULIB_LSEEK GL_GNULIB_LINKAT GL_GNULIB_LINK GL_GNULIB_LCHOWN GL_GNULIB_ISATTY GL_GNULIB_GROUP_MEMBER GL_GNULIB_GETUSERSHELL GL_GNULIB_GETPASS_GNU GL_GNULIB_GETPASS GL_GNULIB_GETPAGESIZE GL_GNULIB_GETOPT_POSIX GL_GNULIB_GETLOGIN_R GL_GNULIB_GETLOGIN GL_GNULIB_GETHOSTNAME GL_GNULIB_GETGROUPS GL_GNULIB_GETENTROPY GL_GNULIB_GETDTABLESIZE GL_GNULIB_GETDOMAINNAME GL_GNULIB_GETCWD GL_GNULIB_FTRUNCATE GL_GNULIB_FSYNC GL_GNULIB_FDATASYNC GL_GNULIB_FCHOWNAT GL_GNULIB_FCHDIR GL_GNULIB_FACCESSAT GL_GNULIB_EXECVPE GL_GNULIB_EXECVP GL_GNULIB_EXECVE GL_GNULIB_EXECV GL_GNULIB_EXECLP GL_GNULIB_EXECLE GL_GNULIB_EXECL GL_GNULIB_EUIDACCESS GL_GNULIB_ENVIRON GL_GNULIB_DUP3 GL_GNULIB_DUP2 GL_GNULIB_DUP GL_GNULIB_COPY_FILE_RANGE GL_GNULIB_CLOSE GL_GNULIB_CHOWN GL_GNULIB_CHDIR GL_GNULIB_ACCESS GL_COND_OBJ_ACCESS_FALSE GL_COND_OBJ_ACCESS_TRUE UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS UNISTD_H_HAVE_WINSOCK2_H UNISTD_H_HAVE_SYS_RANDOM_H REPLACE_WRITE REPLACE_USLEEP REPLACE_UNLINKAT REPLACE_UNLINK REPLACE_TTYNAME_R REPLACE_TRUNCATE REPLACE_SYMLINKAT REPLACE_SYMLINK REPLACE_SLEEP REPLACE_RMDIR REPLACE_READLINKAT REPLACE_READLINK REPLACE_READ REPLACE_PWRITE REPLACE_PREAD REPLACE_LSEEK REPLACE_LINKAT REPLACE_LINK REPLACE_LCHOWN REPLACE_ISATTY REPLACE_GETPASS_FOR_GETPASS_GNU REPLACE_GETPASS REPLACE_GETPAGESIZE REPLACE_GETGROUPS REPLACE_GETLOGIN_R REPLACE_GETDTABLESIZE REPLACE_GETDOMAINNAME REPLACE_GETCWD REPLACE_FTRUNCATE REPLACE_FCHOWNAT REPLACE_FACCESSAT REPLACE_EXECVPE REPLACE_EXECVP REPLACE_EXECVE REPLACE_EXECV REPLACE_EXECLP REPLACE_EXECLE REPLACE_EXECL REPLACE_DUP2 REPLACE_DUP REPLACE_COPY_FILE_RANGE REPLACE_CLOSE REPLACE_CHOWN REPLACE_ACCESS HAVE_SYS_PARAM_H HAVE_OS_H HAVE_DECL_TTYNAME_R HAVE_DECL_TRUNCATE HAVE_DECL_SETHOSTNAME HAVE_DECL_GETUSERSHELL HAVE_DECL_GETPAGESIZE HAVE_DECL_GETLOGIN_R HAVE_DECL_GETLOGIN HAVE_DECL_GETDOMAINNAME HAVE_DECL_FDATASYNC HAVE_DECL_FCHDIR HAVE_DECL_EXECVPE HAVE_DECL_ENVIRON HAVE_USLEEP HAVE_UNLINKAT HAVE_SYMLINKAT HAVE_SYMLINK HAVE_SLEEP HAVE_SETHOSTNAME HAVE_READLINKAT HAVE_READLINK HAVE_PWRITE HAVE_PREAD HAVE_PIPE2 HAVE_PIPE HAVE_LINKAT HAVE_LINK HAVE_LCHOWN HAVE_GROUP_MEMBER HAVE_GETPASS HAVE_GETPAGESIZE HAVE_GETLOGIN HAVE_GETHOSTNAME HAVE_GETGROUPS HAVE_GETENTROPY HAVE_GETDTABLESIZE HAVE_FTRUNCATE HAVE_FSYNC HAVE_FDATASYNC HAVE_FCHOWNAT HAVE_FCHDIR HAVE_FACCESSAT HAVE_EXECVPE HAVE_EUIDACCESS HAVE_DUP3 HAVE_COPY_FILE_RANGE HAVE_CHOWN GL_COND_LIBTOOL_FALSE GL_COND_LIBTOOL_TRUE YFLAGS YACC LEX_OUTPUT_ROOT LEXLIB LEX LT_SYS_LIBRARY_PATH OTOOL64 OTOOL LIPO NMEDIT DSYMUTIL MANIFEST_TOOL ac_ct_AR DLLTOOL OBJDUMP LN_S NM ac_ct_DUMPBIN DUMPBIN LD FGREP SED LIBTOOL RANLIB ARFLAGS AR EGREP GREP CPP am__fastdepCC_FALSE am__fastdepCC_TRUE CCDEPMODE am__nodep AMDEPBACKSLASH AMDEP_FALSE AMDEP_TRUE am__include DEPDIR OBJEXT EXEEXT ac_ct_CC CPPFLAGS LDFLAGS CFLAGS CC host_os host_vendor host_cpu host build_os build_vendor build_cpu build AM_BACKSLASH AM_DEFAULT_VERBOSITY AM_DEFAULT_V AM_V CSCOPE ETAGS CTAGS am__untar am__tar AMTAR am__leading_dot SET_MAKE AWK mkdir_p MKDIR_P INSTALL_STRIP_PROGRAM STRIP install_sh MAKEINFO AUTOHEADER AUTOMAKE AUTOCONF ACLOCAL VERSION PACKAGE CYGPATH_W am__isrc INSTALL_DATA INSTALL_SCRIPT INSTALL_PROGRAM target_alias host_alias build_alias LIBS ECHO_T ECHO_N ECHO_C DEFS mandir localedir libdir psdir pdfdir dvidir htmldir infodir docdir oldincludedir includedir 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 am__quote' ac_subst_files='' ac_user_opts=' enable_option_checking enable_silent_rules enable_dependency_tracking enable_largefile enable_year2038 enable_threads enable_shared enable_static with_pic enable_fast_install with_aix_soname with_gnu_ld with_sysroot enable_libtool_lock enable_cross_guesses enable_acl enable_rpath with_libreadline_prefix with_included_regex with_selinux with_packager with_packager_version with_packager_bug_reports enable_encryption with_libgcrypt_prefix with_bash_headers enable_bash_builtins enable_nls with_libiconv_prefix with_libintl_prefix enable_coverage ' ac_precious_vars='build_alias host_alias target_alias CC CFLAGS LDFLAGS LIBS CPPFLAGS CPP LT_SYS_LIBRARY_PATH LEX LEXLIB LEX_OUTPUT_ROOT YACC YFLAGS PKG_CONFIG PKG_CONFIG_PATH PKG_CONFIG_LIBDIR CHECK_CFLAGS CHECK_LIBS GLIB_CFLAGS GLIB_LIBS' # 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 GNU recutils 1.9 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/recutils] --htmldir=DIR html documentation [DOCDIR] --dvidir=DIR dvi documentation [DOCDIR] --pdfdir=DIR pdf documentation [DOCDIR] --psdir=DIR ps documentation [DOCDIR] _ACEOF cat <<\_ACEOF Program names: --program-prefix=PREFIX prepend PREFIX to installed program names --program-suffix=SUFFIX append SUFFIX to installed program names --program-transform-name=PROGRAM run sed PROGRAM on installed program names System types: --build=BUILD configure for building on BUILD [guessed] --host=HOST cross-compile to build programs to run on HOST [BUILD] _ACEOF fi if test -n "$ac_init_help"; then case $ac_init_help in short | recursive ) echo "Configuration of GNU recutils 1.9:";; esac cat <<\_ACEOF Optional Features: --disable-option-checking ignore unrecognized --enable/--with options --disable-FEATURE do not include FEATURE (same as --enable-FEATURE=no) --enable-FEATURE[=ARG] include FEATURE [ARG=yes] --enable-silent-rules less verbose build output (undo: "make V=1") --disable-silent-rules verbose build output (undo: "make V=0") --enable-dependency-tracking do not reject slow dependency extractors --disable-dependency-tracking speeds up one-time build --disable-largefile omit support for large files --disable-year2038 omit support for timestamps past the year 2038 --enable-threads={isoc|posix|isoc+posix|windows} specify multithreading API --disable-threads build without multithread safety --enable-shared[=PKGS] build shared libraries [default=yes] --enable-static[=PKGS] build static libraries [default=yes] --enable-fast-install[=PKGS] optimize for fast installation [default=yes] --disable-libtool-lock avoid locking (might break parallel builds) --enable-cross-guesses={conservative|risky} specify policy for cross-compilation guesses --disable-acl do not support ACLs --disable-rpath do not hardcode runtime library paths --enable-encryption Compile recutils with encryption support (default is YES) --enable-bash-builtins Build the recutils bash builtins (default is YES) --disable-nls do not use Native Language Support --enable-coverage Compile the library with code coverage support (default is NO) Optional Packages: --with-PACKAGE[=ARG] use PACKAGE [ARG=yes] --without-PACKAGE do not use PACKAGE (same as --with-PACKAGE=no) --with-pic[=PKGS] try to use only PIC/non-PIC objects [default=use both] --with-aix-soname=aix|svr4|both shared library versioning (aka "SONAME") variant to provide on AIX, [default=aix]. --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-sysroot[=DIR] Search for dependent libraries within DIR (or the compiler's sysroot if not specified). --with-gnu-ld assume the C compiler uses GNU ld [default=no] --with-libreadline-prefix[=DIR] search for libreadline in DIR/include and DIR/lib --without-libreadline-prefix don't search for libreadline in includedir and libdir --without-included-regex don't compile regex; this is the default on systems with recent-enough versions of the GNU C Library (use with caution on other systems). --without-selinux do not use SELinux, even on systems with SELinux --with-packager String identifying the packager of this software --with-packager-version Packager-specific version information --with-packager-bug-reports Packager info for bug reports (URL/e-mail/...) --with-libgcrypt-prefix[=DIR] search for libgcrypt in DIR/include and DIR/lib --without-libgcrypt-prefix don't search for libgcrypt in includedir and libdir --with-bash-headers location of the bash header files (default is /usr/include/bash) --with-libiconv-prefix[=DIR] search for libiconv in DIR/include and DIR/lib --without-libiconv-prefix don't search for libiconv in includedir and libdir --with-libintl-prefix[=DIR] search for libintl in DIR/include and DIR/lib --without-libintl-prefix don't search for libintl in includedir and libdir Some influential environment variables: CC C compiler command CFLAGS C compiler flags LDFLAGS linker flags, e.g. -L<lib dir> if you have libraries in a nonstandard directory <lib dir> LIBS libraries to pass to the linker, e.g. -l<library> CPPFLAGS (Objective) C/C++ preprocessor flags, e.g. -I<include dir> if you have headers in a nonstandard directory <include dir> CPP C preprocessor LT_SYS_LIBRARY_PATH User-defined run-time library search path. LEX The flex implementation to use. LEXLIB Options for linking with the flex runtime library. LEX_OUTPUT_ROOT Base of the file name that the lexer generates. YACC The "Yet Another C Compiler" implementation to use. Defaults to 'bison -o y.tab.c'. Values other than 'bison -o y.tab.c' will most likely break on most systems. YFLAGS YFLAGS contains the list arguments that will be passed by default to Bison. This script will default YFLAGS to the empty string to avoid a default value of '-d' given by some make applications. PKG_CONFIG path to pkg-config utility PKG_CONFIG_PATH directories to add to pkg-config's search path PKG_CONFIG_LIBDIR path overriding pkg-config's built-in search path CHECK_CFLAGS C compiler flags for CHECK, overriding pkg-config CHECK_LIBS linker flags for CHECK, overriding pkg-config GLIB_CFLAGS C compiler flags for GLIB, overriding pkg-config GLIB_LIBS linker flags for GLIB, overriding pkg-config 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 <bug-recutils@gnu.org>. GNU recutils home page: <https://www.gnu.org/software/recutils/>. General help using GNU software: <https://www.gnu.org/gethelp/>. _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 GNU recutils configure 1.9 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 <limits.h> declares $2. For example, HP-UX 11i <limits.h> declares gettimeofday. */ #define $2 innocuous_$2 /* System header to define __stub macros and hopefully few prototypes, which can conflict with char $2 (); below. */ #include <limits.h> #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_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_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 () { ac_save_ac_compile="$ac_compile" if test -n "$ac_compile_for_check_decl"; then ac_compile="$ac_compile_for_check_decl" fi 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_compile="$ac_save_ac_compile" } # ac_fn_check_decl # ac_fn_c_compute_int LINENO EXPR VAR INCLUDES # -------------------------------------------- # Tries to find the compile-time value of EXPR in a program that includes # INCLUDES, setting VAR accordingly. Returns whether the value could be # computed ac_fn_c_compute_int () { as_lineno=${as_lineno-"$1"} as_lineno_stack=as_lineno_stack=$as_lineno_stack if test "$cross_compiling" = yes; then # Depending upon the size, compute the lo and hi bounds. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) >= 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_lo=0 ac_mid=0 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid; break else $as_nop as_fn_arith $ac_mid + 1 && ac_lo=$as_val if test $ac_lo -le $ac_mid; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid + 1 && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) < 0)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=-1 ac_mid=-1 while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) >= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_lo=$ac_mid; break else $as_nop as_fn_arith '(' $ac_mid ')' - 1 && ac_hi=$as_val if test $ac_mid -le $ac_hi; then ac_lo= ac_hi= break fi as_fn_arith 2 '*' $ac_mid && ac_mid=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done else $as_nop ac_lo= ac_hi= 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 # Binary search between lo and hi bounds. while test "x$ac_lo" != "x$ac_hi"; do as_fn_arith '(' $ac_hi - $ac_lo ')' / 2 + $ac_lo && ac_mid=$as_val cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 int main (void) { static int test_array [1 - 2 * !(($2) <= $ac_mid)]; test_array [0] = 0; return test_array [0]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_hi=$ac_mid else $as_nop as_fn_arith '(' $ac_mid ')' + 1 && ac_lo=$as_val fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext done case $ac_lo in #(( ?*) eval "$3=\$ac_lo"; ac_retval=0 ;; '') ac_retval=1 ;; esac else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $4 static long int longval (void) { return $2; } static unsigned long int ulongval (void) { return $2; } #include <stdio.h> #include <stdlib.h> int main (void) { FILE *f = fopen ("conftest.val", "w"); if (! f) return 1; if (($2) < 0) { long int i = longval (); if (i != ($2)) return 1; fprintf (f, "%ld", i); } else { unsigned long int i = ulongval (); if (i != ($2)) return 1; fprintf (f, "%lu", i); } /* Do not output a trailing newline, as this causes \r\n confusion on some platforms. */ return ferror (f) || fclose (f) != 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : echo >>conftest.val; read $3 <conftest.val; ac_retval=0 else $as_nop ac_retval=1 fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext rm -f conftest.val fi eval $as_lineno_stack; ${as_lineno_stack:+:} unset as_lineno as_fn_set_status $ac_retval } # ac_fn_c_compute_int # 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 GNU recutils $as_me 1.9, 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 <stddef.h> #include <stdarg.h> 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 <stdbool.h> 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 " wchar.h wchar_h HAVE_WCHAR_H" as_fn_append ac_header_c_list " minix/config.h minix_config_h HAVE_MINIX_CONFIG_H" as_fn_append ac_func_c_list " fchmod HAVE_FCHMOD" as_fn_append ac_func_c_list " btowc HAVE_BTOWC" as_fn_append ac_func_c_list " canonicalize_file_name HAVE_CANONICALIZE_FILE_NAME" as_fn_append ac_func_c_list " faccessat HAVE_FACCESSAT" as_fn_append ac_func_c_list " realpath HAVE_REALPATH" as_fn_append ac_func_c_list " lstat HAVE_LSTAT" as_fn_append ac_header_c_list " sys/param.h sys_param_h HAVE_SYS_PARAM_H" as_fn_append ac_func_c_list " _set_invalid_parameter_handler HAVE__SET_INVALID_PARAMETER_HANDLER" as_fn_append ac_header_c_list " sys/socket.h sys_socket_h HAVE_SYS_SOCKET_H" as_fn_append ac_func_c_list " fchdir HAVE_FCHDIR" as_fn_append ac_header_c_list " dirent.h dirent_h HAVE_DIRENT_H" as_fn_append ac_func_c_list " explicit_bzero HAVE_EXPLICIT_BZERO" as_fn_append ac_func_c_list " memset_s HAVE_MEMSET_S" as_fn_append ac_func_c_list " fcntl HAVE_FCNTL" as_fn_append ac_func_c_list " symlink HAVE_SYMLINK" as_fn_append ac_func_c_list " fdopendir HAVE_FDOPENDIR" as_fn_append ac_func_c_list " mempcpy HAVE_MEMPCPY" as_fn_append ac_func_c_list " flock HAVE_FLOCK" as_fn_append ac_header_c_list " stdio_ext.h stdio_ext_h HAVE_STDIO_EXT_H" as_fn_append ac_func_c_list " vasnprintf HAVE_VASNPRINTF" as_fn_append ac_header_c_list " features.h features_h HAVE_FEATURES_H" as_fn_append ac_func_c_list " snprintf HAVE_SNPRINTF" as_fn_append ac_func_c_list " __fseterr HAVE___FSETERR" as_fn_append ac_func_c_list " fstatat HAVE_FSTATAT" as_fn_append ac_func_c_list " __fwriting HAVE___FWRITING" as_fn_append ac_func_c_list " getdelim HAVE_GETDELIM" as_fn_append ac_func_c_list " getdtablesize HAVE_GETDTABLESIZE" gl_getopt_required=GNU as_fn_append ac_header_c_list " getopt.h getopt_h HAVE_GETOPT_H" as_fn_append ac_header_c_list " sys/cdefs.h sys_cdefs_h HAVE_SYS_CDEFS_H" as_fn_append ac_func_c_list " getpass HAVE_GETPASS" as_fn_append ac_header_c_list " termios.h termios_h HAVE_TERMIOS_H" as_fn_append ac_func_c_list " __fsetlocking HAVE___FSETLOCKING" as_fn_append ac_func_c_list " getprogname HAVE_GETPROGNAME" as_fn_append ac_func_c_list " getexecname HAVE_GETEXECNAME" as_fn_append ac_func_c_list " getrandom HAVE_GETRANDOM" as_fn_append ac_func_c_list " timespec_get HAVE_TIMESPEC_GET" as_fn_append ac_header_c_list " sys/time.h sys_time_h HAVE_SYS_TIME_H" as_fn_append ac_func_c_list " gettimeofday HAVE_GETTIMEOFDAY" as_fn_append ac_header_c_list " threads.h threads_h HAVE_THREADS_H" as_fn_append ac_header_c_list " limits.h limits_h HAVE_LIMITS_H" as_fn_append ac_header_c_list " langinfo.h langinfo_h HAVE_LANGINFO_H" as_fn_append ac_header_c_list " xlocale.h xlocale_h HAVE_XLOCALE_H" as_fn_append ac_header_c_list " math.h math_h HAVE_MATH_H" as_fn_append ac_func_c_list " mbsinit HAVE_MBSINIT" as_fn_append ac_func_c_list " mbrtowc HAVE_MBRTOWC" as_fn_append ac_func_c_list " mbrlen HAVE_MBRLEN" as_fn_append ac_header_c_list " sys/mman.h sys_mman_h HAVE_SYS_MMAN_H" as_fn_append ac_func_c_list " mprotect HAVE_MPROTECT" as_fn_append ac_func_c_list " mkostemp HAVE_MKOSTEMP" as_fn_append ac_func_c_list " mkstemp HAVE_MKSTEMP" as_fn_append ac_func_c_list " nl_langinfo HAVE_NL_LANGINFO" as_fn_append ac_func_c_list " openat HAVE_OPENAT" as_fn_append ac_func_c_list " pipe HAVE_PIPE" as_fn_append ac_func_c_list " posix_spawn_file_actions_addchdir_np HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP" as_fn_append ac_func_c_list " posix_spawn_file_actions_addchdir HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR" gl_printf_safe=yes as_fn_append ac_func_c_list " readlink HAVE_READLINK" as_fn_append ac_header_c_list " malloc.h malloc_h HAVE_MALLOC_H" as_fn_append ac_func_c_list " isblank HAVE_ISBLANK" as_fn_append ac_func_c_list " iswctype HAVE_ISWCTYPE" as_fn_append ac_func_c_list " link HAVE_LINK" as_fn_append ac_func_c_list " secure_getenv HAVE_SECURE_GETENV" as_fn_append ac_func_c_list " getuid HAVE_GETUID" as_fn_append ac_func_c_list " geteuid HAVE_GETEUID" as_fn_append ac_func_c_list " getgid HAVE_GETGID" as_fn_append ac_func_c_list " getegid HAVE_GETEGID" as_fn_append ac_header_c_list " selinux/selinux.h selinux_selinux_h HAVE_SELINUX_SELINUX_H" as_fn_append ac_func_c_list " setenv HAVE_SETENV" as_fn_append ac_func_c_list " sigaction HAVE_SIGACTION" as_fn_append ac_func_c_list " sigaltstack HAVE_SIGALTSTACK" as_fn_append ac_func_c_list " siginterrupt HAVE_SIGINTERRUPT" as_fn_append ac_header_c_list " spawn.h spawn_h HAVE_SPAWN_H" as_fn_append ac_header_c_list " sys/file.h sys_file_h HAVE_SYS_FILE_H" as_fn_append ac_header_c_list " sys/random.h sys_random_h HAVE_SYS_RANDOM_H" as_fn_append ac_header_c_list " sys/wait.h sys_wait_h HAVE_SYS_WAIT_H" as_fn_append ac_func_c_list " localtime_r HAVE_LOCALTIME_R" as_fn_append ac_func_c_list " timegm HAVE_TIMEGM" as_fn_append ac_header_c_list " utime.h utime_h HAVE_UTIME_H" as_fn_append ac_func_c_list " futimes HAVE_FUTIMES" as_fn_append ac_func_c_list " futimesat HAVE_FUTIMESAT" as_fn_append ac_func_c_list " futimens HAVE_FUTIMENS" as_fn_append ac_func_c_list " utimensat HAVE_UTIMENSAT" as_fn_append ac_func_c_list " lutimes HAVE_LUTIMES" as_fn_append ac_header_c_list " crtdefs.h crtdefs_h HAVE_CRTDEFS_H" as_fn_append ac_func_c_list " wcrtomb HAVE_WCRTOMB" as_fn_append ac_func_c_list " wctob HAVE_WCTOB" as_fn_append ac_func_c_list " iswcntrl HAVE_ISWCNTRL" as_fn_append ac_header_c_list " wctype.h wctype_h HAVE_WCTYPE_H" gt_needs="$gt_needs " # Auxiliary files required by this configure script. ac_aux_files="config.rpath ltmain.sh compile config.guess config.sub missing install-sh" # Locations in which to look for auxiliary files. ac_aux_dir_candidates="${srcdir}/build-aux" # Search for a directory containing all of the required auxiliary files, # $ac_aux_files, from the $PATH-style list $ac_aux_dir_candidates. # If we don't find one directory that contains all the files we need, # we report the set of missing files from the *first* directory in # $ac_aux_dir_candidates and give up. ac_missing_aux_files="" ac_first_candidate=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: looking for aux files: $ac_aux_files" >&5 as_save_IFS=$IFS; IFS=$PATH_SEPARATOR as_found=false for as_dir in $ac_aux_dir_candidates do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac as_found=: printf "%s\n" "$as_me:${as_lineno-$LINENO}: trying $as_dir" >&5 ac_aux_dir_found=yes ac_install_sh= for ac_aux in $ac_aux_files do # As a special case, if "install-sh" is required, that requirement # can be satisfied by any of "install-sh", "install.sh", or "shtool", # and $ac_install_sh is set appropriately for whichever one is found. if test x"$ac_aux" = x"install-sh" then if test -f "${as_dir}install-sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install-sh found" >&5 ac_install_sh="${as_dir}install-sh -c" elif test -f "${as_dir}install.sh"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}install.sh found" >&5 ac_install_sh="${as_dir}install.sh -c" elif test -f "${as_dir}shtool"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}shtool found" >&5 ac_install_sh="${as_dir}shtool install -c" else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} install-sh" else break fi fi else if test -f "${as_dir}${ac_aux}"; then printf "%s\n" "$as_me:${as_lineno-$LINENO}: ${as_dir}${ac_aux} found" >&5 else ac_aux_dir_found=no if $ac_first_candidate; then ac_missing_aux_files="${ac_missing_aux_files} ${ac_aux}" else break fi fi fi done if test "$ac_aux_dir_found" = yes; then ac_aux_dir="$as_dir" break fi ac_first_candidate=false as_found=false done IFS=$as_save_IFS if $as_found then : else $as_nop as_fn_error $? "cannot find required auxiliary files:$ac_missing_aux_files" "$LINENO" 5 fi # These three variables are undocumented and unsupported, # and are intended to be withdrawn in a future Autoconf release. # They can cause serious problems if a builder's source tree is in a directory # whose full name contains unusual characters. if test -f "${ac_aux_dir}config.guess"; then ac_config_guess="$SHELL ${ac_aux_dir}config.guess" fi if test -f "${ac_aux_dir}config.sub"; then ac_config_sub="$SHELL ${ac_aux_dir}config.sub" fi if test -f "$ac_aux_dir/configure"; then ac_configure="$SHELL ${ac_aux_dir}configure" fi # Check that the precious variables saved in the cache have kept the same # value. ac_cache_corrupted=false for ac_var in $ac_precious_vars; do eval ac_old_set=\$ac_cv_env_${ac_var}_set eval ac_new_set=\$ac_env_${ac_var}_set eval ac_old_val=\$ac_cv_env_${ac_var}_value eval ac_new_val=\$ac_env_${ac_var}_value case $ac_old_set,$ac_new_set in set,) { 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 am__api_version='1.16' # Find a good install program. We prefer a C program (faster), # so one script is as good as another. But avoid the broken or # incompatible versions: # SysV /etc/install, /usr/sbin/install # SunOS /usr/etc/install # IRIX /sbin/install # AIX /bin/install # AmigaOS /C/install, which installs bootblocks on floppy discs # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag # AFS /usr/afsws/bin/install, which mishandles nonexistent args # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # OS/2's system install, which has a completely different semantic # ./install, which can be erroneously created by make from ./install.sh. # Reject install programs that cannot install multiple files. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a BSD-compatible install" >&5 printf %s "checking for a BSD-compatible install... " >&6; } if test -z "$INSTALL"; then if test ${ac_cv_path_install+y} then : printf %s "(cached) " >&6 else $as_nop 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 # Account for fact that we put trailing slashes in our PATH walk. case $as_dir in #(( ./ | /[cC]/* | \ /etc/* | /usr/sbin/* | /usr/etc/* | /sbin/* | /usr/afsws/bin/* | \ ?:[\\/]os2[\\/]install[\\/]* | ?:[\\/]OS2[\\/]INSTALL[\\/]* | \ /usr/ucb/* ) ;; *) # OSF1 and SCO ODT 3.0 have their own names for install. # Don't use installbsd from OSF since it installs stuff as root # by default. for ac_prog in ginstall scoinst install; do for ac_exec_ext in '' $ac_executable_extensions; do if as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext"; then if test $ac_prog = install && grep dspmsg "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # AIX install. It has an incompatible calling convention. : elif test $ac_prog = install && grep pwplus "$as_dir$ac_prog$ac_exec_ext" >/dev/null 2>&1; then # program-specific install script used by HP pwplus--don't use. : else rm -rf conftest.one conftest.two conftest.dir echo one > conftest.one echo two > conftest.two mkdir conftest.dir if "$as_dir$ac_prog$ac_exec_ext" -c conftest.one conftest.two "`pwd`/conftest.dir/" && test -s conftest.one && test -s conftest.two && test -s conftest.dir/conftest.one && test -s conftest.dir/conftest.two then ac_cv_path_install="$as_dir$ac_prog$ac_exec_ext -c" break 3 fi fi fi done done ;; esac done IFS=$as_save_IFS rm -rf conftest.one conftest.two conftest.dir fi if test ${ac_cv_path_install+y}; then INSTALL=$ac_cv_path_install else # As a last resort, use the slow shell script. Don't cache a # value for INSTALL within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. INSTALL=$ac_install_sh fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $INSTALL" >&5 printf "%s\n" "$INSTALL" >&6; } # Use test -z because SunOS4 sh mishandles braces in ${var-val}. # It thinks the first close brace ends the variable substitution. test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL}' test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether build environment is sane" >&5 printf %s "checking whether build environment is sane... " >&6; } # Reject unsafe characters in $srcdir or the absolute working directory # name. Accept space and tab only in the latter. am_lf=' ' case `pwd` in *[\\\"\#\$\&\'\`$am_lf]*) as_fn_error $? "unsafe absolute working directory name" "$LINENO" 5;; esac case $srcdir in *[\\\"\#\$\&\'\`$am_lf\ \ ]*) as_fn_error $? "unsafe srcdir value: '$srcdir'" "$LINENO" 5;; esac # Do 'set' in a subshell so we don't clobber the current shell's # arguments. Must try -L first in case configure is actually a # symlink; some systems play weird games with the mod time of symlinks # (eg FreeBSD returns the mod time of the symlink's containing # directory). if ( am_has_slept=no for am_try in 1 2; do echo "timestamp, slept: $am_has_slept" > conftest.file set X `ls -Lt "$srcdir/configure" conftest.file 2> /dev/null` if test "$*" = "X"; then # -L didn't work. set X `ls -t "$srcdir/configure" conftest.file` fi if test "$*" != "X $srcdir/configure conftest.file" \ && test "$*" != "X conftest.file $srcdir/configure"; then # If neither matched, then we have a broken ls. This can happen # if, for instance, CONFIG_SHELL is bash and it inherits a # broken ls alias from the environment. This has actually # happened. Such a system could not be considered "sane". as_fn_error $? "ls -t appears to fail. Make sure there is not a broken alias in your environment" "$LINENO" 5 fi if test "$2" = conftest.file || test $am_try -eq 2; then break fi # Just in case. sleep 1 am_has_slept=yes done test "$2" = conftest.file ) then # Ok. : else as_fn_error $? "newly created file is older than distributed files! Check your system clock" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } # If we didn't sleep, we still need to ensure time stamps of config.status and # generated files are strictly newer. am_sleep_pid= if grep 'slept: no' conftest.file >/dev/null 2>&1; then ( sleep 1 ) & am_sleep_pid=$! fi rm -f conftest.file test "$program_prefix" != NONE && program_transform_name="s&^&$program_prefix&;$program_transform_name" # Use a double $ so make ignores it. test "$program_suffix" != NONE && program_transform_name="s&\$&$program_suffix&;$program_transform_name" # Double any \ or $. # By default was `s,x,x', remove it if useless. ac_script='s/[\\$]/&&/g;s/;s,x,x,$//' program_transform_name=`printf "%s\n" "$program_transform_name" | sed "$ac_script"` # Expand $ac_aux_dir to an absolute path. am_aux_dir=`cd "$ac_aux_dir" && pwd` if test x"${MISSING+set}" != xset; then MISSING="\${SHELL} '$am_aux_dir/missing'" fi # Use eval to expand $SHELL if eval "$MISSING --is-lightweight"; then am_missing_run="$MISSING " else am_missing_run= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: 'missing' script is too old or missing" >&5 printf "%s\n" "$as_me: WARNING: 'missing' script is too old or missing" >&2;} fi if test x"${install_sh+set}" != xset; then case $am_aux_dir in *\ * | *\ *) install_sh="\${SHELL} '$am_aux_dir/install-sh'" ;; *) install_sh="\${SHELL} $am_aux_dir/install-sh" esac fi # Installed binaries are usually stripped using 'strip' when the user # run "make install-strip". However 'strip' might not be the right # tool to use in cross-compilation environments, therefore Automake # will honor the 'STRIP' environment variable to overrule this program. if test "$cross_compiling" != no; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { 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_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS 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_STRIP="${ac_tool_prefix}strip" 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 STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&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_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { 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_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS 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_STRIP="strip" 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_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" 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 STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi fi INSTALL_STRIP_PROGRAM="\$(install_sh) -c -s" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a race-free mkdir -p" >&5 printf %s "checking for a race-free mkdir -p... " >&6; } if test -z "$MKDIR_P"; then if test ${ac_cv_path_mkdir+y} then : printf %s "(cached) " >&6 else $as_nop as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH$PATH_SEPARATOR/opt/sfw/bin do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in mkdir gmkdir; do for ac_exec_ext in '' $ac_executable_extensions; do as_fn_executable_p "$as_dir$ac_prog$ac_exec_ext" || continue case `"$as_dir$ac_prog$ac_exec_ext" --version 2>&1` in #( 'mkdir ('*'coreutils) '* | \ 'BusyBox '* | \ 'mkdir (fileutils) '4.1*) ac_cv_path_mkdir=$as_dir$ac_prog$ac_exec_ext break 3;; esac done done done IFS=$as_save_IFS fi test -d ./--version && rmdir ./--version if test ${ac_cv_path_mkdir+y}; then MKDIR_P="$ac_cv_path_mkdir -p" else # As a last resort, use the slow shell script. Don't cache a # value for MKDIR_P within a source directory, because that will # break other packages using the cache if that directory is # removed, or if the value is a relative name. MKDIR_P="$ac_install_sh -d" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MKDIR_P" >&5 printf "%s\n" "$MKDIR_P" >&6; } for ac_prog in gawk mawk nawk awk do # Extract the first word of "$ac_prog", so it can be a program name with args. set dummy $ac_prog; ac_word=$2 { 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_AWK+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$AWK"; then ac_cv_prog_AWK="$AWK" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS 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_AWK="$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 AWK=$ac_cv_prog_AWK if test -n "$AWK"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $AWK" >&5 printf "%s\n" "$AWK" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$AWK" && break done { 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 rm -rf .tst 2>/dev/null mkdir .tst 2>/dev/null if test -d .tst; then am__leading_dot=. else am__leading_dot=_ fi rmdir .tst 2>/dev/null # Check whether --enable-silent-rules was given. if test ${enable_silent_rules+y} then : enableval=$enable_silent_rules; fi case $enable_silent_rules in # ((( yes) AM_DEFAULT_VERBOSITY=0;; no) AM_DEFAULT_VERBOSITY=1;; *) AM_DEFAULT_VERBOSITY=1;; esac am_make=${MAKE-make} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $am_make supports nested variables" >&5 printf %s "checking whether $am_make supports nested variables... " >&6; } if test ${am_cv_make_support_nested_variables+y} then : printf %s "(cached) " >&6 else $as_nop if printf "%s\n" 'TRUE=$(BAR$(V)) BAR0=false BAR1=true V=1 am__doit: @$(TRUE) .PHONY: am__doit' | $am_make -f - >/dev/null 2>&1; then am_cv_make_support_nested_variables=yes else am_cv_make_support_nested_variables=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_make_support_nested_variables" >&5 printf "%s\n" "$am_cv_make_support_nested_variables" >&6; } if test $am_cv_make_support_nested_variables = yes; then AM_V='$(V)' AM_DEFAULT_V='$(AM_DEFAULT_VERBOSITY)' else AM_V=$AM_DEFAULT_VERBOSITY AM_DEFAULT_V=$AM_DEFAULT_VERBOSITY fi AM_BACKSLASH='\' if test "`cd $srcdir && pwd`" != "`pwd`"; then # Use -I$(srcdir) only when $(srcdir) != ., so that make's output # is not polluted with repeated "-I." am__isrc=' -I$(srcdir)' # test to see if srcdir already configured if test -f $srcdir/config.status; then as_fn_error $? "source directory already configured; run \"make distclean\" there first" "$LINENO" 5 fi fi # test whether we have cygpath if test -z "$CYGPATH_W"; then if (cygpath --version) >/dev/null 2>/dev/null; then CYGPATH_W='cygpath -w' else CYGPATH_W=echo fi fi # Define the identity of the package. PACKAGE='recutils' VERSION='1.9' printf "%s\n" "#define PACKAGE \"$PACKAGE\"" >>confdefs.h printf "%s\n" "#define VERSION \"$VERSION\"" >>confdefs.h # Some tools Automake needs. ACLOCAL=${ACLOCAL-"${am_missing_run}aclocal-${am__api_version}"} AUTOCONF=${AUTOCONF-"${am_missing_run}autoconf"} AUTOMAKE=${AUTOMAKE-"${am_missing_run}automake-${am__api_version}"} AUTOHEADER=${AUTOHEADER-"${am_missing_run}autoheader"} MAKEINFO=${MAKEINFO-"${am_missing_run}makeinfo"} # For better backward compatibility. To be removed once Automake 1.9.x # dies out for good. For more background, see: # <https://lists.gnu.org/archive/html/automake/2012-07/msg00001.html> # <https://lists.gnu.org/archive/html/automake/2012-07/msg00014.html> mkdir_p='$(MKDIR_P)' # We need awk for the "check" target (and possibly the TAP driver). The # system "awk" is bad on some platforms. # Always define AMTAR for backward compatibility. Yes, it's still used # in the wild :-( We should find a proper way to deprecate it ... AMTAR='$${TAR-tar}' # We'll loop over all known methods to create a tar archive until one works. _am_tools='gnutar pax cpio none' am__tar='$${TAR-tar} chof - "$$tardir"' am__untar='$${TAR-tar} xf -' # Variables for tags utilities; see am/tags.am if test -z "$CTAGS"; then CTAGS=ctags fi if test -z "$ETAGS"; then ETAGS=etags fi if test -z "$CSCOPE"; then CSCOPE=cscope fi # POSIX will say in a future version that running "rm -f" with no argument # is OK; and we want to be able to make that assumption in our Makefile # recipes. So use an aggressive probe to check that the usage we want is # actually supported "in the wild" to an acceptable degree. # See automake bug#10828. # To make any issue more visible, cause the running configure to be aborted # by default if the 'rm' program in use doesn't match our expectations; the # user can still override this though. if rm -f && rm -fr && rm -rf; then : OK; else cat >&2 <<'END' Oops! Your 'rm' program seems unable to run without file operands specified on the command line, even when the '-f' option is present. This is contrary to the behaviour of most rm programs out there, and not conforming with the upcoming POSIX standard: <http://austingroupbugs.net/view.php?id=542> Please tell bug-automake@gnu.org about your system, including the value of your $PATH and any error possibly output before this message. This can help us improve future automake versions. END if test x"$ACCEPT_INFERIOR_RM_PROGRAM" = x"yes"; then echo 'Configuration will proceed anyway, since you have set the' >&2 echo 'ACCEPT_INFERIOR_RM_PROGRAM variable to "yes"' >&2 echo >&2 else cat >&2 <<'END' Aborting the configuration process, to ensure you take notice of the issue. You can download and install GNU coreutils to get an 'rm' implementation that behaves properly: <https://www.gnu.org/software/coreutils/>. If you want to complete the configuration process using your problematic 'rm' anyway, export the environment variable ACCEPT_INFERIOR_RM_PROGRAM to "yes", and re-run configure. END as_fn_error $? "Your 'rm' program is bad, sorry." "$LINENO" 5 fi fi ac_config_headers="$ac_config_headers src/config.h" # Make sure we can run config.sub. $SHELL "${ac_aux_dir}config.sub" sun4 >/dev/null 2>&1 || as_fn_error $? "cannot run $SHELL ${ac_aux_dir}config.sub" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking build system type" >&5 printf %s "checking build system type... " >&6; } if test ${ac_cv_build+y} then : printf %s "(cached) " >&6 else $as_nop ac_build_alias=$build_alias test "x$ac_build_alias" = x && ac_build_alias=`$SHELL "${ac_aux_dir}config.guess"` test "x$ac_build_alias" = x && as_fn_error $? "cannot guess build type; you must specify one" "$LINENO" 5 ac_cv_build=`$SHELL "${ac_aux_dir}config.sub" $ac_build_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $ac_build_alias failed" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_build" >&5 printf "%s\n" "$ac_cv_build" >&6; } case $ac_cv_build in *-*-*) ;; *) as_fn_error $? "invalid value of canonical build" "$LINENO" 5;; esac build=$ac_cv_build ac_save_IFS=$IFS; IFS='-' set x $ac_cv_build shift build_cpu=$1 build_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: build_os=$* IFS=$ac_save_IFS case $build_os in *\ *) build_os=`echo "$build_os" | sed 's/ /-/g'`;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking host system type" >&5 printf %s "checking host system type... " >&6; } if test ${ac_cv_host+y} then : printf %s "(cached) " >&6 else $as_nop if test "x$host_alias" = x; then ac_cv_host=$ac_cv_build else ac_cv_host=`$SHELL "${ac_aux_dir}config.sub" $host_alias` || as_fn_error $? "$SHELL ${ac_aux_dir}config.sub $host_alias failed" "$LINENO" 5 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_host" >&5 printf "%s\n" "$ac_cv_host" >&6; } case $ac_cv_host in *-*-*) ;; *) as_fn_error $? "invalid value of canonical host" "$LINENO" 5;; esac host=$ac_cv_host ac_save_IFS=$IFS; IFS='-' set x $ac_cv_host shift host_cpu=$1 host_vendor=$2 shift; shift # Remember, the first character of IFS is used to create $*, # except with old shells: host_os=$* IFS=$ac_save_IFS case $host_os in *\ *) host_os=`echo "$host_os" | sed 's/ /-/g'`;; esac if test -z "$AB_PACKAGE"; then AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE} fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: autobuild project... $AB_PACKAGE" >&5 printf "%s\n" "$as_me: autobuild project... $AB_PACKAGE" >&6;} if test -z "$AB_VERSION"; then AB_VERSION=${PACKAGE_VERSION:-$VERSION} fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: autobuild revision... $AB_VERSION" >&5 printf "%s\n" "$as_me: autobuild revision... $AB_VERSION" >&6;} hostname=`hostname` if test "$hostname"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: autobuild hostname... $hostname" >&5 printf "%s\n" "$as_me: autobuild hostname... $hostname" >&6;} fi date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ` if test "$?" != 0; then date=`date` fi if test "$date"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: autobuild timestamp... $date" >&5 printf "%s\n" "$as_me: autobuild timestamp... $date" >&6;} 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 <stdio.h> 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 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 whether $CC understands -c and -o together" >&5 printf %s "checking whether $CC understands -c and -o together... " >&6; } if test ${am_cv_prog_cc_c_o+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 # Make sure it works both with $CC and with simple cc. # Following AC_PROG_CC_C_O, we do the test twice because some # compilers refuse to overwrite an existing .o file with -o, # though they will create one. am_cv_prog_cc_c_o=yes for am_i in 1 2; do if { echo "$as_me:$LINENO: $CC -c conftest.$ac_ext -o conftest2.$ac_objext" >&5 ($CC -c conftest.$ac_ext -o conftest2.$ac_objext) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } \ && test -f conftest2.$ac_objext; then : OK else am_cv_prog_cc_c_o=no break fi done rm -f core conftest* unset am_i fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_prog_cc_c_o" >&5 printf "%s\n" "$am_cv_prog_cc_c_o" >&6; } if test "$am_cv_prog_cc_c_o" != yes; then # Losing compiler, so override with the script. # FIXME: It is wrong to rewrite CC. # But if we don't then we get into trouble of one sort or another. # A longer-term fix would be to have automake use am__CC in this case, # and then we could set am__CC="\$(top_srcdir)/compile \$(CC)" CC="$am_aux_dir/compile $CC" fi ac_ext=c ac_cpp='$CPP $CPPFLAGS' ac_compile='$CC -c $CFLAGS $CPPFLAGS conftest.$ac_ext >&5' ac_link='$CC -o conftest$ac_exeext $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS >&5' ac_compiler_gnu=$ac_cv_c_compiler_gnu { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler is clang" >&5 printf %s "checking whether the compiler is clang... " >&6; } if test ${gl_cv_compiler_clang+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __clang__ barfbarf #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_compiler_clang=no else $as_nop gl_cv_compiler_clang=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: $gl_cv_compiler_clang" >&5 printf "%s\n" "$gl_cv_compiler_clang" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compiler option needed when checking for declarations" >&5 printf %s "checking for compiler option needed when checking for declarations... " >&6; } if test ${gl_cv_compiler_check_decl_option+y} then : printf %s "(cached) " >&6 else $as_nop if test $gl_cv_compiler_clang = yes; then save_ac_compile="$ac_compile" ac_compile="$ac_compile -Werror=implicit-function-declaration" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration' else $as_nop gl_cv_compiler_check_decl_option=none fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_compile="$save_ac_compile" else gl_cv_compiler_check_decl_option=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_compiler_check_decl_option" >&5 printf "%s\n" "$gl_cv_compiler_check_decl_option" >&6; } if test "x$gl_cv_compiler_check_decl_option" != xnone; then ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option" else ac_compile_for_check_decl="$ac_compile" fi DEPDIR="${am__leading_dot}deps" ac_config_commands="$ac_config_commands depfiles" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ${MAKE-make} supports the include directive" >&5 printf %s "checking whether ${MAKE-make} supports the include directive... " >&6; } cat > confinc.mk << 'END' am__doit: @echo this is the am__doit target >confinc.out .PHONY: am__doit END am__include="#" am__quote= # BSD make does it like this. echo '.include "confinc.mk" # ignored' > confmf.BSD # Other make implementations (GNU, Solaris 10, AIX) do it like this. echo 'include confinc.mk # ignored' > confmf.GNU _am_result=no for s in GNU BSD; do { echo "$as_me:$LINENO: ${MAKE-make} -f confmf.$s && cat confinc.out" >&5 (${MAKE-make} -f confmf.$s && cat confinc.out) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } case $?:`cat confinc.out 2>/dev/null` in #( '0:this is the am__doit target') : case $s in #( BSD) : am__include='.include' am__quote='"' ;; #( *) : am__include='include' am__quote='' ;; esac ;; #( *) : ;; esac if test "$am__include" != "#"; then _am_result="yes ($s style)" break fi done rm -f confinc.* confmf.* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${_am_result}" >&5 printf "%s\n" "${_am_result}" >&6; } # Check whether --enable-dependency-tracking was given. if test ${enable_dependency_tracking+y} then : enableval=$enable_dependency_tracking; fi if test "x$enable_dependency_tracking" != xno; then am_depcomp="$ac_aux_dir/depcomp" AMDEPBACKSLASH='\' am__nodep='_no' fi if test "x$enable_dependency_tracking" != xno; then AMDEP_TRUE= AMDEP_FALSE='#' else AMDEP_TRUE='#' AMDEP_FALSE= fi depcc="$CC" am_compiler_list= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dependency style of $depcc" >&5 printf %s "checking dependency style of $depcc... " >&6; } if test ${am_cv_CC_dependencies_compiler_type+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$AMDEP_TRUE" && test -f "$am_depcomp"; then # We make a subdir and do the tests there. Otherwise we can end up # making bogus files that we don't know about and never remove. For # instance it was reported that on HP-UX the gcc test will end up # making a dummy file named 'D' -- because '-MD' means "put the output # in D". rm -rf conftest.dir mkdir conftest.dir # Copy depcomp to subdir because otherwise we won't find it if we're # using a relative directory. cp "$am_depcomp" conftest.dir cd conftest.dir # We will build objects and dependencies in a subdirectory because # it helps to detect inapplicable dependency modes. For instance # both Tru64's cc and ICC support -MD to output dependencies as a # side effect of compilation, but ICC will put the dependencies in # the current directory while Tru64 will put them in the object # directory. mkdir sub am_cv_CC_dependencies_compiler_type=none if test "$am_compiler_list" = ""; then am_compiler_list=`sed -n 's/^#*\([a-zA-Z0-9]*\))$/\1/p' < ./depcomp` fi am__universal=false case " $depcc " in #( *\ -arch\ *\ -arch\ *) am__universal=true ;; esac for depmode in $am_compiler_list; do # Setup a source with many dependencies, because some compilers # like to wrap large dependency lists on column 80 (with \), and # we should not choose a depcomp mode which is confused by this. # # We need to recreate these files for each test, as the compiler may # overwrite some of them when testing with obscure command lines. # This happens at least with the AIX C compiler. : > sub/conftest.c for i in 1 2 3 4 5 6; do echo '#include "conftst'$i'.h"' >> sub/conftest.c # Using ": > sub/conftst$i.h" creates only sub/conftst1.h with # Solaris 10 /bin/sh. echo '/* dummy */' > sub/conftst$i.h done echo "${am__include} ${am__quote}sub/conftest.Po${am__quote}" > confmf # We check with '-c' and '-o' for the sake of the "dashmstdout" # mode. It turns out that the SunPro C++ compiler does not properly # handle '-M -o', and we need to detect this. Also, some Intel # versions had trouble with output in subdirs. am__obj=sub/conftest.${OBJEXT-o} am__minus_obj="-o $am__obj" case $depmode in gcc) # This depmode causes a compiler race in universal mode. test "$am__universal" = false || continue ;; nosideeffect) # After this tag, mechanisms are not by side-effect, so they'll # only be used when explicitly requested. if test "x$enable_dependency_tracking" = xyes; then continue else break fi ;; msvc7 | msvc7msys | msvisualcpp | msvcmsys) # This compiler won't grok '-c -o', but also, the minuso test has # not run yet. These depmodes are late enough in the game, and # so weak that their functioning should not be impacted. am__obj=conftest.${OBJEXT-o} am__minus_obj= ;; none) break ;; esac if depmode=$depmode \ source=sub/conftest.c object=$am__obj \ depfile=sub/conftest.Po tmpdepfile=sub/conftest.TPo \ $SHELL ./depcomp $depcc -c $am__minus_obj sub/conftest.c \ >/dev/null 2>conftest.err && grep sub/conftst1.h sub/conftest.Po > /dev/null 2>&1 && grep sub/conftst6.h sub/conftest.Po > /dev/null 2>&1 && grep $am__obj sub/conftest.Po > /dev/null 2>&1 && ${MAKE-make} -s -f confmf > /dev/null 2>&1; then # icc doesn't choke on unknown options, it will just issue warnings # or remarks (even with -Werror). So we grep stderr for any message # that says an option was ignored or not supported. # When given -MP, icc 7.0 and 7.1 complain thusly: # icc: Command line warning: ignoring option '-M'; no argument required # The diagnosis changed in icc 8.0: # icc: Command line remark: option '-MP' not supported if (grep 'ignoring option' conftest.err || grep 'not supported' conftest.err) >/dev/null 2>&1; then :; else am_cv_CC_dependencies_compiler_type=$depmode break fi fi done cd .. rm -rf conftest.dir else am_cv_CC_dependencies_compiler_type=none fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_CC_dependencies_compiler_type" >&5 printf "%s\n" "$am_cv_CC_dependencies_compiler_type" >&6; } CCDEPMODE=depmode=$am_cv_CC_dependencies_compiler_type if test "x$enable_dependency_tracking" != xno \ && test "$am_cv_CC_dependencies_compiler_type" = gcc3; then am__fastdepCC_TRUE= am__fastdepCC_FALSE='#' else am__fastdepCC_TRUE='#' am__fastdepCC_FALSE= fi ac_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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether it is safe to define __EXTENSIONS__" >&5 printf %s "checking whether it is safe to define __EXTENSIONS__... " >&6; } if test ${ac_cv_safe_to_define___extensions__+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # define __EXTENSIONS__ 1 $ac_includes_default int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_safe_to_define___extensions__=yes else $as_nop ac_cv_safe_to_define___extensions__=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_safe_to_define___extensions__" >&5 printf "%s\n" "$ac_cv_safe_to_define___extensions__" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether _XOPEN_SOURCE should be defined" >&5 printf %s "checking whether _XOPEN_SOURCE should be defined... " >&6; } if test ${ac_cv_should_define__xopen_source+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_should_define__xopen_source=no if test $ac_cv_header_wchar_h = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE 500 #include <wchar.h> mbstate_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_should_define__xopen_source=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_should_define__xopen_source" >&5 printf "%s\n" "$ac_cv_should_define__xopen_source" >&6; } printf "%s\n" "#define _ALL_SOURCE 1" >>confdefs.h printf "%s\n" "#define _DARWIN_C_SOURCE 1" >>confdefs.h printf "%s\n" "#define _GNU_SOURCE 1" >>confdefs.h printf "%s\n" "#define _HPUX_ALT_XOPEN_SOCKET_API 1" >>confdefs.h printf "%s\n" "#define _NETBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _OPENBSD_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_PTHREAD_SEMANTICS 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_ATTRIBS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_BFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_DFP_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_FUNCS_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_IEC_60559_TYPES_EXT__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_LIB_EXT2__ 1" >>confdefs.h printf "%s\n" "#define __STDC_WANT_MATH_SPEC_FUNCS__ 1" >>confdefs.h printf "%s\n" "#define _TANDEM_SOURCE 1" >>confdefs.h if test $ac_cv_header_minix_config_h = yes then : MINIX=yes printf "%s\n" "#define _MINIX 1" >>confdefs.h printf "%s\n" "#define _POSIX_SOURCE 1" >>confdefs.h printf "%s\n" "#define _POSIX_1_SOURCE 2" >>confdefs.h else $as_nop MINIX= fi if test $ac_cv_safe_to_define___extensions__ = yes then : printf "%s\n" "#define __EXTENSIONS__ 1" >>confdefs.h fi if test $ac_cv_should_define__xopen_source = yes then : printf "%s\n" "#define _XOPEN_SOURCE 500" >>confdefs.h fi case "$host_os" in openbsd*) printf "%s\n" "#define _ISOC11_SOURCE 1" >>confdefs.h ;; esac 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 <limits.h> 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 <ac_nonexistent.h> _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 <limits.h> 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 <ac_nonexistent.h> _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 for Minix Amsterdam compiler" >&5 printf %s "checking for Minix Amsterdam compiler... " >&6; } if test ${gl_cv_c_amsterdam_compiler+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ACK__ Amsterdam #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Amsterdam" >/dev/null 2>&1 then : gl_cv_c_amsterdam_compiler=yes else $as_nop gl_cv_c_amsterdam_compiler=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_amsterdam_compiler" >&5 printf "%s\n" "$gl_cv_c_amsterdam_compiler" >&6; } if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else : 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="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 -z "$ARFLAGS"; then ARFLAGS='cr' fi if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else 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 fi fi # IEEE behaviour is the default on all CPUs except Alpha and SH # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 # and the GCC 4.1.2 manual). case "$host_cpu" in alpha*) # On Alpha systems, a compiler option provides the behaviour. # See the ieee(3) manual page, also available at # <https://backdrift.org/man/tru64/man3/ieee.3.html> if test -n "$GCC"; then # GCC has the option -mieee. # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. CPPFLAGS="$CPPFLAGS -mieee" else # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact. # For full IEEE compliance (rarely needed), use option -ieee_with_inexact. CPPFLAGS="$CPPFLAGS -ieee" fi ;; sh*) if test -n "$GCC"; then # GCC has the option -mieee. CPPFLAGS="$CPPFLAGS -mieee" fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 printf %s "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } if test ${ac_cv_sys_largefile_source+y} then : printf %s "(cached) " >&6 else $as_nop while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> /* for off_t */ #include <stdio.h> int main (void) { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_sys_largefile_source=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #undef _LARGEFILE_SOURCE #define _LARGEFILE_SOURCE 1 #include <sys/types.h> /* for off_t */ #include <stdio.h> int main (void) { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_sys_largefile_source=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 printf "%s\n" "$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) printf "%s\n" "#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source" >>confdefs.h ;; esac rm -rf conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h fi case "$host_os" in hpux*) printf "%s\n" "#define _LARGEFILE_SOURCE 1" >>confdefs.h ;; esac # Check whether --enable-largefile was given. if test ${enable_largefile+y} then : enableval=$enable_largefile; fi if test "$enable_largefile" != no then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for special C compiler options needed for large files" >&5 printf %s "checking for special C compiler options needed for large files... " >&6; } if test ${ac_cv_sys_largefile_CC+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : break fi rm -f core conftest.err conftest.$ac_objext conftest.beam CC="$CC -n32" if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_largefile_CC=' -n32'; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam break done CC=$ac_save_CC rm -f conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_CC" >&5 printf "%s\n" "$ac_cv_sys_largefile_CC" >&6; } if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _FILE_OFFSET_BITS value needed for large files" >&5 printf %s "checking for _FILE_OFFSET_BITS value needed for large files... " >&6; } if test ${ac_cv_sys_file_offset_bits+y} then : printf %s "(cached) " >&6 else $as_nop while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_file_offset_bits=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #undef _FILE_OFFSET_BITS #define _FILE_OFFSET_BITS 64 #include <sys/types.h> /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_file_offset_bits=64; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_sys_file_offset_bits=unknown break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_file_offset_bits" >&5 printf "%s\n" "$ac_cv_sys_file_offset_bits" >&6; } case $ac_cv_sys_file_offset_bits in #( no | unknown) ;; *) printf "%s\n" "#define _FILE_OFFSET_BITS $ac_cv_sys_file_offset_bits" >>confdefs.h ;; esac rm -rf conftest* case $ac_cv_sys_file_offset_bits in #( unknown) : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGE_FILES value needed for large files" >&5 printf %s "checking for _LARGE_FILES value needed for large files... " >&6; } if test ${ac_cv_sys_large_files+y} then : printf %s "(cached) " >&6 else $as_nop while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_large_files=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #undef _LARGE_FILES #define _LARGE_FILES 1 #include <sys/types.h> /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_sys_large_files=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ac_cv_sys_large_files=unknown break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_large_files" >&5 printf "%s\n" "$ac_cv_sys_large_files" >&6; } case $ac_cv_sys_large_files in #( no | unknown) ;; *) printf "%s\n" "#define _LARGE_FILES $ac_cv_sys_large_files" >>confdefs.h ;; esac rm -rf conftest* ;; #( 64) : # Check whether --enable-year2038 was given. if test ${enable_year2038+y} then : enableval=$enable_year2038; fi if test "$enable_year2038" != no then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for time_t past the year 2038" >&5 printf %s "checking for time_t past the year 2038... " >&6; } if test ${gl_cv_type_time_t_y2038+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> /* Check that time_t can represent 2**32 - 1 correctly. */ #define LARGE_TIME_T \\ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1]; _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_time_t_y2038=yes else $as_nop gl_cv_type_time_t_y2038=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: $gl_cv_type_time_t_y2038" >&5 printf "%s\n" "$gl_cv_type_time_t_y2038" >&6; } if test "$gl_cv_type_time_t_y2038" = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit time_t with _TIME_BITS=64" >&5 printf %s "checking for 64-bit time_t with _TIME_BITS=64... " >&6; } if test ${gl_cv_type_time_t_bits_macro+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _TIME_BITS 64 #define _FILE_OFFSET_BITS 64 #include <time.h> /* Check that time_t can represent 2**32 - 1 correctly. */ #define LARGE_TIME_T \\ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1]; _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_time_t_bits_macro=yes else $as_nop gl_cv_type_time_t_bits_macro=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: $gl_cv_type_time_t_bits_macro" >&5 printf "%s\n" "$gl_cv_type_time_t_bits_macro" >&6; } if test "$gl_cv_type_time_t_bits_macro" = yes; then printf "%s\n" "#define _TIME_BITS 64" >>confdefs.h printf "%s\n" "#define _FILE_OFFSET_BITS 64" >>confdefs.h gl_cv_type_time_t_y2038=yes fi fi if test $gl_cv_type_time_t_y2038 = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _USE_32BIT_TIME_T int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : { { 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 $? "The 'time_t' type stops working after January 2038. Remove _USE_32BIT_TIME_T from the compiler flags. See \`config.log' for more details" "$LINENO" 5; } else $as_nop # If not cross-compiling and says we should check, # and 'touch' works with a large timestamp, then evidently wider time_t # is desired and supported, so fail and ask the builder to fix the # problem. Otherwise, just warn the builder. if test "$gl_warned_about_y2038" != yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: The 'time_t' type stops working after January 2038, and this package needs a wider 'time_t' type if there is any way to access timestamps after that. Configure with 'CC=\"${CC} -m64\"' perhaps?" >&5 printf "%s\n" "$as_me: WARNING: The 'time_t' type stops working after January 2038, and this package needs a wider 'time_t' type if there is any way to access timestamps after that. Configure with 'CC=\"${CC} -m64\"' perhaps?" >&2;} gl_warned_about_y2038=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi ;; #( *) : ;; esac fi case "$host_os" in mingw*) printf "%s\n" "#define __MINGW_USE_VC2005_COMPAT 1" >>confdefs.h ;; esac # Check whether --enable-threads was given. if test ${enable_threads+y} then : enableval=$enable_threads; gl_use_threads=$enableval else $as_nop if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else case "$host_os" in osf*) gl_use_threads=no ;; cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; mingw*) case "$gl_use_winpthreads_default" in yes) gl_use_threads=posix ;; no) gl_use_threads=windows ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac fi fi if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = isoc \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then # For using <threads.h> or <pthread.h>: if test -z "$gl_anythreadlib_early_done"; then case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks <pthread.h>. cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in <errno.h>. case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac gl_anythreadlib_early_done=done fi fi # Pre-early section. # Code from module absolute-header: # Code from module access: # Code from module acl: # Code from module acl-permissions: # Code from module alignof: # Code from module alloca: # Code from module alloca-opt: # Code from module announce-gen: # Code from module array-list: # Code from module assure: # Code from module at-internal: # Code from module attribute: # Code from module autobuild: if test -z "$AB_PACKAGE"; then AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE} fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: autobuild project... $AB_PACKAGE" >&5 printf "%s\n" "$as_me: autobuild project... $AB_PACKAGE" >&6;} if test -z "$AB_VERSION"; then AB_VERSION=${PACKAGE_VERSION:-$VERSION} fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: autobuild revision... $AB_VERSION" >&5 printf "%s\n" "$as_me: autobuild revision... $AB_VERSION" >&6;} hostname=`hostname` if test "$hostname"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: autobuild hostname... $hostname" >&5 printf "%s\n" "$as_me: autobuild hostname... $hostname" >&6;} fi date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ` if test "$?" != 0; then date=`date` fi if test "$date"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: autobuild timestamp... $date" >&5 printf "%s\n" "$as_me: autobuild timestamp... $date" >&6;} fi # Code from module base64: # Code from module basename-lgpl: # Code from module binary-io: # Code from module bison: # Code from module bitrotate: # Code from module btowc: # Code from module builtin-expect: # Code from module c-ctype: # Code from module c-strcase: # Code from module c-strcaseeq: # Code from module c99: # Code from module calloc-gnu: # Code from module calloc-posix: # Code from module canonicalize: # Code from module canonicalize-lgpl: # Code from module chdir: # Code from module chdir-long: # Code from module clock-time: # Code from module cloexec: # Code from module close: # Code from module close-stream: # Code from module closedir: # Code from module closeout: # Code from module concat-filename: # Code from module copy-file: # Code from module copy-file-range: # Code from module crc: # Code from module d-ino: # Code from module dirent: # Code from module dirfd: # Code from module dirname-lgpl: # Code from module double-slash-root: # Code from module dup: # Code from module dup2: # Code from module dynarray: # Code from module eloop-threshold: # Code from module environ: # Code from module errno: # Code from module error: # Code from module euidaccess: # Code from module execute: # Code from module exitfail: # Code from module explicit_bzero: # Code from module extensions: # Code from module extern-inline: # Code from module fatal-signal: # Code from module fchdir: # Code from module fcntl: # Code from module fcntl-h: # Code from module fd-hook: # Code from module fd-safer-flag: # Code from module fdopendir: # Code from module file-set: # Code from module filename: # Code from module filenamecat-lgpl: # Code from module findprog-in: # Code from module flexmember: # Code from module float: # Code from module flock: # Code from module floor: # Code from module fopen: # Code from module fopen-gnu: # Code from module fpending: # Code from module fpieee: # Code from module fprintf-posix: # Code from module fpucw: # Code from module free-posix: # Code from module frexp-nolibm: # Code from module frexpl-nolibm: # Code from module fseek: # Code from module fseeko: # Code from module fseterr: # Code from module fstat: # Code from module fstatat: # Code from module ftell: # Code from module ftello: # Code from module full-write: # Code from module fwriting: # Code from module gen-header: # Code from module gendocs: # Code from module getcwd: # Code from module getcwd-lgpl: # Code from module getdelim: # Code from module getdtablesize: # Code from module getgroups: # Code from module getline: # Code from module getopt-gnu: # Code from module getopt-posix: # Code from module getpass: # Code from module getpass-gnu: # Code from module getprogname: # Code from module getrandom: # Code from module gettext-h: # Code from module gettime: # Code from module gettimeofday: # Code from module gnumakefile: # Code from module gnupload: # Code from module group-member: # Code from module hard-locale: # Code from module hash: # Code from module hash-pjw: # Code from module hash-triple-simple: # Code from module havelib: # Code from module ialloc: # Code from module idx: # Code from module ignore-value: # Code from module include_next: # Code from module intprops: # Code from module inttypes: # Code from module inttypes-incomplete: # Code from module isnand-nolibm: # Code from module isnanf-nolibm: # Code from module isnanl-nolibm: # Code from module langinfo: # Code from module largefile: # Code from module libc-config: # Code from module limits-h: # Code from module list: # Code from module localcharset: # Code from module locale: # Code from module localeconv: # Code from module lock: # Code from module lseek: # Code from module lstat: # Code from module maintainer-makefile: # Code from module malloc-gnu: # Code from module malloc-posix: # Code from module malloca: # Code from module math: # Code from module mbrlen: # Code from module mbrtowc: # Code from module mbsinit: # Code from module mbtowc: # Code from module memchr: # Code from module mempcpy: # Code from module memrchr: # Code from module minmax: # Code from module mkdir: # Code from module mkostemp: # Code from module mkstemp: # Code from module mktime: # Code from module mktime-internal: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module multiarch: # Code from module nl_langinfo: # Code from module nocrash: # Code from module nstrftime: # Code from module obstack: # Code from module open: # Code from module openat: # Code from module openat-die: # Code from module openat-h: # Code from module opendir: # Code from module parse-datetime: # Code from module pathmax: # Code from module pipe-posix: # Code from module posix_spawn: # Code from module posix_spawn-internal: # Code from module posix_spawn_file_actions_addchdir: # Code from module posix_spawn_file_actions_addopen: # Code from module posix_spawn_file_actions_destroy: # Code from module posix_spawn_file_actions_init: # Code from module posix_spawnattr_destroy: # Code from module posix_spawnattr_init: # Code from module posix_spawnattr_setflags: # Code from module posix_spawnattr_setsigmask: # Code from module posix_spawnp: # Code from module printf-frexp: # Code from module printf-frexpl: # Code from module printf-posix: # Code from module printf-safe: # Code from module progname: # Code from module qcopy-acl: # Code from module qset-acl: # Code from module quote: # Code from module quotearg: # Code from module quotearg-simple: # Code from module raise: # Code from module random_r: # Code from module rawmemchr: # Code from module read: # Code from module read-file: # Code from module readdir: # Code from module readline: # Code from module readlink: # Code from module realloc-gnu: # Code from module realloc-posix: # Code from module reallocarray: # Code from module regex: # Code from module regexprops-generic: # Code from module remove: # Code from module rename: # Code from module rewinddir: # Code from module rmdir: # Code from module root-uid: # Code from module safe-read: # Code from module safe-write: # Code from module same-inode: # Code from module save-cwd: # Code from module sched: # Code from module scratch_buffer: # Code from module secure_getenv: # Code from module selinux-h: # Code from module setenv: # Code from module setlocale-null: # Code from module sh-filename: # Code from module sigaction: # Code from module signal-h: # Code from module signbit: # Code from module sigprocmask: # Code from module size_max: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module spawn: # Code from module ssize_t: # Code from module stat: # Code from module stat-macros: # Code from module stat-time: # Code from module std-gnu11: # Code from module stdalign: # Code from module stdarg: # Code from module stdbool: # Code from module stddef: # Code from module stdint: # Code from module stdio: # Code from module stdlib: # Code from module stpcpy: # Code from module strcase: # Code from module strcasestr: # Code from module strcasestr-simple: # Code from module strchrnul: # Code from module strdup-posix: # Code from module streq: # Code from module strerror: # Code from module strerror-override: # Code from module string: # Code from module strings: # Code from module strsep: # Code from module strverscmp: # Code from module sys_file: # Code from module sys_random: # Code from module sys_stat: # Code from module sys_time: # Code from module sys_types: # Code from module sys_wait: # Code from module tempname: # Code from module thread-optim: # Code from module threadlib: # Code from module time: # Code from module time_r: # Code from module time_rz: # Code from module timegm: # Code from module timespec: # Code from module tmpdir: # Code from module tzset: # Code from module unistd: # Code from module unistd-safer: # Code from module unlink: # Code from module unlocked-io: # Code from module unlocked-io-internal: # Code from module unsetenv: # Code from module update-copyright: # Code from module useless-if-before-free: # Code from module utime: # Code from module utime-h: # Code from module utimens: # Code from module vararrays: # Code from module vasnprintf: # Code from module vasnprintf-posix: # Code from module vasprintf: # Code from module vasprintf-posix: # Code from module vc-list-files: # Code from module verify: # Code from module version-etc: # Code from module version-etc-fsf: # Code from module vfprintf-posix: # Code from module wait-process: # Code from module waitpid: # Code from module wchar: # Code from module wcrtomb: # Code from module wctob: # Code from module wctomb: # Code from module wctype-h: # Code from module windows-mutex: # Code from module windows-once: # Code from module windows-recmutex: # Code from module windows-rwlock: # Code from module windows-spawn: # Code from module write: # Code from module xalloc: # Code from module xalloc-die: # Code from module xalloc-oversized: # Code from module xsize: case `pwd` in *\ * | *\ *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&5 printf "%s\n" "$as_me: WARNING: Libtool does not cope well with whitespace in \`pwd\`" >&2;} ;; esac macro_version='2.4.6' macro_revision='2.4.6' ltmain=$ac_aux_dir/ltmain.sh # Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\(["`$\\]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\(["`\\]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to print strings" >&5 printf %s "checking how to print strings... " >&6; } # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "" } case $ECHO in printf*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: printf" >&5 printf "%s\n" "printf" >&6; } ;; print*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: print -r" >&5 printf "%s\n" "print -r" >&6; } ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: cat" >&5 printf "%s\n" "cat" >&6; } ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a sed that does not truncate output" >&5 printf %s "checking for a sed that does not truncate output... " >&6; } if test ${ac_cv_path_SED+y} then : printf %s "(cached) " >&6 else $as_nop ac_script=s/aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa/bbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb/ for ac_i in 1 2 3 4 5 6 7; do ac_script="$ac_script$as_nl$ac_script" done echo "$ac_script" 2>/dev/null | sed 99q >conftest.sed { ac_script=; unset ac_script;} if test -z "$SED"; then ac_path_SED_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 do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in sed gsed do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_SED="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_SED" || continue # Check for GNU ac_path_SED and select it if it is found. # Check for GNU $ac_path_SED case `"$ac_path_SED" --version 2>&1` in *GNU*) ac_cv_path_SED="$ac_path_SED" ac_path_SED_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" '' >> "conftest.nl" "$ac_path_SED" -f conftest.sed < "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_SED_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_SED="$ac_path_SED" ac_path_SED_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_SED_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_SED"; then as_fn_error $? "no acceptable sed could be found in \$PATH" "$LINENO" 5 fi else ac_cv_path_SED=$SED fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_SED" >&5 printf "%s\n" "$ac_cv_path_SED" >&6; } SED="$ac_cv_path_SED" rm -f conftest.sed test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fgrep" >&5 printf %s "checking for fgrep... " >&6; } if test ${ac_cv_path_FGREP+y} then : printf %s "(cached) " >&6 else $as_nop if echo 'ab*c' | $GREP -F 'ab*c' >/dev/null 2>&1 then ac_cv_path_FGREP="$GREP -F" else if test -z "$FGREP"; then ac_path_FGREP_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 fgrep do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_FGREP="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_FGREP" || continue # Check for GNU ac_path_FGREP and select it if it is found. # Check for GNU $ac_path_FGREP case `"$ac_path_FGREP" --version 2>&1` in *GNU*) ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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" 'FGREP' >> "conftest.nl" "$ac_path_FGREP" FGREP < "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_FGREP_max-0}; then # Best one so far, save it but keep looking for a better one ac_cv_path_FGREP="$ac_path_FGREP" ac_path_FGREP_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_FGREP_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_FGREP"; then as_fn_error $? "no acceptable fgrep could be found in $PATH$PATH_SEPARATOR/usr/xpg4/bin" "$LINENO" 5 fi else ac_cv_path_FGREP=$FGREP fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_FGREP" >&5 printf "%s\n" "$ac_cv_path_FGREP" >&6; } FGREP="$ac_cv_path_FGREP" test -z "$GREP" && GREP=grep # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test no = "$withval" || with_gnu_ld=yes else $as_nop with_gnu_ld=no fi ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test ${lt_cv_path_LD+y} then : printf %s "(cached) " >&6 else $as_nop if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test no != "$with_gnu_ld" && break ;; *) test yes != "$with_gnu_ld" && break ;; esac fi done IFS=$lt_save_ifs else lt_cv_path_LD=$LD # Let the user override the test with a path. fi fi LD=$lt_cv_path_LD if test -n "$LD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -z "$LD" && as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${lt_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_gnu_ld" >&5 printf "%s\n" "$lt_cv_prog_gnu_ld" >&6; } with_gnu_ld=$lt_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for BSD- or MS-compatible name lister (nm)" >&5 printf %s "checking for BSD- or MS-compatible name lister (nm)... " >&6; } if test ${lt_cv_path_NM+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_NM" >&5 printf "%s\n" "$lt_cv_path_NM" >&6; } if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else if test -n "$ac_tool_prefix"; then for ac_prog in dumpbin "link -dump" 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_DUMPBIN+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DUMPBIN"; then ac_cv_prog_DUMPBIN="$DUMPBIN" # 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_DUMPBIN="$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 DUMPBIN=$ac_cv_prog_DUMPBIN if test -n "$DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DUMPBIN" >&5 printf "%s\n" "$DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$DUMPBIN" && break done fi if test -z "$DUMPBIN"; then ac_ct_DUMPBIN=$DUMPBIN for ac_prog in dumpbin "link -dump" 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_DUMPBIN+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DUMPBIN"; then ac_cv_prog_ac_ct_DUMPBIN="$ac_ct_DUMPBIN" # 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_DUMPBIN="$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_DUMPBIN=$ac_cv_prog_ac_ct_DUMPBIN if test -n "$ac_ct_DUMPBIN"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DUMPBIN" >&5 printf "%s\n" "$ac_ct_DUMPBIN" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$ac_ct_DUMPBIN" && break done if test "x$ac_ct_DUMPBIN" = x; then DUMPBIN=":" 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 DUMPBIN=$ac_ct_DUMPBIN fi fi case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the name lister ($NM) interface" >&5 printf %s "checking the name lister ($NM) interface... " >&6; } if test ${lt_cv_nm_interface+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&5) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&5) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&5 (eval echo "\"\$as_me:$LINENO: output\"" >&5) cat conftest.out >&5 if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_nm_interface" >&5 printf "%s\n" "$lt_cv_nm_interface" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ln -s works" >&5 printf %s "checking whether ln -s works... " >&6; } LN_S=$as_ln_s if test "$LN_S" = "ln -s"; then { 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, using $LN_S" >&5 printf "%s\n" "no, using $LN_S" >&6; } fi # find the maximum length of command line arguments { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking the maximum length of command line arguments" >&5 printf %s "checking the maximum length of command line arguments... " >&6; } if test ${lt_cv_sys_max_cmd_len+y} then : printf %s "(cached) " >&6 else $as_nop i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[ ]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac fi if test -n "$lt_cv_sys_max_cmd_len"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sys_max_cmd_len" >&5 printf "%s\n" "$lt_cv_sys_max_cmd_len" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: none" >&5 printf "%s\n" "none" >&6; } fi max_cmd_len=$lt_cv_sys_max_cmd_len : ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to $host format" >&5 printf %s "checking how to convert $build file names to $host format... " >&6; } if test ${lt_cv_to_host_file_cmd+y} then : printf %s "(cached) " >&6 else $as_nop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac fi to_host_file_cmd=$lt_cv_to_host_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_host_file_cmd" >&5 printf "%s\n" "$lt_cv_to_host_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to convert $build file names to toolchain format" >&5 printf %s "checking how to convert $build file names to toolchain format... " >&6; } if test ${lt_cv_to_tool_file_cmd+y} then : printf %s "(cached) " >&6 else $as_nop #assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac fi to_tool_file_cmd=$lt_cv_to_tool_file_cmd { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_to_tool_file_cmd" >&5 printf "%s\n" "$lt_cv_to_tool_file_cmd" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $LD option to reload object files" >&5 printf %s "checking for $LD option to reload object files... " >&6; } if test ${lt_cv_ld_reload_flag+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_reload_flag='-r' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_reload_flag" >&5 printf "%s\n" "$lt_cv_ld_reload_flag" >&6; } reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}objdump", so it can be a program name with args. set dummy ${ac_tool_prefix}objdump; 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_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OBJDUMP"; then ac_cv_prog_OBJDUMP="$OBJDUMP" # 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_OBJDUMP="${ac_tool_prefix}objdump" 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 OBJDUMP=$ac_cv_prog_OBJDUMP if test -n "$OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OBJDUMP" >&5 printf "%s\n" "$OBJDUMP" >&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_OBJDUMP"; then ac_ct_OBJDUMP=$OBJDUMP # Extract the first word of "objdump", so it can be a program name with args. set dummy objdump; 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_OBJDUMP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OBJDUMP"; then ac_cv_prog_ac_ct_OBJDUMP="$ac_ct_OBJDUMP" # 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_OBJDUMP="objdump" 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_OBJDUMP=$ac_cv_prog_ac_ct_OBJDUMP if test -n "$ac_ct_OBJDUMP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OBJDUMP" >&5 printf "%s\n" "$ac_ct_OBJDUMP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OBJDUMP" = x; then OBJDUMP="false" 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 OBJDUMP=$ac_ct_OBJDUMP fi else OBJDUMP="$ac_cv_prog_OBJDUMP" fi test -z "$OBJDUMP" && OBJDUMP=objdump { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to recognize dependent libraries" >&5 printf %s "checking how to recognize dependent libraries... " >&6; } if test ${lt_cv_deplibs_check_method+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[4-9]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[45]*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[3-9]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF-[0-9][0-9]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]' lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9]\.[0-9]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[3-9]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[^/]+(\.so\.[0-9]+\.[0-9]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [0-9][0-9]*-bit [LM]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_deplibs_check_method" >&5 printf "%s\n" "$lt_cv_deplibs_check_method" >&6; } file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[\1]\/[\1]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dlltool", so it can be a program name with args. set dummy ${ac_tool_prefix}dlltool; 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_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DLLTOOL"; then ac_cv_prog_DLLTOOL="$DLLTOOL" # 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_DLLTOOL="${ac_tool_prefix}dlltool" 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 DLLTOOL=$ac_cv_prog_DLLTOOL if test -n "$DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DLLTOOL" >&5 printf "%s\n" "$DLLTOOL" >&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_DLLTOOL"; then ac_ct_DLLTOOL=$DLLTOOL # Extract the first word of "dlltool", so it can be a program name with args. set dummy dlltool; 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_DLLTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DLLTOOL"; then ac_cv_prog_ac_ct_DLLTOOL="$ac_ct_DLLTOOL" # 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_DLLTOOL="dlltool" 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_DLLTOOL=$ac_cv_prog_ac_ct_DLLTOOL if test -n "$ac_ct_DLLTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DLLTOOL" >&5 printf "%s\n" "$ac_ct_DLLTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DLLTOOL" = x; then DLLTOOL="false" 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 DLLTOOL=$ac_ct_DLLTOOL fi else DLLTOOL="$ac_cv_prog_DLLTOOL" fi test -z "$DLLTOOL" && DLLTOOL=dlltool { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to associate runtime and link libraries" >&5 printf %s "checking how to associate runtime and link libraries... " >&6; } if test ${lt_cv_sharedlib_from_linklib_cmd+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_sharedlib_from_linklib_cmd" >&5 printf "%s\n" "$lt_cv_sharedlib_from_linklib_cmd" >&6; } sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO if test -n "$ac_tool_prefix"; then for ac_prog in ar 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_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$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 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 test -n "$AR" && break done fi if test -z "$AR"; then ac_ct_AR=$AR for ac_prog in ar 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_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="$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_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 test -n "$ac_ct_AR" && break done if test "x$ac_ct_AR" = x; then AR="false" 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 fi : ${AR=ar} : ${AR_FLAGS=cru} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for archiver @FILE support" >&5 printf %s "checking for archiver @FILE support... " >&6; } if test ${lt_cv_ar_at_file+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ar_at_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&5' { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$lt_ar_try\""; } >&5 (eval $lt_ar_try) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ar_at_file" >&5 printf "%s\n" "$lt_cv_ar_at_file" >&6; } if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. set dummy ${ac_tool_prefix}strip; ac_word=$2 { 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_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$STRIP"; then ac_cv_prog_STRIP="$STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS 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_STRIP="${ac_tool_prefix}strip" 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 STRIP=$ac_cv_prog_STRIP if test -n "$STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $STRIP" >&5 printf "%s\n" "$STRIP" >&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_STRIP"; then ac_ct_STRIP=$STRIP # Extract the first word of "strip", so it can be a program name with args. set dummy strip; ac_word=$2 { 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_STRIP+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_STRIP"; then ac_cv_prog_ac_ct_STRIP="$ac_ct_STRIP" # Let the user override the test. else as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS 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_STRIP="strip" 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_STRIP=$ac_cv_prog_ac_ct_STRIP if test -n "$ac_ct_STRIP"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_STRIP" >&5 printf "%s\n" "$ac_ct_STRIP" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_STRIP" = x; then STRIP=":" 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 STRIP=$ac_ct_STRIP fi else STRIP="$ac_cv_prog_STRIP" fi test -z "$STRIP" && STRIP=: 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 test -z "$RANLIB" && RANLIB=: # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Check for command to grab the raw symbol name followed by C symbol from nm. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking command to parse $NM output from $compiler object" >&5 printf %s "checking command to parse $NM output from $compiler object... " >&6; } if test ${lt_cv_sys_global_symbol_pipe+y} then : printf %s "(cached) " >&6 else $as_nop # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[BCDEGRST]' # Regexp to match symbols that can be accessed directly from C. sympat='\([_A-Za-z][_A-Za-z0-9]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[BCDT]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[ABCDGISTW]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[ABCDEGRST]' fi ;; irix* | nonstopux*) symcode='[BCDEGRST]' ;; osf*) symcode='[BCDEGQRST]' ;; solaris*) symcode='[BDRT]' ;; sco3.2v5*) symcode='[DT]' ;; sysv4.2uw2*) symcode='[DT]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[ABDT]' ;; sysv4) symcode='[DFNSTU]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[ABCDGIRSTW]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK '"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[ ]\($symcode$symcode*\)[ ][ ]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then # Now try to grab the symbols. nlist=conftest.nm if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist\""; } >&5 (eval $NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT_DLSYM_CONST #else # define LT_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$lt_prog_compiler_no_builtin_flag" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&5 fi else echo "cannot find nm_test_var in $nlist" >&5 fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&5 fi else echo "$progname: failed program was:" >&5 cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done fi if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: failed" >&5 printf "%s\n" "failed" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ok" >&5 printf "%s\n" "ok" >&6; } fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[@]FILE' >/dev/null; then nm_file_list_spec='@' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sysroot" >&5 printf %s "checking for sysroot... " >&6; } # Check whether --with-sysroot was given. if test ${with_sysroot+y} then : withval=$with_sysroot; else $as_nop with_sysroot=no fi lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_sysroot" >&5 printf "%s\n" "$with_sysroot" >&6; } as_fn_error $? "The sysroot must be an absolute path." "$LINENO" 5 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: ${lt_sysroot:-no}" >&5 printf "%s\n" "${lt_sysroot:-no}" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a working dd" >&5 printf %s "checking for a working dd... " >&6; } if test ${ac_cv_path_lt_DD+y} then : printf %s "(cached) " >&6 else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} if test -z "$lt_DD"; then ac_path_lt_DD_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 do IFS=$as_save_IFS case $as_dir in #((( '') as_dir=./ ;; */) ;; *) as_dir=$as_dir/ ;; esac for ac_prog in dd do for ac_exec_ext in '' $ac_executable_extensions; do ac_path_lt_DD="$as_dir$ac_prog$ac_exec_ext" as_fn_executable_p "$ac_path_lt_DD" || continue if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi $ac_path_lt_DD_found && break 3 done done done IFS=$as_save_IFS if test -z "$ac_cv_path_lt_DD"; then : fi else ac_cv_path_lt_DD=$lt_DD fi rm -f conftest.i conftest2.i conftest.out fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_path_lt_DD" >&5 printf "%s\n" "$ac_cv_path_lt_DD" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to truncate binary pipes" >&5 printf %s "checking how to truncate binary pipes... " >&6; } if test ${lt_cv_truncate_bin+y} then : printf %s "(cached) " >&6 else $as_nop printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_truncate_bin" >&5 printf "%s\n" "$lt_cv_truncate_bin" >&6; } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # Check whether --enable-libtool-lock was given. if test ${enable_libtool_lock+y} then : enableval=$enable_libtool_lock; fi test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '#line '$LINENO' "configure"' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C compiler needs -belf" >&5 printf %s "checking whether the C compiler needs -belf... " >&6; } if test ${lt_cv_cc_needs_belf+y} then : printf %s "(cached) " >&6 else $as_nop 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 cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_cc_needs_belf=yes else $as_nop lt_cv_cc_needs_belf=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext 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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_cc_needs_belf" >&5 printf "%s\n" "$lt_cv_cc_needs_belf" >&6; } if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}mt", so it can be a program name with args. set dummy ${ac_tool_prefix}mt; 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_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$MANIFEST_TOOL"; then ac_cv_prog_MANIFEST_TOOL="$MANIFEST_TOOL" # 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_MANIFEST_TOOL="${ac_tool_prefix}mt" 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 MANIFEST_TOOL=$ac_cv_prog_MANIFEST_TOOL if test -n "$MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MANIFEST_TOOL" >&5 printf "%s\n" "$MANIFEST_TOOL" >&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_MANIFEST_TOOL"; then ac_ct_MANIFEST_TOOL=$MANIFEST_TOOL # Extract the first word of "mt", so it can be a program name with args. set dummy mt; 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_MANIFEST_TOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_MANIFEST_TOOL"; then ac_cv_prog_ac_ct_MANIFEST_TOOL="$ac_ct_MANIFEST_TOOL" # 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_MANIFEST_TOOL="mt" 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_MANIFEST_TOOL=$ac_cv_prog_ac_ct_MANIFEST_TOOL if test -n "$ac_ct_MANIFEST_TOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_MANIFEST_TOOL" >&5 printf "%s\n" "$ac_ct_MANIFEST_TOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_MANIFEST_TOOL" = x; then MANIFEST_TOOL=":" 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 MANIFEST_TOOL=$ac_ct_MANIFEST_TOOL fi else MANIFEST_TOOL="$ac_cv_prog_MANIFEST_TOOL" fi test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $MANIFEST_TOOL is a manifest tool" >&5 printf %s "checking if $MANIFEST_TOOL is a manifest tool... " >&6; } if test ${lt_cv_path_mainfest_tool+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&5 $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&5 if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_path_mainfest_tool" >&5 printf "%s\n" "$lt_cv_path_mainfest_tool" >&6; } if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi case $host_os in rhapsody* | darwin*) if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}dsymutil", so it can be a program name with args. set dummy ${ac_tool_prefix}dsymutil; 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_DSYMUTIL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$DSYMUTIL"; then ac_cv_prog_DSYMUTIL="$DSYMUTIL" # 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_DSYMUTIL="${ac_tool_prefix}dsymutil" 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 DSYMUTIL=$ac_cv_prog_DSYMUTIL if test -n "$DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $DSYMUTIL" >&5 printf "%s\n" "$DSYMUTIL" >&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_DSYMUTIL"; then ac_ct_DSYMUTIL=$DSYMUTIL # Extract the first word of "dsymutil", so it can be a program name with args. set dummy dsymutil; 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_DSYMUTIL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_DSYMUTIL"; then ac_cv_prog_ac_ct_DSYMUTIL="$ac_ct_DSYMUTIL" # 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_DSYMUTIL="dsymutil" 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_DSYMUTIL=$ac_cv_prog_ac_ct_DSYMUTIL if test -n "$ac_ct_DSYMUTIL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_DSYMUTIL" >&5 printf "%s\n" "$ac_ct_DSYMUTIL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_DSYMUTIL" = x; then DSYMUTIL=":" 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 DSYMUTIL=$ac_ct_DSYMUTIL fi else DSYMUTIL="$ac_cv_prog_DSYMUTIL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}nmedit", so it can be a program name with args. set dummy ${ac_tool_prefix}nmedit; 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_NMEDIT+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$NMEDIT"; then ac_cv_prog_NMEDIT="$NMEDIT" # 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_NMEDIT="${ac_tool_prefix}nmedit" 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 NMEDIT=$ac_cv_prog_NMEDIT if test -n "$NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $NMEDIT" >&5 printf "%s\n" "$NMEDIT" >&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_NMEDIT"; then ac_ct_NMEDIT=$NMEDIT # Extract the first word of "nmedit", so it can be a program name with args. set dummy nmedit; 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_NMEDIT+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_NMEDIT"; then ac_cv_prog_ac_ct_NMEDIT="$ac_ct_NMEDIT" # 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_NMEDIT="nmedit" 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_NMEDIT=$ac_cv_prog_ac_ct_NMEDIT if test -n "$ac_ct_NMEDIT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_NMEDIT" >&5 printf "%s\n" "$ac_ct_NMEDIT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_NMEDIT" = x; then NMEDIT=":" 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 NMEDIT=$ac_ct_NMEDIT fi else NMEDIT="$ac_cv_prog_NMEDIT" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}lipo", so it can be a program name with args. set dummy ${ac_tool_prefix}lipo; 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_LIPO+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$LIPO"; then ac_cv_prog_LIPO="$LIPO" # 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_LIPO="${ac_tool_prefix}lipo" 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 LIPO=$ac_cv_prog_LIPO if test -n "$LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIPO" >&5 printf "%s\n" "$LIPO" >&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_LIPO"; then ac_ct_LIPO=$LIPO # Extract the first word of "lipo", so it can be a program name with args. set dummy lipo; 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_LIPO+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_LIPO"; then ac_cv_prog_ac_ct_LIPO="$ac_ct_LIPO" # 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_LIPO="lipo" 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_LIPO=$ac_cv_prog_ac_ct_LIPO if test -n "$ac_ct_LIPO"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_LIPO" >&5 printf "%s\n" "$ac_ct_LIPO" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_LIPO" = x; then LIPO=":" 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 LIPO=$ac_ct_LIPO fi else LIPO="$ac_cv_prog_LIPO" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool", so it can be a program name with args. set dummy ${ac_tool_prefix}otool; 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_OTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OTOOL"; then ac_cv_prog_OTOOL="$OTOOL" # 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_OTOOL="${ac_tool_prefix}otool" 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 OTOOL=$ac_cv_prog_OTOOL if test -n "$OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL" >&5 printf "%s\n" "$OTOOL" >&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_OTOOL"; then ac_ct_OTOOL=$OTOOL # Extract the first word of "otool", so it can be a program name with args. set dummy otool; 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_OTOOL+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OTOOL"; then ac_cv_prog_ac_ct_OTOOL="$ac_ct_OTOOL" # 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_OTOOL="otool" 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_OTOOL=$ac_cv_prog_ac_ct_OTOOL if test -n "$ac_ct_OTOOL"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL" >&5 printf "%s\n" "$ac_ct_OTOOL" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL" = x; then OTOOL=":" 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 OTOOL=$ac_ct_OTOOL fi else OTOOL="$ac_cv_prog_OTOOL" fi if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}otool64", so it can be a program name with args. set dummy ${ac_tool_prefix}otool64; 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_OTOOL64+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$OTOOL64"; then ac_cv_prog_OTOOL64="$OTOOL64" # 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_OTOOL64="${ac_tool_prefix}otool64" 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 OTOOL64=$ac_cv_prog_OTOOL64 if test -n "$OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $OTOOL64" >&5 printf "%s\n" "$OTOOL64" >&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_OTOOL64"; then ac_ct_OTOOL64=$OTOOL64 # Extract the first word of "otool64", so it can be a program name with args. set dummy otool64; 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_OTOOL64+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$ac_ct_OTOOL64"; then ac_cv_prog_ac_ct_OTOOL64="$ac_ct_OTOOL64" # 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_OTOOL64="otool64" 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_OTOOL64=$ac_cv_prog_ac_ct_OTOOL64 if test -n "$ac_ct_OTOOL64"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_ct_OTOOL64" >&5 printf "%s\n" "$ac_ct_OTOOL64" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_ct_OTOOL64" = x; then OTOOL64=":" 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 OTOOL64=$ac_ct_OTOOL64 fi else OTOOL64="$ac_cv_prog_OTOOL64" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -single_module linker flag" >&5 printf %s "checking for -single_module linker flag... " >&6; } if test ${lt_cv_apple_cc_single_mod+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&5 $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&5 # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&5 fi rm -rf libconftest.dylib* rm -f conftest.* fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_apple_cc_single_mod" >&5 printf "%s\n" "$lt_cv_apple_cc_single_mod" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -exported_symbols_list linker flag" >&5 printf %s "checking for -exported_symbols_list linker flag... " >&6; } if test ${lt_cv_ld_exported_symbols_list+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_ld_exported_symbols_list=yes else $as_nop lt_cv_ld_exported_symbols_list=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_exported_symbols_list" >&5 printf "%s\n" "$lt_cv_ld_exported_symbols_list" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for -force_load linker flag" >&5 printf %s "checking for -force_load linker flag... " >&6; } if test ${lt_cv_ld_force_load+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&5 $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&5 echo "$AR cru libconftest.a conftest.o" >&5 $AR cru libconftest.a conftest.o 2>&5 echo "$RANLIB libconftest.a" >&5 $RANLIB libconftest.a 2>&5 cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&5 $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&5 elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&5 fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_ld_force_load" >&5 printf "%s\n" "$lt_cv_ld_force_load" >&6; } case $host_os in rhapsody* | darwin1.[012]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[91]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[012][,.]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } 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 : printf "%s\n" "#define HAVE_DLFCN_H 1" >>confdefs.h fi # Set options enable_dlopen=no enable_win32_dll=no # Check whether --enable-shared was given. if test ${enable_shared+y} then : enableval=$enable_shared; p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_shared=yes fi # Check whether --enable-static was given. if test ${enable_static+y} then : enableval=$enable_static; p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_static=yes fi # Check whether --with-pic was given. if test ${with_pic+y} then : withval=$with_pic; lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop pic_mode=default fi # Check whether --enable-fast-install was given. if test ${enable_fast_install+y} then : enableval=$enable_fast_install; p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac else $as_nop enable_fast_install=yes fi shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[5-9]*,yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which variant of shared library versioning to provide" >&5 printf %s "checking which variant of shared library versioning to provide... " >&6; } # Check whether --with-aix-soname was given. if test ${with_aix_soname+y} then : withval=$with_aix_soname; case $withval in aix|svr4|both) ;; *) as_fn_error $? "Unknown argument to --with-aix-soname" "$LINENO" 5 ;; esac lt_cv_with_aix_soname=$with_aix_soname else $as_nop if test ${lt_cv_with_aix_soname+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_with_aix_soname=aix fi with_aix_soname=$lt_cv_with_aix_soname fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $with_aix_soname" >&5 printf "%s\n" "$with_aix_soname" >&6; } if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' test -z "$LN_S" && LN_S="ln -s" if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for objdir" >&5 printf %s "checking for objdir... " >&6; } if test ${lt_cv_objdir+y} then : printf %s "(cached) " >&6 else $as_nop rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_objdir" >&5 printf "%s\n" "$lt_cv_objdir" >&6; } objdir=$lt_cv_objdir printf "%s\n" "#define LT_OBJDIR \"$lt_cv_objdir/\"" >>confdefs.h case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o func_cc_basename $compiler cc_basename=$func_cc_basename_result # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ${ac_tool_prefix}file" >&5 printf %s "checking for ${ac_tool_prefix}file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/${ac_tool_prefix}file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"${ac_tool_prefix}file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for file" >&5 printf %s "checking for file... " >&6; } if test ${lt_cv_path_MAGIC_CMD+y} then : printf %s "(cached) " >&6 else $as_nop case $MAGIC_CMD in [\\/*] | ?:[\\/]*) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR ac_dummy="/usr/bin$PATH_SEPARATOR$PATH" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/file"; then lt_cv_path_MAGIC_CMD=$ac_dir/"file" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac fi MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MAGIC_CMD" >&5 printf "%s\n" "$MAGIC_CMD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi else MAGIC_CMD=: fi fi fi ;; esac # Use C for the default configuration in the libtool script lt_save_CC=$CC 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 # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o objext=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then lt_prog_compiler_no_builtin_flag= if test yes = "$GCC"; then case $cc_basename in nvcc*) lt_prog_compiler_no_builtin_flag=' -Xcompiler -fno-builtin' ;; *) lt_prog_compiler_no_builtin_flag=' -fno-builtin' ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -fno-rtti -fno-exceptions" >&5 printf %s "checking if $compiler supports -fno-rtti -fno-exceptions... " >&6; } if test ${lt_cv_prog_compiler_rtti_exceptions+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_rtti_exceptions=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-fno-rtti -fno-exceptions" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_rtti_exceptions=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_rtti_exceptions" >&5 printf "%s\n" "$lt_cv_prog_compiler_rtti_exceptions" >&6; } if test yes = "$lt_cv_prog_compiler_rtti_exceptions"; then lt_prog_compiler_no_builtin_flag="$lt_prog_compiler_no_builtin_flag -fno-rtti -fno-exceptions" else : fi fi lt_prog_compiler_wl= lt_prog_compiler_pic= lt_prog_compiler_static= if test yes = "$GCC"; then lt_prog_compiler_wl='-Wl,' lt_prog_compiler_static='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' fi lt_prog_compiler_pic='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support lt_prog_compiler_pic='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. lt_prog_compiler_pic='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. lt_prog_compiler_static= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) lt_prog_compiler_pic='-fPIC' ;; esac ;; interix[3-9]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. lt_prog_compiler_can_build_shared=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic=-Kconform_pic fi ;; *) lt_prog_compiler_pic='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 lt_prog_compiler_wl='-Xlinker ' if test -n "$lt_prog_compiler_pic"; then lt_prog_compiler_pic="-Xcompiler $lt_prog_compiler_pic" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) lt_prog_compiler_wl='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor lt_prog_compiler_static='-Bstatic' else lt_prog_compiler_static='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files lt_prog_compiler_pic='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). lt_prog_compiler_pic='-DDLL_EXPORT' case $host_os in os2*) lt_prog_compiler_static='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) lt_prog_compiler_wl='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) lt_prog_compiler_pic='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? lt_prog_compiler_static='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) lt_prog_compiler_wl='-Wl,' # PIC (with -KPIC) is the default. lt_prog_compiler_static='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; # Lahey Fortran 8.1. lf95*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='--shared' lt_prog_compiler_static='--static' ;; nagfor*) # NAG Fortran compiler lt_prog_compiler_wl='-Wl,-Wl,,' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; ccc*) lt_prog_compiler_wl='-Wl,' # All Alpha code is PIC. lt_prog_compiler_static='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-qpic' lt_prog_compiler_static='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [1-7].* | *Sun*Fortran*\ 8.[0-3]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='' ;; *Sun\ F* | *Sun*Fortran*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' lt_prog_compiler_wl='-Wl,' ;; *Intel*\ [CF]*Compiler*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fPIC' lt_prog_compiler_static='-static' ;; *Portland\ Group*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-fpic' lt_prog_compiler_static='-Bstatic' ;; esac ;; esac ;; newsos6) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. lt_prog_compiler_pic='-fPIC -shared' ;; osf3* | osf4* | osf5*) lt_prog_compiler_wl='-Wl,' # All OSF/1 code is PIC. lt_prog_compiler_static='-non_shared' ;; rdos*) lt_prog_compiler_static='-non_shared' ;; solaris*) lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) lt_prog_compiler_wl='-Qoption ld ';; *) lt_prog_compiler_wl='-Wl,';; esac ;; sunos4*) lt_prog_compiler_wl='-Qoption ld ' lt_prog_compiler_pic='-PIC' lt_prog_compiler_static='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then lt_prog_compiler_pic='-Kconform_pic' lt_prog_compiler_static='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_pic='-KPIC' lt_prog_compiler_static='-Bstatic' ;; unicos*) lt_prog_compiler_wl='-Wl,' lt_prog_compiler_can_build_shared=no ;; uts4*) lt_prog_compiler_pic='-pic' lt_prog_compiler_static='-Bstatic' ;; *) lt_prog_compiler_can_build_shared=no ;; esac fi case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) lt_prog_compiler_pic= ;; *) lt_prog_compiler_pic="$lt_prog_compiler_pic -DPIC" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $compiler option to produce PIC" >&5 printf %s "checking for $compiler option to produce PIC... " >&6; } if test ${lt_cv_prog_compiler_pic+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic=$lt_prog_compiler_pic fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic" >&6; } lt_prog_compiler_pic=$lt_cv_prog_compiler_pic # # Check to make sure the PIC flag actually works. # if test -n "$lt_prog_compiler_pic"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler PIC flag $lt_prog_compiler_pic works" >&5 printf %s "checking if $compiler PIC flag $lt_prog_compiler_pic works... " >&6; } if test ${lt_cv_prog_compiler_pic_works+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_pic_works=no ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$lt_prog_compiler_pic -DPIC" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_pic_works=yes fi fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_pic_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_pic_works" >&6; } if test yes = "$lt_cv_prog_compiler_pic_works"; then case $lt_prog_compiler_pic in "" | " "*) ;; *) lt_prog_compiler_pic=" $lt_prog_compiler_pic" ;; esac else lt_prog_compiler_pic= lt_prog_compiler_can_build_shared=no fi fi # # Check to make sure the static flag actually works. # wl=$lt_prog_compiler_wl eval lt_tmp_static_flag=\"$lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler static flag $lt_tmp_static_flag works" >&5 printf %s "checking if $compiler static flag $lt_tmp_static_flag works... " >&6; } if test ${lt_cv_prog_compiler_static_works+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_static_works=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $lt_tmp_static_flag" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler_static_works=yes fi else lt_cv_prog_compiler_static_works=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_static_works" >&5 printf "%s\n" "$lt_cv_prog_compiler_static_works" >&6; } if test yes = "$lt_cv_prog_compiler_static_works"; then : else lt_prog_compiler_static= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $compiler supports -c -o file.$ac_objext" >&5 printf %s "checking if $compiler supports -c -o file.$ac_objext... " >&6; } if test ${lt_cv_prog_compiler_c_o+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler_c_o=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [^ ]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&5) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&5 echo "$as_me:$LINENO: \$? = $ac_status" >&5 if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then lt_cv_prog_compiler_c_o=yes fi fi chmod u+w . 2>&5 $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler_c_o" >&5 printf "%s\n" "$lt_cv_prog_compiler_c_o" >&6; } hard_links=nottested if test no = "$lt_cv_prog_compiler_c_o" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if we can lock with hard links" >&5 printf %s "checking if we can lock with hard links... " >&6; } hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hard_links" >&5 printf "%s\n" "$hard_links" >&6; } if test no = "$hard_links"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&5 printf "%s\n" "$as_me: WARNING: '$CC' does not support '-c -o', so 'make -j' may be unsafe" >&2;} need_locks=warn fi else need_locks=no fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $compiler linker ($LD) supports shared libraries" >&5 printf %s "checking whether the $compiler linker ($LD) supports shared libraries... " >&6; } runpath_var= allow_undefined_flag= always_export_symbols=no archive_cmds= archive_expsym_cmds= compiler_needs_object=no enable_shared_with_static_runtimes=no export_dynamic_flag_spec= export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' hardcode_automatic=no hardcode_direct=no hardcode_direct_absolute=no hardcode_libdir_flag_spec= hardcode_libdir_separator= hardcode_minus_L=no hardcode_shlibpath_var=unsupported inherit_rpath=no link_all_deplibs=unknown module_cmds= module_expsym_cmds= old_archive_from_new_cmds= old_archive_from_expsyms_cmds= thread_safe_flag_spec= whole_archive_flag_spec= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list include_expsyms= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. exclude_expsyms='_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*' # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) link_all_deplibs=no ;; esac ld_shlibs=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[2-9]*) ;; *\ \(GNU\ Binutils\)\ [3-9]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' export_dynamic_flag_spec='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then whole_archive_flag_spec=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else whole_archive_flag_spec= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/(^)\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [01].* | *\ 2.[0-9].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[3-9]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then allow_undefined_flag=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME archive_cmds='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else ld_shlibs=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, ) is actually meaningless, # as there is no search path for DLLs. hardcode_libdir_flag_spec='-L$libdir' export_dynamic_flag_spec='$wl--export-all-symbols' allow_undefined_flag=unsupported always_export_symbols=no enable_shared_with_static_runtimes=yes export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1 DATA/;s/^.*[ ]__nm__\([^ ]*\)[ ][^ ]*/\1 DATA/;/^I[ ]/d;/^[AITW][ ]/s/.* //'\'' | sort | uniq > $export_symbols' exclude_expsyms='[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname' if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else ld_shlibs=no fi ;; haiku*) archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' link_all_deplibs=yes ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; interix[3-9]*) hardcode_direct=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' archive_expsym_cmds='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 whole_archive_flag_spec= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[cC]* | bgxl[cC]* | mpixl[cC]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 whole_archive_flag_spec='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 whole_archive_flag_spec='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' compiler_needs_object=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac archive_cmds='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) export_dynamic_flag_spec='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself whole_archive_flag_spec='--whole-archive$convenience --no-whole-archive' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then archive_expsym_cmds='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else ld_shlibs=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [01].* | *\ 2.[0-9].* | *\ 2.1[0-5].*) ld_shlibs=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac ;; sunos4*) archive_cmds='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= hardcode_direct=yes hardcode_shlibpath_var=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else ld_shlibs=no fi ;; esac if test no = "$ld_shlibs"; then runpath_var= hardcode_libdir_flag_spec= export_dynamic_flag_spec= whole_archive_flag_spec= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) allow_undefined_flag=unsupported always_export_symbols=yes archive_expsym_cmds='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. hardcode_minus_L=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. hardcode_direct=unsupported fi ;; aix[4-9]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then export_symbols_cmds='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && (substr(\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else export_symbols_cmds='`func_echo_all $NM | $SED -e '\''s/B\([^B]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && (substr(\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[23]|aix4.[23].*|aix[5-9]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. archive_cmds='' hardcode_direct=yes hardcode_direct_absolute=yes hardcode_libdir_separator=':' link_all_deplibs=yes file_list_spec='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. hardcode_direct=no hardcode_direct_absolute=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[012]|aix4.[012].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 hardcode_direct=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking hardcode_minus_L=yes hardcode_libdir_flag_spec='-L$libdir' hardcode_libdir_separator= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi export_dynamic_flag_spec='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. always_export_symbols=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. allow_undefined_flag='-berok' # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+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_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" archive_expsym_cmds='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then hardcode_libdir_flag_spec='$wl-R $libdir:/usr/lib:/lib' allow_undefined_flag="-z nodefs" archive_expsym_cmds="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else if test ${lt_cv_aix_libpath_+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_link "$LINENO" then : lt_aix_libpath_sed=' /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }' lt_cv_aix_libpath_=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test -z "$lt_cv_aix_libpath_"; then lt_cv_aix_libpath_=/usr/lib:/lib fi fi aix_libpath=$lt_cv_aix_libpath_ fi hardcode_libdir_flag_spec='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. no_undefined_flag=' $wl-bernotok' allow_undefined_flag=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. whole_archive_flag_spec='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives whole_archive_flag_spec='$convenience' fi archive_cmds_need_lc=yes archive_expsym_cmds='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([, ]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then archive_expsym_cmds="$archive_expsym_cmds"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols archive_expsym_cmds="$archive_expsym_cmds"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi archive_expsym_cmds="$archive_expsym_cmds"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' archive_expsym_cmds='' ;; m68k) archive_cmds='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes ;; esac ;; bsdi[45]*) export_dynamic_flag_spec=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported always_export_symbols=yes file_list_spec='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' archive_expsym_cmds='if test DEF = "`$SED -n -e '\''s/^[ ]*//'\'' -e '\''/^\(;.*\)*$/d'\'' -e '\''s/^\(EXPORTS\|LIBRARY\)\([ ].*\)*$/DEF/p'\'' -e q $export_symbols`" ; then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, )='true' enable_shared_with_static_runtimes=yes exclude_expsyms='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' export_symbols_cmds='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[BCDGRS][ ]/s/.*[ ]\([^ ]*\)/\1,DATA/'\'' | $SED -e '\''/^[AITW][ ]/s/.*[ ]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib old_postinstall_cmds='chmod 644 $oldlib' postlink_cmds='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper hardcode_libdir_flag_spec=' ' allow_undefined_flag=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. archive_cmds='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. old_archive_from_new_cmds='true' # FIXME: Should let the user specify the lib program. old_archive_cmds='lib -OUT:$oldlib$oldobjs$old_deplibs' enable_shared_with_static_runtimes=yes ;; esac ;; darwin* | rhapsody*) archive_cmds_need_lc=no hardcode_direct=no hardcode_automatic=yes hardcode_shlibpath_var=unsupported if test yes = "$lt_cv_ld_force_load"; then whole_archive_flag_spec='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' else whole_archive_flag_spec='' fi link_all_deplibs=yes allow_undefined_flag=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all archive_cmds="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" module_cmds="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" archive_expsym_cmds="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" module_expsym_cmds="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" else ld_shlibs=no fi ;; dgux*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; hpux9*) if test yes = "$GCC"; then archive_cmds='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else archive_cmds='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes export_dynamic_flag_spec='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) archive_cmds='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) archive_cmds='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) archive_cmds='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) archive_cmds='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if $CC understands -b" >&5 printf %s "checking if $CC understands -b... " >&6; } if test ${lt_cv_prog_compiler__b+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_prog_compiler__b=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -b" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&5 $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then lt_cv_prog_compiler__b=yes fi else lt_cv_prog_compiler__b=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_prog_compiler__b" >&5 printf "%s\n" "$lt_cv_prog_compiler__b" >&6; } if test yes = "$lt_cv_prog_compiler__b"; then archive_cmds='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi ;; esac fi if test no = "$with_gnu_ld"; then hardcode_libdir_flag_spec='$wl+b $wl$libdir' hardcode_libdir_separator=: case $host_cpu in hppa*64*|ia64*) hardcode_direct=no hardcode_shlibpath_var=no ;; *) hardcode_direct=yes hardcode_direct_absolute=yes export_dynamic_flag_spec='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. hardcode_minus_L=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then archive_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the $host_os linker accepts -exported_symbol" >&5 printf %s "checking whether the $host_os linker accepts -exported_symbol... " >&6; } if test ${lt_cv_irix_exported_symbol+y} then : printf %s "(cached) " >&6 else $as_nop save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int foo (void) { return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : lt_cv_irix_exported_symbol=yes else $as_nop lt_cv_irix_exported_symbol=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_irix_exported_symbol" >&5 printf "%s\n" "$lt_cv_irix_exported_symbol" >&6; } if test yes = "$lt_cv_irix_exported_symbol"; then archive_expsym_cmds='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi link_all_deplibs=no else archive_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: inherit_rpath=yes link_all_deplibs=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler ld_shlibs=yes archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then archive_cmds='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else archive_cmds='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi hardcode_libdir_flag_spec='-R$libdir' hardcode_direct=yes hardcode_shlibpath_var=no ;; newsos6) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: hardcode_shlibpath_var=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then hardcode_direct=yes hardcode_shlibpath_var=no hardcode_direct_absolute=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' hardcode_libdir_flag_spec='$wl-rpath,$libdir' export_dynamic_flag_spec='$wl-E' else archive_cmds='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' hardcode_libdir_flag_spec='$wl-rpath,$libdir' fi else ld_shlibs=no fi ;; os2*) hardcode_libdir_flag_spec='-L$libdir' hardcode_minus_L=yes allow_undefined_flag=unsupported shrext_cmds=.dll archive_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' archive_expsym_cmds='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' old_archive_From_new_cmds='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' enable_shared_with_static_runtimes=yes ;; osf3*) if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi archive_cmds_need_lc='no' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' hardcode_libdir_separator=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then allow_undefined_flag=' $wl-expect_unresolved $wl\*' archive_cmds='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' hardcode_libdir_flag_spec='$wl-rpath $wl$libdir' else allow_undefined_flag=' -expect_unresolved \*' archive_cmds='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' archive_expsym_cmds='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly hardcode_libdir_flag_spec='-rpath $libdir' fi archive_cmds_need_lc='no' hardcode_libdir_separator=: ;; solaris*) no_undefined_flag=' -z defs' if test yes = "$GCC"; then wlarc='$wl' archive_cmds='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' archive_cmds='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' archive_cmds='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi hardcode_libdir_flag_spec='-R$libdir' hardcode_shlibpath_var=no case $host_os in solaris2.[0-5] | solaris2.[0-5].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then whole_archive_flag_spec='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else whole_archive_flag_spec='-z allextract$convenience -z defaultextract' fi ;; esac link_all_deplibs=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. archive_cmds='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi hardcode_libdir_flag_spec='-L$libdir' hardcode_direct=yes hardcode_minus_L=yes hardcode_shlibpath_var=no ;; sysv4) case $host_vendor in sni) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. archive_cmds='$LD -G -o $lib $libobjs $deplibs $linker_flags' reload_cmds='$CC -r -o $output$reload_objs' hardcode_direct=no ;; motorola) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_direct=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' hardcode_shlibpath_var=no ;; sysv4.3*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no export_dynamic_flag_spec='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_shlibpath_var=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes ld_shlibs=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[01].[10]* | unixware7* | sco3.2v5.0.[024]*) no_undefined_flag='$wl-z,text' archive_cmds_need_lc=no hardcode_shlibpath_var=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. no_undefined_flag='$wl-z,text' allow_undefined_flag='$wl-z,nodefs' archive_cmds_need_lc=no hardcode_shlibpath_var=no hardcode_libdir_flag_spec='$wl-R,$libdir' hardcode_libdir_separator=':' link_all_deplibs=yes export_dynamic_flag_spec='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then archive_cmds='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else archive_cmds='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' archive_expsym_cmds='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) archive_cmds='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' hardcode_libdir_flag_spec='-L$libdir' hardcode_shlibpath_var=no ;; *) ld_shlibs=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) export_dynamic_flag_spec='$wl-Blargedynsym' ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ld_shlibs" >&5 printf "%s\n" "$ld_shlibs" >&6; } test no = "$ld_shlibs" && can_build_shared=no with_gnu_ld=$with_gnu_ld # # Do we need to explicitly link libc? # case "x$archive_cmds_need_lc" in x|xyes) # Assume -lc should be added archive_cmds_need_lc=yes if test yes,yes = "$GCC,$enable_shared"; then case $archive_cmds in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether -lc should be explicitly linked in" >&5 printf %s "checking whether -lc should be explicitly linked in... " >&6; } if test ${lt_cv_archive_cmds_need_lc+y} then : printf %s "(cached) " >&6 else $as_nop $RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$lt_prog_compiler_wl pic_flag=$lt_prog_compiler_pic compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$allow_undefined_flag allow_undefined_flag= if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1\""; } >&5 (eval $archive_cmds 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } then lt_cv_archive_cmds_need_lc=no else lt_cv_archive_cmds_need_lc=yes fi allow_undefined_flag=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_archive_cmds_need_lc" >&5 printf "%s\n" "$lt_cv_archive_cmds_need_lc" >&6; } archive_cmds_need_lc=$lt_cv_archive_cmds_need_lc ;; esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking dynamic linker characteristics" >&5 printf %s "checking dynamic linker characteristics... " >&6; } if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([A-Za-z]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[lt_foo]++; } if (lt_freq[lt_foo] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([A-Za-z]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[4-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[01] | aix4.[01].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a(lib.so.V)' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V($shared_archive_member_spec.o), lib.a(lib.so.V)" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a(lib.so.V), lib.so.V($shared_archive_member_spec.o)" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([^/]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[45]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api" ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([a-zA-Z]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | $GREP ';[c-zC-Z]:/' >/dev/null; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[.]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib" sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[23].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[01]* | freebsdelf3.[01]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[2-9]* | freebsdelf3.[2-9]* | \ freebsd4.[0-5] | freebsdelf4.[0-5] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[3-9]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. hardcode_libdir_flag_spec='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH if test ${lt_cv_shlibpath_overrides_runpath+y} then : printf %s "(cached) " >&6 else $as_nop lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$lt_prog_compiler_wl\"; \ LDFLAGS=\"\$LDFLAGS $hardcode_libdir_flag_spec\"" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : if ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null then : lt_cv_shlibpath_overrides_runpath=yes fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LDFLAGS=$save_LDFLAGS libdir=$save_libdir fi shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \$2)); skip = 1; } { if (!skip) print \$0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $dynamic_linker" >&5 printf "%s\n" "$dynamic_linker" >&6; } test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to hardcode library paths into programs" >&5 printf %s "checking how to hardcode library paths into programs... " >&6; } hardcode_action= if test -n "$hardcode_libdir_flag_spec" || test -n "$runpath_var" || test yes = "$hardcode_automatic"; then # We can hardcode non-existent directories. if test no != "$hardcode_direct" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, )" && test no != "$hardcode_minus_L"; then # Linking always hardcodes the temporary library directory. hardcode_action=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. hardcode_action=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. hardcode_action=unsupported fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $hardcode_action" >&5 printf "%s\n" "$hardcode_action" >&6; } if test relink = "$hardcode_action" || test yes = "$inherit_rpath"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it { 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 : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else $as_nop lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes fi ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) ac_fn_c_check_func "$LINENO" "shl_load" "ac_cv_func_shl_load" if test "x$ac_cv_func_shl_load" = xyes then : lt_cv_dlopen=shl_load else $as_nop { 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 : lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld else $as_nop ac_fn_c_check_func "$LINENO" "dlopen" "ac_cv_func_dlopen" if test "x$ac_cv_func_dlopen" = xyes then : lt_cv_dlopen=dlopen else $as_nop { 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 : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dlopen in -lsvld" >&5 printf %s "checking for dlopen in -lsvld... " >&6; } if test ${ac_cv_lib_svld_dlopen+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lsvld $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_svld_dlopen=yes else $as_nop ac_cv_lib_svld_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_svld_dlopen" >&5 printf "%s\n" "$ac_cv_lib_svld_dlopen" >&6; } if test "x$ac_cv_lib_svld_dlopen" = xyes then : lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for dld_link in -ldld" >&5 printf %s "checking for dld_link in -ldld... " >&6; } if test ${ac_cv_lib_dld_dld_link+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 dld_link (); int main (void) { return dld_link (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_dld_dld_link=yes else $as_nop ac_cv_lib_dld_dld_link=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_dld_link" >&5 printf "%s\n" "$ac_cv_lib_dld_dld_link" >&6; } if test "x$ac_cv_lib_dld_dld_link" = xyes then : lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld fi fi fi fi fi fi ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a program can dlopen itself" >&5 printf %s "checking whether a program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self+y} then : printf %s "(cached) " >&6 else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self=no ;; esac else : # compilation failed lt_cv_dlopen_self=no fi fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self" >&5 printf "%s\n" "$lt_cv_dlopen_self" >&6; } if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether a statically linked program can dlopen itself" >&5 printf %s "checking whether a statically linked program can dlopen itself... " >&6; } if test ${lt_cv_dlopen_self_static+y} then : printf %s "(cached) " >&6 else $as_nop if test yes = "$cross_compiling"; then : lt_cv_dlopen_self_static=cross else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF #line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; } _LT_EOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&5 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlneed_uscore) lt_cv_dlopen_self_static=yes ;; x$lt_dlunknown|x*) lt_cv_dlopen_self_static=no ;; esac else : # compilation failed lt_cv_dlopen_self_static=no fi fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $lt_cv_dlopen_self_static" >&5 printf "%s\n" "$lt_cv_dlopen_self_static" >&6; } fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi striplib= old_striplib= { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stripping libraries is possible" >&5 printf %s "checking whether stripping libraries is possible... " >&6; } if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" { 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 ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } ;; esac fi # Report what library types will actually be built { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if libtool supports shared libraries" >&5 printf %s "checking if libtool supports shared libraries... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $can_build_shared" >&5 printf "%s\n" "$can_build_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build shared libraries" >&5 printf %s "checking whether to build shared libraries... " >&6; } test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[4-9]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_shared" >&5 printf "%s\n" "$enable_shared" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to build static libraries" >&5 printf %s "checking whether to build static libraries... " >&6; } # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $enable_static" >&5 printf "%s\n" "$enable_static" >&6; } 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 CC=$lt_save_CC ac_config_commands="$ac_config_commands libtool" # Only expand once: : ${LEX='flex'} : ${LEXLIB='-lfl'} : ${LEX_OUTPUT_ROOT='lex.yy'} : ${YACC='bison -o y.tab.c'} canonical=$host # Check whether --enable-cross-guesses was given. if test ${enable_cross_guesses+y} then : enableval=$enable_cross_guesses; if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: invalid argument supplied to --enable-cross-guesses" >&5 printf "%s\n" "$as_me: WARNING: invalid argument supplied to --enable-cross-guesses" >&2;} enableval=conservative fi gl_cross_guesses="$enableval" else $as_nop gl_cross_guesses=conservative fi if test $gl_cross_guesses = risky; then gl_cross_guess_normal="guessing yes" gl_cross_guess_inverted="guessing no" else gl_cross_guess_normal="guessing no" gl_cross_guess_inverted="guessing yes" fi LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ HAVE_CHOWN=1; HAVE_COPY_FILE_RANGE=1; HAVE_DUP3=1; HAVE_EUIDACCESS=1; HAVE_EXECVPE=1; HAVE_FACCESSAT=1; HAVE_FCHDIR=1; HAVE_FCHOWNAT=1; HAVE_FDATASYNC=1; HAVE_FSYNC=1; HAVE_FTRUNCATE=1; HAVE_GETDTABLESIZE=1; HAVE_GETENTROPY=1; HAVE_GETGROUPS=1; HAVE_GETHOSTNAME=1; HAVE_GETLOGIN=1; HAVE_GETPAGESIZE=1; HAVE_GETPASS=1; HAVE_GROUP_MEMBER=1; HAVE_LCHOWN=1; HAVE_LINK=1; HAVE_LINKAT=1; HAVE_PIPE=1; HAVE_PIPE2=1; HAVE_PREAD=1; HAVE_PWRITE=1; HAVE_READLINK=1; HAVE_READLINKAT=1; HAVE_SETHOSTNAME=1; HAVE_SLEEP=1; HAVE_SYMLINK=1; HAVE_SYMLINKAT=1; HAVE_UNLINKAT=1; HAVE_USLEEP=1; HAVE_DECL_ENVIRON=1; HAVE_DECL_EXECVPE=1; HAVE_DECL_FCHDIR=1; HAVE_DECL_FDATASYNC=1; HAVE_DECL_GETDOMAINNAME=1; HAVE_DECL_GETLOGIN=1; HAVE_DECL_GETLOGIN_R=1; HAVE_DECL_GETPAGESIZE=1; HAVE_DECL_GETUSERSHELL=1; HAVE_DECL_SETHOSTNAME=1; HAVE_DECL_TRUNCATE=1; HAVE_DECL_TTYNAME_R=1; HAVE_OS_H=0; HAVE_SYS_PARAM_H=0; REPLACE_ACCESS=0; REPLACE_CHOWN=0; REPLACE_CLOSE=0; REPLACE_COPY_FILE_RANGE=0; REPLACE_DUP=0; REPLACE_DUP2=0; REPLACE_EXECL=0; REPLACE_EXECLE=0; REPLACE_EXECLP=0; REPLACE_EXECV=0; REPLACE_EXECVE=0; REPLACE_EXECVP=0; REPLACE_EXECVPE=0; REPLACE_FACCESSAT=0; REPLACE_FCHOWNAT=0; REPLACE_FTRUNCATE=0; REPLACE_GETCWD=0; REPLACE_GETDOMAINNAME=0; REPLACE_GETDTABLESIZE=0; REPLACE_GETLOGIN_R=0; REPLACE_GETGROUPS=0; REPLACE_GETPAGESIZE=0; REPLACE_GETPASS=0; REPLACE_GETPASS_FOR_GETPASS_GNU=0; REPLACE_ISATTY=0; REPLACE_LCHOWN=0; REPLACE_LINK=0; REPLACE_LINKAT=0; REPLACE_LSEEK=0; REPLACE_PREAD=0; REPLACE_PWRITE=0; REPLACE_READ=0; REPLACE_READLINK=0; REPLACE_READLINKAT=0; REPLACE_RMDIR=0; REPLACE_SLEEP=0; REPLACE_SYMLINK=0; REPLACE_SYMLINKAT=0; REPLACE_TRUNCATE=0; REPLACE_TTYNAME_R=0; REPLACE_UNLINK=0; REPLACE_UNLINKAT=0; REPLACE_USLEEP=0; REPLACE_WRITE=0; UNISTD_H_HAVE_SYS_RANDOM_H=0; UNISTD_H_HAVE_WINSOCK2_H=0; UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; GL_GNULIB_ACCESS=0 GL_GNULIB_CHDIR=0 GL_GNULIB_CHOWN=0 GL_GNULIB_CLOSE=0 GL_GNULIB_COPY_FILE_RANGE=0 GL_GNULIB_DUP=0 GL_GNULIB_DUP2=0 GL_GNULIB_DUP3=0 GL_GNULIB_ENVIRON=0 GL_GNULIB_EUIDACCESS=0 GL_GNULIB_EXECL=0 GL_GNULIB_EXECLE=0 GL_GNULIB_EXECLP=0 GL_GNULIB_EXECV=0 GL_GNULIB_EXECVE=0 GL_GNULIB_EXECVP=0 GL_GNULIB_EXECVPE=0 GL_GNULIB_FACCESSAT=0 GL_GNULIB_FCHDIR=0 GL_GNULIB_FCHOWNAT=0 GL_GNULIB_FDATASYNC=0 GL_GNULIB_FSYNC=0 GL_GNULIB_FTRUNCATE=0 GL_GNULIB_GETCWD=0 GL_GNULIB_GETDOMAINNAME=0 GL_GNULIB_GETDTABLESIZE=0 GL_GNULIB_GETENTROPY=0 GL_GNULIB_GETGROUPS=0 GL_GNULIB_GETHOSTNAME=0 GL_GNULIB_GETLOGIN=0 GL_GNULIB_GETLOGIN_R=0 GL_GNULIB_GETOPT_POSIX=0 GL_GNULIB_GETPAGESIZE=0 GL_GNULIB_GETPASS=0 GL_GNULIB_GETPASS_GNU=0 GL_GNULIB_GETUSERSHELL=0 GL_GNULIB_GROUP_MEMBER=0 GL_GNULIB_ISATTY=0 GL_GNULIB_LCHOWN=0 GL_GNULIB_LINK=0 GL_GNULIB_LINKAT=0 GL_GNULIB_LSEEK=0 GL_GNULIB_PIPE=0 GL_GNULIB_PIPE2=0 GL_GNULIB_PREAD=0 GL_GNULIB_PWRITE=0 GL_GNULIB_READ=0 GL_GNULIB_READLINK=0 GL_GNULIB_READLINKAT=0 GL_GNULIB_RMDIR=0 GL_GNULIB_SETHOSTNAME=0 GL_GNULIB_SLEEP=0 GL_GNULIB_SYMLINK=0 GL_GNULIB_SYMLINKAT=0 GL_GNULIB_TRUNCATE=0 GL_GNULIB_TTYNAME_R=0 GL_GNULIB_UNISTD_H_GETOPT=0 GL_GNULIB_UNISTD_H_NONBLOCKING=0 GL_GNULIB_UNISTD_H_SIGPIPE=0 GL_GNULIB_UNLINK=0 GL_GNULIB_UNLINKAT=0 GL_GNULIB_USLEEP=0 GL_GNULIB_WRITE=0 GL_GNULIB_MDA_ACCESS=1 GL_GNULIB_MDA_CHDIR=1 GL_GNULIB_MDA_CLOSE=1 GL_GNULIB_MDA_DUP=1 GL_GNULIB_MDA_DUP2=1 GL_GNULIB_MDA_EXECL=1 GL_GNULIB_MDA_EXECLE=1 GL_GNULIB_MDA_EXECLP=1 GL_GNULIB_MDA_EXECV=1 GL_GNULIB_MDA_EXECVE=1 GL_GNULIB_MDA_EXECVP=1 GL_GNULIB_MDA_EXECVPE=1 GL_GNULIB_MDA_GETCWD=1 GL_GNULIB_MDA_GETPID=1 GL_GNULIB_MDA_ISATTY=1 GL_GNULIB_MDA_LSEEK=1 GL_GNULIB_MDA_READ=1 GL_GNULIB_MDA_RMDIR=1 GL_GNULIB_MDA_SWAB=1 GL_GNULIB_MDA_UNLINK=1 GL_GNULIB_MDA_WRITE=1 gl_need_lib_has_acl= # Check whether --enable-acl was given. if test ${enable_acl+y} then : enableval=$enable_acl; else $as_nop enable_acl=auto fi ac_func= for ac_item in $ac_func_c_list do if test $ac_func; then ac_fn_c_check_func "$LINENO" $ac_func ac_cv_func_$ac_func if eval test \"x\$ac_cv_func_$ac_func\" = xyes; then echo "#define $ac_item 1" >> confdefs.h fi ac_func= else ac_func=$ac_item fi done 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 # The Ultrix 4.2 mips builtin alloca declared by alloca.h only works # for constant arguments. Useless! { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working alloca.h" >&5 printf %s "checking for working alloca.h... " >&6; } if test ${ac_cv_working_alloca_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <alloca.h> int main (void) { char *p = (char *) alloca (2 * sizeof (int)); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_working_alloca_h=yes else $as_nop ac_cv_working_alloca_h=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_working_alloca_h" >&5 printf "%s\n" "$ac_cv_working_alloca_h" >&6; } if test $ac_cv_working_alloca_h = yes; then printf "%s\n" "#define HAVE_ALLOCA_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca" >&5 printf %s "checking for alloca... " >&6; } if test ${ac_cv_func_alloca_works+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_working_alloca_h = yes; then ac_cv_func_alloca_works=yes else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <stddef.h> #ifndef alloca # ifdef __GNUC__ # define alloca __builtin_alloca # elif defined _MSC_VER # include <malloc.h> # define alloca _alloca # else # ifdef __cplusplus extern "C" # endif void *alloca (size_t); # endif #endif int main (void) { char *p = (char *) alloca (1); if (p) return 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_func_alloca_works=yes else $as_nop ac_cv_func_alloca_works=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_func_alloca_works" >&5 printf "%s\n" "$ac_cv_func_alloca_works" >&6; } fi if test $ac_cv_func_alloca_works = yes; then printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h else # The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. ALLOCA=\${LIBOBJDIR}alloca.$ac_objext printf "%s\n" "#define C_ALLOCA 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking stack direction for C alloca" >&5 printf %s "checking stack direction for C alloca... " >&6; } if test ${ac_cv_c_stack_direction+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_c_stack_direction=0 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_c_stack_direction=1 else $as_nop ac_cv_c_stack_direction=-1 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: $ac_cv_c_stack_direction" >&5 printf "%s\n" "$ac_cv_c_stack_direction" >&6; } printf "%s\n" "#define STACK_DIRECTION $ac_cv_c_stack_direction" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C/C++ restrict keyword" >&5 printf %s "checking for C/C++ restrict keyword... " >&6; } if test ${ac_cv_c_restrict+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_c_restrict=no # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see: # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html # Put 'restrict' last, because C++ lacks it. for ac_kw in __restrict__ __restrict _Restrict restrict; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } int main (void) { int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_restrict=$ac_kw fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test "$ac_cv_c_restrict" != no && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_restrict" >&5 printf "%s\n" "$ac_cv_c_restrict" >&6; } case $ac_cv_c_restrict in restrict) ;; no) printf "%s\n" "#define restrict /**/" >>confdefs.h ;; *) printf "%s\n" "#define restrict $ac_cv_c_restrict" >>confdefs.h ;; esac HAVE_BTOWC=1; HAVE_MBSINIT=1; HAVE_MBRTOWC=1; HAVE_MBRLEN=1; HAVE_MBSRTOWCS=1; HAVE_MBSNRTOWCS=1; HAVE_WCRTOMB=1; HAVE_WCSRTOMBS=1; HAVE_WCSNRTOMBS=1; HAVE_WMEMCHR=1; HAVE_WMEMCMP=1; HAVE_WMEMCPY=1; HAVE_WMEMMOVE=1; HAVE_WMEMPCPY=1; HAVE_WMEMSET=1; HAVE_WCSLEN=1; HAVE_WCSNLEN=1; HAVE_WCSCPY=1; HAVE_WCPCPY=1; HAVE_WCSNCPY=1; HAVE_WCPNCPY=1; HAVE_WCSCAT=1; HAVE_WCSNCAT=1; HAVE_WCSCMP=1; HAVE_WCSNCMP=1; HAVE_WCSCASECMP=1; HAVE_WCSNCASECMP=1; HAVE_WCSCOLL=1; HAVE_WCSXFRM=1; HAVE_WCSDUP=1; HAVE_WCSCHR=1; HAVE_WCSRCHR=1; HAVE_WCSCSPN=1; HAVE_WCSSPN=1; HAVE_WCSPBRK=1; HAVE_WCSSTR=1; HAVE_WCSTOK=1; HAVE_WCSWIDTH=1; HAVE_WCSFTIME=1; HAVE_DECL_WCTOB=1; HAVE_DECL_WCSDUP=1; HAVE_DECL_WCWIDTH=1; REPLACE_MBSTATE_T=0; REPLACE_BTOWC=0; REPLACE_WCTOB=0; REPLACE_MBSINIT=0; REPLACE_MBRTOWC=0; REPLACE_MBRLEN=0; REPLACE_MBSRTOWCS=0; REPLACE_MBSNRTOWCS=0; REPLACE_WCRTOMB=0; REPLACE_WCSRTOMBS=0; REPLACE_WCSNRTOMBS=0; REPLACE_WCWIDTH=0; REPLACE_WCSWIDTH=0; REPLACE_WCSFTIME=0; REPLACE_WCSTOK=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <wchar.h> uses 'inline' correctly" >&5 printf %s "checking whether <wchar.h> uses 'inline' correctly... " >&6; } if test ${gl_cv_header_wchar_h_correct_inline+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_header_wchar_h_correct_inline=yes case "$host_os" in *-gnu* | gnu*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define wcstod renamed_wcstod #include <wchar.h> extern int zero (void); int main () { return zero(); } _ACEOF save_ac_compile="$ac_compile" ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` if echo '#include "conftest.c"' >conftest1.c \ && { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define wcstod renamed_wcstod #include <wchar.h> int zero (void) { return 0; } _ACEOF ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` if echo '#include "conftest.c"' >conftest2.c \ && { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_compile\""; } >&5 (eval $ac_compile) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&5 2>&1; then : else gl_cv_header_wchar_h_correct_inline=no fi fi fi ac_compile="$save_ac_compile" rm -f conftest12.c conftest12.$ac_objext conftest$ac_exeext ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_wchar_h_correct_inline" >&5 printf "%s\n" "$gl_cv_header_wchar_h_correct_inline" >&6; } if test $gl_cv_header_wchar_h_correct_inline = no; then as_fn_error $? "<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted." "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for nl_langinfo and CODESET" >&5 printf %s "checking for nl_langinfo and CODESET... " >&6; } if test ${am_cv_langinfo_codeset+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int main (void) { char* cs = nl_langinfo(CODESET); return !cs; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : am_cv_langinfo_codeset=yes else $as_nop am_cv_langinfo_codeset=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: $am_cv_langinfo_codeset" >&5 printf "%s\n" "$am_cv_langinfo_codeset" >&6; } if test $am_cv_langinfo_codeset = yes; then printf "%s\n" "#define HAVE_LANGINFO_CODESET 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional french locale" >&5 printf %s "checking for a traditional french locale... " >&6; } if test ${gt_cv_locale_fr+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr" >&5 printf "%s\n" "$gt_cv_locale_fr" >&6; } LOCALE_FR=$gt_cv_locale_fr GL_GNULIB_BTOWC=0 GL_GNULIB_WCTOB=0 GL_GNULIB_MBSINIT=0 GL_GNULIB_MBRTOWC=0 GL_GNULIB_MBRLEN=0 GL_GNULIB_MBSRTOWCS=0 GL_GNULIB_MBSNRTOWCS=0 GL_GNULIB_WCRTOMB=0 GL_GNULIB_WCSRTOMBS=0 GL_GNULIB_WCSNRTOMBS=0 GL_GNULIB_WCWIDTH=0 GL_GNULIB_WMEMCHR=0 GL_GNULIB_WMEMCMP=0 GL_GNULIB_WMEMCPY=0 GL_GNULIB_WMEMMOVE=0 GL_GNULIB_WMEMPCPY=0 GL_GNULIB_WMEMSET=0 GL_GNULIB_WCSLEN=0 GL_GNULIB_WCSNLEN=0 GL_GNULIB_WCSCPY=0 GL_GNULIB_WCPCPY=0 GL_GNULIB_WCSNCPY=0 GL_GNULIB_WCPNCPY=0 GL_GNULIB_WCSCAT=0 GL_GNULIB_WCSNCAT=0 GL_GNULIB_WCSCMP=0 GL_GNULIB_WCSNCMP=0 GL_GNULIB_WCSCASECMP=0 GL_GNULIB_WCSNCASECMP=0 GL_GNULIB_WCSCOLL=0 GL_GNULIB_WCSXFRM=0 GL_GNULIB_WCSDUP=0 GL_GNULIB_WCSCHR=0 GL_GNULIB_WCSRCHR=0 GL_GNULIB_WCSCSPN=0 GL_GNULIB_WCSSPN=0 GL_GNULIB_WCSPBRK=0 GL_GNULIB_WCSSTR=0 GL_GNULIB_WCSTOK=0 GL_GNULIB_WCSWIDTH=0 GL_GNULIB_WCSFTIME=0 GL_GNULIB_MDA_WCSDUP=1 GL_GNULIB__EXIT=0 GL_GNULIB_ALIGNED_ALLOC=0 GL_GNULIB_ATOLL=0 GL_GNULIB_CALLOC_GNU=0 GL_GNULIB_CALLOC_POSIX=0 GL_GNULIB_CANONICALIZE_FILE_NAME=0 GL_GNULIB_FREE_POSIX=0 GL_GNULIB_GETLOADAVG=0 GL_GNULIB_GETSUBOPT=0 GL_GNULIB_GRANTPT=0 GL_GNULIB_MALLOC_GNU=0 GL_GNULIB_MALLOC_POSIX=0 GL_GNULIB_MBTOWC=0 GL_GNULIB_MKDTEMP=0 GL_GNULIB_MKOSTEMP=0 GL_GNULIB_MKOSTEMPS=0 GL_GNULIB_MKSTEMP=0 GL_GNULIB_MKSTEMPS=0 GL_GNULIB_POSIX_MEMALIGN=0 GL_GNULIB_POSIX_OPENPT=0 GL_GNULIB_PTSNAME=0 GL_GNULIB_PTSNAME_R=0 GL_GNULIB_PUTENV=0 GL_GNULIB_QSORT_R=0 GL_GNULIB_RANDOM=0 GL_GNULIB_RANDOM_R=0 GL_GNULIB_REALLOCARRAY=0 GL_GNULIB_REALLOC_GNU=0 GL_GNULIB_REALLOC_POSIX=0 GL_GNULIB_REALPATH=0 GL_GNULIB_RPMATCH=0 GL_GNULIB_SECURE_GETENV=0 GL_GNULIB_SETENV=0 GL_GNULIB_STRTOD=0 GL_GNULIB_STRTOL=0 GL_GNULIB_STRTOLD=0 GL_GNULIB_STRTOLL=0 GL_GNULIB_STRTOUL=0 GL_GNULIB_STRTOULL=0 GL_GNULIB_SYSTEM_POSIX=0 GL_GNULIB_UNLOCKPT=0 GL_GNULIB_UNSETENV=0 GL_GNULIB_WCTOMB=0 GL_GNULIB_MDA_ECVT=1 GL_GNULIB_MDA_FCVT=1 GL_GNULIB_MDA_GCVT=1 GL_GNULIB_MDA_MKTEMP=1 GL_GNULIB_MDA_PUTENV=1 HAVE__EXIT=1; HAVE_ALIGNED_ALLOC=1; HAVE_ATOLL=1; HAVE_CANONICALIZE_FILE_NAME=1; HAVE_DECL_ECVT=1; HAVE_DECL_FCVT=1; HAVE_DECL_GCVT=1; HAVE_DECL_GETLOADAVG=1; HAVE_GETSUBOPT=1; HAVE_GRANTPT=1; HAVE_INITSTATE=1; HAVE_DECL_INITSTATE=1; HAVE_MBTOWC=1; HAVE_MKDTEMP=1; HAVE_MKOSTEMP=1; HAVE_MKOSTEMPS=1; HAVE_MKSTEMP=1; HAVE_MKSTEMPS=1; HAVE_POSIX_MEMALIGN=1; HAVE_POSIX_OPENPT=1; HAVE_PTSNAME=1; HAVE_PTSNAME_R=1; HAVE_QSORT_R=1; HAVE_RANDOM=1; HAVE_RANDOM_H=1; HAVE_RANDOM_R=1; HAVE_REALLOCARRAY=1; HAVE_REALPATH=1; HAVE_RPMATCH=1; HAVE_SECURE_GETENV=1; HAVE_SETENV=1; HAVE_DECL_SETENV=1; HAVE_SETSTATE=1; HAVE_DECL_SETSTATE=1; HAVE_STRTOD=1; HAVE_STRTOL=1; HAVE_STRTOLD=1; HAVE_STRTOLL=1; HAVE_STRTOUL=1; HAVE_STRTOULL=1; HAVE_STRUCT_RANDOM_DATA=1; HAVE_SYS_LOADAVG_H=0; HAVE_UNLOCKPT=1; HAVE_DECL_UNSETENV=1; REPLACE_ALIGNED_ALLOC=0; REPLACE_CALLOC_FOR_CALLOC_GNU=0; REPLACE_CALLOC_FOR_CALLOC_POSIX=0; REPLACE_CANONICALIZE_FILE_NAME=0; REPLACE_FREE=0; REPLACE_INITSTATE=0; REPLACE_MALLOC_FOR_MALLOC_GNU=0; REPLACE_MALLOC_FOR_MALLOC_POSIX=0; REPLACE_MBTOWC=0; REPLACE_MKSTEMP=0; REPLACE_POSIX_MEMALIGN=0; REPLACE_PTSNAME=0; REPLACE_PTSNAME_R=0; REPLACE_PUTENV=0; REPLACE_QSORT_R=0; REPLACE_RANDOM=0; REPLACE_RANDOM_R=0; REPLACE_REALLOC_FOR_REALLOC_GNU=0; REPLACE_REALLOC_FOR_REALLOC_POSIX=0; REPLACE_REALLOCARRAY=0; REPLACE_REALPATH=0; REPLACE_SETENV=0; REPLACE_SETSTATE=0; REPLACE_STRTOD=0; REPLACE_STRTOL=0; REPLACE_STRTOLD=0; REPLACE_STRTOLL=0; REPLACE_STRTOUL=0; REPLACE_STRTOULL=0; REPLACE_UNSETENV=0; REPLACE_WCTOMB=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc is ptrdiff_t safe" >&5 printf %s "checking whether malloc is ptrdiff_t safe... " >&6; } if test ${gl_cv_malloc_ptrdiff+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdint.h> int main (void) { /* 64-bit ptrdiff_t is so wide that no practical platform can exceed it. */ #define WIDE_PTRDIFF (PTRDIFF_MAX >> 31 >> 31 != 0) /* On rare machines where size_t fits in ptrdiff_t there is no problem. */ #define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX) /* glibc 2.30 and later malloc refuses to exceed ptrdiff_t bounds even on 32-bit platforms. We don't know which non-glibc systems are safe. */ #define KNOWN_SAFE (2 < __GLIBC__ + (30 <= __GLIBC_MINOR__)) #if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE return 0; #else #error "malloc might not be ptrdiff_t safe" syntax error #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_malloc_ptrdiff=yes else $as_nop gl_cv_malloc_ptrdiff=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: $gl_cv_malloc_ptrdiff" >&5 printf "%s\n" "$gl_cv_malloc_ptrdiff" >&6; } test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC_FOR_MALLOC_POSIX=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc, realloc, calloc set errno on failure" >&5 printf %s "checking whether malloc, realloc, calloc set errno on failure... " >&6; } if test ${gl_cv_func_malloc_posix+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in mingw*) gl_cv_func_malloc_posix=no ;; irix* | solaris*) gl_cv_func_malloc_posix=no ;; *) gl_cv_func_malloc_posix=yes ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_malloc_posix" >&5 printf "%s\n" "$gl_cv_func_malloc_posix" >&6; } if test "$gl_cv_func_malloc_posix" = yes; then printf "%s\n" "#define HAVE_MALLOC_POSIX 1" >>confdefs.h else REPLACE_MALLOC_FOR_MALLOC_POSIX=1 fi if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_CALLOC_FOR_CALLOC_POSIX=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lstat correctly handles trailing slash" >&5 printf %s "checking whether lstat correctly handles trailing slash... " >&6; } if test ${gl_cv_func_lstat_dereferences_slashed_symlink+y} then : printf %s "(cached) " >&6 else $as_nop rm -f conftest.sym conftest.file echo >conftest.file if test "$cross_compiling" = yes then : case "$host_os" in linux-* | linux) # Guess yes on Linux systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; *-gnu* | gnu*) # Guess yes on glibc systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; mingw*) # Guess no on native Windows. gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; *) # If we don't know, obey --enable-cross-guesses. gl_cv_func_lstat_dereferences_slashed_symlink="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { struct stat sbuf; if (symlink ("conftest.file", "conftest.sym") != 0) return 1; /* Linux will dereference the symlink and fail, as required by POSIX. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_lstat_dereferences_slashed_symlink=yes else $as_nop gl_cv_func_lstat_dereferences_slashed_symlink=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.sym conftest.file fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lstat_dereferences_slashed_symlink" >&5 printf "%s\n" "$gl_cv_func_lstat_dereferences_slashed_symlink" >&6; } case "$gl_cv_func_lstat_dereferences_slashed_symlink" in *yes) printf "%s\n" "#define LSTAT_FOLLOWS_SLASHED_SYMLINK 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 printf %s "checking whether // is distinct from /... " >&6; } if test ${gl_cv_double_slash_root+y} then : printf %s "(cached) " >&6 else $as_nop if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # <bug-gnulib@gnu.org>. case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 printf "%s\n" "$gl_cv_double_slash_root" >&6; } if test "$gl_cv_double_slash_root" = yes; then printf "%s\n" "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether realpath works" >&5 printf %s "checking whether realpath works... " >&6; } if test ${gl_cv_func_realpath_works+y} then : printf %s "(cached) " >&6 else $as_nop rm -rf conftest.a conftest.d touch conftest.a # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.a conftest.l fi mkdir conftest.d if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;; # Guess 'nearly' on musl systems. *-musl*) gl_cv_func_realpath_works="guessing nearly" ;; # Guess no on Cygwin. cygwin*) gl_cv_func_realpath_works="guessing no" ;; # Guess no on native Windows. mingw*) gl_cv_func_realpath_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_realpath_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include <mach/mach.h> #include <mach/mach_error.h> #include <mach/thread_status.h> #include <mach/exception.h> #include <mach/task.h> #include <pthread.h> /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif defined _WIN32 && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winerror.h> static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include <signal.h> #include <unistd.h> /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif #include <errno.h> #include <stdlib.h> #include <string.h> int main (void) { int result = 0; /* This test fails on Solaris 10. */ { char *name = realpath ("conftest.a", NULL); if (!(name && *name == '/')) result |= 1; free (name); } /* This test fails on older versions of Cygwin. */ { char *name = realpath ("conftest.b/../conftest.a", NULL); if (name != NULL) result |= 2; free (name); } /* This test fails on Cygwin 2.9. */ #if HAVE_LSTAT { char *name = realpath ("conftest.l/../conftest.a", NULL); if (name != NULL || errno != ENOTDIR) result |= 4; free (name); } #endif /* This test fails on Mac OS X 10.13, OpenBSD 6.0. */ { char *name = realpath ("conftest.a/", NULL); if (name != NULL) result |= 8; free (name); } /* This test fails on AIX 7, Solaris 10. */ { char *name1 = realpath (".", NULL); char *name2 = realpath ("conftest.d//./..", NULL); if (! name1 || ! name2 || strcmp (name1, name2)) result |= 16; free (name1); free (name2); } #ifdef __linux__ /* On Linux, // is the same as /. See also double-slash-root.m4. realpath() should respect this. This test fails on musl libc 1.2.2. */ { char *name = realpath ("//", NULL); if (! name || strcmp (name, "/")) result |= 32; free (name); } #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_realpath_works=yes else $as_nop case $? in 32) gl_cv_func_realpath_works=nearly ;; *) gl_cv_func_realpath_works=no ;; esac fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -rf conftest.a conftest.l conftest.d fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_realpath_works" >&5 printf "%s\n" "$gl_cv_func_realpath_works" >&6; } case "$gl_cv_func_realpath_works" in *yes) printf "%s\n" "#define FUNC_REALPATH_WORKS 1" >>confdefs.h ;; *nearly) printf "%s\n" "#define FUNC_REALPATH_NEARLY_WORKS 1" >>confdefs.h ;; esac case "$host_os" in mingw*) ;; *) 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 fi ;; esac if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 printf "%s\n" "#define HAVE_MSVC_INVALID_PARAMETER_HANDLER 1" >>confdefs.h else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi HAVE_OPENDIR=1; HAVE_READDIR=1; HAVE_REWINDDIR=1; HAVE_CLOSEDIR=1; HAVE_DECL_DIRFD=1; HAVE_DECL_FDOPENDIR=1; HAVE_FDOPENDIR=1; HAVE_SCANDIR=1; HAVE_ALPHASORT=1; REPLACE_OPENDIR=0; REPLACE_CLOSEDIR=0; REPLACE_DIRFD=0; REPLACE_FDOPENDIR=0; GL_GNULIB_OPENDIR=0 GL_GNULIB_READDIR=0 GL_GNULIB_REWINDDIR=0 GL_GNULIB_CLOSEDIR=0 GL_GNULIB_DIRFD=0 GL_GNULIB_FDOPENDIR=0 GL_GNULIB_SCANDIR=0 GL_GNULIB_ALPHASORT=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the preprocessor supports include_next" >&5 printf %s "checking whether the preprocessor supports include_next... " >&6; } if test ${gl_cv_have_include_next+y} then : printf %s "(cached) " >&6 else $as_nop rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 cat <<EOF > conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include <stdio.h> #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <conftest.h> _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_have_include_next=yes else $as_nop CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <conftest.h> _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_have_include_next=buggy else $as_nop gl_cv_have_include_next=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 CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_include_next" >&5 printf "%s\n" "$gl_cv_have_include_next" >&6; } PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether source code line length is unlimited" >&5 printf %s "checking whether source code line length is unlimited... " >&6; } if test ${gl_cv_source_line_length_unlimited+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __TANDEM choke me #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "choke me" >/dev/null 2>&1 then : gl_cv_source_line_length_unlimited=no else $as_nop gl_cv_source_line_length_unlimited=yes fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_source_line_length_unlimited" >&5 printf "%s\n" "$gl_cv_source_line_length_unlimited" >&6; } if test $gl_cv_source_line_length_unlimited = no; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi if test $gl_cv_have_include_next = yes; then gl_cv_next_dirent_h='<'dirent.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <dirent.h>" >&5 printf %s "checking absolute name of <dirent.h>... " >&6; } if test ${gl_cv_next_dirent_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_dirent_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <dirent.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'dirent.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_dirent_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_dirent_h gl_cv_next_dirent_h='"'$gl_header'"' else gl_cv_next_dirent_h='<'dirent.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_dirent_h" >&5 printf "%s\n" "$gl_cv_next_dirent_h" >&6; } fi NEXT_DIRENT_H=$gl_cv_next_dirent_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'dirent.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_dirent_h fi NEXT_AS_FIRST_DIRECTIVE_DIRENT_H=$gl_next_as_first_directive if test $ac_cv_header_dirent_h = yes; then HAVE_DIRENT_H=1 else HAVE_DIRENT_H=0 fi { 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 <float.h> #include <limits.h> #include <stdarg.h> #include <stddef.h> 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 gl_mda_defines=' #if defined _WIN32 && !defined __CYGWIN__ #define access _access #define chdir _chdir #define chmod _chmod #define close _close #define creat _creat #define dup _dup #define dup2 _dup2 #define ecvt _ecvt #define execl _execl #define execle _execle #define execlp _execlp #define execv _execv #define execve _execve #define execvp _execvp #define execvpe _execvpe #define fcloseall _fcloseall #define fcvt _fcvt #define fdopen _fdopen #define fileno _fileno #define gcvt _gcvt #define getcwd _getcwd #define getpid _getpid #define getw _getw #define isatty _isatty #define j0 _j0 #define j1 _j1 #define jn _jn #define lfind _lfind #define lsearch _lsearch #define lseek _lseek #define memccpy _memccpy #define mkdir _mkdir #define mktemp _mktemp #define open _open #define putenv _putenv #define putw _putw #define read _read #define rmdir _rmdir #define strdup _strdup #define swab _swab #define tempnam _tempnam #define tzset _tzset #define umask _umask #define unlink _unlink #define utime _utime #define wcsdup _wcsdup #define write _write #define y0 _y0 #define y1 _y1 #define yn _yn #endif ' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if environ is properly declared" >&5 printf %s "checking if environ is properly declared... " >&6; } if test ${gt_cv_var_environ_declaration+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_UNISTD_H #include <unistd.h> #endif /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ #include <stdlib.h> typedef struct { int foo; } foo_t; extern foo_t environ; int main (void) { environ.foo = 1; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_var_environ_declaration=no else $as_nop gt_cv_var_environ_declaration=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: $gt_cv_var_environ_declaration" >&5 printf "%s\n" "$gt_cv_var_environ_declaration" >&6; } if test $gt_cv_var_environ_declaration = yes; then printf "%s\n" "#define HAVE_ENVIRON_DECL 1" >>confdefs.h fi if test $gt_cv_var_environ_declaration != yes; then HAVE_DECL_ENVIRON=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for complete errno.h" >&5 printf %s "checking for complete errno.h... " >&6; } if test ${gl_cv_header_errno_h_complete+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "booboo" >/dev/null 2>&1 then : gl_cv_header_errno_h_complete=no else $as_nop gl_cv_header_errno_h_complete=yes fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_complete" >&5 printf "%s\n" "$gl_cv_header_errno_h_complete" >&6; } if test $gl_cv_header_errno_h_complete = yes; then GL_GENERATE_ERRNO_H=false else if test $gl_cv_have_include_next = yes; then gl_cv_next_errno_h='<'errno.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <errno.h>" >&5 printf %s "checking absolute name of <errno.h>... " >&6; } if test ${gl_cv_next_errno_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'errno.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_errno_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_errno_h gl_cv_next_errno_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_errno_h" >&5 printf "%s\n" "$gl_cv_next_errno_h" >&6; } fi NEXT_ERRNO_H=$gl_cv_next_errno_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'errno.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_errno_h fi NEXT_AS_FIRST_DIRECTIVE_ERRNO_H=$gl_next_as_first_directive GL_GENERATE_ERRNO_H=true fi if $GL_GENERATE_ERRNO_H; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EMULTIHOP value" >&5 printf %s "checking for EMULTIHOP value... " >&6; } if test ${gl_cv_header_errno_h_EMULTIHOP+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_EMULTIHOP=yes else $as_nop gl_cv_header_errno_h_EMULTIHOP=no fi rm -rf conftest* if test $gl_cv_header_errno_h_EMULTIHOP = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef EMULTIHOP yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_EMULTIHOP=hidden fi rm -rf conftest* if test $gl_cv_header_errno_h_EMULTIHOP = hidden; then if ac_fn_c_compute_int "$LINENO" "EMULTIHOP" "gl_cv_header_errno_h_EMULTIHOP" " #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> " then : fi fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EMULTIHOP" >&5 printf "%s\n" "$gl_cv_header_errno_h_EMULTIHOP" >&6; } case $gl_cv_header_errno_h_EMULTIHOP in yes | no) EMULTIHOP_HIDDEN=0; EMULTIHOP_VALUE= ;; *) EMULTIHOP_HIDDEN=1; EMULTIHOP_VALUE="$gl_cv_header_errno_h_EMULTIHOP" ;; esac fi if $GL_GENERATE_ERRNO_H; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ENOLINK value" >&5 printf %s "checking for ENOLINK value... " >&6; } if test ${gl_cv_header_errno_h_ENOLINK+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_ENOLINK=yes else $as_nop gl_cv_header_errno_h_ENOLINK=no fi rm -rf conftest* if test $gl_cv_header_errno_h_ENOLINK = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef ENOLINK yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_ENOLINK=hidden fi rm -rf conftest* if test $gl_cv_header_errno_h_ENOLINK = hidden; then if ac_fn_c_compute_int "$LINENO" "ENOLINK" "gl_cv_header_errno_h_ENOLINK" " #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> " then : fi fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_ENOLINK" >&5 printf "%s\n" "$gl_cv_header_errno_h_ENOLINK" >&6; } case $gl_cv_header_errno_h_ENOLINK in yes | no) ENOLINK_HIDDEN=0; ENOLINK_VALUE= ;; *) ENOLINK_HIDDEN=1; ENOLINK_VALUE="$gl_cv_header_errno_h_ENOLINK" ;; esac fi if $GL_GENERATE_ERRNO_H; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for EOVERFLOW value" >&5 printf %s "checking for EOVERFLOW value... " >&6; } if test ${gl_cv_header_errno_h_EOVERFLOW+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_EOVERFLOW=yes else $as_nop gl_cv_header_errno_h_EOVERFLOW=no fi rm -rf conftest* if test $gl_cv_header_errno_h_EOVERFLOW = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef EOVERFLOW yes #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "yes" >/dev/null 2>&1 then : gl_cv_header_errno_h_EOVERFLOW=hidden fi rm -rf conftest* if test $gl_cv_header_errno_h_EOVERFLOW = hidden; then if ac_fn_c_compute_int "$LINENO" "EOVERFLOW" "gl_cv_header_errno_h_EOVERFLOW" " #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> " then : fi fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_errno_h_EOVERFLOW" >&5 printf "%s\n" "$gl_cv_header_errno_h_EOVERFLOW" >&6; } case $gl_cv_header_errno_h_EOVERFLOW in yes | no) EOVERFLOW_HIDDEN=0; EOVERFLOW_VALUE= ;; *) EOVERFLOW_HIDDEN=1; EOVERFLOW_VALUE="$gl_cv_header_errno_h_EOVERFLOW" ;; esac fi ac_fn_check_decl "$LINENO" "strerror_r" "ac_cv_have_decl_strerror_r" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strerror_r" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_STRERROR_R $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_strerror_r = yes; then # For backward compatibility's sake, define HAVE_STRERROR_R. # (We used to run AC_CHECK_FUNCS_ONCE for strerror_r, as well # as AC_CHECK_DECLS_ONCE.) printf "%s\n" "#define HAVE_STRERROR_R 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror_r returns char *" >&5 printf %s "checking whether strerror_r returns char *... " >&6; } if test ${ac_cv_func_strerror_r_char_p+y} then : printf %s "(cached) " >&6 else $as_nop ac_cv_func_strerror_r_char_p=no if test $ac_cv_have_decl_strerror_r = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> int main (void) { char buf[100]; char x = *strerror_r (0, buf, sizeof buf); char *p = strerror_r (0, buf, sizeof buf); return !p || x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_func_strerror_r_char_p=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_strerror_r_char_p" >&5 printf "%s\n" "$ac_cv_func_strerror_r_char_p" >&6; } if test $ac_cv_func_strerror_r_char_p = yes; then printf "%s\n" "#define STRERROR_R_CHAR_P 1" >>confdefs.h fi XGETTEXT_EXTRA_OPTIONS= { 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 <sys/types.h> _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 type of array argument to getgroups" >&5 printf %s "checking type of array argument to getgroups... " >&6; } if test ${ac_cv_type_getgroups+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : ac_cv_type_getgroups=cross else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Thanks to Mike Rendell for this test. */ $ac_includes_default #define NGID 256 #undef MAX #define MAX(x, y) ((x) > (y) ? (x) : (y)) int main (void) { gid_t gidset[NGID]; int i, n; union { gid_t gval; long int lval; } val; val.lval = -1; for (i = 0; i < NGID; i++) gidset[i] = val.gval; n = getgroups (sizeof (gidset) / MAX (sizeof (int), sizeof (gid_t)) - 1, gidset); /* Exit non-zero if getgroups seems to require an array of ints. This happens when gid_t is short int but getgroups modifies an array of ints. */ return n > 0 && gidset[n] != val.gval; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_type_getgroups=gid_t else $as_nop ac_cv_type_getgroups=int fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $ac_cv_type_getgroups = cross; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "getgroups.*int.*gid_t" >/dev/null 2>&1 then : ac_cv_type_getgroups=gid_t else $as_nop ac_cv_type_getgroups=int fi rm -rf conftest* fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_type_getgroups" >&5 printf "%s\n" "$ac_cv_type_getgroups" >&6; } printf "%s\n" "#define GETGROUPS_T $ac_cv_type_getgroups" >>confdefs.h 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 HAVE_MBSLEN=0; HAVE_EXPLICIT_BZERO=1; HAVE_FFSL=1; HAVE_FFSLL=1; HAVE_DECL_MEMMEM=1; HAVE_MEMPCPY=1; HAVE_DECL_MEMRCHR=1; HAVE_RAWMEMCHR=1; HAVE_STPCPY=1; HAVE_STPNCPY=1; HAVE_STRCHRNUL=1; HAVE_DECL_STRDUP=1; HAVE_DECL_STRNDUP=1; HAVE_DECL_STRNLEN=1; HAVE_STRPBRK=1; HAVE_STRSEP=1; HAVE_STRCASESTR=1; HAVE_DECL_STRTOK_R=1; HAVE_DECL_STRERROR_R=1; HAVE_STRERRORNAME_NP=1; HAVE_SIGABBREV_NP=1; HAVE_SIGDESCR_NP=1; HAVE_DECL_STRSIGNAL=1; HAVE_STRVERSCMP=1; REPLACE_FFSLL=0; REPLACE_MEMCHR=0; REPLACE_MEMMEM=0; REPLACE_STPNCPY=0; REPLACE_STRCHRNUL=0; REPLACE_STRDUP=0; REPLACE_STRNCAT=0; REPLACE_STRNDUP=0; REPLACE_STRNLEN=0; REPLACE_STRSTR=0; REPLACE_STRCASESTR=0; REPLACE_STRTOK_R=0; REPLACE_STRERROR=0; REPLACE_STRERROR_R=0; REPLACE_STRERRORNAME_NP=0; REPLACE_STRSIGNAL=0; UNDEFINE_STRTOK_R=0; GL_GNULIB_EXPLICIT_BZERO=0 GL_GNULIB_FFSL=0 GL_GNULIB_FFSLL=0 GL_GNULIB_MEMCHR=0 GL_GNULIB_MEMMEM=0 GL_GNULIB_MEMPCPY=0 GL_GNULIB_MEMRCHR=0 GL_GNULIB_RAWMEMCHR=0 GL_GNULIB_STPCPY=0 GL_GNULIB_STPNCPY=0 GL_GNULIB_STRCHRNUL=0 GL_GNULIB_STRDUP=0 GL_GNULIB_STRNCAT=0 GL_GNULIB_STRNDUP=0 GL_GNULIB_STRNLEN=0 GL_GNULIB_STRPBRK=0 GL_GNULIB_STRSEP=0 GL_GNULIB_STRSTR=0 GL_GNULIB_STRCASESTR=0 GL_GNULIB_STRTOK_R=0 GL_GNULIB_MBSLEN=0 GL_GNULIB_MBSNLEN=0 GL_GNULIB_MBSCHR=0 GL_GNULIB_MBSRCHR=0 GL_GNULIB_MBSSTR=0 GL_GNULIB_MBSCASECMP=0 GL_GNULIB_MBSNCASECMP=0 GL_GNULIB_MBSPCASECMP=0 GL_GNULIB_MBSCASESTR=0 GL_GNULIB_MBSCSPN=0 GL_GNULIB_MBSPBRK=0 GL_GNULIB_MBSSPN=0 GL_GNULIB_MBSSEP=0 GL_GNULIB_MBSTOK_R=0 GL_GNULIB_STRERROR=0 GL_GNULIB_STRERROR_R=0 GL_GNULIB_STRERRORNAME_NP=0 GL_GNULIB_SIGABBREV_NP=0 GL_GNULIB_SIGDESCR_NP=0 GL_GNULIB_STRSIGNAL=0 GL_GNULIB_STRVERSCMP=0 GL_GNULIB_MDA_MEMCCPY=1 GL_GNULIB_MDA_STRDUP=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ctype.h defines __header_inline" >&5 printf %s "checking whether ctype.h defines __header_inline... " >&6; } if test ${gl_cv_have___header_inline+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <ctype.h> #ifndef __header_inline #error "<ctype.h> does not define __header_inline" #endif _ACEOF if ac_fn_c_try_cpp "$LINENO" then : gl_cv_have___header_inline=yes else $as_nop gl_cv_have___header_inline=no fi rm -f conftest.err conftest.i conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have___header_inline" >&5 printf "%s\n" "$gl_cv_have___header_inline" >&6; } if test "$gl_cv_have___header_inline" = yes; then printf "%s\n" "#define HAVE___HEADER_INLINE 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "sig_atomic_t" "ac_cv_type_sig_atomic_t" "#include <signal.h> " if test "x$ac_cv_type_sig_atomic_t" = xyes then : printf "%s\n" "#define HAVE_SIG_ATOMIC_T 1" >>confdefs.h else $as_nop printf "%s\n" "#define sig_atomic_t int" >>confdefs.h fi ac_fn_check_decl "$LINENO" "fchdir" "ac_cv_have_decl_fchdir" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fchdir" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FCHDIR $ac_have_decl" >>confdefs.h HAVE_FCNTL=1; HAVE_OPENAT=1; REPLACE_CREAT=0; REPLACE_FCNTL=0; REPLACE_OPEN=0; REPLACE_OPENAT=0; GL_GNULIB_CREAT=0 GL_GNULIB_FCNTL=0 GL_GNULIB_NONBLOCKING=0 GL_GNULIB_OPEN=0 GL_GNULIB_OPENAT=0 GL_GNULIB_MDA_CREAT=1 GL_GNULIB_MDA_OPEN=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working fcntl.h" >&5 printf %s "checking for working fcntl.h... " >&6; } if test ${gl_cv_header_working_fcntl_h+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess 'no' on native Windows. mingw*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> # include <stdlib.h> # defined sleep(n) _sleep ((n) * 1000) #endif #include <fcntl.h> $gl_mda_defines #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; int main (void) { int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_header_working_fcntl_h=yes else $as_nop case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac 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: $gl_cv_header_working_fcntl_h" >&5 printf "%s\n" "$gl_cv_header_working_fcntl_h" >&6; } case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac printf "%s\n" "#define HAVE_WORKING_O_NOATIME $ac_val" >>confdefs.h case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac printf "%s\n" "#define HAVE_WORKING_O_NOFOLLOW $ac_val" >>confdefs.h 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 if test $gl_cv_have_include_next = yes; then gl_cv_next_fcntl_h='<'fcntl.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <fcntl.h>" >&5 printf %s "checking absolute name of <fcntl.h>... " >&6; } if test ${gl_cv_next_fcntl_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'fcntl.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_fcntl_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_fcntl_h gl_cv_next_fcntl_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_fcntl_h" >&5 printf "%s\n" "$gl_cv_next_fcntl_h" >&6; } fi NEXT_FCNTL_H=$gl_cv_next_fcntl_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'fcntl.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_fcntl_h fi NEXT_AS_FIRST_DIRECTIVE_FCNTL_H=$gl_next_as_first_directive ac_fn_c_check_func "$LINENO" "eaccess" "ac_cv_func_eaccess" if test "x$ac_cv_func_eaccess" = xyes then : else $as_nop printf "%s\n" "#define eaccess access" >>confdefs.h fi HAVE_FLOCK=1; GL_GNULIB_FLOCK=0 HAVE_ACOSF=1; HAVE_ACOSL=1; HAVE_ASINF=1; HAVE_ASINL=1; HAVE_ATANF=1; HAVE_ATANL=1; HAVE_ATAN2F=1; HAVE_CBRT=1; HAVE_CBRTF=1; HAVE_CBRTL=1; HAVE_COPYSIGN=1; HAVE_COPYSIGNL=1; HAVE_COSF=1; HAVE_COSL=1; HAVE_COSHF=1; HAVE_EXPF=1; HAVE_EXPL=1; HAVE_EXPM1=1; HAVE_EXPM1F=1; HAVE_FABSF=1; HAVE_FABSL=1; HAVE_FMA=1; HAVE_FMAF=1; HAVE_FMAL=1; HAVE_FMODF=1; HAVE_FMODL=1; HAVE_FREXPF=1; HAVE_HYPOTF=1; HAVE_HYPOTL=1; HAVE_ILOGB=1; HAVE_ILOGBF=1; HAVE_ILOGBL=1; HAVE_ISNANF=1; HAVE_ISNAND=1; HAVE_ISNANL=1; HAVE_LDEXPF=1; HAVE_LOGF=1; HAVE_LOGL=1; HAVE_LOG10F=1; HAVE_LOG10L=1; HAVE_LOG1P=1; HAVE_LOG1PF=1; HAVE_LOG1PL=1; HAVE_LOGBF=1; HAVE_LOGBL=1; HAVE_MODFF=1; HAVE_MODFL=1; HAVE_POWF=1; HAVE_REMAINDER=1; HAVE_REMAINDERF=1; HAVE_RINT=1; HAVE_RINTL=1; HAVE_SINF=1; HAVE_SINL=1; HAVE_SINHF=1; HAVE_SQRTF=1; HAVE_SQRTL=1; HAVE_TANF=1; HAVE_TANL=1; HAVE_TANHF=1; HAVE_DECL_ACOSL=1; HAVE_DECL_ASINL=1; HAVE_DECL_ATANL=1; HAVE_DECL_CBRTF=1; HAVE_DECL_CBRTL=1; HAVE_DECL_CEILF=1; HAVE_DECL_CEILL=1; HAVE_DECL_COPYSIGNF=1; HAVE_DECL_COSL=1; HAVE_DECL_EXPL=1; HAVE_DECL_EXP2=1; HAVE_DECL_EXP2F=1; HAVE_DECL_EXP2L=1; HAVE_DECL_EXPM1L=1; HAVE_DECL_FLOORF=1; HAVE_DECL_FLOORL=1; HAVE_DECL_FREXPL=1; HAVE_DECL_LDEXPL=1; HAVE_DECL_LOGL=1; HAVE_DECL_LOG10L=1; HAVE_DECL_LOG2=1; HAVE_DECL_LOG2F=1; HAVE_DECL_LOG2L=1; HAVE_DECL_LOGB=1; HAVE_DECL_REMAINDER=1; HAVE_DECL_REMAINDERL=1; HAVE_DECL_RINTF=1; HAVE_DECL_ROUND=1; HAVE_DECL_ROUNDF=1; HAVE_DECL_ROUNDL=1; HAVE_DECL_SINL=1; HAVE_DECL_SQRTL=1; HAVE_DECL_TANL=1; HAVE_DECL_TRUNC=1; HAVE_DECL_TRUNCF=1; HAVE_DECL_TRUNCL=1; REPLACE_ACOSF=0; REPLACE_ASINF=0; REPLACE_ATANF=0; REPLACE_ATAN2F=0; REPLACE_CBRTF=0; REPLACE_CBRTL=0; REPLACE_CEIL=0; REPLACE_CEILF=0; REPLACE_CEILL=0; REPLACE_COSF=0; REPLACE_COSHF=0; REPLACE_EXPF=0; REPLACE_EXPL=0; REPLACE_EXPM1=0; REPLACE_EXPM1F=0; REPLACE_EXPM1L=0; REPLACE_EXP2=0; REPLACE_EXP2L=0; REPLACE_FABSL=0; REPLACE_FLOOR=0; REPLACE_FLOORF=0; REPLACE_FLOORL=0; REPLACE_FMA=0; REPLACE_FMAF=0; REPLACE_FMAL=0; REPLACE_FMOD=0; REPLACE_FMODF=0; REPLACE_FMODL=0; REPLACE_FREXPF=0; REPLACE_FREXP=0; REPLACE_FREXPL=0; REPLACE_HUGE_VAL=0; REPLACE_HYPOT=0; REPLACE_HYPOTF=0; REPLACE_HYPOTL=0; REPLACE_ILOGB=0; REPLACE_ILOGBF=0; REPLACE_ILOGBL=0; REPLACE_ISFINITE=0; REPLACE_ISINF=0; REPLACE_ISNAN=0; REPLACE_LDEXPL=0; REPLACE_LOG=0; REPLACE_LOGF=0; REPLACE_LOGL=0; REPLACE_LOG10=0; REPLACE_LOG10F=0; REPLACE_LOG10L=0; REPLACE_LOG1P=0; REPLACE_LOG1PF=0; REPLACE_LOG1PL=0; REPLACE_LOG2=0; REPLACE_LOG2F=0; REPLACE_LOG2L=0; REPLACE_LOGB=0; REPLACE_LOGBF=0; REPLACE_LOGBL=0; REPLACE_MODF=0; REPLACE_MODFF=0; REPLACE_MODFL=0; REPLACE_NAN=0; REPLACE_REMAINDER=0; REPLACE_REMAINDERF=0; REPLACE_REMAINDERL=0; REPLACE_RINTL=0; REPLACE_ROUND=0; REPLACE_ROUNDF=0; REPLACE_ROUNDL=0; REPLACE_SIGNBIT=0; REPLACE_SIGNBIT_USING_BUILTINS=0; REPLACE_SINF=0; REPLACE_SINHF=0; REPLACE_SQRTF=0; REPLACE_SQRTL=0; REPLACE_TANF=0; REPLACE_TANHF=0; REPLACE_TRUNC=0; REPLACE_TRUNCF=0; REPLACE_TRUNCL=0; exec 9>&6 6>/dev/null if test ${gl_cv_func_floor_libm+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_func_floor_libm=? cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double) = floor; double x; int main (void) { x = funcptr(x) + floor(x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_floor_libm= fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$gl_cv_func_floor_libm" = "?"; then save_LIBS="$LIBS" LIBS="$LIBS -lm" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double) = floor; double x; int main (void) { x = funcptr(x) + floor(x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_floor_libm="-lm" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$save_LIBS" fi fi exec 6>&9 9>&- FLOOR_LIBM="$gl_cv_func_floor_libm" if test "$FLOOR_LIBM" = "?"; then FLOOR_LIBM= fi if test $REPLACE_FLOOR = 1; then FLOOR_LIBM= fi GL_GNULIB_ACOSF=0 GL_GNULIB_ACOSL=0 GL_GNULIB_ASINF=0 GL_GNULIB_ASINL=0 GL_GNULIB_ATANF=0 GL_GNULIB_ATANL=0 GL_GNULIB_ATAN2F=0 GL_GNULIB_CBRT=0 GL_GNULIB_CBRTF=0 GL_GNULIB_CBRTL=0 GL_GNULIB_CEIL=0 GL_GNULIB_CEILF=0 GL_GNULIB_CEILL=0 GL_GNULIB_COPYSIGN=0 GL_GNULIB_COPYSIGNF=0 GL_GNULIB_COPYSIGNL=0 GL_GNULIB_COSF=0 GL_GNULIB_COSL=0 GL_GNULIB_COSHF=0 GL_GNULIB_EXPF=0 GL_GNULIB_EXPL=0 GL_GNULIB_EXP2=0 GL_GNULIB_EXP2F=0 GL_GNULIB_EXP2L=0 GL_GNULIB_EXPM1=0 GL_GNULIB_EXPM1F=0 GL_GNULIB_EXPM1L=0 GL_GNULIB_FABSF=0 GL_GNULIB_FABSL=0 GL_GNULIB_FLOOR=0 GL_GNULIB_FLOORF=0 GL_GNULIB_FLOORL=0 GL_GNULIB_FMA=0 GL_GNULIB_FMAF=0 GL_GNULIB_FMAL=0 GL_GNULIB_FMOD=0 GL_GNULIB_FMODF=0 GL_GNULIB_FMODL=0 GL_GNULIB_FREXPF=0 GL_GNULIB_FREXP=0 GL_GNULIB_FREXPL=0 GL_GNULIB_HYPOT=0 GL_GNULIB_HYPOTF=0 GL_GNULIB_HYPOTL=0 GL_GNULIB_ILOGB=0 GL_GNULIB_ILOGBF=0 GL_GNULIB_ILOGBL=0 GL_GNULIB_ISFINITE=0 GL_GNULIB_ISINF=0 GL_GNULIB_ISNAN=0 GL_GNULIB_ISNANF=0 GL_GNULIB_ISNAND=0 GL_GNULIB_ISNANL=0 GL_GNULIB_LDEXPF=0 GL_GNULIB_LDEXPL=0 GL_GNULIB_LOG=0 GL_GNULIB_LOGF=0 GL_GNULIB_LOGL=0 GL_GNULIB_LOG10=0 GL_GNULIB_LOG10F=0 GL_GNULIB_LOG10L=0 GL_GNULIB_LOG1P=0 GL_GNULIB_LOG1PF=0 GL_GNULIB_LOG1PL=0 GL_GNULIB_LOG2=0 GL_GNULIB_LOG2F=0 GL_GNULIB_LOG2L=0 GL_GNULIB_LOGB=0 GL_GNULIB_LOGBF=0 GL_GNULIB_LOGBL=0 GL_GNULIB_MODF=0 GL_GNULIB_MODFF=0 GL_GNULIB_MODFL=0 GL_GNULIB_POWF=0 GL_GNULIB_REMAINDER=0 GL_GNULIB_REMAINDERF=0 GL_GNULIB_REMAINDERL=0 GL_GNULIB_RINT=0 GL_GNULIB_RINTF=0 GL_GNULIB_RINTL=0 GL_GNULIB_ROUND=0 GL_GNULIB_ROUNDF=0 GL_GNULIB_ROUNDL=0 GL_GNULIB_SIGNBIT=0 GL_GNULIB_SINF=0 GL_GNULIB_SINL=0 GL_GNULIB_SINHF=0 GL_GNULIB_SQRTF=0 GL_GNULIB_SQRTL=0 GL_GNULIB_TANF=0 GL_GNULIB_TANL=0 GL_GNULIB_TANHF=0 GL_GNULIB_TRUNC=0 GL_GNULIB_TRUNCF=0 GL_GNULIB_TRUNCL=0 GL_GNULIB_MDA_J0=1 GL_GNULIB_MDA_J1=1 GL_GNULIB_MDA_JN=1 GL_GNULIB_MDA_Y0=1 GL_GNULIB_MDA_Y1=1 GL_GNULIB_MDA_YN=1 HAVE_DECL_FCLOSEALL=1; HAVE_DECL_FPURGE=1; HAVE_DECL_FSEEKO=1; HAVE_DECL_FTELLO=1; HAVE_DECL_GETDELIM=1; HAVE_DECL_GETLINE=1; HAVE_DECL_OBSTACK_PRINTF=1; HAVE_DECL_SNPRINTF=1; HAVE_DECL_VSNPRINTF=1; HAVE_DPRINTF=1; HAVE_FSEEKO=1; HAVE_FTELLO=1; HAVE_PCLOSE=1; HAVE_POPEN=1; HAVE_RENAMEAT=1; HAVE_VASPRINTF=1; HAVE_VDPRINTF=1; REPLACE_DPRINTF=0; REPLACE_FCLOSE=0; REPLACE_FDOPEN=0; REPLACE_FFLUSH=0; REPLACE_FOPEN=0; REPLACE_FOPEN_FOR_FOPEN_GNU=0; REPLACE_FPRINTF=0; REPLACE_FPURGE=0; REPLACE_FREOPEN=0; REPLACE_FSEEK=0; REPLACE_FSEEKO=0; REPLACE_FTELL=0; REPLACE_FTELLO=0; REPLACE_GETDELIM=0; REPLACE_GETLINE=0; REPLACE_OBSTACK_PRINTF=0; REPLACE_PERROR=0; REPLACE_POPEN=0; REPLACE_PRINTF=0; REPLACE_REMOVE=0; REPLACE_RENAME=0; REPLACE_RENAMEAT=0; REPLACE_SNPRINTF=0; REPLACE_SPRINTF=0; REPLACE_STDIO_READ_FUNCS=0; REPLACE_STDIO_WRITE_FUNCS=0; REPLACE_TMPFILE=0; REPLACE_VASPRINTF=0; REPLACE_VDPRINTF=0; REPLACE_VFPRINTF=0; REPLACE_VPRINTF=0; REPLACE_VSNPRINTF=0; REPLACE_VSPRINTF=0; GL_GNULIB_DPRINTF=0 GL_GNULIB_FCLOSE=0 GL_GNULIB_FDOPEN=0 GL_GNULIB_FFLUSH=0 GL_GNULIB_FGETC=0 GL_GNULIB_FGETS=0 GL_GNULIB_FOPEN=0 GL_GNULIB_FOPEN_GNU=0 GL_GNULIB_FPRINTF=0 GL_GNULIB_FPRINTF_POSIX=0 GL_GNULIB_FPURGE=0 GL_GNULIB_FPUTC=0 GL_GNULIB_FPUTS=0 GL_GNULIB_FREAD=0 GL_GNULIB_FREOPEN=0 GL_GNULIB_FSCANF=0 GL_GNULIB_FSEEK=0 GL_GNULIB_FSEEKO=0 GL_GNULIB_FTELL=0 GL_GNULIB_FTELLO=0 GL_GNULIB_FWRITE=0 GL_GNULIB_GETC=0 GL_GNULIB_GETCHAR=0 GL_GNULIB_GETDELIM=0 GL_GNULIB_GETLINE=0 GL_GNULIB_OBSTACK_PRINTF=0 GL_GNULIB_OBSTACK_PRINTF_POSIX=0 GL_GNULIB_PCLOSE=0 GL_GNULIB_PERROR=0 GL_GNULIB_POPEN=0 GL_GNULIB_PRINTF=0 GL_GNULIB_PRINTF_POSIX=0 GL_GNULIB_PUTC=0 GL_GNULIB_PUTCHAR=0 GL_GNULIB_PUTS=0 GL_GNULIB_REMOVE=0 GL_GNULIB_RENAME=0 GL_GNULIB_RENAMEAT=0 GL_GNULIB_SCANF=0 GL_GNULIB_SNPRINTF=0 GL_GNULIB_SPRINTF_POSIX=0 GL_GNULIB_STDIO_H_NONBLOCKING=0 GL_GNULIB_STDIO_H_SIGPIPE=0 GL_GNULIB_TMPFILE=0 GL_GNULIB_VASPRINTF=0 GL_GNULIB_VFSCANF=0 GL_GNULIB_VSCANF=0 GL_GNULIB_VDPRINTF=0 GL_GNULIB_VFPRINTF=0 GL_GNULIB_VFPRINTF_POSIX=0 GL_GNULIB_VPRINTF=0 GL_GNULIB_VPRINTF_POSIX=0 GL_GNULIB_VSNPRINTF=0 GL_GNULIB_VSPRINTF_POSIX=0 GL_GNULIB_MDA_FCLOSEALL=1 GL_GNULIB_MDA_FDOPEN=1 GL_GNULIB_MDA_FILENO=1 GL_GNULIB_MDA_GETW=1 GL_GNULIB_MDA_PUTW=1 GL_GNULIB_MDA_TEMPNAM=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdint.h" >&5 printf %s "checking for stdint.h... " >&6; } if test ${gl_cv_header_stdint_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <stdint.h> int main (void) { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_stdint_h=yes else $as_nop gl_cv_header_stdint_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: $gl_cv_header_stdint_h" >&5 printf "%s\n" "$gl_cv_header_stdint_h" >&6; } if test $gl_cv_header_stdint_h = yes; then printf "%s\n" "#define HAVE_STDINT_H_WITH_UINTMAX 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for inttypes.h" >&5 printf %s "checking for inttypes.h... " >&6; } if test ${gl_cv_header_inttypes_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <inttypes.h> int main (void) { uintmax_t i = (uintmax_t) -1; return !i; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_inttypes_h=yes else $as_nop gl_cv_header_inttypes_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: $gl_cv_header_inttypes_h" >&5 printf "%s\n" "$gl_cv_header_inttypes_h" >&6; } if test $gl_cv_header_inttypes_h = yes; then printf "%s\n" "#define HAVE_INTTYPES_H_WITH_UINTMAX 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports size specifiers as in C99" >&5 printf %s "checking whether printf supports size specifiers as in C99... " >&6; } if test ${gl_cv_func_printf_sizes_c99+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_printf_sizes_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; midnightbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_printf_sizes_c99="guessing no";; openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_printf_sizes_c99="guessing no";; netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on MSVC, no on mingw. mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1 then : gl_cv_func_printf_sizes_c99="guessing yes" else $as_nop gl_cv_func_printf_sizes_c99="guessing no" fi rm -rf conftest* ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_sizes_c99="$gl_cross_guess_normal";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #if HAVE_STDINT_H_WITH_UINTMAX # include <stdint.h> #endif #if HAVE_INTTYPES_H_WITH_UINTMAX # include <inttypes.h> #endif static char buf[100]; int main () { int result = 0; #if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX buf[0] = '\0'; if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 || strcmp (buf, "12345671 33") != 0) result |= 1; #else result |= 1; #endif buf[0] = '\0'; if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 || strcmp (buf, "12345672 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 || strcmp (buf, "12345673 33") != 0) result |= 4; buf[0] = '\0'; if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 || strcmp (buf, "1.5 33") != 0) result |= 8; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_sizes_c99=yes else $as_nop gl_cv_func_printf_sizes_c99=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: $gl_cv_func_printf_sizes_c99" >&5 printf "%s\n" "$gl_cv_func_printf_sizes_c99" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports 'long double' arguments" >&5 printf %s "checking whether printf supports 'long double' arguments... " >&6; } if test ${gl_cv_func_printf_long_double+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on BeOS. beos*) gl_cv_func_printf_long_double="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_long_double="guessing yes";; # Guess yes on MSVC, no on mingw. mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1 then : gl_cv_func_printf_long_double="guessing yes" else $as_nop gl_cv_func_printf_long_double="guessing no" fi rm -rf conftest* ;; *) gl_cv_func_printf_long_double="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> static char buf[10000]; int main () { int result = 0; buf[0] = '\0'; if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.750000 33") != 0) result |= 1; buf[0] = '\0'; if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.750000e+00 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.75 33") != 0) result |= 4; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_long_double=yes else $as_nop gl_cv_func_printf_long_double=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: $gl_cv_func_printf_long_double" >&5 printf "%s\n" "$gl_cv_func_printf_long_double" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports infinite 'double' arguments" >&5 printf %s "checking whether printf supports infinite 'double' arguments... " >&6; } if test ${gl_cv_func_printf_infinite+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; midnightbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; darwin*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; hpux*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_printf_infinite="guessing no";; netbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; openbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_infinite="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_infinite="guessing no";; # Guess yes on MSVC, no on mingw. mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1 then : gl_cv_func_printf_infinite="guessing yes" else $as_nop gl_cv_func_printf_infinite="guessing no" fi rm -rf conftest* ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_infinite="$gl_cross_guess_normal";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> static int strisnan (const char *string, size_t start_index, size_t end_index) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static int have_minus_zero () { static double plus_zero = 0.0; double minus_zero = - plus_zero; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } static char buf[10000]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%f", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%f", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%f", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%e", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 4; if (sprintf (buf, "%e", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 4; if (sprintf (buf, "%e", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 8; if (sprintf (buf, "%g", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 16; if (sprintf (buf, "%g", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 16; if (sprintf (buf, "%g", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 32; /* This test fails on HP-UX 10.20. */ if (have_minus_zero ()) if (sprintf (buf, "%g", - zero) < 0 || strcmp (buf, "-0") != 0) result |= 64; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_infinite=yes else $as_nop gl_cv_func_printf_infinite=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: $gl_cv_func_printf_infinite" >&5 printf "%s\n" "$gl_cv_func_printf_infinite" >&6; } { 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 <sys/types.h> #include <sys/param.h> 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 <sys/types.h> #include <sys/param.h> 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 <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> 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 <limits.h> 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) printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) as_fn_error $? "unknown endianness presetting ac_cv_c_bigendian=no (or yes) will help" "$LINENO" 5 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether long double and double are the same" >&5 printf %s "checking whether long double and double are the same... " >&6; } if test ${gl_cv_long_double_equals_double+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> int main (void) { typedef int check[sizeof (long double) == sizeof (double) && LDBL_MANT_DIG == DBL_MANT_DIG && LDBL_MAX_EXP == DBL_MAX_EXP && LDBL_MIN_EXP == DBL_MIN_EXP ? 1 : -1]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_long_double_equals_double=yes else $as_nop gl_cv_long_double_equals_double=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: $gl_cv_long_double_equals_double" >&5 printf "%s\n" "$gl_cv_long_double_equals_double" >&6; } if test $gl_cv_long_double_equals_double = yes; then printf "%s\n" "#define HAVE_SAME_LONG_DOUBLE_AS_DOUBLE 1" >>confdefs.h HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 else HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 fi if test -n "$gl_printf_safe"; then printf "%s\n" "#define CHECK_PRINTF_SAFE 1" >>confdefs.h fi case "$gl_cv_func_printf_long_double" in *yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports infinite 'long double' arguments" >&5 printf %s "checking whether printf supports infinite 'long double' arguments... " >&6; } if test ${gl_cv_func_printf_infinite_long_double+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_cpu" in # Guess no on ia64, x86_64, i386. ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; *) case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; midnightbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; openbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_infinite_long_double="guessing no";; # Guess yes on MSVC, no on mingw. mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1 then : gl_cv_func_printf_infinite_long_double="guessing yes" else $as_nop gl_cv_func_printf_infinite_long_double="guessing no" fi rm -rf conftest* ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_infinite_long_double="$gl_cross_guess_normal";; esac ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include <mach/mach.h> #include <mach/mach_error.h> #include <mach/thread_status.h> #include <mach/exception.h> #include <mach/task.h> #include <pthread.h> /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif defined _WIN32 && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winerror.h> static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include <signal.h> #include <unistd.h> /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif #include <float.h> #include <stdio.h> #include <string.h> static int strisnan (const char *string, size_t start_index, size_t end_index) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static char buf[10000]; static long double zeroL = 0.0L; int main () { int result = 0; nocrash_init(); if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; if (sprintf (buf, "%Le", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Le", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Le", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; #if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; } { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 4; if (sprintf (buf, "%Le", x.value) <= 0) result |= 4; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 4; } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 8; if (sprintf (buf, "%Le", x.value) <= 0) result |= 8; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 8; } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 16; if (sprintf (buf, "%Le", x.value) <= 0) result |= 16; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 16; } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 32; if (sprintf (buf, "%Le", x.value) <= 0) result |= 32; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 32; } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 64; if (sprintf (buf, "%Le", x.value) <= 0) result |= 64; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 64; } #endif return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_infinite_long_double=yes else $as_nop gl_cv_func_printf_infinite_long_double=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: $gl_cv_func_printf_infinite_long_double" >&5 printf "%s\n" "$gl_cv_func_printf_infinite_long_double" >&6; } ;; *) gl_cv_func_printf_infinite_long_double="irrelevant" ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'a' and 'A' directives" >&5 printf %s "checking whether printf supports the 'a' and 'A' directives... " >&6; } if test ${gl_cv_func_printf_directive_a+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc >= 2.5 systems. *-gnu* | gnu*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__ BZ2908 #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "BZ2908" >/dev/null 2>&1 then : gl_cv_func_printf_directive_a="guessing yes" else $as_nop gl_cv_func_printf_directive_a="guessing no" fi rm -rf conftest* ;; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_directive_a="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_a="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_printf_directive_a="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_directive_a="$gl_cross_guess_normal";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> static char buf[100]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 || (strcmp (buf, "0x1.922p+1 33") != 0 && strcmp (buf, "0x3.244p+0 33") != 0 && strcmp (buf, "0x6.488p-1 33") != 0 && strcmp (buf, "0xc.91p-2 33") != 0)) result |= 1; if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 || (strcmp (buf, "-0X1.922P+1 33") != 0 && strcmp (buf, "-0X3.244P+0 33") != 0 && strcmp (buf, "-0X6.488P-1 33") != 0 && strcmp (buf, "-0XC.91P-2 33") != 0)) result |= 2; /* This catches a FreeBSD 13.0 bug: it doesn't round. */ if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 || (strcmp (buf, "0x1.83p+0 33") != 0 && strcmp (buf, "0x3.05p-1 33") != 0 && strcmp (buf, "0x6.0ap-2 33") != 0 && strcmp (buf, "0xc.14p-3 33") != 0)) result |= 4; /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round. */ if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0 || (strcmp (buf, "0x2p+0 33") != 0 && strcmp (buf, "0x3p-1 33") != 0 && strcmp (buf, "0x6p-2 33") != 0 && strcmp (buf, "0xcp-3 33") != 0)) result |= 4; /* This catches a FreeBSD 6.1 bug. See <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 || buf[0] == '0') result |= 8; /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug. */ if (sprintf (buf, "%.1a", 1.999) < 0 || (strcmp (buf, "0x1.0p+1") != 0 && strcmp (buf, "0x2.0p+0") != 0 && strcmp (buf, "0x4.0p-1") != 0 && strcmp (buf, "0x8.0p-2") != 0)) result |= 16; /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ if (sprintf (buf, "%.1La", 1.999L) < 0 || (strcmp (buf, "0x1.0p+1") != 0 && strcmp (buf, "0x2.0p+0") != 0 && strcmp (buf, "0x4.0p-1") != 0 && strcmp (buf, "0x8.0p-2") != 0)) result |= 32; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_directive_a=yes else $as_nop gl_cv_func_printf_directive_a=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: $gl_cv_func_printf_directive_a" >&5 printf "%s\n" "$gl_cv_func_printf_directive_a" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'F' directive" >&5 printf %s "checking whether printf supports the 'F' directive... " >&6; } if test ${gl_cv_func_printf_directive_f+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; midnightbsd*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; darwin*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; openbsd*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";; solaris*) gl_cv_func_printf_directive_f="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_f="guessing no";; # Guess yes on MSVC, no on mingw. mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1 then : gl_cv_func_printf_directive_f="guessing yes" else $as_nop gl_cv_func_printf_directive_f="guessing no" fi rm -rf conftest* ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_directive_f="$gl_cross_guess_normal";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> static char buf[100]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 || strcmp (buf, "1234567.000000 33") != 0) result |= 1; if (sprintf (buf, "%F", 1.0 / zero) < 0 || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) result |= 2; /* This catches a Cygwin 1.5.x bug. */ if (sprintf (buf, "%.F", 1234.0) < 0 || strcmp (buf, "1234") != 0) result |= 4; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_directive_f=yes else $as_nop gl_cv_func_printf_directive_f=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: $gl_cv_func_printf_directive_f" >&5 printf "%s\n" "$gl_cv_func_printf_directive_f" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'n' directive" >&5 printf %s "checking whether printf supports the 'n' directive... " >&6; } if test ${gl_cv_func_printf_directive_n+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on glibc when _FORTIFY_SOURCE >= 2. *-gnu* | gnu*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if _FORTIFY_SOURCE >= 2 error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_printf_directive_n="guessing yes" else $as_nop gl_cv_func_printf_directive_n="guessing no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_n="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_printf_directive_n="guessing no";; *) gl_cv_func_printf_directive_n="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef _MSC_VER #include <inttypes.h> /* See page about "Parameter Validation" on msdn.microsoft.com. <https://docs.microsoft.com/en-us/cpp/c-runtime-library/parameter-validation> <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/set-invalid-parameter-handler-set-thread-local-invalid-parameter-handler> */ static void cdecl invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { exit (1); } #endif static char fmtstring[10]; static char buf[100]; int main () { int count = -1; #ifdef _MSC_VER _set_invalid_parameter_handler (invalid_parameter_handler); #endif /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) support %n in format strings in read-only memory but not in writable memory. */ strcpy (fmtstring, "%d %n"); if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 || strcmp (buf, "123 ") != 0 || count != 4) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_directive_n=yes else $as_nop gl_cv_func_printf_directive_n=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: $gl_cv_func_printf_directive_n" >&5 printf "%s\n" "$gl_cv_func_printf_directive_n" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports the 'ls' directive" >&5 printf %s "checking whether printf supports the 'ls' directive... " >&6; } if test ${gl_cv_func_printf_directive_ls+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_directive_ls="guessing no";; openbsd*) gl_cv_func_printf_directive_ls="guessing yes";; irix*) gl_cv_func_printf_directive_ls="guessing no";; solaris*) gl_cv_func_printf_directive_ls="guessing no";; cygwin*) gl_cv_func_printf_directive_ls="guessing no";; beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_ls="guessing no";; # Guess yes on native Windows. mingw*) gl_cv_func_printf_directive_ls="guessing yes";; *) gl_cv_func_printf_directive_ls="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <wchar.h> #include <string.h> int main () { int result = 0; char buf[100]; /* Test whether %ls works at all. This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on Cygwin 1.5. */ { static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; buf[0] = '\0'; if (sprintf (buf, "%ls", wstring) < 0 || strcmp (buf, "abc") != 0) result |= 1; } /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an assertion failure inside libc), but not on OpenBSD 4.0. */ { static const wchar_t wstring[] = { 'a', 0 }; buf[0] = '\0'; if (sprintf (buf, "%ls", wstring) < 0 || strcmp (buf, "a") != 0) result |= 2; } /* Test whether precisions in %ls are supported as specified in ISO C 99 section 7.19.6.1: "If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by the precision, the function would need to access a wide character one past the end of the array." This test fails on Solaris 10. */ { static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; buf[0] = '\0'; if (sprintf (buf, "%.2ls", wstring) < 0 || strcmp (buf, "ab") != 0) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_directive_ls=yes else $as_nop gl_cv_func_printf_directive_ls=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: $gl_cv_func_printf_directive_ls" >&5 printf "%s\n" "$gl_cv_func_printf_directive_ls" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports POSIX/XSI format strings with positions" >&5 printf %s "checking whether printf supports POSIX/XSI format strings with positions... " >&6; } if test ${gl_cv_func_printf_positions+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) gl_cv_func_printf_positions="guessing no";; beos*) gl_cv_func_printf_positions="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_positions="guessing yes";; # Guess no on native Windows. mingw* | pw*) gl_cv_func_printf_positions="guessing no";; *) gl_cv_func_printf_positions="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_positions=yes else $as_nop gl_cv_func_printf_positions=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: $gl_cv_func_printf_positions" >&5 printf "%s\n" "$gl_cv_func_printf_positions" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports the grouping flag" >&5 printf %s "checking whether printf supports the grouping flag... " >&6; } if test ${gl_cv_func_printf_flag_grouping+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_flag_grouping="guessing no";; # Guess no on native Windows. mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; *) gl_cv_func_printf_flag_grouping="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> static char buf[100]; int main () { if (sprintf (buf, "%'d %d", 1234567, 99) < 0 || buf[strlen (buf) - 1] != '9') return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_flag_grouping=yes else $as_nop gl_cv_func_printf_flag_grouping=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: $gl_cv_func_printf_flag_grouping" >&5 printf "%s\n" "$gl_cv_func_printf_flag_grouping" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports the left-adjust flag correctly" >&5 printf %s "checking whether printf supports the left-adjust flag correctly... " >&6; } if test ${gl_cv_func_printf_flag_leftadjust+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on HP-UX 11. hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess no on HP-UX 10 and older. hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess yes on native Windows. mingw*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess yes otherwise. *) gl_cv_func_printf_flag_leftadjust="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> static char buf[100]; int main () { /* Check that a '-' flag is not annihilated by a negative width. */ if (sprintf (buf, "a%-*sc", -3, "b") < 0 || strcmp (buf, "ab c") != 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_flag_leftadjust=yes else $as_nop gl_cv_func_printf_flag_leftadjust=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: $gl_cv_func_printf_flag_leftadjust" >&5 printf "%s\n" "$gl_cv_func_printf_flag_leftadjust" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports the zero flag correctly" >&5 printf %s "checking whether printf supports the zero flag correctly... " >&6; } if test ${gl_cv_func_printf_flag_zero+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_flag_zero="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_printf_flag_zero="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_flag_zero="$gl_cross_guess_normal";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> static char buf[100]; static double zero = 0.0; int main () { if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 || (strcmp (buf, " inf") != 0 && strcmp (buf, " infinity") != 0)) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_flag_zero=yes else $as_nop gl_cv_func_printf_flag_zero=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: $gl_cv_func_printf_flag_zero" >&5 printf "%s\n" "$gl_cv_func_printf_flag_zero" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf supports large precisions" >&5 printf %s "checking whether printf supports large precisions... " >&6; } if test ${gl_cv_func_printf_precision+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no only on Solaris, native Windows, and BeOS systems. solaris*) gl_cv_func_printf_precision="guessing no" ;; mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; beos*) gl_cv_func_printf_precision="guessing no" ;; # Guess yes on Android. linux*-android*) gl_cv_func_printf_precision="guessing yes" ;; *) gl_cv_func_printf_precision="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> static char buf[5000]; int main () { int result = 0; #ifdef __BEOS__ /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ return 1; #endif if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) result |= 1; if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) result |= 2; if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 || buf[0] != '1') result |= 4; if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 || buf[0] != '1') result |= 4; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_printf_precision=yes else $as_nop gl_cv_func_printf_precision=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: $gl_cv_func_printf_precision" >&5 printf "%s\n" "$gl_cv_func_printf_precision" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler produces multi-arch binaries" >&5 printf %s "checking whether the compiler produces multi-arch binaries... " >&6; } if test ${gl_cv_c_multiarch+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_c_multiarch=no 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 : arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64 | arm | arm64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_c_multiarch" >&5 printf "%s\n" "$gl_cv_c_multiarch" >&6; } if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether printf survives out-of-memory conditions" >&5 printf %s "checking whether printf survives out-of-memory conditions... " >&6; } if test ${gl_cv_func_printf_enomem+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_func_printf_enomem="guessing no" if test "$cross_compiling" = no; then if test $APPLE_UNIVERSAL_BUILD = 0; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include <mach/mach.h> #include <mach/mach_error.h> #include <mach/thread_status.h> #include <mach/exception.h> #include <mach/task.h> #include <pthread.h> /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif defined _WIN32 && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winerror.h> static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include <signal.h> #include <unistd.h> /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif #include <stdio.h> #include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> #include <errno.h> int main() { struct rlimit limit; int ret; nocrash_init (); /* Some printf implementations allocate temporary space with malloc. */ /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ #ifdef RLIMIT_DATA if (getrlimit (RLIMIT_DATA, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_DATA, &limit) < 0) return 77; #endif /* On Linux systems, malloc() is limited by RLIMIT_AS. */ #ifdef RLIMIT_AS if (getrlimit (RLIMIT_AS, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_AS, &limit) < 0) return 77; #endif /* Some printf implementations allocate temporary space on the stack. */ #ifdef RLIMIT_STACK if (getrlimit (RLIMIT_STACK, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_STACK, &limit) < 0) return 77; #endif ret = printf ("%.5000000f", 1.0); return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then (./conftest 2>&5 result=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $result" >&5 if test $result != 0 && test $result != 77; then result=1; fi exit $result ) >/dev/null 2>/dev/null case $? in 0) gl_cv_func_printf_enomem="yes" ;; 77) gl_cv_func_printf_enomem="guessing no" ;; *) gl_cv_func_printf_enomem="no" ;; esac else gl_cv_func_printf_enomem="guessing no" fi rm -fr conftest* else gl_cv_func_printf_enomem="guessing no" fi fi if test "$gl_cv_func_printf_enomem" = "guessing no"; then case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on Solaris. solaris*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on AIX. aix*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on HP-UX/hppa. hpux*) case "$host_cpu" in hppa*) gl_cv_func_printf_enomem="guessing yes";; *) gl_cv_func_printf_enomem="guessing no";; esac ;; # Guess yes on IRIX. irix*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on OSF/1. osf*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on Haiku. haiku*) gl_cv_func_printf_enomem="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_enomem="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_enomem="$gl_cross_guess_normal";; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_enomem" >&5 printf "%s\n" "$gl_cv_func_printf_enomem" >&6; } case "$gl_cv_func_printf_long_double" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wchar_t" >&5 printf %s "checking for wchar_t... " >&6; } if test ${gt_cv_c_wchar_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> wchar_t foo = (wchar_t)'\0'; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_c_wchar_t=yes else $as_nop gt_cv_c_wchar_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: $gt_cv_c_wchar_t" >&5 printf "%s\n" "$gt_cv_c_wchar_t" >&6; } if test $gt_cv_c_wchar_t = yes; then printf "%s\n" "#define HAVE_WCHAR_T 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wint_t" >&5 printf %s "checking for wint_t... " >&6; } if test ${gt_cv_c_wint_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> wint_t foo = (wchar_t)'\0'; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_c_wint_t=yes else $as_nop gt_cv_c_wint_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: $gt_cv_c_wint_t" >&5 printf "%s\n" "$gt_cv_c_wint_t" >&6; } if test $gt_cv_c_wint_t = yes; then printf "%s\n" "#define HAVE_WINT_T 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wint_t is large enough" >&5 printf %s "checking whether wint_t is large enough... " >&6; } if test ${gl_cv_type_wint_t_large_enough+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_wint_t_large_enough=yes else $as_nop gl_cv_type_wint_t_large_enough=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: $gl_cv_type_wint_t_large_enough" >&5 printf "%s\n" "$gl_cv_type_wint_t_large_enough" >&6; } if test $gl_cv_type_wint_t_large_enough = no; then GNULIBHEADERS_OVERRIDE_WINT_T=1 else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for intmax_t" >&5 printf %s "checking for intmax_t... " >&6; } if test ${gt_cv_c_intmax_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <stdlib.h> #if HAVE_STDINT_H_WITH_UINTMAX #include <stdint.h> #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include <inttypes.h> #endif int main (void) { intmax_t x = -1; return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_c_intmax_t=yes else $as_nop gt_cv_c_intmax_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: $gt_cv_c_intmax_t" >&5 printf "%s\n" "$gt_cv_c_intmax_t" >&6; } if test $gt_cv_c_intmax_t = yes; then printf "%s\n" "#define HAVE_INTMAX_T 1" >>confdefs.h else printf "%s\n" "#define intmax_t long long" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'double'" >&5 printf %s "checking where to find the exponent in a 'double'... " >&6; } if test ${gl_cv_cc_double_expbit0+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined arm || defined __arm || defined __arm__ mixed_endianness #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "mixed_endianness" >/dev/null 2>&1 then : gl_cv_cc_double_expbit0="unknown" else $as_nop : 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 <sys/types.h> #include <sys/param.h> 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 <sys/types.h> #include <sys/param.h> 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 <limits.h> defines _LITTLE_ENDIAN or _BIG_ENDIAN (e.g., Solaris). cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> 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 <limits.h> 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 : case $ac_cv_c_bigendian in #( yes) gl_cv_cc_double_expbit0="word 0 bit 20";; #( no) gl_cv_cc_double_expbit0="word 1 bit 20" ;; #( universal) printf "%s\n" "#define AC_APPLE_UNIVERSAL_BUILD 1" >>confdefs.h ;; #( *) gl_cv_cc_double_expbit0="unknown" ;; esac fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (double x) { memory_double m; size_t i; /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ memset (&m, 0, sizeof (memory_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25); add_to_ored_words (0.5); add_to_ored_words (1.0); add_to_ored_words (2.0); add_to_ored_words (4.0); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_double_expbit0=`cat conftest.out` else $as_nop gl_cv_cc_double_expbit0="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_expbit0" >&5 printf "%s\n" "$gl_cv_cc_double_expbit0" >&6; } case "$gl_cv_cc_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` printf "%s\n" "#define DBL_EXPBIT0_WORD $word" >>confdefs.h printf "%s\n" "#define DBL_EXPBIT0_BIT $bit" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether snprintf returns a byte count as in C99" >&5 printf %s "checking whether snprintf returns a byte count as in C99... " >&6; } if test ${gl_cv_func_snprintf_retval_c99+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; midnightbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_retval_c99="guessing no";; openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_retval_c99="guessing no";; netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on MSVC, no on mingw. mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1 then : gl_cv_func_snprintf_retval_c99="guessing yes" else $as_nop gl_cv_func_snprintf_retval_c99="guessing no" fi rm -rf conftest* ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_retval_c99="$gl_cross_guess_normal";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) return 1; if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) return 2; if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_snprintf_retval_c99=yes else $as_nop gl_cv_func_snprintf_retval_c99=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: $gl_cv_func_snprintf_retval_c99" >&5 printf "%s\n" "$gl_cv_func_snprintf_retval_c99" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether snprintf truncates the result as in C99" >&5 printf %s "checking whether snprintf truncates the result as in C99... " >&6; } if test ${gl_cv_func_snprintf_truncation_c99+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_truncation_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; midnightbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_truncation_c99="guessing no";; openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_snprintf_truncation_c99="guessing no";; solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OSF/1 >= 5. osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_truncation_c99="guessing no";; netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess no on native Windows. mingw*) gl_cv_func_snprintf_truncation_c99="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_truncation_c99="$gl_cross_guess_normal";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); my_snprintf (buf, 3, "%d %d", 4567, 89); if (memcmp (buf, "45\0DEF", 6) != 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_snprintf_truncation_c99=yes else $as_nop gl_cv_func_snprintf_truncation_c99=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: $gl_cv_func_snprintf_truncation_c99" >&5 printf "%s\n" "$gl_cv_func_snprintf_truncation_c99" >&6; } ac_fn_c_check_func "$LINENO" "snprintf" "ac_cv_func_snprintf" if test "x$ac_cv_func_snprintf" = xyes then : printf "%s\n" "#define HAVE_SNPRINTF 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "strnlen" "ac_cv_func_strnlen" if test "x$ac_cv_func_strnlen" = xyes then : printf "%s\n" "#define HAVE_STRNLEN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcslen" "ac_cv_func_wcslen" if test "x$ac_cv_func_wcslen" = xyes then : printf "%s\n" "#define HAVE_WCSLEN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcsnlen" "ac_cv_func_wcsnlen" if test "x$ac_cv_func_wcsnlen" = xyes then : printf "%s\n" "#define HAVE_WCSNLEN 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "mbrtowc" "ac_cv_func_mbrtowc" if test "x$ac_cv_func_mbrtowc" = xyes then : printf "%s\n" "#define HAVE_MBRTOWC 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "wcrtomb" "ac_cv_func_wcrtomb" if test "x$ac_cv_func_wcrtomb" = xyes then : printf "%s\n" "#define HAVE_WCRTOMB 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "_snprintf" "ac_cv_have_decl__snprintf" "#include <stdio.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl__snprintf" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL__SNPRINTF $ac_have_decl" >>confdefs.h case "$gl_cv_func_snprintf_retval_c99" in *yes) printf "%s\n" "#define HAVE_SNPRINTF_RETVAL_C99 1" >>confdefs.h ;; esac case "$gl_cv_func_snprintf_truncation_c99" in *yes) printf "%s\n" "#define HAVE_SNPRINTF_TRUNCATION_C99 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether frexp() can be used without linking with libm" >&5 printf %s "checking whether frexp() can be used without linking with libm... " >&6; } if test ${gl_cv_func_frexp_no_libm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> double x; int main (void) { int e; return frexp (x, &e) > 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_frexp_no_libm=yes else $as_nop gl_cv_func_frexp_no_libm=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: $gl_cv_func_frexp_no_libm" >&5 printf "%s\n" "$gl_cv_func_frexp_no_libm" >&6; } ac_fn_check_decl "$LINENO" "alarm" "ac_cv_have_decl_alarm" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_alarm" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_ALARM $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdin defaults to large file offsets" >&5 printf %s "checking whether stdin defaults to large file offsets... " >&6; } if test ${gl_cv_var_stdin_large_offset+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int main (void) { #if defined __SL64 && defined __SCLE /* cygwin */ /* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making fseeko/ftello needlessly fail. This bug was fixed in 1.5.25, and it is easier to do a version check than building a runtime test. */ # include <cygwin/version.h> # if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25) choke me # endif #endif ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_var_stdin_large_offset=yes else $as_nop gl_cv_var_stdin_large_offset=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: $gl_cv_var_stdin_large_offset" >&5 printf "%s\n" "$gl_cv_var_stdin_large_offset" >&6; } case "$host_os" in mingw*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit off_t" >&5 printf %s "checking for 64-bit off_t... " >&6; } if test ${gl_cv_type_off_t_64+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_off_t_64=yes else $as_nop gl_cv_type_off_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: $gl_cv_type_off_t_64" >&5 printf "%s\n" "$gl_cv_type_off_t_64" >&6; } if test $gl_cv_type_off_t_64 = no; then WINDOWS_64_BIT_OFF_T=1 else WINDOWS_64_BIT_OFF_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for 64-bit st_size" >&5 printf %s "checking for 64-bit st_size... " >&6; } if test ${gl_cv_member_st_size_64+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> struct stat buf; int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_member_st_size_64=yes else $as_nop gl_cv_member_st_size_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: $gl_cv_member_st_size_64" >&5 printf "%s\n" "$gl_cv_member_st_size_64" >&6; } if test $gl_cv_member_st_size_64 = no; then WINDOWS_64_BIT_ST_SIZE=1 else WINDOWS_64_BIT_ST_SIZE=0 fi ;; *) WINDOWS_64_BIT_OFF_T=0 WINDOWS_64_BIT_ST_SIZE=0 ;; esac printf "%s\n" "#define _USE_STD_STAT 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_types_h='<'sys/types.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/types.h>" >&5 printf %s "checking absolute name of <sys/types.h>... " >&6; } if test ${gl_cv_next_sys_types_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/types.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_types_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_types_h gl_cv_next_sys_types_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_types_h" >&5 printf "%s\n" "$gl_cv_next_sys_types_h" >&6; } fi NEXT_SYS_TYPES_H=$gl_cv_next_sys_types_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/types.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_types_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H=$gl_next_as_first_directive WINDOWS_STAT_INODES=0 ac_fn_check_decl "$LINENO" "fseeko" "ac_cv_have_decl_fseeko" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fseeko" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FSEEKO $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fseeko" >&5 printf %s "checking for fseeko... " >&6; } if test ${gl_cv_func_fseeko+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int main (void) { fseeko (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_fseeko=yes else $as_nop gl_cv_func_fseeko=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: $gl_cv_func_fseeko" >&5 printf "%s\n" "$gl_cv_func_fseeko" >&6; } if test $ac_cv_have_decl_fseeko = no; then HAVE_DECL_FSEEKO=0 fi if test $gl_cv_func_fseeko = no; then HAVE_FSEEKO=0 else if test $WINDOWS_64_BIT_OFF_T = 1; then REPLACE_FSEEKO=1 fi if test $gl_cv_var_stdin_large_offset = no; then REPLACE_FSEEKO=1 fi fi HAVE_FCHMODAT=1; HAVE_FSTATAT=1; HAVE_FUTIMENS=1; HAVE_GETUMASK=1; HAVE_LCHMOD=1; HAVE_LSTAT=1; HAVE_MKDIRAT=1; HAVE_MKFIFO=1; HAVE_MKFIFOAT=1; HAVE_MKNOD=1; HAVE_MKNODAT=1; HAVE_UTIMENSAT=1; REPLACE_FCHMODAT=0; REPLACE_FSTAT=0; REPLACE_FSTATAT=0; REPLACE_FUTIMENS=0; REPLACE_LSTAT=0; REPLACE_MKDIR=0; REPLACE_MKFIFO=0; REPLACE_MKFIFOAT=0; REPLACE_MKNOD=0; REPLACE_MKNODAT=0; REPLACE_STAT=0; REPLACE_UTIMENSAT=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat file-mode macros are broken" >&5 printf %s "checking whether stat file-mode macros are broken... " >&6; } if test ${ac_cv_header_stat_broken+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> #if defined S_ISBLK && defined S_IFDIR extern char c1[S_ISBLK (S_IFDIR) ? -1 : 1]; #endif #if defined S_ISBLK && defined S_IFCHR extern char c2[S_ISBLK (S_IFCHR) ? -1 : 1]; #endif #if defined S_ISLNK && defined S_IFREG extern char c3[S_ISLNK (S_IFREG) ? -1 : 1]; #endif #if defined S_ISSOCK && defined S_IFREG extern char c4[S_ISSOCK (S_IFREG) ? -1 : 1]; #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_stat_broken=no else $as_nop ac_cv_header_stat_broken=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_header_stat_broken" >&5 printf "%s\n" "$ac_cv_header_stat_broken" >&6; } if test $ac_cv_header_stat_broken = yes; then printf "%s\n" "#define STAT_MACROS_BROKEN 1" >>confdefs.h fi if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_stat_h='<'sys/stat.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/stat.h>" >&5 printf %s "checking absolute name of <sys/stat.h>... " >&6; } if test ${gl_cv_next_sys_stat_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_sys_stat_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/stat.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/stat.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_stat_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_stat_h gl_cv_next_sys_stat_h='"'$gl_header'"' else gl_cv_next_sys_stat_h='<'sys/stat.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_stat_h" >&5 printf "%s\n" "$gl_cv_next_sys_stat_h" >&6; } fi NEXT_SYS_STAT_H=$gl_cv_next_sys_stat_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/stat.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_stat_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H=$gl_next_as_first_directive WINDOWS_STAT_TIMESPEC=0 ac_fn_c_check_type "$LINENO" "nlink_t" "ac_cv_type_nlink_t" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_type_nlink_t" = xyes then : else $as_nop printf "%s\n" "#define nlink_t int" >>confdefs.h fi case "$host_os" in mingw*) ac_fn_c_check_header_compile "$LINENO" "sdkddkver.h" "ac_cv_header_sdkddkver_h" "$ac_includes_default" if test "x$ac_cv_header_sdkddkver_h" = xyes then : printf "%s\n" "#define HAVE_SDKDDKVER_H 1" >>confdefs.h fi ;; esac GL_GNULIB_FCHMODAT=0 GL_GNULIB_FSTAT=0 GL_GNULIB_FSTATAT=0 GL_GNULIB_FUTIMENS=0 GL_GNULIB_GETUMASK=0 GL_GNULIB_LCHMOD=0 GL_GNULIB_LSTAT=0 GL_GNULIB_MKDIR=0 GL_GNULIB_MKDIRAT=0 GL_GNULIB_MKFIFO=0 GL_GNULIB_MKFIFOAT=0 GL_GNULIB_MKNOD=0 GL_GNULIB_MKNODAT=0 GL_GNULIB_STAT=0 GL_GNULIB_UTIMENSAT=0 GL_GNULIB_OVERRIDES_STRUCT_STAT=0 GL_GNULIB_MDA_CHMOD=1 GL_GNULIB_MDA_MKDIR=1 GL_GNULIB_MDA_UMASK=1 ac_fn_check_decl "$LINENO" "ftello" "ac_cv_have_decl_ftello" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_ftello" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FTELLO $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ungetc works on arbitrary bytes" >&5 printf %s "checking whether ungetc works on arbitrary bytes... " >&6; } if test ${gl_cv_func_ungetc_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_ungetc_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_ungetc_works="guessing yes" ;; # Guess yes on bionic systems. *-android*) gl_cv_func_ungetc_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ungetc_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_ungetc_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int main (void) { FILE *f; if (!(f = fopen ("conftest.tmp", "w+"))) return 1; if (fputs ("abc", f) < 0) { fclose (f); return 2; } rewind (f); if (fgetc (f) != 'a') { fclose (f); return 3; } if (fgetc (f) != 'b') { fclose (f); return 4; } if (ungetc ('d', f) != 'd') { fclose (f); return 5; } if (ftell (f) != 1) { fclose (f); return 6; } if (fgetc (f) != 'd') { fclose (f); return 7; } if (ftell (f) != 2) { fclose (f); return 8; } if (fseek (f, 0, SEEK_CUR) != 0) { fclose (f); return 9; } if (ftell (f) != 2) { fclose (f); return 10; } if (fgetc (f) != 'c') { fclose (f); return 11; } fclose (f); remove ("conftest.tmp"); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_ungetc_works=yes else $as_nop gl_cv_func_ungetc_works=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: $gl_cv_func_ungetc_works" >&5 printf "%s\n" "$gl_cv_func_ungetc_works" >&6; } gl_ftello_broken_after_ungetc=no case "$gl_cv_func_ungetc_works" in *yes) ;; *) case "$host_os" in darwin*) gl_ftello_broken_after_ungetc=yes ;; *) printf "%s\n" "#define FUNC_UNGETC_BROKEN 1" >>confdefs.h ;; esac ;; esac if test $ac_cv_have_decl_ftello = no; then HAVE_DECL_FTELLO=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ftello" >&5 printf %s "checking for ftello... " >&6; } if test ${gl_cv_func_ftello+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int main (void) { ftello (stdin); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_ftello=yes else $as_nop gl_cv_func_ftello=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: $gl_cv_func_ftello" >&5 printf "%s\n" "$gl_cv_func_ftello" >&6; } if test $gl_cv_func_ftello = no; then HAVE_FTELLO=0 else if test $WINDOWS_64_BIT_OFF_T = 1; then REPLACE_FTELLO=1 fi if test $gl_cv_var_stdin_large_offset = no; then REPLACE_FTELLO=1 fi if test $REPLACE_FTELLO = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ftello works" >&5 printf %s "checking whether ftello works... " >&6; } if test ${gl_cv_func_ftello_works+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_ftello_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ftello_works="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_ftello_works="guessing yes" ;; esac if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define TESTFILE "conftest.tmp" int main (void) { FILE *fp; /* Create a file with some contents. */ fp = fopen (TESTFILE, "w"); if (fp == NULL) return 70; if (fwrite ("foogarsh", 1, 8, fp) < 8) { fclose (fp); return 71; } if (fclose (fp)) return 72; /* The file's contents is now "foogarsh". */ /* Try writing after reading to EOF. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) return 73; if (fseek (fp, -1, SEEK_END)) { fclose (fp); return 74; } if (!(getc (fp) == 'h')) { fclose (fp); return 1; } if (!(getc (fp) == EOF)) { fclose (fp); return 2; } if (!(ftell (fp) == 8)) { fclose (fp); return 3; } if (!(ftell (fp) == 8)) { fclose (fp); return 4; } if (!(putc ('!', fp) == '!')) { fclose (fp); return 5; } if (!(ftell (fp) == 9)) { fclose (fp); return 6; } if (!(fclose (fp) == 0)) return 7; fp = fopen (TESTFILE, "r"); if (fp == NULL) return 75; { char buf[10]; if (!(fread (buf, 1, 10, fp) == 9)) { fclose (fp); return 10; } if (!(memcmp (buf, "foogarsh!", 9) == 0)) { fclose (fp); return 11; } } if (!(fclose (fp) == 0)) return 12; /* The file's contents is now "foogarsh!". */ return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_ftello_works=yes else $as_nop gl_cv_func_ftello_works=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: $gl_cv_func_ftello_works" >&5 printf "%s\n" "$gl_cv_func_ftello_works" >&6; } case "$gl_cv_func_ftello_works" in *yes) ;; *) REPLACE_FTELLO=1 printf "%s\n" "#define FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE 1" >>confdefs.h ;; esac fi if test $REPLACE_FTELLO = 0; then if test $gl_ftello_broken_after_ungetc = yes; then REPLACE_FTELLO=1 printf "%s\n" "#define FTELLO_BROKEN_AFTER_UNGETC 1" >>confdefs.h fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getcwd (NULL, 0) allocates memory for result" >&5 printf %s "checking whether getcwd (NULL, 0) allocates memory for result... " >&6; } if test ${gl_cv_func_getcwd_null+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_getcwd_null="guessing yes";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_getcwd_null="$gl_cross_guess_normal";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include <stdlib.h> # if HAVE_UNISTD_H # include <unistd.h> # else /* on Windows with MSVC */ # include <direct.h> # endif $gl_mda_defines # ifndef getcwd char *getcwd (); # endif int main (void) { #if defined _WIN32 && ! defined __CYGWIN__ /* mingw cwd does not start with '/', but _getcwd does allocate. However, mingw fails to honor non-zero size. */ #else if (chdir ("/") != 0) return 1; else { char *f = getcwd (NULL, 0); if (! f) return 2; if (f[0] != '/') { free (f); return 3; } if (f[1] != '\0') { free (f); return 4; } free (f); return 0; } #endif ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getcwd_null=yes else $as_nop gl_cv_func_getcwd_null=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: $gl_cv_func_getcwd_null" >&5 printf "%s\n" "$gl_cv_func_getcwd_null" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getcwd with POSIX signature" >&5 printf %s "checking for getcwd with POSIX signature... " >&6; } if test ${gl_cv_func_getcwd_posix_signature+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> $gl_mda_defines int main (void) { extern #ifdef __cplusplus "C" #endif char *getcwd (char *, size_t); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_getcwd_posix_signature=yes else $as_nop gl_cv_func_getcwd_posix_signature=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: $gl_cv_func_getcwd_posix_signature" >&5 printf "%s\n" "$gl_cv_func_getcwd_posix_signature" >&6; } ac_fn_check_decl "$LINENO" "getcwd" "ac_cv_have_decl_getcwd" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getcwd" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GETCWD $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "getdelim" "ac_cv_have_decl_getdelim" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getdelim" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GETDELIM $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "getdtablesize" "ac_cv_have_decl_getdtablesize" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getdtablesize" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GETDTABLESIZE $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "getline" "ac_cv_have_decl_getline" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getline" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GETLINE $ac_have_decl" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_getopt_h='<'getopt.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <getopt.h>" >&5 printf %s "checking absolute name of <getopt.h>... " >&6; } if test ${gl_cv_next_getopt_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_getopt_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <getopt.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'getopt.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_getopt_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_getopt_h gl_cv_next_getopt_h='"'$gl_header'"' else gl_cv_next_getopt_h='<'getopt.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_getopt_h" >&5 printf "%s\n" "$gl_cv_next_getopt_h" >&6; } fi NEXT_GETOPT_H=$gl_cv_next_getopt_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'getopt.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_getopt_h fi NEXT_AS_FIRST_DIRECTIVE_GETOPT_H=$gl_next_as_first_directive if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi gl_replace_getopt= if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then for ac_header in getopt.h do : ac_fn_c_check_header_compile "$LINENO" "getopt.h" "ac_cv_header_getopt_h" "$ac_includes_default" if test "x$ac_cv_header_getopt_h" = xyes then : printf "%s\n" "#define HAVE_GETOPT_H 1" >>confdefs.h else $as_nop gl_replace_getopt=yes fi done fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then for ac_func in getopt_long_only do : ac_fn_c_check_func "$LINENO" "getopt_long_only" "ac_cv_func_getopt_long_only" if test "x$ac_cv_func_getopt_long_only" = xyes then : printf "%s\n" "#define HAVE_GETOPT_LONG_ONLY 1" >>confdefs.h else $as_nop gl_replace_getopt=yes fi done fi if test -z "$gl_replace_getopt"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getopt is POSIX compatible" >&5 printf %s "checking whether getopt is POSIX compatible... " >&6; } if test ${gl_cv_func_getopt_posix+y} then : printf %s "(cached) " >&6 else $as_nop if test $cross_compiling = no; then if test "$cross_compiling" = yes then : { { 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 run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_posix=maybe else $as_nop gl_cv_func_getopt_posix=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $gl_cv_func_getopt_posix = maybe; then if test "$cross_compiling" = yes then : { { 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 run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_posix=maybe else $as_nop gl_cv_func_getopt_posix=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 if test $gl_cv_func_getopt_posix = maybe; then if test "$cross_compiling" = yes then : { { 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 run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_posix=yes else $as_nop gl_cv_func_getopt_posix=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 else case "$host_os" in darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_posix" >&5 printf "%s\n" "$gl_cv_func_getopt_posix" >&6; } case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt function" >&5 printf %s "checking for working GNU getopt function... " >&6; } if test ${gl_cv_func_getopt_gnu+y} then : printf %s "(cached) " >&6 else $as_nop # Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in xx) gl_had_POSIXLY_CORRECT=exported ;; x) gl_had_POSIXLY_CORRECT=yes ;; *) gl_had_POSIXLY_CORRECT= ;; esac POSIXLY_CORRECT=1 export POSIXLY_CORRECT if test "$cross_compiling" = yes then : gl_cv_func_getopt_gnu="$gl_cross_guess_normal" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <getopt.h> #include <stddef.h> #include <string.h> #include <stdlib.h> #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include <mach/mach.h> #include <mach/mach_error.h> #include <mach/thread_status.h> #include <mach/exception.h> #include <mach/task.h> #include <pthread.h> /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif defined _WIN32 && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winerror.h> static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include <signal.h> #include <unistd.h> /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif int main (void) { int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_gnu=yes else $as_nop gl_cv_func_getopt_gnu=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi case $gl_had_POSIXLY_CORRECT in exported) ;; yes) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;}; POSIXLY_CORRECT=1 ;; *) { POSIXLY_CORRECT=; unset POSIXLY_CORRECT;} ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getopt_gnu" >&5 printf "%s\n" "$gl_cv_func_getopt_gnu" >&6; } if test "$gl_cv_func_getopt_gnu" != yes; then gl_replace_getopt=yes else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working GNU getopt_long function" >&5 printf %s "checking for working GNU getopt_long function... " >&6; } if test ${gl_cv_func_getopt_long_gnu+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <getopt.h> #include <stddef.h> #include <string.h> int main (void) { static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getopt_long_gnu=yes else $as_nop gl_cv_func_getopt_long_gnu=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: $gl_cv_func_getopt_long_gnu" >&5 printf "%s\n" "$gl_cv_func_getopt_long_gnu" >&6; } case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi if test $ac_cv_func_getpass = no; then HAVE_GETPASS=0 fi ac_fn_check_decl "$LINENO" "fflush_unlocked" "ac_cv_have_decl_fflush_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fflush_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FFLUSH_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "flockfile" "ac_cv_have_decl_flockfile" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_flockfile" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FLOCKFILE $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fputs_unlocked" "ac_cv_have_decl_fputs_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fputs_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FPUTS_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "funlockfile" "ac_cv_have_decl_funlockfile" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_funlockfile" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FUNLOCKFILE $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "putc_unlocked" "ac_cv_have_decl_putc_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_putc_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_PUTC_UNLOCKED $ac_have_decl" >>confdefs.h HAVE_GETRANDOM=1; REPLACE_GETRANDOM=0; GL_GNULIB_GETRANDOM=0 : HAVE_GETTIMEOFDAY=1; HAVE_STRUCT_TIMEVAL=1; HAVE_SYS_TIME_H=1; REPLACE_GETTIMEOFDAY=0; REPLACE_STRUCT_TIMEVAL=0; if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_time_h='<'sys/time.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/time.h>" >&5 printf %s "checking absolute name of <sys/time.h>... " >&6; } if test ${gl_cv_next_sys_time_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_sys_time_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/time.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/time.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_time_h gl_cv_next_sys_time_h='"'$gl_header'"' else gl_cv_next_sys_time_h='<'sys/time.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_time_h" >&5 printf "%s\n" "$gl_cv_next_sys_time_h" >&6; } fi NEXT_SYS_TIME_H=$gl_cv_next_sys_time_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/time.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_time_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H=$gl_next_as_first_directive if test $ac_cv_header_sys_time_h != yes; then HAVE_SYS_TIME_H=0 fi if test $ac_cv_header_sys_socket_h != yes; then ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes then : printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timeval" >&5 printf %s "checking for struct timeval... " >&6; } if test ${gl_cv_sys_struct_timeval+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <time.h> #if HAVE_WINSOCK2_H # include <winsock2.h> #endif int main (void) { static struct timeval x; x.tv_sec = x.tv_usec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timeval=yes else $as_nop gl_cv_sys_struct_timeval=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: $gl_cv_sys_struct_timeval" >&5 printf "%s\n" "$gl_cv_sys_struct_timeval" >&6; } if test $gl_cv_sys_struct_timeval != yes; then HAVE_STRUCT_TIMEVAL=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wide-enough struct timeval.tv_sec member" >&5 printf %s "checking for wide-enough struct timeval.tv_sec member... " >&6; } if test ${gl_cv_sys_struct_timeval_tv_sec+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <time.h> #if HAVE_WINSOCK2_H # include <winsock2.h> #endif int main (void) { static struct timeval x; typedef int verify_tv_sec_type[ sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 ]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timeval_tv_sec=yes else $as_nop gl_cv_sys_struct_timeval_tv_sec=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: $gl_cv_sys_struct_timeval_tv_sec" >&5 printf "%s\n" "$gl_cv_sys_struct_timeval_tv_sec" >&6; } if test $gl_cv_sys_struct_timeval_tv_sec != yes; then REPLACE_STRUCT_TIMEVAL=1 fi fi GL_GNULIB_GETTIMEOFDAY=0 if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes then : gl_have_pthread_h=yes else $as_nop gl_have_pthread_h=no fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; int main (void) { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$save_LIBS test $gl_pthread_api = yes && break done echo "$as_me:25617: gl_pthread_api=$gl_pthread_api" >&5 echo "$as_me:25618: LIBPTHREAD=$LIBPTHREAD" >&5 gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1 then : gl_pthread_in_glibc=yes fi rm -rf conftest* ;; esac echo "$as_me:25644: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+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_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else $as_nop ac_cv_lib_pthread_pthread_kill=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_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi fi elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+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_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else $as_nop ac_cv_lib_pthread_pthread_kill=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_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread fi if test $gl_pthread_api != yes; then # For FreeBSD 4. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 printf %s "checking for pthread_kill in -lc_r... " >&6; } if test ${ac_cv_lib_c_r_pthread_kill+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_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_c_r_pthread_kill=yes else $as_nop ac_cv_lib_c_r_pthread_kill=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_kill" >&5 printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r fi fi fi echo "$as_me:25798: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 printf %s "checking whether POSIX threads API is available... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 printf "%s\n" "$gl_pthread_api" >&6; } if test $gl_pthread_api = yes; then printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sched.h> int main (void) { sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : LIB_SCHED_YIELD= else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 printf %s "checking for sched_yield in -lrt... " >&6; } if test ${ac_cv_lib_rt_sched_yield+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $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 sched_yield (); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rt_sched_yield=yes else $as_nop ac_cv_lib_rt_sched_yield=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_rt_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; } if test "x$ac_cv_lib_rt_sched_yield" = xyes then : LIB_SCHED_YIELD=-lrt else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 printf %s "checking for sched_yield in -lposix4... " >&6; } if test ${ac_cv_lib_posix4_sched_yield+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lposix4 $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 sched_yield (); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_posix4_sched_yield=yes else $as_nop ac_cv_lib_posix4_sched_yield=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_posix4_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; } if test "x$ac_cv_lib_posix4_sched_yield" = xyes then : LIB_SCHED_YIELD=-lposix4 fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext gl_pthreadlib_body_done=done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (LC_ALL, NULL) is multithread-safe" >&5 printf %s "checking whether setlocale (LC_ALL, NULL) is multithread-safe... " >&6; } if test ${gl_cv_func_setlocale_null_all_mtsafe+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin. *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*) gl_cv_func_setlocale_null_all_mtsafe=no ;; # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*) gl_cv_func_setlocale_null_all_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_all_mtsafe" >&5 printf "%s\n" "$gl_cv_func_setlocale_null_all_mtsafe" >&6; } case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_all_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_all_mtsafe" in *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; esac printf "%s\n" "#define SETLOCALE_NULL_ALL_MTSAFE $SETLOCALE_NULL_ALL_MTSAFE" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (category, NULL) is multithread-safe" >&5 printf %s "checking whether setlocale (category, NULL) is multithread-safe... " >&6; } if test ${gl_cv_func_setlocale_null_one_mtsafe+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on OpenBSD, AIX. openbsd* | aix*) gl_cv_func_setlocale_null_one_mtsafe=no ;; # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. *-gnu* | gnu* | *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*) gl_cv_func_setlocale_null_one_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_one_mtsafe" >&5 printf "%s\n" "$gl_cv_func_setlocale_null_one_mtsafe" >&6; } case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_one_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_one_mtsafe" in *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; esac printf "%s\n" "#define SETLOCALE_NULL_ONE_MTSAFE $SETLOCALE_NULL_ONE_MTSAFE" >>confdefs.h if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then case "$host_os" in mingw*) LIB_SETLOCALE_NULL= ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in cygwin*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else $as_nop gl_cv_have_weak="guessing no" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else $as_nop gl_cv_have_weak=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 ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac case "$gl_cv_have_weak" in *yes) LIB_SETLOCALE_NULL= ;; *) LIB_SETLOCALE_NULL="$LIBPTHREAD" ;; esac ;; esac else LIB_SETLOCALE_NULL= fi if test $gl_cv_have_include_next = yes; then gl_cv_next_limits_h='<'limits.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <limits.h>" >&5 printf %s "checking absolute name of <limits.h>... " >&6; } if test ${gl_cv_next_limits_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_limits_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'limits.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_limits_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_limits_h gl_cv_next_limits_h='"'$gl_header'"' else gl_cv_next_limits_h='<'limits.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_limits_h" >&5 printf "%s\n" "$gl_cv_next_limits_h" >&6; } fi NEXT_LIMITS_H=$gl_cv_next_limits_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'limits.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_limits_h fi NEXT_AS_FIRST_DIRECTIVE_LIMITS_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether limits.h has WORD_BIT, BOOL_WIDTH etc." >&5 printf %s "checking whether limits.h has WORD_BIT, BOOL_WIDTH etc.... " >&6; } if test ${gl_cv_header_limits_width+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <limits.h> long long llm = LLONG_MAX; int wb = WORD_BIT; int ullw = ULLONG_WIDTH; int bw = BOOL_WIDTH; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_limits_width=yes else $as_nop gl_cv_header_limits_width=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: $gl_cv_header_limits_width" >&5 printf "%s\n" "$gl_cv_header_limits_width" >&6; } if test "$gl_cv_header_limits_width" = yes; then GL_GENERATE_LIMITS_H=false else GL_GENERATE_LIMITS_H=true fi printf "%s\n" "#define HAVE_LONG_LONG_INT 1" >>confdefs.h printf "%s\n" "#define HAVE_UNSIGNED_LONG_LONG_INT 1" >>confdefs.h if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_stdint_h='<'stdint.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdint.h>" >&5 printf %s "checking absolute name of <stdint.h>... " >&6; } if test ${gl_cv_next_stdint_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_stdint_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdint.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdint.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdint_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdint_h gl_cv_next_stdint_h='"'$gl_header'"' else gl_cv_next_stdint_h='<'stdint.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdint_h" >&5 printf "%s\n" "$gl_cv_next_stdint_h" >&6; } fi NEXT_STDINT_H=$gl_cv_next_stdint_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdint.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdint_h fi NEXT_AS_FIRST_DIRECTIVE_STDINT_H=$gl_next_as_first_directive if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi if test $ac_cv_header_stdint_h = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdint.h conforms to C99" >&5 printf %s "checking whether stdint.h conforms to C99... " >&6; } if test ${gl_cv_header_working_stdint_h+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_header_working_stdint_h=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" #endif #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || 4 <= __clang_major__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include <limits.h> /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0/ia64 and FreeBSD 13.0/arm64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #include <stdio.h> #include <string.h> #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; int main (void) { const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_header_working_stdint_h=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 rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_header_working_stdint_h" >&5 printf "%s\n" "$gl_cv_header_working_stdint_h" >&6; } fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 GL_GENERATE_STDINT_H=true case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdint.h works without ISO C predefines" >&5 printf %s "checking whether stdint.h works without ISO C predefines... " >&6; } if test ${gl_cv_header_stdint_without_STDC_macros+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_header_stdint_without_STDC_macros=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include <stdint.h> #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_stdint_without_STDC_macros=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: $gl_cv_header_stdint_without_STDC_macros" >&5 printf "%s\n" "$gl_cv_header_stdint_without_STDC_macros" >&6; } if test $gl_cv_header_stdint_without_STDC_macros = no; then printf "%s\n" "#define __STDC_CONSTANT_MACROS 1" >>confdefs.h printf "%s\n" "#define __STDC_LIMIT_MACROS 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stdint.h has UINTMAX_WIDTH etc." >&5 printf %s "checking whether stdint.h has UINTMAX_WIDTH etc.... " >&6; } if test ${gl_cv_header_stdint_width+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_header_stdint_width=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <stdint.h> #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif int iw = UINTMAX_WIDTH; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_stdint_width=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: $gl_cv_header_stdint_width" >&5 printf "%s\n" "$gl_cv_header_stdint_width" >&6; } if test "$gl_cv_header_stdint_width" = yes; then GL_GENERATE_STDINT_H=false fi ;; *) ac_fn_c_check_header_compile "$LINENO" "sys/inttypes.h" "ac_cv_header_sys_inttypes_h" "$ac_includes_default" if test "x$ac_cv_header_sys_inttypes_h" = xyes then : printf "%s\n" "#define HAVE_SYS_INTTYPES_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "sys/bitypes.h" "ac_cv_header_sys_bitypes_h" "$ac_includes_default" if test "x$ac_cv_header_sys_bitypes_h" = xyes then : printf "%s\n" "#define HAVE_SYS_BITYPES_H 1" >>confdefs.h fi if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 printf %s "checking for bit size of $gltype... " >&6; } if eval test \${gl_cv_bitsizeof_${gltype}+y} then : printf %s "(cached) " >&6 else $as_nop if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #include <limits.h>" then : else $as_nop result=unknown fi eval gl_cv_bitsizeof_${gltype}=\$result fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` printf "%s\n" "#define BITSIZEOF_${GLTYPE} $result" >>confdefs.h eval BITSIZEOF_${GLTYPE}=\$result done fi for gltype in sig_atomic_t wchar_t wint_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bit size of $gltype" >&5 printf %s "checking for bit size of $gltype... " >&6; } if eval test \${gl_cv_bitsizeof_${gltype}+y} then : printf %s "(cached) " >&6 else $as_nop if ac_fn_c_compute_int "$LINENO" "sizeof ($gltype) * CHAR_BIT" "result" " #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif #include <limits.h>" then : else $as_nop result=unknown fi eval gl_cv_bitsizeof_${gltype}=\$result fi eval ac_res=\$gl_cv_bitsizeof_${gltype} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` printf "%s\n" "#define BITSIZEOF_${GLTYPE} $result" >>confdefs.h eval BITSIZEOF_${GLTYPE}=\$result done for gltype in sig_atomic_t wchar_t wint_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether $gltype is signed" >&5 printf %s "checking whether $gltype is signed... " >&6; } if eval test \${gl_cv_type_${gltype}_signed+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif int verify[2 * (($gltype) -1 < ($gltype) 0) - 1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : result=yes else $as_nop result=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval gl_cv_type_${gltype}_signed=\$result fi eval ac_res=\$gl_cv_type_${gltype}_signed { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then printf "%s\n" "#define HAVE_SIGNED_${GLTYPE} 1" >>confdefs.h eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then for gltype in ptrdiff_t size_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 printf %s "checking for $gltype integer literal suffix... " >&6; } if eval test \${gl_cv_type_${gltype}_suffix+y} then : printf %s "(cached) " >&6 else $as_nop eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif extern $gltype foo; extern $gltype1 foo; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done fi eval ac_res=\$gl_cv_type_${gltype}_suffix { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result printf "%s\n" "#define ${GLTYPE}_SUFFIX $result" >>confdefs.h done fi for gltype in sig_atomic_t wchar_t wint_t ; do { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for $gltype integer literal suffix" >&5 printf %s "checking for $gltype integer literal suffix... " >&6; } if eval test \${gl_cv_type_${gltype}_suffix+y} then : printf %s "(cached) " >&6 else $as_nop eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif extern $gltype foo; extern $gltype1 foo; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : eval gl_cv_type_${gltype}_suffix=\$glsuf fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done fi eval ac_res=\$gl_cv_type_${gltype}_suffix { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result printf "%s\n" "#define ${GLTYPE}_SUFFIX $result" >>confdefs.h done if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ;; esac GL_GENERATE_LIMITS_H=true HAVE_DECL_IMAXABS=1; HAVE_DECL_IMAXDIV=1; HAVE_DECL_STRTOIMAX=1; HAVE_DECL_STRTOUMAX=1; HAVE_IMAXDIV_T=1; REPLACE_STRTOIMAX=0; REPLACE_STRTOUMAX=0; INT32_MAX_LT_INTMAX_MAX=1; INT64_MAX_EQ_LONG_MAX='defined _LP64'; PRIPTR_PREFIX=__PRIPTR_PREFIX; UINT32_MAX_LT_UINTMAX_MAX=1; UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; if test $gl_cv_have_include_next = yes; then gl_cv_next_inttypes_h='<'inttypes.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <inttypes.h>" >&5 printf %s "checking absolute name of <inttypes.h>... " >&6; } if test ${gl_cv_next_inttypes_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_inttypes_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <inttypes.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'inttypes.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_inttypes_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_inttypes_h gl_cv_next_inttypes_h='"'$gl_header'"' else gl_cv_next_inttypes_h='<'inttypes.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_inttypes_h" >&5 printf "%s\n" "$gl_cv_next_inttypes_h" >&6; } fi NEXT_INTTYPES_H=$gl_cv_next_inttypes_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'inttypes.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_inttypes_h fi NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H=$gl_next_as_first_directive PRIPTR_PREFIX= if $GL_GENERATE_STDINT_H; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _WIN64 LLP64 #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : PRIPTR_PREFIX='"l"' else $as_nop PRIPTR_PREFIX='"ll"' fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext else for glpfx in '' l ll I64; do case $glpfx in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; I64) gltype1='__int64';; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdint.h> extern intptr_t foo; extern $gltype1 foo; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : PRIPTR_PREFIX='"'$glpfx'"' fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext test -n "$PRIPTR_PREFIX" && break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether INT32_MAX < INTMAX_MAX" >&5 printf %s "checking whether INT32_MAX < INTMAX_MAX... " >&6; } if test ${gl_cv_test_INT32_MAX_LT_INTMAX_MAX+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #if defined INT32_MAX && defined INTMAX_MAX #define CONDITION (INT32_MAX < INTMAX_MAX) #else #define CONDITION (sizeof (int) < sizeof (long long int)) #endif int test[CONDITION ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_test_INT32_MAX_LT_INTMAX_MAX=yes else $as_nop gl_cv_test_INT32_MAX_LT_INTMAX_MAX=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: $gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&5 printf "%s\n" "$gl_cv_test_INT32_MAX_LT_INTMAX_MAX" >&6; } if test $gl_cv_test_INT32_MAX_LT_INTMAX_MAX = yes; then INT32_MAX_LT_INTMAX_MAX=1; else INT32_MAX_LT_INTMAX_MAX=0; fi if test $APPLE_UNIVERSAL_BUILD = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether INT64_MAX == LONG_MAX" >&5 printf %s "checking whether INT64_MAX == LONG_MAX... " >&6; } if test ${gl_cv_test_INT64_MAX_EQ_LONG_MAX+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #if defined INT64_MAX #define CONDITION (INT64_MAX == LONG_MAX) #else #define CONDITION (sizeof (long long int) == sizeof (long int)) #endif int test[CONDITION ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_test_INT64_MAX_EQ_LONG_MAX=yes else $as_nop gl_cv_test_INT64_MAX_EQ_LONG_MAX=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: $gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&5 printf "%s\n" "$gl_cv_test_INT64_MAX_EQ_LONG_MAX" >&6; } if test $gl_cv_test_INT64_MAX_EQ_LONG_MAX = yes; then INT64_MAX_EQ_LONG_MAX=1; else INT64_MAX_EQ_LONG_MAX=0; fi else INT64_MAX_EQ_LONG_MAX=-1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UINT32_MAX < UINTMAX_MAX" >&5 printf %s "checking whether UINT32_MAX < UINTMAX_MAX... " >&6; } if test ${gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #if defined UINT32_MAX && defined UINTMAX_MAX #define CONDITION (UINT32_MAX < UINTMAX_MAX) #else #define CONDITION (sizeof (unsigned int) < sizeof (unsigned long long int)) #endif int test[CONDITION ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=yes else $as_nop gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX=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: $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&5 printf "%s\n" "$gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX" >&6; } if test $gl_cv_test_UINT32_MAX_LT_UINTMAX_MAX = yes; then UINT32_MAX_LT_UINTMAX_MAX=1; else UINT32_MAX_LT_UINTMAX_MAX=0; fi if test $APPLE_UNIVERSAL_BUILD = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether UINT64_MAX == ULONG_MAX" >&5 printf %s "checking whether UINT64_MAX == ULONG_MAX... " >&6; } if test ${gl_cv_test_UINT64_MAX_EQ_ULONG_MAX+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #if defined UINT64_MAX #define CONDITION (UINT64_MAX == ULONG_MAX) #else #define CONDITION (sizeof (unsigned long long int) == sizeof (unsigned long int)) #endif int test[CONDITION ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=yes else $as_nop gl_cv_test_UINT64_MAX_EQ_ULONG_MAX=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: $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&5 printf "%s\n" "$gl_cv_test_UINT64_MAX_EQ_ULONG_MAX" >&6; } if test $gl_cv_test_UINT64_MAX_EQ_ULONG_MAX = yes; then UINT64_MAX_EQ_ULONG_MAX=1; else UINT64_MAX_EQ_ULONG_MAX=0; fi else UINT64_MAX_EQ_ULONG_MAX=-1 fi GL_GNULIB_IMAXABS=0 GL_GNULIB_IMAXDIV=0 GL_GNULIB_STRTOIMAX=0 GL_GNULIB_STRTOUMAX=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5 printf %s "checking where to find the exponent in a 'float'... " >&6; } if test ${gl_cv_cc_float_expbit0+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : gl_cv_cc_float_expbit0="word 0 bit 23" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (float x) { memory_float m; size_t i; /* Clear it first, in case sizeof (float) < sizeof (memory_float). */ memset (&m, 0, sizeof (memory_float)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25f); add_to_ored_words (0.5f); add_to_ored_words (1.0f); add_to_ored_words (2.0f); add_to_ored_words (4.0f); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_float_expbit0=`cat conftest.out` else $as_nop gl_cv_cc_float_expbit0="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5 printf "%s\n" "$gl_cv_cc_float_expbit0" >&6; } case "$gl_cv_cc_float_expbit0" in word*bit*) word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` printf "%s\n" "#define FLT_EXPBIT0_WORD $word" >>confdefs.h printf "%s\n" "#define FLT_EXPBIT0_BIT $bit" >>confdefs.h ;; esac HAVE_NL_LANGINFO=1; REPLACE_NL_LANGINFO=0; if test $gl_cv_have_include_next = yes; then gl_cv_next_langinfo_h='<'langinfo.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <langinfo.h>" >&5 printf %s "checking absolute name of <langinfo.h>... " >&6; } if test ${gl_cv_next_langinfo_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_langinfo_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'langinfo.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_langinfo_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_langinfo_h gl_cv_next_langinfo_h='"'$gl_header'"' else gl_cv_next_langinfo_h='<'langinfo.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_langinfo_h" >&5 printf "%s\n" "$gl_cv_next_langinfo_h" >&6; } fi NEXT_LANGINFO_H=$gl_cv_next_langinfo_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'langinfo.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_langinfo_h fi NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H=$gl_next_as_first_directive HAVE_LANGINFO_CODESET=0 HAVE_LANGINFO_T_FMT_AMPM=0 HAVE_LANGINFO_ALTMON=0 HAVE_LANGINFO_ERA=0 HAVE_LANGINFO_YESEXPR=0 if test $ac_cv_header_langinfo_h = yes; then HAVE_LANGINFO_H=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines CODESET" >&5 printf %s "checking whether langinfo.h defines CODESET... " >&6; } if test ${gl_cv_header_langinfo_codeset+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = CODESET; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_codeset=yes else $as_nop gl_cv_header_langinfo_codeset=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: $gl_cv_header_langinfo_codeset" >&5 printf "%s\n" "$gl_cv_header_langinfo_codeset" >&6; } if test $gl_cv_header_langinfo_codeset = yes; then HAVE_LANGINFO_CODESET=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines T_FMT_AMPM" >&5 printf %s "checking whether langinfo.h defines T_FMT_AMPM... " >&6; } if test ${gl_cv_header_langinfo_t_fmt_ampm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = T_FMT_AMPM; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_t_fmt_ampm=yes else $as_nop gl_cv_header_langinfo_t_fmt_ampm=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: $gl_cv_header_langinfo_t_fmt_ampm" >&5 printf "%s\n" "$gl_cv_header_langinfo_t_fmt_ampm" >&6; } if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then HAVE_LANGINFO_T_FMT_AMPM=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines ALTMON_1" >&5 printf %s "checking whether langinfo.h defines ALTMON_1... " >&6; } if test ${gl_cv_header_langinfo_altmon+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = ALTMON_1; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_altmon=yes else $as_nop gl_cv_header_langinfo_altmon=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: $gl_cv_header_langinfo_altmon" >&5 printf "%s\n" "$gl_cv_header_langinfo_altmon" >&6; } if test $gl_cv_header_langinfo_altmon = yes; then HAVE_LANGINFO_ALTMON=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines ERA" >&5 printf %s "checking whether langinfo.h defines ERA... " >&6; } if test ${gl_cv_header_langinfo_era+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = ERA; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_era=yes else $as_nop gl_cv_header_langinfo_era=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: $gl_cv_header_langinfo_era" >&5 printf "%s\n" "$gl_cv_header_langinfo_era" >&6; } if test $gl_cv_header_langinfo_era = yes; then HAVE_LANGINFO_ERA=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether langinfo.h defines YESEXPR" >&5 printf %s "checking whether langinfo.h defines YESEXPR... " >&6; } if test ${gl_cv_header_langinfo_yesexpr+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int a = YESEXPR; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_langinfo_yesexpr=yes else $as_nop gl_cv_header_langinfo_yesexpr=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: $gl_cv_header_langinfo_yesexpr" >&5 printf "%s\n" "$gl_cv_header_langinfo_yesexpr" >&6; } if test $gl_cv_header_langinfo_yesexpr = yes; then HAVE_LANGINFO_YESEXPR=1 fi else HAVE_LANGINFO_H=0 fi GL_GNULIB_NL_LANGINFO=0 HAVE_NEWLOCALE=1; HAVE_DUPLOCALE=1; HAVE_FREELOCALE=1; REPLACE_LOCALECONV=0; REPLACE_SETLOCALE=0; REPLACE_NEWLOCALE=0; REPLACE_DUPLOCALE=0; REPLACE_FREELOCALE=0; REPLACE_STRUCT_LCONV=0; LOCALENAME_ENHANCE_LOCALE_FUNCS=0; REPLACE_NULL=0; HAVE_MAX_ALIGN_T=1; HAVE_WCHAR_T=1; GL_GENERATE_STDDEF_H=false { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for good max_align_t" >&5 printf %s "checking for good max_align_t... " >&6; } if test ${gl_cv_type_max_align_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> unsigned int s = sizeof (max_align_t); #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; #endif typedef struct { char a; max_align_t b; } max_helper; typedef struct { char a; long b; } long_helper; typedef struct { char a; double b; } double_helper; typedef struct { char a; long double b; } long_double_helper; int check3[2 * (offsetof (long_helper, b) <= offsetof (max_helper, b)) - 1]; int check4[2 * (offsetof (double_helper, b) <= offsetof (max_helper, b)) - 1]; int check5[2 * (offsetof (long_double_helper, b) <= offsetof (max_helper, b)) - 1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_max_align_t=yes else $as_nop gl_cv_type_max_align_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: $gl_cv_type_max_align_t" >&5 printf "%s\n" "$gl_cv_type_max_align_t" >&6; } if test $gl_cv_type_max_align_t = no; then HAVE_MAX_ALIGN_T=0 GL_GENERATE_STDDEF_H=true fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 GL_GENERATE_STDDEF_H=true fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NULL can be used in arbitrary expressions" >&5 printf %s "checking whether NULL can be used in arbitrary expressions... " >&6; } if test ${gl_cv_decl_null_works+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> int test[2 * (sizeof NULL == sizeof (void *)) -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_decl_null_works=yes else $as_nop gl_cv_decl_null_works=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: $gl_cv_decl_null_works" >&5 printf "%s\n" "$gl_cv_decl_null_works" >&6; } if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 GL_GENERATE_STDDEF_H=true fi if $GL_GENERATE_STDDEF_H; then if test $gl_cv_have_include_next = yes; then gl_cv_next_stddef_h='<'stddef.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stddef.h>" >&5 printf %s "checking absolute name of <stddef.h>... " >&6; } if test ${gl_cv_next_stddef_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stddef.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stddef_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stddef_h gl_cv_next_stddef_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stddef_h" >&5 printf "%s\n" "$gl_cv_next_stddef_h" >&6; } fi NEXT_STDDEF_H=$gl_cv_next_stddef_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stddef.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stddef_h fi NEXT_AS_FIRST_DIRECTIVE_STDDEF_H=$gl_next_as_first_directive fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether locale.h defines locale_t" >&5 printf %s "checking whether locale.h defines locale_t... " >&6; } if test ${gl_cv_header_locale_has_locale_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> locale_t x; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_locale_has_locale_t=yes else $as_nop gl_cv_header_locale_has_locale_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: $gl_cv_header_locale_has_locale_t" >&5 printf "%s\n" "$gl_cv_header_locale_has_locale_t" >&6; } if test $ac_cv_header_xlocale_h = yes; then HAVE_XLOCALE_H=1 if test $gl_cv_header_locale_has_locale_t = yes; then gl_cv_header_locale_h_needs_xlocale_h=no else gl_cv_header_locale_h_needs_xlocale_h=yes fi HAVE_LOCALE_T=1 else HAVE_XLOCALE_H=0 gl_cv_header_locale_h_needs_xlocale_h=no if test $gl_cv_header_locale_has_locale_t = yes; then HAVE_LOCALE_T=1 else HAVE_LOCALE_T=0 fi fi case "$host_os" in solaris*) printf "%s\n" "#define _LCONV_C99 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether locale.h conforms to POSIX:2001" >&5 printf %s "checking whether locale.h conforms to POSIX:2001... " >&6; } if test ${gl_cv_header_locale_h_posix2001+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> int x = LC_MESSAGES; int y = sizeof (((struct lconv *) 0)->decimal_point); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_locale_h_posix2001=yes else $as_nop gl_cv_header_locale_h_posix2001=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: $gl_cv_header_locale_h_posix2001" >&5 printf "%s\n" "$gl_cv_header_locale_h_posix2001" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct lconv is properly defined" >&5 printf %s "checking whether struct lconv is properly defined... " >&6; } if test ${gl_cv_sys_struct_lconv_ok+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> struct lconv l; int x = sizeof (l.decimal_point); int y = sizeof (l.int_p_cs_precedes); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_lconv_ok=yes else $as_nop gl_cv_sys_struct_lconv_ok=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: $gl_cv_sys_struct_lconv_ok" >&5 printf "%s\n" "$gl_cv_sys_struct_lconv_ok" >&6; } if test $gl_cv_sys_struct_lconv_ok = no; then case "$host_os" in mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Special #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Special" >/dev/null 2>&1 then : else $as_nop REPLACE_STRUCT_LCONV=1 fi rm -rf conftest* ;; *) REPLACE_STRUCT_LCONV=1 ;; esac fi if test $gl_cv_have_include_next = yes; then gl_cv_next_locale_h='<'locale.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <locale.h>" >&5 printf %s "checking absolute name of <locale.h>... " >&6; } if test ${gl_cv_next_locale_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'locale.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_locale_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_locale_h gl_cv_next_locale_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_locale_h" >&5 printf "%s\n" "$gl_cv_next_locale_h" >&6; } fi NEXT_LOCALE_H=$gl_cv_next_locale_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'locale.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_locale_h fi NEXT_AS_FIRST_DIRECTIVE_LOCALE_H=$gl_next_as_first_directive GL_GNULIB_LOCALECONV=0 GL_GNULIB_SETLOCALE=0 GL_GNULIB_SETLOCALE_NULL=0 GL_GNULIB_DUPLOCALE=0 GL_GNULIB_LOCALENAME=0 gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in cygwin*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else $as_nop gl_cv_have_weak="guessing no" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else $as_nop gl_cv_have_weak=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 ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then : fi if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then gl_have_isoc_threads="$ac_cv_header_threads_h" fi if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes then : gl_have_pthread_h=yes else $as_nop gl_have_pthread_h=no fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; int main (void) { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$save_LIBS test $gl_pthread_api = yes && break done echo "$as_me:28483: gl_pthread_api=$gl_pthread_api" >&5 echo "$as_me:28484: LIBPTHREAD=$LIBPTHREAD" >&5 gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1 then : gl_pthread_in_glibc=yes fi rm -rf conftest* ;; esac echo "$as_me:28510: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+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_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else $as_nop ac_cv_lib_pthread_pthread_kill=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_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi fi elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+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_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else $as_nop ac_cv_lib_pthread_pthread_kill=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_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread fi if test $gl_pthread_api != yes; then # For FreeBSD 4. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 printf %s "checking for pthread_kill in -lc_r... " >&6; } if test ${ac_cv_lib_c_r_pthread_kill+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_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_c_r_pthread_kill=yes else $as_nop ac_cv_lib_c_r_pthread_kill=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_kill" >&5 printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r fi fi fi echo "$as_me:28664: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 printf %s "checking whether POSIX threads API is available... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 printf "%s\n" "$gl_pthread_api" >&6; } if test $gl_pthread_api = yes; then printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sched.h> int main (void) { sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : LIB_SCHED_YIELD= else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 printf %s "checking for sched_yield in -lrt... " >&6; } if test ${ac_cv_lib_rt_sched_yield+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $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 sched_yield (); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rt_sched_yield=yes else $as_nop ac_cv_lib_rt_sched_yield=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_rt_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; } if test "x$ac_cv_lib_rt_sched_yield" = xyes then : LIB_SCHED_YIELD=-lrt else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 printf %s "checking for sched_yield in -lposix4... " >&6; } if test ${ac_cv_lib_posix4_sched_yield+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lposix4 $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 sched_yield (); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_posix4_sched_yield=yes else $as_nop ac_cv_lib_posix4_sched_yield=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_posix4_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; } if test "x$ac_cv_lib_posix4_sched_yield" = xyes then : LIB_SCHED_YIELD=-lposix4 fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext gl_pthreadlib_body_done=done fi LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD if test $gl_pthread_api = yes; then if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then gl_threads_api='isoc+posix' printf "%s\n" "#define USE_ISOC_AND_POSIX_THREADS 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= else gl_threads_api=posix printf "%s\n" "#define USE_POSIX_THREADS 1" >>confdefs.h if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then printf "%s\n" "#define USE_POSIX_THREADS_FROM_LIBC 1" >>confdefs.h else if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then printf "%s\n" "#define USE_POSIX_THREADS_WEAK 1" >>confdefs.h LIBTHREAD= LTLIBTHREAD= else case "$host_os" in freebsd* | dragonfly* | midnightbsd*) if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h fi ;; esac fi fi fi fi fi if test $gl_threads_api = none; then if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then if test -z "$gl_stdthreadlib_body_done"; then case "$host_os" in mingw*) LIBSTDTHREAD= ;; *) if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. ac_fn_c_check_header_compile "$LINENO" "pthread.h" "ac_cv_header_pthread_h" "$ac_includes_default" if test "x$ac_cv_header_pthread_h" = xyes then : gl_have_pthread_h=yes else $as_nop gl_have_pthread_h=no fi if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; int main (void) { pthread_mutex_lock (&m); pthread_mutexattr_init (&ma); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS=$save_LIBS test $gl_pthread_api = yes && break done echo "$as_me:28892: gl_pthread_api=$gl_pthread_api" >&5 echo "$as_me:28893: LIBPTHREAD=$LIBPTHREAD" >&5 gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1 then : gl_pthread_in_glibc=yes fi rm -rf conftest* ;; esac echo "$as_me:28919: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&5 # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+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_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else $as_nop ac_cv_lib_pthread_pthread_kill=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_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.1-9 | solaris2.1-9.* | hpux*) printf "%s\n" "#define PTHREAD_IN_USE_DETECTION_HARD 1" >>confdefs.h esac fi fi elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lpthread" >&5 printf %s "checking for pthread_kill in -lpthread... " >&6; } if test ${ac_cv_lib_pthread_pthread_kill+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_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_pthread_pthread_kill=yes else $as_nop ac_cv_lib_pthread_pthread_kill=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_kill" >&5 printf "%s\n" "$ac_cv_lib_pthread_pthread_kill" >&6; } if test "x$ac_cv_lib_pthread_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread fi if test $gl_pthread_api != yes; then # For FreeBSD 4. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for pthread_kill in -lc_r" >&5 printf %s "checking for pthread_kill in -lc_r... " >&6; } if test ${ac_cv_lib_c_r_pthread_kill+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_kill (); int main (void) { return pthread_kill (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_c_r_pthread_kill=yes else $as_nop ac_cv_lib_c_r_pthread_kill=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_kill" >&5 printf "%s\n" "$ac_cv_lib_c_r_pthread_kill" >&6; } if test "x$ac_cv_lib_c_r_pthread_kill" = xyes then : gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r fi fi fi echo "$as_me:29073: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether POSIX threads API is available" >&5 printf %s "checking whether POSIX threads API is available... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_pthread_api" >&5 printf "%s\n" "$gl_pthread_api" >&6; } if test $gl_pthread_api = yes; then printf "%s\n" "#define HAVE_PTHREAD_API 1" >>confdefs.h fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sched.h> int main (void) { sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : LIB_SCHED_YIELD= else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lrt" >&5 printf %s "checking for sched_yield in -lrt... " >&6; } if test ${ac_cv_lib_rt_sched_yield+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lrt $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 sched_yield (); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_rt_sched_yield=yes else $as_nop ac_cv_lib_rt_sched_yield=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_rt_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_rt_sched_yield" >&6; } if test "x$ac_cv_lib_rt_sched_yield" = xyes then : LIB_SCHED_YIELD=-lrt else $as_nop { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for sched_yield in -lposix4" >&5 printf %s "checking for sched_yield in -lposix4... " >&6; } if test ${ac_cv_lib_posix4_sched_yield+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lposix4 $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 sched_yield (); int main (void) { return sched_yield (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_posix4_sched_yield=yes else $as_nop ac_cv_lib_posix4_sched_yield=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_posix4_sched_yield" >&5 printf "%s\n" "$ac_cv_lib_posix4_sched_yield" >&6; } if test "x$ac_cv_lib_posix4_sched_yield" = xyes then : LIB_SCHED_YIELD=-lposix4 fi fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext gl_pthreadlib_body_done=done fi if test $ac_cv_header_threads_h = yes; then ac_fn_c_check_func "$LINENO" "thrd_create" "ac_cv_func_thrd_create" if test "x$ac_cv_func_thrd_create" = xyes then : printf "%s\n" "#define HAVE_THRD_CREATE 1" >>confdefs.h fi if test $ac_cv_func_thrd_create = yes; then LIBSTDTHREAD= else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for thrd_create in -lstdthreads" >&5 printf %s "checking for thrd_create in -lstdthreads... " >&6; } if test ${ac_cv_lib_stdthreads_thrd_create+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lstdthreads $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 thrd_create (); int main (void) { return thrd_create (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_stdthreads_thrd_create=yes else $as_nop ac_cv_lib_stdthreads_thrd_create=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_stdthreads_thrd_create" >&5 printf "%s\n" "$ac_cv_lib_stdthreads_thrd_create" >&6; } if test "x$ac_cv_lib_stdthreads_thrd_create" = xyes then : LIBSTDTHREAD='-lstdthreads -lpthread' else $as_nop LIBSTDTHREAD="$LIBPMULTITHREAD" fi fi else LIBSTDTHREAD="$LIBPMULTITHREAD $LIB_SCHED_YIELD" fi ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ISO C threads API is available" >&5 printf %s "checking whether ISO C threads API is available... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_header_threads_h" >&5 printf "%s\n" "$ac_cv_header_threads_h" >&6; } gl_stdthreadlib_body_done=done fi LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD gl_threads_api=isoc printf "%s\n" "#define USE_ISOC_THREADS 1" >>confdefs.h fi fi if test $gl_threads_api = none; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=windows printf "%s\n" "#define USE_WINDOWS_THREADS 1" >>confdefs.h fi ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for multithread API to use" >&5 printf %s "checking for multithread API to use... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_threads_api" >&5 printf "%s\n" "$gl_threads_api" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc (0) returns nonnull" >&5 printf %s "checking whether malloc (0) returns nonnull... " >&6; } if test ${ac_cv_func_malloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = malloc (0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_malloc_0_nonnull=yes else $as_nop ac_cv_func_malloc_0_nonnull=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: $ac_cv_func_malloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } case $ac_cv_func_malloc_0_nonnull in #( *yes) : gl_cv_func_malloc_0_nonnull=1 ;; #( *) : gl_cv_func_malloc_0_nonnull=0 ;; esac printf "%s\n" "#define MALLOC_0_IS_NONNULL $gl_cv_func_malloc_0_nonnull" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_math_h='<'math.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <math.h>" >&5 printf %s "checking absolute name of <math.h>... " >&6; } if test ${gl_cv_next_math_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_math_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'math.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_math_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_math_h gl_cv_next_math_h='"'$gl_header'"' else gl_cv_next_math_h='<'math.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_math_h" >&5 printf "%s\n" "$gl_cv_next_math_h" >&6; } fi NEXT_MATH_H=$gl_cv_next_math_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'math.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_math_h fi NEXT_AS_FIRST_DIRECTIVE_MATH_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NAN macro works" >&5 printf %s "checking whether NAN macro works... " >&6; } if test ${gl_cv_header_math_nan_works+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> int main (void) { /* Solaris 10 has a broken definition of NAN. Other platforms fail to provide NAN, or provide it only in C99 mode; this test only needs to fail when NAN is provided but wrong. */ float f = 1.0f; #ifdef NAN f = NAN; #endif return f == 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_math_nan_works=yes else $as_nop gl_cv_header_math_nan_works=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: $gl_cv_header_math_nan_works" >&5 printf "%s\n" "$gl_cv_header_math_nan_works" >&6; } if test $gl_cv_header_math_nan_works = no; then REPLACE_NAN=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether HUGE_VAL works" >&5 printf %s "checking whether HUGE_VAL works... " >&6; } if test ${gl_cv_header_math_huge_val_works+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> int main (void) { /* Solaris 10 has a broken definition of HUGE_VAL. */ double d = HUGE_VAL; return d == 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_math_huge_val_works=yes else $as_nop gl_cv_header_math_huge_val_works=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: $gl_cv_header_math_huge_val_works" >&5 printf "%s\n" "$gl_cv_header_math_huge_val_works" >&6; } if test $gl_cv_header_math_huge_val_works = no; then REPLACE_HUGE_VAL=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mbstate_t" >&5 printf %s "checking for mbstate_t... " >&6; } if test ${ac_cv_type_mbstate_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default #include <wchar.h> int main (void) { mbstate_t x; return sizeof x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_type_mbstate_t=yes else $as_nop ac_cv_type_mbstate_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: $ac_cv_type_mbstate_t" >&5 printf "%s\n" "$ac_cv_type_mbstate_t" >&6; } if test $ac_cv_type_mbstate_t = yes; then printf "%s\n" "#define HAVE_MBSTATE_T 1" >>confdefs.h else printf "%s\n" "#define mbstate_t int" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a traditional japanese locale" >&5 printf %s "checking for a traditional japanese locale... " >&6; } if test ${gt_cv_locale_ja+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Note that on native Windows, the Japanese locale is # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we # cannot use it here. gt_cv_locale_ja=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the AIX locale name. if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP else # Test for the locale name with explicit encoding suffix. if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC-JP else # Test for the HP-UX, OSF/1, NetBSD locale name. if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.eucJP else # Test for the IRIX, FreeBSD locale name. if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC else # Test for the Solaris 7 locale name. if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja else # Special test for NetBSD 1.6. if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then gt_cv_locale_ja=ja_JP.eucJP else # None found. gt_cv_locale_ja=none fi fi fi fi fi fi ;; esac fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_ja" >&5 printf "%s\n" "$gt_cv_locale_ja" >&6; } LOCALE_JA=$gt_cv_locale_ja { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a french Unicode locale" >&5 printf %s "checking for a french Unicode locale... " >&6; } if test ${gt_cv_locale_fr_utf8+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_fr_utf8" >&5 printf "%s\n" "$gt_cv_locale_fr_utf8" >&6; } LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for a transitional chinese locale" >&5 printf %s "checking for a transitional chinese locale... " >&6; } if test ${gt_cv_locale_zh_CN+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } _ACEOF if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$ac_link\""; } >&5 (eval $ac_link) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; } && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_locale_zh_CN" >&5 printf "%s\n" "$gt_cv_locale_zh_CN" >&6; } LOCALE_ZH_CN=$gt_cv_locale_zh_CN if case "$host_os" in mingw*) true ;; *) test $ac_cv_func_mbsinit = yes ;; esac \ && test $ac_cv_func_mbrtowc = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 printf %s "checking whether mbrtowc handles incomplete characters... " >&6; } if test ${gl_cv_func_mbrtowc_incomplete_state+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac if test $LOCALE_JA != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_incomplete_state=yes else $as_nop gl_cv_func_mbrtowc_incomplete_state=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_incomplete_state=yes else $as_nop gl_cv_func_mbrtowc_incomplete_state=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 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_incomplete_state" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 printf %s "checking whether mbrtowc works as well as mbtowc... " >&6; } if test ${gl_cv_func_mbrtowc_sanitycheck+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_sanitycheck=yes else $as_nop gl_cv_func_mbrtowc_sanitycheck=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_sanitycheck" >&6; } REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi if test $ac_cv_func_mbrtowc = no; then HAVE_MBRTOWC=0 ac_fn_check_decl "$LINENO" "mbrtowc" "ac_cv_have_decl_mbrtowc" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mbrtowc" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_MBRTOWC $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_mbrtowc = yes; then REPLACE_MBRTOWC=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOWC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL pwc argument" >&5 printf %s "checking whether mbrtowc handles a NULL pwc argument... " >&6; } if test ${gl_cv_func_mbrtowc_null_arg1+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "\303\237er"; mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 5, &state); if (ret != 2) result |= 1; if (!mbsinit (&state)) result |= 2; memset (&state, '\0', sizeof (mbstate_t)); ret = mbrtowc (NULL, input, 5, &state); if (ret != 2) /* Solaris 7 fails here: ret is -1. */ result |= 4; if (!mbsinit (&state)) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_null_arg1=yes else $as_nop gl_cv_func_mbrtowc_null_arg1=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg1" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_null_arg1" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL string argument" >&5 printf %s "checking whether mbrtowc handles a NULL string argument... " >&6; } if test ${gl_cv_func_mbrtowc_null_arg2+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on OSF/1. osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { mbstate_t state; wchar_t wc; int ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; mbrtowc (&wc, NULL, 5, &state); /* Check that wc was not modified. */ if (wc != (wchar_t) 0xBADFACE) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_null_arg2=yes else $as_nop gl_cv_func_mbrtowc_null_arg2=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg2" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_null_arg2" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc has a correct return value" >&5 printf %s "checking whether mbrtowc has a correct return value... " >&6; } if test ${gl_cv_func_mbrtowc_retval+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on HP-UX, Solaris, native Windows. hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_retval="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ || { case "$host_os" in mingw*) true;; *) false;; esac; }; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; int found_some_locale = 0; /* This fails on Solaris. */ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 1) result |= 1; } found_some_locale = 1; } /* This fails on HP-UX 11.11. */ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 2) result |= 2; } found_some_locale = 1; } /* This fails on native Windows. */ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 4; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 8; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 16; } found_some_locale = 1; } return (found_some_locale ? result : 77); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_retval=yes else $as_nop if test $? != 77; then gl_cv_func_mbrtowc_retval=no fi 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: $gl_cv_func_mbrtowc_retval" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_retval" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5 printf %s "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; } if test ${gl_cv_func_mbrtowc_nul_retval+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris 8 and 9. solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8 and 9. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "", 1, &state) != 0) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_nul_retval=yes else $as_nop gl_cv_func_mbrtowc_nul_retval=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_nul_retval" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc stores incomplete characters" >&5 printf %s "checking whether mbrtowc stores incomplete characters... " >&6; } if test ${gl_cv_func_mbrtowc_stores_incomplete+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;; *) gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;; esac case "$host_os" in mingw*) if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "French_France.65001") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 1; } if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\226", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 2; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\245", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 4; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\261", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_stores_incomplete=no else $as_nop gl_cv_func_mbrtowc_stores_incomplete=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; *) if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_stores_incomplete=no else $as_nop gl_cv_func_mbrtowc_stores_incomplete=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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_stores_incomplete" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_stores_incomplete" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works on empty input" >&5 printf %s "checking whether mbrtowc works on empty input... " >&6; } if test ${gl_cv_func_mbrtowc_empty_input+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on AIX and glibc systems. aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; esac if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> static wchar_t wc; static mbstate_t mbs; int main (void) { return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_empty_input=yes else $as_nop gl_cv_func_mbrtowc_empty_input=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: $gl_cv_func_mbrtowc_empty_input" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_empty_input" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5 printf %s "checking whether the C locale is free of encoding errors... " >&6; } if test ${gl_cv_func_mbrtowc_C_locale_sans_EILSEQ+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #include <locale.h> #include <wchar.h> int main (void) { int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; wchar_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes else $as_nop gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=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: $gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&6; } case "$gl_cv_func_mbrtowc_null_arg1" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_null_arg2" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_retval" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_nul_retval" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_stores_incomplete" in *no) ;; *) printf "%s\n" "#define MBRTOWC_STORES_INCOMPLETE_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_empty_input" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_EMPTY_INPUT_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac fi fi if test $REPLACE_MBSTATE_T = 1; then case "$host_os" in mingw*) LIB_MBRTOWC= ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in cygwin*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else $as_nop gl_cv_have_weak="guessing no" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else $as_nop gl_cv_have_weak=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 ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac case "$gl_cv_have_weak" in *yes) LIB_MBRTOWC= ;; *) LIB_MBRTOWC="$LIBPTHREAD" ;; esac ;; esac else LIB_MBRTOWC= fi { 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 # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. ac_fn_c_check_func "$LINENO" "mmap" "ac_cv_func_mmap" if test "x$ac_cv_func_mmap" = xyes then : gl_have_mmap=yes else $as_nop gl_have_mmap=no fi # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for MAP_ANONYMOUS" >&5 printf %s "checking for MAP_ANONYMOUS... " >&6; } cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/mman.h> #ifdef MAP_ANONYMOUS I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1 then : gl_have_mmap_anonymous=yes fi rm -rf conftest* if test $gl_have_mmap_anonymous != yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/mman.h> #ifdef MAP_ANON I cannot identify this map #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "I cannot identify this map" >/dev/null 2>&1 then : printf "%s\n" "#define MAP_ANONYMOUS MAP_ANON" >>confdefs.h gl_have_mmap_anonymous=yes fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_have_mmap_anonymous" >&5 printf "%s\n" "$gl_have_mmap_anonymous" >&6; } if test $gl_have_mmap_anonymous = yes; then printf "%s\n" "#define HAVE_MAP_ANONYMOUS 1" >>confdefs.h fi fi # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 # https://bugzilla.redhat.com/show_bug.cgi?id=499689 # memchr should not dereference overestimated length after a match # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 # memchr should cast the second argument to 'unsigned char'. # This bug exists in Android 4.3. # Assume that memchr works on platforms that lack mprotect. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether memchr works" >&5 printf %s "checking whether memchr works... " >&6; } if test ${gl_cv_func_memchr_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_memchr_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_memchr_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_memchr_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> #if HAVE_SYS_MMAN_H # include <fcntl.h> # include <unistd.h> # include <sys/types.h> # include <sys/mman.h> # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif int main (void) { int result = 0; char *fence = NULL; #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) fence = two_pages + pagesize; } #endif if (fence) { /* Test against bugs on glibc systems. */ if (memchr (fence, 0, 0)) result |= 1; strcpy (fence - 9, "12345678"); if (memchr (fence - 9, 0, 79) != fence - 1) result |= 2; if (memchr (fence - 1, 0, 3) != fence - 1) result |= 4; /* Test against bug on AIX 7.2. */ if (memchr (fence - 4, '6', 16) != fence - 4) result |= 8; } /* Test against bug on Android 4.3. */ { char input[3]; input[0] = 'a'; input[1] = 'b'; input[2] = 'c'; if (memchr (input, 0x789abc00 | 'b', 3) != input + 1) result |= 16; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_memchr_works=yes else $as_nop gl_cv_func_memchr_works=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: $gl_cv_func_memchr_works" >&5 printf "%s\n" "$gl_cv_func_memchr_works" >&6; } case "$gl_cv_func_memchr_works" in *yes) ;; *) REPLACE_MEMCHR=1 ;; esac ac_fn_check_decl "$LINENO" "memrchr" "ac_cv_have_decl_memrchr" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_memrchr" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_MEMRCHR $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <limits.h> defines MIN and MAX" >&5 printf %s "checking whether <limits.h> defines MIN and MAX... " >&6; } if test ${gl_cv_minmax_in_limits_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> int x = MIN (42, 17); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_minmax_in_limits_h=yes else $as_nop gl_cv_minmax_in_limits_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: $gl_cv_minmax_in_limits_h" >&5 printf "%s\n" "$gl_cv_minmax_in_limits_h" >&6; } if test $gl_cv_minmax_in_limits_h = yes; then printf "%s\n" "#define HAVE_MINMAX_IN_LIMITS_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether <sys/param.h> defines MIN and MAX" >&5 printf %s "checking whether <sys/param.h> defines MIN and MAX... " >&6; } if test ${gl_cv_minmax_in_sys_param_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/param.h> int x = MIN (42, 17); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_minmax_in_sys_param_h=yes else $as_nop gl_cv_minmax_in_sys_param_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: $gl_cv_minmax_in_sys_param_h" >&5 printf "%s\n" "$gl_cv_minmax_in_sys_param_h" >&6; } if test $gl_cv_minmax_in_sys_param_h = yes; then printf "%s\n" "#define HAVE_MINMAX_IN_SYS_PARAM_H 1" >>confdefs.h fi HAVE_DECL_LOCALTIME_R=1; HAVE_NANOSLEEP=1; HAVE_STRPTIME=1; HAVE_TIMEGM=1; HAVE_TIMESPEC_GET=1; HAVE_TIMESPEC_GETRES=1; HAVE_TIMEZONE_T=0; REPLACE_CTIME=GNULIB_PORTCHECK; REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; REPLACE_MKTIME=GNULIB_PORTCHECK; REPLACE_NANOSLEEP=GNULIB_PORTCHECK; REPLACE_STRFTIME=GNULIB_PORTCHECK; REPLACE_TIMEGM=GNULIB_PORTCHECK; REPLACE_TZSET=GNULIB_PORTCHECK; : ${GNULIB_GETTIMEOFDAY=0}; REPLACE_GMTIME=0; REPLACE_LOCALTIME=0; { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether time_t is signed" >&5 printf %s "checking whether time_t is signed... " >&6; } if test ${gl_cv_time_t_is_signed+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> char time_t_signed[(time_t) -1 < 0 ? 1 : -1]; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_time_t_is_signed=yes else $as_nop gl_cv_time_t_is_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: $gl_cv_time_t_is_signed" >&5 printf "%s\n" "$gl_cv_time_t_is_signed" >&6; } if test $gl_cv_time_t_is_signed = yes; then printf "%s\n" "#define TIME_T_IS_SIGNED 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mktime" >&5 printf %s "checking for working mktime... " >&6; } if test ${gl_cv_func_working_mktime+y} then : printf %s "(cached) " >&6 else $as_nop if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple Mac OS X platforms. # The test result would be 'yes' in 32-bit mode and 'no' in 64-bit mode. # But we need a configuration result that is valid in both modes. gl_cv_func_working_mktime="guessing no" else if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_working_mktime="guessing no" ;; *) gl_cv_func_working_mktime="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test program from Paul Eggert and Tony Leneis. */ #include <limits.h> #include <stdlib.h> #include <time.h> #ifdef HAVE_UNISTD_H # include <unistd.h> #endif #if HAVE_DECL_ALARM # include <signal.h> #endif $gl_mda_defines #ifndef TIME_T_IS_SIGNED # define TIME_T_IS_SIGNED 0 #endif static time_t time_t_max; static time_t time_t_min; /* Values we'll use to set the TZ environment variable. */ static char *tz_strings[] = { (char *) 0, "TZ=GMT0", "TZ=JST-9", "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00" }; #define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0])) /* Return 0 if mktime fails to convert a date in the spring-forward gap. Based on a problem report from Andreas Jaeger. */ static int spring_forward_gap () { /* glibc (up to about 1998-10-07) failed this test. */ struct tm tm; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ if (putenv ("TZ=PST8PDT,M4.1.0,M10.5.0") != 0) return -1; tm.tm_year = 98; tm.tm_mon = 3; tm.tm_mday = 5; tm.tm_hour = 2; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; return mktime (&tm) != (time_t) -1; } static int mktime_test1 (time_t now) { struct tm *lt; return ! (lt = localtime (&now)) || mktime (lt) == now; } static int mktime_test (time_t now) { return (mktime_test1 (now) && mktime_test1 ((time_t) (time_t_max - now)) && mktime_test1 ((time_t) (time_t_min + now))); } static int irix_6_4_bug () { /* Based on code from Ariel Faigon. */ struct tm tm; tm.tm_year = 96; tm.tm_mon = 3; tm.tm_mday = 0; tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; mktime (&tm); return tm.tm_mon == 2 && tm.tm_mday == 31; } static int bigtime_test (int j) { struct tm tm; time_t now; tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j; now = mktime (&tm); if (now != (time_t) -1) { struct tm *lt = localtime (&now); if (! (lt && lt->tm_year == tm.tm_year && lt->tm_mon == tm.tm_mon && lt->tm_mday == tm.tm_mday && lt->tm_hour == tm.tm_hour && lt->tm_min == tm.tm_min && lt->tm_sec == tm.tm_sec && lt->tm_yday == tm.tm_yday && lt->tm_wday == tm.tm_wday && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst) == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst)))) return 0; } return 1; } static int year_2050_test () { /* The correct answer for 2050-02-01 00:00:00 in Pacific time, ignoring leap seconds. */ unsigned long int answer = 2527315200UL; struct tm tm; time_t t; tm.tm_year = 2050 - 1900; tm.tm_mon = 2 - 1; tm.tm_mday = 1; tm.tm_hour = tm.tm_min = tm.tm_sec = 0; tm.tm_isdst = -1; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ if (putenv ("TZ=PST8PDT,M4.1.0,M10.5.0") != 0) return -1; t = mktime (&tm); /* Check that the result is either a failure, or close enough to the correct answer that we can assume the discrepancy is due to leap seconds. */ return (t == (time_t) -1 || (0 < t && answer - 120 <= t && t <= answer + 120)); } static int indiana_test () { if (putenv ("TZ=America/Indiana/Indianapolis") != 0) return -1; struct tm tm; tm.tm_year = 1986 - 1900; tm.tm_mon = 4 - 1; tm.tm_mday = 28; tm.tm_hour = 16; tm.tm_min = 24; tm.tm_sec = 50; tm.tm_isdst = 0; time_t std = mktime (&tm); if (! (std == 515107490 || std == 515107503)) return 1; /* This platform supports TZDB, either without or with leap seconds. Return true if GNU Bug#48085 is absent. */ tm.tm_isdst = 1; time_t dst = mktime (&tm); return std - dst == 60 * 60; } int main () { int result = 0; time_t t, delta; int i, j; int time_t_signed_magnitude = (time_t) ~ (time_t) 0 < (time_t) -1; #if HAVE_DECL_ALARM /* This test makes some buggy mktime implementations loop. Give up after 60 seconds; a mktime slower than that isn't worth using anyway. */ signal (SIGALRM, SIG_DFL); alarm (60); #endif time_t_max = (! TIME_T_IS_SIGNED ? (time_t) -1 : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1) * 2 + 1)); time_t_min = (! TIME_T_IS_SIGNED ? (time_t) 0 : time_t_signed_magnitude ? ~ (time_t) 0 : ~ time_t_max); delta = time_t_max / 997; /* a suitable prime number */ for (i = 0; i < N_STRINGS; i++) { if (tz_strings[i]) putenv (tz_strings[i]); for (t = 0; t <= time_t_max - delta && (result & 1) == 0; t += delta) if (! mktime_test (t)) result |= 1; if ((result & 2) == 0 && ! (mktime_test ((time_t) 1) && mktime_test ((time_t) (60 * 60)) && mktime_test ((time_t) (60 * 60 * 24)))) result |= 2; for (j = 1; (result & 4) == 0; j <<= 1) { if (! bigtime_test (j)) result |= 4; if (INT_MAX / 2 < j) break; } if ((result & 8) == 0 && ! bigtime_test (INT_MAX)) result |= 8; } if (! irix_6_4_bug ()) result |= 16; if (! spring_forward_gap ()) result |= 32; if (! year_2050_test () || ! indiana_test ()) result |= 64; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_working_mktime=yes else $as_nop gl_cv_func_working_mktime=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_mktime" >&5 printf "%s\n" "$gl_cv_func_working_mktime" >&6; } GL_GNULIB_CTIME=0 GL_GNULIB_MKTIME=0 GL_GNULIB_LOCALTIME=0 GL_GNULIB_NANOSLEEP=0 GL_GNULIB_STRFTIME=0 GL_GNULIB_STRPTIME=0 GL_GNULIB_TIMEGM=0 GL_GNULIB_TIMESPEC_GET=0 GL_GNULIB_TIMESPEC_GETRES=0 GL_GNULIB_TIME_R=0 GL_GNULIB_TIME_RZ=0 GL_GNULIB_TZSET=0 GL_GNULIB_MDA_TZSET=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct tm is in sys/time.h or time.h" >&5 printf %s "checking whether struct tm is in sys/time.h or time.h... " >&6; } if test ${ac_cv_struct_tm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <time.h> int main (void) { struct tm tm; int *p = &tm.tm_sec; return !p; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_struct_tm=time.h else $as_nop ac_cv_struct_tm=sys/time.h 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_struct_tm" >&5 printf "%s\n" "$ac_cv_struct_tm" >&6; } if test $ac_cv_struct_tm = sys/time.h; then printf "%s\n" "#define TM_IN_SYS_TIME 1" >>confdefs.h fi ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_zone" "#include <sys/types.h> #include <$ac_cv_struct_tm> " if test "x$ac_cv_member_struct_tm_tm_zone" = xyes then : printf "%s\n" "#define HAVE_STRUCT_TM_TM_ZONE 1" >>confdefs.h fi if test "$ac_cv_member_struct_tm_tm_zone" = yes; then printf "%s\n" "#define HAVE_TM_ZONE 1" >>confdefs.h else ac_fn_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include <time.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_tzname" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 printf %s "checking for tzname... " >&6; } if test ${ac_cv_var_tzname+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> #if !HAVE_DECL_TZNAME extern char *tzname[]; #endif int main (void) { return tzname[0][0]; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_var_tzname=yes else $as_nop ac_cv_var_tzname=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_var_tzname" >&5 printf "%s\n" "$ac_cv_var_tzname" >&6; } if test $ac_cv_var_tzname = yes; then printf "%s\n" "#define HAVE_TZNAME 1" >>confdefs.h fi fi ac_fn_c_check_member "$LINENO" "struct tm" "tm_gmtoff" "ac_cv_member_struct_tm_tm_gmtoff" "#include <time.h> " if test "x$ac_cv_member_struct_tm_tm_gmtoff" = xyes then : printf "%s\n" "#define HAVE_TM_GMTOFF 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for O_CLOEXEC" >&5 printf %s "checking for O_CLOEXEC... " >&6; } if test ${gl_cv_macro_O_CLOEXEC+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> #ifndef O_CLOEXEC choke me; #endif int main (void) { return O_CLOEXEC; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_macro_O_CLOEXEC=yes else $as_nop gl_cv_macro_O_CLOEXEC=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: $gl_cv_macro_O_CLOEXEC" >&5 printf "%s\n" "$gl_cv_macro_O_CLOEXEC" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for promoted mode_t type" >&5 printf %s "checking for promoted mode_t type... " >&6; } if test ${gl_cv_promoted_mode_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> int main (void) { typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1]; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_promoted_mode_t='int' else $as_nop gl_cv_promoted_mode_t='mode_t' fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_promoted_mode_t" >&5 printf "%s\n" "$gl_cv_promoted_mode_t" >&6; } printf "%s\n" "#define PROMOTED_MODE_T $gl_cv_promoted_mode_t" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for compound literals" >&5 printf %s "checking for compound literals... " >&6; } if test ${gl_cv_compound_literals+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ struct s { int i, j; }; int main (void) { struct s t = (struct s) { 3, 4 }; if (t.i != 0) return 0; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_compound_literals=yes else $as_nop gl_cv_compound_literals=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: $gl_cv_compound_literals" >&5 printf "%s\n" "$gl_cv_compound_literals" >&6; } if test $gl_cv_compound_literals = yes; then printf "%s\n" "#define HAVE_COMPOUND_LITERALS 1" >>confdefs.h fi HAVE_POSIX_SPAWN=1; HAVE_POSIX_SPAWNATTR_T=1; HAVE_POSIX_SPAWN_FILE_ACTIONS_T=1; HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=1; HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=1; REPLACE_POSIX_SPAWN=0; REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0; REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0; REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0; REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=0; REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0; LIB_POSIX_SPAWN= gl_saved_libs=$LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing posix_spawn" >&5 printf %s "checking for library containing posix_spawn... " >&6; } if test ${ac_cv_search_posix_spawn+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 posix_spawn (); int main (void) { return posix_spawn (); ; return 0; } _ACEOF for ac_lib in '' rt 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_posix_spawn=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_posix_spawn+y} then : break fi done if test ${ac_cv_search_posix_spawn+y} then : else $as_nop ac_cv_search_posix_spawn=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_posix_spawn" >&5 printf "%s\n" "$ac_cv_search_posix_spawn" >&6; } ac_res=$ac_cv_search_posix_spawn if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" test "$ac_cv_search_posix_spawn" = "none required" || LIB_POSIX_SPAWN=$ac_cv_search_posix_spawn fi ac_fn_c_check_func "$LINENO" "posix_spawn" "ac_cv_func_posix_spawn" if test "x$ac_cv_func_posix_spawn" = xyes then : printf "%s\n" "#define HAVE_POSIX_SPAWN 1" >>confdefs.h fi LIBS=$gl_saved_libs if test $ac_cv_func_posix_spawn != yes; then HAVE_POSIX_SPAWN=0 fi ac_fn_check_decl "$LINENO" "posix_spawn" "ac_cv_have_decl_posix_spawn" "#include <spawn.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_posix_spawn" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_POSIX_SPAWN $ac_have_decl" >>confdefs.h if test $ac_cv_func_posix_spawn = yes; then if test $ac_cv_func_posix_spawn_file_actions_addchdir_np = no; then REPLACE_POSIX_SPAWN=1 fi if test $REPLACE_POSIX_SPAWN = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether posix_spawn works" >&5 printf %s "checking whether posix_spawn works... " >&6; } if test ${gl_cv_func_posix_spawn_works+y} then : printf %s "(cached) " >&6 else $as_nop if test $cross_compiling = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <fcntl.h> #include <signal.h> #include <spawn.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> $gl_mda_defines extern char **environ; #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif #ifndef WTERMSIG # define WTERMSIG(x) ((x) & 0x7f) #endif #ifndef WIFEXITED # define WIFEXITED(x) (WTERMSIG (x) == 0) #endif #ifndef WEXITSTATUS # define WEXITSTATUS(x) (((x) >> 8) & 0xff) #endif #define CHILD_PROGRAM_FILENAME "/non/exist/ent" static int fd_safer (int fd) { if (0 <= fd && fd <= 2) { int f = fd_safer (dup (fd)); int e = errno; close (fd); errno = e; fd = f; } return fd; } int main () { char *argv[2] = { CHILD_PROGRAM_FILENAME, NULL }; int ofd[2]; sigset_t blocked_signals; sigset_t fatal_signal_set; posix_spawn_file_actions_t actions; bool actions_allocated; posix_spawnattr_t attrs; bool attrs_allocated; int err; pid_t child; int status; int exitstatus; setvbuf (stdout, NULL, _IOFBF, 0); puts ("This should be seen only once."); if (pipe (ofd) < 0 || (ofd[1] = fd_safer (ofd[1])) < 0) { perror ("cannot create pipe"); exit (1); } sigprocmask (SIG_SETMASK, NULL, &blocked_signals); sigemptyset (&fatal_signal_set); sigaddset (&fatal_signal_set, SIGINT); sigaddset (&fatal_signal_set, SIGTERM); sigaddset (&fatal_signal_set, SIGHUP); sigaddset (&fatal_signal_set, SIGPIPE); sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); actions_allocated = false; attrs_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (err = posix_spawn_file_actions_adddup2 (&actions, ofd[0], STDIN_FILENO)) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) != 0 || (err = posix_spawnattr_init (&attrs)) != 0 || (attrs_allocated = true, (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0) || (err = posix_spawnp (&child, CHILD_PROGRAM_FILENAME, &actions, &attrs, argv, environ)) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); if (err == ENOENT) return 0; else { errno = err; perror ("subprocess failed"); exit (1); } } posix_spawn_file_actions_destroy (&actions); posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); close (ofd[0]); close (ofd[1]); status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); exit (1); } exitstatus = WEXITSTATUS (status); if (exitstatus != 127) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); exit (1); } return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : if test -s conftest$ac_exeext \ && ./conftest$ac_exeext > conftest.out \ && echo 'This should be seen only once.' > conftest.ok \ && cmp conftest.out conftest.ok >/dev/null 2>&1; then gl_cv_func_posix_spawn_works=yes else gl_cv_func_posix_spawn_works=no fi else $as_nop gl_cv_func_posix_spawn_works=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_func_posix_spawn_works = yes; then if test "$cross_compiling" = yes then : { { 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 run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test whether posix_spawn_file_actions_addopen supports filename arguments that contain special characters such as '*'. */ #include <errno.h> #include <fcntl.h> #include <signal.h> #include <spawn.h> #include <stdbool.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> $gl_mda_defines extern char **environ; #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif #ifndef WTERMSIG # define WTERMSIG(x) ((x) & 0x7f) #endif #ifndef WIFEXITED # define WIFEXITED(x) (WTERMSIG (x) == 0) #endif #ifndef WEXITSTATUS # define WEXITSTATUS(x) (((x) >> 8) & 0xff) #endif #define CHILD_PROGRAM_FILENAME "conftest" #define DATA_FILENAME "conftest%=*#?" static int parent_main (void) { FILE *fp; char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL }; posix_spawn_file_actions_t actions; bool actions_allocated; int err; pid_t child; int status; int exitstatus; /* Create a data file with specific contents. */ fp = fopen (DATA_FILENAME, "wb"); if (fp == NULL) { perror ("cannot create data file"); return 1; } fwrite ("Halle Potta", 1, 11, fp); if (fflush (fp) || fclose (fp)) { perror ("cannot prepare data file"); return 2; } /* Avoid reading from our stdin, as it could block. */ freopen ("/dev/null", "rb", stdin); /* Test whether posix_spawn_file_actions_addopen with this file name actually works, but spawning a child that reads from this file. */ actions_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, DATA_FILENAME, O_RDONLY, 0600)) != 0 || (err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, &actions, NULL, argv, environ)) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); errno = err; perror ("subprocess failed"); return 3; } posix_spawn_file_actions_destroy (&actions); status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); return 4; } exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); return 5; } return 0; } static int child_main (void) { char buf[1024]; /* See if reading from STDIN_FILENO yields the expected contents. */ if (fread (buf, 1, sizeof (buf), stdin) == 11 && memcmp (buf, "Halle Potta", 11) == 0) return 0; else return 8; } static void cleanup_then_die (int sig) { /* Clean up data file. */ unlink (DATA_FILENAME); /* Re-raise the signal and die from it. */ signal (sig, SIG_DFL); raise (sig); } int main (int argc, char *argv[]) { int exitstatus; if (!(argc > 1 && strcmp (argv[1], "-child") == 0)) { /* This is the parent process. */ signal (SIGINT, cleanup_then_die); signal (SIGTERM, cleanup_then_die); #ifdef SIGHUP signal (SIGHUP, cleanup_then_die); #endif exitstatus = parent_main (); } else { /* This is the child process. */ exitstatus = child_main (); } unlink (DATA_FILENAME); return exitstatus; } _ACEOF if ac_fn_c_try_run "$LINENO" then : else $as_nop gl_cv_func_posix_spawn_works=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 else case "$host_os" in aix*) gl_cv_func_posix_spawn_works="guessing no";; *) gl_cv_func_posix_spawn_works="guessing yes";; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_posix_spawn_works" >&5 printf "%s\n" "$gl_cv_func_posix_spawn_works" >&6; } case "$gl_cv_func_posix_spawn_works" in *yes) ;; *) REPLACE_POSIX_SPAWN=1 ;; esac fi if test $REPLACE_POSIX_SPAWN = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether posix_spawn rejects scripts without shebang" >&5 printf %s "checking whether posix_spawn rejects scripts without shebang... " >&6; } if test ${gl_cv_func_posix_spawn_secure_exec+y} then : printf %s "(cached) " >&6 else $as_nop echo ':' > conftest.scr chmod a+x conftest.scr if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on GNU/Hurd. gnu*) gl_cv_func_posix_spawn_secure_exec="guessing no" ;; # Guess yes on all other platforms. *) gl_cv_func_posix_spawn_secure_exec="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <spawn.h> #include <stddef.h> #include <sys/types.h> #include <sys/wait.h> int main () { const char *prog_path = "./conftest.scr"; const char *prog_argv[2] = { prog_path, NULL }; const char *environment[2] = { "PATH=.", NULL }; pid_t child; int status; int err = posix_spawn (&child, prog_path, NULL, NULL, (char **) prog_argv, (char **) environment); if (err == ENOEXEC) return 0; if (err != 0) return 1; status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) return 2; if (WEXITSTATUS (status) != 127) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_posix_spawn_secure_exec=yes else $as_nop gl_cv_func_posix_spawn_secure_exec=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.scr fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_posix_spawn_secure_exec" >&5 printf "%s\n" "$gl_cv_func_posix_spawn_secure_exec" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether posix_spawnp rejects scripts without shebang" >&5 printf %s "checking whether posix_spawnp rejects scripts without shebang... " >&6; } if test ${gl_cv_func_posix_spawnp_secure_exec+y} then : printf %s "(cached) " >&6 else $as_nop echo ':' > conftest.scr chmod a+x conftest.scr if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems (glibc >= 2.15 actually) except GNU/Hurd, # musl libc, NetBSD. *-gnu* | *-musl* | netbsd*) gl_cv_func_posix_spawnp_secure_exec="guessing yes" ;; # Guess no on GNU/Hurd, macOS, FreeBSD, OpenBSD, AIX, Solaris, Cygwin. gnu* | darwin* | freebsd* | dragonfly* | midnightbsd* | openbsd* | \ aix* | solaris* | cygwin*) gl_cv_func_posix_spawnp_secure_exec="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_posix_spawnp_secure_exec="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <spawn.h> #include <stddef.h> #include <sys/types.h> #include <sys/wait.h> int main () { const char *prog_path = "./conftest.scr"; const char *prog_argv[2] = { prog_path, NULL }; const char *environment[2] = { "PATH=.", NULL }; pid_t child; int status; int err = posix_spawnp (&child, prog_path, NULL, NULL, (char **) prog_argv, (char **) environment); if (err == ENOEXEC) return 0; if (err != 0) return 1; status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) return 2; if (WEXITSTATUS (status) != 127) return 3; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_posix_spawnp_secure_exec=yes else $as_nop gl_cv_func_posix_spawnp_secure_exec=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.scr fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_posix_spawnp_secure_exec" >&5 printf "%s\n" "$gl_cv_func_posix_spawnp_secure_exec" >&6; } case "$gl_cv_func_posix_spawn_secure_exec" in *yes) ;; *) REPLACE_POSIX_SPAWN=1 ;; esac case "$gl_cv_func_posix_spawnp_secure_exec" in *yes) ;; *) REPLACE_POSIX_SPAWN=1 ;; esac fi if test $REPLACE_POSIX_SPAWN = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether posix_spawnattr_setschedpolicy is supported" >&5 printf %s "checking whether posix_spawnattr_setschedpolicy is supported... " >&6; } if test ${gl_cv_func_spawnattr_setschedpolicy+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <spawn.h> #if POSIX_SPAWN_SETSCHEDULER POSIX scheduling supported #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "POSIX scheduling supported" >/dev/null 2>&1 then : gl_cv_func_spawnattr_setschedpolicy=yes else $as_nop gl_cv_func_spawnattr_setschedpolicy=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_spawnattr_setschedpolicy" >&5 printf "%s\n" "$gl_cv_func_spawnattr_setschedpolicy" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether posix_spawnattr_setschedparam is supported" >&5 printf %s "checking whether posix_spawnattr_setschedparam is supported... " >&6; } if test ${gl_cv_func_spawnattr_setschedparam+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <spawn.h> #if POSIX_SPAWN_SETSCHEDPARAM POSIX scheduling supported #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "POSIX scheduling supported" >/dev/null 2>&1 then : gl_cv_func_spawnattr_setschedparam=yes else $as_nop gl_cv_func_spawnattr_setschedparam=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_spawnattr_setschedparam" >&5 printf "%s\n" "$gl_cv_func_spawnattr_setschedparam" >&6; } fi else if test $ac_cv_have_decl_posix_spawn = yes; then REPLACE_POSIX_SPAWN=1 fi fi if test $ac_cv_func_posix_spawn != yes || test $REPLACE_POSIX_SPAWN = 1; then printf "%s\n" "#define REPLACE_POSIX_SPAWN 1" >>confdefs.h fi GL_GNULIB_POSIX_SPAWN=0 GL_GNULIB_POSIX_SPAWNP=0 GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=0 GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0 GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0 GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0 GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=0 GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0 GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=0 GL_GNULIB_POSIX_SPAWNATTR_INIT=0 GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS=0 GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS=0 GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP=0 GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP=0 GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM=0 GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM=0 GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY=0 GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY=0 GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT=0 GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT=0 GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK=0 GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK=0 GL_GNULIB_POSIX_SPAWNATTR_DESTROY=0 gl_cv_func_vfprintf_posix=no case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) # vfprintf exists and is # already POSIX compliant. gl_cv_func_vfprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_vfprintf_posix = no; then case "$gl_cv_func_printf_infinite" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h ;; esac ;; esac case "$gl_cv_func_printf_directive_a" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes then : printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h fi ;; esac case "$gl_cv_func_printf_directive_f" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_directive_ls" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_grouping" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_leftadjust" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_zero" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_precision" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_enomem" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h ;; esac gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" if test $ac_cv_func_vasnprintf = yes; then printf "%s\n" "#define REPLACE_VASNPRINTF 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes then : else $as_nop printf "%s\n" "#define ptrdiff_t long" >>confdefs.h fi gl_LIBOBJS="$gl_LIBOBJS vfprintf.$ac_objext" REPLACE_VFPRINTF=1 printf "%s\n" "#define REPLACE_VFPRINTF_POSIX 1" >>confdefs.h : fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER MicrosoftCompiler #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "MicrosoftCompiler" >/dev/null 2>&1 then : rm -f conftest* echo 'int dummy;' > conftest.c { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c' { { 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; }; } >/dev/null 2>&1 if test -f conftest.o; then gl_asmext='s' gl_c_asm_opt='-S' else gl_asmext='asm' gl_c_asm_opt='-c -Fa' fi rm -f conftest* else $as_nop gl_asmext='s' gl_c_asm_opt='-S' fi rm -rf conftest* { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether C symbols are prefixed with underscore at the linker level" >&5 printf %s "checking whether C symbols are prefixed with underscore at the linker level... " >&6; } if test ${gl_cv_prog_as_underscore+y} then : printf %s "(cached) " >&6 else $as_nop cat > conftest.c <<EOF #ifdef __cplusplus extern "C" int foo (void); #endif int foo(void) { return 0; } EOF # Look for the assembly language name in the .s file. { ac_try='${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c' { { 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; }; } >/dev/null 2>&1 if LC_ALL=C $EGREP '(^|[^a-zA-Z0-9_])_foo([^a-zA-Z0-9_]|$)' conftest.$gl_asmext >/dev/null; then gl_cv_prog_as_underscore=yes else gl_cv_prog_as_underscore=no fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_prog_as_underscore" >&5 printf "%s\n" "$gl_cv_prog_as_underscore" >&6; } if test $gl_cv_prog_as_underscore = yes; then USER_LABEL_PREFIX=_ else USER_LABEL_PREFIX= fi printf "%s\n" "#define USER_LABEL_PREFIX $USER_LABEL_PREFIX" >>confdefs.h ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"' HAVE_POSIX_SIGNALBLOCKING=1; HAVE_PTHREAD_SIGMASK=1; HAVE_RAISE=1; HAVE_SIGSET_T=1; HAVE_SIGINFO_T=1; HAVE_SIGACTION=1; HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; HAVE_SIGHANDLER_T=1; REPLACE_PTHREAD_SIGMASK=0; REPLACE_RAISE=0; ac_fn_c_check_type "$LINENO" "sigset_t" "ac_cv_type_sigset_t" " #include <signal.h> /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ #include <sys/types.h> " if test "x$ac_cv_type_sigset_t" = xyes then : printf "%s\n" "#define HAVE_SIGSET_T 1" >>confdefs.h gl_cv_type_sigset_t=yes else $as_nop gl_cv_type_sigset_t=no fi if test $gl_cv_type_sigset_t != yes; then HAVE_SIGSET_T=0 fi GL_GNULIB_PTHREAD_SIGMASK=0 GL_GNULIB_RAISE=0 GL_GNULIB_SIGNAL_H_SIGPIPE=0 GL_GNULIB_SIGPROCMASK=0 GL_GNULIB_SIGACTION=0 if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" # Check whether --with-gnu-ld was given. if test ${with_gnu_ld+y} then : withval=$with_gnu_ld; test "$withval" = no || with_gnu_ld=yes else $as_nop with_gnu_ld=no fi # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 if test -n "$LD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld" >&5 printf %s "checking for ld... " >&6; } elif test "$GCC" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ld used by $CC" >&5 printf %s "checking for ld used by $CC... " >&6; } elif test "$with_gnu_ld" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU ld" >&5 printf %s "checking for GNU ld... " >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for non-GNU ld" >&5 printf %s "checking for non-GNU ld... " >&6; } fi if test -n "$LD"; then # Let the user override the test with a path. : else if test ${acl_cv_path_LD+y} then : printf %s "(cached) " >&6 else $as_nop acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [\\/]* | ?:[\\/]*) re_direlt='/[^/][^/]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$acl_save_ifs" fi case $host in *-*-aix*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : # The compiler produces 64-bit code. Add option '-b64' so that the # linker groks 64-bit object files. case "$acl_cv_path_LD " in *" -b64 "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; sparc64-*-netbsd*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop # The compiler produces 32-bit code. Add option '-m elf32_sparc' # so that the linker groks 32-bit object files. case "$acl_cv_path_LD " in *" -m elf32_sparc "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; esac fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac fi LD="$acl_cv_path_LD" fi if test -n "$LD"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LD" >&5 printf "%s\n" "$LD" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } as_fn_error $? "no acceptable ld found in \$PATH" "$LINENO" 5 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking if the linker ($LD) is GNU ld" >&5 printf %s "checking if the linker ($LD) is GNU ld... " >&6; } if test ${acl_cv_prog_gnu_ld+y} then : printf %s "(cached) " >&6 else $as_nop # I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) acl_cv_prog_gnu_ld=yes ;; *) acl_cv_prog_gnu_ld=no ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_prog_gnu_ld" >&5 printf "%s\n" "$acl_cv_prog_gnu_ld" >&6; } with_gnu_ld=$acl_cv_prog_gnu_ld { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for shared library run path origin" >&5 printf %s "checking for shared library run path origin... " >&6; } if test ${acl_cv_rpath+y} then : printf %s "(cached) " >&6 else $as_nop CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_rpath" >&5 printf "%s\n" "$acl_cv_rpath" >&6; } wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" # Check whether --enable-rpath was given. if test ${enable_rpath+y} then : enableval=$enable_rpath; : else $as_nop enable_rpath=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking 32-bit host C ABI" >&5 printf %s "checking 32-bit host C ABI... " >&6; } if test ${gl_cv_host_cpu_c_abi_32bit+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$gl_cv_host_cpu_c_abi"; then case "$gl_cv_host_cpu_c_abi" in i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) gl_cv_host_cpu_c_abi_32bit=no ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac else case "$host_cpu" in # CPUs that only support a 32-bit ABI. arc \ | bfin \ | cris* \ | csky \ | epiphany \ | ft32 \ | h8300 \ | m68k \ | microblaze | microblazeel \ | nds32 | nds32le | nds32be \ | nios2 | nios2eb | nios2el \ | or1k* \ | or32 \ | sh | sh1234 | sh1234elb \ | tic6x \ | xtensa* ) gl_cv_host_cpu_c_abi_32bit=yes ;; # CPUs that only support a 64-bit ABI. alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ | mmix ) gl_cv_host_cpu_c_abi_32bit=no ;; i[34567]86 ) gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) \ && !(defined __ILP32__ || defined _ILP32) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _ILP32 int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=yes else $as_nop gl_cv_host_cpu_c_abi_32bit=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; rs6000 ) gl_cv_host_cpu_c_abi_32bit=yes ;; riscv32 | riscv64 ) # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_host_cpu_c_abi_32bit=no else $as_nop gl_cv_host_cpu_c_abi_32bit=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_host_cpu_c_abi_32bit" >&5 printf "%s\n" "$gl_cv_host_cpu_c_abi_32bit" >&6; } HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ELF binary format" >&5 printf %s "checking for ELF binary format... " >&6; } if test ${gl_cv_elf+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __ELF__ || (defined __linux__ && defined __EDG__) Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_elf=yes else $as_nop gl_cv_elf=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_elf" >&5 printf "%s\n" "$gl_cv_elf" >&6; } if test $gl_cv_elf = yes; then # Extract the ELF class of a file (5th byte) in decimal. # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header if od -A x < /dev/null >/dev/null 2>/dev/null; then # Use POSIX od. func_elfclass () { od -A n -t d1 -j 4 -N 1 } else # Use BSD hexdump. func_elfclass () { dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' echo } fi # Use 'expr', not 'test', to compare the values of func_elfclass, because on # Solaris 11 OpenIndiana and Solaris 11 OmniOS, the result is 001 or 002, # not 1 or 2. case $HOST_CPU_C_ABI_32BIT in yes) # 32-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 1 > /dev/null } ;; no) # 64-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 2 > /dev/null } ;; *) # Unknown. acl_is_expected_elfclass () { : } ;; esac else acl_is_expected_elfclass () { : } fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for the common suffixes of directories in the library search path" >&5 printf %s "checking for the common suffixes of directories in the library search path... " >&6; } if test ${acl_cv_libdirstems+y} then : printf %s "(cached) " >&6 else $as_nop acl_libdirstem=lib acl_libdirstem2= acl_libdirstem3= case "$host_os" in solaris*) if test $HOST_CPU_C_ABI_32BIT = no; then acl_libdirstem2=lib/64 case "$host_cpu" in sparc*) acl_libdirstem3=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; esac fi ;; *) searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test $HOST_CPU_C_ABI_32BIT != no; then # 32-bit or unknown ABI. if test -d /usr/lib32; then acl_libdirstem2=lib32 fi fi if test $HOST_CPU_C_ABI_32BIT != yes; then # 64-bit or unknown ABI. if test -d /usr/lib64; then acl_libdirstem3=lib64 fi fi if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib32 ) acl_libdirstem2=lib32 ;; */lib64 ) acl_libdirstem3=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" if test $HOST_CPU_C_ABI_32BIT = yes; then # 32-bit ABI. acl_libdirstem3= fi if test $HOST_CPU_C_ABI_32BIT = no; then # 64-bit ABI. acl_libdirstem2= fi fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $acl_cv_libdirstems" >&5 printf "%s\n" "$acl_cv_libdirstems" >&6; } acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_REALLOC_FOR_REALLOC_POSIX=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether rmdir works" >&5 printf %s "checking whether rmdir works... " >&6; } if test ${gl_cv_func_rmdir_works+y} then : printf %s "(cached) " >&6 else $as_nop mkdir conftest.dir touch conftest.file if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rmdir_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_rmdir_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_rmdir_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rmdir_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <errno.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <direct.h> #endif $gl_mda_defines int main (void) { int result = 0; if (!rmdir ("conftest.file/")) result |= 1; else if (errno != ENOTDIR) result |= 2; if (!rmdir ("conftest.dir/./")) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_rmdir_works=yes else $as_nop gl_cv_func_rmdir_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -rf conftest.dir conftest.file fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rmdir_works" >&5 printf "%s\n" "$gl_cv_func_rmdir_works" >&6; } case "$gl_cv_func_rmdir_works" in *yes) ;; *) REPLACE_RMDIR=1 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether unlink honors trailing slashes" >&5 printf %s "checking whether unlink honors trailing slashes... " >&6; } if test ${gl_cv_func_unlink_honors_slashes+y} then : printf %s "(cached) " >&6 else $as_nop touch conftest.file # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.file conftest.lnk fi if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_unlink_honors_slashes="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_unlink_honors_slashes="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_unlink_honors_slashes="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_unlink_honors_slashes="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> #endif #include <errno.h> $gl_mda_defines int main (void) { int result = 0; if (!unlink ("conftest.file/")) result |= 1; else if (errno != ENOTDIR) result |= 2; #if HAVE_LSTAT if (!unlink ("conftest.lnk/")) result |= 4; else if (errno != ENOTDIR) result |= 8; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_unlink_honors_slashes=yes else $as_nop gl_cv_func_unlink_honors_slashes=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.file conftest.lnk fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unlink_honors_slashes" >&5 printf "%s\n" "$gl_cv_func_unlink_honors_slashes" >&6; } case "$gl_cv_func_unlink_honors_slashes" in *no) REPLACE_UNLINK=1 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether unlink of a parent directory fails as it should" >&5 printf %s "checking whether unlink of a parent directory fails as it should... " >&6; } if test ${gl_cv_func_unlink_parent_fails+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in darwin*) if { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d /tmp/gtXXXXXX) 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=/tmp/gt$$-$RANDOM (umask 077 && mkdir "$tmp") }; then mkdir "$tmp/subdir" GL_SUBDIR_FOR_UNLINK="$tmp/subdir" export GL_SUBDIR_FOR_UNLINK if test "$cross_compiling" = yes then : # If we don't know, obey --enable-cross-guesses. gl_cv_func_unlink_parent_fails="$gl_cross_guess_normal" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <direct.h> # include <io.h> #endif $gl_mda_defines int main () { int result = 0; if (chdir (getenv ("GL_SUBDIR_FOR_UNLINK")) != 0) result |= 1; else if (unlink ("..") == 0) result |= 2; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_unlink_parent_fails=yes else $as_nop gl_cv_func_unlink_parent_fails=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi unset GL_SUBDIR_FOR_UNLINK rm -rf "$tmp" else gl_cv_func_unlink_parent_fails="guessing no" fi ;; *) gl_cv_func_unlink_parent_fails="guessing yes" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unlink_parent_fails" >&5 printf "%s\n" "$gl_cv_func_unlink_parent_fails" >&6; } case "$gl_cv_func_unlink_parent_fails" in *no) REPLACE_UNLINK=1 printf "%s\n" "#define UNLINK_PARENT_BUG 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 printf %s "checking for ssize_t... " >&6; } if test ${gt_cv_ssize_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> int main (void) { int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_ssize_t=yes else $as_nop gt_cv_ssize_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: $gt_cv_ssize_t" >&5 printf "%s\n" "$gt_cv_ssize_t" >&6; } if test $gt_cv_ssize_t = no; then printf "%s\n" "#define ssize_t int" >>confdefs.h fi HAVE_SCHED_YIELD=1; REPLACE_SCHED_YIELD=0; ac_fn_c_check_header_compile "$LINENO" "sched.h" "ac_cv_header_sched_h" "#if HAVE_SYS_CDEFS_H #include <sys/cdefs.h> #endif " if test "x$ac_cv_header_sched_h" = xyes then : printf "%s\n" "#define HAVE_SCHED_H 1" >>confdefs.h fi if test $gl_cv_have_include_next = yes; then gl_cv_next_sched_h='<'sched.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sched.h>" >&5 printf %s "checking absolute name of <sched.h>... " >&6; } if test ${gl_cv_next_sched_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sched.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sched.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sched_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sched_h gl_cv_next_sched_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sched_h" >&5 printf "%s\n" "$gl_cv_next_sched_h" >&6; } fi NEXT_SCHED_H=$gl_cv_next_sched_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sched.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sched_h fi NEXT_AS_FIRST_DIRECTIVE_SCHED_H=$gl_next_as_first_directive if test "$ac_cv_header_sched_h" = yes; then HAVE_SCHED_H=1 else HAVE_SCHED_H=0 fi if test "$HAVE_SCHED_H" = 1; then ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#if HAVE_SYS_CDEFS_H #include <sys/cdefs.h> #endif #include <sched.h> " if test "x$ac_cv_type_struct_sched_param" = xyes then : HAVE_STRUCT_SCHED_PARAM=1 else $as_nop HAVE_STRUCT_SCHED_PARAM=0 fi else HAVE_STRUCT_SCHED_PARAM=0 case "$host_os" in os2*) ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#include <spawn.h> " if test "x$ac_cv_type_struct_sched_param" = xyes then : HAVE_STRUCT_SCHED_PARAM=1 fi ;; vms) ac_fn_c_check_type "$LINENO" "struct sched_param" "ac_cv_type_struct_sched_param" "#include <pthread.h> " if test "x$ac_cv_type_struct_sched_param" = xyes then : HAVE_STRUCT_SCHED_PARAM=1 fi ;; esac fi if test "$ac_cv_header_sys_cdefs_h" = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi GL_GNULIB_SCHED_YIELD=0 # Check whether --with-selinux was given. if test ${with_selinux+y} then : withval=$with_selinux; else $as_nop with_selinux=maybe fi LIB_SELINUX= if test "$with_selinux" != no; then gl_save_LIBS=$LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing setfilecon" >&5 printf %s "checking for library containing setfilecon... " >&6; } if test ${ac_cv_search_setfilecon+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 setfilecon (); int main (void) { return setfilecon (); ; return 0; } _ACEOF for ac_lib in '' selinux 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_setfilecon=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_setfilecon+y} then : break fi done if test ${ac_cv_search_setfilecon+y} then : else $as_nop ac_cv_search_setfilecon=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_setfilecon" >&5 printf "%s\n" "$ac_cv_search_setfilecon" >&6; } ac_res=$ac_cv_search_setfilecon if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" test "$ac_cv_search_setfilecon" = "none required" || LIB_SELINUX=$ac_cv_search_setfilecon fi LIBS=$gl_save_LIBS fi # Warn if SELinux is found but libselinux is absent; if test "$ac_cv_search_setfilecon" = no; then if test "$host" = "$build" && test -d /selinux; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: This system supports SELinux but libselinux is missing." >&5 printf "%s\n" "$as_me: WARNING: This system supports SELinux but libselinux is missing." >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: GNU recutils will be compiled without SELinux support." >&5 printf "%s\n" "$as_me: WARNING: GNU recutils will be compiled without SELinux support." >&2;} fi with_selinux=no fi ac_fn_check_decl "$LINENO" "setenv" "ac_cv_have_decl_setenv" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_setenv" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_SETENV $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_setenv = no; then HAVE_DECL_SETENV=0 fi ac_fn_c_check_header_compile "$LINENO" "search.h" "ac_cv_header_search_h" "$ac_includes_default" if test "x$ac_cv_header_search_h" = xyes then : printf "%s\n" "#define HAVE_SEARCH_H 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "tsearch" "ac_cv_func_tsearch" if test "x$ac_cv_func_tsearch" = xyes then : printf "%s\n" "#define HAVE_TSEARCH 1" >>confdefs.h fi if test $gl_cv_have_include_next = yes; then gl_cv_next_signal_h='<'signal.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <signal.h>" >&5 printf %s "checking absolute name of <signal.h>... " >&6; } if test ${gl_cv_next_signal_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <signal.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'signal.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_signal_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_signal_h gl_cv_next_signal_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_signal_h" >&5 printf "%s\n" "$gl_cv_next_signal_h" >&6; } fi NEXT_SIGNAL_H=$gl_cv_next_signal_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'signal.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_signal_h fi NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H=$gl_next_as_first_directive # AIX declares sig_atomic_t to already include volatile, and C89 compilers # then choke on 'volatile sig_atomic_t'. C99 requires that it compile. ac_fn_c_check_type "$LINENO" "volatile sig_atomic_t" "ac_cv_type_volatile_sig_atomic_t" " #include <signal.h> " if test "x$ac_cv_type_volatile_sig_atomic_t" = xyes then : else $as_nop HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0 fi ac_fn_c_check_type "$LINENO" "sighandler_t" "ac_cv_type_sighandler_t" " #include <signal.h> " if test "x$ac_cv_type_sighandler_t" = xyes then : else $as_nop HAVE_SIGHANDLER_T=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_spawn_h='<'spawn.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <spawn.h>" >&5 printf %s "checking absolute name of <spawn.h>... " >&6; } if test ${gl_cv_next_spawn_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_spawn_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <spawn.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'spawn.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_spawn_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_spawn_h gl_cv_next_spawn_h='"'$gl_header'"' else gl_cv_next_spawn_h='<'spawn.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_spawn_h" >&5 printf "%s\n" "$gl_cv_next_spawn_h" >&6; } fi NEXT_SPAWN_H=$gl_cv_next_spawn_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'spawn.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_spawn_h fi NEXT_AS_FIRST_DIRECTIVE_SPAWN_H=$gl_next_as_first_directive if test $ac_cv_header_spawn_h = yes; then HAVE_SPAWN_H=1 ac_fn_c_check_type "$LINENO" "posix_spawnattr_t" "ac_cv_type_posix_spawnattr_t" " #include <spawn.h> " if test "x$ac_cv_type_posix_spawnattr_t" = xyes then : printf "%s\n" "#define HAVE_POSIX_SPAWNATTR_T 1" >>confdefs.h else $as_nop HAVE_POSIX_SPAWNATTR_T=0 fi ac_fn_c_check_type "$LINENO" "posix_spawn_file_actions_t" "ac_cv_type_posix_spawn_file_actions_t" " #include <spawn.h> " if test "x$ac_cv_type_posix_spawn_file_actions_t" = xyes then : printf "%s\n" "#define HAVE_POSIX_SPAWN_FILE_ACTIONS_T 1" >>confdefs.h else $as_nop HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0 fi else HAVE_SPAWN_H=0 HAVE_POSIX_SPAWNATTR_T=0 HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for stdbool.h that conforms to C99" >&5 printf %s "checking for stdbool.h that conforms to C99... " >&6; } if test ${ac_cv_header_stdbool_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdbool.h> #ifdef __cplusplus typedef bool Bool; #else typedef _Bool Bool; #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ Bool q = true; Bool *pq = &q; bool *qq = &q; int main (void) { bool e = &s; *pq |= q; *pq |= ! q; *qq |= q; *qq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq + !qq); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_header_stdbool_h=yes else $as_nop ac_cv_header_stdbool_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: $ac_cv_header_stdbool_h" >&5 printf "%s\n" "$ac_cv_header_stdbool_h" >&6; } ac_fn_c_check_type "$LINENO" "_Bool" "ac_cv_type__Bool" "$ac_includes_default" if test "x$ac_cv_type__Bool" = xyes then : printf "%s\n" "#define HAVE__BOOL 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "fcloseall" "ac_cv_have_decl_fcloseall" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fcloseall" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FCLOSEALL $ac_have_decl" >>confdefs.h printf "%s\n" "#define __USE_MINGW_ANSI_STDIO 1" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_stdio_h='<'stdio.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdio.h>" >&5 printf %s "checking absolute name of <stdio.h>... " >&6; } if test ${gl_cv_next_stdio_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdio.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdio_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdio_h gl_cv_next_stdio_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdio_h" >&5 printf "%s\n" "$gl_cv_next_stdio_h" >&6; } fi NEXT_STDIO_H=$gl_cv_next_stdio_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdio.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdio_h fi NEXT_AS_FIRST_DIRECTIVE_STDIO_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking which flavor of printf attribute matches inttypes macros" >&5 printf %s "checking which flavor of printf attribute matches inttypes macros... " >&6; } if test ${gl_cv_func_printf_attribute_flavor+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #define __STDC_FORMAT_MACROS 1 #include <stdio.h> #include <inttypes.h> /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if (defined _WIN32 && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_printf_attribute_flavor=system else $as_nop gl_cv_func_printf_attribute_flavor=gnu fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_printf_attribute_flavor" >&5 printf "%s\n" "$gl_cv_func_printf_attribute_flavor" >&6; } if test "$gl_cv_func_printf_attribute_flavor" = gnu; then printf "%s\n" "#define GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU 1" >>confdefs.h fi if test $ac_cv_have_decl_fcloseall = no; then HAVE_DECL_FCLOSEALL=0 fi ac_fn_check_decl "$LINENO" "ecvt" "ac_cv_have_decl_ecvt" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_ecvt" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_ECVT $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fcvt" "ac_cv_have_decl_fcvt" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fcvt" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FCVT $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "gcvt" "ac_cv_have_decl_gcvt" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_gcvt" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GCVT $ac_have_decl" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_stdlib_h='<'stdlib.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdlib.h>" >&5 printf %s "checking absolute name of <stdlib.h>... " >&6; } if test ${gl_cv_next_stdlib_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdlib.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdlib_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdlib_h gl_cv_next_stdlib_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdlib_h" >&5 printf "%s\n" "$gl_cv_next_stdlib_h" >&6; } fi NEXT_STDLIB_H=$gl_cv_next_stdlib_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdlib.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdlib_h fi NEXT_AS_FIRST_DIRECTIVE_STDLIB_H=$gl_next_as_first_directive if test $ac_cv_have_decl_ecvt = no; then HAVE_DECL_ECVT=0 fi if test $ac_cv_have_decl_fcvt = no; then HAVE_DECL_FCVT=0 fi if test $ac_cv_have_decl_gcvt = no; then HAVE_DECL_GCVT=0 fi HAVE_FFS=1; HAVE_STRCASECMP=1; HAVE_DECL_STRNCASECMP=1; ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr" if test "x$ac_cv_func_strcasestr" = xyes then : printf "%s\n" "#define HAVE_STRCASESTR 1" >>confdefs.h fi if test $ac_cv_func_strcasestr = no; then HAVE_STRCASESTR=0 else if test $REPLACE_MEMCHR = 1; then REPLACE_STRCASESTR=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strcasestr works" >&5 printf %s "checking whether strcasestr works... " >&6; } if test ${gl_cv_func_strcasestr_works_always+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> /* for __GNU_LIBRARY__ */ #ifdef __GNU_LIBRARY__ #include <features.h> #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ || defined __UCLIBC__ Lucky user #endif #elif defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) Lucky user #endif #else Lucky user #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1 then : gl_cv_func_strcasestr_works_always="guessing yes" else $as_nop gl_cv_func_strcasestr_works_always="$gl_cross_guess_normal" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> /* for __GNU_LIBRARY__, strcasestr */ #ifdef __GNU_LIBRARY__ #include <features.h> #if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28 Unlucky user #endif #endif #define P "_EF_BF_BD" #define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P #define NEEDLE P P P P P int main (void) { return !!strcasestr (HAYSTACK, NEEDLE); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strcasestr_works_always=yes else $as_nop gl_cv_func_strcasestr_works_always=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: $gl_cv_func_strcasestr_works_always" >&5 printf "%s\n" "$gl_cv_func_strcasestr_works_always" >&6; } case "$gl_cv_func_strcasestr_works_always" in *yes) ;; *) REPLACE_STRCASESTR=1 ;; esac fi fi ac_fn_check_decl "$LINENO" "strdup" "ac_cv_have_decl_strdup" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strdup" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_STRDUP $ac_have_decl" >>confdefs.h REPLACE_STRERROR_0=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strerror(0) succeeds" >&5 printf %s "checking whether strerror(0) succeeds... " >&6; } if test ${gl_cv_func_strerror_0_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> #include <errno.h> int main (void) { int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strerror_0_works=yes else $as_nop gl_cv_func_strerror_0_works=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: $gl_cv_func_strerror_0_works" >&5 printf "%s\n" "$gl_cv_func_strerror_0_works" >&6; } case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 printf "%s\n" "#define REPLACE_STRERROR_0 1" >>confdefs.h ;; esac if test $gl_cv_have_include_next = yes; then gl_cv_next_string_h='<'string.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <string.h>" >&5 printf %s "checking absolute name of <string.h>... " >&6; } if test ${gl_cv_next_string_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'string.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_string_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_string_h gl_cv_next_string_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_string_h" >&5 printf "%s\n" "$gl_cv_next_string_h" >&6; } fi NEXT_STRING_H=$gl_cv_next_string_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'string.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_string_h fi NEXT_AS_FIRST_DIRECTIVE_STRING_H=$gl_next_as_first_directive if test $gl_cv_have_include_next = yes; then gl_cv_next_strings_h='<'strings.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <strings.h>" >&5 printf %s "checking absolute name of <strings.h>... " >&6; } if test ${gl_cv_next_strings_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_strings_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <strings.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'strings.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_strings_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_strings_h gl_cv_next_strings_h='"'$gl_header'"' else gl_cv_next_strings_h='<'strings.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_strings_h" >&5 printf "%s\n" "$gl_cv_next_strings_h" >&6; } fi NEXT_STRINGS_H=$gl_cv_next_strings_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'strings.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_strings_h fi NEXT_AS_FIRST_DIRECTIVE_STRINGS_H=$gl_next_as_first_directive if test $ac_cv_header_strings_h = yes; then HAVE_STRINGS_H=1 else HAVE_STRINGS_H=0 fi GL_GNULIB_FFS=0 if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_file_h='<'sys/file.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/file.h>" >&5 printf %s "checking absolute name of <sys/file.h>... " >&6; } if test ${gl_cv_next_sys_file_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_sys_file_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/file.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/file.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_file_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_file_h gl_cv_next_sys_file_h='"'$gl_header'"' else gl_cv_next_sys_file_h='<'sys/file.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_file_h" >&5 printf "%s\n" "$gl_cv_next_sys_file_h" >&6; } fi NEXT_SYS_FILE_H=$gl_cv_next_sys_file_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/file.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_file_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H=$gl_next_as_first_directive if test $ac_cv_header_sys_file_h = yes; then HAVE_SYS_FILE_H=1 else HAVE_SYS_FILE_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_random_h='<'sys/random.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/random.h>" >&5 printf %s "checking absolute name of <sys/random.h>... " >&6; } if test ${gl_cv_next_sys_random_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_sys_random_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/random.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/random.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_random_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_random_h gl_cv_next_sys_random_h='"'$gl_header'"' else gl_cv_next_sys_random_h='<'sys/random.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_random_h" >&5 printf "%s\n" "$gl_cv_next_sys_random_h" >&6; } fi NEXT_SYS_RANDOM_H=$gl_cv_next_sys_random_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/random.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_random_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H=$gl_next_as_first_directive if test $ac_cv_header_sys_random_h = yes; then HAVE_SYS_RANDOM_H=1 else HAVE_SYS_RANDOM_H=0 fi if test $ac_cv_header_sys_random_h = yes; then UNISTD_H_HAVE_SYS_RANDOM_H=1 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_sys_wait_h='<'sys/wait.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <sys/wait.h>" >&5 printf %s "checking absolute name of <sys/wait.h>... " >&6; } if test ${gl_cv_next_sys_wait_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_sys_wait_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/wait.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'sys/wait.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_sys_wait_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_sys_wait_h gl_cv_next_sys_wait_h='"'$gl_header'"' else gl_cv_next_sys_wait_h='<'sys/wait.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_sys_wait_h" >&5 printf "%s\n" "$gl_cv_next_sys_wait_h" >&6; } fi NEXT_SYS_WAIT_H=$gl_cv_next_sys_wait_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'sys/wait.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_sys_wait_h fi NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H=$gl_next_as_first_directive GL_GNULIB_WAITPID=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <time.h>" >&5 printf %s "checking for struct timespec in <time.h>... " >&6; } if test ${gl_cv_sys_struct_timespec_in_time_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> int main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timespec_in_time_h=yes else $as_nop gl_cv_sys_struct_timespec_in_time_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: $gl_cv_sys_struct_timespec_in_time_h" >&5 printf "%s\n" "$gl_cv_sys_struct_timespec_in_time_h" >&6; } TIME_H_DEFINES_STRUCT_TIMESPEC=0 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 if test $gl_cv_sys_struct_timespec_in_time_h = yes; then TIME_H_DEFINES_STRUCT_TIMESPEC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <sys/time.h>" >&5 printf %s "checking for struct timespec in <sys/time.h>... " >&6; } if test ${gl_cv_sys_struct_timespec_in_sys_time_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/time.h> int main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timespec_in_sys_time_h=yes else $as_nop gl_cv_sys_struct_timespec_in_sys_time_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: $gl_cv_sys_struct_timespec_in_sys_time_h" >&5 printf "%s\n" "$gl_cv_sys_struct_timespec_in_sys_time_h" >&6; } if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <pthread.h>" >&5 printf %s "checking for struct timespec in <pthread.h>... " >&6; } if test ${gl_cv_sys_struct_timespec_in_pthread_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timespec_in_pthread_h=yes else $as_nop gl_cv_sys_struct_timespec_in_pthread_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: $gl_cv_sys_struct_timespec_in_pthread_h" >&5 printf "%s\n" "$gl_cv_sys_struct_timespec_in_pthread_h" >&6; } if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for struct timespec in <unistd.h>" >&5 printf %s "checking for struct timespec in <unistd.h>... " >&6; } if test ${gl_cv_sys_struct_timespec_in_unistd_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> int main (void) { static struct timespec x; x.tv_sec = x.tv_nsec; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_sys_struct_timespec_in_unistd_h=yes else $as_nop gl_cv_sys_struct_timespec_in_unistd_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: $gl_cv_sys_struct_timespec_in_unistd_h" >&5 printf "%s\n" "$gl_cv_sys_struct_timespec_in_unistd_h" >&6; } if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 fi fi fi fi if test $gl_cv_have_include_next = yes; then gl_cv_next_time_h='<'time.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <time.h>" >&5 printf %s "checking absolute name of <time.h>... " >&6; } if test ${gl_cv_next_time_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'time.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_time_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_time_h gl_cv_next_time_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_time_h" >&5 printf "%s\n" "$gl_cv_next_time_h" >&6; } fi NEXT_TIME_H=$gl_cv_next_time_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'time.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_time_h fi NEXT_AS_FIRST_DIRECTIVE_TIME_H=$gl_next_as_first_directive { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for TIME_UTC in <time.h>" >&5 printf %s "checking for TIME_UTC in <time.h>... " >&6; } if test ${gl_cv_time_h_has_TIME_UTC+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> int main (void) { static int x = TIME_UTC; x++; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_time_h_has_TIME_UTC=yes else $as_nop gl_cv_time_h_has_TIME_UTC=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: $gl_cv_time_h_has_TIME_UTC" >&5 printf "%s\n" "$gl_cv_time_h_has_TIME_UTC" >&6; } if test $gl_cv_time_h_has_TIME_UTC = yes; then TIME_H_DEFINES_TIME_UTC=1 else TIME_H_DEFINES_TIME_UTC=0 fi ac_fn_check_decl "$LINENO" "execvpe" "ac_cv_have_decl_execvpe" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_execvpe" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_EXECVPE $ac_have_decl" >>confdefs.h if test $gl_cv_have_include_next = yes; then gl_cv_next_unistd_h='<'unistd.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <unistd.h>" >&5 printf %s "checking absolute name of <unistd.h>... " >&6; } if test ${gl_cv_next_unistd_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_unistd_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'unistd.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_unistd_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_unistd_h gl_cv_next_unistd_h='"'$gl_header'"' else gl_cv_next_unistd_h='<'unistd.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_unistd_h" >&5 printf "%s\n" "$gl_cv_next_unistd_h" >&6; } fi NEXT_UNISTD_H=$gl_cv_next_unistd_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'unistd.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_unistd_h fi NEXT_AS_FIRST_DIRECTIVE_UNISTD_H=$gl_next_as_first_directive if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi if test $ac_cv_have_decl_execvpe = no; then HAVE_DECL_EXECVPE=0 fi ac_fn_check_decl "$LINENO" "clearerr_unlocked" "ac_cv_have_decl_clearerr_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_clearerr_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_CLEARERR_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "feof_unlocked" "ac_cv_have_decl_feof_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_feof_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FEOF_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "ferror_unlocked" "ac_cv_have_decl_ferror_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_ferror_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FERROR_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fgets_unlocked" "ac_cv_have_decl_fgets_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fgets_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FGETS_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fputc_unlocked" "ac_cv_have_decl_fputc_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fputc_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FPUTC_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fread_unlocked" "ac_cv_have_decl_fread_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fread_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FREAD_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "fwrite_unlocked" "ac_cv_have_decl_fwrite_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fwrite_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FWRITE_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getc_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "getchar_unlocked" "ac_cv_have_decl_getchar_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getchar_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GETCHAR_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "putchar_unlocked" "ac_cv_have_decl_putchar_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_putchar_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_PUTCHAR_UNLOCKED $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "unsetenv" "ac_cv_have_decl_unsetenv" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_unsetenv" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_UNSETENV $ac_have_decl" >>confdefs.h HAVE_UTIME=1; REPLACE_UTIME=0; GL_GNULIB_UTIME=0 GL_GNULIB_MDA_UTIME=1 if test $gl_cv_have_include_next = yes; then gl_cv_next_utime_h='<'utime.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <utime.h>" >&5 printf %s "checking absolute name of <utime.h>... " >&6; } if test ${gl_cv_next_utime_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_utime_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <utime.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'utime.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_utime_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_utime_h gl_cv_next_utime_h='"'$gl_header'"' else gl_cv_next_utime_h='<'utime.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_utime_h" >&5 printf "%s\n" "$gl_cv_next_utime_h" >&6; } fi NEXT_UTIME_H=$gl_cv_next_utime_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'utime.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_utime_h fi NEXT_AS_FIRST_DIRECTIVE_UTIME_H=$gl_next_as_first_directive if test $ac_cv_header_utime_h = yes; then HAVE_UTIME_H=1 else HAVE_UTIME_H=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the utimes function works" >&5 printf %s "checking whether the utimes function works... " >&6; } if test ${gl_cv_func_working_utimes+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on musl systems. *-musl*) gl_cv_func_working_utimes="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_working_utimes="guessing no" ;; *) gl_cv_func_working_utimes="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/time.h> #include <time.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <utime.h> #include <errno.h> $gl_mda_defines static int inorder (time_t a, time_t b, time_t c) { return a <= b && b <= c; } int main () { int result = 0; char const *file = "conftest.utimes"; /* On OS/2, file timestamps must be on or after 1980 in local time, with an even number of seconds. */ static struct timeval timeval[2] = {{315620000 + 10, 10}, {315620000 + 1000000, 999998}}; /* Test whether utimes() essentially works. */ { struct stat sbuf; FILE *f = fopen (file, "w"); if (f == NULL) result |= 1; else if (fclose (f) != 0) result |= 1; else if (utimes (file, timeval) != 0) result |= 2; else if (lstat (file, &sbuf) != 0) result |= 1; else if (!(sbuf.st_atime == timeval[0].tv_sec && sbuf.st_mtime == timeval[1].tv_sec)) result |= 4; if (unlink (file) != 0) result |= 1; } /* Test whether utimes() with a NULL argument sets the file's timestamp to the current time. Use 'fstat' as well as 'time' to determine the "current" time, to accommodate NFS file systems if there is a time skew between the host and the NFS server. */ { int fd = open (file, O_WRONLY|O_CREAT, 0644); if (fd < 0) result |= 1; else { time_t t0, t2; struct stat st0, st1, st2; if (time (&t0) == (time_t) -1) result |= 1; else if (fstat (fd, &st0) != 0) result |= 1; else if (utimes (file, timeval) != 0 && (errno != EACCES /* OS/2 kLIBC utimes fails on opened files. */ || close (fd) != 0 || utimes (file, timeval) != 0 || (fd = open (file, O_WRONLY)) < 0)) result |= 2; else if (utimes (file, NULL) != 0 && (errno != EACCES /* OS/2 kLIBC utimes fails on opened files. */ || close (fd) != 0 || utimes (file, NULL) != 0 || (fd = open (file, O_WRONLY)) < 0)) result |= 8; else if (fstat (fd, &st1) != 0) result |= 1; else if (write (fd, "\n", 1) != 1) result |= 1; else if (fstat (fd, &st2) != 0) result |= 1; else if (time (&t2) == (time_t) -1) result |= 1; else { int m_ok_POSIX = inorder (t0, st1.st_mtime, t2); int m_ok_NFS = inorder (st0.st_mtime, st1.st_mtime, st2.st_mtime); if (! (st1.st_atime == st1.st_mtime)) result |= 16; if (! (m_ok_POSIX || m_ok_NFS)) result |= 32; } if (close (fd) != 0) result |= 1; } if (unlink (file) != 0) result |= 1; } /* Test whether utimes() with a NULL argument works on read-only files. */ { int fd = open (file, O_WRONLY|O_CREAT, 0444); if (fd < 0) result |= 1; else if (close (fd) != 0) result |= 1; else if (utimes (file, NULL) != 0) result |= 64; if (unlink (file) != 0) result |= 1; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_working_utimes=yes else $as_nop gl_cv_func_working_utimes=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: $gl_cv_func_working_utimes" >&5 printf "%s\n" "$gl_cv_func_working_utimes" >&6; } case "$gl_cv_func_working_utimes" in *yes) printf "%s\n" "#define HAVE_WORKING_UTIMES 1" >>confdefs.h ;; esac if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_wchar_h='<'wchar.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <wchar.h>" >&5 printf %s "checking absolute name of <wchar.h>... " >&6; } if test ${gl_cv_next_wchar_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_wchar_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'wchar.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_wchar_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_wchar_h gl_cv_next_wchar_h='"'$gl_header'"' else gl_cv_next_wchar_h='<'wchar.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wchar_h" >&5 printf "%s\n" "$gl_cv_next_wchar_h" >&6; } fi NEXT_WCHAR_H=$gl_cv_next_wchar_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'wchar.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_wchar_h fi NEXT_AS_FIRST_DIRECTIVE_WCHAR_H=$gl_next_as_first_directive if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi ac_fn_check_decl "$LINENO" "wcsdup" "ac_cv_have_decl_wcsdup" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_wcsdup" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_WCSDUP $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_wcsdup = no; then HAVE_DECL_WCSDUP=0 fi HAVE_ISWBLANK=1; HAVE_WCTYPE_T=1; HAVE_WCTRANS_T=1; REPLACE_ISWBLANK=0; REPLACE_ISWDIGIT=0; REPLACE_ISWXDIGIT=0; if test $ac_cv_func_iswcntrl = yes; then HAVE_ISWCNTRL=1 else HAVE_ISWCNTRL=0 fi if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi if test $gl_cv_have_include_next = yes; then gl_cv_next_wctype_h='<'wctype.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <wctype.h>" >&5 printf %s "checking absolute name of <wctype.h>... " >&6; } if test ${gl_cv_next_wctype_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_wctype_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wctype.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'wctype.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_wctype_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_wctype_h gl_cv_next_wctype_h='"'$gl_header'"' else gl_cv_next_wctype_h='<'wctype.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_wctype_h" >&5 printf "%s\n" "$gl_cv_next_wctype_h" >&6; } fi NEXT_WCTYPE_H=$gl_cv_next_wctype_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'wctype.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_wctype_h fi NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H=$gl_next_as_first_directive if test $ac_cv_header_wctype_h = yes; then if test $ac_cv_func_iswcntrl = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether iswcntrl works" >&5 printf %s "checking whether iswcntrl works... " >&6; } if test ${gl_cv_func_iswcntrl_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #if __GNU_LIBRARY__ == 1 Linux libc5 i18n is broken. #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_iswcntrl_works="guessing yes" else $as_nop gl_cv_func_iswcntrl_works="guessing no" 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. */ #include <wchar.h> #include <wctype.h> int main () { return iswprint ('x') == 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_iswcntrl_works=yes else $as_nop gl_cv_func_iswcntrl_works=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: $gl_cv_func_iswcntrl_works" >&5 printf "%s\n" "$gl_cv_func_iswcntrl_works" >&6; } fi HAVE_WCTYPE_H=1 else HAVE_WCTYPE_H=0 fi if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then REPLACE_ISWCNTRL=1 else case "$gl_cv_func_iswcntrl_works" in *yes) REPLACE_ISWCNTRL=0 ;; *) REPLACE_ISWCNTRL=1 ;; esac fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then : fi if test $REPLACE_ISWCNTRL = 1; then REPLACE_TOWLOWER=1 else ac_fn_c_check_func "$LINENO" "towlower" "ac_cv_func_towlower" if test "x$ac_cv_func_towlower" = xyes then : printf "%s\n" "#define HAVE_TOWLOWER 1" >>confdefs.h fi if test $ac_cv_func_towlower = yes; then REPLACE_TOWLOWER=0 else ac_fn_check_decl "$LINENO" "towlower" "ac_cv_have_decl_towlower" "#include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_towlower" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_TOWLOWER $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_towlower = yes; then REPLACE_TOWLOWER=1 else REPLACE_TOWLOWER=0 fi fi fi if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then : fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wctype_t" >&5 printf %s "checking for wctype_t... " >&6; } if test ${gl_cv_type_wctype_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif wctype_t a; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_wctype_t=yes else $as_nop gl_cv_type_wctype_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: $gl_cv_type_wctype_t" >&5 printf "%s\n" "$gl_cv_type_wctype_t" >&6; } if test $gl_cv_type_wctype_t = no; then HAVE_WCTYPE_T=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for wctrans_t" >&5 printf %s "checking for wctrans_t... " >&6; } if test ${gl_cv_type_wctrans_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> #include <wctype.h> wctrans_t a; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_type_wctrans_t=yes else $as_nop gl_cv_type_wctrans_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: $gl_cv_type_wctrans_t" >&5 printf "%s\n" "$gl_cv_type_wctrans_t" >&6; } if test $gl_cv_type_wctrans_t = no; then HAVE_WCTRANS_T=0 fi GL_GNULIB_ISWBLANK=0 GL_GNULIB_ISWDIGIT=0 GL_GNULIB_ISWXDIGIT=0 GL_GNULIB_WCTYPE=0 GL_GNULIB_ISWCTYPE=0 GL_GNULIB_WCTRANS=0 GL_GNULIB_TOWCTRANS=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for C compiler option to allow warnings" >&5 printf %s "checking for C compiler option to allow warnings... " >&6; } if test ${gl_cv_cc_wallow+y} then : printf %s "(cached) " >&6 else $as_nop rm -f conftest* echo 'int dummy;' > conftest.c { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err' { { 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; }; } >/dev/null { ac_try='${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err' { { 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; }; } >/dev/null if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then gl_cv_cc_wallow='-Wno-error' else gl_cv_cc_wallow=none fi rm -f conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_wallow" >&5 printf "%s\n" "$gl_cv_cc_wallow" >&6; } case "$gl_cv_cc_wallow" in none) GL_CFLAG_ALLOW_WARNINGS='' ;; *) GL_CFLAG_ALLOW_WARNINGS="$gl_cv_cc_wallow" ;; esac GL_CFLAG_GNULIB_WARNINGS='' if test -n "$GL_CFLAG_ALLOW_WARNINGS"; then cat > conftest.c <<\EOF #if __GNUC__ >= 3 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter #endif #if __GNUC__ + (__GNUC_MINOR__ >= 9) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-float-conversion #endif #if __GNUC__ >= 7 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wimplicit-fallthrough #endif #if __GNUC__ + (__GNUC_MINOR__ >= 8) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-pedantic #endif #if __GNUC__ + (__GNUC_MINOR__ >= 3) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-sign-conversion -Wno-type-limits #endif #if __GNUC__ + (__GNUC_MINOR__ >= 5) > 4 -Wno-unsuffixed-float-constants #endif EOF gl_command="$CC $CFLAGS $CPPFLAGS -E conftest.c > conftest.out" if { { eval echo "\"\$as_me\":${as_lineno-$LINENO}: \"$gl_command\""; } >&5 (eval $gl_command) 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then gl_options=`grep -v '#' conftest.out` for word in $gl_options; do GL_CFLAG_GNULIB_WARNINGS="$GL_CFLAG_GNULIB_WARNINGS $word" done fi rm -f conftest.c conftest.out fi if true; then GL_COND_LIBTOOL_TRUE= GL_COND_LIBTOOL_FALSE='#' else GL_COND_LIBTOOL_TRUE='#' GL_COND_LIBTOOL_FALSE= fi gl_cond_libtool=true gl_m4_base='m4' gl_source_base='lib' gl_source_base_prefix= case "$host_os" in mingw*) REPLACE_ACCESS=1 ;; esac if test $REPLACE_ACCESS = 1; then GL_COND_OBJ_ACCESS_TRUE= GL_COND_OBJ_ACCESS_FALSE='#' else GL_COND_OBJ_ACCESS_TRUE='#' GL_COND_OBJ_ACCESS_FALSE= fi : if test -z "${GL_COND_OBJ_ACCESS_TRUE}" && test -z "${GL_COND_OBJ_ACCESS_FALSE}"; then GL_COND_OBJ_ACCESS_TRUE='#' GL_COND_OBJ_ACCESS_FALSE='#' fi GL_GNULIB_ACCESS=1 printf "%s\n" "#define GNULIB_TEST_ACCESS 1" >>confdefs.h LIB_ACL= use_acl=0 if test "$enable_acl" != no; then ac_fn_c_check_header_compile "$LINENO" "sys/acl.h" "ac_cv_header_sys_acl_h" "$ac_includes_default" if test "x$ac_cv_header_sys_acl_h" = xyes then : printf "%s\n" "#define HAVE_SYS_ACL_H 1" >>confdefs.h fi if test $ac_cv_header_sys_acl_h = yes; then ac_save_LIBS=$LIBS if test $use_acl = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing acl_get_file" >&5 printf %s "checking for library containing acl_get_file... " >&6; } if test ${ac_cv_search_acl_get_file+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 acl_get_file (); int main (void) { return acl_get_file (); ; return 0; } _ACEOF for ac_lib in '' acl pacl 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_acl_get_file=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_acl_get_file+y} then : break fi done if test ${ac_cv_search_acl_get_file+y} then : else $as_nop ac_cv_search_acl_get_file=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_acl_get_file" >&5 printf "%s\n" "$ac_cv_search_acl_get_file" >&6; } ac_res=$ac_cv_search_acl_get_file if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" if test "$ac_cv_search_acl_get_file" != "none required"; then LIB_ACL=$ac_cv_search_acl_get_file fi ac_fn_c_check_func "$LINENO" "acl_get_file" "ac_cv_func_acl_get_file" if test "x$ac_cv_func_acl_get_file" = xyes then : printf "%s\n" "#define HAVE_ACL_GET_FILE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_get_fd" "ac_cv_func_acl_get_fd" if test "x$ac_cv_func_acl_get_fd" = xyes then : printf "%s\n" "#define HAVE_ACL_GET_FD 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_set_file" "ac_cv_func_acl_set_file" if test "x$ac_cv_func_acl_set_file" = xyes then : printf "%s\n" "#define HAVE_ACL_SET_FILE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_set_fd" "ac_cv_func_acl_set_fd" if test "x$ac_cv_func_acl_set_fd" = xyes then : printf "%s\n" "#define HAVE_ACL_SET_FD 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_free" "ac_cv_func_acl_free" if test "x$ac_cv_func_acl_free" = xyes then : printf "%s\n" "#define HAVE_ACL_FREE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_from_mode" "ac_cv_func_acl_from_mode" if test "x$ac_cv_func_acl_from_mode" = xyes then : printf "%s\n" "#define HAVE_ACL_FROM_MODE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_from_text" "ac_cv_func_acl_from_text" if test "x$ac_cv_func_acl_from_text" = xyes then : printf "%s\n" "#define HAVE_ACL_FROM_TEXT 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_delete_def_file" "ac_cv_func_acl_delete_def_file" if test "x$ac_cv_func_acl_delete_def_file" = xyes then : printf "%s\n" "#define HAVE_ACL_DELETE_DEF_FILE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_extended_file" "ac_cv_func_acl_extended_file" if test "x$ac_cv_func_acl_extended_file" = xyes then : printf "%s\n" "#define HAVE_ACL_EXTENDED_FILE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_delete_fd_np" "ac_cv_func_acl_delete_fd_np" if test "x$ac_cv_func_acl_delete_fd_np" = xyes then : printf "%s\n" "#define HAVE_ACL_DELETE_FD_NP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_delete_file_np" "ac_cv_func_acl_delete_file_np" if test "x$ac_cv_func_acl_delete_file_np" = xyes then : printf "%s\n" "#define HAVE_ACL_DELETE_FILE_NP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_copy_ext_native" "ac_cv_func_acl_copy_ext_native" if test "x$ac_cv_func_acl_copy_ext_native" = xyes then : printf "%s\n" "#define HAVE_ACL_COPY_EXT_NATIVE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_create_entry_np" "ac_cv_func_acl_create_entry_np" if test "x$ac_cv_func_acl_create_entry_np" = xyes then : printf "%s\n" "#define HAVE_ACL_CREATE_ENTRY_NP 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_to_short_text" "ac_cv_func_acl_to_short_text" if test "x$ac_cv_func_acl_to_short_text" = xyes then : printf "%s\n" "#define HAVE_ACL_TO_SHORT_TEXT 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "acl_free_text" "ac_cv_func_acl_free_text" if test "x$ac_cv_func_acl_free_text" = xyes then : printf "%s\n" "#define HAVE_ACL_FREE_TEXT 1" >>confdefs.h fi # If the acl_get_file bug is detected, don't enable the ACL support. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working acl_get_file" >&5 printf %s "checking for working acl_get_file... " >&6; } if test ${gl_cv_func_working_acl_get_file+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_func_working_acl_get_file=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/acl.h> #include <errno.h> int main (void) { acl_t acl = acl_get_file (".", ACL_TYPE_ACCESS); return acl ? acl_free (acl) != 0 : errno == ENOENT; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : if test $cross_compiling = yes; then gl_cv_func_working_acl_get_file="guessing yes" elif ./conftest$ac_exeext; then gl_cv_func_working_acl_get_file=yes fi 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: $gl_cv_func_working_acl_get_file" >&5 printf "%s\n" "$gl_cv_func_working_acl_get_file" >&6; } if test "$gl_cv_func_working_acl_get_file" != no then : use_acl=1 fi if test $use_acl = 1; then ac_fn_c_check_header_compile "$LINENO" "acl/libacl.h" "ac_cv_header_acl_libacl_h" "$ac_includes_default" if test "x$ac_cv_header_acl_libacl_h" = xyes then : printf "%s\n" "#define HAVE_ACL_LIBACL_H 1" >>confdefs.h fi for ac_func in acl_entries do : ac_fn_c_check_func "$LINENO" "acl_entries" "ac_cv_func_acl_entries" if test "x$ac_cv_func_acl_entries" = xyes then : printf "%s\n" "#define HAVE_ACL_ENTRIES 1" >>confdefs.h else $as_nop gl_LIBOBJS="$gl_LIBOBJS $ac_func.$ac_objext" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ACL_FIRST_ENTRY" >&5 printf %s "checking for ACL_FIRST_ENTRY... " >&6; } if test ${gl_cv_acl_ACL_FIRST_ENTRY+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/acl.h> int type = ACL_FIRST_ENTRY; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_acl_ACL_FIRST_ENTRY=yes else $as_nop gl_cv_acl_ACL_FIRST_ENTRY=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: $gl_cv_acl_ACL_FIRST_ENTRY" >&5 printf "%s\n" "$gl_cv_acl_ACL_FIRST_ENTRY" >&6; } if test $gl_cv_acl_ACL_FIRST_ENTRY = yes; then printf "%s\n" "#define HAVE_ACL_FIRST_ENTRY 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ACL_TYPE_EXTENDED" >&5 printf %s "checking for ACL_TYPE_EXTENDED... " >&6; } if test ${gl_cv_acl_ACL_TYPE_EXTENDED+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/acl.h> int type = ACL_TYPE_EXTENDED; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_acl_ACL_TYPE_EXTENDED=yes else $as_nop gl_cv_acl_ACL_TYPE_EXTENDED=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: $gl_cv_acl_ACL_TYPE_EXTENDED" >&5 printf "%s\n" "$gl_cv_acl_ACL_TYPE_EXTENDED" >&6; } if test $gl_cv_acl_ACL_TYPE_EXTENDED = yes; then printf "%s\n" "#define HAVE_ACL_TYPE_EXTENDED 1" >>confdefs.h fi else LIB_ACL= fi fi fi if test $use_acl = 0; then ac_fn_c_check_func "$LINENO" "facl" "ac_cv_func_facl" if test "x$ac_cv_func_facl" = xyes then : printf "%s\n" "#define HAVE_FACL 1" >>confdefs.h fi if test $ac_cv_func_facl = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing acl_trivial" >&5 printf %s "checking for library containing acl_trivial... " >&6; } if test ${ac_cv_search_acl_trivial+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 acl_trivial (); int main (void) { return acl_trivial (); ; return 0; } _ACEOF for ac_lib in '' sec 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_acl_trivial=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_acl_trivial+y} then : break fi done if test ${ac_cv_search_acl_trivial+y} then : else $as_nop ac_cv_search_acl_trivial=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_acl_trivial" >&5 printf "%s\n" "$ac_cv_search_acl_trivial" >&6; } ac_res=$ac_cv_search_acl_trivial if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" if test "$ac_cv_search_acl_trivial" != "none required"; then LIB_ACL=$ac_cv_search_acl_trivial fi fi ac_fn_c_check_func "$LINENO" "acl_trivial" "ac_cv_func_acl_trivial" if test "x$ac_cv_func_acl_trivial" = xyes then : printf "%s\n" "#define HAVE_ACL_TRIVIAL 1" >>confdefs.h fi use_acl=1 fi fi if test $use_acl = 0; then ac_fn_c_check_func "$LINENO" "getacl" "ac_cv_func_getacl" if test "x$ac_cv_func_getacl" = xyes then : printf "%s\n" "#define HAVE_GETACL 1" >>confdefs.h fi if test $ac_cv_func_getacl = yes; then use_acl=1 fi ac_fn_c_check_header_compile "$LINENO" "aclv.h" "ac_cv_header_aclv_h" "#include <sys/types.h> " if test "x$ac_cv_header_aclv_h" = xyes then : printf "%s\n" "#define HAVE_ACLV_H 1" >>confdefs.h fi fi if test $use_acl = 0; then ac_fn_c_check_func "$LINENO" "aclx_get" "ac_cv_func_aclx_get" if test "x$ac_cv_func_aclx_get" = xyes then : printf "%s\n" "#define HAVE_ACLX_GET 1" >>confdefs.h fi if test $ac_cv_func_aclx_get = yes; then use_acl=1 fi fi if test $use_acl = 0 || test "$ac_cv_func_aclx_get" = yes; then ac_fn_c_check_func "$LINENO" "statacl" "ac_cv_func_statacl" if test "x$ac_cv_func_statacl" = xyes then : printf "%s\n" "#define HAVE_STATACL 1" >>confdefs.h fi if test $ac_cv_func_statacl = yes; then use_acl=1 fi fi if test $use_acl = 0; then ac_fn_c_check_func "$LINENO" "aclsort" "ac_cv_func_aclsort" if test "x$ac_cv_func_aclsort" = xyes then : printf "%s\n" "#define HAVE_ACLSORT 1" >>confdefs.h fi if test $ac_cv_func_aclsort = yes; then use_acl=1 fi fi LIBS=$ac_save_LIBS fi if test "$enable_acl$use_acl" = yes0; then as_fn_error $? "ACLs enabled but support not detected" "$LINENO" 5 elif test "$enable_acl$use_acl" = auto0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libacl development library was not found or not usable." >&5 printf "%s\n" "$as_me: WARNING: libacl development library was not found or not usable." >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: GNU recutils will be built without ACL support." >&5 printf "%s\n" "$as_me: WARNING: GNU recutils will be built without ACL support." >&2;} fi fi test -n "$gl_need_lib_has_acl" && LIB_HAS_ACL=$LIB_ACL printf "%s\n" "#define USE_ACL $use_acl" >>confdefs.h USE_ACL=$use_acl LTALLOCA=`echo "$ALLOCA" | sed -e 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'` if test $ac_cv_func_alloca_works = no; then : fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for alloca as a compiler built-in" >&5 printf %s "checking for alloca as a compiler built-in... " >&6; } if test ${gl_cv_rpl_alloca+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Need own alloca" >/dev/null 2>&1 then : gl_cv_rpl_alloca=yes else $as_nop gl_cv_rpl_alloca=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_rpl_alloca" >&5 printf "%s\n" "$gl_cv_rpl_alloca" >&6; } if test $gl_cv_rpl_alloca = yes; then printf "%s\n" "#define HAVE_ALLOCA 1" >>confdefs.h GL_GENERATE_ALLOCA_H=true else GL_GENERATE_ALLOCA_H=false fi else GL_GENERATE_ALLOCA_H=true fi if test $ac_cv_working_alloca_h = yes; then HAVE_ALLOCA_H=1 else HAVE_ALLOCA_H=0 fi case "$GL_GENERATE_ALLOCA_H" in false) ALLOCA_H='' ;; true) if test -z "$ALLOCA_H"; then ALLOCA_H="${gl_source_base_prefix}alloca.h" fi ;; *) echo "*** GL_GENERATE_ALLOCA_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_ALLOCA_H; then GL_GENERATE_ALLOCA_H_TRUE= GL_GENERATE_ALLOCA_H_FALSE='#' else GL_GENERATE_ALLOCA_H_TRUE='#' GL_GENERATE_ALLOCA_H_FALSE= fi : if test -z "${GL_GENERATE_ALLOCA_H_TRUE}" && test -z "${GL_GENERATE_ALLOCA_H_FALSE}"; then GL_GENERATE_ALLOCA_H_TRUE='#' GL_GENERATE_ALLOCA_H_FALSE='#' fi # See the comments in bison.m4. if test $ac_cv_func_btowc = no; then HAVE_BTOWC=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether btowc(0) is correct" >&5 printf %s "checking whether btowc(0) is correct... " >&6; } if test ${gl_cv_func_btowc_nul+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on Cygwin. cygwin*) gl_cv_func_btowc_nul="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_nul="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_nul="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> int main () { if (btowc ('\0') != 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_btowc_nul=yes else $as_nop gl_cv_func_btowc_nul=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: $gl_cv_func_btowc_nul" >&5 printf "%s\n" "$gl_cv_func_btowc_nul" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether btowc(EOF) is correct" >&5 printf %s "checking whether btowc(EOF) is correct... " >&6; } if test ${gl_cv_func_btowc_eof+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on IRIX. irix*) gl_cv_func_btowc_eof="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_eof="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_eof="guessing yes" ;; esac if test $LOCALE_FR != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdio.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (btowc (EOF) != WEOF) return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_btowc_eof=yes else $as_nop gl_cv_func_btowc_eof=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_btowc_eof" >&5 printf "%s\n" "$gl_cv_func_btowc_eof" >&6; } case "$gl_cv_func_btowc_nul" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_eof" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac fi if test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1; then GL_COND_OBJ_BTOWC_TRUE= GL_COND_OBJ_BTOWC_FALSE='#' else GL_COND_OBJ_BTOWC_TRUE='#' GL_COND_OBJ_BTOWC_FALSE= fi : if test -z "${GL_COND_OBJ_BTOWC_TRUE}" && test -z "${GL_COND_OBJ_BTOWC_FALSE}"; then GL_COND_OBJ_BTOWC_TRUE='#' GL_COND_OBJ_BTOWC_FALSE='#' fi if test -z "$GL_COND_OBJ_BTOWC_TRUE"; then : : fi GL_GNULIB_BTOWC=1 printf "%s\n" "#define GNULIB_TEST_BTOWC 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __builtin_expect" >&5 printf %s "checking for __builtin_expect... " >&6; } if test ${gl_cv___builtin_expect+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv___builtin_expect=yes else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <builtins.h> int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv___builtin_expect="in <builtins.h>" else $as_nop gl_cv___builtin_expect=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext 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: $gl_cv___builtin_expect" >&5 printf "%s\n" "$gl_cv___builtin_expect" >&6; } if test "$gl_cv___builtin_expect" = yes; then printf "%s\n" "#define HAVE___BUILTIN_EXPECT 1" >>confdefs.h elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then printf "%s\n" "#define HAVE___BUILTIN_EXPECT 2" >>confdefs.h fi REPLACE_CALLOC_FOR_CALLOC_GNU="$REPLACE_CALLOC_FOR_CALLOC_POSIX" if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether calloc (0, n) and calloc (n, 0) return nonnull" >&5 printf %s "checking whether calloc (0, n) and calloc (n, 0) return nonnull... " >&6; } if test ${ac_cv_func_calloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test $cross_compiling != yes; then ac_cv_func_calloc_0_nonnull=yes if test "$cross_compiling" = yes then : { { 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 run test program while cross compiling See \`config.log' for more details" "$LINENO" 5; } else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { int result = 0; char * volatile p = calloc (0, 0); if (!p) result |= 1; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : else $as_nop ac_cv_func_calloc_0_nonnull=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on musl systems. *-musl*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on native Windows. mingw*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_calloc_0_nonnull="$gl_cross_guess_normal" ;; esac fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_func_calloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_calloc_0_nonnull" >&6; } case $ac_cv_func_calloc_0_nonnull in #( *yes) : ;; #( *) : REPLACE_CALLOC_FOR_CALLOC_GNU=1 ;; esac fi if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 1; then gl_LIBOBJS="$gl_LIBOBJS calloc.$ac_objext" fi GL_GNULIB_CALLOC_GNU=1 printf "%s\n" "#define GNULIB_TEST_CALLOC_GNU 1" >>confdefs.h if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_CALLOC_FOR_CALLOC_POSIX=1 fi if test $REPLACE_CALLOC_FOR_CALLOC_POSIX = 1; then gl_LIBOBJS="$gl_LIBOBJS calloc.$ac_objext" fi GL_GNULIB_CALLOC_POSIX=1 printf "%s\n" "#define GNULIB_TEST_CALLOC_POSIX 1" >>confdefs.h if test $ac_cv_func_canonicalize_file_name = no; then HAVE_CANONICALIZE_FILE_NAME=0 else case "$gl_cv_func_realpath_works" in *yes) ;; *) REPLACE_CANONICALIZE_FILE_NAME=1 ;; esac fi printf "%s\n" "#define GNULIB_CANONICALIZE 1" >>confdefs.h printf "%s\n" "#define GNULIB_TEST_CANONICALIZE 1" >>confdefs.h GL_GNULIB_CANONICALIZE_FILE_NAME=1 printf "%s\n" "#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1" >>confdefs.h if test $ac_cv_func_canonicalize_file_name = no; then HAVE_CANONICALIZE_FILE_NAME=0 if test $ac_cv_func_realpath = no; then HAVE_REALPATH=0 else case "$gl_cv_func_realpath_works" in *yes) ;; *) REPLACE_REALPATH=1 ;; esac fi else case "$gl_cv_func_realpath_works" in *yes) ;; *) REPLACE_CANONICALIZE_FILE_NAME=1 REPLACE_REALPATH=1 ;; esac fi if test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1; then GL_COND_OBJ_CANONICALIZE_LGPL_TRUE= GL_COND_OBJ_CANONICALIZE_LGPL_FALSE='#' else GL_COND_OBJ_CANONICALIZE_LGPL_TRUE='#' GL_COND_OBJ_CANONICALIZE_LGPL_FALSE= fi : if test -z "${GL_COND_OBJ_CANONICALIZE_LGPL_TRUE}" && test -z "${GL_COND_OBJ_CANONICALIZE_LGPL_FALSE}"; then GL_COND_OBJ_CANONICALIZE_LGPL_TRUE='#' GL_COND_OBJ_CANONICALIZE_LGPL_FALSE='#' fi printf "%s\n" "#define GNULIB_CANONICALIZE_LGPL 1" >>confdefs.h GL_GNULIB_CANONICALIZE_FILE_NAME=1 printf "%s\n" "#define GNULIB_TEST_CANONICALIZE_FILE_NAME 1" >>confdefs.h GL_GNULIB_REALPATH=1 printf "%s\n" "#define GNULIB_TEST_REALPATH 1" >>confdefs.h GL_GNULIB_CHDIR=1 printf "%s\n" "#define GNULIB_TEST_CHDIR 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether this system supports file names of any length" >&5 printf %s "checking whether this system supports file names of any length... " >&6; } if test ${gl_cv_have_unlimited_file_name_length+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Arrange to define PATH_MAX, like "pathmax.h" does. */ #if HAVE_UNISTD_H # include <unistd.h> #endif #include <limits.h> #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifdef __hpux # undef PATH_MAX # define PATH_MAX 1024 #endif #if defined _WIN32 && ! defined __CYGWIN__ # undef PATH_MAX # define PATH_MAX 260 #endif #ifdef PATH_MAX have_arbitrary_file_name_length_limit #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "have_arbitrary_file_name_length_limit" >/dev/null 2>&1 then : gl_cv_have_unlimited_file_name_length=no else $as_nop gl_cv_have_unlimited_file_name_length=yes fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_unlimited_file_name_length" >&5 printf "%s\n" "$gl_cv_have_unlimited_file_name_length" >&6; } if test $gl_cv_have_unlimited_file_name_length = no; then GL_COND_OBJ_CHDIR_LONG_TRUE= GL_COND_OBJ_CHDIR_LONG_FALSE='#' else GL_COND_OBJ_CHDIR_LONG_TRUE='#' GL_COND_OBJ_CHDIR_LONG_FALSE= fi : if test -z "${GL_COND_OBJ_CHDIR_LONG_TRUE}" && test -z "${GL_COND_OBJ_CHDIR_LONG_FALSE}"; then GL_COND_OBJ_CHDIR_LONG_TRUE='#' GL_COND_OBJ_CHDIR_LONG_FALSE='#' fi if test -z "$GL_COND_OBJ_CHDIR_LONG_TRUE"; then : : fi # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function. # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. # Save and restore LIBS so e.g., -lrt, isn't added to it. Otherwise, *all* # programs in the package would end up linked with that potentially-shared # library, inducing unnecessary run-time overhead. LIB_CLOCK_GETTIME= gl_saved_libs=$LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing clock_gettime" >&5 printf %s "checking for library containing clock_gettime... " >&6; } if test ${ac_cv_search_clock_gettime+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 clock_gettime (); int main (void) { return clock_gettime (); ; return 0; } _ACEOF for ac_lib in '' rt posix4 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_clock_gettime=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_clock_gettime+y} then : break fi done if test ${ac_cv_search_clock_gettime+y} then : else $as_nop ac_cv_search_clock_gettime=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_clock_gettime" >&5 printf "%s\n" "$ac_cv_search_clock_gettime" >&6; } ac_res=$ac_cv_search_clock_gettime if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" test "$ac_cv_search_clock_gettime" = "none required" || LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime fi ac_fn_c_check_func "$LINENO" "clock_getres" "ac_cv_func_clock_getres" if test "x$ac_cv_func_clock_getres" = xyes then : printf "%s\n" "#define HAVE_CLOCK_GETRES 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "clock_gettime" "ac_cv_func_clock_gettime" if test "x$ac_cv_func_clock_gettime" = xyes then : printf "%s\n" "#define HAVE_CLOCK_GETTIME 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "clock_settime" "ac_cv_func_clock_settime" if test "x$ac_cv_func_clock_settime" = xyes then : printf "%s\n" "#define HAVE_CLOCK_SETTIME 1" >>confdefs.h fi LIBS=$gl_saved_libs printf "%s\n" "#define GNULIB_TEST_CLOEXEC 1" >>confdefs.h if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_CLOSE=1 fi if test $ac_cv_header_sys_socket_h != yes; then ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes then : printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then REPLACE_CLOSE=1 fi if test $REPLACE_CLOSE = 0; then if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then REPLACE_CLOSE=1 fi fi if test $REPLACE_CLOSE = 1; then GL_COND_OBJ_CLOSE_TRUE= GL_COND_OBJ_CLOSE_FALSE='#' else GL_COND_OBJ_CLOSE_TRUE='#' GL_COND_OBJ_CLOSE_FALSE= fi : if test -z "${GL_COND_OBJ_CLOSE_TRUE}" && test -z "${GL_COND_OBJ_CLOSE_FALSE}"; then GL_COND_OBJ_CLOSE_TRUE='#' GL_COND_OBJ_CLOSE_FALSE='#' fi GL_GNULIB_CLOSE=1 printf "%s\n" "#define GNULIB_TEST_CLOSE 1" >>confdefs.h printf "%s\n" "#define GNULIB_CLOSE_STREAM 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "closedir" "ac_cv_func_closedir" if test "x$ac_cv_func_closedir" = xyes then : printf "%s\n" "#define HAVE_CLOSEDIR 1" >>confdefs.h fi if test $ac_cv_func_closedir = no; then HAVE_CLOSEDIR=0 fi if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then if test $HAVE_CLOSEDIR = 1; then REPLACE_CLOSEDIR=1 fi fi case $host_os,$HAVE_CLOSEDIR in os2*,1) REPLACE_CLOSEDIR=1;; esac if test $HAVE_CLOSEDIR = 0 || test $REPLACE_CLOSEDIR = 1; then GL_COND_OBJ_CLOSEDIR_TRUE= GL_COND_OBJ_CLOSEDIR_FALSE='#' else GL_COND_OBJ_CLOSEDIR_TRUE='#' GL_COND_OBJ_CLOSEDIR_FALSE= fi : if test -z "${GL_COND_OBJ_CLOSEDIR_TRUE}" && test -z "${GL_COND_OBJ_CLOSEDIR_FALSE}"; then GL_COND_OBJ_CLOSEDIR_TRUE='#' GL_COND_OBJ_CLOSEDIR_FALSE='#' fi GL_GNULIB_CLOSEDIR=1 printf "%s\n" "#define GNULIB_TEST_CLOSEDIR 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "chown" "ac_cv_func_chown" if test "x$ac_cv_func_chown" = xyes then : printf "%s\n" "#define HAVE_CHOWN 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for copy_file_range" >&5 printf %s "checking for copy_file_range... " >&6; } if test ${gl_cv_func_copy_file_range+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> int main (void) { ssize_t (*func) (int, off_t *, int, off_t *, size_t, unsigned) = copy_file_range; return func (0, 0, 0, 0, 0, 0) & 127; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_copy_file_range=yes else $as_nop gl_cv_func_copy_file_range=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: $gl_cv_func_copy_file_range" >&5 printf "%s\n" "$gl_cv_func_copy_file_range" >&6; } if test "$gl_cv_func_copy_file_range" != yes; then HAVE_COPY_FILE_RANGE=0 else printf "%s\n" "#define HAVE_COPY_FILE_RANGE 1" >>confdefs.h case $host_os in linux*) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether copy_file_range is known to work" >&5 printf %s "checking whether copy_file_range is known to work... " >&6; } if test ${gl_cv_copy_file_range_known_to_work+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <linux/version.h> int main (void) { #if LINUX_VERSION_CODE < KERNEL_VERSION (5, 3, 0) #error "copy_file_range is buggy" #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_copy_file_range_known_to_work=yes else $as_nop gl_cv_copy_file_range_known_to_work=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: $gl_cv_copy_file_range_known_to_work" >&5 printf "%s\n" "$gl_cv_copy_file_range_known_to_work" >&6; } if test "$gl_cv_copy_file_range_known_to_work" = no; then REPLACE_COPY_FILE_RANGE=1 fi;; esac fi if test $HAVE_COPY_FILE_RANGE = 0 || test $REPLACE_COPY_FILE_RANGE = 1; then GL_COND_OBJ_COPY_FILE_RANGE_TRUE= GL_COND_OBJ_COPY_FILE_RANGE_FALSE='#' else GL_COND_OBJ_COPY_FILE_RANGE_TRUE='#' GL_COND_OBJ_COPY_FILE_RANGE_FALSE= fi : if test -z "${GL_COND_OBJ_COPY_FILE_RANGE_TRUE}" && test -z "${GL_COND_OBJ_COPY_FILE_RANGE_FALSE}"; then GL_COND_OBJ_COPY_FILE_RANGE_TRUE='#' GL_COND_OBJ_COPY_FILE_RANGE_FALSE='#' fi GL_GNULIB_COPY_FILE_RANGE=1 printf "%s\n" "#define GNULIB_TEST_COPY_FILE_RANGE 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for d_ino member in directory struct" >&5 printf %s "checking for d_ino member in directory struct... " >&6; } if test ${gl_cv_struct_dirent_d_ino+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems with Linux kernel. linux*-gnu*) gl_cv_struct_dirent_d_ino="guessing yes" ;; # Guess yes on musl systems with Linux kernel. linux*-musl*) gl_cv_struct_dirent_d_ino="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_struct_dirent_d_ino="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_struct_dirent_d_ino="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> #include <dirent.h> int main (void) { DIR *dp = opendir ("."); struct dirent *e; struct stat st; if (! dp) return 1; e = readdir (dp); if (! e) { closedir (dp); return 2; } if (lstat (e->d_name, &st) != 0) { closedir (dp); return 3; } if (e->d_ino != st.st_ino) { closedir (dp); return 4; } closedir (dp); return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_struct_dirent_d_ino=yes else $as_nop gl_cv_struct_dirent_d_ino=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: $gl_cv_struct_dirent_d_ino" >&5 printf "%s\n" "$gl_cv_struct_dirent_d_ino" >&6; } case "$gl_cv_struct_dirent_d_ino" in *yes) printf "%s\n" "#define D_INO_IN_DIRENT 1" >>confdefs.h ;; esac ac_fn_c_check_func "$LINENO" "dirfd" "ac_cv_func_dirfd" if test "x$ac_cv_func_dirfd" = xyes then : printf "%s\n" "#define HAVE_DIRFD 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "dirfd" "ac_cv_have_decl_dirfd" "#include <sys/types.h> #include <dirent.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_dirfd" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_DIRFD $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_dirfd = no; then HAVE_DECL_DIRFD=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether dirfd is a macro" >&5 printf %s "checking whether dirfd is a macro... " >&6; } if test ${gl_cv_func_dirfd_macro+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <dirent.h> #ifdef dirfd dirent_header_defines_dirfd #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "dirent_header_defines_dirfd" >/dev/null 2>&1 then : gl_cv_func_dirfd_macro=yes else $as_nop gl_cv_func_dirfd_macro=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_dirfd_macro" >&5 printf "%s\n" "$gl_cv_func_dirfd_macro" >&6; } # Use the replacement if we have no function or macro with that name, # or if OS/2 kLIBC whose dirfd() does not work. # Replace only if the system declares dirfd already. case $ac_cv_func_dirfd,$gl_cv_func_dirfd_macro,$host_os,$ac_cv_have_decl_dirfd in no,no,*,yes | *,*,os2*,yes) REPLACE_DIRFD=1 printf "%s\n" "#define REPLACE_DIRFD 1" >>confdefs.h ;; esac if test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no || test $REPLACE_DIRFD = 1; then GL_COND_OBJ_DIRFD_TRUE= GL_COND_OBJ_DIRFD_FALSE='#' else GL_COND_OBJ_DIRFD_TRUE='#' GL_COND_OBJ_DIRFD_FALSE= fi : if test -z "${GL_COND_OBJ_DIRFD_TRUE}" && test -z "${GL_COND_OBJ_DIRFD_FALSE}"; then GL_COND_OBJ_DIRFD_TRUE='#' GL_COND_OBJ_DIRFD_FALSE='#' fi if test -z "$GL_COND_OBJ_DIRFD_TRUE"; then : { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to get the file descriptor associated with an open DIR*" >&5 printf %s "checking how to get the file descriptor associated with an open DIR*... " >&6; } if test ${gl_cv_sys_dir_fd_member_name+y} then : printf %s "(cached) " >&6 else $as_nop dirfd_save_CFLAGS=$CFLAGS for ac_expr in d_fd dd_fd; do CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <dirent.h> int main (void) { DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : dir_fd_found=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS=$dirfd_save_CFLAGS test "$dir_fd_found" = yes && break done test "$dir_fd_found" = yes || ac_expr=no_such_member gl_cv_sys_dir_fd_member_name=$ac_expr fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_sys_dir_fd_member_name" >&5 printf "%s\n" "$gl_cv_sys_dir_fd_member_name" >&6; } if test $gl_cv_sys_dir_fd_member_name != no_such_member; then printf "%s\n" "#define DIR_FD_MEMBER_NAME $gl_cv_sys_dir_fd_member_name" >>confdefs.h fi fi GL_GNULIB_DIRFD=1 printf "%s\n" "#define GNULIB_TEST_DIRFD 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether // is distinct from /" >&5 printf %s "checking whether // is distinct from /... " >&6; } if test ${gl_cv_double_slash_root+y} then : printf %s "(cached) " >&6 else $as_nop if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # <bug-gnulib@gnu.org>. case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$2" = "$4" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_double_slash_root" >&5 printf "%s\n" "$gl_cv_double_slash_root" >&6; } if test "$gl_cv_double_slash_root" = yes; then printf "%s\n" "#define DOUBLE_SLASH_IS_DISTINCT_ROOT 1" >>confdefs.h fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_DUP=1 fi if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then REPLACE_DUP=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether dup works" >&5 printf %s "checking whether dup works... " >&6; } if test ${gl_cv_func_dup_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_dup_works="guessing no" ;; *) gl_cv_func_dup_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> #include <fcntl.h> #include <errno.h> $gl_mda_defines int main (void) { /* On OS/2 kLIBC, dup does not work on a directory fd. */ int fd = open (".", O_RDONLY); return fd < 0 ? 1 : dup (fd) < 0 ? 2 : 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_dup_works=yes else $as_nop gl_cv_func_dup_works=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: $gl_cv_func_dup_works" >&5 printf "%s\n" "$gl_cv_func_dup_works" >&6; } case "$gl_cv_func_dup_works" in *yes) ;; *) REPLACE_DUP=1 ;; esac if test $REPLACE_DUP = 1; then GL_COND_OBJ_DUP_TRUE= GL_COND_OBJ_DUP_FALSE='#' else GL_COND_OBJ_DUP_TRUE='#' GL_COND_OBJ_DUP_FALSE= fi : if test -z "${GL_COND_OBJ_DUP_TRUE}" && test -z "${GL_COND_OBJ_DUP_FALSE}"; then GL_COND_OBJ_DUP_TRUE='#' GL_COND_OBJ_DUP_FALSE='#' fi if test -z "$GL_COND_OBJ_DUP_TRUE"; then : : fi GL_GNULIB_DUP=1 printf "%s\n" "#define GNULIB_TEST_DUP 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether dup2 works" >&5 printf %s "checking whether dup2 works... " >&6; } if test ${gl_cv_func_dup2_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in mingw*) # on this platform, dup2 always returns 0 for success gl_cv_func_dup2_works="guessing no" ;; cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 gl_cv_func_dup2_works="guessing no" ;; aix* | freebsd*) # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, # not EBADF. gl_cv_func_dup2_works="guessing no" ;; haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. gl_cv_func_dup2_works="guessing no" ;; *-android*) # implemented using dup3(), which fails if oldfd == newfd gl_cv_func_dup2_works="guessing no" ;; os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. gl_cv_func_dup2_works="guessing no" ;; *) gl_cv_func_dup2_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> $gl_mda_defines #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif int main (void) { int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; #ifdef FD_CLOEXEC if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) result |= 1; #endif if (dup2 (1, 1) != 1) result |= 2; #ifdef FD_CLOEXEC if (fcntl (1, F_GETFD) != FD_CLOEXEC) result |= 4; #endif close (0); if (dup2 (0, 0) != -1) result |= 8; /* Many gnulib modules require POSIX conformance of EBADF. */ if (dup2 (2, bad_fd) == -1 && errno != EBADF) result |= 16; /* Flush out some cygwin core dumps. */ if (dup2 (2, -1) != -1 || errno != EBADF) result |= 32; dup2 (2, 255); dup2 (2, 256); /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ { int fd = open (".", O_RDONLY); if (fd == -1) result |= 64; else if (dup2 (fd, fd + 1) == -1) result |= 128; close (fd); } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_dup2_works=yes else $as_nop gl_cv_func_dup2_works=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: $gl_cv_func_dup2_works" >&5 printf "%s\n" "$gl_cv_func_dup2_works" >&6; } case "$gl_cv_func_dup2_works" in *yes) ;; *) REPLACE_DUP2=1 ac_fn_c_check_func "$LINENO" "setdtablesize" "ac_cv_func_setdtablesize" if test "x$ac_cv_func_setdtablesize" = xyes then : printf "%s\n" "#define HAVE_SETDTABLESIZE 1" >>confdefs.h fi ;; esac if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then REPLACE_DUP2=1 fi if test $REPLACE_DUP2 = 1; then GL_COND_OBJ_DUP2_TRUE= GL_COND_OBJ_DUP2_FALSE='#' else GL_COND_OBJ_DUP2_TRUE='#' GL_COND_OBJ_DUP2_FALSE= fi : if test -z "${GL_COND_OBJ_DUP2_TRUE}" && test -z "${GL_COND_OBJ_DUP2_FALSE}"; then GL_COND_OBJ_DUP2_TRUE='#' GL_COND_OBJ_DUP2_FALSE='#' fi if test -z "$GL_COND_OBJ_DUP2_TRUE"; then : fi GL_GNULIB_DUP2=1 printf "%s\n" "#define GNULIB_TEST_DUP2 1" >>confdefs.h GL_GNULIB_ENVIRON=1 printf "%s\n" "#define GNULIB_TEST_ENVIRON 1" >>confdefs.h case "$GL_GENERATE_ERRNO_H" in false) ERRNO_H='' ;; true) if test -z "$ERRNO_H"; then ERRNO_H="${gl_source_base_prefix}errno.h" fi ;; *) echo "*** GL_GENERATE_ERRNO_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_ERRNO_H; then GL_GENERATE_ERRNO_H_TRUE= GL_GENERATE_ERRNO_H_FALSE='#' else GL_GENERATE_ERRNO_H_TRUE='#' GL_GENERATE_ERRNO_H_FALSE= fi : if test -z "${GL_GENERATE_ERRNO_H_TRUE}" && test -z "${GL_GENERATE_ERRNO_H_FALSE}"; then GL_GENERATE_ERRNO_H_TRUE='#' GL_GENERATE_ERRNO_H_FALSE='#' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for error_at_line" >&5 printf %s "checking for error_at_line... " >&6; } if test ${ac_cv_lib_error_at_line+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <error.h> int main (void) { error_at_line (0, 0, "", 0, "an error occurred"); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_error_at_line=yes else $as_nop ac_cv_lib_error_at_line=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_lib_error_at_line" >&5 printf "%s\n" "$ac_cv_lib_error_at_line" >&6; } if test "$ac_cv_lib_error_at_line" = no; then GL_COND_OBJ_ERROR_TRUE= GL_COND_OBJ_ERROR_FALSE='#' else GL_COND_OBJ_ERROR_TRUE='#' GL_COND_OBJ_ERROR_FALSE= fi : if test -z "${GL_COND_OBJ_ERROR_TRUE}" && test -z "${GL_COND_OBJ_ERROR_FALSE}"; then GL_COND_OBJ_ERROR_TRUE='#' GL_COND_OBJ_ERROR_FALSE='#' fi if test -z "$GL_COND_OBJ_ERROR_TRUE"; then : : fi XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error:3:c-format" XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=error_at_line:5:c-format" ac_fn_c_check_func "$LINENO" "euidaccess" "ac_cv_func_euidaccess" if test "x$ac_cv_func_euidaccess" = xyes then : printf "%s\n" "#define HAVE_EUIDACCESS 1" >>confdefs.h fi if test $ac_cv_func_euidaccess = no; then HAVE_EUIDACCESS=0 fi if test $HAVE_EUIDACCESS = 0; then GL_COND_OBJ_EUIDACCESS_TRUE= GL_COND_OBJ_EUIDACCESS_FALSE='#' else GL_COND_OBJ_EUIDACCESS_TRUE='#' GL_COND_OBJ_EUIDACCESS_FALSE= fi : if test -z "${GL_COND_OBJ_EUIDACCESS_TRUE}" && test -z "${GL_COND_OBJ_EUIDACCESS_FALSE}"; then GL_COND_OBJ_EUIDACCESS_TRUE='#' GL_COND_OBJ_EUIDACCESS_FALSE='#' fi if test -z "$GL_COND_OBJ_EUIDACCESS_TRUE"; then : ac_fn_c_check_header_compile "$LINENO" "libgen.h" "ac_cv_header_libgen_h" "$ac_includes_default" if test "x$ac_cv_header_libgen_h" = xyes then : printf "%s\n" "#define HAVE_LIBGEN_H 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups" if test "x$ac_cv_func_getgroups" = xyes then : fi # If we don't yet have getgroups, see if it's in -lbsd. # This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1. ac_save_LIBS=$LIBS if test $ac_cv_func_getgroups = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getgroups in -lbsd" >&5 printf %s "checking for getgroups in -lbsd... " >&6; } if test ${ac_cv_lib_bsd_getgroups+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $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 getgroups (); int main (void) { return getgroups (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_bsd_getgroups=yes else $as_nop ac_cv_lib_bsd_getgroups=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_bsd_getgroups" >&5 printf "%s\n" "$ac_cv_lib_bsd_getgroups" >&6; } if test "x$ac_cv_lib_bsd_getgroups" = xyes then : GETGROUPS_LIB=-lbsd fi fi # Run the program to test the functionality of the system-supplied # getgroups function only if there is such a function. if test $ac_cv_func_getgroups = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working getgroups" >&5 printf %s "checking for working getgroups... " >&6; } if test ${ac_cv_func_getgroups_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_getgroups_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) ac_cv_func_getgroups_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_getgroups_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* On NeXTstep 3.2, getgroups (0, 0) always fails. */ return getgroups (0, 0) == -1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_getgroups_works=yes else $as_nop ac_cv_func_getgroups_works=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: $ac_cv_func_getgroups_works" >&5 printf "%s\n" "$ac_cv_func_getgroups_works" >&6; } else ac_cv_func_getgroups_works=no fi case "$ac_cv_func_getgroups_works" in *yes) printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h ;; esac LIBS=$ac_save_LIBS # Solaris 9 and 10 need -lgen to get the eaccess function. # Save and restore LIBS so -lgen isn't added to it. Otherwise, *all* # programs in the package would end up linked with that potentially-shared # library, inducing unnecessary run-time overhead. LIB_EACCESS= gl_saved_libs=$LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for library containing eaccess" >&5 printf %s "checking for library containing eaccess... " >&6; } if test ${ac_cv_search_eaccess+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 eaccess (); int main (void) { return eaccess (); ; return 0; } _ACEOF for ac_lib in '' gen 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_eaccess=$ac_res fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext if test ${ac_cv_search_eaccess+y} then : break fi done if test ${ac_cv_search_eaccess+y} then : else $as_nop ac_cv_search_eaccess=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_eaccess" >&5 printf "%s\n" "$ac_cv_search_eaccess" >&6; } ac_res=$ac_cv_search_eaccess if test "$ac_res" != no then : test "$ac_res" = "none required" || LIBS="$ac_res $LIBS" test "$ac_cv_search_eaccess" = "none required" || LIB_EACCESS=$ac_cv_search_eaccess fi ac_fn_c_check_func "$LINENO" "eaccess" "ac_cv_func_eaccess" if test "x$ac_cv_func_eaccess" = xyes then : printf "%s\n" "#define HAVE_EACCESS 1" >>confdefs.h fi LIBS=$gl_saved_libs fi GL_GNULIB_EUIDACCESS=1 printf "%s\n" "#define GNULIB_TEST_EUIDACCESS 1" >>confdefs.h if test $ac_cv_func_explicit_bzero = no; then HAVE_EXPLICIT_BZERO=0 fi if test $HAVE_EXPLICIT_BZERO = 0; then GL_COND_OBJ_EXPLICIT_BZERO_TRUE= GL_COND_OBJ_EXPLICIT_BZERO_FALSE='#' else GL_COND_OBJ_EXPLICIT_BZERO_TRUE='#' GL_COND_OBJ_EXPLICIT_BZERO_FALSE= fi : if test -z "${GL_COND_OBJ_EXPLICIT_BZERO_TRUE}" && test -z "${GL_COND_OBJ_EXPLICIT_BZERO_FALSE}"; then GL_COND_OBJ_EXPLICIT_BZERO_TRUE='#' GL_COND_OBJ_EXPLICIT_BZERO_FALSE='#' fi if test -z "$GL_COND_OBJ_EXPLICIT_BZERO_TRUE"; then : ac_fn_c_check_func "$LINENO" "explicit_memset" "ac_cv_func_explicit_memset" if test "x$ac_cv_func_explicit_memset" = xyes then : printf "%s\n" "#define HAVE_EXPLICIT_MEMSET 1" >>confdefs.h fi fi GL_GNULIB_EXPLICIT_BZERO=1 printf "%s\n" "#define GNULIB_TEST_EXPLICIT_BZERO 1" >>confdefs.h : if test $ac_cv_have_decl_fchdir = no; then HAVE_DECL_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then printf "%s\n" "#define REPLACE_FCHDIR 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether open can visit directories" >&5 printf %s "checking whether open can visit directories... " >&6; } if test ${gl_cv_func_open_directory_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_open_directory_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_open_directory_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_open_directory_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_open_directory_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> $gl_mda_defines int main (void) { return open(".", O_RDONLY) < 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_open_directory_works=yes else $as_nop gl_cv_func_open_directory_works=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: $gl_cv_func_open_directory_works" >&5 printf "%s\n" "$gl_cv_func_open_directory_works" >&6; } case "$gl_cv_func_open_directory_works" in *yes) ;; *) printf "%s\n" "#define REPLACE_OPEN_DIRECTORY 1" >>confdefs.h ;; esac fi if test $HAVE_FCHDIR = 0; then GL_COND_OBJ_FCHDIR_TRUE= GL_COND_OBJ_FCHDIR_FALSE='#' else GL_COND_OBJ_FCHDIR_TRUE='#' GL_COND_OBJ_FCHDIR_FALSE= fi : if test -z "${GL_COND_OBJ_FCHDIR_TRUE}" && test -z "${GL_COND_OBJ_FCHDIR_FALSE}"; then GL_COND_OBJ_FCHDIR_TRUE='#' GL_COND_OBJ_FCHDIR_FALSE='#' fi if test -z "$GL_COND_OBJ_FCHDIR_TRUE"; then : : fi GL_GNULIB_FCHDIR=1 printf "%s\n" "#define GNULIB_TEST_FCHDIR 1" >>confdefs.h if test $ac_cv_func_fcntl = no; then if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fcntl handles F_DUPFD correctly" >&5 printf %s "checking whether fcntl handles F_DUPFD correctly... " >&6; } if test ${gl_cv_func_fcntl_f_dupfd_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case $host_os in aix* | cygwin* | haiku*) gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> $gl_mda_defines #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif int main (void) { int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; if (errno != EINVAL) result |= 2; if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; if (errno != EINVAL) result |= 8; /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ { int fd; fd = open (".", O_RDONLY); if (fd == -1) result |= 16; else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) result |= 32; close (fd); } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_fcntl_f_dupfd_works=yes else $as_nop gl_cv_func_fcntl_f_dupfd_works=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: $gl_cv_func_fcntl_f_dupfd_works" >&5 printf "%s\n" "$gl_cv_func_fcntl_f_dupfd_works" >&6; } case $gl_cv_func_fcntl_f_dupfd_works in *yes) ;; *) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi printf "%s\n" "#define FCNTL_DUPFD_BUGGY 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fcntl understands F_DUPFD_CLOEXEC" >&5 printf %s "checking whether fcntl understands F_DUPFD_CLOEXEC... " >&6; } if test ${gl_cv_func_fcntl_f_dupfd_cloexec+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on NetBSD. netbsd*) gl_cv_func_fcntl_f_dupfd_cloexec="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_cloexec="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> #include <unistd.h> int main (int argc, char *argv[]) { if (argc == 1) /* parent process */ { if (fcntl (1, F_DUPFD_CLOEXEC, 10) < 0) return 1; return execl ("./conftest", "./conftest", "child", NULL); } else /* child process */ return (fcntl (10, F_GETFL) < 0 ? 0 : 42); } _ACEOF if ac_fn_c_try_run "$LINENO" then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __linux__ /* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace it to support the semantics on older kernels that failed with EINVAL. */ choke me #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_fcntl_f_dupfd_cloexec=yes else $as_nop gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext else $as_nop gl_cv_func_fcntl_f_dupfd_cloexec=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: $gl_cv_func_fcntl_f_dupfd_cloexec" >&5 printf "%s\n" "$gl_cv_func_fcntl_f_dupfd_cloexec" >&6; } case "$gl_cv_func_fcntl_f_dupfd_cloexec" in *yes) ;; *) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi ;; esac fi if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi fi if test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1; then GL_COND_OBJ_FCNTL_TRUE= GL_COND_OBJ_FCNTL_FALSE='#' else GL_COND_OBJ_FCNTL_TRUE='#' GL_COND_OBJ_FCNTL_FALSE= fi : if test -z "${GL_COND_OBJ_FCNTL_TRUE}" && test -z "${GL_COND_OBJ_FCNTL_FALSE}"; then GL_COND_OBJ_FCNTL_TRUE='#' GL_COND_OBJ_FCNTL_FALSE='#' fi GL_GNULIB_FCNTL=1 printf "%s\n" "#define GNULIB_TEST_FCNTL 1" >>confdefs.h printf "%s\n" "#define GNULIB_FD_SAFER_FLAG 1" >>confdefs.h ac_fn_check_decl "$LINENO" "fdopendir" "ac_cv_have_decl_fdopendir" " #include <dirent.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_fdopendir" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_FDOPENDIR $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : else $as_nop HAVE_DECL_FDOPENDIR=0 fi if test $ac_cv_func_fdopendir = no; then HAVE_FDOPENDIR=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fdopendir works" >&5 printf %s "checking whether fdopendir works... " >&6; } if test ${gl_cv_func_fdopendir_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_fdopendir_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_fdopendir_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fdopendir_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <dirent.h> #include <fcntl.h> #include <unistd.h> $gl_mda_defines #if !HAVE_DECL_FDOPENDIR extern # ifdef __cplusplus "C" # endif DIR *fdopendir (int); #endif int main (void) { int result = 0; int fd = open ("conftest.c", O_RDONLY); if (fd < 0) result |= 1; if (fdopendir (fd)) result |= 2; if (close (fd)) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_fdopendir_works=yes else $as_nop gl_cv_func_fdopendir_works=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: $gl_cv_func_fdopendir_works" >&5 printf "%s\n" "$gl_cv_func_fdopendir_works" >&6; } case "$gl_cv_func_fdopendir_works" in *yes) ;; *) REPLACE_FDOPENDIR=1 ;; esac fi if test $HAVE_FDOPENDIR = 0 || test $REPLACE_FDOPENDIR = 1; then GL_COND_OBJ_FDOPENDIR_TRUE= GL_COND_OBJ_FDOPENDIR_FALSE='#' else GL_COND_OBJ_FDOPENDIR_TRUE='#' GL_COND_OBJ_FDOPENDIR_FALSE= fi : if test -z "${GL_COND_OBJ_FDOPENDIR_TRUE}" && test -z "${GL_COND_OBJ_FDOPENDIR_FALSE}"; then GL_COND_OBJ_FDOPENDIR_TRUE='#' GL_COND_OBJ_FDOPENDIR_FALSE='#' fi GL_GNULIB_FDOPENDIR=1 printf "%s\n" "#define GNULIB_TEST_FDOPENDIR 1" >>confdefs.h printf "%s\n" "#define GNULIB_FDOPENDIR 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for flexible array member" >&5 printf %s "checking for flexible array member... " >&6; } if test ${ac_cv_c_flexmember+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <stdio.h> #include <stddef.h> struct m { struct m *next, **list; char name[]; }; struct s { struct s *p; struct m *m; int n; double d[]; }; int main (void) { int m = getchar (); size_t nbytes = offsetof (struct s, d) + m * sizeof (double); nbytes += sizeof (struct s) - 1; nbytes -= nbytes % sizeof (struct s); struct s *p = malloc (nbytes); p->p = p; p->m = NULL; p->d[0] = 0.0; return p->d != (double *) NULL; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_flexmember=yes else $as_nop ac_cv_c_flexmember=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_c_flexmember" >&5 printf "%s\n" "$ac_cv_c_flexmember" >&6; } if test $ac_cv_c_flexmember = yes; then printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER /**/" >>confdefs.h else printf "%s\n" "#define FLEXIBLE_ARRAY_MEMBER 1" >>confdefs.h fi GL_GENERATE_FLOAT_H=false REPLACE_FLOAT_LDBL=0 case "$host_os" in aix* | beos* | openbsd* | mirbsd* | irix*) GL_GENERATE_FLOAT_H=true ;; freebsd* | dragonfly*) case "$host_cpu" in i[34567]86 ) GL_GENERATE_FLOAT_H=true ;; x86_64 ) # On x86_64 systems, the C compiler may still be generating # 32-bit code. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __x86_64__ || defined __amd64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : else $as_nop GL_GENERATE_FLOAT_H=true fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; esac ;; linux*) case "$host_cpu" in powerpc*) GL_GENERATE_FLOAT_H=true ;; esac ;; esac case "$host_os" in aix* | freebsd* | dragonfly* | linux*) if $GL_GENERATE_FLOAT_H; then REPLACE_FLOAT_LDBL=1 fi ;; esac REPLACE_ITOLD=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether conversion from 'int' to 'long double' works" >&5 printf %s "checking whether conversion from 'int' to 'long double' works... " >&6; } if test ${gl_cv_func_itold_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host" in sparc*-*-linux*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __LP64__ || defined __arch64__ int ok; #else error fail #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_itold_works="guessing no" else $as_nop gl_cv_func_itold_works="guessing yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext ;; # Guess yes on native Windows. mingw*) gl_cv_func_itold_works="guessing yes" ;; *) gl_cv_func_itold_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int i = -1; volatile long double ld; int main () { ld += i * 1.0L; if (ld > 0) return 1; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_itold_works=yes else $as_nop gl_cv_func_itold_works=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: $gl_cv_func_itold_works" >&5 printf "%s\n" "$gl_cv_func_itold_works" >&6; } case "$gl_cv_func_itold_works" in *no) REPLACE_ITOLD=1 GL_GENERATE_FLOAT_H=true ;; esac if $GL_GENERATE_FLOAT_H; then if test $gl_cv_have_include_next = yes; then gl_cv_next_float_h='<'float.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <float.h>" >&5 printf %s "checking absolute name of <float.h>... " >&6; } if test ${gl_cv_next_float_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'float.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_float_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_float_h gl_cv_next_float_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_float_h" >&5 printf "%s\n" "$gl_cv_next_float_h" >&6; } fi NEXT_FLOAT_H=$gl_cv_next_float_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'float.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_float_h fi NEXT_AS_FIRST_DIRECTIVE_FLOAT_H=$gl_next_as_first_directive fi case "$GL_GENERATE_FLOAT_H" in false) FLOAT_H='' ;; true) if test -z "$FLOAT_H"; then FLOAT_H="${gl_source_base_prefix}float.h" fi ;; *) echo "*** GL_GENERATE_FLOAT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_FLOAT_H; then GL_GENERATE_FLOAT_H_TRUE= GL_GENERATE_FLOAT_H_FALSE='#' else GL_GENERATE_FLOAT_H_TRUE='#' GL_GENERATE_FLOAT_H_FALSE= fi : if test -z "${GL_GENERATE_FLOAT_H_TRUE}" && test -z "${GL_GENERATE_FLOAT_H_FALSE}"; then GL_GENERATE_FLOAT_H_TRUE='#' GL_GENERATE_FLOAT_H_FALSE='#' fi if test $REPLACE_FLOAT_LDBL = 1; then GL_COND_OBJ_FLOAT_TRUE= GL_COND_OBJ_FLOAT_FALSE='#' else GL_COND_OBJ_FLOAT_TRUE='#' GL_COND_OBJ_FLOAT_FALSE= fi : if test -z "${GL_COND_OBJ_FLOAT_TRUE}" && test -z "${GL_COND_OBJ_FLOAT_FALSE}"; then GL_COND_OBJ_FLOAT_TRUE='#' GL_COND_OBJ_FLOAT_FALSE='#' fi if test $REPLACE_ITOLD = 1; then GL_COND_OBJ_ITOLD_TRUE= GL_COND_OBJ_ITOLD_FALSE='#' else GL_COND_OBJ_ITOLD_TRUE='#' GL_COND_OBJ_ITOLD_FALSE= fi : if test -z "${GL_COND_OBJ_ITOLD_TRUE}" && test -z "${GL_COND_OBJ_ITOLD_FALSE}"; then GL_COND_OBJ_ITOLD_TRUE='#' GL_COND_OBJ_ITOLD_FALSE='#' fi if test $ac_cv_func_flock = no; then HAVE_FLOCK=0 fi if test $HAVE_FLOCK = 0; then GL_COND_OBJ_FLOCK_TRUE= GL_COND_OBJ_FLOCK_FALSE='#' else GL_COND_OBJ_FLOCK_TRUE='#' GL_COND_OBJ_FLOCK_FALSE= fi : if test -z "${GL_COND_OBJ_FLOCK_TRUE}" && test -z "${GL_COND_OBJ_FLOCK_FALSE}"; then GL_COND_OBJ_FLOCK_TRUE='#' GL_COND_OBJ_FLOCK_FALSE='#' fi if test -z "$GL_COND_OBJ_FLOCK_TRUE"; then : ac_fn_c_check_member "$LINENO" "struct flock" "l_type" "ac_cv_member_struct_flock_l_type" "#include <fcntl.h> " if test "x$ac_cv_member_struct_flock_l_type" = xyes then : printf "%s\n" "#define HAVE_STRUCT_FLOCK_L_TYPE 1" >>confdefs.h fi fi GL_GNULIB_FLOCK=1 if test $REPLACE_FLOOR = 1; then GL_COND_OBJ_FLOOR_TRUE= GL_COND_OBJ_FLOOR_FALSE='#' else GL_COND_OBJ_FLOOR_TRUE='#' GL_COND_OBJ_FLOOR_FALSE= fi : if test -z "${GL_COND_OBJ_FLOOR_TRUE}" && test -z "${GL_COND_OBJ_FLOOR_FALSE}"; then GL_COND_OBJ_FLOOR_TRUE='#' GL_COND_OBJ_FLOOR_FALSE='#' fi GL_GNULIB_FLOOR=1 printf "%s\n" "#define GNULIB_TEST_FLOOR 1" >>confdefs.h case "$host_os" in mingw* | pw*) REPLACE_FOPEN=1 gl_cv_func_fopen_slash="guessing no" ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fopen recognizes a trailing slash" >&5 printf %s "checking whether fopen recognizes a trailing slash... " >&6; } if test ${gl_cv_func_fopen_slash+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_fopen_slash="guessing no" ;; *) gl_cv_func_fopen_slash="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <stdio.h> int main () { FILE *fp = fopen ("conftest.sl/", "w"); int result = (fp != NULL); if (fp != NULL) fclose (fp); return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_fopen_slash=yes else $as_nop gl_cv_func_fopen_slash=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.sl fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fopen_slash" >&5 printf "%s\n" "$gl_cv_func_fopen_slash" >&6; } ;; esac case "$gl_cv_func_fopen_slash" in *no) printf "%s\n" "#define FOPEN_TRAILING_SLASH_BUG 1" >>confdefs.h REPLACE_FOPEN=1 ;; esac if test $REPLACE_FOPEN = 1; then gl_LIBOBJS="$gl_LIBOBJS fopen.$ac_objext" : fi GL_GNULIB_FOPEN=1 printf "%s\n" "#define GNULIB_TEST_FOPEN 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fopen supports the mode character 'x'" >&5 printf %s "checking whether fopen supports the mode character 'x'... " >&6; } if test ${gl_cv_func_fopen_mode_x+y} then : printf %s "(cached) " >&6 else $as_nop rm -f conftest.x if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc and musl systems. linux*-gnu* | gnu* | kfreebsd*-gnu | *-musl*) gl_cv_func_fopen_mode_x="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fopen_mode_x="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <errno.h> int main () { FILE *fp; fp = fopen ("conftest.x", "w"); fclose (fp); fp = fopen ("conftest.x", "wx"); if (fp != NULL) /* 'x' ignored */ return 1; else if (errno == EEXIST) return 0; else /* 'x' rejected */ return 2; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_fopen_mode_x=yes else $as_nop gl_cv_func_fopen_mode_x=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.x fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fopen_mode_x" >&5 printf "%s\n" "$gl_cv_func_fopen_mode_x" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fopen supports the mode character 'e'" >&5 printf %s "checking whether fopen supports the mode character 'e'... " >&6; } if test ${gl_cv_func_fopen_mode_e+y} then : printf %s "(cached) " >&6 else $as_nop echo foo > conftest.x if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc and musl systems. linux*-gnu* | gnu* | kfreebsd*-gnu | *-musl*) gl_cv_func_fopen_mode_e="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_fopen_mode_e="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fopen_mode_e="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <errno.h> #include <fcntl.h> $gl_mda_defines int main () { FILE *fp = fopen ("conftest.x", "re"); if (fp != NULL) { if (fcntl (fileno (fp), F_GETFD) & FD_CLOEXEC) return 0; else /* 'e' ignored */ return 1; } else /* 'e' rejected */ return 2; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_fopen_mode_e=yes else $as_nop gl_cv_func_fopen_mode_e=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.x fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_fopen_mode_e" >&5 printf "%s\n" "$gl_cv_func_fopen_mode_e" >&6; } REPLACE_FOPEN_FOR_FOPEN_GNU="$REPLACE_FOPEN" case "$gl_cv_func_fopen_mode_x" in *no) REPLACE_FOPEN_FOR_FOPEN_GNU=1 ;; esac case "$gl_cv_func_fopen_mode_e" in *no) REPLACE_FOPEN_FOR_FOPEN_GNU=1 ;; esac if test $REPLACE_FOPEN_FOR_FOPEN_GNU = 1; then gl_LIBOBJS="$gl_LIBOBJS fopen.$ac_objext" : fi printf "%s\n" "#define GNULIB_FOPEN_GNU 1" >>confdefs.h fp_headers=' #include <stdio.h> #if HAVE_STDIO_EXT_H # include <stdio_ext.h> #endif ' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for __fpending" >&5 printf %s "checking for __fpending... " >&6; } if test ${gl_cv_func___fpending+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $fp_headers int main (void) { return ! __fpending (stdin); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func___fpending=yes else $as_nop gl_cv_func___fpending=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: $gl_cv_func___fpending" >&5 printf "%s\n" "$gl_cv_func___fpending" >&6; } if test $gl_cv_func___fpending = yes; then ac_fn_check_decl "$LINENO" "__fpending" "ac_cv_have_decl___fpending" "$fp_headers " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl___fpending" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL___FPENDING $ac_have_decl" >>confdefs.h fi if test $gl_cv_func___fpending = no; then GL_COND_OBJ_FPENDING_TRUE= GL_COND_OBJ_FPENDING_FALSE='#' else GL_COND_OBJ_FPENDING_TRUE='#' GL_COND_OBJ_FPENDING_FALSE= fi : if test -z "${GL_COND_OBJ_FPENDING_TRUE}" && test -z "${GL_COND_OBJ_FPENDING_FALSE}"; then GL_COND_OBJ_FPENDING_TRUE='#' GL_COND_OBJ_FPENDING_FALSE='#' fi gl_cv_func_fprintf_posix=no case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) # fprintf exists and is # already POSIX compliant. gl_cv_func_fprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_fprintf_posix = no; then case "$gl_cv_func_printf_infinite" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h ;; esac ;; esac case "$gl_cv_func_printf_directive_a" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes then : printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h fi ;; esac case "$gl_cv_func_printf_directive_f" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_directive_ls" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_grouping" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_leftadjust" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_zero" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_precision" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_enomem" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h ;; esac gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" if test $ac_cv_func_vasnprintf = yes; then printf "%s\n" "#define REPLACE_VASNPRINTF 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes then : else $as_nop printf "%s\n" "#define ptrdiff_t long" >>confdefs.h fi gl_LIBOBJS="$gl_LIBOBJS fprintf.$ac_objext" REPLACE_FPRINTF=1 printf "%s\n" "#define REPLACE_FPRINTF_POSIX 1" >>confdefs.h : fi GL_GNULIB_FPRINTF_POSIX=1 printf "%s\n" "#define GNULIB_TEST_FPRINTF_POSIX 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether free is known to preserve errno" >&5 printf %s "checking whether free is known to preserve errno... " >&6; } if test ${gl_cv_func_free_preserves_errno+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { #if 2 < __GLIBC__ + (33 <= __GLIBC_MINOR__) #elif defined __OpenBSD__ #elif defined __sun #else #error "'free' is not known to preserve errno" #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_free_preserves_errno=yes else $as_nop gl_cv_func_free_preserves_errno=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: $gl_cv_func_free_preserves_errno" >&5 printf "%s\n" "$gl_cv_func_free_preserves_errno" >&6; } case $gl_cv_func_free_preserves_errno in *yes) printf "%s\n" "#define HAVE_FREE_POSIX 1" >>confdefs.h ;; *) REPLACE_FREE=1 ;; esac if test $REPLACE_FREE = 1; then GL_COND_OBJ_FREE_TRUE= GL_COND_OBJ_FREE_FALSE='#' else GL_COND_OBJ_FREE_TRUE='#' GL_COND_OBJ_FREE_FALSE= fi : if test -z "${GL_COND_OBJ_FREE_TRUE}" && test -z "${GL_COND_OBJ_FREE_FALSE}"; then GL_COND_OBJ_FREE_TRUE='#' GL_COND_OBJ_FREE_FALSE='#' fi if test -z "$GL_COND_OBJ_FREE_TRUE"; then : : fi GL_GNULIB_FREE_POSIX=1 printf "%s\n" "#define GNULIB_TEST_FREE_POSIX 1" >>confdefs.h if test $gl_cv_func_frexp_no_libm = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether frexp works" >&5 printf %s "checking whether frexp works... " >&6; } if test ${gl_cv_func_frexp_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;; mingw*) # Guess yes with MSVC, no with mingw. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Good #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Good" >/dev/null 2>&1 then : gl_cv_func_frexp_works="guessing yes" else $as_nop gl_cv_func_frexp_works="guessing no" fi rm -rf conftest* ;; *) gl_cv_func_frexp_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <math.h> #include <string.h> #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. ICC 10.0 has a bug when optimizing the expression -zero. The expression -DBL_MIN * DBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static double compute_minus_zero (void) { return -DBL_MIN * DBL_MIN; } # define minus_zero compute_minus_zero () #else double minus_zero = -0.0; #endif int main() { int result = 0; int i; volatile double x; double zero = 0.0; #if HAVE_DECL_ALARM /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite number. Let the test fail in this case. */ signal (SIGALRM, SIG_DFL); alarm (5); #endif /* Test on denormalized numbers. */ for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) ; if (x > 0.0) { int exp; double y = frexp (x, &exp); /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. On NetBSD: y = 0.75. Correct: y = 0.5. */ if (y != 0.5) result |= 1; } /* Test on infinite numbers. */ x = 1.0 / zero; { int exp; double y = frexp (x, &exp); if (y != x) result |= 2; } /* Test on negative zero. */ x = minus_zero; { int exp; double y = frexp (x, &exp); if (memcmp (&y, &x, sizeof x)) result |= 4; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_frexp_works=yes else $as_nop gl_cv_func_frexp_works=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: $gl_cv_func_frexp_works" >&5 printf "%s\n" "$gl_cv_func_frexp_works" >&6; } case "$gl_cv_func_frexp_works" in *yes) gl_func_frexp_no_libm=yes ;; *) gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;; esac else gl_func_frexp_no_libm=no REPLACE_FREXP=1 fi if test $gl_func_frexp_no_libm = yes; then printf "%s\n" "#define HAVE_FREXP_IN_LIBC 1" >>confdefs.h fi if test $gl_func_frexp_no_libm != yes; then gl_LIBOBJS="$gl_LIBOBJS frexp.$ac_objext" fi GL_GNULIB_FREXP=1 printf "%s\n" "#define GNULIB_TEST_FREXP 1" >>confdefs.h ac_fn_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_frexpl" = xyes then : else $as_nop HAVE_DECL_FREXPL=0 fi if test $HAVE_DECL_FREXPL = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used without linking with libm" >&5 printf %s "checking whether frexpl() can be used without linking with libm... " >&6; } if test ${gl_cv_func_frexpl_no_libm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> long double x; int main (void) { int e; return frexpl (x, &e) > 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_frexpl_no_libm=yes else $as_nop gl_cv_func_frexpl_no_libm=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: $gl_cv_func_frexpl_no_libm" >&5 printf "%s\n" "$gl_cv_func_frexpl_no_libm" >&6; } if test $gl_cv_func_frexpl_no_libm = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether frexpl works" >&5 printf %s "checking whether frexpl works... " >&6; } if test ${gl_cv_func_frexpl_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*) gl_cv_func_frexpl_works="guessing no";; *) gl_cv_func_frexpl_works="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif extern #ifdef __cplusplus "C" #endif long double frexpl (long double, int *); long double zero = 0.0L; int main() { int result = 0; volatile long double x; /* Test on finite numbers that fails on AIX 5.1. */ x = 16.0L; { int exp = -9999; frexpl (x, &exp); if (exp != 5) result |= 1; } /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl function returns an invalid (incorrectly normalized) value: it returns y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } but the correct result is 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ x = 1.01L; { int exp = -9999; long double y = frexpl (x, &exp); if (!(exp == 1 && y == 0.505L)) result |= 2; } /* Test on large finite numbers. This fails on BeOS at i = 16322, while LDBL_MAX_EXP = 16384. In the loop end test, we test x against Infinity, rather than comparing i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */ { int i; for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) { int exp = -9999; frexpl (x, &exp); if (exp != i) { result |= 4; break; } } } /* Test on denormalized numbers. */ { int i; for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) ; if (x > 0.0L) { int exp; long double y = frexpl (x, &exp); /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */ if (exp != LDBL_MIN_EXP - 1) result |= 8; } } /* Test on infinite numbers. */ /* The Microsoft MSVC 14 compiler chokes on the expression 1.0 / 0.0. */ x = 1.0L / zero; { int exp; long double y = frexpl (x, &exp); if (y != x) result |= 16; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_frexpl_works=yes else $as_nop gl_cv_func_frexpl_works=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: $gl_cv_func_frexpl_works" >&5 printf "%s\n" "$gl_cv_func_frexpl_works" >&6; } case "$gl_cv_func_frexpl_works" in *yes) gl_func_frexpl_no_libm=yes ;; *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; esac else gl_func_frexpl_no_libm=no REPLACE_FREXPL=1 fi if test $gl_func_frexpl_no_libm = yes; then printf "%s\n" "#define HAVE_FREXPL_IN_LIBC 1" >>confdefs.h fi fi if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; then gl_LIBOBJS="$gl_LIBOBJS frexpl.$ac_objext" fi GL_GNULIB_FREXPL=1 printf "%s\n" "#define GNULIB_TEST_FREXPL 1" >>confdefs.h if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then REPLACE_FSEEK=1 fi if test $REPLACE_FSEEK = 1; then GL_COND_OBJ_FSEEK_TRUE= GL_COND_OBJ_FSEEK_FALSE='#' else GL_COND_OBJ_FSEEK_TRUE='#' GL_COND_OBJ_FSEEK_FALSE= fi : if test -z "${GL_COND_OBJ_FSEEK_TRUE}" && test -z "${GL_COND_OBJ_FSEEK_FALSE}"; then GL_COND_OBJ_FSEEK_TRUE='#' GL_COND_OBJ_FSEEK_FALSE='#' fi GL_GNULIB_FSEEK=1 printf "%s\n" "#define GNULIB_TEST_FSEEK 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for fseeko" >&5 printf %s "checking for fseeko... " >&6; } if test ${gl_cv_func_fseeko+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int main (void) { fseeko (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_fseeko=yes else $as_nop gl_cv_func_fseeko=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: $gl_cv_func_fseeko" >&5 printf "%s\n" "$gl_cv_func_fseeko" >&6; } if test $ac_cv_have_decl_fseeko = no; then HAVE_DECL_FSEEKO=0 fi if test $gl_cv_func_fseeko = no; then HAVE_FSEEKO=0 else if test $WINDOWS_64_BIT_OFF_T = 1; then REPLACE_FSEEKO=1 fi if test $gl_cv_var_stdin_large_offset = no; then REPLACE_FSEEKO=1 fi fi if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then GL_COND_OBJ_FSEEKO_TRUE= GL_COND_OBJ_FSEEKO_FALSE='#' else GL_COND_OBJ_FSEEKO_TRUE='#' GL_COND_OBJ_FSEEKO_FALSE= fi : if test -z "${GL_COND_OBJ_FSEEKO_TRUE}" && test -z "${GL_COND_OBJ_FSEEKO_FALSE}"; then GL_COND_OBJ_FSEEKO_TRUE='#' GL_COND_OBJ_FSEEKO_FALSE='#' fi if test -z "$GL_COND_OBJ_FSEEKO_TRUE"; then : ac_fn_c_check_func "$LINENO" "_fseeki64" "ac_cv_func__fseeki64" if test "x$ac_cv_func__fseeki64" = xyes then : printf "%s\n" "#define HAVE__FSEEKI64 1" >>confdefs.h fi if test $ac_cv_func__fseeki64 = yes; then ac_fn_check_decl "$LINENO" "_fseeki64" "ac_cv_have_decl__fseeki64" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl__fseeki64" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL__FSEEKI64 $ac_have_decl" >>confdefs.h fi fi GL_GNULIB_FSEEKO=1 printf "%s\n" "#define GNULIB_TEST_FSEEKO 1" >>confdefs.h if test $ac_cv_func___fseterr = no; then GL_COND_OBJ_FSETERR_TRUE= GL_COND_OBJ_FSETERR_FALSE='#' else GL_COND_OBJ_FSETERR_TRUE='#' GL_COND_OBJ_FSETERR_FALSE= fi : if test -z "${GL_COND_OBJ_FSETERR_TRUE}" && test -z "${GL_COND_OBJ_FSETERR_FALSE}"; then GL_COND_OBJ_FSETERR_TRUE='#' GL_COND_OBJ_FSETERR_FALSE='#' fi case "$host_os" in mingw* | solaris*) REPLACE_FSTAT=1 ;; esac if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then case "$gl_cv_func_open_directory_works" in *yes) ;; *) REPLACE_FSTAT=1 ;; esac fi if test $REPLACE_FSTAT = 1; then GL_COND_OBJ_FSTAT_TRUE= GL_COND_OBJ_FSTAT_FALSE='#' else GL_COND_OBJ_FSTAT_TRUE='#' GL_COND_OBJ_FSTAT_FALSE= fi : if test -z "${GL_COND_OBJ_FSTAT_TRUE}" && test -z "${GL_COND_OBJ_FSTAT_FALSE}"; then GL_COND_OBJ_FSTAT_TRUE='#' GL_COND_OBJ_FSTAT_FALSE='#' fi if test -z "$GL_COND_OBJ_FSTAT_TRUE"; then : case "$host_os" in mingw*) gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext" ;; esac : fi GL_GNULIB_FSTAT=1 printf "%s\n" "#define GNULIB_TEST_FSTAT 1" >>confdefs.h if test $ac_cv_func_fstatat = no; then HAVE_FSTATAT=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether fstatat (..., 0) works" >&5 printf %s "checking whether fstatat (..., 0) works... " >&6; } if test ${gl_cv_func_fstatat_zero_flag+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in aix*) gl_cv_func_fstatat_zero_flag="guessing no";; *) gl_cv_func_fstatat_zero_flag="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> #include <sys/stat.h> int main (void) { struct stat a; return fstatat (AT_FDCWD, ".", &a, 0) != 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_fstatat_zero_flag=yes else $as_nop gl_cv_func_fstatat_zero_flag=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: $gl_cv_func_fstatat_zero_flag" >&5 printf "%s\n" "$gl_cv_func_fstatat_zero_flag" >&6; } case $gl_cv_func_fstatat_zero_flag+$gl_cv_func_lstat_dereferences_slashed_symlink in *yes+*yes) ;; *) REPLACE_FSTATAT=1 ;; esac case $host_os in solaris*) REPLACE_FSTATAT=1 ;; esac case $REPLACE_FSTATAT,$gl_cv_func_fstatat_zero_flag in 1,*yes) printf "%s\n" "#define HAVE_WORKING_FSTATAT_ZERO_FLAG 1" >>confdefs.h ;; esac fi if test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1; then GL_COND_OBJ_FSTATAT_TRUE= GL_COND_OBJ_FSTATAT_FALSE='#' else GL_COND_OBJ_FSTATAT_TRUE='#' GL_COND_OBJ_FSTATAT_FALSE= fi : if test -z "${GL_COND_OBJ_FSTATAT_TRUE}" && test -z "${GL_COND_OBJ_FSTATAT_FALSE}"; then GL_COND_OBJ_FSTATAT_TRUE='#' GL_COND_OBJ_FSTATAT_FALSE='#' fi GL_GNULIB_FSTATAT=1 printf "%s\n" "#define GNULIB_TEST_FSTATAT 1" >>confdefs.h if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then REPLACE_FTELL=1 fi if test $REPLACE_FTELL = 1; then GL_COND_OBJ_FTELL_TRUE= GL_COND_OBJ_FTELL_FALSE='#' else GL_COND_OBJ_FTELL_TRUE='#' GL_COND_OBJ_FTELL_FALSE= fi : if test -z "${GL_COND_OBJ_FTELL_TRUE}" && test -z "${GL_COND_OBJ_FTELL_FALSE}"; then GL_COND_OBJ_FTELL_TRUE='#' GL_COND_OBJ_FTELL_FALSE='#' fi GL_GNULIB_FTELL=1 printf "%s\n" "#define GNULIB_TEST_FTELL 1" >>confdefs.h if test $ac_cv_have_decl_ftello = no; then HAVE_DECL_FTELLO=0 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ftello" >&5 printf %s "checking for ftello... " >&6; } if test ${gl_cv_func_ftello+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int main (void) { ftello (stdin); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_ftello=yes else $as_nop gl_cv_func_ftello=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: $gl_cv_func_ftello" >&5 printf "%s\n" "$gl_cv_func_ftello" >&6; } if test $gl_cv_func_ftello = no; then HAVE_FTELLO=0 else if test $WINDOWS_64_BIT_OFF_T = 1; then REPLACE_FTELLO=1 fi if test $gl_cv_var_stdin_large_offset = no; then REPLACE_FTELLO=1 fi if test $REPLACE_FTELLO = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ftello works" >&5 printf %s "checking whether ftello works... " >&6; } if test ${gl_cv_func_ftello_works+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_ftello_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ftello_works="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_ftello_works="guessing yes" ;; esac if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <stdlib.h> #include <string.h> #define TESTFILE "conftest.tmp" int main (void) { FILE *fp; /* Create a file with some contents. */ fp = fopen (TESTFILE, "w"); if (fp == NULL) return 70; if (fwrite ("foogarsh", 1, 8, fp) < 8) { fclose (fp); return 71; } if (fclose (fp)) return 72; /* The file's contents is now "foogarsh". */ /* Try writing after reading to EOF. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) return 73; if (fseek (fp, -1, SEEK_END)) { fclose (fp); return 74; } if (!(getc (fp) == 'h')) { fclose (fp); return 1; } if (!(getc (fp) == EOF)) { fclose (fp); return 2; } if (!(ftell (fp) == 8)) { fclose (fp); return 3; } if (!(ftell (fp) == 8)) { fclose (fp); return 4; } if (!(putc ('!', fp) == '!')) { fclose (fp); return 5; } if (!(ftell (fp) == 9)) { fclose (fp); return 6; } if (!(fclose (fp) == 0)) return 7; fp = fopen (TESTFILE, "r"); if (fp == NULL) return 75; { char buf[10]; if (!(fread (buf, 1, 10, fp) == 9)) { fclose (fp); return 10; } if (!(memcmp (buf, "foogarsh!", 9) == 0)) { fclose (fp); return 11; } } if (!(fclose (fp) == 0)) return 12; /* The file's contents is now "foogarsh!". */ return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_ftello_works=yes else $as_nop gl_cv_func_ftello_works=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: $gl_cv_func_ftello_works" >&5 printf "%s\n" "$gl_cv_func_ftello_works" >&6; } case "$gl_cv_func_ftello_works" in *yes) ;; *) REPLACE_FTELLO=1 printf "%s\n" "#define FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE 1" >>confdefs.h ;; esac fi if test $REPLACE_FTELLO = 0; then if test $gl_ftello_broken_after_ungetc = yes; then REPLACE_FTELLO=1 printf "%s\n" "#define FTELLO_BROKEN_AFTER_UNGETC 1" >>confdefs.h fi fi fi if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then GL_COND_OBJ_FTELLO_TRUE= GL_COND_OBJ_FTELLO_FALSE='#' else GL_COND_OBJ_FTELLO_TRUE='#' GL_COND_OBJ_FTELLO_FALSE= fi : if test -z "${GL_COND_OBJ_FTELLO_TRUE}" && test -z "${GL_COND_OBJ_FTELLO_FALSE}"; then GL_COND_OBJ_FTELLO_TRUE='#' GL_COND_OBJ_FTELLO_FALSE='#' fi if test -z "$GL_COND_OBJ_FTELLO_TRUE"; then : ac_fn_c_check_func "$LINENO" "_ftelli64" "ac_cv_func__ftelli64" if test "x$ac_cv_func__ftelli64" = xyes then : printf "%s\n" "#define HAVE__FTELLI64 1" >>confdefs.h fi fi GL_GNULIB_FTELLO=1 printf "%s\n" "#define GNULIB_TEST_FTELLO 1" >>confdefs.h if test $ac_cv_func___fwriting = no; then GL_COND_OBJ_FWRITING_TRUE= GL_COND_OBJ_FWRITING_FALSE='#' else GL_COND_OBJ_FWRITING_TRUE='#' GL_COND_OBJ_FWRITING_FALSE= fi : if test -z "${GL_COND_OBJ_FWRITING_TRUE}" && test -z "${GL_COND_OBJ_FWRITING_FALSE}"; then GL_COND_OBJ_FWRITING_TRUE='#' GL_COND_OBJ_FWRITING_FALSE='#' fi gl_abort_bug=no case "$host_os" in mingw*) gl_cv_func_getcwd_path_max=yes ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getcwd handles long file names properly" >&5 printf %s "checking whether getcwd handles long file names properly... " >&6; } if test ${gl_cv_func_getcwd_path_max+y} then : printf %s "(cached) " >&6 else $as_nop # Arrange for deletion of the temporary directory this test creates. ac_clean_files="$ac_clean_files confdir3" if test "$cross_compiling" = yes then : # Cross-compilation guesses: case "$host_os" in aix*) # On AIX, it has the AIX bug. gl_cv_func_getcwd_path_max='guessing no, it has the AIX bug' ;; gnu*) # On Hurd, it is 'yes'. gl_cv_func_getcwd_path_max='guessing yes' ;; linux* | kfreebsd*) # On older Linux+glibc it's 'no, but it is partly working', # on newer Linux+glibc it's 'yes'. # On Linux+musl libc, it's 'no, but it is partly working'. # On kFreeBSD+glibc, it's 'no, but it is partly working'. gl_cv_func_getcwd_path_max='guessing no, but it is partly working' ;; *) # If we don't know, obey --enable-cross-guesses. gl_cv_func_getcwd_path_max="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <stdlib.h> #if HAVE_UNISTD_H # include <unistd.h> #else # include <direct.h> #endif #include <string.h> #include <limits.h> #include <sys/stat.h> #include <sys/types.h> #include <fcntl.h> /* Arrange to define PATH_MAX, like "pathmax.h" does. */ #if HAVE_UNISTD_H # include <unistd.h> #endif #include <limits.h> #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifdef __hpux # undef PATH_MAX # define PATH_MAX 1024 #endif #if defined _WIN32 && ! defined __CYGWIN__ # undef PATH_MAX # define PATH_MAX 260 #endif #ifndef AT_FDCWD # define AT_FDCWD 0 #endif #ifdef ENAMETOOLONG # define is_ENAMETOOLONG(x) ((x) == ENAMETOOLONG) #else # define is_ENAMETOOLONG(x) 0 #endif /* Use the getcwd function, not any macro. */ #undef getcwd $gl_mda_defines #ifndef S_IRWXU # define S_IRWXU 0700 #endif /* The length of this name must be 8. */ #define DIR_NAME "confdir3" #define DIR_NAME_LEN 8 #define DIR_NAME_SIZE (DIR_NAME_LEN + 1) /* The length of "../". */ #define DOTDOTSLASH_LEN 3 /* Leftover bytes in the buffer, to work around library or OS bugs. */ #define BUF_SLOP 20 int main () { #ifndef PATH_MAX /* The Hurd doesn't define this, so getcwd can't exhibit the bug -- at least not on a local file system. And if we were to start worrying about remote file systems, we'd have to enable the wrapper function all of the time, just to be safe. That's not worth the cost. */ exit (0); #elif ((INT_MAX / (DIR_NAME_SIZE / DOTDOTSLASH_LEN + 1) \ - DIR_NAME_SIZE - BUF_SLOP) \ <= PATH_MAX) /* FIXME: Assuming there's a system for which this is true, this should be done in a compile test. */ exit (0); #else char buf[PATH_MAX * (DIR_NAME_SIZE / DOTDOTSLASH_LEN + 1) + DIR_NAME_SIZE + BUF_SLOP]; char *cwd = getcwd (buf, PATH_MAX); size_t initial_cwd_len; size_t cwd_len; int fail = 0; size_t n_chdirs = 0; if (cwd == NULL) exit (10); cwd_len = initial_cwd_len = strlen (cwd); while (1) { size_t dotdot_max = PATH_MAX * (DIR_NAME_SIZE / DOTDOTSLASH_LEN); char *c = NULL; cwd_len += DIR_NAME_SIZE; /* If mkdir or chdir fails, it could be that this system cannot create any file with an absolute name longer than PATH_MAX, such as cygwin. If so, leave fail as 0, because the current working directory can't be too long for getcwd if it can't even be created. On Linux with the 9p file system, mkdir fails with error EINVAL when cwd_len gets too long; ignore this failure because the getcwd() system call produces good results whereas the gnulib substitute calls getdents64 which fails with error EPROTO. For other errors, be pessimistic and consider that as a failure, too. */ if (mkdir (DIR_NAME, S_IRWXU) < 0 || chdir (DIR_NAME) < 0) { if (! (errno == ERANGE || is_ENAMETOOLONG (errno))) #ifdef __linux__ if (! (errno == EINVAL)) #endif fail = 20; break; } if (PATH_MAX <= cwd_len && cwd_len < PATH_MAX + DIR_NAME_SIZE) { struct stat sb; c = getcwd (buf, PATH_MAX); if (!c && errno == ENOENT) { fail = 11; break; } if (c) { fail = 31; break; } if (! (errno == ERANGE || is_ENAMETOOLONG (errno))) { fail = 21; break; } /* Our replacement needs to be able to stat() long ../../paths, so generate a path larger than PATH_MAX to check, avoiding the replacement if we can't stat(). */ c = getcwd (buf, cwd_len + 1); if (c && !AT_FDCWD && stat (c, &sb) != 0 && is_ENAMETOOLONG (errno)) { fail = 32; break; } } if (dotdot_max <= cwd_len - initial_cwd_len) { if (dotdot_max + DIR_NAME_SIZE < cwd_len - initial_cwd_len) break; c = getcwd (buf, cwd_len + 1); if (!c) { if (! (errno == ERANGE || errno == ENOENT || is_ENAMETOOLONG (errno))) { fail = 22; break; } if (AT_FDCWD || errno == ERANGE || errno == ENOENT) { fail = 12; break; } } } if (c && strlen (c) != cwd_len) { fail = 23; break; } ++n_chdirs; } /* Leaving behind such a deep directory is not polite. So clean up here, right away, even though the driving shell script would also clean up. */ { size_t i; /* Try rmdir first, in case the chdir failed. */ rmdir (DIR_NAME); for (i = 0; i <= n_chdirs; i++) { if (chdir ("..") < 0) break; if (rmdir (DIR_NAME) != 0) break; } } exit (fail); #endif } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getcwd_path_max=yes else $as_nop case $? in 10|11|12) gl_cv_func_getcwd_path_max='no, but it is partly working';; 31) gl_cv_func_getcwd_path_max='no, it has the AIX bug';; 32) gl_cv_func_getcwd_path_max='yes, but with shorter paths';; *) gl_cv_func_getcwd_path_max=no;; esac 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: $gl_cv_func_getcwd_path_max" >&5 printf "%s\n" "$gl_cv_func_getcwd_path_max" >&6; } case "$gl_cv_func_getcwd_null" in *yes) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpagesize" >&5 printf %s "checking for getpagesize... " >&6; } if test ${gl_cv_func_getpagesize+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> int main (void) { return getpagesize(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_getpagesize=yes else $as_nop gl_cv_func_getpagesize=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: $gl_cv_func_getpagesize" >&5 printf "%s\n" "$gl_cv_func_getpagesize" >&6; } if test $gl_cv_func_getpagesize = yes; then printf "%s\n" "#define HAVE_GETPAGESIZE 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getcwd succeeds when 4k < cwd_length < 16k" >&5 printf %s "checking whether getcwd succeeds when 4k < cwd_length < 16k... " >&6; } if test ${gl_cv_func_getcwd_succeeds_beyond_4k+y} then : printf %s "(cached) " >&6 else $as_nop # Remove any remnants of a previous test. rm -rf confdir-14B--- # Arrange for deletion of the temporary directory this test creates. ac_clean_files="$ac_clean_files confdir-14B---" if test "$cross_compiling" = yes then : case "$host_os" in # Guess no otherwise, even on glibc systems and musl systems. *) gl_cv_func_getcwd_succeeds_beyond_4k="guessing no" esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <stdlib.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <direct.h> #endif #include <string.h> #include <sys/stat.h> /* Arrange to define PATH_MAX, like "pathmax.h" does. */ #if HAVE_UNISTD_H # include <unistd.h> #endif #include <limits.h> #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifdef __hpux # undef PATH_MAX # define PATH_MAX 1024 #endif #if defined _WIN32 && ! defined __CYGWIN__ # undef PATH_MAX # define PATH_MAX 260 #endif $gl_mda_defines #ifndef S_IRWXU # define S_IRWXU 0700 #endif /* FIXME: skip the run-test altogether on systems without getpagesize. */ #if ! HAVE_GETPAGESIZE # define getpagesize() 0 #endif /* This size is chosen to be larger than PATH_MAX (4k), yet smaller than the 16kB pagesize on ia64 linux. Those conditions make the code below trigger a bug in glibc's getcwd implementation before 2.4.90-10. */ #define TARGET_LEN (5 * 1024) int main () { char *cwd; size_t initial_cwd_len; int fail = 0; /* The bug is triggered when PATH_MAX < getpagesize (), so skip this relatively expensive and invasive test if that's not true. */ #ifdef PATH_MAX int bug_possible = PATH_MAX < getpagesize (); #else int bug_possible = 0; #endif if (! bug_possible) return 0; cwd = getcwd (NULL, 0); if (cwd == NULL) return 2; initial_cwd_len = strlen (cwd); free (cwd); if (1) { static char const dir_name[] = "confdir-14B---"; size_t desired_depth = ((TARGET_LEN - 1 - initial_cwd_len) / sizeof dir_name); size_t d; for (d = 0; d < desired_depth; d++) { if (mkdir (dir_name, S_IRWXU) < 0 || chdir (dir_name) < 0) { if (! (errno == ERANGE || errno == ENAMETOOLONG || errno == ENOENT)) fail = 3; /* Unable to construct deep hierarchy. */ break; } } /* If libc has the bug in question, this invocation of getcwd results in a failed assertion. */ cwd = getcwd (NULL, 0); if (cwd == NULL) fail = 4; /* getcwd didn't assert, but it failed for a long name where the answer could have been learned. */ free (cwd); /* Call rmdir first, in case the above chdir failed. */ rmdir (dir_name); while (0 < d--) { if (chdir ("..") < 0) { fail = 5; break; } rmdir (dir_name); } } return fail; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getcwd_succeeds_beyond_4k=yes else $as_nop ret=$? if test $ret -ge 128 || test $ret = 4; then gl_cv_func_getcwd_succeeds_beyond_4k=no else gl_cv_func_getcwd_succeeds_beyond_4k=yes fi 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: $gl_cv_func_getcwd_succeeds_beyond_4k" >&5 printf "%s\n" "$gl_cv_func_getcwd_succeeds_beyond_4k" >&6; } case "$gl_cv_func_getcwd_succeeds_beyond_4k" in *no) gl_abort_bug=yes ;; *) ;; esac ;; esac ;; esac case "$gl_cv_func_getcwd_path_max" in *"no" | *"no, it has the AIX bug") ;; *) printf "%s\n" "#define HAVE_MINIMALLY_WORKING_GETCWD 1" >>confdefs.h ;; esac case "$gl_cv_func_getcwd_path_max" in *"no, but it is partly working") printf "%s\n" "#define HAVE_PARTLY_WORKING_GETCWD 1" >>confdefs.h ;; *"yes, but with shorter paths") printf "%s\n" "#define HAVE_GETCWD_SHORTER 1" >>confdefs.h ;; esac if { case "$gl_cv_func_getcwd_null" in *yes) false;; *) true;; esac; } \ || test $gl_cv_func_getcwd_posix_signature != yes \ || { case "$gl_cv_func_getcwd_path_max" in *yes*) false;; *) true;; esac; } \ || test $gl_abort_bug = yes; then REPLACE_GETCWD=1 fi if test $REPLACE_GETCWD = 1; then GL_COND_OBJ_GETCWD_TRUE= GL_COND_OBJ_GETCWD_FALSE='#' else GL_COND_OBJ_GETCWD_TRUE='#' GL_COND_OBJ_GETCWD_FALSE= fi : if test -z "${GL_COND_OBJ_GETCWD_TRUE}" && test -z "${GL_COND_OBJ_GETCWD_FALSE}"; then GL_COND_OBJ_GETCWD_TRUE='#' GL_COND_OBJ_GETCWD_FALSE='#' fi if test -z "$GL_COND_OBJ_GETCWD_TRUE"; then : : fi printf "%s\n" "#define GNULIB_GETCWD 1" >>confdefs.h GL_GNULIB_GETCWD=1 printf "%s\n" "#define GNULIB_TEST_GETCWD 1" >>confdefs.h case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_posix_signature in *yes,yes) ;; *) REPLACE_GETCWD=1 ;; esac if test $REPLACE_GETCWD = 1; then GL_COND_OBJ_GETCWD_LGPL_TRUE= GL_COND_OBJ_GETCWD_LGPL_FALSE='#' else GL_COND_OBJ_GETCWD_LGPL_TRUE='#' GL_COND_OBJ_GETCWD_LGPL_FALSE= fi : if test -z "${GL_COND_OBJ_GETCWD_LGPL_TRUE}" && test -z "${GL_COND_OBJ_GETCWD_LGPL_FALSE}"; then GL_COND_OBJ_GETCWD_LGPL_TRUE='#' GL_COND_OBJ_GETCWD_LGPL_FALSE='#' fi GL_GNULIB_GETCWD=1 printf "%s\n" "#define GNULIB_TEST_GETCWD 1" >>confdefs.h if test $ac_cv_func_getdelim = yes; then HAVE_GETDELIM=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working getdelim function" >&5 printf %s "checking for working getdelim function... " >&6; } if test ${gl_cv_func_working_getdelim+y} then : printf %s "(cached) " >&6 else $as_nop echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1 then : gl_cv_func_working_getdelim="guessing yes" else $as_nop case "$host_os" in *-musl*) gl_cv_func_working_getdelim="guessing yes" ;; *) gl_cv_func_working_getdelim="$gl_cross_guess_normal" ;; esac fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getdelim (&line, &siz, '\n', in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getdelim (&line, &siz, '\n', in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_working_getdelim=yes else $as_nop gl_cv_func_working_getdelim=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: $gl_cv_func_working_getdelim" >&5 printf "%s\n" "$gl_cv_func_working_getdelim" >&6; } case "$gl_cv_func_working_getdelim" in *yes) ;; *) REPLACE_GETDELIM=1 ;; esac else HAVE_GETDELIM=0 fi if test $ac_cv_have_decl_getdelim = no; then HAVE_DECL_GETDELIM=0 fi if test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1; then GL_COND_OBJ_GETDELIM_TRUE= GL_COND_OBJ_GETDELIM_FALSE='#' else GL_COND_OBJ_GETDELIM_TRUE='#' GL_COND_OBJ_GETDELIM_FALSE= fi : if test -z "${GL_COND_OBJ_GETDELIM_TRUE}" && test -z "${GL_COND_OBJ_GETDELIM_FALSE}"; then GL_COND_OBJ_GETDELIM_TRUE='#' GL_COND_OBJ_GETDELIM_FALSE='#' fi if test -z "$GL_COND_OBJ_GETDELIM_TRUE"; then : ac_fn_c_check_func "$LINENO" "flockfile" "ac_cv_func_flockfile" if test "x$ac_cv_func_flockfile" = xyes then : printf "%s\n" "#define HAVE_FLOCKFILE 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "funlockfile" "ac_cv_func_funlockfile" if test "x$ac_cv_func_funlockfile" = xyes then : printf "%s\n" "#define HAVE_FUNLOCKFILE 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "getc_unlocked" "ac_cv_have_decl_getc_unlocked" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_getc_unlocked" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_GETC_UNLOCKED $ac_have_decl" >>confdefs.h fi GL_GNULIB_GETDELIM=1 printf "%s\n" "#define GNULIB_TEST_GETDELIM 1" >>confdefs.h if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getdtablesize works" >&5 printf %s "checking whether getdtablesize works... " >&6; } if test ${gl_cv_func_getdtablesize_works+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; *) if test "$cross_compiling" = yes then : case "$host_os" in cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows gl_cv_func_getdtablesize_works="guessing no" ;; *) gl_cv_func_getdtablesize_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> $gl_mda_defines int main (void) { int size = getdtablesize(); if (dup2 (0, getdtablesize()) != -1) return 1; if (size != getdtablesize()) return 2; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getdtablesize_works=yes else $as_nop gl_cv_func_getdtablesize_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getdtablesize_works" >&5 printf "%s\n" "$gl_cv_func_getdtablesize_works" >&6; } case "$gl_cv_func_getdtablesize_works" in *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else HAVE_GETDTABLESIZE=0 fi if test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1; then GL_COND_OBJ_GETDTABLESIZE_TRUE= GL_COND_OBJ_GETDTABLESIZE_FALSE='#' else GL_COND_OBJ_GETDTABLESIZE_TRUE='#' GL_COND_OBJ_GETDTABLESIZE_FALSE= fi : if test -z "${GL_COND_OBJ_GETDTABLESIZE_TRUE}" && test -z "${GL_COND_OBJ_GETDTABLESIZE_FALSE}"; then GL_COND_OBJ_GETDTABLESIZE_TRUE='#' GL_COND_OBJ_GETDTABLESIZE_FALSE='#' fi if test -z "$GL_COND_OBJ_GETDTABLESIZE_TRUE"; then : : fi GL_GNULIB_GETDTABLESIZE=1 printf "%s\n" "#define GNULIB_TEST_GETDTABLESIZE 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "getgroups" "ac_cv_func_getgroups" if test "x$ac_cv_func_getgroups" = xyes then : fi # If we don't yet have getgroups, see if it's in -lbsd. # This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1. ac_save_LIBS=$LIBS if test $ac_cv_func_getgroups = no; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getgroups in -lbsd" >&5 printf %s "checking for getgroups in -lbsd... " >&6; } if test ${ac_cv_lib_bsd_getgroups+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lbsd $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 getgroups (); int main (void) { return getgroups (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_bsd_getgroups=yes else $as_nop ac_cv_lib_bsd_getgroups=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_bsd_getgroups" >&5 printf "%s\n" "$ac_cv_lib_bsd_getgroups" >&6; } if test "x$ac_cv_lib_bsd_getgroups" = xyes then : GETGROUPS_LIB=-lbsd fi fi # Run the program to test the functionality of the system-supplied # getgroups function only if there is such a function. if test $ac_cv_func_getgroups = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working getgroups" >&5 printf %s "checking for working getgroups... " >&6; } if test ${ac_cv_func_getgroups_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # (( # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_getgroups_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) ac_cv_func_getgroups_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_getgroups_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { /* On NeXTstep 3.2, getgroups (0, 0) always fails. */ return getgroups (0, 0) == -1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_getgroups_works=yes else $as_nop ac_cv_func_getgroups_works=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: $ac_cv_func_getgroups_works" >&5 printf "%s\n" "$ac_cv_func_getgroups_works" >&6; } else ac_cv_func_getgroups_works=no fi case "$ac_cv_func_getgroups_works" in *yes) printf "%s\n" "#define HAVE_GETGROUPS 1" >>confdefs.h ;; esac LIBS=$ac_save_LIBS if test $ac_cv_func_getgroups != yes; then HAVE_GETGROUPS=0 else if test "$ac_cv_type_getgroups" != gid_t \ || { case "$ac_cv_func_getgroups_works" in *yes) false;; *) true;; esac }; then REPLACE_GETGROUPS=1 printf "%s\n" "#define GETGROUPS_ZERO_BUG 1" >>confdefs.h else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getgroups handles negative values" >&5 printf %s "checking whether getgroups handles negative values... " >&6; } if test ${gl_cv_func_getgroups_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_getgroups_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_getgroups_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_getgroups_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default int main (void) { int size = getgroups (0, 0); gid_t *list = malloc (size * sizeof *list); int result = getgroups (-1, list) != -1; free (list); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_getgroups_works=yes else $as_nop gl_cv_func_getgroups_works=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: $gl_cv_func_getgroups_works" >&5 printf "%s\n" "$gl_cv_func_getgroups_works" >&6; } case "$gl_cv_func_getgroups_works" in *yes) ;; *) REPLACE_GETGROUPS=1 ;; esac fi fi test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS" if test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1; then GL_COND_OBJ_GETGROUPS_TRUE= GL_COND_OBJ_GETGROUPS_FALSE='#' else GL_COND_OBJ_GETGROUPS_TRUE='#' GL_COND_OBJ_GETGROUPS_FALSE= fi : if test -z "${GL_COND_OBJ_GETGROUPS_TRUE}" && test -z "${GL_COND_OBJ_GETGROUPS_FALSE}"; then GL_COND_OBJ_GETGROUPS_TRUE='#' GL_COND_OBJ_GETGROUPS_FALSE='#' fi GL_GNULIB_GETGROUPS=1 printf "%s\n" "#define GNULIB_TEST_GETGROUPS 1" >>confdefs.h gl_getline_needs_run_time_check=no ac_fn_c_check_func "$LINENO" "getline" "ac_cv_func_getline" if test "x$ac_cv_func_getline" = xyes then : gl_getline_needs_run_time_check=yes else $as_nop am_cv_func_working_getline=no fi if test $gl_getline_needs_run_time_check = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working getline function" >&5 printf %s "checking for working getline function... " >&6; } if test ${am_cv_func_working_getline+y} then : printf %s "(cached) " >&6 else $as_nop echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1 then : am_cv_func_working_getline="guessing yes" else $as_nop case "$host_os" in *-musl*) am_cv_func_working_getline="guessing yes" ;; *) am_cv_func_working_getline="$gl_cross_guess_normal" ;; esac fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getline (&line, &siz, in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getline (&line, &siz, in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : am_cv_func_working_getline=yes else $as_nop am_cv_func_working_getline=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: $am_cv_func_working_getline" >&5 printf "%s\n" "$am_cv_func_working_getline" >&6; } fi if test $ac_cv_have_decl_getline = no; then HAVE_DECL_GETLINE=0 fi case "$am_cv_func_working_getline" in *yes) ;; *) REPLACE_GETLINE=1 ;; esac if test $REPLACE_GETLINE = 1; then GL_COND_OBJ_GETLINE_TRUE= GL_COND_OBJ_GETLINE_FALSE='#' else GL_COND_OBJ_GETLINE_TRUE='#' GL_COND_OBJ_GETLINE_FALSE= fi : if test -z "${GL_COND_OBJ_GETLINE_TRUE}" && test -z "${GL_COND_OBJ_GETLINE_FALSE}"; then GL_COND_OBJ_GETLINE_TRUE='#' GL_COND_OBJ_GETLINE_FALSE='#' fi if test -z "$GL_COND_OBJ_GETLINE_TRUE"; then : : fi GL_GNULIB_GETLINE=1 printf "%s\n" "#define GNULIB_TEST_GETLINE 1" >>confdefs.h REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then REPLACE_GETOPT=1 fi GL_GENERATE_GETOPT_H=false GL_GENERATE_GETOPT_CDEFS_H=false if test $REPLACE_GETOPT = 1; then if test $ac_cv_header_sys_cdefs_h = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi printf "%s\n" "#define __GETOPT_PREFIX rpl_" >>confdefs.h GL_GENERATE_GETOPT_H=true GL_GENERATE_GETOPT_CDEFS_H=true fi case "$GL_GENERATE_GETOPT_H" in false) GETOPT_H='' ;; true) if test -z "$GETOPT_H"; then GETOPT_H="${gl_source_base_prefix}getopt.h" fi ;; *) echo "*** GL_GENERATE_GETOPT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_GETOPT_H; then GL_GENERATE_GETOPT_H_TRUE= GL_GENERATE_GETOPT_H_FALSE='#' else GL_GENERATE_GETOPT_H_TRUE='#' GL_GENERATE_GETOPT_H_FALSE= fi : if test -z "${GL_GENERATE_GETOPT_H_TRUE}" && test -z "${GL_GENERATE_GETOPT_H_FALSE}"; then GL_GENERATE_GETOPT_H_TRUE='#' GL_GENERATE_GETOPT_H_FALSE='#' fi case "$GL_GENERATE_GETOPT_CDEFS_H" in false) GETOPT_CDEFS_H='' ;; true) if test -z "$GETOPT_CDEFS_H"; then GETOPT_CDEFS_H="${gl_source_base_prefix}getopt-cdefs.h" fi ;; *) echo "*** GL_GENERATE_GETOPT_CDEFS_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_GETOPT_CDEFS_H; then GL_GENERATE_GETOPT_CDEFS_H_TRUE= GL_GENERATE_GETOPT_CDEFS_H_FALSE='#' else GL_GENERATE_GETOPT_CDEFS_H_TRUE='#' GL_GENERATE_GETOPT_CDEFS_H_FALSE= fi : if test -z "${GL_GENERATE_GETOPT_CDEFS_H_TRUE}" && test -z "${GL_GENERATE_GETOPT_CDEFS_H_FALSE}"; then GL_GENERATE_GETOPT_CDEFS_H_TRUE='#' GL_GENERATE_GETOPT_CDEFS_H_FALSE='#' fi if test $REPLACE_GETOPT = 1; then GL_COND_OBJ_GETOPT_TRUE= GL_COND_OBJ_GETOPT_FALSE='#' else GL_COND_OBJ_GETOPT_TRUE='#' GL_COND_OBJ_GETOPT_FALSE= fi : if test -z "${GL_COND_OBJ_GETOPT_TRUE}" && test -z "${GL_COND_OBJ_GETOPT_FALSE}"; then GL_COND_OBJ_GETOPT_TRUE='#' GL_COND_OBJ_GETOPT_FALSE='#' fi if test -z "$GL_COND_OBJ_GETOPT_TRUE"; then : GL_GNULIB_UNISTD_H_GETOPT=1 fi GL_GNULIB_GETOPT_POSIX=1 printf "%s\n" "#define GNULIB_TEST_GETOPT_POSIX 1" >>confdefs.h if test $HAVE_GETPASS = 0 || test $REPLACE_GETPASS = 1; then gl_LIBOBJS="$gl_LIBOBJS getpass.$ac_objext" ac_fn_check_decl "$LINENO" "__fsetlocking" "ac_cv_have_decl___fsetlocking" "#include <stdio.h> #if HAVE_STDIO_EXT_H #include <stdio_ext.h> #endif " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl___fsetlocking" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL___FSETLOCKING $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tcgetattr" >&5 printf %s "checking for tcgetattr... " >&6; } if test ${gl_cv_func_tcgetattr+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <termios.h> struct termios x; int main (void) { return tcgetattr(0,&x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_tcgetattr=yes else $as_nop gl_cv_func_tcgetattr=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: $gl_cv_func_tcgetattr" >&5 printf "%s\n" "$gl_cv_func_tcgetattr" >&6; } if test $gl_cv_func_tcgetattr = yes; then HAVE_TCGETATTR=1 else HAVE_TCGETATTR=0 fi printf "%s\n" "#define HAVE_TCGETATTR $HAVE_TCGETATTR" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tcsetattr" >&5 printf %s "checking for tcsetattr... " >&6; } if test ${gl_cv_func_tcsetattr+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <termios.h> struct termios x; int main (void) { return tcsetattr(0,0,&x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_tcsetattr=yes else $as_nop gl_cv_func_tcsetattr=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: $gl_cv_func_tcsetattr" >&5 printf "%s\n" "$gl_cv_func_tcsetattr" >&6; } if test $gl_cv_func_tcsetattr = yes; then HAVE_TCSETATTR=1 else HAVE_TCSETATTR=0 fi printf "%s\n" "#define HAVE_TCSETATTR $HAVE_TCSETATTR" >>confdefs.h fi GL_GNULIB_GETPASS=1 printf "%s\n" "#define GNULIB_TEST_GETPASS 1" >>confdefs.h if test $ac_cv_func_getpass = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for getpass without length limitations" >&5 printf %s "checking for getpass without length limitations... " >&6; } if test ${gl_cv_func_getpass_good+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky GNU user" >/dev/null 2>&1 then : gl_cv_func_getpass_good=yes else $as_nop gl_cv_func_getpass_good=no fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_getpass_good" >&5 printf "%s\n" "$gl_cv_func_getpass_good" >&6; } if test $gl_cv_func_getpass_good != yes; then REPLACE_GETPASS_FOR_GETPASS_GNU=1 fi fi if test $HAVE_GETPASS = 0 || test $REPLACE_GETPASS_FOR_GETPASS_GNU = 1; then gl_LIBOBJS="$gl_LIBOBJS getpass.$ac_objext" ac_fn_check_decl "$LINENO" "__fsetlocking" "ac_cv_have_decl___fsetlocking" "#include <stdio.h> #if HAVE_STDIO_EXT_H #include <stdio_ext.h> #endif " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl___fsetlocking" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL___FSETLOCKING $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tcgetattr" >&5 printf %s "checking for tcgetattr... " >&6; } if test ${gl_cv_func_tcgetattr+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <termios.h> struct termios x; int main (void) { return tcgetattr(0,&x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_tcgetattr=yes else $as_nop gl_cv_func_tcgetattr=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: $gl_cv_func_tcgetattr" >&5 printf "%s\n" "$gl_cv_func_tcgetattr" >&6; } if test $gl_cv_func_tcgetattr = yes; then HAVE_TCGETATTR=1 else HAVE_TCGETATTR=0 fi printf "%s\n" "#define HAVE_TCGETATTR $HAVE_TCGETATTR" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tcsetattr" >&5 printf %s "checking for tcsetattr... " >&6; } if test ${gl_cv_func_tcsetattr+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <termios.h> struct termios x; int main (void) { return tcsetattr(0,0,&x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_tcsetattr=yes else $as_nop gl_cv_func_tcsetattr=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: $gl_cv_func_tcsetattr" >&5 printf "%s\n" "$gl_cv_func_tcsetattr" >&6; } if test $gl_cv_func_tcsetattr = yes; then HAVE_TCSETATTR=1 else HAVE_TCSETATTR=0 fi printf "%s\n" "#define HAVE_TCSETATTR $HAVE_TCSETATTR" >>confdefs.h fi GL_GNULIB_GETPASS_GNU=1 printf "%s\n" "#define GNULIB_TEST_GETPASS_GNU 1" >>confdefs.h ac_found=0 ac_fn_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_program_invocation_name" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : ac_found=1 fi ac_fn_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include <errno.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : ac_found=1 fi ac_fn_check_decl "$LINENO" "__argv" "ac_cv_have_decl___argv" "#include <stdlib.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl___argv" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL___ARGV $ac_have_decl" >>confdefs.h if test $ac_have_decl = 1 then : ac_found=1 fi # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether __progname is defined in default libraries" >&5 printf %s "checking whether __progname is defined in default libraries... " >&6; } if test ${gl_cv_var___progname+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_var___progname= cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern char *__progname; int main (void) { return *__progname; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_var___progname=yes 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: $gl_cv_var___progname" >&5 printf "%s\n" "$gl_cv_var___progname" >&6; } if test "$gl_cv_var___progname" = yes; then printf "%s\n" "#define HAVE_VAR___PROGNAME 1" >>confdefs.h fi fi if test "$ac_cv_func_getrandom" != yes; then HAVE_GETRANDOM=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether getrandom is compatible with its GNU+BSD signature" >&5 printf %s "checking whether getrandom is compatible with its GNU+BSD signature... " >&6; } if test ${gl_cv_func_getrandom_ok+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Additional includes are needed before <sys/random.h> on uClibc and Mac OS X. */ #include <sys/types.h> #include <stdlib.h> #include <sys/random.h> ssize_t getrandom (void *, size_t, unsigned int); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_getrandom_ok=yes else $as_nop gl_cv_func_getrandom_ok=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: $gl_cv_func_getrandom_ok" >&5 printf "%s\n" "$gl_cv_func_getrandom_ok" >&6; } if test $gl_cv_func_getrandom_ok = no; then REPLACE_GETRANDOM=1 fi fi case "$host_os" in mingw*) ac_fn_c_check_header_compile "$LINENO" "bcrypt.h" "ac_cv_header_bcrypt_h" "#include <windows.h> " if test "x$ac_cv_header_bcrypt_h" = xyes then : printf "%s\n" "#define HAVE_BCRYPT_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the bcrypt library is guaranteed to be present" >&5 printf %s "checking whether the bcrypt library is guaranteed to be present... " >&6; } if test ${gl_cv_lib_assume_bcrypt+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <windows.h> int main (void) { #if !(_WIN32_WINNT >= _WIN32_WINNT_WIN7) cannot assume it #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_lib_assume_bcrypt=yes else $as_nop gl_cv_lib_assume_bcrypt=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: $gl_cv_lib_assume_bcrypt" >&5 printf "%s\n" "$gl_cv_lib_assume_bcrypt" >&6; } if test $gl_cv_lib_assume_bcrypt = yes; then printf "%s\n" "#define HAVE_LIB_BCRYPT 1" >>confdefs.h LIB_GETRANDOM='-lbcrypt' else LIB_GETRANDOM='-ladvapi32' fi ;; *) LIB_GETRANDOM= ;; esac if test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1; then GL_COND_OBJ_GETRANDOM_TRUE= GL_COND_OBJ_GETRANDOM_FALSE='#' else GL_COND_OBJ_GETRANDOM_TRUE='#' GL_COND_OBJ_GETRANDOM_FALSE= fi : if test -z "${GL_COND_OBJ_GETRANDOM_TRUE}" && test -z "${GL_COND_OBJ_GETRANDOM_FALSE}"; then GL_COND_OBJ_GETRANDOM_TRUE='#' GL_COND_OBJ_GETRANDOM_FALSE='#' fi GL_GNULIB_GETRANDOM=1 printf "%s\n" "#define GNULIB_TEST_GETRANDOM 1" >>confdefs.h gl_gettimeofday_timezone=void if test $ac_cv_func_gettimeofday != yes; then HAVE_GETTIMEOFDAY=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for gettimeofday with POSIX signature" >&5 printf %s "checking for gettimeofday with POSIX signature... " >&6; } if test ${gl_cv_func_gettimeofday_posix_signature+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/time.h> struct timeval c; int gettimeofday (struct timeval *restrict, void *restrict); int main (void) { /* glibc uses struct timezone * rather than the POSIX void * if _GNU_SOURCE is defined. However, since the only portable use of gettimeofday uses NULL as the second parameter, and since the glibc definition is actually more typesafe, it is not worth wrapping this to get a compliant signature. */ int (*f) (struct timeval *restrict, void *restrict) = gettimeofday; int x = f (&c, 0); return !(x | c.tv_sec | c.tv_usec); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_gettimeofday_posix_signature=yes else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/time.h> int gettimeofday (struct timeval *restrict, struct timezone *restrict); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_gettimeofday_posix_signature=almost else $as_nop gl_cv_func_gettimeofday_posix_signature=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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_gettimeofday_posix_signature" >&5 printf "%s\n" "$gl_cv_func_gettimeofday_posix_signature" >&6; } if test $gl_cv_func_gettimeofday_posix_signature = almost; then gl_gettimeofday_timezone='struct timezone' elif test $gl_cv_func_gettimeofday_posix_signature != yes; then REPLACE_GETTIMEOFDAY=1 fi if test $REPLACE_STRUCT_TIMEVAL = 1; then REPLACE_GETTIMEOFDAY=1 fi case "$host_os" in mingw*) REPLACE_GETTIMEOFDAY=1 ;; esac fi printf "%s\n" "#define GETTIMEOFDAY_TIMEZONE $gl_gettimeofday_timezone" >>confdefs.h if test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1; then GL_COND_OBJ_GETTIMEOFDAY_TRUE= GL_COND_OBJ_GETTIMEOFDAY_FALSE='#' else GL_COND_OBJ_GETTIMEOFDAY_TRUE='#' GL_COND_OBJ_GETTIMEOFDAY_FALSE= fi : if test -z "${GL_COND_OBJ_GETTIMEOFDAY_TRUE}" && test -z "${GL_COND_OBJ_GETTIMEOFDAY_FALSE}"; then GL_COND_OBJ_GETTIMEOFDAY_TRUE='#' GL_COND_OBJ_GETTIMEOFDAY_FALSE='#' fi if test -z "$GL_COND_OBJ_GETTIMEOFDAY_TRUE"; then : : fi GL_GNULIB_GETTIMEOFDAY=1 printf "%s\n" "#define GNULIB_TEST_GETTIMEOFDAY 1" >>confdefs.h # Autoconf 2.61a.99 and earlier don't support linking a file only # in VPATH builds. But since GNUmakefile is for maintainer use # only, it does not matter if we skip the link with older autoconf. # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH # builds, so use a shell variable to bypass this. GNUmakefile=GNUmakefile ac_config_links="$ac_config_links $GNUmakefile:$GNUmakefile" ac_fn_c_check_func "$LINENO" "group_member" "ac_cv_func_group_member" if test "x$ac_cv_func_group_member" = xyes then : else $as_nop HAVE_GROUP_MEMBER=0 fi if test $HAVE_GROUP_MEMBER = 0; then GL_COND_OBJ_GROUP_MEMBER_TRUE= GL_COND_OBJ_GROUP_MEMBER_FALSE='#' else GL_COND_OBJ_GROUP_MEMBER_TRUE='#' GL_COND_OBJ_GROUP_MEMBER_FALSE= fi : if test -z "${GL_COND_OBJ_GROUP_MEMBER_TRUE}" && test -z "${GL_COND_OBJ_GROUP_MEMBER_FALSE}"; then GL_COND_OBJ_GROUP_MEMBER_TRUE='#' GL_COND_OBJ_GROUP_MEMBER_FALSE='#' fi if test -z "$GL_COND_OBJ_GROUP_MEMBER_TRUE"; then : fi GL_GNULIB_GROUP_MEMBER=1 printf "%s\n" "#define GNULIB_TEST_GROUP_MEMBER 1" >>confdefs.h LIB_HARD_LOCALE="$LIB_SETLOCALE_NULL" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether isnan(double) can be used without linking with libm" >&5 printf %s "checking whether isnan(double) can be used without linking with libm... " >&6; } if test ${gl_cv_func_isnand_no_libm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) #else # undef isnand # define isnand(x) isnan ((double)(x)) #endif double x; int main (void) { return isnand (x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_isnand_no_libm=yes else $as_nop gl_cv_func_isnand_no_libm=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: $gl_cv_func_isnand_no_libm" >&5 printf "%s\n" "$gl_cv_func_isnand_no_libm" >&6; } gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm if test $gl_cv_func_isnand_no_libm = yes; then printf "%s\n" "#define HAVE_ISNAND_IN_LIBC 1" >>confdefs.h fi if test $gl_func_isnand_no_libm != yes; then gl_LIBOBJS="$gl_LIBOBJS isnand.$ac_objext" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) can be used without linking with libm" >&5 printf %s "checking whether isnan(float) can be used without linking with libm... " >&6; } if test ${gl_cv_func_isnanf_no_libm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif float x; int main (void) { return isnanf (x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_isnanf_no_libm=yes else $as_nop gl_cv_func_isnanf_no_libm=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: $gl_cv_func_isnanf_no_libm" >&5 printf "%s\n" "$gl_cv_func_isnanf_no_libm" >&6; } if test $gl_cv_func_isnanf_no_libm = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether isnan(float) works" >&5 printf %s "checking whether isnan(float) works... " >&6; } if test ${gl_cv_func_isnanf_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;; mingw*) # Guess yes on mingw, no on MSVC. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __MINGW32__ Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1 then : gl_cv_func_isnanf_works="guessing yes" else $as_nop gl_cv_func_isnanf_works="guessing no" fi rm -rf conftest* ;; *) gl_cv_func_isnanf_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif /* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ #ifdef __DECC static float NaN () { static float zero = 0.0f; return zero / zero; } #else # define NaN() (0.0f / 0.0f) #endif #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; float value; } memory_float; int main() { int result = 0; if (isnanf (1.0f / 0.0f)) result |= 1; if (!isnanf (NaN ())) result |= 2; #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* The isnanf function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit. */ if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) { memory_float m; m.value = NaN (); /* Set the bits below the exponent to 01111...111. */ m.word[0] &= -1U << FLT_EXPBIT0_BIT; m.word[0] |= (1U << (FLT_EXPBIT0_BIT - 1)) - 1; if (!isnanf (m.value)) result |= 4; } #endif return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_isnanf_works=yes else $as_nop gl_cv_func_isnanf_works=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: $gl_cv_func_isnanf_works" >&5 printf "%s\n" "$gl_cv_func_isnanf_works" >&6; } fi if test $gl_cv_func_isnanf_no_libm = yes \ && { case "$gl_cv_func_isnanf_works" in *yes) true;; *) false;; esac }; then gl_func_isnanf_no_libm=yes printf "%s\n" "#define HAVE_ISNANF_IN_LIBC 1" >>confdefs.h else gl_func_isnanf_no_libm=no fi if test $gl_func_isnanf_no_libm != yes; then gl_LIBOBJS="$gl_LIBOBJS isnanf.$ac_objext" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'float'" >&5 printf %s "checking where to find the exponent in a 'float'... " >&6; } if test ${gl_cv_cc_float_expbit0+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : gl_cv_cc_float_expbit0="word 0 bit 23" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (float x) { memory_float m; size_t i; /* Clear it first, in case sizeof (float) < sizeof (memory_float). */ memset (&m, 0, sizeof (memory_float)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25f); add_to_ored_words (0.5f); add_to_ored_words (1.0f); add_to_ored_words (2.0f); add_to_ored_words (4.0f); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_float_expbit0=`cat conftest.out` else $as_nop gl_cv_cc_float_expbit0="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_expbit0" >&5 printf "%s\n" "$gl_cv_cc_float_expbit0" >&6; } case "$gl_cv_cc_float_expbit0" in word*bit*) word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` printf "%s\n" "#define FLT_EXPBIT0_WORD $word" >>confdefs.h printf "%s\n" "#define FLT_EXPBIT0_BIT $bit" >>confdefs.h ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether isnan(long double) can be used without linking with libm" >&5 printf %s "checking whether isnan(long double) can be used without linking with libm... " >&6; } if test ${gl_cv_func_isnanl_no_libm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif long double x; int main (void) { return isnanl (x); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_isnanl_no_libm=yes else $as_nop gl_cv_func_isnanl_no_libm=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: $gl_cv_func_isnanl_no_libm" >&5 printf "%s\n" "$gl_cv_func_isnanl_no_libm" >&6; } gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm if test $gl_func_isnanl_no_libm = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether isnanl works" >&5 printf %s "checking whether isnanl works... " >&6; } if test ${gl_cv_func_isnanl_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in mingw*) # Guess yes on mingw, no on MSVC. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __MINGW32__ Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1 then : gl_cv_func_isnanl_works="guessing yes" else $as_nop gl_cv_func_isnanl_works="guessing no" fi rm -rf conftest* ;; *) gl_cv_func_isnanl_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <limits.h> #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; long double value; } memory_long_double; /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the runtime type conversion. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif int main () { int result = 0; if (!isnanl (NaNl ())) result |= 1; { memory_long_double m; unsigned int i; /* The isnanl function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit (since the exponent never extends to bit 31). */ m.value = NaNl (); m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); for (i = 0; i < NWORDS; i++) m.word[i] |= 1; if (!isnanl (m.value)) result |= 1; } #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } /* isnanl should return something even for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 4; } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 8; } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 16; } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 32; } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 64; } #endif return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_isnanl_works=yes else $as_nop gl_cv_func_isnanl_works=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: $gl_cv_func_isnanl_works" >&5 printf "%s\n" "$gl_cv_func_isnanl_works" >&6; } case "$gl_cv_func_isnanl_works" in *yes) ;; *) gl_func_isnanl_no_libm=no ;; esac fi if test $gl_func_isnanl_no_libm = yes; then printf "%s\n" "#define HAVE_ISNANL_IN_LIBC 1" >>confdefs.h fi if test $gl_func_isnanl_no_libm != yes; then gl_LIBOBJS="$gl_LIBOBJS isnanl.$ac_objext" { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the exponent in a 'long double'" >&5 printf %s "checking where to find the exponent in a 'long double'... " >&6; } if test ${gl_cv_cc_long_double_expbit0+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : gl_cv_cc_long_double_expbit0="unknown" case "$host_os" in mingw*) # On native Windows (little-endian), we know the result # in two cases: mingw, MSVC. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __MINGW32__ Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1 then : gl_cv_cc_long_double_expbit0="word 2 bit 0" fi rm -rf conftest* cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1 then : gl_cv_cc_long_double_expbit0="word 1 bit 20" fi rm -rf conftest* ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (long double *x) { memory_long_double m; size_t i; /* Clear it first, in case sizeof (long double) < sizeof (memory_long_double). */ memset (&m, 0, sizeof (memory_long_double)); m.value = *x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { static long double samples[5] = { 0.25L, 0.5L, 1.0L, 2.0L, 4.0L }; size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; for (j = 0; j < 5; j++) add_to_ored_words (&samples[j]); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_long_double_expbit0=`cat conftest.out` else $as_nop gl_cv_cc_long_double_expbit0="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_expbit0" >&5 printf "%s\n" "$gl_cv_cc_long_double_expbit0" >&6; } case "$gl_cv_cc_long_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` printf "%s\n" "#define LDBL_EXPBIT0_WORD $word" >>confdefs.h printf "%s\n" "#define LDBL_EXPBIT0_BIT $bit" >>confdefs.h ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the compiler supports the __inline keyword" >&5 printf %s "checking whether the compiler supports the __inline keyword... " >&6; } if test ${gl_cv_c___inline+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ typedef int foo_t; static __inline foo_t foo (void) { return 0; } int main (void) { return foo (); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_c___inline=yes else $as_nop gl_cv_c___inline=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: $gl_cv_c___inline" >&5 printf "%s\n" "$gl_cv_c___inline" >&6; } if test $gl_cv_c___inline = yes; then printf "%s\n" "#define HAVE___INLINE 1" >>confdefs.h fi case "$GL_GENERATE_LIMITS_H" in false) LIMITS_H='' ;; true) if test -z "$LIMITS_H"; then LIMITS_H="${gl_source_base_prefix}limits.h" fi ;; *) echo "*** GL_GENERATE_LIMITS_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_LIMITS_H; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi : if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE='#' fi LOCALCHARSET_TESTS_ENVIRONMENT= if test $REPLACE_STRUCT_LCONV = 1; then REPLACE_LOCALECONV=1 fi if test $REPLACE_LOCALECONV = 1; then GL_COND_OBJ_LOCALECONV_TRUE= GL_COND_OBJ_LOCALECONV_FALSE='#' else GL_COND_OBJ_LOCALECONV_TRUE='#' GL_COND_OBJ_LOCALECONV_FALSE= fi : if test -z "${GL_COND_OBJ_LOCALECONV_TRUE}" && test -z "${GL_COND_OBJ_LOCALECONV_FALSE}"; then GL_COND_OBJ_LOCALECONV_TRUE='#' GL_COND_OBJ_LOCALECONV_FALSE='#' fi if test -z "$GL_COND_OBJ_LOCALECONV_TRUE"; then : ac_fn_c_check_member "$LINENO" "struct lconv" "decimal_point" "ac_cv_member_struct_lconv_decimal_point" "#include <locale.h> " if test "x$ac_cv_member_struct_lconv_decimal_point" = xyes then : printf "%s\n" "#define HAVE_STRUCT_LCONV_DECIMAL_POINT 1" >>confdefs.h fi fi GL_GNULIB_LOCALECONV=1 printf "%s\n" "#define GNULIB_TEST_LOCALECONV 1" >>confdefs.h if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. has_rwlock=false ac_fn_c_check_type "$LINENO" "pthread_rwlock_t" "ac_cv_type_pthread_rwlock_t" "#include <pthread.h> " if test "x$ac_cv_type_pthread_rwlock_t" = xyes then : has_rwlock=true printf "%s\n" "#define HAVE_PTHREAD_RWLOCK 1" >>confdefs.h fi if $has_rwlock; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether pthread_rwlock_rdlock prefers a writer to a reader" >&5 printf %s "checking whether pthread_rwlock_rdlock prefers a writer to a reader... " >&6; } if test ${gl_cv_pthread_rwlock_rdlock_prefer_writer+y} then : printf %s "(cached) " >&6 else $as_nop save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on musl systems. *-musl*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on bionic systems. *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess yes on native Windows with the mingw-w64 winpthreads library. # Guess no on native Windows with the gnulib windows-rwlock module. mingw*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" else gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" fi ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <errno.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (exit (10 + (n))) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static pthread_rwlock_t lock; static pthread_t reader1; static pthread_t writer; static pthread_t reader2; static pthread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static pthread_mutex_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9: The second reader thread requests the lock. */ err = pthread_rwlock_tryrdlock (&lock); if (err == 0) FAILURE (); else if (err != EBUSY) UNEXPECTED (9); /* Step 10: Launch a timer, to test whether the next call blocks. */ if (pthread_create (&timer, NULL, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = pthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (pthread_create (&reader2, NULL, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (pthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = pthread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (pthread_rwlock_init (&lock, NULL)) UNEXPECTED (1); if (pthread_mutex_init (&baton, NULL)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (pthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (pthread_create (&writer, NULL, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_pthread_rwlock_rdlock_prefer_writer=yes else $as_nop gl_cv_pthread_rwlock_rdlock_prefer_writer=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi LIBS="$save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_pthread_rwlock_rdlock_prefer_writer" >&5 printf "%s\n" "$gl_cv_pthread_rwlock_rdlock_prefer_writer" >&6; } case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in *yes) printf "%s\n" "#define HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER 1" >>confdefs.h ;; esac fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <pthread.h> int main (void) { #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : printf "%s\n" "#define HAVE_PTHREAD_MUTEX_RECURSIVE 1" >>confdefs.h fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi : printf "%s\n" "#define GNULIB_LOCK 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether lseek detects pipes" >&5 printf %s "checking whether lseek detects pipes... " >&6; } if test ${gl_cv_func_lseek_pipe+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in mingw*) gl_cv_func_lseek_pipe=no ;; *) if test $cross_compiling = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> /* for off_t */ #include <stdio.h> /* for SEEK_CUR */ #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> #endif $gl_mda_defines int main (void) { /* Exit with success only if stdin is seekable. */ return lseek (0, (off_t)0, SEEK_CUR) < 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : if test -s conftest$ac_exeext \ && ./conftest$ac_exeext < conftest.$ac_ext \ && test 1 = "`echo hi \ | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then gl_cv_func_lseek_pipe=yes else gl_cv_func_lseek_pipe=no fi else $as_nop gl_cv_func_lseek_pipe=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext else cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __BEOS__ /* BeOS mistakenly return 0 when trying to seek on pipes. */ Choke me. #endif _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_lseek_pipe=yes else $as_nop gl_cv_func_lseek_pipe=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_lseek_pipe" >&5 printf "%s\n" "$gl_cv_func_lseek_pipe" >&6; } if test "$gl_cv_func_lseek_pipe" = no; then REPLACE_LSEEK=1 printf "%s\n" "#define LSEEK_PIPE_BROKEN 1" >>confdefs.h fi if test $WINDOWS_64_BIT_OFF_T = 1; then REPLACE_LSEEK=1 fi case $host_os in darwin*) REPLACE_LSEEK=1;; esac if test $REPLACE_LSEEK = 1; then GL_COND_OBJ_LSEEK_TRUE= GL_COND_OBJ_LSEEK_FALSE='#' else GL_COND_OBJ_LSEEK_TRUE='#' GL_COND_OBJ_LSEEK_FALSE= fi : if test -z "${GL_COND_OBJ_LSEEK_TRUE}" && test -z "${GL_COND_OBJ_LSEEK_FALSE}"; then GL_COND_OBJ_LSEEK_TRUE='#' GL_COND_OBJ_LSEEK_FALSE='#' fi GL_GNULIB_LSEEK=1 printf "%s\n" "#define GNULIB_TEST_LSEEK 1" >>confdefs.h if test $ac_cv_func_lstat = yes; then case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in solaris* | *no) REPLACE_LSTAT=1 ;; esac else HAVE_LSTAT=0 fi if test $REPLACE_LSTAT = 1; then GL_COND_OBJ_LSTAT_TRUE= GL_COND_OBJ_LSTAT_FALSE='#' else GL_COND_OBJ_LSTAT_TRUE='#' GL_COND_OBJ_LSTAT_FALSE= fi : if test -z "${GL_COND_OBJ_LSTAT_TRUE}" && test -z "${GL_COND_OBJ_LSTAT_FALSE}"; then GL_COND_OBJ_LSTAT_TRUE='#' GL_COND_OBJ_LSTAT_FALSE='#' fi if test -z "$GL_COND_OBJ_LSTAT_TRUE"; then : : fi GL_GNULIB_LSTAT=1 printf "%s\n" "#define GNULIB_TEST_LSTAT 1" >>confdefs.h REPLACE_MALLOC_FOR_MALLOC_GNU="$REPLACE_MALLOC_FOR_MALLOC_POSIX" if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether malloc (0) returns nonnull" >&5 printf %s "checking whether malloc (0) returns nonnull... " >&6; } if test ${ac_cv_func_malloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = malloc (0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_malloc_0_nonnull=yes else $as_nop ac_cv_func_malloc_0_nonnull=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: $ac_cv_func_malloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_malloc_0_nonnull" >&6; } case $ac_cv_func_malloc_0_nonnull in #( *yes) : ;; #( *) : REPLACE_MALLOC_FOR_MALLOC_GNU=1 ;; esac fi if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 1; then gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" fi GL_GNULIB_MALLOC_GNU=1 printf "%s\n" "#define GNULIB_TEST_MALLOC_GNU 1" >>confdefs.h if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then gl_LIBOBJS="$gl_LIBOBJS malloc.$ac_objext" fi GL_GNULIB_MALLOC_POSIX=1 printf "%s\n" "#define GNULIB_TEST_MALLOC_POSIX 1" >>confdefs.h if test $ac_cv_func_mbrlen = no; then HAVE_MBRLEN=0 ac_fn_check_decl "$LINENO" "mbrlen" "ac_cv_have_decl_mbrlen" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mbrlen" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_MBRLEN $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_mbrlen = yes; then REPLACE_MBRLEN=1 fi else if test $REPLACE_MBRTOWC = 1; then REPLACE_MBRLEN=1 fi fi if test $HAVE_MBRLEN = 0 || test $REPLACE_MBRLEN = 1; then GL_COND_OBJ_MBRLEN_TRUE= GL_COND_OBJ_MBRLEN_FALSE='#' else GL_COND_OBJ_MBRLEN_TRUE='#' GL_COND_OBJ_MBRLEN_FALSE= fi : if test -z "${GL_COND_OBJ_MBRLEN_TRUE}" && test -z "${GL_COND_OBJ_MBRLEN_FALSE}"; then GL_COND_OBJ_MBRLEN_TRUE='#' GL_COND_OBJ_MBRLEN_FALSE='#' fi if test -z "$GL_COND_OBJ_MBRLEN_TRUE"; then : : fi GL_GNULIB_MBRLEN=1 printf "%s\n" "#define GNULIB_TEST_MBRLEN 1" >>confdefs.h if case "$host_os" in mingw*) true ;; *) test $ac_cv_func_mbsinit = yes ;; esac \ && test $ac_cv_func_mbrtowc = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 printf %s "checking whether mbrtowc handles incomplete characters... " >&6; } if test ${gl_cv_func_mbrtowc_incomplete_state+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac if test $LOCALE_JA != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_incomplete_state=yes else $as_nop gl_cv_func_mbrtowc_incomplete_state=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_incomplete_state=yes else $as_nop gl_cv_func_mbrtowc_incomplete_state=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 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_incomplete_state" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 printf %s "checking whether mbrtowc works as well as mbtowc... " >&6; } if test ${gl_cv_func_mbrtowc_sanitycheck+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_sanitycheck=yes else $as_nop gl_cv_func_mbrtowc_sanitycheck=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_sanitycheck" >&6; } REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi if test $ac_cv_func_mbrtowc = no; then HAVE_MBRTOWC=0 ac_fn_check_decl "$LINENO" "mbrtowc" "ac_cv_have_decl_mbrtowc" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mbrtowc" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_MBRTOWC $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_mbrtowc = yes; then REPLACE_MBRTOWC=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOWC=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL pwc argument" >&5 printf %s "checking whether mbrtowc handles a NULL pwc argument... " >&6; } if test ${gl_cv_func_mbrtowc_null_arg1+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "\303\237er"; mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 5, &state); if (ret != 2) result |= 1; if (!mbsinit (&state)) result |= 2; memset (&state, '\0', sizeof (mbstate_t)); ret = mbrtowc (NULL, input, 5, &state); if (ret != 2) /* Solaris 7 fails here: ret is -1. */ result |= 4; if (!mbsinit (&state)) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_null_arg1=yes else $as_nop gl_cv_func_mbrtowc_null_arg1=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg1" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_null_arg1" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles a NULL string argument" >&5 printf %s "checking whether mbrtowc handles a NULL string argument... " >&6; } if test ${gl_cv_func_mbrtowc_null_arg2+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on OSF/1. osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { mbstate_t state; wchar_t wc; int ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; mbrtowc (&wc, NULL, 5, &state); /* Check that wc was not modified. */ if (wc != (wchar_t) 0xBADFACE) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_null_arg2=yes else $as_nop gl_cv_func_mbrtowc_null_arg2=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_null_arg2" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_null_arg2" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc has a correct return value" >&5 printf %s "checking whether mbrtowc has a correct return value... " >&6; } if test ${gl_cv_func_mbrtowc_retval+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on HP-UX, Solaris, native Windows. hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_retval="guessing yes" ;; esac if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ || { case "$host_os" in mingw*) true;; *) false;; esac; }; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; int found_some_locale = 0; /* This fails on Solaris. */ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 1) result |= 1; } found_some_locale = 1; } /* This fails on HP-UX 11.11. */ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 2) result |= 2; } found_some_locale = 1; } /* This fails on native Windows. */ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 4; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 8; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 16; } found_some_locale = 1; } return (found_some_locale ? result : 77); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_retval=yes else $as_nop if test $? != 77; then gl_cv_func_mbrtowc_retval=no fi 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: $gl_cv_func_mbrtowc_retval" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_retval" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc returns 0 when parsing a NUL character" >&5 printf %s "checking whether mbrtowc returns 0 when parsing a NUL character... " >&6; } if test ${gl_cv_func_mbrtowc_nul_retval+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris 8 and 9. solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8 and 9. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "", 1, &state) != 0) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_nul_retval=yes else $as_nop gl_cv_func_mbrtowc_nul_retval=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_nul_retval" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_nul_retval" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc stores incomplete characters" >&5 printf %s "checking whether mbrtowc stores incomplete characters... " >&6; } if test ${gl_cv_func_mbrtowc_stores_incomplete+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;; *) gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;; esac case "$host_os" in mingw*) if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "French_France.65001") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 1; } if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\226", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 2; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\245", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 4; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\261", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_stores_incomplete=no else $as_nop gl_cv_func_mbrtowc_stores_incomplete=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; *) if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_stores_incomplete=no else $as_nop gl_cv_func_mbrtowc_stores_incomplete=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 ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_stores_incomplete" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_stores_incomplete" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works on empty input" >&5 printf %s "checking whether mbrtowc works on empty input... " >&6; } if test ${gl_cv_func_mbrtowc_empty_input+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on AIX and glibc systems. aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; esac if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <wchar.h> static wchar_t wc; static mbstate_t mbs; int main (void) { return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_empty_input=yes else $as_nop gl_cv_func_mbrtowc_empty_input=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: $gl_cv_func_mbrtowc_empty_input" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_empty_input" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the C locale is free of encoding errors" >&5 printf %s "checking whether the C locale is free of encoding errors... " >&6; } if test ${gl_cv_func_mbrtowc_C_locale_sans_EILSEQ+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #include <locale.h> #include <wchar.h> int main (void) { int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; wchar_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes else $as_nop gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=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: $gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" >&6; } case "$gl_cv_func_mbrtowc_null_arg1" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_NULL_ARG1_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_null_arg2" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_NULL_ARG2_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_retval" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_RETVAL_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_nul_retval" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_NUL_RETVAL_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_stores_incomplete" in *no) ;; *) printf "%s\n" "#define MBRTOWC_STORES_INCOMPLETE_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_empty_input" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_EMPTY_INPUT_BUG 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; *) printf "%s\n" "#define MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ 1" >>confdefs.h REPLACE_MBRTOWC=1 ;; esac fi fi if test $REPLACE_MBSTATE_T = 1; then case "$host_os" in mingw*) LIB_MBRTOWC= ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in cygwin*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else $as_nop gl_cv_have_weak="guessing no" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else $as_nop gl_cv_have_weak=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 ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac case "$gl_cv_have_weak" in *yes) LIB_MBRTOWC= ;; *) LIB_MBRTOWC="$LIBPTHREAD" ;; esac ;; esac else LIB_MBRTOWC= fi if test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1; then GL_COND_OBJ_MBRTOWC_TRUE= GL_COND_OBJ_MBRTOWC_FALSE='#' else GL_COND_OBJ_MBRTOWC_TRUE='#' GL_COND_OBJ_MBRTOWC_FALSE= fi : if test -z "${GL_COND_OBJ_MBRTOWC_TRUE}" && test -z "${GL_COND_OBJ_MBRTOWC_FALSE}"; then GL_COND_OBJ_MBRTOWC_TRUE='#' GL_COND_OBJ_MBRTOWC_FALSE='#' fi if test -z "$GL_COND_OBJ_MBRTOWC_TRUE"; then : if test $REPLACE_MBSTATE_T = 1; then gl_LIBOBJS="$gl_LIBOBJS lc-charset-dispatch.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS mbtowc-lock.$ac_objext" CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes else $as_nop gl_cv_cc_vis_werror=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes else $as_nop gl_cv_cc_visibility=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h fi : fi GL_GNULIB_MBRTOWC=1 printf "%s\n" "#define GNULIB_TEST_MBRTOWC 1" >>confdefs.h if case "$host_os" in mingw*) true ;; *) test $ac_cv_func_mbsinit = yes ;; esac \ && test $ac_cv_func_mbrtowc = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 printf %s "checking whether mbrtowc handles incomplete characters... " >&6; } if test ${gl_cv_func_mbrtowc_incomplete_state+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac if test $LOCALE_JA != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_incomplete_state=yes else $as_nop gl_cv_func_mbrtowc_incomplete_state=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_incomplete_state=yes else $as_nop gl_cv_func_mbrtowc_incomplete_state=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 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_incomplete_state" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 printf %s "checking whether mbrtowc works as well as mbtowc... " >&6; } if test ${gl_cv_func_mbrtowc_sanitycheck+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_sanitycheck=yes else $as_nop gl_cv_func_mbrtowc_sanitycheck=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_sanitycheck" >&6; } REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi if test $ac_cv_func_mbsinit = no; then HAVE_MBSINIT=0 ac_fn_check_decl "$LINENO" "mbsinit" "ac_cv_have_decl_mbsinit" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_mbsinit" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_MBSINIT $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_mbsinit = yes; then REPLACE_MBSINIT=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBSINIT=1 else case "$host_os" in mingw*) REPLACE_MBSINIT=1 ;; esac fi fi if test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1; then GL_COND_OBJ_MBSINIT_TRUE= GL_COND_OBJ_MBSINIT_FALSE='#' else GL_COND_OBJ_MBSINIT_TRUE='#' GL_COND_OBJ_MBSINIT_FALSE= fi : if test -z "${GL_COND_OBJ_MBSINIT_TRUE}" && test -z "${GL_COND_OBJ_MBSINIT_FALSE}"; then GL_COND_OBJ_MBSINIT_TRUE='#' GL_COND_OBJ_MBSINIT_FALSE='#' fi if test -z "$GL_COND_OBJ_MBSINIT_TRUE"; then : : fi GL_GNULIB_MBSINIT=1 printf "%s\n" "#define GNULIB_TEST_MBSINIT 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "mbtowc" "ac_cv_func_mbtowc" if test "x$ac_cv_func_mbtowc" = xyes then : printf "%s\n" "#define HAVE_MBTOWC 1" >>confdefs.h fi if test $ac_cv_func_mbtowc = no; then HAVE_MBTOWC=0 else if false; then REPLACE_MBTOWC=1 fi fi if test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1; then GL_COND_OBJ_MBTOWC_TRUE= GL_COND_OBJ_MBTOWC_FALSE='#' else GL_COND_OBJ_MBTOWC_TRUE='#' GL_COND_OBJ_MBTOWC_FALSE= fi : if test -z "${GL_COND_OBJ_MBTOWC_TRUE}" && test -z "${GL_COND_OBJ_MBTOWC_FALSE}"; then GL_COND_OBJ_MBTOWC_TRUE='#' GL_COND_OBJ_MBTOWC_FALSE='#' fi if test -z "$GL_COND_OBJ_MBTOWC_TRUE"; then : : fi GL_GNULIB_MBTOWC=1 printf "%s\n" "#define GNULIB_TEST_MBTOWC 1" >>confdefs.h if test $REPLACE_MEMCHR = 1; then GL_COND_OBJ_MEMCHR_TRUE= GL_COND_OBJ_MEMCHR_FALSE='#' else GL_COND_OBJ_MEMCHR_TRUE='#' GL_COND_OBJ_MEMCHR_FALSE= fi : if test -z "${GL_COND_OBJ_MEMCHR_TRUE}" && test -z "${GL_COND_OBJ_MEMCHR_FALSE}"; then GL_COND_OBJ_MEMCHR_TRUE='#' GL_COND_OBJ_MEMCHR_FALSE='#' fi if test -z "$GL_COND_OBJ_MEMCHR_TRUE"; then : ac_fn_c_check_header_compile "$LINENO" "bp-sym.h" "ac_cv_header_bp_sym_h" "$ac_includes_default" if test "x$ac_cv_header_bp_sym_h" = xyes then : printf "%s\n" "#define HAVE_BP_SYM_H 1" >>confdefs.h fi fi GL_GNULIB_MEMCHR=1 printf "%s\n" "#define GNULIB_TEST_MEMCHR 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "mempcpy" "ac_cv_func_mempcpy" if test "x$ac_cv_func_mempcpy" = xyes then : printf "%s\n" "#define HAVE_MEMPCPY 1" >>confdefs.h fi if test $ac_cv_func_mempcpy = no; then HAVE_MEMPCPY=0 fi if test $HAVE_MEMPCPY = 0; then GL_COND_OBJ_MEMPCPY_TRUE= GL_COND_OBJ_MEMPCPY_FALSE='#' else GL_COND_OBJ_MEMPCPY_TRUE='#' GL_COND_OBJ_MEMPCPY_FALSE= fi : if test -z "${GL_COND_OBJ_MEMPCPY_TRUE}" && test -z "${GL_COND_OBJ_MEMPCPY_FALSE}"; then GL_COND_OBJ_MEMPCPY_TRUE='#' GL_COND_OBJ_MEMPCPY_FALSE='#' fi if test -z "$GL_COND_OBJ_MEMPCPY_TRUE"; then : : fi GL_GNULIB_MEMPCPY=1 printf "%s\n" "#define GNULIB_TEST_MEMPCPY 1" >>confdefs.h if test $ac_cv_have_decl_memrchr = no; then HAVE_DECL_MEMRCHR=0 fi ac_fn_c_check_func "$LINENO" "memrchr" "ac_cv_func_memrchr" if test "x$ac_cv_func_memrchr" = xyes then : printf "%s\n" "#define HAVE_MEMRCHR 1" >>confdefs.h fi if test $ac_cv_func_memrchr = no; then GL_COND_OBJ_MEMRCHR_TRUE= GL_COND_OBJ_MEMRCHR_FALSE='#' else GL_COND_OBJ_MEMRCHR_TRUE='#' GL_COND_OBJ_MEMRCHR_FALSE= fi : if test -z "${GL_COND_OBJ_MEMRCHR_TRUE}" && test -z "${GL_COND_OBJ_MEMRCHR_FALSE}"; then GL_COND_OBJ_MEMRCHR_TRUE='#' GL_COND_OBJ_MEMRCHR_FALSE='#' fi if test -z "$GL_COND_OBJ_MEMRCHR_TRUE"; then : : fi GL_GNULIB_MEMRCHR=1 printf "%s\n" "#define GNULIB_TEST_MEMRCHR 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mkdir handles trailing slash" >&5 printf %s "checking whether mkdir handles trailing slash... " >&6; } if test ${gl_cv_func_mkdir_trailing_slash_works+y} then : printf %s "(cached) " >&6 else $as_nop rm -rf conftest.dir if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; # Guess yes on MSVC, no on mingw. mingw*) cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Known #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Known" >/dev/null 2>&1 then : gl_cv_func_mkdir_trailing_slash_works="guessing yes" else $as_nop gl_cv_func_mkdir_trailing_slash_works="guessing no" fi rm -rf conftest* ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_mkdir_trailing_slash_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> $gl_mda_defines int main (void) { return mkdir ("conftest.dir/", 0700); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mkdir_trailing_slash_works=yes else $as_nop gl_cv_func_mkdir_trailing_slash_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -rf conftest.dir fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mkdir_trailing_slash_works" >&5 printf "%s\n" "$gl_cv_func_mkdir_trailing_slash_works" >&6; } case "$gl_cv_func_mkdir_trailing_slash_works" in *yes) ;; *) REPLACE_MKDIR=1 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mkdir handles trailing dot" >&5 printf %s "checking whether mkdir handles trailing dot... " >&6; } if test ${gl_cv_func_mkdir_trailing_dot_works+y} then : printf %s "(cached) " >&6 else $as_nop rm -rf conftest.dir if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_mkdir_trailing_dot_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> $gl_mda_defines int main (void) { return !mkdir ("conftest.dir/./", 0700); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mkdir_trailing_dot_works=yes else $as_nop gl_cv_func_mkdir_trailing_dot_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -rf conftest.dir fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mkdir_trailing_dot_works" >&5 printf "%s\n" "$gl_cv_func_mkdir_trailing_dot_works" >&6; } case "$gl_cv_func_mkdir_trailing_dot_works" in *yes) ;; *) REPLACE_MKDIR=1 printf "%s\n" "#define FUNC_MKDIR_DOT_BUG 1" >>confdefs.h ;; esac if test $REPLACE_MKDIR = 1; then GL_COND_OBJ_MKDIR_TRUE= GL_COND_OBJ_MKDIR_FALSE='#' else GL_COND_OBJ_MKDIR_TRUE='#' GL_COND_OBJ_MKDIR_FALSE= fi : if test -z "${GL_COND_OBJ_MKDIR_TRUE}" && test -z "${GL_COND_OBJ_MKDIR_FALSE}"; then GL_COND_OBJ_MKDIR_TRUE='#' GL_COND_OBJ_MKDIR_FALSE='#' fi GL_GNULIB_MKDIR=1 printf "%s\n" "#define GNULIB_TEST_MKDIR 1" >>confdefs.h if test $ac_cv_func_mkostemp != yes; then HAVE_MKOSTEMP=0 fi if test $HAVE_MKOSTEMP = 0; then GL_COND_OBJ_MKOSTEMP_TRUE= GL_COND_OBJ_MKOSTEMP_FALSE='#' else GL_COND_OBJ_MKOSTEMP_TRUE='#' GL_COND_OBJ_MKOSTEMP_FALSE= fi : if test -z "${GL_COND_OBJ_MKOSTEMP_TRUE}" && test -z "${GL_COND_OBJ_MKOSTEMP_FALSE}"; then GL_COND_OBJ_MKOSTEMP_TRUE='#' GL_COND_OBJ_MKOSTEMP_FALSE='#' fi if test -z "$GL_COND_OBJ_MKOSTEMP_TRUE"; then : fi printf "%s\n" "#define GNULIB_MKOSTEMP 1" >>confdefs.h GL_GNULIB_MKOSTEMP=1 printf "%s\n" "#define GNULIB_TEST_MKOSTEMP 1" >>confdefs.h if test $ac_cv_func_mkstemp = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working mkstemp" >&5 printf %s "checking for working mkstemp... " >&6; } if test ${gl_cv_func_working_mkstemp+y} then : printf %s "(cached) " >&6 else $as_nop mkdir conftest.mkstemp if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_mkstemp="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_working_mkstemp="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_working_mkstemp="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_mkstemp="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ $ac_includes_default $gl_mda_defines int main (void) { int result = 0; int i; off_t large = (off_t) 4294967295u; if (large < 0) large = 2147483647; umask (0); for (i = 0; i < 70; i++) { char templ[] = "conftest.mkstemp/coXXXXXX"; int (*mkstemp_function) (char *) = mkstemp; int fd = mkstemp_function (templ); if (fd < 0) result |= 1; else { struct stat st; if (lseek (fd, large, SEEK_SET) != large) result |= 2; if (fstat (fd, &st) < 0) result |= 4; else if (st.st_mode & 0077) result |= 8; if (close (fd)) result |= 16; } } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_working_mkstemp=yes else $as_nop gl_cv_func_working_mkstemp=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -rf conftest.mkstemp fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_working_mkstemp" >&5 printf "%s\n" "$gl_cv_func_working_mkstemp" >&6; } case "$gl_cv_func_working_mkstemp" in *yes) ;; *) REPLACE_MKSTEMP=1 ;; esac else HAVE_MKSTEMP=0 fi if test $HAVE_MKSTEMP = 0 || test $REPLACE_MKSTEMP = 1; then GL_COND_OBJ_MKSTEMP_TRUE= GL_COND_OBJ_MKSTEMP_FALSE='#' else GL_COND_OBJ_MKSTEMP_TRUE='#' GL_COND_OBJ_MKSTEMP_FALSE= fi : if test -z "${GL_COND_OBJ_MKSTEMP_TRUE}" && test -z "${GL_COND_OBJ_MKSTEMP_FALSE}"; then GL_COND_OBJ_MKSTEMP_TRUE='#' GL_COND_OBJ_MKSTEMP_FALSE='#' fi if test -z "$GL_COND_OBJ_MKSTEMP_TRUE"; then : fi GL_GNULIB_MKSTEMP=1 printf "%s\n" "#define GNULIB_TEST_MKSTEMP 1" >>confdefs.h REPLACE_MKTIME=0 if test "$gl_cv_func_working_mktime" != yes; then REPLACE_MKTIME=1 printf "%s\n" "#define NEED_MKTIME_WORKING 1" >>confdefs.h fi case "$host_os" in mingw*) REPLACE_MKTIME=1 printf "%s\n" "#define NEED_MKTIME_WINDOWS 1" >>confdefs.h ;; esac if test $REPLACE_MKTIME = 1; then gl_LIBOBJS="$gl_LIBOBJS mktime.$ac_objext" : fi GL_GNULIB_MKTIME=1 printf "%s\n" "#define GNULIB_TEST_MKTIME 1" >>confdefs.h WANT_MKTIME_INTERNAL=0 ac_fn_c_check_func "$LINENO" "__mktime_internal" "ac_cv_func___mktime_internal" if test "x$ac_cv_func___mktime_internal" = xyes then : printf "%s\n" "#define mktime_internal __mktime_internal" >>confdefs.h else $as_nop WANT_MKTIME_INTERNAL=1 printf "%s\n" "#define NEED_MKTIME_INTERNAL 1" >>confdefs.h fi if test $WANT_MKTIME_INTERNAL = 1; then gl_LIBOBJS="$gl_LIBOBJS mktime.$ac_objext" : fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then GL_COND_OBJ_MSVC_INVAL_TRUE= GL_COND_OBJ_MSVC_INVAL_FALSE='#' else GL_COND_OBJ_MSVC_INVAL_TRUE='#' GL_COND_OBJ_MSVC_INVAL_FALSE= fi : if test -z "${GL_COND_OBJ_MSVC_INVAL_TRUE}" && test -z "${GL_COND_OBJ_MSVC_INVAL_FALSE}"; then GL_COND_OBJ_MSVC_INVAL_TRUE='#' GL_COND_OBJ_MSVC_INVAL_FALSE='#' fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then GL_COND_OBJ_MSVC_NOTHROW_TRUE= GL_COND_OBJ_MSVC_NOTHROW_FALSE='#' else GL_COND_OBJ_MSVC_NOTHROW_TRUE='#' GL_COND_OBJ_MSVC_NOTHROW_FALSE= fi : if test -z "${GL_COND_OBJ_MSVC_NOTHROW_TRUE}" && test -z "${GL_COND_OBJ_MSVC_NOTHROW_FALSE}"; then GL_COND_OBJ_MSVC_NOTHROW_TRUE='#' GL_COND_OBJ_MSVC_NOTHROW_FALSE='#' fi printf "%s\n" "#define GNULIB_MSVC_NOTHROW 1" >>confdefs.h if test $ac_cv_func_nl_langinfo = yes; then # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether YESEXPR works" >&5 printf %s "checking whether YESEXPR works... " >&6; } if test ${gl_cv_func_nl_langinfo_yesexpr_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on irix systems. irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";; # Guess yes elsewhere. *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <langinfo.h> int main (void) { return !*nl_langinfo(YESEXPR); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_nl_langinfo_yesexpr_works=yes else $as_nop gl_cv_func_nl_langinfo_yesexpr_works=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: $gl_cv_func_nl_langinfo_yesexpr_works" >&5 printf "%s\n" "$gl_cv_func_nl_langinfo_yesexpr_works" >&6; } case $gl_cv_func_nl_langinfo_yesexpr_works in *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;; *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;; esac printf "%s\n" "#define FUNC_NL_LANGINFO_YESEXPR_WORKS $FUNC_NL_LANGINFO_YESEXPR_WORKS" >>confdefs.h # On Solaris 10 and Solaris 11.3, nl_langinfo is not multithread-safe. case "$host_os" in solaris*) NL_LANGINFO_MTSAFE=0 ;; *) NL_LANGINFO_MTSAFE=1 ;; esac printf "%s\n" "#define NL_LANGINFO_MTSAFE $NL_LANGINFO_MTSAFE" >>confdefs.h if test $HAVE_LANGINFO_CODESET = 1 \ && test $HAVE_LANGINFO_T_FMT_AMPM = 1 \ && test $HAVE_LANGINFO_ALTMON = 1 \ && test $HAVE_LANGINFO_ERA = 1 \ && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1 \ && test $NL_LANGINFO_MTSAFE = 1; then : else REPLACE_NL_LANGINFO=1 printf "%s\n" "#define REPLACE_NL_LANGINFO 1" >>confdefs.h fi else HAVE_NL_LANGINFO=0 fi if test $HAVE_NL_LANGINFO = 0 || test $HAVE_LANGINFO_CODESET = 0; then LIB_NL_LANGINFO="$LIB_SETLOCALE_NULL" else LIB_NL_LANGINFO= fi if test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1; then GL_COND_OBJ_NL_LANGINFO_TRUE= GL_COND_OBJ_NL_LANGINFO_FALSE='#' else GL_COND_OBJ_NL_LANGINFO_TRUE='#' GL_COND_OBJ_NL_LANGINFO_FALSE= fi : if test -z "${GL_COND_OBJ_NL_LANGINFO_TRUE}" && test -z "${GL_COND_OBJ_NL_LANGINFO_FALSE}"; then GL_COND_OBJ_NL_LANGINFO_TRUE='#' GL_COND_OBJ_NL_LANGINFO_FALSE='#' fi if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE= GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE='#' else GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE='#' GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE= fi : if test -z "${GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE}" && test -z "${GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE}"; then GL_COND_OBJ_NL_LANGINFO_LOCK_TRUE='#' GL_COND_OBJ_NL_LANGINFO_LOCK_FALSE='#' fi if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes else $as_nop gl_cv_cc_vis_werror=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes else $as_nop gl_cv_cc_visibility=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h fi GL_GNULIB_NL_LANGINFO=1 printf "%s\n" "#define GNULIB_TEST_NL_LANGINFO 1" >>confdefs.h # This defines (or not) HAVE_TZNAME and HAVE_STRUCT_TM_TM_ZONE. printf "%s\n" "#define my_strftime nstrftime" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for obstacks that work with any size object" >&5 printf %s "checking for obstacks that work with any size object... " >&6; } if test ${gl_cv_func_obstack+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include "obstack.h" void *obstack_chunk_alloc (size_t n) { return 0; } void obstack_chunk_free (void *p) { } /* Check that an internal function returns size_t, not int. */ size_t _obstack_memory_used (struct obstack *); int main (void) { struct obstack mem; obstack_init (&mem); obstack_free (&mem, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_obstack=yes else $as_nop gl_cv_func_obstack=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: $gl_cv_func_obstack" >&5 printf "%s\n" "$gl_cv_func_obstack" >&6; } if test "$gl_cv_func_obstack" = yes; then printf "%s\n" "#define HAVE_OBSTACK 1" >>confdefs.h fi if test "$gl_cv_func_obstack" != yes; then GL_COND_OBJ_OBSTACK_TRUE= GL_COND_OBJ_OBSTACK_FALSE='#' else GL_COND_OBJ_OBSTACK_TRUE='#' GL_COND_OBJ_OBSTACK_FALSE= fi : if test -z "${GL_COND_OBJ_OBSTACK_TRUE}" && test -z "${GL_COND_OBJ_OBSTACK_FALSE}"; then GL_COND_OBJ_OBSTACK_TRUE='#' GL_COND_OBJ_OBSTACK_FALSE='#' fi case "$host_os" in mingw* | pw*) REPLACE_OPEN=1 ;; *) if test "$gl_cv_macro_O_CLOEXEC" != yes; then REPLACE_OPEN=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether open recognizes a trailing slash" >&5 printf %s "checking whether open recognizes a trailing slash... " >&6; } if test ${gl_cv_func_open_slash+y} then : printf %s "(cached) " >&6 else $as_nop # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then touch conftest.tmp ln -s conftest.tmp conftest.lnk fi if test "$cross_compiling" = yes then : case "$host_os" in freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_open_slash="guessing no" ;; *) gl_cv_func_open_slash="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <fcntl.h> #if HAVE_UNISTD_H # include <unistd.h> #endif $gl_mda_defines int main () { int result = 0; #if HAVE_LSTAT if (open ("conftest.lnk/", O_RDONLY) != -1) result |= 1; #endif if (open ("conftest.sl/", O_CREAT, 0600) >= 0) result |= 2; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_open_slash=yes else $as_nop gl_cv_func_open_slash=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.sl conftest.tmp conftest.lnk fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_open_slash" >&5 printf "%s\n" "$gl_cv_func_open_slash" >&6; } case "$gl_cv_func_open_slash" in *no) printf "%s\n" "#define OPEN_TRAILING_SLASH_BUG 1" >>confdefs.h ;; esac case "$gl_cv_func_open_slash" in *no) REPLACE_OPEN=1 ;; esac ;; esac if test $REPLACE_OPEN = 0; then if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then REPLACE_OPEN=1 fi fi if test $REPLACE_OPEN = 1; then GL_COND_OBJ_OPEN_TRUE= GL_COND_OBJ_OPEN_FALSE='#' else GL_COND_OBJ_OPEN_TRUE='#' GL_COND_OBJ_OPEN_FALSE= fi : if test -z "${GL_COND_OBJ_OPEN_TRUE}" && test -z "${GL_COND_OBJ_OPEN_FALSE}"; then GL_COND_OBJ_OPEN_TRUE='#' GL_COND_OBJ_OPEN_FALSE='#' fi if test -z "$GL_COND_OBJ_OPEN_TRUE"; then : : fi GL_GNULIB_OPEN=1 printf "%s\n" "#define GNULIB_TEST_OPEN 1" >>confdefs.h case $ac_cv_func_openat+$gl_cv_func_lstat_dereferences_slashed_symlink+$gl_cv_macro_O_CLOEXEC in yes+*yes+yes) ;; yes+*) # Solaris 10 lacks O_CLOEXEC. # Solaris 9 has *at functions, but uniformly mishandles trailing # slash in all of them. REPLACE_OPENAT=1 ;; *) HAVE_OPENAT=0 ;; esac if test $HAVE_OPENAT = 0 || test $REPLACE_OPENAT = 1; then GL_COND_OBJ_OPENAT_TRUE= GL_COND_OBJ_OPENAT_FALSE='#' else GL_COND_OBJ_OPENAT_TRUE='#' GL_COND_OBJ_OPENAT_FALSE= fi : if test -z "${GL_COND_OBJ_OPENAT_TRUE}" && test -z "${GL_COND_OBJ_OPENAT_FALSE}"; then GL_COND_OBJ_OPENAT_TRUE='#' GL_COND_OBJ_OPENAT_FALSE='#' fi if test -z "$GL_COND_OBJ_OPENAT_TRUE"; then : : fi printf "%s\n" "#define GNULIB_OPENAT 1" >>confdefs.h GL_GNULIB_OPENAT=1 printf "%s\n" "#define GNULIB_TEST_OPENAT 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "opendir" "ac_cv_func_opendir" if test "x$ac_cv_func_opendir" = xyes then : printf "%s\n" "#define HAVE_OPENDIR 1" >>confdefs.h fi if test $ac_cv_func_opendir = no; then HAVE_OPENDIR=0 fi if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi if test $HAVE_FCHDIR = 0; then if test $HAVE_OPENDIR = 1; then REPLACE_OPENDIR=1 fi fi case $host_os,$HAVE_OPENDIR in os2*,1) REPLACE_OPENDIR=1;; esac if test $HAVE_OPENDIR = 0 || test $REPLACE_OPENDIR = 1; then GL_COND_OBJ_OPENDIR_TRUE= GL_COND_OBJ_OPENDIR_FALSE='#' else GL_COND_OBJ_OPENDIR_TRUE='#' GL_COND_OBJ_OPENDIR_FALSE= fi : if test -z "${GL_COND_OBJ_OPENDIR_TRUE}" && test -z "${GL_COND_OBJ_OPENDIR_FALSE}"; then GL_COND_OBJ_OPENDIR_TRUE='#' GL_COND_OBJ_OPENDIR_FALSE='#' fi GL_GNULIB_OPENDIR=1 printf "%s\n" "#define GNULIB_TEST_OPENDIR 1" >>confdefs.h for ac_prog in bison 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_PARSE_DATETIME_BISON+y} then : printf %s "(cached) " >&6 else $as_nop if test -n "$PARSE_DATETIME_BISON"; then ac_cv_prog_PARSE_DATETIME_BISON="$PARSE_DATETIME_BISON" # 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_PARSE_DATETIME_BISON="$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 PARSE_DATETIME_BISON=$ac_cv_prog_PARSE_DATETIME_BISON if test -n "$PARSE_DATETIME_BISON"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PARSE_DATETIME_BISON" >&5 printf "%s\n" "$PARSE_DATETIME_BISON" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$PARSE_DATETIME_BISON" && break done if test -z "$PARSE_DATETIME_BISON"; then ac_verc_fail=yes else cat >conftest.y <<_ACEOF %require "2.4" %% exp: _ACEOF { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for bison 2.4 or newer" >&5 printf %s "checking for bison 2.4 or newer... " >&6; } ac_prog_version=`$PARSE_DATETIME_BISON --version 2>&1 | sed -n 's/^.*GNU Bison.* \([0-9]*\.[0-9.]*\).*$/\1/p'` : ${ac_prog_version:='v. ?.??'} if $PARSE_DATETIME_BISON conftest.y -o conftest.c 2>/dev/null; then ac_prog_version="$ac_prog_version, ok" ac_verc_fail=no else ac_prog_version="$ac_prog_version, bad" ac_verc_fail=yes fi rm -f conftest.y conftest.c { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_prog_version" >&5 printf "%s\n" "$ac_prog_version" >&6; } fi if test $ac_verc_fail = yes; then PARSE_DATETIME_BISON=: fi ac_fn_c_check_member "$LINENO" "struct tm" "tm_zone" "ac_cv_member_struct_tm_tm_zone" "#include <sys/types.h> #include <$ac_cv_struct_tm> " if test "x$ac_cv_member_struct_tm_tm_zone" = xyes then : printf "%s\n" "#define HAVE_STRUCT_TM_TM_ZONE 1" >>confdefs.h fi if test "$ac_cv_member_struct_tm_tm_zone" = yes; then printf "%s\n" "#define HAVE_TM_ZONE 1" >>confdefs.h else ac_fn_check_decl "$LINENO" "tzname" "ac_cv_have_decl_tzname" "#include <time.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_tzname" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_TZNAME $ac_have_decl" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for tzname" >&5 printf %s "checking for tzname... " >&6; } if test ${ac_cv_var_tzname+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <time.h> #if !HAVE_DECL_TZNAME extern char *tzname[]; #endif int main (void) { return tzname[0][0]; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_var_tzname=yes else $as_nop ac_cv_var_tzname=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_var_tzname" >&5 printf "%s\n" "$ac_cv_var_tzname" >&6; } if test $ac_cv_var_tzname = yes; then printf "%s\n" "#define HAVE_TZNAME 1" >>confdefs.h fi fi if test $ac_cv_func_pipe != yes; then HAVE_PIPE=0 fi if test $HAVE_PIPE = 0; then GL_COND_OBJ_PIPE_TRUE= GL_COND_OBJ_PIPE_FALSE='#' else GL_COND_OBJ_PIPE_TRUE='#' GL_COND_OBJ_PIPE_FALSE= fi : if test -z "${GL_COND_OBJ_PIPE_TRUE}" && test -z "${GL_COND_OBJ_PIPE_FALSE}"; then GL_COND_OBJ_PIPE_TRUE='#' GL_COND_OBJ_PIPE_FALSE='#' fi GL_GNULIB_PIPE=1 printf "%s\n" "#define GNULIB_TEST_PIPE 1" >>confdefs.h if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then GL_COND_OBJ_SPAWN_TRUE= GL_COND_OBJ_SPAWN_FALSE='#' else GL_COND_OBJ_SPAWN_TRUE='#' GL_COND_OBJ_SPAWN_FALSE= fi : if test -z "${GL_COND_OBJ_SPAWN_TRUE}" && test -z "${GL_COND_OBJ_SPAWN_FALSE}"; then GL_COND_OBJ_SPAWN_TRUE='#' GL_COND_OBJ_SPAWN_FALSE='#' fi GL_GNULIB_POSIX_SPAWN=1 printf "%s\n" "#define GNULIB_TEST_POSIX_SPAWN 1" >>confdefs.h if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then GL_COND_OBJ_SPAWNI_TRUE= GL_COND_OBJ_SPAWNI_FALSE='#' else GL_COND_OBJ_SPAWNI_TRUE='#' GL_COND_OBJ_SPAWNI_FALSE= fi : if test -z "${GL_COND_OBJ_SPAWNI_TRUE}" && test -z "${GL_COND_OBJ_SPAWNI_FALSE}"; then GL_COND_OBJ_SPAWNI_TRUE='#' GL_COND_OBJ_SPAWNI_FALSE='#' fi if test -z "$GL_COND_OBJ_SPAWNI_TRUE"; then : ac_fn_c_check_header_compile "$LINENO" "paths.h" "ac_cv_header_paths_h" "$ac_includes_default" if test "x$ac_cv_header_paths_h" = xyes then : printf "%s\n" "#define HAVE_PATHS_H 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "confstr" "ac_cv_func_confstr" if test "x$ac_cv_func_confstr" = xyes then : printf "%s\n" "#define HAVE_CONFSTR 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "sched_setparam" "ac_cv_func_sched_setparam" if test "x$ac_cv_func_sched_setparam" = xyes then : printf "%s\n" "#define HAVE_SCHED_SETPARAM 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "sched_setscheduler" "ac_cv_func_sched_setscheduler" if test "x$ac_cv_func_sched_setscheduler" = xyes then : printf "%s\n" "#define HAVE_SCHED_SETSCHEDULER 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "setegid" "ac_cv_func_setegid" if test "x$ac_cv_func_setegid" = xyes then : printf "%s\n" "#define HAVE_SETEGID 1" >>confdefs.h fi ac_fn_c_check_func "$LINENO" "seteuid" "ac_cv_func_seteuid" if test "x$ac_cv_func_seteuid" = xyes then : printf "%s\n" "#define HAVE_SETEUID 1" >>confdefs.h fi 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 fi if test $ac_cv_func_posix_spawn_file_actions_addchdir = yes; then REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=1 else HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0 fi if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1; then GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR_TRUE= GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR_FALSE='#' else GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR_TRUE='#' GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR_FALSE= fi : if test -z "${GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR_TRUE}" && test -z "${GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR_FALSE}"; then GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR_TRUE='#' GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR_FALSE='#' fi GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=1 printf "%s\n" "#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR 1" >>confdefs.h if test $REPLACE_POSIX_SPAWN = 1; then REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether posix_spawn_file_actions_addopen works" >&5 printf %s "checking whether posix_spawn_file_actions_addopen works... " >&6; } if test ${gl_cv_func_posix_spawn_file_actions_addopen_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : # Guess no on musl libc and Solaris, yes otherwise. case "$host_os" in *-musl*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";; solaris*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no" ;; *) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <spawn.h> #include <fcntl.h> int main () { posix_spawn_file_actions_t actions; if (posix_spawn_file_actions_init (&actions) != 0) return 1; if (posix_spawn_file_actions_addopen (&actions, 10000000, "foo", 0, O_RDONLY) == 0) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_posix_spawn_file_actions_addopen_works=yes else $as_nop gl_cv_func_posix_spawn_file_actions_addopen_works=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: $gl_cv_func_posix_spawn_file_actions_addopen_works" >&5 printf "%s\n" "$gl_cv_func_posix_spawn_file_actions_addopen_works" >&6; } case "$gl_cv_func_posix_spawn_file_actions_addopen_works" in *yes) ;; *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 ;; esac fi if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1; then GL_COND_OBJ_SPAWN_FACTION_ADDOPEN_TRUE= GL_COND_OBJ_SPAWN_FACTION_ADDOPEN_FALSE='#' else GL_COND_OBJ_SPAWN_FACTION_ADDOPEN_TRUE='#' GL_COND_OBJ_SPAWN_FACTION_ADDOPEN_FALSE= fi : if test -z "${GL_COND_OBJ_SPAWN_FACTION_ADDOPEN_TRUE}" && test -z "${GL_COND_OBJ_SPAWN_FACTION_ADDOPEN_FALSE}"; then GL_COND_OBJ_SPAWN_FACTION_ADDOPEN_TRUE='#' GL_COND_OBJ_SPAWN_FACTION_ADDOPEN_FALSE='#' fi GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 printf "%s\n" "#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN 1" >>confdefs.h if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then GL_COND_OBJ_SPAWN_FACTION_DESTROY_TRUE= GL_COND_OBJ_SPAWN_FACTION_DESTROY_FALSE='#' else GL_COND_OBJ_SPAWN_FACTION_DESTROY_TRUE='#' GL_COND_OBJ_SPAWN_FACTION_DESTROY_FALSE= fi : if test -z "${GL_COND_OBJ_SPAWN_FACTION_DESTROY_TRUE}" && test -z "${GL_COND_OBJ_SPAWN_FACTION_DESTROY_FALSE}"; then GL_COND_OBJ_SPAWN_FACTION_DESTROY_TRUE='#' GL_COND_OBJ_SPAWN_FACTION_DESTROY_FALSE='#' fi GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY=1 printf "%s\n" "#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY 1" >>confdefs.h if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then GL_COND_OBJ_SPAWN_FACTION_INIT_TRUE= GL_COND_OBJ_SPAWN_FACTION_INIT_FALSE='#' else GL_COND_OBJ_SPAWN_FACTION_INIT_TRUE='#' GL_COND_OBJ_SPAWN_FACTION_INIT_FALSE= fi : if test -z "${GL_COND_OBJ_SPAWN_FACTION_INIT_TRUE}" && test -z "${GL_COND_OBJ_SPAWN_FACTION_INIT_FALSE}"; then GL_COND_OBJ_SPAWN_FACTION_INIT_TRUE='#' GL_COND_OBJ_SPAWN_FACTION_INIT_FALSE='#' fi GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT=1 printf "%s\n" "#define GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT 1" >>confdefs.h if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then GL_COND_OBJ_SPAWNATTR_DESTROY_TRUE= GL_COND_OBJ_SPAWNATTR_DESTROY_FALSE='#' else GL_COND_OBJ_SPAWNATTR_DESTROY_TRUE='#' GL_COND_OBJ_SPAWNATTR_DESTROY_FALSE= fi : if test -z "${GL_COND_OBJ_SPAWNATTR_DESTROY_TRUE}" && test -z "${GL_COND_OBJ_SPAWNATTR_DESTROY_FALSE}"; then GL_COND_OBJ_SPAWNATTR_DESTROY_TRUE='#' GL_COND_OBJ_SPAWNATTR_DESTROY_FALSE='#' fi GL_GNULIB_POSIX_SPAWNATTR_DESTROY=1 printf "%s\n" "#define GNULIB_TEST_POSIX_SPAWNATTR_DESTROY 1" >>confdefs.h if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then GL_COND_OBJ_SPAWNATTR_INIT_TRUE= GL_COND_OBJ_SPAWNATTR_INIT_FALSE='#' else GL_COND_OBJ_SPAWNATTR_INIT_TRUE='#' GL_COND_OBJ_SPAWNATTR_INIT_FALSE= fi : if test -z "${GL_COND_OBJ_SPAWNATTR_INIT_TRUE}" && test -z "${GL_COND_OBJ_SPAWNATTR_INIT_FALSE}"; then GL_COND_OBJ_SPAWNATTR_INIT_TRUE='#' GL_COND_OBJ_SPAWNATTR_INIT_FALSE='#' fi GL_GNULIB_POSIX_SPAWNATTR_INIT=1 printf "%s\n" "#define GNULIB_TEST_POSIX_SPAWNATTR_INIT 1" >>confdefs.h if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then GL_COND_OBJ_SPAWNATTR_SETFLAGS_TRUE= GL_COND_OBJ_SPAWNATTR_SETFLAGS_FALSE='#' else GL_COND_OBJ_SPAWNATTR_SETFLAGS_TRUE='#' GL_COND_OBJ_SPAWNATTR_SETFLAGS_FALSE= fi : if test -z "${GL_COND_OBJ_SPAWNATTR_SETFLAGS_TRUE}" && test -z "${GL_COND_OBJ_SPAWNATTR_SETFLAGS_FALSE}"; then GL_COND_OBJ_SPAWNATTR_SETFLAGS_TRUE='#' GL_COND_OBJ_SPAWNATTR_SETFLAGS_FALSE='#' fi GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS=1 printf "%s\n" "#define GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS 1" >>confdefs.h if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then GL_COND_OBJ_SPAWNATTR_SETSIGMASK_TRUE= GL_COND_OBJ_SPAWNATTR_SETSIGMASK_FALSE='#' else GL_COND_OBJ_SPAWNATTR_SETSIGMASK_TRUE='#' GL_COND_OBJ_SPAWNATTR_SETSIGMASK_FALSE= fi : if test -z "${GL_COND_OBJ_SPAWNATTR_SETSIGMASK_TRUE}" && test -z "${GL_COND_OBJ_SPAWNATTR_SETSIGMASK_FALSE}"; then GL_COND_OBJ_SPAWNATTR_SETSIGMASK_TRUE='#' GL_COND_OBJ_SPAWNATTR_SETSIGMASK_FALSE='#' fi GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK=1 printf "%s\n" "#define GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK 1" >>confdefs.h if test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1; then GL_COND_OBJ_SPAWNP_TRUE= GL_COND_OBJ_SPAWNP_FALSE='#' else GL_COND_OBJ_SPAWNP_TRUE='#' GL_COND_OBJ_SPAWNP_FALSE= fi : if test -z "${GL_COND_OBJ_SPAWNP_TRUE}" && test -z "${GL_COND_OBJ_SPAWNP_FALSE}"; then GL_COND_OBJ_SPAWNP_TRUE='#' GL_COND_OBJ_SPAWNP_FALSE='#' fi GL_GNULIB_POSIX_SPAWNP=1 printf "%s\n" "#define GNULIB_TEST_POSIX_SPAWNP 1" >>confdefs.h if test $gl_cv_func_frexp_no_libm = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether frexp works" >&5 printf %s "checking whether frexp works... " >&6; } if test ${gl_cv_func_frexp_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;; mingw*) # Guess yes with MSVC, no with mingw. cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef _MSC_VER Good #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Good" >/dev/null 2>&1 then : gl_cv_func_frexp_works="guessing yes" else $as_nop gl_cv_func_frexp_works="guessing no" fi rm -rf conftest* ;; *) gl_cv_func_frexp_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <math.h> #include <string.h> #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. ICC 10.0 has a bug when optimizing the expression -zero. The expression -DBL_MIN * DBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static double compute_minus_zero (void) { return -DBL_MIN * DBL_MIN; } # define minus_zero compute_minus_zero () #else double minus_zero = -0.0; #endif int main() { int result = 0; int i; volatile double x; double zero = 0.0; #if HAVE_DECL_ALARM /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite number. Let the test fail in this case. */ signal (SIGALRM, SIG_DFL); alarm (5); #endif /* Test on denormalized numbers. */ for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) ; if (x > 0.0) { int exp; double y = frexp (x, &exp); /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. On NetBSD: y = 0.75. Correct: y = 0.5. */ if (y != 0.5) result |= 1; } /* Test on infinite numbers. */ x = 1.0 / zero; { int exp; double y = frexp (x, &exp); if (y != x) result |= 2; } /* Test on negative zero. */ x = minus_zero; { int exp; double y = frexp (x, &exp); if (memcmp (&y, &x, sizeof x)) result |= 4; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_frexp_works=yes else $as_nop gl_cv_func_frexp_works=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: $gl_cv_func_frexp_works" >&5 printf "%s\n" "$gl_cv_func_frexp_works" >&6; } case "$gl_cv_func_frexp_works" in *yes) printf "%s\n" "#define HAVE_FREXP_IN_LIBC 1" >>confdefs.h ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ldexp can be used without linking with libm" >&5 printf %s "checking whether ldexp can be used without linking with libm... " >&6; } if test ${gl_cv_func_ldexp_no_libm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> double x; int y; int main (void) { return ldexp (x, y) < 1; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_ldexp_no_libm=yes else $as_nop gl_cv_func_ldexp_no_libm=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: $gl_cv_func_ldexp_no_libm" >&5 printf "%s\n" "$gl_cv_func_ldexp_no_libm" >&6; } if test $gl_cv_func_ldexp_no_libm = yes; then printf "%s\n" "#define HAVE_LDEXP_IN_LIBC 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether frexpl() can be used without linking with libm" >&5 printf %s "checking whether frexpl() can be used without linking with libm... " >&6; } if test ${gl_cv_func_frexpl_no_libm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> long double x; int main (void) { int e; return frexpl (x, &e) > 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_frexpl_no_libm=yes else $as_nop gl_cv_func_frexpl_no_libm=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: $gl_cv_func_frexpl_no_libm" >&5 printf "%s\n" "$gl_cv_func_frexpl_no_libm" >&6; } if test $gl_cv_func_frexpl_no_libm = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether frexpl works" >&5 printf %s "checking whether frexpl works... " >&6; } if test ${gl_cv_func_frexpl_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*) gl_cv_func_frexpl_works="guessing no";; *) gl_cv_func_frexpl_works="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif extern #ifdef __cplusplus "C" #endif long double frexpl (long double, int *); long double zero = 0.0L; int main() { int result = 0; volatile long double x; /* Test on finite numbers that fails on AIX 5.1. */ x = 16.0L; { int exp = -9999; frexpl (x, &exp); if (exp != 5) result |= 1; } /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl function returns an invalid (incorrectly normalized) value: it returns y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } but the correct result is 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ x = 1.01L; { int exp = -9999; long double y = frexpl (x, &exp); if (!(exp == 1 && y == 0.505L)) result |= 2; } /* Test on large finite numbers. This fails on BeOS at i = 16322, while LDBL_MAX_EXP = 16384. In the loop end test, we test x against Infinity, rather than comparing i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */ { int i; for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) { int exp = -9999; frexpl (x, &exp); if (exp != i) { result |= 4; break; } } } /* Test on denormalized numbers. */ { int i; for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) ; if (x > 0.0L) { int exp; long double y = frexpl (x, &exp); /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */ if (exp != LDBL_MIN_EXP - 1) result |= 8; } } /* Test on infinite numbers. */ /* The Microsoft MSVC 14 compiler chokes on the expression 1.0 / 0.0. */ x = 1.0L / zero; { int exp; long double y = frexpl (x, &exp); if (y != x) result |= 16; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_frexpl_works=yes else $as_nop gl_cv_func_frexpl_works=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: $gl_cv_func_frexpl_works" >&5 printf "%s\n" "$gl_cv_func_frexpl_works" >&6; } case "$gl_cv_func_frexpl_works" in *yes) gl_func_frexpl_no_libm=yes ;; *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; esac else gl_func_frexpl_no_libm=no REPLACE_FREXPL=1 fi if test $gl_func_frexpl_no_libm = yes; then printf "%s\n" "#define HAVE_FREXPL_IN_LIBC 1" >>confdefs.h ac_fn_check_decl "$LINENO" "frexpl" "ac_cv_have_decl_frexpl" "#include <math.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_frexpl" = xyes then : else $as_nop HAVE_DECL_FREXPL=0 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ldexpl() can be used without linking with libm" >&5 printf %s "checking whether ldexpl() can be used without linking with libm... " >&6; } if test ${gl_cv_func_ldexpl_no_libm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> long double x; int main (void) { return ldexpl (x, -1) > 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_ldexpl_no_libm=yes else $as_nop gl_cv_func_ldexpl_no_libm=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: $gl_cv_func_ldexpl_no_libm" >&5 printf "%s\n" "$gl_cv_func_ldexpl_no_libm" >&6; } if test $gl_cv_func_ldexpl_no_libm = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether ldexpl works" >&5 printf %s "checking whether ldexpl works... " >&6; } if test ${gl_cv_func_ldexpl_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ldexpl_works="guessing yes" ;; *) gl_cv_func_ldexpl_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> extern #ifdef __cplusplus "C" #endif long double ldexpl (long double, int); int main() { int result = 0; { volatile long double x = 1.0; volatile long double y = ldexpl (x, -1); if (y != 0.5L) result |= 1; } { volatile long double x = 1.73205L; volatile long double y = ldexpl (x, 0); if (y != x) result |= 2; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_ldexpl_works=yes else $as_nop gl_cv_func_ldexpl_works=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: $gl_cv_func_ldexpl_works" >&5 printf "%s\n" "$gl_cv_func_ldexpl_works" >&6; } case "$gl_cv_func_ldexpl_works" in *yes) printf "%s\n" "#define HAVE_LDEXPL_IN_LIBC 1" >>confdefs.h ac_fn_check_decl "$LINENO" "ldexpl" "ac_cv_have_decl_ldexpl" "#include <math.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_ldexpl" = xyes then : else $as_nop HAVE_DECL_LDEXPL=0 fi ;; esac fi if test $gl_cv_func_vfprintf_posix = no; then gl_LIBOBJS="$gl_LIBOBJS printf.$ac_objext" REPLACE_PRINTF=1 printf "%s\n" "#define REPLACE_PRINTF_POSIX 1" >>confdefs.h : fi GL_GNULIB_PRINTF_POSIX=1 printf "%s\n" "#define GNULIB_TEST_PRINTF_POSIX 1" >>confdefs.h ac_fn_check_decl "$LINENO" "program_invocation_name" "ac_cv_have_decl_program_invocation_name" "#include <errno.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_program_invocation_name" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_NAME $ac_have_decl" >>confdefs.h ac_fn_check_decl "$LINENO" "program_invocation_short_name" "ac_cv_have_decl_program_invocation_short_name" "#include <errno.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_program_invocation_short_name" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME $ac_have_decl" >>confdefs.h : : ac_fn_c_check_func "$LINENO" "raise" "ac_cv_func_raise" if test "x$ac_cv_func_raise" = xyes then : printf "%s\n" "#define HAVE_RAISE 1" >>confdefs.h fi if test $ac_cv_func_raise = no; then HAVE_RAISE=0 else if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_RAISE=1 fi HAVE_POSIX_SIGNALBLOCKING=0 if test "$gl_cv_type_sigset_t" = yes; then ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" if test "x$ac_cv_func_sigprocmask" = xyes then : HAVE_POSIX_SIGNALBLOCKING=1 fi fi if test $HAVE_POSIX_SIGNALBLOCKING = 0; then : fi fi if test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1; then GL_COND_OBJ_RAISE_TRUE= GL_COND_OBJ_RAISE_FALSE='#' else GL_COND_OBJ_RAISE_TRUE='#' GL_COND_OBJ_RAISE_FALSE= fi : if test -z "${GL_COND_OBJ_RAISE_TRUE}" && test -z "${GL_COND_OBJ_RAISE_FALSE}"; then GL_COND_OBJ_RAISE_TRUE='#' GL_COND_OBJ_RAISE_FALSE='#' fi if test -z "$GL_COND_OBJ_RAISE_TRUE"; then : : fi GL_GNULIB_RAISE=1 printf "%s\n" "#define GNULIB_TEST_RAISE 1" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "random.h" "ac_cv_header_random_h" "$ac_includes_default " if test "x$ac_cv_header_random_h" = xyes then : printf "%s\n" "#define HAVE_RANDOM_H 1" >>confdefs.h fi if test $ac_cv_header_random_h = no; then HAVE_RANDOM_H=0 fi ac_fn_c_check_type "$LINENO" "struct random_data" "ac_cv_type_struct_random_data" "#include <stdlib.h> #if HAVE_RANDOM_H # include <random.h> #endif " if test "x$ac_cv_type_struct_random_data" = xyes then : printf "%s\n" "#define HAVE_STRUCT_RANDOM_DATA 1" >>confdefs.h else $as_nop HAVE_STRUCT_RANDOM_DATA=0 fi case "$host_os" in aix* | osf*) REPLACE_RANDOM_R=1 ;; *) ac_fn_c_check_func "$LINENO" "random_r" "ac_cv_func_random_r" if test "x$ac_cv_func_random_r" = xyes then : printf "%s\n" "#define HAVE_RANDOM_R 1" >>confdefs.h fi if test $ac_cv_func_random_r = no; then HAVE_RANDOM_R=0 fi ;; esac if test $HAVE_RANDOM_R = 0 || test $REPLACE_RANDOM_R = 1; then GL_COND_OBJ_RANDOM_R_TRUE= GL_COND_OBJ_RANDOM_R_FALSE='#' else GL_COND_OBJ_RANDOM_R_TRUE='#' GL_COND_OBJ_RANDOM_R_FALSE= fi : if test -z "${GL_COND_OBJ_RANDOM_R_TRUE}" && test -z "${GL_COND_OBJ_RANDOM_R_FALSE}"; then GL_COND_OBJ_RANDOM_R_TRUE='#' GL_COND_OBJ_RANDOM_R_FALSE='#' fi if test -z "$GL_COND_OBJ_RANDOM_R_TRUE"; then : : fi GL_GNULIB_RANDOM_R=1 printf "%s\n" "#define GNULIB_TEST_RANDOM_R 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "rawmemchr" "ac_cv_func_rawmemchr" if test "x$ac_cv_func_rawmemchr" = xyes then : printf "%s\n" "#define HAVE_RAWMEMCHR 1" >>confdefs.h fi if test $ac_cv_func_rawmemchr = no; then HAVE_RAWMEMCHR=0 fi if test $HAVE_RAWMEMCHR = 0; then GL_COND_OBJ_RAWMEMCHR_TRUE= GL_COND_OBJ_RAWMEMCHR_FALSE='#' else GL_COND_OBJ_RAWMEMCHR_TRUE='#' GL_COND_OBJ_RAWMEMCHR_FALSE= fi : if test -z "${GL_COND_OBJ_RAWMEMCHR_TRUE}" && test -z "${GL_COND_OBJ_RAWMEMCHR_FALSE}"; then GL_COND_OBJ_RAWMEMCHR_TRUE='#' GL_COND_OBJ_RAWMEMCHR_FALSE='#' fi if test -z "$GL_COND_OBJ_RAWMEMCHR_TRUE"; then : : fi GL_GNULIB_RAWMEMCHR=1 printf "%s\n" "#define GNULIB_TEST_RAWMEMCHR 1" >>confdefs.h if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_READ=1 fi if test $REPLACE_READ = 1; then GL_COND_OBJ_READ_TRUE= GL_COND_OBJ_READ_FALSE='#' else GL_COND_OBJ_READ_TRUE='#' GL_COND_OBJ_READ_FALSE= fi : if test -z "${GL_COND_OBJ_READ_TRUE}" && test -z "${GL_COND_OBJ_READ_FALSE}"; then GL_COND_OBJ_READ_TRUE='#' GL_COND_OBJ_READ_FALSE='#' fi if test -z "$GL_COND_OBJ_READ_TRUE"; then : : fi GL_GNULIB_READ=1 printf "%s\n" "#define GNULIB_TEST_READ 1" >>confdefs.h : ac_fn_c_check_func "$LINENO" "readdir" "ac_cv_func_readdir" if test "x$ac_cv_func_readdir" = xyes then : printf "%s\n" "#define HAVE_READDIR 1" >>confdefs.h fi if test $ac_cv_func_readdir = no; then HAVE_READDIR=0 fi if test $HAVE_READDIR = 0; then GL_COND_OBJ_READDIR_TRUE= GL_COND_OBJ_READDIR_FALSE='#' else GL_COND_OBJ_READDIR_TRUE='#' GL_COND_OBJ_READDIR_FALSE= fi : if test -z "${GL_COND_OBJ_READDIR_TRUE}" && test -z "${GL_COND_OBJ_READDIR_FALSE}"; then GL_COND_OBJ_READDIR_TRUE='#' GL_COND_OBJ_READDIR_FALSE='#' fi GL_GNULIB_READDIR=1 printf "%s\n" "#define GNULIB_TEST_READDIR 1" >>confdefs.h use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libreadline-prefix was given. if test ${with_libreadline_prefix+y} then : withval=$with_libreadline_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBREADLINE= LTLIBREADLINE= INCREADLINE= LIBREADLINE_PREFIX= HAVE_LIBREADLINE= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='readline ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBREADLINE="${LTLIBREADLINE}${LTLIBREADLINE:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBREADLINE; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBREADLINE="${LTLIBREADLINE}${LTLIBREADLINE:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBREADLINE; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$found_so" else LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$found_a" else LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'readline'; then LIBREADLINE_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'readline'; then LIBREADLINE_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'readline'; then LIBREADLINE_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCREADLINE; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCREADLINE="${INCREADLINE}${INCREADLINE:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBREADLINE; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBREADLINE; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBREADLINE="${LTLIBREADLINE}${LTLIBREADLINE:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$dep" LTLIBREADLINE="${LTLIBREADLINE}${LTLIBREADLINE:+ }$dep" ;; esac done fi else LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }-l$name" LTLIBREADLINE="${LTLIBREADLINE}${LTLIBREADLINE:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBREADLINE="${LIBREADLINE}${LIBREADLINE:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBREADLINE="${LTLIBREADLINE}${LTLIBREADLINE:+ }-R$found_dir" done fi am_save_CPPFLAGS="$CPPFLAGS" for element in $INCREADLINE; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for readline" >&5 printf %s "checking for readline... " >&6; } if test ${gl_cv_lib_readline+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_lib_readline=no am_save_LIBS="$LIBS" for extra_lib in "" ncurses termcap curses; do LIBS="$am_save_LIBS $LIBREADLINE" if test -n "$extra_lib"; then LIBS="$LIBS -l$extra_lib" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <readline/readline.h> int main (void) { readline((char*)0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : if test -n "$extra_lib"; then gl_cv_lib_readline="yes, requires -l$extra_lib" else gl_cv_lib_readline="yes" fi fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$gl_cv_lib_readline" != no; then break fi done LIBS="$am_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_lib_readline" >&5 printf "%s\n" "$gl_cv_lib_readline" >&6; } if test "$gl_cv_lib_readline" != no; then printf "%s\n" "#define HAVE_READLINE 1" >>confdefs.h extra_lib=`echo "$gl_cv_lib_readline" | sed -n -e 's/yes, requires //p'` if test -n "$extra_lib"; then LIBREADLINE="$LIBREADLINE $extra_lib" LTLIBREADLINE="$LTLIBREADLINE $extra_lib" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libreadline" >&5 printf %s "checking how to link with libreadline... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBREADLINE" >&5 printf "%s\n" "$LIBREADLINE" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBREADLINE= LTLIBREADLINE= fi ac_fn_c_check_header_compile "$LINENO" "readline/readline.h" "ac_cv_header_readline_readline_h" "$ac_includes_default" if test "x$ac_cv_header_readline_readline_h" = xyes then : printf "%s\n" "#define HAVE_READLINE_READLINE_H 1" >>confdefs.h fi ac_fn_c_check_header_compile "$LINENO" "readline/history.h" "ac_cv_header_readline_history_h" "$ac_includes_default" if test "x$ac_cv_header_readline_history_h" = xyes then : printf "%s\n" "#define HAVE_READLINE_HISTORY_H 1" >>confdefs.h fi if test "$gl_cv_lib_readline" = no; then GL_COND_OBJ_READLINE_TRUE= GL_COND_OBJ_READLINE_FALSE='#' else GL_COND_OBJ_READLINE_TRUE='#' GL_COND_OBJ_READLINE_FALSE= fi : if test -z "${GL_COND_OBJ_READLINE_TRUE}" && test -z "${GL_COND_OBJ_READLINE_FALSE}"; then GL_COND_OBJ_READLINE_TRUE='#' GL_COND_OBJ_READLINE_FALSE='#' fi if test -z "$GL_COND_OBJ_READLINE_TRUE"; then : : fi if test $ac_cv_func_readlink = no; then HAVE_READLINK=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether readlink signature is correct" >&5 printf %s "checking whether readlink signature is correct... " >&6; } if test ${gl_cv_decl_readlink_works+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> /* Cause compilation failure if original declaration has wrong type. */ ssize_t readlink (const char *, char *, size_t); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_decl_readlink_works=yes else $as_nop gl_cv_decl_readlink_works=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: $gl_cv_decl_readlink_works" >&5 printf "%s\n" "$gl_cv_decl_readlink_works" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether readlink handles trailing slash correctly" >&5 printf %s "checking whether readlink handles trailing slash correctly... " >&6; } if test ${gl_cv_func_readlink_trailing_slash+y} then : printf %s "(cached) " >&6 else $as_nop # We have readlink, so assume ln -s works. ln -s conftest.no-such conftest.link ln -s conftest.link conftest.lnk2 if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux or glibc systems. linux-* | linux | *-gnu* | gnu*) gl_cv_func_readlink_trailing_slash="guessing yes" ;; # Guess no on AIX or HP-UX. aix* | hpux*) gl_cv_func_readlink_trailing_slash="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_readlink_trailing_slash="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> int main (void) { char buf[20]; return readlink ("conftest.lnk2/", buf, sizeof buf) != -1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_readlink_trailing_slash=yes else $as_nop gl_cv_func_readlink_trailing_slash=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.link conftest.lnk2 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_readlink_trailing_slash" >&5 printf "%s\n" "$gl_cv_func_readlink_trailing_slash" >&6; } case "$gl_cv_func_readlink_trailing_slash" in *yes) if test "$gl_cv_decl_readlink_works" != yes; then REPLACE_READLINK=1 fi ;; *) printf "%s\n" "#define READLINK_TRAILING_SLASH_BUG 1" >>confdefs.h REPLACE_READLINK=1 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether readlink truncates results correctly" >&5 printf %s "checking whether readlink truncates results correctly... " >&6; } if test ${gl_cv_func_readlink_truncate+y} then : printf %s "(cached) " >&6 else $as_nop # We have readlink, so assume ln -s works. ln -s ab conftest.link if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux or glibc systems. linux-* | linux | *-gnu* | gnu*) gl_cv_func_readlink_truncate="guessing yes" ;; # Guess no on AIX or HP-UX. aix* | hpux*) gl_cv_func_readlink_truncate="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_readlink_truncate="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <unistd.h> int main (void) { char c; return readlink ("conftest.link", &c, 1) != 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_readlink_truncate=yes else $as_nop gl_cv_func_readlink_truncate=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.link conftest.lnk2 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_readlink_truncate" >&5 printf "%s\n" "$gl_cv_func_readlink_truncate" >&6; } case $gl_cv_func_readlink_truncate in *yes) if test "$gl_cv_decl_readlink_works" != yes; then REPLACE_READLINK=1 fi ;; *) printf "%s\n" "#define READLINK_TRUNCATE_BUG 1" >>confdefs.h REPLACE_READLINK=1 ;; esac fi if test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1; then GL_COND_OBJ_READLINK_TRUE= GL_COND_OBJ_READLINK_FALSE='#' else GL_COND_OBJ_READLINK_TRUE='#' GL_COND_OBJ_READLINK_FALSE= fi : if test -z "${GL_COND_OBJ_READLINK_TRUE}" && test -z "${GL_COND_OBJ_READLINK_FALSE}"; then GL_COND_OBJ_READLINK_TRUE='#' GL_COND_OBJ_READLINK_FALSE='#' fi if test -z "$GL_COND_OBJ_READLINK_TRUE"; then : : fi GL_GNULIB_READLINK=1 printf "%s\n" "#define GNULIB_TEST_READLINK 1" >>confdefs.h if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether realloc (0, 0) returns nonnull" >&5 printf %s "checking whether realloc (0, 0) returns nonnull... " >&6; } if test ${ac_cv_func_realloc_0_nonnull+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_realloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> int main (void) { void *p = realloc (0, 0); int result = !p; free (p); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : ac_cv_func_realloc_0_nonnull=yes else $as_nop ac_cv_func_realloc_0_nonnull=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: $ac_cv_func_realloc_0_nonnull" >&5 printf "%s\n" "$ac_cv_func_realloc_0_nonnull" >&6; } case $ac_cv_func_realloc_0_nonnull in #( *yes) : ;; #( *) : REPLACE_REALLOC_FOR_REALLOC_GNU=1 ;; esac fi if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then gl_LIBOBJS="$gl_LIBOBJS realloc.$ac_objext" fi GL_GNULIB_REALLOC_GNU=1 printf "%s\n" "#define GNULIB_TEST_REALLOC_GNU 1" >>confdefs.h if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_REALLOC_FOR_REALLOC_POSIX=1 fi if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then gl_LIBOBJS="$gl_LIBOBJS realloc.$ac_objext" fi GL_GNULIB_REALLOC_POSIX=1 printf "%s\n" "#define GNULIB_TEST_REALLOC_POSIX 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "reallocarray" "ac_cv_func_reallocarray" if test "x$ac_cv_func_reallocarray" = xyes then : printf "%s\n" "#define HAVE_REALLOCARRAY 1" >>confdefs.h fi if test "$ac_cv_func_reallocarray" = no; then HAVE_REALLOCARRAY=0 elif test "$gl_cv_malloc_ptrdiff" = no; then REPLACE_REALLOCARRAY=1 fi if test $HAVE_REALLOCARRAY = 0 || test $REPLACE_REALLOCARRAY = 1; then GL_COND_OBJ_REALLOCARRAY_TRUE= GL_COND_OBJ_REALLOCARRAY_FALSE='#' else GL_COND_OBJ_REALLOCARRAY_TRUE='#' GL_COND_OBJ_REALLOCARRAY_FALSE= fi : if test -z "${GL_COND_OBJ_REALLOCARRAY_TRUE}" && test -z "${GL_COND_OBJ_REALLOCARRAY_FALSE}"; then GL_COND_OBJ_REALLOCARRAY_TRUE='#' GL_COND_OBJ_REALLOCARRAY_FALSE='#' fi if test -z "$GL_COND_OBJ_REALLOCARRAY_TRUE"; then : : fi printf "%s\n" "#define GNULIB_REALLOCARRAY 1" >>confdefs.h GL_GNULIB_REALLOCARRAY=1 printf "%s\n" "#define GNULIB_TEST_REALLOCARRAY 1" >>confdefs.h # Check whether --with-included-regex was given. if test ${with_included_regex+y} then : withval=$with_included_regex; fi case $with_included_regex in #( yes|no) ac_use_included_regex=$with_included_regex ;; '') # If the system regex support is good enough that it passes the # following run test, then default to *not* using the included regex.c. # If cross compiling, assume the test would fail and use the included # regex.c. { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working re_compile_pattern" >&5 printf %s "checking for working re_compile_pattern... " >&6; } if test ${gl_cv_func_re_compile_pattern_working+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;; # Otherwise obey --enable-cross-guesses. *) gl_cv_func_re_compile_pattern_working="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <regex.h> #include <locale.h> #include <limits.h> #include <string.h> #if defined M_CHECK_ACTION || HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #if HAVE_MALLOC_H # include <malloc.h> #endif #ifdef M_CHECK_ACTION /* Exit with distinguishable exit code. */ static void sigabrt_no_core (int sig) { raise (SIGTERM); } #endif int main (void) { int result = 0; static struct re_pattern_buffer regex; unsigned char folded_chars[UCHAR_MAX + 1]; int i; const char *s; struct re_registers regs; /* Some builds of glibc go into an infinite loop on this test. Use alarm to force death, and mallopt to avoid malloc recursion in diagnosing the corrupted heap. */ #if HAVE_DECL_ALARM signal (SIGALRM, SIG_DFL); alarm (2); #endif #ifdef M_CHECK_ACTION signal (SIGABRT, sigabrt_no_core); mallopt (M_CHECK_ACTION, 2); #endif if (setlocale (LC_ALL, "en_US.UTF-8")) { { /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html This test needs valgrind to catch the bug on Debian GNU/Linux 3.1 x86, but it might catch the bug better on other platforms and it shouldn't hurt to try the test here. */ static char const pat[] = "insert into"; static char const data[] = "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { if (re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s) != -1) result |= 1; regfree (®ex); } } { /* This test is from glibc bug 15078. The test case is from Andreas Schwab in <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. */ static char const pat[] = "[^x]x"; static char const data[] = /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ "\xe1\x80\x80" "\xe1\x80\xbb" "\xe1\x80\xbd" "\xe1\x80\x94" "\xe1\x80\xba" "\xe1\x80\xaf" "\xe1\x80\x95" "\xe1\x80\xba" "x"; re_set_syntax (0); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, 0); if (i != 0 && i != 21) result |= 1; regfree (®ex); } } if (! setlocale (LC_ALL, "C")) return 1; } /* This test is from glibc bug 3957, reported by Andrew Mackey. */ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[^x]b", 6, ®ex); if (s) result |= 2; else { /* This should fail, but succeeds for glibc-2.5. */ if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) result |= 2; regfree (®ex); } /* This regular expression is from Spencer ere test number 75 in grep-2.3. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); for (i = 0; i <= UCHAR_MAX; i++) folded_chars[i] = i; regex.translate = folded_chars; s = re_compile_pattern ("a[[:]:]]b\n", 11, ®ex); /* This should fail with _Invalid character class name_ error. */ if (!s) { result |= 4; regfree (®ex); } /* Ensure that [b-a] is diagnosed as invalid, when using RE_NO_EMPTY_RANGES. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[b-a]", 6, ®ex); if (s == 0) { result |= 8; regfree (®ex); } /* This should succeed, but does not for glibc-2.1.3. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("{1", 2, ®ex); if (s) result |= 8; else regfree (®ex); /* The following example is derived from a problem report against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[an\371]*n", 7, ®ex); if (s) result |= 8; else { /* This should match, but does not for glibc-2.2.1. */ if (re_match (®ex, "an", 2, 0, ®s) != 2) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 8; else { /* glibc-2.2.93 does not work with a negative RANGE argument. */ if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } /* The version of regex.c in older versions of gnulib ignored RE_ICASE. Detect that problem too. */ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 16; else { if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) result |= 16; else { free (regs.start); free (regs.end); } regfree (®ex); } /* Catch a bug reported by Vin Shelton in https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html */ re_set_syntax (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[[:alnum:]_-]\\\\+\$", 16, ®ex); if (s) result |= 32; else regfree (®ex); /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (! REG_STARTEND) result |= 64; /* Matching with the compiled form of this regexp would provoke an assertion failure prior to glibc-2.28: regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed With glibc-2.28, compilation fails and reports the invalid back reference. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("0|()0|\\\\1|0", 10, ®ex); if (!s) { memset (®s, 0, sizeof regs); i = re_search (®ex, "x", 1, 0, 1, ®s); if (i != -1) result |= 64; if (0 <= i) { free (regs.start); free (regs.end); } regfree (®ex); } else { if (strcmp (s, "Invalid back reference")) result |= 64; } /* glibc bug 11053. */ re_set_syntax (RE_SYNTAX_POSIX_BASIC); memset (®ex, 0, sizeof regex); static char const pat_sub2[] = "\\\\(a*\\\\)*a*\\\\1"; s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, ®ex); if (s) result |= 64; else { memset (®s, 0, sizeof regs); static char const data[] = "a"; int datalen = sizeof data - 1; i = re_search (®ex, data, datalen, 0, datalen, ®s); if (i != 0) result |= 64; else if (regs.num_regs < 2) result |= 64; else if (! (regs.start[0] == 0 && regs.end[0] == 1)) result |= 64; else if (! (regs.start[1] == 0 && regs.end[1] == 0)) result |= 64; regfree (®ex); free (regs.start); free (regs.end); } #if 0 /* It would be nice to reject hosts whose regoff_t values are too narrow (including glibc on hosts with 64-bit ptrdiff_t and 32-bit int), but we should wait until glibc implements this feature. Otherwise, support for equivalence classes and multibyte collation symbols would always be broken except when compiling --without-included-regex. */ if (sizeof (regoff_t) < sizeof (ptrdiff_t) || sizeof (regoff_t) < sizeof (ssize_t)) result |= 64; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_re_compile_pattern_working=yes else $as_nop gl_cv_func_re_compile_pattern_working=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: $gl_cv_func_re_compile_pattern_working" >&5 printf "%s\n" "$gl_cv_func_re_compile_pattern_working" >&6; } case "$gl_cv_func_re_compile_pattern_working" in #( *yes) ac_use_included_regex=no;; #( *no) ac_use_included_regex=yes;; esac ;; *) as_fn_error $? "Invalid value for --with-included-regex: $with_included_regex" "$LINENO" 5 ;; esac if test $ac_use_included_regex = yes; then printf "%s\n" "#define _REGEX_INCLUDE_LIMITS_H 1" >>confdefs.h printf "%s\n" "#define _REGEX_LARGE_OFFSETS 1" >>confdefs.h printf "%s\n" "#define re_syntax_options rpl_re_syntax_options" >>confdefs.h printf "%s\n" "#define re_set_syntax rpl_re_set_syntax" >>confdefs.h printf "%s\n" "#define re_compile_pattern rpl_re_compile_pattern" >>confdefs.h printf "%s\n" "#define re_compile_fastmap rpl_re_compile_fastmap" >>confdefs.h printf "%s\n" "#define re_search rpl_re_search" >>confdefs.h printf "%s\n" "#define re_search_2 rpl_re_search_2" >>confdefs.h printf "%s\n" "#define re_match rpl_re_match" >>confdefs.h printf "%s\n" "#define re_match_2 rpl_re_match_2" >>confdefs.h printf "%s\n" "#define re_set_registers rpl_re_set_registers" >>confdefs.h printf "%s\n" "#define re_comp rpl_re_comp" >>confdefs.h printf "%s\n" "#define re_exec rpl_re_exec" >>confdefs.h printf "%s\n" "#define regcomp rpl_regcomp" >>confdefs.h printf "%s\n" "#define regexec rpl_regexec" >>confdefs.h printf "%s\n" "#define regerror rpl_regerror" >>confdefs.h printf "%s\n" "#define regfree rpl_regfree" >>confdefs.h fi if test $ac_use_included_regex = yes; then GL_COND_OBJ_REGEX_TRUE= GL_COND_OBJ_REGEX_FALSE='#' else GL_COND_OBJ_REGEX_TRUE='#' GL_COND_OBJ_REGEX_FALSE= fi : if test -z "${GL_COND_OBJ_REGEX_TRUE}" && test -z "${GL_COND_OBJ_REGEX_FALSE}"; then GL_COND_OBJ_REGEX_TRUE='#' GL_COND_OBJ_REGEX_FALSE='#' fi if test -z "$GL_COND_OBJ_REGEX_TRUE"; then : ac_fn_c_check_header_compile "$LINENO" "libintl.h" "ac_cv_header_libintl_h" "$ac_includes_default" if test "x$ac_cv_header_libintl_h" = xyes then : printf "%s\n" "#define HAVE_LIBINTL_H 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "isblank" "ac_cv_have_decl_isblank" "#include <ctype.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_isblank" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_ISBLANK $ac_have_decl" >>confdefs.h fi if { case "$gl_cv_func_rmdir_works:$gl_cv_func_unlink_honors_slashes" in *yes:*yes) false;; *) true;; esac }; then REPLACE_REMOVE=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether remove handles directories" >&5 printf %s "checking whether remove handles directories... " >&6; } if test ${gl_cv_func_remove_dir_works+y} then : printf %s "(cached) " >&6 else $as_nop mkdir conftest.dir if test "$cross_compiling" = yes then : case $host_os in mingw*) gl_cv_func_remove_dir_works="guessing no";; *) gl_cv_func_remove_dir_works="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> int main (void) { return remove ("conftest.dir"); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_remove_dir_works=yes else $as_nop gl_cv_func_remove_dir_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -rf conftest.dir fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_remove_dir_works" >&5 printf "%s\n" "$gl_cv_func_remove_dir_works" >&6; } case $gl_cv_func_remove_dir_works in *no*) REPLACE_REMOVE=1;; esac fi if test $REPLACE_REMOVE = 1; then GL_COND_OBJ_REMOVE_TRUE= GL_COND_OBJ_REMOVE_FALSE='#' else GL_COND_OBJ_REMOVE_TRUE='#' GL_COND_OBJ_REMOVE_FALSE= fi : if test -z "${GL_COND_OBJ_REMOVE_TRUE}" && test -z "${GL_COND_OBJ_REMOVE_FALSE}"; then GL_COND_OBJ_REMOVE_TRUE='#' GL_COND_OBJ_REMOVE_FALSE='#' fi GL_GNULIB_REMOVE=1 printf "%s\n" "#define GNULIB_TEST_REMOVE 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether rename honors trailing slash on destination" >&5 printf %s "checking whether rename honors trailing slash on destination... " >&6; } if test ${gl_cv_func_rename_slash_dst_works+y} then : printf %s "(cached) " >&6 else $as_nop rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk touch conftest.f && touch conftest.f1 && mkdir conftest.d1 || as_fn_error $? "cannot create temporary files" "$LINENO" 5 # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.f conftest.lnk fi if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rename_slash_dst_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_rename_slash_dst_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_rename_slash_dst_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rename_slash_dst_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include <stdio.h> # include <stdlib.h> int main (void) { int result = 0; if (rename ("conftest.f1", "conftest.f2/") == 0) result |= 1; if (rename ("conftest.d1", "conftest.d2/") != 0) result |= 2; #if HAVE_LSTAT if (rename ("conftest.f", "conftest.lnk/") == 0) result |= 4; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_rename_slash_dst_works=yes else $as_nop gl_cv_func_rename_slash_dst_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rename_slash_dst_works" >&5 printf "%s\n" "$gl_cv_func_rename_slash_dst_works" >&6; } case "$gl_cv_func_rename_slash_dst_works" in *yes) ;; *) REPLACE_RENAME=1 printf "%s\n" "#define RENAME_TRAILING_SLASH_DEST_BUG 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether rename honors trailing slash on source" >&5 printf %s "checking whether rename honors trailing slash on source... " >&6; } if test ${gl_cv_func_rename_slash_src_works+y} then : printf %s "(cached) " >&6 else $as_nop rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk touch conftest.f && touch conftest.f1 && mkdir conftest.d1 || as_fn_error $? "cannot create temporary files" "$LINENO" 5 # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.f conftest.lnk fi if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rename_slash_src_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_rename_slash_src_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_rename_slash_src_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rename_slash_src_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include <stdio.h> # include <stdlib.h> int main (void) { int result = 0; if (rename ("conftest.f1/", "conftest.d3") == 0) result |= 1; if (rename ("conftest.d1/", "conftest.d2") != 0) result |= 2; #if HAVE_LSTAT if (rename ("conftest.lnk/", "conftest.f") == 0) result |= 4; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_rename_slash_src_works=yes else $as_nop gl_cv_func_rename_slash_src_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rename_slash_src_works" >&5 printf "%s\n" "$gl_cv_func_rename_slash_src_works" >&6; } case "$gl_cv_func_rename_slash_src_works" in *yes) ;; *) REPLACE_RENAME=1 printf "%s\n" "#define RENAME_TRAILING_SLASH_SOURCE_BUG 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether rename manages hard links correctly" >&5 printf %s "checking whether rename manages hard links correctly... " >&6; } if test ${gl_cv_func_rename_link_works+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_func_link = yes; then if test $cross_compiling != yes; then rm -rf conftest.f conftest.f1 conftest.f2 if touch conftest.f conftest.f2 && ln conftest.f conftest.f1 && set x `ls -i conftest.f conftest.f1` && test "" = ""; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include <errno.h> # include <stdio.h> # include <stdlib.h> # include <unistd.h> $gl_mda_defines int main (void) { int result = 0; if (rename ("conftest.f", "conftest.f1")) result |= 1; if (unlink ("conftest.f1")) result |= 2; /* Allow either the POSIX-required behavior, where the previous rename kept conftest.f, or the (better) NetBSD behavior, where it removed conftest.f. */ if (rename ("conftest.f", "conftest.f") != 0 && errno != ENOENT) result |= 4; if (rename ("conftest.f1", "conftest.f1") == 0) result |= 8; if (rename ("conftest.f2", "conftest.f2") != 0) result |= 16; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_rename_link_works=yes else $as_nop gl_cv_func_rename_link_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else gl_cv_func_rename_link_works="guessing no" fi rm -rf conftest.f conftest.f1 conftest.f2 else case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rename_link_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_rename_link_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_rename_link_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rename_link_works="$gl_cross_guess_normal" ;; esac fi else gl_cv_func_rename_link_works=yes fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rename_link_works" >&5 printf "%s\n" "$gl_cv_func_rename_link_works" >&6; } case "$gl_cv_func_rename_link_works" in *yes) ;; *) REPLACE_RENAME=1 printf "%s\n" "#define RENAME_HARD_LINK_BUG 1" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether rename manages existing destinations correctly" >&5 printf %s "checking whether rename manages existing destinations correctly... " >&6; } if test ${gl_cv_func_rename_dest_works+y} then : printf %s "(cached) " >&6 else $as_nop rm -rf conftest.f conftest.d1 conftest.d2 touch conftest.f && mkdir conftest.d1 conftest.d2 || as_fn_error $? "cannot create temporary files" "$LINENO" 5 if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rename_dest_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_rename_dest_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_rename_dest_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rename_dest_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ # include <stdio.h> # include <stdlib.h> int main (void) { int result = 0; if (rename ("conftest.d1", "conftest.d2") != 0) result |= 1; if (rename ("conftest.d2", "conftest.f") == 0) result |= 2; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_rename_dest_works=yes else $as_nop gl_cv_func_rename_dest_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -rf conftest.f conftest.d1 conftest.d2 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rename_dest_works" >&5 printf "%s\n" "$gl_cv_func_rename_dest_works" >&6; } case "$gl_cv_func_rename_dest_works" in *yes) ;; *) REPLACE_RENAME=1 printf "%s\n" "#define RENAME_DEST_EXISTS_BUG 1" >>confdefs.h ;; esac if test $REPLACE_RENAME = 1; then GL_COND_OBJ_RENAME_TRUE= GL_COND_OBJ_RENAME_FALSE='#' else GL_COND_OBJ_RENAME_TRUE='#' GL_COND_OBJ_RENAME_FALSE= fi : if test -z "${GL_COND_OBJ_RENAME_TRUE}" && test -z "${GL_COND_OBJ_RENAME_FALSE}"; then GL_COND_OBJ_RENAME_TRUE='#' GL_COND_OBJ_RENAME_FALSE='#' fi GL_GNULIB_RENAME=1 printf "%s\n" "#define GNULIB_TEST_RENAME 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "rewinddir" "ac_cv_func_rewinddir" if test "x$ac_cv_func_rewinddir" = xyes then : printf "%s\n" "#define HAVE_REWINDDIR 1" >>confdefs.h fi if test $ac_cv_func_rewinddir = no; then HAVE_REWINDDIR=0 fi if test $HAVE_REWINDDIR = 0; then GL_COND_OBJ_REWINDDIR_TRUE= GL_COND_OBJ_REWINDDIR_FALSE='#' else GL_COND_OBJ_REWINDDIR_TRUE='#' GL_COND_OBJ_REWINDDIR_FALSE= fi : if test -z "${GL_COND_OBJ_REWINDDIR_TRUE}" && test -z "${GL_COND_OBJ_REWINDDIR_FALSE}"; then GL_COND_OBJ_REWINDDIR_TRUE='#' GL_COND_OBJ_REWINDDIR_FALSE='#' fi GL_GNULIB_REWINDDIR=1 printf "%s\n" "#define GNULIB_TEST_REWINDDIR 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether rmdir works" >&5 printf %s "checking whether rmdir works... " >&6; } if test ${gl_cv_func_rmdir_works+y} then : printf %s "(cached) " >&6 else $as_nop mkdir conftest.dir touch conftest.file if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rmdir_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_rmdir_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_rmdir_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rmdir_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #include <errno.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <direct.h> #endif $gl_mda_defines int main (void) { int result = 0; if (!rmdir ("conftest.file/")) result |= 1; else if (errno != ENOTDIR) result |= 2; if (!rmdir ("conftest.dir/./")) result |= 4; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_rmdir_works=yes else $as_nop gl_cv_func_rmdir_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -rf conftest.dir conftest.file fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_rmdir_works" >&5 printf "%s\n" "$gl_cv_func_rmdir_works" >&6; } case "$gl_cv_func_rmdir_works" in *yes) ;; *) REPLACE_RMDIR=1 ;; esac if test $REPLACE_RMDIR = 1; then GL_COND_OBJ_RMDIR_TRUE= GL_COND_OBJ_RMDIR_FALSE='#' else GL_COND_OBJ_RMDIR_TRUE='#' GL_COND_OBJ_RMDIR_FALSE= fi : if test -z "${GL_COND_OBJ_RMDIR_TRUE}" && test -z "${GL_COND_OBJ_RMDIR_FALSE}"; then GL_COND_OBJ_RMDIR_TRUE='#' GL_COND_OBJ_RMDIR_FALSE='#' fi GL_GNULIB_RMDIR=1 printf "%s\n" "#define GNULIB_TEST_RMDIR 1" >>confdefs.h if test $ac_cv_func_secure_getenv = no; then HAVE_SECURE_GETENV=0 fi if test $HAVE_SECURE_GETENV = 0; then GL_COND_OBJ_SECURE_GETENV_TRUE= GL_COND_OBJ_SECURE_GETENV_FALSE='#' else GL_COND_OBJ_SECURE_GETENV_TRUE='#' GL_COND_OBJ_SECURE_GETENV_FALSE= fi : if test -z "${GL_COND_OBJ_SECURE_GETENV_TRUE}" && test -z "${GL_COND_OBJ_SECURE_GETENV_FALSE}"; then GL_COND_OBJ_SECURE_GETENV_TRUE='#' GL_COND_OBJ_SECURE_GETENV_FALSE='#' fi if test -z "$GL_COND_OBJ_SECURE_GETENV_TRUE"; then : ac_fn_c_check_func "$LINENO" "__secure_getenv" "ac_cv_func___secure_getenv" if test "x$ac_cv_func___secure_getenv" = xyes then : printf "%s\n" "#define HAVE___SECURE_GETENV 1" >>confdefs.h fi if test $ac_cv_func___secure_getenv = no; then ac_fn_c_check_func "$LINENO" "issetugid" "ac_cv_func_issetugid" if test "x$ac_cv_func_issetugid" = xyes then : printf "%s\n" "#define HAVE_ISSETUGID 1" >>confdefs.h fi fi fi GL_GNULIB_SECURE_GETENV=1 printf "%s\n" "#define GNULIB_TEST_SECURE_GETENV 1" >>confdefs.h if test "$with_selinux" != no; then ac_fn_c_check_header_compile "$LINENO" "selinux/selinux.h" "ac_cv_header_selinux_selinux_h" "$ac_includes_default" if test "x$ac_cv_header_selinux_selinux_h" = xyes then : printf "%s\n" "#define HAVE_SELINUX_SELINUX_H 1" >>confdefs.h fi if test "$ac_cv_header_selinux_selinux_h" = yes; then # We do have <selinux/selinux.h>, so do compile getfilecon.c # and arrange to use its wrappers. if test $gl_cv_have_include_next = yes; then gl_cv_next_selinux_selinux_h='<'selinux/selinux.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <selinux/selinux.h>" >&5 printf %s "checking absolute name of <selinux/selinux.h>... " >&6; } if test ${gl_cv_next_selinux_selinux_h+y} then : printf %s "(cached) " >&6 else $as_nop if test $ac_cv_header_selinux_selinux_h = yes; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <selinux/selinux.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'selinux/selinux.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_selinux_selinux_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_selinux_selinux_h gl_cv_next_selinux_selinux_h='"'$gl_header'"' else gl_cv_next_selinux_selinux_h='<'selinux/selinux.h'>' fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_selinux_selinux_h" >&5 printf "%s\n" "$gl_cv_next_selinux_selinux_h" >&6; } fi NEXT_SELINUX_SELINUX_H=$gl_cv_next_selinux_selinux_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'selinux/selinux.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_selinux_selinux_h fi NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H=$gl_next_as_first_directive printf "%s\n" "#define getfilecon rpl_getfilecon" >>confdefs.h printf "%s\n" "#define lgetfilecon rpl_lgetfilecon" >>confdefs.h printf "%s\n" "#define fgetfilecon rpl_fgetfilecon" >>confdefs.h fi case "$ac_cv_search_setfilecon:$ac_cv_header_selinux_selinux_h" in no:*) # already warned ;; *:no) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: libselinux was found but selinux/selinux.h is missing." >&5 printf "%s\n" "$as_me: WARNING: libselinux was found but selinux/selinux.h is missing." >&2;} { printf "%s\n" "$as_me:${as_lineno-$LINENO}: WARNING: GNU recutils will be compiled without SELinux support." >&5 printf "%s\n" "$as_me: WARNING: GNU recutils will be compiled without SELinux support." >&2;} esac else # Do as if <selinux/selinux.h> does not exist, even if # AC_CHECK_HEADERS_ONCE has already determined that it exists. printf "%s\n" "#define HAVE_SELINUX_SELINUX_H 0" >>confdefs.h fi if test "$with_selinux" != no; then for ac_header in selinux/context.h do : ac_fn_c_check_header_compile "$LINENO" "selinux/context.h" "ac_cv_header_selinux_context_h" "$ac_includes_default" if test "x$ac_cv_header_selinux_context_h" = xyes then : printf "%s\n" "#define HAVE_SELINUX_CONTEXT_H 1" >>confdefs.h GL_GENERATE_SELINUX_CONTEXT_H=false else $as_nop GL_GENERATE_SELINUX_CONTEXT_H=true fi done else GL_GENERATE_SELINUX_CONTEXT_H=true fi GL_GENERATE_SELINUX_LABEL_H=true if test "$with_selinux" != no; then for ac_header in selinux/label.h do : ac_fn_c_check_header_compile "$LINENO" "selinux/label.h" "ac_cv_header_selinux_label_h" "$ac_includes_default" if test "x$ac_cv_header_selinux_label_h" = xyes then : printf "%s\n" "#define HAVE_SELINUX_LABEL_H 1" >>confdefs.h GL_GENERATE_SELINUX_LABEL_H=false fi done fi case "$GL_GENERATE_SELINUX_CONTEXT_H" in false) SELINUX_CONTEXT_H='' ;; true) if test -z "$SELINUX_CONTEXT_H"; then SELINUX_CONTEXT_H="${gl_source_base_prefix}selinux/context.h" fi ;; *) echo "*** GL_GENERATE_SELINUX_CONTEXT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_SELINUX_CONTEXT_H; then GL_GENERATE_SELINUX_CONTEXT_H_TRUE= GL_GENERATE_SELINUX_CONTEXT_H_FALSE='#' else GL_GENERATE_SELINUX_CONTEXT_H_TRUE='#' GL_GENERATE_SELINUX_CONTEXT_H_FALSE= fi : if test -z "${GL_GENERATE_SELINUX_CONTEXT_H_TRUE}" && test -z "${GL_GENERATE_SELINUX_CONTEXT_H_FALSE}"; then GL_GENERATE_SELINUX_CONTEXT_H_TRUE='#' GL_GENERATE_SELINUX_CONTEXT_H_FALSE='#' fi case "$GL_GENERATE_SELINUX_LABEL_H" in false) SELINUX_LABEL_H='' ;; true) if test -z "$SELINUX_LABEL_H"; then SELINUX_LABEL_H="${gl_source_base_prefix}selinux/label.h" fi ;; *) echo "*** GL_GENERATE_SELINUX_LABEL_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_SELINUX_LABEL_H; then GL_GENERATE_SELINUX_LABEL_H_TRUE= GL_GENERATE_SELINUX_LABEL_H_FALSE='#' else GL_GENERATE_SELINUX_LABEL_H_TRUE='#' GL_GENERATE_SELINUX_LABEL_H_FALSE= fi : if test -z "${GL_GENERATE_SELINUX_LABEL_H_TRUE}" && test -z "${GL_GENERATE_SELINUX_LABEL_H_FALSE}"; then GL_GENERATE_SELINUX_LABEL_H_TRUE='#' GL_GENERATE_SELINUX_LABEL_H_FALSE='#' fi if test "$with_selinux" != no && test "$ac_cv_header_selinux_selinux_h" = yes; then GL_COND_OBJ_GETFILECON_TRUE= GL_COND_OBJ_GETFILECON_FALSE='#' else GL_COND_OBJ_GETFILECON_TRUE='#' GL_COND_OBJ_GETFILECON_FALSE= fi : if test -z "${GL_COND_OBJ_GETFILECON_TRUE}" && test -z "${GL_COND_OBJ_GETFILECON_FALSE}"; then GL_COND_OBJ_GETFILECON_TRUE='#' GL_COND_OBJ_GETFILECON_FALSE='#' fi if test $ac_cv_func_setenv = no; then HAVE_SETENV=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setenv validates arguments" >&5 printf %s "checking whether setenv validates arguments... " >&6; } if test ${gl_cv_func_setenv_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_setenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setenv_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <errno.h> #include <string.h> int main (void) { int result = 0; { if (setenv ("", "", 0) != -1) result |= 1; else if (errno != EINVAL) result |= 2; } { if (setenv ("a", "=", 1) != 0) result |= 4; else if (strcmp (getenv ("a"), "=") != 0) result |= 8; } return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_setenv_works=yes else $as_nop gl_cv_func_setenv_works=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: $gl_cv_func_setenv_works" >&5 printf "%s\n" "$gl_cv_func_setenv_works" >&6; } case "$gl_cv_func_setenv_works" in *yes) ;; *) REPLACE_SETENV=1 ;; esac fi if test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1; then GL_COND_OBJ_SETENV_TRUE= GL_COND_OBJ_SETENV_FALSE='#' else GL_COND_OBJ_SETENV_TRUE='#' GL_COND_OBJ_SETENV_FALSE= fi : if test -z "${GL_COND_OBJ_SETENV_TRUE}" && test -z "${GL_COND_OBJ_SETENV_FALSE}"; then GL_COND_OBJ_SETENV_TRUE='#' GL_COND_OBJ_SETENV_FALSE='#' fi GL_GNULIB_SETENV=1 printf "%s\n" "#define GNULIB_TEST_SETENV 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (LC_ALL, NULL) is multithread-safe" >&5 printf %s "checking whether setlocale (LC_ALL, NULL) is multithread-safe... " >&6; } if test ${gl_cv_func_setlocale_null_all_mtsafe+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin. *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*) gl_cv_func_setlocale_null_all_mtsafe=no ;; # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*) gl_cv_func_setlocale_null_all_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_all_mtsafe" >&5 printf "%s\n" "$gl_cv_func_setlocale_null_all_mtsafe" >&6; } case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_all_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_all_mtsafe" in *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; esac printf "%s\n" "#define SETLOCALE_NULL_ALL_MTSAFE $SETLOCALE_NULL_ALL_MTSAFE" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether setlocale (category, NULL) is multithread-safe" >&5 printf %s "checking whether setlocale (category, NULL) is multithread-safe... " >&6; } if test ${gl_cv_func_setlocale_null_one_mtsafe+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on OpenBSD, AIX. openbsd* | aix*) gl_cv_func_setlocale_null_one_mtsafe=no ;; # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. *-gnu* | gnu* | *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*) gl_cv_func_setlocale_null_one_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_setlocale_null_one_mtsafe" >&5 printf "%s\n" "$gl_cv_func_setlocale_null_one_mtsafe" >&6; } case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_one_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_one_mtsafe" in *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; esac printf "%s\n" "#define SETLOCALE_NULL_ONE_MTSAFE $SETLOCALE_NULL_ONE_MTSAFE" >>confdefs.h if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then case "$host_os" in mingw*) LIB_SETLOCALE_NULL= ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether imported symbols can be declared weak" >&5 printf %s "checking whether imported symbols can be declared weak... " >&6; } if test ${gl_cv_have_weak+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in cygwin*) gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern void xyzzy (); #pragma weak xyzzy int main (void) { xyzzy(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_have_weak=maybe fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test $gl_cv_have_weak = maybe; then if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __ELF__ Extensible Linking Format #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Extensible Linking Format" >/dev/null 2>&1 then : gl_cv_have_weak="guessing yes" else $as_nop gl_cv_have_weak="guessing no" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_have_weak=yes else $as_nop gl_cv_have_weak=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 ;; esac case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&5 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&5 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_have_weak" >&5 printf "%s\n" "$gl_cv_have_weak" >&6; } case "$gl_cv_have_weak" in *yes) printf "%s\n" "#define HAVE_WEAK_SYMBOLS 1" >>confdefs.h ;; esac case "$gl_cv_have_weak" in *yes) LIB_SETLOCALE_NULL= ;; *) LIB_SETLOCALE_NULL="$LIBPTHREAD" ;; esac ;; esac else LIB_SETLOCALE_NULL= fi if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then GL_COND_OBJ_SETLOCALE_LOCK_TRUE= GL_COND_OBJ_SETLOCALE_LOCK_FALSE='#' else GL_COND_OBJ_SETLOCALE_LOCK_TRUE='#' GL_COND_OBJ_SETLOCALE_LOCK_FALSE= fi : if test -z "${GL_COND_OBJ_SETLOCALE_LOCK_TRUE}" && test -z "${GL_COND_OBJ_SETLOCALE_LOCK_FALSE}"; then GL_COND_OBJ_SETLOCALE_LOCK_TRUE='#' GL_COND_OBJ_SETLOCALE_LOCK_FALSE='#' fi if test -z "$GL_COND_OBJ_SETLOCALE_LOCK_TRUE"; then : CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether the -Werror option is usable" >&5 printf %s "checking whether the -Werror option is usable... " >&6; } if test ${gl_cv_cc_vis_werror+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_vis_werror=yes else $as_nop gl_cv_cc_vis_werror=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_vis_werror" >&5 printf "%s\n" "$gl_cv_cc_vis_werror" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for simple visibility declarations" >&5 printf %s "checking for simple visibility declarations... " >&6; } if test ${gl_cv_cc_visibility+y} then : printf %s "(cached) " >&6 else $as_nop gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_cc_visibility=yes else $as_nop gl_cv_cc_visibility=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext CFLAGS="$gl_save_CFLAGS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_visibility" >&5 printf "%s\n" "$gl_cv_cc_visibility" >&6; } if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi printf "%s\n" "#define HAVE_VISIBILITY $HAVE_VISIBILITY" >>confdefs.h fi GL_GNULIB_SETLOCALE_NULL=1 printf "%s\n" "#define GNULIB_TEST_SETLOCALE_NULL 1" >>confdefs.h if test $ac_cv_func_sigaction = yes; then ac_fn_c_check_member "$LINENO" "struct sigaction" "sa_sigaction" "ac_cv_member_struct_sigaction_sa_sigaction" "#include <signal.h> " if test "x$ac_cv_member_struct_sigaction_sa_sigaction" = xyes then : printf "%s\n" "#define HAVE_STRUCT_SIGACTION_SA_SIGACTION 1" >>confdefs.h fi if test $ac_cv_member_struct_sigaction_sa_sigaction = no; then HAVE_STRUCT_SIGACTION_SA_SIGACTION=0 fi else HAVE_SIGACTION=0 fi if test $HAVE_SIGACTION = 0; then GL_COND_OBJ_SIGACTION_TRUE= GL_COND_OBJ_SIGACTION_FALSE='#' else GL_COND_OBJ_SIGACTION_TRUE='#' GL_COND_OBJ_SIGACTION_FALSE= fi : if test -z "${GL_COND_OBJ_SIGACTION_TRUE}" && test -z "${GL_COND_OBJ_SIGACTION_FALSE}"; then GL_COND_OBJ_SIGACTION_TRUE='#' GL_COND_OBJ_SIGACTION_FALSE='#' fi if test -z "$GL_COND_OBJ_SIGACTION_TRUE"; then : ac_fn_c_check_type "$LINENO" "siginfo_t" "ac_cv_type_siginfo_t" " #include <signal.h> " if test "x$ac_cv_type_siginfo_t" = xyes then : printf "%s\n" "#define HAVE_SIGINFO_T 1" >>confdefs.h fi if test $ac_cv_type_siginfo_t = no; then HAVE_SIGINFO_T=0 fi fi GL_GNULIB_SIGACTION=1 printf "%s\n" "#define GNULIB_TEST_SIGACTION 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for signbit macro" >&5 printf %s "checking for signbit macro... " >&6; } if test ${gl_cv_func_signbit+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_signbit="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_signbit="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_signbit="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> /* If signbit is defined as a function, don't use it, since calling it for 'float' or 'long double' arguments would involve conversions. If signbit is not declared at all but exists as a library function, don't use it, since the prototype may not match. If signbit is not declared at all but exists as a compiler built-in, don't use it, since it's preferable to use __builtin_signbit* (no warnings, no conversions). */ #ifndef signbit # error "signbit should be a macro" #endif #include <string.h> /* Global variables. Needed because GCC 4 constant-folds __builtin_signbitl (literal) but cannot constant-fold __builtin_signbitl (variable). */ float vf; double vd; long double vl; int main () { /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. So we use -p0f and -p0d instead. */ float p0f = 0.0f; float m0f = -p0f; double p0d = 0.0; double m0d = -p0d; /* On HP-UX 10.20, negating 0.0L does not yield -0.0L. So we use another constant expression instead. But that expression does not work on other platforms, such as when cross-compiling to PowerPC on Mac OS X 10.5. */ long double p0l = 0.0L; #if defined __hpux || defined __sgi long double m0l = -LDBL_MIN * LDBL_MIN; #else long double m0l = -p0l; #endif int result = 0; if (signbit (vf)) /* link check */ vf++; { float plus_inf = 1.0f / p0f; float minus_inf = -1.0f / p0f; if (!(!signbit (255.0f) && signbit (-255.0f) && !signbit (p0f) && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 1; } if (signbit (vd)) /* link check */ vd++; { double plus_inf = 1.0 / p0d; double minus_inf = -1.0 / p0d; if (!(!signbit (255.0) && signbit (-255.0) && !signbit (p0d) && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 2; } if (signbit (vl)) /* link check */ vl++; { long double plus_inf = 1.0L / p0l; long double minus_inf = -1.0L / p0l; if (signbit (255.0L)) result |= 4; if (!signbit (-255.0L)) result |= 4; if (signbit (p0l)) result |= 8; if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) result |= 16; if (signbit (plus_inf)) result |= 32; if (!signbit (minus_inf)) result |= 64; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_signbit=yes else $as_nop gl_cv_func_signbit=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: $gl_cv_func_signbit" >&5 printf "%s\n" "$gl_cv_func_signbit" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for signbit compiler built-ins" >&5 printf %s "checking for signbit compiler built-ins... " >&6; } if test ${gl_cv_func_signbit_builtins+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_signbit_builtins="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_signbit_builtins="guessing yes" ;; # Guess yes on mingw, no on MSVC. mingw*) if test -n "$GCC"; then gl_cv_func_signbit_builtins="guessing yes" else gl_cv_func_signbit_builtins="guessing no" fi ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_signbit_builtins="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # define signbit(x) \ (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ __builtin_signbitf (x)) #else # error "signbit should be three compiler built-ins" #endif #include <string.h> /* Global variables. Needed because GCC 4 constant-folds __builtin_signbitl (literal) but cannot constant-fold __builtin_signbitl (variable). */ float vf; double vd; long double vl; int main () { /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. So we use -p0f and -p0d instead. */ float p0f = 0.0f; float m0f = -p0f; double p0d = 0.0; double m0d = -p0d; /* On HP-UX 10.20, negating 0.0L does not yield -0.0L. So we use another constant expression instead. But that expression does not work on other platforms, such as when cross-compiling to PowerPC on Mac OS X 10.5. */ long double p0l = 0.0L; #if defined __hpux || defined __sgi long double m0l = -LDBL_MIN * LDBL_MIN; #else long double m0l = -p0l; #endif int result = 0; if (signbit (vf)) /* link check */ vf++; { float plus_inf = 1.0f / p0f; float minus_inf = -1.0f / p0f; if (!(!signbit (255.0f) && signbit (-255.0f) && !signbit (p0f) && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 1; } if (signbit (vd)) /* link check */ vd++; { double plus_inf = 1.0 / p0d; double minus_inf = -1.0 / p0d; if (!(!signbit (255.0) && signbit (-255.0) && !signbit (p0d) && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 2; } if (signbit (vl)) /* link check */ vl++; { long double plus_inf = 1.0L / p0l; long double minus_inf = -1.0L / p0l; if (signbit (255.0L)) result |= 4; if (!signbit (-255.0L)) result |= 4; if (signbit (p0l)) result |= 8; if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) result |= 16; if (signbit (plus_inf)) result |= 32; if (!signbit (minus_inf)) result |= 64; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_signbit_builtins=yes else $as_nop gl_cv_func_signbit_builtins=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: $gl_cv_func_signbit_builtins" >&5 printf "%s\n" "$gl_cv_func_signbit_builtins" >&6; } case "$gl_cv_func_signbit_builtins" in *yes) REPLACE_SIGNBIT_USING_BUILTINS=1 ;; *) case "$gl_cv_func_signbit" in *yes) ;; *) REPLACE_SIGNBIT=1 ;; esac ;; esac case "$host_os" in solaris*) REPLACE_SIGNBIT=1 ;; esac if test $REPLACE_SIGNBIT = 1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'float'" >&5 printf %s "checking where to find the sign bit in a 'float'... " >&6; } if test ${gl_cv_cc_float_signbit+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : gl_cv_cc_float_signbit="unknown" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <stdio.h> #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0f }; static memory_float minus = { -1.0f }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_float_signbit=`cat conftest.out` else $as_nop gl_cv_cc_float_signbit="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_float_signbit" >&5 printf "%s\n" "$gl_cv_cc_float_signbit" >&6; } case "$gl_cv_cc_float_signbit" in word*bit*) word=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_signbit" | sed -e 's/word.*bit //'` printf "%s\n" "#define FLT_SIGNBIT_WORD $word" >>confdefs.h printf "%s\n" "#define FLT_SIGNBIT_BIT $bit" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'double'" >&5 printf %s "checking where to find the sign bit in a 'double'... " >&6; } if test ${gl_cv_cc_double_signbit+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : gl_cv_cc_double_signbit="unknown" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <stdio.h> #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0 }; static memory_float minus = { -1.0 }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_double_signbit=`cat conftest.out` else $as_nop gl_cv_cc_double_signbit="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_double_signbit" >&5 printf "%s\n" "$gl_cv_cc_double_signbit" >&6; } case "$gl_cv_cc_double_signbit" in word*bit*) word=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_signbit" | sed -e 's/word.*bit //'` printf "%s\n" "#define DBL_SIGNBIT_WORD $word" >>confdefs.h printf "%s\n" "#define DBL_SIGNBIT_BIT $bit" >>confdefs.h ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where to find the sign bit in a 'long double'" >&5 printf %s "checking where to find the sign bit in a 'long double'... " >&6; } if test ${gl_cv_cc_long_double_signbit+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : gl_cv_cc_long_double_signbit="unknown" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <stdio.h> #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0L }; static memory_float minus = { -1.0L }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_cc_long_double_signbit=`cat conftest.out` else $as_nop gl_cv_cc_long_double_signbit="unknown" fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.out fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_cc_long_double_signbit" >&5 printf "%s\n" "$gl_cv_cc_long_double_signbit" >&6; } case "$gl_cv_cc_long_double_signbit" in word*bit*) word=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_long_double_signbit" | sed -e 's/word.*bit //'` printf "%s\n" "#define LDBL_SIGNBIT_WORD $word" >>confdefs.h printf "%s\n" "#define LDBL_SIGNBIT_BIT $bit" >>confdefs.h ;; esac if test "$gl_cv_cc_float_signbit" = unknown; then ac_fn_check_decl "$LINENO" "copysignf" "ac_cv_have_decl_copysignf" "#include <math.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_copysignf" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_COPYSIGNF $ac_have_decl" >>confdefs.h if test "$ac_cv_have_decl_copysignf" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether copysignf can be used without linking with libm" >&5 printf %s "checking whether copysignf can be used without linking with libm... " >&6; } if test ${gl_cv_func_copysignf_no_libm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> float x, y; int main (void) { return copysignf (x, y) < 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_copysignf_no_libm=yes else $as_nop gl_cv_func_copysignf_no_libm=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: $gl_cv_func_copysignf_no_libm" >&5 printf "%s\n" "$gl_cv_func_copysignf_no_libm" >&6; } if test $gl_cv_func_copysignf_no_libm = yes; then printf "%s\n" "#define HAVE_COPYSIGNF_IN_LIBC 1" >>confdefs.h fi fi fi if test "$gl_cv_cc_double_signbit" = unknown; then ac_fn_check_decl "$LINENO" "copysign" "ac_cv_have_decl_copysign" "#include <math.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_copysign" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_COPYSIGN $ac_have_decl" >>confdefs.h if test "$ac_cv_have_decl_copysign" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether copysign can be used without linking with libm" >&5 printf %s "checking whether copysign can be used without linking with libm... " >&6; } if test ${gl_cv_func_copysign_no_libm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> double x, y; int main (void) { return copysign (x, y) < 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_copysign_no_libm=yes else $as_nop gl_cv_func_copysign_no_libm=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: $gl_cv_func_copysign_no_libm" >&5 printf "%s\n" "$gl_cv_func_copysign_no_libm" >&6; } if test $gl_cv_func_copysign_no_libm = yes; then printf "%s\n" "#define HAVE_COPYSIGN_IN_LIBC 1" >>confdefs.h fi fi fi if test "$gl_cv_cc_long_double_signbit" = unknown; then ac_fn_check_decl "$LINENO" "copysignl" "ac_cv_have_decl_copysignl" "#include <math.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_copysignl" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_COPYSIGNL $ac_have_decl" >>confdefs.h if test "$ac_cv_have_decl_copysignl" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether copysignl can be used without linking with libm" >&5 printf %s "checking whether copysignl can be used without linking with libm... " >&6; } if test ${gl_cv_func_copysignl_no_libm+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <math.h> long double x, y; int main (void) { return copysignl (x, y) < 0; ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_copysignl_no_libm=yes else $as_nop gl_cv_func_copysignl_no_libm=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: $gl_cv_func_copysignl_no_libm" >&5 printf "%s\n" "$gl_cv_func_copysignl_no_libm" >&6; } if test $gl_cv_func_copysignl_no_libm = yes; then printf "%s\n" "#define HAVE_COPYSIGNL_IN_LIBC 1" >>confdefs.h fi fi fi fi if test $REPLACE_SIGNBIT = 1; then GL_COND_OBJ_SIGNBIT3_TRUE= GL_COND_OBJ_SIGNBIT3_FALSE='#' else GL_COND_OBJ_SIGNBIT3_TRUE='#' GL_COND_OBJ_SIGNBIT3_FALSE= fi : if test -z "${GL_COND_OBJ_SIGNBIT3_TRUE}" && test -z "${GL_COND_OBJ_SIGNBIT3_FALSE}"; then GL_COND_OBJ_SIGNBIT3_TRUE='#' GL_COND_OBJ_SIGNBIT3_FALSE='#' fi GL_GNULIB_SIGNBIT=1 printf "%s\n" "#define GNULIB_TEST_SIGNBIT 1" >>confdefs.h HAVE_POSIX_SIGNALBLOCKING=0 if test "$gl_cv_type_sigset_t" = yes; then ac_fn_c_check_func "$LINENO" "sigprocmask" "ac_cv_func_sigprocmask" if test "x$ac_cv_func_sigprocmask" = xyes then : HAVE_POSIX_SIGNALBLOCKING=1 fi fi if test $HAVE_POSIX_SIGNALBLOCKING = 0; then GL_COND_OBJ_SIGPROCMASK_TRUE= GL_COND_OBJ_SIGPROCMASK_FALSE='#' else GL_COND_OBJ_SIGPROCMASK_TRUE='#' GL_COND_OBJ_SIGPROCMASK_FALSE= fi : if test -z "${GL_COND_OBJ_SIGPROCMASK_TRUE}" && test -z "${GL_COND_OBJ_SIGPROCMASK_FALSE}"; then GL_COND_OBJ_SIGPROCMASK_TRUE='#' GL_COND_OBJ_SIGPROCMASK_FALSE='#' fi if test -z "$GL_COND_OBJ_SIGPROCMASK_TRUE"; then : : fi GL_GNULIB_SIGPROCMASK=1 printf "%s\n" "#define GNULIB_TEST_SIGPROCMASK 1" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes then : printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for SIZE_MAX" >&5 printf %s "checking for SIZE_MAX... " >&6; } if test ${gl_cv_size_max+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_size_max=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #ifdef SIZE_MAX Found it #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Found it" >/dev/null 2>&1 then : gl_cv_size_max=yes fi rm -rf conftest* if test $gl_cv_size_max != yes; then if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) * CHAR_BIT - 1" "size_t_bits_minus_1" "#include <stddef.h> #include <limits.h>" then : else $as_nop size_t_bits_minus_1= fi if ac_fn_c_compute_int "$LINENO" "sizeof (size_t) <= sizeof (unsigned int)" "fits_in_uint" "#include <stddef.h>" then : else $as_nop fits_in_uint= fi if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> extern size_t foo; extern unsigned long foo; int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : fits_in_uint=0 fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else gl_cv_size_max='((size_t)~(size_t)0)' fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_size_max" >&5 printf "%s\n" "$gl_cv_size_max" >&6; } if test "$gl_cv_size_max" != yes; then printf "%s\n" "#define SIZE_MAX $gl_cv_size_max" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for ssize_t" >&5 printf %s "checking for ssize_t... " >&6; } if test ${gt_cv_ssize_t+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> int main (void) { int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_ssize_t=yes else $as_nop gt_cv_ssize_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: $gt_cv_ssize_t" >&5 printf "%s\n" "$gt_cv_ssize_t" >&6; } if test $gt_cv_ssize_t = no; then printf "%s\n" "#define ssize_t int" >>confdefs.h fi case "$host_os" in mingw*) REPLACE_STAT=1 ;; *) { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether stat handles trailing slashes on files" >&5 printf %s "checking whether stat handles trailing slashes on files... " >&6; } if test ${gl_cv_func_stat_file_slash+y} then : printf %s "(cached) " >&6 else $as_nop touch conftest.tmp # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/stat.h> int main (void) { int result = 0; struct stat st; if (!stat ("conftest.tmp/", &st)) result |= 1; #if HAVE_LSTAT if (!stat ("conftest.lnk/", &st)) result |= 2; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_stat_file_slash=yes else $as_nop gl_cv_func_stat_file_slash=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.tmp conftest.lnk fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_stat_file_slash" >&5 printf "%s\n" "$gl_cv_func_stat_file_slash" >&6; } case $gl_cv_func_stat_file_slash in *no) REPLACE_STAT=1 printf "%s\n" "#define REPLACE_FUNC_STAT_FILE 1" >>confdefs.h ;; esac case $host_os in solaris*) REPLACE_FSTAT=1 ;; esac ;; esac if test $REPLACE_STAT = 1; then GL_COND_OBJ_STAT_TRUE= GL_COND_OBJ_STAT_FALSE='#' else GL_COND_OBJ_STAT_TRUE='#' GL_COND_OBJ_STAT_FALSE= fi : if test -z "${GL_COND_OBJ_STAT_TRUE}" && test -z "${GL_COND_OBJ_STAT_FALSE}"; then GL_COND_OBJ_STAT_TRUE='#' GL_COND_OBJ_STAT_FALSE='#' fi if test -z "$GL_COND_OBJ_STAT_TRUE"; then : case "$host_os" in mingw*) gl_LIBOBJS="$gl_LIBOBJS stat-w32.$ac_objext" ;; esac : fi GL_GNULIB_STAT=1 printf "%s\n" "#define GNULIB_TEST_STAT 1" >>confdefs.h ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.tv_nsec" "ac_cv_member_struct_stat_st_atim_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_atim_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether struct stat.st_atim is of type struct timespec" >&5 printf %s "checking whether struct stat.st_atim is of type struct timespec... " >&6; } if test ${ac_cv_typeof_struct_stat_st_atim_is_struct_timespec+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> #include <sys/stat.h> #if HAVE_SYS_TIME_H # include <sys/time.h> #endif #include <time.h> struct timespec ts; struct stat st; int main (void) { st.st_atim = ts; ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes else $as_nop ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=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_typeof_struct_stat_st_atim_is_struct_timespec" >&5 printf "%s\n" "$ac_cv_typeof_struct_stat_st_atim_is_struct_timespec" >&6; } if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then printf "%s\n" "#define TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC 1" >>confdefs.h fi else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_atimespec.tv_nsec" "ac_cv_member_struct_stat_st_atimespec_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_atimespec_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC 1" >>confdefs.h else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_atimensec" "ac_cv_member_struct_stat_st_atimensec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_atimensec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIMENSEC 1" >>confdefs.h else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_atim.st__tim.tv_nsec" "ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_atim_st__tim_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC 1" >>confdefs.h fi fi fi fi ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimespec.tv_nsec" "ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_birthtimespec_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC 1" >>confdefs.h else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtimensec" "ac_cv_member_struct_stat_st_birthtimensec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_birthtimensec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC 1" >>confdefs.h else $as_nop ac_fn_c_check_member "$LINENO" "struct stat" "st_birthtim.tv_nsec" "ac_cv_member_struct_stat_st_birthtim_tv_nsec" "#include <sys/types.h> #include <sys/stat.h> " if test "x$ac_cv_member_struct_stat_st_birthtim_tv_nsec" = xyes then : printf "%s\n" "#define HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC 1" >>confdefs.h fi fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working stdalign.h" >&5 printf %s "checking for working stdalign.h... " >&6; } if test ${gl_cv_header_working_stdalign_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdint.h> #include <stdalign.h> #include <stddef.h> /* Test that alignof yields a result consistent with offsetof. This catches GCC bug 52023 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */ #ifdef __cplusplus template <class t> struct alignof_helper { char a; t b; }; # define ao(type) offsetof (alignof_helper<type>, b) #else # define ao(type) offsetof (struct { char a; type b; }, b) #endif char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1]; char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1]; char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1]; /* Test _Alignas only on platforms where gnulib can help. */ #if \ ((defined __cplusplus && 201103 <= __cplusplus) \ || (__TINYC__ && defined __attribute__) \ || (defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__) \ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \ || 1300 <= _MSC_VER) struct alignas_test { char c; char alignas (8) alignas_8; }; char test_alignas[offsetof (struct alignas_test, alignas_8) == 8 ? 1 : -1]; #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_header_working_stdalign_h=yes else $as_nop gl_cv_header_working_stdalign_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: $gl_cv_header_working_stdalign_h" >&5 printf "%s\n" "$gl_cv_header_working_stdalign_h" >&6; } if test $gl_cv_header_working_stdalign_h = yes; then GL_GENERATE_STDALIGN_H=false else GL_GENERATE_STDALIGN_H=true fi case "$GL_GENERATE_STDALIGN_H" in false) STDALIGN_H='' ;; true) if test -z "$STDALIGN_H"; then STDALIGN_H="${gl_source_base_prefix}stdalign.h" fi ;; *) echo "*** GL_GENERATE_STDALIGN_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_STDALIGN_H; then GL_GENERATE_STDALIGN_H_TRUE= GL_GENERATE_STDALIGN_H_FALSE='#' else GL_GENERATE_STDALIGN_H_TRUE='#' GL_GENERATE_STDALIGN_H_FALSE= fi : if test -z "${GL_GENERATE_STDALIGN_H_TRUE}" && test -z "${GL_GENERATE_STDALIGN_H_FALSE}"; then GL_GENERATE_STDALIGN_H_TRUE='#' GL_GENERATE_STDALIGN_H_FALSE='#' fi GL_GENERATE_STDARG_H=false NEXT_STDARG_H='<stdarg.h>' { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for va_copy" >&5 printf %s "checking for va_copy... " >&6; } if test ${gl_cv_func_va_copy+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdarg.h> int main (void) { #ifndef va_copy void (*func) (va_list, va_list) = va_copy; #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func_va_copy=yes else $as_nop gl_cv_func_va_copy=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: $gl_cv_func_va_copy" >&5 printf "%s\n" "$gl_cv_func_va_copy" >&6; } if test $gl_cv_func_va_copy = no; then cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined _AIX && !defined __GNUC__ AIX vaccine #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "vaccine" >/dev/null 2>&1 then : gl_aixcc=yes else $as_nop gl_aixcc=no fi rm -rf conftest* if test $gl_aixcc = yes; then GL_GENERATE_STDARG_H=true if test $gl_cv_have_include_next = yes; then gl_cv_next_stdarg_h='<'stdarg.h'>' else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking absolute name of <stdarg.h>" >&5 printf %s "checking absolute name of <stdarg.h>... " >&6; } if test ${gl_cv_next_stdarg_h+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdarg.h> _ACEOF case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac case "$host_os" in mingw*) gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo 'stdarg.h' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' gl_cv_absolute_stdarg_h=`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&5 | sed -n "$gl_absolute_header_sed"` gl_header=$gl_cv_absolute_stdarg_h gl_cv_next_stdarg_h='"'$gl_header'"' fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_next_stdarg_h" >&5 printf "%s\n" "$gl_cv_next_stdarg_h" >&6; } fi NEXT_STDARG_H=$gl_cv_next_stdarg_h if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'stdarg.h'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=$gl_cv_next_stdarg_h fi NEXT_AS_FIRST_DIRECTIVE_STDARG_H=$gl_next_as_first_directive if test "$gl_cv_next_stdarg_h" = '""'; then gl_cv_next_stdarg_h='"///usr/include/stdarg.h"' NEXT_STDARG_H="$gl_cv_next_stdarg_h" fi else exec 9>&6 6>/dev/null if test ${gl_cv_func___va_copy+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdarg.h> int main (void) { #ifndef __va_copy error, bail out #endif ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_func___va_copy=yes else $as_nop gl_cv_func___va_copy=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi exec 6>&9 9>&- if test $gl_cv_func___va_copy = yes; then printf "%s\n" "#define va_copy __va_copy" >>confdefs.h else printf "%s\n" "#define va_copy gl_va_copy" >>confdefs.h fi fi fi case "$GL_GENERATE_STDARG_H" in false) STDARG_H='' ;; true) if test -z "$STDARG_H"; then STDARG_H="${gl_source_base_prefix}stdarg.h" fi ;; *) echo "*** GL_GENERATE_STDARG_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_STDARG_H; then GL_GENERATE_STDARG_H_TRUE= GL_GENERATE_STDARG_H_FALSE='#' else GL_GENERATE_STDARG_H_TRUE='#' GL_GENERATE_STDARG_H_FALSE= fi : if test -z "${GL_GENERATE_STDARG_H_TRUE}" && test -z "${GL_GENERATE_STDARG_H_FALSE}"; then GL_GENERATE_STDARG_H_TRUE='#' GL_GENERATE_STDARG_H_FALSE='#' fi if test "$ac_cv_header_stdbool_h" = yes; then case "$host_os" in solaris*) if test -z "$GCC"; then GL_GENERATE_STDBOOL_H=true else GL_GENERATE_STDBOOL_H=false fi ;; *) GL_GENERATE_STDBOOL_H=false ;; esac else GL_GENERATE_STDBOOL_H=true fi if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi case "$GL_GENERATE_STDBOOL_H" in false) STDBOOL_H='' ;; true) if test -z "$STDBOOL_H"; then STDBOOL_H="${gl_source_base_prefix}stdbool.h" fi ;; *) echo "*** GL_GENERATE_STDBOOL_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_STDBOOL_H; then GL_GENERATE_STDBOOL_H_TRUE= GL_GENERATE_STDBOOL_H_FALSE='#' else GL_GENERATE_STDBOOL_H_TRUE='#' GL_GENERATE_STDBOOL_H_FALSE= fi : if test -z "${GL_GENERATE_STDBOOL_H_TRUE}" && test -z "${GL_GENERATE_STDBOOL_H_FALSE}"; then GL_GENERATE_STDBOOL_H_TRUE='#' GL_GENERATE_STDBOOL_H_FALSE='#' fi case "$GL_GENERATE_STDDEF_H" in false) STDDEF_H='' ;; true) if test -z "$STDDEF_H"; then STDDEF_H="${gl_source_base_prefix}stddef.h" fi ;; *) echo "*** GL_GENERATE_STDDEF_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_STDDEF_H; then GL_GENERATE_STDDEF_H_TRUE= GL_GENERATE_STDDEF_H_FALSE='#' else GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE= fi : if test -z "${GL_GENERATE_STDDEF_H_TRUE}" && test -z "${GL_GENERATE_STDDEF_H_FALSE}"; then GL_GENERATE_STDDEF_H_TRUE='#' GL_GENERATE_STDDEF_H_FALSE='#' fi case "$GL_GENERATE_STDINT_H" in false) STDINT_H='' ;; true) if test -z "$STDINT_H"; then STDINT_H="${gl_source_base_prefix}stdint.h" fi ;; *) echo "*** GL_GENERATE_STDINT_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_STDINT_H; then GL_GENERATE_STDINT_H_TRUE= GL_GENERATE_STDINT_H_FALSE='#' else GL_GENERATE_STDINT_H_TRUE='#' GL_GENERATE_STDINT_H_FALSE= fi : if test -z "${GL_GENERATE_STDINT_H_TRUE}" && test -z "${GL_GENERATE_STDINT_H_FALSE}"; then GL_GENERATE_STDINT_H_TRUE='#' GL_GENERATE_STDINT_H_FALSE='#' fi case "$GL_GENERATE_LIMITS_H" in false) LIMITS_H='' ;; true) if test -z "$LIMITS_H"; then LIMITS_H="${gl_source_base_prefix}limits.h" fi ;; *) echo "*** GL_GENERATE_LIMITS_H is not set correctly" 1>&2; exit 1 ;; esac if $GL_GENERATE_LIMITS_H; then GL_GENERATE_LIMITS_H_TRUE= GL_GENERATE_LIMITS_H_FALSE='#' else GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE= fi : if test -z "${GL_GENERATE_LIMITS_H_TRUE}" && test -z "${GL_GENERATE_LIMITS_H_FALSE}"; then GL_GENERATE_LIMITS_H_TRUE='#' GL_GENERATE_LIMITS_H_FALSE='#' fi if test $REPLACE_STDIO_READ_FUNCS = 1; then GL_COND_OBJ_STDIO_READ_TRUE= GL_COND_OBJ_STDIO_READ_FALSE='#' else GL_COND_OBJ_STDIO_READ_TRUE='#' GL_COND_OBJ_STDIO_READ_FALSE= fi : if test -z "${GL_COND_OBJ_STDIO_READ_TRUE}" && test -z "${GL_COND_OBJ_STDIO_READ_FALSE}"; then GL_COND_OBJ_STDIO_READ_TRUE='#' GL_COND_OBJ_STDIO_READ_FALSE='#' fi if test $REPLACE_STDIO_WRITE_FUNCS = 1; then GL_COND_OBJ_STDIO_WRITE_TRUE= GL_COND_OBJ_STDIO_WRITE_FALSE='#' else GL_COND_OBJ_STDIO_WRITE_TRUE='#' GL_COND_OBJ_STDIO_WRITE_FALSE= fi : if test -z "${GL_COND_OBJ_STDIO_WRITE_TRUE}" && test -z "${GL_COND_OBJ_STDIO_WRITE_FALSE}"; then GL_COND_OBJ_STDIO_WRITE_TRUE='#' GL_COND_OBJ_STDIO_WRITE_FALSE='#' fi GL_GNULIB_FSCANF=1 printf "%s\n" "#define GNULIB_TEST_FSCANF 1" >>confdefs.h printf "%s\n" "#define GNULIB_FSCANF 1" >>confdefs.h GL_GNULIB_SCANF=1 printf "%s\n" "#define GNULIB_TEST_SCANF 1" >>confdefs.h printf "%s\n" "#define GNULIB_SCANF 1" >>confdefs.h GL_GNULIB_FGETC=1 printf "%s\n" "#define GNULIB_TEST_FGETC 1" >>confdefs.h GL_GNULIB_GETC=1 printf "%s\n" "#define GNULIB_TEST_GETC 1" >>confdefs.h GL_GNULIB_GETCHAR=1 printf "%s\n" "#define GNULIB_TEST_GETCHAR 1" >>confdefs.h GL_GNULIB_FGETS=1 printf "%s\n" "#define GNULIB_TEST_FGETS 1" >>confdefs.h GL_GNULIB_FREAD=1 printf "%s\n" "#define GNULIB_TEST_FREAD 1" >>confdefs.h GL_GNULIB_FPRINTF=1 printf "%s\n" "#define GNULIB_TEST_FPRINTF 1" >>confdefs.h GL_GNULIB_PRINTF=1 printf "%s\n" "#define GNULIB_TEST_PRINTF 1" >>confdefs.h GL_GNULIB_VFPRINTF=1 printf "%s\n" "#define GNULIB_TEST_VFPRINTF 1" >>confdefs.h GL_GNULIB_VPRINTF=1 printf "%s\n" "#define GNULIB_TEST_VPRINTF 1" >>confdefs.h GL_GNULIB_FPUTC=1 printf "%s\n" "#define GNULIB_TEST_FPUTC 1" >>confdefs.h GL_GNULIB_PUTC=1 printf "%s\n" "#define GNULIB_TEST_PUTC 1" >>confdefs.h GL_GNULIB_PUTCHAR=1 printf "%s\n" "#define GNULIB_TEST_PUTCHAR 1" >>confdefs.h GL_GNULIB_FPUTS=1 printf "%s\n" "#define GNULIB_TEST_FPUTS 1" >>confdefs.h GL_GNULIB_PUTS=1 printf "%s\n" "#define GNULIB_TEST_PUTS 1" >>confdefs.h GL_GNULIB_FWRITE=1 printf "%s\n" "#define GNULIB_TEST_FWRITE 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "stpcpy" "ac_cv_func_stpcpy" if test "x$ac_cv_func_stpcpy" = xyes then : printf "%s\n" "#define HAVE_STPCPY 1" >>confdefs.h fi if test $ac_cv_func_stpcpy = no; then HAVE_STPCPY=0 fi if test $HAVE_STPCPY = 0; then GL_COND_OBJ_STPCPY_TRUE= GL_COND_OBJ_STPCPY_FALSE='#' else GL_COND_OBJ_STPCPY_TRUE='#' GL_COND_OBJ_STPCPY_FALSE= fi : if test -z "${GL_COND_OBJ_STPCPY_TRUE}" && test -z "${GL_COND_OBJ_STPCPY_FALSE}"; then GL_COND_OBJ_STPCPY_TRUE='#' GL_COND_OBJ_STPCPY_FALSE='#' fi if test -z "$GL_COND_OBJ_STPCPY_TRUE"; then : : fi GL_GNULIB_STPCPY=1 printf "%s\n" "#define GNULIB_TEST_STPCPY 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "strcasecmp" "ac_cv_func_strcasecmp" if test "x$ac_cv_func_strcasecmp" = xyes then : printf "%s\n" "#define HAVE_STRCASECMP 1" >>confdefs.h fi if test $ac_cv_func_strcasecmp = no; then HAVE_STRCASECMP=0 fi ac_fn_c_check_func "$LINENO" "strncasecmp" "ac_cv_func_strncasecmp" if test "x$ac_cv_func_strncasecmp" = xyes then : printf "%s\n" "#define HAVE_STRNCASECMP 1" >>confdefs.h fi if test $ac_cv_func_strncasecmp = yes; then HAVE_STRNCASECMP=1 else HAVE_STRNCASECMP=0 fi ac_fn_check_decl "$LINENO" "strncasecmp" "ac_cv_have_decl_strncasecmp" "$ac_includes_default" "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_strncasecmp" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_STRNCASECMP $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_strncasecmp = no; then HAVE_DECL_STRNCASECMP=0 fi if test $HAVE_STRCASECMP = 0; then GL_COND_OBJ_STRCASECMP_TRUE= GL_COND_OBJ_STRCASECMP_FALSE='#' else GL_COND_OBJ_STRCASECMP_TRUE='#' GL_COND_OBJ_STRCASECMP_FALSE= fi : if test -z "${GL_COND_OBJ_STRCASECMP_TRUE}" && test -z "${GL_COND_OBJ_STRCASECMP_FALSE}"; then GL_COND_OBJ_STRCASECMP_TRUE='#' GL_COND_OBJ_STRCASECMP_FALSE='#' fi if test -z "$GL_COND_OBJ_STRCASECMP_TRUE"; then : : fi if test $HAVE_STRNCASECMP = 0; then GL_COND_OBJ_STRNCASECMP_TRUE= GL_COND_OBJ_STRNCASECMP_FALSE='#' else GL_COND_OBJ_STRNCASECMP_TRUE='#' GL_COND_OBJ_STRNCASECMP_FALSE= fi : if test -z "${GL_COND_OBJ_STRNCASECMP_TRUE}" && test -z "${GL_COND_OBJ_STRNCASECMP_FALSE}"; then GL_COND_OBJ_STRNCASECMP_TRUE='#' GL_COND_OBJ_STRNCASECMP_FALSE='#' fi if test -z "$GL_COND_OBJ_STRNCASECMP_TRUE"; then : : fi if test $HAVE_STRCASESTR = 1 && test $REPLACE_STRCASESTR = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strcasestr works in linear time" >&5 printf %s "checking whether strcasestr works in linear time... " >&6; } if test ${gl_cv_func_strcasestr_linear+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ && !defined __UCLIBC__ Lucky user #endif #endif #ifdef __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) Lucky user #endif #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1 then : gl_cv_func_strcasestr_linear="guessing yes" else $as_nop gl_cv_func_strcasestr_linear="$gl_cross_guess_normal" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <signal.h> /* for signal */ #include <string.h> /* for strcasestr */ #include <stdlib.h> /* for malloc */ #include <unistd.h> /* for alarm */ static void quit (int sig) { _exit (sig + 128); } int main (void) { int result = 0; size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 2); char *needle = (char *) malloc (m + 2); /* Failure to compile this test due to missing alarm is okay, since all such platforms (mingw) also lack strcasestr. */ signal (SIGALRM, quit); alarm (5); /* Check for quadratic performance. */ if (haystack && needle) { memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; haystack[2 * m + 1] = 0; memset (needle, 'A', m); needle[m] = 'B'; needle[m + 1] = 0; if (!strcasestr (haystack, needle)) result |= 1; } /* Free allocated memory, in case some sanitizer is watching. */ free (haystack); free (needle); return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strcasestr_linear=yes else $as_nop gl_cv_func_strcasestr_linear=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: $gl_cv_func_strcasestr_linear" >&5 printf "%s\n" "$gl_cv_func_strcasestr_linear" >&6; } case "$gl_cv_func_strcasestr_linear" in *yes) ;; *) REPLACE_STRCASESTR=1 ;; esac fi if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then gl_LIBOBJS="$gl_LIBOBJS strcasestr.$ac_objext" : fi ac_fn_c_check_func "$LINENO" "strcasestr" "ac_cv_func_strcasestr" if test "x$ac_cv_func_strcasestr" = xyes then : printf "%s\n" "#define HAVE_STRCASESTR 1" >>confdefs.h fi if test $ac_cv_func_strcasestr = no; then HAVE_STRCASESTR=0 else if test $REPLACE_MEMCHR = 1; then REPLACE_STRCASESTR=1 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strcasestr works" >&5 printf %s "checking whether strcasestr works... " >&6; } if test ${gl_cv_func_strcasestr_works_always+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> /* for __GNU_LIBRARY__ */ #ifdef __GNU_LIBRARY__ #include <features.h> #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ || defined __UCLIBC__ Lucky user #endif #elif defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) Lucky user #endif #else Lucky user #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1 then : gl_cv_func_strcasestr_works_always="guessing yes" else $as_nop gl_cv_func_strcasestr_works_always="$gl_cross_guess_normal" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> /* for __GNU_LIBRARY__, strcasestr */ #ifdef __GNU_LIBRARY__ #include <features.h> #if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28 Unlucky user #endif #endif #define P "_EF_BF_BD" #define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P #define NEEDLE P P P P P int main (void) { return !!strcasestr (HAYSTACK, NEEDLE); ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strcasestr_works_always=yes else $as_nop gl_cv_func_strcasestr_works_always=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: $gl_cv_func_strcasestr_works_always" >&5 printf "%s\n" "$gl_cv_func_strcasestr_works_always" >&6; } case "$gl_cv_func_strcasestr_works_always" in *yes) ;; *) REPLACE_STRCASESTR=1 ;; esac fi fi if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then gl_LIBOBJS="$gl_LIBOBJS strcasestr.$ac_objext" : fi GL_GNULIB_STRCASESTR=1 printf "%s\n" "#define GNULIB_TEST_STRCASESTR 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "strchrnul" "ac_cv_func_strchrnul" if test "x$ac_cv_func_strchrnul" = xyes then : printf "%s\n" "#define HAVE_STRCHRNUL 1" >>confdefs.h fi if test $ac_cv_func_strchrnul = no; then HAVE_STRCHRNUL=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether strchrnul works" >&5 printf %s "checking whether strchrnul works... " >&6; } if test ${gl_cv_func_strchrnul_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9) Lucky user #endif #else Lucky user #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "Lucky user" >/dev/null 2>&1 then : gl_cv_func_strchrnul_works="guessing yes" else $as_nop gl_cv_func_strchrnul_works="guessing no" fi rm -rf conftest* else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> /* for strchrnul */ int main (void) { const char *buf = "a"; return strchrnul (buf, 'b') != buf + 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_strchrnul_works=yes else $as_nop gl_cv_func_strchrnul_works=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: $gl_cv_func_strchrnul_works" >&5 printf "%s\n" "$gl_cv_func_strchrnul_works" >&6; } case "$gl_cv_func_strchrnul_works" in *yes) ;; *) REPLACE_STRCHRNUL=1 ;; esac fi if test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1; then GL_COND_OBJ_STRCHRNUL_TRUE= GL_COND_OBJ_STRCHRNUL_FALSE='#' else GL_COND_OBJ_STRCHRNUL_TRUE='#' GL_COND_OBJ_STRCHRNUL_FALSE= fi : if test -z "${GL_COND_OBJ_STRCHRNUL_TRUE}" && test -z "${GL_COND_OBJ_STRCHRNUL_FALSE}"; then GL_COND_OBJ_STRCHRNUL_TRUE='#' GL_COND_OBJ_STRCHRNUL_FALSE='#' fi if test -z "$GL_COND_OBJ_STRCHRNUL_TRUE"; then : : fi GL_GNULIB_STRCHRNUL=1 printf "%s\n" "#define GNULIB_TEST_STRCHRNUL 1" >>confdefs.h if test $gl_cv_func_malloc_posix != yes; then REPLACE_STRDUP=1 fi if test $ac_cv_have_decl_strdup = no; then HAVE_DECL_STRDUP=0 fi if test $REPLACE_STRDUP = 1; then GL_COND_OBJ_STRDUP_TRUE= GL_COND_OBJ_STRDUP_FALSE='#' else GL_COND_OBJ_STRDUP_TRUE='#' GL_COND_OBJ_STRDUP_FALSE= fi : if test -z "${GL_COND_OBJ_STRDUP_TRUE}" && test -z "${GL_COND_OBJ_STRDUP_FALSE}"; then GL_COND_OBJ_STRDUP_TRUE='#' GL_COND_OBJ_STRDUP_FALSE='#' fi if test -z "$GL_COND_OBJ_STRDUP_TRUE"; then : : fi GL_GNULIB_STRDUP=1 printf "%s\n" "#define GNULIB_TEST_STRDUP 1" >>confdefs.h if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working strerror function" >&5 printf %s "checking for working strerror function... " >&6; } if test ${gl_cv_func_working_strerror+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> int main (void) { if (!*strerror (-2)) return 1; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_working_strerror=yes else $as_nop gl_cv_func_working_strerror=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: $gl_cv_func_working_strerror" >&5 printf "%s\n" "$gl_cv_func_working_strerror" >&6; } case "$gl_cv_func_working_strerror" in *yes) ;; *) REPLACE_STRERROR=1 ;; esac else REPLACE_STRERROR=1 fi if test $REPLACE_STRERROR = 1; then GL_COND_OBJ_STRERROR_TRUE= GL_COND_OBJ_STRERROR_FALSE='#' else GL_COND_OBJ_STRERROR_TRUE='#' GL_COND_OBJ_STRERROR_FALSE= fi : if test -z "${GL_COND_OBJ_STRERROR_TRUE}" && test -z "${GL_COND_OBJ_STRERROR_FALSE}"; then GL_COND_OBJ_STRERROR_TRUE='#' GL_COND_OBJ_STRERROR_FALSE='#' fi printf "%s\n" "#define GNULIB_STRERROR 1" >>confdefs.h GL_GNULIB_STRERROR=1 printf "%s\n" "#define GNULIB_TEST_STRERROR 1" >>confdefs.h if test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1; then GL_COND_OBJ_STRERROR_OVERRIDE_TRUE= GL_COND_OBJ_STRERROR_OVERRIDE_FALSE='#' else GL_COND_OBJ_STRERROR_OVERRIDE_TRUE='#' GL_COND_OBJ_STRERROR_OVERRIDE_FALSE= fi : if test -z "${GL_COND_OBJ_STRERROR_OVERRIDE_TRUE}" && test -z "${GL_COND_OBJ_STRERROR_OVERRIDE_FALSE}"; then GL_COND_OBJ_STRERROR_OVERRIDE_TRUE='#' GL_COND_OBJ_STRERROR_OVERRIDE_FALSE='#' fi if test -z "$GL_COND_OBJ_STRERROR_OVERRIDE_TRUE"; then : if test $ac_cv_header_sys_socket_h != yes; then ac_fn_c_check_header_compile "$LINENO" "winsock2.h" "ac_cv_header_winsock2_h" "$ac_includes_default" if test "x$ac_cv_header_winsock2_h" = xyes then : printf "%s\n" "#define HAVE_WINSOCK2_H 1" >>confdefs.h fi fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi fi ac_fn_c_check_func "$LINENO" "strsep" "ac_cv_func_strsep" if test "x$ac_cv_func_strsep" = xyes then : printf "%s\n" "#define HAVE_STRSEP 1" >>confdefs.h fi if test $ac_cv_func_strsep = no; then HAVE_STRSEP=0 fi if test $HAVE_STRSEP = 0; then GL_COND_OBJ_STRSEP_TRUE= GL_COND_OBJ_STRSEP_FALSE='#' else GL_COND_OBJ_STRSEP_TRUE='#' GL_COND_OBJ_STRSEP_FALSE= fi : if test -z "${GL_COND_OBJ_STRSEP_TRUE}" && test -z "${GL_COND_OBJ_STRSEP_FALSE}"; then GL_COND_OBJ_STRSEP_TRUE='#' GL_COND_OBJ_STRSEP_FALSE='#' fi if test -z "$GL_COND_OBJ_STRSEP_TRUE"; then : : fi GL_GNULIB_STRSEP=1 printf "%s\n" "#define GNULIB_TEST_STRSEP 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "strverscmp" "ac_cv_func_strverscmp" if test "x$ac_cv_func_strverscmp" = xyes then : printf "%s\n" "#define HAVE_STRVERSCMP 1" >>confdefs.h fi if test $ac_cv_func_strverscmp = no; then HAVE_STRVERSCMP=0 fi if test $HAVE_STRVERSCMP = 0; then GL_COND_OBJ_STRVERSCMP_TRUE= GL_COND_OBJ_STRVERSCMP_FALSE='#' else GL_COND_OBJ_STRVERSCMP_TRUE='#' GL_COND_OBJ_STRVERSCMP_FALSE= fi : if test -z "${GL_COND_OBJ_STRVERSCMP_TRUE}" && test -z "${GL_COND_OBJ_STRVERSCMP_FALSE}"; then GL_COND_OBJ_STRVERSCMP_TRUE='#' GL_COND_OBJ_STRVERSCMP_FALSE='#' fi if test -z "$GL_COND_OBJ_STRVERSCMP_TRUE"; then : : fi GL_GNULIB_STRVERSCMP=1 printf "%s\n" "#define GNULIB_TEST_STRVERSCMP 1" >>confdefs.h : printf "%s\n" "#define GNULIB_TEMPNAME 1" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "sys/single_threaded.h" "ac_cv_header_sys_single_threaded_h" "$ac_includes_default" if test "x$ac_cv_header_sys_single_threaded_h" = xyes then : printf "%s\n" "#define HAVE_SYS_SINGLE_THREADED_H 1" >>confdefs.h fi ac_fn_check_decl "$LINENO" "localtime_r" "ac_cv_have_decl_localtime_r" "/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_localtime_r" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_LOCALTIME_R $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_localtime_r = no; then HAVE_DECL_LOCALTIME_R=0 fi if test $ac_cv_func_localtime_r = yes; then HAVE_LOCALTIME_R=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether localtime_r is compatible with its POSIX signature" >&5 printf %s "checking whether localtime_r is compatible with its POSIX signature... " >&6; } if test ${gl_cv_time_r_posix+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> int main (void) { /* We don't need to append 'restrict's to the argument types, even though the POSIX signature has the 'restrict's, since C99 says they can't affect type compatibility. */ struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r; if (ptr) return 0; /* Check the return type is a pointer. On HP-UX 10 it is 'int'. */ *localtime_r (0, 0); ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gl_cv_time_r_posix=yes else $as_nop gl_cv_time_r_posix=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: $gl_cv_time_r_posix" >&5 printf "%s\n" "$gl_cv_time_r_posix" >&6; } if test $gl_cv_time_r_posix = yes; then REPLACE_LOCALTIME_R=0 else REPLACE_LOCALTIME_R=1 fi else HAVE_LOCALTIME_R=0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether localtime_r exists as an inline function" >&5 printf %s "checking whether localtime_r exists as an inline function... " >&6; } if test ${gl_cv_func_localtime_r_inline+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> int main (void) { time_t a; struct tm r; localtime_r (&a, &r); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gl_cv_func_localtime_r_inline=yes else $as_nop gl_cv_func_localtime_r_inline=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: $gl_cv_func_localtime_r_inline" >&5 printf "%s\n" "$gl_cv_func_localtime_r_inline" >&6; } if test $gl_cv_func_localtime_r_inline = yes; then REPLACE_LOCALTIME_R=1 fi fi if test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1; then GL_COND_OBJ_TIME_R_TRUE= GL_COND_OBJ_TIME_R_FALSE='#' else GL_COND_OBJ_TIME_R_TRUE='#' GL_COND_OBJ_TIME_R_FALSE= fi : if test -z "${GL_COND_OBJ_TIME_R_TRUE}" && test -z "${GL_COND_OBJ_TIME_R_FALSE}"; then GL_COND_OBJ_TIME_R_TRUE='#' GL_COND_OBJ_TIME_R_FALSE='#' fi if test -z "$GL_COND_OBJ_TIME_R_TRUE"; then : : fi GL_GNULIB_TIME_R=1 printf "%s\n" "#define GNULIB_TEST_TIME_R 1" >>confdefs.h # On Mac OS X 10.6, localtime loops forever with some time_t values. # See Bug#27706, Bug#27736, and # https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether localtime works even near extrema" >&5 printf %s "checking whether localtime works even near extrema... " >&6; } if test ${gl_cv_func_localtime_works+y} then : printf %s "(cached) " >&6 else $as_nop gl_cv_func_localtime_works=yes if test "$cross_compiling" = yes then : gl_cv_func_localtime_works="guessing yes" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <string.h> #include <unistd.h> #include <time.h> int main (void) { time_t t = -67768038400666600; struct tm *tm; char *tz = getenv ("TZ"); if (! (tz && strcmp (tz, "QQQ0") == 0)) return 0; alarm (2); tm = localtime (&t); /* Use TM and *TM to suppress over-optimization. */ return tm && tm->tm_isdst; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : (TZ=QQQ0 ./conftest$EXEEXT) >/dev/null 2>&1 || gl_cv_func_localtime_works=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: $gl_cv_func_localtime_works" >&5 printf "%s\n" "$gl_cv_func_localtime_works" >&6; } if test "$gl_cv_func_localtime_works" = no; then printf "%s\n" "#define HAVE_LOCALTIME_INFLOOP_BUG 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "timezone_t" "ac_cv_type_timezone_t" "#include <time.h> " if test "x$ac_cv_type_timezone_t" = xyes then : printf "%s\n" "#define HAVE_TIMEZONE_T 1" >>confdefs.h fi if test "$ac_cv_type_timezone_t" = yes; then HAVE_TIMEZONE_T=1 fi if test $HAVE_TIMEZONE_T = 0; then GL_COND_OBJ_TIME_RZ_TRUE= GL_COND_OBJ_TIME_RZ_FALSE='#' else GL_COND_OBJ_TIME_RZ_TRUE='#' GL_COND_OBJ_TIME_RZ_FALSE= fi : if test -z "${GL_COND_OBJ_TIME_RZ_TRUE}" && test -z "${GL_COND_OBJ_TIME_RZ_FALSE}"; then GL_COND_OBJ_TIME_RZ_TRUE='#' GL_COND_OBJ_TIME_RZ_FALSE='#' fi GL_GNULIB_TIME_RZ=1 printf "%s\n" "#define GNULIB_TEST_TIME_RZ 1" >>confdefs.h REPLACE_TIMEGM=0 if test $ac_cv_func_timegm = yes; then if test "$gl_cv_func_working_mktime" != yes; then # Assume that timegm is buggy if mktime is. REPLACE_TIMEGM=1 fi else HAVE_TIMEGM=0 fi if test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1; then GL_COND_OBJ_TIMEGM_TRUE= GL_COND_OBJ_TIMEGM_FALSE='#' else GL_COND_OBJ_TIMEGM_TRUE='#' GL_COND_OBJ_TIMEGM_FALSE= fi : if test -z "${GL_COND_OBJ_TIMEGM_TRUE}" && test -z "${GL_COND_OBJ_TIMEGM_FALSE}"; then GL_COND_OBJ_TIMEGM_TRUE='#' GL_COND_OBJ_TIMEGM_FALSE='#' fi if test -z "$GL_COND_OBJ_TIMEGM_TRUE"; then : : fi GL_GNULIB_TIMEGM=1 printf "%s\n" "#define GNULIB_TEST_TIMEGM 1" >>confdefs.h : : REPLACE_TZSET=0 case "$host_os" in mingw*) REPLACE_TZSET=1 ;; esac if test $REPLACE_TZSET = 1; then GL_COND_OBJ_TZSET_TRUE= GL_COND_OBJ_TZSET_FALSE='#' else GL_COND_OBJ_TZSET_TRUE='#' GL_COND_OBJ_TZSET_FALSE= fi : if test -z "${GL_COND_OBJ_TZSET_TRUE}" && test -z "${GL_COND_OBJ_TZSET_FALSE}"; then GL_COND_OBJ_TZSET_TRUE='#' GL_COND_OBJ_TZSET_FALSE='#' fi GL_GNULIB_TZSET=1 printf "%s\n" "#define GNULIB_TEST_TZSET 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether unlink honors trailing slashes" >&5 printf %s "checking whether unlink honors trailing slashes... " >&6; } if test ${gl_cv_func_unlink_honors_slashes+y} then : printf %s "(cached) " >&6 else $as_nop touch conftest.file # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.file conftest.lnk fi if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_unlink_honors_slashes="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_unlink_honors_slashes="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_unlink_honors_slashes="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_unlink_honors_slashes="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> #endif #include <errno.h> $gl_mda_defines int main (void) { int result = 0; if (!unlink ("conftest.file/")) result |= 1; else if (errno != ENOTDIR) result |= 2; #if HAVE_LSTAT if (!unlink ("conftest.lnk/")) result |= 4; else if (errno != ENOTDIR) result |= 8; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_unlink_honors_slashes=yes else $as_nop gl_cv_func_unlink_honors_slashes=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.file conftest.lnk fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unlink_honors_slashes" >&5 printf "%s\n" "$gl_cv_func_unlink_honors_slashes" >&6; } case "$gl_cv_func_unlink_honors_slashes" in *no) REPLACE_UNLINK=1 ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether unlink of a parent directory fails as it should" >&5 printf %s "checking whether unlink of a parent directory fails as it should... " >&6; } if test ${gl_cv_func_unlink_parent_fails+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in darwin*) if { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d /tmp/gtXXXXXX) 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=/tmp/gt$$-$RANDOM (umask 077 && mkdir "$tmp") }; then mkdir "$tmp/subdir" GL_SUBDIR_FOR_UNLINK="$tmp/subdir" export GL_SUBDIR_FOR_UNLINK if test "$cross_compiling" = yes then : # If we don't know, obey --enable-cross-guesses. gl_cv_func_unlink_parent_fails="$gl_cross_guess_normal" else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <direct.h> # include <io.h> #endif $gl_mda_defines int main () { int result = 0; if (chdir (getenv ("GL_SUBDIR_FOR_UNLINK")) != 0) result |= 1; else if (unlink ("..") == 0) result |= 2; return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_unlink_parent_fails=yes else $as_nop gl_cv_func_unlink_parent_fails=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi unset GL_SUBDIR_FOR_UNLINK rm -rf "$tmp" else gl_cv_func_unlink_parent_fails="guessing no" fi ;; *) gl_cv_func_unlink_parent_fails="guessing yes" ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_unlink_parent_fails" >&5 printf "%s\n" "$gl_cv_func_unlink_parent_fails" >&6; } case "$gl_cv_func_unlink_parent_fails" in *no) REPLACE_UNLINK=1 printf "%s\n" "#define UNLINK_PARENT_BUG 1" >>confdefs.h ;; esac if test $REPLACE_UNLINK = 1; then GL_COND_OBJ_UNLINK_TRUE= GL_COND_OBJ_UNLINK_FALSE='#' else GL_COND_OBJ_UNLINK_TRUE='#' GL_COND_OBJ_UNLINK_FALSE= fi : if test -z "${GL_COND_OBJ_UNLINK_TRUE}" && test -z "${GL_COND_OBJ_UNLINK_FALSE}"; then GL_COND_OBJ_UNLINK_TRUE='#' GL_COND_OBJ_UNLINK_FALSE='#' fi GL_GNULIB_UNLINK=1 printf "%s\n" "#define GNULIB_TEST_UNLINK 1" >>confdefs.h printf "%s\n" "#define GNULIB_STDIO_SINGLE_THREAD 1" >>confdefs.h printf "%s\n" "#define USE_UNLOCKED_IO GNULIB_STDIO_SINGLE_THREAD" >>confdefs.h if test $ac_cv_have_decl_unsetenv = no; then HAVE_DECL_UNSETENV=0 fi ac_fn_c_check_func "$LINENO" "unsetenv" "ac_cv_func_unsetenv" if test "x$ac_cv_func_unsetenv" = xyes then : printf "%s\n" "#define HAVE_UNSETENV 1" >>confdefs.h fi if test $ac_cv_func_unsetenv = no; then HAVE_UNSETENV=0 else HAVE_UNSETENV=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for unsetenv() return type" >&5 printf %s "checking for unsetenv() return type... " >&6; } if test ${gt_cv_func_unsetenv_ret+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #undef _BSD #define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */ #include <stdlib.h> extern #ifdef __cplusplus "C" #endif int unsetenv (const char *name); int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : gt_cv_func_unsetenv_ret='int' else $as_nop gt_cv_func_unsetenv_ret='void' fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_unsetenv_ret" >&5 printf "%s\n" "$gt_cv_func_unsetenv_ret" >&6; } if test $gt_cv_func_unsetenv_ret = 'void'; then printf "%s\n" "#define VOID_UNSETENV 1" >>confdefs.h REPLACE_UNSETENV=1 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether unsetenv obeys POSIX" >&5 printf %s "checking whether unsetenv obeys POSIX... " >&6; } if test ${gl_cv_func_unsetenv_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <errno.h> extern char **environ; $gl_mda_defines int main (void) { char entry1[] = "a=1"; char entry2[] = "b=2"; char *env[] = { entry1, entry2, NULL }; if (putenv ((char *) "a=1")) return 1; if (putenv (entry2)) return 2; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 3; if (!unsetenv ("") || errno != EINVAL) return 4; entry2[0] = 'b'; environ = env; if (!getenv ("a")) return 5; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 6; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_unsetenv_works=yes else $as_nop gl_cv_func_unsetenv_works=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: $gl_cv_func_unsetenv_works" >&5 printf "%s\n" "$gl_cv_func_unsetenv_works" >&6; } case "$gl_cv_func_unsetenv_works" in *yes) ;; *) REPLACE_UNSETENV=1 ;; esac fi if test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1; then GL_COND_OBJ_UNSETENV_TRUE= GL_COND_OBJ_UNSETENV_FALSE='#' else GL_COND_OBJ_UNSETENV_TRUE='#' GL_COND_OBJ_UNSETENV_FALSE= fi : if test -z "${GL_COND_OBJ_UNSETENV_TRUE}" && test -z "${GL_COND_OBJ_UNSETENV_FALSE}"; then GL_COND_OBJ_UNSETENV_TRUE='#' GL_COND_OBJ_UNSETENV_FALSE='#' fi if test -z "$GL_COND_OBJ_UNSETENV_TRUE"; then : fi GL_GNULIB_UNSETENV=1 printf "%s\n" "#define GNULIB_TEST_UNSETENV 1" >>confdefs.h case "$host_os" in mingw*) REPLACE_UTIME=1 ;; *) ac_fn_c_check_func "$LINENO" "utime" "ac_cv_func_utime" if test "x$ac_cv_func_utime" = xyes then : printf "%s\n" "#define HAVE_UTIME 1" >>confdefs.h fi if test $ac_cv_func_utime = no; then HAVE_UTIME=0 else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether utime handles trailing slashes on files" >&5 printf %s "checking whether utime handles trailing slashes on files... " >&6; } if test ${gl_cv_func_utime_file_slash+y} then : printf %s "(cached) " >&6 else $as_nop touch conftest.tmp # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_utime_file_slash="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_utime_file_slash="guessing yes" ;; # Guess no on macOS. darwin*) gl_cv_func_utime_file_slash="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_utime_file_slash="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <utime.h> int main (void) { int result = 0; if (!utime ("conftest.tmp/", NULL)) result |= 1; #if HAVE_LSTAT if (!utime ("conftest.lnk/", NULL)) result |= 2; #endif return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_utime_file_slash=yes else $as_nop gl_cv_func_utime_file_slash=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.tmp conftest.lnk fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_utime_file_slash" >&5 printf "%s\n" "$gl_cv_func_utime_file_slash" >&6; } case $gl_cv_func_stat_file_slash in *no) REPLACE_UTIME=1 printf "%s\n" "#define REPLACE_FUNC_UTIME_FILE 1" >>confdefs.h ;; esac fi ;; esac if test $HAVE_UTIME = 0 || test $REPLACE_UTIME = 1; then GL_COND_OBJ_UTIME_TRUE= GL_COND_OBJ_UTIME_FALSE='#' else GL_COND_OBJ_UTIME_TRUE='#' GL_COND_OBJ_UTIME_FALSE= fi : if test -z "${GL_COND_OBJ_UTIME_TRUE}" && test -z "${GL_COND_OBJ_UTIME_FALSE}"; then GL_COND_OBJ_UTIME_TRUE='#' GL_COND_OBJ_UTIME_FALSE='#' fi if test -z "$GL_COND_OBJ_UTIME_TRUE"; then : : fi GL_GNULIB_UTIME=1 printf "%s\n" "#define GNULIB_TEST_UTIME 1" >>confdefs.h if test $ac_cv_func_futimens = no && test $ac_cv_func_futimesat = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether futimesat handles NULL file" >&5 printf %s "checking whether futimesat handles NULL file... " >&6; } if test ${gl_cv_func_futimesat_works+y} then : printf %s "(cached) " >&6 else $as_nop touch conftest.file if test "$cross_compiling" = yes then : case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_futimesat_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_futimesat_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_futimesat_works="$gl_cross_guess_normal" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stddef.h> #include <sys/times.h> #include <fcntl.h> $gl_mda_defines int main (void) { int fd = open ("conftest.file", O_RDWR); if (fd < 0) return 1; if (futimesat (fd, NULL, NULL)) return 2; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_futimesat_works=yes else $as_nop gl_cv_func_futimesat_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -f conftest.file fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_futimesat_works" >&5 printf "%s\n" "$gl_cv_func_futimesat_works" >&6; } case "$gl_cv_func_futimesat_works" in *yes) ;; *) printf "%s\n" "#define FUTIMESAT_NULL_BUG 1" >>confdefs.h ;; esac fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for variable-length arrays" >&5 printf %s "checking for variable-length arrays... " >&6; } if test ${ac_cv_c_vararrays+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #ifdef __STDC_NO_VLA__ defined #endif _ACEOF if (eval "$ac_cpp conftest.$ac_ext") 2>&5 | $EGREP "defined" >/dev/null 2>&1 then : ac_cv_c_vararrays='no: __STDC_NO_VLA__ is defined' else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ /* Test for VLA support. This test is partly inspired from examples in the C standard. Use at least two VLA functions to detect the GCC 3.4.3 bug described in: https://lists.gnu.org/archive/html/bug-gnulib/2014-08/msg00014.html */ #ifdef __STDC_NO_VLA__ syntax error; #else extern int n; int B[100]; int fvla (int m, int C[m][m]); int simple (int count, int all[static count]) { return all[count - 1]; } int fvla (int m, int C[m][m]) { typedef int VLA[m][m]; VLA x; int D[m]; static int (*q)[m] = &B; int (*s)[n] = q; return C && &x[0][0] == &D[0] && &D[0] == s[0]; } #endif int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_compile "$LINENO" then : ac_cv_c_vararrays=yes else $as_nop ac_cv_c_vararrays=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam conftest.$ac_ext fi rm -rf conftest* fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_c_vararrays" >&5 printf "%s\n" "$ac_cv_c_vararrays" >&6; } if test "$ac_cv_c_vararrays" = yes; then printf "%s\n" "#define HAVE_C_VARARRAYS 1" >>confdefs.h elif test "$ac_cv_c_vararrays" = no; then printf "%s\n" "#define __STDC_NO_VLA__ 1" >>confdefs.h fi if test $ac_cv_func_vasnprintf = no; then gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" if test $ac_cv_func_vasnprintf = yes; then printf "%s\n" "#define REPLACE_VASNPRINTF 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes then : else $as_nop printf "%s\n" "#define ptrdiff_t long" >>confdefs.h fi fi gl_cv_func_vasnprintf_posix=no case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) if test $ac_cv_func_vasnprintf = yes; then # vasnprintf exists and is # already POSIX compliant. gl_cv_func_vasnprintf_posix=yes fi ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_vasnprintf_posix = no; then case "$gl_cv_func_printf_infinite" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h ;; esac ;; esac case "$gl_cv_func_printf_directive_a" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes then : printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h fi ;; esac case "$gl_cv_func_printf_directive_f" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_directive_ls" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_grouping" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_leftadjust" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_zero" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_precision" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_enomem" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h ;; esac gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" if test $ac_cv_func_vasnprintf = yes; then printf "%s\n" "#define REPLACE_VASNPRINTF 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes then : else $as_nop printf "%s\n" "#define ptrdiff_t long" >>confdefs.h fi fi ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf" if test "x$ac_cv_func_vasprintf" = xyes then : printf "%s\n" "#define HAVE_VASPRINTF 1" >>confdefs.h fi if test $ac_cv_func_vasprintf = no; then gl_LIBOBJS="$gl_LIBOBJS vasprintf.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS asprintf.$ac_objext" if test $ac_cv_func_vasprintf = yes; then REPLACE_VASPRINTF=1 else HAVE_VASPRINTF=0 fi fi GL_GNULIB_VASPRINTF=1 printf "%s\n" "#define GNULIB_TEST_VASPRINTF 1" >>confdefs.h XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=asprintf:2:c-format" XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS --flag=vasprintf:2:c-format" gl_cv_func_vasprintf_posix=no ac_fn_c_check_func "$LINENO" "vasprintf" "ac_cv_func_vasprintf" if test "x$ac_cv_func_vasprintf" = xyes then : printf "%s\n" "#define HAVE_VASPRINTF 1" >>confdefs.h fi case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) if test $ac_cv_func_vasprintf = yes; then # vasprintf exists and is # already POSIX compliant. gl_cv_func_vasprintf_posix=yes fi ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_vasprintf_posix = no; then case "$gl_cv_func_printf_infinite" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h ;; esac ;; esac case "$gl_cv_func_printf_directive_a" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes then : printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h fi ;; esac case "$gl_cv_func_printf_directive_f" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_directive_ls" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_grouping" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_leftadjust" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_zero" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_precision" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_enomem" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h ;; esac gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" if test $ac_cv_func_vasnprintf = yes; then printf "%s\n" "#define REPLACE_VASNPRINTF 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes then : else $as_nop printf "%s\n" "#define ptrdiff_t long" >>confdefs.h fi gl_LIBOBJS="$gl_LIBOBJS vasprintf.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS asprintf.$ac_objext" if test $ac_cv_func_vasprintf = yes; then REPLACE_VASPRINTF=1 else HAVE_VASPRINTF=0 fi fi # Check whether --with-packager was given. if test ${with_packager+y} then : withval=$with_packager; case $withval in yes|no) ;; *) printf "%s\n" "#define PACKAGE_PACKAGER \"$withval\"" >>confdefs.h ;; esac fi # Check whether --with-packager-version was given. if test ${with_packager_version+y} then : withval=$with_packager_version; case $withval in yes|no) ;; *) printf "%s\n" "#define PACKAGE_PACKAGER_VERSION \"$withval\"" >>confdefs.h ;; esac fi # Check whether --with-packager-bug-reports was given. if test ${with_packager_bug_reports+y} then : withval=$with_packager_bug_reports; case $withval in yes|no) ;; *) printf "%s\n" "#define PACKAGE_PACKAGER_BUG_REPORTS \"$withval\"" >>confdefs.h ;; esac fi if test "X$with_packager" = "X" && \ test "X$with_packager_version$with_packager_bug_reports" != "X" then as_fn_error $? "The --with-packager-{bug-reports,version} options require --with-packager" "$LINENO" 5 fi gl_cv_func_vfprintf_posix=no case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) # vfprintf exists and is # already POSIX compliant. gl_cv_func_vfprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_vfprintf_posix = no; then case "$gl_cv_func_printf_infinite" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_INFINITE_DOUBLE 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_INFINITE_LONG_DOUBLE 1" >>confdefs.h ;; esac ;; esac case "$gl_cv_func_printf_directive_a" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_A 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "nl_langinfo" "ac_cv_func_nl_langinfo" if test "x$ac_cv_func_nl_langinfo" = xyes then : printf "%s\n" "#define HAVE_NL_LANGINFO 1" >>confdefs.h fi ;; esac case "$gl_cv_func_printf_directive_f" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_F 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_directive_ls" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_DIRECTIVE_LS 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_grouping" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_GROUPING 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_leftadjust" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_LEFTADJUST 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_flag_zero" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_FLAG_ZERO 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_precision" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_UNBOUNDED_PRECISION 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h ;; esac case "$gl_cv_func_printf_enomem" in *yes) ;; *) printf "%s\n" "#define NEED_PRINTF_ENOMEM 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_DOUBLE 1" >>confdefs.h printf "%s\n" "#define NEED_PRINTF_LONG_DOUBLE 1" >>confdefs.h ;; esac gl_LIBOBJS="$gl_LIBOBJS vasnprintf.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-args.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS printf-parse.$ac_objext" gl_LIBOBJS="$gl_LIBOBJS asnprintf.$ac_objext" if test $ac_cv_func_vasnprintf = yes; then printf "%s\n" "#define REPLACE_VASNPRINTF 1" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "ptrdiff_t" "ac_cv_type_ptrdiff_t" "$ac_includes_default" if test "x$ac_cv_type_ptrdiff_t" = xyes then : else $as_nop printf "%s\n" "#define ptrdiff_t long" >>confdefs.h fi gl_LIBOBJS="$gl_LIBOBJS vfprintf.$ac_objext" REPLACE_VFPRINTF=1 printf "%s\n" "#define REPLACE_VFPRINTF_POSIX 1" >>confdefs.h : fi GL_GNULIB_VFPRINTF_POSIX=1 printf "%s\n" "#define GNULIB_TEST_VFPRINTF_POSIX 1" >>confdefs.h printf "%s\n" "#define GNULIB_VFPRINTF_POSIX 1" >>confdefs.h ac_fn_c_check_func "$LINENO" "waitid" "ac_cv_func_waitid" if test "x$ac_cv_func_waitid" = xyes then : printf "%s\n" "#define HAVE_WAITID 1" >>confdefs.h fi HAVE_WAITPID=1 case $host_os in mingw*) HAVE_WAITPID=0 ;; esac if test $HAVE_WAITPID = 0; then GL_COND_OBJ_WAITPID_TRUE= GL_COND_OBJ_WAITPID_FALSE='#' else GL_COND_OBJ_WAITPID_TRUE='#' GL_COND_OBJ_WAITPID_FALSE= fi : if test -z "${GL_COND_OBJ_WAITPID_TRUE}" && test -z "${GL_COND_OBJ_WAITPID_FALSE}"; then GL_COND_OBJ_WAITPID_TRUE='#' GL_COND_OBJ_WAITPID_FALSE='#' fi GL_GNULIB_WAITPID=1 printf "%s\n" "#define GNULIB_TEST_WAITPID 1" >>confdefs.h if case "$host_os" in mingw*) true ;; *) test $ac_cv_func_mbsinit = yes ;; esac \ && test $ac_cv_func_mbrtowc = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc handles incomplete characters" >&5 printf %s "checking whether mbrtowc handles incomplete characters... " >&6; } if test ${gl_cv_func_mbrtowc_incomplete_state+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac if test $LOCALE_JA != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_incomplete_state=yes else $as_nop gl_cv_func_mbrtowc_incomplete_state=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi else if test $LOCALE_FR_UTF8 != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_incomplete_state=yes else $as_nop gl_cv_func_mbrtowc_incomplete_state=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 fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_incomplete_state" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_incomplete_state" >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether mbrtowc works as well as mbtowc" >&5 printf %s "checking whether mbrtowc works as well as mbtowc... " >&6; } if test ${gl_cv_func_mbrtowc_sanitycheck+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac if test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_mbrtowc_sanitycheck=yes else $as_nop gl_cv_func_mbrtowc_sanitycheck=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_mbrtowc_sanitycheck" >&5 printf "%s\n" "$gl_cv_func_mbrtowc_sanitycheck" >&6; } REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi if test $ac_cv_func_wcrtomb = no; then HAVE_WCRTOMB=0 ac_fn_check_decl "$LINENO" "wcrtomb" "ac_cv_have_decl_wcrtomb" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_wcrtomb" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_WCRTOMB $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_wcrtomb = yes; then REPLACE_WCRTOMB=1 fi else if test $REPLACE_WCRTOMB = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wcrtomb works in the C locale" >&5 printf %s "checking whether wcrtomb works in the C locale... " >&6; } if test ${gl_cv_func_wcrtomb_works+y} then : printf %s "(cached) " >&6 else $as_nop if test "$cross_compiling" = yes then : case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_wcrtomb_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_wcrtomb_works="guessing yes";; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <string.h> #include <stdlib.h> #include <wchar.h> int main () { mbstate_t state; char out[64]; int count; memset (&state, 0, sizeof (state)); out[0] = 'x'; count = wcrtomb (out, L'a', &state); return !(count == 1 && out[0] == 'a'); } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_wcrtomb_works=yes else $as_nop gl_cv_func_wcrtomb_works=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: $gl_cv_func_wcrtomb_works" >&5 printf "%s\n" "$gl_cv_func_wcrtomb_works" >&6; } case "$gl_cv_func_wcrtomb_works" in *yes) ;; *) printf "%s\n" "#define WCRTOMB_C_LOCALE_BUG 1" >>confdefs.h REPLACE_WCRTOMB=1 ;; esac fi if test $REPLACE_WCRTOMB = 0; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wcrtomb return value is correct" >&5 printf %s "checking whether wcrtomb return value is correct... " >&6; } if test ${gl_cv_func_wcrtomb_retval+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on AIX 4, OSF/1, Solaris, native Windows. aix4* | osf* | solaris* | mingw*) gl_cv_func_wcrtomb_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wcrtomb_retval="guessing yes" ;; esac if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <string.h> #include <wchar.h> #include <stdlib.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 1; } if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 2; { wchar_t wc = (wchar_t) 0xBADFACE; if (mbtowc (&wc, "\303\274", 2) == 2) if (wcrtomb (NULL, wc, NULL) != 1) result |= 2; } } if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 4; } if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 8; } return result; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_wcrtomb_retval=yes else $as_nop gl_cv_func_wcrtomb_retval=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wcrtomb_retval" >&5 printf "%s\n" "$gl_cv_func_wcrtomb_retval" >&6; } case "$gl_cv_func_wcrtomb_retval" in *yes) ;; *) printf "%s\n" "#define WCRTOMB_RETVAL_BUG 1" >>confdefs.h REPLACE_WCRTOMB=1 ;; esac fi fi if test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1; then GL_COND_OBJ_WCRTOMB_TRUE= GL_COND_OBJ_WCRTOMB_FALSE='#' else GL_COND_OBJ_WCRTOMB_TRUE='#' GL_COND_OBJ_WCRTOMB_FALSE= fi : if test -z "${GL_COND_OBJ_WCRTOMB_TRUE}" && test -z "${GL_COND_OBJ_WCRTOMB_FALSE}"; then GL_COND_OBJ_WCRTOMB_TRUE='#' GL_COND_OBJ_WCRTOMB_FALSE='#' fi if test -z "$GL_COND_OBJ_WCRTOMB_TRUE"; then : : fi GL_GNULIB_WCRTOMB=1 printf "%s\n" "#define GNULIB_TEST_WCRTOMB 1" >>confdefs.h if test $ac_cv_func_wctob = no; then HAVE_WCTOB=0 HAVE_DECL_WCTOB=0 else HAVE_WCTOB=1 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether wctob works" >&5 printf %s "checking whether wctob works... " >&6; } if test ${gl_cv_func_wctob_works+y} then : printf %s "(cached) " >&6 else $as_nop case "$host_os" in # Guess no on Solaris <= 9 and Cygwin. solaris2.[1-9] | solaris2.[1-9].* | cygwin*) gl_cv_func_wctob_works="guessing no" ;; # Guess no on native Windows. mingw*) gl_cv_func_wctob_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wctob_works="guessing yes" ;; esac case "$host_os" in cygwin*) if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <wchar.h> register long global __asm__ ("%ebx"); int main () { setlocale (LC_ALL, "en_US.UTF-8"); global = 0x12345678; if (wctob (0x00FC) != -1) return 1; if (global != 0x12345678) return 2; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : : else $as_nop gl_cv_func_wctob_works=no fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi ;; esac if test "$gl_cv_func_wctob_works" != no && test $LOCALE_FR != none; then if test "$cross_compiling" = yes then : : else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <locale.h> #include <stdlib.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { wchar_t wc; if (mbtowc (&wc, "\374", 1) == 1) if (wctob (wc) != (unsigned char) '\374') return 1; } return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : gl_cv_func_wctob_works=yes else $as_nop gl_cv_func_wctob_works=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 fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gl_cv_func_wctob_works" >&5 printf "%s\n" "$gl_cv_func_wctob_works" >&6; } case "$gl_cv_func_wctob_works" in *yes) ;; *) REPLACE_WCTOB=1 ;; esac if test $REPLACE_WCTOB = 0; then ac_fn_check_decl "$LINENO" "wctob" "ac_cv_have_decl_wctob" " #include <wchar.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_wctob" = xyes then : ac_have_decl=1 else $as_nop ac_have_decl=0 fi printf "%s\n" "#define HAVE_DECL_WCTOB $ac_have_decl" >>confdefs.h if test $ac_cv_have_decl_wctob != yes; then HAVE_DECL_WCTOB=0 fi fi fi if test $HAVE_WCTOB = 0 || test $REPLACE_WCTOB = 1; then GL_COND_OBJ_WCTOB_TRUE= GL_COND_OBJ_WCTOB_FALSE='#' else GL_COND_OBJ_WCTOB_TRUE='#' GL_COND_OBJ_WCTOB_FALSE= fi : if test -z "${GL_COND_OBJ_WCTOB_TRUE}" && test -z "${GL_COND_OBJ_WCTOB_FALSE}"; then GL_COND_OBJ_WCTOB_TRUE='#' GL_COND_OBJ_WCTOB_FALSE='#' fi if test -z "$GL_COND_OBJ_WCTOB_TRUE"; then : : fi GL_GNULIB_WCTOB=1 printf "%s\n" "#define GNULIB_TEST_WCTOB 1" >>confdefs.h if false; then REPLACE_WCTOMB=1 fi if test $REPLACE_WCTOMB = 1; then GL_COND_OBJ_WCTOMB_TRUE= GL_COND_OBJ_WCTOMB_FALSE='#' else GL_COND_OBJ_WCTOMB_TRUE='#' GL_COND_OBJ_WCTOMB_FALSE= fi : if test -z "${GL_COND_OBJ_WCTOMB_TRUE}" && test -z "${GL_COND_OBJ_WCTOMB_FALSE}"; then GL_COND_OBJ_WCTOMB_TRUE='#' GL_COND_OBJ_WCTOMB_FALSE='#' fi if test -z "$GL_COND_OBJ_WCTOMB_TRUE"; then : : fi GL_GNULIB_WCTOMB=1 printf "%s\n" "#define GNULIB_TEST_WCTOMB 1" >>confdefs.h if case "$host_os" in mingw*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_MUTEX_TRUE= GL_COND_OBJ_WINDOWS_MUTEX_FALSE='#' else GL_COND_OBJ_WINDOWS_MUTEX_TRUE='#' GL_COND_OBJ_WINDOWS_MUTEX_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_MUTEX_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_MUTEX_FALSE}"; then GL_COND_OBJ_WINDOWS_MUTEX_TRUE='#' GL_COND_OBJ_WINDOWS_MUTEX_FALSE='#' fi if case "$host_os" in mingw*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_ONCE_TRUE= GL_COND_OBJ_WINDOWS_ONCE_FALSE='#' else GL_COND_OBJ_WINDOWS_ONCE_TRUE='#' GL_COND_OBJ_WINDOWS_ONCE_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_ONCE_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_ONCE_FALSE}"; then GL_COND_OBJ_WINDOWS_ONCE_TRUE='#' GL_COND_OBJ_WINDOWS_ONCE_FALSE='#' fi if case "$host_os" in mingw*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE= GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE='#' else GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE='#' GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE}"; then GL_COND_OBJ_WINDOWS_RECMUTEX_TRUE='#' GL_COND_OBJ_WINDOWS_RECMUTEX_FALSE='#' fi if case "$host_os" in mingw*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_RWLOCK_TRUE= GL_COND_OBJ_WINDOWS_RWLOCK_FALSE='#' else GL_COND_OBJ_WINDOWS_RWLOCK_TRUE='#' GL_COND_OBJ_WINDOWS_RWLOCK_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_RWLOCK_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_RWLOCK_FALSE}"; then GL_COND_OBJ_WINDOWS_RWLOCK_TRUE='#' GL_COND_OBJ_WINDOWS_RWLOCK_FALSE='#' fi if case "$host_os" in mingw*) true;; *) false;; esac; then GL_COND_OBJ_WINDOWS_SPAWN_TRUE= GL_COND_OBJ_WINDOWS_SPAWN_FALSE='#' else GL_COND_OBJ_WINDOWS_SPAWN_TRUE='#' GL_COND_OBJ_WINDOWS_SPAWN_FALSE= fi : if test -z "${GL_COND_OBJ_WINDOWS_SPAWN_TRUE}" && test -z "${GL_COND_OBJ_WINDOWS_SPAWN_FALSE}"; then GL_COND_OBJ_WINDOWS_SPAWN_TRUE='#' GL_COND_OBJ_WINDOWS_SPAWN_FALSE='#' fi if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_WRITE=1 fi if test $REPLACE_WRITE = 1; then GL_COND_OBJ_WRITE_TRUE= GL_COND_OBJ_WRITE_FALSE='#' else GL_COND_OBJ_WRITE_TRUE='#' GL_COND_OBJ_WRITE_FALSE= fi : if test -z "${GL_COND_OBJ_WRITE_TRUE}" && test -z "${GL_COND_OBJ_WRITE_FALSE}"; then GL_COND_OBJ_WRITE_TRUE='#' GL_COND_OBJ_WRITE_FALSE='#' fi if test -z "$GL_COND_OBJ_WRITE_TRUE"; then : : fi GL_GNULIB_WRITE=1 printf "%s\n" "#define GNULIB_TEST_WRITE 1" >>confdefs.h : printf "%s\n" "#define GNULIB_XALLOC 1" >>confdefs.h printf "%s\n" "#define GNULIB_XALLOC_DIE 1" >>confdefs.h ac_fn_c_check_header_compile "$LINENO" "stdint.h" "ac_cv_header_stdint_h" "$ac_includes_default" if test "x$ac_cv_header_stdint_h" = xyes then : printf "%s\n" "#define HAVE_STDINT_H 1" >>confdefs.h fi # End of code from modules gltests_libdeps= gltests_ltlibdeps= gl_source_base='tests' gl_source_base_prefix= gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS gl_module_indicator_condition=$gltests_WITNESS # GNU help2man creates man pages from --help output; in many cases, this # is sufficient, and obviates the need to maintain man pages separately. # However, this means invoking executables, which we generally cannot do # when cross-compiling, so we test to avoid that (the variable # "cross_compiling" is set by AC_PROG_CC). if test $cross_compiling = no; then HELP2MAN=${HELP2MAN-"${am_missing_run}help2man"} else HELP2MAN=: fi ac_fn_c_check_header_compile "$LINENO" "malloc.h" "ac_cv_header_malloc_h" "$ac_includes_default" if test "x$ac_cv_header_malloc_h" = xyes then : printf "%s\n" "#define HAVE_MALLOC_H 1" >>confdefs.h fi 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 : printf "%s\n" "#define HAVE_STRING_H 1" >>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" >>confdefs.h fi ac_fn_c_check_type "$LINENO" "off_t" "ac_cv_type_off_t" "$ac_includes_default" if test "x$ac_cv_type_off_t" = xyes then : else $as_nop printf "%s\n" "#define off_t long" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for _LARGEFILE_SOURCE value needed for large files" >&5 printf %s "checking for _LARGEFILE_SOURCE value needed for large files... " >&6; } if test ${ac_cv_sys_largefile_source+y} then : printf %s "(cached) " >&6 else $as_nop while :; do cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <sys/types.h> /* for off_t */ #include <stdio.h> int main (void) { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_sys_largefile_source=no; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #undef _LARGEFILE_SOURCE #define _LARGEFILE_SOURCE 1 #include <sys/types.h> /* for off_t */ #include <stdio.h> int main (void) { int (*fp) (FILE *, off_t, int) = fseeko; return fseeko (stdin, 0, 0) && fp (stdin, 0, 0); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_sys_largefile_source=1; break fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext ac_cv_sys_largefile_source=unknown break done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_sys_largefile_source" >&5 printf "%s\n" "$ac_cv_sys_largefile_source" >&6; } case $ac_cv_sys_largefile_source in #( no | unknown) ;; *) printf "%s\n" "#define _LARGEFILE_SOURCE $ac_cv_sys_largefile_source" >>confdefs.h ;; esac rm -rf conftest* # We used to try defining _XOPEN_SOURCE=500 too, to work around a bug # in glibc 2.1.3, but that breaks too many other things. # If you want fseeko and ftello with glibc, upgrade to a fixed glibc. if test $ac_cv_sys_largefile_source != unknown; then printf "%s\n" "#define HAVE_FSEEKO 1" >>confdefs.h fi have_check=no if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then if test -n "$ac_tool_prefix"; then # Extract the first word of "${ac_tool_prefix}pkg-config", so it can be a program name with args. set dummy ${ac_tool_prefix}pkg-config; 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_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_PKG_CONFIG="$PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS 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_PKG_CONFIG="$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 PKG_CONFIG=$ac_cv_path_PKG_CONFIG if test -n "$PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $PKG_CONFIG" >&5 printf "%s\n" "$PKG_CONFIG" >&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_path_PKG_CONFIG"; then ac_pt_PKG_CONFIG=$PKG_CONFIG # Extract the first word of "pkg-config", so it can be a program name with args. set dummy pkg-config; 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_ac_pt_PKG_CONFIG+y} then : printf %s "(cached) " >&6 else $as_nop case $ac_pt_PKG_CONFIG in [\\/]* | ?:[\\/]*) ac_cv_path_ac_pt_PKG_CONFIG="$ac_pt_PKG_CONFIG" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS 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_ac_pt_PKG_CONFIG="$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 ac_pt_PKG_CONFIG=$ac_cv_path_ac_pt_PKG_CONFIG if test -n "$ac_pt_PKG_CONFIG"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_pt_PKG_CONFIG" >&5 printf "%s\n" "$ac_pt_PKG_CONFIG" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi if test "x$ac_pt_PKG_CONFIG" = x; then PKG_CONFIG="" 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 PKG_CONFIG=$ac_pt_PKG_CONFIG fi else PKG_CONFIG="$ac_cv_path_PKG_CONFIG" fi fi if test -n "$PKG_CONFIG"; then _pkg_min_version=0.9.0 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking pkg-config is at least version $_pkg_min_version" >&5 printf %s "checking pkg-config is at least version $_pkg_min_version... " >&6; } if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then { 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; } PKG_CONFIG="" fi fi pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CHECK" >&5 printf %s "checking for CHECK... " >&6; } if test -n "$CHECK_CFLAGS"; then pkg_cv_CHECK_CFLAGS="$CHECK_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"check\""; } >&5 ($PKG_CONFIG --exists --print-errors "check") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CHECK_CFLAGS=`$PKG_CONFIG --cflags "check" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$CHECK_LIBS"; then pkg_cv_CHECK_LIBS="$CHECK_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"check\""; } >&5 ($PKG_CONFIG --exists --print-errors "check") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_CHECK_LIBS=`$PKG_CONFIG --libs "check" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then CHECK_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "check" 2>&1` else CHECK_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "check" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$CHECK_PKG_ERRORS" >&5 have_check=no elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_check=no else CHECK_CFLAGS=$pkg_cv_CHECK_CFLAGS CHECK_LIBS=$pkg_cv_CHECK_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_check=yes fi if test "x$have_check" != "xno"; then CHECK_TRUE= CHECK_FALSE='#' else CHECK_TRUE='#' CHECK_FALSE= fi have_curl=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for curl_global_init in -lcurl" >&5 printf %s "checking for curl_global_init in -lcurl... " >&6; } if test ${ac_cv_lib_curl_curl_global_init+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lcurl $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 curl_global_init (); int main (void) { return curl_global_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_curl_curl_global_init=yes else $as_nop ac_cv_lib_curl_curl_global_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_curl_curl_global_init" >&5 printf "%s\n" "$ac_cv_lib_curl_curl_global_init" >&6; } if test "x$ac_cv_lib_curl_curl_global_init" = xyes then : have_curl=yes fi if test "x$have_curl" = "xyes"; then CURLLIBS=-lcurl fi have_uuid=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for uuid_generate in -luuid" >&5 printf %s "checking for uuid_generate in -luuid... " >&6; } if test ${ac_cv_lib_uuid_uuid_generate+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-luuid $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 uuid_generate (); int main (void) { return uuid_generate (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_uuid_uuid_generate=yes else $as_nop ac_cv_lib_uuid_uuid_generate=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_uuid_uuid_generate" >&5 printf "%s\n" "$ac_cv_lib_uuid_uuid_generate" >&6; } if test "x$ac_cv_lib_uuid_uuid_generate" = xyes then : have_uuid=yes fi if test "x$have_uuid" = "xyes"; then UUIDLIBS=-luuid fi # Check whether --enable-encryption was given. if test ${enable_encryption+y} then : enableval=$enable_encryption; crypt_enabled=$enableval else $as_nop crypt_enabled=yes fi crypt_support=no if test "x$crypt_enabled" = "xyes"; then use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libgcrypt-prefix was given. if test ${with_libgcrypt_prefix+y} then : withval=$with_libgcrypt_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBGCRYPT= LTLIBGCRYPT= INCGCRYPT= LIBGCRYPT_PREFIX= HAVE_LIBGCRYPT= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='gcrypt gpg-error' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBGCRYPT="${LTLIBGCRYPT}${LTLIBGCRYPT:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBGCRYPT; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBGCRYPT="${LTLIBGCRYPT}${LTLIBGCRYPT:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBGCRYPT; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$found_so" else LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$found_a" else LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'gcrypt'; then LIBGCRYPT_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'gcrypt'; then LIBGCRYPT_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'gcrypt'; then LIBGCRYPT_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCGCRYPT; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCGCRYPT="${INCGCRYPT}${INCGCRYPT:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBGCRYPT; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBGCRYPT; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBGCRYPT="${LTLIBGCRYPT}${LTLIBGCRYPT:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$dep" LTLIBGCRYPT="${LTLIBGCRYPT}${LTLIBGCRYPT:+ }$dep" ;; esac done fi else LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }-l$name" LTLIBGCRYPT="${LTLIBGCRYPT}${LTLIBGCRYPT:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBGCRYPT="${LIBGCRYPT}${LIBGCRYPT:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBGCRYPT="${LTLIBGCRYPT}${LTLIBGCRYPT:+ }-R$found_dir" done fi ac_save_CPPFLAGS="$CPPFLAGS" for element in $INCGCRYPT; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for libgcrypt" >&5 printf %s "checking for libgcrypt... " >&6; } if test ${ac_cv_libgcrypt+y} then : printf %s "(cached) " >&6 else $as_nop ac_save_LIBS="$LIBS" case " $LIBGCRYPT" in *" -l"*) LIBS="$LIBS $LIBGCRYPT" ;; *) LIBS="$LIBGCRYPT $LIBS" ;; esac cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <gpg-error.h> int main (void) { ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_libgcrypt=yes else $as_nop ac_cv_libgcrypt='no' fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$ac_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_cv_libgcrypt" >&5 printf "%s\n" "$ac_cv_libgcrypt" >&6; } if test "$ac_cv_libgcrypt" = yes; then HAVE_LIBGCRYPT=yes printf "%s\n" "#define HAVE_LIBGCRYPT 1" >>confdefs.h { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libgcrypt" >&5 printf %s "checking how to link with libgcrypt... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBGCRYPT" >&5 printf "%s\n" "$LIBGCRYPT" >&6; } else HAVE_LIBGCRYPT=no CPPFLAGS="$ac_save_CPPFLAGS" LIBGCRYPT= LTLIBGCRYPT= LIBGCRYPT_PREFIX= fi crypt_support=$HAVE_LIBGCRYPT if test "x$crypt_support" = "xyes"; then printf "%s\n" "#define REC_CRYPT_SUPPORT 1" >>confdefs.h fi fi if test "x$crypt_support" = "xyes"; then CRYPT_TRUE= CRYPT_FALSE='#' else CRYPT_TRUE='#' CRYPT_FALSE= fi have_glib=no pkg_failed=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GLIB" >&5 printf %s "checking for GLIB... " >&6; } if test -n "$GLIB_CFLAGS"; then pkg_cv_GLIB_CFLAGS="$GLIB_CFLAGS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.0.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.0.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_CFLAGS=`$PKG_CONFIG --cflags "glib-2.0 >= 2.0.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test -n "$GLIB_LIBS"; then pkg_cv_GLIB_LIBS="$GLIB_LIBS" elif test -n "$PKG_CONFIG"; then if test -n "$PKG_CONFIG" && \ { { printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$PKG_CONFIG --exists --print-errors \"glib-2.0 >= 2.0.0\""; } >&5 ($PKG_CONFIG --exists --print-errors "glib-2.0 >= 2.0.0") 2>&5 ac_status=$? printf "%s\n" "$as_me:${as_lineno-$LINENO}: \$? = $ac_status" >&5 test $ac_status = 0; }; then pkg_cv_GLIB_LIBS=`$PKG_CONFIG --libs "glib-2.0 >= 2.0.0" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes else pkg_failed=yes fi else pkg_failed=untried fi if test $pkg_failed = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi if test $_pkg_short_errors_supported = yes; then GLIB_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "glib-2.0 >= 2.0.0" 2>&1` else GLIB_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "glib-2.0 >= 2.0.0" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$GLIB_PKG_ERRORS" >&5 have_glib=no elif test $pkg_failed = untried; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } have_glib=no else GLIB_CFLAGS=$pkg_cv_GLIB_CFLAGS GLIB_LIBS=$pkg_cv_GLIB_LIBS { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: yes" >&5 printf "%s\n" "yes" >&6; } have_glib=yes fi have_mdb=no { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for mdb_init in -lmdb" >&5 printf %s "checking for mdb_init in -lmdb... " >&6; } if test ${ac_cv_lib_mdb_mdb_init+y} then : printf %s "(cached) " >&6 else $as_nop ac_check_lib_save_LIBS=$LIBS LIBS="-lmdb $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 mdb_init (); int main (void) { return mdb_init (); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : ac_cv_lib_mdb_mdb_init=yes else $as_nop ac_cv_lib_mdb_mdb_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_mdb_mdb_init" >&5 printf "%s\n" "$ac_cv_lib_mdb_mdb_init" >&6; } if test "x$ac_cv_lib_mdb_mdb_init" = xyes then : have_mdb=yes fi if test "x$have_mdb" = "xyes"; then MDBLIBS=-lmdb OLD_CFLAGS=$CFLAGS CFLAGS="$CFLAGS $pkg_cv_GLIB_CFLAGS" mdb_uses_sdatetime=no ac_fn_check_decl "$LINENO" "MDB_SDATETIME" "ac_cv_have_decl_MDB_SDATETIME" "#include <glib.h> #include <mdbtools.h> " "$ac_c_undeclared_builtin_options" "CFLAGS" if test "x$ac_cv_have_decl_MDB_SDATETIME" = xyes then : mdb_uses_sdatetime=yes fi CFLAGS=$OLD_CFLAGS if test "x$mdb_uses_sdatetime" = "xyes"; then MDB_DATETIME="MDB_SDATETIME" else MDB_DATETIME="MDB_DATETIME" fi fi if test "x$have_glib" = "xyes" && test "x$have_mdb" = "xyes"; then COMPILE_MDB2REC_TRUE= COMPILE_MDB2REC_FALSE='#' else COMPILE_MDB2REC_TRUE='#' COMPILE_MDB2REC_FALSE= fi if test "x$have_curl" = "xyes"; then REMOTE_DESCRIPTORS_TRUE= REMOTE_DESCRIPTORS_FALSE='#' else REMOTE_DESCRIPTORS_TRUE='#' REMOTE_DESCRIPTORS_FALSE= fi if test "x$have_uuid" = "xyes"; then UUID_TYPE_TRUE= UUID_TYPE_FALSE='#' else UUID_TYPE_TRUE='#' UUID_TYPE_FALSE= fi BASH_HEADERS=/usr/include/bash # Check whether --with-bash-headers was given. if test ${with_bash_headers+y} then : withval=$with_bash_headers; BASH_HEADERS=$withval fi if test -f ${BASH_HEADERS}/config.h; then bash_headers_available=yes else bash_headers_available=no fi # Check whether --enable-bash-builtins was given. if test ${enable_bash_builtins+y} then : enableval=$enable_bash_builtins; bash_builtins_enabled=$enableval else $as_nop bash_builtins_enabled=yes fi if test "x$bash_headers_available" = "xyes" && test "x$bash_builtins_enabled" = "xyes"; then BASH_BUILTINS_TRUE= BASH_BUILTINS_FALSE='#' else BASH_BUILTINS_TRUE='#' BASH_BUILTINS_FALSE= fi compile_w32_system=no case "${host}" in *-mingw32*) compile_w32_system=yes ;; *) ;; esac { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether NLS is requested" >&5 printf %s "checking whether NLS is requested... " >&6; } # Check whether --enable-nls was given. if test ${enable_nls+y} then : enableval=$enable_nls; USE_NLS=$enableval else $as_nop USE_NLS=yes fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 printf "%s\n" "$USE_NLS" >&6; } GETTEXT_MACRO_VERSION=0.19 # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgfmt", so it can be a program name with args. set dummy msgfmt; 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_MSGFMT+y} then : printf %s "(cached) " >&6 else $as_nop case "$MSGFMT" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGFMT="$MSGFMT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --statistics /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_MSGFMT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGFMT" && ac_cv_path_MSGFMT=":" ;; esac fi MSGFMT="$ac_cv_path_MSGFMT" if test "$MSGFMT" != ":"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGFMT" >&5 printf "%s\n" "$MSGFMT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi # Extract the first word of "gmsgfmt", so it can be a program name with args. set dummy gmsgfmt; 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_GMSGFMT+y} then : printf %s "(cached) " >&6 else $as_nop case $GMSGFMT in [\\/]* | ?:[\\/]*) ac_cv_path_GMSGFMT="$GMSGFMT" # Let the user override the test with a path. ;; *) as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS 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_GMSGFMT="$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 test -z "$ac_cv_path_GMSGFMT" && ac_cv_path_GMSGFMT="$MSGFMT" ;; esac fi GMSGFMT=$ac_cv_path_GMSGFMT if test -n "$GMSGFMT"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $GMSGFMT" >&5 printf "%s\n" "$GMSGFMT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "xgettext", so it can be a program name with args. set dummy xgettext; 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_XGETTEXT+y} then : printf %s "(cached) " >&6 else $as_nop case "$XGETTEXT" in [\\/]* | ?:[\\/]*) ac_cv_path_XGETTEXT="$XGETTEXT" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&5 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi); then ac_cv_path_XGETTEXT="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_XGETTEXT" && ac_cv_path_XGETTEXT=":" ;; esac fi XGETTEXT="$ac_cv_path_XGETTEXT" if test "$XGETTEXT" != ":"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $XGETTEXT" >&5 printf "%s\n" "$XGETTEXT" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi rm -f messages.po case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "msgmerge", so it can be a program name with args. set dummy msgmerge; 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_MSGMERGE+y} then : printf %s "(cached) " >&6 else $as_nop case "$MSGMERGE" in [\\/]* | ?:[\\/]*) ac_cv_path_MSGMERGE="$MSGMERGE" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&5 if $ac_dir/$ac_word --update -q /dev/null /dev/null >&5 2>&1; then ac_cv_path_MSGMERGE="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" test -z "$ac_cv_path_MSGMERGE" && ac_cv_path_MSGMERGE=":" ;; esac fi MSGMERGE="$ac_cv_path_MSGMERGE" if test "$MSGMERGE" != ":"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $MSGMERGE" >&5 printf "%s\n" "$MSGMERGE" >&6; } else { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: no" >&5 printf "%s\n" "no" >&6; } fi test -n "$localedir" || localedir='${datadir}/locale' test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= ac_config_commands="$ac_config_commands po-directories" use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libiconv-prefix was given. if test ${with_libiconv_prefix+y} then : withval=$with_libiconv_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBICONV= LTLIBICONV= INCICONV= LIBICONV_PREFIX= HAVE_LIBICONV= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='iconv ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBICONV="${LIBICONV}${LIBICONV:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_so" else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBICONV="${LIBICONV}${LIBICONV:+ }$found_a" else LIBICONV="${LIBICONV}${LIBICONV:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'iconv'; then LIBICONV_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCICONV="${INCICONV}${INCICONV:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBICONV="${LIBICONV}${LIBICONV:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBICONV; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBICONV="${LIBICONV}${LIBICONV:+ }$dep" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }$dep" ;; esac done fi else LIBICONV="${LIBICONV}${LIBICONV:+ }-l$name" LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBICONV="${LIBICONV}${LIBICONV:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBICONV="${LTLIBICONV}${LTLIBICONV:+ }-R$found_dir" done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFPreferencesCopyAppValue" >&5 printf %s "checking for CFPreferencesCopyAppValue... " >&6; } if test ${gt_cv_func_CFPreferencesCopyAppValue+y} then : printf %s "(cached) " >&6 else $as_nop gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <CoreFoundation/CFPreferences.h> int main (void) { CFPreferencesCopyAppValue(NULL, NULL) ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_func_CFPreferencesCopyAppValue=yes else $as_nop gt_cv_func_CFPreferencesCopyAppValue=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFPreferencesCopyAppValue" >&5 printf "%s\n" "$gt_cv_func_CFPreferencesCopyAppValue" >&6; } if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then printf "%s\n" "#define HAVE_CFPREFERENCESCOPYAPPVALUE 1" >>confdefs.h fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for CFLocaleCopyCurrent" >&5 printf %s "checking for CFLocaleCopyCurrent... " >&6; } if test ${gt_cv_func_CFLocaleCopyCurrent+y} then : printf %s "(cached) " >&6 else $as_nop gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <CoreFoundation/CFLocale.h> int main (void) { CFLocaleCopyCurrent(); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : gt_cv_func_CFLocaleCopyCurrent=yes else $as_nop gt_cv_func_CFLocaleCopyCurrent=no fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$gt_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_cv_func_CFLocaleCopyCurrent" >&5 printf "%s\n" "$gt_cv_func_CFLocaleCopyCurrent" >&6; } if test $gt_cv_func_CFLocaleCopyCurrent = yes; then printf "%s\n" "#define HAVE_CFLOCALECOPYCURRENT 1" >>confdefs.h fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi LIBINTL= LTLIBINTL= POSUB= case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libc" >&5 printf %s "checking for GNU gettext in libc... " >&6; } if eval test \${$gt_func_gnugettext_libc+y} then : printf %s "(cached) " >&6 else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <libintl.h> #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code int main (void) { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$gt_func_gnugettext_libc=yes" else $as_nop eval "$gt_func_gnugettext_libc=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi eval ac_res=\$$gt_func_gnugettext_libc { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then am_save_CPPFLAGS="$CPPFLAGS" for element in $INCICONV; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for iconv" >&5 printf %s "checking for iconv... " >&6; } if test ${am_cv_func_iconv+y} then : printf %s "(cached) " >&6 else $as_nop am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <iconv.h> int main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <stdlib.h> #include <iconv.h> int main (void) { iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd); ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : am_cv_lib_iconv=yes am_cv_func_iconv=yes fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext LIBS="$am_save_LIBS" fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv" >&5 printf "%s\n" "$am_cv_func_iconv" >&6; } if test "$am_cv_func_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for working iconv" >&5 printf %s "checking for working iconv... " >&6; } if test ${am_cv_func_iconv_works+y} then : printf %s "(cached) " >&6 else $as_nop am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do if test "$cross_compiling" = yes then : case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac else $as_nop cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <iconv.h> #include <string.h> #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif int main (void) { int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; ; return 0; } _ACEOF if ac_fn_c_try_run "$LINENO" then : am_cv_func_iconv_works=yes fi rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \ conftest.$ac_objext conftest.beam conftest.$ac_ext fi test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $am_cv_func_iconv_works" >&5 printf "%s\n" "$am_cv_func_iconv_works" >&6; } case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then printf "%s\n" "#define HAVE_ICONV 1" >>confdefs.h fi if test "$am_cv_lib_iconv" = yes; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libiconv" >&5 printf %s "checking how to link with libiconv... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBICONV" >&5 printf "%s\n" "$LIBICONV" >&6; } else CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi use_additional=yes acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" # Check whether --with-libintl-prefix was given. if test ${with_libintl_prefix+y} then : withval=$with_libintl_prefix; if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi fi if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi LIBINTL= LTLIBINTL= INCINTL= LIBINTL_PREFIX= HAVE_LIBINTL= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='intl ' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIBINTL="${LIBINTL}${LIBINTL:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$value" else : fi else found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi if test "$acl_hardcode_direct" = yes; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_so" else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then LIBINTL="${LIBINTL}${LIBINTL:+ }$found_a" else LIBINTL="${LIBINTL}${LIBINTL:+ }-L$found_dir -l$name" fi fi additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = 'intl'; then LIBINTL_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INCINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then INCINTL="${INCINTL}${INCINTL:+ }-I$additional_includedir" fi fi fi fi fi if test -n "$found_la"; then save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LIBINTL="${LIBINTL}${LIBINTL:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIBINTL; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) LIBINTL="${LIBINTL}${LIBINTL:+ }$dep" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }$dep" ;; esac done fi else LIBINTL="${LIBINTL}${LIBINTL:+ }-l$name" LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" else for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIBINTL="${LIBINTL}${LIBINTL:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then for found_dir in $ltrpathdirs; do LTLIBINTL="${LTLIBINTL}${LTLIBINTL:+ }-R$found_dir" done fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking for GNU gettext in libintl" >&5 printf %s "checking for GNU gettext in libintl... " >&6; } if eval test \${$gt_func_gnugettext_libintl+y} then : printf %s "(cached) " >&6 else $as_nop gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <libintl.h> #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code int main (void) { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : eval "$gt_func_gnugettext_libintl=yes" else $as_nop eval "$gt_func_gnugettext_libintl=no" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" cat confdefs.h - <<_ACEOF >conftest.$ac_ext /* end confdefs.h. */ #include <libintl.h> #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code int main (void) { bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ; return 0; } _ACEOF if ac_fn_c_try_link "$LINENO" then : LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" fi rm -f core conftest.err conftest.$ac_objext conftest.beam \ conftest$ac_exeext conftest.$ac_ext fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS" fi eval ac_res=\$$gt_func_gnugettext_libintl { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $ac_res" >&5 printf "%s\n" "$ac_res" >&6; } fi if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else LIBINTL= LTLIBINTL= INCINTL= fi if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then printf "%s\n" "#define ENABLE_NLS 1" >>confdefs.h else USE_NLS=no fi fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking whether to use NLS" >&5 printf %s "checking whether to use NLS... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $USE_NLS" >&5 printf "%s\n" "$USE_NLS" >&6; } if test "$USE_NLS" = "yes"; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking where the gettext function comes from" >&5 printf %s "checking where the gettext function comes from... " >&6; } if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $gt_source" >&5 printf "%s\n" "$gt_source" >&6; } fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking how to link with libintl" >&5 printf %s "checking how to link with libintl... " >&6; } { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: $LIBINTL" >&5 printf "%s\n" "$LIBINTL" >&6; } for element in $INCINTL; do haveit= for x in $CPPFLAGS; do acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" eval x=\"$x\" exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }$element" fi done fi printf "%s\n" "#define HAVE_GETTEXT 1" >>confdefs.h printf "%s\n" "#define HAVE_DCGETTEXT 1" >>confdefs.h fi POSUB=po fi INTLLIBS="$LIBINTL" # Check whether --enable-coverage was given. if test ${enable_coverage+y} then : enableval=$enable_coverage; use_gcov=$enableval else $as_nop use_gcov=no fi if test "x$use_gcov" = "xyes"; then USE_COVERAGE_TRUE= USE_COVERAGE_FALSE='#' else USE_COVERAGE_TRUE='#' USE_COVERAGE_FALSE= fi ac_config_files="$ac_config_files Makefile lib/Makefile libcsv/Makefile src/Makefile utils/Makefile bash/Makefile doc/Makefile po/Makefile.in torture/Makefile torture/utils/Makefile torture/utils/config.sh man/Makefile etc/Makefile" cat >confcache <<\_ACEOF # This file is a shell script that caches the results of configure # tests run on this system so they can be shared between configure # scripts and configure runs, see configure's option --config-cache. # It is not useful on other systems. If it contains results you don't # want to keep, you may remove or edit it. # # config.status only pays attention to the cache file if you give it # the --recheck option to rerun configure. # # `ac_cv_env_foo' variables (set or unset) will be overridden when # loading this file, other *unset* `ac_cv_foo' will be assigned the # following values. _ACEOF # The following way of writing the cache mishandles newlines in values, # but we know of no workaround that is simple, portable, and efficient. # So, we kill variables containing newlines. # Ultrix sh set writes to stderr and can't be redirected directly, # and sets the high bit in the cache file unless we assign to the vars. ( for ac_var in `(set) 2>&1 | sed -n 's/^\([a-zA-Z_][a-zA-Z0-9_]*\)=.*/\1/p'`; do eval ac_val=\$$ac_var case $ac_val in #( *${as_nl}*) case $ac_var in #( *_cv_*) { 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}' DEFS=-DHAVE_CONFIG_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 { printf "%s\n" "$as_me:${as_lineno-$LINENO}: checking that generated files are newer than configure" >&5 printf %s "checking that generated files are newer than configure... " >&6; } if test -n "$am_sleep_pid"; then # Hide warnings about reused PIDs. wait $am_sleep_pid 2>/dev/null fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: result: done" >&5 printf "%s\n" "done" >&6; } if test -n "$EXEEXT"; then am__EXEEXT_TRUE= am__EXEEXT_FALSE='#' else am__EXEEXT_TRUE='#' am__EXEEXT_FALSE= fi if test -z "${AMDEP_TRUE}" && test -z "${AMDEP_FALSE}"; then as_fn_error $? "conditional \"AMDEP\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${am__fastdepCC_TRUE}" && test -z "${am__fastdepCC_FALSE}"; then as_fn_error $? "conditional \"am__fastdepCC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${GL_COND_LIBTOOL_TRUE}" && test -z "${GL_COND_LIBTOOL_FALSE}"; then as_fn_error $? "conditional \"GL_COND_LIBTOOL\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi CONFIG_INCLUDE=src/config.h gl_libobjs= gl_ltlibobjs= gl_libobjdeps= if test -n "$gl_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' sed_dirname1='s,//*,/,g' sed_dirname2='s,\(.\)/$,\1,' sed_dirname3='s,^[^/]*$,.,' sed_dirname4='s,\(.\)/[^/]*$,\1,' sed_basename1='s,.*/,,' for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"` i_base=`echo "$i" | sed -e "$sed_basename1"` gl_libobjdeps="$gl_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Plo" done fi gl_LIBOBJS=$gl_libobjs gl_LTLIBOBJS=$gl_ltlibobjs gl_LIBOBJDEPS=$gl_libobjdeps gltests_libobjs= gltests_ltlibobjs= gltests_libobjdeps= if test -n "$gltests_LIBOBJS"; then # Remove the extension. sed_drop_objext='s/\.o$//;s/\.obj$//' sed_dirname1='s,//*,/,g' sed_dirname2='s,\(.\)/$,\1,' sed_dirname3='s,^[^/]*$,.,' sed_dirname4='s,\(.\)/[^/]*$,\1,' sed_basename1='s,.*/,,' for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"` i_base=`echo "$i" | sed -e "$sed_basename1"` gltests_libobjdeps="$gltests_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Plo" done fi gltests_LIBOBJS=$gltests_libobjs gltests_LTLIBOBJS=$gltests_ltlibobjs gltests_LIBOBJDEPS=$gltests_libobjdeps if test -z "${CHECK_TRUE}" && test -z "${CHECK_FALSE}"; then as_fn_error $? "conditional \"CHECK\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${CRYPT_TRUE}" && test -z "${CRYPT_FALSE}"; then as_fn_error $? "conditional \"CRYPT\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${COMPILE_MDB2REC_TRUE}" && test -z "${COMPILE_MDB2REC_FALSE}"; then as_fn_error $? "conditional \"COMPILE_MDB2REC\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${REMOTE_DESCRIPTORS_TRUE}" && test -z "${REMOTE_DESCRIPTORS_FALSE}"; then as_fn_error $? "conditional \"REMOTE_DESCRIPTORS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${UUID_TYPE_TRUE}" && test -z "${UUID_TYPE_FALSE}"; then as_fn_error $? "conditional \"UUID_TYPE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${BASH_BUILTINS_TRUE}" && test -z "${BASH_BUILTINS_FALSE}"; then as_fn_error $? "conditional \"BASH_BUILTINS\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi if test -z "${USE_COVERAGE_TRUE}" && test -z "${USE_COVERAGE_FALSE}"; then as_fn_error $? "conditional \"USE_COVERAGE\" was never defined. Usually this means the macro was only invoked conditionally." "$LINENO" 5 fi : "${CONFIG_STATUS=./config.status}" ac_write_fail=0 ac_clean_files_save=$ac_clean_files ac_clean_files="$ac_clean_files $CONFIG_STATUS" { 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</dev/null; fi if (exec 3>&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 GNU recutils $as_me 1.9, 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 case $ac_config_headers in *" "*) set x $ac_config_headers; shift; ac_config_headers=$*;; esac cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 # Files that config.status was made for. config_files="$ac_config_files" config_headers="$ac_config_headers" config_links="$ac_config_links" 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 --header=FILE[:TEMPLATE] instantiate the configuration header FILE Configuration files: $config_files Configuration headers: $config_headers Configuration links: $config_links Configuration commands: $config_commands Report bugs to <bug-recutils@gnu.org>. GNU recutils home page: <https://www.gnu.org/software/recutils/>. General help using GNU software: <https://www.gnu.org/gethelp/>." _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="\\ GNU recutils config.status 1.9 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' INSTALL='$INSTALL' MKDIR_P='$MKDIR_P' AWK='$AWK' test -n "\$AWK" || AWK=awk _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # The default lists apply if the user does not specify any file. ac_need_defaults=: while test $# != 0 do case $1 in --*=?*) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg=`expr "X$1" : 'X[^=]*=\(.*\)'` ac_shift=: ;; --*=) ac_option=`expr "X$1" : 'X\([^=]*\)='` ac_optarg= ac_shift=: ;; *) ac_option=$1 ac_optarg=$2 ac_shift=shift ;; esac case $ac_option in # Handling of the options. -recheck | --recheck | --rechec | --reche | --rech | --rec | --re | --r) ac_cs_recheck=: ;; --version | --versio | --versi | --vers | --ver | --ve | --v | -V ) 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;; --header | --heade | --head | --hea ) $ac_shift case $ac_optarg in *\'*) ac_optarg=`printf "%s\n" "$ac_optarg" | sed "s/'/'\\\\\\\\''/g"` ;; esac as_fn_append CONFIG_HEADERS " '$ac_optarg'" ac_need_defaults=false;; --he | --h) # Conflict between --help and --header as_fn_error $? "ambiguous option: \`$1' Try \`$0 --help' for more information.";; --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 # AMDEP_TRUE="$AMDEP_TRUE" MAKE="${MAKE-make}" # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' macro_version='`$ECHO "$macro_version" | $SED "$delay_single_quote_subst"`' macro_revision='`$ECHO "$macro_revision" | $SED "$delay_single_quote_subst"`' enable_shared='`$ECHO "$enable_shared" | $SED "$delay_single_quote_subst"`' enable_static='`$ECHO "$enable_static" | $SED "$delay_single_quote_subst"`' pic_mode='`$ECHO "$pic_mode" | $SED "$delay_single_quote_subst"`' enable_fast_install='`$ECHO "$enable_fast_install" | $SED "$delay_single_quote_subst"`' shared_archive_member_spec='`$ECHO "$shared_archive_member_spec" | $SED "$delay_single_quote_subst"`' SHELL='`$ECHO "$SHELL" | $SED "$delay_single_quote_subst"`' ECHO='`$ECHO "$ECHO" | $SED "$delay_single_quote_subst"`' PATH_SEPARATOR='`$ECHO "$PATH_SEPARATOR" | $SED "$delay_single_quote_subst"`' host_alias='`$ECHO "$host_alias" | $SED "$delay_single_quote_subst"`' host='`$ECHO "$host" | $SED "$delay_single_quote_subst"`' host_os='`$ECHO "$host_os" | $SED "$delay_single_quote_subst"`' build_alias='`$ECHO "$build_alias" | $SED "$delay_single_quote_subst"`' build='`$ECHO "$build" | $SED "$delay_single_quote_subst"`' build_os='`$ECHO "$build_os" | $SED "$delay_single_quote_subst"`' SED='`$ECHO "$SED" | $SED "$delay_single_quote_subst"`' Xsed='`$ECHO "$Xsed" | $SED "$delay_single_quote_subst"`' GREP='`$ECHO "$GREP" | $SED "$delay_single_quote_subst"`' EGREP='`$ECHO "$EGREP" | $SED "$delay_single_quote_subst"`' FGREP='`$ECHO "$FGREP" | $SED "$delay_single_quote_subst"`' LD='`$ECHO "$LD" | $SED "$delay_single_quote_subst"`' NM='`$ECHO "$NM" | $SED "$delay_single_quote_subst"`' LN_S='`$ECHO "$LN_S" | $SED "$delay_single_quote_subst"`' max_cmd_len='`$ECHO "$max_cmd_len" | $SED "$delay_single_quote_subst"`' ac_objext='`$ECHO "$ac_objext" | $SED "$delay_single_quote_subst"`' exeext='`$ECHO "$exeext" | $SED "$delay_single_quote_subst"`' lt_unset='`$ECHO "$lt_unset" | $SED "$delay_single_quote_subst"`' lt_SP2NL='`$ECHO "$lt_SP2NL" | $SED "$delay_single_quote_subst"`' lt_NL2SP='`$ECHO "$lt_NL2SP" | $SED "$delay_single_quote_subst"`' lt_cv_to_host_file_cmd='`$ECHO "$lt_cv_to_host_file_cmd" | $SED "$delay_single_quote_subst"`' lt_cv_to_tool_file_cmd='`$ECHO "$lt_cv_to_tool_file_cmd" | $SED "$delay_single_quote_subst"`' reload_flag='`$ECHO "$reload_flag" | $SED "$delay_single_quote_subst"`' reload_cmds='`$ECHO "$reload_cmds" | $SED "$delay_single_quote_subst"`' OBJDUMP='`$ECHO "$OBJDUMP" | $SED "$delay_single_quote_subst"`' deplibs_check_method='`$ECHO "$deplibs_check_method" | $SED "$delay_single_quote_subst"`' file_magic_cmd='`$ECHO "$file_magic_cmd" | $SED "$delay_single_quote_subst"`' file_magic_glob='`$ECHO "$file_magic_glob" | $SED "$delay_single_quote_subst"`' want_nocaseglob='`$ECHO "$want_nocaseglob" | $SED "$delay_single_quote_subst"`' DLLTOOL='`$ECHO "$DLLTOOL" | $SED "$delay_single_quote_subst"`' sharedlib_from_linklib_cmd='`$ECHO "$sharedlib_from_linklib_cmd" | $SED "$delay_single_quote_subst"`' AR='`$ECHO "$AR" | $SED "$delay_single_quote_subst"`' AR_FLAGS='`$ECHO "$AR_FLAGS" | $SED "$delay_single_quote_subst"`' archiver_list_spec='`$ECHO "$archiver_list_spec" | $SED "$delay_single_quote_subst"`' STRIP='`$ECHO "$STRIP" | $SED "$delay_single_quote_subst"`' RANLIB='`$ECHO "$RANLIB" | $SED "$delay_single_quote_subst"`' old_postinstall_cmds='`$ECHO "$old_postinstall_cmds" | $SED "$delay_single_quote_subst"`' old_postuninstall_cmds='`$ECHO "$old_postuninstall_cmds" | $SED "$delay_single_quote_subst"`' old_archive_cmds='`$ECHO "$old_archive_cmds" | $SED "$delay_single_quote_subst"`' lock_old_archive_extraction='`$ECHO "$lock_old_archive_extraction" | $SED "$delay_single_quote_subst"`' CC='`$ECHO "$CC" | $SED "$delay_single_quote_subst"`' CFLAGS='`$ECHO "$CFLAGS" | $SED "$delay_single_quote_subst"`' compiler='`$ECHO "$compiler" | $SED "$delay_single_quote_subst"`' GCC='`$ECHO "$GCC" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_pipe='`$ECHO "$lt_cv_sys_global_symbol_pipe" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_cdecl='`$ECHO "$lt_cv_sys_global_symbol_to_cdecl" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_import='`$ECHO "$lt_cv_sys_global_symbol_to_import" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address" | $SED "$delay_single_quote_subst"`' lt_cv_sys_global_symbol_to_c_name_address_lib_prefix='`$ECHO "$lt_cv_sys_global_symbol_to_c_name_address_lib_prefix" | $SED "$delay_single_quote_subst"`' lt_cv_nm_interface='`$ECHO "$lt_cv_nm_interface" | $SED "$delay_single_quote_subst"`' nm_file_list_spec='`$ECHO "$nm_file_list_spec" | $SED "$delay_single_quote_subst"`' lt_sysroot='`$ECHO "$lt_sysroot" | $SED "$delay_single_quote_subst"`' lt_cv_truncate_bin='`$ECHO "$lt_cv_truncate_bin" | $SED "$delay_single_quote_subst"`' objdir='`$ECHO "$objdir" | $SED "$delay_single_quote_subst"`' MAGIC_CMD='`$ECHO "$MAGIC_CMD" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_no_builtin_flag='`$ECHO "$lt_prog_compiler_no_builtin_flag" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_pic='`$ECHO "$lt_prog_compiler_pic" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_wl='`$ECHO "$lt_prog_compiler_wl" | $SED "$delay_single_quote_subst"`' lt_prog_compiler_static='`$ECHO "$lt_prog_compiler_static" | $SED "$delay_single_quote_subst"`' lt_cv_prog_compiler_c_o='`$ECHO "$lt_cv_prog_compiler_c_o" | $SED "$delay_single_quote_subst"`' need_locks='`$ECHO "$need_locks" | $SED "$delay_single_quote_subst"`' MANIFEST_TOOL='`$ECHO "$MANIFEST_TOOL" | $SED "$delay_single_quote_subst"`' DSYMUTIL='`$ECHO "$DSYMUTIL" | $SED "$delay_single_quote_subst"`' NMEDIT='`$ECHO "$NMEDIT" | $SED "$delay_single_quote_subst"`' LIPO='`$ECHO "$LIPO" | $SED "$delay_single_quote_subst"`' OTOOL='`$ECHO "$OTOOL" | $SED "$delay_single_quote_subst"`' OTOOL64='`$ECHO "$OTOOL64" | $SED "$delay_single_quote_subst"`' libext='`$ECHO "$libext" | $SED "$delay_single_quote_subst"`' shrext_cmds='`$ECHO "$shrext_cmds" | $SED "$delay_single_quote_subst"`' extract_expsyms_cmds='`$ECHO "$extract_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds_need_lc='`$ECHO "$archive_cmds_need_lc" | $SED "$delay_single_quote_subst"`' enable_shared_with_static_runtimes='`$ECHO "$enable_shared_with_static_runtimes" | $SED "$delay_single_quote_subst"`' export_dynamic_flag_spec='`$ECHO "$export_dynamic_flag_spec" | $SED "$delay_single_quote_subst"`' whole_archive_flag_spec='`$ECHO "$whole_archive_flag_spec" | $SED "$delay_single_quote_subst"`' compiler_needs_object='`$ECHO "$compiler_needs_object" | $SED "$delay_single_quote_subst"`' old_archive_from_new_cmds='`$ECHO "$old_archive_from_new_cmds" | $SED "$delay_single_quote_subst"`' old_archive_from_expsyms_cmds='`$ECHO "$old_archive_from_expsyms_cmds" | $SED "$delay_single_quote_subst"`' archive_cmds='`$ECHO "$archive_cmds" | $SED "$delay_single_quote_subst"`' archive_expsym_cmds='`$ECHO "$archive_expsym_cmds" | $SED "$delay_single_quote_subst"`' module_cmds='`$ECHO "$module_cmds" | $SED "$delay_single_quote_subst"`' module_expsym_cmds='`$ECHO "$module_expsym_cmds" | $SED "$delay_single_quote_subst"`' with_gnu_ld='`$ECHO "$with_gnu_ld" | $SED "$delay_single_quote_subst"`' allow_undefined_flag='`$ECHO "$allow_undefined_flag" | $SED "$delay_single_quote_subst"`' no_undefined_flag='`$ECHO "$no_undefined_flag" | $SED "$delay_single_quote_subst"`' hardcode_libdir_flag_spec='`$ECHO "$hardcode_libdir_flag_spec" | $SED "$delay_single_quote_subst"`' hardcode_libdir_separator='`$ECHO "$hardcode_libdir_separator" | $SED "$delay_single_quote_subst"`' hardcode_direct='`$ECHO "$hardcode_direct" | $SED "$delay_single_quote_subst"`' hardcode_direct_absolute='`$ECHO "$hardcode_direct_absolute" | $SED "$delay_single_quote_subst"`' hardcode_minus_L='`$ECHO "$hardcode_minus_L" | $SED "$delay_single_quote_subst"`' hardcode_shlibpath_var='`$ECHO "$hardcode_shlibpath_var" | $SED "$delay_single_quote_subst"`' hardcode_automatic='`$ECHO "$hardcode_automatic" | $SED "$delay_single_quote_subst"`' inherit_rpath='`$ECHO "$inherit_rpath" | $SED "$delay_single_quote_subst"`' link_all_deplibs='`$ECHO "$link_all_deplibs" | $SED "$delay_single_quote_subst"`' always_export_symbols='`$ECHO "$always_export_symbols" | $SED "$delay_single_quote_subst"`' export_symbols_cmds='`$ECHO "$export_symbols_cmds" | $SED "$delay_single_quote_subst"`' exclude_expsyms='`$ECHO "$exclude_expsyms" | $SED "$delay_single_quote_subst"`' include_expsyms='`$ECHO "$include_expsyms" | $SED "$delay_single_quote_subst"`' prelink_cmds='`$ECHO "$prelink_cmds" | $SED "$delay_single_quote_subst"`' postlink_cmds='`$ECHO "$postlink_cmds" | $SED "$delay_single_quote_subst"`' file_list_spec='`$ECHO "$file_list_spec" | $SED "$delay_single_quote_subst"`' variables_saved_for_relink='`$ECHO "$variables_saved_for_relink" | $SED "$delay_single_quote_subst"`' need_lib_prefix='`$ECHO "$need_lib_prefix" | $SED "$delay_single_quote_subst"`' need_version='`$ECHO "$need_version" | $SED "$delay_single_quote_subst"`' version_type='`$ECHO "$version_type" | $SED "$delay_single_quote_subst"`' runpath_var='`$ECHO "$runpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_var='`$ECHO "$shlibpath_var" | $SED "$delay_single_quote_subst"`' shlibpath_overrides_runpath='`$ECHO "$shlibpath_overrides_runpath" | $SED "$delay_single_quote_subst"`' libname_spec='`$ECHO "$libname_spec" | $SED "$delay_single_quote_subst"`' library_names_spec='`$ECHO "$library_names_spec" | $SED "$delay_single_quote_subst"`' soname_spec='`$ECHO "$soname_spec" | $SED "$delay_single_quote_subst"`' install_override_mode='`$ECHO "$install_override_mode" | $SED "$delay_single_quote_subst"`' postinstall_cmds='`$ECHO "$postinstall_cmds" | $SED "$delay_single_quote_subst"`' postuninstall_cmds='`$ECHO "$postuninstall_cmds" | $SED "$delay_single_quote_subst"`' finish_cmds='`$ECHO "$finish_cmds" | $SED "$delay_single_quote_subst"`' finish_eval='`$ECHO "$finish_eval" | $SED "$delay_single_quote_subst"`' hardcode_into_libs='`$ECHO "$hardcode_into_libs" | $SED "$delay_single_quote_subst"`' sys_lib_search_path_spec='`$ECHO "$sys_lib_search_path_spec" | $SED "$delay_single_quote_subst"`' configure_time_dlsearch_path='`$ECHO "$configure_time_dlsearch_path" | $SED "$delay_single_quote_subst"`' configure_time_lt_sys_library_path='`$ECHO "$configure_time_lt_sys_library_path" | $SED "$delay_single_quote_subst"`' hardcode_action='`$ECHO "$hardcode_action" | $SED "$delay_single_quote_subst"`' enable_dlopen='`$ECHO "$enable_dlopen" | $SED "$delay_single_quote_subst"`' enable_dlopen_self='`$ECHO "$enable_dlopen_self" | $SED "$delay_single_quote_subst"`' enable_dlopen_self_static='`$ECHO "$enable_dlopen_self_static" | $SED "$delay_single_quote_subst"`' old_striplib='`$ECHO "$old_striplib" | $SED "$delay_single_quote_subst"`' striplib='`$ECHO "$striplib" | $SED "$delay_single_quote_subst"`' LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$1 _LTECHO_EOF' } # Quote evaled strings. for var in SHELL \ ECHO \ PATH_SEPARATOR \ SED \ GREP \ EGREP \ FGREP \ LD \ NM \ LN_S \ lt_SP2NL \ lt_NL2SP \ reload_flag \ OBJDUMP \ deplibs_check_method \ file_magic_cmd \ file_magic_glob \ want_nocaseglob \ DLLTOOL \ sharedlib_from_linklib_cmd \ AR \ AR_FLAGS \ archiver_list_spec \ STRIP \ RANLIB \ CC \ CFLAGS \ compiler \ lt_cv_sys_global_symbol_pipe \ lt_cv_sys_global_symbol_to_cdecl \ lt_cv_sys_global_symbol_to_import \ lt_cv_sys_global_symbol_to_c_name_address \ lt_cv_sys_global_symbol_to_c_name_address_lib_prefix \ lt_cv_nm_interface \ nm_file_list_spec \ lt_cv_truncate_bin \ lt_prog_compiler_no_builtin_flag \ lt_prog_compiler_pic \ lt_prog_compiler_wl \ lt_prog_compiler_static \ lt_cv_prog_compiler_c_o \ need_locks \ MANIFEST_TOOL \ DSYMUTIL \ NMEDIT \ LIPO \ OTOOL \ OTOOL64 \ shrext_cmds \ export_dynamic_flag_spec \ whole_archive_flag_spec \ compiler_needs_object \ with_gnu_ld \ allow_undefined_flag \ no_undefined_flag \ hardcode_libdir_flag_spec \ hardcode_libdir_separator \ exclude_expsyms \ include_expsyms \ file_list_spec \ variables_saved_for_relink \ libname_spec \ library_names_spec \ soname_spec \ install_override_mode \ finish_eval \ old_striplib \ striplib; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in reload_cmds \ old_postinstall_cmds \ old_postuninstall_cmds \ old_archive_cmds \ extract_expsyms_cmds \ old_archive_from_new_cmds \ old_archive_from_expsyms_cmds \ archive_cmds \ archive_expsym_cmds \ module_cmds \ module_expsym_cmds \ export_symbols_cmds \ prelink_cmds \ postlink_cmds \ postinstall_cmds \ postuninstall_cmds \ finish_cmds \ sys_lib_search_path_spec \ configure_time_dlsearch_path \ configure_time_lt_sys_library_path; do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[\\\\\\\`\\"\\\$]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done ac_aux_dir='$ac_aux_dir' # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile' GNUmakefile=$GNUmakefile # Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" _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 "src/config.h") CONFIG_HEADERS="$CONFIG_HEADERS src/config.h" ;; "depfiles") CONFIG_COMMANDS="$CONFIG_COMMANDS depfiles" ;; "libtool") CONFIG_COMMANDS="$CONFIG_COMMANDS libtool" ;; "$GNUmakefile") CONFIG_LINKS="$CONFIG_LINKS $GNUmakefile:$GNUmakefile" ;; "po-directories") CONFIG_COMMANDS="$CONFIG_COMMANDS po-directories" ;; "Makefile") CONFIG_FILES="$CONFIG_FILES Makefile" ;; "lib/Makefile") CONFIG_FILES="$CONFIG_FILES lib/Makefile" ;; "libcsv/Makefile") CONFIG_FILES="$CONFIG_FILES libcsv/Makefile" ;; "src/Makefile") CONFIG_FILES="$CONFIG_FILES src/Makefile" ;; "utils/Makefile") CONFIG_FILES="$CONFIG_FILES utils/Makefile" ;; "bash/Makefile") CONFIG_FILES="$CONFIG_FILES bash/Makefile" ;; "doc/Makefile") CONFIG_FILES="$CONFIG_FILES doc/Makefile" ;; "po/Makefile.in") CONFIG_FILES="$CONFIG_FILES po/Makefile.in" ;; "torture/Makefile") CONFIG_FILES="$CONFIG_FILES torture/Makefile" ;; "torture/utils/Makefile") CONFIG_FILES="$CONFIG_FILES torture/utils/Makefile" ;; "torture/utils/config.sh") CONFIG_FILES="$CONFIG_FILES torture/utils/config.sh" ;; "man/Makefile") CONFIG_FILES="$CONFIG_FILES man/Makefile" ;; "etc/Makefile") CONFIG_FILES="$CONFIG_FILES etc/Makefile" ;; *) as_fn_error $? "invalid argument: \`$ac_config_target'" "$LINENO" 5;; esac done # If the user did not use the arguments to specify the items to instantiate, # then the envvar interface is used. Set only those that are not. # We use the long form for the default assignment because of an extremely # bizarre bug on SunOS 4.1.3. if $ac_need_defaults; then test ${CONFIG_FILES+y} || CONFIG_FILES=$config_files test ${CONFIG_HEADERS+y} || CONFIG_HEADERS=$config_headers test ${CONFIG_LINKS+y} || CONFIG_LINKS=$config_links 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 2>/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 ' <conf$$subs.awk | sed ' /^[^""]/{ N s/\n// } ' >>$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" # Set up the scripts for CONFIG_HEADERS section. # No need to generate them if there are no CONFIG_HEADERS. # This happens for instance with `./config.status Makefile'. if test -n "$CONFIG_HEADERS"; then cat >"$ac_tmp/defines.awk" <<\_ACAWK || BEGIN { _ACEOF # Transform confdefs.h into an awk script `defines.awk', embedded as # here-document in config.status, that substitutes the proper values into # config.h.in to produce config.h. # Create a delimiter string that does not exist in confdefs.h, to ease # handling of long lines. ac_delim='%!_!# ' for ac_last_try in false false :; do ac_tt=`sed -n "/$ac_delim/p" confdefs.h` if test -z "$ac_tt"; then break elif $ac_last_try; then as_fn_error $? "could not make $CONFIG_HEADERS" "$LINENO" 5 else ac_delim="$ac_delim!$ac_delim _$ac_delim!! " fi done # For the awk script, D is an array of macro values keyed by name, # likewise P contains macro parameters if any. Preserve backslash # newline sequences. ac_word_re=[_$as_cr_Letters][_$as_cr_alnum]* sed -n ' s/.\{148\}/&'"$ac_delim"'/g t rset :rset s/^[ ]*#[ ]*define[ ][ ]*/ / t def d :def s/\\$// t bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3"/p s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2"/p d :bsnl s/["\\]/\\&/g s/^ \('"$ac_word_re"'\)\(([^()]*)\)[ ]*\(.*\)/P["\1"]="\2"\ D["\1"]=" \3\\\\\\n"\\/p t cont s/^ \('"$ac_word_re"'\)[ ]*\(.*\)/D["\1"]=" \2\\\\\\n"\\/p t cont d :cont n s/.\{148\}/&'"$ac_delim"'/g t clear :clear s/\\$// t bsnlc s/["\\]/\\&/g; s/^/"/; s/$/"/p d :bsnlc s/["\\]/\\&/g; s/^/"/; s/$/\\\\\\n"\\/p b cont ' <confdefs.h | sed ' s/'"$ac_delim"'/"\\\ "/g' >>$CONFIG_STATUS || ac_write_fail=1 cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1 for (key in D) D_is_set[key] = 1 FS = "" } /^[\t ]*#[\t ]*(define|undef)[\t ]+$ac_word_re([\t (]|\$)/ { line = \$ 0 split(line, arg, " ") if (arg[1] == "#") { defundef = arg[2] mac1 = arg[3] } else { defundef = substr(arg[1], 2) mac1 = arg[2] } split(mac1, mac2, "(") #) macro = mac2[1] prefix = substr(line, 1, index(line, defundef) - 1) if (D_is_set[macro]) { # Preserve the white space surrounding the "#". print prefix "define", macro P[macro] D[macro] next } else { # Replace #undef with comments. This is necessary, for example, # in the case of _POSIX_SOURCE, which is predefined and required # on some systems where configure will not decide to define it. if (defundef == "undef") { print "/*", prefix defundef, macro, "*/" next } } } { print } _ACAWK _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 as_fn_error $? "could not setup config headers machinery" "$LINENO" 5 fi # test -n "$CONFIG_HEADERS" eval set X " :F $CONFIG_FILES :H $CONFIG_HEADERS :L $CONFIG_LINKS :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 # case $INSTALL in [\\/$]* | ?:[\\/]* ) ac_INSTALL=$INSTALL ;; *) ac_INSTALL=$ac_top_build_prefix$INSTALL ;; esac ac_MKDIR_P=$MKDIR_P case $MKDIR_P in [\\/$]* | ?:[\\/]* ) ;; */*) ac_MKDIR_P=$ac_top_build_prefix$MKDIR_P ;; esac _ACEOF cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1 # If the template does not know about datarootdir, expand it. # FIXME: This hack should be removed a few years after 2.60. ac_datarootdir_hack=; ac_datarootdir_seen= ac_sed_dataroot=' /datarootdir/ { p q } /@datadir@/p /@docdir@/p /@infodir@/p /@localedir@/p /@mandir@/p' case `eval "sed -n \"\$ac_sed_dataroot\" $ac_file_inputs"` in *datarootdir*) ac_datarootdir_seen=yes;; *@datadir@*|*@docdir@*|*@infodir@*|*@localedir@*|*@mandir@*) { 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 s&@INSTALL@&$ac_INSTALL&;t t s&@MKDIR_P@&$ac_MKDIR_P&;t t $ac_datarootdir_hack " eval sed \"\$ac_sed_extra\" "$ac_file_inputs" | $AWK -f "$ac_tmp/subs.awk" \ >$ac_tmp/out || as_fn_error $? "could not create $ac_file" "$LINENO" 5 test -z "$ac_datarootdir_hack$ac_datarootdir_seen" && { ac_out=`sed -n '/\${datarootdir}/p' "$ac_tmp/out"`; test -n "$ac_out"; } && { ac_out=`sed -n '/^[ ]*datarootdir[ ]*:*=/p' \ "$ac_tmp/out"`; test -z "$ac_out"; } && { 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 ;; :H) # # CONFIG_HEADER # if test x"$ac_file" != x-; then { printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" } >"$ac_tmp/config.h" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 if diff "$ac_file" "$ac_tmp/config.h" >/dev/null 2>&1; then { printf "%s\n" "$as_me:${as_lineno-$LINENO}: $ac_file is unchanged" >&5 printf "%s\n" "$as_me: $ac_file is unchanged" >&6;} else rm -f "$ac_file" mv "$ac_tmp/config.h" "$ac_file" \ || as_fn_error $? "could not create $ac_file" "$LINENO" 5 fi else printf "%s\n" "/* $configure_input */" >&1 \ && eval '$AWK -f "$ac_tmp/defines.awk"' "$ac_file_inputs" \ || as_fn_error $? "could not create -" "$LINENO" 5 fi # Compute "$ac_file"'s index in $config_headers. _am_arg="$ac_file" _am_stamp_count=1 for _am_header in $config_headers :; do case $_am_header in $_am_arg | $_am_arg:* ) break ;; * ) _am_stamp_count=`expr $_am_stamp_count + 1` ;; esac done echo "timestamp for $_am_arg" >`$as_dirname -- "$_am_arg" || $as_expr X"$_am_arg" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$_am_arg" : 'X\(//\)[^/]' \| \ X"$_am_arg" : 'X\(//\)$' \| \ X"$_am_arg" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$_am_arg" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'`/stamp-h$_am_stamp_count ;; :L) # # CONFIG_LINK # if test "$ac_source" = "$ac_file" && test "$srcdir" = '.'; then : else # Prefer the file from the source tree if names are identical. if test "$ac_source" = "$ac_file" || test ! -r "$ac_source"; then ac_source=$srcdir/$ac_source fi { printf "%s\n" "$as_me:${as_lineno-$LINENO}: linking $ac_source to $ac_file" >&5 printf "%s\n" "$as_me: linking $ac_source to $ac_file" >&6;} if test ! -r "$ac_source"; then as_fn_error $? "$ac_source: file not found" "$LINENO" 5 fi rm -f "$ac_file" # Try a relative symlink, then a hard link, then a copy. case $ac_source in [\\/$]* | ?:[\\/]* ) ac_rel_source=$ac_source ;; *) ac_rel_source=$ac_top_build_prefix$ac_source ;; esac ln -s "$ac_rel_source" "$ac_file" 2>/dev/null || ln "$ac_source" "$ac_file" 2>/dev/null || cp -p "$ac_source" "$ac_file" || as_fn_error $? "cannot link or copy $ac_source to $ac_file" "$LINENO" 5 fi ;; :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 "depfiles":C) test x"$AMDEP_TRUE" != x"" || { # Older Autoconf quotes --file arguments for eval, but not when files # are listed without --file. Let's play safe and only enable the eval # if we detect the quoting. # TODO: see whether this extra hack can be removed once we start # requiring Autoconf 2.70 or later. case $CONFIG_FILES in #( *\'*) : eval set x "$CONFIG_FILES" ;; #( *) : set x $CONFIG_FILES ;; #( *) : ;; esac shift # Used to flag and report bootstrapping failures. am_rc=0 for am_mf do # Strip MF so we end up with the name of the file. am_mf=`printf "%s\n" "$am_mf" | sed -e 's/:.*$//'` # Check whether this is an Automake generated Makefile which includes # dependency-tracking related rules and includes. # Grep'ing the whole file directly is not great: AIX grep has a line # limit of 2048, but all sed's we know have understand at least 4000. sed -n 's,^am--depfiles:.*,X,p' "$am_mf" | grep X >/dev/null 2>&1 \ || continue am_dirpart=`$as_dirname -- "$am_mf" || $as_expr X"$am_mf" : 'X\(.*[^/]\)//*[^/][^/]*/*$' \| \ X"$am_mf" : 'X\(//\)[^/]' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X"$am_mf" | sed '/^X\(.*[^/]\)\/\/*[^/][^/]*\/*$/{ s//\1/ q } /^X\(\/\/\)[^/].*/{ s//\1/ q } /^X\(\/\/\)$/{ s//\1/ q } /^X\(\/\).*/{ s//\1/ q } s/.*/./; q'` am_filepart=`$as_basename -- "$am_mf" || $as_expr X/"$am_mf" : '.*/\([^/][^/]*\)/*$' \| \ X"$am_mf" : 'X\(//\)$' \| \ X"$am_mf" : 'X\(/\)' \| . 2>/dev/null || printf "%s\n" X/"$am_mf" | sed '/^.*\/\([^/][^/]*\)\/*$/{ s//\1/ q } /^X\/\(\/\/\)$/{ s//\1/ q } /^X\/\(\/\).*/{ s//\1/ q } s/.*/./; q'` { echo "$as_me:$LINENO: cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles" >&5 (cd "$am_dirpart" \ && sed -e '/# am--include-marker/d' "$am_filepart" \ | $MAKE -f - am--depfiles) >&5 2>&5 ac_status=$? echo "$as_me:$LINENO: \$? = $ac_status" >&5 (exit $ac_status); } || am_rc=$? done if test $am_rc -ne 0; then { { 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 $? "Something went wrong bootstrapping makefile fragments for automatic dependency tracking. If GNU make was not used, consider re-running the configure script with MAKE=\"gmake\" (or whatever is necessary). You can also try re-running configure with the '--disable-dependency-tracking' option to at least be able to build the package (albeit without support for automatic dependency tracking). See \`config.log' for more details" "$LINENO" 5; } fi { am_dirpart=; unset am_dirpart;} { am_filepart=; unset am_filepart;} { am_mf=; unset am_mf;} { am_rc=; unset am_rc;} rm -f conftest-deps.mk } ;; "libtool":C) # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. # The names of the tagged configurations supported by this script. available_tags='' # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG # Which release of libtool.m4 was used? macro_version=$macro_version macro_revision=$macro_revision # Whether or not to build shared libraries. build_libtool_libs=$enable_shared # Whether or not to build static libraries. build_old_libs=$enable_static # What type of objects to build. pic_mode=$pic_mode # Whether or not to optimize for fast installation. fast_install=$enable_fast_install # Shared archive member basename,for filename based shared library versioning on AIX. shared_archive_member_spec=$shared_archive_member_spec # Shell to use when invoking shell scripts. SHELL=$lt_SHELL # An echo program that protects backslashes. ECHO=$lt_ECHO # The PATH separator for the build system. PATH_SEPARATOR=$lt_PATH_SEPARATOR # The host system. host_alias=$host_alias host=$host host_os=$host_os # The build system. build_alias=$build_alias build=$build build_os=$build_os # A sed program that does not truncate output. SED=$lt_SED # Sed that helps us avoid accidentally triggering echo(1) options like -n. Xsed="\$SED -e 1s/^X//" # A grep program that handles long lines. GREP=$lt_GREP # An ERE matcher. EGREP=$lt_EGREP # A literal string matcher. FGREP=$lt_FGREP # A BSD- or MS-compatible name lister. NM=$lt_NM # Whether we need soft or hard links. LN_S=$lt_LN_S # What is the maximum length of a command? max_cmd_len=$max_cmd_len # Object file suffix (normally "o"). objext=$ac_objext # Executable file suffix (normally ""). exeext=$exeext # whether the shell understands "unset". lt_unset=$lt_unset # turn spaces into newlines. SP2NL=$lt_lt_SP2NL # turn newlines into spaces. NL2SP=$lt_lt_NL2SP # convert \$build file names to \$host format. to_host_file_cmd=$lt_cv_to_host_file_cmd # convert \$build files to toolchain format. to_tool_file_cmd=$lt_cv_to_tool_file_cmd # An object symbol dumper. OBJDUMP=$lt_OBJDUMP # Method to check whether dependent libraries are shared objects. deplibs_check_method=$lt_deplibs_check_method # Command to use when deplibs_check_method = "file_magic". file_magic_cmd=$lt_file_magic_cmd # How to find potential files when deplibs_check_method = "file_magic". file_magic_glob=$lt_file_magic_glob # Find potential files using nocaseglob when deplibs_check_method = "file_magic". want_nocaseglob=$lt_want_nocaseglob # DLL creation program. DLLTOOL=$lt_DLLTOOL # Command to associate shared and link libraries. sharedlib_from_linklib_cmd=$lt_sharedlib_from_linklib_cmd # The archiver. AR=$lt_AR # Flags to create an archive. AR_FLAGS=$lt_AR_FLAGS # How to feed a file listing to the archiver. archiver_list_spec=$lt_archiver_list_spec # A symbol stripping program. STRIP=$lt_STRIP # Commands used to install an old-style archive. RANLIB=$lt_RANLIB old_postinstall_cmds=$lt_old_postinstall_cmds old_postuninstall_cmds=$lt_old_postuninstall_cmds # Whether to use a lock for old archive extraction. lock_old_archive_extraction=$lock_old_archive_extraction # A C compiler. LTCC=$lt_CC # LTCC compiler flags. LTCFLAGS=$lt_CFLAGS # Take the output of nm and produce a listing of raw symbols and C names. global_symbol_pipe=$lt_lt_cv_sys_global_symbol_pipe # Transform the output of nm in a proper C declaration. global_symbol_to_cdecl=$lt_lt_cv_sys_global_symbol_to_cdecl # Transform the output of nm into a list of symbols to manually relocate. global_symbol_to_import=$lt_lt_cv_sys_global_symbol_to_import # Transform the output of nm in a C name address pair. global_symbol_to_c_name_address=$lt_lt_cv_sys_global_symbol_to_c_name_address # Transform the output of nm in a C name address pair when lib prefix is needed. global_symbol_to_c_name_address_lib_prefix=$lt_lt_cv_sys_global_symbol_to_c_name_address_lib_prefix # The name lister interface. nm_interface=$lt_lt_cv_nm_interface # Specify filename containing input files for \$NM. nm_file_list_spec=$lt_nm_file_list_spec # The root where to search for dependent libraries,and where our libraries should be installed. lt_sysroot=$lt_sysroot # Command to truncate a binary pipe. lt_truncate_bin=$lt_lt_cv_truncate_bin # The name of the directory that contains temporary libtool files. objdir=$objdir # Used to examine libraries when file_magic_cmd begins with "file". MAGIC_CMD=$MAGIC_CMD # Must we lock files when doing compilation? need_locks=$lt_need_locks # Manifest tool. MANIFEST_TOOL=$lt_MANIFEST_TOOL # Tool to manipulate archived DWARF debug symbol files on Mac OS X. DSYMUTIL=$lt_DSYMUTIL # Tool to change global to local symbols on Mac OS X. NMEDIT=$lt_NMEDIT # Tool to manipulate fat objects and archives on Mac OS X. LIPO=$lt_LIPO # ldd/readelf like tool for Mach-O binaries on Mac OS X. OTOOL=$lt_OTOOL # ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4. OTOOL64=$lt_OTOOL64 # Old archive suffix (normally "a"). libext=$libext # Shared library suffix (normally ".so"). shrext_cmds=$lt_shrext_cmds # The commands to extract the exported symbol list from a shared archive. extract_expsyms_cmds=$lt_extract_expsyms_cmds # Variables whose values should be saved in libtool wrapper scripts and # restored at link time. variables_saved_for_relink=$lt_variables_saved_for_relink # Do we need the "lib" prefix for modules? need_lib_prefix=$need_lib_prefix # Do we need a version for libraries? need_version=$need_version # Library versioning type. version_type=$version_type # Shared library runtime path variable. runpath_var=$runpath_var # Shared library path variable. shlibpath_var=$shlibpath_var # Is shlibpath searched before the hard-coded library search path? shlibpath_overrides_runpath=$shlibpath_overrides_runpath # Format of library name prefix. libname_spec=$lt_libname_spec # List of archive names. First name is the real one, the rest are links. # The last name is the one that the linker finds with -lNAME library_names_spec=$lt_library_names_spec # The coded name of the library, if different from the real name. soname_spec=$lt_soname_spec # Permission mode override for installation of shared libraries. install_override_mode=$lt_install_override_mode # Command to use after installation of a shared archive. postinstall_cmds=$lt_postinstall_cmds # Command to use after uninstallation of a shared archive. postuninstall_cmds=$lt_postuninstall_cmds # Commands used to finish a libtool library installation in a directory. finish_cmds=$lt_finish_cmds # As "finish_cmds", except a single script fragment to be evaled but # not shown. finish_eval=$lt_finish_eval # Whether we should hardcode library paths into libraries. hardcode_into_libs=$hardcode_into_libs # Compile-time system search path for libraries. sys_lib_search_path_spec=$lt_sys_lib_search_path_spec # Detected run-time system search path for libraries. sys_lib_dlsearch_path_spec=$lt_configure_time_dlsearch_path # Explicit LT_SYS_LIBRARY_PATH set during ./configure time. configure_time_lt_sys_library_path=$lt_configure_time_lt_sys_library_path # Whether dlopen is supported. dlopen_support=$enable_dlopen # Whether dlopen of programs is supported. dlopen_self=$enable_dlopen_self # Whether dlopen of statically linked programs is supported. dlopen_self_static=$enable_dlopen_self_static # Commands to strip libraries. old_striplib=$lt_old_striplib striplib=$lt_striplib # The linker used to build libraries. LD=$lt_LD # How to create reloadable object files. reload_flag=$lt_reload_flag reload_cmds=$lt_reload_cmds # Commands used to build an old-style archive. old_archive_cmds=$lt_old_archive_cmds # A language specific compiler. CC=$lt_compiler # Is the compiler the GNU compiler? with_gcc=$GCC # Compiler flag to turn off builtin functions. no_builtin_flag=$lt_lt_prog_compiler_no_builtin_flag # Additional compiler flags for building library objects. pic_flag=$lt_lt_prog_compiler_pic # How to pass a linker flag through the compiler. wl=$lt_lt_prog_compiler_wl # Compiler flag to prevent dynamic linking. link_static_flag=$lt_lt_prog_compiler_static # Does compiler simultaneously support -c and -o options? compiler_c_o=$lt_lt_cv_prog_compiler_c_o # Whether or not to add -lc for building shared libraries. build_libtool_need_lc=$archive_cmds_need_lc # Whether or not to disallow shared libs when runtime libs are static. allow_libtool_libs_with_static_runtimes=$enable_shared_with_static_runtimes # Compiler flag to allow reflexive dlopens. export_dynamic_flag_spec=$lt_export_dynamic_flag_spec # Compiler flag to generate shared objects directly from archives. whole_archive_flag_spec=$lt_whole_archive_flag_spec # Whether the compiler copes with passing no objects directly. compiler_needs_object=$lt_compiler_needs_object # Create an old-style archive from a shared archive. old_archive_from_new_cmds=$lt_old_archive_from_new_cmds # Create a temporary old-style archive to link instead of a shared archive. old_archive_from_expsyms_cmds=$lt_old_archive_from_expsyms_cmds # Commands used to build a shared archive. archive_cmds=$lt_archive_cmds archive_expsym_cmds=$lt_archive_expsym_cmds # Commands used to build a loadable module if different from building # a shared archive. module_cmds=$lt_module_cmds module_expsym_cmds=$lt_module_expsym_cmds # Whether we are building with GNU ld or not. with_gnu_ld=$lt_with_gnu_ld # Flag that allows shared libraries with undefined symbols to be built. allow_undefined_flag=$lt_allow_undefined_flag # Flag that enforces no undefined symbols. no_undefined_flag=$lt_no_undefined_flag # Flag to hardcode \$libdir into a binary during linking. # This must work even if \$libdir does not exist hardcode_libdir_flag_spec=$lt_hardcode_libdir_flag_spec # Whether we need a single "-rpath" flag with a separated argument. hardcode_libdir_separator=$lt_hardcode_libdir_separator # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary. hardcode_direct=$hardcode_direct # Set to "yes" if using DIR/libNAME\$shared_ext during linking hardcodes # DIR into the resulting binary and the resulting library dependency is # "absolute",i.e impossible to change by setting \$shlibpath_var if the # library is relocated. hardcode_direct_absolute=$hardcode_direct_absolute # Set to "yes" if using the -LDIR flag during linking hardcodes DIR # into the resulting binary. hardcode_minus_L=$hardcode_minus_L # Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR # into the resulting binary. hardcode_shlibpath_var=$hardcode_shlibpath_var # Set to "yes" if building a shared library automatically hardcodes DIR # into the library and all subsequent libraries and executables linked # against it. hardcode_automatic=$hardcode_automatic # Set to yes if linker adds runtime paths of dependent libraries # to runtime path list. inherit_rpath=$inherit_rpath # Whether libtool must link a program against all its dependency libraries. link_all_deplibs=$link_all_deplibs # Set to "yes" if exported symbols are required. always_export_symbols=$always_export_symbols # The commands to list exported symbols. export_symbols_cmds=$lt_export_symbols_cmds # Symbols that should not be listed in the preloaded symbols. exclude_expsyms=$lt_exclude_expsyms # Symbols that must always be exported. include_expsyms=$lt_include_expsyms # Commands necessary for linking programs (against libraries) with templates. prelink_cmds=$lt_prelink_cmds # Commands necessary for finishing linking programs. postlink_cmds=$lt_postlink_cmds # Specify filename containing input files. file_list_spec=$lt_file_list_spec # How to hardcode a shared library path into an executable. hardcode_action=$hardcode_action # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE # func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x$2 in x) ;; *:) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'` \$$1\" ;; x:*) eval $1=\"\$$1 `$ECHO $2 | $SED 's/:/ /g'`\" ;; *::*) eval $1=\"\$$1\ `$ECHO $2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval $1=\"`$ECHO $2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \$$1\" ;; *) eval $1=\"`$ECHO $2 | $SED 's/:/ /g'`\" ;; esac } # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in $*""; do case $cc_temp in compile | *[\\/]compile | ccache | *[\\/]ccache ) ;; distcc | *[\\/]distcc | purify | *[\\/]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac ltmain=$ac_aux_dir/ltmain.sh # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ;; "po-directories":C) for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done ;; esac done # for ac_tag as_fn_exit 0 _ACEOF ac_clean_files=$ac_clean_files_save test $ac_write_fail = 0 || as_fn_error $? "write failure creating $CONFIG_STATUS" "$LINENO" 5 # configure is writing to config.log, and then calls config.status. # config.status does its own redirection, appending to config.log. # Unfortunately, on DOS this fails, as config.log is still kept open # by configure, so config.status won't be able to write to it; its # output is simply discarded. So we exec the FD to /dev/null, # effectively closing config.log, so it can be properly (re)opened and # appended to by config.status. When coming back to configure, we # need to make the FD available again. if test "$no_create" != yes; then ac_cs_success=: ac_config_status_args= test "$silent" = yes && ac_config_status_args="$ac_config_status_args --quiet" exec 5>/dev/null $SHELL $CONFIG_STATUS $ac_config_status_args || ac_cs_success=false exec 5>>config.log # Use ||, not &&, to avoid exiting from the if with $? = 1, which # would make configure fail if this is the last instruction. $ac_cs_success || as_fn_exit 1 fi 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 if test "x$have_check" = "xno"; then echo "warning: libcheck was not found in the system." echo "warning: unit tests wont be compiled and executed upon make check." fi if test "x$have_mdb" = "xno"; then echo "warning: libmdb was not found in the system." echo "warning: the mdb2rec utility won't get built." fi if test "x$have_glib" = "xno"; then echo "warning: glib was not found in the system." echo "warning: the mdb2rec utility won't get built." fi if test "x$crypt_support" = "xno"; then echo "warning: building recutils without encryption support." fi if test "x$have_uuid" = "xno"; then echo "warning: building recutils without support for uuid types." fi if test "x$bash_headers_available" = "xno" || test "x$bash_builtins_enabled" = "xno"; then echo "warning: not building the recutils bash builtins." fi ���������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/������������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577413�010517� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/parse-datetime.m4�������������������������������������������������������������������0000644�0000000�0000000�00000004241�14226564452�013605� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# parse-datetime.m4 serial 27 dnl Copyright (C) 2002-2006, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Define HAVE_COMPOUND_LITERALS if the C compiler supports compound literals dnl as in ISO C99. dnl Note that compound literals such as (struct s) { 3, 4 } can be used for dnl initialization of stack-allocated variables, but are not constant dnl expressions and therefore cannot be used as initializer for global or dnl static variables (even though gcc supports this in pre-C99 mode). AC_DEFUN([gl_C_COMPOUND_LITERALS], [ AC_CACHE_CHECK([for compound literals], [gl_cv_compound_literals], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[struct s { int i, j; };]], [[struct s t = (struct s) { 3, 4 }; if (t.i != 0) return 0;]]) ], [gl_cv_compound_literals=yes], [gl_cv_compound_literals=no]) ]) if test $gl_cv_compound_literals = yes; then AC_DEFINE([HAVE_COMPOUND_LITERALS], [1], [Define if you have compound literals.]) fi ]) AC_DEFUN([gl_PARSE_DATETIME], [ dnl parse-datetime.c is generated from parse-datetime.y. It requires bison, dnl because parse-datetime.y uses bison specific features. It requires at dnl least bison-2.4 for %define api.pure. dnl bison is only needed for the maintainer (who touches parse-datetime.y). dnl But in order to avoid separate Makefiles or --enable-maintainer-mode, dnl we put the rule in general Makefile. Now, some people carelessly touch dnl the files or have a broken "make" program, hence the parse-datetime.c dnl rule will sometimes fire. To avoid an error, defines PARSE_DATETIME_BISON dnl to ":" if it is not present or too old. gl_PROG_BISON([PARSE_DATETIME_BISON], [2.4]) dnl Prerequisites of lib/parse-datetime.h. AC_REQUIRE([gl_TIMESPEC]) AC_REQUIRE([AC_C_RESTRICT]) dnl Prerequisites of lib/parse-datetime.y. AC_REQUIRE([gl_BISON]) AC_REQUIRE([gl_C_COMPOUND_LITERALS]) AC_STRUCT_TIMEZONE AC_REQUIRE([gl_CLOCK_TIME]) AC_REQUIRE([gl_TM_GMTOFF]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/xalloc.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000000472�14226564453�012166� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xalloc.m4 serial 18 dnl Copyright (C) 2002-2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XALLOC], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fseterr.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000000530�14226564452�012350� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fseterr.m4 serial 1 dnl Copyright (C) 2012-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FSETERR], [ AC_CHECK_FUNCS_ONCE([__fseterr]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/langinfo_h.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000011234�14226564452�013005� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# langinfo_h.m4 serial 12 dnl Copyright (C) 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_LANGINFO_H], [ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) dnl Persuade glibc-2.0.6 <langinfo.h> to define CODESET. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl <langinfo.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([langinfo.h]) dnl Determine whether <langinfo.h> exists. It is missing on mingw and BeOS. HAVE_LANGINFO_CODESET=0 HAVE_LANGINFO_T_FMT_AMPM=0 HAVE_LANGINFO_ALTMON=0 HAVE_LANGINFO_ERA=0 HAVE_LANGINFO_YESEXPR=0 AC_CHECK_HEADERS_ONCE([langinfo.h]) if test $ac_cv_header_langinfo_h = yes; then HAVE_LANGINFO_H=1 dnl Determine what <langinfo.h> defines. dnl CODESET is missing on OpenBSD 3.8. dnl ERA etc. are missing on OpenBSD 6.7. dnl T_FMT_AMPM and YESEXPR, NOEXPR are missing on IRIX 5.3. dnl ALTMON_* are missing on glibc 2.26 and many other systems. AC_CACHE_CHECK([whether langinfo.h defines CODESET], [gl_cv_header_langinfo_codeset], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = CODESET; ]])], [gl_cv_header_langinfo_codeset=yes], [gl_cv_header_langinfo_codeset=no]) ]) if test $gl_cv_header_langinfo_codeset = yes; then HAVE_LANGINFO_CODESET=1 fi AC_CACHE_CHECK([whether langinfo.h defines T_FMT_AMPM], [gl_cv_header_langinfo_t_fmt_ampm], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = T_FMT_AMPM; ]])], [gl_cv_header_langinfo_t_fmt_ampm=yes], [gl_cv_header_langinfo_t_fmt_ampm=no]) ]) if test $gl_cv_header_langinfo_t_fmt_ampm = yes; then HAVE_LANGINFO_T_FMT_AMPM=1 fi AC_CACHE_CHECK([whether langinfo.h defines ALTMON_1], [gl_cv_header_langinfo_altmon], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = ALTMON_1; ]])], [gl_cv_header_langinfo_altmon=yes], [gl_cv_header_langinfo_altmon=no]) ]) if test $gl_cv_header_langinfo_altmon = yes; then HAVE_LANGINFO_ALTMON=1 fi AC_CACHE_CHECK([whether langinfo.h defines ERA], [gl_cv_header_langinfo_era], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = ERA; ]])], [gl_cv_header_langinfo_era=yes], [gl_cv_header_langinfo_era=no]) ]) if test $gl_cv_header_langinfo_era = yes; then HAVE_LANGINFO_ERA=1 fi AC_CACHE_CHECK([whether langinfo.h defines YESEXPR], [gl_cv_header_langinfo_yesexpr], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> int a = YESEXPR; ]])], [gl_cv_header_langinfo_yesexpr=yes], [gl_cv_header_langinfo_yesexpr=no]) ]) if test $gl_cv_header_langinfo_yesexpr = yes; then HAVE_LANGINFO_YESEXPR=1 fi else HAVE_LANGINFO_H=0 fi AC_SUBST([HAVE_LANGINFO_H]) AC_SUBST([HAVE_LANGINFO_CODESET]) AC_SUBST([HAVE_LANGINFO_T_FMT_AMPM]) AC_SUBST([HAVE_LANGINFO_ALTMON]) AC_SUBST([HAVE_LANGINFO_ERA]) AC_SUBST([HAVE_LANGINFO_YESEXPR]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <langinfo.h> ]], [nl_langinfo]) ]) # gl_LANGINFO_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_LANGINFO_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_LANGINFO_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_LANGINFO_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_LANGINFO_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NL_LANGINFO]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_LANGINFO_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) ]) AC_DEFUN([gl_LANGINFO_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_NL_LANGINFO=1; AC_SUBST([HAVE_NL_LANGINFO]) REPLACE_NL_LANGINFO=0; AC_SUBST([REPLACE_NL_LANGINFO]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/gettimeofday.m4���������������������������������������������������������������������0000644�0000000�0000000�00000005302�14226564452�013361� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 29 # Copyright (C) 2001-2003, 2005, 2007, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. AC_DEFUN([gl_FUNC_GETTIMEOFDAY], [ AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_TIME_H]) AC_CHECK_FUNCS_ONCE([gettimeofday]) gl_gettimeofday_timezone=void if test $ac_cv_func_gettimeofday != yes; then HAVE_GETTIMEOFDAY=0 else AC_CACHE_CHECK([for gettimeofday with POSIX signature], [gl_cv_func_gettimeofday_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/time.h> struct timeval c; int gettimeofday (struct timeval *restrict, void *restrict); ]], [[/* glibc uses struct timezone * rather than the POSIX void * if _GNU_SOURCE is defined. However, since the only portable use of gettimeofday uses NULL as the second parameter, and since the glibc definition is actually more typesafe, it is not worth wrapping this to get a compliant signature. */ int (*f) (struct timeval *restrict, void *restrict) = gettimeofday; int x = f (&c, 0); return !(x | c.tv_sec | c.tv_usec); ]])], [gl_cv_func_gettimeofday_posix_signature=yes], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/time.h> int gettimeofday (struct timeval *restrict, struct timezone *restrict); ]])], [gl_cv_func_gettimeofday_posix_signature=almost], [gl_cv_func_gettimeofday_posix_signature=no])])]) if test $gl_cv_func_gettimeofday_posix_signature = almost; then gl_gettimeofday_timezone='struct timezone' elif test $gl_cv_func_gettimeofday_posix_signature != yes; then REPLACE_GETTIMEOFDAY=1 fi dnl If we override 'struct timeval', we also have to override gettimeofday. if test $REPLACE_STRUCT_TIMEVAL = 1; then REPLACE_GETTIMEOFDAY=1 fi dnl On mingw, the original gettimeofday has only a precision of 15.6 dnl milliseconds. So override it. case "$host_os" in mingw*) REPLACE_GETTIMEOFDAY=1 ;; esac fi AC_DEFINE_UNQUOTED([GETTIMEOFDAY_TIMEZONE], [$gl_gettimeofday_timezone], [Define this to 'void' or 'struct timezone' to match the system's declaration of the second argument to gettimeofday.]) ]) # Prerequisites of lib/gettimeofday.c. AC_DEFUN([gl_PREREQ_GETTIMEOFDAY], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/rename.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000024133�14226564452�012152� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 33 # Copyright (C) 2001, 2003, 2005-2006, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Volker Borchert. dnl Determine whether rename works for source file names with a trailing slash. dnl The rename from SunOS 4.1.1_U1 doesn't. dnl dnl If it doesn't, then define RENAME_TRAILING_SLASH_BUG and arrange dnl to compile the wrapper function. dnl AC_DEFUN([gl_FUNC_RENAME], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([lstat]) dnl Solaris 11.3, AIX 7.1 mistakenly allow rename("file","name/"). dnl NetBSD 1.6 mistakenly forbids rename("dir","name/"). dnl FreeBSD 7.2 mistakenly allows rename("file","link-to-file/"). dnl The Solaris bug can be worked around without stripping dnl trailing slash, while the NetBSD bug requires stripping; dnl the two conditions can be distinguished by whether hard dnl links are also broken. AC_CACHE_CHECK([whether rename honors trailing slash on destination], [gl_cv_func_rename_slash_dst_works], [rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk touch conftest.f && touch conftest.f1 && mkdir conftest.d1 || AC_MSG_ERROR([cannot create temporary files]) # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.f conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ # include <stdio.h> # include <stdlib.h> ]], [[int result = 0; if (rename ("conftest.f1", "conftest.f2/") == 0) result |= 1; if (rename ("conftest.d1", "conftest.d2/") != 0) result |= 2; #if HAVE_LSTAT if (rename ("conftest.f", "conftest.lnk/") == 0) result |= 4; #endif return result; ]])], [gl_cv_func_rename_slash_dst_works=yes], [gl_cv_func_rename_slash_dst_works=no], dnl When crosscompiling, assume rename is broken. [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rename_slash_dst_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_rename_slash_dst_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_rename_slash_dst_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rename_slash_dst_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.f conftest.f1 conftest.f2 conftest.d1 conftest.d2 conftest.lnk ]) case "$gl_cv_func_rename_slash_dst_works" in *yes) ;; *) REPLACE_RENAME=1 AC_DEFINE([RENAME_TRAILING_SLASH_DEST_BUG], [1], [Define if rename does not correctly handle slashes on the destination argument, such as on Solaris 11 or NetBSD 1.6.]) ;; esac dnl SunOS 4.1.1_U1 mistakenly forbids rename("dir/","name"). dnl Solaris 9 mistakenly allows rename("file/","name"). dnl FreeBSD 7.2 mistakenly allows rename("link-to-file/","name"). dnl These bugs require stripping trailing slash to avoid corrupting dnl symlinks with a trailing slash. AC_CACHE_CHECK([whether rename honors trailing slash on source], [gl_cv_func_rename_slash_src_works], [rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk touch conftest.f && touch conftest.f1 && mkdir conftest.d1 || AC_MSG_ERROR([cannot create temporary files]) # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.f conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ # include <stdio.h> # include <stdlib.h> ]], [[int result = 0; if (rename ("conftest.f1/", "conftest.d3") == 0) result |= 1; if (rename ("conftest.d1/", "conftest.d2") != 0) result |= 2; #if HAVE_LSTAT if (rename ("conftest.lnk/", "conftest.f") == 0) result |= 4; #endif return result; ]])], [gl_cv_func_rename_slash_src_works=yes], [gl_cv_func_rename_slash_src_works=no], dnl When crosscompiling, assume rename is broken. [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rename_slash_src_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_rename_slash_src_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_rename_slash_src_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rename_slash_src_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.f conftest.f1 conftest.d1 conftest.d2 conftest.d3 conftest.lnk ]) case "$gl_cv_func_rename_slash_src_works" in *yes) ;; *) REPLACE_RENAME=1 AC_DEFINE([RENAME_TRAILING_SLASH_SOURCE_BUG], [1], [Define if rename does not correctly handle slashes on the source argument, such as on Solaris 9 or cygwin 1.5.]) ;; esac dnl NetBSD 1.6 and cygwin 1.5.x mistakenly reduce hard link count dnl on rename("h1","h2"). dnl This bug requires stat'ting targets prior to attempting rename. AC_CHECK_FUNCS_ONCE([link]) AC_CACHE_CHECK([whether rename manages hard links correctly], [gl_cv_func_rename_link_works], [if test $ac_cv_func_link = yes; then if test $cross_compiling != yes; then rm -rf conftest.f conftest.f1 conftest.f2 if touch conftest.f conftest.f2 && ln conftest.f conftest.f1 && set x `ls -i conftest.f conftest.f1` && test "$2" = "$4"; then AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ # include <errno.h> # include <stdio.h> # include <stdlib.h> # include <unistd.h> ]GL_MDA_DEFINES], [[int result = 0; if (rename ("conftest.f", "conftest.f1")) result |= 1; if (unlink ("conftest.f1")) result |= 2; /* Allow either the POSIX-required behavior, where the previous rename kept conftest.f, or the (better) NetBSD behavior, where it removed conftest.f. */ if (rename ("conftest.f", "conftest.f") != 0 && errno != ENOENT) result |= 4; if (rename ("conftest.f1", "conftest.f1") == 0) result |= 8; if (rename ("conftest.f2", "conftest.f2") != 0) result |= 16; return result; ]])], [gl_cv_func_rename_link_works=yes], [gl_cv_func_rename_link_works=no], [dnl We don't get here. : ]) else gl_cv_func_rename_link_works="guessing no" fi rm -rf conftest.f conftest.f1 conftest.f2 else dnl When crosscompiling, assume rename is broken. case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rename_link_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_rename_link_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_rename_link_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rename_link_works="$gl_cross_guess_normal" ;; esac fi else gl_cv_func_rename_link_works=yes fi ]) case "$gl_cv_func_rename_link_works" in *yes) ;; *) REPLACE_RENAME=1 AC_DEFINE([RENAME_HARD_LINK_BUG], [1], [Define if rename fails to leave hard links alone, as on NetBSD 1.6 or Cygwin 1.5.]) ;; esac dnl Cygwin 1.5.x mistakenly allows rename("dir","file"). dnl mingw mistakenly forbids rename("dir1","dir2"). dnl These bugs require stripping trailing slash to avoid corrupting dnl symlinks with a trailing slash. AC_CACHE_CHECK([whether rename manages existing destinations correctly], [gl_cv_func_rename_dest_works], [rm -rf conftest.f conftest.d1 conftest.d2 touch conftest.f && mkdir conftest.d1 conftest.d2 || AC_MSG_ERROR([cannot create temporary files]) AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ # include <stdio.h> # include <stdlib.h> ]], [[int result = 0; if (rename ("conftest.d1", "conftest.d2") != 0) result |= 1; if (rename ("conftest.d2", "conftest.f") == 0) result |= 2; return result; ]])], [gl_cv_func_rename_dest_works=yes], [gl_cv_func_rename_dest_works=no], dnl When crosscompiling, assume rename is broken. [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rename_dest_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_rename_dest_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_rename_dest_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rename_dest_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.f conftest.d1 conftest.d2 ]) case "$gl_cv_func_rename_dest_works" in *yes) ;; *) REPLACE_RENAME=1 AC_DEFINE([RENAME_DEST_EXISTS_BUG], [1], [Define if rename does not work when the destination file exists, as on Cygwin 1.5 or Windows.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/00gnulib.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000007011�14226564451�012316� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# 00gnulib.m4 serial 8 dnl Copyright (C) 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This file must be named something that sorts before all other dnl gnulib-provided .m4 files. It is needed until the clang fix has dnl been included in Autoconf. # The following definitions arrange to use a compiler option # -Werror=implicit-function-declaration in AC_CHECK_DECL, when the # compiler is clang. Without it, clang implicitly declares "known" # library functions in C mode, but not in C++ mode, which would cause # Gnulib to omit a declaration and thus later produce an error in C++ # mode. As of clang 9.0, these "known" functions are identified through # LIBBUILTIN invocations in the LLVM source file # llvm/tools/clang/include/clang/Basic/Builtins.def. # It's not possible to AC_REQUIRE the extra tests from AC_CHECK_DECL, # because AC_CHECK_DECL, like other Autoconf built-ins, is not supposed # to AC_REQUIRE anything: some configure.ac files have their first # AC_CHECK_DECL executed conditionally. Therefore append the extra tests # to AC_PROG_CC. AC_DEFUN([gl_COMPILER_CLANG], [ dnl AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([whether the compiler is clang], [gl_cv_compiler_clang], [dnl Use _AC_COMPILE_IFELSE instead of AC_EGREP_CPP, to avoid error dnl "circular dependency of AC_LANG_COMPILER(C)" if AC_PROG_CC has dnl not yet been invoked. _AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #ifdef __clang__ barfbarf #endif ]],[[]]) ], [gl_cv_compiler_clang=no], [gl_cv_compiler_clang=yes]) ]) ]) AC_DEFUN([gl_COMPILER_PREPARE_CHECK_DECL], [ dnl AC_REQUIRE([AC_PROG_CC]) dnl AC_REQUIRE([gl_COMPILER_CLANG]) AC_CACHE_CHECK([for compiler option needed when checking for declarations], [gl_cv_compiler_check_decl_option], [if test $gl_cv_compiler_clang = yes; then dnl Test whether the compiler supports the option dnl '-Werror=implicit-function-declaration'. save_ac_compile="$ac_compile" ac_compile="$ac_compile -Werror=implicit-function-declaration" dnl Use _AC_COMPILE_IFELSE instead of AC_COMPILE_IFELSE, to avoid a dnl warning "AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS". _AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[]],[[]])], [gl_cv_compiler_check_decl_option='-Werror=implicit-function-declaration'], [gl_cv_compiler_check_decl_option=none]) ac_compile="$save_ac_compile" else gl_cv_compiler_check_decl_option=none fi ]) if test "x$gl_cv_compiler_check_decl_option" != xnone; then ac_compile_for_check_decl="$ac_compile $gl_cv_compiler_check_decl_option" else ac_compile_for_check_decl="$ac_compile" fi ]) dnl Redefine _AC_CHECK_DECL_BODY so that it references ac_compile_for_check_decl dnl instead of ac_compile. If, for whatever reason, the override of AC_PROG_CC dnl in zzgnulib.m4 is inactive, use the original ac_compile. m4_define([_AC_CHECK_DECL_BODY], [ ac_save_ac_compile="$ac_compile" if test -n "$ac_compile_for_check_decl"; then ac_compile="$ac_compile_for_check_decl" fi] m4_defn([_AC_CHECK_DECL_BODY])[ ac_compile="$ac_save_ac_compile" ]) # gl_00GNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file prior to all other gnulib .m4 files. AC_DEFUN([gl_00GNULIB]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/gnulib-common.m4��������������������������������������������������������������������0000644�0000000�0000000�00000121245�14226564452�013453� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gnulib-common.m4 serial 72 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.62]) # gl_COMMON # is expanded unconditionally through gnulib-tool magic. AC_DEFUN([gl_COMMON], [ dnl Use AC_REQUIRE here, so that the code is expanded once only. AC_REQUIRE([gl_00GNULIB]) AC_REQUIRE([gl_COMMON_BODY]) AC_REQUIRE([gl_ZZGNULIB]) ]) AC_DEFUN([gl_COMMON_BODY], [ AH_VERBATIM([_GL_GNUC_PREREQ], [/* True if the compiler says it groks GNU C version MAJOR.MINOR. */ #if defined __GNUC__ && defined __GNUC_MINOR__ # define _GL_GNUC_PREREQ(major, minor) \ ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__)) #else # define _GL_GNUC_PREREQ(major, minor) 0 #endif ]) AH_VERBATIM([_Noreturn], [/* The _Noreturn keyword of C11. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ && (_GL_GNUC_PREREQ (4, 7) \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))))) /* _Noreturn works as-is. */ # elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif ]) AH_VERBATIM([isoc99_inline], [/* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif]) AH_VERBATIM([attribute], [/* Attributes. */ #if (defined __has_attribute \ && (!defined __clang_minor__ \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))) # define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) #else # define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr # define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) # define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95) # define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_diagnose_if 0 # define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1) # define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0) # define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6) # define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0) # ifdef _ICC # define _GL_ATTR_may_alias 0 # else # define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3) # endif # define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) # define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) # define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) # define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) # define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) #endif #ifdef __has_c_attribute # define _GL_HAS_C_ATTRIBUTE(attr) __has_c_attribute (__##attr##__) #else # define _GL_HAS_C_ATTRIBUTE(attr) 0 #endif ]dnl There is no _GL_ATTRIBUTE_ALIGNED; use stdalign's _Alignas instead. [ /* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function is the size of the returned memory block. _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied by the Nth argument of the function is the size of the returned memory block. */ /* Applies to: function, pointer to function, function types. */ #if _GL_HAS_ATTRIBUTE (alloc_size) # define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) #else # define _GL_ATTRIBUTE_ALLOC_SIZE(args) #endif /* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the function and report an error if it cannot do so. */ /* Applies to: function. */ #if _GL_HAS_ATTRIBUTE (always_inline) # define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) #else # define _GL_ATTRIBUTE_ALWAYS_INLINE #endif /* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show in stack traces when debugging. The compiler should omit the function from stack traces. */ /* Applies to: function. */ #if _GL_HAS_ATTRIBUTE (artificial) # define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__)) #else # define _GL_ATTRIBUTE_ARTIFICIAL #endif /* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */ /* Applies to: functions. */ /* Avoid __attribute__ ((cold)) on MinGW; see thread starting at <https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>. Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */ #if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__ # ifndef __SUNPRO_C # define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__)) # else # define _GL_ATTRIBUTE_COLD __attribute__ ((cold)) # endif #else # define _GL_ATTRIBUTE_COLD #endif /* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate calls to the function with the same arguments. This attribute is safe for a function that neither depends on nor affects observable state, and always returns exactly once - e.g., does not loop forever, and does not call longjmp. (This attribute is stricter than _GL_ATTRIBUTE_PURE.) */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (const) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #if _GL_GNUC_PREREQ (11, 0) # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) #else # define _GL_ATTRIBUTE_DEALLOC(f, i) #endif /* If gnulib's <string.h> or <wchar.h> has already defined this macro, continue to use this earlier definition, since <stdlib.h> may not have been included yet. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) #endif /* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated. The compiler may warn if the entity is used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: namespace, class, template specialization. */ #if _GL_HAS_C_ATTRIBUTE (deprecated) # define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]] #elif _GL_HAS_ATTRIBUTE (deprecated) # define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) #else # define _GL_ATTRIBUTE_DEPRECATED #endif /* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and the function call is not optimized away. _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and the function call is not optimized away. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (error) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg))) #elif _GL_HAS_ATTRIBUTE (diagnose_if) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error"))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning"))) #else # define _GL_ATTRIBUTE_ERROR(msg) # define _GL_ATTRIBUTE_WARNING(msg) #endif /* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain visible to debuggers etc., even with '-fwhole-program'. */ /* Applies to: functions, variables. */ #if _GL_HAS_ATTRIBUTE (externally_visible) # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible)) #else # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE #endif /* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if the control flow falls through to the immediately following 'case' or 'default' label. The compiler should not warn in this case. */ /* Applies to: Empty statement (;), inside a 'switch' statement. */ /* Always expands to something. */ #if _GL_HAS_C_ATTRIBUTE (fallthrough) # define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]] #elif _GL_HAS_ATTRIBUTE (fallthrough) # define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__)) #else # define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0) #endif /* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) declares that the STRING-INDEXth function argument is a format string of style ARCHETYPE, which is one of: printf, gnu_printf scanf, gnu_scanf, strftime, gnu_strftime, strfmon, or the same thing prefixed and suffixed with '__'. If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK are suitable for the format string. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (format) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) #endif /* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other compilation unit, it executes code from that unit only by return or by exception handling. This declaration lets the compiler optimize that unit more aggressively. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (leaf) # define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__)) #else # define _GL_ATTRIBUTE_LEAF #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (malloc) # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) #else # define _GL_ATTRIBUTE_MALLOC #endif /* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the same storage as pointers to other types. Thus this declaration disables strict aliasing optimization. */ /* Applies to: types. */ /* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */ #if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C # define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__)) #else # define _GL_ATTRIBUTE_MAY_ALIAS #endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: class. */ /* In C++ and C2x, this is spelled [[__maybe_unused__]]. GCC's syntax is __attribute__ ((__unused__)). clang supports both syntaxes. */ #if _GL_HAS_C_ATTRIBUTE (maybe_unused) # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] #else # define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED #endif /* Alternative spelling of this macro, for convenience. */ #define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED /* Earlier spellings of this macro. */ #define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED /* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not discard the return value. The compiler may warn if the caller does not use the return value, unless the caller uses something like ignore_value. */ /* Applies to: function, enumeration, class. */ #if _GL_HAS_C_ATTRIBUTE (nodiscard) # define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] #elif _GL_HAS_ATTRIBUTE (warn_unused_result) # define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__)) #else # define _GL_ATTRIBUTE_NODISCARD #endif /* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the function. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (noinline) # define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__)) #else # define _GL_ATTRIBUTE_NOINLINE #endif /* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,... must not be NULL. _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be null. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (nonnull) # define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args)) #else # define _GL_ATTRIBUTE_NONNULL(args) #endif /* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is not meant to be NUL-terminated. */ /* Applies to: struct/union members and variables that are arrays of element type '[[un]signed] char'. */ #if _GL_HAS_ATTRIBUTE (nonstring) # define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__)) #else # define _GL_ATTRIBUTE_NONSTRING #endif /* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */ /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) #else # define _GL_ATTRIBUTE_NOTHROW #endif /* _GL_ATTRIBUTE_PACKED declares: For struct members: The member has the smallest possible alignment. For struct, union, class: All members have the smallest possible alignment, minimizing the memory required. */ /* Applies to: struct members, struct, union, in C++ also: class. */ #if _GL_HAS_ATTRIBUTE (packed) # define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__)) #else # define _GL_ATTRIBUTE_PACKED #endif /* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate calls to the function with the same arguments if observable state is not changed between calls. This attribute is safe for a function that does not affect observable state, and always returns exactly once. (This attribute is looser than _GL_ATTRIBUTE_CONST.) */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (pure) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE #endif /* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is a non-NULL pointer. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (returns_nonnull) # define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) #else # define _GL_ATTRIBUTE_RETURNS_NONNULL #endif /* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a trailing NULL argument. _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (sentinel) # define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos)) #else # define _GL_ATTRIBUTE_SENTINEL(pos) #endif /* A helper macro. Don't use it directly. */ #if _GL_HAS_ATTRIBUTE (unused) # define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) #else # define _GL_ATTRIBUTE_UNUSED #endif ]dnl There is no _GL_ATTRIBUTE_VISIBILITY; see m4/visibility.m4 instead. [ /* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the immediately preceding label is not used. The compiler should not warn if the label is not used. */ /* Applies to: label (both in C and C++). */ /* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;' syntax. But clang does. */ #if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__ # define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED #else # define _GL_UNUSED_LABEL #endif ]) AH_VERBATIM([async_safe], [/* The _GL_ASYNC_SAFE marker should be attached to functions that are signal handlers (for signals other than SIGABRT, SIGPIPE) or can be invoked from such signal handlers. Such functions have some restrictions: * All functions that it calls should be marked _GL_ASYNC_SAFE as well, or should be listed as async-signal-safe in POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04> section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in particular, are NOT async-signal-safe. * All memory locations (variables and struct fields) that these functions access must be marked 'volatile'. This holds for both read and write accesses. Otherwise the compiler might optimize away stores to and reads from such locations that occur in the program, depending on its data flow analysis. For example, when the program contains a loop that is intended to inspect a variable set from within a signal handler while (!signal_occurred) ; the compiler is allowed to transform this into an endless loop if the variable 'signal_occurred' is not declared 'volatile'. Additionally, recall that: * A signal handler should not modify errno (except if it is a handler for a fatal signal and ends by raising the same signal again, thus provoking the termination of the process). If it invokes a function that may clobber errno, it needs to save and restore the value of errno. */ #define _GL_ASYNC_SAFE ]) AH_VERBATIM([micro_optimizations], [/* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where n1 and n2 are expressions without side effects, that evaluate to real numbers (excluding NaN). It returns 1 if n1 > n2 0 if n1 == n2 -1 if n1 < n2 The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional jump with nearly all GCC versions up to GCC 10. This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many GCC versions up to GCC 9. The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9 avoids conditional jumps in all GCC versions >= 3.4. */ #define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2))) ]) dnl Hint which direction to take regarding cross-compilation guesses: dnl When a user installs a program on a platform they are not intimately dnl familiar with, --enable-cross-guesses=conservative is the appropriate dnl choice. It implements the "If we don't know, assume the worst" principle. dnl However, when an operating system developer (on a platform which is not dnl yet known to gnulib) builds packages for their platform, they want to dnl expose, not hide, possible platform bugs; in this case, dnl --enable-cross-guesses=risky is the appropriate choice. dnl Sets the variables dnl gl_cross_guess_normal (to be used when 'yes' is good and 'no' is bad), dnl gl_cross_guess_inverted (to be used when 'no' is good and 'yes' is bad). AC_ARG_ENABLE([cross-guesses], [AS_HELP_STRING([--enable-cross-guesses={conservative|risky}], [specify policy for cross-compilation guesses])], [if test "x$enableval" != xconservative && test "x$enableval" != xrisky; then AC_MSG_WARN([invalid argument supplied to --enable-cross-guesses]) enableval=conservative fi gl_cross_guesses="$enableval"], [gl_cross_guesses=conservative]) if test $gl_cross_guesses = risky; then gl_cross_guess_normal="guessing yes" gl_cross_guess_inverted="guessing no" else gl_cross_guess_normal="guessing no" gl_cross_guess_inverted="guessing yes" fi dnl Preparation for running test programs: dnl Tell glibc to write diagnostics from -D_FORTIFY_SOURCE=2 to stderr, not dnl to /dev/tty, so they can be redirected to log files. Such diagnostics dnl arise e.g., in the macros gl_PRINTF_DIRECTIVE_N, gl_SNPRINTF_DIRECTIVE_N. LIBC_FATAL_STDERR_=1 export LIBC_FATAL_STDERR_ ]) # gl_MODULE_INDICATOR_INIT_VARIABLE([variablename]) # gl_MODULE_INDICATOR_INIT_VARIABLE([variablename], [initialvalue]) # initializes the shell variable that indicates the presence of the given module # as a C preprocessor expression. AC_DEFUN([gl_MODULE_INDICATOR_INIT_VARIABLE], [ GL_MODULE_INDICATOR_PREFIX[]_[$1]=m4_if([$2], , [0], [$2]) AC_SUBST(GL_MODULE_INDICATOR_PREFIX[]_[$1]) ]) # gl_MODULE_INDICATOR_CONDITION # expands to a C preprocessor expression that evaluates to 1 or 0, depending # whether a gnulib module that has been requested shall be considered present # or not. m4_define([gl_MODULE_INDICATOR_CONDITION], [1]) # gl_MODULE_INDICATOR_SET_VARIABLE([modulename]) # sets the shell variable that indicates the presence of the given module to # a C preprocessor expression that will evaluate to 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE], [ gl_MODULE_INDICATOR_SET_VARIABLE_AUX( [GL_MODULE_INDICATOR_PREFIX[]_GNULIB_[]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___])], [gl_MODULE_INDICATOR_CONDITION]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX([variable]) # modifies the shell variable to include the gl_MODULE_INDICATOR_CONDITION. # The shell variable's value is a C preprocessor expression that evaluates # to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX], [ m4_if(m4_defn([gl_MODULE_INDICATOR_CONDITION]), [1], [ dnl Simplify the expression VALUE || 1 to 1. $1=1 ], [gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([$1], [gl_MODULE_INDICATOR_CONDITION])]) ]) # gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR([variable], [condition]) # modifies the shell variable to include the given condition. The shell # variable's value is a C preprocessor expression that evaluates to 0 or 1. AC_DEFUN([gl_MODULE_INDICATOR_SET_VARIABLE_AUX_OR], [ dnl Simplify the expression 1 || CONDITION to 1. if test "$[]$1" != 1; then dnl Simplify the expression 0 || CONDITION to CONDITION. if test "$[]$1" = 0; then $1=$2 else $1="($[]$1 || $2)" fi fi ]) # gl_MODULE_INDICATOR([modulename]) # defines a C macro indicating the presence of the given module # in a location where it can be used. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 0 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR], [ AC_DEFINE_UNQUOTED([GNULIB_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [gl_MODULE_INDICATOR_CONDITION], [Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module $1 shall be considered present.]) ]) # gl_MODULE_INDICATOR_FOR_TESTS([modulename]) # defines a C macro indicating the presence of the given module # in lib or tests. This is useful to determine whether the module # should be tested. # | Value | Value | # | in lib/ | in tests/ | # --------------------------------------------+---------+-----------+ # Module present among main modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module present among tests-related modules: | 1 | 1 | # --------------------------------------------+---------+-----------+ # Module not present at all: | 0 | 0 | # --------------------------------------------+---------+-----------+ AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], [ AC_DEFINE([GNULIB_TEST_]m4_translit([[$1]], [abcdefghijklmnopqrstuvwxyz./-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ___]), [1], [Define to 1 when the gnulib module $1 should be tested.]) ]) # gl_ASSERT_NO_GNULIB_POSIXCHECK # asserts that there will never be a need to #define GNULIB_POSIXCHECK. # and thereby enables an optimization of configure and config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_POSIXCHECK], [ dnl Override gl_WARN_ON_USE_PREPARE. dnl But hide this definition from 'aclocal'. AC_DEFUN([gl_W][ARN_ON_USE_PREPARE], []) ]) # gl_ASSERT_NO_GNULIB_TESTS # asserts that there will be no gnulib tests in the scope of the configure.ac # and thereby enables an optimization of config.h. # Used by Emacs. AC_DEFUN([gl_ASSERT_NO_GNULIB_TESTS], [ dnl Override gl_MODULE_INDICATOR_FOR_TESTS. AC_DEFUN([gl_MODULE_INDICATOR_FOR_TESTS], []) ]) # Test whether <features.h> exists. # Set HAVE_FEATURES_H. AC_DEFUN([gl_FEATURES_H], [ AC_CHECK_HEADERS_ONCE([features.h]) if test $ac_cv_header_features_h = yes; then HAVE_FEATURES_H=1 else HAVE_FEATURES_H=0 fi AC_SUBST([HAVE_FEATURES_H]) ]) # gl_PROG_CC_C99 # Modifies the value of the shell variable CC in an attempt to make $CC # understand ISO C99 source code. AC_DEFUN([gl_PROG_CC_C99], [ dnl Just use AC_PROG_CC_C99. dnl When AC_PROG_CC_C99 and AC_PROG_CC_STDC are used together, the substituted dnl value of CC will contain the C99 enabling options twice. But this is only dnl a cosmetic problem. dnl With Autoconf >= 2.70, use AC_PROG_CC since it implies AC_PROG_CC_C99; dnl this avoids a "warning: The macro `AC_PROG_CC_C99' is obsolete." m4_version_prereq([2.70], [AC_REQUIRE([AC_PROG_CC])], [AC_REQUIRE([AC_PROG_CC_C99])]) ]) # gl_PROG_AR_RANLIB # Determines the values for AR, ARFLAGS, RANLIB that fit with the compiler. # The user can set the variables AR, ARFLAGS, RANLIB if he wants to override # the values. AC_DEFUN([gl_PROG_AR_RANLIB], [ dnl Minix 3 comes with two toolchains: The Amsterdam Compiler Kit compiler dnl as "cc", and GCC as "gcc". They have different object file formats and dnl library formats. In particular, the GNU binutils programs ar and ranlib dnl produce libraries that work only with gcc, not with cc. AC_REQUIRE([AC_PROG_CC]) dnl The '][' hides this use from 'aclocal'. AC_BEFORE([$0], [A][M_PROG_AR]) AC_CACHE_CHECK([for Minix Amsterdam compiler], [gl_cv_c_amsterdam_compiler], [ AC_EGREP_CPP([Amsterdam], [ #ifdef __ACK__ Amsterdam #endif ], [gl_cv_c_amsterdam_compiler=yes], [gl_cv_c_amsterdam_compiler=no]) ]) dnl Don't compete with AM_PROG_AR's decision about AR/ARFLAGS if we are not dnl building with __ACK__. if test $gl_cv_c_amsterdam_compiler = yes; then if test -z "$AR"; then AR='cc -c.a' fi if test -z "$ARFLAGS"; then ARFLAGS='-o' fi else dnl AM_PROG_AR was added in automake v1.11.2. AM_PROG_AR does not AC_SUBST dnl ARFLAGS variable (it is filed into Makefile.in directly by automake dnl script on-demand, if not specified by ./configure of course). dnl Don't AC_REQUIRE the AM_PROG_AR otherwise the code for __ACK__ above dnl will be ignored. Also, pay attention to call AM_PROG_AR in else block dnl because AM_PROG_AR is written so it could re-set AR variable even for dnl __ACK__. It may seem like its easier to avoid calling the macro here, dnl but we need to AC_SUBST both AR/ARFLAGS (thus those must have some good dnl default value and automake should usually know them). dnl dnl The '][' hides this use from 'aclocal'. m4_ifdef([A][M_PROG_AR], [A][M_PROG_AR], [:]) fi dnl In case the code above has not helped with setting AR/ARFLAGS, use dnl Automake-documented default values for AR and ARFLAGS, but prefer dnl ${host}-ar over ar (useful for cross-compiling). AC_CHECK_TOOL([AR], [ar], [ar]) if test -z "$ARFLAGS"; then ARFLAGS='cr' fi AC_SUBST([AR]) AC_SUBST([ARFLAGS]) if test -z "$RANLIB"; then if test $gl_cv_c_amsterdam_compiler = yes; then RANLIB=':' else dnl Use the ranlib program if it is available. AC_PROG_RANLIB fi fi AC_SUBST([RANLIB]) ]) # AC_C_RESTRICT # This definition is copied from post-2.70 Autoconf and overrides the # AC_C_RESTRICT macro from autoconf 2.60..2.70. m4_version_prereq([2.70.1], [], [ AC_DEFUN([AC_C_RESTRICT], [AC_CACHE_CHECK([for C/C++ restrict keyword], [ac_cv_c_restrict], [ac_cv_c_restrict=no # Put '__restrict__' first, to avoid problems with glibc and non-GCC; see: # https://lists.gnu.org/archive/html/bug-autoconf/2016-02/msg00006.html # Put 'restrict' last, because C++ lacks it. for ac_kw in __restrict__ __restrict _Restrict restrict; do AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int *int_ptr; int foo (int_ptr $ac_kw ip) { return ip[0]; } int bar (int [$ac_kw]); /* Catch GCC bug 14050. */ int bar (int ip[$ac_kw]) { return ip[0]; } ]], [[int s[1]; int *$ac_kw t = s; t[0] = 0; return foo (t) + bar (t); ]])], [ac_cv_c_restrict=$ac_kw]) test "$ac_cv_c_restrict" != no && break done ]) AH_VERBATIM([restrict], [/* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported only directly. */ #undef restrict /* Work around a bug in older versions of Sun C++, which did not #define __restrict__ or support _Restrict or __restrict__ even though the corresponding Sun C compiler ended up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. This workaround can be removed once we assume Oracle Developer Studio 12.5 (2016) or later. */ #if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ # define _Restrict # define __restrict__ #endif]) case $ac_cv_c_restrict in restrict) ;; no) AC_DEFINE([restrict], []) ;; *) AC_DEFINE_UNQUOTED([restrict], [$ac_cv_c_restrict]) ;; esac ])# AC_C_RESTRICT ]) # gl_BIGENDIAN # is like AC_C_BIGENDIAN, except that it can be AC_REQUIREd. # Note that AC_REQUIRE([AC_C_BIGENDIAN]) does not work reliably because some # macros invoke AC_C_BIGENDIAN with arguments. AC_DEFUN([gl_BIGENDIAN], [ AC_C_BIGENDIAN ]) # A temporary file descriptor. # Must be less than 10, because dash 0.5.8 does not support redirections # with multi-digit file descriptors. m4_define([GL_TMP_FD], 9) # gl_SILENT(command) # executes command, but without the normal configure output. # This is useful when you want to invoke AC_CACHE_CHECK (or AC_CHECK_FUNC etc.) # inside another AC_CACHE_CHECK. AC_DEFUN([gl_SILENT], [ exec GL_TMP_FD>&AS_MESSAGE_FD AS_MESSAGE_FD>/dev/null $1 exec AS_MESSAGE_FD>&GL_TMP_FD GL_TMP_FD>&- ]) # gl_CACHE_VAL_SILENT(cache-id, command-to-set-it) # is like AC_CACHE_VAL(cache-id, command-to-set-it), except that it does not # output a spurious "(cached)" mark in the midst of other configure output. # This macro should be used instead of AC_CACHE_VAL when it is not surrounded # by an AC_MSG_CHECKING/AC_MSG_RESULT pair. AC_DEFUN([gl_CACHE_VAL_SILENT], [ gl_SILENT([ AC_CACHE_VAL([$1], [$2]) ]) ]) # gl_CONDITIONAL(conditional, condition) # is like AM_CONDITIONAL(conditional, condition), except that it does not # produce an error # configure: error: conditional "..." was never defined. # Usually this means the macro was only invoked conditionally. # when only invoked conditionally. Instead, in that case, both the _TRUE # and the _FALSE case are disabled. AC_DEFUN([gl_CONDITIONAL], [ pushdef([AC_CONFIG_COMMANDS_PRE], [:])dnl AM_CONDITIONAL([$1], [$2]) popdef([AC_CONFIG_COMMANDS_PRE])dnl if test -z "${[$1]_TRUE}" && test -z "${[$1]_FALSE}"; then [$1]_TRUE='#' [$1]_FALSE='#' fi ]) # gl_CC_ALLOW_WARNINGS # sets and substitutes a variable GL_CFLAG_ALLOW_WARNINGS, to a $(CC) option # that reverts a preceding '-Werror' option, if available. # This is expected to be '-Wno-error' on gcc, clang (except clang/MSVC), xlclang # and empty otherwise. AC_DEFUN([gl_CC_ALLOW_WARNINGS], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for C compiler option to allow warnings], [gl_cv_cc_wallow], [rm -f conftest* echo 'int dummy;' > conftest.c AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c 2>conftest1.err]) >/dev/null AC_TRY_COMMAND([${CC-cc} $CFLAGS $CPPFLAGS -Wno-error -c conftest.c 2>conftest2.err]) >/dev/null dnl Test the number of error output lines, because AIX xlc accepts the dnl option '-Wno-error', just to produce a warning dnl "Option -Wno-error was incorrectly specified. The option will be ignored." dnl afterwards. if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then gl_cv_cc_wallow='-Wno-error' else gl_cv_cc_wallow=none fi rm -f conftest* ]) case "$gl_cv_cc_wallow" in none) GL_CFLAG_ALLOW_WARNINGS='' ;; *) GL_CFLAG_ALLOW_WARNINGS="$gl_cv_cc_wallow" ;; esac AC_SUBST([GL_CFLAG_ALLOW_WARNINGS]) ]) # gl_CXX_ALLOW_WARNINGS # sets and substitutes a variable GL_CXXFLAG_ALLOW_WARNINGS, to a $(CC) option # that reverts a preceding '-Werror' option, if available. AC_DEFUN([gl_CXX_ALLOW_WARNINGS], [ dnl Requires AC_PROG_CXX or gl_PROG_ANSI_CXX. if test -n "$CXX" && test "$CXX" != no; then AC_CACHE_CHECK([for C++ compiler option to allow warnings], [gl_cv_cxx_wallow], [rm -f conftest* echo 'int dummy;' > conftest.cc AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -c conftest.cc 2>conftest1.err]) >/dev/null AC_TRY_COMMAND([${CXX-c++} $CXXFLAGS $CPPFLAGS -Wno-error -c conftest.cc 2>conftest2.err]) >/dev/null dnl Test the number of error output lines, because AIX xlC accepts the dnl option '-Wno-error', just to produce a warning dnl "Option -Wno-error was incorrectly specified. The option will be ignored." dnl afterwards. if test $? = 0 && test `wc -l < conftest1.err` = `wc -l < conftest2.err`; then gl_cv_cxx_wallow='-Wno-error' else gl_cv_cxx_wallow=none fi rm -f conftest* ]) case "$gl_cv_cxx_wallow" in none) GL_CXXFLAG_ALLOW_WARNINGS='' ;; *) GL_CXXFLAG_ALLOW_WARNINGS="$gl_cv_cxx_wallow" ;; esac else GL_CXXFLAG_ALLOW_WARNINGS='' fi AC_SUBST([GL_CXXFLAG_ALLOW_WARNINGS]) ]) # gl_CC_GNULIB_WARNINGS # sets and substitutes a variable GL_CFLAG_GNULIB_WARNINGS, to a $(CC) option # set that enables or disables warnings as suitable for the Gnulib coding style. AC_DEFUN([gl_CC_GNULIB_WARNINGS], [ AC_REQUIRE([gl_CC_ALLOW_WARNINGS]) dnl Assume that the compiler supports -Wno-* options only if it also supports dnl -Wno-error. GL_CFLAG_GNULIB_WARNINGS='' if test -n "$GL_CFLAG_ALLOW_WARNINGS"; then dnl Enable these warning options: dnl dnl GCC clang dnl -Wno-cast-qual >= 3 >= 3.9 dnl -Wno-conversion >= 3 >= 3.9 dnl -Wno-float-conversion >= 4.9 >= 3.9 dnl -Wno-float-equal >= 3 >= 3.9 dnl -Wimplicit-fallthrough >= 7 >= 3.9 dnl -Wno-pedantic >= 4.8 >= 3.9 dnl -Wno-sign-compare >= 3 >= 3.9 dnl -Wno-sign-conversion >= 4.3 >= 3.9 dnl -Wno-type-limits >= 4.3 >= 3.9 dnl -Wno-undef >= 3 >= 3.9 dnl -Wno-unsuffixed-float-constants >= 4.5 dnl -Wno-unused-function >= 3 >= 3.9 dnl -Wno-unused-parameter >= 3 >= 3.9 dnl cat > conftest.c <<\EOF #if __GNUC__ >= 3 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-cast-qual -Wno-conversion -Wno-float-equal -Wno-sign-compare -Wno-undef -Wno-unused-function -Wno-unused-parameter #endif #if __GNUC__ + (__GNUC_MINOR__ >= 9) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-float-conversion #endif #if __GNUC__ >= 7 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wimplicit-fallthrough #endif #if __GNUC__ + (__GNUC_MINOR__ >= 8) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-pedantic #endif #if __GNUC__ + (__GNUC_MINOR__ >= 3) > 4 || (__clang_major__ + (__clang_minor__ >= 9) > 3) -Wno-sign-conversion -Wno-type-limits #endif #if __GNUC__ + (__GNUC_MINOR__ >= 5) > 4 -Wno-unsuffixed-float-constants #endif EOF gl_command="$CC $CFLAGS $CPPFLAGS -E conftest.c > conftest.out" if AC_TRY_EVAL([gl_command]); then gl_options=`grep -v '#' conftest.out` for word in $gl_options; do GL_CFLAG_GNULIB_WARNINGS="$GL_CFLAG_GNULIB_WARNINGS $word" done fi rm -f conftest.c conftest.out fi AC_SUBST([GL_CFLAG_GNULIB_WARNINGS]) ]) dnl gl_CONDITIONAL_HEADER([foo.h]) dnl takes a shell variable GL_GENERATE_FOO_H (with value true or false) as input dnl and produces dnl - an AC_SUBSTed variable FOO_H that is either a file name or empty, based dnl on whether GL_GENERATE_FOO_H is true or false, dnl - an Automake conditional GL_GENERATE_FOO_H that evaluates to the value of dnl the shell variable GL_GENERATE_FOO_H. AC_DEFUN([gl_CONDITIONAL_HEADER], [ m4_pushdef([gl_header_name], AS_TR_SH(m4_toupper($1))) m4_pushdef([gl_generate_var], [GL_GENERATE_]AS_TR_SH(m4_toupper($1))) m4_pushdef([gl_generate_cond], [GL_GENERATE_]AS_TR_SH(m4_toupper($1))) case "$gl_generate_var" in false) gl_header_name='' ;; true) dnl It is OK to use a .h file in lib/ from within tests/, but not vice dnl versa. if test -z "$gl_header_name"; then gl_header_name="${gl_source_base_prefix}$1" fi ;; *) echo "*** gl_generate_var is not set correctly" 1>&2; exit 1 ;; esac AC_SUBST(gl_header_name) gl_CONDITIONAL(gl_generate_cond, [$gl_generate_var]) m4_popdef([gl_generate_cond]) m4_popdef([gl_generate_var]) m4_popdef([gl_header_name]) ]) dnl Expands to some code for use in .c programs that, on native Windows, defines dnl the Microsoft deprecated alias function names to the underscore-prefixed dnl actual function names. With this macro, these function names are available dnl without linking with '-loldnames' and without generating warnings. dnl Usage: Use it after all system header files are included. dnl #include <...> dnl #include <...> dnl ]GL_MDA_DEFINES[ dnl ... AC_DEFUN([GL_MDA_DEFINES],[ AC_REQUIRE([_GL_MDA_DEFINES]) [$gl_mda_defines] ]) AC_DEFUN([_GL_MDA_DEFINES], [gl_mda_defines=' #if defined _WIN32 && !defined __CYGWIN__ #define access _access #define chdir _chdir #define chmod _chmod #define close _close #define creat _creat #define dup _dup #define dup2 _dup2 #define ecvt _ecvt #define execl _execl #define execle _execle #define execlp _execlp #define execv _execv #define execve _execve #define execvp _execvp #define execvpe _execvpe #define fcloseall _fcloseall #define fcvt _fcvt #define fdopen _fdopen #define fileno _fileno #define gcvt _gcvt #define getcwd _getcwd #define getpid _getpid #define getw _getw #define isatty _isatty #define j0 _j0 #define j1 _j1 #define jn _jn #define lfind _lfind #define lsearch _lsearch #define lseek _lseek #define memccpy _memccpy #define mkdir _mkdir #define mktemp _mktemp #define open _open #define putenv _putenv #define putw _putw #define read _read #define rmdir _rmdir #define strdup _strdup #define swab _swab #define tempnam _tempnam #define tzset _tzset #define umask _umask #define unlink _unlink #define utime _utime #define wcsdup _wcsdup #define write _write #define y0 _y0 #define y1 _y1 #define yn _yn #endif ' ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/sys_types_h.m4����������������������������������������������������������������������0000644�0000000�0000000�00000004361�14226564452�013255� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_types_h.m4 serial 13 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_TYPES_H], [ AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) dnl Use sane struct stat types in OpenVMS 8.2 and later. AC_DEFINE([_USE_STD_STAT], 1, [For standard stat data types on VMS.]) gl_NEXT_HEADERS([sys/types.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to override the 'off_t' type. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Whether to override the 'dev_t' and 'ino_t' types. m4_ifdef([gl_WINDOWS_STAT_INODES], [ AC_REQUIRE([gl_WINDOWS_STAT_INODES]) ], [ WINDOWS_STAT_INODES=0 ]) AC_SUBST([WINDOWS_STAT_INODES]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_TYPES_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS], [ ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TYPE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_TYPES_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_TYPES_H_DEFAULTS], [ ]) # This works around a buggy version in autoconf <= 2.69. # See <https://lists.gnu.org/r/autoconf/2016-08/msg00014.html> # The 2.70 version isn't quoted properly, so override it too. m4_version_prereq([2.70.1], [], [ m4_undefine([AC_HEADER_MAJOR]) AC_DEFUN([AC_HEADER_MAJOR], [AC_CHECK_HEADERS_ONCE([sys/types.h]) AC_CHECK_HEADER([sys/mkdev.h], [AC_DEFINE([MAJOR_IN_MKDEV], [1], [Define to 1 if `major', `minor', and `makedev' are declared in <mkdev.h>.])]) if test $ac_cv_header_sys_mkdev_h = no; then AC_CHECK_HEADER([sys/sysmacros.h], [AC_DEFINE([MAJOR_IN_SYSMACROS], [1], [Define to 1 if `major', `minor', and `makedev' are declared in <sysmacros.h>.])]) fi ])# AC_HEADER_MAJOR ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/mbsinit.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000002401�14226564452�012342� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbsinit.m4 serial 9 dnl Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBSINIT], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([mbsinit]) if test $ac_cv_func_mbsinit = no; then HAVE_MBSINIT=0 AC_CHECK_DECLS([mbsinit],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_mbsinit = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares mbsinit() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBSINIT=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBSINIT=1 else dnl On mingw, mbsinit() always returns 1, which is inappropriate for dnl states produced by mbrtowc() for an incomplete multibyte character dnl in multibyte locales. case "$host_os" in mingw*) REPLACE_MBSINIT=1 ;; esac fi fi ]) # Prerequisites of lib/mbsinit.c. AC_DEFUN([gl_PREREQ_MBSINIT], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/unistd_h.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000033624�14226564453�012526� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unistd_h.m4 serial 90 dnl Copyright (C) 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Simon Josefsson, Bruno Haible. AC_DEFUN_ONCE([gl_UNISTD_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([unistd.h]) if test $ac_cv_header_unistd_h = yes; then HAVE_UNISTD_H=1 else HAVE_UNISTD_H=0 fi AC_SUBST([HAVE_UNISTD_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Determine WINDOWS_64_BIT_OFF_T. AC_REQUIRE([gl_TYPE_OFF_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_UNISTD_H # include <unistd.h> #endif /* Some systems declare various items in the wrong headers. */ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <fcntl.h> # include <stdio.h> # include <stdlib.h> # if defined _WIN32 && ! defined __CYGWIN__ # include <io.h> # endif #endif ]], [access chdir chown copy_file_range dup dup2 dup3 environ euidaccess execl execle execlp execv execve execvp execvpe faccessat fchdir fchownat fdatasync fsync ftruncate getcwd getdomainname getdtablesize getentropy getgroups gethostname getlogin getlogin_r getpagesize getpass getusershell setusershell endusershell group_member isatty lchown link linkat lseek pipe pipe2 pread pwrite readlink readlinkat rmdir sethostname sleep symlink symlinkat truncate ttyname_r unlink unlinkat usleep]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS_ONCE([execvpe]) if test $ac_cv_have_decl_execvpe = no; then HAVE_DECL_EXECVPE=0 fi ]) # gl_UNISTD_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_UNISTD_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_UNISTD_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_UNISTD_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCESS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CHOWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPY_FILE_RANGE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUP3]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ENVIRON]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EUIDACCESS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECLP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXECVPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FACCESSAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHOWNAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDATASYNC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSYNC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTRUNCATE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCWD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDOMAINNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDTABLESIZE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETENTROPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETGROUPS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETHOSTNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOGIN_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETOPT_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPAGESIZE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPASS_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUSERSHELL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GROUP_MEMBER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISATTY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHOWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSEEK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PIPE2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PREAD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PWRITE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READ]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READLINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RMDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETHOSTNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SLEEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYMLINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCATE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TTYNAME_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_NONBLOCKING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_SIGPIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLINKAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_USLEEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WRITE]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ACCESS], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHDIR], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CLOSE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_DUP2], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECL], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECLP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECV], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_EXECVPE], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETCWD], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETPID], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ISATTY], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_LSEEK], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_READ], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_RMDIR], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_SWAB], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UNLINK], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WRITE], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_UNISTD_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) ]) AC_DEFUN([gl_UNISTD_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_CHOWN=1; AC_SUBST([HAVE_CHOWN]) HAVE_COPY_FILE_RANGE=1; AC_SUBST([HAVE_COPY_FILE_RANGE]) HAVE_DUP3=1; AC_SUBST([HAVE_DUP3]) HAVE_EUIDACCESS=1; AC_SUBST([HAVE_EUIDACCESS]) HAVE_EXECVPE=1; AC_SUBST([HAVE_EXECVPE]) HAVE_FACCESSAT=1; AC_SUBST([HAVE_FACCESSAT]) HAVE_FCHDIR=1; AC_SUBST([HAVE_FCHDIR]) HAVE_FCHOWNAT=1; AC_SUBST([HAVE_FCHOWNAT]) HAVE_FDATASYNC=1; AC_SUBST([HAVE_FDATASYNC]) HAVE_FSYNC=1; AC_SUBST([HAVE_FSYNC]) HAVE_FTRUNCATE=1; AC_SUBST([HAVE_FTRUNCATE]) HAVE_GETDTABLESIZE=1; AC_SUBST([HAVE_GETDTABLESIZE]) HAVE_GETENTROPY=1; AC_SUBST([HAVE_GETENTROPY]) HAVE_GETGROUPS=1; AC_SUBST([HAVE_GETGROUPS]) HAVE_GETHOSTNAME=1; AC_SUBST([HAVE_GETHOSTNAME]) HAVE_GETLOGIN=1; AC_SUBST([HAVE_GETLOGIN]) HAVE_GETPAGESIZE=1; AC_SUBST([HAVE_GETPAGESIZE]) HAVE_GETPASS=1; AC_SUBST([HAVE_GETPASS]) HAVE_GROUP_MEMBER=1; AC_SUBST([HAVE_GROUP_MEMBER]) HAVE_LCHOWN=1; AC_SUBST([HAVE_LCHOWN]) HAVE_LINK=1; AC_SUBST([HAVE_LINK]) HAVE_LINKAT=1; AC_SUBST([HAVE_LINKAT]) HAVE_PIPE=1; AC_SUBST([HAVE_PIPE]) HAVE_PIPE2=1; AC_SUBST([HAVE_PIPE2]) HAVE_PREAD=1; AC_SUBST([HAVE_PREAD]) HAVE_PWRITE=1; AC_SUBST([HAVE_PWRITE]) HAVE_READLINK=1; AC_SUBST([HAVE_READLINK]) HAVE_READLINKAT=1; AC_SUBST([HAVE_READLINKAT]) HAVE_SETHOSTNAME=1; AC_SUBST([HAVE_SETHOSTNAME]) HAVE_SLEEP=1; AC_SUBST([HAVE_SLEEP]) HAVE_SYMLINK=1; AC_SUBST([HAVE_SYMLINK]) HAVE_SYMLINKAT=1; AC_SUBST([HAVE_SYMLINKAT]) HAVE_UNLINKAT=1; AC_SUBST([HAVE_UNLINKAT]) HAVE_USLEEP=1; AC_SUBST([HAVE_USLEEP]) HAVE_DECL_ENVIRON=1; AC_SUBST([HAVE_DECL_ENVIRON]) HAVE_DECL_EXECVPE=1; AC_SUBST([HAVE_DECL_EXECVPE]) HAVE_DECL_FCHDIR=1; AC_SUBST([HAVE_DECL_FCHDIR]) HAVE_DECL_FDATASYNC=1; AC_SUBST([HAVE_DECL_FDATASYNC]) HAVE_DECL_GETDOMAINNAME=1; AC_SUBST([HAVE_DECL_GETDOMAINNAME]) HAVE_DECL_GETLOGIN=1; AC_SUBST([HAVE_DECL_GETLOGIN]) HAVE_DECL_GETLOGIN_R=1; AC_SUBST([HAVE_DECL_GETLOGIN_R]) HAVE_DECL_GETPAGESIZE=1; AC_SUBST([HAVE_DECL_GETPAGESIZE]) HAVE_DECL_GETUSERSHELL=1; AC_SUBST([HAVE_DECL_GETUSERSHELL]) HAVE_DECL_SETHOSTNAME=1; AC_SUBST([HAVE_DECL_SETHOSTNAME]) HAVE_DECL_TRUNCATE=1; AC_SUBST([HAVE_DECL_TRUNCATE]) HAVE_DECL_TTYNAME_R=1; AC_SUBST([HAVE_DECL_TTYNAME_R]) HAVE_OS_H=0; AC_SUBST([HAVE_OS_H]) HAVE_SYS_PARAM_H=0; AC_SUBST([HAVE_SYS_PARAM_H]) REPLACE_ACCESS=0; AC_SUBST([REPLACE_ACCESS]) REPLACE_CHOWN=0; AC_SUBST([REPLACE_CHOWN]) REPLACE_CLOSE=0; AC_SUBST([REPLACE_CLOSE]) REPLACE_COPY_FILE_RANGE=0; AC_SUBST([REPLACE_COPY_FILE_RANGE]) REPLACE_DUP=0; AC_SUBST([REPLACE_DUP]) REPLACE_DUP2=0; AC_SUBST([REPLACE_DUP2]) REPLACE_EXECL=0; AC_SUBST([REPLACE_EXECL]) REPLACE_EXECLE=0; AC_SUBST([REPLACE_EXECLE]) REPLACE_EXECLP=0; AC_SUBST([REPLACE_EXECLP]) REPLACE_EXECV=0; AC_SUBST([REPLACE_EXECV]) REPLACE_EXECVE=0; AC_SUBST([REPLACE_EXECVE]) REPLACE_EXECVP=0; AC_SUBST([REPLACE_EXECVP]) REPLACE_EXECVPE=0; AC_SUBST([REPLACE_EXECVPE]) REPLACE_FACCESSAT=0; AC_SUBST([REPLACE_FACCESSAT]) REPLACE_FCHOWNAT=0; AC_SUBST([REPLACE_FCHOWNAT]) REPLACE_FTRUNCATE=0; AC_SUBST([REPLACE_FTRUNCATE]) REPLACE_GETCWD=0; AC_SUBST([REPLACE_GETCWD]) REPLACE_GETDOMAINNAME=0; AC_SUBST([REPLACE_GETDOMAINNAME]) REPLACE_GETDTABLESIZE=0; AC_SUBST([REPLACE_GETDTABLESIZE]) REPLACE_GETLOGIN_R=0; AC_SUBST([REPLACE_GETLOGIN_R]) REPLACE_GETGROUPS=0; AC_SUBST([REPLACE_GETGROUPS]) REPLACE_GETPAGESIZE=0; AC_SUBST([REPLACE_GETPAGESIZE]) REPLACE_GETPASS=0; AC_SUBST([REPLACE_GETPASS]) REPLACE_GETPASS_FOR_GETPASS_GNU=0; AC_SUBST([REPLACE_GETPASS_FOR_GETPASS_GNU]) REPLACE_ISATTY=0; AC_SUBST([REPLACE_ISATTY]) REPLACE_LCHOWN=0; AC_SUBST([REPLACE_LCHOWN]) REPLACE_LINK=0; AC_SUBST([REPLACE_LINK]) REPLACE_LINKAT=0; AC_SUBST([REPLACE_LINKAT]) REPLACE_LSEEK=0; AC_SUBST([REPLACE_LSEEK]) REPLACE_PREAD=0; AC_SUBST([REPLACE_PREAD]) REPLACE_PWRITE=0; AC_SUBST([REPLACE_PWRITE]) REPLACE_READ=0; AC_SUBST([REPLACE_READ]) REPLACE_READLINK=0; AC_SUBST([REPLACE_READLINK]) REPLACE_READLINKAT=0; AC_SUBST([REPLACE_READLINKAT]) REPLACE_RMDIR=0; AC_SUBST([REPLACE_RMDIR]) REPLACE_SLEEP=0; AC_SUBST([REPLACE_SLEEP]) REPLACE_SYMLINK=0; AC_SUBST([REPLACE_SYMLINK]) REPLACE_SYMLINKAT=0; AC_SUBST([REPLACE_SYMLINKAT]) REPLACE_TRUNCATE=0; AC_SUBST([REPLACE_TRUNCATE]) REPLACE_TTYNAME_R=0; AC_SUBST([REPLACE_TTYNAME_R]) REPLACE_UNLINK=0; AC_SUBST([REPLACE_UNLINK]) REPLACE_UNLINKAT=0; AC_SUBST([REPLACE_UNLINKAT]) REPLACE_USLEEP=0; AC_SUBST([REPLACE_USLEEP]) REPLACE_WRITE=0; AC_SUBST([REPLACE_WRITE]) UNISTD_H_HAVE_SYS_RANDOM_H=0; AC_SUBST([UNISTD_H_HAVE_SYS_RANDOM_H]) UNISTD_H_HAVE_WINSOCK2_H=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H]) UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS=0; AC_SUBST([UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS]) ]) ������������������������������������������������������������������������������������������������������������recutils-1.9/m4/wctype_h.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000014444�14226564453�012532� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctype_h.m4 serial 30 dnl A placeholder for ISO C99 <wctype.h>, for platforms that lack it. dnl Copyright (C) 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN_ONCE([gl_WCTYPE_H], [ AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([iswcntrl]) if test $ac_cv_func_iswcntrl = yes; then HAVE_ISWCNTRL=1 else HAVE_ISWCNTRL=0 fi AC_SUBST([HAVE_ISWCNTRL]) AC_REQUIRE([gt_TYPE_WINT_T]) if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi AC_SUBST([HAVE_WINT_T]) AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) gl_CHECK_NEXT_HEADERS([wctype.h]) if test $ac_cv_header_wctype_h = yes; then if test $ac_cv_func_iswcntrl = yes; then dnl Linux libc5 has an iswprint function that returns 0 for all arguments. dnl The other functions are likely broken in the same way. AC_CACHE_CHECK([whether iswcntrl works], [gl_cv_func_iswcntrl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> #include <wctype.h> int main () { return iswprint ('x') == 0; } ]])], [gl_cv_func_iswcntrl_works=yes], [gl_cv_func_iswcntrl_works=no], [dnl Guess no on Linux libc5, yes otherwise. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stdlib.h> #if __GNU_LIBRARY__ == 1 Linux libc5 i18n is broken. #endif]], [[]])], [gl_cv_func_iswcntrl_works="guessing yes"], [gl_cv_func_iswcntrl_works="guessing no"]) ]) ]) fi HAVE_WCTYPE_H=1 else HAVE_WCTYPE_H=0 fi AC_SUBST([HAVE_WCTYPE_H]) if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then REPLACE_ISWCNTRL=1 else case "$gl_cv_func_iswcntrl_works" in *yes) REPLACE_ISWCNTRL=0 ;; *) REPLACE_ISWCNTRL=1 ;; esac fi AC_SUBST([REPLACE_ISWCNTRL]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_ISWCNTRL = 1; then dnl Redefine all of iswcntrl, ..., iswxdigit in <wctype.h>. : fi if test $REPLACE_ISWCNTRL = 1; then REPLACE_TOWLOWER=1 else AC_CHECK_FUNCS([towlower]) if test $ac_cv_func_towlower = yes; then REPLACE_TOWLOWER=0 else AC_CHECK_DECLS([towlower],,, [[#include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif ]]) if test $ac_cv_have_decl_towlower = yes; then dnl On Minix 3.1.8, the system's <wctype.h> declares towlower() and dnl towupper() although it does not have the functions. Avoid a dnl collision with gnulib's replacement. REPLACE_TOWLOWER=1 else REPLACE_TOWLOWER=0 fi fi fi AC_SUBST([REPLACE_TOWLOWER]) if test $HAVE_ISWCNTRL = 0 || test $REPLACE_TOWLOWER = 1; then dnl Redefine towlower, towupper in <wctype.h>. : fi dnl We assume that the wctype() and iswctype() functions exist if and only dnl if the type wctype_t is defined in <wchar.h> or in <wctype.h> if that dnl exists. dnl HP-UX 11.00 declares all these in <wchar.h> and lacks <wctype.h>. AC_CACHE_CHECK([for wctype_t], [gl_cv_type_wctype_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> #if HAVE_WCTYPE_H # include <wctype.h> #endif wctype_t a; ]], [[]])], [gl_cv_type_wctype_t=yes], [gl_cv_type_wctype_t=no]) ]) if test $gl_cv_type_wctype_t = no; then HAVE_WCTYPE_T=0 fi dnl We assume that the wctrans() and towctrans() functions exist if and only dnl if the type wctrans_t is defined in <wctype.h>. AC_CACHE_CHECK([for wctrans_t], [gl_cv_type_wctrans_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> #include <wctype.h> wctrans_t a; ]], [[]])], [gl_cv_type_wctrans_t=yes], [gl_cv_type_wctrans_t=no]) ]) if test $gl_cv_type_wctrans_t = no; then HAVE_WCTRANS_T=0 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if !(defined __GLIBC__ && !defined __UCLIBC__) # include <wchar.h> #endif #include <wctype.h> ]], [wctype iswctype wctrans towctrans ]) ]) # gl_WCTYPE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_WCTYPE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_WCTYPE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_WCTYPE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWBLANK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWDIGIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWXDIGIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTYPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISWCTYPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTRANS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TOWCTRANS]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_WCTYPE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_WCTYPE_H_DEFAULTS]) ]) AC_DEFUN([gl_WCTYPE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ISWBLANK=1; AC_SUBST([HAVE_ISWBLANK]) HAVE_WCTYPE_T=1; AC_SUBST([HAVE_WCTYPE_T]) HAVE_WCTRANS_T=1; AC_SUBST([HAVE_WCTRANS_T]) REPLACE_ISWBLANK=0; AC_SUBST([REPLACE_ISWBLANK]) REPLACE_ISWDIGIT=0; AC_SUBST([REPLACE_ISWDIGIT]) REPLACE_ISWXDIGIT=0; AC_SUBST([REPLACE_ISWXDIGIT]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/timegm.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000001320�14226564453�012157� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# timegm.m4 serial 13 dnl Copyright (C) 2003, 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_TIMEGM], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) REPLACE_TIMEGM=0 AC_CHECK_FUNCS_ONCE([timegm]) if test $ac_cv_func_timegm = yes; then if test "$gl_cv_func_working_mktime" != yes; then # Assume that timegm is buggy if mktime is. REPLACE_TIMEGM=1 fi else HAVE_TIMEGM=0 fi ]) # Prerequisites of lib/timegm.c. AC_DEFUN([gl_PREREQ_TIMEGM], [ : ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/progtest.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000006024�13413351610�012534� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# progtest.m4 serial 7 (gettext-0.18.2) dnl Copyright (C) 1996-2003, 2005, 2008-2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1996. AC_PREREQ([2.50]) # Search path for a program which passes the given test. dnl AM_PATH_PROG_WITH_TEST(VARIABLE, PROG-TO-CHECK-FOR, dnl TEST-PERFORMED-ON-FOUND_PROGRAM [, VALUE-IF-NOT-FOUND [, PATH]]) AC_DEFUN([AM_PATH_PROG_WITH_TEST], [ # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 out how to test for executable files. Don't use a zero-byte file, # as systems may use methods other than mode bits to determine executability. cat >conf$$.file <<_ASEOF #! /bin/sh exit 0 _ASEOF chmod +x conf$$.file if test -x conf$$.file >/dev/null 2>&1; then ac_executable_p="test -x" else ac_executable_p="test -f" fi rm -f conf$$.file # Extract the first word of "$2", so it can be a program name with args. set dummy $2; ac_word=[$]2 AC_MSG_CHECKING([for $ac_word]) AC_CACHE_VAL([ac_cv_path_$1], [case "[$]$1" in [[\\/]]* | ?:[[\\/]]*) ac_cv_path_$1="[$]$1" # Let the user override the test with a path. ;; *) ac_save_IFS="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in ifelse([$5], , $PATH, [$5]); do IFS="$ac_save_IFS" test -z "$ac_dir" && ac_dir=. for ac_exec_ext in '' $ac_executable_extensions; do if $ac_executable_p "$ac_dir/$ac_word$ac_exec_ext"; then echo "$as_me: trying $ac_dir/$ac_word..." >&AS_MESSAGE_LOG_FD if [$3]; then ac_cv_path_$1="$ac_dir/$ac_word$ac_exec_ext" break 2 fi fi done done IFS="$ac_save_IFS" dnl If no 4th arg is given, leave the cache variable unset, dnl so AC_PATH_PROGS will keep looking. ifelse([$4], , , [ test -z "[$]ac_cv_path_$1" && ac_cv_path_$1="$4" ])dnl ;; esac])dnl $1="$ac_cv_path_$1" if test ifelse([$4], , [-n "[$]$1"], ["[$]$1" != "$4"]); then AC_MSG_RESULT([$][$1]) else AC_MSG_RESULT([no]) fi AC_SUBST([$1])dnl ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/locale-ja.m4������������������������������������������������������������������������0000644�0000000�0000000�00000013167�14226564452�012537� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-ja.m4 serial 15 dnl Copyright (C) 2003, 2005-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a japanese locale with EUC-JP encoding. AC_DEFUN([gt_LOCALE_JA], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a traditional japanese locale], [gt_cv_locale_ja], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether MB_CUR_MAX is > 1. This excludes the dysfunctional locales on Cygwin 1.5.x. */ if (MB_CUR_MAX == 1) return 1; /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Note that on native Windows, the Japanese locale is # Japanese_Japan.932, and CP932 is very different from EUC-JP, so we # cannot use it here. gt_cv_locale_ja=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the AIX locale name. if (LC_ALL=ja_JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP else # Test for the locale name with explicit encoding suffix. if (LC_ALL=ja_JP.EUC-JP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC-JP else # Test for the HP-UX, OSF/1, NetBSD locale name. if (LC_ALL=ja_JP.eucJP LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.eucJP else # Test for the IRIX, FreeBSD locale name. if (LC_ALL=ja_JP.EUC LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja_JP.EUC else # Test for the Solaris 7 locale name. if (LC_ALL=ja LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_ja=ja else # Special test for NetBSD 1.6. if test -f /usr/share/locale/ja_JP.eucJP/LC_CTYPE; then gt_cv_locale_ja=ja_JP.eucJP else # None found. gt_cv_locale_ja=none fi fi fi fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_JA=$gt_cv_locale_ja AC_SUBST([LOCALE_JA]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/size_max.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000005476�14226564452�012533� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# size_max.m4 serial 12 dnl Copyright (C) 2003, 2005-2006, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.61]) AC_DEFUN([gl_SIZE_MAX], [ AC_CHECK_HEADERS([stdint.h]) dnl First test whether the system already has SIZE_MAX. AC_CACHE_CHECK([for SIZE_MAX], [gl_cv_size_max], [ gl_cv_size_max=no AC_EGREP_CPP([Found it], [ #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #ifdef SIZE_MAX Found it #endif ], [gl_cv_size_max=yes]) if test $gl_cv_size_max != yes; then dnl Define it ourselves. Here we assume that the type 'size_t' is not wider dnl than the type 'unsigned long'. Try hard to find a definition that can dnl be used in a preprocessor #if, i.e. doesn't contain a cast. AC_COMPUTE_INT([size_t_bits_minus_1], [sizeof (size_t) * CHAR_BIT - 1], [#include <stddef.h> #include <limits.h>], [size_t_bits_minus_1=]) AC_COMPUTE_INT([fits_in_uint], [sizeof (size_t) <= sizeof (unsigned int)], [#include <stddef.h>], [fits_in_uint=]) if test -n "$size_t_bits_minus_1" && test -n "$fits_in_uint"; then if test $fits_in_uint = 1; then dnl Even though SIZE_MAX fits in an unsigned int, it must be of type dnl 'unsigned long' if the type 'size_t' is the same as 'unsigned long'. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> extern size_t foo; extern unsigned long foo; ]], [[]])], [fits_in_uint=0]) fi dnl We cannot use 'expr' to simplify this expression, because 'expr' dnl works only with 'long' integers in the host environment, while we dnl might be cross-compiling from a 32-bit platform to a 64-bit platform. if test $fits_in_uint = 1; then gl_cv_size_max="(((1U << $size_t_bits_minus_1) - 1) * 2 + 1)" else gl_cv_size_max="(((1UL << $size_t_bits_minus_1) - 1) * 2 + 1)" fi else dnl Shouldn't happen, but who knows... gl_cv_size_max='((size_t)~(size_t)0)' fi fi ]) if test "$gl_cv_size_max" != yes; then AC_DEFINE_UNQUOTED([SIZE_MAX], [$gl_cv_size_max], [Define as the maximum value of type 'size_t', if the system doesn't define it.]) fi dnl Don't redefine SIZE_MAX in config.h if config.h is re-included after dnl <stdint.h>. Remember that the #undef in AH_VERBATIM gets replaced with dnl #define by AC_DEFINE_UNQUOTED. AH_VERBATIM([SIZE_MAX], [/* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #ifndef SIZE_MAX # undef SIZE_MAX #endif]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/timespec.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000000515�14226564453�012513� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 15 # Copyright (C) 2000-2001, 2003-2007, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering AC_DEFUN([gl_TIMESPEC], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/signalblocking.m4�������������������������������������������������������������������0000644�0000000�0000000�00000001562�14226564452�013672� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# signalblocking.m4 serial 17 dnl Copyright (C) 2001-2002, 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Determine available signal blocking primitives. Three different APIs exist: # 1) POSIX: sigemptyset, sigaddset, sigprocmask # 2) SYSV: sighold, sigrelse # 3) BSD: sigblock, sigsetmask # For simplicity, here we check only for the POSIX signal blocking. AC_DEFUN([gl_SIGNALBLOCKING], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T]) HAVE_POSIX_SIGNALBLOCKING=0 if test "$gl_cv_type_sigset_t" = yes; then AC_CHECK_FUNC([sigprocmask], [HAVE_POSIX_SIGNALBLOCKING=1]) fi ]) # Prerequisites of lib/sigprocmask.c. AC_DEFUN([gl_PREREQ_SIGPROCMASK], [:]) ����������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/getdtablesize.m4��������������������������������������������������������������������0000644�0000000�0000000�00000005045�14226564452�013532� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getdtablesize.m4 serial 8 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETDTABLESIZE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([getdtablesize]) AC_CHECK_DECLS_ONCE([getdtablesize]) if test $ac_cv_func_getdtablesize = yes && test $ac_cv_have_decl_getdtablesize = yes; then AC_CACHE_CHECK([whether getdtablesize works], [gl_cv_func_getdtablesize_works], [dnl There are two concepts: the "maximum possible file descriptor value + 1" dnl and the "maximum number of open file descriptors in a process". dnl Per SUSv2 and POSIX, getdtablesize() should return the first one. dnl On most platforms, the first and the second concept are the same. dnl On OpenVMS, however, they are different and getdtablesize() returns dnl the second one; thus the test below fails. But we don't care dnl because there's no good way to write a replacement getdtablesize(). case "$host_os" in vms*) gl_cv_func_getdtablesize_works="no (limitation)" ;; *) dnl Cygwin 1.7.25 automatically increases the RLIMIT_NOFILE soft dnl limit up to an unchangeable hard limit; all other platforms dnl correctly require setrlimit before getdtablesize() can report dnl a larger value. AC_RUN_IFELSE([ AC_LANG_PROGRAM( [[#include <unistd.h>] GL_MDA_DEFINES ], [[int size = getdtablesize(); if (dup2 (0, getdtablesize()) != -1) return 1; if (size != getdtablesize()) return 2; ]])], [gl_cv_func_getdtablesize_works=yes], [gl_cv_func_getdtablesize_works=no], [case "$host_os" in cygwin*) # on cygwin 1.5.25, getdtablesize() automatically grows gl_cv_func_getdtablesize_works="guessing no" ;; *) gl_cv_func_getdtablesize_works="guessing yes" ;; esac ]) ;; esac ]) case "$gl_cv_func_getdtablesize_works" in *yes | "no (limitation)") ;; *) REPLACE_GETDTABLESIZE=1 ;; esac else HAVE_GETDTABLESIZE=0 fi ]) # Prerequisites of lib/getdtablesize.c. AC_DEFUN([gl_PREREQ_GETDTABLESIZE], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/getrandom.m4������������������������������������������������������������������������0000644�0000000�0000000�00000004125�14226564452�012662� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getrandom.m4 serial 8 dnl Copyright 2020-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_FUNC_GETRANDOM], [ AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([getrandom]) if test "$ac_cv_func_getrandom" != yes; then HAVE_GETRANDOM=0 else dnl On Solaris 11.4 the return type is 'int', not 'ssize_t'. AC_CACHE_CHECK([whether getrandom is compatible with its GNU+BSD signature], [gl_cv_func_getrandom_ok], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* Additional includes are needed before <sys/random.h> on uClibc and Mac OS X. */ #include <sys/types.h> #include <stdlib.h> #include <sys/random.h> ssize_t getrandom (void *, size_t, unsigned int); ]], [[]]) ], [gl_cv_func_getrandom_ok=yes], [gl_cv_func_getrandom_ok=no]) ]) if test $gl_cv_func_getrandom_ok = no; then REPLACE_GETRANDOM=1 fi fi case "$host_os" in mingw*) AC_CHECK_HEADERS([bcrypt.h], [], [], [[#include <windows.h> ]]) AC_CACHE_CHECK([whether the bcrypt library is guaranteed to be present], [gl_cv_lib_assume_bcrypt], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <windows.h>]], [[#if !(_WIN32_WINNT >= _WIN32_WINNT_WIN7) cannot assume it #endif ]]) ], [gl_cv_lib_assume_bcrypt=yes], [gl_cv_lib_assume_bcrypt=no]) ]) if test $gl_cv_lib_assume_bcrypt = yes; then AC_DEFINE([HAVE_LIB_BCRYPT], [1], [Define to 1 if the bcrypt library is guaranteed to be present.]) LIB_GETRANDOM='-lbcrypt' else LIB_GETRANDOM='-ladvapi32' fi ;; *) LIB_GETRANDOM= ;; esac AC_SUBST([LIB_GETRANDOM]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/stpcpy.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000001307�14226564447�012227� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stpcpy.m4 serial 9 dnl Copyright (C) 2002, 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STPCPY], [ dnl Persuade glibc <string.h> to declare stpcpy(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl The stpcpy() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([stpcpy]) if test $ac_cv_func_stpcpy = no; then HAVE_STPCPY=0 fi ]) # Prerequisites of lib/stpcpy.c. AC_DEFUN([gl_PREREQ_STPCPY], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/isnand.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000005341�14226564452�012157� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnand.m4 serial 12 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check how to get or define isnand(). AC_DEFUN([gl_FUNC_ISNAND], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) ISNAND_LIBM= gl_HAVE_ISNAND_NO_LIBM if test $gl_cv_func_isnand_no_libm = no; then gl_HAVE_ISNAND_IN_LIBM if test $gl_cv_func_isnand_in_libm = yes; then ISNAND_LIBM=-lm fi fi dnl The variable gl_func_isnand set here is used by isnan.m4. if test $gl_cv_func_isnand_no_libm = yes \ || test $gl_cv_func_isnand_in_libm = yes; then gl_func_isnand=yes else gl_func_isnand=no HAVE_ISNAND=0 fi AC_SUBST([ISNAND_LIBM]) ]) dnl Check how to get or define isnand() without linking with libm. AC_DEFUN([gl_FUNC_ISNAND_NO_LIBM], [ gl_HAVE_ISNAND_NO_LIBM gl_func_isnand_no_libm=$gl_cv_func_isnand_no_libm if test $gl_cv_func_isnand_no_libm = yes; then AC_DEFINE([HAVE_ISNAND_IN_LIBC], [1], [Define if the isnan(double) function is available in libc.]) fi ]) dnl Prerequisites of replacement isnand definition. It does not need -lm. AC_DEFUN([gl_PREREQ_ISNAND], [ AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) ]) dnl Test whether isnand() can be used with libm. AC_DEFUN([gl_HAVE_ISNAND_IN_LIBM], [ AC_CACHE_CHECK([whether isnan(double) can be used with libm], [gl_cv_func_isnand_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) #elif defined isnan # undef isnand # define isnand(x) isnan ((double)(x)) #endif double x;]], [[return isnand (x);]])], [gl_cv_func_isnand_in_libm=yes], [gl_cv_func_isnand_in_libm=no]) LIBS="$save_LIBS" ]) ]) AC_DEFUN([gl_HAVE_ISNAND_NO_LIBM], [ AC_CACHE_CHECK([whether isnan(double) can be used without linking with libm], [gl_cv_func_isnand_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnand # define isnand(x) __builtin_isnan ((double)(x)) #else # undef isnand # define isnand(x) isnan ((double)(x)) #endif double x;]], [[return isnand (x);]])], [gl_cv_func_isnand_no_libm=yes], [gl_cv_func_isnand_no_libm=no]) ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/lstat.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000005441�14226564452�012033� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 33 # Copyright (C) 1997-2001, 2003-2022 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. AC_DEFUN([gl_FUNC_LSTAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl If lstat does not exist, the replacement <sys/stat.h> does dnl "#define lstat stat", and lstat.c is a no-op. AC_CHECK_FUNCS_ONCE([lstat]) if test $ac_cv_func_lstat = yes; then AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) case $host_os,$gl_cv_func_lstat_dereferences_slashed_symlink in solaris* | *no) REPLACE_LSTAT=1 ;; esac else HAVE_LSTAT=0 fi ]) # Prerequisites of lib/lstat.c. AC_DEFUN([gl_PREREQ_LSTAT], [:]) AC_DEFUN([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK], [ dnl We don't use AC_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK any more, because it dnl is no longer maintained in Autoconf and because it invokes AC_LIBOBJ. AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether lstat correctly handles trailing slash], [gl_cv_func_lstat_dereferences_slashed_symlink], [rm -f conftest.sym conftest.file echo >conftest.file AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[struct stat sbuf; if (symlink ("conftest.file", "conftest.sym") != 0) return 1; /* Linux will dereference the symlink and fail, as required by POSIX. That is better in the sense that it means we will not have to compile and use the lstat wrapper. */ return lstat ("conftest.sym/", &sbuf) == 0; ]])], [gl_cv_func_lstat_dereferences_slashed_symlink=yes], [gl_cv_func_lstat_dereferences_slashed_symlink=no], [case "$host_os" in linux-* | linux) # Guess yes on Linux systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; *-gnu* | gnu*) # Guess yes on glibc systems. gl_cv_func_lstat_dereferences_slashed_symlink="guessing yes" ;; mingw*) # Guess no on native Windows. gl_cv_func_lstat_dereferences_slashed_symlink="guessing no" ;; *) # If we don't know, obey --enable-cross-guesses. gl_cv_func_lstat_dereferences_slashed_symlink="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.sym conftest.file ]) case "$gl_cv_func_lstat_dereferences_slashed_symlink" in *yes) AC_DEFINE_UNQUOTED([LSTAT_FOLLOWS_SLASHED_SYMLINK], [1], [Define to 1 if 'lstat' dereferences a symlink specified with a trailing slash.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/malloc.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000013520�14226564452�012150� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# malloc.m4 serial 28 dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # This is adapted with modifications from upstream Autoconf here: # https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n949 AC_DEFUN([_AC_FUNC_MALLOC_IF], [ AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CACHE_CHECK([whether malloc (0) returns nonnull], [ac_cv_func_malloc_0_nonnull], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[void *p = malloc (0); int result = !p; free (p); return result;]]) ], [ac_cv_func_malloc_0_nonnull=yes], [ac_cv_func_malloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_malloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_malloc_0_nonnull="$gl_cross_guess_normal" ;; esac ]) ]) AS_CASE([$ac_cv_func_malloc_0_nonnull], [*yes], [$1], [$2]) ])# _AC_FUNC_MALLOC_IF # gl_FUNC_MALLOC_GNU # ------------------ # Replace malloc if it is not compatible with GNU libc. AC_DEFUN([gl_FUNC_MALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) REPLACE_MALLOC_FOR_MALLOC_GNU="$REPLACE_MALLOC_FOR_MALLOC_POSIX" if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 0; then _AC_FUNC_MALLOC_IF([], [REPLACE_MALLOC_FOR_MALLOC_GNU=1]) fi ]) # gl_FUNC_MALLOC_PTRDIFF # ---------------------- # Test whether malloc (N) reliably fails when N exceeds PTRDIFF_MAX, # and replace malloc otherwise. AC_DEFUN([gl_FUNC_MALLOC_PTRDIFF], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF]) test "$gl_cv_malloc_ptrdiff" = yes || REPLACE_MALLOC_FOR_MALLOC_POSIX=1 ]) # Test whether malloc, realloc, calloc refuse to create objects # larger than what can be expressed in ptrdiff_t. # Set gl_cv_func_malloc_gnu to yes or no accordingly. AC_DEFUN([gl_CHECK_MALLOC_PTRDIFF], [ AC_CACHE_CHECK([whether malloc is ptrdiff_t safe], [gl_cv_malloc_ptrdiff], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdint.h> ]], [[/* 64-bit ptrdiff_t is so wide that no practical platform can exceed it. */ #define WIDE_PTRDIFF (PTRDIFF_MAX >> 31 >> 31 != 0) /* On rare machines where size_t fits in ptrdiff_t there is no problem. */ #define NARROW_SIZE (SIZE_MAX <= PTRDIFF_MAX) /* glibc 2.30 and later malloc refuses to exceed ptrdiff_t bounds even on 32-bit platforms. We don't know which non-glibc systems are safe. */ #define KNOWN_SAFE (2 < __GLIBC__ + (30 <= __GLIBC_MINOR__)) #if WIDE_PTRDIFF || NARROW_SIZE || KNOWN_SAFE return 0; #else #error "malloc might not be ptrdiff_t safe" syntax error #endif ]])], [gl_cv_malloc_ptrdiff=yes], [gl_cv_malloc_ptrdiff=no]) ]) ]) # gl_FUNC_MALLOC_POSIX # -------------------- # Test whether 'malloc' is POSIX compliant (sets errno to ENOMEM when it # fails, and doesn't mess up with ptrdiff_t overflow), and replace # malloc if it is not. AC_DEFUN([gl_FUNC_MALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_PTRDIFF]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test "$gl_cv_func_malloc_posix" = yes; then AC_DEFINE([HAVE_MALLOC_POSIX], [1], [Define if malloc, realloc, and calloc set errno on allocation failure.]) else REPLACE_MALLOC_FOR_MALLOC_POSIX=1 fi ]) # Test whether malloc, realloc, calloc set errno to ENOMEM on failure. # Set gl_cv_func_malloc_posix to yes or no accordingly. AC_DEFUN([gl_CHECK_MALLOC_POSIX], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether malloc, realloc, calloc set errno on failure], [gl_cv_func_malloc_posix], [ dnl It is too dangerous to try to allocate a large amount of memory: dnl some systems go to their knees when you do that. So assume that dnl all Unix implementations of the function set errno on failure, dnl except on those platforms where we have seen 'test-malloc-gnu', dnl 'test-realloc-gnu', 'test-calloc-gnu' fail. case "$host_os" in mingw*) gl_cv_func_malloc_posix=no ;; irix* | solaris*) dnl On IRIX 6.5, the three functions return NULL with errno unset dnl when the argument is larger than PTRDIFF_MAX. dnl On Solaris 11.3, the three functions return NULL with errno set dnl to EAGAIN, not ENOMEM, when the argument is larger than dnl PTRDIFF_MAX. dnl Here is a test program: m4_divert_push([KILL]) #include <errno.h> #include <stdio.h> #include <stdlib.h> #define ptrdiff_t long #ifndef PTRDIFF_MAX # define PTRDIFF_MAX ((ptrdiff_t) ((1UL << (8 * sizeof (ptrdiff_t) - 1)) - 1)) #endif int main () { void *p; fprintf (stderr, "PTRDIFF_MAX = %lu\n", (unsigned long) PTRDIFF_MAX); errno = 0; p = malloc ((unsigned long) PTRDIFF_MAX + 1); fprintf (stderr, "p=%p errno=%d\n", p, errno); errno = 0; p = calloc (PTRDIFF_MAX / 2 + 1, 2); fprintf (stderr, "p=%p errno=%d\n", p, errno); errno = 0; p = realloc (NULL, (unsigned long) PTRDIFF_MAX + 1); fprintf (stderr, "p=%p errno=%d\n", p, errno); return 0; } m4_divert_pop([KILL]) gl_cv_func_malloc_posix=no ;; *) gl_cv_func_malloc_posix=yes ;; esac ]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/getdelim.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000005434�14226564452�012500� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getdelim.m4 serial 15 dnl Copyright (C) 2005-2007, 2009-2022 Free Software Foundation, Inc. dnl dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.59]) AC_DEFUN([gl_FUNC_GETDELIM], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <stdio.h> to declare getdelim(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([getdelim]) AC_CHECK_FUNCS_ONCE([getdelim]) if test $ac_cv_func_getdelim = yes; then HAVE_GETDELIM=1 dnl Found it in some library. Verify that it works. AC_CACHE_CHECK([for working getdelim function], [gl_cv_func_working_getdelim], [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data AC_RUN_IFELSE([AC_LANG_SOURCE([[ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getdelim (&line, &siz, '\n', in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getdelim (&line, &siz, '\n', in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } ]])], [gl_cv_func_working_getdelim=yes], [gl_cv_func_working_getdelim=no], [dnl We're cross compiling. dnl Guess it works on glibc2 systems and musl systems. AC_EGREP_CPP([Lucky GNU user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [gl_cv_func_working_getdelim="guessing yes"], [case "$host_os" in *-musl*) gl_cv_func_working_getdelim="guessing yes" ;; *) gl_cv_func_working_getdelim="$gl_cross_guess_normal" ;; esac ]) ]) ]) case "$gl_cv_func_working_getdelim" in *yes) ;; *) REPLACE_GETDELIM=1 ;; esac else HAVE_GETDELIM=0 fi if test $ac_cv_have_decl_getdelim = no; then HAVE_DECL_GETDELIM=0 fi ]) # Prerequisites of lib/getdelim.c. AC_DEFUN([gl_PREREQ_GETDELIM], [ AC_CHECK_FUNCS([flockfile funlockfile]) AC_CHECK_DECLS([getc_unlocked]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/lseek.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000004575�14226564452�012016� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lseek.m4 serial 12 dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LSEEK], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_PROG_CC]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether lseek detects pipes], [gl_cv_func_lseek_pipe], [case "$host_os" in mingw*) dnl Native Windows. dnl The result of lseek (fd, (off_t)0, SEEK_CUR) or dnl SetFilePointer(handle, 0, NULL, FILE_CURRENT) dnl for a pipe depends on the environment: In a Cygwin 1.5 dnl environment it succeeds (wrong); in a Cygwin 1.7 environment dnl it fails with a wrong errno value. gl_cv_func_lseek_pipe=no ;; *) if test $cross_compiling = no; then AC_LINK_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> /* for off_t */ #include <stdio.h> /* for SEEK_CUR */ #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> #endif ]GL_MDA_DEFINES], [[ /* Exit with success only if stdin is seekable. */ return lseek (0, (off_t)0, SEEK_CUR) < 0; ]])], [if test -s conftest$ac_exeext \ && ./conftest$ac_exeext < conftest.$ac_ext \ && test 1 = "`echo hi \ | { ./conftest$ac_exeext; echo $?; cat >/dev/null; }`"; then gl_cv_func_lseek_pipe=yes else gl_cv_func_lseek_pipe=no fi ], [gl_cv_func_lseek_pipe=no]) else AC_COMPILE_IFELSE( [AC_LANG_SOURCE([[ #if defined __BEOS__ /* BeOS mistakenly return 0 when trying to seek on pipes. */ Choke me. #endif]])], [gl_cv_func_lseek_pipe=yes], [gl_cv_func_lseek_pipe=no]) fi ;; esac ]) if test "$gl_cv_func_lseek_pipe" = no; then REPLACE_LSEEK=1 AC_DEFINE([LSEEK_PIPE_BROKEN], [1], [Define to 1 if lseek does not detect pipes.]) fi AC_REQUIRE([gl_SYS_TYPES_H]) if test $WINDOWS_64_BIT_OFF_T = 1; then REPLACE_LSEEK=1 fi dnl macOS SEEK_DATA is incompatible with other platforms. case $host_os in darwin*) REPLACE_LSEEK=1;; esac ]) �����������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/asm-underscore.m4�������������������������������������������������������������������0000644�0000000�0000000�00000005270�14226564451�013632� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# asm-underscore.m4 serial 5 dnl Copyright (C) 2010-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. Based on as-underscore.m4 in GNU clisp. # gl_ASM_SYMBOL_PREFIX # Tests for the prefix of C symbols at the assembly language level and the # linker level. This prefix is either an underscore or empty. Defines the # C macro USER_LABEL_PREFIX to this prefix, and sets ASM_SYMBOL_PREFIX to # a stringified variant of this prefix. AC_DEFUN([gl_ASM_SYMBOL_PREFIX], [ AC_REQUIRE([AC_PROG_EGREP]) dnl We don't use GCC's __USER_LABEL_PREFIX__ here, because dnl 1. It works only for GCC. dnl 2. It is incorrectly defined on some platforms, in some GCC versions. AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK( [whether C symbols are prefixed with underscore at the linker level], [gl_cv_prog_as_underscore], [cat > conftest.c <<EOF #ifdef __cplusplus extern "C" int foo (void); #endif int foo(void) { return 0; } EOF # Look for the assembly language name in the .s file. AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 if LC_ALL=C $EGREP '(^|[[^a-zA-Z0-9_]])_foo([[^a-zA-Z0-9_]]|$)' conftest.$gl_asmext >/dev/null; then gl_cv_prog_as_underscore=yes else gl_cv_prog_as_underscore=no fi rm -f conftest* ]) if test $gl_cv_prog_as_underscore = yes; then USER_LABEL_PREFIX=_ else USER_LABEL_PREFIX= fi AC_DEFINE_UNQUOTED([USER_LABEL_PREFIX], [$USER_LABEL_PREFIX], [Define to the prefix of C symbols at the assembler and linker level, either an underscore or empty.]) ASM_SYMBOL_PREFIX='"'${USER_LABEL_PREFIX}'"' AC_SUBST([ASM_SYMBOL_PREFIX]) ]) # gl_C_ASM # Determines how to produce an assembly language file from C source code. # Sets the variables: # gl_asmext - the extension of assembly language output, # gl_c_asm_opt - the C compiler option that produces assembly language output. AC_DEFUN([gl_C_ASM], [ AC_EGREP_CPP([MicrosoftCompiler], [ #ifdef _MSC_VER MicrosoftCompiler #endif ], [dnl Microsoft's 'cl' and 'clang-cl' produce an .asm file, whereas 'clang' dnl produces a .s file. Need to distinguish 'clang' and 'clang-cl'. rm -f conftest* echo 'int dummy;' > conftest.c AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS -c conftest.c) >/dev/null 2>&1 if test -f conftest.o; then gl_asmext='s' gl_c_asm_opt='-S' else gl_asmext='asm' gl_c_asm_opt='-c -Fa' fi rm -f conftest* ], [gl_asmext='s' gl_c_asm_opt='-S' ]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/d-ino.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000004201�14226564447�011707� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 20 dnl From Jim Meyering. dnl dnl Check whether struct dirent has a member named d_ino. dnl # Copyright (C) 1997, 1999-2001, 2003-2004, 2006-2007, 2009-2022 Free Software # Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO], [AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([for d_ino member in directory struct], [gl_cv_struct_dirent_d_ino], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/stat.h> #include <dirent.h> ]], [[DIR *dp = opendir ("."); struct dirent *e; struct stat st; if (! dp) return 1; e = readdir (dp); if (! e) { closedir (dp); return 2; } if (lstat (e->d_name, &st) != 0) { closedir (dp); return 3; } if (e->d_ino != st.st_ino) { closedir (dp); return 4; } closedir (dp); return 0; ]])], [gl_cv_struct_dirent_d_ino=yes], [gl_cv_struct_dirent_d_ino=no], [case "$host_os" in # Guess yes on glibc systems with Linux kernel. linux*-gnu*) gl_cv_struct_dirent_d_ino="guessing yes" ;; # Guess yes on musl systems with Linux kernel. linux*-musl*) gl_cv_struct_dirent_d_ino="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_struct_dirent_d_ino="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_struct_dirent_d_ino="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_struct_dirent_d_ino" in *yes) AC_DEFINE([D_INO_IN_DIRENT], [1], [Define if struct dirent has a member d_ino that actually works.]) ;; esac ] ) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/unlocked-io.m4����������������������������������������������������������������������0000644�0000000�0000000�00000002470�14226564453�013115� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unlocked-io.m4 serial 16 # Copyright (C) 1998-2006, 2009-2022 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. dnl dnl See if the glibc *_unlocked I/O macros or functions are available. dnl Use only those *_unlocked macros or functions that are declared dnl (because some of them were declared in Solaris 2.5.1 but were removed dnl in Solaris 2.6, whereas we want binaries built on Solaris 2.5.1 to run dnl on Solaris 2.6). AC_DEFUN([gl_FUNC_GLIBC_UNLOCKED_IO], [ dnl Persuade glibc and Solaris <stdio.h> to declare dnl fgets_unlocked(), fputs_unlocked() etc. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([clearerr_unlocked]) AC_CHECK_DECLS_ONCE([feof_unlocked]) AC_CHECK_DECLS_ONCE([ferror_unlocked]) AC_CHECK_DECLS_ONCE([fflush_unlocked]) AC_CHECK_DECLS_ONCE([fgets_unlocked]) AC_CHECK_DECLS_ONCE([fputc_unlocked]) AC_CHECK_DECLS_ONCE([fputs_unlocked]) AC_CHECK_DECLS_ONCE([fread_unlocked]) AC_CHECK_DECLS_ONCE([fwrite_unlocked]) AC_CHECK_DECLS_ONCE([getc_unlocked]) AC_CHECK_DECLS_ONCE([getchar_unlocked]) AC_CHECK_DECLS_ONCE([putc_unlocked]) AC_CHECK_DECLS_ONCE([putchar_unlocked]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/float_h.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000005435�14226564451�012322� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# float_h.m4 serial 13 dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FLOAT_H], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) GL_GENERATE_FLOAT_H=false REPLACE_FLOAT_LDBL=0 case "$host_os" in aix* | beos* | openbsd* | mirbsd* | irix*) GL_GENERATE_FLOAT_H=true ;; freebsd* | dragonfly*) case "$host_cpu" in changequote(,)dnl i[34567]86 ) changequote([,])dnl GL_GENERATE_FLOAT_H=true ;; x86_64 ) # On x86_64 systems, the C compiler may still be generating # 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __x86_64__ || defined __amd64__ int ok; #else error fail #endif ]])], [], [GL_GENERATE_FLOAT_H=true]) ;; esac ;; linux*) case "$host_cpu" in powerpc*) GL_GENERATE_FLOAT_H=true ;; esac ;; esac case "$host_os" in aix* | freebsd* | dragonfly* | linux*) if $GL_GENERATE_FLOAT_H; then REPLACE_FLOAT_LDBL=1 fi ;; esac dnl Test against glibc-2.7 Linux/SPARC64 bug. REPLACE_ITOLD=0 AC_CACHE_CHECK([whether conversion from 'int' to 'long double' works], [gl_cv_func_itold_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ int i = -1; volatile long double ld; int main () { ld += i * 1.0L; if (ld > 0) return 1; return 0; }]])], [gl_cv_func_itold_works=yes], [gl_cv_func_itold_works=no], [case "$host" in sparc*-*-linux*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_func_itold_works="guessing no"], [gl_cv_func_itold_works="guessing yes"]) ;; # Guess yes on native Windows. mingw*) gl_cv_func_itold_works="guessing yes" ;; *) gl_cv_func_itold_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_itold_works" in *no) REPLACE_ITOLD=1 dnl We add the workaround to <float.h> but also to <math.h>, dnl to increase the chances that the fix function gets pulled in. GL_GENERATE_FLOAT_H=true ;; esac if $GL_GENERATE_FLOAT_H; then gl_NEXT_HEADERS([float.h]) fi AC_SUBST([REPLACE_ITOLD]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/selinux-selinux-h.m4����������������������������������������������������������������0000644�0000000�0000000�00000004775�14226564452�014316� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 -*- Autoconf -*- # Copyright (C) 2006-2007, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # From Jim Meyering # Provide <selinux/selinux.h>, if necessary. # If it is already present, provide wrapper functions to guard against # misbehavior from getfilecon, lgetfilecon, and fgetfilecon. AC_DEFUN([gl_HEADERS_SELINUX_SELINUX_H], [ AC_REQUIRE([gl_LIBSELINUX]) if test "$with_selinux" != no; then AC_CHECK_HEADERS([selinux/selinux.h]) if test "$ac_cv_header_selinux_selinux_h" = yes; then # We do have <selinux/selinux.h>, so do compile getfilecon.c # and arrange to use its wrappers. gl_CHECK_NEXT_HEADERS([selinux/selinux.h]) AC_DEFINE([getfilecon], [rpl_getfilecon], [Always use our getfilecon wrapper.]) AC_DEFINE([lgetfilecon], [rpl_lgetfilecon], [Always use our lgetfilecon wrapper.]) AC_DEFINE([fgetfilecon], [rpl_fgetfilecon], [Always use our fgetfilecon wrapper.]) fi case "$ac_cv_search_setfilecon:$ac_cv_header_selinux_selinux_h" in no:*) # already warned ;; *:no) AC_MSG_WARN([libselinux was found but selinux/selinux.h is missing.]) AC_MSG_WARN([AC_PACKAGE_NAME will be compiled without SELinux support.]) esac else # Do as if <selinux/selinux.h> does not exist, even if # AC_CHECK_HEADERS_ONCE has already determined that it exists. AC_DEFINE([HAVE_SELINUX_SELINUX_H], [0]) fi ]) AC_DEFUN([gl_LIBSELINUX], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_CANONICAL_BUILD]) AC_ARG_WITH([selinux], AS_HELP_STRING([--without-selinux], [do not use SELinux, even on systems with SELinux]), [], [with_selinux=maybe]) LIB_SELINUX= if test "$with_selinux" != no; then gl_save_LIBS=$LIBS AC_SEARCH_LIBS([setfilecon], [selinux], [test "$ac_cv_search_setfilecon" = "none required" || LIB_SELINUX=$ac_cv_search_setfilecon]) LIBS=$gl_save_LIBS fi AC_SUBST([LIB_SELINUX]) # Warn if SELinux is found but libselinux is absent; if test "$ac_cv_search_setfilecon" = no; then if test "$host" = "$build" && test -d /selinux; then AC_MSG_WARN([This system supports SELinux but libselinux is missing.]) AC_MSG_WARN([AC_PACKAGE_NAME will be compiled without SELinux support.]) fi with_selinux=no fi ]) ���recutils-1.9/m4/exponentd.m4������������������������������������������������������������������������0000644�0000000�0000000�00000007552�14226564451�012714� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exponentd.m4 serial 3 dnl Copyright (C) 2007-2008, 2010-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_DOUBLE_EXPONENT_LOCATION], [ AC_CACHE_CHECK([where to find the exponent in a 'double'], [gl_cv_cc_double_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { double value; unsigned int word[NWORDS]; } memory_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (double x) { memory_double m; size_t i; /* Clear it first, in case sizeof (double) < sizeof (memory_double). */ memset (&m, 0, sizeof (memory_double)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25); add_to_ored_words (0.5); add_to_ored_words (1.0); add_to_ored_words (2.0); add_to_ored_words (4.0); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_double_expbit0=`cat conftest.out`], [gl_cv_cc_double_expbit0="unknown"], [ dnl On ARM, there are two 'double' floating-point formats, used by dnl different sets of instructions: The older FPA instructions assume dnl that they are stored in big-endian word order, while the words dnl (like integer types) are stored in little-endian byte order. dnl The newer VFP instructions assume little-endian order dnl consistently. AC_EGREP_CPP([mixed_endianness], [ #if defined arm || defined __arm || defined __arm__ mixed_endianness #endif ], [gl_cv_cc_double_expbit0="unknown"], [ pushdef([AC_MSG_CHECKING],[:])dnl pushdef([AC_MSG_RESULT],[:])dnl pushdef([AC_MSG_RESULT_UNQUOTED],[:])dnl AC_C_BIGENDIAN( [gl_cv_cc_double_expbit0="word 0 bit 20"], [gl_cv_cc_double_expbit0="word 1 bit 20"], [gl_cv_cc_double_expbit0="unknown"]) popdef([AC_MSG_RESULT_UNQUOTED])dnl popdef([AC_MSG_RESULT])dnl popdef([AC_MSG_CHECKING])dnl ]) ]) rm -f conftest.out ]) case "$gl_cv_cc_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_double_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([DBL_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'double'.]) AC_DEFINE_UNQUOTED([DBL_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'double'.]) ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fstatat.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000003752�14226564447�012361� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fstatat.m4 serial 4 dnl Copyright (C) 2004-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. # If we have the fstatat function, and it has the bug (in AIX 7.1) # that it does not fill in st_size correctly, use the replacement function. AC_DEFUN([gl_FUNC_FSTATAT], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([fstatat]) if test $ac_cv_func_fstatat = no; then HAVE_FSTATAT=0 else dnl Test for an AIX 7.1 bug; see dnl <https://lists.gnu.org/r/bug-tar/2011-09/msg00015.html>. AC_CACHE_CHECK([whether fstatat (..., 0) works], [gl_cv_func_fstatat_zero_flag], [AC_RUN_IFELSE( [AC_LANG_SOURCE( [[ #include <fcntl.h> #include <sys/stat.h> int main (void) { struct stat a; return fstatat (AT_FDCWD, ".", &a, 0) != 0; } ]])], [gl_cv_func_fstatat_zero_flag=yes], [gl_cv_func_fstatat_zero_flag=no], [case "$host_os" in aix*) gl_cv_func_fstatat_zero_flag="guessing no";; *) gl_cv_func_fstatat_zero_flag="guessing yes";; esac ]) ]) case $gl_cv_func_fstatat_zero_flag+$gl_cv_func_lstat_dereferences_slashed_symlink in *yes+*yes) ;; *) REPLACE_FSTATAT=1 ;; esac case $host_os in solaris*) REPLACE_FSTATAT=1 ;; esac case $REPLACE_FSTATAT,$gl_cv_func_fstatat_zero_flag in 1,*yes) AC_DEFINE([HAVE_WORKING_FSTATAT_ZERO_FLAG], [1], [Define to 1 if fstatat (..., 0) works. For example, it does not work in AIX 7.1.]) ;; esac fi ]) ����������������������recutils-1.9/m4/mbtowc.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000001063�14226564452�012173� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbtowc.m4 serial 3 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBTOWC], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_FUNCS([mbtowc]) if test $ac_cv_func_mbtowc = no; then HAVE_MBTOWC=0 else if false; then REPLACE_MBTOWC=1 fi fi ]) # Prerequisites of lib/mbtowc.c. AC_DEFUN([gl_PREREQ_MBTOWC], [ : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/read.m4�����������������������������������������������������������������������������0000644�0000000�0000000�00000001610�14226564452�011611� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# read.m4 serial 5 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_READ], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_READ=1 fi ]) dnl This ifdef is just an optimization, to avoid performing a configure dnl check whose result is not used. It does not make the test of dnl GNULIB_UNISTD_H_NONBLOCKING or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_READ=1 fi ]) ]) # Prerequisites of lib/read.c. AC_DEFUN([gl_PREREQ_READ], [:]) ������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/open.m4�����������������������������������������������������������������������������0000644�0000000�0000000�00000002765�14226564452�011653� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# open.m4 serial 15 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_OPEN], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PREPROC_O_CLOEXEC]) case "$host_os" in mingw* | pw*) REPLACE_OPEN=1 ;; *) dnl open("foo/") should not create a file when the file name has a dnl trailing slash. FreeBSD only has the problem on symlinks. AC_CHECK_FUNCS_ONCE([lstat]) if test "$gl_cv_macro_O_CLOEXEC" != yes; then REPLACE_OPEN=1 fi gl_OPEN_TRAILING_SLASH_BUG case "$gl_cv_func_open_slash" in *no) REPLACE_OPEN=1 ;; esac ;; esac dnl Replace open() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ if test $REPLACE_OPEN = 0; then gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_OPEN=1 fi fi ]) dnl Replace open() for supporting the gnulib-defined O_NONBLOCK flag. m4_ifdef([gl_NONBLOCKING_IO], [ if test $REPLACE_OPEN = 0; then gl_NONBLOCKING_IO if test $gl_cv_have_open_O_NONBLOCK != yes; then REPLACE_OPEN=1 fi fi ]) ]) # Prerequisites of lib/open.c. AC_DEFUN([gl_PREREQ_OPEN], [ AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) : ]) �����������recutils-1.9/m4/setenv.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000011570�14226564452�012210� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# setenv.m4 serial 30 dnl Copyright (C) 2001-2004, 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SETENV], [ AC_REQUIRE([gl_FUNC_SETENV_SEPARATE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles if test $ac_cv_func_setenv = no; then HAVE_SETENV=0 else AC_CACHE_CHECK([whether setenv validates arguments], [gl_cv_func_setenv_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stdlib.h> #include <errno.h> #include <string.h> ]], [[ int result = 0; { if (setenv ("", "", 0) != -1) result |= 1; else if (errno != EINVAL) result |= 2; } { if (setenv ("a", "=", 1) != 0) result |= 4; else if (strcmp (getenv ("a"), "=") != 0) result |= 8; } return result; ]])], [gl_cv_func_setenv_works=yes], [gl_cv_func_setenv_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_setenv_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_setenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setenv_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_setenv_works" in *yes) ;; *) REPLACE_SETENV=1 ;; esac fi ]) # Like gl_FUNC_SETENV, except prepare for separate compilation # (no REPLACE_SETENV, no AC_LIBOBJ). AC_DEFUN([gl_FUNC_SETENV_SEPARATE], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([setenv]) if test $ac_cv_have_decl_setenv = no; then HAVE_DECL_SETENV=0 fi AC_CHECK_FUNCS_ONCE([setenv]) gl_PREREQ_SETENV ]) AC_DEFUN([gl_FUNC_UNSETENV], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([unsetenv]) if test $ac_cv_have_decl_unsetenv = no; then HAVE_DECL_UNSETENV=0 fi AC_CHECK_FUNCS([unsetenv]) if test $ac_cv_func_unsetenv = no; then HAVE_UNSETENV=0 else HAVE_UNSETENV=1 dnl Some BSDs return void, failing to do error checking. AC_CACHE_CHECK([for unsetenv() return type], [gt_cv_func_unsetenv_ret], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #undef _BSD #define _BSD 1 /* unhide unsetenv declaration in OSF/1 5.1 <stdlib.h> */ #include <stdlib.h> extern #ifdef __cplusplus "C" #endif int unsetenv (const char *name); ]], [[]])], [gt_cv_func_unsetenv_ret='int'], [gt_cv_func_unsetenv_ret='void'])]) if test $gt_cv_func_unsetenv_ret = 'void'; then AC_DEFINE([VOID_UNSETENV], [1], [Define to 1 if unsetenv returns void instead of int.]) REPLACE_UNSETENV=1 fi dnl Solaris 10 unsetenv does not remove all copies of a name. dnl Haiku alpha 2 unsetenv gets confused by assignment to environ. dnl OpenBSD 4.7 unsetenv("") does not fail. AC_CACHE_CHECK([whether unsetenv obeys POSIX], [gl_cv_func_unsetenv_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <stdlib.h> #include <errno.h> extern char **environ; ]GL_MDA_DEFINES], [[ char entry1[] = "a=1"; char entry2[] = "b=2"; char *env[] = { entry1, entry2, NULL }; if (putenv ((char *) "a=1")) return 1; if (putenv (entry2)) return 2; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 3; if (!unsetenv ("") || errno != EINVAL) return 4; entry2[0] = 'b'; environ = env; if (!getenv ("a")) return 5; entry2[0] = 'a'; unsetenv ("a"); if (getenv ("a")) return 6; ]])], [gl_cv_func_unsetenv_works=yes], [gl_cv_func_unsetenv_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_unsetenv_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_unsetenv_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_unsetenv_works" in *yes) ;; *) REPLACE_UNSETENV=1 ;; esac fi ]) # Prerequisites of lib/setenv.c. AC_DEFUN([gl_PREREQ_SETENV], [ AC_REQUIRE([AC_FUNC_ALLOCA]) AC_REQUIRE([gl_ENVIRON]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_HEADERS([search.h]) AC_CHECK_FUNCS([tsearch]) ]) # Prerequisites of lib/unsetenv.c. AC_DEFUN([gl_PREREQ_UNSETENV], [ AC_REQUIRE([gl_ENVIRON]) AC_CHECK_HEADERS_ONCE([unistd.h]) ]) ����������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/write.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000002030�14226564453�012026� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# write.m4 serial 6 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WRITE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_WRITE=1 fi ]) dnl This ifdef is just an optimization, to avoid performing a configure dnl check whose result is not used. It does not make the test of dnl GNULIB_UNISTD_H_SIGPIPE or GNULIB_SIGPIPE redundant. m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_WRITE=1 fi ]) m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_WRITE=1 fi ]) ]) # Prerequisites of lib/write.c. AC_DEFUN([gl_PREREQ_WRITE], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/autobuild.m4������������������������������������������������������������������������0000644�0000000�0000000�00000002007�14226564451�012666� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# autobuild.m4 serial 8 dnl Copyright (C) 2004, 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson # Usage: AB_INIT([MODE]). AC_DEFUN([AB_INIT], [ AC_REQUIRE([AC_CANONICAL_BUILD]) AC_REQUIRE([AC_CANONICAL_HOST]) if test -z "$AB_PACKAGE"; then AB_PACKAGE=${PACKAGE_NAME:-$PACKAGE} fi AC_MSG_NOTICE([autobuild project... $AB_PACKAGE]) if test -z "$AB_VERSION"; then AB_VERSION=${PACKAGE_VERSION:-$VERSION} fi AC_MSG_NOTICE([autobuild revision... $AB_VERSION]) hostname=`hostname` if test "$hostname"; then AC_MSG_NOTICE([autobuild hostname... $hostname]) fi m4_if([$1],[],,[AC_MSG_NOTICE([autobuild mode... $1])]) date=`TZ=UTC0 date +%Y%m%dT%H%M%SZ` if test "$?" != 0; then date=`date` fi if test "$date"; then AC_MSG_NOTICE([autobuild timestamp... $date]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/sys_wait_h.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000003516�14226564452�013056� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_wait_h.m4 serial 9 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_WAIT_H], [ AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS]) dnl <sys/wait.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/wait.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <sys/wait.h>]], [waitpid]) ]) # gl_SYS_WAIT_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_WAIT_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_WAIT_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_WAIT_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_WAIT_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WAITPID]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_WAIT_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_WAIT_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_WAIT_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/stdint.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000042731�14226564452�012214� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdint.m4 serial 61 dnl Copyright (C) 2001-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert and Bruno Haible. dnl Test whether <stdint.h> is supported or must be substituted. AC_PREREQ([2.61]) AC_DEFUN_ONCE([gl_STDINT_H], [ AC_PREREQ([2.59])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_LIMITS_H]) AC_REQUIRE([gt_TYPE_WINT_T]) dnl For backward compatibility. Some packages may still be testing these dnl macros. AC_DEFINE([HAVE_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'long long int'.]) AC_DEFINE([HAVE_UNSIGNED_LONG_LONG_INT], [1], [Define to 1 if the system has the type 'unsigned long long int'.]) dnl Check for <wchar.h>, in the same way as gl_WCHAR_H does. AC_CHECK_HEADERS_ONCE([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) dnl Check for <inttypes.h>. AC_CHECK_HEADERS_ONCE([inttypes.h]) if test $ac_cv_header_inttypes_h = yes; then HAVE_INTTYPES_H=1 else HAVE_INTTYPES_H=0 fi AC_SUBST([HAVE_INTTYPES_H]) dnl Check for <sys/types.h>. AC_CHECK_HEADERS_ONCE([sys/types.h]) if test $ac_cv_header_sys_types_h = yes; then HAVE_SYS_TYPES_H=1 else HAVE_SYS_TYPES_H=0 fi AC_SUBST([HAVE_SYS_TYPES_H]) gl_CHECK_NEXT_HEADERS([stdint.h]) if test $ac_cv_header_stdint_h = yes; then HAVE_STDINT_H=1 else HAVE_STDINT_H=0 fi AC_SUBST([HAVE_STDINT_H]) dnl Now see whether we need a substitute <stdint.h>. if test $ac_cv_header_stdint_h = yes; then AC_CACHE_CHECK([whether stdint.h conforms to C99], [gl_cv_header_working_stdint_h], [gl_cv_header_working_stdint_h=no AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> /* Dragonfly defines WCHAR_MIN, WCHAR_MAX only in <wchar.h>. */ #if !(defined WCHAR_MIN && defined WCHAR_MAX) #error "WCHAR_MIN, WCHAR_MAX not defined in <stdint.h>" #endif ] gl_STDINT_INCLUDES [ #ifdef INT8_MAX int8_t a1 = INT8_MAX; int8_t a1min = INT8_MIN; #endif #ifdef INT16_MAX int16_t a2 = INT16_MAX; int16_t a2min = INT16_MIN; #endif #ifdef INT32_MAX int32_t a3 = INT32_MAX; int32_t a3min = INT32_MIN; #endif #ifdef INT64_MAX int64_t a4 = INT64_MAX; int64_t a4min = INT64_MIN; #endif #ifdef UINT8_MAX uint8_t b1 = UINT8_MAX; #else typedef int b1[(unsigned char) -1 != 255 ? 1 : -1]; #endif #ifdef UINT16_MAX uint16_t b2 = UINT16_MAX; #endif #ifdef UINT32_MAX uint32_t b3 = UINT32_MAX; #endif #ifdef UINT64_MAX uint64_t b4 = UINT64_MAX; #endif int_least8_t c1 = INT8_C (0x7f); int_least8_t c1max = INT_LEAST8_MAX; int_least8_t c1min = INT_LEAST8_MIN; int_least16_t c2 = INT16_C (0x7fff); int_least16_t c2max = INT_LEAST16_MAX; int_least16_t c2min = INT_LEAST16_MIN; int_least32_t c3 = INT32_C (0x7fffffff); int_least32_t c3max = INT_LEAST32_MAX; int_least32_t c3min = INT_LEAST32_MIN; int_least64_t c4 = INT64_C (0x7fffffffffffffff); int_least64_t c4max = INT_LEAST64_MAX; int_least64_t c4min = INT_LEAST64_MIN; uint_least8_t d1 = UINT8_C (0xff); uint_least8_t d1max = UINT_LEAST8_MAX; uint_least16_t d2 = UINT16_C (0xffff); uint_least16_t d2max = UINT_LEAST16_MAX; uint_least32_t d3 = UINT32_C (0xffffffff); uint_least32_t d3max = UINT_LEAST32_MAX; uint_least64_t d4 = UINT64_C (0xffffffffffffffff); uint_least64_t d4max = UINT_LEAST64_MAX; int_fast8_t e1 = INT_FAST8_MAX; int_fast8_t e1min = INT_FAST8_MIN; int_fast16_t e2 = INT_FAST16_MAX; int_fast16_t e2min = INT_FAST16_MIN; int_fast32_t e3 = INT_FAST32_MAX; int_fast32_t e3min = INT_FAST32_MIN; int_fast64_t e4 = INT_FAST64_MAX; int_fast64_t e4min = INT_FAST64_MIN; uint_fast8_t f1 = UINT_FAST8_MAX; uint_fast16_t f2 = UINT_FAST16_MAX; uint_fast32_t f3 = UINT_FAST32_MAX; uint_fast64_t f4 = UINT_FAST64_MAX; #ifdef INTPTR_MAX intptr_t g = INTPTR_MAX; intptr_t gmin = INTPTR_MIN; #endif #ifdef UINTPTR_MAX uintptr_t h = UINTPTR_MAX; #endif intmax_t i = INTMAX_MAX; uintmax_t j = UINTMAX_MAX; /* Check that SIZE_MAX has the correct type, if possible. */ #if 201112 <= __STDC_VERSION__ int k = _Generic (SIZE_MAX, size_t: 0); #elif (2 <= __GNUC__ || 4 <= __clang_major__ || defined __IBM__TYPEOF__ \ || (0x5110 <= __SUNPRO_C && !__STDC__)) extern size_t k; extern __typeof__ (SIZE_MAX) k; #endif #include <limits.h> /* for CHAR_BIT */ #define TYPE_MINIMUM(t) \ ((t) ((t) 0 < (t) -1 ? (t) 0 : ~ TYPE_MAXIMUM (t))) #define TYPE_MAXIMUM(t) \ ((t) ((t) 0 < (t) -1 \ ? (t) -1 \ : ((((t) 1 << (sizeof (t) * CHAR_BIT - 2)) - 1) * 2 + 1))) struct s { int check_PTRDIFF: PTRDIFF_MIN == TYPE_MINIMUM (ptrdiff_t) && PTRDIFF_MAX == TYPE_MAXIMUM (ptrdiff_t) ? 1 : -1; /* Detect bug in FreeBSD 6.0/ia64 and FreeBSD 13.0/arm64. */ int check_SIG_ATOMIC: SIG_ATOMIC_MIN == TYPE_MINIMUM (sig_atomic_t) && SIG_ATOMIC_MAX == TYPE_MAXIMUM (sig_atomic_t) ? 1 : -1; int check_SIZE: SIZE_MAX == TYPE_MAXIMUM (size_t) ? 1 : -1; int check_WCHAR: WCHAR_MIN == TYPE_MINIMUM (wchar_t) && WCHAR_MAX == TYPE_MAXIMUM (wchar_t) ? 1 : -1; /* Detect bug in mingw. */ int check_WINT: WINT_MIN == TYPE_MINIMUM (wint_t) && WINT_MAX == TYPE_MAXIMUM (wint_t) ? 1 : -1; /* Detect bugs in glibc 2.4 and Solaris 10 stdint.h, among others. */ int check_UINT8_C: (-1 < UINT8_C (0)) == (-1 < (uint_least8_t) 0) ? 1 : -1; int check_UINT16_C: (-1 < UINT16_C (0)) == (-1 < (uint_least16_t) 0) ? 1 : -1; /* Detect bugs in OpenBSD 3.9 stdint.h. */ #ifdef UINT8_MAX int check_uint8: (uint8_t) -1 == UINT8_MAX ? 1 : -1; #endif #ifdef UINT16_MAX int check_uint16: (uint16_t) -1 == UINT16_MAX ? 1 : -1; #endif #ifdef UINT32_MAX int check_uint32: (uint32_t) -1 == UINT32_MAX ? 1 : -1; #endif #ifdef UINT64_MAX int check_uint64: (uint64_t) -1 == UINT64_MAX ? 1 : -1; #endif int check_uint_least8: (uint_least8_t) -1 == UINT_LEAST8_MAX ? 1 : -1; int check_uint_least16: (uint_least16_t) -1 == UINT_LEAST16_MAX ? 1 : -1; int check_uint_least32: (uint_least32_t) -1 == UINT_LEAST32_MAX ? 1 : -1; int check_uint_least64: (uint_least64_t) -1 == UINT_LEAST64_MAX ? 1 : -1; int check_uint_fast8: (uint_fast8_t) -1 == UINT_FAST8_MAX ? 1 : -1; int check_uint_fast16: (uint_fast16_t) -1 == UINT_FAST16_MAX ? 1 : -1; int check_uint_fast32: (uint_fast32_t) -1 == UINT_FAST32_MAX ? 1 : -1; int check_uint_fast64: (uint_fast64_t) -1 == UINT_FAST64_MAX ? 1 : -1; int check_uintptr: (uintptr_t) -1 == UINTPTR_MAX ? 1 : -1; int check_uintmax: (uintmax_t) -1 == UINTMAX_MAX ? 1 : -1; int check_size: (size_t) -1 == SIZE_MAX ? 1 : -1; }; ]])], [dnl Determine whether the various *_MIN, *_MAX macros are usable dnl in preprocessor expression. We could do it by compiling a test dnl program for each of these macros. It is faster to run a program dnl that inspects the macro expansion. dnl This detects a bug on HP-UX 11.23/ia64. AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #define __STDC_CONSTANT_MACROS 1 #define __STDC_LIMIT_MACROS 1 #include <stdint.h> ] gl_STDINT_INCLUDES [ #include <stdio.h> #include <string.h> #define MVAL(macro) MVAL1(macro) #define MVAL1(expression) #expression static const char *macro_values[] = { #ifdef INT8_MAX MVAL (INT8_MAX), #endif #ifdef INT16_MAX MVAL (INT16_MAX), #endif #ifdef INT32_MAX MVAL (INT32_MAX), #endif #ifdef INT64_MAX MVAL (INT64_MAX), #endif #ifdef UINT8_MAX MVAL (UINT8_MAX), #endif #ifdef UINT16_MAX MVAL (UINT16_MAX), #endif #ifdef UINT32_MAX MVAL (UINT32_MAX), #endif #ifdef UINT64_MAX MVAL (UINT64_MAX), #endif NULL }; ]], [[ const char **mv; for (mv = macro_values; *mv != NULL; mv++) { const char *value = *mv; /* Test whether it looks like a cast expression. */ if (strncmp (value, "((unsigned int)"/*)*/, 15) == 0 || strncmp (value, "((unsigned short)"/*)*/, 17) == 0 || strncmp (value, "((unsigned char)"/*)*/, 16) == 0 || strncmp (value, "((int)"/*)*/, 6) == 0 || strncmp (value, "((signed short)"/*)*/, 15) == 0 || strncmp (value, "((signed char)"/*)*/, 14) == 0) return mv - macro_values + 1; } return 0; ]])], [gl_cv_header_working_stdint_h=yes], [], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_header_working_stdint_h="guessing yes" ;; # In general, assume it works. *) gl_cv_header_working_stdint_h="guessing yes" ;; esac ]) ]) ]) fi HAVE_C99_STDINT_H=0 HAVE_SYS_BITYPES_H=0 HAVE_SYS_INTTYPES_H=0 GL_GENERATE_STDINT_H=true case "$gl_cv_header_working_stdint_h" in *yes) HAVE_C99_STDINT_H=1 dnl Now see whether the system <stdint.h> works without dnl __STDC_CONSTANT_MACROS/__STDC_LIMIT_MACROS defined. dnl If not, there would be problems when stdint.h is included from C++. AC_CACHE_CHECK([whether stdint.h works without ISO C predefines], [gl_cv_header_stdint_without_STDC_macros], [gl_cv_header_stdint_without_STDC_macros=no AC_COMPILE_IFELSE([ AC_LANG_PROGRAM([[ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 /* work if build isn't clean */ #include <stdint.h> ] gl_STDINT_INCLUDES [ intmax_t im = INTMAX_MAX; int32_t i32 = INT32_C (0x7fffffff); ]])], [gl_cv_header_stdint_without_STDC_macros=yes]) ]) if test $gl_cv_header_stdint_without_STDC_macros = no; then AC_DEFINE([__STDC_CONSTANT_MACROS], [1], [Define to 1 if the system <stdint.h> predates C++11.]) AC_DEFINE([__STDC_LIMIT_MACROS], [1], [Define to 1 if the system <stdint.h> predates C++11.]) fi AC_CACHE_CHECK([whether stdint.h has UINTMAX_WIDTH etc.], [gl_cv_header_stdint_width], [gl_cv_header_stdint_width=no AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H 1 #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <stdint.h> ]gl_STDINT_INCLUDES[ int iw = UINTMAX_WIDTH; ]])], [gl_cv_header_stdint_width=yes])]) if test "$gl_cv_header_stdint_width" = yes; then GL_GENERATE_STDINT_H=false fi ;; *) dnl Check for <sys/inttypes.h>, and for dnl <sys/bitypes.h> (used in Linux libc4 >= 4.6.7 and libc5). AC_CHECK_HEADERS([sys/inttypes.h sys/bitypes.h]) if test $ac_cv_header_sys_inttypes_h = yes; then HAVE_SYS_INTTYPES_H=1 fi if test $ac_cv_header_sys_bitypes_h = yes; then HAVE_SYS_BITYPES_H=1 fi gl_STDINT_TYPE_PROPERTIES ;; esac dnl The substitute stdint.h needs the substitute limit.h's _GL_INTEGER_WIDTH. gl_REPLACE_LIMITS_H AC_SUBST([HAVE_C99_STDINT_H]) AC_SUBST([HAVE_SYS_BITYPES_H]) AC_SUBST([HAVE_SYS_INTTYPES_H]) ]) dnl gl_STDINT_BITSIZEOF(TYPES, INCLUDES) dnl Determine the size of each of the given types in bits. AC_DEFUN([gl_STDINT_BITSIZEOF], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to the number of bits in type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for bit size of $gltype], [gl_cv_bitsizeof_${gltype}], [AC_COMPUTE_INT([result], [sizeof ($gltype) * CHAR_BIT], [$2 #include <limits.h>], [result=unknown]) eval gl_cv_bitsizeof_${gltype}=\$result ]) eval result=\$gl_cv_bitsizeof_${gltype} if test $result = unknown; then dnl Use a nonempty default, because some compilers, such as IRIX 5 cc, dnl do a syntax check even on unused #if conditions and give an error dnl on valid C code like this: dnl #if 0 dnl # if > 32 dnl # endif dnl #endif result=0 fi GLTYPE=`echo "$gltype" | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` AC_DEFINE_UNQUOTED([BITSIZEOF_${GLTYPE}], [$result]) eval BITSIZEOF_${GLTYPE}=\$result done m4_foreach_w([gltype], [$1], [AC_SUBST([BITSIZEOF_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_CHECK_TYPES_SIGNED(TYPES, INCLUDES) dnl Determine the signedness of each of the given types. dnl Define HAVE_SIGNED_TYPE if type is signed. AC_DEFUN([gl_CHECK_TYPES_SIGNED], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]), [Define to 1 if ']gltype[' is a signed integer type.])]) for gltype in $1 ; do AC_CACHE_CHECK([whether $gltype is signed], [gl_cv_type_${gltype}_signed], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ int verify[2 * (($gltype) -1 < ($gltype) 0) - 1];]])], result=yes, result=no) eval gl_cv_type_${gltype}_signed=\$result ]) eval result=\$gl_cv_type_${gltype}_signed GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` if test "$result" = yes; then AC_DEFINE_UNQUOTED([HAVE_SIGNED_${GLTYPE}], [1]) eval HAVE_SIGNED_${GLTYPE}=1 else eval HAVE_SIGNED_${GLTYPE}=0 fi done m4_foreach_w([gltype], [$1], [AC_SUBST([HAVE_SIGNED_]m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_]))]) ]) dnl gl_INTEGER_TYPE_SUFFIX(TYPES, INCLUDES) dnl Determine the suffix to use for integer constants of the given types. dnl Define t_SUFFIX for each such type. AC_DEFUN([gl_INTEGER_TYPE_SUFFIX], [ dnl Use a shell loop, to avoid bloating configure, and dnl - extra AH_TEMPLATE calls, so that autoheader knows what to put into dnl config.h.in, dnl - extra AC_SUBST calls, so that the right substitutions are made. m4_foreach_w([gltype], [$1], [AH_TEMPLATE(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX], [Define to l, ll, u, ul, ull, etc., as suitable for constants of type ']gltype['.])]) for gltype in $1 ; do AC_CACHE_CHECK([for $gltype integer literal suffix], [gl_cv_type_${gltype}_suffix], [eval gl_cv_type_${gltype}_suffix=no eval result=\$gl_cv_type_${gltype}_signed if test "$result" = yes; then glsufu= else glsufu=u fi for glsuf in "$glsufu" ${glsufu}l ${glsufu}ll ${glsufu}i64; do case $glsuf in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; i64) gltype1='__int64';; u) gltype1='unsigned int';; ul) gltype1='unsigned long int';; ull) gltype1='unsigned long long int';; ui64)gltype1='unsigned __int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([$2[ extern $gltype foo; extern $gltype1 foo;]])], [eval gl_cv_type_${gltype}_suffix=\$glsuf]) eval result=\$gl_cv_type_${gltype}_suffix test "$result" != no && break done]) GLTYPE=`echo $gltype | tr 'abcdefghijklmnopqrstuvwxyz ' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ_'` eval result=\$gl_cv_type_${gltype}_suffix test "$result" = no && result= eval ${GLTYPE}_SUFFIX=\$result AC_DEFINE_UNQUOTED([${GLTYPE}_SUFFIX], [$result]) done m4_foreach_w([gltype], [$1], [AC_SUBST(m4_translit(gltype,[abcdefghijklmnopqrstuvwxyz ],[ABCDEFGHIJKLMNOPQRSTUVWXYZ_])[_SUFFIX])]) ]) dnl gl_STDINT_INCLUDES AC_DEFUN([gl_STDINT_INCLUDES], [[ #include <stddef.h> #include <signal.h> #if HAVE_WCHAR_H # include <wchar.h> #endif ]]) dnl gl_STDINT_TYPE_PROPERTIES dnl Compute HAVE_SIGNED_t, BITSIZEOF_t and t_SUFFIX, for all the types t dnl of interest to stdint.in.h. AC_DEFUN([gl_STDINT_TYPE_PROPERTIES], [ AC_REQUIRE([gl_MULTIARCH]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_STDINT_BITSIZEOF([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_STDINT_BITSIZEOF([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_CHECK_TYPES_SIGNED([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) gl_cv_type_ptrdiff_t_signed=yes gl_cv_type_size_t_signed=no if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTEGER_TYPE_SUFFIX([ptrdiff_t size_t], [gl_STDINT_INCLUDES]) fi gl_INTEGER_TYPE_SUFFIX([sig_atomic_t wchar_t wint_t], [gl_STDINT_INCLUDES]) dnl If wint_t is smaller than 'int', it cannot satisfy the ISO C 99 dnl requirement that wint_t is "unchanged by default argument promotions". dnl In this case gnulib's <wchar.h> and <wctype.h> override wint_t. dnl Set the variable BITSIZEOF_WINT_T accordingly. if test $GNULIBHEADERS_OVERRIDE_WINT_T = 1; then BITSIZEOF_WINT_T=32 fi ]) ���������������������������������������recutils-1.9/m4/malloca.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000001033�14226564452�012305� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# malloca.m4 serial 2 dnl Copyright (C) 2003-2004, 2006-2007, 2009-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MALLOCA], [ dnl Use the autoconf tests for alloca(), but not the AC_SUBSTed variables dnl @ALLOCA@ and @LTALLOCA@. dnl gl_FUNC_ALLOCA dnl Already brought in by the module dependencies. AC_REQUIRE([gl_EEMALLOC]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/readline.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000005330�14226564452�012464� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readline.m4 serial 10 dnl Copyright (C) 2005-2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Simon Josefsson, with help from Bruno Haible and Oskar dnl Liljeblad. AC_DEFUN([gl_FUNC_READLINE], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libreadline and define LIBREADLINE, LTLIBREADLINE and dnl INCREADLINE accordingly. AC_LIB_LINKFLAGS_BODY([readline]) dnl Add $INCREADLINE to CPPFLAGS before performing the following checks, dnl because if the user has installed libreadline and not disabled its use dnl via --without-libreadline-prefix, he wants to use it. The AC_LINK_IFELSE dnl will then succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCREADLINE]) AC_CACHE_CHECK([for readline], [gl_cv_lib_readline], [ gl_cv_lib_readline=no am_save_LIBS="$LIBS" dnl On some systems, -lreadline doesn't link without an additional dnl -lncurses or -ltermcap. dnl Try -lncurses before -ltermcap, because libtermcap is insecure dnl by design and obsolete since 1994. Try -lcurses last, because dnl libcurses is unusable on some old Unices. for extra_lib in "" ncurses termcap curses; do LIBS="$am_save_LIBS $LIBREADLINE" if test -n "$extra_lib"; then LIBS="$LIBS -l$extra_lib" fi AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h> #include <readline/readline.h>]], [[readline((char*)0);]])], [if test -n "$extra_lib"; then gl_cv_lib_readline="yes, requires -l$extra_lib" else gl_cv_lib_readline="yes" fi ]) if test "$gl_cv_lib_readline" != no; then break fi done LIBS="$am_save_LIBS" ]) if test "$gl_cv_lib_readline" != no; then AC_DEFINE([HAVE_READLINE], [1], [Define if you have the readline library.]) extra_lib=`echo "$gl_cv_lib_readline" | sed -n -e 's/yes, requires //p'` if test -n "$extra_lib"; then LIBREADLINE="$LIBREADLINE $extra_lib" LTLIBREADLINE="$LTLIBREADLINE $extra_lib" fi AC_MSG_CHECKING([how to link with libreadline]) AC_MSG_RESULT([$LIBREADLINE]) else dnl If $LIBREADLINE didn't lead to a usable library, we don't dnl need $INCREADLINE either. CPPFLAGS="$am_save_CPPFLAGS" LIBREADLINE= LTLIBREADLINE= fi AC_SUBST([LIBREADLINE]) AC_SUBST([LTLIBREADLINE]) AC_CHECK_HEADERS([readline/readline.h readline/history.h]) ]) # Prerequisites of lib/readline.c. AC_DEFUN([gl_PREREQ_READLINE], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/base64.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000000664�14226564451�011771� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# base64.m4 serial 4 dnl Copyright (C) 2004, 2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_BASE64], [ gl_PREREQ_BASE64 ]) # Prerequisites of lib/base64.c. AC_DEFUN([gl_PREREQ_BASE64], [ AC_REQUIRE([AC_C_RESTRICT]) ]) ����������������������������������������������������������������������������recutils-1.9/m4/wctob.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000005511�14226564453�012021� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctob.m4 serial 13 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCTOB], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([wctob]) if test $ac_cv_func_wctob = no; then HAVE_WCTOB=0 HAVE_DECL_WCTOB=0 else HAVE_WCTOB=1 dnl Solaris 9 has the wctob() function but it does not work. dnl Cygwin 1.7.2 has the wctob() function but it clobbers caller-owned dnl registers, see <https://cygwin.com/ml/cygwin/2010-05/msg00015.html>. AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether wctob works], [gl_cv_func_wctob_works], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris <= 9 and Cygwin. solaris2.[1-9] | solaris2.[1-9].* | cygwin*) gl_cv_func_wctob_works="guessing no" ;; # Guess no on native Windows. mingw*) gl_cv_func_wctob_works="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wctob_works="guessing yes" ;; esac changequote([,])dnl case "$host_os" in cygwin*) AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <wchar.h> register long global __asm__ ("%ebx"); int main () { setlocale (LC_ALL, "en_US.UTF-8"); global = 0x12345678; if (wctob (0x00FC) != -1) return 1; if (global != 0x12345678) return 2; return 0; }]])], [:], [gl_cv_func_wctob_works=no], [:]) ;; esac if test "$gl_cv_func_wctob_works" != no && test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { wchar_t wc; if (mbtowc (&wc, "\374", 1) == 1) if (wctob (wc) != (unsigned char) '\374') return 1; } return 0; }]])], [gl_cv_func_wctob_works=yes], [gl_cv_func_wctob_works=no], [:]) fi ]) case "$gl_cv_func_wctob_works" in *yes) ;; *) REPLACE_WCTOB=1 ;; esac if test $REPLACE_WCTOB = 0; then dnl IRIX 6.5 has the wctob() function but does not declare it. AC_CHECK_DECLS([wctob], [], [], [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wctob != yes; then HAVE_DECL_WCTOB=0 fi fi fi ]) # Prerequisites of lib/wctob.c. AC_DEFUN([gl_PREREQ_WCTOB], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/reallocarray.m4���������������������������������������������������������������������0000644�0000000�0000000�00000001367�14226564447�013373� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# reallocarray.m4 serial 3 dnl Copyright (C) 2017-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_REALLOCARRAY], [ dnl Persuade glibc <stdlib.h> to declare reallocarray. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_PTRDIFF]) AC_CHECK_FUNCS([reallocarray]) if test "$ac_cv_func_reallocarray" = no; then HAVE_REALLOCARRAY=0 elif test "$gl_cv_malloc_ptrdiff" = no; then REPLACE_REALLOCARRAY=1 fi ]) # Prerequisites of lib/reallocarray.c. AC_DEFUN([gl_PREREQ_REALLOCARRAY], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/dup.m4������������������������������������������������������������������������������0000644�0000000�0000000�00000003173�14226564447�011500� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dup.m4 serial 7 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_DUP], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_DUP=1 fi ]) dnl Replace dup() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_DUP=1 fi ]) AC_CACHE_CHECK([whether dup works], [gl_cv_func_dup_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <unistd.h> #include <fcntl.h> #include <errno.h> ]GL_MDA_DEFINES], [[/* On OS/2 kLIBC, dup does not work on a directory fd. */ int fd = open (".", O_RDONLY); return fd < 0 ? 1 : dup (fd) < 0 ? 2 : 0; ]]) ], [gl_cv_func_dup_works=yes], [gl_cv_func_dup_works=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_dup_works="guessing no" ;; *) gl_cv_func_dup_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_dup_works" in *yes) ;; *) REPLACE_DUP=1 ;; esac ]) # Prerequisites of lib/dup.c. AC_DEFUN([gl_PREREQ_DUP], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/closedir.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000001674�14226564447�012520� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# closedir.m4 serial 6 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CLOSEDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS([closedir]) if test $ac_cv_func_closedir = no; then HAVE_CLOSEDIR=0 fi dnl Replace closedir() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then if test $HAVE_CLOSEDIR = 1; then REPLACE_CLOSEDIR=1 fi fi ]) dnl Replace closedir() for supporting the gnulib-defined dirfd() function. case $host_os,$HAVE_CLOSEDIR in os2*,1) REPLACE_CLOSEDIR=1;; esac ]) ��������������������������������������������������������������������recutils-1.9/m4/canonicalize.m4���������������������������������������������������������������������0000644�0000000�0000000�00000013533�14226564451�013343� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# canonicalize.m4 serial 37 dnl Copyright (C) 2003-2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Provides canonicalize_file_name and canonicalize_filename_mode, but does # not provide or fix realpath. AC_DEFUN([gl_FUNC_CANONICALIZE_FILENAME_MODE], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) AC_CHECK_FUNCS_ONCE([canonicalize_file_name faccessat]) AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) AC_REQUIRE([gl_FUNC_REALPATH_WORKS]) if test $ac_cv_func_canonicalize_file_name = no; then HAVE_CANONICALIZE_FILE_NAME=0 else case "$gl_cv_func_realpath_works" in *yes) ;; *) REPLACE_CANONICALIZE_FILE_NAME=1 ;; esac fi ]) # Provides canonicalize_file_name and realpath. AC_DEFUN([gl_CANONICALIZE_LGPL], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_CANONICALIZE_LGPL_SEPARATE]) if test $ac_cv_func_canonicalize_file_name = no; then HAVE_CANONICALIZE_FILE_NAME=0 if test $ac_cv_func_realpath = no; then HAVE_REALPATH=0 else case "$gl_cv_func_realpath_works" in *yes) ;; *) REPLACE_REALPATH=1 ;; esac fi else case "$gl_cv_func_realpath_works" in *yes) ;; *) REPLACE_CANONICALIZE_FILE_NAME=1 REPLACE_REALPATH=1 ;; esac fi ]) # Like gl_CANONICALIZE_LGPL, except prepare for separate compilation # (no REPLACE_CANONICALIZE_FILE_NAME, no REPLACE_REALPATH, no AC_LIBOBJ). AC_DEFUN([gl_CANONICALIZE_LGPL_SEPARATE], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) AC_CHECK_FUNCS_ONCE([canonicalize_file_name faccessat]) dnl On native Windows, we use _getcwd(), regardless whether getcwd() is dnl available through the linker option '-loldnames'. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) ;; *) AC_CHECK_FUNCS([getcwd]) ;; esac AC_REQUIRE([gl_DOUBLE_SLASH_ROOT]) AC_REQUIRE([gl_FUNC_REALPATH_WORKS]) AC_CHECK_HEADERS_ONCE([sys/param.h]) ]) # Check whether realpath works. Assume that if a platform has both # realpath and canonicalize_file_name, but the former is broken, then # so is the latter. AC_DEFUN([gl_FUNC_REALPATH_WORKS], [ AC_CHECK_FUNCS_ONCE([realpath lstat]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether realpath works], [gl_cv_func_realpath_works], [ rm -rf conftest.a conftest.d touch conftest.a # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.a conftest.l fi mkdir conftest.d AC_RUN_IFELSE([ AC_LANG_PROGRAM([[ ]GL_NOCRASH[ #include <errno.h> #include <stdlib.h> #include <string.h> ]], [[ int result = 0; /* This test fails on Solaris 10. */ { char *name = realpath ("conftest.a", NULL); if (!(name && *name == '/')) result |= 1; free (name); } /* This test fails on older versions of Cygwin. */ { char *name = realpath ("conftest.b/../conftest.a", NULL); if (name != NULL) result |= 2; free (name); } /* This test fails on Cygwin 2.9. */ #if HAVE_LSTAT { char *name = realpath ("conftest.l/../conftest.a", NULL); if (name != NULL || errno != ENOTDIR) result |= 4; free (name); } #endif /* This test fails on Mac OS X 10.13, OpenBSD 6.0. */ { char *name = realpath ("conftest.a/", NULL); if (name != NULL) result |= 8; free (name); } /* This test fails on AIX 7, Solaris 10. */ { char *name1 = realpath (".", NULL); char *name2 = realpath ("conftest.d//./..", NULL); if (! name1 || ! name2 || strcmp (name1, name2)) result |= 16; free (name1); free (name2); } #ifdef __linux__ /* On Linux, // is the same as /. See also double-slash-root.m4. realpath() should respect this. This test fails on musl libc 1.2.2. */ { char *name = realpath ("//", NULL); if (! name || strcmp (name, "/")) result |= 32; free (name); } #endif return result; ]]) ], [gl_cv_func_realpath_works=yes], [case $? in 32) gl_cv_func_realpath_works=nearly ;; *) gl_cv_func_realpath_works=no ;; esac ], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_realpath_works="guessing yes" ;; # Guess 'nearly' on musl systems. *-musl*) gl_cv_func_realpath_works="guessing nearly" ;; # Guess no on Cygwin. cygwin*) gl_cv_func_realpath_works="guessing no" ;; # Guess no on native Windows. mingw*) gl_cv_func_realpath_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_realpath_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.a conftest.l conftest.d ]) case "$gl_cv_func_realpath_works" in *yes) AC_DEFINE([FUNC_REALPATH_WORKS], [1], [Define to 1 if realpath() can malloc memory, always gives an absolute path, and handles leading slashes and a trailing slash correctly.]) ;; *nearly) AC_DEFINE([FUNC_REALPATH_NEARLY_WORKS], [1], [Define to 1 if realpath() can malloc memory, always gives an absolute path, and handles a trailing slash correctly.]) ;; esac ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/stdint_h.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000001743�14226564452�012521� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdint_h.m4 serial 9 dnl Copyright (C) 1997-2004, 2006, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_STDINT_H_WITH_UINTMAX if <stdint.h> exists, # doesn't clash with <sys/types.h>, and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_STDINT_H], [ AC_CACHE_CHECK([for stdint.h], [gl_cv_header_stdint_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <stdint.h>]], [[uintmax_t i = (uintmax_t) -1; return !i;]])], [gl_cv_header_stdint_h=yes], [gl_cv_header_stdint_h=no])]) if test $gl_cv_header_stdint_h = yes; then AC_DEFINE_UNQUOTED([HAVE_STDINT_H_WITH_UINTMAX], [1], [Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares uintmax_t. ]) fi ]) �����������������������������recutils-1.9/m4/stdalign.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000004447�14226564452�012516� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for stdalign.h that conforms to C11. dnl Copyright 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prepare for substituting <stdalign.h> if it is not supported. AC_DEFUN([gl_STDALIGN_H], [ AC_CACHE_CHECK([for working stdalign.h], [gl_cv_header_working_stdalign_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdint.h> #include <stdalign.h> #include <stddef.h> /* Test that alignof yields a result consistent with offsetof. This catches GCC bug 52023 <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=52023>. */ #ifdef __cplusplus template <class t> struct alignof_helper { char a; t b; }; # define ao(type) offsetof (alignof_helper<type>, b) #else # define ao(type) offsetof (struct { char a; type b; }, b) #endif char test_double[ao (double) % _Alignof (double) == 0 ? 1 : -1]; char test_long[ao (long int) % _Alignof (long int) == 0 ? 1 : -1]; char test_alignof[alignof (double) == _Alignof (double) ? 1 : -1]; /* Test _Alignas only on platforms where gnulib can help. */ #if \ ((defined __cplusplus && 201103 <= __cplusplus) \ || (__TINYC__ && defined __attribute__) \ || (defined __APPLE__ && defined __MACH__ \ ? 4 < __GNUC__ + (1 <= __GNUC_MINOR__) \ : __GNUC__) \ || (__ia64 && (61200 <= __HP_cc || 61200 <= __HP_aCC)) \ || __ICC || 0x590 <= __SUNPRO_C || 0x0600 <= __xlC__ \ || 1300 <= _MSC_VER) struct alignas_test { char c; char alignas (8) alignas_8; }; char test_alignas[offsetof (struct alignas_test, alignas_8) == 8 ? 1 : -1]; #endif ]])], [gl_cv_header_working_stdalign_h=yes], [gl_cv_header_working_stdalign_h=no])]) if test $gl_cv_header_working_stdalign_h = yes; then GL_GENERATE_STDALIGN_H=false else GL_GENERATE_STDALIGN_H=true fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/clock_time.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000002555�14226564451�013017� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# clock_time.m4 serial 11 dnl Copyright (C) 2002-2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Check for clock_getres, clock_gettime and clock_settime, # and set LIB_CLOCK_GETTIME. # For a program named, say foo, you should add a line like the following # in the corresponding Makefile.am file: # foo_LDADD = $(LDADD) $(LIB_CLOCK_GETTIME) AC_DEFUN([gl_CLOCK_TIME], [ dnl Persuade glibc and Solaris <time.h> to declare these functions. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Solaris 2.5.1 needs -lposix4 to get the clock_gettime function. # Solaris 7 prefers the library name -lrt to the obsolescent name -lposix4. # Save and restore LIBS so e.g., -lrt, isn't added to it. Otherwise, *all* # programs in the package would end up linked with that potentially-shared # library, inducing unnecessary run-time overhead. LIB_CLOCK_GETTIME= AC_SUBST([LIB_CLOCK_GETTIME]) gl_saved_libs=$LIBS AC_SEARCH_LIBS([clock_gettime], [rt posix4], [test "$ac_cv_search_clock_gettime" = "none required" || LIB_CLOCK_GETTIME=$ac_cv_search_clock_gettime]) AC_CHECK_FUNCS([clock_getres clock_gettime clock_settime]) LIBS=$gl_saved_libs ]) ���������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/locale-fr.m4������������������������������������������������������������������������0000644�0000000�0000000�00000024474�14226564452�012557� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-fr.m4 serial 20 dnl Copyright (C) 2003, 2005-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a french locale with traditional encoding. AC_DEFUN([gt_LOCALE_FR], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a traditional french locale], [gt_cv_locale_fr], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is only one byte long. This excludes the UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 3 || buf[2] != 'v') return 1; # if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; # endif return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the native Windows locale name. if (LC_ALL=French_France.1252 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=French_France.1252 else # None found. gt_cv_locale_fr=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.ISO-8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO-8859-1 else # Test for the AIX, OSF/1, FreeBSD, NetBSD, OpenBSD locale name. if (LC_ALL=fr_FR.ISO8859-1 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.ISO8859-1 else # Test for the HP-UX locale name. if (LC_ALL=fr_FR.iso88591 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr_FR.iso88591 else # Test for the Solaris 7 locale name. if (LC_ALL=fr LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr=fr else # None found. gt_cv_locale_fr=none fi fi fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_FR=$gt_cv_locale_fr AC_SUBST([LOCALE_FR]) ]) dnl Determine the name of a french locale with UTF-8 encoding. AC_DEFUN([gt_LOCALE_FR_UTF8], [ AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a french Unicode locale], [gt_cv_locale_fr_utf8], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if !(defined __BEOS__ || defined __HAIKU__) /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in the abbreviation of the second month, the second character (should be U+00E9: LATIN SMALL LETTER E WITH ACUTE) is two bytes long, with UTF-8 encoding. */ t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%b", &t) < 4 || buf[1] != (char) 0xc3 || buf[2] != (char) 0xa9 || buf[3] != 'v') return 1; #endif #if !defined __BIONIC__ /* Bionic libc's 'struct lconv' is just a dummy. */ /* Check whether the decimal separator is a comma. On NetBSD 3.0 in the fr_FR.ISO8859-1 locale, localeconv()->decimal_point are nl_langinfo(RADIXCHAR) are both ".". */ if (localeconv () ->decimal_point[0] != ',') return 1; #endif return 0; } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=French_France.65001 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=French_France.65001 else # None found. gt_cv_locale_fr_utf8=none fi ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the usual locale name. if (LC_ALL=fr_FR LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR else # Test for the locale name with explicit encoding suffix. if (LC_ALL=fr_FR.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr_FR.UTF-8 else # Test for the Solaris 7 locale name. if (LC_ALL=fr.UTF-8 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_fr_utf8=fr.UTF-8 else # None found. gt_cv_locale_fr_utf8=none fi fi fi ;; esac fi rm -fr conftest* ]) LOCALE_FR_UTF8=$gt_cv_locale_fr_utf8 AC_SUBST([LOCALE_FR_UTF8]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/chdir-long.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000002054�14226564447�012733� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 17 # Use Gnulib's robust chdir function. # It can handle arbitrarily long directory names, which means # that when it is given the name of an existing directory, it # never fails with ENAMETOOLONG. # Arrange to compile chdir-long.c only on systems that define PATH_MAX. dnl Copyright (C) 2004-2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. AC_DEFUN([gl_FUNC_CHDIR_LONG], [ AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ]) AC_CACHE_CHECK([whether this system supports file names of any length], [gl_cv_have_unlimited_file_name_length], [AC_EGREP_CPP([have_arbitrary_file_name_length_limit], gl_PATHMAX_SNIPPET[ #ifdef PATH_MAX have_arbitrary_file_name_length_limit #endif], [gl_cv_have_unlimited_file_name_length=no], [gl_cv_have_unlimited_file_name_length=yes])]) ]) AC_DEFUN([gl_PREREQ_CHDIR_LONG], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/extern-inline.m4��������������������������������������������������������������������0000644�0000000�0000000�00000012774�14226573056�013474� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl 'extern inline' a la ISO C99. dnl Copyright 2012-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EXTERN_INLINE], [ AC_CACHE_CHECK([whether ctype.h defines __header_inline], [gl_cv_have___header_inline], [AC_PREPROC_IFELSE( [AC_LANG_SOURCE([[#include <ctype.h> #ifndef __header_inline #error "<ctype.h> does not define __header_inline" #endif ]])], [gl_cv_have___header_inline=yes], [gl_cv_have___header_inline=no])]) if test "$gl_cv_have___header_inline" = yes; then AC_DEFINE([HAVE___HEADER_INLINE], [1], [Define to 1 if ctype.h defines __header_inline.]) fi AH_VERBATIM([HAVE___HEADER_INLINE_1], [/* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>. Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Oracle Developer Studio 12.6 (Sun C 5.15 SunOS_sparc 2017/05/30). Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like <ctype.h>. For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions (ISO C 99 section 6.7.4.(3). This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see <https://trac.macports.org/ticket/41033>. Assume DragonFly and FreeBSD will be similar. GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. It defines a macro __GNUC_STDC_INLINE__ to indicate this situation or a macro __GNUC_GNU_INLINE__ to indicate the opposite situation. GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline semantics but warns, unless -fgnu89-inline is used: warning: C99 inline functions are not supported; using GNU89 warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined HAVE___HEADER_INLINE \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE _GL_UNUSED static # define _GL_EXTERN_INLINE _GL_UNUSED static #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif]) ]) ����recutils-1.9/m4/environ.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000002606�14226564451�012363� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# environ.m4 serial 8 dnl Copyright (C) 2001-2004, 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_ENVIRON], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare environ. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([unistd.h]) gt_CHECK_VAR_DECL( [#if HAVE_UNISTD_H #include <unistd.h> #endif /* mingw, BeOS, Haiku declare environ in <stdlib.h>, not in <unistd.h>. */ #include <stdlib.h> ], [environ]) if test $gt_cv_var_environ_declaration != yes; then HAVE_DECL_ENVIRON=0 fi ]) # Check if a variable is properly declared. # gt_CHECK_VAR_DECL(includes,variable) AC_DEFUN([gt_CHECK_VAR_DECL], [ define([gt_cv_var], [gt_cv_var_]$2[_declaration]) AC_CACHE_CHECK([if $2 is properly declared], [gt_cv_var], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[$1 typedef struct { int foo; } foo_t; extern foo_t $2;]], [[$2.foo = 1;]])], [gt_cv_var=no], [gt_cv_var=yes])]) if test $gt_cv_var = yes; then AC_DEFINE([HAVE_]m4_translit($2, [a-z], [A-Z])[_DECL], 1, [Define if you have the declaration of $2.]) fi undefine([gt_cv_var]) ]) ��������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/strings_h.m4������������������������������������������������������������������������0000644�0000000�0000000�00000004202�14226564452�012676� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <strings.h>. # serial 9 # Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_STRINGS_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([strings.h]) if test $ac_cv_header_strings_h = yes; then HAVE_STRINGS_H=1 else HAVE_STRINGS_H=0 fi AC_SUBST([HAVE_STRINGS_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Minix 3.1.8 has a bug: <sys/types.h> must be included before <strings.h>. */ #include <sys/types.h> #include <strings.h> ]], [ffs strcasecmp strncasecmp]) ]) # gl_STRINGS_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STRINGS_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STRINGS_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STRINGS_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STRINGS_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFS]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STRINGS_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) ]) AC_DEFUN([gl_STRINGS_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FFS=1; AC_SUBST([HAVE_FFS]) HAVE_STRCASECMP=1; AC_SUBST([HAVE_STRCASECMP]) HAVE_DECL_STRNCASECMP=1; AC_SUBST([HAVE_DECL_STRNCASECMP]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/group-member.m4���������������������������������������������������������������������0000644�0000000�0000000�00000001412�14226564452�013277� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 14 # Copyright (C) 1999-2001, 2003-2007, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl Written by Jim Meyering AC_DEFUN([gl_FUNC_GROUP_MEMBER], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare group_member(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Do this replacement check manually because I want the hyphen dnl (not the underscore) in the filename. AC_CHECK_FUNC([group_member], , [ HAVE_GROUP_MEMBER=0 ]) ]) # Prerequisites of lib/group-member.c. AC_DEFUN([gl_PREREQ_GROUP_MEMBER], [ AC_REQUIRE([AC_FUNC_GETGROUPS]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/isnanf.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000012766�14226564452�012172� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnanf.m4 serial 18 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check how to get or define isnanf(). AC_DEFUN([gl_FUNC_ISNANF], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) ISNANF_LIBM= gl_HAVE_ISNANF_NO_LIBM if test $gl_cv_func_isnanf_no_libm = no; then gl_HAVE_ISNANF_IN_LIBM if test $gl_cv_func_isnanf_in_libm = yes; then ISNANF_LIBM=-lm fi fi dnl The variable gl_func_isnanf set here is used by isnan.m4. if test $gl_cv_func_isnanf_no_libm = yes \ || test $gl_cv_func_isnanf_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $ISNANF_LIBM" gl_ISNANF_WORKS LIBS="$save_LIBS" case "$gl_cv_func_isnanf_works" in *yes) gl_func_isnanf=yes ;; *) gl_func_isnanf=no; ISNANF_LIBM= ;; esac else gl_func_isnanf=no fi if test $gl_func_isnanf != yes; then HAVE_ISNANF=0 fi AC_SUBST([ISNANF_LIBM]) ]) dnl Check how to get or define isnanf() without linking with libm. AC_DEFUN([gl_FUNC_ISNANF_NO_LIBM], [ gl_HAVE_ISNANF_NO_LIBM if test $gl_cv_func_isnanf_no_libm = yes; then gl_ISNANF_WORKS fi if test $gl_cv_func_isnanf_no_libm = yes \ && { case "$gl_cv_func_isnanf_works" in *yes) true;; *) false;; esac }; then gl_func_isnanf_no_libm=yes AC_DEFINE([HAVE_ISNANF_IN_LIBC], [1], [Define if the isnan(float) function is available in libc.]) else gl_func_isnanf_no_libm=no fi ]) dnl Prerequisites of replacement isnanf definition. It does not need -lm. AC_DEFUN([gl_PREREQ_ISNANF], [ gl_FLOAT_EXPONENT_LOCATION ]) dnl Test whether isnanf() can be used without libm. AC_DEFUN([gl_HAVE_ISNANF_NO_LIBM], [ AC_CACHE_CHECK([whether isnan(float) can be used without linking with libm], [gl_cv_func_isnanf_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif float x;]], [[return isnanf (x);]])], [gl_cv_func_isnanf_no_libm=yes], [gl_cv_func_isnanf_no_libm=no]) ]) ]) dnl Test whether isnanf() can be used with libm. AC_DEFUN([gl_HAVE_ISNANF_IN_LIBM], [ AC_CACHE_CHECK([whether isnan(float) can be used with libm], [gl_cv_func_isnanf_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif float x;]], [[return isnanf (x);]])], [gl_cv_func_isnanf_in_libm=yes], [gl_cv_func_isnanf_in_libm=no]) LIBS="$save_LIBS" ]) ]) dnl Test whether isnanf() rejects Infinity (this fails on Solaris 2.5.1), dnl recognizes a NaN (this fails on IRIX 6.5 with cc), and recognizes a NaN dnl with in-memory representation 0x7fbfffff (this fails on IRIX 6.5). AC_DEFUN([gl_ISNANF_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_FLOAT_EXPONENT_LOCATION]) AC_CACHE_CHECK([whether isnan(float) works], [gl_cv_func_isnanf_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanf # define isnanf(x) __builtin_isnan ((float)(x)) #elif defined isnan # undef isnanf # define isnanf(x) isnan ((float)(x)) #endif /* The Compaq (ex-DEC) C 6.4 compiler chokes on the expression 0.0 / 0.0. */ #ifdef __DECC static float NaN () { static float zero = 0.0f; return zero / zero; } #else # define NaN() (0.0f / 0.0f) #endif #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; float value; } memory_float; int main() { int result = 0; if (isnanf (1.0f / 0.0f)) result |= 1; if (!isnanf (NaN ())) result |= 2; #if defined FLT_EXPBIT0_WORD && defined FLT_EXPBIT0_BIT /* The isnanf function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit. */ if (FLT_EXPBIT0_WORD == 0 && FLT_EXPBIT0_BIT > 0) { memory_float m; m.value = NaN (); /* Set the bits below the exponent to 01111...111. */ m.word[0] &= -1U << FLT_EXPBIT0_BIT; m.word[0] |= (1U << (FLT_EXPBIT0_BIT - 1)) - 1; if (!isnanf (m.value)) result |= 4; } #endif return result; }]])], [gl_cv_func_isnanf_works=yes], [gl_cv_func_isnanf_works=no], [case "$host_os" in irix* | solaris*) gl_cv_func_isnanf_works="guessing no" ;; mingw*) # Guess yes on mingw, no on MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_func_isnanf_works="guessing yes"], [gl_cv_func_isnanf_works="guessing no"]) ;; *) gl_cv_func_isnanf_works="guessing yes" ;; esac ]) ]) ]) ����������recutils-1.9/m4/fpending.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000002174�14226564452�012476� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 23 # Copyright (C) 2000-2001, 2004-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering dnl Using code from emacs, based on suggestions from Paul Eggert dnl and Ulrich Drepper. dnl Find out how to determine the number of pending output bytes on a stream. dnl glibc (2.1.93 and newer) and Solaris provide __fpending. On other systems, dnl we have to grub around in the (possibly opaque) FILE struct. AC_DEFUN([gl_FUNC_FPENDING], [ AC_CHECK_HEADERS_ONCE([stdio_ext.h]) fp_headers=' #include <stdio.h> #if HAVE_STDIO_EXT_H # include <stdio_ext.h> #endif ' AC_CACHE_CHECK([for __fpending], [gl_cv_func___fpending], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM([[$fp_headers]], [[return ! __fpending (stdin);]])], [gl_cv_func___fpending=yes], [gl_cv_func___fpending=no]) ]) if test $gl_cv_func___fpending = yes; then AC_CHECK_DECLS([__fpending], [], [], [$fp_headers]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/realloc.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000004335�14226564452�012326� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# realloc.m4 serial 26 dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # This is adapted with modifications from upstream Autoconf here: # https://git.savannah.gnu.org/cgit/autoconf.git/tree/lib/autoconf/functions.m4?id=v2.70#n1455 AC_DEFUN([_AC_FUNC_REALLOC_IF], [ AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CACHE_CHECK([whether realloc (0, 0) returns nonnull], [ac_cv_func_realloc_0_nonnull], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[void *p = realloc (0, 0); int result = !p; free (p); return result;]]) ], [ac_cv_func_realloc_0_nonnull=yes], [ac_cv_func_realloc_0_nonnull=no], [case "$host_os" in # Guess yes on platforms where we know the result. *-gnu* | freebsd* | netbsd* | openbsd* | bitrig* \ | gnu* | *-musl* | midnightbsd* \ | hpux* | solaris* | cygwin* | mingw* | msys* ) ac_cv_func_realloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_realloc_0_nonnull="$gl_cross_guess_normal" ;; esac ]) ]) AS_CASE([$ac_cv_func_realloc_0_nonnull], [*yes], [$1], [$2]) ])# AC_FUNC_REALLOC # gl_FUNC_REALLOC_GNU # ------------------- # Replace realloc if it is not compatible with GNU libc. AC_DEFUN([gl_FUNC_REALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_REALLOC_POSIX]) if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 0; then _AC_FUNC_REALLOC_IF([], [REPLACE_REALLOC_FOR_REALLOC_GNU=1]) fi ])# gl_FUNC_REALLOC_GNU # gl_FUNC_REALLOC_POSIX # --------------------- # Test whether 'realloc' is POSIX compliant (sets errno to ENOMEM when it # fails, and doesn't mess up with ptrdiff_t overflow), # and replace realloc if it is not. AC_DEFUN([gl_FUNC_REALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_REALLOC_FOR_REALLOC_POSIX=1 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/wait-process.m4���������������������������������������������������������������������0000644�0000000�0000000�00000000653�14226564453�013325� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wait-process.m4 serial 6 dnl Copyright (C) 2003, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_WAIT_PROCESS], [ dnl Prerequisites of lib/wait-process.c. AC_REQUIRE([gt_TYPE_SIG_ATOMIC_T]) AC_CHECK_FUNCS([waitid]) ]) �������������������������������������������������������������������������������������recutils-1.9/m4/dirent_h.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000006222�14226564447�012502� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# dirent_h.m4 serial 19 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_DIRENT_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) dnl <dirent.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([dirent.h]) if test $ac_cv_header_dirent_h = yes; then HAVE_DIRENT_H=1 else HAVE_DIRENT_H=0 fi AC_SUBST([HAVE_DIRENT_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <dirent.h> ]], [alphasort closedir dirfd fdopendir opendir readdir rewinddir scandir]) ]) # gl_DIRENT_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_DIRENT_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_DIRENT_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_DIRENT_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_DIRENT_H_MODULE_INDICATOR_DEFAULTS], [ gl_UNISTD_H_REQUIRE_DEFAULTS dnl for REPLACE_FCHDIR gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPENDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_READDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REWINDDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CLOSEDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DIRFD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDOPENDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCANDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ALPHASORT]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_DIRENT_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) ]) AC_DEFUN([gl_DIRENT_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_OPENDIR=1; AC_SUBST([HAVE_OPENDIR]) HAVE_READDIR=1; AC_SUBST([HAVE_READDIR]) HAVE_REWINDDIR=1; AC_SUBST([HAVE_REWINDDIR]) HAVE_CLOSEDIR=1; AC_SUBST([HAVE_CLOSEDIR]) HAVE_DECL_DIRFD=1; AC_SUBST([HAVE_DECL_DIRFD]) HAVE_DECL_FDOPENDIR=1;AC_SUBST([HAVE_DECL_FDOPENDIR]) HAVE_FDOPENDIR=1; AC_SUBST([HAVE_FDOPENDIR]) HAVE_SCANDIR=1; AC_SUBST([HAVE_SCANDIR]) HAVE_ALPHASORT=1; AC_SUBST([HAVE_ALPHASORT]) REPLACE_OPENDIR=0; AC_SUBST([REPLACE_OPENDIR]) REPLACE_CLOSEDIR=0; AC_SUBST([REPLACE_CLOSEDIR]) REPLACE_DIRFD=0; AC_SUBST([REPLACE_DIRFD]) REPLACE_FDOPENDIR=0; AC_SUBST([REPLACE_FDOPENDIR]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fcntl.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000012172�14226564451�012010� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fcntl.m4 serial 11 dnl Copyright (C) 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # For now, this module ensures that fcntl() # - supports F_DUPFD correctly # - supports or emulates F_DUPFD_CLOEXEC # - supports F_GETFD # Still to be ported to mingw: # - F_SETFD # - F_GETFL, F_SETFL # - F_GETOWN, F_SETOWN # - F_GETLK, F_SETLK, F_SETLKW AC_DEFUN([gl_FUNC_FCNTL], [ dnl Persuade glibc to expose F_DUPFD_CLOEXEC. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([fcntl]) if test $ac_cv_func_fcntl = no; then gl_REPLACE_FCNTL else dnl cygwin 1.5.x F_DUPFD has wrong errno, and allows negative target dnl haiku alpha 2 F_DUPFD has wrong errno AC_CACHE_CHECK([whether fcntl handles F_DUPFD correctly], [gl_cv_func_fcntl_f_dupfd_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> ]GL_MDA_DEFINES[ #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif ]], [[int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; if (fcntl (0, F_DUPFD, -1) != -1) result |= 1; if (errno != EINVAL) result |= 2; if (fcntl (0, F_DUPFD, bad_fd) != -1) result |= 4; if (errno != EINVAL) result |= 8; /* On OS/2 kLIBC, F_DUPFD does not work on a directory fd */ { int fd; fd = open (".", O_RDONLY); if (fd == -1) result |= 16; else if (fcntl (fd, F_DUPFD, STDERR_FILENO + 1) == -1) result |= 32; close (fd); } return result;]])], [gl_cv_func_fcntl_f_dupfd_works=yes], [gl_cv_func_fcntl_f_dupfd_works=no], [case $host_os in aix* | cygwin* | haiku*) gl_cv_func_fcntl_f_dupfd_works="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_works="guessing yes" ;; esac])]) case $gl_cv_func_fcntl_f_dupfd_works in *yes) ;; *) gl_REPLACE_FCNTL AC_DEFINE([FCNTL_DUPFD_BUGGY], [1], [Define this to 1 if F_DUPFD behavior does not match POSIX]) ;; esac dnl Many systems lack F_DUPFD_CLOEXEC. dnl NetBSD 9.0 declares F_DUPFD_CLOEXEC but it works only like F_DUPFD. AC_CACHE_CHECK([whether fcntl understands F_DUPFD_CLOEXEC], [gl_cv_func_fcntl_f_dupfd_cloexec], [AC_RUN_IFELSE( [AC_LANG_SOURCE( [[#include <fcntl.h> #include <unistd.h> int main (int argc, char *argv[]) { if (argc == 1) /* parent process */ { if (fcntl (1, F_DUPFD_CLOEXEC, 10) < 0) return 1; return execl ("./conftest", "./conftest", "child", NULL); } else /* child process */ return (fcntl (10, F_GETFL) < 0 ? 0 : 42); } ]]) ], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #ifdef __linux__ /* The Linux kernel only added F_DUPFD_CLOEXEC in 2.6.24, so we always replace it to support the semantics on older kernels that failed with EINVAL. */ choke me #endif ]])], [gl_cv_func_fcntl_f_dupfd_cloexec=yes], [gl_cv_func_fcntl_f_dupfd_cloexec="needs runtime check"]) ], [gl_cv_func_fcntl_f_dupfd_cloexec=no], [case "$host_os" in # Guess no on NetBSD. netbsd*) gl_cv_func_fcntl_f_dupfd_cloexec="guessing no" ;; *) gl_cv_func_fcntl_f_dupfd_cloexec="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_fcntl_f_dupfd_cloexec" in *yes) ;; *) gl_REPLACE_FCNTL dnl No witness macro needed for this bug. ;; esac fi dnl Replace fcntl() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then gl_REPLACE_FCNTL fi ]) ]) AC_DEFUN([gl_REPLACE_FCNTL], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([fcntl]) if test $ac_cv_func_fcntl = no; then HAVE_FCNTL=0 else REPLACE_FCNTL=1 fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/stat-time.m4������������������������������������������������������������������������0000644�0000000�0000000�00000006057�14226564452�012617� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Checks for stat-related time functions. # Copyright (C) 1998-1999, 2001, 2003, 2005-2007, 2009-2022 Free Software # Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # st_atim.tv_nsec - Linux, Solaris, Cygwin # st_atimespec.tv_nsec - FreeBSD, NetBSD, if ! defined _POSIX_SOURCE # st_atimensec - FreeBSD, NetBSD, if defined _POSIX_SOURCE # st_atim.st__tim.tv_nsec - UnixWare (at least 2.1.2 through 7.1) # st_birthtimespec - FreeBSD, NetBSD (hidden on OpenBSD 3.9, anyway) # st_birthtim - Cygwin 1.7.0+ AC_DEFUN([gl_STAT_TIME], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CHECK_MEMBERS([struct stat.st_atim.tv_nsec], [AC_CACHE_CHECK([whether struct stat.st_atim is of type struct timespec], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[ #include <sys/types.h> #include <sys/stat.h> #if HAVE_SYS_TIME_H # include <sys/time.h> #endif #include <time.h> struct timespec ts; struct stat st; ]], [[ st.st_atim = ts; ]])], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=yes], [ac_cv_typeof_struct_stat_st_atim_is_struct_timespec=no])]) if test $ac_cv_typeof_struct_stat_st_atim_is_struct_timespec = yes; then AC_DEFINE([TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC], [1], [Define to 1 if the type of the st_atim member of a struct stat is struct timespec.]) fi], [AC_CHECK_MEMBERS([struct stat.st_atimespec.tv_nsec], [], [AC_CHECK_MEMBERS([struct stat.st_atimensec], [], [AC_CHECK_MEMBERS([struct stat.st_atim.st__tim.tv_nsec], [], [], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>]) ]) # Check for st_birthtime, a feature from UFS2 (FreeBSD, NetBSD, OpenBSD, etc.) # and NTFS (Cygwin). # There was a time when this field was named st_createtime (21 June # 2002 to 16 July 2002) But that window is very small and applied only # to development code, so systems still using that configuration are # not supported. See revisions 1.10 and 1.11 of FreeBSD's # src/sys/ufs/ufs/dinode.h. # AC_DEFUN([gl_STAT_BIRTHTIME], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CHECK_MEMBERS([struct stat.st_birthtimespec.tv_nsec], [], [AC_CHECK_MEMBERS([struct stat.st_birthtimensec], [], [AC_CHECK_MEMBERS([struct stat.st_birthtim.tv_nsec], [], [], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>])], [#include <sys/types.h> #include <sys/stat.h>]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/strsep.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000001311�14226564452�012214� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strsep.m4 serial 11 dnl Copyright (C) 2002-2004, 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRSEP], [ dnl Persuade glibc <string.h> to declare strsep(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl The strsep() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([strsep]) if test $ac_cv_func_strsep = no; then HAVE_STRSEP=0 fi ]) # Prerequisites of lib/strsep.c. AC_DEFUN([gl_PREREQ_STRSEP], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/quote.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000000573�14226564452�012042� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# quote.m4 serial 6 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_QUOTE], [ dnl Prerequisites of lib/quote.c. dnl (none) : ]) �������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/stdlib_h.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000023322�14226564452�012472� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdlib_h.m4 serial 66 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_STDLIB_H], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) gl_NEXT_HEADERS([stdlib.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include <stdlib.h> #if HAVE_SYS_LOADAVG_H /* OpenIndiana has a bug: <sys/time.h> must be included before <sys/loadavg.h>. */ # include <sys/time.h> # include <sys/loadavg.h> #endif #if HAVE_RANDOM_H # include <random.h> #endif ]], [_Exit aligned_alloc atoll canonicalize_file_name free getloadavg getsubopt grantpt initstate initstate_r mbtowc mkdtemp mkostemp mkostemps mkstemp mkstemps posix_memalign posix_openpt ptsname ptsname_r qsort_r random random_r reallocarray realpath rpmatch secure_getenv setenv setstate setstate_r srandom srandom_r strtod strtol strtold strtoll strtoul strtoull unlockpt unsetenv]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS_ONCE([ecvt]) if test $ac_cv_have_decl_ecvt = no; then HAVE_DECL_ECVT=0 fi AC_CHECK_DECLS_ONCE([fcvt]) if test $ac_cv_have_decl_fcvt = no; then HAVE_DECL_FCVT=0 fi AC_CHECK_DECLS_ONCE([gcvt]) if test $ac_cv_have_decl_gcvt = no; then HAVE_DECL_GCVT=0 fi ]) # gl_STDLIB_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STDLIB_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STDLIB_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STDLIB_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB__EXIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ALIGNED_ALLOC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATOLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CALLOC_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CANONICALIZE_FILE_NAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREE_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLOADAVG]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSUBOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GRANTPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MALLOC_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBTOWC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDTEMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKOSTEMPS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKSTEMPS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_MEMALIGN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_OPENPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTSNAME_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_QSORT_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RANDOM_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOCARRAY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALLOC_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REALPATH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RPMATCH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SECURE_GETENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOULL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SYSTEM_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNLOCKPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNSETENV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOMB]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_ECVT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCVT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GCVT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKTEMP], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTENV], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STDLIB_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) ]) AC_DEFUN([gl_STDLIB_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE__EXIT=1; AC_SUBST([HAVE__EXIT]) HAVE_ALIGNED_ALLOC=1; AC_SUBST([HAVE_ALIGNED_ALLOC]) HAVE_ATOLL=1; AC_SUBST([HAVE_ATOLL]) HAVE_CANONICALIZE_FILE_NAME=1; AC_SUBST([HAVE_CANONICALIZE_FILE_NAME]) HAVE_DECL_ECVT=1; AC_SUBST([HAVE_DECL_ECVT]) HAVE_DECL_FCVT=1; AC_SUBST([HAVE_DECL_FCVT]) HAVE_DECL_GCVT=1; AC_SUBST([HAVE_DECL_GCVT]) HAVE_DECL_GETLOADAVG=1; AC_SUBST([HAVE_DECL_GETLOADAVG]) HAVE_GETSUBOPT=1; AC_SUBST([HAVE_GETSUBOPT]) HAVE_GRANTPT=1; AC_SUBST([HAVE_GRANTPT]) HAVE_INITSTATE=1; AC_SUBST([HAVE_INITSTATE]) HAVE_DECL_INITSTATE=1; AC_SUBST([HAVE_DECL_INITSTATE]) HAVE_MBTOWC=1; AC_SUBST([HAVE_MBTOWC]) HAVE_MKDTEMP=1; AC_SUBST([HAVE_MKDTEMP]) HAVE_MKOSTEMP=1; AC_SUBST([HAVE_MKOSTEMP]) HAVE_MKOSTEMPS=1; AC_SUBST([HAVE_MKOSTEMPS]) HAVE_MKSTEMP=1; AC_SUBST([HAVE_MKSTEMP]) HAVE_MKSTEMPS=1; AC_SUBST([HAVE_MKSTEMPS]) HAVE_POSIX_MEMALIGN=1; AC_SUBST([HAVE_POSIX_MEMALIGN]) HAVE_POSIX_OPENPT=1; AC_SUBST([HAVE_POSIX_OPENPT]) HAVE_PTSNAME=1; AC_SUBST([HAVE_PTSNAME]) HAVE_PTSNAME_R=1; AC_SUBST([HAVE_PTSNAME_R]) HAVE_QSORT_R=1; AC_SUBST([HAVE_QSORT_R]) HAVE_RANDOM=1; AC_SUBST([HAVE_RANDOM]) HAVE_RANDOM_H=1; AC_SUBST([HAVE_RANDOM_H]) HAVE_RANDOM_R=1; AC_SUBST([HAVE_RANDOM_R]) HAVE_REALLOCARRAY=1; AC_SUBST([HAVE_REALLOCARRAY]) HAVE_REALPATH=1; AC_SUBST([HAVE_REALPATH]) HAVE_RPMATCH=1; AC_SUBST([HAVE_RPMATCH]) HAVE_SECURE_GETENV=1; AC_SUBST([HAVE_SECURE_GETENV]) HAVE_SETENV=1; AC_SUBST([HAVE_SETENV]) HAVE_DECL_SETENV=1; AC_SUBST([HAVE_DECL_SETENV]) HAVE_SETSTATE=1; AC_SUBST([HAVE_SETSTATE]) HAVE_DECL_SETSTATE=1; AC_SUBST([HAVE_DECL_SETSTATE]) HAVE_STRTOD=1; AC_SUBST([HAVE_STRTOD]) HAVE_STRTOL=1; AC_SUBST([HAVE_STRTOL]) HAVE_STRTOLD=1; AC_SUBST([HAVE_STRTOLD]) HAVE_STRTOLL=1; AC_SUBST([HAVE_STRTOLL]) HAVE_STRTOUL=1; AC_SUBST([HAVE_STRTOUL]) HAVE_STRTOULL=1; AC_SUBST([HAVE_STRTOULL]) HAVE_STRUCT_RANDOM_DATA=1; AC_SUBST([HAVE_STRUCT_RANDOM_DATA]) HAVE_SYS_LOADAVG_H=0; AC_SUBST([HAVE_SYS_LOADAVG_H]) HAVE_UNLOCKPT=1; AC_SUBST([HAVE_UNLOCKPT]) HAVE_DECL_UNSETENV=1; AC_SUBST([HAVE_DECL_UNSETENV]) REPLACE_ALIGNED_ALLOC=0; AC_SUBST([REPLACE_ALIGNED_ALLOC]) REPLACE_CALLOC_FOR_CALLOC_GNU=0; AC_SUBST([REPLACE_CALLOC_FOR_CALLOC_GNU]) REPLACE_CALLOC_FOR_CALLOC_POSIX=0; AC_SUBST([REPLACE_CALLOC_FOR_CALLOC_POSIX]) REPLACE_CANONICALIZE_FILE_NAME=0; AC_SUBST([REPLACE_CANONICALIZE_FILE_NAME]) REPLACE_FREE=0; AC_SUBST([REPLACE_FREE]) REPLACE_INITSTATE=0; AC_SUBST([REPLACE_INITSTATE]) REPLACE_MALLOC_FOR_MALLOC_GNU=0; AC_SUBST([REPLACE_MALLOC_FOR_MALLOC_GNU]) REPLACE_MALLOC_FOR_MALLOC_POSIX=0; AC_SUBST([REPLACE_MALLOC_FOR_MALLOC_POSIX]) REPLACE_MBTOWC=0; AC_SUBST([REPLACE_MBTOWC]) REPLACE_MKSTEMP=0; AC_SUBST([REPLACE_MKSTEMP]) REPLACE_POSIX_MEMALIGN=0; AC_SUBST([REPLACE_POSIX_MEMALIGN]) REPLACE_PTSNAME=0; AC_SUBST([REPLACE_PTSNAME]) REPLACE_PTSNAME_R=0; AC_SUBST([REPLACE_PTSNAME_R]) REPLACE_PUTENV=0; AC_SUBST([REPLACE_PUTENV]) REPLACE_QSORT_R=0; AC_SUBST([REPLACE_QSORT_R]) REPLACE_RANDOM=0; AC_SUBST([REPLACE_RANDOM]) REPLACE_RANDOM_R=0; AC_SUBST([REPLACE_RANDOM_R]) REPLACE_REALLOC_FOR_REALLOC_GNU=0; AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_GNU]) REPLACE_REALLOC_FOR_REALLOC_POSIX=0; AC_SUBST([REPLACE_REALLOC_FOR_REALLOC_POSIX]) REPLACE_REALLOCARRAY=0; AC_SUBST([REPLACE_REALLOCARRAY]) REPLACE_REALPATH=0; AC_SUBST([REPLACE_REALPATH]) REPLACE_SETENV=0; AC_SUBST([REPLACE_SETENV]) REPLACE_SETSTATE=0; AC_SUBST([REPLACE_SETSTATE]) REPLACE_STRTOD=0; AC_SUBST([REPLACE_STRTOD]) REPLACE_STRTOL=0; AC_SUBST([REPLACE_STRTOL]) REPLACE_STRTOLD=0; AC_SUBST([REPLACE_STRTOLD]) REPLACE_STRTOLL=0; AC_SUBST([REPLACE_STRTOLL]) REPLACE_STRTOUL=0; AC_SUBST([REPLACE_STRTOUL]) REPLACE_STRTOULL=0; AC_SUBST([REPLACE_STRTOULL]) REPLACE_UNSETENV=0; AC_SUBST([REPLACE_UNSETENV]) REPLACE_WCTOMB=0; AC_SUBST([REPLACE_WCTOMB]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/explicit_bzero.m4�������������������������������������������������������������������0000644�0000000�0000000�00000001225�14226564451�013721� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Copyright 2017-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EXPLICIT_BZERO], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) dnl Persuade glibc <string.h> to declare explicit_bzero. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([explicit_bzero]) if test $ac_cv_func_explicit_bzero = no; then HAVE_EXPLICIT_BZERO=0 fi ]) AC_DEFUN([gl_PREREQ_EXPLICIT_BZERO], [ AC_CHECK_FUNCS([explicit_memset]) AC_CHECK_FUNCS_ONCE([memset_s]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/pathmax.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000002155�14226564452�012345� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pathmax.m4 serial 11 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PATHMAX], [ dnl Prerequisites of lib/pathmax.h. AC_CHECK_HEADERS_ONCE([sys/param.h]) ]) # Expands to a piece of C program that defines PATH_MAX in the same way as # "pathmax.h" will do. AC_DEFUN([gl_PATHMAX_SNIPPET], [[ /* Arrange to define PATH_MAX, like "pathmax.h" does. */ #if HAVE_UNISTD_H # include <unistd.h> #endif #include <limits.h> #if defined HAVE_SYS_PARAM_H && !defined PATH_MAX && !defined MAXPATHLEN # include <sys/param.h> #endif #if !defined PATH_MAX && defined MAXPATHLEN # define PATH_MAX MAXPATHLEN #endif #ifdef __hpux # undef PATH_MAX # define PATH_MAX 1024 #endif #if defined _WIN32 && ! defined __CYGWIN__ # undef PATH_MAX # define PATH_MAX 260 #endif ]]) # Prerequisites of gl_PATHMAX_SNIPPET. AC_DEFUN([gl_PATHMAX_SNIPPET_PREREQ], [ AC_CHECK_HEADERS_ONCE([unistd.h sys/param.h]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/printf-posix-rpl.m4�����������������������������������������������������������������0000644�0000000�0000000�00000001374�14226564452�014142� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf-posix-rpl.m4 serial 4 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PRINTF_POSIX], [ AC_REQUIRE([gl_FUNC_VFPRINTF_POSIX]) if test $gl_cv_func_vfprintf_posix = no; then gl_REPLACE_PRINTF fi ]) AC_DEFUN([gl_REPLACE_PRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_ASM_SYMBOL_PREFIX]) AC_LIBOBJ([printf]) REPLACE_PRINTF=1 AC_DEFINE([REPLACE_PRINTF_POSIX], [1], [Define if printf is overridden by a POSIX compliant gnulib implementation.]) gl_PREREQ_PRINTF ]) AC_DEFUN([gl_PREREQ_PRINTF], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/access.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000001066�14226564447�012150� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# access.m4 serial 1 dnl Copyright (C) 2019-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ACCESS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On native Windows, access (= _access) does not support the X_OK mode. dnl It works by chance on some versions of mingw. case "$host_os" in mingw*) REPLACE_ACCESS=1 ;; esac ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/off_t.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000001006�14226564452�011772� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# off_t.m4 serial 1 dnl Copyright (C) 2012-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check whether to override the 'off_t' type. dnl Set WINDOWS_64_BIT_OFF_T. AC_DEFUN([gl_TYPE_OFF_T], [ m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_OFF_T=0 ]) AC_SUBST([WINDOWS_64_BIT_OFF_T]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/tempname.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000001032�14226564453�012503� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 5 # Copyright (C) 2006-2007, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # glibc provides __gen_tempname as a wrapper for mk[ds]temp. Expose # it as a public API, and provide it on systems that are lacking. AC_DEFUN([gl_FUNC_GEN_TEMPNAME], [ gl_PREREQ_TEMPNAME ]) # Prerequisites of lib/tempname.c. AC_DEFUN([gl_PREREQ_TEMPNAME], [ : ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/po.m4�������������������������������������������������������������������������������0000644�0000000�0000000�00000045031�13413351610�011304� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# po.m4 serial 24 (gettext-0.19) dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. AC_PREREQ([2.60]) dnl Checks for all prerequisites of the po subdirectory. AC_DEFUN([AM_PO_SUBDIRS], [ AC_REQUIRE([AC_PROG_MAKE_SET])dnl AC_REQUIRE([AC_PROG_INSTALL])dnl AC_REQUIRE([AC_PROG_MKDIR_P])dnl AC_REQUIRE([AC_PROG_SED])dnl AC_REQUIRE([AM_NLS])dnl dnl Release version of the gettext macros. This is used to ensure that dnl the gettext macros and po/Makefile.in.in are in sync. AC_SUBST([GETTEXT_MACRO_VERSION], [0.19]) dnl Perform the following tests also if --disable-nls has been given, dnl because they are needed for "make dist" to work. dnl Search for GNU msgfmt in the PATH. dnl The first test excludes Solaris msgfmt and early GNU msgfmt versions. dnl The second test excludes FreeBSD msgfmt. AM_PATH_PROG_WITH_TEST(MSGFMT, msgfmt, [$ac_dir/$ac_word --statistics /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --statistics /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) AC_PATH_PROG([GMSGFMT], [gmsgfmt], [$MSGFMT]) dnl Test whether it is GNU msgfmt >= 0.15. changequote(,)dnl case `$MSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) MSGFMT_015=: ;; *) MSGFMT_015=$MSGFMT ;; esac changequote([,])dnl AC_SUBST([MSGFMT_015]) changequote(,)dnl case `$GMSGFMT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) GMSGFMT_015=: ;; *) GMSGFMT_015=$GMSGFMT ;; esac changequote([,])dnl AC_SUBST([GMSGFMT_015]) dnl Search for GNU xgettext 0.12 or newer in the PATH. dnl The first test excludes Solaris xgettext and early GNU xgettext versions. dnl The second test excludes FreeBSD xgettext. AM_PATH_PROG_WITH_TEST(XGETTEXT, xgettext, [$ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1 && (if $ac_dir/$ac_word --omit-header --copyright-holder= --msgid-bugs-address= /dev/null 2>&1 >/dev/null | grep usage >/dev/null; then exit 1; else exit 0; fi)], :) dnl Remove leftover from FreeBSD xgettext call. rm -f messages.po dnl Test whether it is GNU xgettext >= 0.15. changequote(,)dnl case `$XGETTEXT --version | sed 1q | sed -e 's,^[^0-9]*,,'` in '' | 0.[0-9] | 0.[0-9].* | 0.1[0-4] | 0.1[0-4].*) XGETTEXT_015=: ;; *) XGETTEXT_015=$XGETTEXT ;; esac changequote([,])dnl AC_SUBST([XGETTEXT_015]) dnl Search for GNU msgmerge 0.11 or newer in the PATH. AM_PATH_PROG_WITH_TEST(MSGMERGE, msgmerge, [$ac_dir/$ac_word --update -q /dev/null /dev/null >&]AS_MESSAGE_LOG_FD[ 2>&1], :) dnl Installation directories. dnl Autoconf >= 2.60 defines localedir. For older versions of autoconf, we dnl have to define it here, so that it can be used in po/Makefile. test -n "$localedir" || localedir='${datadir}/locale' AC_SUBST([localedir]) dnl Support for AM_XGETTEXT_OPTION. test -n "${XGETTEXT_EXTRA_OPTIONS+set}" || XGETTEXT_EXTRA_OPTIONS= AC_SUBST([XGETTEXT_EXTRA_OPTIONS]) AC_CONFIG_COMMANDS([po-directories], [[ for ac_file in $CONFIG_FILES; do # Support "outfile[:infile[:infile...]]" case "$ac_file" in *:*) ac_file=`echo "$ac_file"|sed 's%:.*%%'` ;; esac # PO directories have a Makefile.in generated from Makefile.in.in. case "$ac_file" in */Makefile.in) # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Treat a directory as a PO directory if and only if it has a # POTFILES.in file. This allows packages to have multiple PO # directories under different names or in different locations. if test -f "$ac_given_srcdir/$ac_dir/POTFILES.in"; then rm -f "$ac_dir/POTFILES" test -n "$as_me" && echo "$as_me: creating $ac_dir/POTFILES" || echo "creating $ac_dir/POTFILES" gt_tab=`printf '\t'` cat "$ac_given_srcdir/$ac_dir/POTFILES.in" | sed -e "/^#/d" -e "/^[ ${gt_tab}]*\$/d" -e "s,.*, $top_srcdir/& \\\\," | sed -e "\$s/\(.*\) \\\\/\1/" > "$ac_dir/POTFILES" POMAKEFILEDEPS="POTFILES.in" # ALL_LINGUAS, POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES depend # on $ac_dir but don't depend on user-specified configuration # parameters. if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # The set of available languages was given in configure.in. # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$OBSOLETE_ALL_LINGUAS' fi # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" done fi test -n "$as_me" && echo "$as_me: creating $ac_dir/Makefile" || echo "creating $ac_dir/Makefile" sed -e "/^POTFILES =/r $ac_dir/POTFILES" -e "/^# Makevars/r $ac_given_srcdir/$ac_dir/Makevars" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@POMAKEFILEDEPS@|$POMAKEFILEDEPS|g" "$ac_dir/Makefile.in" > "$ac_dir/Makefile" for f in "$ac_given_srcdir/$ac_dir"/Rules-*; do if test -f "$f"; then case "$f" in *.orig | *.bak | *~) ;; *) cat "$f" >> "$ac_dir/Makefile" ;; esac fi done fi ;; esac done]], [# Capture the value of obsolete ALL_LINGUAS because we need it to compute # POFILES, UPDATEPOFILES, DUMMYPOFILES, GMOFILES, CATALOGS. But hide it # from automake < 1.5. eval 'OBSOLETE_ALL_LINGUAS''="$ALL_LINGUAS"' # Capture the value of LINGUAS because we need it to compute CATALOGS. LINGUAS="${LINGUAS-%UNSET%}" ]) ]) dnl Postprocesses a Makefile in a directory containing PO files. AC_DEFUN([AM_POSTPROCESS_PO_MAKEFILE], [ # When this code is run, in config.status, two variables have already been # set: # - OBSOLETE_ALL_LINGUAS is the value of LINGUAS set in configure.in, # - LINGUAS is the value of the environment variable LINGUAS at configure # time. changequote(,)dnl # Adjust a relative srcdir. ac_dir=`echo "$ac_file"|sed 's%/[^/][^/]*$%%'` ac_dir_suffix=/`echo "$ac_dir"|sed 's%^\./%%'` ac_dots=`echo "$ac_dir_suffix"|sed 's%/[^/]*%../%g'` # In autoconf-2.13 it is called $ac_given_srcdir. # In autoconf-2.50 it is called $srcdir. test -n "$ac_given_srcdir" || ac_given_srcdir="$srcdir" case "$ac_given_srcdir" in .) top_srcdir=`echo $ac_dots|sed 's%/$%%'` ;; /*) top_srcdir="$ac_given_srcdir" ;; *) top_srcdir="$ac_dots$ac_given_srcdir" ;; esac # Find a way to echo strings without interpreting backslash. if test "X`(echo '\t') 2>/dev/null`" = 'X\t'; then gt_echo='echo' else if test "X`(printf '%s\n' '\t') 2>/dev/null`" = 'X\t'; then gt_echo='printf %s\n' else echo_func () { cat <<EOT $* EOT } gt_echo='echo_func' fi fi # A sed script that extracts the value of VARIABLE from a Makefile. tab=`printf '\t'` sed_x_variable=' # Test if the hold space is empty. x s/P/P/ x ta # Yes it was empty. Look if we have the expected variable definition. /^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=/{ # Seen the first line of the variable definition. s/^['"${tab}"' ]*VARIABLE['"${tab}"' ]*=// ba } bd :a # Here we are processing a line from the variable definition. # Remove comment, more precisely replace it with a space. s/#.*$/ / # See if the line ends in a backslash. tb :b s/\\$// # Print the line, without the trailing backslash. p tc # There was no trailing backslash. The end of the variable definition is # reached. Clear the hold space. s/^.*$// x bd :c # A trailing backslash means that the variable definition continues in the # next line. Put a nonempty string into the hold space to indicate this. s/^.*$/P/ x :d ' changequote([,])dnl # Set POTFILES to the value of the Makefile variable POTFILES. sed_x_POTFILES=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/POTFILES/g'` POTFILES=`sed -n -e "$sed_x_POTFILES" < "$ac_file"` # Compute POTFILES_DEPS as # $(foreach file, $(POTFILES), $(top_srcdir)/$(file)) POTFILES_DEPS= for file in $POTFILES; do POTFILES_DEPS="$POTFILES_DEPS "'$(top_srcdir)/'"$file" done POMAKEFILEDEPS="" if test -n "$OBSOLETE_ALL_LINGUAS"; then test -n "$as_me" && echo "$as_me: setting ALL_LINGUAS in configure.in is obsolete" || echo "setting ALL_LINGUAS in configure.in is obsolete" fi if test -f "$ac_given_srcdir/$ac_dir/LINGUAS"; then # The LINGUAS file contains the set of available languages. ALL_LINGUAS_=`sed -e "/^#/d" -e "s/#.*//" "$ac_given_srcdir/$ac_dir/LINGUAS"` POMAKEFILEDEPS="$POMAKEFILEDEPS LINGUAS" else # Set ALL_LINGUAS to the value of the Makefile variable LINGUAS. sed_x_LINGUAS=`$gt_echo "$sed_x_variable" | sed -e '/^ *#/d' -e 's/VARIABLE/LINGUAS/g'` ALL_LINGUAS_=`sed -n -e "$sed_x_LINGUAS" < "$ac_file"` fi # Hide the ALL_LINGUAS assignment from automake < 1.5. eval 'ALL_LINGUAS''=$ALL_LINGUAS_' # Compute POFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).po) # Compute UPDATEPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).po-update) # Compute DUMMYPOFILES # as $(foreach lang, $(ALL_LINGUAS), $(lang).nop) # Compute GMOFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).gmo) # Compute PROPERTIESFILES # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).properties) # Compute CLASSFILES # as $(foreach lang, $(ALL_LINGUAS), $(top_srcdir)/$(DOMAIN)_$(lang).class) # Compute QMFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(lang).qm) # Compute MSGFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang)).msg) # Compute RESOURCESDLLFILES # as $(foreach lang, $(ALL_LINGUAS), $(srcdir)/$(frob $(lang))/$(DOMAIN).resources.dll) case "$ac_given_srcdir" in .) srcdirpre= ;; *) srcdirpre='$(srcdir)/' ;; esac POFILES= UPDATEPOFILES= DUMMYPOFILES= GMOFILES= PROPERTIESFILES= CLASSFILES= QMFILES= MSGFILES= RESOURCESDLLFILES= for lang in $ALL_LINGUAS; do POFILES="$POFILES $srcdirpre$lang.po" UPDATEPOFILES="$UPDATEPOFILES $lang.po-update" DUMMYPOFILES="$DUMMYPOFILES $lang.nop" GMOFILES="$GMOFILES $srcdirpre$lang.gmo" PROPERTIESFILES="$PROPERTIESFILES \$(top_srcdir)/\$(DOMAIN)_$lang.properties" CLASSFILES="$CLASSFILES \$(top_srcdir)/\$(DOMAIN)_$lang.class" QMFILES="$QMFILES $srcdirpre$lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` MSGFILES="$MSGFILES $srcdirpre$frobbedlang.msg" frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` RESOURCESDLLFILES="$RESOURCESDLLFILES $srcdirpre$frobbedlang/\$(DOMAIN).resources.dll" done # CATALOGS depends on both $ac_dir and the user's LINGUAS # environment variable. INST_LINGUAS= if test -n "$ALL_LINGUAS"; then for presentlang in $ALL_LINGUAS; do useit=no if test "%UNSET%" != "$LINGUAS"; then desiredlanguages="$LINGUAS" else desiredlanguages="$ALL_LINGUAS" fi for desiredlang in $desiredlanguages; do # Use the presentlang catalog if desiredlang is # a. equal to presentlang, or # b. a variant of presentlang (because in this case, # presentlang can be used as a fallback for messages # which are not translated in the desiredlang catalog). case "$desiredlang" in "$presentlang"*) useit=yes;; esac done if test $useit = yes; then INST_LINGUAS="$INST_LINGUAS $presentlang" fi done fi CATALOGS= JAVACATALOGS= QTCATALOGS= TCLCATALOGS= CSHARPCATALOGS= if test -n "$INST_LINGUAS"; then for lang in $INST_LINGUAS; do CATALOGS="$CATALOGS $lang.gmo" JAVACATALOGS="$JAVACATALOGS \$(DOMAIN)_$lang.properties" QTCATALOGS="$QTCATALOGS $lang.qm" frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` TCLCATALOGS="$TCLCATALOGS $frobbedlang.msg" frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` CSHARPCATALOGS="$CSHARPCATALOGS $frobbedlang/\$(DOMAIN).resources.dll" done fi sed -e "s|@POTFILES_DEPS@|$POTFILES_DEPS|g" -e "s|@POFILES@|$POFILES|g" -e "s|@UPDATEPOFILES@|$UPDATEPOFILES|g" -e "s|@DUMMYPOFILES@|$DUMMYPOFILES|g" -e "s|@GMOFILES@|$GMOFILES|g" -e "s|@PROPERTIESFILES@|$PROPERTIESFILES|g" -e "s|@CLASSFILES@|$CLASSFILES|g" -e "s|@QMFILES@|$QMFILES|g" -e "s|@MSGFILES@|$MSGFILES|g" -e "s|@RESOURCESDLLFILES@|$RESOURCESDLLFILES|g" -e "s|@CATALOGS@|$CATALOGS|g" -e "s|@JAVACATALOGS@|$JAVACATALOGS|g" -e "s|@QTCATALOGS@|$QTCATALOGS|g" -e "s|@TCLCATALOGS@|$TCLCATALOGS|g" -e "s|@CSHARPCATALOGS@|$CSHARPCATALOGS|g" -e 's,^#distdir:,distdir:,' < "$ac_file" > "$ac_file.tmp" tab=`printf '\t'` if grep -l '@TCLCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/\..*$//' -e 'y/ABCDEFGHIJKLMNOPQRSTUVWXYZ/abcdefghijklmnopqrstuvwxyz/'` cat >> "$ac_file.tmp" <<EOF $frobbedlang.msg: $lang.po ${tab}@echo "\$(MSGFMT) -c --tcl -d \$(srcdir) -l $lang $srcdirpre$lang.po"; \ ${tab}\$(MSGFMT) -c --tcl -d "\$(srcdir)" -l $lang $srcdirpre$lang.po || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } EOF done fi if grep -l '@CSHARPCATALOGS@' "$ac_file" > /dev/null; then # Add dependencies that cannot be formulated as a simple suffix rule. for lang in $ALL_LINGUAS; do frobbedlang=`echo $lang | sed -e 's/_/-/g' -e 's/^sr-CS/sr-SP/' -e 's/@latin$/-Latn/' -e 's/@cyrillic$/-Cyrl/' -e 's/^sr-SP$/sr-SP-Latn/' -e 's/^uz-UZ$/uz-UZ-Latn/'` cat >> "$ac_file.tmp" <<EOF $frobbedlang/\$(DOMAIN).resources.dll: $lang.po ${tab}@echo "\$(MSGFMT) -c --csharp -d \$(srcdir) -l $lang $srcdirpre$lang.po -r \$(DOMAIN)"; \ ${tab}\$(MSGFMT) -c --csharp -d "\$(srcdir)" -l $lang $srcdirpre$lang.po -r "\$(DOMAIN)" || { rm -f "\$(srcdir)/$frobbedlang.msg"; exit 1; } EOF done fi if test -n "$POMAKEFILEDEPS"; then cat >> "$ac_file.tmp" <<EOF Makefile: $POMAKEFILEDEPS EOF fi mv "$ac_file.tmp" "$ac_file" ]) dnl Initializes the accumulator used by AM_XGETTEXT_OPTION. AC_DEFUN([AM_XGETTEXT_OPTION_INIT], [ XGETTEXT_EXTRA_OPTIONS= ]) dnl Registers an option to be passed to xgettext in the po subdirectory. AC_DEFUN([AM_XGETTEXT_OPTION], [ AC_REQUIRE([AM_XGETTEXT_OPTION_INIT]) XGETTEXT_EXTRA_OPTIONS="$XGETTEXT_EXTRA_OPTIONS $1" ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/strverscmp.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000001177�14226564452�013116� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strverscmp.m4 serial 9 dnl Copyright (C) 2002, 2005-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRVERSCMP], [ dnl Persuade glibc <string.h> to declare strverscmp(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([strverscmp]) if test $ac_cv_func_strverscmp = no; then HAVE_STRVERSCMP=0 fi ]) # Prerequisites of lib/strverscmp.c. AC_DEFUN([gl_PREREQ_STRVERSCMP], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/flock.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000001267�14226564452�012004� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# flock.m4 serial 4 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FLOCK], [ AC_REQUIRE([gl_SYS_FILE_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([flock]) if test $ac_cv_func_flock = no; then HAVE_FLOCK=0 fi ]) dnl Prerequisites of lib/flock.c. AC_DEFUN([gl_PREREQ_FLOCK], [ AC_CHECK_FUNCS_ONCE([fcntl]) AC_CHECK_HEADERS_ONCE([unistd.h]) dnl Do we have a POSIX fcntl lock implementation? AC_CHECK_MEMBERS([struct flock.l_type],[],[],[[#include <fcntl.h>]]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/sh-filename.m4����������������������������������������������������������������������0000644�0000000�0000000�00000001556�14226564452�013077� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sh-filename.m4 serial 3 dnl Copyright (C) 2018-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gl_SH_FILENAME], [ AH_VERBATIM([SH_FILENAME], [/* File name of the Bourne shell. */ #if (defined _WIN32 && !defined __CYGWIN__) || defined __CYGWIN__ || defined __ANDROID__ /* Omit the directory part because - For native Windows programs in a Cygwin environment, the Cygwin mounts are not visible. - For 32-bit Cygwin programs in a 64-bit Cygwin environment, the Cygwin mounts are not visible. - On Android, /bin/sh does not exist. It's /system/bin/sh instead. */ # define BOURNE_SHELL "sh" #else # define BOURNE_SHELL "/bin/sh" #endif]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/visibility.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000006622�14226564453�013076� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# visibility.m4 serial 8 dnl Copyright (C) 2005, 2008, 2010-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Tests whether the compiler supports the command-line option dnl -fvisibility=hidden and the function and variable attributes dnl __attribute__((__visibility__("hidden"))) and dnl __attribute__((__visibility__("default"))). dnl Does *not* test for __visibility__("protected") - which has tricky dnl semantics (see the 'vismain' test in glibc) and does not exist e.g. on dnl Mac OS X. dnl Does *not* test for __visibility__("internal") - which has processor dnl dependent semantics. dnl Does *not* test for #pragma GCC visibility push(hidden) - which is dnl "really only recommended for legacy code". dnl Set the variable CFLAG_VISIBILITY. dnl Defines and sets the variable HAVE_VISIBILITY. AC_DEFUN([gl_VISIBILITY], [ AC_REQUIRE([AC_PROG_CC]) CFLAG_VISIBILITY= HAVE_VISIBILITY=0 if test -n "$GCC"; then dnl First, check whether -Werror can be added to the command line, or dnl whether it leads to an error because of some other option that the dnl user has put into $CC $CFLAGS $CPPFLAGS. AC_CACHE_CHECK([whether the -Werror option is usable], [gl_cv_cc_vis_werror], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -Werror" AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[]], [[]])], [gl_cv_cc_vis_werror=yes], [gl_cv_cc_vis_werror=no]) CFLAGS="$gl_save_CFLAGS" ]) dnl Now check whether visibility declarations are supported. AC_CACHE_CHECK([for simple visibility declarations], [gl_cv_cc_visibility], [gl_save_CFLAGS="$CFLAGS" CFLAGS="$CFLAGS -fvisibility=hidden" dnl We use the option -Werror and a function dummyfunc, because on some dnl platforms (Cygwin 1.7) the use of -fvisibility triggers a warning dnl "visibility attribute not supported in this configuration; ignored" dnl at the first function definition in every compilation unit, and we dnl don't want to use the option in this case. if test $gl_cv_cc_vis_werror = yes; then CFLAGS="$CFLAGS -Werror" fi AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[extern __attribute__((__visibility__("hidden"))) int hiddenvar; extern __attribute__((__visibility__("default"))) int exportedvar; extern __attribute__((__visibility__("hidden"))) int hiddenfunc (void); extern __attribute__((__visibility__("default"))) int exportedfunc (void); void dummyfunc (void); int hiddenvar; int exportedvar; int hiddenfunc (void) { return 51; } int exportedfunc (void) { return 1225736919; } void dummyfunc (void) {} ]], [[]])], [gl_cv_cc_visibility=yes], [gl_cv_cc_visibility=no]) CFLAGS="$gl_save_CFLAGS" ]) if test $gl_cv_cc_visibility = yes; then CFLAG_VISIBILITY="-fvisibility=hidden" HAVE_VISIBILITY=1 fi fi AC_SUBST([CFLAG_VISIBILITY]) AC_SUBST([HAVE_VISIBILITY]) AC_DEFINE_UNQUOTED([HAVE_VISIBILITY], [$HAVE_VISIBILITY], [Define to 1 or 0, depending whether the compiler supports simple visibility declarations.]) ]) ��������������������������������������������������������������������������������������������������������������recutils-1.9/m4/getcwd-path-max.m4������������������������������������������������������������������0000644�0000000�0000000�00000015757�14226564447�013715� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 25 # Check for several getcwd bugs with long file names. # If so, arrange to compile the wrapper function. # This is necessary for at least GNU libc on linux-2.4.19 and 2.4.20. # I've heard that this is due to a Linux kernel bug, and that it has # been fixed between 2.4.21-pre3 and 2.4.21-pre4. # Copyright (C) 2003-2007, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # From Jim Meyering AC_DEFUN([gl_FUNC_GETCWD_PATH_MAX], [ AC_CHECK_DECLS_ONCE([getcwd]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ]) AC_CACHE_CHECK([whether getcwd handles long file names properly], [gl_cv_func_getcwd_path_max], [# Arrange for deletion of the temporary directory this test creates. ac_clean_files="$ac_clean_files confdir3" dnl Please keep this in sync with tests/test-getcwd.c. AC_RUN_IFELSE( [AC_LANG_SOURCE( [[ #include <errno.h> #include <stdlib.h> #if HAVE_UNISTD_H # include <unistd.h> #else # include <direct.h> #endif #include <string.h> #include <limits.h> #include <sys/stat.h> #include <sys/types.h> #include <fcntl.h> ]gl_PATHMAX_SNIPPET[ #ifndef AT_FDCWD # define AT_FDCWD 0 #endif #ifdef ENAMETOOLONG # define is_ENAMETOOLONG(x) ((x) == ENAMETOOLONG) #else # define is_ENAMETOOLONG(x) 0 #endif /* Use the getcwd function, not any macro. */ #undef getcwd ]GL_MDA_DEFINES[ #ifndef S_IRWXU # define S_IRWXU 0700 #endif /* The length of this name must be 8. */ #define DIR_NAME "confdir3" #define DIR_NAME_LEN 8 #define DIR_NAME_SIZE (DIR_NAME_LEN + 1) /* The length of "../". */ #define DOTDOTSLASH_LEN 3 /* Leftover bytes in the buffer, to work around library or OS bugs. */ #define BUF_SLOP 20 int main () { #ifndef PATH_MAX /* The Hurd doesn't define this, so getcwd can't exhibit the bug -- at least not on a local file system. And if we were to start worrying about remote file systems, we'd have to enable the wrapper function all of the time, just to be safe. That's not worth the cost. */ exit (0); #elif ((INT_MAX / (DIR_NAME_SIZE / DOTDOTSLASH_LEN + 1) \ - DIR_NAME_SIZE - BUF_SLOP) \ <= PATH_MAX) /* FIXME: Assuming there's a system for which this is true, this should be done in a compile test. */ exit (0); #else char buf[PATH_MAX * (DIR_NAME_SIZE / DOTDOTSLASH_LEN + 1) + DIR_NAME_SIZE + BUF_SLOP]; char *cwd = getcwd (buf, PATH_MAX); size_t initial_cwd_len; size_t cwd_len; int fail = 0; size_t n_chdirs = 0; if (cwd == NULL) exit (10); cwd_len = initial_cwd_len = strlen (cwd); while (1) { size_t dotdot_max = PATH_MAX * (DIR_NAME_SIZE / DOTDOTSLASH_LEN); char *c = NULL; cwd_len += DIR_NAME_SIZE; /* If mkdir or chdir fails, it could be that this system cannot create any file with an absolute name longer than PATH_MAX, such as cygwin. If so, leave fail as 0, because the current working directory can't be too long for getcwd if it can't even be created. On Linux with the 9p file system, mkdir fails with error EINVAL when cwd_len gets too long; ignore this failure because the getcwd() system call produces good results whereas the gnulib substitute calls getdents64 which fails with error EPROTO. For other errors, be pessimistic and consider that as a failure, too. */ if (mkdir (DIR_NAME, S_IRWXU) < 0 || chdir (DIR_NAME) < 0) { if (! (errno == ERANGE || is_ENAMETOOLONG (errno))) #ifdef __linux__ if (! (errno == EINVAL)) #endif fail = 20; break; } if (PATH_MAX <= cwd_len && cwd_len < PATH_MAX + DIR_NAME_SIZE) { struct stat sb; c = getcwd (buf, PATH_MAX); if (!c && errno == ENOENT) { fail = 11; break; } if (c) { fail = 31; break; } if (! (errno == ERANGE || is_ENAMETOOLONG (errno))) { fail = 21; break; } /* Our replacement needs to be able to stat() long ../../paths, so generate a path larger than PATH_MAX to check, avoiding the replacement if we can't stat(). */ c = getcwd (buf, cwd_len + 1); if (c && !AT_FDCWD && stat (c, &sb) != 0 && is_ENAMETOOLONG (errno)) { fail = 32; break; } } if (dotdot_max <= cwd_len - initial_cwd_len) { if (dotdot_max + DIR_NAME_SIZE < cwd_len - initial_cwd_len) break; c = getcwd (buf, cwd_len + 1); if (!c) { if (! (errno == ERANGE || errno == ENOENT || is_ENAMETOOLONG (errno))) { fail = 22; break; } if (AT_FDCWD || errno == ERANGE || errno == ENOENT) { fail = 12; break; } } } if (c && strlen (c) != cwd_len) { fail = 23; break; } ++n_chdirs; } /* Leaving behind such a deep directory is not polite. So clean up here, right away, even though the driving shell script would also clean up. */ { size_t i; /* Try rmdir first, in case the chdir failed. */ rmdir (DIR_NAME); for (i = 0; i <= n_chdirs; i++) { if (chdir ("..") < 0) break; if (rmdir (DIR_NAME) != 0) break; } } exit (fail); #endif } ]])], [gl_cv_func_getcwd_path_max=yes], [case $? in 10|11|12) gl_cv_func_getcwd_path_max='no, but it is partly working';; 31) gl_cv_func_getcwd_path_max='no, it has the AIX bug';; 32) gl_cv_func_getcwd_path_max='yes, but with shorter paths';; *) gl_cv_func_getcwd_path_max=no;; esac], [# Cross-compilation guesses: case "$host_os" in aix*) # On AIX, it has the AIX bug. gl_cv_func_getcwd_path_max='guessing no, it has the AIX bug' ;; gnu*) # On Hurd, it is 'yes'. gl_cv_func_getcwd_path_max='guessing yes' ;; linux* | kfreebsd*) # On older Linux+glibc it's 'no, but it is partly working', # on newer Linux+glibc it's 'yes'. # On Linux+musl libc, it's 'no, but it is partly working'. # On kFreeBSD+glibc, it's 'no, but it is partly working'. gl_cv_func_getcwd_path_max='guessing no, but it is partly working' ;; *) # If we don't know, obey --enable-cross-guesses. gl_cv_func_getcwd_path_max="$gl_cross_guess_normal" ;; esac ]) ]) ]) �����������������recutils-1.9/m4/save-cwd.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000000570�14226564447�012417� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 dnl Copyright (C) 2002-2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Prerequisites for lib/save-cwd.c. AC_DEFUN([gl_SAVE_CWD], [ AC_CHECK_FUNCS_ONCE([fchdir]) ]) ����������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/utimens.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000003672�14226564453�012375� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Copyright (C) 2003-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl serial 11 AC_DEFUN([gl_UTIMENS], [ dnl Prerequisites of lib/utimens.c. AC_REQUIRE([gl_FUNC_UTIMES]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([futimes futimesat futimens utimensat lutimes]) if test $ac_cv_func_futimens = no && test $ac_cv_func_futimesat = yes; then dnl FreeBSD 8.0-rc2 mishandles futimesat(fd,NULL,time). It is not dnl standardized, but Solaris implemented it first and uses it as dnl its only means to set fd time. AC_CACHE_CHECK([whether futimesat handles NULL file], [gl_cv_func_futimesat_works], [touch conftest.file AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stddef.h> #include <sys/times.h> #include <fcntl.h> ]GL_MDA_DEFINES], [[int fd = open ("conftest.file", O_RDWR); if (fd < 0) return 1; if (futimesat (fd, NULL, NULL)) return 2; ]])], [gl_cv_func_futimesat_works=yes], [gl_cv_func_futimesat_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_futimesat_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_futimesat_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_futimesat_works="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.file]) case "$gl_cv_func_futimesat_works" in *yes) ;; *) AC_DEFINE([FUTIMESAT_NULL_BUG], [1], [Define to 1 if futimesat mishandles a NULL file name.]) ;; esac fi ]) ����������������������������������������������������������������������recutils-1.9/m4/multiarch.m4������������������������������������������������������������������������0000644�0000000�0000000�00000004220�14226564452�012666� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# multiarch.m4 serial 9 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Determine whether the compiler is or may be producing universal binaries. # # On Mac OS X 10.5 and later systems, the user can create libraries and # executables that work on multiple system types--known as "fat" or # "universal" binaries--by specifying multiple '-arch' options to the # compiler but only a single '-arch' option to the preprocessor. Like # this: # # ./configure CC="gcc -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CXX="g++ -arch i386 -arch x86_64 -arch ppc -arch ppc64" \ # CPP="gcc -E" CXXCPP="g++ -E" # # Detect this situation and set APPLE_UNIVERSAL_BUILD accordingly. AC_DEFUN_ONCE([gl_MULTIARCH], [ dnl Code similar to autoconf-2.63 AC_C_BIGENDIAN. AC_CACHE_CHECK([whether the compiler produces multi-arch binaries], [gl_cv_c_multiarch], [gl_cv_c_multiarch=no AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifndef __APPLE_CC__ not a universal capable compiler #endif typedef int dummy; ]])], [ dnl Check for potential -arch flags. It is not universal unless dnl there are at least two -arch flags with different values. arch= prev= for word in ${CC} ${CFLAGS} ${CPPFLAGS} ${LDFLAGS}; do if test -n "$prev"; then case $word in i?86 | x86_64 | ppc | ppc64 | arm | arm64) if test -z "$arch" || test "$arch" = "$word"; then arch="$word" else gl_cv_c_multiarch=yes fi ;; esac prev= else if test "x$word" = "x-arch"; then prev=arch fi fi done ]) ]) if test $gl_cv_c_multiarch = yes; then APPLE_UNIVERSAL_BUILD=1 else APPLE_UNIVERSAL_BUILD=0 fi AC_SUBST([APPLE_UNIVERSAL_BUILD]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/read-file.m4������������������������������������������������������������������������0000644�0000000�0000000�00000000552�14226564452�012532� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# read-file.m4 serial 3 dnl Copyright (C) 2002-2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of lib/read-file.c. AC_DEFUN([gl_PREREQ_READ_FILE], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/ftell.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000001005�14226564452�012002� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ftell.m4 serial 3 dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FTELL], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_FTELLO]) dnl When ftello needs fixes, ftell needs them too. if test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1; then REPLACE_FTELL=1 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/printf-frexpl.m4��������������������������������������������������������������������0000644�0000000�0000000�00000003323�14226564452�013501� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf-frexpl.m4 serial 10 dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check how to define printf_frexpl() without linking with libm. AC_DEFUN([gl_FUNC_PRINTF_FREXPL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Subset of gl_FUNC_FREXPL_NO_LIBM. gl_CHECK_FREXPL_NO_LIBM if test $gl_cv_func_frexpl_no_libm = yes; then gl_FUNC_FREXPL_WORKS case "$gl_cv_func_frexpl_works" in *yes) gl_func_frexpl_no_libm=yes ;; *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; esac else gl_func_frexpl_no_libm=no dnl Set REPLACE_FREXPL here because the system may have frexpl in libm. REPLACE_FREXPL=1 fi if test $gl_func_frexpl_no_libm = yes; then AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1], [Define if the frexpl function is available in libc.]) dnl Also check whether it's declared. dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]]) fi gl_CHECK_LDEXPL_NO_LIBM if test $gl_cv_func_ldexpl_no_libm = yes; then gl_FUNC_LDEXPL_WORKS case "$gl_cv_func_ldexpl_works" in *yes) AC_DEFINE([HAVE_LDEXPL_IN_LIBC], [1], [Define if the ldexpl function is available in libc.]) dnl Also check whether it's declared. dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]]) ;; esac fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/gnulib-comp.m4����������������������������������������������������������������������0000644�0000000�0000000�00000201010�14226564457�013113� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# DO NOT EDIT! GENERATED AUTOMATICALLY! # Copyright (C) 2002-2022 Free Software Foundation, Inc. # # This file is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This file is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this file. If not, see <https://www.gnu.org/licenses/>. # # As a special exception to the GNU General Public License, # this file may be distributed as part of a program that # contains a configuration script generated by Autoconf, under # the same distribution terms as the rest of that program. # # Generated by gnulib-tool. # # This file represents the compiled summary of the specification in # gnulib-cache.m4. It lists the computed macro invocations that need # to be invoked from configure.ac. # In projects that use version control, this file can be treated like # other built files. # This macro should be invoked from ./configure.ac, in the section # "Checks for programs", right after AC_PROG_CC, and certainly before # any checks for libraries, header files, types and library functions. AC_DEFUN([gl_EARLY], [ m4_pattern_forbid([^gl_[A-Z]])dnl the gnulib macro namespace m4_pattern_allow([^gl_ES$])dnl a valid locale name m4_pattern_allow([^gl_LIBOBJS$])dnl a variable m4_pattern_allow([^gl_LTLIBOBJS$])dnl a variable # Pre-early section. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_PROG_AR_RANLIB]) # Code from module absolute-header: # Code from module access: # Code from module acl: # Code from module acl-permissions: # Code from module alignof: # Code from module alloca: # Code from module alloca-opt: # Code from module announce-gen: # Code from module array-list: # Code from module assure: # Code from module at-internal: # Code from module attribute: # Code from module autobuild: AB_INIT # Code from module base64: # Code from module basename-lgpl: # Code from module binary-io: # Code from module bison: # Code from module bitrotate: # Code from module btowc: # Code from module builtin-expect: # Code from module c-ctype: # Code from module c-strcase: # Code from module c-strcaseeq: # Code from module c99: # Code from module calloc-gnu: # Code from module calloc-posix: # Code from module canonicalize: # Code from module canonicalize-lgpl: # Code from module chdir: # Code from module chdir-long: # Code from module clock-time: # Code from module cloexec: # Code from module close: # Code from module close-stream: # Code from module closedir: # Code from module closeout: # Code from module concat-filename: # Code from module copy-file: # Code from module copy-file-range: # Code from module crc: # Code from module d-ino: # Code from module dirent: # Code from module dirfd: # Code from module dirname-lgpl: # Code from module double-slash-root: # Code from module dup: # Code from module dup2: # Code from module dynarray: # Code from module eloop-threshold: # Code from module environ: # Code from module errno: # Code from module error: # Code from module euidaccess: # Code from module execute: # Code from module exitfail: # Code from module explicit_bzero: # Code from module extensions: # Code from module extern-inline: # Code from module fatal-signal: # Code from module fchdir: # Code from module fcntl: # Code from module fcntl-h: # Code from module fd-hook: # Code from module fd-safer-flag: # Code from module fdopendir: # Code from module file-set: # Code from module filename: # Code from module filenamecat-lgpl: # Code from module findprog-in: # Code from module flexmember: # Code from module float: # Code from module flock: # Code from module floor: # Code from module fopen: # Code from module fopen-gnu: # Code from module fpending: # Code from module fpieee: AC_REQUIRE([gl_FP_IEEE]) # Code from module fprintf-posix: # Code from module fpucw: # Code from module free-posix: # Code from module frexp-nolibm: # Code from module frexpl-nolibm: # Code from module fseek: # Code from module fseeko: AC_REQUIRE([gl_SET_LARGEFILE_SOURCE]) # Code from module fseterr: # Code from module fstat: # Code from module fstatat: # Code from module ftell: # Code from module ftello: AC_REQUIRE([gl_SET_LARGEFILE_SOURCE]) # Code from module full-write: # Code from module fwriting: # Code from module gen-header: # Code from module gendocs: # Code from module getcwd: # Code from module getcwd-lgpl: # Code from module getdelim: # Code from module getdtablesize: # Code from module getgroups: # Code from module getline: # Code from module getopt-gnu: # Code from module getopt-posix: # Code from module getpass: # Code from module getpass-gnu: # Code from module getprogname: # Code from module getrandom: # Code from module gettext-h: # Code from module gettime: # Code from module gettimeofday: # Code from module gnumakefile: # Code from module gnupload: # Code from module group-member: # Code from module hard-locale: # Code from module hash: # Code from module hash-pjw: # Code from module hash-triple-simple: # Code from module havelib: # Code from module ialloc: # Code from module idx: # Code from module ignore-value: # Code from module include_next: # Code from module intprops: # Code from module inttypes: # Code from module inttypes-incomplete: # Code from module isnand-nolibm: # Code from module isnanf-nolibm: # Code from module isnanl-nolibm: # Code from module langinfo: # Code from module largefile: AC_REQUIRE([AC_SYS_LARGEFILE]) AC_REQUIRE([gl_YEAR2038_EARLY]) # Code from module libc-config: # Code from module limits-h: # Code from module list: # Code from module localcharset: # Code from module locale: # Code from module localeconv: # Code from module lock: # Code from module lseek: # Code from module lstat: # Code from module maintainer-makefile: # Code from module malloc-gnu: # Code from module malloc-posix: # Code from module malloca: # Code from module math: # Code from module mbrlen: # Code from module mbrtowc: # Code from module mbsinit: # Code from module mbtowc: # Code from module memchr: # Code from module mempcpy: # Code from module memrchr: # Code from module minmax: # Code from module mkdir: # Code from module mkostemp: # Code from module mkstemp: # Code from module mktime: # Code from module mktime-internal: # Code from module msvc-inval: # Code from module msvc-nothrow: # Code from module multiarch: # Code from module nl_langinfo: # Code from module nocrash: # Code from module nstrftime: # Code from module obstack: # Code from module open: # Code from module openat: # Code from module openat-die: # Code from module openat-h: # Code from module opendir: # Code from module parse-datetime: # Code from module pathmax: # Code from module pipe-posix: # Code from module posix_spawn: # Code from module posix_spawn-internal: # Code from module posix_spawn_file_actions_addchdir: # Code from module posix_spawn_file_actions_addopen: # Code from module posix_spawn_file_actions_destroy: # Code from module posix_spawn_file_actions_init: # Code from module posix_spawnattr_destroy: # Code from module posix_spawnattr_init: # Code from module posix_spawnattr_setflags: # Code from module posix_spawnattr_setsigmask: # Code from module posix_spawnp: # Code from module printf-frexp: # Code from module printf-frexpl: # Code from module printf-posix: # Code from module printf-safe: # Code from module progname: # Code from module qcopy-acl: # Code from module qset-acl: # Code from module quote: # Code from module quotearg: # Code from module quotearg-simple: # Code from module raise: # Code from module random_r: # Code from module rawmemchr: # Code from module read: # Code from module read-file: # Code from module readdir: # Code from module readline: # Code from module readlink: # Code from module realloc-gnu: # Code from module realloc-posix: # Code from module reallocarray: # Code from module regex: # Code from module regexprops-generic: # Code from module remove: # Code from module rename: # Code from module rewinddir: # Code from module rmdir: # Code from module root-uid: # Code from module safe-read: # Code from module safe-write: # Code from module same-inode: # Code from module save-cwd: # Code from module sched: # Code from module scratch_buffer: # Code from module secure_getenv: # Code from module selinux-h: # Code from module setenv: # Code from module setlocale-null: # Code from module sh-filename: # Code from module sigaction: # Code from module signal-h: # Code from module signbit: # Code from module sigprocmask: # Code from module size_max: # Code from module snippet/_Noreturn: # Code from module snippet/arg-nonnull: # Code from module snippet/c++defs: # Code from module snippet/warn-on-use: # Code from module spawn: # Code from module ssize_t: # Code from module stat: # Code from module stat-macros: # Code from module stat-time: # Code from module std-gnu11: # Code from module stdalign: # Code from module stdarg: dnl Some compilers (e.g., AIX 5.3 cc) need to be in c99 mode dnl for the builtin va_copy to work. gl_PROG_CC_C99 arranges for this. gl_PROG_CC_C99 # Code from module stdbool: # Code from module stddef: # Code from module stdint: # Code from module stdio: # Code from module stdlib: # Code from module stpcpy: # Code from module strcase: # Code from module strcasestr: # Code from module strcasestr-simple: # Code from module strchrnul: # Code from module strdup-posix: # Code from module streq: # Code from module strerror: # Code from module strerror-override: # Code from module string: # Code from module strings: # Code from module strsep: # Code from module strverscmp: # Code from module sys_file: # Code from module sys_random: # Code from module sys_stat: # Code from module sys_time: # Code from module sys_types: # Code from module sys_wait: # Code from module tempname: # Code from module thread-optim: # Code from module threadlib: gl_THREADLIB_EARLY # Code from module time: # Code from module time_r: # Code from module time_rz: # Code from module timegm: # Code from module timespec: # Code from module tmpdir: # Code from module tzset: # Code from module unistd: # Code from module unistd-safer: # Code from module unlink: # Code from module unlocked-io: # Code from module unlocked-io-internal: # Code from module unsetenv: # Code from module update-copyright: # Code from module useless-if-before-free: # Code from module utime: # Code from module utime-h: # Code from module utimens: # Code from module vararrays: # Code from module vasnprintf: # Code from module vasnprintf-posix: # Code from module vasprintf: # Code from module vasprintf-posix: # Code from module vc-list-files: # Code from module verify: # Code from module version-etc: # Code from module version-etc-fsf: # Code from module vfprintf-posix: # Code from module wait-process: # Code from module waitpid: # Code from module wchar: # Code from module wcrtomb: # Code from module wctob: # Code from module wctomb: # Code from module wctype-h: # Code from module windows-mutex: # Code from module windows-once: # Code from module windows-recmutex: # Code from module windows-rwlock: # Code from module windows-spawn: # Code from module write: # Code from module xalloc: # Code from module xalloc-die: # Code from module xalloc-oversized: # Code from module xsize: ]) # This macro should be invoked from ./configure.ac, in the section # "Check for header files, types and library functions". AC_DEFUN([gl_INIT], [ AC_CONFIG_LIBOBJ_DIR([lib]) AM_CONDITIONAL([GL_COND_LIBTOOL], [true]) gl_cond_libtool=true gl_m4_base='m4' m4_pushdef([AC_LIBOBJ], m4_defn([gl_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gl_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gl_LIBSOURCES])) m4_pushdef([gl_LIBSOURCES_LIST], []) m4_pushdef([gl_LIBSOURCES_DIR], []) m4_pushdef([GL_MACRO_PREFIX], [gl]) m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [GL]) gl_COMMON gl_source_base='lib' gl_source_base_prefix= gl_FUNC_ACCESS gl_CONDITIONAL([GL_COND_OBJ_ACCESS], [test $REPLACE_ACCESS = 1]) gl_UNISTD_MODULE_INDICATOR([access]) gl_FUNC_ACL changequote(,)dnl LTALLOCA=`echo "$ALLOCA" | sed -e 's/\.[^.]* /.lo /g;s/\.[^.]*$/.lo/'` changequote([, ])dnl AC_SUBST([LTALLOCA]) gl_FUNC_ALLOCA gl_CONDITIONAL_HEADER([alloca.h]) AC_PROG_MKDIR_P AC_REQUIRE([AC_CANONICAL_HOST]) gl_FUNC_BASE64 # See the comments in bison.m4. gl_FUNC_BTOWC gl_CONDITIONAL([GL_COND_OBJ_BTOWC], [test $HAVE_BTOWC = 0 || test $REPLACE_BTOWC = 1]) AM_COND_IF([GL_COND_OBJ_BTOWC], [ gl_PREREQ_BTOWC ]) gl_WCHAR_MODULE_INDICATOR([btowc]) gl___BUILTIN_EXPECT gl_FUNC_CALLOC_GNU if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 1; then AC_LIBOBJ([calloc]) fi gl_STDLIB_MODULE_INDICATOR([calloc-gnu]) gl_FUNC_CALLOC_POSIX if test $REPLACE_CALLOC_FOR_CALLOC_POSIX = 1; then AC_LIBOBJ([calloc]) fi gl_STDLIB_MODULE_INDICATOR([calloc-posix]) gl_FUNC_CANONICALIZE_FILENAME_MODE gl_MODULE_INDICATOR([canonicalize]) gl_MODULE_INDICATOR_FOR_TESTS([canonicalize]) gl_STDLIB_MODULE_INDICATOR([canonicalize_file_name]) gl_CANONICALIZE_LGPL gl_CONDITIONAL([GL_COND_OBJ_CANONICALIZE_LGPL], [test $HAVE_CANONICALIZE_FILE_NAME = 0 || test $REPLACE_CANONICALIZE_FILE_NAME = 1]) gl_MODULE_INDICATOR([canonicalize-lgpl]) gl_STDLIB_MODULE_INDICATOR([canonicalize_file_name]) gl_STDLIB_MODULE_INDICATOR([realpath]) gl_UNISTD_MODULE_INDICATOR([chdir]) gl_FUNC_CHDIR_LONG gl_CONDITIONAL([GL_COND_OBJ_CHDIR_LONG], [test $gl_cv_have_unlimited_file_name_length = no]) AM_COND_IF([GL_COND_OBJ_CHDIR_LONG], [ gl_PREREQ_CHDIR_LONG ]) gl_CLOCK_TIME gl_MODULE_INDICATOR_FOR_TESTS([cloexec]) gl_FUNC_CLOSE gl_CONDITIONAL([GL_COND_OBJ_CLOSE], [test $REPLACE_CLOSE = 1]) gl_UNISTD_MODULE_INDICATOR([close]) gl_MODULE_INDICATOR([close-stream]) gl_FUNC_CLOSEDIR gl_CONDITIONAL([GL_COND_OBJ_CLOSEDIR], [test $HAVE_CLOSEDIR = 0 || test $REPLACE_CLOSEDIR = 1]) gl_DIRENT_MODULE_INDICATOR([closedir]) gl_COPY_FILE gl_FUNC_COPY_FILE_RANGE gl_CONDITIONAL([GL_COND_OBJ_COPY_FILE_RANGE], [test $HAVE_COPY_FILE_RANGE = 0 || test $REPLACE_COPY_FILE_RANGE = 1]) gl_UNISTD_MODULE_INDICATOR([copy-file-range]) gl_CHECK_TYPE_STRUCT_DIRENT_D_INO gl_DIRENT_H gl_DIRENT_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_DIRFD gl_CONDITIONAL([GL_COND_OBJ_DIRFD], [test $ac_cv_func_dirfd = no && test $gl_cv_func_dirfd_macro = no || test $REPLACE_DIRFD = 1]) AM_COND_IF([GL_COND_OBJ_DIRFD], [ gl_PREREQ_DIRFD ]) gl_DIRENT_MODULE_INDICATOR([dirfd]) gl_DOUBLE_SLASH_ROOT gl_FUNC_DUP gl_CONDITIONAL([GL_COND_OBJ_DUP], [test $REPLACE_DUP = 1]) AM_COND_IF([GL_COND_OBJ_DUP], [ gl_PREREQ_DUP ]) gl_UNISTD_MODULE_INDICATOR([dup]) gl_FUNC_DUP2 gl_CONDITIONAL([GL_COND_OBJ_DUP2], [test $REPLACE_DUP2 = 1]) AM_COND_IF([GL_COND_OBJ_DUP2], [ gl_PREREQ_DUP2 ]) gl_UNISTD_MODULE_INDICATOR([dup2]) AC_PROG_MKDIR_P gl_ENVIRON gl_UNISTD_MODULE_INDICATOR([environ]) gl_HEADER_ERRNO_H gl_CONDITIONAL_HEADER([errno.h]) AC_PROG_MKDIR_P gl_ERROR gl_CONDITIONAL([GL_COND_OBJ_ERROR], [test "$ac_cv_lib_error_at_line" = no]) AM_COND_IF([GL_COND_OBJ_ERROR], [ gl_PREREQ_ERROR ]) m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=error:3:c-format]) AM_][XGETTEXT_OPTION([--flag=error_at_line:5:c-format])]) gl_FUNC_EUIDACCESS gl_CONDITIONAL([GL_COND_OBJ_EUIDACCESS], [test $HAVE_EUIDACCESS = 0]) AM_COND_IF([GL_COND_OBJ_EUIDACCESS], [ gl_PREREQ_EUIDACCESS ]) gl_UNISTD_MODULE_INDICATOR([euidaccess]) gl_EXECUTE gl_FUNC_EXPLICIT_BZERO gl_CONDITIONAL([GL_COND_OBJ_EXPLICIT_BZERO], [test $HAVE_EXPLICIT_BZERO = 0]) AM_COND_IF([GL_COND_OBJ_EXPLICIT_BZERO], [ gl_PREREQ_EXPLICIT_BZERO ]) gl_STRING_MODULE_INDICATOR([explicit_bzero]) AC_REQUIRE([gl_EXTERN_INLINE]) gl_FATAL_SIGNAL gl_FUNC_FCHDIR gl_CONDITIONAL([GL_COND_OBJ_FCHDIR], [test $HAVE_FCHDIR = 0]) AM_COND_IF([GL_COND_OBJ_FCHDIR], [ gl_PREREQ_FCHDIR ]) gl_UNISTD_MODULE_INDICATOR([fchdir]) gl_FUNC_FCNTL gl_CONDITIONAL([GL_COND_OBJ_FCNTL], [test $HAVE_FCNTL = 0 || test $REPLACE_FCNTL = 1]) gl_FCNTL_MODULE_INDICATOR([fcntl]) gl_FCNTL_H gl_FCNTL_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_MODULE_INDICATOR([fd-safer-flag]) gl_FUNC_FDOPENDIR gl_CONDITIONAL([GL_COND_OBJ_FDOPENDIR], [test $HAVE_FDOPENDIR = 0 || test $REPLACE_FDOPENDIR = 1]) gl_DIRENT_MODULE_INDICATOR([fdopendir]) gl_MODULE_INDICATOR([fdopendir]) gl_FILE_NAME_CONCAT_LGPL gl_FINDPROG_IN AC_C_FLEXIBLE_ARRAY_MEMBER gl_FLOAT_H gl_CONDITIONAL_HEADER([float.h]) AC_PROG_MKDIR_P gl_CONDITIONAL([GL_COND_OBJ_FLOAT], [test $REPLACE_FLOAT_LDBL = 1]) gl_CONDITIONAL([GL_COND_OBJ_ITOLD], [test $REPLACE_ITOLD = 1]) gl_FUNC_FLOCK gl_CONDITIONAL([GL_COND_OBJ_FLOCK], [test $HAVE_FLOCK = 0]) AM_COND_IF([GL_COND_OBJ_FLOCK], [ gl_PREREQ_FLOCK ]) gl_SYS_FILE_MODULE_INDICATOR([flock]) AC_REQUIRE([gl_FUNC_FLOOR]) gl_CONDITIONAL([GL_COND_OBJ_FLOOR], [test $REPLACE_FLOOR = 1]) gl_MATH_MODULE_INDICATOR([floor]) gl_FUNC_FOPEN if test $REPLACE_FOPEN = 1; then AC_LIBOBJ([fopen]) gl_PREREQ_FOPEN fi gl_STDIO_MODULE_INDICATOR([fopen]) gl_FUNC_FOPEN_GNU if test $REPLACE_FOPEN_FOR_FOPEN_GNU = 1; then AC_LIBOBJ([fopen]) gl_PREREQ_FOPEN fi gl_MODULE_INDICATOR([fopen-gnu]) gl_FUNC_FPENDING gl_CONDITIONAL([GL_COND_OBJ_FPENDING], [test $gl_cv_func___fpending = no]) gl_FUNC_FPRINTF_POSIX gl_STDIO_MODULE_INDICATOR([fprintf-posix]) gl_FUNC_FREE gl_CONDITIONAL([GL_COND_OBJ_FREE], [test $REPLACE_FREE = 1]) AM_COND_IF([GL_COND_OBJ_FREE], [ gl_PREREQ_FREE ]) gl_STDLIB_MODULE_INDICATOR([free-posix]) gl_FUNC_FREXP_NO_LIBM if test $gl_func_frexp_no_libm != yes; then AC_LIBOBJ([frexp]) fi gl_MATH_MODULE_INDICATOR([frexp]) gl_FUNC_FREXPL_NO_LIBM if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl_no_libm = no; then AC_LIBOBJ([frexpl]) fi gl_MATH_MODULE_INDICATOR([frexpl]) gl_FUNC_FSEEK gl_CONDITIONAL([GL_COND_OBJ_FSEEK], [test $REPLACE_FSEEK = 1]) gl_STDIO_MODULE_INDICATOR([fseek]) gl_FUNC_FSEEKO gl_CONDITIONAL([GL_COND_OBJ_FSEEKO], [test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1]) AM_COND_IF([GL_COND_OBJ_FSEEKO], [ gl_PREREQ_FSEEKO ]) gl_STDIO_MODULE_INDICATOR([fseeko]) gl_FUNC_FSETERR gl_CONDITIONAL([GL_COND_OBJ_FSETERR], [test $ac_cv_func___fseterr = no]) gl_FUNC_FSTAT gl_CONDITIONAL([GL_COND_OBJ_FSTAT], [test $REPLACE_FSTAT = 1]) AM_COND_IF([GL_COND_OBJ_FSTAT], [ case "$host_os" in mingw*) AC_LIBOBJ([stat-w32]) ;; esac gl_PREREQ_FSTAT ]) gl_SYS_STAT_MODULE_INDICATOR([fstat]) gl_FUNC_FSTATAT gl_CONDITIONAL([GL_COND_OBJ_FSTATAT], [test $HAVE_FSTATAT = 0 || test $REPLACE_FSTATAT = 1]) gl_SYS_STAT_MODULE_INDICATOR([fstatat]) gl_FUNC_FTELL gl_CONDITIONAL([GL_COND_OBJ_FTELL], [test $REPLACE_FTELL = 1]) gl_STDIO_MODULE_INDICATOR([ftell]) gl_FUNC_FTELLO gl_CONDITIONAL([GL_COND_OBJ_FTELLO], [test $HAVE_FTELLO = 0 || test $REPLACE_FTELLO = 1]) AM_COND_IF([GL_COND_OBJ_FTELLO], [ gl_PREREQ_FTELLO ]) gl_STDIO_MODULE_INDICATOR([ftello]) gl_FUNC_FWRITING gl_CONDITIONAL([GL_COND_OBJ_FWRITING], [test $ac_cv_func___fwriting = no]) gl_FUNC_GETCWD gl_CONDITIONAL([GL_COND_OBJ_GETCWD], [test $REPLACE_GETCWD = 1]) AM_COND_IF([GL_COND_OBJ_GETCWD], [ gl_PREREQ_GETCWD ]) gl_MODULE_INDICATOR([getcwd]) gl_UNISTD_MODULE_INDICATOR([getcwd]) gl_FUNC_GETCWD_LGPL gl_CONDITIONAL([GL_COND_OBJ_GETCWD_LGPL], [test $REPLACE_GETCWD = 1]) gl_UNISTD_MODULE_INDICATOR([getcwd]) gl_FUNC_GETDELIM gl_CONDITIONAL([GL_COND_OBJ_GETDELIM], [test $HAVE_GETDELIM = 0 || test $REPLACE_GETDELIM = 1]) AM_COND_IF([GL_COND_OBJ_GETDELIM], [ gl_PREREQ_GETDELIM ]) gl_STDIO_MODULE_INDICATOR([getdelim]) gl_FUNC_GETDTABLESIZE gl_CONDITIONAL([GL_COND_OBJ_GETDTABLESIZE], [test $HAVE_GETDTABLESIZE = 0 || test $REPLACE_GETDTABLESIZE = 1]) AM_COND_IF([GL_COND_OBJ_GETDTABLESIZE], [ gl_PREREQ_GETDTABLESIZE ]) gl_UNISTD_MODULE_INDICATOR([getdtablesize]) gl_FUNC_GETGROUPS gl_CONDITIONAL([GL_COND_OBJ_GETGROUPS], [test $HAVE_GETGROUPS = 0 || test $REPLACE_GETGROUPS = 1]) gl_UNISTD_MODULE_INDICATOR([getgroups]) gl_FUNC_GETLINE gl_CONDITIONAL([GL_COND_OBJ_GETLINE], [test $REPLACE_GETLINE = 1]) AM_COND_IF([GL_COND_OBJ_GETLINE], [ gl_PREREQ_GETLINE ]) gl_STDIO_MODULE_INDICATOR([getline]) gl_FUNC_GETOPT_GNU dnl Because of the way gl_FUNC_GETOPT_GNU is implemented (the gl_getopt_required dnl mechanism), there is no need to do any AC_LIBOBJ or AC_SUBST here; they are dnl done in the getopt-posix module. gl_FUNC_GETOPT_POSIX gl_CONDITIONAL_HEADER([getopt.h]) gl_CONDITIONAL_HEADER([getopt-cdefs.h]) AC_PROG_MKDIR_P gl_CONDITIONAL([GL_COND_OBJ_GETOPT], [test $REPLACE_GETOPT = 1]) AM_COND_IF([GL_COND_OBJ_GETOPT], [ dnl Define the substituted variable GNULIB_UNISTD_H_GETOPT to 1. gl_UNISTD_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UNISTD_H_GETOPT], [1]) ]) gl_UNISTD_MODULE_INDICATOR([getopt-posix]) gl_FUNC_GETPASS if test $HAVE_GETPASS = 0 || test $REPLACE_GETPASS = 1; then AC_LIBOBJ([getpass]) gl_PREREQ_GETPASS fi gl_UNISTD_MODULE_INDICATOR([getpass]) gl_FUNC_GETPASS_GNU if test $HAVE_GETPASS = 0 || test $REPLACE_GETPASS_FOR_GETPASS_GNU = 1; then AC_LIBOBJ([getpass]) gl_PREREQ_GETPASS fi gl_UNISTD_MODULE_INDICATOR([getpass-gnu]) gl_FUNC_GETPROGNAME AC_REQUIRE([AC_CANONICAL_HOST]) gl_FUNC_GETRANDOM gl_CONDITIONAL([GL_COND_OBJ_GETRANDOM], [test $HAVE_GETRANDOM = 0 || test $REPLACE_GETRANDOM = 1]) gl_SYS_RANDOM_MODULE_INDICATOR([getrandom]) AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) gl_GETTIME gl_FUNC_GETTIMEOFDAY gl_CONDITIONAL([GL_COND_OBJ_GETTIMEOFDAY], [test $HAVE_GETTIMEOFDAY = 0 || test $REPLACE_GETTIMEOFDAY = 1]) AM_COND_IF([GL_COND_OBJ_GETTIMEOFDAY], [ gl_PREREQ_GETTIMEOFDAY ]) gl_SYS_TIME_MODULE_INDICATOR([gettimeofday]) # Autoconf 2.61a.99 and earlier don't support linking a file only # in VPATH builds. But since GNUmakefile is for maintainer use # only, it does not matter if we skip the link with older autoconf. # Automake 1.10.1 and earlier try to remove GNUmakefile in non-VPATH # builds, so use a shell variable to bypass this. GNUmakefile=GNUmakefile m4_if(m4_version_compare([2.61a.100], m4_defn([m4_PACKAGE_VERSION])), [1], [], [AC_CONFIG_LINKS([$GNUmakefile:$GNUmakefile], [], [GNUmakefile=$GNUmakefile])]) gl_FUNC_GROUP_MEMBER gl_CONDITIONAL([GL_COND_OBJ_GROUP_MEMBER], [test $HAVE_GROUP_MEMBER = 0]) AM_COND_IF([GL_COND_OBJ_GROUP_MEMBER], [ gl_PREREQ_GROUP_MEMBER ]) gl_UNISTD_MODULE_INDICATOR([group-member]) AC_REQUIRE([gl_FUNC_SETLOCALE_NULL]) LIB_HARD_LOCALE="$LIB_SETLOCALE_NULL" AC_SUBST([LIB_HARD_LOCALE]) AC_DEFUN([gl_HAVE_MODULE_HAVELIB]) gl_INTTYPES_H gl_INTTYPES_INCOMPLETE gl_INTTYPES_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_ISNAND_NO_LIBM if test $gl_func_isnand_no_libm != yes; then AC_LIBOBJ([isnand]) gl_PREREQ_ISNAND fi gl_FUNC_ISNANF_NO_LIBM if test $gl_func_isnanf_no_libm != yes; then AC_LIBOBJ([isnanf]) gl_PREREQ_ISNANF fi gl_FUNC_ISNANL_NO_LIBM if test $gl_func_isnanl_no_libm != yes; then AC_LIBOBJ([isnanl]) gl_PREREQ_ISNANL fi gl_LANGINFO_H gl_LANGINFO_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P AC_REQUIRE([gl_LARGEFILE]) gl___INLINE gl_LIMITS_H gl_CONDITIONAL_HEADER([limits.h]) AC_PROG_MKDIR_P gl_LOCALCHARSET dnl For backward compatibility. Some packages still use this. LOCALCHARSET_TESTS_ENVIRONMENT= AC_SUBST([LOCALCHARSET_TESTS_ENVIRONMENT]) gl_LOCALE_H gl_LOCALE_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_LOCALECONV gl_CONDITIONAL([GL_COND_OBJ_LOCALECONV], [test $REPLACE_LOCALECONV = 1]) AM_COND_IF([GL_COND_OBJ_LOCALECONV], [ gl_PREREQ_LOCALECONV ]) gl_LOCALE_MODULE_INDICATOR([localeconv]) gl_LOCK gl_MODULE_INDICATOR([lock]) gl_FUNC_LSEEK gl_CONDITIONAL([GL_COND_OBJ_LSEEK], [test $REPLACE_LSEEK = 1]) gl_UNISTD_MODULE_INDICATOR([lseek]) gl_FUNC_LSTAT gl_CONDITIONAL([GL_COND_OBJ_LSTAT], [test $REPLACE_LSTAT = 1]) AM_COND_IF([GL_COND_OBJ_LSTAT], [ gl_PREREQ_LSTAT ]) gl_SYS_STAT_MODULE_INDICATOR([lstat]) AC_CONFIG_COMMANDS_PRE([m4_ifdef([AH_HEADER], [AC_SUBST([CONFIG_INCLUDE], m4_defn([AH_HEADER]))])]) AC_REQUIRE([AC_PROG_SED]) AC_REQUIRE([AC_PROG_GREP]) gl_FUNC_MALLOC_GNU if test $REPLACE_MALLOC_FOR_MALLOC_GNU = 1; then AC_LIBOBJ([malloc]) fi gl_STDLIB_MODULE_INDICATOR([malloc-gnu]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then AC_LIBOBJ([malloc]) fi gl_STDLIB_MODULE_INDICATOR([malloc-posix]) gl_MALLOCA gl_MATH_H gl_MATH_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_MBRLEN gl_CONDITIONAL([GL_COND_OBJ_MBRLEN], [test $HAVE_MBRLEN = 0 || test $REPLACE_MBRLEN = 1]) AM_COND_IF([GL_COND_OBJ_MBRLEN], [ gl_PREREQ_MBRLEN ]) gl_WCHAR_MODULE_INDICATOR([mbrlen]) gl_FUNC_MBRTOWC gl_CONDITIONAL([GL_COND_OBJ_MBRTOWC], [test $HAVE_MBRTOWC = 0 || test $REPLACE_MBRTOWC = 1]) AM_COND_IF([GL_COND_OBJ_MBRTOWC], [ if test $REPLACE_MBSTATE_T = 1; then AC_LIBOBJ([lc-charset-dispatch]) AC_LIBOBJ([mbtowc-lock]) gl_PREREQ_MBTOWC_LOCK fi gl_PREREQ_MBRTOWC ]) gl_WCHAR_MODULE_INDICATOR([mbrtowc]) gl_FUNC_MBSINIT gl_CONDITIONAL([GL_COND_OBJ_MBSINIT], [test $HAVE_MBSINIT = 0 || test $REPLACE_MBSINIT = 1]) AM_COND_IF([GL_COND_OBJ_MBSINIT], [ gl_PREREQ_MBSINIT ]) gl_WCHAR_MODULE_INDICATOR([mbsinit]) gl_FUNC_MBTOWC gl_CONDITIONAL([GL_COND_OBJ_MBTOWC], [test $HAVE_MBTOWC = 0 || test $REPLACE_MBTOWC = 1]) AM_COND_IF([GL_COND_OBJ_MBTOWC], [ gl_PREREQ_MBTOWC ]) gl_STDLIB_MODULE_INDICATOR([mbtowc]) gl_FUNC_MEMCHR gl_CONDITIONAL([GL_COND_OBJ_MEMCHR], [test $REPLACE_MEMCHR = 1]) AM_COND_IF([GL_COND_OBJ_MEMCHR], [ gl_PREREQ_MEMCHR ]) gl_STRING_MODULE_INDICATOR([memchr]) gl_FUNC_MEMPCPY gl_CONDITIONAL([GL_COND_OBJ_MEMPCPY], [test $HAVE_MEMPCPY = 0]) AM_COND_IF([GL_COND_OBJ_MEMPCPY], [ gl_PREREQ_MEMPCPY ]) gl_STRING_MODULE_INDICATOR([mempcpy]) gl_FUNC_MEMRCHR gl_CONDITIONAL([GL_COND_OBJ_MEMRCHR], [test $ac_cv_func_memrchr = no]) AM_COND_IF([GL_COND_OBJ_MEMRCHR], [ gl_PREREQ_MEMRCHR ]) gl_STRING_MODULE_INDICATOR([memrchr]) gl_MINMAX gl_FUNC_MKDIR gl_CONDITIONAL([GL_COND_OBJ_MKDIR], [test $REPLACE_MKDIR = 1]) gl_SYS_STAT_MODULE_INDICATOR([mkdir]) gl_FUNC_MKOSTEMP gl_CONDITIONAL([GL_COND_OBJ_MKOSTEMP], [test $HAVE_MKOSTEMP = 0]) AM_COND_IF([GL_COND_OBJ_MKOSTEMP], [ gl_PREREQ_MKOSTEMP ]) gl_MODULE_INDICATOR([mkostemp]) gl_STDLIB_MODULE_INDICATOR([mkostemp]) gl_FUNC_MKSTEMP gl_CONDITIONAL([GL_COND_OBJ_MKSTEMP], [test $HAVE_MKSTEMP = 0 || test $REPLACE_MKSTEMP = 1]) AM_COND_IF([GL_COND_OBJ_MKSTEMP], [ gl_PREREQ_MKSTEMP ]) gl_STDLIB_MODULE_INDICATOR([mkstemp]) gl_FUNC_MKTIME if test $REPLACE_MKTIME = 1; then AC_LIBOBJ([mktime]) gl_PREREQ_MKTIME fi gl_TIME_MODULE_INDICATOR([mktime]) gl_FUNC_MKTIME_INTERNAL if test $WANT_MKTIME_INTERNAL = 1; then AC_LIBOBJ([mktime]) gl_PREREQ_MKTIME fi AC_REQUIRE([gl_MSVC_INVAL]) gl_CONDITIONAL([GL_COND_OBJ_MSVC_INVAL], [test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1]) AC_REQUIRE([gl_MSVC_NOTHROW]) gl_CONDITIONAL([GL_COND_OBJ_MSVC_NOTHROW], [test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1]) gl_MODULE_INDICATOR([msvc-nothrow]) gl_MULTIARCH gl_FUNC_NL_LANGINFO gl_CONDITIONAL([GL_COND_OBJ_NL_LANGINFO], [test $HAVE_NL_LANGINFO = 0 || test $REPLACE_NL_LANGINFO = 1]) gl_CONDITIONAL([GL_COND_OBJ_NL_LANGINFO_LOCK], [test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0]) if test $REPLACE_NL_LANGINFO = 1 && test $NL_LANGINFO_MTSAFE = 0; then gl_PREREQ_NL_LANGINFO_LOCK fi gl_LANGINFO_MODULE_INDICATOR([nl_langinfo]) gl_FUNC_GNU_STRFTIME gl_FUNC_OBSTACK gl_CONDITIONAL([GL_COND_OBJ_OBSTACK], [test "$gl_cv_func_obstack" != yes]) gl_FUNC_OPEN gl_CONDITIONAL([GL_COND_OBJ_OPEN], [test $REPLACE_OPEN = 1]) AM_COND_IF([GL_COND_OBJ_OPEN], [ gl_PREREQ_OPEN ]) gl_FCNTL_MODULE_INDICATOR([open]) gl_FUNC_OPENAT gl_CONDITIONAL([GL_COND_OBJ_OPENAT], [test $HAVE_OPENAT = 0 || test $REPLACE_OPENAT = 1]) AM_COND_IF([GL_COND_OBJ_OPENAT], [ gl_PREREQ_OPENAT ]) gl_MODULE_INDICATOR([openat]) dnl for lib/getcwd.c gl_FCNTL_MODULE_INDICATOR([openat]) gl_FUNC_OPENDIR gl_CONDITIONAL([GL_COND_OBJ_OPENDIR], [test $HAVE_OPENDIR = 0 || test $REPLACE_OPENDIR = 1]) gl_DIRENT_MODULE_INDICATOR([opendir]) gl_PARSE_DATETIME gl_PATHMAX gl_FUNC_PIPE gl_CONDITIONAL([GL_COND_OBJ_PIPE], [test $HAVE_PIPE = 0]) gl_UNISTD_MODULE_INDICATOR([pipe]) gl_POSIX_SPAWN gl_CONDITIONAL([GL_COND_OBJ_SPAWN], [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1]) gl_SPAWN_MODULE_INDICATOR([posix_spawn]) gl_POSIX_SPAWN gl_CONDITIONAL([GL_COND_OBJ_SPAWNI], [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1]) AM_COND_IF([GL_COND_OBJ_SPAWNI], [ gl_PREREQ_POSIX_SPAWN_INTERNAL ]) gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR gl_CONDITIONAL([GL_COND_OBJ_SPAWN_FACTION_ADDCHDIR], [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 0 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = 1]) gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addchdir]) gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN gl_CONDITIONAL([GL_COND_OBJ_SPAWN_FACTION_ADDOPEN], [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1 || test $REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = 1]) gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_addopen]) gl_POSIX_SPAWN gl_CONDITIONAL([GL_COND_OBJ_SPAWN_FACTION_DESTROY], [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1]) gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_destroy]) gl_POSIX_SPAWN gl_CONDITIONAL([GL_COND_OBJ_SPAWN_FACTION_INIT], [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1]) gl_SPAWN_MODULE_INDICATOR([posix_spawn_file_actions_init]) gl_POSIX_SPAWN gl_CONDITIONAL([GL_COND_OBJ_SPAWNATTR_DESTROY], [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1]) gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_destroy]) gl_POSIX_SPAWN gl_CONDITIONAL([GL_COND_OBJ_SPAWNATTR_INIT], [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1]) gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_init]) gl_POSIX_SPAWN gl_CONDITIONAL([GL_COND_OBJ_SPAWNATTR_SETFLAGS], [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1]) gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setflags]) gl_POSIX_SPAWN gl_CONDITIONAL([GL_COND_OBJ_SPAWNATTR_SETSIGMASK], [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1]) gl_SPAWN_MODULE_INDICATOR([posix_spawnattr_setsigmask]) gl_POSIX_SPAWN gl_CONDITIONAL([GL_COND_OBJ_SPAWNP], [test $HAVE_POSIX_SPAWN = 0 || test $REPLACE_POSIX_SPAWN = 1]) gl_SPAWN_MODULE_INDICATOR([posix_spawnp]) gl_FUNC_PRINTF_FREXP gl_FUNC_PRINTF_FREXPL gl_FUNC_PRINTF_POSIX gl_STDIO_MODULE_INDICATOR([printf-posix]) m4_divert_text([INIT_PREPARE], [gl_printf_safe=yes]) AC_CHECK_DECLS([program_invocation_name], [], [], [#include <errno.h>]) AC_CHECK_DECLS([program_invocation_short_name], [], [], [#include <errno.h>]) gl_QUOTE gl_QUOTEARG gl_FUNC_RAISE gl_CONDITIONAL([GL_COND_OBJ_RAISE], [test $HAVE_RAISE = 0 || test $REPLACE_RAISE = 1]) AM_COND_IF([GL_COND_OBJ_RAISE], [ gl_PREREQ_RAISE ]) gl_SIGNAL_MODULE_INDICATOR([raise]) gl_FUNC_RANDOM_R gl_CONDITIONAL([GL_COND_OBJ_RANDOM_R], [test $HAVE_RANDOM_R = 0 || test $REPLACE_RANDOM_R = 1]) AM_COND_IF([GL_COND_OBJ_RANDOM_R], [ gl_PREREQ_RANDOM_R ]) gl_STDLIB_MODULE_INDICATOR([random_r]) gl_FUNC_RAWMEMCHR gl_CONDITIONAL([GL_COND_OBJ_RAWMEMCHR], [test $HAVE_RAWMEMCHR = 0]) AM_COND_IF([GL_COND_OBJ_RAWMEMCHR], [ gl_PREREQ_RAWMEMCHR ]) gl_STRING_MODULE_INDICATOR([rawmemchr]) gl_FUNC_READ gl_CONDITIONAL([GL_COND_OBJ_READ], [test $REPLACE_READ = 1]) AM_COND_IF([GL_COND_OBJ_READ], [ gl_PREREQ_READ ]) gl_UNISTD_MODULE_INDICATOR([read]) gl_PREREQ_READ_FILE gl_FUNC_READDIR gl_CONDITIONAL([GL_COND_OBJ_READDIR], [test $HAVE_READDIR = 0]) gl_DIRENT_MODULE_INDICATOR([readdir]) gl_FUNC_READLINE gl_CONDITIONAL([GL_COND_OBJ_READLINE], [test "$gl_cv_lib_readline" = no]) AM_COND_IF([GL_COND_OBJ_READLINE], [ gl_PREREQ_READLINE ]) gl_FUNC_READLINK gl_CONDITIONAL([GL_COND_OBJ_READLINK], [test $HAVE_READLINK = 0 || test $REPLACE_READLINK = 1]) AM_COND_IF([GL_COND_OBJ_READLINK], [ gl_PREREQ_READLINK ]) gl_UNISTD_MODULE_INDICATOR([readlink]) gl_FUNC_REALLOC_GNU if test $REPLACE_REALLOC_FOR_REALLOC_GNU = 1; then AC_LIBOBJ([realloc]) fi gl_STDLIB_MODULE_INDICATOR([realloc-gnu]) gl_FUNC_REALLOC_POSIX if test $REPLACE_REALLOC_FOR_REALLOC_POSIX = 1; then AC_LIBOBJ([realloc]) fi gl_STDLIB_MODULE_INDICATOR([realloc-posix]) gl_FUNC_REALLOCARRAY gl_CONDITIONAL([GL_COND_OBJ_REALLOCARRAY], [test $HAVE_REALLOCARRAY = 0 || test $REPLACE_REALLOCARRAY = 1]) AM_COND_IF([GL_COND_OBJ_REALLOCARRAY], [ gl_PREREQ_REALLOCARRAY ]) gl_MODULE_INDICATOR([reallocarray]) gl_STDLIB_MODULE_INDICATOR([reallocarray]) gl_REGEX gl_CONDITIONAL([GL_COND_OBJ_REGEX], [test $ac_use_included_regex = yes]) AM_COND_IF([GL_COND_OBJ_REGEX], [ gl_PREREQ_REGEX ]) gl_FUNC_REMOVE gl_CONDITIONAL([GL_COND_OBJ_REMOVE], [test $REPLACE_REMOVE = 1]) gl_STDIO_MODULE_INDICATOR([remove]) gl_FUNC_RENAME gl_CONDITIONAL([GL_COND_OBJ_RENAME], [test $REPLACE_RENAME = 1]) gl_STDIO_MODULE_INDICATOR([rename]) gl_FUNC_REWINDDIR gl_CONDITIONAL([GL_COND_OBJ_REWINDDIR], [test $HAVE_REWINDDIR = 0]) gl_DIRENT_MODULE_INDICATOR([rewinddir]) gl_FUNC_RMDIR gl_CONDITIONAL([GL_COND_OBJ_RMDIR], [test $REPLACE_RMDIR = 1]) gl_UNISTD_MODULE_INDICATOR([rmdir]) gl_PREREQ_SAFE_READ gl_PREREQ_SAFE_WRITE gl_SAVE_CWD gl_SCHED_H gl_SCHED_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P AC_PROG_MKDIR_P gl_FUNC_SECURE_GETENV gl_CONDITIONAL([GL_COND_OBJ_SECURE_GETENV], [test $HAVE_SECURE_GETENV = 0]) AM_COND_IF([GL_COND_OBJ_SECURE_GETENV], [ gl_PREREQ_SECURE_GETENV ]) gl_STDLIB_MODULE_INDICATOR([secure_getenv]) gl_HEADERS_SELINUX_SELINUX_H gl_HEADERS_SELINUX_CONTEXT_H gl_HEADERS_SELINUX_LABEL_H gl_CONDITIONAL_HEADER([selinux/context.h]) gl_CONDITIONAL_HEADER([selinux/label.h]) AC_PROG_MKDIR_P gl_CONDITIONAL([GL_COND_OBJ_GETFILECON], [test "$with_selinux" != no && test "$ac_cv_header_selinux_selinux_h" = yes]) gl_FUNC_SETENV gl_CONDITIONAL([GL_COND_OBJ_SETENV], [test $HAVE_SETENV = 0 || test $REPLACE_SETENV = 1]) gl_STDLIB_MODULE_INDICATOR([setenv]) gl_FUNC_SETLOCALE_NULL gl_CONDITIONAL([GL_COND_OBJ_SETLOCALE_LOCK], [test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0]) AM_COND_IF([GL_COND_OBJ_SETLOCALE_LOCK], [ gl_PREREQ_SETLOCALE_LOCK ]) gl_LOCALE_MODULE_INDICATOR([setlocale_null]) gl_SH_FILENAME gl_SIGACTION gl_CONDITIONAL([GL_COND_OBJ_SIGACTION], [test $HAVE_SIGACTION = 0]) AM_COND_IF([GL_COND_OBJ_SIGACTION], [ gl_PREREQ_SIGACTION ]) gl_SIGNAL_MODULE_INDICATOR([sigaction]) gl_SIGNAL_H gl_SIGNAL_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SIGNBIT gl_CONDITIONAL([GL_COND_OBJ_SIGNBIT3], [test $REPLACE_SIGNBIT = 1]) gl_MATH_MODULE_INDICATOR([signbit]) gl_SIGNALBLOCKING gl_CONDITIONAL([GL_COND_OBJ_SIGPROCMASK], [test $HAVE_POSIX_SIGNALBLOCKING = 0]) AM_COND_IF([GL_COND_OBJ_SIGPROCMASK], [ gl_PREREQ_SIGPROCMASK ]) gl_SIGNAL_MODULE_INDICATOR([sigprocmask]) gl_SIZE_MAX gl_SPAWN_H gl_SPAWN_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gt_TYPE_SSIZE_T gl_FUNC_STAT gl_CONDITIONAL([GL_COND_OBJ_STAT], [test $REPLACE_STAT = 1]) AM_COND_IF([GL_COND_OBJ_STAT], [ case "$host_os" in mingw*) AC_LIBOBJ([stat-w32]) ;; esac gl_PREREQ_STAT ]) gl_SYS_STAT_MODULE_INDICATOR([stat]) gl_STAT_TIME gl_STAT_BIRTHTIME gl_STDALIGN_H gl_CONDITIONAL_HEADER([stdalign.h]) AC_PROG_MKDIR_P gl_STDARG_H gl_CONDITIONAL_HEADER([stdarg.h]) AC_PROG_MKDIR_P gl_STDBOOL_H gl_CONDITIONAL_HEADER([stdbool.h]) AC_PROG_MKDIR_P gl_STDDEF_H gl_STDDEF_H_REQUIRE_DEFAULTS gl_CONDITIONAL_HEADER([stddef.h]) AC_PROG_MKDIR_P gl_STDINT_H gl_CONDITIONAL_HEADER([stdint.h]) dnl Because of gl_REPLACE_LIMITS_H: gl_CONDITIONAL_HEADER([limits.h]) AC_PROG_MKDIR_P gl_STDIO_H gl_STDIO_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_CONDITIONAL([GL_COND_OBJ_STDIO_READ], [test $REPLACE_STDIO_READ_FUNCS = 1]) gl_CONDITIONAL([GL_COND_OBJ_STDIO_WRITE], [test $REPLACE_STDIO_WRITE_FUNCS = 1]) dnl No need to create extra modules for these functions. Everyone who uses dnl <stdio.h> likely needs them. gl_STDIO_MODULE_INDICATOR([fscanf]) gl_MODULE_INDICATOR([fscanf]) gl_STDIO_MODULE_INDICATOR([scanf]) gl_MODULE_INDICATOR([scanf]) gl_STDIO_MODULE_INDICATOR([fgetc]) gl_STDIO_MODULE_INDICATOR([getc]) gl_STDIO_MODULE_INDICATOR([getchar]) gl_STDIO_MODULE_INDICATOR([fgets]) gl_STDIO_MODULE_INDICATOR([fread]) dnl No need to create extra modules for these functions. Everyone who uses dnl <stdio.h> likely needs them. gl_STDIO_MODULE_INDICATOR([fprintf]) gl_STDIO_MODULE_INDICATOR([printf]) gl_STDIO_MODULE_INDICATOR([vfprintf]) gl_STDIO_MODULE_INDICATOR([vprintf]) gl_STDIO_MODULE_INDICATOR([fputc]) gl_STDIO_MODULE_INDICATOR([putc]) gl_STDIO_MODULE_INDICATOR([putchar]) gl_STDIO_MODULE_INDICATOR([fputs]) gl_STDIO_MODULE_INDICATOR([puts]) gl_STDIO_MODULE_INDICATOR([fwrite]) gl_STDLIB_H gl_STDLIB_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_STPCPY gl_CONDITIONAL([GL_COND_OBJ_STPCPY], [test $HAVE_STPCPY = 0]) AM_COND_IF([GL_COND_OBJ_STPCPY], [ gl_PREREQ_STPCPY ]) gl_STRING_MODULE_INDICATOR([stpcpy]) gl_STRCASE gl_CONDITIONAL([GL_COND_OBJ_STRCASECMP], [test $HAVE_STRCASECMP = 0]) AM_COND_IF([GL_COND_OBJ_STRCASECMP], [ gl_PREREQ_STRCASECMP ]) gl_CONDITIONAL([GL_COND_OBJ_STRNCASECMP], [test $HAVE_STRNCASECMP = 0]) AM_COND_IF([GL_COND_OBJ_STRNCASECMP], [ gl_PREREQ_STRNCASECMP ]) gl_FUNC_STRCASESTR if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then AC_LIBOBJ([strcasestr]) gl_PREREQ_STRCASESTR fi gl_FUNC_STRCASESTR_SIMPLE if test $HAVE_STRCASESTR = 0 || test $REPLACE_STRCASESTR = 1; then AC_LIBOBJ([strcasestr]) gl_PREREQ_STRCASESTR fi gl_STRING_MODULE_INDICATOR([strcasestr]) gl_FUNC_STRCHRNUL gl_CONDITIONAL([GL_COND_OBJ_STRCHRNUL], [test $HAVE_STRCHRNUL = 0 || test $REPLACE_STRCHRNUL = 1]) AM_COND_IF([GL_COND_OBJ_STRCHRNUL], [ gl_PREREQ_STRCHRNUL ]) gl_STRING_MODULE_INDICATOR([strchrnul]) gl_FUNC_STRDUP_POSIX gl_CONDITIONAL([GL_COND_OBJ_STRDUP], [test $REPLACE_STRDUP = 1]) AM_COND_IF([GL_COND_OBJ_STRDUP], [ gl_PREREQ_STRDUP ]) gl_STRING_MODULE_INDICATOR([strdup]) gl_FUNC_STRERROR gl_CONDITIONAL([GL_COND_OBJ_STRERROR], [test $REPLACE_STRERROR = 1]) gl_MODULE_INDICATOR([strerror]) gl_STRING_MODULE_INDICATOR([strerror]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) gl_CONDITIONAL([GL_COND_OBJ_STRERROR_OVERRIDE], [test -n "$ERRNO_H" || test $REPLACE_STRERROR_0 = 1]) AM_COND_IF([GL_COND_OBJ_STRERROR_OVERRIDE], [ gl_PREREQ_SYS_H_WINSOCK2 ]) gl_STRING_H gl_STRING_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_STRINGS_H gl_STRINGS_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_STRSEP gl_CONDITIONAL([GL_COND_OBJ_STRSEP], [test $HAVE_STRSEP = 0]) AM_COND_IF([GL_COND_OBJ_STRSEP], [ gl_PREREQ_STRSEP ]) gl_STRING_MODULE_INDICATOR([strsep]) gl_FUNC_STRVERSCMP gl_CONDITIONAL([GL_COND_OBJ_STRVERSCMP], [test $HAVE_STRVERSCMP = 0]) AM_COND_IF([GL_COND_OBJ_STRVERSCMP], [ gl_PREREQ_STRVERSCMP ]) gl_STRING_MODULE_INDICATOR([strverscmp]) gl_SYS_FILE_H gl_SYS_FILE_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_RANDOM_H gl_SYS_RANDOM_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_STAT_H gl_SYS_STAT_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_TIME_H gl_SYS_TIME_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_TYPES_H gl_SYS_TYPES_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_SYS_WAIT_H gl_SYS_WAIT_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_GEN_TEMPNAME gl_MODULE_INDICATOR([tempname]) AC_CHECK_HEADERS([sys/single_threaded.h]) AC_REQUIRE([gl_THREADLIB]) gl_TIME_H gl_TIME_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_TIME_R gl_CONDITIONAL([GL_COND_OBJ_TIME_R], [test $HAVE_LOCALTIME_R = 0 || test $REPLACE_LOCALTIME_R = 1]) AM_COND_IF([GL_COND_OBJ_TIME_R], [ gl_PREREQ_TIME_R ]) gl_TIME_MODULE_INDICATOR([time_r]) gl_TIME_RZ gl_CONDITIONAL([GL_COND_OBJ_TIME_RZ], [test $HAVE_TIMEZONE_T = 0]) gl_TIME_MODULE_INDICATOR([time_rz]) gl_FUNC_TIMEGM gl_CONDITIONAL([GL_COND_OBJ_TIMEGM], [test $HAVE_TIMEGM = 0 || test $REPLACE_TIMEGM = 1]) AM_COND_IF([GL_COND_OBJ_TIMEGM], [ gl_PREREQ_TIMEGM ]) gl_TIME_MODULE_INDICATOR([timegm]) gl_TIMESPEC gt_TMPDIR gl_FUNC_TZSET gl_CONDITIONAL([GL_COND_OBJ_TZSET], [test $REPLACE_TZSET = 1]) gl_TIME_MODULE_INDICATOR([tzset]) gl_UNISTD_H gl_UNISTD_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_UNISTD_SAFER gl_FUNC_UNLINK gl_CONDITIONAL([GL_COND_OBJ_UNLINK], [test $REPLACE_UNLINK = 1]) gl_UNISTD_MODULE_INDICATOR([unlink]) AC_DEFINE([GNULIB_STDIO_SINGLE_THREAD], [1], [Define to 1 if you want the FILE stream functions getc, putc, etc. to use unlocked I/O if available, throughout the package. Unlocked I/O can improve performance, sometimes dramatically. But unlocked I/O is safe only in single-threaded programs, as well as in multithreaded programs for which you can guarantee that every FILE stream, including stdin, stdout, stderr, is used only in a single thread.]) AC_DEFINE([USE_UNLOCKED_IO], [GNULIB_STDIO_SINGLE_THREAD], [An alias of GNULIB_STDIO_SINGLE_THREAD.]) gl_FUNC_GLIBC_UNLOCKED_IO gl_FUNC_UNSETENV gl_CONDITIONAL([GL_COND_OBJ_UNSETENV], [test $HAVE_UNSETENV = 0 || test $REPLACE_UNSETENV = 1]) AM_COND_IF([GL_COND_OBJ_UNSETENV], [ gl_PREREQ_UNSETENV ]) gl_STDLIB_MODULE_INDICATOR([unsetenv]) gl_FUNC_UTIME gl_CONDITIONAL([GL_COND_OBJ_UTIME], [test $HAVE_UTIME = 0 || test $REPLACE_UTIME = 1]) AM_COND_IF([GL_COND_OBJ_UTIME], [ gl_PREREQ_UTIME ]) gl_UTIME_MODULE_INDICATOR([utime]) gl_UTIME_H gl_UTIME_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_UTIMENS AC_C_VARARRAYS AC_REQUIRE([AC_C_RESTRICT]) gl_FUNC_VASNPRINTF gl_FUNC_VASNPRINTF_POSIX gl_FUNC_VASPRINTF gl_STDIO_MODULE_INDICATOR([vasprintf]) m4_ifdef([AM_XGETTEXT_OPTION], [AM_][XGETTEXT_OPTION([--flag=asprintf:2:c-format]) AM_][XGETTEXT_OPTION([--flag=vasprintf:2:c-format])]) gl_FUNC_VASPRINTF_POSIX gl_VERSION_ETC gl_FUNC_VFPRINTF_POSIX gl_STDIO_MODULE_INDICATOR([vfprintf-posix]) gl_MODULE_INDICATOR([vfprintf-posix]) gl_WAIT_PROCESS gl_FUNC_WAITPID gl_CONDITIONAL([GL_COND_OBJ_WAITPID], [test $HAVE_WAITPID = 0]) gl_SYS_WAIT_MODULE_INDICATOR([waitpid]) gl_WCHAR_H gl_WCHAR_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P gl_FUNC_WCRTOMB gl_CONDITIONAL([GL_COND_OBJ_WCRTOMB], [test $HAVE_WCRTOMB = 0 || test $REPLACE_WCRTOMB = 1]) AM_COND_IF([GL_COND_OBJ_WCRTOMB], [ gl_PREREQ_WCRTOMB ]) gl_WCHAR_MODULE_INDICATOR([wcrtomb]) gl_FUNC_WCTOB gl_CONDITIONAL([GL_COND_OBJ_WCTOB], [test $HAVE_WCTOB = 0 || test $REPLACE_WCTOB = 1]) AM_COND_IF([GL_COND_OBJ_WCTOB], [ gl_PREREQ_WCTOB ]) gl_WCHAR_MODULE_INDICATOR([wctob]) gl_FUNC_WCTOMB gl_CONDITIONAL([GL_COND_OBJ_WCTOMB], [test $REPLACE_WCTOMB = 1]) AM_COND_IF([GL_COND_OBJ_WCTOMB], [ gl_PREREQ_WCTOMB ]) gl_STDLIB_MODULE_INDICATOR([wctomb]) gl_WCTYPE_H gl_WCTYPE_H_REQUIRE_DEFAULTS AC_PROG_MKDIR_P AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_MUTEX], [case "$host_os" in mingw*) true;; *) false;; esac]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_ONCE], [case "$host_os" in mingw*) true;; *) false;; esac]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_RECMUTEX], [case "$host_os" in mingw*) true;; *) false;; esac]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_RWLOCK], [case "$host_os" in mingw*) true;; *) false;; esac]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CONDITIONAL([GL_COND_OBJ_WINDOWS_SPAWN], [case "$host_os" in mingw*) true;; *) false;; esac]) gl_FUNC_WRITE gl_CONDITIONAL([GL_COND_OBJ_WRITE], [test $REPLACE_WRITE = 1]) AM_COND_IF([GL_COND_OBJ_WRITE], [ gl_PREREQ_WRITE ]) gl_UNISTD_MODULE_INDICATOR([write]) gl_XALLOC gl_MODULE_INDICATOR([xalloc]) gl_MODULE_INDICATOR([xalloc-die]) gl_XSIZE # End of code from modules m4_ifval(gl_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gl_LIBSOURCES_DIR])[ || for gl_file in ]gl_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gl_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([GL_MODULE_INDICATOR_PREFIX]) m4_popdef([GL_MACRO_PREFIX]) m4_popdef([gl_LIBSOURCES_DIR]) m4_popdef([gl_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gl_libobjs= gl_ltlibobjs= gl_libobjdeps= if test -n "$gl_LIBOBJS"; then # Remove the extension. changequote(,)dnl sed_drop_objext='s/\.o$//;s/\.obj$//' sed_dirname1='s,//*,/,g' sed_dirname2='s,\(.\)/$,\1,' sed_dirname3='s,^[^/]*$,.,' sed_dirname4='s,\(.\)/[^/]*$,\1,' sed_basename1='s,.*/,,' changequote([, ])dnl for i in `for i in $gl_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gl_libobjs="$gl_libobjs $i.$ac_objext" gl_ltlibobjs="$gl_ltlibobjs $i.lo" i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"` i_base=`echo "$i" | sed -e "$sed_basename1"` gl_libobjdeps="$gl_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Plo" done fi AC_SUBST([gl_LIBOBJS], [$gl_libobjs]) AC_SUBST([gl_LTLIBOBJS], [$gl_ltlibobjs]) AC_SUBST([gl_LIBOBJDEPS], [$gl_libobjdeps]) ]) gltests_libdeps= gltests_ltlibdeps= m4_pushdef([AC_LIBOBJ], m4_defn([gltests_LIBOBJ])) m4_pushdef([AC_REPLACE_FUNCS], m4_defn([gltests_REPLACE_FUNCS])) m4_pushdef([AC_LIBSOURCES], m4_defn([gltests_LIBSOURCES])) m4_pushdef([gltests_LIBSOURCES_LIST], []) m4_pushdef([gltests_LIBSOURCES_DIR], []) m4_pushdef([GL_MACRO_PREFIX], [gltests]) m4_pushdef([GL_MODULE_INDICATOR_PREFIX], [GL]) gl_COMMON gl_source_base='tests' gl_source_base_prefix= changequote(,)dnl gltests_WITNESS=IN_`echo "${PACKAGE-$PACKAGE_TARNAME}" | LC_ALL=C tr abcdefghijklmnopqrstuvwxyz ABCDEFGHIJKLMNOPQRSTUVWXYZ | LC_ALL=C sed -e 's/[^A-Z0-9_]/_/g'`_GNULIB_TESTS changequote([, ])dnl AC_SUBST([gltests_WITNESS]) gl_module_indicator_condition=$gltests_WITNESS m4_pushdef([gl_MODULE_INDICATOR_CONDITION], [$gl_module_indicator_condition]) m4_popdef([gl_MODULE_INDICATOR_CONDITION]) m4_ifval(gltests_LIBSOURCES_LIST, [ m4_syscmd([test ! -d ]m4_defn([gltests_LIBSOURCES_DIR])[ || for gl_file in ]gltests_LIBSOURCES_LIST[ ; do if test ! -r ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file ; then echo "missing file ]m4_defn([gltests_LIBSOURCES_DIR])[/$gl_file" >&2 exit 1 fi done])dnl m4_if(m4_sysval, [0], [], [AC_FATAL([expected source file, required through AC_LIBSOURCES, not found])]) ]) m4_popdef([GL_MODULE_INDICATOR_PREFIX]) m4_popdef([GL_MACRO_PREFIX]) m4_popdef([gltests_LIBSOURCES_DIR]) m4_popdef([gltests_LIBSOURCES_LIST]) m4_popdef([AC_LIBSOURCES]) m4_popdef([AC_REPLACE_FUNCS]) m4_popdef([AC_LIBOBJ]) AC_CONFIG_COMMANDS_PRE([ gltests_libobjs= gltests_ltlibobjs= gltests_libobjdeps= if test -n "$gltests_LIBOBJS"; then # Remove the extension. changequote(,)dnl sed_drop_objext='s/\.o$//;s/\.obj$//' sed_dirname1='s,//*,/,g' sed_dirname2='s,\(.\)/$,\1,' sed_dirname3='s,^[^/]*$,.,' sed_dirname4='s,\(.\)/[^/]*$,\1,' sed_basename1='s,.*/,,' changequote([, ])dnl for i in `for i in $gltests_LIBOBJS; do echo "$i"; done | sed -e "$sed_drop_objext" | sort | uniq`; do gltests_libobjs="$gltests_libobjs $i.$ac_objext" gltests_ltlibobjs="$gltests_ltlibobjs $i.lo" i_dir=`echo "$i" | sed -e "$sed_dirname1" -e "$sed_dirname2" -e "$sed_dirname3" -e "$sed_dirname4"` i_base=`echo "$i" | sed -e "$sed_basename1"` gltests_libobjdeps="$gltests_libobjdeps $i_dir/\$(DEPDIR)/$i_base.Plo" done fi AC_SUBST([gltests_LIBOBJS], [$gltests_libobjs]) AC_SUBST([gltests_LTLIBOBJS], [$gltests_ltlibobjs]) AC_SUBST([gltests_LIBOBJDEPS], [$gltests_libobjdeps]) ]) AC_REQUIRE([gl_CC_GNULIB_WARNINGS]) ]) # Like AC_LIBOBJ, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_LIBOBJ], [ AS_LITERAL_IF([$1], [gl_LIBSOURCES([$1.c])])dnl gl_LIBOBJS="$gl_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gl_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gl_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gl_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gl_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gl_LIBSOURCES_DIR], [lib]) m4_append([gl_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # Like AC_LIBOBJ, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_LIBOBJ], [ AS_LITERAL_IF([$1], [gltests_LIBSOURCES([$1.c])])dnl gltests_LIBOBJS="$gltests_LIBOBJS $1.$ac_objext" ]) # Like AC_REPLACE_FUNCS, except that the module name goes # into gltests_LIBOBJS instead of into LIBOBJS. AC_DEFUN([gltests_REPLACE_FUNCS], [ m4_foreach_w([gl_NAME], [$1], [AC_LIBSOURCES(gl_NAME[.c])])dnl AC_CHECK_FUNCS([$1], , [gltests_LIBOBJ($ac_func)]) ]) # Like AC_LIBSOURCES, except the directory where the source file is # expected is derived from the gnulib-tool parameterization, # and alloca is special cased (for the alloca-opt module). # We could also entirely rely on EXTRA_lib..._SOURCES. AC_DEFUN([gltests_LIBSOURCES], [ m4_foreach([_gl_NAME], [$1], [ m4_if(_gl_NAME, [alloca.c], [], [ m4_define([gltests_LIBSOURCES_DIR], [tests]) m4_append([gltests_LIBSOURCES_LIST], _gl_NAME, [ ]) ]) ]) ]) # This macro records the list of files which have been installed by # gnulib-tool and may be removed by future gnulib-tool invocations. AC_DEFUN([gl_FILE_LIST], [ build-aux/announce-gen build-aux/config.rpath build-aux/gendocs.sh build-aux/gnupload build-aux/update-copyright build-aux/useless-if-before-free build-aux/vc-list-files doc/gendocs_template doc/gendocs_template_min doc/parse-datetime.texi doc/regexprops-generic.texi lib/_Noreturn.h lib/access.c lib/acl-errno-valid.c lib/acl-internal.c lib/acl-internal.h lib/acl.h lib/acl_entries.c lib/alignof.h lib/alloca.c lib/alloca.in.h lib/arg-nonnull.h lib/asnprintf.c lib/asprintf.c lib/assure.h lib/at-func.c lib/attribute.h lib/base64.c lib/base64.h lib/basename-lgpl.c lib/basename-lgpl.h lib/binary-io.c lib/binary-io.h lib/bitrotate.c lib/bitrotate.h lib/btowc.c lib/c++defs.h lib/c-ctype.c lib/c-ctype.h lib/c-strcase.h lib/c-strcasecmp.c lib/c-strcaseeq.h lib/c-strncasecmp.c lib/calloc.c lib/canonicalize-lgpl.c lib/canonicalize.c lib/canonicalize.h lib/cdefs.h lib/chdir-long.c lib/chdir-long.h lib/cloexec.c lib/cloexec.h lib/close-stream.c lib/close-stream.h lib/close.c lib/closedir.c lib/closeout.c lib/closeout.h lib/concat-filename.c lib/concat-filename.h lib/copy-acl.c lib/copy-file-range.c lib/copy-file.c lib/copy-file.h lib/crc.c lib/crc.h lib/dirent-private.h lib/dirent.in.h lib/dirfd.c lib/dirname-lgpl.c lib/dirname.h lib/dup-safer-flag.c lib/dup-safer.c lib/dup.c lib/dup2.c lib/dynarray.h lib/eloop-threshold.h lib/errno.in.h lib/error.c lib/error.h lib/euidaccess.c lib/execute.c lib/execute.h lib/exitfail.c lib/exitfail.h lib/explicit_bzero.c lib/fatal-signal.c lib/fatal-signal.h lib/fchdir.c lib/fcntl.c lib/fcntl.in.h lib/fd-hook.c lib/fd-hook.h lib/fd-safer-flag.c lib/fd-safer.c lib/fdopendir.c lib/file-set.c lib/file-set.h lib/filename.h lib/filenamecat-lgpl.c lib/filenamecat.h lib/findprog-in.c lib/findprog.h lib/flexmember.h lib/float+.h lib/float.c lib/float.in.h lib/flock.c lib/floor.c lib/fopen.c lib/fpending.c lib/fpending.h lib/fprintf.c lib/fpucw.h lib/free.c lib/frexp.c lib/frexpl.c lib/fseek.c lib/fseeko.c lib/fseterr.c lib/fseterr.h lib/fstat.c lib/fstatat.c lib/ftell.c lib/ftello.c lib/full-write.c lib/full-write.h lib/fwriting.c lib/fwriting.h lib/get-permissions.c lib/getcwd-lgpl.c lib/getcwd.c lib/getdelim.c lib/getdtablesize.c lib/getfilecon.c lib/getgroups.c lib/getline.c lib/getopt-cdefs.in.h lib/getopt-core.h lib/getopt-ext.h lib/getopt-pfx-core.h lib/getopt-pfx-ext.h lib/getopt.c lib/getopt.in.h lib/getopt1.c lib/getopt_int.h lib/getpass.c lib/getpass.h lib/getprogname.c lib/getprogname.h lib/getrandom.c lib/gettext.h lib/gettime.c lib/gettimeofday.c lib/gl_array_list.c lib/gl_array_list.h lib/gl_list.c lib/gl_list.h lib/glthread/lock.c lib/glthread/lock.h lib/glthread/threadlib.c lib/group-member.c lib/hard-locale.c lib/hard-locale.h lib/hash-pjw.c lib/hash-pjw.h lib/hash-triple-simple.c lib/hash-triple.h lib/hash.c lib/hash.h lib/ialloc.c lib/ialloc.h lib/idx.h lib/ignore-value.h lib/intprops.h lib/inttypes.in.h lib/isnan.c lib/isnand-nolibm.h lib/isnand.c lib/isnanf-nolibm.h lib/isnanf.c lib/isnanl-nolibm.h lib/isnanl.c lib/itold.c lib/langinfo.in.h lib/lc-charset-dispatch.c lib/lc-charset-dispatch.h lib/libc-config.h lib/limits.in.h lib/localcharset.c lib/localcharset.h lib/locale.in.h lib/localeconv.c lib/lseek.c lib/lstat.c lib/malloc.c lib/malloc/dynarray-skeleton.c lib/malloc/dynarray.h lib/malloc/dynarray_at_failure.c lib/malloc/dynarray_emplace_enlarge.c lib/malloc/dynarray_finalize.c lib/malloc/dynarray_resize.c lib/malloc/dynarray_resize_clear.c lib/malloc/scratch_buffer.h lib/malloc/scratch_buffer_dupfree.c lib/malloc/scratch_buffer_grow.c lib/malloc/scratch_buffer_grow_preserve.c lib/malloc/scratch_buffer_set_array_size.c lib/malloca.c lib/malloca.h lib/math.c lib/math.in.h lib/mbrlen.c lib/mbrtowc-impl-utf8.h lib/mbrtowc-impl.h lib/mbrtowc.c lib/mbsinit.c lib/mbtowc-impl.h lib/mbtowc-lock.c lib/mbtowc-lock.h lib/mbtowc.c lib/memchr.c lib/memchr.valgrind lib/mempcpy.c lib/memrchr.c lib/minmax.h lib/mkdir.c lib/mkostemp.c lib/mkstemp.c lib/mktime-internal.h lib/mktime.c lib/msvc-inval.c lib/msvc-inval.h lib/msvc-nothrow.c lib/msvc-nothrow.h lib/nl_langinfo-lock.c lib/nl_langinfo.c lib/nstrftime.c lib/obstack.c lib/obstack.h lib/open.c lib/openat-die.c lib/openat-priv.h lib/openat-proc.c lib/openat.c lib/openat.h lib/opendir.c lib/parse-datetime.h lib/parse-datetime.y lib/pathmax.h lib/pipe-safer.c lib/pipe.c lib/printf-args.c lib/printf-args.h lib/printf-frexp.c lib/printf-frexp.h lib/printf-frexpl.c lib/printf-frexpl.h lib/printf-parse.c lib/printf-parse.h lib/printf.c lib/progname.c lib/progname.h lib/qcopy-acl.c lib/qset-acl.c lib/quote.h lib/quotearg.c lib/quotearg.h lib/raise.c lib/random_r.c lib/rawmemchr.c lib/rawmemchr.valgrind lib/read-file.c lib/read-file.h lib/read.c lib/readdir.c lib/readline.c lib/readline.h lib/readlink.c lib/realloc.c lib/reallocarray.c lib/regcomp.c lib/regex.c lib/regex.h lib/regex_internal.c lib/regex_internal.h lib/regexec.c lib/remove.c lib/rename.c lib/rewinddir.c lib/rmdir.c lib/root-uid.h lib/safe-read.c lib/safe-read.h lib/safe-write.c lib/safe-write.h lib/same-inode.h lib/save-cwd.c lib/save-cwd.h lib/sched.in.h lib/scratch_buffer.h lib/se-context.c lib/se-context.in.h lib/se-label.c lib/se-label.in.h lib/se-selinux.c lib/se-selinux.in.h lib/secure_getenv.c lib/set-acl.c lib/set-permissions.c lib/setenv.c lib/setlocale-lock.c lib/setlocale_null.c lib/setlocale_null.h lib/sig-handler.c lib/sig-handler.h lib/sigaction.c lib/signal.in.h lib/signbitd.c lib/signbitf.c lib/signbitl.c lib/sigprocmask.c lib/size_max.h lib/spawn.c lib/spawn.in.h lib/spawn_faction_addchdir.c lib/spawn_faction_addopen.c lib/spawn_faction_destroy.c lib/spawn_faction_init.c lib/spawn_int.h lib/spawnattr_destroy.c lib/spawnattr_init.c lib/spawnattr_setflags.c lib/spawnattr_setsigmask.c lib/spawni.c lib/spawnp.c lib/stat-macros.h lib/stat-time.c lib/stat-time.h lib/stat-w32.c lib/stat-w32.h lib/stat.c lib/stdalign.in.h lib/stdarg.in.h lib/stdbool.in.h lib/stddef.in.h lib/stdint.in.h lib/stdio-impl.h lib/stdio-read.c lib/stdio-write.c lib/stdio.in.h lib/stdlib.in.h lib/stpcpy.c lib/str-two-way.h lib/strcasecmp.c lib/strcasestr.c lib/strchrnul.c lib/strchrnul.valgrind lib/strdup.c lib/streq.h lib/strerror-override.c lib/strerror-override.h lib/strerror.c lib/strftime.h lib/string.in.h lib/strings.in.h lib/stripslash.c lib/strncasecmp.c lib/strsep.c lib/strverscmp.c lib/sys-limits.h lib/sys_file.in.h lib/sys_random.in.h lib/sys_stat.in.h lib/sys_time.in.h lib/sys_types.in.h lib/sys_wait.in.h lib/tempname.c lib/tempname.h lib/thread-optim.h lib/time-internal.h lib/time.in.h lib/time_r.c lib/time_rz.c lib/timegm.c lib/timespec.c lib/timespec.h lib/tmpdir.c lib/tmpdir.h lib/tzset.c lib/unistd--.h lib/unistd-safer.h lib/unistd.c lib/unistd.in.h lib/unlink.c lib/unlocked-io.h lib/unsetenv.c lib/utime.c lib/utime.in.h lib/utimens.c lib/utimens.h lib/vasnprintf.c lib/vasnprintf.h lib/vasprintf.c lib/verify.h lib/version-etc-fsf.c lib/version-etc.c lib/version-etc.h lib/vfprintf.c lib/wait-process.c lib/wait-process.h lib/waitpid.c lib/warn-on-use.h lib/wchar.in.h lib/wcrtomb.c lib/wctob.c lib/wctomb-impl.h lib/wctomb.c lib/wctype-h.c lib/wctype.in.h lib/windows-initguard.h lib/windows-mutex.c lib/windows-mutex.h lib/windows-once.c lib/windows-once.h lib/windows-recmutex.c lib/windows-recmutex.h lib/windows-rwlock.c lib/windows-rwlock.h lib/windows-spawn.c lib/windows-spawn.h lib/write.c lib/xalloc-die.c lib/xalloc-oversized.h lib/xalloc.h lib/xmalloc.c lib/xsize.c lib/xsize.h m4/00gnulib.m4 m4/__inline.m4 m4/absolute-header.m4 m4/access.m4 m4/acl.m4 m4/alloca.m4 m4/asm-underscore.m4 m4/autobuild.m4 m4/base64.m4 m4/bison.m4 m4/btowc.m4 m4/builtin-expect.m4 m4/calloc.m4 m4/canonicalize.m4 m4/chdir-long.m4 m4/clock_time.m4 m4/close.m4 m4/closedir.m4 m4/codeset.m4 m4/copy-file-range.m4 m4/copy-file.m4 m4/d-ino.m4 m4/dirent_h.m4 m4/dirfd.m4 m4/double-slash-root.m4 m4/dup.m4 m4/dup2.m4 m4/eaccess.m4 m4/eealloc.m4 m4/environ.m4 m4/errno_h.m4 m4/error.m4 m4/euidaccess.m4 m4/execute.m4 m4/explicit_bzero.m4 m4/exponentd.m4 m4/exponentf.m4 m4/exponentl.m4 m4/extensions.m4 m4/extern-inline.m4 m4/fatal-signal.m4 m4/fchdir.m4 m4/fcntl-o.m4 m4/fcntl.m4 m4/fcntl_h.m4 m4/fdopendir.m4 m4/filenamecat.m4 m4/findprog-in.m4 m4/flexmember.m4 m4/float_h.m4 m4/flock.m4 m4/floor.m4 m4/fopen.m4 m4/fpending.m4 m4/fpieee.m4 m4/fprintf-posix.m4 m4/free.m4 m4/frexp.m4 m4/frexpl.m4 m4/fseek.m4 m4/fseeko.m4 m4/fseterr.m4 m4/fstat.m4 m4/fstatat.m4 m4/ftell.m4 m4/ftello.m4 m4/fwriting.m4 m4/getcwd-abort-bug.m4 m4/getcwd-path-max.m4 m4/getcwd.m4 m4/getdelim.m4 m4/getdtablesize.m4 m4/getgroups.m4 m4/getline.m4 m4/getopt.m4 m4/getpagesize.m4 m4/getpass.m4 m4/getprogname.m4 m4/getrandom.m4 m4/gettime.m4 m4/gettimeofday.m4 m4/gnulib-common.m4 m4/group-member.m4 m4/host-cpu-c-abi.m4 m4/include_next.m4 m4/intmax_t.m4 m4/inttypes.m4 m4/inttypes_h.m4 m4/isnand.m4 m4/isnanf.m4 m4/isnanl.m4 m4/langinfo_h.m4 m4/largefile.m4 m4/ldexpl.m4 m4/lib-ld.m4 m4/lib-link.m4 m4/lib-prefix.m4 m4/limits-h.m4 m4/localcharset.m4 m4/locale-fr.m4 m4/locale-ja.m4 m4/locale-zh.m4 m4/locale_h.m4 m4/localeconv.m4 m4/lock.m4 m4/lseek.m4 m4/lstat.m4 m4/malloc.m4 m4/malloca.m4 m4/math_h.m4 m4/mbrlen.m4 m4/mbrtowc.m4 m4/mbsinit.m4 m4/mbstate_t.m4 m4/mbtowc.m4 m4/memchr.m4 m4/mempcpy.m4 m4/memrchr.m4 m4/minmax.m4 m4/mkdir.m4 m4/mkostemp.m4 m4/mkstemp.m4 m4/mktime.m4 m4/mmap-anon.m4 m4/mode_t.m4 m4/msvc-inval.m4 m4/msvc-nothrow.m4 m4/multiarch.m4 m4/nl_langinfo.m4 m4/nocrash.m4 m4/nstrftime.m4 m4/obstack.m4 m4/off_t.m4 m4/open-cloexec.m4 m4/open-slash.m4 m4/open.m4 m4/openat.m4 m4/opendir.m4 m4/parse-datetime.m4 m4/pathmax.m4 m4/pid_t.m4 m4/pipe.m4 m4/posix_spawn.m4 m4/posix_spawn_faction_addchdir.m4 m4/printf-frexp.m4 m4/printf-frexpl.m4 m4/printf-posix-rpl.m4 m4/printf.m4 m4/pthread_rwlock_rdlock.m4 m4/quote.m4 m4/quotearg.m4 m4/raise.m4 m4/random_r.m4 m4/rawmemchr.m4 m4/read-file.m4 m4/read.m4 m4/readdir.m4 m4/readline.m4 m4/readlink.m4 m4/realloc.m4 m4/reallocarray.m4 m4/regex.m4 m4/remove.m4 m4/rename.m4 m4/rewinddir.m4 m4/rmdir.m4 m4/safe-read.m4 m4/safe-write.m4 m4/save-cwd.m4 m4/sched_h.m4 m4/secure_getenv.m4 m4/selinux-context-h.m4 m4/selinux-label-h.m4 m4/selinux-selinux-h.m4 m4/setenv.m4 m4/setlocale_null.m4 m4/sh-filename.m4 m4/sig_atomic_t.m4 m4/sigaction.m4 m4/signal_h.m4 m4/signalblocking.m4 m4/signbit.m4 m4/size_max.m4 m4/spawn_h.m4 m4/ssize_t.m4 m4/stat-time.m4 m4/stat.m4 m4/std-gnu11.m4 m4/stdalign.m4 m4/stdarg.m4 m4/stdbool.m4 m4/stddef_h.m4 m4/stdint.m4 m4/stdint_h.m4 m4/stdio_h.m4 m4/stdlib_h.m4 m4/stpcpy.m4 m4/strcase.m4 m4/strcasestr.m4 m4/strchrnul.m4 m4/strdup.m4 m4/strerror.m4 m4/string_h.m4 m4/strings_h.m4 m4/strsep.m4 m4/strverscmp.m4 m4/sys_file_h.m4 m4/sys_random_h.m4 m4/sys_socket_h.m4 m4/sys_stat_h.m4 m4/sys_time_h.m4 m4/sys_types_h.m4 m4/sys_wait_h.m4 m4/tempname.m4 m4/threadlib.m4 m4/time_h.m4 m4/time_r.m4 m4/time_rz.m4 m4/timegm.m4 m4/timespec.m4 m4/tm_gmtoff.m4 m4/tmpdir.m4 m4/tzset.m4 m4/ungetc.m4 m4/unistd-safer.m4 m4/unistd_h.m4 m4/unlink.m4 m4/unlocked-io.m4 m4/utime.m4 m4/utime_h.m4 m4/utimens.m4 m4/utimes.m4 m4/vararrays.m4 m4/vasnprintf-posix.m4 m4/vasnprintf.m4 m4/vasprintf-posix.m4 m4/vasprintf.m4 m4/version-etc.m4 m4/vfprintf-posix.m4 m4/visibility.m4 m4/wait-process.m4 m4/waitpid.m4 m4/warn-on-use.m4 m4/wchar_h.m4 m4/wchar_t.m4 m4/wcrtomb.m4 m4/wctob.m4 m4/wctomb.m4 m4/wctype_h.m4 m4/wint_t.m4 m4/write.m4 m4/xalloc.m4 m4/xsize.m4 m4/year2038.m4 m4/zzgnulib.m4 top/GNUmakefile top/maint.mk ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/ftello.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000010502�14226564452�012163� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ftello.m4 serial 14 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FTELLO], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) AC_REQUIRE([gl_SYS_TYPES_H]) dnl Persuade glibc <stdio.h> to declare ftello(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([ftello]) if test $ac_cv_have_decl_ftello = no; then HAVE_DECL_FTELLO=0 fi AC_CACHE_CHECK([for ftello], [gl_cv_func_ftello], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <stdio.h>]], [[ftello (stdin);]])], [gl_cv_func_ftello=yes], [gl_cv_func_ftello=no]) ]) if test $gl_cv_func_ftello = no; then HAVE_FTELLO=0 else if test $WINDOWS_64_BIT_OFF_T = 1; then REPLACE_FTELLO=1 fi if test $gl_cv_var_stdin_large_offset = no; then REPLACE_FTELLO=1 fi if test $REPLACE_FTELLO = 0; then dnl Detect bug on Solaris. dnl ftell and ftello produce incorrect results after putc that followed a dnl getc call that reached EOF on Solaris. This is because the _IOREAD dnl flag does not get cleared in this case, even though _IOWRT gets set, dnl and ftell and ftello look whether the _IOREAD flag is set. AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether ftello works], [gl_cv_func_ftello_works], [ dnl Initial guess, used when cross-compiling or when /dev/tty cannot dnl be opened. changequote(,)dnl case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_ftello_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ftello_works="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_ftello_works="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <stdlib.h> #include <string.h> #define TESTFILE "conftest.tmp" int main (void) { FILE *fp; /* Create a file with some contents. */ fp = fopen (TESTFILE, "w"); if (fp == NULL) return 70; if (fwrite ("foogarsh", 1, 8, fp) < 8) { fclose (fp); return 71; } if (fclose (fp)) return 72; /* The file's contents is now "foogarsh". */ /* Try writing after reading to EOF. */ fp = fopen (TESTFILE, "r+"); if (fp == NULL) return 73; if (fseek (fp, -1, SEEK_END)) { fclose (fp); return 74; } if (!(getc (fp) == 'h')) { fclose (fp); return 1; } if (!(getc (fp) == EOF)) { fclose (fp); return 2; } if (!(ftell (fp) == 8)) { fclose (fp); return 3; } if (!(ftell (fp) == 8)) { fclose (fp); return 4; } if (!(putc ('!', fp) == '!')) { fclose (fp); return 5; } if (!(ftell (fp) == 9)) { fclose (fp); return 6; } if (!(fclose (fp) == 0)) return 7; fp = fopen (TESTFILE, "r"); if (fp == NULL) return 75; { char buf[10]; if (!(fread (buf, 1, 10, fp) == 9)) { fclose (fp); return 10; } if (!(memcmp (buf, "foogarsh!", 9) == 0)) { fclose (fp); return 11; } } if (!(fclose (fp) == 0)) return 12; /* The file's contents is now "foogarsh!". */ return 0; }]])], [gl_cv_func_ftello_works=yes], [gl_cv_func_ftello_works=no], [:]) ]) case "$gl_cv_func_ftello_works" in *yes) ;; *) REPLACE_FTELLO=1 AC_DEFINE([FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE], [1], [Define to 1 if the system's ftello function has the Solaris bug.]) ;; esac fi if test $REPLACE_FTELLO = 0; then dnl Detect bug on macOS >= 10.15. gl_FUNC_UNGETC_WORKS if test $gl_ftello_broken_after_ungetc = yes; then REPLACE_FTELLO=1 AC_DEFINE([FTELLO_BROKEN_AFTER_UNGETC], [1], [Define to 1 if the system's ftello function has the macOS bug.]) fi fi fi ]) # Prerequisites of lib/ftello.c. AC_DEFUN([gl_PREREQ_FTELLO], [ dnl Native Windows has the function _ftelli64. mingw hides it, but mingw64 dnl makes it usable again. AC_CHECK_FUNCS([_ftelli64]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fwriting.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000000610�14226564452�012526� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fwriting.m4 serial 3 dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FWRITING], [ AC_CHECK_HEADERS_ONCE([stdio_ext.h]) AC_CHECK_FUNCS_ONCE([__fwriting]) ]) ������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/euidaccess.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000003465�14226564451�013017� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# euidaccess.m4 serial 15 dnl Copyright (C) 2002-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_NONREENTRANT_EUIDACCESS], [ AC_REQUIRE([gl_FUNC_EUIDACCESS]) AC_CHECK_DECLS([setregid]) AC_DEFINE([PREFER_NONREENTRANT_EUIDACCESS], [1], [Define this if you prefer euidaccess to return the correct result even if this would make it nonreentrant. Define this only if your entire application is safe even if the uid or gid might temporarily change. If your application uses signal handlers or threads it is probably not safe.]) ]) AC_DEFUN([gl_FUNC_EUIDACCESS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade glibc <unistd.h> to declare euidaccess(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS([euidaccess]) if test $ac_cv_func_euidaccess = no; then HAVE_EUIDACCESS=0 fi ]) # Prerequisites of lib/euidaccess.c. AC_DEFUN([gl_PREREQ_EUIDACCESS], [ dnl Prefer POSIX faccessat over non-standard euidaccess. AC_CHECK_FUNCS_ONCE([faccessat]) dnl Try various other non-standard fallbacks. AC_CHECK_HEADERS([libgen.h]) AC_FUNC_GETGROUPS # Solaris 9 and 10 need -lgen to get the eaccess function. # Save and restore LIBS so -lgen isn't added to it. Otherwise, *all* # programs in the package would end up linked with that potentially-shared # library, inducing unnecessary run-time overhead. LIB_EACCESS= AC_SUBST([LIB_EACCESS]) gl_saved_libs=$LIBS AC_SEARCH_LIBS([eaccess], [gen], [test "$ac_cv_search_eaccess" = "none required" || LIB_EACCESS=$ac_cv_search_eaccess]) AC_CHECK_FUNCS([eaccess]) LIBS=$gl_saved_libs ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/vfprintf-posix.m4�������������������������������������������������������������������0000644�0000000�0000000�00000010446�14226564453�013704� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vfprintf-posix.m4 serial 14 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VFPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_vfprintf_posix=no case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) # vfprintf exists and is # already POSIX compliant. gl_cv_func_vfprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_vfprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_VFPRINTF fi ]) AC_DEFUN([gl_REPLACE_VFPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([vfprintf]) REPLACE_VFPRINTF=1 AC_DEFINE([REPLACE_VFPRINTF_POSIX], [1], [Define if vfprintf is overridden by a POSIX compliant gnulib implementation.]) gl_PREREQ_VFPRINTF ]) AC_DEFUN([gl_PREREQ_VFPRINTF], [:]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/close.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000002221�14226564451�012001� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# close.m4 serial 9 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_CLOSE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_CLOSE=1 fi ]) m4_ifdef([gl_PREREQ_SYS_H_WINSOCK2], [ gl_PREREQ_SYS_H_WINSOCK2 if test $UNISTD_H_HAVE_WINSOCK2_H = 1; then dnl Even if the 'socket' module is not used here, another part of the dnl application may use it and pass file descriptors that refer to dnl sockets to the close() function. So enable the support for sockets. REPLACE_CLOSE=1 fi ]) dnl Replace close() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ if test $REPLACE_CLOSE = 0; then gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_CLOSE=1 fi fi ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/nls.m4������������������������������������������������������������������������������0000644�0000000�0000000�00000002307�13413351610�011461� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nls.m4 serial 5 (gettext-0.18) dnl Copyright (C) 1995-2003, 2005-2006, 2008-2014, 2016 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2003. AC_PREREQ([2.50]) AC_DEFUN([AM_NLS], [ AC_MSG_CHECKING([whether NLS is requested]) dnl Default is enabled NLS AC_ARG_ENABLE([nls], [ --disable-nls do not use Native Language Support], USE_NLS=$enableval, USE_NLS=yes) AC_MSG_RESULT([$USE_NLS]) AC_SUBST([USE_NLS]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/nocrash.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000010555�14226564452�012343� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nocrash.m4 serial 5 dnl Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Based on libsigsegv, from Bruno Haible and Paolo Bonzini. AC_PREREQ([2.13]) dnl Expands to some code for use in .c programs that will cause the configure dnl test to exit instead of crashing. This is useful to avoid triggering dnl action from a background debugger and to avoid core dumps. dnl Usage: ... dnl ]GL_NOCRASH[ dnl ... dnl int main() { nocrash_init(); ... } AC_DEFUN([GL_NOCRASH],[[ #include <stdlib.h> #if defined __MACH__ && defined __APPLE__ /* Avoid a crash on Mac OS X. */ #include <mach/mach.h> #include <mach/mach_error.h> #include <mach/thread_status.h> #include <mach/exception.h> #include <mach/task.h> #include <pthread.h> /* The exception port on which our thread listens. */ static mach_port_t our_exception_port; /* The main function of the thread listening for exceptions of type EXC_BAD_ACCESS. */ static void * mach_exception_thread (void *arg) { /* Buffer for a message to be received. */ struct { mach_msg_header_t head; mach_msg_body_t msgh_body; char data[1024]; } msg; mach_msg_return_t retval; /* Wait for a message on the exception port. */ retval = mach_msg (&msg.head, MACH_RCV_MSG | MACH_RCV_LARGE, 0, sizeof (msg), our_exception_port, MACH_MSG_TIMEOUT_NONE, MACH_PORT_NULL); if (retval != MACH_MSG_SUCCESS) abort (); exit (1); } static void nocrash_init (void) { mach_port_t self = mach_task_self (); /* Allocate a port on which the thread shall listen for exceptions. */ if (mach_port_allocate (self, MACH_PORT_RIGHT_RECEIVE, &our_exception_port) == KERN_SUCCESS) { /* See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/mach_port_insert_right.html. */ if (mach_port_insert_right (self, our_exception_port, our_exception_port, MACH_MSG_TYPE_MAKE_SEND) == KERN_SUCCESS) { /* The exceptions we want to catch. Only EXC_BAD_ACCESS is interesting for us. */ exception_mask_t mask = EXC_MASK_BAD_ACCESS; /* Create the thread listening on the exception port. */ pthread_attr_t attr; pthread_t thread; if (pthread_attr_init (&attr) == 0 && pthread_attr_setdetachstate (&attr, PTHREAD_CREATE_DETACHED) == 0 && pthread_create (&thread, &attr, mach_exception_thread, NULL) == 0) { pthread_attr_destroy (&attr); /* Replace the exception port info for these exceptions with our own. Note that we replace the exception port for the entire task, not only for a particular thread. This has the effect that when our exception port gets the message, the thread specific exception port has already been asked, and we don't need to bother about it. See https://web.mit.edu/darwin/src/modules/xnu/osfmk/man/task_set_exception_ports.html. */ task_set_exception_ports (self, mask, our_exception_port, EXCEPTION_DEFAULT, MACHINE_THREAD_STATE); } } } } #elif defined _WIN32 && ! defined __CYGWIN__ /* Avoid a crash on native Windows. */ #define WIN32_LEAN_AND_MEAN #include <windows.h> #include <winerror.h> static LONG WINAPI exception_filter (EXCEPTION_POINTERS *ExceptionInfo) { switch (ExceptionInfo->ExceptionRecord->ExceptionCode) { case EXCEPTION_ACCESS_VIOLATION: case EXCEPTION_IN_PAGE_ERROR: case EXCEPTION_STACK_OVERFLOW: case EXCEPTION_GUARD_PAGE: case EXCEPTION_PRIV_INSTRUCTION: case EXCEPTION_ILLEGAL_INSTRUCTION: case EXCEPTION_DATATYPE_MISALIGNMENT: case EXCEPTION_ARRAY_BOUNDS_EXCEEDED: case EXCEPTION_NONCONTINUABLE_EXCEPTION: exit (1); } return EXCEPTION_CONTINUE_SEARCH; } static void nocrash_init (void) { SetUnhandledExceptionFilter ((LPTOP_LEVEL_EXCEPTION_FILTER) exception_filter); } #else /* Avoid a crash on POSIX systems. */ #include <signal.h> #include <unistd.h> /* A POSIX signal handler. */ static void exception_handler (int sig) { _exit (1); } static void nocrash_init (void) { #ifdef SIGSEGV signal (SIGSEGV, exception_handler); #endif #ifdef SIGBUS signal (SIGBUS, exception_handler); #endif } #endif ]]) ���������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/calloc.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000006014�14226564447�012142� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# calloc.m4 serial 29 # Copyright (C) 2004-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. # Determine whether calloc (N, S) returns non-NULL when N*S is zero, # and returns NULL when N*S overflows. # If so, define HAVE_CALLOC. Otherwise, define calloc to rpl_calloc # and arrange to use a calloc wrapper function that does work in that case. # _AC_FUNC_CALLOC_IF([IF-WORKS], [IF-NOT]) # ------------------------------------- # If calloc is compatible with GNU calloc, run IF-WORKS, otherwise, IF-NOT. AC_DEFUN([_AC_FUNC_CALLOC_IF], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether calloc (0, n) and calloc (n, 0) return nonnull], [ac_cv_func_calloc_0_nonnull], [if test $cross_compiling != yes; then ac_cv_func_calloc_0_nonnull=yes AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[int result = 0; char * volatile p = calloc (0, 0); if (!p) result |= 1; free (p); return result; ]])], [], [ac_cv_func_calloc_0_nonnull=no]) else case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on musl systems. *-musl*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # Guess yes on native Windows. mingw*) ac_cv_func_calloc_0_nonnull="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_calloc_0_nonnull="$gl_cross_guess_normal" ;; esac fi ]) AS_CASE([$ac_cv_func_calloc_0_nonnull], [*yes], [$1], [$2]) ]) # gl_FUNC_CALLOC_GNU # ------------------ # Replace calloc if it is not compatible with GNU libc. AC_DEFUN([gl_FUNC_CALLOC_GNU], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_CALLOC_POSIX]) REPLACE_CALLOC_FOR_CALLOC_GNU="$REPLACE_CALLOC_FOR_CALLOC_POSIX" if test $REPLACE_CALLOC_FOR_CALLOC_GNU = 0; then _AC_FUNC_CALLOC_IF([], [REPLACE_CALLOC_FOR_CALLOC_GNU=1]) fi ])# gl_FUNC_CALLOC_GNU # gl_FUNC_CALLOC_POSIX # -------------------- # Test whether 'calloc' is POSIX compliant (sets errno to ENOMEM when it # fails, and doesn't mess up with ptrdiff_t or size_t overflow), # and replace calloc if it is not. AC_DEFUN([gl_FUNC_CALLOC_POSIX], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_MALLOC_POSIX]) if test $REPLACE_MALLOC_FOR_MALLOC_POSIX = 1; then REPLACE_CALLOC_FOR_CALLOC_POSIX=1 fi dnl Although in theory we should also test for size_t overflow, dnl in practice testing for ptrdiff_t overflow suffices dnl since PTRDIFF_MAX <= SIZE_MAX on all known Gnulib porting targets. dnl A separate size_t test would slow down 'configure'. ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/unistd-safer.m4���������������������������������������������������������������������0000644�0000000�0000000�00000000530�14226564447�013306� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 9 dnl Copyright (C) 2002, 2005-2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_UNISTD_SAFER], [ AC_CHECK_FUNCS_ONCE([pipe]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/frexpl.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000015735�14226564452�012213� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# frexpl.m4 serial 22 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FREXPL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Persuade glibc <math.h> to declare frexpl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Check whether it's declared. dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]]) FREXPL_LIBM= if test $HAVE_DECL_FREXPL = 1; then gl_CHECK_FREXPL_NO_LIBM if test $gl_cv_func_frexpl_no_libm = no; then AC_CACHE_CHECK([whether frexpl() can be used with libm], [gl_cv_func_frexpl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> long double x;]], [[int e; return frexpl (x, &e) > 0;]])], [gl_cv_func_frexpl_in_libm=yes], [gl_cv_func_frexpl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_frexpl_in_libm = yes; then FREXPL_LIBM=-lm fi fi if test $gl_cv_func_frexpl_no_libm = yes \ || test $gl_cv_func_frexpl_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $FREXPL_LIBM" gl_FUNC_FREXPL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_frexpl_works" in *yes) gl_func_frexpl=yes ;; *) gl_func_frexpl=no; REPLACE_FREXPL=1 ;; esac else gl_func_frexpl=no fi if test $gl_func_frexpl = yes; then AC_DEFINE([HAVE_FREXPL], [1], [Define if the frexpl() function is available.]) fi fi if test $HAVE_DECL_FREXPL = 0 || test $gl_func_frexpl = no; then dnl Find libraries needed to link lib/frexpl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_FREXP]) FREXPL_LIBM="$FREXP_LIBM" else FREXPL_LIBM= fi fi AC_SUBST([FREXPL_LIBM]) ]) AC_DEFUN([gl_FUNC_FREXPL_NO_LIBM], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) dnl Check whether it's declared. dnl Mac OS X 10.3 has frexpl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([frexpl], , [HAVE_DECL_FREXPL=0], [[#include <math.h>]]) if test $HAVE_DECL_FREXPL = 1; then gl_CHECK_FREXPL_NO_LIBM if test $gl_cv_func_frexpl_no_libm = yes; then gl_FUNC_FREXPL_WORKS case "$gl_cv_func_frexpl_works" in *yes) gl_func_frexpl_no_libm=yes ;; *) gl_func_frexpl_no_libm=no; REPLACE_FREXPL=1 ;; esac else gl_func_frexpl_no_libm=no dnl Set REPLACE_FREXPL here because the system may have frexpl in libm. REPLACE_FREXPL=1 fi if test $gl_func_frexpl_no_libm = yes; then AC_DEFINE([HAVE_FREXPL_IN_LIBC], [1], [Define if the frexpl() function is available in libc.]) fi fi ]) dnl Test whether frexpl() can be used without linking with libm. dnl Set gl_cv_func_frexpl_no_libm to 'yes' or 'no' accordingly. AC_DEFUN([gl_CHECK_FREXPL_NO_LIBM], [ AC_CACHE_CHECK([whether frexpl() can be used without linking with libm], [gl_cv_func_frexpl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> long double x;]], [[int e; return frexpl (x, &e) > 0;]])], [gl_cv_func_frexpl_no_libm=yes], [gl_cv_func_frexpl_no_libm=no]) ]) ]) dnl Test whether frexpl() works on finite numbers (this fails on dnl Mac OS X 10.4/PowerPC, on AIX 5.1, and on BeOS), on denormalized numbers dnl (this fails on Mac OS X 10.5/i386), and also on infinite numbers (this dnl fails e.g. on IRIX 6.5 and mingw). AC_DEFUN([gl_FUNC_FREXPL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether frexpl works], [gl_cv_func_frexpl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> /* Override the values of <float.h>, like done in float.in.h. */ #if defined __i386__ && (defined __BEOS__ || defined __OpenBSD__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif #if defined __i386__ && (defined __FreeBSD__ || defined __DragonFly__) # undef LDBL_MIN_EXP # define LDBL_MIN_EXP (-16381) #endif #if (defined _ARCH_PPC || defined _POWER) && defined _AIX && (LDBL_MANT_DIG == 106) && defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP #endif #if defined __sgi && (LDBL_MANT_DIG >= 106) # if defined __GNUC__ # undef LDBL_MIN_EXP # define LDBL_MIN_EXP DBL_MIN_EXP # endif #endif extern #ifdef __cplusplus "C" #endif long double frexpl (long double, int *); long double zero = 0.0L; int main() { int result = 0; volatile long double x; /* Test on finite numbers that fails on AIX 5.1. */ x = 16.0L; { int exp = -9999; frexpl (x, &exp); if (exp != 5) result |= 1; } /* Test on finite numbers that fails on Mac OS X 10.4, because its frexpl function returns an invalid (incorrectly normalized) value: it returns y = { 0x3fe028f5, 0xc28f5c28, 0x3c9eb851, 0xeb851eb8 } but the correct result is 0.505L = { 0x3fe028f5, 0xc28f5c29, 0xbc547ae1, 0x47ae1480 } */ x = 1.01L; { int exp = -9999; long double y = frexpl (x, &exp); if (!(exp == 1 && y == 0.505L)) result |= 2; } /* Test on large finite numbers. This fails on BeOS at i = 16322, while LDBL_MAX_EXP = 16384. In the loop end test, we test x against Infinity, rather than comparing i with LDBL_MAX_EXP, because BeOS <float.h> has a wrong LDBL_MAX_EXP. */ { int i; for (i = 1, x = 1.0L; x != x + x; i++, x *= 2.0L) { int exp = -9999; frexpl (x, &exp); if (exp != i) { result |= 4; break; } } } /* Test on denormalized numbers. */ { int i; for (i = 1, x = 1.0L; i >= LDBL_MIN_EXP; i--, x *= 0.5L) ; if (x > 0.0L) { int exp; long double y = frexpl (x, &exp); /* On machines with IEEE854 arithmetic: x = 1.68105e-4932, exp = -16382, y = 0.5. On Mac OS X 10.5: exp = -16384, y = 0.5. */ if (exp != LDBL_MIN_EXP - 1) result |= 8; } } /* Test on infinite numbers. */ /* The Microsoft MSVC 14 compiler chokes on the expression 1.0 / 0.0. */ x = 1.0L / zero; { int exp; long double y = frexpl (x, &exp); if (y != x) result |= 16; } return result; }]])], [gl_cv_func_frexpl_works=yes], [gl_cv_func_frexpl_works=no], [ changequote(,)dnl case "$host_os" in aix | aix[3-6]* | beos* | darwin* | irix* | mingw* | pw*) gl_cv_func_frexpl_works="guessing no";; *) gl_cv_func_frexpl_works="guessing yes";; esac changequote([,])dnl ]) ]) ]) �����������������������������������recutils-1.9/m4/warn-on-use.m4����������������������������������������������������������������������0000644�0000000�0000000�00000004230�14226564453�013053� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# warn-on-use.m4 serial 9 dnl Copyright (C) 2010-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # gl_WARN_ON_USE_PREPARE(INCLUDES, NAMES) # --------------------------------------- # If the module 'posixcheck' is in use: # # For each whitespace-separated element in the list of NAMES, define # HAVE_RAW_DECL_name if the function has a declaration among INCLUDES # even after being undefined as a macro. # # See warn-on-use.h for some hints on how to poison function names, as # well as ideas on poisoning global variables and macros. NAMES may # include global variables, but remember that only functions work with # _GL_WARN_ON_USE. Typically, INCLUDES only needs to list a single # header, but if the replacement header pulls in other headers because # some systems declare functions in the wrong header, then INCLUDES # should do likewise. # # It is generally safe to assume declarations for functions declared # in the intersection of C89 and C11 (such as printf) without # needing gl_WARN_ON_USE_PREPARE. AC_DEFUN([gl_WARN_ON_USE_PREPARE], [ m4_ifdef([gl_POSIXCHECK], [m4_foreach_w([gl_decl], [$2], [AH_TEMPLATE([HAVE_RAW_DECL_]AS_TR_CPP(m4_defn([gl_decl])), [Define to 1 if ]m4_defn([gl_decl])[ is declared even after undefining macros.])])dnl for gl_func in m4_flatten([$2]); do AS_VAR_PUSHDEF([gl_Symbol], [gl_cv_have_raw_decl_$gl_func])dnl AC_CACHE_CHECK([whether $gl_func is declared without a macro], [gl_Symbol], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([$1], [[#undef $gl_func (void) $gl_func;]])], [AS_VAR_SET([gl_Symbol], [yes])], [AS_VAR_SET([gl_Symbol], [no])])]) AS_VAR_IF([gl_Symbol], [yes], [AC_DEFINE_UNQUOTED(AS_TR_CPP([HAVE_RAW_DECL_$gl_func]), [1]) dnl shortcut - if the raw declaration exists, then set a cache dnl variable to allow skipping any later AC_CHECK_DECL efforts eval ac_cv_have_decl_$gl_func=yes]) AS_VAR_POPDEF([gl_Symbol])dnl done ]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/safe-read.m4������������������������������������������������������������������������0000644�0000000�0000000�00000000631�14226564452�012527� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# safe-read.m4 serial 6 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of lib/safe-read.c. AC_DEFUN([gl_PREREQ_SAFE_READ], [ AC_REQUIRE([gt_TYPE_SSIZE_T]) ]) �������������������������������������������������������������������������������������������������������recutils-1.9/m4/getpass.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000006221�14226564452�012347� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getpass.m4 serial 17 dnl Copyright (C) 2002-2003, 2005-2006, 2009-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Provide a getpass() function if the system doesn't have it. AC_DEFUN_ONCE([gl_FUNC_GETPASS], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) dnl Persuade Solaris <unistd.h> and <stdlib.h> to declare getpass(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([getpass]) if test $ac_cv_func_getpass = no; then HAVE_GETPASS=0 fi ]) # Provide the GNU getpass() implementation. It supports passwords of # arbitrary length (not just 8 bytes as on HP-UX). AC_DEFUN([gl_FUNC_GETPASS_GNU], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_GETPASS]) if test $ac_cv_func_getpass = yes; then AC_CACHE_CHECK([for getpass without length limitations], [gl_cv_func_getpass_good], [AC_EGREP_CPP([Lucky GNU user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [gl_cv_func_getpass_good=yes], [gl_cv_func_getpass_good=no]) ]) if test $gl_cv_func_getpass_good != yes; then REPLACE_GETPASS_FOR_GETPASS_GNU=1 fi fi ]) # Prerequisites of lib/getpass.c. AC_DEFUN([gl_PREREQ_GETPASS], [ AC_CHECK_HEADERS_ONCE([stdio_ext.h termios.h]) AC_CHECK_FUNCS_ONCE([__fsetlocking]) AC_CHECK_DECLS([__fsetlocking],,, [[#include <stdio.h> #if HAVE_STDIO_EXT_H #include <stdio_ext.h> #endif]]) AC_CHECK_DECLS_ONCE([fflush_unlocked]) AC_CHECK_DECLS_ONCE([flockfile]) AC_CHECK_DECLS_ONCE([fputs_unlocked]) AC_CHECK_DECLS_ONCE([funlockfile]) AC_CHECK_DECLS_ONCE([putc_unlocked]) dnl We can't use AC_CHECK_FUNC here, because tcgetattr() is defined as a dnl static inline function when compiling for Android 4.4 or older. AC_CACHE_CHECK([for tcgetattr], [gl_cv_func_tcgetattr], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <termios.h> struct termios x; ]], [[return tcgetattr(0,&x);]]) ], [gl_cv_func_tcgetattr=yes], [gl_cv_func_tcgetattr=no]) ]) if test $gl_cv_func_tcgetattr = yes; then HAVE_TCGETATTR=1 else HAVE_TCGETATTR=0 fi AC_DEFINE_UNQUOTED([HAVE_TCGETATTR], [$HAVE_TCGETATTR], [Define to 1 if the system has the 'tcgetattr' function.]) dnl We can't use AC_CHECK_FUNC here, because tcsetattr() is defined as a dnl static inline function when compiling for Android 4.4 or older. AC_CACHE_CHECK([for tcsetattr], [gl_cv_func_tcsetattr], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <termios.h> struct termios x; ]], [[return tcsetattr(0,0,&x);]]) ], [gl_cv_func_tcsetattr=yes], [gl_cv_func_tcsetattr=no]) ]) if test $gl_cv_func_tcsetattr = yes; then HAVE_TCSETATTR=1 else HAVE_TCSETATTR=0 fi AC_DEFINE_UNQUOTED([HAVE_TCSETATTR], [$HAVE_TCSETATTR], [Define to 1 if the system has the 'tcsetattr' function.]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/minmax.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000002455�14226564452�012177� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# minmax.m4 serial 4 dnl Copyright (C) 2005, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.53]) AC_DEFUN([gl_MINMAX], [ AC_REQUIRE([gl_PREREQ_MINMAX]) ]) # Prerequisites of lib/minmax.h. AC_DEFUN([gl_PREREQ_MINMAX], [ gl_MINMAX_IN_HEADER([limits.h]) gl_MINMAX_IN_HEADER([sys/param.h]) ]) dnl gl_MINMAX_IN_HEADER(HEADER) dnl The parameter has to be a literal header name; it cannot be macro, dnl nor a shell variable. (Because autoheader collects only AC_DEFINE dnl invocations with a literal macro name.) AC_DEFUN([gl_MINMAX_IN_HEADER], [ m4_pushdef([header], AS_TR_SH([$1])) m4_pushdef([HEADER], AS_TR_CPP([$1])) AC_CACHE_CHECK([whether <$1> defines MIN and MAX], [gl_cv_minmax_in_]header, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <$1> int x = MIN (42, 17);]], [[]])], [gl_cv_minmax_in_]header[=yes], [gl_cv_minmax_in_]header[=no])]) if test $gl_cv_minmax_in_[]header = yes; then AC_DEFINE([HAVE_MINMAX_IN_]HEADER, 1, [Define to 1 if <$1> defines the MIN and MAX macros.]) fi m4_popdef([HEADER]) m4_popdef([header]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/mkostemp.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000001155�14226564452�012541� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mkostemp.m4 serial 2 dnl Copyright (C) 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MKOSTEMP], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl Persuade glibc <stdlib.h> to declare mkostemp(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([mkostemp]) if test $ac_cv_func_mkostemp != yes; then HAVE_MKOSTEMP=0 fi ]) # Prerequisites of lib/mkostemp.c. AC_DEFUN([gl_PREREQ_MKOSTEMP], [ ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/waitpid.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000000640�14226564453�012342� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# waitpid.m4 serial 2 dnl Copyright (C) 2010-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WAITPID], [ AC_REQUIRE([AC_CANONICAL_HOST]) HAVE_WAITPID=1 case $host_os in mingw*) HAVE_WAITPID=0 ;; esac ]) ������������������������������������������������������������������������������������������������recutils-1.9/m4/fseeko.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000004546�14226564452�012165� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fseeko.m4 serial 20 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FSEEKO], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_STDIN_LARGE_OFFSET]) AC_REQUIRE([gl_SYS_TYPES_H]) AC_REQUIRE([AC_PROG_CC]) dnl Persuade glibc <stdio.h> to declare fseeko(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CACHE_CHECK([for fseeko], [gl_cv_func_fseeko], [ AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h> ]], [[fseeko (stdin, 0, 0);]])], [gl_cv_func_fseeko=yes], [gl_cv_func_fseeko=no]) ]) AC_CHECK_DECLS_ONCE([fseeko]) if test $ac_cv_have_decl_fseeko = no; then HAVE_DECL_FSEEKO=0 fi if test $gl_cv_func_fseeko = no; then HAVE_FSEEKO=0 else if test $WINDOWS_64_BIT_OFF_T = 1; then REPLACE_FSEEKO=1 fi if test $gl_cv_var_stdin_large_offset = no; then REPLACE_FSEEKO=1 fi m4_ifdef([gl_FUNC_FFLUSH_STDIN], [ gl_FUNC_FFLUSH_STDIN case "$gl_cv_func_fflush_stdin" in *yes) ;; *) REPLACE_FSEEKO=1 ;; esac ]) fi ]) dnl Code shared by fseeko and ftello. Determine if large files are supported, dnl but stdin does not start as a large file by default. AC_DEFUN([gl_STDIN_LARGE_OFFSET], [ AC_CACHE_CHECK([whether stdin defaults to large file offsets], [gl_cv_var_stdin_large_offset], [AC_LINK_IFELSE([AC_LANG_PROGRAM([[#include <stdio.h>]], [[#if defined __SL64 && defined __SCLE /* cygwin */ /* Cygwin 1.5.24 and earlier fail to put stdin in 64-bit mode, making fseeko/ftello needlessly fail. This bug was fixed in 1.5.25, and it is easier to do a version check than building a runtime test. */ # include <cygwin/version.h> # if CYGWIN_VERSION_DLL_COMBINED < CYGWIN_VERSION_DLL_MAKE_COMBINED (1005, 25) choke me # endif #endif]])], [gl_cv_var_stdin_large_offset=yes], [gl_cv_var_stdin_large_offset=no])]) ]) # Prerequisites of lib/fseeko.c. AC_DEFUN([gl_PREREQ_FSEEKO], [ dnl Native Windows has the function _fseeki64. mingw hides it in some dnl circumstances, but mingw64 makes it usable again. AC_CHECK_FUNCS([_fseeki64]) if test $ac_cv_func__fseeki64 = yes; then AC_CHECK_DECLS([_fseeki64]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/string_h.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000016047�14226564452�012525� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a GNU-like replacement for <string.h>. # Copyright (C) 2007-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 34 # Written by Paul Eggert. AC_DEFUN_ONCE([gl_STRING_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_STRING_H_DEFAULTS]) gl_NEXT_HEADERS([string.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by C89. gl_WARN_ON_USE_PREPARE([[#include <string.h> ]], [ffsl ffsll memmem mempcpy memrchr rawmemchr stpcpy stpncpy strchrnul strdup strncat strndup strnlen strpbrk strsep strcasestr strtok_r strerror_r strerrorname_np sigabbrev_np sigdescr_np strsignal strverscmp]) AC_REQUIRE([AC_C_RESTRICT]) ]) # gl_STRING_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STRING_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STRING_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STRING_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPLICIT_BZERO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFSLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMMEM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MEMRCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAWMEMCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STPNCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCHRNUL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRDUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNCAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNDUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRNLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPBRK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRCASESTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOK_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCASESTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSCSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSPBRK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSSEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSTOK_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERROR_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRERRORNAME_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGABBREV_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGDESCR_NP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRSIGNAL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRVERSCMP]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MEMCCPY], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_STRDUP], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STRING_H_MODULE_INDICATOR_DEFAULTS]) dnl Make sure the shell variable for GNULIB_FREE_POSIX is initialized. gl_STDLIB_H_REQUIRE_DEFAULTS AC_REQUIRE([gl_STRING_H_DEFAULTS]) ]) AC_DEFUN([gl_STRING_H_DEFAULTS], [ HAVE_MBSLEN=0; AC_SUBST([HAVE_MBSLEN]) dnl Assume proper GNU behavior unless another module says otherwise. HAVE_EXPLICIT_BZERO=1; AC_SUBST([HAVE_EXPLICIT_BZERO]) HAVE_FFSL=1; AC_SUBST([HAVE_FFSL]) HAVE_FFSLL=1; AC_SUBST([HAVE_FFSLL]) HAVE_DECL_MEMMEM=1; AC_SUBST([HAVE_DECL_MEMMEM]) HAVE_MEMPCPY=1; AC_SUBST([HAVE_MEMPCPY]) HAVE_DECL_MEMRCHR=1; AC_SUBST([HAVE_DECL_MEMRCHR]) HAVE_RAWMEMCHR=1; AC_SUBST([HAVE_RAWMEMCHR]) HAVE_STPCPY=1; AC_SUBST([HAVE_STPCPY]) HAVE_STPNCPY=1; AC_SUBST([HAVE_STPNCPY]) HAVE_STRCHRNUL=1; AC_SUBST([HAVE_STRCHRNUL]) HAVE_DECL_STRDUP=1; AC_SUBST([HAVE_DECL_STRDUP]) HAVE_DECL_STRNDUP=1; AC_SUBST([HAVE_DECL_STRNDUP]) HAVE_DECL_STRNLEN=1; AC_SUBST([HAVE_DECL_STRNLEN]) HAVE_STRPBRK=1; AC_SUBST([HAVE_STRPBRK]) HAVE_STRSEP=1; AC_SUBST([HAVE_STRSEP]) HAVE_STRCASESTR=1; AC_SUBST([HAVE_STRCASESTR]) HAVE_DECL_STRTOK_R=1; AC_SUBST([HAVE_DECL_STRTOK_R]) HAVE_DECL_STRERROR_R=1; AC_SUBST([HAVE_DECL_STRERROR_R]) HAVE_STRERRORNAME_NP=1; AC_SUBST([HAVE_STRERRORNAME_NP]) HAVE_SIGABBREV_NP=1; AC_SUBST([HAVE_SIGABBREV_NP]) HAVE_SIGDESCR_NP=1; AC_SUBST([HAVE_SIGDESCR_NP]) HAVE_DECL_STRSIGNAL=1; AC_SUBST([HAVE_DECL_STRSIGNAL]) HAVE_STRVERSCMP=1; AC_SUBST([HAVE_STRVERSCMP]) REPLACE_FFSLL=0; AC_SUBST([REPLACE_FFSLL]) REPLACE_MEMCHR=0; AC_SUBST([REPLACE_MEMCHR]) REPLACE_MEMMEM=0; AC_SUBST([REPLACE_MEMMEM]) REPLACE_STPNCPY=0; AC_SUBST([REPLACE_STPNCPY]) REPLACE_STRCHRNUL=0; AC_SUBST([REPLACE_STRCHRNUL]) REPLACE_STRDUP=0; AC_SUBST([REPLACE_STRDUP]) REPLACE_STRNCAT=0; AC_SUBST([REPLACE_STRNCAT]) REPLACE_STRNDUP=0; AC_SUBST([REPLACE_STRNDUP]) REPLACE_STRNLEN=0; AC_SUBST([REPLACE_STRNLEN]) REPLACE_STRSTR=0; AC_SUBST([REPLACE_STRSTR]) REPLACE_STRCASESTR=0; AC_SUBST([REPLACE_STRCASESTR]) REPLACE_STRTOK_R=0; AC_SUBST([REPLACE_STRTOK_R]) REPLACE_STRERROR=0; AC_SUBST([REPLACE_STRERROR]) REPLACE_STRERROR_R=0; AC_SUBST([REPLACE_STRERROR_R]) REPLACE_STRERRORNAME_NP=0; AC_SUBST([REPLACE_STRERRORNAME_NP]) REPLACE_STRSIGNAL=0; AC_SUBST([REPLACE_STRSIGNAL]) UNDEFINE_STRTOK_R=0; AC_SUBST([UNDEFINE_STRTOK_R]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fpieee.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000004340�14226564452�012136� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fpieee.m4 serial 2 -*- coding: utf-8 -*- dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl IEEE 754 standardized three items: dnl - The formats of single-float and double-float - nowadays commonly dnl available as 'float' and 'double' in C and C++. dnl No autoconf test needed. dnl - The overflow and division by zero behaviour: The result are values dnl '±Inf' and 'NaN', rather than exceptions as it was before. dnl This file provides an autoconf macro for ensuring this behaviour of dnl floating-point operations. dnl - A set of conditions (overflow, underflow, inexact, etc.) which can dnl be configured to trigger an exception. dnl This cannot be done in a portable way: it depends on the compiler, dnl libc, kernel, and CPU. No autoconf macro is provided for this. dnl Ensure non-trapping behaviour of floating-point overflow and dnl floating-point division by zero. dnl (For integer overflow, see gcc's -ftrapv option; for integer division by dnl zero, see the autoconf macro in intdiv0.m4.) AC_DEFUN([gl_FP_IEEE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) # IEEE behaviour is the default on all CPUs except Alpha and SH # (according to the test results of Bruno Haible's ieeefp/fenv_default.m4 # and the GCC 4.1.2 manual). case "$host_cpu" in alpha*) # On Alpha systems, a compiler option provides the behaviour. # See the ieee(3) manual page, also available at # <https://backdrift.org/man/tru64/man3/ieee.3.html> if test -n "$GCC"; then # GCC has the option -mieee. # For full IEEE compliance (rarely needed), use option -mieee-with-inexact. CPPFLAGS="$CPPFLAGS -mieee" else # Compaq (ex-DEC) C has the option -ieee, equivalent to -ieee_with_no_inexact. # For full IEEE compliance (rarely needed), use option -ieee_with_inexact. CPPFLAGS="$CPPFLAGS -ieee" fi ;; sh*) if test -n "$GCC"; then # GCC has the option -mieee. CPPFLAGS="$CPPFLAGS -mieee" fi ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/sys_socket_h.m4���������������������������������������������������������������������0000644�0000000�0000000�00000016333�14226564452�013403� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_socket_h.m4 serial 29 dnl Copyright (C) 2005-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Simon Josefsson. AC_DEFUN_ONCE([gl_SYS_SOCKET_H], [ AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On OSF/1, the functions recv(), send(), recvfrom(), sendto() have dnl old-style declarations (with return type 'int' instead of 'ssize_t') dnl unless _POSIX_PII_SOCKET is defined. case "$host_os" in osf*) AC_DEFINE([_POSIX_PII_SOCKET], [1], [Define to 1 in order to get the POSIX compatible declarations of socket functions.]) ;; esac GL_GENERATE_SYS_SOCKET_H=false AC_CACHE_CHECK([whether <sys/socket.h> is self-contained], [gl_cv_header_sys_socket_h_selfcontained], [ AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[]])], [gl_cv_header_sys_socket_h_selfcontained=yes], [gl_cv_header_sys_socket_h_selfcontained=no]) ]) if test $gl_cv_header_sys_socket_h_selfcontained = yes; then dnl If the shutdown function exists, <sys/socket.h> should define dnl SHUT_RD, SHUT_WR, SHUT_RDWR. AC_CHECK_FUNCS([shutdown]) if test $ac_cv_func_shutdown = yes; then AC_CACHE_CHECK([whether <sys/socket.h> defines the SHUT_* macros], [gl_cv_header_sys_socket_h_shut], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <sys/socket.h>]], [[int a[] = { SHUT_RD, SHUT_WR, SHUT_RDWR };]])], [gl_cv_header_sys_socket_h_shut=yes], [gl_cv_header_sys_socket_h_shut=no]) ]) if test $gl_cv_header_sys_socket_h_shut = no; then GL_GENERATE_SYS_SOCKET_H=true fi fi fi # We need to check for ws2tcpip.h now. gl_PREREQ_SYS_H_SOCKET AC_CHECK_TYPES([struct sockaddr_storage, sa_family_t],,,[ /* sys/types.h is not needed according to POSIX, but the sys/socket.h in i386-unknown-freebsd4.10 and powerpc-apple-darwin5.5 required it. */ #include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif ]) if test $ac_cv_type_struct_sockaddr_storage = no; then HAVE_STRUCT_SOCKADDR_STORAGE=0 fi if test $ac_cv_type_sa_family_t = no; then HAVE_SA_FAMILY_T=0 fi if test $ac_cv_type_struct_sockaddr_storage != no; then AC_CHECK_MEMBERS([struct sockaddr_storage.ss_family], [], [HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=0], [#include <sys/types.h> #ifdef HAVE_SYS_SOCKET_H #include <sys/socket.h> #endif #ifdef HAVE_WS2TCPIP_H #include <ws2tcpip.h> #endif ]) fi if test $HAVE_STRUCT_SOCKADDR_STORAGE = 0 || test $HAVE_SA_FAMILY_T = 0 \ || test $HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY = 0; then GL_GENERATE_SYS_SOCKET_H=true fi gl_PREREQ_SYS_H_WINSOCK2 dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ /* Some systems require prerequisite headers. */ #include <sys/types.h> #include <sys/socket.h> ]], [socket connect accept bind getpeername getsockname getsockopt listen recv send recvfrom sendto setsockopt shutdown accept4]) AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_PREREQ_SYS_H_SOCKET], [ dnl Check prerequisites of the <sys/socket.h> replacement. AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) gl_CHECK_NEXT_HEADERS([sys/socket.h]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_SYS_SOCKET_H=1 else HAVE_SYS_SOCKET_H=0 fi AC_SUBST([HAVE_SYS_SOCKET_H]) gl_PREREQ_SYS_H_WS2TCPIP ]) # Common prerequisites of the <sys/socket.h> replacement and of the # <sys/select.h> replacement. # Sets and substitutes HAVE_WINSOCK2_H. AC_DEFUN([gl_PREREQ_SYS_H_WINSOCK2], [ m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) m4_ifdef([gl_SYS_IOCTL_H_DEFAULTS], [AC_REQUIRE([gl_SYS_IOCTL_H_DEFAULTS])]) AC_CHECK_HEADERS_ONCE([sys/socket.h]) if test $ac_cv_header_sys_socket_h != yes; then dnl We cannot use AC_CHECK_HEADERS_ONCE here, because that would make dnl the check for those headers unconditional; yet cygwin reports dnl that the headers are present but cannot be compiled (since on dnl cygwin, all socket information should come from sys/socket.h). AC_CHECK_HEADERS([winsock2.h]) fi if test "$ac_cv_header_winsock2_h" = yes; then HAVE_WINSOCK2_H=1 UNISTD_H_HAVE_WINSOCK2_H=1 SYS_IOCTL_H_HAVE_WINSOCK2_H=1 else HAVE_WINSOCK2_H=0 fi AC_SUBST([HAVE_WINSOCK2_H]) ]) # Common prerequisites of the <sys/socket.h> replacement and of the # <arpa/inet.h> replacement. # Sets and substitutes HAVE_WS2TCPIP_H. AC_DEFUN([gl_PREREQ_SYS_H_WS2TCPIP], [ AC_REQUIRE([gl_CHECK_SOCKET_HEADERS]) if test $ac_cv_header_sys_socket_h = yes; then HAVE_WS2TCPIP_H=0 else if test $ac_cv_header_ws2tcpip_h = yes; then HAVE_WS2TCPIP_H=1 else HAVE_WS2TCPIP_H=0 fi fi AC_SUBST([HAVE_WS2TCPIP_H]) ]) # gl_SYS_SOCKET_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_SOCKET_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_SOCKET_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_SOCKET_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_SOCKET_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SOCKET]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CONNECT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCEPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BIND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETPEERNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSOCKNAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETSOCKOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LISTEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RECV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SEND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RECVFROM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SENDTO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETSOCKOPT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SHUTDOWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACCEPT4]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_SOCKET_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_SOCKET_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_SOCKET_H_DEFAULTS], [ HAVE_STRUCT_SOCKADDR_STORAGE=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE]) HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY=1; AC_SUBST([HAVE_STRUCT_SOCKADDR_STORAGE_SS_FAMILY]) HAVE_SA_FAMILY_T=1; AC_SUBST([HAVE_SA_FAMILY_T]) HAVE_ACCEPT4=1; AC_SUBST([HAVE_ACCEPT4]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/mbrlen.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000016121�14226564452�012160� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbrlen.m4 serial 11 -*- coding: utf-8 -*- dnl Copyright (C) 2008, 2010-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBRLEN], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_REQUIRE([gl_FUNC_MBRTOWC]) AC_CHECK_FUNCS_ONCE([mbrlen]) if test $ac_cv_func_mbrlen = no; then HAVE_MBRLEN=0 AC_CHECK_DECLS([mbrlen],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_mbrlen = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares mbrlen() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBRLEN=1 fi else dnl Most bugs affecting the system's mbrtowc function also affect the dnl mbrlen function. So override mbrlen whenever mbrtowc is overridden. dnl We could also run the individual tests below; the results would be dnl the same. if test $REPLACE_MBRTOWC = 1; then REPLACE_MBRLEN=1 fi fi ]) dnl Test whether mbrlen puts the state into non-initial state when parsing an dnl incomplete multibyte character. dnl Result is gl_cv_func_mbrlen_incomplete_state. AC_DEFUN([gl_MBRLEN_INCOMPLETE_STATE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrlen handles incomplete characters], [gl_cv_func_mbrlen_incomplete_state], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrlen_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrlen_incomplete_state="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_JA != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrlen (input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 1; } return 0; }]])], [gl_cv_func_mbrlen_incomplete_state=yes], [gl_cv_func_mbrlen_incomplete_state=no], []) fi ]) ]) dnl Test whether mbrlen, when parsing the end of a multibyte character, dnl correctly returns the number of bytes that were needed to complete the dnl character (not the total number of bytes of the multibyte character). dnl Result is gl_cv_func_mbrlen_retval. AC_DEFUN([gl_MBRLEN_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrlen has a correct return value], [gl_cv_func_mbrlen_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on HP-UX and Solaris. hpux* | solaris*) gl_cv_func_mbrlen_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrlen_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; /* This fails on Solaris. */ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrlen (input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrlen (input + 2, 5, &state) != 1) result |= 1; } } /* This fails on HP-UX 11.11. */ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrlen (input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrlen (input + 2, 5, &state) != 2) result |= 2; } } return result; }]])], [gl_cv_func_mbrlen_retval=yes], [gl_cv_func_mbrlen_retval=no], []) fi ]) ]) dnl Test whether mbrlen, when parsing a NUL character, correctly returns 0. dnl Result is gl_cv_func_mbrlen_nul_retval. AC_DEFUN([gl_MBRLEN_NUL_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrlen returns 0 when parsing a NUL character], [gl_cv_func_mbrlen_nul_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris 9. solaris2.9) gl_cv_func_mbrlen_nul_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrlen_nul_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { /* This crashes on Solaris 9 inside __mbrtowc_dense_gb18030. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrlen ("", 1, &state) != 0) return 1; } return 0; }]])], [gl_cv_func_mbrlen_nul_retval=yes], [gl_cv_func_mbrlen_nul_retval=no], []) fi ]) ]) dnl Test whether mbrlen returns the correct value on empty input. AC_DEFUN([gl_MBRLEN_EMPTY_INPUT], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrlen works on empty input], [gl_cv_func_mbrlen_empty_input], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and glibc systems. aix* | *-gnu* | gnu*) gl_cv_func_mbrlen_empty_input="guessing no" ;; *) gl_cv_func_mbrlen_empty_input="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> static mbstate_t mbs; int main (void) { return mbrlen ("", 0, &mbs) != (size_t) -2; }]])], [gl_cv_func_mbrlen_empty_input=yes], [gl_cv_func_mbrlen_empty_input=no], [:]) ]) ]) # Prerequisites of lib/mbrlen.c. AC_DEFUN([gl_PREREQ_MBRLEN], [ : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/printf.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000213527�14226564452�012214� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf.m4 serial 73 dnl Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Test whether the *printf family of functions supports the 'j', 'z', 't', dnl 'L' size specifiers. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_sizes_c99. AC_DEFUN([gl_PRINTF_SIZES_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports size specifiers as in C99], [gl_cv_func_printf_sizes_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stddef.h> #include <stdio.h> #include <string.h> #include <sys/types.h> #if HAVE_STDINT_H_WITH_UINTMAX # include <stdint.h> #endif #if HAVE_INTTYPES_H_WITH_UINTMAX # include <inttypes.h> #endif static char buf[100]; int main () { int result = 0; #if HAVE_STDINT_H_WITH_UINTMAX || HAVE_INTTYPES_H_WITH_UINTMAX buf[0] = '\0'; if (sprintf (buf, "%ju %d", (uintmax_t) 12345671, 33, 44, 55) < 0 || strcmp (buf, "12345671 33") != 0) result |= 1; #else result |= 1; #endif buf[0] = '\0'; if (sprintf (buf, "%zu %d", (size_t) 12345672, 33, 44, 55) < 0 || strcmp (buf, "12345672 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%tu %d", (ptrdiff_t) 12345673, 33, 44, 55) < 0 || strcmp (buf, "12345673 33") != 0) result |= 4; buf[0] = '\0'; if (sprintf (buf, "%Lg %d", (long double) 1.5, 33, 44, 55) < 0 || strcmp (buf, "1.5 33") != 0) result |= 8; return result; }]])], [gl_cv_func_printf_sizes_c99=yes], [gl_cv_func_printf_sizes_c99=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_printf_sizes_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_sizes_c99="guessing yes";; midnightbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_sizes_c99="guessing no";; darwin*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_printf_sizes_c99="guessing no";; openbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_printf_sizes_c99="guessing no";; netbsd*) gl_cv_func_printf_sizes_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_sizes_c99="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_sizes_c99="guessing yes"], [gl_cv_func_printf_sizes_c99="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_sizes_c99="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports 'long double' dnl arguments together with the 'L' size specifier. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_long_double. AC_DEFUN([gl_PRINTF_LONG_DOUBLE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports 'long double' arguments], [gl_cv_func_printf_long_double], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[10000]; int main () { int result = 0; buf[0] = '\0'; if (sprintf (buf, "%Lf %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.750000 33") != 0) result |= 1; buf[0] = '\0'; if (sprintf (buf, "%Le %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.750000e+00 33") != 0) result |= 2; buf[0] = '\0'; if (sprintf (buf, "%Lg %d", 1.75L, 33, 44, 55) < 0 || strcmp (buf, "1.75 33") != 0) result |= 4; return result; }]])], [gl_cv_func_printf_long_double=yes], [gl_cv_func_printf_long_double=no], [case "$host_os" in # Guess no on BeOS. beos*) gl_cv_func_printf_long_double="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_long_double="guessing yes";; # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_long_double="guessing yes"], [gl_cv_func_printf_long_double="guessing no"]) ;; *) gl_cv_func_printf_long_double="guessing yes";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports infinite and NaN dnl 'double' arguments and negative zero arguments in the %f, %e, %g dnl directives. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_infinite. AC_DEFUN([gl_PRINTF_INFINITE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports infinite 'double' arguments], [gl_cv_func_printf_infinite], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static int strisnan (const char *string, size_t start_index, size_t end_index) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static int have_minus_zero () { static double plus_zero = 0.0; double minus_zero = - plus_zero; return memcmp (&plus_zero, &minus_zero, sizeof (double)) != 0; } static char buf[10000]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%f", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%f", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%f", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%e", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 4; if (sprintf (buf, "%e", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 4; if (sprintf (buf, "%e", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 8; if (sprintf (buf, "%g", 1.0 / zero) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 16; if (sprintf (buf, "%g", -1.0 / zero) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 16; if (sprintf (buf, "%g", zero / zero) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 32; /* This test fails on HP-UX 10.20. */ if (have_minus_zero ()) if (sprintf (buf, "%g", - zero) < 0 || strcmp (buf, "-0") != 0) result |= 64; return result; }]])], [gl_cv_func_printf_infinite=yes], [gl_cv_func_printf_infinite=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_infinite="guessing yes";; midnightbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_infinite="guessing no";; darwin*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite="guessing no";; hpux*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_printf_infinite="guessing no";; netbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_infinite="guessing no";; openbsd*) gl_cv_func_printf_infinite="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_infinite="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_infinite="guessing no";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_infinite="guessing yes"], [gl_cv_func_printf_infinite="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_infinite="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports infinite and NaN dnl 'long double' arguments in the %f, %e, %g directives. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_infinite_long_double. AC_DEFUN([gl_PRINTF_INFINITE_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl The user can set or unset the variable gl_printf_safe to indicate dnl that he wishes a safe handling of non-IEEE-754 'long double' values. if test -n "$gl_printf_safe"; then AC_DEFINE([CHECK_PRINTF_SAFE], [1], [Define if you wish *printf() functions that have a safe handling of non-IEEE-754 'long double' values.]) fi case "$gl_cv_func_printf_long_double" in *yes) AC_CACHE_CHECK([whether printf supports infinite 'long double' arguments], [gl_cv_func_printf_infinite_long_double], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ ]GL_NOCRASH[ #include <float.h> #include <stdio.h> #include <string.h> static int strisnan (const char *string, size_t start_index, size_t end_index) { if (start_index < end_index) { if (string[start_index] == '-') start_index++; if (start_index + 3 <= end_index && memcmp (string + start_index, "nan", 3) == 0) { start_index += 3; if (start_index == end_index || (string[start_index] == '(' && string[end_index - 1] == ')')) return 1; } } return 0; } static char buf[10000]; static long double zeroL = 0.0L; int main () { int result = 0; nocrash_init(); if (sprintf (buf, "%Lf", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Lf", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Lf", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; if (sprintf (buf, "%Le", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Le", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Le", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; if (sprintf (buf, "%Lg", 1.0L / zeroL) < 0 || (strcmp (buf, "inf") != 0 && strcmp (buf, "infinity") != 0)) result |= 1; if (sprintf (buf, "%Lg", -1.0L / zeroL) < 0 || (strcmp (buf, "-inf") != 0 && strcmp (buf, "-infinity") != 0)) result |= 1; if (sprintf (buf, "%Lg", zeroL / zeroL) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 1; #if CHECK_PRINTF_SAFE && ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; } { /* Signalling NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Le", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; if (sprintf (buf, "%Lg", x.value) < 0 || !strisnan (buf, 0, strlen (buf))) result |= 2; } { /* Pseudo-NaN. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 4; if (sprintf (buf, "%Le", x.value) <= 0) result |= 4; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 4; } { /* Pseudo-Infinity. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 8; if (sprintf (buf, "%Le", x.value) <= 0) result |= 8; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 8; } { /* Pseudo-Zero. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 16; if (sprintf (buf, "%Le", x.value) <= 0) result |= 16; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 16; } { /* Unnormalized number. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 32; if (sprintf (buf, "%Le", x.value) <= 0) result |= 32; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 32; } { /* Pseudo-Denormal. */ static union { unsigned int word[4]; long double value; } x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (sprintf (buf, "%Lf", x.value) <= 0) result |= 64; if (sprintf (buf, "%Le", x.value) <= 0) result |= 64; if (sprintf (buf, "%Lg", x.value) <= 0) result |= 64; } #endif return result; }]])], [gl_cv_func_printf_infinite_long_double=yes], [gl_cv_func_printf_infinite_long_double=no], [case "$host_cpu" in # Guess no on ia64, x86_64, i386. ia64 | x86_64 | i*86) gl_cv_func_printf_infinite_long_double="guessing no";; *) case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; midnightbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_printf_infinite_long_double="guessing no";; hpux*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_infinite_long_double="guessing no";; openbsd*) gl_cv_func_printf_infinite_long_double="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_infinite_long_double="guessing no";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_infinite_long_double="guessing yes"], [gl_cv_func_printf_infinite_long_double="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_infinite_long_double="$gl_cross_guess_normal";; esac ;; esac ]) ]) ;; *) gl_cv_func_printf_infinite_long_double="irrelevant" ;; esac ]) dnl Test whether the *printf family of functions supports the 'a' and 'A' dnl conversion specifier for hexadecimal output of floating-point numbers. dnl (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_a. AC_DEFUN([gl_PRINTF_DIRECTIVE_A], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'a' and 'A' directives], [gl_cv_func_printf_directive_a], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%a %d", 3.1416015625, 33, 44, 55) < 0 || (strcmp (buf, "0x1.922p+1 33") != 0 && strcmp (buf, "0x3.244p+0 33") != 0 && strcmp (buf, "0x6.488p-1 33") != 0 && strcmp (buf, "0xc.91p-2 33") != 0)) result |= 1; if (sprintf (buf, "%A %d", -3.1416015625, 33, 44, 55) < 0 || (strcmp (buf, "-0X1.922P+1 33") != 0 && strcmp (buf, "-0X3.244P+0 33") != 0 && strcmp (buf, "-0X6.488P-1 33") != 0 && strcmp (buf, "-0XC.91P-2 33") != 0)) result |= 2; /* This catches a FreeBSD 13.0 bug: it doesn't round. */ if (sprintf (buf, "%.2a %d", 1.51, 33, 44, 55) < 0 || (strcmp (buf, "0x1.83p+0 33") != 0 && strcmp (buf, "0x3.05p-1 33") != 0 && strcmp (buf, "0x6.0ap-2 33") != 0 && strcmp (buf, "0xc.14p-3 33") != 0)) result |= 4; /* This catches a Mac OS X 10.12.4 (Darwin 16.5) bug: it doesn't round. */ if (sprintf (buf, "%.0a %d", 1.51, 33, 44, 55) < 0 || (strcmp (buf, "0x2p+0 33") != 0 && strcmp (buf, "0x3p-1 33") != 0 && strcmp (buf, "0x6p-2 33") != 0 && strcmp (buf, "0xcp-3 33") != 0)) result |= 4; /* This catches a FreeBSD 6.1 bug. See <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> */ if (sprintf (buf, "%010a %d", 1.0 / zero, 33, 44, 55) < 0 || buf[0] == '0') result |= 8; /* This catches a Mac OS X 10.3.9 (Darwin 7.9) bug. */ if (sprintf (buf, "%.1a", 1.999) < 0 || (strcmp (buf, "0x1.0p+1") != 0 && strcmp (buf, "0x2.0p+0") != 0 && strcmp (buf, "0x4.0p-1") != 0 && strcmp (buf, "0x8.0p-2") != 0)) result |= 16; /* This catches the same Mac OS X 10.3.9 (Darwin 7.9) bug and also a glibc 2.4 bug <https://sourceware.org/bugzilla/show_bug.cgi?id=2908>. */ if (sprintf (buf, "%.1La", 1.999L) < 0 || (strcmp (buf, "0x1.0p+1") != 0 && strcmp (buf, "0x2.0p+0") != 0 && strcmp (buf, "0x4.0p-1") != 0 && strcmp (buf, "0x8.0p-2") != 0)) result |= 32; return result; }]])], [gl_cv_func_printf_directive_a=yes], [gl_cv_func_printf_directive_a=no], [ case "$host_os" in # Guess yes on glibc >= 2.5 systems. *-gnu* | gnu*) AC_EGREP_CPP([BZ2908], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ >= 5) || (__GLIBC__ > 2)) && !defined __UCLIBC__ BZ2908 #endif #endif ], [gl_cv_func_printf_directive_a="guessing yes"], [gl_cv_func_printf_directive_a="guessing no"]) ;; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_directive_a="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_a="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_printf_directive_a="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_directive_a="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %F format dnl directive. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_f. AC_DEFUN([gl_PRINTF_DIRECTIVE_F], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'F' directive], [gl_cv_func_printf_directive_f], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; static double zero = 0.0; int main () { int result = 0; if (sprintf (buf, "%F %d", 1234567.0, 33, 44, 55) < 0 || strcmp (buf, "1234567.000000 33") != 0) result |= 1; if (sprintf (buf, "%F", 1.0 / zero) < 0 || (strcmp (buf, "INF") != 0 && strcmp (buf, "INFINITY") != 0)) result |= 2; /* This catches a Cygwin 1.5.x bug. */ if (sprintf (buf, "%.F", 1234.0) < 0 || strcmp (buf, "1234") != 0) result |= 4; return result; }]])], [gl_cv_func_printf_directive_f=yes], [gl_cv_func_printf_directive_f=no], [ case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on FreeBSD >= 6. freebsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; freebsd* | kfreebsd*) gl_cv_func_printf_directive_f="guessing yes";; midnightbsd*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_printf_directive_f="guessing no";; darwin*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_directive_f="guessing no";; openbsd*) gl_cv_func_printf_directive_f="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_directive_f="guessing yes";; solaris*) gl_cv_func_printf_directive_f="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_f="guessing no";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_printf_directive_f="guessing yes"], [gl_cv_func_printf_directive_f="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_directive_f="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %n format dnl directive. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_printf_directive_n. AC_DEFUN([gl_PRINTF_DIRECTIVE_N], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'n' directive], [gl_cv_func_printf_directive_n], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <stdlib.h> #include <string.h> #ifdef _MSC_VER #include <inttypes.h> /* See page about "Parameter Validation" on msdn.microsoft.com. <https://docs.microsoft.com/en-us/cpp/c-runtime-library/parameter-validation> <https://docs.microsoft.com/en-us/cpp/c-runtime-library/reference/set-invalid-parameter-handler-set-thread-local-invalid-parameter-handler> */ static void cdecl invalid_parameter_handler (const wchar_t *expression, const wchar_t *function, const wchar_t *file, unsigned int line, uintptr_t dummy) { exit (1); } #endif static char fmtstring[10]; static char buf[100]; int main () { int count = -1; #ifdef _MSC_VER _set_invalid_parameter_handler (invalid_parameter_handler); #endif /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) support %n in format strings in read-only memory but not in writable memory. */ strcpy (fmtstring, "%d %n"); if (sprintf (buf, fmtstring, 123, &count, 33, 44, 55) < 0 || strcmp (buf, "123 ") != 0 || count != 4) return 1; return 0; }]])], [gl_cv_func_printf_directive_n=yes], [gl_cv_func_printf_directive_n=no], [case "$host_os" in # Guess no on glibc when _FORTIFY_SOURCE >= 2. *-gnu* | gnu*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if _FORTIFY_SOURCE >= 2 error fail #endif ]])], [gl_cv_func_printf_directive_n="guessing yes"], [gl_cv_func_printf_directive_n="guessing no"]) ;; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_n="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_printf_directive_n="guessing no";; *) gl_cv_func_printf_directive_n="guessing yes";; esac ]) ]) ]) dnl Test whether the *printf family of functions supports the %ls format dnl directive and in particular, when a precision is specified, whether dnl the functions stop converting the wide string argument when the number dnl of bytes that have been produced by this conversion equals or exceeds dnl the precision. dnl Result is gl_cv_func_printf_directive_ls. AC_DEFUN([gl_PRINTF_DIRECTIVE_LS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the 'ls' directive], [gl_cv_func_printf_directive_ls], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <wchar.h> #include <string.h> int main () { int result = 0; char buf[100]; /* Test whether %ls works at all. This test fails on OpenBSD 4.0, IRIX 6.5, Solaris 2.6, Haiku, but not on Cygwin 1.5. */ { static const wchar_t wstring[] = { 'a', 'b', 'c', 0 }; buf[0] = '\0'; if (sprintf (buf, "%ls", wstring) < 0 || strcmp (buf, "abc") != 0) result |= 1; } /* This test fails on IRIX 6.5, Solaris 2.6, Cygwin 1.5, Haiku (with an assertion failure inside libc), but not on OpenBSD 4.0. */ { static const wchar_t wstring[] = { 'a', 0 }; buf[0] = '\0'; if (sprintf (buf, "%ls", wstring) < 0 || strcmp (buf, "a") != 0) result |= 2; } /* Test whether precisions in %ls are supported as specified in ISO C 99 section 7.19.6.1: "If a precision is specified, no more than that many bytes are written (including shift sequences, if any), and the array shall contain a null wide character if, to equal the multibyte character sequence length given by the precision, the function would need to access a wide character one past the end of the array." This test fails on Solaris 10. */ { static const wchar_t wstring[] = { 'a', 'b', (wchar_t) 0xfdfdfdfd, 0 }; buf[0] = '\0'; if (sprintf (buf, "%.2ls", wstring) < 0 || strcmp (buf, "ab") != 0) result |= 8; } return result; }]])], [gl_cv_func_printf_directive_ls=yes], [gl_cv_func_printf_directive_ls=no], [ changequote(,)dnl case "$host_os" in # Guess yes on OpenBSD >= 6.0. openbsd[1-5].*) gl_cv_func_printf_directive_ls="guessing no";; openbsd*) gl_cv_func_printf_directive_ls="guessing yes";; irix*) gl_cv_func_printf_directive_ls="guessing no";; solaris*) gl_cv_func_printf_directive_ls="guessing no";; cygwin*) gl_cv_func_printf_directive_ls="guessing no";; beos* | haiku*) gl_cv_func_printf_directive_ls="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_directive_ls="guessing no";; # Guess yes on native Windows. mingw*) gl_cv_func_printf_directive_ls="guessing yes";; *) gl_cv_func_printf_directive_ls="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports POSIX/XSI format dnl strings with positions. (POSIX:2001) dnl Result is gl_cv_func_printf_positions. AC_DEFUN([gl_PRINTF_POSITIONS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports POSIX/XSI format strings with positions], [gl_cv_func_printf_positions], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> /* The string "%2$d %1$d", with dollar characters protected from the shell's dollar expansion (possibly an autoconf bug). */ static char format[] = { '%', '2', '$', 'd', ' ', '%', '1', '$', 'd', '\0' }; static char buf[100]; int main () { sprintf (buf, format, 33, 55); return (strcmp (buf, "55 33") != 0); }]])], [gl_cv_func_printf_positions=yes], [gl_cv_func_printf_positions=no], [ changequote(,)dnl case "$host_os" in netbsd[1-3]* | netbsdelf[1-3]* | netbsdaout[1-3]* | netbsdcoff[1-3]*) gl_cv_func_printf_positions="guessing no";; beos*) gl_cv_func_printf_positions="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_positions="guessing yes";; # Guess no on native Windows. mingw* | pw*) gl_cv_func_printf_positions="guessing no";; *) gl_cv_func_printf_positions="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports POSIX/XSI format dnl strings with the ' flag for grouping of decimal digits. (POSIX:2001) dnl Result is gl_cv_func_printf_flag_grouping. AC_DEFUN([gl_PRINTF_FLAG_GROUPING], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the grouping flag], [gl_cv_func_printf_flag_grouping], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; int main () { if (sprintf (buf, "%'d %d", 1234567, 99) < 0 || buf[strlen (buf) - 1] != '9') return 1; return 0; }]])], [gl_cv_func_printf_flag_grouping=yes], [gl_cv_func_printf_flag_grouping=no], [ changequote(,)dnl case "$host_os" in cygwin*) gl_cv_func_printf_flag_grouping="guessing no";; netbsd*) gl_cv_func_printf_flag_grouping="guessing no";; # Guess no on Android. linux*-android*) gl_cv_func_printf_flag_grouping="guessing no";; # Guess no on native Windows. mingw* | pw*) gl_cv_func_printf_flag_grouping="guessing no";; *) gl_cv_func_printf_flag_grouping="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports the - flag correctly. dnl (ISO C99.) See dnl <https://lists.gnu.org/r/bug-coreutils/2008-02/msg00035.html> dnl Result is gl_cv_func_printf_flag_leftadjust. AC_DEFUN([gl_PRINTF_FLAG_LEFTADJUST], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the left-adjust flag correctly], [gl_cv_func_printf_flag_leftadjust], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; int main () { /* Check that a '-' flag is not annihilated by a negative width. */ if (sprintf (buf, "a%-*sc", -3, "b") < 0 || strcmp (buf, "ab c") != 0) return 1; return 0; }]])], [gl_cv_func_printf_flag_leftadjust=yes], [gl_cv_func_printf_flag_leftadjust=no], [ changequote(,)dnl case "$host_os" in # Guess yes on HP-UX 11. hpux11*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess no on HP-UX 10 and older. hpux*) gl_cv_func_printf_flag_leftadjust="guessing no";; # Guess yes on Android. linux*-android*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess yes on native Windows. mingw*) gl_cv_func_printf_flag_leftadjust="guessing yes";; # Guess yes otherwise. *) gl_cv_func_printf_flag_leftadjust="guessing yes";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports padding of non-finite dnl values with the 0 flag correctly. (ISO C99 + TC1 + TC2.) See dnl <https://lists.gnu.org/r/bug-gnulib/2007-04/msg00107.html> dnl Result is gl_cv_func_printf_flag_zero. AC_DEFUN([gl_PRINTF_FLAG_ZERO], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports the zero flag correctly], [gl_cv_func_printf_flag_zero], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[100]; static double zero = 0.0; int main () { if (sprintf (buf, "%010f", 1.0 / zero, 33, 44, 55) < 0 || (strcmp (buf, " inf") != 0 && strcmp (buf, " infinity") != 0)) return 1; return 0; }]])], [gl_cv_func_printf_flag_zero=yes], [gl_cv_func_printf_flag_zero=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_flag_zero="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_flag_zero="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_printf_flag_zero="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_flag_zero="$gl_cross_guess_normal";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions supports large precisions. dnl On mingw, precisions larger than 512 are treated like 512, in integer, dnl floating-point or pointer output. On Solaris 10/x86, precisions larger dnl than 510 in floating-point output crash the program. On Solaris 10/SPARC, dnl precisions larger than 510 in floating-point output yield wrong results. dnl On AIX 7.1, precisions larger than 998 in floating-point output yield dnl wrong results. On BeOS, precisions larger than 1044 crash the program. dnl Result is gl_cv_func_printf_precision. AC_DEFUN([gl_PRINTF_PRECISION], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf supports large precisions], [gl_cv_func_printf_precision], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> static char buf[5000]; int main () { int result = 0; #ifdef __BEOS__ /* On BeOS, this would crash and show a dialog box. Avoid the crash. */ return 1; #endif if (sprintf (buf, "%.4000d %d", 1, 33, 44) < 4000 + 3) result |= 1; if (sprintf (buf, "%.4000f %d", 1.0, 33, 44) < 4000 + 5) result |= 2; if (sprintf (buf, "%.511f %d", 1.0, 33, 44) < 511 + 5 || buf[0] != '1') result |= 4; if (sprintf (buf, "%.999f %d", 1.0, 33, 44) < 999 + 5 || buf[0] != '1') result |= 4; return result; }]])], [gl_cv_func_printf_precision=yes], [gl_cv_func_printf_precision=no], [ changequote(,)dnl case "$host_os" in # Guess no only on Solaris, native Windows, and BeOS systems. solaris*) gl_cv_func_printf_precision="guessing no" ;; mingw* | pw*) gl_cv_func_printf_precision="guessing no" ;; beos*) gl_cv_func_printf_precision="guessing no" ;; # Guess yes on Android. linux*-android*) gl_cv_func_printf_precision="guessing yes" ;; *) gl_cv_func_printf_precision="guessing yes" ;; esac changequote([,])dnl ]) ]) ]) dnl Test whether the *printf family of functions recovers gracefully in case dnl of an out-of-memory condition, or whether it crashes the entire program. dnl Result is gl_cv_func_printf_enomem. AC_DEFUN([gl_PRINTF_ENOMEM], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_MULTIARCH]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether printf survives out-of-memory conditions], [gl_cv_func_printf_enomem], [ gl_cv_func_printf_enomem="guessing no" if test "$cross_compiling" = no; then if test $APPLE_UNIVERSAL_BUILD = 0; then AC_LANG_CONFTEST([AC_LANG_SOURCE([[ ]GL_NOCRASH[ #include <stdio.h> #include <sys/types.h> #include <sys/time.h> #include <sys/resource.h> #include <errno.h> int main() { struct rlimit limit; int ret; nocrash_init (); /* Some printf implementations allocate temporary space with malloc. */ /* On BSD systems, malloc() is limited by RLIMIT_DATA. */ #ifdef RLIMIT_DATA if (getrlimit (RLIMIT_DATA, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_DATA, &limit) < 0) return 77; #endif /* On Linux systems, malloc() is limited by RLIMIT_AS. */ #ifdef RLIMIT_AS if (getrlimit (RLIMIT_AS, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_AS, &limit) < 0) return 77; #endif /* Some printf implementations allocate temporary space on the stack. */ #ifdef RLIMIT_STACK if (getrlimit (RLIMIT_STACK, &limit) < 0) return 77; if (limit.rlim_max == RLIM_INFINITY || limit.rlim_max > 5000000) limit.rlim_max = 5000000; limit.rlim_cur = limit.rlim_max; if (setrlimit (RLIMIT_STACK, &limit) < 0) return 77; #endif ret = printf ("%.5000000f", 1.0); return !(ret == 5000002 || (ret < 0 && errno == ENOMEM)); } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then (./conftest 2>&AS_MESSAGE_LOG_FD result=$? _AS_ECHO_LOG([\$? = $result]) if test $result != 0 && test $result != 77; then result=1; fi exit $result ) >/dev/null 2>/dev/null case $? in 0) gl_cv_func_printf_enomem="yes" ;; 77) gl_cv_func_printf_enomem="guessing no" ;; *) gl_cv_func_printf_enomem="no" ;; esac else gl_cv_func_printf_enomem="guessing no" fi rm -fr conftest* else dnl A universal build on Apple Mac OS X platforms. dnl The result would be 'no' in 32-bit mode and 'yes' in 64-bit mode. dnl But we need a configuration result that is valid in both modes. gl_cv_func_printf_enomem="guessing no" fi fi if test "$gl_cv_func_printf_enomem" = "guessing no"; then changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on Solaris. solaris*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on AIX. aix*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on HP-UX/hppa. hpux*) case "$host_cpu" in hppa*) gl_cv_func_printf_enomem="guessing yes";; *) gl_cv_func_printf_enomem="guessing no";; esac ;; # Guess yes on IRIX. irix*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on OSF/1. osf*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_printf_enomem="guessing yes";; # Guess yes on Haiku. haiku*) gl_cv_func_printf_enomem="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_printf_enomem="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_printf_enomem="$gl_cross_guess_normal";; esac changequote([,])dnl fi ]) ]) dnl Test whether the snprintf function exists. (ISO C99, POSIX:2001) dnl Result is ac_cv_func_snprintf. AC_DEFUN([gl_SNPRINTF_PRESENCE], [ AC_CHECK_FUNCS_ONCE([snprintf]) ]) dnl Test whether the string produced by the snprintf function is always NUL dnl terminated. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_snprintf_truncation_c99. AC_DEFUN_ONCE([gl_SNPRINTF_TRUNCATION_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf truncates the result as in C99], [gl_cv_func_snprintf_truncation_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); my_snprintf (buf, 3, "%d %d", 4567, 89); if (memcmp (buf, "45\0DEF", 6) != 0) return 1; return 0; }]])], [gl_cv_func_snprintf_truncation_c99=yes], [gl_cv_func_snprintf_truncation_c99=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_truncation_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; midnightbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_truncation_c99="guessing no";; darwin*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_truncation_c99="guessing no";; openbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_snprintf_truncation_c99="guessing no";; solaris*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_truncation_c99="guessing no";; aix*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on HP-UX >= 11. hpux[7-9]* | hpux10*) gl_cv_func_snprintf_truncation_c99="guessing no";; hpux*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on OSF/1 >= 5. osf[3-4]*) gl_cv_func_snprintf_truncation_c99="guessing no";; osf*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_truncation_c99="guessing no";; netbsd*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_truncation_c99="guessing yes";; # Guess no on native Windows. mingw*) gl_cv_func_snprintf_truncation_c99="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_truncation_c99="$gl_cross_guess_normal";; esac changequote([,])dnl ]) ]) ]) dnl Test whether the return value of the snprintf function is the number dnl of bytes (excluding the terminating NUL) that would have been produced dnl if the buffer had been large enough. (ISO C99, POSIX:2001) dnl For example, this test program fails on IRIX 6.5: dnl --------------------------------------------------------------------- dnl #include <stdio.h> dnl int main() dnl { dnl static char buf[8]; dnl int retval = snprintf (buf, 3, "%d", 12345); dnl return retval >= 0 && retval < 3; dnl } dnl --------------------------------------------------------------------- dnl Result is gl_cv_func_snprintf_retval_c99. AC_DEFUN_ONCE([gl_SNPRINTF_RETVAL_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf returns a byte count as in C99], [gl_cv_func_snprintf_retval_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char buf[100]; int main () { strcpy (buf, "ABCDEF"); if (my_snprintf (buf, 3, "%d %d", 4567, 89) != 7) return 1; if (my_snprintf (buf, 0, "%d %d", 4567, 89) != 7) return 2; if (my_snprintf (NULL, 0, "%d %d", 4567, 89) != 7) return 3; return 0; }]])], [gl_cv_func_snprintf_retval_c99=yes], [gl_cv_func_snprintf_retval_c99=no], [case "$host_os" in changequote(,)dnl # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_retval_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; midnightbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_retval_c99="guessing no";; darwin*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on OpenBSD >= 3.9. openbsd[1-2].* | openbsd3.[0-8] | openbsd3.[0-8].*) gl_cv_func_snprintf_retval_c99="guessing no";; openbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Solaris >= 2.10. solaris2.[1-9][0-9]*) gl_cv_func_printf_sizes_c99="guessing yes";; solaris*) gl_cv_func_printf_sizes_c99="guessing no";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_retval_c99="guessing no";; aix*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_retval_c99="guessing no";; netbsd*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_retval_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_retval_c99="guessing yes";; changequote([,])dnl # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_snprintf_retval_c99="guessing yes"], [gl_cv_func_snprintf_retval_c99="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_retval_c99="$gl_cross_guess_normal";; esac ]) ]) ]) dnl Test whether the snprintf function supports the %n format directive dnl also in truncated portions of the format string. (ISO C99, POSIX:2001) dnl Result is gl_cv_func_snprintf_directive_n. AC_DEFUN([gl_SNPRINTF_DIRECTIVE_N], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf fully supports the 'n' directive], [gl_cv_func_snprintf_directive_n], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <string.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif static char fmtstring[10]; static char buf[100]; int main () { int count = -1; /* Copy the format string. Some systems (glibc with _FORTIFY_SOURCE=2) support %n in format strings in read-only memory but not in writable memory. */ strcpy (fmtstring, "%d %n"); my_snprintf (buf, 4, fmtstring, 12345, &count, 33, 44, 55); if (count != 6) return 1; return 0; }]])], [gl_cv_func_snprintf_directive_n=yes], [gl_cv_func_snprintf_directive_n=no], [ case "$host_os" in # Guess no on glibc when _FORTIFY_SOURCE >= 2. *-gnu* | gnu*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if _FORTIFY_SOURCE >= 2 error fail #endif ]])], [gl_cv_func_snprintf_directive_n="guessing yes"], [gl_cv_func_snprintf_directive_n="guessing no"]) ;; changequote(,)dnl # Guess yes on musl systems. *-musl*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_snprintf_directive_n="guessing no";; freebsd* | kfreebsd*) gl_cv_func_snprintf_directive_n="guessing yes";; midnightbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_snprintf_directive_n="guessing no";; darwin*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_snprintf_directive_n="guessing no";; solaris*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_snprintf_directive_n="guessing no";; aix*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on OSF/1 >= 5. osf[3-4]*) gl_cv_func_snprintf_directive_n="guessing no";; osf*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_snprintf_directive_n="guessing no";; netbsd*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_snprintf_directive_n="guessing yes";; # Guess no on Android. linux*-android*) gl_cv_func_snprintf_directive_n="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_snprintf_directive_n="guessing no";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_snprintf_directive_n="$gl_cross_guess_normal";; changequote([,])dnl esac ]) ]) ]) dnl Test whether the snprintf function, when passed a size = 1, writes any dnl output without bounds in this case, behaving like sprintf. This is the dnl case on Linux libc5. dnl Result is gl_cv_func_snprintf_size1. AC_DEFUN([gl_SNPRINTF_SIZE1], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_SNPRINTF_PRESENCE]) AC_CACHE_CHECK([whether snprintf respects a size of 1], [gl_cv_func_snprintf_size1], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #if HAVE_SNPRINTF # define my_snprintf snprintf #else # include <stdarg.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } #endif int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; my_snprintf (buf, 1, "%d", 12345); return buf[1] != 'E'; }]])], [gl_cv_func_snprintf_size1=yes], [gl_cv_func_snprintf_size1=no], [case "$host_os" in # Guess yes on Android. linux*-android*) gl_cv_func_snprintf_size1="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_snprintf_size1="guessing yes" ;; *) gl_cv_func_snprintf_size1="guessing yes" ;; esac ]) ]) ]) dnl Test whether the vsnprintf function, when passed a zero size, produces no dnl output. (ISO C99, POSIX:2001) dnl For example, snprintf nevertheless writes a NUL byte in this case dnl on OSF/1 5.1: dnl --------------------------------------------------------------------- dnl #include <stdio.h> dnl int main() dnl { dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; dnl snprintf (buf, 0, "%d", 12345); dnl return buf[0] != 'D'; dnl } dnl --------------------------------------------------------------------- dnl And vsnprintf writes any output without bounds in this case, behaving like dnl vsprintf, on HP-UX 11 and OSF/1 5.1: dnl --------------------------------------------------------------------- dnl #include <stdarg.h> dnl #include <stdio.h> dnl static int my_snprintf (char *buf, int size, const char *format, ...) dnl { dnl va_list args; dnl int ret; dnl va_start (args, format); dnl ret = vsnprintf (buf, size, format, args); dnl va_end (args); dnl return ret; dnl } dnl int main() dnl { dnl static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; dnl my_snprintf (buf, 0, "%d", 12345); dnl return buf[0] != 'D'; dnl } dnl --------------------------------------------------------------------- dnl Result is gl_cv_func_vsnprintf_zerosize_c99. AC_DEFUN([gl_VSNPRINTF_ZEROSIZE_C99], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether vsnprintf respects a zero size as in C99], [gl_cv_func_vsnprintf_zerosize_c99], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdarg.h> #include <stdio.h> static int my_snprintf (char *buf, int size, const char *format, ...) { va_list args; int ret; va_start (args, format); ret = vsnprintf (buf, size, format, args); va_end (args); return ret; } int main() { static char buf[8] = { 'D', 'E', 'A', 'D', 'B', 'E', 'E', 'F' }; my_snprintf (buf, 0, "%d", 12345); return buf[0] != 'D'; }]])], [gl_cv_func_vsnprintf_zerosize_c99=yes], [gl_cv_func_vsnprintf_zerosize_c99=no], [ changequote(,)dnl case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on FreeBSD >= 5. freebsd[1-4].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; freebsd* | kfreebsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; midnightbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Mac OS X >= 10.3. darwin[1-6].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; darwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Solaris >= 2.6. solaris2.[0-5] | solaris2.[0-5].*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; solaris*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on AIX >= 4. aix[1-3]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; aix*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on IRIX >= 6.5. irix6.5) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on NetBSD >= 3. netbsd[1-2]* | netbsdelf[1-2]* | netbsdaout[1-2]* | netbsdcoff[1-2]*) gl_cv_func_vsnprintf_zerosize_c99="guessing no";; netbsd*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on BeOS. beos*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on Android. linux*-android*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # Guess yes on native Windows. mingw* | pw*) gl_cv_func_vsnprintf_zerosize_c99="guessing yes";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_vsnprintf_zerosize_c99="$gl_cross_guess_normal";; esac changequote([,])dnl ]) ]) ]) dnl The results of these tests on various platforms are: dnl dnl 1 = gl_PRINTF_SIZES_C99 dnl 2 = gl_PRINTF_LONG_DOUBLE dnl 3 = gl_PRINTF_INFINITE dnl 4 = gl_PRINTF_INFINITE_LONG_DOUBLE dnl 5 = gl_PRINTF_DIRECTIVE_A dnl 6 = gl_PRINTF_DIRECTIVE_F dnl 7 = gl_PRINTF_DIRECTIVE_N dnl 8 = gl_PRINTF_DIRECTIVE_LS dnl 9 = gl_PRINTF_POSITIONS dnl 10 = gl_PRINTF_FLAG_GROUPING dnl 11 = gl_PRINTF_FLAG_LEFTADJUST dnl 12 = gl_PRINTF_FLAG_ZERO dnl 13 = gl_PRINTF_PRECISION dnl 14 = gl_PRINTF_ENOMEM dnl 15 = gl_SNPRINTF_PRESENCE dnl 16 = gl_SNPRINTF_TRUNCATION_C99 dnl 17 = gl_SNPRINTF_RETVAL_C99 dnl 18 = gl_SNPRINTF_DIRECTIVE_N dnl 19 = gl_SNPRINTF_SIZE1 dnl 20 = gl_VSNPRINTF_ZEROSIZE_C99 dnl dnl 1 = checking whether printf supports size specifiers as in C99... dnl 2 = checking whether printf supports 'long double' arguments... dnl 3 = checking whether printf supports infinite 'double' arguments... dnl 4 = checking whether printf supports infinite 'long double' arguments... dnl 5 = checking whether printf supports the 'a' and 'A' directives... dnl 6 = checking whether printf supports the 'F' directive... dnl 7 = checking whether printf supports the 'n' directive... dnl 8 = checking whether printf supports the 'ls' directive... dnl 9 = checking whether printf supports POSIX/XSI format strings with positions... dnl 10 = checking whether printf supports the grouping flag... dnl 11 = checking whether printf supports the left-adjust flag correctly... dnl 12 = checking whether printf supports the zero flag correctly... dnl 13 = checking whether printf supports large precisions... dnl 14 = checking whether printf survives out-of-memory conditions... dnl 15 = checking for snprintf... dnl 16 = checking whether snprintf truncates the result as in C99... dnl 17 = checking whether snprintf returns a byte count as in C99... dnl 18 = checking whether snprintf fully supports the 'n' directive... dnl 19 = checking whether snprintf respects a size of 1... dnl 20 = checking whether vsnprintf respects a zero size as in C99... dnl dnl . = yes, # = no. dnl dnl 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 dnl glibc 2.5 . . . . . . . . . . . . . . . . . . . . dnl glibc 2.3.6 . . . . # . . . . . . . . . . . . . . . dnl FreeBSD 13.0 . . . . # . . . . . . . . # . . . . . . dnl FreeBSD 5.4, 6.1 . . . . # . . . . . . # . # . . . . . . dnl Mac OS X 10.13.5 . . . # # . # . . . . . . . . . . # . . dnl Mac OS X 10.5.8 . . . # # . . . . . . # . . . . . . . . dnl Mac OS X 10.3.9 . . . . # . . . . . . # . # . . . . . . dnl OpenBSD 6.0, 6.7 . . . . # . . . . . . . . # . . . . . . dnl OpenBSD 3.9, 4.0 . . # # # # . # . # . # . # . . . . . . dnl Cygwin 1.7.0 (2009) . . . # . . . ? . . . . . ? . . . . . . dnl Cygwin 1.5.25 (2008) . . . # # . . # . . . . . # . . . . . . dnl Cygwin 1.5.19 (2006) # . . # # # . # . # . # # # . . . . . . dnl Solaris 11.4 . . # # # . . # . . . # . . . . . . . . dnl Solaris 11.3 . . . . # . . # . . . . . . . . . . . . dnl Solaris 11.0 . . # # # . . # . . . # . . . . . . . . dnl Solaris 10 . . # # # . . # . . . # # . . . . . . . dnl Solaris 2.6 ... 9 # . # # # # . # . . . # # . . . # . . . dnl Solaris 2.5.1 # . # # # # . # . . . # . . # # # # # # dnl AIX 7.1 . . # # # . . . . . . # # . . . . . . . dnl AIX 5.2 . . # # # . . . . . . # . . . . . . . . dnl AIX 4.3.2, 5.1 # . # # # # . . . . . # . . . . # . . . dnl HP-UX 11.31 . . . . # . . . . . . # . . . . # # . . dnl HP-UX 11.{00,11,23} # . . . # # . . . . . # . . . . # # . # dnl HP-UX 10.20 # . # . # # . ? . . # # . . . . # # ? # dnl IRIX 6.5 # . # # # # . # . . . # . . . . # . . . dnl OSF/1 5.1 # . # # # # . . . . . # . . . . # . . # dnl OSF/1 4.0d # . # # # # . . . . . # . . # # # # # # dnl NetBSD 9.0 . . . . # . . . . . . . . . . . . . . . dnl NetBSD 5.0 . . . # # . . . . . . # . # . . . . . . dnl NetBSD 4.0 . ? ? ? ? ? . ? . ? ? ? ? ? . . . ? ? ? dnl NetBSD 3.0 . . . . # # . ? # # ? # . # . . . . . . dnl Haiku . . . # # # . # . . . . . ? . . ? . . . dnl BeOS # # . # # # . ? # . ? . # ? . . ? . . . dnl Android 4.3 . . # # # # # # . # . # . # . . . # . . dnl old mingw / msvcrt # # # # # # . . # # . # # ? . # # # . . dnl MSVC 9 # # # # # # # . # # . # # ? # # # # . . dnl mingw 2009-2011 . # . # . . . . # # . . . ? . . . . . . dnl mingw-w64 2011 # # # # # # . . # # . # # ? . # # # . . �������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/secure_getenv.m4��������������������������������������������������������������������0000644�0000000�0000000�00000001524�14226564452�013540� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Look up an environment variable more securely. dnl Copyright 2013-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SECURE_GETENV], [ dnl Persuade glibc <stdlib.h> to declare secure_getenv(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([secure_getenv]) if test $ac_cv_func_secure_getenv = no; then HAVE_SECURE_GETENV=0 fi ]) # Prerequisites of lib/secure_getenv.c. AC_DEFUN([gl_PREREQ_SECURE_GETENV], [ AC_CHECK_FUNCS([__secure_getenv]) if test $ac_cv_func___secure_getenv = no; then AC_CHECK_FUNCS([issetugid]) fi AC_CHECK_FUNCS_ONCE([getuid geteuid getgid getegid]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/readdir.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000000670�14226564447�012321� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readdir.m4 serial 1 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_READDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_CHECK_FUNCS([readdir]) if test $ac_cv_func_readdir = no; then HAVE_READDIR=0 fi ]) ������������������������������������������������������������������������recutils-1.9/m4/nl_langinfo.m4����������������������������������������������������������������������0000644�0000000�0000000�00000005276�14226564452�013200� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# nl_langinfo.m4 serial 8 dnl Copyright (C) 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_NL_LANGINFO], [ AC_REQUIRE([gl_LANGINFO_H_DEFAULTS]) AC_REQUIRE([gl_LANGINFO_H]) AC_CHECK_FUNCS_ONCE([nl_langinfo]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_FUNC_SETLOCALE_NULL]) AC_REQUIRE([gl_PTHREADLIB]) AC_CHECK_HEADERS_ONCE([threads.h]) if test $ac_cv_func_nl_langinfo = yes; then # On Irix 6.5, YESEXPR is defined, but nl_langinfo(YESEXPR) is broken. AC_CACHE_CHECK([whether YESEXPR works], [gl_cv_func_nl_langinfo_yesexpr_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <langinfo.h> ]], [[return !*nl_langinfo(YESEXPR); ]])], [gl_cv_func_nl_langinfo_yesexpr_works=yes], [gl_cv_func_nl_langinfo_yesexpr_works=no], [ case "$host_os" in # Guess no on irix systems. irix*) gl_cv_func_nl_langinfo_yesexpr_works="guessing no";; # Guess yes elsewhere. *) gl_cv_func_nl_langinfo_yesexpr_works="guessing yes";; esac ]) ]) case $gl_cv_func_nl_langinfo_yesexpr_works in *yes) FUNC_NL_LANGINFO_YESEXPR_WORKS=1 ;; *) FUNC_NL_LANGINFO_YESEXPR_WORKS=0 ;; esac AC_DEFINE_UNQUOTED([FUNC_NL_LANGINFO_YESEXPR_WORKS], [$FUNC_NL_LANGINFO_YESEXPR_WORKS], [Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string.]) # On Solaris 10 and Solaris 11.3, nl_langinfo is not multithread-safe. case "$host_os" in solaris*) NL_LANGINFO_MTSAFE=0 ;; *) NL_LANGINFO_MTSAFE=1 ;; esac AC_DEFINE_UNQUOTED([NL_LANGINFO_MTSAFE], [$NL_LANGINFO_MTSAFE], [Define to 1 if nl_langinfo is multithread-safe.]) if test $HAVE_LANGINFO_CODESET = 1 \ && test $HAVE_LANGINFO_T_FMT_AMPM = 1 \ && test $HAVE_LANGINFO_ALTMON = 1 \ && test $HAVE_LANGINFO_ERA = 1 \ && test $FUNC_NL_LANGINFO_YESEXPR_WORKS = 1 \ && test $NL_LANGINFO_MTSAFE = 1; then : else REPLACE_NL_LANGINFO=1 AC_DEFINE([REPLACE_NL_LANGINFO], [1], [Define if nl_langinfo exists but is overridden by gnulib.]) fi else HAVE_NL_LANGINFO=0 fi if test $HAVE_NL_LANGINFO = 0 || test $HAVE_LANGINFO_CODESET = 0; then LIB_NL_LANGINFO="$LIB_SETLOCALE_NULL" else LIB_NL_LANGINFO= fi dnl LIB_NL_LANGINFO is expected to be empty everywhere. AC_SUBST([LIB_NL_LANGINFO]) ]) # Prerequisites of lib/nl_langinfo-lock.c. AC_DEFUN([gl_PREREQ_NL_LANGINFO_LOCK], [ gl_VISIBILITY ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/quotearg.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000000533�14226564452�012530� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# quotearg.m4 serial 10 dnl Copyright (C) 2002, 2004-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_QUOTEARG], [ AC_REQUIRE([AC_C_RESTRICT]) : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/floor.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000006540�14226564452�012026� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# floor.m4 serial 14 dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FLOOR], [ m4_divert_text([DEFAULTS], [gl_floor_required=plain]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) dnl Test whether floor() can be used without libm. gl_FUNC_FLOOR_LIBS if test "$FLOOR_LIBM" = "?"; then FLOOR_LIBM= fi m4_ifdef([gl_FUNC_FLOOR_IEEE], [ if test $gl_floor_required = ieee && test $REPLACE_FLOOR = 0; then AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether floor works according to ISO C 99 with IEC 60559], [gl_cv_func_floor_ieee], [ save_LIBS="$LIBS" LIBS="$LIBS $FLOOR_LIBM" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> ]gl_DOUBLE_MINUS_ZERO_CODE[ ]gl_DOUBLE_SIGNBIT_CODE[ static double dummy (double f) { return 0; } int main (int argc, char *argv[]) { double (* volatile my_floor) (double) = argc ? floor : dummy; /* Test whether floor (-0.0) is -0.0. */ if (signbitd (minus_zerod) && !signbitd (my_floor (minus_zerod))) return 1; return 0; } ]])], [gl_cv_func_floor_ieee=yes], [gl_cv_func_floor_ieee=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_floor_ieee="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_floor_ieee="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_floor_ieee="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_floor_ieee="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_func_floor_ieee" in *yes) ;; *) REPLACE_FLOOR=1 ;; esac fi ]) if test $REPLACE_FLOOR = 1; then dnl No libraries are needed to link lib/floor.c. FLOOR_LIBM= fi AC_SUBST([FLOOR_LIBM]) ]) # Determines the libraries needed to get the floor() function. # Sets FLOOR_LIBM. AC_DEFUN([gl_FUNC_FLOOR_LIBS], [ gl_CACHE_VAL_SILENT([gl_cv_func_floor_libm], [ gl_cv_func_floor_libm=? AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double) = floor; double x;]], [[x = funcptr(x) + floor(x);]])], [gl_cv_func_floor_libm=]) if test "$gl_cv_func_floor_libm" = "?"; then save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __NO_MATH_INLINES # define __NO_MATH_INLINES 1 /* for glibc */ #endif #include <math.h> double (*funcptr) (double) = floor; double x;]], [[x = funcptr(x) + floor(x);]])], [gl_cv_func_floor_libm="-lm"]) LIBS="$save_LIBS" fi ]) FLOOR_LIBM="$gl_cv_func_floor_libm" ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/safe-write.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000000611�14226564452�012744� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# safe-write.m4 serial 4 dnl Copyright (C) 2002, 2005-2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites of lib/safe-write.c. AC_DEFUN([gl_PREREQ_SAFE_WRITE], [ gl_PREREQ_SAFE_READ ]) �����������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/bison.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000007120�14226564451�012011� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 10 # Copyright (C) 2002-2006, 2008-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # There are two types of parser skeletons: # # * Those that can be used with any Yacc implementation, including bison. # For these, in the configure.ac, up to Autoconf 2.69, you could use # AC_PROG_YACC # In newer Autoconf versions, however, this macro is broken. See # https://lists.gnu.org/archive/html/autoconf-patches/2013-03/msg00000.html # https://lists.gnu.org/archive/html/bug-autoconf/2018-12/msg00001.html # In the Makefile.am you could use # $(SHELL) $(YLWRAP) $(srcdir)/foo.y \ # y.tab.c foo.c \ # y.tab.h foo.h \ # y.output foo.output \ # -- $(YACC) $(YFLAGS) $(AM_YFLAGS) # or similar. # # * Those that make use of Bison extensions. For example, # - %define api.pure requires bison 2.7 or newer, # - %precedence requires bison 3.0 or newer. # For these, in the configure.ac you will need an invocation of # gl_PROG_BISON([VARIABLE], [MIN_BISON_VERSION]) # Example: # gl_PROG_BISON([PARSE_DATETIME_BISON], [2.4]) # With this preparation, in the Makefile.am there are two ways to formulate # the invocation. Both are direct, without use of 'ylwrap'. # (a) You can invoke # $(VARIABLE) -d $(SOME_BISON_OPTIONS) --output foo.c $(srcdir)/foo.y # or similar. # (b) If you want the invocation to honor an YFLAGS=... parameter passed to # 'configure' or an YFLAGS environment variable present at 'configure' # time, add an invocation of gl_BISON to the configure.ac, and write # $(VARIABLE) -d $(YFLAGS) $(AM_YFLAGS) $(srcdir)/foo.y # or similar. # This macro defines the autoconf variable VARIABLE to 'bison' if the specified # minimum version of bison is found in $PATH, or to ':' otherwise. AC_DEFUN([gl_PROG_BISON], [ AC_CHECK_PROGS([$1], [bison]) if test -z "$[$1]"; then ac_verc_fail=yes else cat >conftest.y <<_ACEOF %require "$2" %% exp: _ACEOF AC_MSG_CHECKING([for bison $2 or newer]) ac_prog_version=`$$1 --version 2>&1 | sed -n 's/^.*GNU Bison.* \([[0-9]]*\.[[0-9.]]*\).*$/\1/p'` : ${ac_prog_version:='v. ?.??'} if $$1 conftest.y -o conftest.c 2>/dev/null; then ac_prog_version="$ac_prog_version, ok" ac_verc_fail=no else ac_prog_version="$ac_prog_version, bad" ac_verc_fail=yes fi rm -f conftest.y conftest.c AC_MSG_RESULT([$ac_prog_version]) fi if test $ac_verc_fail = yes; then [$1]=: fi AC_SUBST([$1]) ]) # This macro sets the autoconf variables YACC (for old-style yacc Makefile # rules) and YFLAGS (to allow options to be passed as 'configure' time). AC_DEFUN([gl_BISON], [ : ${YACC='bison -o y.tab.c'} dnl dnl Declaring YACC & YFLAGS precious will not be necessary after GNULIB dnl requires an Autoconf greater than 2.59c, but it will probably still be dnl useful to override the description of YACC in the --help output, re dnl parse-datetime.y assuming 'bison -o y.tab.c'. AC_ARG_VAR([YACC], [The "Yet Another C Compiler" implementation to use. Defaults to 'bison -o y.tab.c'. Values other than 'bison -o y.tab.c' will most likely break on most systems.])dnl AC_ARG_VAR([YFLAGS], [YFLAGS contains the list arguments that will be passed by default to Bison. This script will default YFLAGS to the empty string to avoid a default value of '-d' given by some make applications.])dnl ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/pthread_rwlock_rdlock.m4������������������������������������������������������������0000644�0000000�0000000�00000015463�14226564452�015257� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pthread_rwlock_rdlock.m4 serial 4 dnl Copyright (C) 2017-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Inspired by dnl https://github.com/linux-test-project/ltp/blob/master/testcases/open_posix_testsuite/conformance/interfaces/pthread_rwlock_rdlock/2-2.c dnl by Intel Corporation. dnl Test whether in a situation where dnl - an rwlock is taken by a reader and has a writer waiting, dnl - an additional reader requests the lock, dnl - the waiting writer and the requesting reader threads have the same dnl priority, dnl the requesting reader thread gets blocked, so that at some point the dnl waiting writer can acquire the lock. dnl Without such a guarantee, when there a N readers and each of the readers dnl spends more than 1/Nth of the time with the lock held, there is a high dnl probability that the waiting writer will not get the lock in a given finite dnl time, a phenomenon called "writer starvation". dnl Without such a guarantee, applications have a hard time avoiding writer dnl starvation. dnl dnl POSIX:2017 makes this requirement only for implementations that support TPS dnl (Thread Priority Scheduling) and only for the scheduling policies SCHED_FIFO dnl and SCHED_RR, see dnl https://pubs.opengroup.org/onlinepubs/9699919799/functions/pthread_rwlock_rdlock.html dnl but this test verifies the guarantee regardless of TPS and regardless of dnl scheduling policy. dnl Glibc does not provide this guarantee (and never will on Linux), see dnl https://sourceware.org/bugzilla/show_bug.cgi?id=13701 dnl https://bugzilla.redhat.com/show_bug.cgi?id=1410052 AC_DEFUN([gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [ AC_REQUIRE([gl_THREADLIB_EARLY]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether pthread_rwlock_rdlock prefers a writer to a reader], [gl_cv_pthread_rwlock_rdlock_prefer_writer], [save_LIBS="$LIBS" LIBS="$LIBS $LIBMULTITHREAD" AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <errno.h> #include <pthread.h> #include <stdlib.h> #include <unistd.h> #define SUCCEED() exit (0) #define FAILURE() exit (1) #define UNEXPECTED(n) (exit (10 + (n))) /* The main thread creates the waiting writer and the requesting reader threads in the default way; this guarantees that they have the same priority. We can reuse the main thread as first reader thread. */ static pthread_rwlock_t lock; static pthread_t reader1; static pthread_t writer; static pthread_t reader2; static pthread_t timer; /* Used to pass control from writer to reader2 and from reader2 to timer, as in a relay race. Passing control from one running thread to another running thread is most likely faster than to create the second thread. */ static pthread_mutex_t baton; static void * timer_func (void *ignored) { /* Step 13 (can be before or after step 12): The timer thread takes the baton, then waits a moment to make sure it can tell whether the second reader thread is blocked at step 12. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (13); usleep (100000); /* By the time we get here, it's clear that the second reader thread is blocked at step 12. This is the desired behaviour. */ SUCCEED (); } static void * reader2_func (void *ignored) { int err; /* Step 8 (can be before or after step 7): The second reader thread takes the baton, then waits a moment to make sure the writer thread has reached step 7. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (8); usleep (100000); /* Step 9: The second reader thread requests the lock. */ err = pthread_rwlock_tryrdlock (&lock); if (err == 0) FAILURE (); else if (err != EBUSY) UNEXPECTED (9); /* Step 10: Launch a timer, to test whether the next call blocks. */ if (pthread_create (&timer, NULL, timer_func, NULL)) UNEXPECTED (10); /* Step 11: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (11); /* Step 12: The second reader thread requests the lock. */ err = pthread_rwlock_rdlock (&lock); if (err == 0) FAILURE (); else UNEXPECTED (12); } static void * writer_func (void *ignored) { /* Step 4: Take the baton, so that the second reader thread does not go ahead too early. */ if (pthread_mutex_lock (&baton)) UNEXPECTED (4); /* Step 5: Create the second reader thread. */ if (pthread_create (&reader2, NULL, reader2_func, NULL)) UNEXPECTED (5); /* Step 6: Release the baton. */ if (pthread_mutex_unlock (&baton)) UNEXPECTED (6); /* Step 7: The writer thread requests the lock. */ if (pthread_rwlock_wrlock (&lock)) UNEXPECTED (7); return NULL; } int main () { reader1 = pthread_self (); /* Step 1: The main thread initializes the lock and the baton. */ if (pthread_rwlock_init (&lock, NULL)) UNEXPECTED (1); if (pthread_mutex_init (&baton, NULL)) UNEXPECTED (1); /* Step 2: The main thread acquires the lock as a reader. */ if (pthread_rwlock_rdlock (&lock)) UNEXPECTED (2); /* Step 3: Create the writer thread. */ if (pthread_create (&writer, NULL, writer_func, NULL)) UNEXPECTED (3); /* Job done. Go to sleep. */ for (;;) { sleep (1); } } ]])], [gl_cv_pthread_rwlock_rdlock_prefer_writer=yes], [gl_cv_pthread_rwlock_rdlock_prefer_writer=no], [case "$host_os" in # Guess no on glibc systems. *-gnu* | gnu*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on musl systems. *-musl*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess no on bionic systems. *-android*) gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" ;; # Guess yes on native Windows with the mingw-w64 winpthreads library. # Guess no on native Windows with the gnulib windows-rwlock module. mingw*) if test "$gl_use_threads" = yes || test "$gl_use_threads" = posix; then gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing yes" else gl_cv_pthread_rwlock_rdlock_prefer_writer="guessing no" fi ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_pthread_rwlock_rdlock_prefer_writer="$gl_cross_guess_normal" ;; esac ]) LIBS="$save_LIBS" ]) case "$gl_cv_pthread_rwlock_rdlock_prefer_writer" in *yes) AC_DEFINE([HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER], [1], [Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/lib-link.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000105607�14226564452�012412� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-link.m4 serial 32 dnl Copyright (C) 2001-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.61]) dnl AC_LIB_LINKFLAGS(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets and AC_SUBSTs the LIB${NAME} and LTLIB${NAME} variables and dnl augments the CPPFLAGS variable. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) AC_CACHE_CHECK([how to link with lib[]$1], [ac_cv_lib[]Name[]_libs], [ AC_LIB_LINKFLAGS_BODY([$1], [$2]) ac_cv_lib[]Name[]_libs="$LIB[]NAME" ac_cv_lib[]Name[]_ltlibs="$LTLIB[]NAME" ac_cv_lib[]Name[]_cppflags="$INC[]NAME" ac_cv_lib[]Name[]_prefix="$LIB[]NAME[]_PREFIX" ]) LIB[]NAME="$ac_cv_lib[]Name[]_libs" LTLIB[]NAME="$ac_cv_lib[]Name[]_ltlibs" INC[]NAME="$ac_cv_lib[]Name[]_cppflags" LIB[]NAME[]_PREFIX="$ac_cv_lib[]Name[]_prefix" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) dnl Also set HAVE_LIB[]NAME so that AC_LIB_HAVE_LINKFLAGS can reuse the dnl results of this search when this library appears as a dependency. HAVE_LIB[]NAME=yes popdef([NAME]) popdef([Name]) ]) dnl AC_LIB_HAVE_LINKFLAGS(name, dependencies, includes, testcode, [missing-message]) dnl searches for libname and the libraries corresponding to explicit and dnl implicit dependencies, together with the specified include files and dnl the ability to compile and link the specified testcode. The missing-message dnl defaults to 'no' and may contain additional hints for the user. dnl If found, it sets and AC_SUBSTs HAVE_LIB${NAME}=yes and the LIB${NAME} dnl and LTLIB${NAME} variables and augments the CPPFLAGS variable, and dnl #defines HAVE_LIB${NAME} to 1. Otherwise, it sets and AC_SUBSTs dnl HAVE_LIB${NAME}=no and LIB${NAME} and LTLIB${NAME} to empty. dnl Sets and AC_SUBSTs the LIB${NAME}_PREFIX variable to nonempty if libname dnl was found in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_HAVE_LINKFLAGS], [ AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) pushdef([Name],[m4_translit([$1],[./+-], [____])]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) dnl Search for lib[]Name and define LIB[]NAME, LTLIB[]NAME and INC[]NAME dnl accordingly. AC_LIB_LINKFLAGS_BODY([$1], [$2]) dnl Add $INC[]NAME to CPPFLAGS before performing the following checks, dnl because if the user has installed lib[]Name and not disabled its use dnl via --without-lib[]Name-prefix, he wants to use it. ac_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INC]NAME) AC_CACHE_CHECK([for lib[]$1], [ac_cv_lib[]Name], [ ac_save_LIBS="$LIBS" dnl If $LIB[]NAME contains some -l options, add it to the end of LIBS, dnl because these -l options might require -L options that are present in dnl LIBS. -l options benefit only from the -L options listed before it. dnl Otherwise, add it to the front of LIBS, because it may be a static dnl library that depends on another static library that is present in LIBS. dnl Static libraries benefit only from the static libraries listed after dnl it. case " $LIB[]NAME" in *" -l"*) LIBS="$LIBS $LIB[]NAME" ;; *) LIBS="$LIB[]NAME $LIBS" ;; esac AC_LINK_IFELSE( [AC_LANG_PROGRAM([[$3]], [[$4]])], [ac_cv_lib[]Name=yes], [ac_cv_lib[]Name='m4_if([$5], [], [no], [[$5]])']) LIBS="$ac_save_LIBS" ]) if test "$ac_cv_lib[]Name" = yes; then HAVE_LIB[]NAME=yes AC_DEFINE([HAVE_LIB]NAME, 1, [Define if you have the lib][$1 library.]) AC_MSG_CHECKING([how to link with lib[]$1]) AC_MSG_RESULT([$LIB[]NAME]) else HAVE_LIB[]NAME=no dnl If $LIB[]NAME didn't lead to a usable library, we don't need dnl $INC[]NAME either. CPPFLAGS="$ac_save_CPPFLAGS" LIB[]NAME= LTLIB[]NAME= LIB[]NAME[]_PREFIX= fi AC_SUBST([HAVE_LIB]NAME) AC_SUBST([LIB]NAME) AC_SUBST([LTLIB]NAME) AC_SUBST([LIB]NAME[_PREFIX]) popdef([NAME]) popdef([Name]) ]) dnl Determine the platform dependent parameters needed to use rpath: dnl acl_libext, dnl acl_shlibext, dnl acl_libname_spec, dnl acl_library_names_spec, dnl acl_hardcode_libdir_flag_spec, dnl acl_hardcode_libdir_separator, dnl acl_hardcode_direct, dnl acl_hardcode_minus_L. AC_DEFUN([AC_LIB_RPATH], [ dnl Complain if config.rpath is missing. AC_REQUIRE_AUX_FILE([config.rpath]) AC_REQUIRE([AC_PROG_CC]) dnl we use $CC, $GCC, $LDFLAGS AC_REQUIRE([AC_LIB_PROG_LD]) dnl we use $LD, $with_gnu_ld AC_REQUIRE([AC_CANONICAL_HOST]) dnl we use $host AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT]) dnl we use $ac_aux_dir AC_CACHE_CHECK([for shared library run path origin], [acl_cv_rpath], [ CC="$CC" GCC="$GCC" LDFLAGS="$LDFLAGS" LD="$LD" with_gnu_ld="$with_gnu_ld" \ ${CONFIG_SHELL-/bin/sh} "$ac_aux_dir/config.rpath" "$host" > conftest.sh . ./conftest.sh rm -f ./conftest.sh acl_cv_rpath=done ]) wl="$acl_cv_wl" acl_libext="$acl_cv_libext" acl_shlibext="$acl_cv_shlibext" acl_libname_spec="$acl_cv_libname_spec" acl_library_names_spec="$acl_cv_library_names_spec" acl_hardcode_libdir_flag_spec="$acl_cv_hardcode_libdir_flag_spec" acl_hardcode_libdir_separator="$acl_cv_hardcode_libdir_separator" acl_hardcode_direct="$acl_cv_hardcode_direct" acl_hardcode_minus_L="$acl_cv_hardcode_minus_L" dnl Determine whether the user wants rpath handling at all. AC_ARG_ENABLE([rpath], [ --disable-rpath do not hardcode runtime library paths], :, enable_rpath=yes) ]) dnl AC_LIB_FROMPACKAGE(name, package) dnl declares that libname comes from the given package. The configure file dnl will then not have a --with-libname-prefix option but a dnl --with-package-prefix option. Several libraries can come from the same dnl package. This declaration must occur before an AC_LIB_LINKFLAGS or similar dnl macro call that searches for libname. AC_DEFUN([AC_LIB_FROMPACKAGE], [ pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_frompackage_]NAME, [$2]) popdef([NAME]) pushdef([PACK],[$2]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) define([acl_libsinpackage_]PACKUP, m4_ifdef([acl_libsinpackage_]PACKUP, [m4_defn([acl_libsinpackage_]PACKUP)[, ]],)[lib$1]) popdef([PACKUP]) popdef([PACK]) ]) dnl AC_LIB_LINKFLAGS_BODY(name [, dependencies]) searches for libname and dnl the libraries corresponding to explicit and implicit dependencies. dnl Sets the LIB${NAME}, LTLIB${NAME} and INC${NAME} variables. dnl Also, sets the LIB${NAME}_PREFIX variable to nonempty if libname was found dnl in ${LIB${NAME}_PREFIX}/$acl_libdirstem. AC_DEFUN([AC_LIB_LINKFLAGS_BODY], [ AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) pushdef([NAME],[m4_translit([$1],[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACK],[m4_ifdef([acl_frompackage_]NAME, [acl_frompackage_]NAME, lib[$1])]) pushdef([PACKUP],[m4_translit(PACK,[abcdefghijklmnopqrstuvwxyz./+-], [ABCDEFGHIJKLMNOPQRSTUVWXYZ____])]) pushdef([PACKLIBS],[m4_ifdef([acl_frompackage_]NAME, [acl_libsinpackage_]PACKUP, lib[$1])]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) AC_ARG_WITH(PACK[-prefix], [[ --with-]]PACK[[-prefix[=DIR] search for ]PACKLIBS[ in DIR/include and DIR/lib --without-]]PACK[[-prefix don't search for ]PACKLIBS[ in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" eval additional_libdir2=\"$exec_prefix/$acl_libdirstem2\" eval additional_libdir3=\"$exec_prefix/$acl_libdirstem3\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" additional_libdir2="$withval/$acl_libdirstem2" additional_libdir3="$withval/$acl_libdirstem3" fi fi ]) if test "X$additional_libdir2" = "X$additional_libdir"; then additional_libdir2= fi if test "X$additional_libdir3" = "X$additional_libdir"; then additional_libdir3= fi dnl Search the library and its dependencies in $additional_libdir and dnl $LDFLAGS. Using breadth-first-seach. LIB[]NAME= LTLIB[]NAME= INC[]NAME= LIB[]NAME[]_PREFIX= dnl HAVE_LIB${NAME} is an indicator that LIB${NAME}, LTLIB${NAME} have been dnl computed. So it has to be reset here. HAVE_LIB[]NAME= rpathdirs= ltrpathdirs= names_already_handled= names_next_round='$1 $2' while test -n "$names_next_round"; do names_this_round="$names_next_round" names_next_round= for name in $names_this_round; do already_handled= for n in $names_already_handled; do if test "$n" = "$name"; then already_handled=yes break fi done if test -z "$already_handled"; then names_already_handled="$names_already_handled $name" dnl See if it was already located by an earlier AC_LIB_LINKFLAGS dnl or AC_LIB_HAVE_LINKFLAGS call. uppername=`echo "$name" | sed -e 'y|abcdefghijklmnopqrstuvwxyz./+-|ABCDEFGHIJKLMNOPQRSTUVWXYZ____|'` eval value=\"\$HAVE_LIB$uppername\" if test -n "$value"; then if test "$value" = yes; then eval value=\"\$LIB$uppername\" test -z "$value" || LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$value" eval value=\"\$LTLIB$uppername\" test -z "$value" || LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$value" else dnl An earlier call to AC_LIB_HAVE_LINKFLAGS has determined dnl that this library doesn't exist. So just drop it. : fi else dnl Search the library lib$name in $additional_libdir and $LDFLAGS dnl and the already constructed $LIBNAME/$LTLIBNAME. found_dir= found_la= found_so= found_a= eval libname=\"$acl_libname_spec\" # typically: libname=lib$name if test -n "$acl_shlibext"; then shrext=".$acl_shlibext" # typically: shrext=.so else shrext= fi if test $use_additional = yes; then for additional_libdir_variable in additional_libdir additional_libdir2 additional_libdir3; do if test "X$found_dir" = "X"; then eval dir=\$$additional_libdir_variable if test -n "$dir"; then dnl The same code as in the loop below: dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi fi fi done fi if test "X$found_dir" = "X"; then for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) case "$x" in -L*) dir=`echo "X$x" | sed -e 's/^X-L//'` dnl First look for a shared library. if test -n "$acl_shlibext"; then if test -f "$dir/$libname$shrext" && acl_is_expected_elfclass < "$dir/$libname$shrext"; then found_dir="$dir" found_so="$dir/$libname$shrext" else if test "$acl_library_names_spec" = '$libname$shrext$versuffix'; then ver=`(cd "$dir" && \ for f in "$libname$shrext".*; do echo "$f"; done \ | sed -e "s,^$libname$shrext\\\\.,," \ | sort -t '.' -n -r -k1,1 -k2,2 -k3,3 -k4,4 -k5,5 \ | sed 1q ) 2>/dev/null` if test -n "$ver" && test -f "$dir/$libname$shrext.$ver" && acl_is_expected_elfclass < "$dir/$libname$shrext.$ver"; then found_dir="$dir" found_so="$dir/$libname$shrext.$ver" fi else eval library_names=\"$acl_library_names_spec\" for f in $library_names; do if test -f "$dir/$f" && acl_is_expected_elfclass < "$dir/$f"; then found_dir="$dir" found_so="$dir/$f" break fi done fi fi fi dnl Then look for a static library. if test "X$found_dir" = "X"; then if test -f "$dir/$libname.$acl_libext" && ${AR-ar} -p "$dir/$libname.$acl_libext" | acl_is_expected_elfclass; then found_dir="$dir" found_a="$dir/$libname.$acl_libext" fi fi if test "X$found_dir" != "X"; then if test -f "$dir/$libname.la"; then found_la="$dir/$libname.la" fi fi ;; esac if test "X$found_dir" != "X"; then break fi done fi if test "X$found_dir" != "X"; then dnl Found the library. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$found_dir -l$name" if test "X$found_so" != "X"; then dnl Linking with a shared library. We attempt to hardcode its dnl directory into the executable's runpath, unless it's the dnl standard /usr/lib. if test "$enable_rpath" = no \ || test "X$found_dir" = "X/usr/$acl_libdirstem" \ || test "X$found_dir" = "X/usr/$acl_libdirstem2" \ || test "X$found_dir" = "X/usr/$acl_libdirstem3"; then dnl No hardcoding is needed. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl Use an explicit option to hardcode DIR into the resulting dnl binary. dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $found_dir" fi dnl The hardcoding into $LIBNAME is system dependent. if test "$acl_hardcode_direct" = yes; then dnl Using DIR/libNAME.so during linking hardcodes DIR into the dnl resulting binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode DIR into the resulting dnl binary. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $found_dir" fi else dnl Rely on "-L$found_dir". dnl But don't add it if it's already contained in the LDFLAGS dnl or the already constructed $LIBNAME haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$found_dir"; then haveit=yes break fi done if test -z "$haveit"; then LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir" fi if test "$acl_hardcode_minus_L" != no; then dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_so" else dnl We cannot use $acl_hardcode_runpath_var and LD_RUN_PATH dnl here, because this doesn't fit in flags passed to the dnl compiler. So give up. No hardcoding. This affects only dnl very old systems. dnl FIXME: Not sure whether we should use dnl "-L$found_dir -l$name" or "-L$found_dir $found_so" dnl here. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" fi fi fi fi else if test "X$found_a" != "X"; then dnl Linking with a static library. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$found_a" else dnl We shouldn't come here, but anyway it's good to have a dnl fallback. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$found_dir -l$name" fi fi dnl Assume the include files are nearby. additional_includedir= case "$found_dir" in */$acl_libdirstem | */$acl_libdirstem/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem2 | */$acl_libdirstem2/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem2/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; */$acl_libdirstem3 | */$acl_libdirstem3/) basedir=`echo "X$found_dir" | sed -e 's,^X,,' -e "s,/$acl_libdirstem3/"'*$,,'` if test "$name" = '$1'; then LIB[]NAME[]_PREFIX="$basedir" fi additional_includedir="$basedir/include" ;; esac if test "X$additional_includedir" != "X"; then dnl Potentially add $additional_includedir to $INCNAME. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's /usr/local/include and we are using GCC on Linux, dnl 3. if it's already present in $CPPFLAGS or the already dnl constructed $INCNAME, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then for x in $CPPFLAGS $INC[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $INCNAME. INC[]NAME="${INC[]NAME}${INC[]NAME:+ }-I$additional_includedir" fi fi fi fi fi dnl Look for dependencies. if test -n "$found_la"; then dnl Read the .la file. It defines the variables dnl dlname, library_names, old_library, dependency_libs, current, dnl age, revision, installed, dlopen, dlpreopen, libdir. save_libdir="$libdir" case "$found_la" in */* | *\\*) . "$found_la" ;; *) . "./$found_la" ;; esac libdir="$save_libdir" dnl We use only dependency_libs. for dep in $dependency_libs; do case "$dep" in -L*) dependency_libdir=`echo "X$dep" | sed -e 's/^X-L//'` dnl Potentially add $dependency_libdir to $LIBNAME and $LTLIBNAME. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's /usr/local/lib and we are using GCC on Linux, dnl 3. if it's already present in $LDFLAGS or the already dnl constructed $LIBNAME, dnl 4. if it doesn't exist as a directory. if test "X$dependency_libdir" != "X/usr/$acl_libdirstem" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem2" \ && test "X$dependency_libdir" != "X/usr/$acl_libdirstem3"; then haveit= if test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem2" \ || test "X$dependency_libdir" = "X/usr/local/$acl_libdirstem3"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then haveit= for x in $LDFLAGS $LIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then dnl Really add $dependency_libdir to $LIBNAME. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-L$dependency_libdir" fi fi haveit= for x in $LDFLAGS $LTLIB[]NAME; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$dependency_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test -d "$dependency_libdir"; then dnl Really add $dependency_libdir to $LTLIBNAME. LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-L$dependency_libdir" fi fi fi fi ;; -R*) dir=`echo "X$dep" | sed -e 's/^X-R//'` if test "$enable_rpath" != no; then dnl Potentially add DIR to rpathdirs. dnl The rpathdirs will be appended to $LIBNAME at the end. haveit= for x in $rpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then rpathdirs="$rpathdirs $dir" fi dnl Potentially add DIR to ltrpathdirs. dnl The ltrpathdirs will be appended to $LTLIBNAME at the end. haveit= for x in $ltrpathdirs; do if test "X$x" = "X$dir"; then haveit=yes break fi done if test -z "$haveit"; then ltrpathdirs="$ltrpathdirs $dir" fi fi ;; -l*) dnl Handle this in the next round. dnl But on GNU systems, ignore -lc options, because dnl - linking with libc is the default anyway, dnl - linking with libc.a may produce an error dnl "/usr/bin/ld: dynamic STT_GNU_IFUNC symbol `strcmp' with pointer equality in `/usr/lib/libc.a(strcmp.o)' can not be used when making an executable; recompile with -fPIE and relink with -pie" dnl or may produce an executable that always crashes, see dnl <https://lists.gnu.org/archive/html/grep-devel/2020-09/msg00052.html>. dep=`echo "X$dep" | sed -e 's/^X-l//'` if test "X$dep" != Xc \ || case $host_os in linux* | gnu* | k*bsd*-gnu) false ;; *) true ;; esac; then names_next_round="$names_next_round $dep" fi ;; *.la) dnl Handle this in the next round. Throw away the .la's dnl directory; it is already contained in a preceding -L dnl option. names_next_round="$names_next_round "`echo "X$dep" | sed -e 's,^X.*/,,' -e 's,^lib,,' -e 's,\.la$,,'` ;; *) dnl Most likely an immediate library name. LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$dep" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }$dep" ;; esac done fi else dnl Didn't find the library; assume it is in the system directories dnl known to the linker and runtime loader. (All the system dnl directories known to the linker should also be known to the dnl runtime loader, otherwise the system is severely misconfigured.) LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }-l$name" LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-l$name" fi fi fi done done if test "X$rpathdirs" != "X"; then if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user must dnl pass all path elements in one option. We can arrange that for a dnl single library, but not when more than one $LIBNAMEs are used. alldirs= for found_dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$found_dir" done dnl Note: acl_hardcode_libdir_flag_spec uses $libdir and $wl. acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" else dnl The -rpath options are cumulative. for found_dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$found_dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" LIB[]NAME="${LIB[]NAME}${LIB[]NAME:+ }$flag" done fi fi if test "X$ltrpathdirs" != "X"; then dnl When using libtool, the option that works for both libraries and dnl executables is -R. The -R options are cumulative. for found_dir in $ltrpathdirs; do LTLIB[]NAME="${LTLIB[]NAME}${LTLIB[]NAME:+ }-R$found_dir" done fi popdef([PACKLIBS]) popdef([PACKUP]) popdef([PACK]) popdef([NAME]) ]) dnl AC_LIB_APPENDTOVAR(VAR, CONTENTS) appends the elements of CONTENTS to VAR, dnl unless already present in VAR. dnl Works only for CPPFLAGS, not for LIB* variables because that sometimes dnl contains two or three consecutive elements that belong together. AC_DEFUN([AC_LIB_APPENDTOVAR], [ for element in [$2]; do haveit= for x in $[$1]; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X$element"; then haveit=yes break fi done if test -z "$haveit"; then [$1]="${[$1]}${[$1]:+ }$element" fi done ]) dnl For those cases where a variable contains several -L and -l options dnl referring to unknown libraries and directories, this macro determines the dnl necessary additional linker options for the runtime path. dnl AC_LIB_LINKFLAGS_FROM_LIBS([LDADDVAR], [LIBSVALUE], [USE-LIBTOOL]) dnl sets LDADDVAR to linker options needed together with LIBSVALUE. dnl If USE-LIBTOOL evaluates to non-empty, linking with libtool is assumed, dnl otherwise linking without libtool is assumed. AC_DEFUN([AC_LIB_LINKFLAGS_FROM_LIBS], [ AC_REQUIRE([AC_LIB_RPATH]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) $1= if test "$enable_rpath" != no; then if test -n "$acl_hardcode_libdir_flag_spec" && test "$acl_hardcode_minus_L" = no; then dnl Use an explicit option to hardcode directories into the resulting dnl binary. rpathdirs= next= for opt in $2; do if test -n "$next"; then dir="$next" dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2" \ && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= else case $opt in -L) next=yes ;; -L*) dir=`echo "X$opt" | sed -e 's,^X-L,,'` dnl No need to hardcode the standard /usr/lib. if test "X$dir" != "X/usr/$acl_libdirstem" \ && test "X$dir" != "X/usr/$acl_libdirstem2" \ && test "X$dir" != "X/usr/$acl_libdirstem3"; then rpathdirs="$rpathdirs $dir" fi next= ;; *) next= ;; esac fi done if test "X$rpathdirs" != "X"; then if test -n ""$3""; then dnl libtool is used for linking. Use -R options. for dir in $rpathdirs; do $1="${$1}${$1:+ }-R$dir" done else dnl The linker is used for linking directly. if test -n "$acl_hardcode_libdir_separator"; then dnl Weird platform: only the last -rpath option counts, the user dnl must pass all path elements in one option. alldirs= for dir in $rpathdirs; do alldirs="${alldirs}${alldirs:+$acl_hardcode_libdir_separator}$dir" done acl_save_libdir="$libdir" libdir="$alldirs" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="$flag" else dnl The -rpath options are cumulative. for dir in $rpathdirs; do acl_save_libdir="$libdir" libdir="$dir" eval flag=\"$acl_hardcode_libdir_flag_spec\" libdir="$acl_save_libdir" $1="${$1}${$1:+ }$flag" done fi fi fi fi fi AC_SUBST([$1]) ]) �������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/builtin-expect.m4�������������������������������������������������������������������0000644�0000000�0000000�00000003023�14226564451�013631� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Check for __builtin_expect. dnl Copyright 2016-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl___BUILTIN_EXPECT], [ AC_CACHE_CHECK([for __builtin_expect], [gl_cv___builtin_expect], [AC_LINK_IFELSE( [AC_LANG_SOURCE([[ int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; }]])], [gl_cv___builtin_expect=yes], [AC_LINK_IFELSE( [AC_LANG_SOURCE([[ #include <builtins.h> int main (int argc, char **argv) { argc = __builtin_expect (argc, 100); return argv[argc != 100][0]; }]])], [gl_cv___builtin_expect="in <builtins.h>"], [gl_cv___builtin_expect=no])])]) if test "$gl_cv___builtin_expect" = yes; then AC_DEFINE([HAVE___BUILTIN_EXPECT], [1]) elif test "$gl_cv___builtin_expect" = "in <builtins.h>"; then AC_DEFINE([HAVE___BUILTIN_EXPECT], [2]) fi AH_VERBATIM([HAVE___BUILTIN_EXPECT], [/* Define to 1 if the compiler supports __builtin_expect, and to 2 if <builtins.h> does. */ #undef HAVE___BUILTIN_EXPECT #ifndef HAVE___BUILTIN_EXPECT # define __builtin_expect(e, c) (e) #elif HAVE___BUILTIN_EXPECT == 2 # include <builtins.h> #endif ]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/isnanl.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000016540�14226564452�012172� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# isnanl.m4 serial 22 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ISNANL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) ISNANL_LIBM= gl_HAVE_ISNANL_NO_LIBM if test $gl_cv_func_isnanl_no_libm = no; then gl_HAVE_ISNANL_IN_LIBM if test $gl_cv_func_isnanl_in_libm = yes; then ISNANL_LIBM=-lm fi fi dnl The variable gl_func_isnanl set here is used by isnan.m4. if test $gl_cv_func_isnanl_no_libm = yes \ || test $gl_cv_func_isnanl_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $ISNANL_LIBM" gl_FUNC_ISNANL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_isnanl_works" in *yes) gl_func_isnanl=yes ;; *) gl_func_isnanl=no; ISNANL_LIBM= ;; esac else gl_func_isnanl=no fi if test $gl_func_isnanl != yes; then HAVE_ISNANL=0 fi AC_SUBST([ISNANL_LIBM]) ]) AC_DEFUN([gl_FUNC_ISNANL_NO_LIBM], [ gl_HAVE_ISNANL_NO_LIBM gl_func_isnanl_no_libm=$gl_cv_func_isnanl_no_libm if test $gl_func_isnanl_no_libm = yes; then gl_FUNC_ISNANL_WORKS case "$gl_cv_func_isnanl_works" in *yes) ;; *) gl_func_isnanl_no_libm=no ;; esac fi if test $gl_func_isnanl_no_libm = yes; then AC_DEFINE([HAVE_ISNANL_IN_LIBC], [1], [Define if the isnan(long double) function is available in libc.]) fi ]) dnl Prerequisites of replacement isnanl definition. It does not need -lm. AC_DEFUN([gl_PREREQ_ISNANL], [ gl_LONG_DOUBLE_EXPONENT_LOCATION AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) ]) dnl Test whether isnanl() can be used without libm. AC_DEFUN([gl_HAVE_ISNANL_NO_LIBM], [ AC_CACHE_CHECK([whether isnan(long double) can be used without linking with libm], [gl_cv_func_isnanl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif long double x;]], [[return isnanl (x);]])], [gl_cv_func_isnanl_no_libm=yes], [gl_cv_func_isnanl_no_libm=no]) ]) ]) dnl Test whether isnanl() can be used with libm. AC_DEFUN([gl_HAVE_ISNANL_IN_LIBM], [ AC_CACHE_CHECK([whether isnan(long double) can be used with libm], [gl_cv_func_isnanl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif long double x;]], [[return isnanl (x);]])], [gl_cv_func_isnanl_in_libm=yes], [gl_cv_func_isnanl_in_libm=no]) LIBS="$save_LIBS" ]) ]) dnl Test whether isnanl() recognizes all canonical numbers which are neither dnl finite nor infinite. AC_DEFUN([gl_FUNC_ISNANL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether isnanl works], [gl_cv_func_isnanl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <limits.h> #include <math.h> #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # undef isnanl # define isnanl(x) __builtin_isnan ((long double)(x)) #elif defined isnan # undef isnanl # define isnanl(x) isnan ((long double)(x)) #endif #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { unsigned int word[NWORDS]; long double value; } memory_long_double; /* On Irix 6.5, gcc 3.4.3 can't compute compile-time NaN, and needs the runtime type conversion. */ #ifdef __sgi static long double NaNl () { double zero = 0.0; return zero / zero; } #else # define NaNl() (0.0L / 0.0L) #endif int main () { int result = 0; if (!isnanl (NaNl ())) result |= 1; { memory_long_double m; unsigned int i; /* The isnanl function should be immune against changes in the sign bit and in the mantissa bits. The xor operation twiddles a bit that can only be a sign bit or a mantissa bit (since the exponent never extends to bit 31). */ m.value = NaNl (); m.word[NWORDS / 2] ^= (unsigned int) 1 << (sizeof (unsigned int) * CHAR_BIT - 1); for (i = 0; i < NWORDS; i++) m.word[i] |= 1; if (!isnanl (m.value)) result |= 1; } #if ((defined __ia64 && LDBL_MANT_DIG == 64) || (defined __x86_64__ || defined __amd64__) || (defined __i386 || defined __i386__ || defined _I386 || defined _M_IX86 || defined _X86_)) && !HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Representation of an 80-bit 'long double' as an initializer for a sequence of 'unsigned int' words. */ # ifdef WORDS_BIGENDIAN # define LDBL80_WORDS(exponent,manthi,mantlo) \ { ((unsigned int) (exponent) << 16) | ((unsigned int) (manthi) >> 16), \ ((unsigned int) (manthi) << 16) | ((unsigned int) (mantlo) >> 16), \ (unsigned int) (mantlo) << 16 \ } # else # define LDBL80_WORDS(exponent,manthi,mantlo) \ { mantlo, manthi, exponent } # endif { /* Quiet NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0xC3333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } { /* Signalling NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x83333333, 0x00000000) }; if (!isnanl (x.value)) result |= 2; } /* isnanl should return something even for noncanonical values. */ { /* Pseudo-NaN. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x40000001, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 4; } { /* Pseudo-Infinity. */ static memory_long_double x = { LDBL80_WORDS (0xFFFF, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 8; } { /* Pseudo-Zero. */ static memory_long_double x = { LDBL80_WORDS (0x4004, 0x00000000, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 16; } { /* Unnormalized number. */ static memory_long_double x = { LDBL80_WORDS (0x4000, 0x63333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 32; } { /* Pseudo-Denormal. */ static memory_long_double x = { LDBL80_WORDS (0x0000, 0x83333333, 0x00000000) }; if (isnanl (x.value) && !isnanl (x.value)) result |= 64; } #endif return result; }]])], [gl_cv_func_isnanl_works=yes], [gl_cv_func_isnanl_works=no], [case "$host_os" in mingw*) # Guess yes on mingw, no on MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_func_isnanl_works="guessing yes"], [gl_cv_func_isnanl_works="guessing no"]) ;; *) gl_cv_func_isnanl_works="guessing yes" ;; esac ]) ]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/btowc.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000005457�14226564451�012030� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# btowc.m4 serial 12 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_BTOWC], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) dnl Check whether <wchar.h> is usable at all, first. Otherwise the test dnl program below may lead to an endless loop. See dnl <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) AC_CHECK_FUNCS_ONCE([btowc]) if test $ac_cv_func_btowc = no; then HAVE_BTOWC=0 else AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Cygwin 1.7.2 btowc('\0') is WEOF, not 0. AC_CACHE_CHECK([whether btowc(0) is correct], [gl_cv_func_btowc_nul], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> int main () { if (btowc ('\0') != 0) return 1; return 0; }]])], [gl_cv_func_btowc_nul=yes], [gl_cv_func_btowc_nul=no], [ changequote(,)dnl case "$host_os" in # Guess no on Cygwin. cygwin*) gl_cv_func_btowc_nul="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_nul="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_nul="guessing yes" ;; esac changequote([,])dnl ]) ]) dnl IRIX 6.5 btowc(EOF) is 0xFF, not WEOF. AC_CACHE_CHECK([whether btowc(EOF) is correct], [gl_cv_func_btowc_eof], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on IRIX. irix*) gl_cv_func_btowc_eof="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_btowc_eof="guessing yes" ;; # Guess yes otherwise. *) gl_cv_func_btowc_eof="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdio.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (btowc (EOF) != WEOF) return 1; } return 0; }]])], [gl_cv_func_btowc_eof=yes], [gl_cv_func_btowc_eof=no], [:]) fi ]) case "$gl_cv_func_btowc_nul" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac case "$gl_cv_func_btowc_eof" in *yes) ;; *) REPLACE_BTOWC=1 ;; esac fi ]) # Prerequisites of lib/btowc.c. AC_DEFUN([gl_PREREQ_BTOWC], [ : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/localcharset.m4���������������������������������������������������������������������0000644�0000000�0000000�00000000633�14226564452�013346� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localcharset.m4 serial 8 dnl Copyright (C) 2002, 2004, 2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LOCALCHARSET], [ dnl Prerequisites of lib/localcharset.c. AC_REQUIRE([AM_LANGINFO_CODESET]) ]) �����������������������������������������������������������������������������������������������������recutils-1.9/m4/ungetc.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000005307�14226564447�012176� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ungetc.m4 serial 10 dnl Copyright (C) 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_FUNC_UNGETC_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether ungetc works on arbitrary bytes], [gl_cv_func_ungetc_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <stdio.h> ]], [[FILE *f; if (!(f = fopen ("conftest.tmp", "w+"))) return 1; if (fputs ("abc", f) < 0) { fclose (f); return 2; } rewind (f); if (fgetc (f) != 'a') { fclose (f); return 3; } if (fgetc (f) != 'b') { fclose (f); return 4; } if (ungetc ('d', f) != 'd') { fclose (f); return 5; } if (ftell (f) != 1) { fclose (f); return 6; } if (fgetc (f) != 'd') { fclose (f); return 7; } if (ftell (f) != 2) { fclose (f); return 8; } if (fseek (f, 0, SEEK_CUR) != 0) { fclose (f); return 9; } if (ftell (f) != 2) { fclose (f); return 10; } if (fgetc (f) != 'c') { fclose (f); return 11; } fclose (f); remove ("conftest.tmp"); ]])], [gl_cv_func_ungetc_works=yes], [gl_cv_func_ungetc_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_ungetc_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_ungetc_works="guessing yes" ;; # Guess yes on bionic systems. *-android*) gl_cv_func_ungetc_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ungetc_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_ungetc_works="$gl_cross_guess_normal" ;; esac ]) ]) gl_ftello_broken_after_ungetc=no case "$gl_cv_func_ungetc_works" in *yes) ;; *) dnl On macOS >= 10.15, where the above program fails with exit code 6, dnl we fix it through an ftello override. case "$host_os" in darwin*) gl_ftello_broken_after_ungetc=yes ;; *) AC_DEFINE([FUNC_UNGETC_BROKEN], [1], [Define to 1 if ungetc is broken when used on arbitrary bytes.]) ;; esac ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/selinux-context-h.m4����������������������������������������������������������������0000644�0000000�0000000�00000001247�14226564452�014302� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 4 -*- Autoconf -*- # Copyright (C) 2006-2007, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # From Jim Meyering # Provide <selinux/context.h>, if necessary. AC_DEFUN([gl_HEADERS_SELINUX_CONTEXT_H], [ AC_REQUIRE([gl_LIBSELINUX]) if test "$with_selinux" != no; then AC_CHECK_HEADERS([selinux/context.h], [GL_GENERATE_SELINUX_CONTEXT_H=false], [GL_GENERATE_SELINUX_CONTEXT_H=true]) else GL_GENERATE_SELINUX_CONTEXT_H=true fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fatal-signal.m4���������������������������������������������������������������������0000644�0000000�0000000�00000000656�14226564451�013250� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fatal-signal.m4 serial 9 dnl Copyright (C) 2003-2004, 2006, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FATAL_SIGNAL], [ AC_REQUIRE([gt_TYPE_SIG_ATOMIC_T]) AC_CHECK_HEADERS_ONCE([unistd.h]) gl_PREREQ_SIG_HANDLER_H ]) ����������������������������������������������������������������������������������recutils-1.9/m4/getopt.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000031445�14226564452�012211� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getopt.m4 serial 48 dnl Copyright (C) 2002-2006, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Request a POSIX compliant getopt function. AC_DEFUN([gl_FUNC_GETOPT_POSIX], [ m4_divert_text([DEFAULTS], [gl_getopt_required=POSIX]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_GETOPT_CHECK_HEADERS]) dnl Other modules can request the gnulib implementation of the getopt dnl functions unconditionally, by defining gl_REPLACE_GETOPT_ALWAYS. dnl argp.m4 does this. m4_ifdef([gl_REPLACE_GETOPT_ALWAYS], [ REPLACE_GETOPT=1 ], [ REPLACE_GETOPT=0 if test -n "$gl_replace_getopt"; then REPLACE_GETOPT=1 fi ]) GL_GENERATE_GETOPT_H=false GL_GENERATE_GETOPT_CDEFS_H=false if test $REPLACE_GETOPT = 1; then dnl Arrange for getopt.h to be created. gl_GETOPT_SUBSTITUTE_HEADER fi ]) # Request a POSIX compliant getopt function with GNU extensions (such as # options with optional arguments) and the functions getopt_long, # getopt_long_only. AC_DEFUN([gl_FUNC_GETOPT_GNU], [ dnl Set the variable gl_getopt_required, so that all invocations of dnl gl_GETOPT_CHECK_HEADERS in the scope of the current configure file dnl will check for getopt with GNU extensions. dnl This means that if one gnulib-tool invocation requests getopt-posix dnl and another gnulib-tool invocation requests getopt-gnu, it is as if dnl both had requested getopt-gnu. m4_divert_text([INIT_PREPARE], [gl_getopt_required=GNU]) dnl No need to invoke gl_FUNC_GETOPT_POSIX here; this is automatically dnl done through the module dependency getopt-gnu -> getopt-posix. ]) # Determine whether to replace the entire getopt facility. AC_DEFUN([gl_GETOPT_CHECK_HEADERS], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([AC_PROG_AWK]) dnl for awk that supports ENVIRON dnl Persuade Solaris <unistd.h> to declare optarg, optind, opterr, optopt. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) gl_CHECK_NEXT_HEADERS([getopt.h]) if test $ac_cv_header_getopt_h = yes; then HAVE_GETOPT_H=1 else HAVE_GETOPT_H=0 fi AC_SUBST([HAVE_GETOPT_H]) gl_replace_getopt= dnl Test whether <getopt.h> is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_HEADERS([getopt.h], [], [gl_replace_getopt=yes]) fi dnl Test whether the function getopt_long is available. if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CHECK_FUNCS([getopt_long_only], [], [gl_replace_getopt=yes]) fi dnl POSIX 2008 does not specify leading '+' behavior, but see dnl http://austingroupbugs.net/view.php?id=191 for a recommendation on dnl the next version of POSIX. For now, we only guarantee leading '+' dnl behavior with getopt-gnu. if test -z "$gl_replace_getopt"; then AC_CACHE_CHECK([whether getopt is POSIX compatible], [gl_cv_func_getopt_posix], [ dnl Merging these three different test programs into a single one dnl would require a reset mechanism. On BSD systems, it can be done dnl through 'optreset'; on some others (glibc), it can be done by dnl setting 'optind' to 0; on others again (HP-UX, IRIX, OSF/1, dnl Solaris 9, musl libc), there is no such mechanism. if test $cross_compiling = no; then dnl Sanity check. Succeeds everywhere (except on MSVC, dnl which lacks <unistd.h> and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char a[] = "-a"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, a, foo, bar, NULL }; int c; c = getopt (4, argv, "ab"); if (!(c == 'a')) return 1; c = getopt (4, argv, "ab"); if (!(c == -1)) return 2; if (!(optind == 2)) return 3; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) if test $gl_cv_func_getopt_posix = maybe; then dnl Sanity check with '+'. Succeeds everywhere (except on MSVC, dnl which lacks <unistd.h> and getopt() entirely). AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char donald[] = "donald"; static char p[] = "-p"; static char billy[] = "billy"; static char duck[] = "duck"; static char a[] = "-a"; static char bar[] = "bar"; char *argv[] = { program, donald, p, billy, duck, a, bar, NULL }; int c; c = getopt (7, argv, "+abp:q:"); if (!(c == -1)) return 4; if (!(strcmp (argv[0], "program") == 0)) return 5; if (!(strcmp (argv[1], "donald") == 0)) return 6; if (!(strcmp (argv[2], "-p") == 0)) return 7; if (!(strcmp (argv[3], "billy") == 0)) return 8; if (!(strcmp (argv[4], "duck") == 0)) return 9; if (!(strcmp (argv[5], "-a") == 0)) return 10; if (!(strcmp (argv[6], "bar") == 0)) return 11; if (!(optind == 1)) return 12; return 0; } ]])], [gl_cv_func_getopt_posix=maybe], [gl_cv_func_getopt_posix=no]) fi if test $gl_cv_func_getopt_posix = maybe; then dnl Detect Mac OS X 10.5, AIX 7.1, mingw bug. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <unistd.h> #include <stdlib.h> #include <string.h> int main () { static char program[] = "program"; static char ab[] = "-ab"; char *argv[3] = { program, ab, NULL }; if (getopt (2, argv, "ab:") != 'a') return 13; if (getopt (2, argv, "ab:") != '?') return 14; if (optopt != 'b') return 15; if (optind != 2) return 16; return 0; } ]])], [gl_cv_func_getopt_posix=yes], [gl_cv_func_getopt_posix=no]) fi else case "$host_os" in darwin* | aix* | mingw*) gl_cv_func_getopt_posix="guessing no";; *) gl_cv_func_getopt_posix="guessing yes";; esac fi ]) case "$gl_cv_func_getopt_posix" in *no) gl_replace_getopt=yes ;; esac fi if test -z "$gl_replace_getopt" && test $gl_getopt_required = GNU; then AC_CACHE_CHECK([for working GNU getopt function], [gl_cv_func_getopt_gnu], [# Even with POSIXLY_CORRECT, the GNU extension of leading '-' in the # optstring is necessary for programs like m4 that have POSIX-mandated # semantics for supporting options interspersed with files. # Also, since getopt_long is a GNU extension, we require optind=0. # Bash ties 'set -o posix' to a non-exported POSIXLY_CORRECT; # so take care to revert to the correct (non-)export state. dnl GNU Coding Standards currently allow awk but not env; besides, env dnl is ambiguous with environment values that contain newlines. gl_awk_probe='BEGIN { if ("POSIXLY_CORRECT" in ENVIRON) print "x" }' case ${POSIXLY_CORRECT+x}`$AWK "$gl_awk_probe" </dev/null` in xx) gl_had_POSIXLY_CORRECT=exported ;; x) gl_had_POSIXLY_CORRECT=yes ;; *) gl_had_POSIXLY_CORRECT= ;; esac POSIXLY_CORRECT=1 export POSIXLY_CORRECT AC_RUN_IFELSE( [AC_LANG_PROGRAM([[#include <getopt.h> #include <stddef.h> #include <string.h> ]GL_NOCRASH[ ]], [[ int result = 0; nocrash_init(); /* This code succeeds on glibc 2.8, OpenBSD 4.0, Cygwin, mingw, and fails on Mac OS X 10.5, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10. */ { static char conftest[] = "conftest"; static char plus[] = "-+"; char *argv[3] = { conftest, plus, NULL }; opterr = 0; if (getopt (2, argv, "+a") != '?') result |= 1; } /* This code succeeds on glibc 2.8, mingw, and fails on Mac OS X 10.5, OpenBSD 4.0, AIX 5.2, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x. */ { static char program[] = "program"; static char p[] = "-p"; static char foo[] = "foo"; static char bar[] = "bar"; char *argv[] = { program, p, foo, bar, NULL }; optind = 1; if (getopt (4, argv, "p::") != 'p') result |= 2; else if (optarg != NULL) result |= 4; else if (getopt (4, argv, "p::") != -1) result |= 6; else if (optind != 2) result |= 8; } /* This code succeeds on glibc 2.8 and fails on Cygwin 1.7.0. */ { static char program[] = "program"; static char foo[] = "foo"; static char p[] = "-p"; char *argv[] = { program, foo, p, NULL }; optind = 0; if (getopt (3, argv, "-p") != 1) result |= 16; else if (getopt (3, argv, "-p") != 'p') result |= 16; } /* This code fails on glibc 2.11. */ { static char program[] = "program"; static char b[] = "-b"; static char a[] = "-a"; char *argv[] = { program, b, a, NULL }; optind = opterr = 0; if (getopt (3, argv, "+:a:b") != 'b') result |= 32; else if (getopt (3, argv, "+:a:b") != ':') result |= 32; } /* This code dumps core on glibc 2.14. */ { static char program[] = "program"; static char w[] = "-W"; static char dummy[] = "dummy"; char *argv[] = { program, w, dummy, NULL }; optind = opterr = 1; if (getopt (3, argv, "W;") != 'W') result |= 64; } return result; ]])], [gl_cv_func_getopt_gnu=yes], [gl_cv_func_getopt_gnu=no], [dnl Cross compiling. dnl Assume the worst, even on glibc platforms. dnl But obey --enable-cross-guesses. gl_cv_func_getopt_gnu="$gl_cross_guess_normal" ]) case $gl_had_POSIXLY_CORRECT in exported) ;; yes) AS_UNSET([POSIXLY_CORRECT]); POSIXLY_CORRECT=1 ;; *) AS_UNSET([POSIXLY_CORRECT]) ;; esac ]) if test "$gl_cv_func_getopt_gnu" != yes; then gl_replace_getopt=yes else AC_CACHE_CHECK([for working GNU getopt_long function], [gl_cv_func_getopt_long_gnu], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <getopt.h> #include <stddef.h> #include <string.h> ]], [[static const struct option long_options[] = { { "xtremely-",no_argument, NULL, 1003 }, { "xtra", no_argument, NULL, 1001 }, { "xtreme", no_argument, NULL, 1002 }, { "xtremely", no_argument, NULL, 1003 }, { NULL, 0, NULL, 0 } }; /* This code fails on OpenBSD 5.0. */ { static char program[] = "program"; static char xtremel[] = "--xtremel"; char *argv[] = { program, xtremel, NULL }; int option_index; optind = 1; opterr = 0; if (getopt_long (2, argv, "", long_options, &option_index) != 1003) return 1; } return 0; ]])], [gl_cv_func_getopt_long_gnu=yes], [gl_cv_func_getopt_long_gnu=no], [dnl Cross compiling. Guess no on OpenBSD, yes otherwise. case "$host_os" in openbsd*) gl_cv_func_getopt_long_gnu="guessing no";; *) gl_cv_func_getopt_long_gnu="guessing yes";; esac ]) ]) case "$gl_cv_func_getopt_long_gnu" in *yes) ;; *) gl_replace_getopt=yes ;; esac fi fi ]) AC_DEFUN([gl_GETOPT_SUBSTITUTE_HEADER], [ AC_CHECK_HEADERS_ONCE([sys/cdefs.h]) if test $ac_cv_header_sys_cdefs_h = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi AC_SUBST([HAVE_SYS_CDEFS_H]) AC_DEFINE([__GETOPT_PREFIX], [[rpl_]], [Define to rpl_ if the getopt replacement functions and variables should be used.]) GL_GENERATE_GETOPT_H=true GL_GENERATE_GETOPT_CDEFS_H=true ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/double-slash-root.m4����������������������������������������������������������������0000644�0000000�0000000�00000003125�14226564451�014243� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# double-slash-root.m4 serial 4 -*- Autoconf -*- dnl Copyright (C) 2006, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_DOUBLE_SLASH_ROOT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether // is distinct from /], [gl_cv_double_slash_root], [ if test x"$cross_compiling" = xyes ; then # When cross-compiling, there is no way to tell whether // is special # short of a list of hosts. However, the only known hosts to date # that have a distinct // are Apollo DomainOS (too old to port to), # Cygwin, and z/OS. If anyone knows of another system for which // has # special semantics and is distinct from /, please report it to # <bug-gnulib@gnu.org>. case $host in *-cygwin | i370-ibm-openedition) gl_cv_double_slash_root=yes ;; *) # Be optimistic and assume that / and // are the same when we # don't know. gl_cv_double_slash_root='unknown, assuming no' ;; esac else set x `ls -di / // 2>/dev/null` if test "$[2]" = "$[4]" && wc //dev/null >/dev/null 2>&1; then gl_cv_double_slash_root=no else gl_cv_double_slash_root=yes fi fi]) if test "$gl_cv_double_slash_root" = yes; then AC_DEFINE([DOUBLE_SLASH_IS_DISTINCT_ROOT], [1], [Define to 1 if // is a file system root distinct from /.]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/sched_h.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000006363�14226564452�012305� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sched_h.m4 serial 15 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_SCHED_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_SCHED_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_HEADERS_ONCE([sys/cdefs.h]) AC_CHECK_HEADERS([sched.h], [], [], [[#if HAVE_SYS_CDEFS_H #include <sys/cdefs.h> #endif ]]) gl_NEXT_HEADERS([sched.h]) if test "$ac_cv_header_sched_h" = yes; then HAVE_SCHED_H=1 else HAVE_SCHED_H=0 fi AC_SUBST([HAVE_SCHED_H]) if test "$HAVE_SCHED_H" = 1; then AC_CHECK_TYPE([struct sched_param], [HAVE_STRUCT_SCHED_PARAM=1], [HAVE_STRUCT_SCHED_PARAM=0], [[#if HAVE_SYS_CDEFS_H #include <sys/cdefs.h> #endif #include <sched.h> ]]) else HAVE_STRUCT_SCHED_PARAM=0 case "$host_os" in os2*) dnl On OS/2 kLIBC, struct sched_param is in spawn.h. AC_CHECK_TYPE([struct sched_param], [HAVE_STRUCT_SCHED_PARAM=1], [], [#include <spawn.h>]) ;; vms) dnl On OpenVMS 7.2 or newer, struct sched_param is in pthread.h. AC_CHECK_TYPE([struct sched_param], [HAVE_STRUCT_SCHED_PARAM=1], [], [#include <pthread.h>]) ;; esac fi AC_SUBST([HAVE_STRUCT_SCHED_PARAM]) if test "$ac_cv_header_sys_cdefs_h" = yes; then HAVE_SYS_CDEFS_H=1 else HAVE_SYS_CDEFS_H=0 fi AC_SUBST([HAVE_SYS_CDEFS_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, if it is not common dnl enough to be declared everywhere. gl_WARN_ON_USE_PREPARE([[#include <sched.h> ]], [sched_yield]) ]) # gl_SCHED_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SCHED_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SCHED_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SCHED_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SCHED_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCHED_YIELD]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SCHED_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SCHED_H_DEFAULTS]) ]) AC_DEFUN([gl_SCHED_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_SCHED_YIELD=1; AC_SUBST([HAVE_SCHED_YIELD]) REPLACE_SCHED_YIELD=0; AC_SUBST([REPLACE_SCHED_YIELD]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/mbstate_t.m4������������������������������������������������������������������������0000644�0000000�0000000�00000002210�14226564452�012655� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbstate_t.m4 serial 14 dnl Copyright (C) 2000-2002, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # From Paul Eggert. # BeOS 5 has <wchar.h> but does not define mbstate_t, # so you can't declare an object of that type. # Check for this incompatibility with Standard C. # AC_TYPE_MBSTATE_T # ----------------- AC_DEFUN([AC_TYPE_MBSTATE_T], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl for HP-UX 11.11 AC_CACHE_CHECK([for mbstate_t], [ac_cv_type_mbstate_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT[ #include <wchar.h>]], [[mbstate_t x; return sizeof x;]])], [ac_cv_type_mbstate_t=yes], [ac_cv_type_mbstate_t=no])]) if test $ac_cv_type_mbstate_t = yes; then AC_DEFINE([HAVE_MBSTATE_T], [1], [Define to 1 if <wchar.h> declares mbstate_t.]) else AC_DEFINE([mbstate_t], [int], [Define to a type if <wchar.h> does not define.]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/open-cloexec.m4���������������������������������������������������������������������0000644�0000000�0000000�00000001323�14226564452�013260� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test whether O_CLOEXEC is defined. dnl Copyright 2017-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_PREPROC_O_CLOEXEC], [ AC_CACHE_CHECK([for O_CLOEXEC], [gl_cv_macro_O_CLOEXEC], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <fcntl.h> #ifndef O_CLOEXEC choke me; #endif ]], [[return O_CLOEXEC;]])], [gl_cv_macro_O_CLOEXEC=yes], [gl_cv_macro_O_CLOEXEC=no])]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/localeconv.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000001147�14226564452�013030� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# localeconv.m4 serial 1 dnl Copyright (C) 2012-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LOCALECONV], [ AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) AC_REQUIRE([gl_LOCALE_H]) if test $REPLACE_STRUCT_LCONV = 1; then REPLACE_LOCALECONV=1 fi ]) # Prerequisites of lib/localeconv.c. AC_DEFUN([gl_PREREQ_LOCALECONV], [ AC_CHECK_MEMBERS([struct lconv.decimal_point], [], [], [[#include <locale.h>]]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/dirfd.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000005135�14226564447�012000� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 26 -*- Autoconf -*- dnl Find out how to get the file descriptor associated with an open DIR*. # Copyright (C) 2001-2006, 2008-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl From Jim Meyering AC_DEFUN([gl_FUNC_DIRFD], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <dirent.h> to declare dirfd(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS([dirfd]) AC_CHECK_DECLS([dirfd], , , [[#include <sys/types.h> #include <dirent.h>]]) if test $ac_cv_have_decl_dirfd = no; then HAVE_DECL_DIRFD=0 fi AC_CACHE_CHECK([whether dirfd is a macro], [gl_cv_func_dirfd_macro], [AC_EGREP_CPP([dirent_header_defines_dirfd], [ #include <sys/types.h> #include <dirent.h> #ifdef dirfd dirent_header_defines_dirfd #endif], [gl_cv_func_dirfd_macro=yes], [gl_cv_func_dirfd_macro=no])]) # Use the replacement if we have no function or macro with that name, # or if OS/2 kLIBC whose dirfd() does not work. # Replace only if the system declares dirfd already. case $ac_cv_func_dirfd,$gl_cv_func_dirfd_macro,$host_os,$ac_cv_have_decl_dirfd in no,no,*,yes | *,*,os2*,yes) REPLACE_DIRFD=1 AC_DEFINE([REPLACE_DIRFD], [1], [Define to 1 if gnulib's dirfd() replacement is used.]);; esac ]) dnl Prerequisites of lib/dirfd.c. AC_DEFUN([gl_PREREQ_DIRFD], [ AC_CACHE_CHECK([how to get the file descriptor associated with an open DIR*], [gl_cv_sys_dir_fd_member_name], [ dirfd_save_CFLAGS=$CFLAGS for ac_expr in d_fd dd_fd; do CFLAGS="$CFLAGS -DDIR_FD_MEMBER_NAME=$ac_expr" AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #include <sys/types.h> #include <dirent.h>]], [[DIR *dir_p = opendir("."); (void) dir_p->DIR_FD_MEMBER_NAME;]])], [dir_fd_found=yes] ) CFLAGS=$dirfd_save_CFLAGS test "$dir_fd_found" = yes && break done test "$dir_fd_found" = yes || ac_expr=no_such_member gl_cv_sys_dir_fd_member_name=$ac_expr ] ) if test $gl_cv_sys_dir_fd_member_name != no_such_member; then AC_DEFINE_UNQUOTED([DIR_FD_MEMBER_NAME], [$gl_cv_sys_dir_fd_member_name], [the name of the file descriptor member of DIR]) fi AH_VERBATIM([DIR_TO_FD], [#ifdef DIR_FD_MEMBER_NAME # define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME) #else # define DIR_TO_FD(Dir_p) -1 #endif ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/vasprintf-posix.m4������������������������������������������������������������������0000644�0000000�0000000�00000010302�14226564453�014051� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasprintf-posix.m4 serial 13 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VASPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_vasprintf_posix=no AC_CHECK_FUNCS([vasprintf]) case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) if test $ac_cv_func_vasprintf = yes; then # vasprintf exists and is # already POSIX compliant. gl_cv_func_vasprintf_posix=yes fi ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_vasprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_VASPRINTF fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/posix_spawn_faction_addchdir.m4�����������������������������������������������������0000644�0000000�0000000�00000001457�14226564447�016612� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posix_spawn_faction_addchdir.m4 serial 1 dnl Copyright (C) 2018-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR], [ AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) gl_POSIX_SPAWN AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addchdir posix_spawn_file_actions_addchdir_np]) if test $ac_cv_func_posix_spawn_file_actions_addchdir = yes; then dnl This function is not yet standardized. Therefore override the dnl system's implementation always. REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=1 else HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0 fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/ldexpl.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000007630�14226564452�012176� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ldexpl.m4 serial 17 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_LDEXPL], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_LONG_DOUBLE_VS_DOUBLE]) AC_REQUIRE([gl_FUNC_ISNANL]) dnl for ISNANL_LIBM dnl Persuade glibc <math.h> to declare ldexpl(). AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Check whether it's declared. dnl Mac OS X 10.3 has ldexpl() in libc but doesn't declare it in <math.h>. AC_CHECK_DECL([ldexpl], , [HAVE_DECL_LDEXPL=0], [[#include <math.h>]]) LDEXPL_LIBM= if test $HAVE_DECL_LDEXPL = 1; then gl_CHECK_LDEXPL_NO_LIBM if test $gl_cv_func_ldexpl_no_libm = no; then AC_CACHE_CHECK([whether ldexpl() can be used with libm], [gl_cv_func_ldexpl_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> long double x;]], [[return ldexpl (x, -1) > 0;]])], [gl_cv_func_ldexpl_in_libm=yes], [gl_cv_func_ldexpl_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_ldexpl_in_libm = yes; then LDEXPL_LIBM=-lm fi fi if test $gl_cv_func_ldexpl_no_libm = yes \ || test $gl_cv_func_ldexpl_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $LDEXPL_LIBM" gl_FUNC_LDEXPL_WORKS LIBS="$save_LIBS" case "$gl_cv_func_ldexpl_works" in *yes) gl_func_ldexpl=yes ;; *) gl_func_ldexpl=no; REPLACE_LDEXPL=1 ;; esac else gl_func_ldexpl=no fi if test $gl_func_ldexpl = yes; then AC_DEFINE([HAVE_LDEXPL], [1], [Define if the ldexpl() function is available.]) fi fi if test $HAVE_DECL_LDEXPL = 0 || test $gl_func_ldexpl = no; then dnl Find libraries needed to link lib/ldexpl.c. if test $HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = 1; then AC_REQUIRE([gl_FUNC_LDEXP]) LDEXPL_LIBM="$LDEXP_LIBM" else LDEXPL_LIBM="$ISNANL_LIBM" fi fi AC_SUBST([LDEXPL_LIBM]) ]) dnl Test whether ldexpl() can be used without linking with libm. dnl Set gl_cv_func_ldexpl_no_libm to 'yes' or 'no' accordingly. AC_DEFUN([gl_CHECK_LDEXPL_NO_LIBM], [ AC_CACHE_CHECK([whether ldexpl() can be used without linking with libm], [gl_cv_func_ldexpl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> long double x;]], [[return ldexpl (x, -1) > 0;]])], [gl_cv_func_ldexpl_no_libm=yes], [gl_cv_func_ldexpl_no_libm=no]) ]) ]) dnl Test whether ldexpl() works on finite numbers (this fails on AIX 5.1 dnl and Mac OS X 10.4/PowerPC). AC_DEFUN([gl_FUNC_LDEXPL_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether ldexpl works], [gl_cv_func_ldexpl_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> extern #ifdef __cplusplus "C" #endif long double ldexpl (long double, int); int main() { int result = 0; { volatile long double x = 1.0; volatile long double y = ldexpl (x, -1); if (y != 0.5L) result |= 1; } { volatile long double x = 1.73205L; volatile long double y = ldexpl (x, 0); if (y != x) result |= 2; } return result; }]])], [gl_cv_func_ldexpl_works=yes], [gl_cv_func_ldexpl_works=no], [ changequote(,)dnl case "$host_os" in aix | aix[3-6]*) gl_cv_func_ldexpl_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_ldexpl_works="guessing yes" ;; *) gl_cv_func_ldexpl_works="guessing yes" ;; esac changequote([,])dnl ]) ]) ]) ��������������������������������������������������������������������������������������������������������recutils-1.9/m4/gettext.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000036763�13413351610�012366� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gettext.m4 serial 68 (gettext-0.19.8) dnl Copyright (C) 1995-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Authors: dnl Ulrich Drepper <drepper@cygnus.com>, 1995-2000. dnl Bruno Haible <haible@clisp.cons.org>, 2000-2006, 2008-2010. dnl Macro to add for using GNU gettext. dnl Usage: AM_GNU_GETTEXT([INTLSYMBOL], [NEEDSYMBOL], [INTLDIR]). dnl INTLSYMBOL can be one of 'external', 'no-libtool', 'use-libtool'. The dnl default (if it is not specified or empty) is 'no-libtool'. dnl INTLSYMBOL should be 'external' for packages with no intl directory, dnl and 'no-libtool' or 'use-libtool' for packages with an intl directory. dnl If INTLSYMBOL is 'use-libtool', then a libtool library dnl $(top_builddir)/intl/libintl.la will be created (shared and/or static, dnl depending on --{enable,disable}-{shared,static} and on the presence of dnl AM-DISABLE-SHARED). If INTLSYMBOL is 'no-libtool', a static library dnl $(top_builddir)/intl/libintl.a will be created. dnl If NEEDSYMBOL is specified and is 'need-ngettext', then GNU gettext dnl implementations (in libc or libintl) without the ngettext() function dnl will be ignored. If NEEDSYMBOL is specified and is dnl 'need-formatstring-macros', then GNU gettext implementations that don't dnl support the ISO C 99 <inttypes.h> formatstring macros will be ignored. dnl INTLDIR is used to find the intl libraries. If empty, dnl the value '$(top_builddir)/intl/' is used. dnl dnl The result of the configuration is one of three cases: dnl 1) GNU gettext, as included in the intl subdirectory, will be compiled dnl and used. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 2) GNU gettext has been found in the system's C library. dnl Catalog format: GNU --> install in $(datadir) dnl Catalog extension: .mo after installation, .gmo in source tree dnl 3) No internationalization, always use English msgid. dnl Catalog format: none dnl Catalog extension: none dnl If INTLSYMBOL is 'external', only cases 2 and 3 can occur. dnl The use of .gmo is historical (it was needed to avoid overwriting the dnl GNU format catalogs when building on a platform with an X/Open gettext), dnl but we keep it in order not to force irrelevant filename changes on the dnl maintainers. dnl AC_DEFUN([AM_GNU_GETTEXT], [ dnl Argument checking. ifelse([$1], [], , [ifelse([$1], [external], , [ifelse([$1], [no-libtool], , [ifelse([$1], [use-libtool], , [errprint([ERROR: invalid first argument to AM_GNU_GETTEXT ])])])])]) ifelse(ifelse([$1], [], [old])[]ifelse([$1], [no-libtool], [old]), [old], [AC_DIAGNOSE([obsolete], [Use of AM_GNU_GETTEXT without [external] argument is deprecated.])]) ifelse([$2], [], , [ifelse([$2], [need-ngettext], , [ifelse([$2], [need-formatstring-macros], , [errprint([ERROR: invalid second argument to AM_GNU_GETTEXT ])])])]) define([gt_included_intl], ifelse([$1], [external], ifdef([AM_GNU_GETTEXT_][INTL_SUBDIR], [yes], [no]), [yes])) define([gt_libtool_suffix_prefix], ifelse([$1], [use-libtool], [l], [])) gt_NEEDS_INIT AM_GNU_GETTEXT_NEED([$2]) AC_REQUIRE([AM_PO_SUBDIRS])dnl ifelse(gt_included_intl, yes, [ AC_REQUIRE([AM_INTL_SUBDIR])dnl ]) dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Sometimes libintl requires libiconv, so first search for libiconv. dnl Ideally we would do this search only after the dnl if test "$USE_NLS" = "yes"; then dnl if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl tests. But if configure.in invokes AM_ICONV after AM_GNU_GETTEXT dnl the configure script would need to contain the same shell code dnl again, outside any 'if'. There are two solutions: dnl - Invoke AM_ICONV_LINKFLAGS_BODY here, outside any 'if'. dnl - Control the expansions in more detail using AC_PROVIDE_IFELSE. dnl Since AC_PROVIDE_IFELSE is only in autoconf >= 2.52 and not dnl documented, we avoid it. ifelse(gt_included_intl, yes, , [ AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) ]) dnl Sometimes, on Mac OS X, libintl requires linking with CoreFoundation. gt_INTL_MACOSX dnl Set USE_NLS. AC_REQUIRE([AM_NLS]) ifelse(gt_included_intl, yes, [ BUILD_INCLUDED_LIBINTL=no USE_INCLUDED_LIBINTL=no ]) LIBINTL= LTLIBINTL= POSUB= dnl Add a version number to the cache macros. case " $gt_needs " in *" need-formatstring-macros "*) gt_api_version=3 ;; *" need-ngettext "*) gt_api_version=2 ;; *) gt_api_version=1 ;; esac gt_func_gnugettext_libc="gt_cv_func_gnugettext${gt_api_version}_libc" gt_func_gnugettext_libintl="gt_cv_func_gnugettext${gt_api_version}_libintl" dnl If we use NLS figure out what method if test "$USE_NLS" = "yes"; then gt_use_preinstalled_gnugettext=no ifelse(gt_included_intl, yes, [ AC_MSG_CHECKING([whether included gettext is requested]) AC_ARG_WITH([included-gettext], [ --with-included-gettext use the GNU gettext library included here], nls_cv_force_use_gnu_gettext=$withval, nls_cv_force_use_gnu_gettext=no) AC_MSG_RESULT([$nls_cv_force_use_gnu_gettext]) nls_cv_use_gnu_gettext="$nls_cv_force_use_gnu_gettext" if test "$nls_cv_force_use_gnu_gettext" != "yes"; then ]) dnl User does not insist on using GNU NLS library. Figure out what dnl to use. If GNU gettext is available we use this. Else we have dnl to fall back to GNU NLS library. if test $gt_api_version -ge 3; then gt_revision_test_code=' #ifndef __GNU_GETTEXT_SUPPORTED_REVISION #define __GNU_GETTEXT_SUPPORTED_REVISION(major) ((major) == 0 ? 0 : -1) #endif changequote(,)dnl typedef int array [2 * (__GNU_GETTEXT_SUPPORTED_REVISION(0) >= 1) - 1]; changequote([,])dnl ' else gt_revision_test_code= fi if test $gt_api_version -ge 2; then gt_expression_test_code=' + * ngettext ("", "", 0)' else gt_expression_test_code= fi AC_CACHE_CHECK([for GNU gettext in libc], [$gt_func_gnugettext_libc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <libintl.h> #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern int *_nl_domain_bindings; #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_domain_bindings) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libc=yes"], [eval "$gt_func_gnugettext_libc=no"])]) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" != "yes"; }; then dnl Sometimes libintl requires libiconv, so first search for libiconv. ifelse(gt_included_intl, yes, , [ AM_ICONV_LINK ]) dnl Search for libintl and define LIBINTL, LTLIBINTL and INCINTL dnl accordingly. Don't use AC_LIB_LINKFLAGS_BODY([intl],[iconv]) dnl because that would add "-liconv" to LIBINTL and LTLIBINTL dnl even if libiconv doesn't exist. AC_LIB_LINKFLAGS_BODY([intl]) AC_CACHE_CHECK([for GNU gettext in libintl], [$gt_func_gnugettext_libintl], [gt_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$CPPFLAGS $INCINTL" gt_save_LIBS="$LIBS" LIBS="$LIBS $LIBINTL" dnl Now see whether libintl exists and does not depend on libiconv. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <libintl.h> #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [eval "$gt_func_gnugettext_libintl=yes"], [eval "$gt_func_gnugettext_libintl=no"]) dnl Now see whether libintl exists and depends on libiconv. if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" != yes; } && test -n "$LIBICONV"; then LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <libintl.h> #ifndef __GNU_GETTEXT_SUPPORTED_REVISION extern int _nl_msg_cat_cntr; extern #ifdef __cplusplus "C" #endif const char *_nl_expand_alias (const char *); #define __GNU_GETTEXT_SYMBOL_EXPRESSION (_nl_msg_cat_cntr + *_nl_expand_alias ("")) #else #define __GNU_GETTEXT_SYMBOL_EXPRESSION 0 #endif $gt_revision_test_code ]], [[ bindtextdomain ("", ""); return * gettext ("")$gt_expression_test_code + __GNU_GETTEXT_SYMBOL_EXPRESSION ]])], [LIBINTL="$LIBINTL $LIBICONV" LTLIBINTL="$LTLIBINTL $LTLIBICONV" eval "$gt_func_gnugettext_libintl=yes" ]) fi CPPFLAGS="$gt_save_CPPFLAGS" LIBS="$gt_save_LIBS"]) fi dnl If an already present or preinstalled GNU gettext() is found, dnl use it. But if this macro is used in GNU gettext, and GNU dnl gettext is already preinstalled in libintl, we update this dnl libintl. (Cf. the install rule in intl/Makefile.in.) if { eval "gt_val=\$$gt_func_gnugettext_libc"; test "$gt_val" = "yes"; } \ || { { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; } \ && test "$PACKAGE" != gettext-runtime \ && test "$PACKAGE" != gettext-tools; }; then gt_use_preinstalled_gnugettext=yes else dnl Reset the values set by searching for libintl. LIBINTL= LTLIBINTL= INCINTL= fi ifelse(gt_included_intl, yes, [ if test "$gt_use_preinstalled_gnugettext" != "yes"; then dnl GNU gettext is not found in the C library. dnl Fall back on included GNU gettext library. nls_cv_use_gnu_gettext=yes fi fi if test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions used to generate GNU NLS library. BUILD_INCLUDED_LIBINTL=yes USE_INCLUDED_LIBINTL=yes LIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LIBICONV $LIBTHREAD" LTLIBINTL="ifelse([$3],[],\${top_builddir}/intl,[$3])/libintl.[]gt_libtool_suffix_prefix[]a $LTLIBICONV $LTLIBTHREAD" LIBS=`echo " $LIBS " | sed -e 's/ -lintl / /' -e 's/^ //' -e 's/ $//'` fi CATOBJEXT= if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Mark actions to use GNU gettext tools. CATOBJEXT=.gmo fi ]) if test -n "$INTL_MACOSX_LIBS"; then if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then dnl Some extra flags are needed during linking. LIBINTL="$LIBINTL $INTL_MACOSX_LIBS" LTLIBINTL="$LTLIBINTL $INTL_MACOSX_LIBS" fi fi if test "$gt_use_preinstalled_gnugettext" = "yes" \ || test "$nls_cv_use_gnu_gettext" = "yes"; then AC_DEFINE([ENABLE_NLS], [1], [Define to 1 if translation of program messages to the user's native language is requested.]) else USE_NLS=no fi fi AC_MSG_CHECKING([whether to use NLS]) AC_MSG_RESULT([$USE_NLS]) if test "$USE_NLS" = "yes"; then AC_MSG_CHECKING([where the gettext function comes from]) if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then gt_source="external libintl" else gt_source="libc" fi else gt_source="included intl directory" fi AC_MSG_RESULT([$gt_source]) fi if test "$USE_NLS" = "yes"; then if test "$gt_use_preinstalled_gnugettext" = "yes"; then if { eval "gt_val=\$$gt_func_gnugettext_libintl"; test "$gt_val" = "yes"; }; then AC_MSG_CHECKING([how to link with libintl]) AC_MSG_RESULT([$LIBINTL]) AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCINTL]) fi dnl For backward compatibility. Some packages may be using this. AC_DEFINE([HAVE_GETTEXT], [1], [Define if the GNU gettext() function is already present or preinstalled.]) AC_DEFINE([HAVE_DCGETTEXT], [1], [Define if the GNU dcgettext() function is already present or preinstalled.]) fi dnl We need to process the po/ directory. POSUB=po fi ifelse(gt_included_intl, yes, [ dnl If this is used in GNU gettext we have to set BUILD_INCLUDED_LIBINTL dnl to 'yes' because some of the testsuite requires it. if test "$PACKAGE" = gettext-runtime || test "$PACKAGE" = gettext-tools; then BUILD_INCLUDED_LIBINTL=yes fi dnl Make all variables we use known to autoconf. AC_SUBST([BUILD_INCLUDED_LIBINTL]) AC_SUBST([USE_INCLUDED_LIBINTL]) AC_SUBST([CATOBJEXT]) dnl For backward compatibility. Some configure.ins may be using this. nls_cv_header_intl= nls_cv_header_libgt= dnl For backward compatibility. Some Makefiles may be using this. DATADIRNAME=share AC_SUBST([DATADIRNAME]) dnl For backward compatibility. Some Makefiles may be using this. INSTOBJEXT=.mo AC_SUBST([INSTOBJEXT]) dnl For backward compatibility. Some Makefiles may be using this. GENCAT=gencat AC_SUBST([GENCAT]) dnl For backward compatibility. Some Makefiles may be using this. INTLOBJS= if test "$USE_INCLUDED_LIBINTL" = yes; then INTLOBJS="\$(GETTOBJS)" fi AC_SUBST([INTLOBJS]) dnl Enable libtool support if the surrounding package wishes it. INTL_LIBTOOL_SUFFIX_PREFIX=gt_libtool_suffix_prefix AC_SUBST([INTL_LIBTOOL_SUFFIX_PREFIX]) ]) dnl For backward compatibility. Some Makefiles may be using this. INTLLIBS="$LIBINTL" AC_SUBST([INTLLIBS]) dnl Make all documented variables known to autoconf. AC_SUBST([LIBINTL]) AC_SUBST([LTLIBINTL]) AC_SUBST([POSUB]) ]) dnl gt_NEEDS_INIT ensures that the gt_needs variable is initialized. m4_define([gt_NEEDS_INIT], [ m4_divert_text([DEFAULTS], [gt_needs=]) m4_define([gt_NEEDS_INIT], []) ]) dnl Usage: AM_GNU_GETTEXT_NEED([NEEDSYMBOL]) AC_DEFUN([AM_GNU_GETTEXT_NEED], [ m4_divert_text([INIT_PREPARE], [gt_needs="$gt_needs $1"]) ]) dnl Usage: AM_GNU_GETTEXT_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_VERSION], []) dnl Usage: AM_GNU_GETTEXT_REQUIRE_VERSION([gettext-version]) AC_DEFUN([AM_GNU_GETTEXT_REQUIRE_VERSION], []) �������������recutils-1.9/m4/utime_h.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000004220�14226564453�012331� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# utime_h.m4 serial 8 dnl Copyright (C) 2017-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN_ONCE([gl_UTIME_H], [ AC_REQUIRE([gl_UTIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_ifdef([gl_ANSI_CXX], [AC_REQUIRE([gl_ANSI_CXX])]) AC_CHECK_HEADERS_ONCE([utime.h]) gl_CHECK_NEXT_HEADERS([utime.h]) if test $ac_cv_header_utime_h = yes; then HAVE_UTIME_H=1 else HAVE_UTIME_H=0 fi AC_SUBST([HAVE_UTIME_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <utime.h> ]], [utime]) ]) # gl_UTIME_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_UTIME_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_UTIME_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_UTIME_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_UTIME_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UTIME]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UTIME], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_UTIME_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_UTIME_H_DEFAULTS]) ]) AC_DEFUN([gl_UTIME_H_DEFAULTS], [ dnl Assume POSIX behavior unless another module says otherwise. HAVE_UTIME=1; AC_SUBST([HAVE_UTIME]) REPLACE_UTIME=0; AC_SUBST([REPLACE_UTIME]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/wchar_t.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000001462�14226564453�012333� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wchar_t.m4 serial 4 (gettext-0.18.2) dnl Copyright (C) 2002-2003, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether <stddef.h> has the 'wchar_t' type. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WCHAR_T], [ AC_CACHE_CHECK([for wchar_t], [gt_cv_c_wchar_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> wchar_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wchar_t=yes], [gt_cv_c_wchar_t=no])]) if test $gt_cv_c_wchar_t = yes; then AC_DEFINE([HAVE_WCHAR_T], [1], [Define if you have the 'wchar_t' type.]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/printf-frexp.m4���������������������������������������������������������������������0000644�0000000�0000000�00000002266�14226564452�013332� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# printf-frexp.m4 serial 5 dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check how to define printf_frexp() without linking with libm. AC_DEFUN([gl_FUNC_PRINTF_FREXP], [ AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM]) if test $gl_cv_func_frexp_no_libm = yes; then gl_FUNC_FREXP_WORKS case "$gl_cv_func_frexp_works" in *yes) AC_DEFINE([HAVE_FREXP_IN_LIBC], [1], [Define if the frexp function is available in libc.]) ;; esac fi AC_CACHE_CHECK([whether ldexp can be used without linking with libm], [gl_cv_func_ldexp_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> double x; int y;]], [[return ldexp (x, y) < 1;]])], [gl_cv_func_ldexp_no_libm=yes], [gl_cv_func_ldexp_no_libm=no]) ]) if test $gl_cv_func_ldexp_no_libm = yes; then AC_DEFINE([HAVE_LDEXP_IN_LIBC], [1], [Define if the ldexp function is available in libc.]) fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/getpagesize.m4����������������������������������������������������������������������0000644�0000000�0000000�00000002762�14226564447�013222� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getpagesize.m4 serial 10 dnl Copyright (C) 2002, 2004-2005, 2007, 2009-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_GETPAGESIZE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) gl_CHECK_FUNC_GETPAGESIZE if test $gl_cv_func_getpagesize = no; then HAVE_GETPAGESIZE=0 AC_CHECK_HEADERS([OS.h]) if test $ac_cv_header_OS_h = yes; then HAVE_OS_H=1 fi AC_CHECK_HEADERS([sys/param.h]) if test $ac_cv_header_sys_param_h = yes; then HAVE_SYS_PARAM_H=1 fi fi case "$host_os" in mingw*) REPLACE_GETPAGESIZE=1 ;; esac dnl Also check whether it's declared. dnl mingw has getpagesize() in libgcc.a but doesn't declare it. AC_CHECK_DECL([getpagesize], , [HAVE_DECL_GETPAGESIZE=0]) ]) dnl Tests whether the function getpagesize() exists. dnl Sets gl_cv_func_getpagesize. AC_DEFUN([gl_CHECK_FUNC_GETPAGESIZE], [ dnl We can't use AC_CHECK_FUNC here, because getpagesize() is defined as a dnl static inline function when compiling for Android 4.4 or older. AC_CACHE_CHECK([for getpagesize], [gl_cv_func_getpagesize], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h>]], [[return getpagesize();]]) ], [gl_cv_func_getpagesize=yes], [gl_cv_func_getpagesize=no]) ]) ]) ��������������recutils-1.9/m4/openat.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000002023�14226564447�012167� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 46 # See if we need to use our replacement for Solaris' openat et al functions. dnl Copyright (C) 2004-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Jim Meyering. AC_DEFUN([gl_FUNC_OPENAT], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_CHECK_FUNCS_ONCE([openat]) AC_REQUIRE([gl_FUNC_LSTAT_FOLLOWS_SLASHED_SYMLINK]) AC_REQUIRE([gl_PREPROC_O_CLOEXEC]) case $ac_cv_func_openat+$gl_cv_func_lstat_dereferences_slashed_symlink+$gl_cv_macro_O_CLOEXEC in yes+*yes+yes) ;; yes+*) # Solaris 10 lacks O_CLOEXEC. # Solaris 9 has *at functions, but uniformly mishandles trailing # slash in all of them. REPLACE_OPENAT=1 ;; *) HAVE_OPENAT=0 ;; esac ]) # Prerequisites of lib/openat.c. AC_DEFUN([gl_PREREQ_OPENAT], [ AC_REQUIRE([gl_PROMOTED_TYPE_MODE_T]) : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/signbit.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000031057�14226564452�012345� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# signbit.m4 serial 20 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_SIGNBIT], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([for signbit macro], [gl_cv_func_signbit], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <math.h> /* If signbit is defined as a function, don't use it, since calling it for 'float' or 'long double' arguments would involve conversions. If signbit is not declared at all but exists as a library function, don't use it, since the prototype may not match. If signbit is not declared at all but exists as a compiler built-in, don't use it, since it's preferable to use __builtin_signbit* (no warnings, no conversions). */ #ifndef signbit # error "signbit should be a macro" #endif #include <string.h> ]gl_SIGNBIT_TEST_PROGRAM ])], [gl_cv_func_signbit=yes], [gl_cv_func_signbit=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_signbit="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_signbit="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_signbit="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_signbit="$gl_cross_guess_normal" ;; esac ]) ]) dnl GCC >= 4.0 and clang provide three built-ins for signbit. dnl They can be used without warnings, also in C++, regardless of <math.h>. dnl But they may expand to calls to functions, which may or may not be in dnl libc. AC_CACHE_CHECK([for signbit compiler built-ins], [gl_cv_func_signbit_builtins], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #if (__GNUC__ >= 4) || (__clang_major__ >= 4) # define signbit(x) \ (sizeof (x) == sizeof (long double) ? __builtin_signbitl (x) : \ sizeof (x) == sizeof (double) ? __builtin_signbit (x) : \ __builtin_signbitf (x)) #else # error "signbit should be three compiler built-ins" #endif #include <string.h> ]gl_SIGNBIT_TEST_PROGRAM ])], [gl_cv_func_signbit_builtins=yes], [gl_cv_func_signbit_builtins=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_signbit_builtins="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_signbit_builtins="guessing yes" ;; # Guess yes on mingw, no on MSVC. mingw*) if test -n "$GCC"; then gl_cv_func_signbit_builtins="guessing yes" else gl_cv_func_signbit_builtins="guessing no" fi ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_signbit_builtins="$gl_cross_guess_normal" ;; esac ]) ]) dnl Use the compiler built-ins whenever possible, because they are more dnl efficient than the system library functions (if they exist). case "$gl_cv_func_signbit_builtins" in *yes) REPLACE_SIGNBIT_USING_BUILTINS=1 ;; *) case "$gl_cv_func_signbit" in *yes) ;; *) dnl REPLACE_SIGNBIT=1 makes sure the signbit[fdl] functions get built. REPLACE_SIGNBIT=1 ;; esac ;; esac dnl On Solaris 10, with CC in C++ mode, signbit is not available although dnl is with cc in C mode. This cannot be worked around by defining dnl _XOPEN_SOURCE=600, because the latter does not work in C++ mode on dnl Solaris 11.0. Therefore use the replacement functions on Solaris. case "$host_os" in solaris*) REPLACE_SIGNBIT=1 ;; esac if test $REPLACE_SIGNBIT = 1; then gl_FLOAT_SIGN_LOCATION gl_DOUBLE_SIGN_LOCATION gl_LONG_DOUBLE_SIGN_LOCATION if test "$gl_cv_cc_float_signbit" = unknown; then dnl Test whether copysignf() is declared. AC_CHECK_DECLS([copysignf], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_copysignf" = yes; then dnl Test whether copysignf() can be used without libm. AC_CACHE_CHECK([whether copysignf can be used without linking with libm], [gl_cv_func_copysignf_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> float x, y;]], [[return copysignf (x, y) < 0;]])], [gl_cv_func_copysignf_no_libm=yes], [gl_cv_func_copysignf_no_libm=no]) ]) if test $gl_cv_func_copysignf_no_libm = yes; then AC_DEFINE([HAVE_COPYSIGNF_IN_LIBC], [1], [Define if the copysignf function is declared in <math.h> and available in libc.]) fi fi fi if test "$gl_cv_cc_double_signbit" = unknown; then dnl Test whether copysign() is declared. AC_CHECK_DECLS([copysign], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_copysign" = yes; then dnl Test whether copysign() can be used without libm. AC_CACHE_CHECK([whether copysign can be used without linking with libm], [gl_cv_func_copysign_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> double x, y;]], [[return copysign (x, y) < 0;]])], [gl_cv_func_copysign_no_libm=yes], [gl_cv_func_copysign_no_libm=no]) ]) if test $gl_cv_func_copysign_no_libm = yes; then AC_DEFINE([HAVE_COPYSIGN_IN_LIBC], [1], [Define if the copysign function is declared in <math.h> and available in libc.]) fi fi fi if test "$gl_cv_cc_long_double_signbit" = unknown; then dnl Test whether copysignl() is declared. AC_CHECK_DECLS([copysignl], , , [[#include <math.h>]]) if test "$ac_cv_have_decl_copysignl" = yes; then dnl Test whether copysignl() can be used without libm. AC_CACHE_CHECK([whether copysignl can be used without linking with libm], [gl_cv_func_copysignl_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> long double x, y;]], [[return copysignl (x, y) < 0;]])], [gl_cv_func_copysignl_no_libm=yes], [gl_cv_func_copysignl_no_libm=no]) ]) if test $gl_cv_func_copysignl_no_libm = yes; then AC_DEFINE([HAVE_COPYSIGNL_IN_LIBC], [1], [Define if the copysignl function is declared in <math.h> and available in libc.]) fi fi fi fi ]) AC_DEFUN([gl_SIGNBIT_TEST_PROGRAM], [[ /* Global variables. Needed because GCC 4 constant-folds __builtin_signbitl (literal) but cannot constant-fold __builtin_signbitl (variable). */ float vf; double vd; long double vl; int main () { /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. So we use -p0f and -p0d instead. */ float p0f = 0.0f; float m0f = -p0f; double p0d = 0.0; double m0d = -p0d; /* On HP-UX 10.20, negating 0.0L does not yield -0.0L. So we use another constant expression instead. But that expression does not work on other platforms, such as when cross-compiling to PowerPC on Mac OS X 10.5. */ long double p0l = 0.0L; #if defined __hpux || defined __sgi long double m0l = -LDBL_MIN * LDBL_MIN; #else long double m0l = -p0l; #endif int result = 0; if (signbit (vf)) /* link check */ vf++; { float plus_inf = 1.0f / p0f; float minus_inf = -1.0f / p0f; if (!(!signbit (255.0f) && signbit (-255.0f) && !signbit (p0f) && (memcmp (&m0f, &p0f, sizeof (float)) == 0 || signbit (m0f)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 1; } if (signbit (vd)) /* link check */ vd++; { double plus_inf = 1.0 / p0d; double minus_inf = -1.0 / p0d; if (!(!signbit (255.0) && signbit (-255.0) && !signbit (p0d) && (memcmp (&m0d, &p0d, sizeof (double)) == 0 || signbit (m0d)) && !signbit (plus_inf) && signbit (minus_inf))) result |= 2; } if (signbit (vl)) /* link check */ vl++; { long double plus_inf = 1.0L / p0l; long double minus_inf = -1.0L / p0l; if (signbit (255.0L)) result |= 4; if (!signbit (-255.0L)) result |= 4; if (signbit (p0l)) result |= 8; if (!(memcmp (&m0l, &p0l, sizeof (long double)) == 0 || signbit (m0l))) result |= 16; if (signbit (plus_inf)) result |= 32; if (!signbit (minus_inf)) result |= 64; } return result; } ]]) AC_DEFUN([gl_FLOAT_SIGN_LOCATION], [ gl_FLOATTYPE_SIGN_LOCATION([float], [gl_cv_cc_float_signbit], [f], [FLT]) ]) AC_DEFUN([gl_DOUBLE_SIGN_LOCATION], [ gl_FLOATTYPE_SIGN_LOCATION([double], [gl_cv_cc_double_signbit], [], [DBL]) ]) AC_DEFUN([gl_LONG_DOUBLE_SIGN_LOCATION], [ gl_FLOATTYPE_SIGN_LOCATION([long double], [gl_cv_cc_long_double_signbit], [L], [LDBL]) ]) AC_DEFUN([gl_FLOATTYPE_SIGN_LOCATION], [ AC_CACHE_CHECK([where to find the sign bit in a '$1'], [$2], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stddef.h> #include <stdio.h> #define NWORDS \ ((sizeof ($1) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { $1 value; unsigned int word[NWORDS]; } memory_float; static memory_float plus = { 1.0$3 }; static memory_float minus = { -1.0$3 }; int main () { size_t j, k, i; unsigned int m; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; /* Find the different bit. */ k = 0; m = 0; for (j = 0; j < NWORDS; j++) { unsigned int x = plus.word[j] ^ minus.word[j]; if ((x & (x - 1)) || (x && m)) { /* More than one bit difference. */ fprintf (fp, "unknown"); fclose (fp); return 2; } if (x) { k = j; m = x; } } if (m == 0) { /* No difference. */ fprintf (fp, "unknown"); fclose (fp); return 3; } /* Now m = plus.word[k] ^ ~minus.word[k]. */ if (plus.word[k] & ~minus.word[k]) { /* Oh? The sign bit is set in the positive and cleared in the negative numbers? */ fprintf (fp, "unknown"); fclose (fp); return 4; } for (i = 0; ; i++) if ((m >> i) & 1) break; fprintf (fp, "word %d bit %d", (int) k, (int) i); if (fclose (fp) != 0) return 5; return 0; } ]])], [$2=`cat conftest.out`], [$2="unknown"], [ dnl When cross-compiling, we don't know. It depends on the dnl ABI and compiler version. There are too many cases. $2="unknown" ]) rm -f conftest.out ]) case "$]$2[" in word*bit*) word=`echo "$]$2[" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$]$2[" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([$4][_SIGNBIT_WORD], [$word], [Define as the word index where to find the sign of '$1'.]) AC_DEFINE_UNQUOTED([$4][_SIGNBIT_BIT], [$bit], [Define as the bit index in the word where to find the sign of '$1'.]) ;; esac ]) # Expands to code that defines a function signbitf(float). # It extracts the sign bit of a non-NaN value. AC_DEFUN([gl_FLOAT_SIGNBIT_CODE], [ gl_FLOATTYPE_SIGNBIT_CODE([float], [f], [f]) ]) # Expands to code that defines a function signbitd(double). # It extracts the sign bit of a non-NaN value. AC_DEFUN([gl_DOUBLE_SIGNBIT_CODE], [ gl_FLOATTYPE_SIGNBIT_CODE([double], [d], []) ]) # Expands to code that defines a function signbitl(long double). # It extracts the sign bit of a non-NaN value. AC_DEFUN([gl_LONG_DOUBLE_SIGNBIT_CODE], [ gl_FLOATTYPE_SIGNBIT_CODE([long double], [l], [L]) ]) AC_DEFUN([gl_FLOATTYPE_SIGNBIT_CODE], [[ static int signbit$2 ($1 value) { typedef union { $1 f; unsigned char b[sizeof ($1)]; } float_union; static float_union plus_one = { 1.0$3 }; /* unused bits are zero here */ static float_union minus_one = { -1.0$3 }; /* unused bits are zero here */ /* Compute the sign bit mask as the XOR of plus_one and minus_one. */ float_union u; unsigned int i; u.f = value; for (i = 0; i < sizeof ($1); i++) if (u.b[i] & (plus_one.b[i] ^ minus_one.b[i])) return 1; return 0; } ]]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/mempcpy.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000001337�14226564447�012362� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mempcpy.m4 serial 12 dnl Copyright (C) 2003-2004, 2006-2007, 2009-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMPCPY], [ dnl Persuade glibc <string.h> to declare mempcpy(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl The mempcpy() declaration in lib/string.in.h uses 'restrict'. AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([mempcpy]) if test $ac_cv_func_mempcpy = no; then HAVE_MEMPCPY=0 fi ]) # Prerequisites of lib/mempcpy.c. AC_DEFUN([gl_PREREQ_MEMPCPY], [ : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/mmap-anon.m4������������������������������������������������������������������������0000644�0000000�0000000�00000003747�14226564452�012576� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mmap-anon.m4 serial 12 dnl Copyright (C) 2005, 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Detect how mmap can be used to create anonymous (not file-backed) memory # mappings. # - On Linux, AIX, OSF/1, Solaris, Cygwin, Interix, Haiku, both MAP_ANONYMOUS # and MAP_ANON exist and have the same value. # - On HP-UX, only MAP_ANONYMOUS exists. # - On Mac OS X, FreeBSD, NetBSD, OpenBSD, Minix, only MAP_ANON exists. # - On IRIX, neither exists, and a file descriptor opened to /dev/zero must be # used. AC_DEFUN_ONCE([gl_FUNC_MMAP_ANON], [ dnl Persuade glibc <sys/mman.h> to define MAP_ANONYMOUS. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # Check for mmap(). Don't use AC_FUNC_MMAP, because it checks too much: it # fails on HP-UX 11, because MAP_FIXED mappings do not work. But this is # irrelevant for anonymous mappings. AC_CHECK_FUNC([mmap], [gl_have_mmap=yes], [gl_have_mmap=no]) # Try to allow MAP_ANONYMOUS. gl_have_mmap_anonymous=no if test $gl_have_mmap = yes; then AC_MSG_CHECKING([for MAP_ANONYMOUS]) AC_EGREP_CPP([I cannot identify this map], [ #include <sys/mman.h> #ifdef MAP_ANONYMOUS I cannot identify this map #endif ], [gl_have_mmap_anonymous=yes]) if test $gl_have_mmap_anonymous != yes; then AC_EGREP_CPP([I cannot identify this map], [ #include <sys/mman.h> #ifdef MAP_ANON I cannot identify this map #endif ], [AC_DEFINE([MAP_ANONYMOUS], [MAP_ANON], [Define to a substitute value for mmap()'s MAP_ANONYMOUS flag.]) gl_have_mmap_anonymous=yes]) fi AC_MSG_RESULT([$gl_have_mmap_anonymous]) if test $gl_have_mmap_anonymous = yes; then AC_DEFINE([HAVE_MAP_ANONYMOUS], [1], [Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including config.h and <sys/mman.h>.]) fi fi ]) �������������������������recutils-1.9/m4/stat.m4�����������������������������������������������������������������������������0000644�0000000�0000000�00000005457�14226564452�011666� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 18 # Copyright (C) 2009-2022 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([lstat]) case "$host_os" in mingw*) dnl On this platform, the original stat() returns st_atime, st_mtime, dnl st_ctime values that are affected by the time zone. REPLACE_STAT=1 ;; *) dnl AIX 7.1, Solaris 9, mingw64 mistakenly succeed on stat("file/"). dnl (For mingw, this is due to a broken stat() override in libmingwex.a.) dnl FreeBSD 7.2 mistakenly succeeds on stat("link-to-file/"). AC_CACHE_CHECK([whether stat handles trailing slashes on files], [gl_cv_func_stat_file_slash], [touch conftest.tmp # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/stat.h> ]], [[int result = 0; struct stat st; if (!stat ("conftest.tmp/", &st)) result |= 1; #if HAVE_LSTAT if (!stat ("conftest.lnk/", &st)) result |= 2; #endif return result; ]])], [gl_cv_func_stat_file_slash=yes], [gl_cv_func_stat_file_slash=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_stat_file_slash="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_stat_file_slash="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_stat_file_slash="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.tmp conftest.lnk]) case $gl_cv_func_stat_file_slash in *no) REPLACE_STAT=1 AC_DEFINE([REPLACE_FUNC_STAT_FILE], [1], [Define to 1 if stat needs help when passed a file name with a trailing slash]);; esac case $host_os in dnl Solaris stat can return a negative tv_nsec. solaris*) REPLACE_FSTAT=1 ;; esac ;; esac ]) # Prerequisites of lib/stat.c and lib/stat-w32.c. AC_DEFUN([gl_PREREQ_STAT], [ AC_REQUIRE([gl_SYS_STAT_H]) AC_REQUIRE([gl_PREREQ_STAT_W32]) : ]) # Prerequisites of lib/stat-w32.c. AC_DEFUN([gl_PREREQ_STAT_W32], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_CHECK_HEADERS([sdkddkver.h]) ;; esac ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/getprogname.m4����������������������������������������������������������������������0000644�0000000�0000000�00000002633�14226564452�013214� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getprogname.m4 - check for getprogname or replacements for it # Copyright (C) 2016-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # serial 4 AC_DEFUN([gl_FUNC_GETPROGNAME], [ AC_CHECK_FUNCS_ONCE([getprogname getexecname]) AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) ac_found=0 AC_CHECK_DECLS([program_invocation_name], [ac_found=1], [], [#include <errno.h>]) AC_CHECK_DECLS([program_invocation_short_name], [ac_found=1], [], [#include <errno.h>]) AC_CHECK_DECLS([__argv], [ac_found=1], [], [#include <stdlib.h>]) # Incur the cost of this test only if none of the above worked. if test $ac_found = 0; then # On OpenBSD 5.1, using the global __progname variable appears to be # the only way to implement getprogname. AC_CACHE_CHECK([whether __progname is defined in default libraries], [gl_cv_var___progname], [ gl_cv_var___progname= AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern char *__progname;]], [[return *__progname;]] )], [gl_cv_var___progname=yes] ) ] ) if test "$gl_cv_var___progname" = yes; then AC_DEFINE([HAVE_VAR___PROGNAME], 1, [Define if you have a global __progname variable]) fi fi ]) �����������������������������������������������������������������������������������������������������recutils-1.9/m4/wint_t.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000003433�14226564453�012210� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wint_t.m4 serial 11 dnl Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether <wchar.h> has the 'wint_t' type and whether gnulib's dnl <wchar.h> or <wctype.h> would, if present, override 'wint_t'. dnl Prerequisite: AC_PROG_CC AC_DEFUN([gt_TYPE_WINT_T], [ AC_CACHE_CHECK([for wint_t], [gt_cv_c_wint_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> wint_t foo = (wchar_t)'\0';]], [[]])], [gt_cv_c_wint_t=yes], [gt_cv_c_wint_t=no])]) if test $gt_cv_c_wint_t = yes; then AC_DEFINE([HAVE_WINT_T], [1], [Define if you have the 'wint_t' type.]) dnl Determine whether gnulib's <wchar.h> or <wctype.h> would, if present, dnl override 'wint_t'. AC_CACHE_CHECK([whether wint_t is large enough], [gl_cv_type_wint_t_large_enough], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h> int verify[sizeof (wint_t) < sizeof (int) ? -1 : 1]; ]])], [gl_cv_type_wint_t_large_enough=yes], [gl_cv_type_wint_t_large_enough=no])]) if test $gl_cv_type_wint_t_large_enough = no; then GNULIBHEADERS_OVERRIDE_WINT_T=1 else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi else GNULIBHEADERS_OVERRIDE_WINT_T=0 fi AC_SUBST([GNULIBHEADERS_OVERRIDE_WINT_T]) ]) dnl Prerequisites of the 'wint_t' override. AC_DEFUN([gl_TYPE_WINT_T_PREREQ], [ AC_CHECK_HEADERS_ONCE([crtdefs.h]) if test $ac_cv_header_crtdefs_h = yes; then HAVE_CRTDEFS_H=1 else HAVE_CRTDEFS_H=0 fi AC_SUBST([HAVE_CRTDEFS_H]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/sys_stat_h.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000012054�14226564452�013062� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_stat_h.m4 serial 41 -*- Autoconf -*- dnl Copyright (C) 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Eric Blake. dnl Provide a GNU-like <sys/stat.h>. AC_DEFUN_ONCE([gl_SYS_STAT_H], [ AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) dnl Check for broken stat macros. AC_REQUIRE([AC_HEADER_STAT]) gl_CHECK_NEXT_HEADERS([sys/stat.h]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Whether to enable precise timestamps in 'struct stat'. m4_ifdef([gl_WINDOWS_STAT_TIMESPEC], [ AC_REQUIRE([gl_WINDOWS_STAT_TIMESPEC]) ], [ WINDOWS_STAT_TIMESPEC=0 ]) AC_SUBST([WINDOWS_STAT_TIMESPEC]) dnl Whether to ensure that struct stat.st_size is 64-bit wide. m4_ifdef([gl_LARGEFILE], [ AC_REQUIRE([gl_LARGEFILE]) ], [ WINDOWS_64_BIT_ST_SIZE=0 ]) AC_SUBST([WINDOWS_64_BIT_ST_SIZE]) dnl Define types that are supposed to be defined in <sys/types.h> or dnl <sys/stat.h>. AC_CHECK_TYPE([nlink_t], [], [AC_DEFINE([nlink_t], [int], [Define to the type of st_nlink in struct stat, or a supertype.])], [#include <sys/types.h> #include <sys/stat.h>]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <sys/stat.h> ]], [fchmodat fstat fstatat futimens getumask lchmod lstat mkdirat mkfifo mkfifoat mknod mknodat stat utimensat]) AC_REQUIRE([AC_C_RESTRICT]) ]) # gl_SYS_STAT_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_STAT_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_STAT_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_STAT_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_STAT_H_MODULE_INDICATOR_DEFAULTS], [ gl_UNISTD_H_REQUIRE_DEFAULTS dnl for REPLACE_FCHDIR gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCHMODAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSTAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSTATAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FUTIMENS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETUMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LCHMOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LSTAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKDIRAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKFIFO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKFIFOAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKNOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKNODAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_UTIMENSAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OVERRIDES_STRUCT_STAT]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CHMOD], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_MKDIR], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_UMASK], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_STAT_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_STAT_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCHMODAT=1; AC_SUBST([HAVE_FCHMODAT]) HAVE_FSTATAT=1; AC_SUBST([HAVE_FSTATAT]) HAVE_FUTIMENS=1; AC_SUBST([HAVE_FUTIMENS]) HAVE_GETUMASK=1; AC_SUBST([HAVE_GETUMASK]) HAVE_LCHMOD=1; AC_SUBST([HAVE_LCHMOD]) HAVE_LSTAT=1; AC_SUBST([HAVE_LSTAT]) HAVE_MKDIRAT=1; AC_SUBST([HAVE_MKDIRAT]) HAVE_MKFIFO=1; AC_SUBST([HAVE_MKFIFO]) HAVE_MKFIFOAT=1; AC_SUBST([HAVE_MKFIFOAT]) HAVE_MKNOD=1; AC_SUBST([HAVE_MKNOD]) HAVE_MKNODAT=1; AC_SUBST([HAVE_MKNODAT]) HAVE_UTIMENSAT=1; AC_SUBST([HAVE_UTIMENSAT]) REPLACE_FCHMODAT=0; AC_SUBST([REPLACE_FCHMODAT]) REPLACE_FSTAT=0; AC_SUBST([REPLACE_FSTAT]) REPLACE_FSTATAT=0; AC_SUBST([REPLACE_FSTATAT]) REPLACE_FUTIMENS=0; AC_SUBST([REPLACE_FUTIMENS]) REPLACE_LSTAT=0; AC_SUBST([REPLACE_LSTAT]) REPLACE_MKDIR=0; AC_SUBST([REPLACE_MKDIR]) REPLACE_MKFIFO=0; AC_SUBST([REPLACE_MKFIFO]) REPLACE_MKFIFOAT=0; AC_SUBST([REPLACE_MKFIFOAT]) REPLACE_MKNOD=0; AC_SUBST([REPLACE_MKNOD]) REPLACE_MKNODAT=0; AC_SUBST([REPLACE_MKNODAT]) REPLACE_STAT=0; AC_SUBST([REPLACE_STAT]) REPLACE_UTIMENSAT=0; AC_SUBST([REPLACE_UTIMENSAT]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/vasnprintf-posix.m4�����������������������������������������������������������������0000644�0000000�0000000�00000010266�14226564453�014240� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasnprintf-posix.m4 serial 13 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VASNPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_vasnprintf_posix=no AC_CHECK_FUNCS_ONCE([vasnprintf]) case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) if test $ac_cv_func_vasnprintf = yes; then # vasnprintf exists and is # already POSIX compliant. gl_cv_func_vasnprintf_posix=yes fi ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_vasnprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/getgroups.m4������������������������������������������������������������������������0000644�0000000�0000000�00000007747�14226564452�012736� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 24 dnl From Jim Meyering. dnl A wrapper around AC_FUNC_GETGROUPS. # Copyright (C) 1996-1997, 1999-2004, 2008-2022 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This is taken from the following Autoconf patch: # https://git.savannah.gnu.org/gitweb/?p=autoconf.git;a=commitdiff;h=7fbb553727ed7e0e689a17594b58559ecf3ea6e9 AC_DEFUN([AC_FUNC_GETGROUPS], [ AC_REQUIRE([AC_TYPE_GETGROUPS])dnl AC_REQUIRE([AC_TYPE_SIZE_T])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl for cross-compiles AC_CHECK_FUNC([getgroups]) # If we don't yet have getgroups, see if it's in -lbsd. # This is reported to be necessary on an ITOS 3000WS running SEIUX 3.1. ac_save_LIBS=$LIBS if test $ac_cv_func_getgroups = no; then AC_CHECK_LIB(bsd, getgroups, [GETGROUPS_LIB=-lbsd]) fi # Run the program to test the functionality of the system-supplied # getgroups function only if there is such a function. if test $ac_cv_func_getgroups = yes; then AC_CACHE_CHECK([for working getgroups], [ac_cv_func_getgroups_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT], [[/* On NeXTstep 3.2, getgroups (0, 0) always fails. */ return getgroups (0, 0) == -1;]]) ], [ac_cv_func_getgroups_works=yes], [ac_cv_func_getgroups_works=no], [case "$host_os" in # (( # Guess yes on glibc systems. *-gnu* | gnu*) ac_cv_func_getgroups_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) ac_cv_func_getgroups_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) ac_cv_func_getgroups_works="$gl_cross_guess_normal" ;; esac ]) ]) else ac_cv_func_getgroups_works=no fi case "$ac_cv_func_getgroups_works" in *yes) AC_DEFINE([HAVE_GETGROUPS], [1], [Define to 1 if your system has a working `getgroups' function.]) ;; esac LIBS=$ac_save_LIBS ])# AC_FUNC_GETGROUPS AC_DEFUN([gl_FUNC_GETGROUPS], [ AC_REQUIRE([AC_TYPE_GETGROUPS]) AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_FUNC_GETGROUPS if test $ac_cv_func_getgroups != yes; then HAVE_GETGROUPS=0 else if test "$ac_cv_type_getgroups" != gid_t \ || { case "$ac_cv_func_getgroups_works" in *yes) false;; *) true;; esac }; then REPLACE_GETGROUPS=1 AC_DEFINE([GETGROUPS_ZERO_BUG], [1], [Define this to 1 if getgroups(0,NULL) does not return the number of groups.]) else dnl Detect Mac OS X and FreeBSD bug; POSIX requires getgroups(-1,ptr) dnl to fail. AC_CACHE_CHECK([whether getgroups handles negative values], [gl_cv_func_getgroups_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([AC_INCLUDES_DEFAULT], [[int size = getgroups (0, 0); gid_t *list = malloc (size * sizeof *list); int result = getgroups (-1, list) != -1; free (list); return result;]])], [gl_cv_func_getgroups_works=yes], [gl_cv_func_getgroups_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_getgroups_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_getgroups_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_getgroups_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_getgroups_works" in *yes) ;; *) REPLACE_GETGROUPS=1 ;; esac fi fi test -n "$GETGROUPS_LIB" && LIBS="$GETGROUPS_LIB $LIBS" ]) �������������������������recutils-1.9/m4/limits-h.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000002276�14226564452�012435� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Check whether limits.h has needed features. dnl Copyright 2016-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_DEFUN_ONCE([gl_LIMITS_H], [ gl_CHECK_NEXT_HEADERS([limits.h]) AC_CACHE_CHECK([whether limits.h has WORD_BIT, BOOL_WIDTH etc.], [gl_cv_header_limits_width], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#ifndef __STDC_WANT_IEC_60559_BFP_EXT__ #define __STDC_WANT_IEC_60559_BFP_EXT__ 1 #endif #include <limits.h> long long llm = LLONG_MAX; int wb = WORD_BIT; int ullw = ULLONG_WIDTH; int bw = BOOL_WIDTH; ]])], [gl_cv_header_limits_width=yes], [gl_cv_header_limits_width=no])]) if test "$gl_cv_header_limits_width" = yes; then GL_GENERATE_LIMITS_H=false else GL_GENERATE_LIMITS_H=true fi ]) dnl Unconditionally enables the replacement of <limits.h>. AC_DEFUN([gl_REPLACE_LIMITS_H], [ AC_REQUIRE([gl_LIMITS_H]) GL_GENERATE_LIMITS_H=true ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/errno_h.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000005642�14226564451�012342� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# errno_h.m4 serial 14 dnl Copyright (C) 2004, 2006, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.61]) AC_DEFUN_ONCE([gl_HEADER_ERRNO_H], [ AC_REQUIRE([AC_PROG_CC]) AC_CACHE_CHECK([for complete errno.h], [gl_cv_header_errno_h_complete], [ AC_EGREP_CPP([booboo],[ #include <errno.h> #if !defined ETXTBSY booboo #endif #if !defined ENOMSG booboo #endif #if !defined EIDRM booboo #endif #if !defined ENOLINK booboo #endif #if !defined EPROTO booboo #endif #if !defined EMULTIHOP booboo #endif #if !defined EBADMSG booboo #endif #if !defined EOVERFLOW booboo #endif #if !defined ENOTSUP booboo #endif #if !defined ENETRESET booboo #endif #if !defined ECONNABORTED booboo #endif #if !defined ESTALE booboo #endif #if !defined EDQUOT booboo #endif #if !defined ECANCELED booboo #endif #if !defined EOWNERDEAD booboo #endif #if !defined ENOTRECOVERABLE booboo #endif #if !defined EILSEQ booboo #endif ], [gl_cv_header_errno_h_complete=no], [gl_cv_header_errno_h_complete=yes]) ]) if test $gl_cv_header_errno_h_complete = yes; then GL_GENERATE_ERRNO_H=false else gl_NEXT_HEADERS([errno.h]) GL_GENERATE_ERRNO_H=true fi gl_REPLACE_ERRNO_VALUE([EMULTIHOP]) gl_REPLACE_ERRNO_VALUE([ENOLINK]) gl_REPLACE_ERRNO_VALUE([EOVERFLOW]) ]) # Assuming $1 = EOVERFLOW. # The EOVERFLOW errno value ought to be defined in <errno.h>, according to # POSIX. But some systems (like OpenBSD 4.0 or AIX 3) don't define it, and # some systems (like OSF/1) define it when _XOPEN_SOURCE_EXTENDED is defined. # Check for the value of EOVERFLOW. # Set the variables EOVERFLOW_HIDDEN and EOVERFLOW_VALUE. AC_DEFUN([gl_REPLACE_ERRNO_VALUE], [ if $GL_GENERATE_ERRNO_H; then AC_CACHE_CHECK([for ]$1[ value], [gl_cv_header_errno_h_]$1, [ AC_EGREP_CPP([yes],[ #include <errno.h> #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=yes], [gl_cv_header_errno_h_]$1[=no]) if test $gl_cv_header_errno_h_]$1[ = no; then AC_EGREP_CPP([yes],[ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> #ifdef ]$1[ yes #endif ], [gl_cv_header_errno_h_]$1[=hidden]) if test $gl_cv_header_errno_h_]$1[ = hidden; then dnl The macro exists but is hidden. dnl Define it to the same value. AC_COMPUTE_INT([gl_cv_header_errno_h_]$1, $1, [ #define _XOPEN_SOURCE_EXTENDED 1 #include <errno.h> /* The following two lines are a workaround against an autoconf-2.52 bug. */ #include <stdio.h> #include <stdlib.h> ]) fi fi ]) case $gl_cv_header_errno_h_]$1[ in yes | no) ]$1[_HIDDEN=0; ]$1[_VALUE= ;; *) ]$1[_HIDDEN=1; ]$1[_VALUE="$gl_cv_header_errno_h_]$1[" ;; esac AC_SUBST($1[_HIDDEN]) AC_SUBST($1[_VALUE]) fi ]) ����������������������������������������������������������������������������������������������recutils-1.9/m4/mode_t.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000002342�14226564452�012150� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mode_t.m4 serial 2 dnl Copyright (C) 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # For using mode_t, it's sufficient to use AC_TYPE_MODE_T and # include <sys/types.h>. # Define PROMOTED_MODE_T to the type that is the result of "default argument # promotion" (ISO C 6.5.2.2.(6)) of the type mode_t. AC_DEFUN([gl_PROMOTED_TYPE_MODE_T], [ AC_REQUIRE([AC_TYPE_MODE_T]) AC_CACHE_CHECK([for promoted mode_t type], [gl_cv_promoted_mode_t], [ dnl Assume mode_t promotes to 'int' if and only if it is smaller than 'int', dnl and to itself otherwise. This assumption is not guaranteed by the ISO C dnl standard, but we don't know of any real-world counterexamples. AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <sys/types.h>]], [[typedef int array[2 * (sizeof (mode_t) < sizeof (int)) - 1];]])], [gl_cv_promoted_mode_t='int'], [gl_cv_promoted_mode_t='mode_t']) ]) AC_DEFINE_UNQUOTED([PROMOTED_MODE_T], [$gl_cv_promoted_mode_t], [Define to the type that is the result of default argument promotions of type mode_t.]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/setlocale_null.m4�������������������������������������������������������������������0000644�0000000�0000000�00000007222�14226564452�013710� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# setlocale_null.m4 serial 5 dnl Copyright (C) 2019-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_SETLOCALE_NULL], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_PTHREADLIB]) AC_CHECK_HEADERS_ONCE([threads.h]) AC_CACHE_CHECK([whether setlocale (LC_ALL, NULL) is multithread-safe], [gl_cv_func_setlocale_null_all_mtsafe], [case "$host_os" in # Guess no on musl libc, macOS, FreeBSD, NetBSD, OpenBSD, AIX, Haiku, Cygwin. *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | openbsd* | aix* | haiku* | cygwin*) gl_cv_func_setlocale_null_all_mtsafe=no ;; # Guess yes on glibc, HP-UX, IRIX, Solaris, native Windows. *-gnu* | gnu* | hpux* | irix* | solaris* | mingw*) gl_cv_func_setlocale_null_all_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_all_mtsafe="$gl_cross_guess_normal" ;; esac ]) dnl On platforms without multithreading, there is no issue. case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_all_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_all_mtsafe" in *yes) SETLOCALE_NULL_ALL_MTSAFE=1 ;; *) SETLOCALE_NULL_ALL_MTSAFE=0 ;; esac AC_DEFINE_UNQUOTED([SETLOCALE_NULL_ALL_MTSAFE], [$SETLOCALE_NULL_ALL_MTSAFE], [Define to 1 if setlocale (LC_ALL, NULL) is multithread-safe.]) dnl This is about a single category (not LC_ALL). AC_CACHE_CHECK([whether setlocale (category, NULL) is multithread-safe], [gl_cv_func_setlocale_null_one_mtsafe], [case "$host_os" in # Guess no on OpenBSD, AIX. openbsd* | aix*) gl_cv_func_setlocale_null_one_mtsafe=no ;; # Guess yes on glibc, musl libc, macOS, FreeBSD, NetBSD, HP-UX, IRIX, Solaris, Haiku, Cygwin, native Windows. *-gnu* | gnu* | *-musl* | darwin* | freebsd* | midnightbsd* | netbsd* | hpux* | irix* | solaris* | haiku* | cygwin* | mingw*) gl_cv_func_setlocale_null_one_mtsafe=yes ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_setlocale_null_one_mtsafe="$gl_cross_guess_normal" ;; esac ]) dnl On platforms without multithreading, there is no issue. case "$host_os" in mingw*) ;; *) if test $gl_pthread_api = no && test $ac_cv_header_threads_h = no; then gl_cv_func_setlocale_null_one_mtsafe="trivially yes" fi ;; esac case "$gl_cv_func_setlocale_null_one_mtsafe" in *yes) SETLOCALE_NULL_ONE_MTSAFE=1 ;; *) SETLOCALE_NULL_ONE_MTSAFE=0 ;; esac AC_DEFINE_UNQUOTED([SETLOCALE_NULL_ONE_MTSAFE], [$SETLOCALE_NULL_ONE_MTSAFE], [Define to 1 if setlocale (category, NULL) is multithread-safe.]) dnl Determine link dependencies of lib/setlocale_null.c and lib/setlocale-lock.c. if test $SETLOCALE_NULL_ALL_MTSAFE = 0 || test $SETLOCALE_NULL_ONE_MTSAFE = 0; then case "$host_os" in mingw*) LIB_SETLOCALE_NULL= ;; *) gl_WEAK_SYMBOLS case "$gl_cv_have_weak" in *yes) LIB_SETLOCALE_NULL= ;; *) LIB_SETLOCALE_NULL="$LIBPTHREAD" ;; esac ;; esac else LIB_SETLOCALE_NULL= fi dnl LIB_SETLOCALE_NULL is expected to be '-pthread' or '-lpthread' on AIX dnl with gcc or xlc, and empty otherwise. AC_SUBST([LIB_SETLOCALE_NULL]) ]) # Prerequisites of lib/setlocale-lock.c. AC_DEFUN([gl_PREREQ_SETLOCALE_LOCK], [ gl_VISIBILITY ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/inttypes_h.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000001774�14226564452�013077� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inttypes_h.m4 serial 10 dnl Copyright (C) 1997-2004, 2006, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. # Define HAVE_INTTYPES_H_WITH_UINTMAX if <inttypes.h> exists, # doesn't clash with <sys/types.h>, and declares uintmax_t. AC_DEFUN([gl_AC_HEADER_INTTYPES_H], [ AC_CACHE_CHECK([for inttypes.h], [gl_cv_header_inttypes_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <sys/types.h> #include <inttypes.h> ]], [[uintmax_t i = (uintmax_t) -1; return !i;]])], [gl_cv_header_inttypes_h=yes], [gl_cv_header_inttypes_h=no])]) if test $gl_cv_header_inttypes_h = yes; then AC_DEFINE_UNQUOTED([HAVE_INTTYPES_H_WITH_UINTMAX], [1], [Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and declares uintmax_t. ]) fi ]) ����recutils-1.9/m4/math_h.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000050665�14226564452�012154� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# math_h.m4 serial 125 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_MATH_H], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([math.h]) AC_CACHE_CHECK([whether NAN macro works], [gl_cv_header_math_nan_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[/* Solaris 10 has a broken definition of NAN. Other platforms fail to provide NAN, or provide it only in C99 mode; this test only needs to fail when NAN is provided but wrong. */ float f = 1.0f; #ifdef NAN f = NAN; #endif return f == 0;]])], [gl_cv_header_math_nan_works=yes], [gl_cv_header_math_nan_works=no])]) if test $gl_cv_header_math_nan_works = no; then REPLACE_NAN=1 fi AC_CACHE_CHECK([whether HUGE_VAL works], [gl_cv_header_math_huge_val_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <math.h>]], [[/* Solaris 10 has a broken definition of HUGE_VAL. */ double d = HUGE_VAL; return d == 0;]])], [gl_cv_header_math_huge_val_works=yes], [gl_cv_header_math_huge_val_works=no])]) if test $gl_cv_header_math_huge_val_works = no; then REPLACE_HUGE_VAL=1 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <math.h>]], [acosf acosl asinf asinl atanf atanl cbrt cbrtf cbrtl ceilf ceill copysign copysignf copysignl cosf cosl coshf expf expl exp2 exp2f exp2l expm1 expm1f expm1l fabsf fabsl floorf floorl fma fmaf fmal fmod fmodf fmodl frexpf frexpl hypotf hypotl ilogb ilogbf ilogbl ldexpf ldexpl log logf logl log10 log10f log10l log1p log1pf log1pl log2 log2f log2l logb logbf logbl modf modff modfl powf remainder remainderf remainderl rint rintf rintl round roundf roundl sinf sinl sinhf sqrtf sqrtl tanf tanl tanhf trunc truncf truncl]) ]) # gl_MATH_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_MATH_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_MATH_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_MATH_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_MATH_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACOSF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ACOSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ASINF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ASINL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATANL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ATAN2F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CBRTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEIL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEILF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CEILL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGNF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COPYSIGNL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_COSHF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXP2L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_EXPM1L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FABSF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FABSL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOOR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOORF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOORL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMA]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMAF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMAL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMOD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMODF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FMODL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXPF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREXPL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_HYPOTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGBF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ILOGBL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISFINITE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISINF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNAND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ISNANL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LDEXPL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG10L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1P]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1PF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG1PL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2F]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOG2L]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGBF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOGBL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODFF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MODFL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POWF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDER]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDERF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMAINDERL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RINTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUND]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUNDF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_ROUNDL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGNBIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SINHF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SQRTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SQRTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TANHF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TRUNCL]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_J0], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_J1], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_JN], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_Y0], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_Y1], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_YN], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_MATH_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_MATH_H_DEFAULTS]) ]) AC_DEFUN([gl_MATH_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_ACOSF=1; AC_SUBST([HAVE_ACOSF]) HAVE_ACOSL=1; AC_SUBST([HAVE_ACOSL]) HAVE_ASINF=1; AC_SUBST([HAVE_ASINF]) HAVE_ASINL=1; AC_SUBST([HAVE_ASINL]) HAVE_ATANF=1; AC_SUBST([HAVE_ATANF]) HAVE_ATANL=1; AC_SUBST([HAVE_ATANL]) HAVE_ATAN2F=1; AC_SUBST([HAVE_ATAN2F]) HAVE_CBRT=1; AC_SUBST([HAVE_CBRT]) HAVE_CBRTF=1; AC_SUBST([HAVE_CBRTF]) HAVE_CBRTL=1; AC_SUBST([HAVE_CBRTL]) HAVE_COPYSIGN=1; AC_SUBST([HAVE_COPYSIGN]) HAVE_COPYSIGNL=1; AC_SUBST([HAVE_COPYSIGNL]) HAVE_COSF=1; AC_SUBST([HAVE_COSF]) HAVE_COSL=1; AC_SUBST([HAVE_COSL]) HAVE_COSHF=1; AC_SUBST([HAVE_COSHF]) HAVE_EXPF=1; AC_SUBST([HAVE_EXPF]) HAVE_EXPL=1; AC_SUBST([HAVE_EXPL]) HAVE_EXPM1=1; AC_SUBST([HAVE_EXPM1]) HAVE_EXPM1F=1; AC_SUBST([HAVE_EXPM1F]) HAVE_FABSF=1; AC_SUBST([HAVE_FABSF]) HAVE_FABSL=1; AC_SUBST([HAVE_FABSL]) HAVE_FMA=1; AC_SUBST([HAVE_FMA]) HAVE_FMAF=1; AC_SUBST([HAVE_FMAF]) HAVE_FMAL=1; AC_SUBST([HAVE_FMAL]) HAVE_FMODF=1; AC_SUBST([HAVE_FMODF]) HAVE_FMODL=1; AC_SUBST([HAVE_FMODL]) HAVE_FREXPF=1; AC_SUBST([HAVE_FREXPF]) HAVE_HYPOTF=1; AC_SUBST([HAVE_HYPOTF]) HAVE_HYPOTL=1; AC_SUBST([HAVE_HYPOTL]) HAVE_ILOGB=1; AC_SUBST([HAVE_ILOGB]) HAVE_ILOGBF=1; AC_SUBST([HAVE_ILOGBF]) HAVE_ILOGBL=1; AC_SUBST([HAVE_ILOGBL]) HAVE_ISNANF=1; AC_SUBST([HAVE_ISNANF]) HAVE_ISNAND=1; AC_SUBST([HAVE_ISNAND]) HAVE_ISNANL=1; AC_SUBST([HAVE_ISNANL]) HAVE_LDEXPF=1; AC_SUBST([HAVE_LDEXPF]) HAVE_LOGF=1; AC_SUBST([HAVE_LOGF]) HAVE_LOGL=1; AC_SUBST([HAVE_LOGL]) HAVE_LOG10F=1; AC_SUBST([HAVE_LOG10F]) HAVE_LOG10L=1; AC_SUBST([HAVE_LOG10L]) HAVE_LOG1P=1; AC_SUBST([HAVE_LOG1P]) HAVE_LOG1PF=1; AC_SUBST([HAVE_LOG1PF]) HAVE_LOG1PL=1; AC_SUBST([HAVE_LOG1PL]) HAVE_LOGBF=1; AC_SUBST([HAVE_LOGBF]) HAVE_LOGBL=1; AC_SUBST([HAVE_LOGBL]) HAVE_MODFF=1; AC_SUBST([HAVE_MODFF]) HAVE_MODFL=1; AC_SUBST([HAVE_MODFL]) HAVE_POWF=1; AC_SUBST([HAVE_POWF]) HAVE_REMAINDER=1; AC_SUBST([HAVE_REMAINDER]) HAVE_REMAINDERF=1; AC_SUBST([HAVE_REMAINDERF]) HAVE_RINT=1; AC_SUBST([HAVE_RINT]) HAVE_RINTL=1; AC_SUBST([HAVE_RINTL]) HAVE_SINF=1; AC_SUBST([HAVE_SINF]) HAVE_SINL=1; AC_SUBST([HAVE_SINL]) HAVE_SINHF=1; AC_SUBST([HAVE_SINHF]) HAVE_SQRTF=1; AC_SUBST([HAVE_SQRTF]) HAVE_SQRTL=1; AC_SUBST([HAVE_SQRTL]) HAVE_TANF=1; AC_SUBST([HAVE_TANF]) HAVE_TANL=1; AC_SUBST([HAVE_TANL]) HAVE_TANHF=1; AC_SUBST([HAVE_TANHF]) HAVE_DECL_ACOSL=1; AC_SUBST([HAVE_DECL_ACOSL]) HAVE_DECL_ASINL=1; AC_SUBST([HAVE_DECL_ASINL]) HAVE_DECL_ATANL=1; AC_SUBST([HAVE_DECL_ATANL]) HAVE_DECL_CBRTF=1; AC_SUBST([HAVE_DECL_CBRTF]) HAVE_DECL_CBRTL=1; AC_SUBST([HAVE_DECL_CBRTL]) HAVE_DECL_CEILF=1; AC_SUBST([HAVE_DECL_CEILF]) HAVE_DECL_CEILL=1; AC_SUBST([HAVE_DECL_CEILL]) HAVE_DECL_COPYSIGNF=1; AC_SUBST([HAVE_DECL_COPYSIGNF]) HAVE_DECL_COSL=1; AC_SUBST([HAVE_DECL_COSL]) HAVE_DECL_EXPL=1; AC_SUBST([HAVE_DECL_EXPL]) HAVE_DECL_EXP2=1; AC_SUBST([HAVE_DECL_EXP2]) HAVE_DECL_EXP2F=1; AC_SUBST([HAVE_DECL_EXP2F]) HAVE_DECL_EXP2L=1; AC_SUBST([HAVE_DECL_EXP2L]) HAVE_DECL_EXPM1L=1; AC_SUBST([HAVE_DECL_EXPM1L]) HAVE_DECL_FLOORF=1; AC_SUBST([HAVE_DECL_FLOORF]) HAVE_DECL_FLOORL=1; AC_SUBST([HAVE_DECL_FLOORL]) HAVE_DECL_FREXPL=1; AC_SUBST([HAVE_DECL_FREXPL]) HAVE_DECL_LDEXPL=1; AC_SUBST([HAVE_DECL_LDEXPL]) HAVE_DECL_LOGL=1; AC_SUBST([HAVE_DECL_LOGL]) HAVE_DECL_LOG10L=1; AC_SUBST([HAVE_DECL_LOG10L]) HAVE_DECL_LOG2=1; AC_SUBST([HAVE_DECL_LOG2]) HAVE_DECL_LOG2F=1; AC_SUBST([HAVE_DECL_LOG2F]) HAVE_DECL_LOG2L=1; AC_SUBST([HAVE_DECL_LOG2L]) HAVE_DECL_LOGB=1; AC_SUBST([HAVE_DECL_LOGB]) HAVE_DECL_REMAINDER=1; AC_SUBST([HAVE_DECL_REMAINDER]) HAVE_DECL_REMAINDERL=1; AC_SUBST([HAVE_DECL_REMAINDERL]) HAVE_DECL_RINTF=1; AC_SUBST([HAVE_DECL_RINTF]) HAVE_DECL_ROUND=1; AC_SUBST([HAVE_DECL_ROUND]) HAVE_DECL_ROUNDF=1; AC_SUBST([HAVE_DECL_ROUNDF]) HAVE_DECL_ROUNDL=1; AC_SUBST([HAVE_DECL_ROUNDL]) HAVE_DECL_SINL=1; AC_SUBST([HAVE_DECL_SINL]) HAVE_DECL_SQRTL=1; AC_SUBST([HAVE_DECL_SQRTL]) HAVE_DECL_TANL=1; AC_SUBST([HAVE_DECL_TANL]) HAVE_DECL_TRUNC=1; AC_SUBST([HAVE_DECL_TRUNC]) HAVE_DECL_TRUNCF=1; AC_SUBST([HAVE_DECL_TRUNCF]) HAVE_DECL_TRUNCL=1; AC_SUBST([HAVE_DECL_TRUNCL]) REPLACE_ACOSF=0; AC_SUBST([REPLACE_ACOSF]) REPLACE_ASINF=0; AC_SUBST([REPLACE_ASINF]) REPLACE_ATANF=0; AC_SUBST([REPLACE_ATANF]) REPLACE_ATAN2F=0; AC_SUBST([REPLACE_ATAN2F]) REPLACE_CBRTF=0; AC_SUBST([REPLACE_CBRTF]) REPLACE_CBRTL=0; AC_SUBST([REPLACE_CBRTL]) REPLACE_CEIL=0; AC_SUBST([REPLACE_CEIL]) REPLACE_CEILF=0; AC_SUBST([REPLACE_CEILF]) REPLACE_CEILL=0; AC_SUBST([REPLACE_CEILL]) REPLACE_COSF=0; AC_SUBST([REPLACE_COSF]) REPLACE_COSHF=0; AC_SUBST([REPLACE_COSHF]) REPLACE_EXPF=0; AC_SUBST([REPLACE_EXPF]) REPLACE_EXPL=0; AC_SUBST([REPLACE_EXPL]) REPLACE_EXPM1=0; AC_SUBST([REPLACE_EXPM1]) REPLACE_EXPM1F=0; AC_SUBST([REPLACE_EXPM1F]) REPLACE_EXPM1L=0; AC_SUBST([REPLACE_EXPM1L]) REPLACE_EXP2=0; AC_SUBST([REPLACE_EXP2]) REPLACE_EXP2L=0; AC_SUBST([REPLACE_EXP2L]) REPLACE_FABSL=0; AC_SUBST([REPLACE_FABSL]) REPLACE_FLOOR=0; AC_SUBST([REPLACE_FLOOR]) REPLACE_FLOORF=0; AC_SUBST([REPLACE_FLOORF]) REPLACE_FLOORL=0; AC_SUBST([REPLACE_FLOORL]) REPLACE_FMA=0; AC_SUBST([REPLACE_FMA]) REPLACE_FMAF=0; AC_SUBST([REPLACE_FMAF]) REPLACE_FMAL=0; AC_SUBST([REPLACE_FMAL]) REPLACE_FMOD=0; AC_SUBST([REPLACE_FMOD]) REPLACE_FMODF=0; AC_SUBST([REPLACE_FMODF]) REPLACE_FMODL=0; AC_SUBST([REPLACE_FMODL]) REPLACE_FREXPF=0; AC_SUBST([REPLACE_FREXPF]) REPLACE_FREXP=0; AC_SUBST([REPLACE_FREXP]) REPLACE_FREXPL=0; AC_SUBST([REPLACE_FREXPL]) REPLACE_HUGE_VAL=0; AC_SUBST([REPLACE_HUGE_VAL]) REPLACE_HYPOT=0; AC_SUBST([REPLACE_HYPOT]) REPLACE_HYPOTF=0; AC_SUBST([REPLACE_HYPOTF]) REPLACE_HYPOTL=0; AC_SUBST([REPLACE_HYPOTL]) REPLACE_ILOGB=0; AC_SUBST([REPLACE_ILOGB]) REPLACE_ILOGBF=0; AC_SUBST([REPLACE_ILOGBF]) REPLACE_ILOGBL=0; AC_SUBST([REPLACE_ILOGBL]) REPLACE_ISFINITE=0; AC_SUBST([REPLACE_ISFINITE]) REPLACE_ISINF=0; AC_SUBST([REPLACE_ISINF]) REPLACE_ISNAN=0; AC_SUBST([REPLACE_ISNAN]) REPLACE_LDEXPL=0; AC_SUBST([REPLACE_LDEXPL]) REPLACE_LOG=0; AC_SUBST([REPLACE_LOG]) REPLACE_LOGF=0; AC_SUBST([REPLACE_LOGF]) REPLACE_LOGL=0; AC_SUBST([REPLACE_LOGL]) REPLACE_LOG10=0; AC_SUBST([REPLACE_LOG10]) REPLACE_LOG10F=0; AC_SUBST([REPLACE_LOG10F]) REPLACE_LOG10L=0; AC_SUBST([REPLACE_LOG10L]) REPLACE_LOG1P=0; AC_SUBST([REPLACE_LOG1P]) REPLACE_LOG1PF=0; AC_SUBST([REPLACE_LOG1PF]) REPLACE_LOG1PL=0; AC_SUBST([REPLACE_LOG1PL]) REPLACE_LOG2=0; AC_SUBST([REPLACE_LOG2]) REPLACE_LOG2F=0; AC_SUBST([REPLACE_LOG2F]) REPLACE_LOG2L=0; AC_SUBST([REPLACE_LOG2L]) REPLACE_LOGB=0; AC_SUBST([REPLACE_LOGB]) REPLACE_LOGBF=0; AC_SUBST([REPLACE_LOGBF]) REPLACE_LOGBL=0; AC_SUBST([REPLACE_LOGBL]) REPLACE_MODF=0; AC_SUBST([REPLACE_MODF]) REPLACE_MODFF=0; AC_SUBST([REPLACE_MODFF]) REPLACE_MODFL=0; AC_SUBST([REPLACE_MODFL]) REPLACE_NAN=0; AC_SUBST([REPLACE_NAN]) REPLACE_REMAINDER=0; AC_SUBST([REPLACE_REMAINDER]) REPLACE_REMAINDERF=0; AC_SUBST([REPLACE_REMAINDERF]) REPLACE_REMAINDERL=0; AC_SUBST([REPLACE_REMAINDERL]) REPLACE_RINTL=0; AC_SUBST([REPLACE_RINTL]) REPLACE_ROUND=0; AC_SUBST([REPLACE_ROUND]) REPLACE_ROUNDF=0; AC_SUBST([REPLACE_ROUNDF]) REPLACE_ROUNDL=0; AC_SUBST([REPLACE_ROUNDL]) REPLACE_SIGNBIT=0; AC_SUBST([REPLACE_SIGNBIT]) REPLACE_SIGNBIT_USING_BUILTINS=0; AC_SUBST([REPLACE_SIGNBIT_USING_BUILTINS]) REPLACE_SINF=0; AC_SUBST([REPLACE_SINF]) REPLACE_SINHF=0; AC_SUBST([REPLACE_SINHF]) REPLACE_SQRTF=0; AC_SUBST([REPLACE_SQRTF]) REPLACE_SQRTL=0; AC_SUBST([REPLACE_SQRTL]) REPLACE_TANF=0; AC_SUBST([REPLACE_TANF]) REPLACE_TANHF=0; AC_SUBST([REPLACE_TANHF]) REPLACE_TRUNC=0; AC_SUBST([REPLACE_TRUNC]) REPLACE_TRUNCF=0; AC_SUBST([REPLACE_TRUNCF]) REPLACE_TRUNCL=0; AC_SUBST([REPLACE_TRUNCL]) ]) # gl_LONG_DOUBLE_VS_DOUBLE # determines whether 'long double' and 'double' have the same representation. # Sets variable HAVE_SAME_LONG_DOUBLE_AS_DOUBLE to 0 or 1, and defines # HAVE_SAME_LONG_DOUBLE_AS_DOUBLE accordingly. # The currently known platforms where this is the case are: # Linux/HPPA, Minix 3.1.8, AIX 5, AIX 6 and 7 with xlc, MSVC 9. AC_DEFUN([gl_LONG_DOUBLE_VS_DOUBLE], [ AC_CACHE_CHECK([whether long double and double are the same], [gl_cv_long_double_equals_double], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <float.h>]], [[typedef int check[sizeof (long double) == sizeof (double) && LDBL_MANT_DIG == DBL_MANT_DIG && LDBL_MAX_EXP == DBL_MAX_EXP && LDBL_MIN_EXP == DBL_MIN_EXP ? 1 : -1]; ]])], [gl_cv_long_double_equals_double=yes], [gl_cv_long_double_equals_double=no]) ]) if test $gl_cv_long_double_equals_double = yes; then AC_DEFINE([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE], [1], [Define to 1 if 'long double' and 'double' have the same representation.]) HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=1 else HAVE_SAME_LONG_DOUBLE_AS_DOUBLE=0 fi AC_SUBST([HAVE_SAME_LONG_DOUBLE_AS_DOUBLE]) ]) ���������������������������������������������������������������������������recutils-1.9/m4/__inline.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000001423�14226564451�012453� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Test for __inline keyword dnl Copyright 2017-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl___INLINE], [ AC_CACHE_CHECK([whether the compiler supports the __inline keyword], [gl_cv_c___inline], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[typedef int foo_t; static __inline foo_t foo (void) { return 0; }]], [[return foo ();]])], [gl_cv_c___inline=yes], [gl_cv_c___inline=no])]) if test $gl_cv_c___inline = yes; then AC_DEFINE([HAVE___INLINE], [1], [Define to 1 if the compiler supports the keyword '__inline'.]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/sigaction.m4������������������������������������������������������������������������0000644�0000000�0000000�00000002325�14226564452�012662� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sigaction.m4 serial 7 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Determine if sigaction interface is present. AC_DEFUN([gl_SIGACTION], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([sigaction]) if test $ac_cv_func_sigaction = yes; then AC_CHECK_MEMBERS([struct sigaction.sa_sigaction], , , [[#include <signal.h>]]) if test $ac_cv_member_struct_sigaction_sa_sigaction = no; then HAVE_STRUCT_SIGACTION_SA_SIGACTION=0 fi else HAVE_SIGACTION=0 fi ]) # Prerequisites of the part of lib/signal.in.h and of lib/sigaction.c. AC_DEFUN([gl_PREREQ_SIGACTION], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_TYPE_UID_T]) AC_REQUIRE([gl_PREREQ_SIG_HANDLER_H]) AC_CHECK_FUNCS_ONCE([sigaltstack siginterrupt]) AC_CHECK_TYPES([siginfo_t], [], [], [[ #include <signal.h> ]]) if test $ac_cv_type_siginfo_t = no; then HAVE_SIGINFO_T=0 fi ]) # Prerequisites of lib/sig-handler.h. AC_DEFUN([gl_PREREQ_SIG_HANDLER_H], [:]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/sys_random_h.m4���������������������������������������������������������������������0000644�0000000�0000000�00000004547�14226564452�013377� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sys_random_h.m4 serial 8 dnl Copyright (C) 2020-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SYS_RANDOM_H], [ AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS]) dnl <sys/random.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/random.h]) if test $ac_cv_header_sys_random_h = yes; then HAVE_SYS_RANDOM_H=1 else HAVE_SYS_RANDOM_H=0 fi AC_SUBST([HAVE_SYS_RANDOM_H]) m4_ifdef([gl_UNISTD_H_DEFAULTS], [AC_REQUIRE([gl_UNISTD_H_DEFAULTS])]) if test $ac_cv_header_sys_random_h = yes; then UNISTD_H_HAVE_SYS_RANDOM_H=1 fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_SYS_RANDOM_H /* Additional includes are needed before <sys/random.h> on uClibc and Mac OS X. */ # include <sys/types.h> # include <stdlib.h> # include <sys/random.h> #endif ]], [getrandom]) ]) # gl_SYS_RANDOM_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_RANDOM_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_RANDOM_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_RANDOM_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_RANDOM_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETRANDOM]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_RANDOM_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_RANDOM_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_RANDOM_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_GETRANDOM=1; AC_SUBST([HAVE_GETRANDOM]) REPLACE_GETRANDOM=0; AC_SUBST([REPLACE_GETRANDOM]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/eaccess.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000000705�14226564447�012314� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# eaccess.m4 serial 2 dnl Copyright (C) 2003, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_EACCESS], [ AC_CHECK_FUNC([eaccess], , [AC_DEFINE([eaccess], [access], [Define as 'access' if you don't have the eaccess() function.])]) ]) �����������������������������������������������������������recutils-1.9/m4/msvc-inval.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000001334�14226564452�012760� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# msvc-inval.m4 serial 1 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MSVC_INVAL], [ AC_CHECK_FUNCS_ONCE([_set_invalid_parameter_handler]) if test $ac_cv_func__set_invalid_parameter_handler = yes; then HAVE_MSVC_INVALID_PARAMETER_HANDLER=1 AC_DEFINE([HAVE_MSVC_INVALID_PARAMETER_HANDLER], [1], [Define to 1 on MSVC platforms that have the "invalid parameter handler" concept.]) else HAVE_MSVC_INVALID_PARAMETER_HANDLER=0 fi AC_SUBST([HAVE_MSVC_INVALID_PARAMETER_HANDLER]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fprintf-posix.m4��������������������������������������������������������������������0000644�0000000�0000000�00000010430�14226564452�013506� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fprintf-posix.m4 serial 14 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FPRINTF_POSIX], [ AC_REQUIRE([gl_PRINTF_SIZES_C99]) AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_INFINITE]) AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_N]) AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) AC_REQUIRE([gl_PRINTF_POSITIONS]) AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) AC_REQUIRE([gl_PRINTF_PRECISION]) AC_REQUIRE([gl_PRINTF_ENOMEM]) gl_cv_func_fprintf_posix=no case "$gl_cv_func_printf_sizes_c99" in *yes) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) case "$gl_cv_func_printf_directive_a" in *yes) case "$gl_cv_func_printf_directive_f" in *yes) case "$gl_cv_func_printf_directive_n" in *yes) case "$gl_cv_func_printf_directive_ls" in *yes) case "$gl_cv_func_printf_positions" in *yes) case "$gl_cv_func_printf_flag_grouping" in *yes) case "$gl_cv_func_printf_flag_leftadjust" in *yes) case "$gl_cv_func_printf_flag_zero" in *yes) case "$gl_cv_func_printf_precision" in *yes) case "$gl_cv_func_printf_enomem" in *yes) # fprintf exists and is # already POSIX compliant. gl_cv_func_fprintf_posix=yes ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac ;; esac if test $gl_cv_func_fprintf_posix = no; then gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM gl_REPLACE_VASNPRINTF gl_REPLACE_FPRINTF fi ]) AC_DEFUN([gl_REPLACE_FPRINTF], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_LIBOBJ([fprintf]) REPLACE_FPRINTF=1 AC_DEFINE([REPLACE_FPRINTF_POSIX], [1], [Define if fprintf is overridden by a POSIX compliant gnulib implementation.]) gl_PREREQ_FPRINTF ]) AC_DEFUN([gl_PREREQ_FPRINTF], [:]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/time_rz.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000003436�14226564453�012360� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Time zone functions: tzalloc, localtime_rz, etc. dnl Copyright (C) 2015-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_TIME_RZ], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_STRUCT_TIMEZONE]) # On Mac OS X 10.6, localtime loops forever with some time_t values. # See Bug#27706, Bug#27736, and # https://lists.gnu.org/r/bug-gnulib/2017-07/msg00142.html AC_CACHE_CHECK([whether localtime works even near extrema], [gl_cv_func_localtime_works], [gl_cv_func_localtime_works=yes AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #include <string.h> #include <unistd.h> #include <time.h> ]], [[ time_t t = -67768038400666600; struct tm *tm; char *tz = getenv ("TZ"); if (! (tz && strcmp (tz, "QQQ0") == 0)) return 0; alarm (2); tm = localtime (&t); /* Use TM and *TM to suppress over-optimization. */ return tm && tm->tm_isdst; ]])], [(TZ=QQQ0 ./conftest$EXEEXT) >/dev/null 2>&1 || gl_cv_func_localtime_works=no], [], [gl_cv_func_localtime_works="guessing yes"])]) if test "$gl_cv_func_localtime_works" = no; then AC_DEFINE([HAVE_LOCALTIME_INFLOOP_BUG], 1, [Define if localtime-like functions can loop forever on extreme arguments.]) fi AC_CHECK_TYPES([timezone_t], [], [], [[#include <time.h>]]) if test "$ac_cv_type_timezone_t" = yes; then HAVE_TIMEZONE_T=1 fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/lt~obsolete.m4����������������������������������������������������������������������0000644�0000000�0000000�00000013774�13253165100�013250� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lt~obsolete.m4 -- aclocal satisfying obsolete definitions. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007, 2009, 2011-2015 Free Software # Foundation, Inc. # Written by Scott James Remnant, 2004. # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 5 lt~obsolete.m4 # These exist entirely to fool aclocal when bootstrapping libtool. # # In the past libtool.m4 has provided macros via AC_DEFUN (or AU_DEFUN), # which have later been changed to m4_define as they aren't part of the # exported API, or moved to Autoconf or Automake where they belong. # # The trouble is, aclocal is a bit thick. It'll see the old AC_DEFUN # in /usr/share/aclocal/libtool.m4 and remember it, then when it sees us # using a macro with the same name in our local m4/libtool.m4 it'll # pull the old libtool.m4 in (it doesn't see our shiny new m4_define # and doesn't know about Autoconf macros at all.) # # So we provide this file, which has a silly filename so it's always # included after everything else. This provides aclocal with the # AC_DEFUNs it wants, but when m4 processes it, it doesn't do anything # because those macros already exist, or will be overwritten later. # We use AC_DEFUN over AU_DEFUN for compatibility with aclocal-1.6. # # Anytime we withdraw an AC_DEFUN or AU_DEFUN, remember to add it here. # Yes, that means every name once taken will need to remain here until # we give up compatibility with versions before 1.7, at which point # we need to keep only those names which we still refer to. # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOBSOLETE_VERSION], [m4_if([1])]) m4_ifndef([AC_LIBTOOL_LINKER_OPTION], [AC_DEFUN([AC_LIBTOOL_LINKER_OPTION])]) m4_ifndef([AC_PROG_EGREP], [AC_DEFUN([AC_PROG_EGREP])]) m4_ifndef([_LT_AC_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_AC_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_AC_SHELL_INIT], [AC_DEFUN([_LT_AC_SHELL_INIT])]) m4_ifndef([_LT_AC_SYS_LIBPATH_AIX], [AC_DEFUN([_LT_AC_SYS_LIBPATH_AIX])]) m4_ifndef([_LT_PROG_LTMAIN], [AC_DEFUN([_LT_PROG_LTMAIN])]) m4_ifndef([_LT_AC_TAGVAR], [AC_DEFUN([_LT_AC_TAGVAR])]) m4_ifndef([AC_LTDL_ENABLE_INSTALL], [AC_DEFUN([AC_LTDL_ENABLE_INSTALL])]) m4_ifndef([AC_LTDL_PREOPEN], [AC_DEFUN([AC_LTDL_PREOPEN])]) m4_ifndef([_LT_AC_SYS_COMPILER], [AC_DEFUN([_LT_AC_SYS_COMPILER])]) m4_ifndef([_LT_AC_LOCK], [AC_DEFUN([_LT_AC_LOCK])]) m4_ifndef([AC_LIBTOOL_SYS_OLD_ARCHIVE], [AC_DEFUN([AC_LIBTOOL_SYS_OLD_ARCHIVE])]) m4_ifndef([_LT_AC_TRY_DLOPEN_SELF], [AC_DEFUN([_LT_AC_TRY_DLOPEN_SELF])]) m4_ifndef([AC_LIBTOOL_PROG_CC_C_O], [AC_DEFUN([AC_LIBTOOL_PROG_CC_C_O])]) m4_ifndef([AC_LIBTOOL_SYS_HARD_LINK_LOCKS], [AC_DEFUN([AC_LIBTOOL_SYS_HARD_LINK_LOCKS])]) m4_ifndef([AC_LIBTOOL_OBJDIR], [AC_DEFUN([AC_LIBTOOL_OBJDIR])]) m4_ifndef([AC_LTDL_OBJDIR], [AC_DEFUN([AC_LTDL_OBJDIR])]) m4_ifndef([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH], [AC_DEFUN([AC_LIBTOOL_PROG_LD_HARDCODE_LIBPATH])]) m4_ifndef([AC_LIBTOOL_SYS_LIB_STRIP], [AC_DEFUN([AC_LIBTOOL_SYS_LIB_STRIP])]) m4_ifndef([AC_PATH_MAGIC], [AC_DEFUN([AC_PATH_MAGIC])]) m4_ifndef([AC_PROG_LD_GNU], [AC_DEFUN([AC_PROG_LD_GNU])]) m4_ifndef([AC_PROG_LD_RELOAD_FLAG], [AC_DEFUN([AC_PROG_LD_RELOAD_FLAG])]) m4_ifndef([AC_DEPLIBS_CHECK_METHOD], [AC_DEFUN([AC_DEPLIBS_CHECK_METHOD])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_NO_RTTI], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_NO_RTTI])]) m4_ifndef([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE], [AC_DEFUN([AC_LIBTOOL_SYS_GLOBAL_SYMBOL_PIPE])]) m4_ifndef([AC_LIBTOOL_PROG_COMPILER_PIC], [AC_DEFUN([AC_LIBTOOL_PROG_COMPILER_PIC])]) m4_ifndef([AC_LIBTOOL_PROG_LD_SHLIBS], [AC_DEFUN([AC_LIBTOOL_PROG_LD_SHLIBS])]) m4_ifndef([AC_LIBTOOL_POSTDEP_PREDEP], [AC_DEFUN([AC_LIBTOOL_POSTDEP_PREDEP])]) m4_ifndef([LT_AC_PROG_EGREP], [AC_DEFUN([LT_AC_PROG_EGREP])]) m4_ifndef([LT_AC_PROG_SED], [AC_DEFUN([LT_AC_PROG_SED])]) m4_ifndef([_LT_CC_BASENAME], [AC_DEFUN([_LT_CC_BASENAME])]) m4_ifndef([_LT_COMPILER_BOILERPLATE], [AC_DEFUN([_LT_COMPILER_BOILERPLATE])]) m4_ifndef([_LT_LINKER_BOILERPLATE], [AC_DEFUN([_LT_LINKER_BOILERPLATE])]) m4_ifndef([_AC_PROG_LIBTOOL], [AC_DEFUN([_AC_PROG_LIBTOOL])]) m4_ifndef([AC_LIBTOOL_SETUP], [AC_DEFUN([AC_LIBTOOL_SETUP])]) m4_ifndef([_LT_AC_CHECK_DLFCN], [AC_DEFUN([_LT_AC_CHECK_DLFCN])]) m4_ifndef([AC_LIBTOOL_SYS_DYNAMIC_LINKER], [AC_DEFUN([AC_LIBTOOL_SYS_DYNAMIC_LINKER])]) m4_ifndef([_LT_AC_TAGCONFIG], [AC_DEFUN([_LT_AC_TAGCONFIG])]) m4_ifndef([AC_DISABLE_FAST_INSTALL], [AC_DEFUN([AC_DISABLE_FAST_INSTALL])]) m4_ifndef([_LT_AC_LANG_CXX], [AC_DEFUN([_LT_AC_LANG_CXX])]) m4_ifndef([_LT_AC_LANG_F77], [AC_DEFUN([_LT_AC_LANG_F77])]) m4_ifndef([_LT_AC_LANG_GCJ], [AC_DEFUN([_LT_AC_LANG_GCJ])]) m4_ifndef([AC_LIBTOOL_LANG_C_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_C_CONFIG])]) m4_ifndef([_LT_AC_LANG_C_CONFIG], [AC_DEFUN([_LT_AC_LANG_C_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_CXX_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_CXX_CONFIG])]) m4_ifndef([_LT_AC_LANG_CXX_CONFIG], [AC_DEFUN([_LT_AC_LANG_CXX_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_F77_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_F77_CONFIG])]) m4_ifndef([_LT_AC_LANG_F77_CONFIG], [AC_DEFUN([_LT_AC_LANG_F77_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_GCJ_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_GCJ_CONFIG])]) m4_ifndef([_LT_AC_LANG_GCJ_CONFIG], [AC_DEFUN([_LT_AC_LANG_GCJ_CONFIG])]) m4_ifndef([AC_LIBTOOL_LANG_RC_CONFIG], [AC_DEFUN([AC_LIBTOOL_LANG_RC_CONFIG])]) m4_ifndef([_LT_AC_LANG_RC_CONFIG], [AC_DEFUN([_LT_AC_LANG_RC_CONFIG])]) m4_ifndef([AC_LIBTOOL_CONFIG], [AC_DEFUN([AC_LIBTOOL_CONFIG])]) m4_ifndef([_LT_AC_FILE_LTDLL_C], [AC_DEFUN([_LT_AC_FILE_LTDLL_C])]) m4_ifndef([_LT_REQUIRED_DARWIN_CHECKS], [AC_DEFUN([_LT_REQUIRED_DARWIN_CHECKS])]) m4_ifndef([_LT_AC_PROG_CXXCPP], [AC_DEFUN([_LT_AC_PROG_CXXCPP])]) m4_ifndef([_LT_PREPARE_SED_QUOTE_VARS], [AC_DEFUN([_LT_PREPARE_SED_QUOTE_VARS])]) m4_ifndef([_LT_PROG_ECHO_BACKSLASH], [AC_DEFUN([_LT_PROG_ECHO_BACKSLASH])]) m4_ifndef([_LT_PROG_F77], [AC_DEFUN([_LT_PROG_F77])]) m4_ifndef([_LT_PROG_FC], [AC_DEFUN([_LT_PROG_FC])]) m4_ifndef([_LT_PROG_CXX], [AC_DEFUN([_LT_PROG_CXX])]) ����recutils-1.9/m4/absolute-header.m4������������������������������������������������������������������0000644�0000000�0000000�00000010151�14226564451�013741� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# absolute-header.m4 serial 17 dnl Copyright (C) 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Derek Price. # gl_ABSOLUTE_HEADER(HEADER1 HEADER2 ...) # --------------------------------------- # Find the absolute name of a header file, testing first if the header exists. # If the header were sys/inttypes.h, this macro would define # ABSOLUTE_SYS_INTTYPES_H to the '""' quoted absolute name of sys/inttypes.h # in config.h # (e.g. '#define ABSOLUTE_SYS_INTTYPES_H "///usr/include/sys/inttypes.h"'). # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. AC_DEFUN([gl_ABSOLUTE_HEADER], [AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_PREPROC_REQUIRE()dnl m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_absolute_header], [gl_cv_absolute_]m4_defn([gl_HEADER_NAME]))dnl AC_CACHE_CHECK([absolute name of <]m4_defn([gl_HEADER_NAME])[>], [gl_absolute_header], [AS_VAR_PUSHDEF([ac_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME]))dnl AC_CHECK_HEADERS_ONCE(m4_defn([gl_HEADER_NAME]))dnl if test AS_VAR_GET([ac_header_exists]) = yes; then gl_ABSOLUTE_HEADER_ONE(m4_defn([gl_HEADER_NAME])) fi AS_VAR_POPDEF([ac_header_exists])dnl ])dnl AC_DEFINE_UNQUOTED(AS_TR_CPP([ABSOLUTE_]m4_defn([gl_HEADER_NAME])), ["AS_VAR_GET([gl_absolute_header])"], [Define this to an absolute name of <]m4_defn([gl_HEADER_NAME])[>.]) AS_VAR_POPDEF([gl_absolute_header])dnl ])dnl ])# gl_ABSOLUTE_HEADER # gl_ABSOLUTE_HEADER_ONE(HEADER) # ------------------------------ # Like gl_ABSOLUTE_HEADER, except that: # - it assumes that the header exists, # - it uses the current CPPFLAGS, # - it does not cache the result, # - it is silent. AC_DEFUN([gl_ABSOLUTE_HEADER_ONE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_LANG_CONFTEST([AC_LANG_SOURCE([[#include <]]m4_dquote([$1])[[>]])]) dnl AIX "xlc -E" and "cc -E" omit #line directives for header files dnl that contain only a #include of other header files and no dnl non-comment tokens of their own. This leads to a failure to dnl detect the absolute name of <dirent.h>, <signal.h>, <poll.h> dnl and others. The workaround is to force preservation of comments dnl through option -C. This ensures all necessary #line directives dnl are present. GCC supports option -C as well. case "$host_os" in aix*) gl_absname_cpp="$ac_cpp -C" ;; *) gl_absname_cpp="$ac_cpp" ;; esac changequote(,) case "$host_os" in mingw*) dnl For the sake of native Windows compilers (excluding gcc), dnl treat backslash as a directory separator, like /. dnl Actually, these compilers use a double-backslash as dnl directory separator, inside the dnl # line "filename" dnl directives. gl_dirsep_regex='[/\\]' ;; *) gl_dirsep_regex='\/' ;; esac dnl A sed expression that turns a string into a basic regular dnl expression, for use within "/.../". gl_make_literal_regex_sed='s,[]$^\\.*/[],\\&,g' gl_header_literal_regex=`echo '$1' \ | sed -e "$gl_make_literal_regex_sed"` gl_absolute_header_sed="/${gl_dirsep_regex}${gl_header_literal_regex}/"'{ s/.*"\(.*'"${gl_dirsep_regex}${gl_header_literal_regex}"'\)".*/\1/ s|^/[^/]|//&| p q }' changequote([,]) dnl eval is necessary to expand gl_absname_cpp. dnl Ultrix and Pyramid sh refuse to redirect output of eval, dnl so use subshell. AS_VAR_SET([gl_cv_absolute_]AS_TR_SH([[$1]]), [`(eval "$gl_absname_cpp conftest.$ac_ext") 2>&AS_MESSAGE_LOG_FD | sed -n "$gl_absolute_header_sed"`]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fcntl-o.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000011236�14226564451�012244� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fcntl-o.m4 serial 7 dnl Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_PREREQ([2.60]) # Test whether the flags O_NOATIME and O_NOFOLLOW actually work. # Define HAVE_WORKING_O_NOATIME to 1 if O_NOATIME works, or to 0 otherwise. # Define HAVE_WORKING_O_NOFOLLOW to 1 if O_NOFOLLOW works, or to 0 otherwise. AC_DEFUN([gl_FCNTL_O_FLAGS], [ dnl Persuade glibc <fcntl.h> to define O_NOATIME and O_NOFOLLOW. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS_ONCE([symlink]) AC_CACHE_CHECK([for working fcntl.h], [gl_cv_header_working_fcntl_h], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/stat.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> # include <stdlib.h> # defined sleep(n) _sleep ((n) * 1000) #endif #include <fcntl.h> ]GL_MDA_DEFINES[ #ifndef O_NOATIME #define O_NOATIME 0 #endif #ifndef O_NOFOLLOW #define O_NOFOLLOW 0 #endif static int const constants[] = { O_CREAT, O_EXCL, O_NOCTTY, O_TRUNC, O_APPEND, O_NONBLOCK, O_SYNC, O_ACCMODE, O_RDONLY, O_RDWR, O_WRONLY }; ]], [[ int result = !constants; #if HAVE_SYMLINK { static char const sym[] = "conftest.sym"; if (symlink ("/dev/null", sym) != 0) result |= 2; else { int fd = open (sym, O_WRONLY | O_NOFOLLOW | O_CREAT, 0); if (fd >= 0) { close (fd); result |= 4; } } if (unlink (sym) != 0 || symlink (".", sym) != 0) result |= 2; else { int fd = open (sym, O_RDONLY | O_NOFOLLOW); if (fd >= 0) { close (fd); result |= 4; } } unlink (sym); } #endif { static char const file[] = "confdefs.h"; int fd = open (file, O_RDONLY | O_NOATIME); if (fd < 0) result |= 8; else { struct stat st0; if (fstat (fd, &st0) != 0) result |= 16; else { char c; sleep (1); if (read (fd, &c, 1) != 1) result |= 24; else { if (close (fd) != 0) result |= 32; else { struct stat st1; if (stat (file, &st1) != 0) result |= 40; else if (st0.st_atime != st1.st_atime) result |= 64; } } } } } return result;]])], [gl_cv_header_working_fcntl_h=yes], [case $? in #( 4) gl_cv_header_working_fcntl_h='no (bad O_NOFOLLOW)';; #( 64) gl_cv_header_working_fcntl_h='no (bad O_NOATIME)';; #( 68) gl_cv_header_working_fcntl_h='no (bad O_NOATIME, O_NOFOLLOW)';; #( *) gl_cv_header_working_fcntl_h='no';; esac], [case "$host_os" in # Guess 'no' on native Windows. mingw*) gl_cv_header_working_fcntl_h='no' ;; *) gl_cv_header_working_fcntl_h=cross-compiling ;; esac ]) ]) case $gl_cv_header_working_fcntl_h in #( *O_NOATIME* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOATIME], [$ac_val], [Define to 1 if O_NOATIME works.]) case $gl_cv_header_working_fcntl_h in #( *O_NOFOLLOW* | no | cross-compiling) ac_val=0;; #( *) ac_val=1;; esac AC_DEFINE_UNQUOTED([HAVE_WORKING_O_NOFOLLOW], [$ac_val], [Define to 1 if O_NOFOLLOW works.]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/wctomb.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000000714�14226564453�012176� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wctomb.m4 serial 2 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCTOMB], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) if false; then REPLACE_WCTOMB=1 fi ]) # Prerequisites of lib/wctomb.c. AC_DEFUN([gl_PREREQ_WCTOMB], [ : ]) ����������������������������������������������������recutils-1.9/m4/stdio_h.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000025405�14226564452�012337� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdio_h.m4 serial 59 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_STDIO_H], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AH_VERBATIM([MINGW_ANSI_STDIO], [/* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif ]) AC_DEFINE([__USE_MINGW_ANSI_STDIO]) gl_NEXT_HEADERS([stdio.h]) dnl Determine whether __USE_MINGW_ANSI_STDIO makes printf and dnl inttypes.h behave like gnu instead of system; we must give our dnl printf wrapper the right attribute to match. AC_CACHE_CHECK([which flavor of printf attribute matches inttypes macros], [gl_cv_func_printf_attribute_flavor], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[ #define __STDC_FORMAT_MACROS 1 #include <stdio.h> #include <inttypes.h> /* For non-mingw systems, compilation will trivially succeed. For mingw, compilation will succeed for older mingw (system printf, "I64d") and fail for newer mingw (gnu printf, "lld"). */ #if (defined _WIN32 && ! defined __CYGWIN__) && \ (__GNUC__ > 4 || (__GNUC__ == 4 && __GNUC_MINOR__ >= 4)) extern char PRIdMAX_probe[sizeof PRIdMAX == sizeof "I64d" ? 1 : -1]; #endif ]])], [gl_cv_func_printf_attribute_flavor=system], [gl_cv_func_printf_attribute_flavor=gnu])]) if test "$gl_cv_func_printf_attribute_flavor" = gnu; then AC_DEFINE([GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU], [1], [Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__"]) fi dnl This ifdef is an optimization, to avoid performing a configure check whose dnl result is not used. But it does not make the test of dnl GNULIB_STDIO_H_NONBLOCKING or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_READ_FUNCS=1 fi ]) dnl This ifdef is an optimization, to avoid performing a configure check whose dnl result is not used. But it does not make the test of dnl GNULIB_STDIO_H_SIGPIPE or GNULIB_SIGPIPE redundant. m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_STDIO_WRITE_FUNCS=1 fi ]) dnl This ifdef is an optimization, to avoid performing a configure check whose dnl result is not used. But it does not make the test of dnl GNULIB_STDIO_H_NONBLOCKING or GNULIB_NONBLOCKING redundant. m4_ifdef([gl_NONBLOCKING_IO], [ gl_NONBLOCKING_IO if test $gl_cv_have_nonblocking != yes; then REPLACE_STDIO_WRITE_FUNCS=1 fi ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, and which is not dnl guaranteed by both C89 and C11. gl_WARN_ON_USE_PREPARE([[#include <stdio.h> ]], [dprintf fpurge fseeko ftello getdelim getline gets pclose popen renameat snprintf tmpfile vdprintf vsnprintf]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS_ONCE([fcloseall]) if test $ac_cv_have_decl_fcloseall = no; then HAVE_DECL_FCLOSEALL=0 fi ]) # gl_STDIO_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STDIO_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STDIO_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STDIO_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FDOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FFLUSH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FGETS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FOPEN_GNU]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPURGE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FPUTS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREAD]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FREOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FSEEKO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FTELLO]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FWRITE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETCHAR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETDELIM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETLINE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OBSTACK_PRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PCLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PERROR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTCHAR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PUTS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_REMOVE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RENAMEAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SNPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_NONBLOCKING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STDIO_H_SIGPIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TMPFILE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VASPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFSCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSCANF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VDPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VFPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VPRINTF_POSIX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSNPRINTF]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_VSPRINTF_POSIX]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FCLOSEALL], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FDOPEN], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_FILENO], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_GETW], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_PUTW], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TEMPNAM], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STDIO_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) ]) AC_DEFUN([gl_STDIO_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_FCLOSEALL=1; AC_SUBST([HAVE_DECL_FCLOSEALL]) HAVE_DECL_FPURGE=1; AC_SUBST([HAVE_DECL_FPURGE]) HAVE_DECL_FSEEKO=1; AC_SUBST([HAVE_DECL_FSEEKO]) HAVE_DECL_FTELLO=1; AC_SUBST([HAVE_DECL_FTELLO]) HAVE_DECL_GETDELIM=1; AC_SUBST([HAVE_DECL_GETDELIM]) HAVE_DECL_GETLINE=1; AC_SUBST([HAVE_DECL_GETLINE]) HAVE_DECL_OBSTACK_PRINTF=1; AC_SUBST([HAVE_DECL_OBSTACK_PRINTF]) HAVE_DECL_SNPRINTF=1; AC_SUBST([HAVE_DECL_SNPRINTF]) HAVE_DECL_VSNPRINTF=1; AC_SUBST([HAVE_DECL_VSNPRINTF]) HAVE_DPRINTF=1; AC_SUBST([HAVE_DPRINTF]) HAVE_FSEEKO=1; AC_SUBST([HAVE_FSEEKO]) HAVE_FTELLO=1; AC_SUBST([HAVE_FTELLO]) HAVE_PCLOSE=1; AC_SUBST([HAVE_PCLOSE]) HAVE_POPEN=1; AC_SUBST([HAVE_POPEN]) HAVE_RENAMEAT=1; AC_SUBST([HAVE_RENAMEAT]) HAVE_VASPRINTF=1; AC_SUBST([HAVE_VASPRINTF]) HAVE_VDPRINTF=1; AC_SUBST([HAVE_VDPRINTF]) REPLACE_DPRINTF=0; AC_SUBST([REPLACE_DPRINTF]) REPLACE_FCLOSE=0; AC_SUBST([REPLACE_FCLOSE]) REPLACE_FDOPEN=0; AC_SUBST([REPLACE_FDOPEN]) REPLACE_FFLUSH=0; AC_SUBST([REPLACE_FFLUSH]) REPLACE_FOPEN=0; AC_SUBST([REPLACE_FOPEN]) REPLACE_FOPEN_FOR_FOPEN_GNU=0; AC_SUBST([REPLACE_FOPEN_FOR_FOPEN_GNU]) REPLACE_FPRINTF=0; AC_SUBST([REPLACE_FPRINTF]) REPLACE_FPURGE=0; AC_SUBST([REPLACE_FPURGE]) REPLACE_FREOPEN=0; AC_SUBST([REPLACE_FREOPEN]) REPLACE_FSEEK=0; AC_SUBST([REPLACE_FSEEK]) REPLACE_FSEEKO=0; AC_SUBST([REPLACE_FSEEKO]) REPLACE_FTELL=0; AC_SUBST([REPLACE_FTELL]) REPLACE_FTELLO=0; AC_SUBST([REPLACE_FTELLO]) REPLACE_GETDELIM=0; AC_SUBST([REPLACE_GETDELIM]) REPLACE_GETLINE=0; AC_SUBST([REPLACE_GETLINE]) REPLACE_OBSTACK_PRINTF=0; AC_SUBST([REPLACE_OBSTACK_PRINTF]) REPLACE_PERROR=0; AC_SUBST([REPLACE_PERROR]) REPLACE_POPEN=0; AC_SUBST([REPLACE_POPEN]) REPLACE_PRINTF=0; AC_SUBST([REPLACE_PRINTF]) REPLACE_REMOVE=0; AC_SUBST([REPLACE_REMOVE]) REPLACE_RENAME=0; AC_SUBST([REPLACE_RENAME]) REPLACE_RENAMEAT=0; AC_SUBST([REPLACE_RENAMEAT]) REPLACE_SNPRINTF=0; AC_SUBST([REPLACE_SNPRINTF]) REPLACE_SPRINTF=0; AC_SUBST([REPLACE_SPRINTF]) REPLACE_STDIO_READ_FUNCS=0; AC_SUBST([REPLACE_STDIO_READ_FUNCS]) REPLACE_STDIO_WRITE_FUNCS=0; AC_SUBST([REPLACE_STDIO_WRITE_FUNCS]) REPLACE_TMPFILE=0; AC_SUBST([REPLACE_TMPFILE]) REPLACE_VASPRINTF=0; AC_SUBST([REPLACE_VASPRINTF]) REPLACE_VDPRINTF=0; AC_SUBST([REPLACE_VDPRINTF]) REPLACE_VFPRINTF=0; AC_SUBST([REPLACE_VFPRINTF]) REPLACE_VPRINTF=0; AC_SUBST([REPLACE_VPRINTF]) REPLACE_VSNPRINTF=0; AC_SUBST([REPLACE_VSNPRINTF]) REPLACE_VSPRINTF=0; AC_SUBST([REPLACE_VSPRINTF]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/exponentf.m4������������������������������������������������������������������������0000644�0000000�0000000�00000005456�14226564451�012717� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exponentf.m4 serial 2 dnl Copyright (C) 2007-2008, 2010-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FLOAT_EXPONENT_LOCATION], [ AC_CACHE_CHECK([where to find the exponent in a 'float'], [gl_cv_cc_float_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (float) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { float value; unsigned int word[NWORDS]; } memory_float; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (float x) { memory_float m; size_t i; /* Clear it first, in case sizeof (float) < sizeof (memory_float). */ memset (&m, 0, sizeof (memory_float)); m.value = x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; add_to_ored_words (0.25f); add_to_ored_words (0.5f); add_to_ored_words (1.0f); add_to_ored_words (2.0f); add_to_ored_words (4.0f); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_float_expbit0=`cat conftest.out`], [gl_cv_cc_float_expbit0="unknown"], [gl_cv_cc_float_expbit0="word 0 bit 23"]) rm -f conftest.out ]) case "$gl_cv_cc_float_expbit0" in word*bit*) word=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_float_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([FLT_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'float'.]) AC_DEFINE_UNQUOTED([FLT_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'float'.]) ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/wchar_h.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000025712�14226564453�012323� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl A placeholder for ISO C99 <wchar.h>, for platforms that have issues. dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Eric Blake. # wchar_h.m4 serial 55 AC_DEFUN_ONCE([gl_WCHAR_H], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([gl_WCHAR_H_INLINE_OK]) dnl Prepare for creating substitute <wchar.h>. dnl Check for <wchar.h> (missing in Linux uClibc when built without wide dnl character support). dnl <wchar.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([wchar.h]) if test $ac_cv_header_wchar_h = yes; then HAVE_WCHAR_H=1 else HAVE_WCHAR_H=0 fi AC_SUBST([HAVE_WCHAR_H]) AC_REQUIRE([gl_FEATURES_H]) AC_REQUIRE([gt_TYPE_WINT_T]) if test $gt_cv_c_wint_t = yes; then HAVE_WINT_T=1 else HAVE_WINT_T=0 fi AC_SUBST([HAVE_WINT_T]) AC_REQUIRE([gl_TYPE_WINT_T_PREREQ]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #include <wchar.h> ]], [btowc wctob mbsinit mbrtowc mbrlen mbsrtowcs mbsnrtowcs wcrtomb wcsrtombs wcsnrtombs wcwidth wmemchr wmemcmp wmemcpy wmemmove wmempcpy wmemset wcslen wcsnlen wcscpy wcpcpy wcsncpy wcpncpy wcscat wcsncat wcscmp wcsncmp wcscasecmp wcsncasecmp wcscoll wcsxfrm wcsdup wcschr wcsrchr wcscspn wcsspn wcspbrk wcsstr wcstok wcswidth wcsftime ]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_DECLS([wcsdup], [], [], [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wcsdup = no; then HAVE_DECL_WCSDUP=0 fi ]) dnl Check whether <wchar.h> is usable at all. AC_DEFUN([gl_WCHAR_H_INLINE_OK], [ dnl Test whether <wchar.h> suffers due to the transition from '__inline' to dnl 'gnu_inline'. See <https://sourceware.org/bugzilla/show_bug.cgi?id=4022> dnl and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=42440>. In summary, dnl glibc version 2.5 or older, together with gcc version 4.3 or newer and dnl the option -std=c99 or -std=gnu99, leads to a broken <wchar.h>. AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether <wchar.h> uses 'inline' correctly], [gl_cv_header_wchar_h_correct_inline], [gl_cv_header_wchar_h_correct_inline=yes case "$host_os" in *-gnu* | gnu*) AC_LANG_CONFTEST([ AC_LANG_SOURCE([[ #define wcstod renamed_wcstod #include <wchar.h> extern int zero (void); int main () { return zero(); } ]])]) dnl Do not rename the object file from conftest.$ac_objext to dnl conftest1.$ac_objext, as this will cause the link to fail on dnl z/OS when using the XPLINK object format (due to duplicate dnl CSECT names). Instead, temporarily redefine $ac_compile so dnl that the object file has the latter name from the start. save_ac_compile="$ac_compile" ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest1/` if echo '#include "conftest.c"' >conftest1.c \ && AC_TRY_EVAL([ac_compile]); then AC_LANG_CONFTEST([ AC_LANG_SOURCE([[ #define wcstod renamed_wcstod #include <wchar.h> int zero (void) { return 0; } ]])]) dnl See note above about renaming object files. ac_compile=`echo "$save_ac_compile" | sed s/conftest/conftest2/` if echo '#include "conftest.c"' >conftest2.c \ && AC_TRY_EVAL([ac_compile]); then if $CC -o conftest$ac_exeext $CFLAGS $LDFLAGS conftest1.$ac_objext conftest2.$ac_objext $LIBS >&AS_MESSAGE_LOG_FD 2>&1; then : else gl_cv_header_wchar_h_correct_inline=no fi fi fi ac_compile="$save_ac_compile" rm -f conftest[12].c conftest[12].$ac_objext conftest$ac_exeext ;; esac ]) if test $gl_cv_header_wchar_h_correct_inline = no; then AC_MSG_ERROR([<wchar.h> cannot be used with this compiler ($CC $CFLAGS $CPPFLAGS). This is a known interoperability problem of glibc <= 2.5 with gcc >= 4.3 in C99 mode. You have four options: - Add the flag -fgnu89-inline to CC and reconfigure, or - Fix your include files, using parts of <https://sourceware.org/git/?p=glibc.git;a=commitdiff;h=b037a293a48718af30d706c2e18c929d0e69a621>, or - Use a gcc version older than 4.3, or - Don't use the flags -std=c99 or -std=gnu99. Configuration aborted.]) fi ]) # gl_WCHAR_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_WCHAR_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_WCHAR_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_WCHAR_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_WCHAR_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_BTOWC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCTOB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSINIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRTOWC]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBRLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSRTOWCS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MBSNRTOWCS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCRTOMB]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSRTOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNRTOMBS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCWIDTH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMMOVE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WMEMSET]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNLEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCPCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCPNCPY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSNCASECMP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCOLL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSXFRM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSDUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSRCHR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSCSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSSPN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSPBRK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSSTR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSTOK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSWIDTH]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_WCSFTIME]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_WCSDUP], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_WCHAR_H_MODULE_INDICATOR_DEFAULTS]) dnl Make sure the shell variable for GNULIB_FREE_POSIX is initialized. gl_STDLIB_H_REQUIRE_DEFAULTS AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) ]) AC_DEFUN([gl_WCHAR_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_BTOWC=1; AC_SUBST([HAVE_BTOWC]) HAVE_MBSINIT=1; AC_SUBST([HAVE_MBSINIT]) HAVE_MBRTOWC=1; AC_SUBST([HAVE_MBRTOWC]) HAVE_MBRLEN=1; AC_SUBST([HAVE_MBRLEN]) HAVE_MBSRTOWCS=1; AC_SUBST([HAVE_MBSRTOWCS]) HAVE_MBSNRTOWCS=1; AC_SUBST([HAVE_MBSNRTOWCS]) HAVE_WCRTOMB=1; AC_SUBST([HAVE_WCRTOMB]) HAVE_WCSRTOMBS=1; AC_SUBST([HAVE_WCSRTOMBS]) HAVE_WCSNRTOMBS=1; AC_SUBST([HAVE_WCSNRTOMBS]) HAVE_WMEMCHR=1; AC_SUBST([HAVE_WMEMCHR]) HAVE_WMEMCMP=1; AC_SUBST([HAVE_WMEMCMP]) HAVE_WMEMCPY=1; AC_SUBST([HAVE_WMEMCPY]) HAVE_WMEMMOVE=1; AC_SUBST([HAVE_WMEMMOVE]) HAVE_WMEMPCPY=1; AC_SUBST([HAVE_WMEMPCPY]) HAVE_WMEMSET=1; AC_SUBST([HAVE_WMEMSET]) HAVE_WCSLEN=1; AC_SUBST([HAVE_WCSLEN]) HAVE_WCSNLEN=1; AC_SUBST([HAVE_WCSNLEN]) HAVE_WCSCPY=1; AC_SUBST([HAVE_WCSCPY]) HAVE_WCPCPY=1; AC_SUBST([HAVE_WCPCPY]) HAVE_WCSNCPY=1; AC_SUBST([HAVE_WCSNCPY]) HAVE_WCPNCPY=1; AC_SUBST([HAVE_WCPNCPY]) HAVE_WCSCAT=1; AC_SUBST([HAVE_WCSCAT]) HAVE_WCSNCAT=1; AC_SUBST([HAVE_WCSNCAT]) HAVE_WCSCMP=1; AC_SUBST([HAVE_WCSCMP]) HAVE_WCSNCMP=1; AC_SUBST([HAVE_WCSNCMP]) HAVE_WCSCASECMP=1; AC_SUBST([HAVE_WCSCASECMP]) HAVE_WCSNCASECMP=1; AC_SUBST([HAVE_WCSNCASECMP]) HAVE_WCSCOLL=1; AC_SUBST([HAVE_WCSCOLL]) HAVE_WCSXFRM=1; AC_SUBST([HAVE_WCSXFRM]) HAVE_WCSDUP=1; AC_SUBST([HAVE_WCSDUP]) HAVE_WCSCHR=1; AC_SUBST([HAVE_WCSCHR]) HAVE_WCSRCHR=1; AC_SUBST([HAVE_WCSRCHR]) HAVE_WCSCSPN=1; AC_SUBST([HAVE_WCSCSPN]) HAVE_WCSSPN=1; AC_SUBST([HAVE_WCSSPN]) HAVE_WCSPBRK=1; AC_SUBST([HAVE_WCSPBRK]) HAVE_WCSSTR=1; AC_SUBST([HAVE_WCSSTR]) HAVE_WCSTOK=1; AC_SUBST([HAVE_WCSTOK]) HAVE_WCSWIDTH=1; AC_SUBST([HAVE_WCSWIDTH]) HAVE_WCSFTIME=1; AC_SUBST([HAVE_WCSFTIME]) HAVE_DECL_WCTOB=1; AC_SUBST([HAVE_DECL_WCTOB]) HAVE_DECL_WCSDUP=1; AC_SUBST([HAVE_DECL_WCSDUP]) HAVE_DECL_WCWIDTH=1; AC_SUBST([HAVE_DECL_WCWIDTH]) REPLACE_MBSTATE_T=0; AC_SUBST([REPLACE_MBSTATE_T]) REPLACE_BTOWC=0; AC_SUBST([REPLACE_BTOWC]) REPLACE_WCTOB=0; AC_SUBST([REPLACE_WCTOB]) REPLACE_MBSINIT=0; AC_SUBST([REPLACE_MBSINIT]) REPLACE_MBRTOWC=0; AC_SUBST([REPLACE_MBRTOWC]) REPLACE_MBRLEN=0; AC_SUBST([REPLACE_MBRLEN]) REPLACE_MBSRTOWCS=0; AC_SUBST([REPLACE_MBSRTOWCS]) REPLACE_MBSNRTOWCS=0; AC_SUBST([REPLACE_MBSNRTOWCS]) REPLACE_WCRTOMB=0; AC_SUBST([REPLACE_WCRTOMB]) REPLACE_WCSRTOMBS=0; AC_SUBST([REPLACE_WCSRTOMBS]) REPLACE_WCSNRTOMBS=0; AC_SUBST([REPLACE_WCSNRTOMBS]) REPLACE_WCWIDTH=0; AC_SUBST([REPLACE_WCWIDTH]) REPLACE_WCSWIDTH=0; AC_SUBST([REPLACE_WCSWIDTH]) REPLACE_WCSFTIME=0; AC_SUBST([REPLACE_WCSFTIME]) REPLACE_WCSTOK=0; AC_SUBST([REPLACE_WCSTOK]) ]) ������������������������������������������������������recutils-1.9/m4/locale-zh.m4������������������������������������������������������������������������0000644�0000000�0000000�00000012612�14226564452�012560� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale-zh.m4 serial 15 dnl Copyright (C) 2003, 2005-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Determine the name of a chinese locale with GB18030 encoding. AC_DEFUN([gt_LOCALE_ZH_CN], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AM_LANGINFO_CODESET]) AC_CACHE_CHECK([for a transitional chinese locale], [gt_cv_locale_zh_CN], [ AC_LANG_CONFTEST([AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <time.h> #if HAVE_LANGINFO_CODESET # include <langinfo.h> #endif #include <stdlib.h> #include <string.h> struct tm t; char buf[16]; int main () { /* On BeOS and Haiku, locales are not implemented in libc. Rather, libintl imitates locale dependent behaviour by looking at the environment variables, and all locales use the UTF-8 encoding. */ #if defined __BEOS__ || defined __HAIKU__ return 1; #else /* Check whether the given locale name is recognized by the system. */ # if defined _WIN32 && !defined __CYGWIN__ /* On native Windows, setlocale(category, "") looks at the system settings, not at the environment variables. Also, when an encoding suffix such as ".65001" or ".54936" is specified, it succeeds but sets the LC_CTYPE category of the locale to "C". */ if (setlocale (LC_ALL, getenv ("LC_ALL")) == NULL || strcmp (setlocale (LC_CTYPE, NULL), "C") == 0) return 1; # else if (setlocale (LC_ALL, "") == NULL) return 1; # endif /* Check whether nl_langinfo(CODESET) is nonempty and not "ASCII" or "646". On Mac OS X 10.3.5 (Darwin 7.5) in the fr_FR locale, nl_langinfo(CODESET) is empty, and the behaviour of Tcl 8.4 in this locale is not useful. On OpenBSD 4.0, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "646". In this situation, some unit tests fail. On MirBSD 10, when an unsupported locale is specified, setlocale() succeeds but then nl_langinfo(CODESET) is "UTF-8". */ # if HAVE_LANGINFO_CODESET { const char *cs = nl_langinfo (CODESET); if (cs[0] == '\0' || strcmp (cs, "ASCII") == 0 || strcmp (cs, "646") == 0 || strcmp (cs, "UTF-8") == 0) return 1; } # endif # ifdef __CYGWIN__ /* On Cygwin, avoid locale names without encoding suffix, because the locale_charset() function relies on the encoding suffix. Note that LC_ALL is set on the command line. */ if (strchr (getenv ("LC_ALL"), '.') == NULL) return 1; # endif /* Check whether in a month name, no byte in the range 0x80..0x9F occurs. This excludes the UTF-8 encoding (except on MirBSD). */ { const char *p; t.tm_year = 1975 - 1900; t.tm_mon = 2 - 1; t.tm_mday = 4; if (strftime (buf, sizeof (buf), "%B", &t) < 2) return 1; for (p = buf; *p != '\0'; p++) if ((unsigned char) *p >= 0x80 && (unsigned char) *p < 0xa0) return 1; } /* Check whether a typical GB18030 multibyte sequence is recognized as a single wide character. This excludes the GB2312 and GBK encodings. */ if (mblen ("\203\062\332\066", 5) != 4) return 1; return 0; #endif } ]])]) if AC_TRY_EVAL([ac_link]) && test -s conftest$ac_exeext; then case "$host_os" in # Handle native Windows specially, because there setlocale() interprets # "ar" as "Arabic" or "Arabic_Saudi Arabia.1256", # "fr" or "fra" as "French" or "French_France.1252", # "ge"(!) or "deu"(!) as "German" or "German_Germany.1252", # "ja" as "Japanese" or "Japanese_Japan.932", # and similar. mingw*) # Test for the hypothetical native Windows locale name. if (LC_ALL=Chinese_China.54936 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=Chinese_China.54936 else # None found. gt_cv_locale_zh_CN=none fi ;; solaris2.8) # On Solaris 8, the locales zh_CN.GB18030, zh_CN.GBK, zh.GBK are # broken. One witness is the test case in gl_MBRTOWC_SANITYCHECK. # Another witness is that "LC_ALL=zh_CN.GB18030 bash -c true" dumps core. gt_cv_locale_zh_CN=none ;; *) # Setting LC_ALL is not enough. Need to set LC_TIME to empty, because # otherwise on Mac OS X 10.3.5 the LC_TIME=C from the beginning of the # configure script would override the LC_ALL setting. Likewise for # LC_CTYPE, which is also set at the beginning of the configure script. # Test for the locale name without encoding suffix. if (LC_ALL=zh_CN LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN else # Test for the locale name with explicit encoding suffix. if (LC_ALL=zh_CN.GB18030 LC_TIME= LC_CTYPE= ./conftest; exit) 2>/dev/null; then gt_cv_locale_zh_CN=zh_CN.GB18030 else # None found. gt_cv_locale_zh_CN=none fi fi ;; esac else # If there was a link error, due to mblen(), the system is so old that # it certainly doesn't have a chinese locale. gt_cv_locale_zh_CN=none fi rm -fr conftest* ]) LOCALE_ZH_CN=$gt_cv_locale_zh_CN AC_SUBST([LOCALE_ZH_CN]) ]) ����������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/tm_gmtoff.m4������������������������������������������������������������������������0000644�0000000�0000000�00000001035�14226564453�012662� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tm_gmtoff.m4 serial 3 dnl Copyright (C) 2002, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_TM_GMTOFF], [ AC_CHECK_MEMBER([struct tm.tm_gmtoff], [AC_DEFINE([HAVE_TM_GMTOFF], [1], [Define if struct tm has the tm_gmtoff member.])], , [#include <time.h>]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/getcwd.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000012247�14226564447�012167� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getcwd.m4 - check for working getcwd that is compatible with glibc # Copyright (C) 2001, 2003-2007, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. # serial 19 AC_DEFUN([gl_FUNC_GETCWD_NULL], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether getcwd (NULL, 0) allocates memory for result], [gl_cv_func_getcwd_null], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ # include <stdlib.h> # if HAVE_UNISTD_H # include <unistd.h> # else /* on Windows with MSVC */ # include <direct.h> # endif ]GL_MDA_DEFINES[ # ifndef getcwd char *getcwd (); # endif ]], [[ #if defined _WIN32 && ! defined __CYGWIN__ /* mingw cwd does not start with '/', but _getcwd does allocate. However, mingw fails to honor non-zero size. */ #else if (chdir ("/") != 0) return 1; else { char *f = getcwd (NULL, 0); if (! f) return 2; if (f[0] != '/') { free (f); return 3; } if (f[1] != '\0') { free (f); return 4; } free (f); return 0; } #endif ]])], [gl_cv_func_getcwd_null=yes], [gl_cv_func_getcwd_null=no], [[case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on musl systems. *-musl*) gl_cv_func_getcwd_null="guessing yes";; # Guess yes on Cygwin. cygwin*) gl_cv_func_getcwd_null="guessing yes";; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_getcwd_null="$gl_cross_guess_normal";; esac ]])]) ]) AC_DEFUN([gl_FUNC_GETCWD_SIGNATURE], [ AC_CACHE_CHECK([for getcwd with POSIX signature], [gl_cv_func_getcwd_posix_signature], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]GL_MDA_DEFINES], [[extern #ifdef __cplusplus "C" #endif char *getcwd (char *, size_t); ]]) ], [gl_cv_func_getcwd_posix_signature=yes], [gl_cv_func_getcwd_posix_signature=no]) ]) ]) dnl Guarantee that getcwd will malloc with a NULL first argument. Assumes dnl that either the system getcwd is robust, or that calling code is okay dnl with spurious failures when run from a directory with an absolute name dnl larger than 4k bytes. dnl dnl Assumes that getcwd exists; if you are worried about obsolete dnl platforms that lacked getcwd(), then you need to use the GPL module. AC_DEFUN([gl_FUNC_GETCWD_LGPL], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_GETCWD_NULL]) AC_REQUIRE([gl_FUNC_GETCWD_SIGNATURE]) case $gl_cv_func_getcwd_null,$gl_cv_func_getcwd_posix_signature in *yes,yes) ;; *) dnl Minimal replacement lib/getcwd-lgpl.c. REPLACE_GETCWD=1 ;; esac ]) dnl Check for all known getcwd bugs; useful for a program likely to be dnl executed from an arbitrary location. AC_DEFUN([gl_FUNC_GETCWD], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_GETCWD_NULL]) AC_REQUIRE([gl_FUNC_GETCWD_SIGNATURE]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_abort_bug=no case "$host_os" in mingw*) gl_cv_func_getcwd_path_max=yes ;; *) gl_FUNC_GETCWD_PATH_MAX case "$gl_cv_func_getcwd_null" in *yes) gl_FUNC_GETCWD_ABORT_BUG([gl_abort_bug=yes]) ;; esac ;; esac dnl Define HAVE_MINIMALLY_WORKING_GETCWD and HAVE_PARTLY_WORKING_GETCWD dnl if appropriate. case "$gl_cv_func_getcwd_path_max" in *"no" | *"no, it has the AIX bug") ;; *) AC_DEFINE([HAVE_MINIMALLY_WORKING_GETCWD], [1], [Define to 1 if getcwd minimally works, that is, its result can be trusted when it succeeds.]) ;; esac case "$gl_cv_func_getcwd_path_max" in *"no, but it is partly working") AC_DEFINE([HAVE_PARTLY_WORKING_GETCWD], [1], [Define to 1 if getcwd works, except it sometimes fails when it shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT.]) ;; *"yes, but with shorter paths") AC_DEFINE([HAVE_GETCWD_SHORTER], [1], [Define to 1 if getcwd works, but with shorter paths than is generally tested with the replacement.]) ;; esac if { case "$gl_cv_func_getcwd_null" in *yes) false;; *) true;; esac; } \ || test $gl_cv_func_getcwd_posix_signature != yes \ || { case "$gl_cv_func_getcwd_path_max" in *yes*) false;; *) true;; esac; } \ || test $gl_abort_bug = yes; then REPLACE_GETCWD=1 fi ]) # Prerequisites of lib/getcwd.c, when full replacement is in effect. AC_DEFUN([gl_PREREQ_GETCWD], [ AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_DIRENT_D_INO]) : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/sys_file_h.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000003407�14226564452�013030� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <sys/file.h>. # serial 9 # Copyright (C) 2008-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Richard W.M. Jones. AC_DEFUN_ONCE([gl_SYS_FILE_H], [ AC_REQUIRE([gl_SYS_FILE_H_DEFAULTS]) dnl <sys/file.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([sys/file.h]) if test $ac_cv_header_sys_file_h = yes; then HAVE_SYS_FILE_H=1 else HAVE_SYS_FILE_H=0 fi AC_SUBST([HAVE_SYS_FILE_H]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <sys/file.h> ]], [flock]) ]) # gl_SYS_FILE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_FILE_MODULE_INDICATOR], [ gl_SYS_FILE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_FILE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_FILE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FLOCK]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_FILE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_FILE_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_FILE_H_DEFAULTS], [ HAVE_FLOCK=1; AC_SUBST([HAVE_FLOCK]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/msvc-nothrow.m4���������������������������������������������������������������������0000644�0000000�0000000�00000000530�14226564452�013344� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# msvc-nothrow.m4 serial 1 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_MSVC_NOTHROW], [ AC_REQUIRE([gl_MSVC_INVAL]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/mkdir.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000006501�14226564452�012010� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 17 # Copyright (C) 2001, 2003-2004, 2006, 2008-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # On some systems, mkdir ("foo/", 0700) fails because of the trailing slash. # On others, mkdir ("foo/./", 0700) mistakenly succeeds. # On such systems, arrange to use a wrapper function. AC_DEFUN([gl_FUNC_MKDIR], [dnl AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether mkdir handles trailing slash], [gl_cv_func_mkdir_trailing_slash_works], [rm -rf conftest.dir AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/stat.h> ]GL_MDA_DEFINES], [[return mkdir ("conftest.dir/", 0700);]])], [gl_cv_func_mkdir_trailing_slash_works=yes], [gl_cv_func_mkdir_trailing_slash_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_mkdir_trailing_slash_works="guessing yes" ;; # Guess yes on MSVC, no on mingw. mingw*) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_func_mkdir_trailing_slash_works="guessing yes"], [gl_cv_func_mkdir_trailing_slash_works="guessing no"]) ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_mkdir_trailing_slash_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.dir ]) case "$gl_cv_func_mkdir_trailing_slash_works" in *yes) ;; *) REPLACE_MKDIR=1 ;; esac AC_CACHE_CHECK([whether mkdir handles trailing dot], [gl_cv_func_mkdir_trailing_dot_works], [rm -rf conftest.dir AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <sys/types.h> #include <sys/stat.h> ]GL_MDA_DEFINES], [[return !mkdir ("conftest.dir/./", 0700);]])], [gl_cv_func_mkdir_trailing_dot_works=yes], [gl_cv_func_mkdir_trailing_dot_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_mkdir_trailing_dot_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_mkdir_trailing_dot_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_mkdir_trailing_dot_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.dir ] ) case "$gl_cv_func_mkdir_trailing_dot_works" in *yes) ;; *) REPLACE_MKDIR=1 AC_DEFINE([FUNC_MKDIR_DOT_BUG], [1], [Define to 1 if mkdir mistakenly creates a directory given with a trailing dot component.]) ;; esac ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fstat.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000002117�14226564452�012022� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fstat.m4 serial 8 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FSTAT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_SYS_STAT_H_DEFAULTS]) case "$host_os" in mingw* | solaris*) dnl On MinGW, the original stat() returns st_atime, st_mtime, dnl st_ctime values that are affected by the time zone. dnl Solaris stat can return a negative tv_nsec. REPLACE_FSTAT=1 ;; esac dnl Replace fstat() for supporting the gnulib-defined open() on directories. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then case "$gl_cv_func_open_directory_works" in *yes) ;; *) REPLACE_FSTAT=1 ;; esac fi ]) ]) # Prerequisites of lib/fstat.c and lib/stat-w32.c. AC_DEFUN([gl_PREREQ_FSTAT], [ AC_REQUIRE([gl_SYS_STAT_H]) AC_REQUIRE([gl_PREREQ_STAT_W32]) : ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/flexmember.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000003254�14226564451�013031� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 # Check for flexible array member support. # Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert. AC_DEFUN([AC_C_FLEXIBLE_ARRAY_MEMBER], [ AC_CACHE_CHECK([for flexible array member], ac_cv_c_flexmember, [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> #include <stdio.h> #include <stddef.h> struct m { struct m *next, **list; char name[]; }; struct s { struct s *p; struct m *m; int n; double d[]; };]], [[int m = getchar (); size_t nbytes = offsetof (struct s, d) + m * sizeof (double); nbytes += sizeof (struct s) - 1; nbytes -= nbytes % sizeof (struct s); struct s *p = malloc (nbytes); p->p = p; p->m = NULL; p->d[0] = 0.0; return p->d != (double *) NULL;]])], [ac_cv_c_flexmember=yes], [ac_cv_c_flexmember=no])]) if test $ac_cv_c_flexmember = yes; then AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [], [Define to nothing if C supports flexible array members, and to 1 if it does not. That way, with a declaration like 'struct s { int n; short d@<:@FLEXIBLE_ARRAY_MEMBER@:>@; };', the struct hack can be used with pre-C99 compilers. Use 'FLEXSIZEOF (struct s, d, N * sizeof (short))' to calculate the size in bytes of such a struct containing an N-element array.]) else AC_DEFINE([FLEXIBLE_ARRAY_MEMBER], [1]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/mktime.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000021622�14226564452�012171� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 37 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Jim Meyering. AC_DEFUN([gl_TIME_T_IS_SIGNED], [ AC_CACHE_CHECK([whether time_t is signed], [gl_cv_time_t_is_signed], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <time.h> char time_t_signed[(time_t) -1 < 0 ? 1 : -1];]])], [gl_cv_time_t_is_signed=yes], [gl_cv_time_t_is_signed=no])]) if test $gl_cv_time_t_is_signed = yes; then AC_DEFINE([TIME_T_IS_SIGNED], [1], [Define to 1 if time_t is signed.]) fi ]) dnl Test whether mktime works. Set gl_cv_func_working_mktime. AC_DEFUN([gl_FUNC_MKTIME_WORKS], [ AC_REQUIRE([gl_TIME_T_IS_SIGNED]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl We don't use AC_FUNC_MKTIME any more, because it is no longer maintained dnl in Autoconf and because it invokes AC_LIBOBJ. AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_DECLS_ONCE([alarm]) AC_REQUIRE([gl_MULTIARCH]) AC_CACHE_CHECK([for working mktime], [gl_cv_func_working_mktime], [if test $APPLE_UNIVERSAL_BUILD = 1; then # A universal build on Apple Mac OS X platforms. # The test result would be 'yes' in 32-bit mode and 'no' in 64-bit mode. # But we need a configuration result that is valid in both modes. gl_cv_func_working_mktime="guessing no" else AC_RUN_IFELSE( [AC_LANG_SOURCE( [[/* Test program from Paul Eggert and Tony Leneis. */ #include <limits.h> #include <stdlib.h> #include <time.h> #ifdef HAVE_UNISTD_H # include <unistd.h> #endif #if HAVE_DECL_ALARM # include <signal.h> #endif ]GL_MDA_DEFINES[ #ifndef TIME_T_IS_SIGNED # define TIME_T_IS_SIGNED 0 #endif static time_t time_t_max; static time_t time_t_min; /* Values we'll use to set the TZ environment variable. */ static char *tz_strings[] = { (char *) 0, "TZ=GMT0", "TZ=JST-9", "TZ=EST+3EDT+2,M10.1.0/00:00:00,M2.3.0/00:00:00" }; #define N_STRINGS (sizeof (tz_strings) / sizeof (tz_strings[0])) /* Return 0 if mktime fails to convert a date in the spring-forward gap. Based on a problem report from Andreas Jaeger. */ static int spring_forward_gap () { /* glibc (up to about 1998-10-07) failed this test. */ struct tm tm; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ if (putenv ("TZ=PST8PDT,M4.1.0,M10.5.0") != 0) return -1; tm.tm_year = 98; tm.tm_mon = 3; tm.tm_mday = 5; tm.tm_hour = 2; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; return mktime (&tm) != (time_t) -1; } static int mktime_test1 (time_t now) { struct tm *lt; return ! (lt = localtime (&now)) || mktime (lt) == now; } static int mktime_test (time_t now) { return (mktime_test1 (now) && mktime_test1 ((time_t) (time_t_max - now)) && mktime_test1 ((time_t) (time_t_min + now))); } static int irix_6_4_bug () { /* Based on code from Ariel Faigon. */ struct tm tm; tm.tm_year = 96; tm.tm_mon = 3; tm.tm_mday = 0; tm.tm_hour = 0; tm.tm_min = 0; tm.tm_sec = 0; tm.tm_isdst = -1; mktime (&tm); return tm.tm_mon == 2 && tm.tm_mday == 31; } static int bigtime_test (int j) { struct tm tm; time_t now; tm.tm_year = tm.tm_mon = tm.tm_mday = tm.tm_hour = tm.tm_min = tm.tm_sec = j; now = mktime (&tm); if (now != (time_t) -1) { struct tm *lt = localtime (&now); if (! (lt && lt->tm_year == tm.tm_year && lt->tm_mon == tm.tm_mon && lt->tm_mday == tm.tm_mday && lt->tm_hour == tm.tm_hour && lt->tm_min == tm.tm_min && lt->tm_sec == tm.tm_sec && lt->tm_yday == tm.tm_yday && lt->tm_wday == tm.tm_wday && ((lt->tm_isdst < 0 ? -1 : 0 < lt->tm_isdst) == (tm.tm_isdst < 0 ? -1 : 0 < tm.tm_isdst)))) return 0; } return 1; } static int year_2050_test () { /* The correct answer for 2050-02-01 00:00:00 in Pacific time, ignoring leap seconds. */ unsigned long int answer = 2527315200UL; struct tm tm; time_t t; tm.tm_year = 2050 - 1900; tm.tm_mon = 2 - 1; tm.tm_mday = 1; tm.tm_hour = tm.tm_min = tm.tm_sec = 0; tm.tm_isdst = -1; /* Use the portable POSIX.1 specification "TZ=PST8PDT,M4.1.0,M10.5.0" instead of "TZ=America/Vancouver" in order to detect the bug even on systems that don't support the Olson extension, or don't have the full zoneinfo tables installed. */ if (putenv ("TZ=PST8PDT,M4.1.0,M10.5.0") != 0) return -1; t = mktime (&tm); /* Check that the result is either a failure, or close enough to the correct answer that we can assume the discrepancy is due to leap seconds. */ return (t == (time_t) -1 || (0 < t && answer - 120 <= t && t <= answer + 120)); } static int indiana_test () { if (putenv ("TZ=America/Indiana/Indianapolis") != 0) return -1; struct tm tm; tm.tm_year = 1986 - 1900; tm.tm_mon = 4 - 1; tm.tm_mday = 28; tm.tm_hour = 16; tm.tm_min = 24; tm.tm_sec = 50; tm.tm_isdst = 0; time_t std = mktime (&tm); if (! (std == 515107490 || std == 515107503)) return 1; /* This platform supports TZDB, either without or with leap seconds. Return true if GNU Bug#48085 is absent. */ tm.tm_isdst = 1; time_t dst = mktime (&tm); return std - dst == 60 * 60; } int main () { int result = 0; time_t t, delta; int i, j; int time_t_signed_magnitude = (time_t) ~ (time_t) 0 < (time_t) -1; #if HAVE_DECL_ALARM /* This test makes some buggy mktime implementations loop. Give up after 60 seconds; a mktime slower than that isn't worth using anyway. */ signal (SIGALRM, SIG_DFL); alarm (60); #endif time_t_max = (! TIME_T_IS_SIGNED ? (time_t) -1 : ((((time_t) 1 << (sizeof (time_t) * CHAR_BIT - 2)) - 1) * 2 + 1)); time_t_min = (! TIME_T_IS_SIGNED ? (time_t) 0 : time_t_signed_magnitude ? ~ (time_t) 0 : ~ time_t_max); delta = time_t_max / 997; /* a suitable prime number */ for (i = 0; i < N_STRINGS; i++) { if (tz_strings[i]) putenv (tz_strings[i]); for (t = 0; t <= time_t_max - delta && (result & 1) == 0; t += delta) if (! mktime_test (t)) result |= 1; if ((result & 2) == 0 && ! (mktime_test ((time_t) 1) && mktime_test ((time_t) (60 * 60)) && mktime_test ((time_t) (60 * 60 * 24)))) result |= 2; for (j = 1; (result & 4) == 0; j <<= 1) { if (! bigtime_test (j)) result |= 4; if (INT_MAX / 2 < j) break; } if ((result & 8) == 0 && ! bigtime_test (INT_MAX)) result |= 8; } if (! irix_6_4_bug ()) result |= 16; if (! spring_forward_gap ()) result |= 32; if (! year_2050_test () || ! indiana_test ()) result |= 64; return result; }]])], [gl_cv_func_working_mktime=yes], [gl_cv_func_working_mktime=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_working_mktime="guessing no" ;; *) gl_cv_func_working_mktime="$gl_cross_guess_normal" ;; esac ]) fi ]) ]) dnl Main macro of module 'mktime'. AC_DEFUN([gl_FUNC_MKTIME], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) REPLACE_MKTIME=0 if test "$gl_cv_func_working_mktime" != yes; then REPLACE_MKTIME=1 AC_DEFINE([NEED_MKTIME_WORKING], [1], [Define if the compilation of mktime.c should define 'mktime' with the algorithmic workarounds.]) fi case "$host_os" in mingw*) REPLACE_MKTIME=1 AC_DEFINE([NEED_MKTIME_WINDOWS], [1], [Define if the compilation of mktime.c should define 'mktime' with the native Windows TZ workaround.]) ;; esac ]) dnl Main macro of module 'mktime-internal'. AC_DEFUN([gl_FUNC_MKTIME_INTERNAL], [ AC_REQUIRE([gl_FUNC_MKTIME_WORKS]) WANT_MKTIME_INTERNAL=0 dnl BeOS has __mktime_internal in libc, but other platforms don't. AC_CHECK_FUNC([__mktime_internal], [AC_DEFINE([mktime_internal], [__mktime_internal], [Define to the real name of the mktime_internal function.]) ], [dnl mktime works but it doesn't export __mktime_internal, dnl so we need to substitute our own mktime implementation. WANT_MKTIME_INTERNAL=1 AC_DEFINE([NEED_MKTIME_INTERNAL], [1], [Define if the compilation of mktime.c should define 'mktime_internal'.]) ]) ]) # Prerequisites of lib/mktime.c. AC_DEFUN([gl_PREREQ_MKTIME], [:]) ��������������������������������������������������������������������������������������������������������������recutils-1.9/m4/lib-prefix.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000027645�14226564452�012757� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-prefix.m4 serial 20 dnl Copyright (C) 2001-2005, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl AC_LIB_PREFIX adds to the CPPFLAGS and LDFLAGS the flags that are needed dnl to access previously installed libraries. The basic assumption is that dnl a user will want packages to use other packages he previously installed dnl with the same --prefix option. dnl This macro is not needed if only AC_LIB_LINKFLAGS is used to locate dnl libraries, but is otherwise very convenient. AC_DEFUN([AC_LIB_PREFIX], [ AC_BEFORE([$0], [AC_LIB_LINKFLAGS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_LIB_PREPARE_MULTILIB]) AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) dnl By default, look in $includedir and $libdir. use_additional=yes AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) AC_ARG_WITH([lib-prefix], [[ --with-lib-prefix[=DIR] search for libraries in DIR/include and DIR/lib --without-lib-prefix don't search for libraries in includedir and libdir]], [ if test "X$withval" = "Xno"; then use_additional=no else if test "X$withval" = "X"; then AC_LIB_WITH_FINAL_PREFIX([ eval additional_includedir=\"$includedir\" eval additional_libdir=\"$libdir\" ]) else additional_includedir="$withval/include" additional_libdir="$withval/$acl_libdirstem" fi fi ]) if test $use_additional = yes; then dnl Potentially add $additional_includedir to $CPPFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/include, dnl 2. if it's already present in $CPPFLAGS, dnl 3. if it's /usr/local/include and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_includedir" != "X/usr/include"; then haveit= for x in $CPPFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-I$additional_includedir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_includedir" = "X/usr/local/include"; then if test -n "$GCC"; then case $host_os in linux* | gnu* | k*bsd*-gnu) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_includedir"; then dnl Really add $additional_includedir to $CPPFLAGS. CPPFLAGS="${CPPFLAGS}${CPPFLAGS:+ }-I$additional_includedir" fi fi fi fi dnl Potentially add $additional_libdir to $LDFLAGS. dnl But don't add it dnl 1. if it's the standard /usr/lib, dnl 2. if it's already present in $LDFLAGS, dnl 3. if it's /usr/local/lib and we are using GCC on Linux, dnl 4. if it doesn't exist as a directory. if test "X$additional_libdir" != "X/usr/$acl_libdirstem"; then haveit= for x in $LDFLAGS; do AC_LIB_WITH_FINAL_PREFIX([eval x=\"$x\"]) if test "X$x" = "X-L$additional_libdir"; then haveit=yes break fi done if test -z "$haveit"; then if test "X$additional_libdir" = "X/usr/local/$acl_libdirstem"; then if test -n "$GCC"; then case $host_os in linux*) haveit=yes;; esac fi fi if test -z "$haveit"; then if test -d "$additional_libdir"; then dnl Really add $additional_libdir to $LDFLAGS. LDFLAGS="${LDFLAGS}${LDFLAGS:+ }-L$additional_libdir" fi fi fi fi fi ]) dnl AC_LIB_PREPARE_PREFIX creates variables acl_final_prefix, dnl acl_final_exec_prefix, containing the values to which $prefix and dnl $exec_prefix will expand at the end of the configure script. AC_DEFUN([AC_LIB_PREPARE_PREFIX], [ dnl Unfortunately, prefix and exec_prefix get only finally determined dnl at the end of configure. if test "X$prefix" = "XNONE"; then acl_final_prefix="$ac_default_prefix" else acl_final_prefix="$prefix" fi if test "X$exec_prefix" = "XNONE"; then acl_final_exec_prefix='${prefix}' else acl_final_exec_prefix="$exec_prefix" fi acl_save_prefix="$prefix" prefix="$acl_final_prefix" eval acl_final_exec_prefix=\"$acl_final_exec_prefix\" prefix="$acl_save_prefix" ]) dnl AC_LIB_WITH_FINAL_PREFIX([statement]) evaluates statement, with the dnl variables prefix and exec_prefix bound to the values they will have dnl at the end of the configure script. AC_DEFUN([AC_LIB_WITH_FINAL_PREFIX], [ acl_save_prefix="$prefix" prefix="$acl_final_prefix" acl_save_exec_prefix="$exec_prefix" exec_prefix="$acl_final_exec_prefix" $1 exec_prefix="$acl_save_exec_prefix" prefix="$acl_save_prefix" ]) dnl AC_LIB_PREPARE_MULTILIB creates dnl - a function acl_is_expected_elfclass, that tests whether standard input dn; has a 32-bit or 64-bit ELF header, depending on the host CPU ABI, dnl - 3 variables acl_libdirstem, acl_libdirstem2, acl_libdirstem3, containing dnl the basename of the libdir to try in turn, either "lib" or "lib64" or dnl "lib/64" or "lib32" or "lib/sparcv9" or "lib/amd64" or similar. AC_DEFUN([AC_LIB_PREPARE_MULTILIB], [ dnl There is no formal standard regarding lib, lib32, and lib64. dnl On most glibc systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib64 and 32-bit libraries go under $prefix/lib. However, on dnl Arch Linux based distributions, it's the opposite: 32-bit libraries go dnl under $prefix/lib32 and 64-bit libraries go under $prefix/lib. dnl We determine the compiler's default mode by looking at the compiler's dnl library search path. If at least one of its elements ends in /lib64 or dnl points to a directory whose absolute pathname ends in /lib64, we use that dnl for 64-bit ABIs. Similarly for 32-bit ABIs. Otherwise we use the default, dnl namely "lib". dnl On Solaris systems, the current practice is that on a system supporting dnl 32-bit and 64-bit instruction sets or ABIs, 64-bit libraries go under dnl $prefix/lib/64 (which is a symlink to either $prefix/lib/sparcv9 or dnl $prefix/lib/amd64) and 32-bit libraries go under $prefix/lib. AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_HOST_CPU_C_ABI_32BIT]) AC_CACHE_CHECK([for ELF binary format], [gl_cv_elf], [AC_EGREP_CPP([Extensible Linking Format], [#if defined __ELF__ || (defined __linux__ && defined __EDG__) Extensible Linking Format #endif ], [gl_cv_elf=yes], [gl_cv_elf=no]) ]) if test $gl_cv_elf = yes; then # Extract the ELF class of a file (5th byte) in decimal. # Cf. https://en.wikipedia.org/wiki/Executable_and_Linkable_Format#File_header if od -A x < /dev/null >/dev/null 2>/dev/null; then # Use POSIX od. func_elfclass () { od -A n -t d1 -j 4 -N 1 } else # Use BSD hexdump. func_elfclass () { dd bs=1 count=1 skip=4 2>/dev/null | hexdump -e '1/1 "%3d "' echo } fi # Use 'expr', not 'test', to compare the values of func_elfclass, because on # Solaris 11 OpenIndiana and Solaris 11 OmniOS, the result is 001 or 002, # not 1 or 2. changequote(,)dnl case $HOST_CPU_C_ABI_32BIT in yes) # 32-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 1 > /dev/null } ;; no) # 64-bit ABI. acl_is_expected_elfclass () { expr "`func_elfclass | sed -e 's/[ ]//g'`" = 2 > /dev/null } ;; *) # Unknown. acl_is_expected_elfclass () { : } ;; esac changequote([,])dnl else acl_is_expected_elfclass () { : } fi dnl Allow the user to override the result by setting acl_cv_libdirstems. AC_CACHE_CHECK([for the common suffixes of directories in the library search path], [acl_cv_libdirstems], [dnl Try 'lib' first, because that's the default for libdir in GNU, see dnl <https://www.gnu.org/prep/standards/html_node/Directory-Variables.html>. acl_libdirstem=lib acl_libdirstem2= acl_libdirstem3= case "$host_os" in solaris*) dnl See Solaris 10 Software Developer Collection > Solaris 64-bit Developer's Guide > The Development Environment dnl <https://docs.oracle.com/cd/E19253-01/816-5138/dev-env/index.html>. dnl "Portable Makefiles should refer to any library directories using the 64 symbolic link." dnl But we want to recognize the sparcv9 or amd64 subdirectory also if the dnl symlink is missing, so we set acl_libdirstem2 too. if test $HOST_CPU_C_ABI_32BIT = no; then acl_libdirstem2=lib/64 case "$host_cpu" in sparc*) acl_libdirstem3=lib/sparcv9 ;; i*86 | x86_64) acl_libdirstem3=lib/amd64 ;; esac fi ;; *) dnl If $CC generates code for a 32-bit ABI, the libraries are dnl surely under $prefix/lib or $prefix/lib32, not $prefix/lib64. dnl Similarly, if $CC generates code for a 64-bit ABI, the libraries dnl are surely under $prefix/lib or $prefix/lib64, not $prefix/lib32. dnl Find the compiler's search path. However, non-system compilers dnl sometimes have odd library search paths. But we can't simply invoke dnl '/usr/bin/gcc -print-search-dirs' because that would not take into dnl account the -m32/-m31 or -m64 options from the $CC or $CFLAGS. searchpath=`(LC_ALL=C $CC $CPPFLAGS $CFLAGS -print-search-dirs) 2>/dev/null \ | sed -n -e 's,^libraries: ,,p' | sed -e 's,^=,,'` if test $HOST_CPU_C_ABI_32BIT != no; then # 32-bit or unknown ABI. if test -d /usr/lib32; then acl_libdirstem2=lib32 fi fi if test $HOST_CPU_C_ABI_32BIT != yes; then # 64-bit or unknown ABI. if test -d /usr/lib64; then acl_libdirstem3=lib64 fi fi if test -n "$searchpath"; then acl_save_IFS="${IFS= }"; IFS=":" for searchdir in $searchpath; do if test -d "$searchdir"; then case "$searchdir" in */lib32/ | */lib32 ) acl_libdirstem2=lib32 ;; */lib64/ | */lib64 ) acl_libdirstem3=lib64 ;; */../ | */.. ) # Better ignore directories of this form. They are misleading. ;; *) searchdir=`cd "$searchdir" && pwd` case "$searchdir" in */lib32 ) acl_libdirstem2=lib32 ;; */lib64 ) acl_libdirstem3=lib64 ;; esac ;; esac fi done IFS="$acl_save_IFS" if test $HOST_CPU_C_ABI_32BIT = yes; then # 32-bit ABI. acl_libdirstem3= fi if test $HOST_CPU_C_ABI_32BIT = no; then # 64-bit ABI. acl_libdirstem2= fi fi ;; esac test -n "$acl_libdirstem2" || acl_libdirstem2="$acl_libdirstem" test -n "$acl_libdirstem3" || acl_libdirstem3="$acl_libdirstem" acl_cv_libdirstems="$acl_libdirstem,$acl_libdirstem2,$acl_libdirstem3" ]) dnl Decompose acl_cv_libdirstems into acl_libdirstem, acl_libdirstem2, and dnl acl_libdirstem3. changequote(,)dnl acl_libdirstem=`echo "$acl_cv_libdirstems" | sed -e 's/,.*//'` acl_libdirstem2=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,//' -e 's/,.*//'` acl_libdirstem3=`echo "$acl_cv_libdirstems" | sed -e 's/^[^,]*,[^,]*,//' -e 's/,.*//'` changequote([,])dnl ]) �������������������������������������������������������������������������������������������recutils-1.9/m4/vasnprintf.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000021604�14226564453�013076� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasnprintf.m4 serial 38 dnl Copyright (C) 2002-2004, 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VASNPRINTF], [ AC_CHECK_FUNCS_ONCE([vasnprintf]) if test $ac_cv_func_vasnprintf = no; then gl_REPLACE_VASNPRINTF fi ]) AC_DEFUN([gl_REPLACE_VASNPRINTF], [ AC_CHECK_FUNCS_ONCE([vasnprintf]) AC_LIBOBJ([vasnprintf]) AC_LIBOBJ([printf-args]) AC_LIBOBJ([printf-parse]) AC_LIBOBJ([asnprintf]) if test $ac_cv_func_vasnprintf = yes; then AC_DEFINE([REPLACE_VASNPRINTF], [1], [Define if vasnprintf exists but is overridden by gnulib.]) fi gl_PREREQ_PRINTF_ARGS gl_PREREQ_PRINTF_PARSE gl_PREREQ_VASNPRINTF gl_PREREQ_ASNPRINTF ]) # Prerequisites of lib/printf-args.h, lib/printf-args.c. AC_DEFUN([gl_PREREQ_PRINTF_ARGS], [ AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) ]) # Prerequisites of lib/printf-parse.h, lib/printf-parse.c. AC_DEFUN([gl_PREREQ_PRINTF_PARSE], [ AC_REQUIRE([gl_FEATURES_H]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_REQUIRE([AC_TYPE_SIZE_T]) AC_CHECK_TYPE([ptrdiff_t], , [AC_DEFINE([ptrdiff_t], [long], [Define as the type of the result of subtracting two pointers, if the system doesn't define it.]) ]) AC_REQUIRE([gt_AC_TYPE_INTMAX_T]) ]) # Prerequisites of lib/vasnprintf.c. AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF], [ AC_REQUIRE([AC_FUNC_ALLOCA]) AC_REQUIRE([gt_TYPE_WCHAR_T]) AC_REQUIRE([gt_TYPE_WINT_T]) AC_CHECK_FUNCS([snprintf strnlen wcslen wcsnlen mbrtowc wcrtomb]) dnl Use the _snprintf function only if it is declared (because on NetBSD it dnl is defined as a weak alias of snprintf; we prefer to use the latter). AC_CHECK_DECLS([_snprintf], , , [[#include <stdio.h>]]) dnl Knowing DBL_EXPBIT0_WORD and DBL_EXPBIT0_BIT enables an optimization dnl in the code for NEED_PRINTF_LONG_DOUBLE || NEED_PRINTF_DOUBLE. AC_REQUIRE([gl_DOUBLE_EXPONENT_LOCATION]) dnl We can avoid a lot of code by assuming that snprintf's return value dnl conforms to ISO C99. So check that. AC_REQUIRE([gl_SNPRINTF_RETVAL_C99]) case "$gl_cv_func_snprintf_retval_c99" in *yes) AC_DEFINE([HAVE_SNPRINTF_RETVAL_C99], [1], [Define if the return value of the snprintf function is the number of of bytes (excluding the terminating NUL) that would have been produced if the buffer had been large enough.]) ;; esac dnl Additionally, the use of %n can be eliminated by assuming that snprintf dnl always produces NUL-terminated strings (no truncation). AC_REQUIRE([gl_SNPRINTF_TRUNCATION_C99]) case "$gl_cv_func_snprintf_truncation_c99" in *yes) AC_DEFINE([HAVE_SNPRINTF_TRUNCATION_C99], [1], [Define if the string produced by the snprintf function is always NUL terminated.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting 'long double' # arguments. AC_DEFUN_ONCE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_LONG_DOUBLE]) case "$gl_cv_func_printf_long_double" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'double' # arguments. AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE], [ AC_REQUIRE([gl_PRINTF_INFINITE]) case "$gl_cv_func_printf_infinite" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_INFINITE_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for infinite 'double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting infinite 'long double' # arguments. AC_DEFUN([gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE], [ AC_REQUIRE([gl_PRINTF_INFINITE_LONG_DOUBLE]) dnl There is no need to set NEED_PRINTF_INFINITE_LONG_DOUBLE if dnl NEED_PRINTF_LONG_DOUBLE is already set. AC_REQUIRE([gl_PREREQ_VASNPRINTF_LONG_DOUBLE]) case "$gl_cv_func_printf_long_double" in *yes) case "$gl_cv_func_printf_infinite_long_double" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_INFINITE_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for infinite 'long double' arguments.]) ;; esac ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'a' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_A], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_A]) case "$gl_cv_func_printf_directive_a" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_A], [1], [Define if the vasnprintf implementation needs special code for the 'a' and 'A' directives.]) AC_CHECK_FUNCS([nl_langinfo]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'F' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_F], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_F]) case "$gl_cv_func_printf_directive_f" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_F], [1], [Define if the vasnprintf implementation needs special code for the 'F' directive.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 'ls' directive. AC_DEFUN([gl_PREREQ_VASNPRINTF_DIRECTIVE_LS], [ AC_REQUIRE([gl_PRINTF_DIRECTIVE_LS]) case "$gl_cv_func_printf_directive_ls" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_DIRECTIVE_LS], [1], [Define if the vasnprintf implementation needs special code for the 'ls' directive.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the ' flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_GROUPING], [ AC_REQUIRE([gl_PRINTF_FLAG_GROUPING]) case "$gl_cv_func_printf_flag_grouping" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_GROUPING], [1], [Define if the vasnprintf implementation needs special code for the ' flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the '-' flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST], [ AC_REQUIRE([gl_PRINTF_FLAG_LEFTADJUST]) case "$gl_cv_func_printf_flag_leftadjust" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_LEFTADJUST], [1], [Define if the vasnprintf implementation needs special code for the '-' flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting the 0 flag. AC_DEFUN([gl_PREREQ_VASNPRINTF_FLAG_ZERO], [ AC_REQUIRE([gl_PRINTF_FLAG_ZERO]) case "$gl_cv_func_printf_flag_zero" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_FLAG_ZERO], [1], [Define if the vasnprintf implementation needs special code for the 0 flag.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for supporting large precisions. AC_DEFUN([gl_PREREQ_VASNPRINTF_PRECISION], [ AC_REQUIRE([gl_PRINTF_PRECISION]) case "$gl_cv_func_printf_precision" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_UNBOUNDED_PRECISION], [1], [Define if the vasnprintf implementation needs special code for supporting large precisions without arbitrary bounds.]) AC_DEFINE([NEED_PRINTF_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'double' arguments.]) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Extra prerequisites of lib/vasnprintf.c for surviving out-of-memory # conditions. AC_DEFUN([gl_PREREQ_VASNPRINTF_ENOMEM], [ AC_REQUIRE([gl_PRINTF_ENOMEM]) case "$gl_cv_func_printf_enomem" in *yes) ;; *) AC_DEFINE([NEED_PRINTF_ENOMEM], [1], [Define if the vasnprintf implementation needs special code for surviving out-of-memory conditions.]) AC_DEFINE([NEED_PRINTF_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'double' arguments.]) AC_DEFINE([NEED_PRINTF_LONG_DOUBLE], [1], [Define if the vasnprintf implementation needs special code for 'long double' arguments.]) ;; esac ]) # Prerequisites of lib/vasnprintf.c including all extras for POSIX compliance. AC_DEFUN([gl_PREREQ_VASNPRINTF_WITH_EXTRAS], [ AC_REQUIRE([gl_PREREQ_VASNPRINTF]) gl_PREREQ_VASNPRINTF_LONG_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_DOUBLE gl_PREREQ_VASNPRINTF_INFINITE_LONG_DOUBLE gl_PREREQ_VASNPRINTF_DIRECTIVE_A gl_PREREQ_VASNPRINTF_DIRECTIVE_F gl_PREREQ_VASNPRINTF_DIRECTIVE_LS gl_PREREQ_VASNPRINTF_FLAG_GROUPING gl_PREREQ_VASNPRINTF_FLAG_LEFTADJUST gl_PREREQ_VASNPRINTF_FLAG_ZERO gl_PREREQ_VASNPRINTF_PRECISION gl_PREREQ_VASNPRINTF_ENOMEM ]) # Prerequisites of lib/asnprintf.c. AC_DEFUN([gl_PREREQ_ASNPRINTF], [ ]) ����������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/host-cpu-c-abi.m4�������������������������������������������������������������������0000644�0000000�0000000�00000053720�14226564452�013422� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# host-cpu-c-abi.m4 serial 15 dnl Copyright (C) 2002-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible and Sam Steingold. dnl Sets the HOST_CPU variable to the canonical name of the CPU. dnl Sets the HOST_CPU_C_ABI variable to the canonical name of the CPU with its dnl C language ABI (application binary interface). dnl Also defines __${HOST_CPU}__ and __${HOST_CPU_C_ABI}__ as C macros in dnl config.h. dnl dnl This canonical name can be used to select a particular assembly language dnl source file that will interoperate with C code on the given host. dnl dnl For example: dnl * 'i386' and 'sparc' are different canonical names, because code for i386 dnl will not run on SPARC CPUs and vice versa. They have different dnl instruction sets. dnl * 'sparc' and 'sparc64' are different canonical names, because code for dnl 'sparc' and code for 'sparc64' cannot be linked together: 'sparc' code dnl contains 32-bit instructions, whereas 'sparc64' code contains 64-bit dnl instructions. A process on a SPARC CPU can be in 32-bit mode or in 64-bit dnl mode, but not both. dnl * 'mips' and 'mipsn32' are different canonical names, because they use dnl different argument passing and return conventions for C functions, and dnl although the instruction set of 'mips' is a large subset of the dnl instruction set of 'mipsn32'. dnl * 'mipsn32' and 'mips64' are different canonical names, because they use dnl different sizes for the C types like 'int' and 'void *', and although dnl the instruction sets of 'mipsn32' and 'mips64' are the same. dnl * The same canonical name is used for different endiannesses. You can dnl determine the endianness through preprocessor symbols: dnl - 'arm': test __ARMEL__. dnl - 'mips', 'mipsn32', 'mips64': test _MIPSEB vs. _MIPSEL. dnl - 'powerpc64': test _BIG_ENDIAN vs. _LITTLE_ENDIAN. dnl * The same name 'i386' is used for CPUs of type i386, i486, i586 dnl (Pentium), AMD K7, Pentium II, Pentium IV, etc., because dnl - Instructions that do not exist on all of these CPUs (cmpxchg, dnl MMX, SSE, SSE2, 3DNow! etc.) are not frequently used. If your dnl assembly language source files use such instructions, you will dnl need to make the distinction. dnl - Speed of execution of the common instruction set is reasonable across dnl the entire family of CPUs. If you have assembly language source files dnl that are optimized for particular CPU types (like GNU gmp has), you dnl will need to make the distinction. dnl See <https://en.wikipedia.org/wiki/X86_instruction_listings>. AC_DEFUN([gl_HOST_CPU_C_ABI], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([gl_C_ASM]) AC_CACHE_CHECK([host CPU and C ABI], [gl_cv_host_cpu_c_abi], [case "$host_cpu" in changequote(,)dnl i[34567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi=i386 ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=x86_64-x32], [gl_cv_host_cpu_c_abi=x86_64])], [gl_cv_host_cpu_c_abi=i386]) ;; changequote(,)dnl alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] ) changequote([,])dnl gl_cv_host_cpu_c_abi=alpha ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __aarch64__ int ok; #else error fail #endif ]])], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __ILP32__ || defined _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=arm64-ilp32], [gl_cv_host_cpu_c_abi=arm64])], [# Don't distinguish little-endian and big-endian arm, since they # don't require different machine code for simple operations and # since the user can distinguish them through the preprocessor # defines __ARMEL__ vs. __ARMEB__. # But distinguish arm which passes floating-point arguments and # return values in integer registers (r0, r1, ...) - this is # gcc -mfloat-abi=soft or gcc -mfloat-abi=softfp - from arm which # passes them in float registers (s0, s1, ...) and double registers # (d0, d1, ...) - this is gcc -mfloat-abi=hard. GCC 4.6 or newer # sets the preprocessor defines __ARM_PCS (for the first case) and # __ARM_PCS_VFP (for the second case), but older GCC does not. echo 'double ddd; void func (double dd) { ddd = dd; }' > conftest.c # Look for a reference to the register d0 in the .s file. AC_TRY_COMMAND(${CC-cc} $CFLAGS $CPPFLAGS $gl_c_asm_opt conftest.c) >/dev/null 2>&1 if LC_ALL=C grep 'd0,' conftest.$gl_asmext >/dev/null; then gl_cv_host_cpu_c_abi=armhf else gl_cv_host_cpu_c_abi=arm fi rm -f conftest* ]) ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=hppa64], [gl_cv_host_cpu_c_abi=hppa]) ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=ia64-ilp32], [gl_cv_host_cpu_c_abi=ia64]) ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mips64], [# In the n32 ABI, _ABIN32 is defined, _ABIO32 is not defined (but # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIN32. # In the 32 ABI, _ABIO32 is defined, _ABIN32 is not defined (but # may later get defined by <sgidefs.h>), and _MIPS_SIM == _ABIO32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (_MIPS_SIM == _ABIN32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=mipsn32], [gl_cv_host_cpu_c_abi=mips])]) ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif ]])], [# On powerpc64, there are two ABIs on Linux: The AIX compatible # one and the ELFv2 one. The latter defines _CALL_ELF=2. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _CALL_ELF && _CALL_ELF == 2 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=powerpc64-elfv2], [gl_cv_host_cpu_c_abi=powerpc64]) ], [gl_cv_host_cpu_c_abi=powerpc]) ;; rs6000 ) gl_cv_host_cpu_c_abi=powerpc ;; riscv32 | riscv64 ) # There are 2 architectures (with variants): rv32* and rv64*. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if __riscv_xlen == 64 int ok; #else error fail #endif ]])], [cpu=riscv64], [cpu=riscv32]) # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ int ok; #else error fail #endif ]])], [main_abi=lp64], [main_abi=ilp32]) # Float ABIs: # __riscv_float_abi_double: # 'float' and 'double' are passed in floating-point registers. # __riscv_float_abi_single: # 'float' are passed in floating-point registers. # __riscv_float_abi_soft: # No values are passed in floating-point registers. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __riscv_float_abi_double int ok; #else error fail #endif ]])], [float_abi=d], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __riscv_float_abi_single int ok; #else error fail #endif ]])], [float_abi=f], [float_abi='']) ]) gl_cv_host_cpu_c_abi="${cpu}-${main_abi}${float_abi}" ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=s390x], [gl_cv_host_cpu_c_abi=s390]) ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi=sparc64], [gl_cv_host_cpu_c_abi=sparc]) ;; *) gl_cv_host_cpu_c_abi="$host_cpu" ;; esac ]) dnl In most cases, $HOST_CPU and $HOST_CPU_C_ABI are the same. HOST_CPU=`echo "$gl_cv_host_cpu_c_abi" | sed -e 's/-.*//'` HOST_CPU_C_ABI="$gl_cv_host_cpu_c_abi" AC_SUBST([HOST_CPU]) AC_SUBST([HOST_CPU_C_ABI]) # This was # AC_DEFINE_UNQUOTED([__${HOST_CPU}__]) # AC_DEFINE_UNQUOTED([__${HOST_CPU_C_ABI}__]) # earlier, but KAI C++ 3.2d doesn't like this. sed -e 's/-/_/g' >> confdefs.h <<EOF #ifndef __${HOST_CPU}__ #define __${HOST_CPU}__ 1 #endif #ifndef __${HOST_CPU_C_ABI}__ #define __${HOST_CPU_C_ABI}__ 1 #endif EOF AH_TOP([/* CPU and C ABI indicator */ #ifndef __i386__ #undef __i386__ #endif #ifndef __x86_64_x32__ #undef __x86_64_x32__ #endif #ifndef __x86_64__ #undef __x86_64__ #endif #ifndef __alpha__ #undef __alpha__ #endif #ifndef __arm__ #undef __arm__ #endif #ifndef __armhf__ #undef __armhf__ #endif #ifndef __arm64_ilp32__ #undef __arm64_ilp32__ #endif #ifndef __arm64__ #undef __arm64__ #endif #ifndef __hppa__ #undef __hppa__ #endif #ifndef __hppa64__ #undef __hppa64__ #endif #ifndef __ia64_ilp32__ #undef __ia64_ilp32__ #endif #ifndef __ia64__ #undef __ia64__ #endif #ifndef __loongarch64__ #undef __loongarch64__ #endif #ifndef __m68k__ #undef __m68k__ #endif #ifndef __mips__ #undef __mips__ #endif #ifndef __mipsn32__ #undef __mipsn32__ #endif #ifndef __mips64__ #undef __mips64__ #endif #ifndef __powerpc__ #undef __powerpc__ #endif #ifndef __powerpc64__ #undef __powerpc64__ #endif #ifndef __powerpc64_elfv2__ #undef __powerpc64_elfv2__ #endif #ifndef __riscv32__ #undef __riscv32__ #endif #ifndef __riscv64__ #undef __riscv64__ #endif #ifndef __riscv32_ilp32__ #undef __riscv32_ilp32__ #endif #ifndef __riscv32_ilp32f__ #undef __riscv32_ilp32f__ #endif #ifndef __riscv32_ilp32d__ #undef __riscv32_ilp32d__ #endif #ifndef __riscv64_ilp32__ #undef __riscv64_ilp32__ #endif #ifndef __riscv64_ilp32f__ #undef __riscv64_ilp32f__ #endif #ifndef __riscv64_ilp32d__ #undef __riscv64_ilp32d__ #endif #ifndef __riscv64_lp64__ #undef __riscv64_lp64__ #endif #ifndef __riscv64_lp64f__ #undef __riscv64_lp64f__ #endif #ifndef __riscv64_lp64d__ #undef __riscv64_lp64d__ #endif #ifndef __s390__ #undef __s390__ #endif #ifndef __s390x__ #undef __s390x__ #endif #ifndef __sh__ #undef __sh__ #endif #ifndef __sparc__ #undef __sparc__ #endif #ifndef __sparc64__ #undef __sparc64__ #endif ]) ]) dnl Sets the HOST_CPU_C_ABI_32BIT variable to 'yes' if the C language ABI dnl (application binary interface) is a 32-bit one, to 'no' if it is a 64-bit dnl one, or to 'unknown' if unknown. dnl This is a simplified variant of gl_HOST_CPU_C_ABI. AC_DEFUN([gl_HOST_CPU_C_ABI_32BIT], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([32-bit host C ABI], [gl_cv_host_cpu_c_abi_32bit], [if test -n "$gl_cv_host_cpu_c_abi"; then case "$gl_cv_host_cpu_c_abi" in i386 | x86_64-x32 | arm | armhf | arm64-ilp32 | hppa | ia64-ilp32 | mips | mipsn32 | powerpc | riscv*-ilp32* | s390 | sparc) gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 | alpha | arm64 | hppa64 | ia64 | mips64 | powerpc64 | powerpc64-elfv2 | riscv*-lp64* | s390x | sparc64 ) gl_cv_host_cpu_c_abi_32bit=no ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac else case "$host_cpu" in # CPUs that only support a 32-bit ABI. arc \ | bfin \ | cris* \ | csky \ | epiphany \ | ft32 \ | h8300 \ | m68k \ | microblaze | microblazeel \ | nds32 | nds32le | nds32be \ | nios2 | nios2eb | nios2el \ | or1k* \ | or32 \ | sh | sh[1234] | sh[1234]e[lb] \ | tic6x \ | xtensa* ) gl_cv_host_cpu_c_abi_32bit=yes ;; # CPUs that only support a 64-bit ABI. changequote(,)dnl alpha | alphaev[4-8] | alphaev56 | alphapca5[67] | alphaev6[78] \ | mmix ) changequote([,])dnl gl_cv_host_cpu_c_abi_32bit=no ;; changequote(,)dnl i[34567]86 ) changequote([,])dnl gl_cv_host_cpu_c_abi_32bit=yes ;; x86_64 ) # On x86_64 systems, the C compiler may be generating code in one of # these ABIs: # - 64-bit instruction set, 64-bit pointers, 64-bit 'long': x86_64. # - 64-bit instruction set, 64-bit pointers, 32-bit 'long': x86_64 # with native Windows (mingw, MSVC). # - 64-bit instruction set, 32-bit pointers, 32-bit 'long': x86_64-x32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': i386. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if (defined __x86_64__ || defined __amd64__ \ || defined _M_X64 || defined _M_AMD64) \ && !(defined __ILP32__ || defined _ILP32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; arm* | aarch64 ) # Assume arm with EABI. # On arm64 systems, the C compiler may be generating code in one of # these ABIs: # - aarch64 instruction set, 64-bit pointers, 64-bit 'long': arm64. # - aarch64 instruction set, 32-bit pointers, 32-bit 'long': arm64-ilp32. # - 32-bit instruction set, 32-bit pointers, 32-bit 'long': arm or armhf. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __aarch64__ && !(defined __ILP32__ || defined _ILP32) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; hppa1.0 | hppa1.1 | hppa2.0* | hppa64 ) # On hppa, the C compiler may be generating 32-bit code or 64-bit # code. In the latter case, it defines _LP64 and __LP64__. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; ia64* ) # On ia64 on HP-UX, the C compiler may be generating 64-bit code or # 32-bit code. In the latter case, it defines _ILP32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _ILP32 int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=yes], [gl_cv_host_cpu_c_abi_32bit=no]) ;; mips* ) # We should also check for (_MIPS_SZPTR == 64), but gcc keeps this # at 32. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined _MIPS_SZLONG && (_MIPS_SZLONG == 64) int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; powerpc* ) # Different ABIs are in use on AIX vs. Mac OS X vs. Linux,*BSD. # No need to distinguish them here; the caller may distinguish # them based on the OS. # On powerpc64 systems, the C compiler may still be generating # 32-bit code. And on powerpc-ibm-aix systems, the C compiler may # be generating 64-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; rs6000 ) gl_cv_host_cpu_c_abi_32bit=yes ;; riscv32 | riscv64 ) # There are 6 ABIs: ilp32, ilp32f, ilp32d, lp64, lp64f, lp64d. # Size of 'long' and 'void *': AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; s390* ) # On s390x, the C compiler may be generating 64-bit (= s390x) code # or 31-bit (= s390) code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __LP64__ || defined __s390x__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; sparc | sparc64 ) # UltraSPARCs running Linux have `uname -m` = "sparc64", but the # C compiler still generates 32-bit code. AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [gl_cv_host_cpu_c_abi_32bit=no], [gl_cv_host_cpu_c_abi_32bit=yes]) ;; *) gl_cv_host_cpu_c_abi_32bit=unknown ;; esac fi ]) HOST_CPU_C_ABI_32BIT="$gl_cv_host_cpu_c_abi_32bit" ]) ������������������������������������������������recutils-1.9/m4/strcasestr.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000011424�14226564452�013077� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strcasestr.m4 serial 28 dnl Copyright (C) 2005, 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Check that strcasestr is present and works. AC_DEFUN([gl_FUNC_STRCASESTR_SIMPLE], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) dnl Persuade glibc <string.h> to declare strcasestr(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_FUNC_MEMCHR]) AC_CHECK_FUNCS([strcasestr]) if test $ac_cv_func_strcasestr = no; then HAVE_STRCASESTR=0 else if test $REPLACE_MEMCHR = 1; then REPLACE_STRCASESTR=1 else dnl Detect https://sourceware.org/bugzilla/show_bug.cgi?id=12092 dnl and https://sourceware.org/bugzilla/show_bug.cgi?id=23637. AC_CACHE_CHECK([whether strcasestr works], [gl_cv_func_strcasestr_works_always], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <string.h> /* for __GNU_LIBRARY__, strcasestr */ #ifdef __GNU_LIBRARY__ #include <features.h> #if __GLIBC__ == 2 && __GLIBC_MINOR__ == 28 Unlucky user #endif #endif #define P "_EF_BF_BD" #define HAYSTACK "F_BD_CE_BD" P P P P "_C3_88_20" P P P "_C3_A7_20" P #define NEEDLE P P P P P ]], [[return !!strcasestr (HAYSTACK, NEEDLE); ]])], [gl_cv_func_strcasestr_works_always=yes], [gl_cv_func_strcasestr_works_always=no], [dnl glibc 2.12 and cygwin 1.7.7 have a known bug. uClibc is not dnl affected, since it uses different source code for strcasestr dnl than glibc. dnl Assume that it works on all other platforms, even if it is not dnl linear. AC_EGREP_CPP([Lucky user], [ #include <string.h> /* for __GNU_LIBRARY__ */ #ifdef __GNU_LIBRARY__ #include <features.h> #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ || defined __UCLIBC__ Lucky user #endif #elif defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) Lucky user #endif #else Lucky user #endif ], [gl_cv_func_strcasestr_works_always="guessing yes"], [gl_cv_func_strcasestr_works_always="$gl_cross_guess_normal"]) ]) ]) case "$gl_cv_func_strcasestr_works_always" in *yes) ;; *) REPLACE_STRCASESTR=1 ;; esac fi fi ]) # gl_FUNC_STRCASESTR_SIMPLE dnl Additionally, check that strcasestr is efficient. AC_DEFUN([gl_FUNC_STRCASESTR], [ AC_REQUIRE([gl_FUNC_STRCASESTR_SIMPLE]) if test $HAVE_STRCASESTR = 1 && test $REPLACE_STRCASESTR = 0; then AC_CACHE_CHECK([whether strcasestr works in linear time], [gl_cv_func_strcasestr_linear], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <signal.h> /* for signal */ #include <string.h> /* for strcasestr */ #include <stdlib.h> /* for malloc */ #include <unistd.h> /* for alarm */ static void quit (int sig) { _exit (sig + 128); } ]], [[ int result = 0; size_t m = 1000000; char *haystack = (char *) malloc (2 * m + 2); char *needle = (char *) malloc (m + 2); /* Failure to compile this test due to missing alarm is okay, since all such platforms (mingw) also lack strcasestr. */ signal (SIGALRM, quit); alarm (5); /* Check for quadratic performance. */ if (haystack && needle) { memset (haystack, 'A', 2 * m); haystack[2 * m] = 'B'; haystack[2 * m + 1] = 0; memset (needle, 'A', m); needle[m] = 'B'; needle[m + 1] = 0; if (!strcasestr (haystack, needle)) result |= 1; } /* Free allocated memory, in case some sanitizer is watching. */ free (haystack); free (needle); return result; ]])], [gl_cv_func_strcasestr_linear=yes], [gl_cv_func_strcasestr_linear=no], [dnl Only glibc > 2.12 and cygwin > 1.7.7 are known to have a dnl strcasestr that works in linear time. AC_EGREP_CPP([Lucky user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if ((__GLIBC__ == 2 && __GLIBC_MINOR__ > 12) || (__GLIBC__ > 2)) \ && !defined __UCLIBC__ Lucky user #endif #endif #ifdef __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 7) Lucky user #endif #endif ], [gl_cv_func_strcasestr_linear="guessing yes"], [gl_cv_func_strcasestr_linear="$gl_cross_guess_normal"]) ]) ]) case "$gl_cv_func_strcasestr_linear" in *yes) ;; *) REPLACE_STRCASESTR=1 ;; esac fi ]) # gl_FUNC_STRCASESTR # Prerequisites of lib/strcasestr.c. AC_DEFUN([gl_PREREQ_STRCASESTR], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/alloca.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000007312�14226564451�012135� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# alloca.m4 serial 21 dnl Copyright (C) 2002-2004, 2006-2007, 2009-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_ALLOCA], [ AC_REQUIRE([AC_FUNC_ALLOCA]) if test $ac_cv_func_alloca_works = no; then gl_PREREQ_ALLOCA fi # Define an additional variable used in the Makefile substitution. if test $ac_cv_working_alloca_h = yes; then AC_CACHE_CHECK([for alloca as a compiler built-in], [gl_cv_rpl_alloca], [ AC_EGREP_CPP([Need own alloca], [ #if defined __GNUC__ || defined _AIX || defined _MSC_VER Need own alloca #endif ], [gl_cv_rpl_alloca=yes], [gl_cv_rpl_alloca=no]) ]) if test $gl_cv_rpl_alloca = yes; then dnl OK, alloca can be implemented through a compiler built-in. AC_DEFINE([HAVE_ALLOCA], [1], [Define to 1 if you have 'alloca' after including <alloca.h>, a header that may be supplied by this distribution.]) GL_GENERATE_ALLOCA_H=true else dnl alloca exists as a library function, i.e. it is slow and probably dnl a memory leak. Don't define HAVE_ALLOCA in this case. GL_GENERATE_ALLOCA_H=false fi else GL_GENERATE_ALLOCA_H=true fi if test $ac_cv_working_alloca_h = yes; then HAVE_ALLOCA_H=1 else HAVE_ALLOCA_H=0 fi AC_SUBST([HAVE_ALLOCA_H]) ]) # Prerequisites of lib/alloca.c. # STACK_DIRECTION is already handled by AC_FUNC_ALLOCA. AC_DEFUN([gl_PREREQ_ALLOCA], [:]) m4_version_prereq([2.70], [], [ # This works around a bug in autoconf <= 2.68 and has simplifications # from 2.70. See: # https://lists.gnu.org/r/bug-gnulib/2011-06/msg00277.html # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=6cd9f12520b0d6f76d3230d7565feba1ecf29497 # https://git.savannah.gnu.org/cgit/autoconf.git/commit/?id=15edf7fd8094fd14a89d9891dd72a9624762597a # _AC_LIBOBJ_ALLOCA # ----------------- # Set up the LIBOBJ replacement of 'alloca'. Well, not exactly # AC_LIBOBJ since we actually set the output variable 'ALLOCA'. # Nevertheless, for Automake, AC_LIBSOURCES it. m4_define([_AC_LIBOBJ_ALLOCA], [# The SVR3 libPW and SVR4 libucb both contain incompatible functions # that cause trouble. Some versions do not even contain alloca or # contain a buggy version. If you still want to use their alloca, # use ar to extract alloca.o from them instead of compiling alloca.c. AC_LIBSOURCES(alloca.c) AC_SUBST([ALLOCA], [\${LIBOBJDIR}alloca.$ac_objext])dnl AC_DEFINE(C_ALLOCA, 1, [Define to 1 if using 'alloca.c'.]) AC_CACHE_CHECK([stack direction for C alloca], [ac_cv_c_stack_direction], [AC_RUN_IFELSE([AC_LANG_SOURCE( [AC_INCLUDES_DEFAULT int find_stack_direction (int *addr, int depth) { int dir, dummy = 0; if (! addr) addr = &dummy; *addr = addr < &dummy ? 1 : addr == &dummy ? 0 : -1; dir = depth ? find_stack_direction (addr, depth - 1) : 0; return dir + dummy; } int main (int argc, char **argv) { return find_stack_direction (0, argc + !argv + 20) < 0; }])], [ac_cv_c_stack_direction=1], [ac_cv_c_stack_direction=-1], [ac_cv_c_stack_direction=0])]) AH_VERBATIM([STACK_DIRECTION], [/* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION])dnl AC_DEFINE_UNQUOTED(STACK_DIRECTION, $ac_cv_c_stack_direction) ])# _AC_LIBOBJ_ALLOCA ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fseek.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000001005�14226564452�011771� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fseek.m4 serial 4 dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FSEEK], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_FSEEKO]) dnl When fseeko needs fixes, fseek needs them too. if test $HAVE_FSEEKO = 0 || test $REPLACE_FSEEKO = 1; then REPLACE_FSEEK=1 fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/gettime.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000001166�14226564452�012342� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# gettime.m4 serial 11 dnl Copyright (C) 2002, 2004-2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_GETTIME], [ dnl Prerequisites of lib/gettime.c. AC_REQUIRE([gl_CLOCK_TIME]) AC_REQUIRE([gl_TIMESPEC]) AC_CHECK_FUNCS_ONCE([timespec_get]) ]) AC_DEFUN([gl_GETTIME_RES], [ dnl Prerequisites of lib/gettime-res.c. AC_REQUIRE([gl_CLOCK_TIME]) AC_REQUIRE([gl_TIMESPEC]) AC_CHECK_FUNCS_ONCE([timespec_getres]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/utime.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000005555�14226564453�012036� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# utime.m4 serial 4 dnl Copyright (C) 2017-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_UTIME], [ AC_REQUIRE([gl_UTIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS_ONCE([lstat]) case "$host_os" in mingw*) dnl On this platform, the original utime() or _utime() produces dnl timestamps that are affected by the time zone. dnl Use the function name 'rpl_utime' always, in order to avoid a dnl possible conflict with the function name 'utime' from oldnames.lib dnl (MSVC) or liboldnames.a (mingw). REPLACE_UTIME=1 ;; *) AC_CHECK_FUNCS([utime]) if test $ac_cv_func_utime = no; then HAVE_UTIME=0 else dnl On macOS 10.13, utime("link-to-file/", NULL) mistakenly succeeds. AC_CACHE_CHECK([whether utime handles trailing slashes on files], [gl_cv_func_utime_file_slash], [touch conftest.tmp # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> #include <utime.h> ]], [[int result = 0; if (!utime ("conftest.tmp/", NULL)) result |= 1; #if HAVE_LSTAT if (!utime ("conftest.lnk/", NULL)) result |= 2; #endif return result; ]])], [gl_cv_func_utime_file_slash=yes], [gl_cv_func_utime_file_slash=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_utime_file_slash="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_utime_file_slash="guessing yes" ;; # Guess no on macOS. darwin*) gl_cv_func_utime_file_slash="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_utime_file_slash="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.tmp conftest.lnk ]) case $gl_cv_func_stat_file_slash in *no) REPLACE_UTIME=1 AC_DEFINE([REPLACE_FUNC_UTIME_FILE], [1], [Define to 1 if utime needs help when passed a file name with a trailing slash]) ;; esac fi ;; esac ]) # Prerequisites of lib/utime.c. AC_DEFUN([gl_PREREQ_UTIME], [:]) ���������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/copy-file.m4������������������������������������������������������������������������0000644�0000000�0000000�00000000570�14226564451�012570� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# copy-file.m4 serial 5 dnl Copyright (C) 2003, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_COPY_FILE], [ AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CHECK_FUNCS([chown]) ]) ����������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/memrchr.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000001244�14226564447�012342� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memrchr.m4 serial 11 dnl Copyright (C) 2002-2003, 2005-2007, 2009-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MEMRCHR], [ dnl Persuade glibc <string.h> to declare memrchr(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([memrchr]) if test $ac_cv_have_decl_memrchr = no; then HAVE_DECL_MEMRCHR=0 fi AC_CHECK_FUNCS([memrchr]) ]) # Prerequisites of lib/memrchr.c. AC_DEFUN([gl_PREREQ_MEMRCHR], [:]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/pkg.m4������������������������������������������������������������������������������0000644�0000000�0000000�00000024005�13752211127�011451� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl pkg.m4 - Macros to locate and utilise pkg-config. -*- Autoconf -*- dnl serial 11 (pkg-config-0.29) dnl dnl Copyright © 2004 Scott James Remnant <scott@netsplit.com>. dnl Copyright © 2012-2015 Dan Nicholson <dbn.lists@gmail.com> dnl dnl This program is free software; you can redistribute it and/or modify dnl it under the terms of the GNU General Public License as published by dnl the Free Software Foundation; either version 2 of the License, or dnl (at your option) any later version. dnl dnl This program is distributed in the hope that it will be useful, but dnl WITHOUT ANY WARRANTY; without even the implied warranty of dnl MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU dnl General Public License for more details. dnl dnl You should have received a copy of the GNU General Public License dnl along with this program; if not, write to the Free Software dnl Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA dnl 02111-1307, USA. dnl dnl As a special exception to the GNU General Public License, if you dnl distribute this file as part of a program that contains a dnl configuration script generated by Autoconf, you may include it under dnl the same distribution terms that you use for the rest of that dnl program. dnl PKG_PREREQ(MIN-VERSION) dnl ----------------------- dnl Since: 0.29 dnl dnl Verify that the version of the pkg-config macros are at least dnl MIN-VERSION. Unlike PKG_PROG_PKG_CONFIG, which checks the user's dnl installed version of pkg-config, this checks the developer's version dnl of pkg.m4 when generating configure. dnl dnl To ensure that this macro is defined, also add: dnl m4_ifndef([PKG_PREREQ], dnl [m4_fatal([must install pkg-config 0.29 or later before running autoconf/autogen])]) dnl dnl See the "Since" comment for each macro you use to see what version dnl of the macros you require. m4_defun([PKG_PREREQ], [m4_define([PKG_MACROS_VERSION], [0.29]) m4_if(m4_version_compare(PKG_MACROS_VERSION, [$1]), -1, [m4_fatal([pkg.m4 version $1 or higher is required but ]PKG_MACROS_VERSION[ found])]) ])dnl PKG_PREREQ dnl PKG_PROG_PKG_CONFIG([MIN-VERSION]) dnl ---------------------------------- dnl Since: 0.16 dnl dnl Search for the pkg-config tool and set the PKG_CONFIG variable to dnl first found in the path. Checks that the version of pkg-config found dnl is at least MIN-VERSION. If MIN-VERSION is not specified, 0.9.0 is dnl used since that's the first version where most current features of dnl pkg-config existed. AC_DEFUN([PKG_PROG_PKG_CONFIG], [m4_pattern_forbid([^_?PKG_[A-Z_]+$]) m4_pattern_allow([^PKG_CONFIG(_(PATH|LIBDIR|SYSROOT_DIR|ALLOW_SYSTEM_(CFLAGS|LIBS)))?$]) m4_pattern_allow([^PKG_CONFIG_(DISABLE_UNINSTALLED|TOP_BUILD_DIR|DEBUG_SPEW)$]) AC_ARG_VAR([PKG_CONFIG], [path to pkg-config utility]) AC_ARG_VAR([PKG_CONFIG_PATH], [directories to add to pkg-config's search path]) AC_ARG_VAR([PKG_CONFIG_LIBDIR], [path overriding pkg-config's built-in search path]) if test "x$ac_cv_env_PKG_CONFIG_set" != "xset"; then AC_PATH_TOOL([PKG_CONFIG], [pkg-config]) fi if test -n "$PKG_CONFIG"; then _pkg_min_version=m4_default([$1], [0.9.0]) AC_MSG_CHECKING([pkg-config is at least version $_pkg_min_version]) if $PKG_CONFIG --atleast-pkgconfig-version $_pkg_min_version; then AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) PKG_CONFIG="" fi fi[]dnl ])dnl PKG_PROG_PKG_CONFIG dnl PKG_CHECK_EXISTS(MODULES, [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------------------------------- dnl Since: 0.18 dnl dnl Check to see whether a particular set of modules exists. Similar to dnl PKG_CHECK_MODULES(), but does not set variables or print errors. dnl dnl Please remember that m4 expands AC_REQUIRE([PKG_PROG_PKG_CONFIG]) dnl only at the first occurence in configure.ac, so if the first place dnl it's called might be skipped (such as if it is within an "if", you dnl have to call PKG_CHECK_EXISTS manually AC_DEFUN([PKG_CHECK_EXISTS], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl if test -n "$PKG_CONFIG" && \ AC_RUN_LOG([$PKG_CONFIG --exists --print-errors "$1"]); then m4_default([$2], [:]) m4_ifvaln([$3], [else $3])dnl fi]) dnl _PKG_CONFIG([VARIABLE], [COMMAND], [MODULES]) dnl --------------------------------------------- dnl Internal wrapper calling pkg-config via PKG_CONFIG and setting dnl pkg_failed based on the result. m4_define([_PKG_CONFIG], [if test -n "$$1"; then pkg_cv_[]$1="$$1" elif test -n "$PKG_CONFIG"; then PKG_CHECK_EXISTS([$3], [pkg_cv_[]$1=`$PKG_CONFIG --[]$2 "$3" 2>/dev/null` test "x$?" != "x0" && pkg_failed=yes ], [pkg_failed=yes]) else pkg_failed=untried fi[]dnl ])dnl _PKG_CONFIG dnl _PKG_SHORT_ERRORS_SUPPORTED dnl --------------------------- dnl Internal check to see if pkg-config supports short errors. AC_DEFUN([_PKG_SHORT_ERRORS_SUPPORTED], [AC_REQUIRE([PKG_PROG_PKG_CONFIG]) if $PKG_CONFIG --atleast-pkgconfig-version 0.20; then _pkg_short_errors_supported=yes else _pkg_short_errors_supported=no fi[]dnl ])dnl _PKG_SHORT_ERRORS_SUPPORTED dnl PKG_CHECK_MODULES(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl -------------------------------------------------------------- dnl Since: 0.4.0 dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES might not happen, you should be sure to include an dnl explicit call to PKG_PROG_PKG_CONFIG in your configure.ac AC_DEFUN([PKG_CHECK_MODULES], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1][_CFLAGS], [C compiler flags for $1, overriding pkg-config])dnl AC_ARG_VAR([$1][_LIBS], [linker flags for $1, overriding pkg-config])dnl pkg_failed=no AC_MSG_CHECKING([for $1]) _PKG_CONFIG([$1][_CFLAGS], [cflags], [$2]) _PKG_CONFIG([$1][_LIBS], [libs], [$2]) m4_define([_PKG_TEXT], [Alternatively, you may set the environment variables $1[]_CFLAGS and $1[]_LIBS to avoid the need to call pkg-config. See the pkg-config man page for more details.]) if test $pkg_failed = yes; then AC_MSG_RESULT([no]) _PKG_SHORT_ERRORS_SUPPORTED if test $_pkg_short_errors_supported = yes; then $1[]_PKG_ERRORS=`$PKG_CONFIG --short-errors --print-errors --cflags --libs "$2" 2>&1` else $1[]_PKG_ERRORS=`$PKG_CONFIG --print-errors --cflags --libs "$2" 2>&1` fi # Put the nasty error message in config.log where it belongs echo "$$1[]_PKG_ERRORS" >&AS_MESSAGE_LOG_FD m4_default([$4], [AC_MSG_ERROR( [Package requirements ($2) were not met: $$1_PKG_ERRORS Consider adjusting the PKG_CONFIG_PATH environment variable if you installed software in a non-standard prefix. _PKG_TEXT])[]dnl ]) elif test $pkg_failed = untried; then AC_MSG_RESULT([no]) m4_default([$4], [AC_MSG_FAILURE( [The pkg-config script could not be found or is too old. Make sure it is in your PATH or set the PKG_CONFIG environment variable to the full path to pkg-config. _PKG_TEXT To get pkg-config, see <http://pkg-config.freedesktop.org/>.])[]dnl ]) else $1[]_CFLAGS=$pkg_cv_[]$1[]_CFLAGS $1[]_LIBS=$pkg_cv_[]$1[]_LIBS AC_MSG_RESULT([yes]) $3 fi[]dnl ])dnl PKG_CHECK_MODULES dnl PKG_CHECK_MODULES_STATIC(VARIABLE-PREFIX, MODULES, [ACTION-IF-FOUND], dnl [ACTION-IF-NOT-FOUND]) dnl --------------------------------------------------------------------- dnl Since: 0.29 dnl dnl Checks for existence of MODULES and gathers its build flags with dnl static libraries enabled. Sets VARIABLE-PREFIX_CFLAGS from --cflags dnl and VARIABLE-PREFIX_LIBS from --libs. dnl dnl Note that if there is a possibility the first call to dnl PKG_CHECK_MODULES_STATIC might not happen, you should be sure to dnl include an explicit call to PKG_PROG_PKG_CONFIG in your dnl configure.ac. AC_DEFUN([PKG_CHECK_MODULES_STATIC], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl _save_PKG_CONFIG=$PKG_CONFIG PKG_CONFIG="$PKG_CONFIG --static" PKG_CHECK_MODULES($@) PKG_CONFIG=$_save_PKG_CONFIG[]dnl ])dnl PKG_CHECK_MODULES_STATIC dnl PKG_INSTALLDIR([DIRECTORY]) dnl ------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable pkgconfigdir as the location where a module dnl should install pkg-config .pc files. By default the directory is dnl $libdir/pkgconfig, but the default can be changed by passing dnl DIRECTORY. The user can override through the --with-pkgconfigdir dnl parameter. AC_DEFUN([PKG_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${libdir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([pkgconfigdir], [AS_HELP_STRING([--with-pkgconfigdir], pkg_description)],, [with_pkgconfigdir=]pkg_default) AC_SUBST([pkgconfigdir], [$with_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_INSTALLDIR dnl PKG_NOARCH_INSTALLDIR([DIRECTORY]) dnl -------------------------------- dnl Since: 0.27 dnl dnl Substitutes the variable noarch_pkgconfigdir as the location where a dnl module should install arch-independent pkg-config .pc files. By dnl default the directory is $datadir/pkgconfig, but the default can be dnl changed by passing DIRECTORY. The user can override through the dnl --with-noarch-pkgconfigdir parameter. AC_DEFUN([PKG_NOARCH_INSTALLDIR], [m4_pushdef([pkg_default], [m4_default([$1], ['${datadir}/pkgconfig'])]) m4_pushdef([pkg_description], [pkg-config arch-independent installation directory @<:@]pkg_default[@:>@]) AC_ARG_WITH([noarch-pkgconfigdir], [AS_HELP_STRING([--with-noarch-pkgconfigdir], pkg_description)],, [with_noarch_pkgconfigdir=]pkg_default) AC_SUBST([noarch_pkgconfigdir], [$with_noarch_pkgconfigdir]) m4_popdef([pkg_default]) m4_popdef([pkg_description]) ])dnl PKG_NOARCH_INSTALLDIR dnl PKG_CHECK_VAR(VARIABLE, MODULE, CONFIG-VARIABLE, dnl [ACTION-IF-FOUND], [ACTION-IF-NOT-FOUND]) dnl ------------------------------------------- dnl Since: 0.28 dnl dnl Retrieves the value of the pkg-config variable for the given module. AC_DEFUN([PKG_CHECK_VAR], [AC_REQUIRE([PKG_PROG_PKG_CONFIG])dnl AC_ARG_VAR([$1], [value of $3 for $2, overriding pkg-config])dnl _PKG_CONFIG([$1], [variable="][$3]["], [$2]) AS_VAR_COPY([$1], [pkg_cv_][$1]) AS_VAR_IF([$1], [""], [$5], [$4])dnl ])dnl PKG_CHECK_VAR ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/spawn_h.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000015160�14226564452�012342� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# spawn_h.m4 serial 21 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Bruno Haible. AC_DEFUN_ONCE([gl_SPAWN_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) dnl <spawn.h> is always overridden, because of GNULIB_POSIXCHECK. gl_CHECK_NEXT_HEADERS([spawn.h]) if test $ac_cv_header_spawn_h = yes; then HAVE_SPAWN_H=1 AC_CHECK_TYPES([posix_spawnattr_t], [], [HAVE_POSIX_SPAWNATTR_T=0], [[ #include <spawn.h> ]]) AC_CHECK_TYPES([posix_spawn_file_actions_t], [], [HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0], [[ #include <spawn.h> ]]) else HAVE_SPAWN_H=0 HAVE_POSIX_SPAWNATTR_T=0 HAVE_POSIX_SPAWN_FILE_ACTIONS_T=0 fi AC_SUBST([HAVE_SPAWN_H]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) AC_REQUIRE([gl_HAVE_POSIX_SPAWN]) AC_REQUIRE([AC_C_RESTRICT]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <spawn.h> ]], [posix_spawn posix_spawnp posix_spawnattr_init posix_spawnattr_destroy posix_spawnattr_getsigdefault posix_spawnattr_setsigdefault posix_spawnattr_getsigmask posix_spawnattr_setsigmask posix_spawnattr_getflags posix_spawnattr_setflags posix_spawnattr_getpgroup posix_spawnattr_setpgroup posix_spawnattr_getschedpolicy posix_spawnattr_setschedpolicy posix_spawnattr_getschedparam posix_spawnattr_setschedparam posix_spawn_file_actions_init posix_spawn_file_actions_destroy posix_spawn_file_actions_addopen posix_spawn_file_actions_addclose posix_spawn_file_actions_adddup2 posix_spawn_file_actions_addchdir posix_spawn_file_actions_addfchdir]) ]) dnl Checks whether the system has the functions posix_spawn. dnl Sets ac_cv_func_posix_spawn and HAVE_POSIX_SPAWN. AC_DEFUN([gl_HAVE_POSIX_SPAWN], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) LIB_POSIX_SPAWN= AC_SUBST([LIB_POSIX_SPAWN]) gl_saved_libs=$LIBS AC_SEARCH_LIBS([posix_spawn], [rt], [test "$ac_cv_search_posix_spawn" = "none required" || LIB_POSIX_SPAWN=$ac_cv_search_posix_spawn]) AC_CHECK_FUNCS([posix_spawn]) LIBS=$gl_saved_libs if test $ac_cv_func_posix_spawn != yes; then HAVE_POSIX_SPAWN=0 fi ]) # gl_SPAWN_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SPAWN_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SPAWN_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SPAWN_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SPAWN_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_INIT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_GETFLAGS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_SETFLAGS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_GETPGROUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_SETPGROUP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_GETSIGMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_SETSIGMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_POSIX_SPAWNATTR_DESTROY]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SPAWN_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) ]) AC_DEFUN([gl_SPAWN_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_POSIX_SPAWN=1; AC_SUBST([HAVE_POSIX_SPAWN]) HAVE_POSIX_SPAWNATTR_T=1; AC_SUBST([HAVE_POSIX_SPAWNATTR_T]) HAVE_POSIX_SPAWN_FILE_ACTIONS_T=1; AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_T]) HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=1; AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR]) HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=1; AC_SUBST([HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR]) REPLACE_POSIX_SPAWN=0; AC_SUBST([REPLACE_POSIX_SPAWN]) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR=0; AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR]) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=0; AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE]) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=0; AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2]) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR=0; AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR]) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=0; AC_SUBST([REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN]) ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/findprog-in.m4����������������������������������������������������������������������0000644�0000000�0000000�00000000610�14226564447�013115� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# findprog-in.m4 serial 1 dnl Copyright (C) 2003, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FINDPROG_IN], [ dnl Prerequisites of lib/findprog-in.c. AC_REQUIRE([gl_FUNC_EACCESS]) ]) ������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fcntl_h.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000005206�14226564451�012317� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 20 # Configure fcntl.h. dnl Copyright (C) 2006-2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN_ONCE([gl_FCNTL_H], [ AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) AC_REQUIRE([gl_FCNTL_O_FLAGS]) gl_NEXT_HEADERS([fcntl.h]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) dnl Ensure the type mode_t gets defined. AC_REQUIRE([AC_TYPE_MODE_T]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use, if it is not common dnl enough to be declared everywhere. gl_WARN_ON_USE_PREPARE([[#include <fcntl.h> ]], [fcntl openat]) ]) # gl_FCNTL_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_FCNTL_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_FCNTL_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_FCNTL_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_FCNTL_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CREAT]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_FCNTL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NONBLOCKING]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPEN]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_OPENAT]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_CREAT], [1]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_OPEN], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_FCNTL_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_FCNTL_H_DEFAULTS]) ]) AC_DEFUN([gl_FCNTL_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_FCNTL=1; AC_SUBST([HAVE_FCNTL]) HAVE_OPENAT=1; AC_SUBST([HAVE_OPENAT]) REPLACE_CREAT=0; AC_SUBST([REPLACE_CREAT]) REPLACE_FCNTL=0; AC_SUBST([REPLACE_FCNTL]) REPLACE_OPEN=0; AC_SUBST([REPLACE_OPEN]) REPLACE_OPENAT=0; AC_SUBST([REPLACE_OPENAT]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/nstrftime.m4������������������������������������������������������������������������0000644�0000000�0000000�00000001162�14226564452�012713� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 37 # Copyright (C) 1996-1997, 1999-2007, 2009-2022 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Jim Meyering and Paul Eggert. AC_DEFUN([gl_FUNC_GNU_STRFTIME], [ AC_REQUIRE([AC_C_RESTRICT]) # This defines (or not) HAVE_TZNAME and HAVE_STRUCT_TM_TM_ZONE. AC_REQUIRE([AC_STRUCT_TIMEZONE]) AC_REQUIRE([gl_TM_GMTOFF]) AC_DEFINE([my_strftime], [nstrftime], [Define to the name of the strftime replacement function.]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/lib-ld.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000012370�14226564452�012046� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lib-ld.m4 serial 10 dnl Copyright (C) 1996-2003, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Subroutines of libtool.m4, dnl with replacements s/_*LT_PATH/AC_LIB_PROG/ and s/lt_/acl_/ to avoid dnl collision with libtool.m4. dnl From libtool-2.4. Sets the variable with_gnu_ld to yes or no. AC_DEFUN([AC_LIB_PROG_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], [acl_cv_prog_gnu_ld], [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) acl_cv_prog_gnu_ld=yes ;; *) acl_cv_prog_gnu_ld=no ;; esac]) with_gnu_ld=$acl_cv_prog_gnu_ld ]) dnl From libtool-2.4. Sets the variable LD. AC_DEFUN([AC_LIB_PROG_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld [default=no]])], [test "$withval" = no || with_gnu_ld=yes], [with_gnu_ld=no])dnl # Prepare PATH_SEPARATOR. # The user is always right. if test "${PATH_SEPARATOR+set}" != set; then # Determine PATH_SEPARATOR by trying to find /bin/sh in a PATH which # contains only /bin. Note that ksh looks also at the FPATH variable, # so we have to set that as well for the test. 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 if test -n "$LD"; then AC_MSG_CHECKING([for ld]) elif test "$GCC" = yes; then AC_MSG_CHECKING([for ld used by $CC]) elif test "$with_gnu_ld" = yes; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi if test -n "$LD"; then # Let the user override the test with a path. : else AC_CACHE_VAL([acl_cv_path_LD], [ acl_cv_path_LD= # Final result of this test ac_prog=ld # Program to search in $PATH if test "$GCC" = yes; then # Check if gcc -print-prog-name=ld gives a path. case $host in *-*-mingw*) # gcc leaves a trailing carriage return which upsets mingw acl_output=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) acl_output=`($CC -print-prog-name=ld) 2>&5` ;; esac case $acl_output in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld acl_output=`echo "$acl_output" | sed 's%\\\\%/%g'` while echo "$acl_output" | grep "$re_direlt" > /dev/null 2>&1; do acl_output=`echo $acl_output | sed "s%$re_direlt%/%"` done # Got the pathname. No search in PATH is needed. acl_cv_path_LD="$acl_output" ac_prog= ;; "") # If it fails, then pretend we aren't using GCC. ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac fi if test -n "$ac_prog"; then # Search for $ac_prog in $PATH. acl_save_ifs="$IFS"; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS="$acl_save_ifs" test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then acl_cv_path_LD="$ac_dir/$ac_prog" # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$acl_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test "$with_gnu_ld" != no && break ;; *) test "$with_gnu_ld" != yes && break ;; esac fi done IFS="$acl_save_ifs" fi case $host in *-*-aix*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __powerpc64__ || defined __LP64__ int ok; #else error fail #endif ]])], [# The compiler produces 64-bit code. Add option '-b64' so that the # linker groks 64-bit object files. case "$acl_cv_path_LD " in *" -b64 "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -b64" ;; esac ], []) ;; sparc64-*-netbsd*) AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#if defined __sparcv9 || defined __arch64__ int ok; #else error fail #endif ]])], [], [# The compiler produces 32-bit code. Add option '-m elf32_sparc' # so that the linker groks 32-bit object files. case "$acl_cv_path_LD " in *" -m elf32_sparc "*) ;; *) acl_cv_path_LD="$acl_cv_path_LD -m elf32_sparc" ;; esac ]) ;; esac ]) LD="$acl_cv_path_LD" fi if test -n "$LD"; then AC_MSG_RESULT([$LD]) else AC_MSG_RESULT([no]) AC_MSG_ERROR([no acceptable ld found in \$PATH]) fi AC_LIB_PROG_LD_GNU ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/signal_h.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000007315�14226564452�012472� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# signal_h.m4 serial 22 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_SIGNAL_H], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_TYPE_SIGSET_T]) gl_NEXT_HEADERS([signal.h]) # AIX declares sig_atomic_t to already include volatile, and C89 compilers # then choke on 'volatile sig_atomic_t'. C99 requires that it compile. AC_CHECK_TYPE([volatile sig_atomic_t], [], [HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=0], [[ #include <signal.h> ]]) dnl Ensure the type pid_t gets defined. AC_REQUIRE([AC_TYPE_PID_T]) AC_REQUIRE([AC_TYPE_UID_T]) dnl Persuade glibc <signal.h> to define sighandler_t. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_TYPE([sighandler_t], [], [HAVE_SIGHANDLER_T=0], [[ #include <signal.h> ]]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <signal.h> ]], [pthread_sigmask sigaction sigaddset sigdelset sigemptyset sigfillset sigismember sigpending sigprocmask]) AC_REQUIRE([AC_C_RESTRICT]) ]) AC_DEFUN([gl_CHECK_TYPE_SIGSET_T], [ AC_CHECK_TYPES([sigset_t], [gl_cv_type_sigset_t=yes], [gl_cv_type_sigset_t=no], [[ #include <signal.h> /* Mingw defines sigset_t not in <signal.h>, but in <sys/types.h>. */ #include <sys/types.h> ]]) if test $gl_cv_type_sigset_t != yes; then HAVE_SIGSET_T=0 fi ]) # gl_SIGNAL_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SIGNAL_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SIGNAL_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SIGNAL_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SIGNAL_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_PTHREAD_SIGMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_RAISE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGNAL_H_SIGPIPE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGPROCMASK]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SIGACTION]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SIGNAL_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) ]) AC_DEFUN([gl_SIGNAL_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_POSIX_SIGNALBLOCKING=1; AC_SUBST([HAVE_POSIX_SIGNALBLOCKING]) HAVE_PTHREAD_SIGMASK=1; AC_SUBST([HAVE_PTHREAD_SIGMASK]) HAVE_RAISE=1; AC_SUBST([HAVE_RAISE]) HAVE_SIGSET_T=1; AC_SUBST([HAVE_SIGSET_T]) HAVE_SIGINFO_T=1; AC_SUBST([HAVE_SIGINFO_T]) HAVE_SIGACTION=1; AC_SUBST([HAVE_SIGACTION]) HAVE_STRUCT_SIGACTION_SA_SIGACTION=1; AC_SUBST([HAVE_STRUCT_SIGACTION_SA_SIGACTION]) HAVE_TYPE_VOLATILE_SIG_ATOMIC_T=1; AC_SUBST([HAVE_TYPE_VOLATILE_SIG_ATOMIC_T]) HAVE_SIGHANDLER_T=1; AC_SUBST([HAVE_SIGHANDLER_T]) REPLACE_PTHREAD_SIGMASK=0; AC_SUBST([REPLACE_PTHREAD_SIGMASK]) REPLACE_RAISE=0; AC_SUBST([REPLACE_RAISE]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/unlink.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000011706�14226564453�012206� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# unlink.m4 serial 15 dnl Copyright (C) 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_UNLINK], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_HEADERS_ONCE([unistd.h]) dnl Detect FreeBSD 7.2, AIX 7.1, Solaris 9 bug. AC_CACHE_CHECK([whether unlink honors trailing slashes], [gl_cv_func_unlink_honors_slashes], [touch conftest.file # Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then ln -s conftest.file conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <io.h> #endif #include <errno.h> ]GL_MDA_DEFINES], [[int result = 0; if (!unlink ("conftest.file/")) result |= 1; else if (errno != ENOTDIR) result |= 2; #if HAVE_LSTAT if (!unlink ("conftest.lnk/")) result |= 4; else if (errno != ENOTDIR) result |= 8; #endif return result; ]])], [gl_cv_func_unlink_honors_slashes=yes], [gl_cv_func_unlink_honors_slashes=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_unlink_honors_slashes="guessing yes" ;; # Guess yes on glibc systems. *-gnu*) gl_cv_func_unlink_honors_slashes="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_unlink_honors_slashes="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_unlink_honors_slashes="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.file conftest.lnk]) case "$gl_cv_func_unlink_honors_slashes" in *no) REPLACE_UNLINK=1 ;; esac dnl Detect Mac OS X 10.5.6 bug: On read-write HFS mounts, unlink("..") or dnl unlink("../..") succeeds without doing anything. AC_CACHE_CHECK([whether unlink of a parent directory fails as it should], [gl_cv_func_unlink_parent_fails], [case "$host_os" in darwin*) dnl Try to unlink a subdirectory of /tmp, because /tmp is usually on a dnl HFS mount on Mac OS X. Use a subdirectory, owned by the current dnl user, because otherwise unlink() may fail due to permissions dnl reasons, and because when running as root we don't want to risk dnl destroying the entire /tmp. if { # Use the mktemp program if available. If not available, hide the error # message. tmp=`(umask 077 && mktemp -d /tmp/gtXXXXXX) 2>/dev/null` && test -n "$tmp" && test -d "$tmp" } || { # Use a simple mkdir command. It is guaranteed to fail if the directory # already exists. $RANDOM is bash specific and expands to empty in shells # other than bash, ksh and zsh. Its use does not increase security; # rather, it minimizes the probability of failure in a very cluttered /tmp # directory. tmp=/tmp/gt$$-$RANDOM (umask 077 && mkdir "$tmp") }; then mkdir "$tmp/subdir" GL_SUBDIR_FOR_UNLINK="$tmp/subdir" export GL_SUBDIR_FOR_UNLINK AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdlib.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <direct.h> # include <io.h> #endif ]GL_MDA_DEFINES[ int main () { int result = 0; if (chdir (getenv ("GL_SUBDIR_FOR_UNLINK")) != 0) result |= 1; else if (unlink ("..") == 0) result |= 2; return result; } ]])], [gl_cv_func_unlink_parent_fails=yes], [gl_cv_func_unlink_parent_fails=no], [# If we don't know, obey --enable-cross-guesses. gl_cv_func_unlink_parent_fails="$gl_cross_guess_normal" ]) unset GL_SUBDIR_FOR_UNLINK rm -rf "$tmp" else gl_cv_func_unlink_parent_fails="guessing no" fi ;; *) gl_cv_func_unlink_parent_fails="guessing yes" ;; esac ]) case "$gl_cv_func_unlink_parent_fails" in *no) REPLACE_UNLINK=1 AC_DEFINE([UNLINK_PARENT_BUG], [1], [Define to 1 if unlink() on a parent directory may succeed]) ;; esac ]) ����������������������������������������������������������recutils-1.9/m4/tmpdir.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000000541�14226564453�012200� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# tmpdir.m4 serial 4 dnl Copyright (C) 2001-2002, 2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Prerequisites for lib/tmpdir.c AC_DEFUN([gt_TMPDIR], [:]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/strcase.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000001774�14226564452�012355� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strcase.m4 serial 12 dnl Copyright (C) 2002, 2005-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_STRCASE], [ gl_FUNC_STRCASECMP gl_FUNC_STRNCASECMP ]) AC_DEFUN([gl_FUNC_STRCASECMP], [ AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) AC_CHECK_FUNCS([strcasecmp]) if test $ac_cv_func_strcasecmp = no; then HAVE_STRCASECMP=0 fi ]) AC_DEFUN([gl_FUNC_STRNCASECMP], [ AC_REQUIRE([gl_STRINGS_H_DEFAULTS]) AC_CHECK_FUNCS([strncasecmp]) if test $ac_cv_func_strncasecmp = yes; then HAVE_STRNCASECMP=1 else HAVE_STRNCASECMP=0 fi AC_CHECK_DECLS([strncasecmp]) if test $ac_cv_have_decl_strncasecmp = no; then HAVE_DECL_STRNCASECMP=0 fi ]) # Prerequisites of lib/strcasecmp.c. AC_DEFUN([gl_PREREQ_STRCASECMP], [ : ]) # Prerequisites of lib/strncasecmp.c. AC_DEFUN([gl_PREREQ_STRNCASECMP], [ : ]) ����recutils-1.9/m4/getline.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000006374�14226564452�012341� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# getline.m4 serial 30 dnl Copyright (C) 1998-2003, 2005-2007, 2009-2022 Free Software Foundation, dnl Inc. dnl dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_PREREQ([2.59]) dnl See if there's a working, system-supplied version of the getline function. dnl We can't just do AC_REPLACE_FUNCS([getline]) because some systems dnl have a function by that name in -linet that doesn't have anything dnl to do with the function we need. AC_DEFUN([gl_FUNC_GETLINE], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Persuade glibc <stdio.h> to declare getline(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_CHECK_DECLS_ONCE([getline]) gl_getline_needs_run_time_check=no AC_CHECK_FUNC([getline], [dnl Found it in some library. Verify that it works. gl_getline_needs_run_time_check=yes], [am_cv_func_working_getline=no]) if test $gl_getline_needs_run_time_check = yes; then AC_CACHE_CHECK([for working getline function], [am_cv_func_working_getline], [echo fooNbarN | tr -d '\012' | tr N '\012' > conftest.data AC_RUN_IFELSE([AC_LANG_SOURCE([[ # include <stdio.h> # include <stdlib.h> # include <string.h> int main () { FILE *in = fopen ("./conftest.data", "r"); if (!in) return 1; { /* Test result for a NULL buffer and a zero size. Based on a test program from Karl Heuer. */ char *line = NULL; size_t siz = 0; int len = getline (&line, &siz, in); if (!(len == 4 && line && strcmp (line, "foo\n") == 0)) { free (line); fclose (in); return 2; } free (line); } { /* Test result for a NULL buffer and a non-zero size. This crashes on FreeBSD 8.0. */ char *line = NULL; size_t siz = (size_t)(~0) / 4; if (getline (&line, &siz, in) == -1) { fclose (in); return 3; } free (line); } fclose (in); return 0; } ]])], [am_cv_func_working_getline=yes], [am_cv_func_working_getline=no], [dnl We're cross compiling. dnl Guess it works on glibc2 systems and musl systems. AC_EGREP_CPP([Lucky GNU user], [ #include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ >= 2) && !defined __UCLIBC__ Lucky GNU user #endif #endif ], [am_cv_func_working_getline="guessing yes"], [case "$host_os" in *-musl*) am_cv_func_working_getline="guessing yes" ;; *) am_cv_func_working_getline="$gl_cross_guess_normal" ;; esac ]) ]) ]) fi if test $ac_cv_have_decl_getline = no; then HAVE_DECL_GETLINE=0 fi case "$am_cv_func_working_getline" in *yes) ;; *) dnl Set REPLACE_GETLINE always: Even if we have not found the broken dnl getline function among $LIBS, it may exist in libinet and the dnl executable may be linked with -linet. REPLACE_GETLINE=1 ;; esac ]) # Prerequisites of lib/getline.c. AC_DEFUN([gl_PREREQ_GETLINE], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/ltversion.m4������������������������������������������������������������������������0000644�0000000�0000000�00000001273�13253165100�012712� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ltversion.m4 -- version numbers -*- Autoconf -*- # # Copyright (C) 2004, 2011-2015 Free Software Foundation, Inc. # Written by Scott James Remnant, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # @configure_input@ # serial 4179 ltversion.m4 # This file is part of GNU Libtool m4_define([LT_PACKAGE_VERSION], [2.4.6]) m4_define([LT_PACKAGE_REVISION], [2.4.6]) AC_DEFUN([LTVERSION_VERSION], [macro_version='2.4.6' macro_revision='2.4.6' _LT_DECL(, macro_version, 0, [Which release of libtool.m4 was used?]) _LT_DECL(, macro_revision, 0) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/libtool.m4��������������������������������������������������������������������������0000644�0000000�0000000�00001126171�13253165100�012337� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# libtool.m4 - Configure libtool for the host system. -*-Autoconf-*- # # Copyright (C) 1996-2001, 2003-2015 Free Software Foundation, Inc. # Written by Gordon Matzigkeit, 1996 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. m4_define([_LT_COPYING], [dnl # Copyright (C) 2014 Free Software Foundation, Inc. # This is free software; see the source for copying conditions. There is NO # warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. # GNU Libtool is free software; you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation; either version 2 of of the License, or # (at your option) any later version. # # As a special exception to the GNU General Public License, if you # distribute this file as part of a program or library that is built # using GNU Libtool, you may include this file under the same # distribution terms that you use for the rest of that program. # # GNU Libtool is distributed in the hope that it will be useful, but # WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. ]) # serial 58 LT_INIT # LT_PREREQ(VERSION) # ------------------ # Complain and exit if this libtool version is less that VERSION. m4_defun([LT_PREREQ], [m4_if(m4_version_compare(m4_defn([LT_PACKAGE_VERSION]), [$1]), -1, [m4_default([$3], [m4_fatal([Libtool version $1 or higher is required], 63)])], [$2])]) # _LT_CHECK_BUILDDIR # ------------------ # Complain if the absolute build directory name contains unusual characters m4_defun([_LT_CHECK_BUILDDIR], [case `pwd` in *\ * | *\ *) AC_MSG_WARN([Libtool does not cope well with whitespace in `pwd`]) ;; esac ]) # LT_INIT([OPTIONS]) # ------------------ AC_DEFUN([LT_INIT], [AC_PREREQ([2.62])dnl We use AC_PATH_PROGS_FEATURE_CHECK AC_REQUIRE([AC_CONFIG_AUX_DIR_DEFAULT])dnl AC_BEFORE([$0], [LT_LANG])dnl AC_BEFORE([$0], [LT_OUTPUT])dnl AC_BEFORE([$0], [LTDL_INIT])dnl m4_require([_LT_CHECK_BUILDDIR])dnl dnl Autoconf doesn't catch unexpanded LT_ macros by default: m4_pattern_forbid([^_?LT_[A-Z_]+$])dnl m4_pattern_allow([^(_LT_EOF|LT_DLGLOBAL|LT_DLLAZY_OR_NOW|LT_MULTI_MODULE)$])dnl dnl aclocal doesn't pull ltoptions.m4, ltsugar.m4, or ltversion.m4 dnl unless we require an AC_DEFUNed macro: AC_REQUIRE([LTOPTIONS_VERSION])dnl AC_REQUIRE([LTSUGAR_VERSION])dnl AC_REQUIRE([LTVERSION_VERSION])dnl AC_REQUIRE([LTOBSOLETE_VERSION])dnl m4_require([_LT_PROG_LTMAIN])dnl _LT_SHELL_INIT([SHELL=${CONFIG_SHELL-/bin/sh}]) dnl Parse OPTIONS _LT_SET_OPTIONS([$0], [$1]) # This can be used to rebuild libtool when needed LIBTOOL_DEPS=$ltmain # Always use our own libtool. LIBTOOL='$(SHELL) $(top_builddir)/libtool' AC_SUBST(LIBTOOL)dnl _LT_SETUP # Only expand once: m4_define([LT_INIT]) ])# LT_INIT # Old names: AU_ALIAS([AC_PROG_LIBTOOL], [LT_INIT]) AU_ALIAS([AM_PROG_LIBTOOL], [LT_INIT]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PROG_LIBTOOL], []) dnl AC_DEFUN([AM_PROG_LIBTOOL], []) # _LT_PREPARE_CC_BASENAME # ----------------------- m4_defun([_LT_PREPARE_CC_BASENAME], [ # Calculate cc_basename. Skip known compiler wrappers and cross-prefix. func_cc_basename () { for cc_temp in @S|@*""; do case $cc_temp in compile | *[[\\/]]compile | ccache | *[[\\/]]ccache ) ;; distcc | *[[\\/]]distcc | purify | *[[\\/]]purify ) ;; \-*) ;; *) break;; esac done func_cc_basename_result=`$ECHO "$cc_temp" | $SED "s%.*/%%; s%^$host_alias-%%"` } ])# _LT_PREPARE_CC_BASENAME # _LT_CC_BASENAME(CC) # ------------------- # It would be clearer to call AC_REQUIREs from _LT_PREPARE_CC_BASENAME, # but that macro is also expanded into generated libtool script, which # arranges for $SED and $ECHO to be set by different means. m4_defun([_LT_CC_BASENAME], [m4_require([_LT_PREPARE_CC_BASENAME])dnl AC_REQUIRE([_LT_DECL_SED])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl func_cc_basename $1 cc_basename=$func_cc_basename_result ]) # _LT_FILEUTILS_DEFAULTS # ---------------------- # It is okay to use these file commands and assume they have been set # sensibly after 'm4_require([_LT_FILEUTILS_DEFAULTS])'. m4_defun([_LT_FILEUTILS_DEFAULTS], [: ${CP="cp -f"} : ${MV="mv -f"} : ${RM="rm -f"} ])# _LT_FILEUTILS_DEFAULTS # _LT_SETUP # --------- m4_defun([_LT_SETUP], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_REQUIRE([_LT_PREPARE_SED_QUOTE_VARS])dnl AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH])dnl _LT_DECL([], [PATH_SEPARATOR], [1], [The PATH separator for the build system])dnl dnl _LT_DECL([], [host_alias], [0], [The host system])dnl _LT_DECL([], [host], [0])dnl _LT_DECL([], [host_os], [0])dnl dnl _LT_DECL([], [build_alias], [0], [The build system])dnl _LT_DECL([], [build], [0])dnl _LT_DECL([], [build_os], [0])dnl dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl dnl AC_REQUIRE([AC_PROG_LN_S])dnl test -z "$LN_S" && LN_S="ln -s" _LT_DECL([], [LN_S], [1], [Whether we need soft or hard links])dnl dnl AC_REQUIRE([LT_CMD_MAX_LEN])dnl _LT_DECL([objext], [ac_objext], [0], [Object file suffix (normally "o")])dnl _LT_DECL([], [exeext], [0], [Executable file suffix (normally "")])dnl dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PATH_CONVERSION_FUNCTIONS])dnl m4_require([_LT_CMD_RELOAD])dnl m4_require([_LT_CHECK_MAGIC_METHOD])dnl m4_require([_LT_CHECK_SHAREDLIB_FROM_LINKLIB])dnl m4_require([_LT_CMD_OLD_ARCHIVE])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_WITH_SYSROOT])dnl m4_require([_LT_CMD_TRUNCATE])dnl _LT_CONFIG_LIBTOOL_INIT([ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes INIT. if test -n "\${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi ]) if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi _LT_CHECK_OBJDIR m4_require([_LT_TAG_COMPILER])dnl case $host_os in aix3*) # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi ;; esac # Global variables: ofile=libtool can_build_shared=yes # All known linkers require a '.a' archive for static linking (except MSVC, # which needs '.lib'). libext=a with_gnu_ld=$lt_cv_prog_gnu_ld old_CC=$CC old_CFLAGS=$CFLAGS # Set sane defaults for various variables test -z "$CC" && CC=cc test -z "$LTCC" && LTCC=$CC test -z "$LTCFLAGS" && LTCFLAGS=$CFLAGS test -z "$LD" && LD=ld test -z "$ac_objext" && ac_objext=o _LT_CC_BASENAME([$compiler]) # Only perform the check for file, if the check method requires it test -z "$MAGIC_CMD" && MAGIC_CMD=file case $deplibs_check_method in file_magic*) if test "$file_magic_cmd" = '$MAGIC_CMD'; then _LT_PATH_MAGIC fi ;; esac # Use C for the default configuration in the libtool script LT_SUPPORTED_TAG([CC]) _LT_LANG_C_CONFIG _LT_LANG_DEFAULT_CONFIG _LT_CONFIG_COMMANDS ])# _LT_SETUP # _LT_PREPARE_SED_QUOTE_VARS # -------------------------- # Define a few sed substitution that help us do robust quoting. m4_defun([_LT_PREPARE_SED_QUOTE_VARS], [# Backslashify metacharacters that are still active within # double-quoted strings. sed_quote_subst='s/\([["`$\\]]\)/\\\1/g' # Same as above, but do not quote variable references. double_quote_subst='s/\([["`\\]]\)/\\\1/g' # Sed substitution to delay expansion of an escaped shell variable in a # double_quote_subst'ed string. delay_variable_subst='s/\\\\\\\\\\\$/\\\\\\$/g' # Sed substitution to delay expansion of an escaped single quote. delay_single_quote_subst='s/'\''/'\'\\\\\\\'\''/g' # Sed substitution to avoid accidental globbing in evaled expressions no_glob_subst='s/\*/\\\*/g' ]) # _LT_PROG_LTMAIN # --------------- # Note that this code is called both from 'configure', and 'config.status' # now that we use AC_CONFIG_COMMANDS to generate libtool. Notably, # 'config.status' has no value for ac_aux_dir unless we are using Automake, # so we pass a copy along to make sure it has a sensible value anyway. m4_defun([_LT_PROG_LTMAIN], [m4_ifdef([AC_REQUIRE_AUX_FILE], [AC_REQUIRE_AUX_FILE([ltmain.sh])])dnl _LT_CONFIG_LIBTOOL_INIT([ac_aux_dir='$ac_aux_dir']) ltmain=$ac_aux_dir/ltmain.sh ])# _LT_PROG_LTMAIN ## ------------------------------------- ## ## Accumulate code for creating libtool. ## ## ------------------------------------- ## # So that we can recreate a full libtool script including additional # tags, we accumulate the chunks of code to send to AC_CONFIG_COMMANDS # in macros and then make a single call at the end using the 'libtool' # label. # _LT_CONFIG_LIBTOOL_INIT([INIT-COMMANDS]) # ---------------------------------------- # Register INIT-COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL_INIT], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_INIT], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_INIT]) # _LT_CONFIG_LIBTOOL([COMMANDS]) # ------------------------------ # Register COMMANDS to be passed to AC_CONFIG_COMMANDS later. m4_define([_LT_CONFIG_LIBTOOL], [m4_ifval([$1], [m4_append([_LT_OUTPUT_LIBTOOL_COMMANDS], [$1 ])])]) # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS]) # _LT_CONFIG_SAVE_COMMANDS([COMMANDS], [INIT_COMMANDS]) # ----------------------------------------------------- m4_defun([_LT_CONFIG_SAVE_COMMANDS], [_LT_CONFIG_LIBTOOL([$1]) _LT_CONFIG_LIBTOOL_INIT([$2]) ]) # _LT_FORMAT_COMMENT([COMMENT]) # ----------------------------- # Add leading comment marks to the start of each line, and a trailing # full-stop to the whole comment if one is not present already. m4_define([_LT_FORMAT_COMMENT], [m4_ifval([$1], [ m4_bpatsubst([m4_bpatsubst([$1], [^ *], [# ])], [['`$\]], [\\\&])]m4_bmatch([$1], [[!?.]$], [], [.]) )]) ## ------------------------ ## ## FIXME: Eliminate VARNAME ## ## ------------------------ ## # _LT_DECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION], [IS-TAGGED?]) # ------------------------------------------------------------------- # CONFIGNAME is the name given to the value in the libtool script. # VARNAME is the (base) name used in the configure script. # VALUE may be 0, 1 or 2 for a computed quote escaped value based on # VARNAME. Any other value will be used directly. m4_define([_LT_DECL], [lt_if_append_uniq([lt_decl_varnames], [$2], [, ], [lt_dict_add_subkey([lt_decl_dict], [$2], [libtool_name], [m4_ifval([$1], [$1], [$2])]) lt_dict_add_subkey([lt_decl_dict], [$2], [value], [$3]) m4_ifval([$4], [lt_dict_add_subkey([lt_decl_dict], [$2], [description], [$4])]) lt_dict_add_subkey([lt_decl_dict], [$2], [tagged?], [m4_ifval([$5], [yes], [no])])]) ]) # _LT_TAGDECL([CONFIGNAME], VARNAME, VALUE, [DESCRIPTION]) # -------------------------------------------------------- m4_define([_LT_TAGDECL], [_LT_DECL([$1], [$2], [$3], [$4], [yes])]) # lt_decl_tag_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_tag_varnames], [_lt_decl_filter([tagged?], [yes], $@)]) # _lt_decl_filter(SUBKEY, VALUE, [SEPARATOR], [VARNAME1..]) # --------------------------------------------------------- m4_define([_lt_decl_filter], [m4_case([$#], [0], [m4_fatal([$0: too few arguments: $#])], [1], [m4_fatal([$0: too few arguments: $#: $1])], [2], [lt_dict_filter([lt_decl_dict], [$1], [$2], [], lt_decl_varnames)], [3], [lt_dict_filter([lt_decl_dict], [$1], [$2], [$3], lt_decl_varnames)], [lt_dict_filter([lt_decl_dict], $@)])[]dnl ]) # lt_decl_quote_varnames([SEPARATOR], [VARNAME1...]) # -------------------------------------------------- m4_define([lt_decl_quote_varnames], [_lt_decl_filter([value], [1], $@)]) # lt_decl_dquote_varnames([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_dquote_varnames], [_lt_decl_filter([value], [2], $@)]) # lt_decl_varnames_tagged([SEPARATOR], [VARNAME1...]) # --------------------------------------------------- m4_define([lt_decl_varnames_tagged], [m4_assert([$# <= 2])dnl _$0(m4_quote(m4_default([$1], [[, ]])), m4_ifval([$2], [[$2]], [m4_dquote(lt_decl_tag_varnames)]), m4_split(m4_normalize(m4_quote(_LT_TAGS)), [ ]))]) m4_define([_lt_decl_varnames_tagged], [m4_ifval([$3], [lt_combine([$1], [$2], [_], $3)])]) # lt_decl_all_varnames([SEPARATOR], [VARNAME1...]) # ------------------------------------------------ m4_define([lt_decl_all_varnames], [_$0(m4_quote(m4_default([$1], [[, ]])), m4_if([$2], [], m4_quote(lt_decl_varnames), m4_quote(m4_shift($@))))[]dnl ]) m4_define([_lt_decl_all_varnames], [lt_join($@, lt_decl_varnames_tagged([$1], lt_decl_tag_varnames([[, ]], m4_shift($@))))dnl ]) # _LT_CONFIG_STATUS_DECLARE([VARNAME]) # ------------------------------------ # Quote a variable value, and forward it to 'config.status' so that its # declaration there will have the same value as in 'configure'. VARNAME # must have a single quote delimited value for this to work. m4_define([_LT_CONFIG_STATUS_DECLARE], [$1='`$ECHO "$][$1" | $SED "$delay_single_quote_subst"`']) # _LT_CONFIG_STATUS_DECLARATIONS # ------------------------------ # We delimit libtool config variables with single quotes, so when # we write them to config.status, we have to be sure to quote all # embedded single quotes properly. In configure, this macro expands # each variable declared with _LT_DECL (and _LT_TAGDECL) into: # # <var>='`$ECHO "$<var>" | $SED "$delay_single_quote_subst"`' m4_defun([_LT_CONFIG_STATUS_DECLARATIONS], [m4_foreach([_lt_var], m4_quote(lt_decl_all_varnames), [m4_n([_LT_CONFIG_STATUS_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAGS # ---------------- # Output comment and list of tags supported by the script m4_defun([_LT_LIBTOOL_TAGS], [_LT_FORMAT_COMMENT([The names of the tagged configurations supported by this script])dnl available_tags='_LT_TAGS'dnl ]) # _LT_LIBTOOL_DECLARE(VARNAME, [TAG]) # ----------------------------------- # Extract the dictionary values for VARNAME (optionally with TAG) and # expand to a commented shell variable setting: # # # Some comment about what VAR is for. # visible_name=$lt_internal_name m4_define([_LT_LIBTOOL_DECLARE], [_LT_FORMAT_COMMENT(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [description])))[]dnl m4_pushdef([_libtool_name], m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [libtool_name])))[]dnl m4_case(m4_quote(lt_dict_fetch([lt_decl_dict], [$1], [value])), [0], [_libtool_name=[$]$1], [1], [_libtool_name=$lt_[]$1], [2], [_libtool_name=$lt_[]$1], [_libtool_name=lt_dict_fetch([lt_decl_dict], [$1], [value])])[]dnl m4_ifval([$2], [_$2])[]m4_popdef([_libtool_name])[]dnl ]) # _LT_LIBTOOL_CONFIG_VARS # ----------------------- # Produce commented declarations of non-tagged libtool config variables # suitable for insertion in the LIBTOOL CONFIG section of the 'libtool' # script. Tagged libtool config variables (even for the LIBTOOL CONFIG # section) are produced by _LT_LIBTOOL_TAG_VARS. m4_defun([_LT_LIBTOOL_CONFIG_VARS], [m4_foreach([_lt_var], m4_quote(_lt_decl_filter([tagged?], [no], [], lt_decl_varnames)), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var)])])]) # _LT_LIBTOOL_TAG_VARS(TAG) # ------------------------- m4_define([_LT_LIBTOOL_TAG_VARS], [m4_foreach([_lt_var], m4_quote(lt_decl_tag_varnames), [m4_n([_LT_LIBTOOL_DECLARE(_lt_var, [$1])])])]) # _LT_TAGVAR(VARNAME, [TAGNAME]) # ------------------------------ m4_define([_LT_TAGVAR], [m4_ifval([$2], [$1_$2], [$1])]) # _LT_CONFIG_COMMANDS # ------------------- # Send accumulated output to $CONFIG_STATUS. Thanks to the lists of # variables for single and double quote escaping we saved from calls # to _LT_DECL, we can put quote escaped variables declarations # into 'config.status', and then the shell code to quote escape them in # for loops in 'config.status'. Finally, any additional code accumulated # from calls to _LT_CONFIG_LIBTOOL_INIT is expanded. m4_defun([_LT_CONFIG_COMMANDS], [AC_PROVIDE_IFELSE([LT_OUTPUT], dnl If the libtool generation code has been placed in $CONFIG_LT, dnl instead of duplicating it all over again into config.status, dnl then we will have config.status run $CONFIG_LT later, so it dnl needs to know what name is stored there: [AC_CONFIG_COMMANDS([libtool], [$SHELL $CONFIG_LT || AS_EXIT(1)], [CONFIG_LT='$CONFIG_LT'])], dnl If the libtool generation code is destined for config.status, dnl expand the accumulated commands and init code now: [AC_CONFIG_COMMANDS([libtool], [_LT_OUTPUT_LIBTOOL_COMMANDS], [_LT_OUTPUT_LIBTOOL_COMMANDS_INIT])]) ])#_LT_CONFIG_COMMANDS # Initialize. m4_define([_LT_OUTPUT_LIBTOOL_COMMANDS_INIT], [ # The HP-UX ksh and POSIX shell print the target directory to stdout # if CDPATH is set. (unset CDPATH) >/dev/null 2>&1 && unset CDPATH sed_quote_subst='$sed_quote_subst' double_quote_subst='$double_quote_subst' delay_variable_subst='$delay_variable_subst' _LT_CONFIG_STATUS_DECLARATIONS LTCC='$LTCC' LTCFLAGS='$LTCFLAGS' compiler='$compiler_DEFAULT' # A function that is used when there is no print builtin or printf. func_fallback_echo () { eval 'cat <<_LTECHO_EOF \$[]1 _LTECHO_EOF' } # Quote evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_quote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED \\"\\\$sed_quote_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done # Double-quote double-evaled strings. for var in lt_decl_all_varnames([[ \ ]], lt_decl_dquote_varnames); do case \`eval \\\\\$ECHO \\\\""\\\\\$\$var"\\\\"\` in *[[\\\\\\\`\\"\\\$]]*) eval "lt_\$var=\\\\\\"\\\`\\\$ECHO \\"\\\$\$var\\" | \\\$SED -e \\"\\\$double_quote_subst\\" -e \\"\\\$sed_quote_subst\\" -e \\"\\\$delay_variable_subst\\"\\\`\\\\\\"" ## exclude from sc_prohibit_nested_quotes ;; *) eval "lt_\$var=\\\\\\"\\\$\$var\\\\\\"" ;; esac done _LT_OUTPUT_LIBTOOL_INIT ]) # _LT_GENERATED_FILE_INIT(FILE, [COMMENT]) # ------------------------------------ # Generate a child script FILE with all initialization necessary to # reuse the environment learned by the parent script, and make the # file executable. If COMMENT is supplied, it is inserted after the # '#!' sequence but before initialization text begins. After this # macro, additional text can be appended to FILE to form the body of # the child script. The macro ends with non-zero status if the # file could not be fully written (such as if the disk is full). m4_ifdef([AS_INIT_GENERATED], [m4_defun([_LT_GENERATED_FILE_INIT],[AS_INIT_GENERATED($@)])], [m4_defun([_LT_GENERATED_FILE_INIT], [m4_require([AS_PREPARE])]dnl [m4_pushdef([AS_MESSAGE_LOG_FD])]dnl [lt_write_fail=0 cat >$1 <<_ASEOF || lt_write_fail=1 #! $SHELL # Generated by $as_me. $2 SHELL=\${CONFIG_SHELL-$SHELL} export SHELL _ASEOF cat >>$1 <<\_ASEOF || lt_write_fail=1 AS_SHELL_SANITIZE _AS_PREPARE exec AS_MESSAGE_FD>&1 _ASEOF test 0 = "$lt_write_fail" && chmod +x $1[]dnl m4_popdef([AS_MESSAGE_LOG_FD])])])# _LT_GENERATED_FILE_INIT # LT_OUTPUT # --------- # This macro allows early generation of the libtool script (before # AC_OUTPUT is called), incase it is used in configure for compilation # tests. AC_DEFUN([LT_OUTPUT], [: ${CONFIG_LT=./config.lt} AC_MSG_NOTICE([creating $CONFIG_LT]) _LT_GENERATED_FILE_INIT(["$CONFIG_LT"], [# Run this file to recreate a libtool stub with the current configuration.]) cat >>"$CONFIG_LT" <<\_LTEOF lt_cl_silent=false exec AS_MESSAGE_LOG_FD>>config.log { echo AS_BOX([Running $as_me.]) } >&AS_MESSAGE_LOG_FD lt_cl_help="\ '$as_me' creates a local libtool stub from the current configuration, for use in further configure time tests before the real libtool is generated. Usage: $[0] [[OPTIONS]] -h, --help print this help, then exit -V, --version print version number, then exit -q, --quiet do not print progress messages -d, --debug don't remove temporary files Report bugs to <bug-libtool@gnu.org>." lt_cl_version="\ m4_ifset([AC_PACKAGE_NAME], [AC_PACKAGE_NAME ])config.lt[]dnl m4_ifset([AC_PACKAGE_VERSION], [ AC_PACKAGE_VERSION]) configured by $[0], generated by m4_PACKAGE_STRING. Copyright (C) 2011 Free Software Foundation, Inc. This config.lt script is free software; the Free Software Foundation gives unlimited permision to copy, distribute and modify it." while test 0 != $[#] do case $[1] in --version | --v* | -V ) echo "$lt_cl_version"; exit 0 ;; --help | --h* | -h ) echo "$lt_cl_help"; exit 0 ;; --debug | --d* | -d ) debug=: ;; --quiet | --q* | --silent | --s* | -q ) lt_cl_silent=: ;; -*) AC_MSG_ERROR([unrecognized option: $[1] Try '$[0] --help' for more information.]) ;; *) AC_MSG_ERROR([unrecognized argument: $[1] Try '$[0] --help' for more information.]) ;; esac shift done if $lt_cl_silent; then exec AS_MESSAGE_FD>/dev/null fi _LTEOF cat >>"$CONFIG_LT" <<_LTEOF _LT_OUTPUT_LIBTOOL_COMMANDS_INIT _LTEOF cat >>"$CONFIG_LT" <<\_LTEOF AC_MSG_NOTICE([creating $ofile]) _LT_OUTPUT_LIBTOOL_COMMANDS AS_EXIT(0) _LTEOF chmod +x "$CONFIG_LT" # configure is writing to config.log, but config.lt does its own redirection, # appending to config.log, which fails on DOS, as config.log is still kept # open by configure. Here we exec the FD to /dev/null, effectively closing # config.log, so it can be properly (re)opened and appended to by config.lt. lt_cl_success=: test yes = "$silent" && lt_config_lt_args="$lt_config_lt_args --quiet" exec AS_MESSAGE_LOG_FD>/dev/null $SHELL "$CONFIG_LT" $lt_config_lt_args || lt_cl_success=false exec AS_MESSAGE_LOG_FD>>config.log $lt_cl_success || AS_EXIT(1) ])# LT_OUTPUT # _LT_CONFIG(TAG) # --------------- # If TAG is the built-in tag, create an initial libtool script with a # default configuration from the untagged config vars. Otherwise add code # to config.status for appending the configuration named by TAG from the # matching tagged config vars. m4_defun([_LT_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_CONFIG_SAVE_COMMANDS([ m4_define([_LT_TAG], m4_if([$1], [], [C], [$1]))dnl m4_if(_LT_TAG, [C], [ # See if we are running on zsh, and set the options that allow our # commands through without removal of \ escapes. if test -n "${ZSH_VERSION+set}"; then setopt NO_GLOB_SUBST fi cfgfile=${ofile}T trap "$RM \"$cfgfile\"; exit 1" 1 2 15 $RM "$cfgfile" cat <<_LT_EOF >> "$cfgfile" #! $SHELL # Generated automatically by $as_me ($PACKAGE) $VERSION # NOTE: Changes made to this file will be lost: look at ltmain.sh. # Provide generalized library-building support services. # Written by Gordon Matzigkeit, 1996 _LT_COPYING _LT_LIBTOOL_TAGS # Configured defaults for sys_lib_dlsearch_path munging. : \${LT_SYS_LIBRARY_PATH="$configure_time_lt_sys_library_path"} # ### BEGIN LIBTOOL CONFIG _LT_LIBTOOL_CONFIG_VARS _LT_LIBTOOL_TAG_VARS # ### END LIBTOOL CONFIG _LT_EOF cat <<'_LT_EOF' >> "$cfgfile" # ### BEGIN FUNCTIONS SHARED WITH CONFIGURE _LT_PREPARE_MUNGE_PATH_LIST _LT_PREPARE_CC_BASENAME # ### END FUNCTIONS SHARED WITH CONFIGURE _LT_EOF case $host_os in aix3*) cat <<\_LT_EOF >> "$cfgfile" # AIX sometimes has problems with the GCC collect2 program. For some # reason, if we set the COLLECT_NAMES environment variable, the problems # vanish in a puff of smoke. if test set != "${COLLECT_NAMES+set}"; then COLLECT_NAMES= export COLLECT_NAMES fi _LT_EOF ;; esac _LT_PROG_LTMAIN # We use sed instead of cat because bash on DJGPP gets confused if # if finds mixed CR/LF and LF-only lines. Since sed operates in # text mode, it properly converts lines to CR/LF. This bash problem # is reportedly fixed, but why not run on old versions too? sed '$q' "$ltmain" >> "$cfgfile" \ || (rm -f "$cfgfile"; exit 1) mv -f "$cfgfile" "$ofile" || (rm -f "$ofile" && cp "$cfgfile" "$ofile" && rm -f "$cfgfile") chmod +x "$ofile" ], [cat <<_LT_EOF >> "$ofile" dnl Unfortunately we have to use $1 here, since _LT_TAG is not expanded dnl in a comment (ie after a #). # ### BEGIN LIBTOOL TAG CONFIG: $1 _LT_LIBTOOL_TAG_VARS(_LT_TAG) # ### END LIBTOOL TAG CONFIG: $1 _LT_EOF ])dnl /m4_if ], [m4_if([$1], [], [ PACKAGE='$PACKAGE' VERSION='$VERSION' RM='$RM' ofile='$ofile'], []) ])dnl /_LT_CONFIG_SAVE_COMMANDS ])# _LT_CONFIG # LT_SUPPORTED_TAG(TAG) # --------------------- # Trace this macro to discover what tags are supported by the libtool # --tag option, using: # autoconf --trace 'LT_SUPPORTED_TAG:$1' AC_DEFUN([LT_SUPPORTED_TAG], []) # C support is built-in for now m4_define([_LT_LANG_C_enabled], []) m4_define([_LT_TAGS], []) # LT_LANG(LANG) # ------------- # Enable libtool support for the given language if not already enabled. AC_DEFUN([LT_LANG], [AC_BEFORE([$0], [LT_OUTPUT])dnl m4_case([$1], [C], [_LT_LANG(C)], [C++], [_LT_LANG(CXX)], [Go], [_LT_LANG(GO)], [Java], [_LT_LANG(GCJ)], [Fortran 77], [_LT_LANG(F77)], [Fortran], [_LT_LANG(FC)], [Windows Resource], [_LT_LANG(RC)], [m4_ifdef([_LT_LANG_]$1[_CONFIG], [_LT_LANG($1)], [m4_fatal([$0: unsupported language: "$1"])])])dnl ])# LT_LANG # _LT_LANG(LANGNAME) # ------------------ m4_defun([_LT_LANG], [m4_ifdef([_LT_LANG_]$1[_enabled], [], [LT_SUPPORTED_TAG([$1])dnl m4_append([_LT_TAGS], [$1 ])dnl m4_define([_LT_LANG_]$1[_enabled], [])dnl _LT_LANG_$1_CONFIG($1)])dnl ])# _LT_LANG m4_ifndef([AC_PROG_GO], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_GO. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_GO], [AC_LANG_PUSH(Go)dnl AC_ARG_VAR([GOC], [Go compiler command])dnl AC_ARG_VAR([GOFLAGS], [Go compiler flags])dnl _AC_ARG_VAR_LDFLAGS()dnl AC_CHECK_TOOL(GOC, gccgo) if test -z "$GOC"; then if test -n "$ac_tool_prefix"; then AC_CHECK_PROG(GOC, [${ac_tool_prefix}gccgo], [${ac_tool_prefix}gccgo]) fi fi if test -z "$GOC"; then AC_CHECK_PROG(GOC, gccgo, gccgo, false) fi ])#m4_defun ])#m4_ifndef # _LT_LANG_DEFAULT_CONFIG # ----------------------- m4_defun([_LT_LANG_DEFAULT_CONFIG], [AC_PROVIDE_IFELSE([AC_PROG_CXX], [LT_LANG(CXX)], [m4_define([AC_PROG_CXX], defn([AC_PROG_CXX])[LT_LANG(CXX)])]) AC_PROVIDE_IFELSE([AC_PROG_F77], [LT_LANG(F77)], [m4_define([AC_PROG_F77], defn([AC_PROG_F77])[LT_LANG(F77)])]) AC_PROVIDE_IFELSE([AC_PROG_FC], [LT_LANG(FC)], [m4_define([AC_PROG_FC], defn([AC_PROG_FC])[LT_LANG(FC)])]) dnl The call to [A][M_PROG_GCJ] is quoted like that to stop aclocal dnl pulling things in needlessly. AC_PROVIDE_IFELSE([AC_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([A][M_PROG_GCJ], [LT_LANG(GCJ)], [AC_PROVIDE_IFELSE([LT_PROG_GCJ], [LT_LANG(GCJ)], [m4_ifdef([AC_PROG_GCJ], [m4_define([AC_PROG_GCJ], defn([AC_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([A][M_PROG_GCJ], [m4_define([A][M_PROG_GCJ], defn([A][M_PROG_GCJ])[LT_LANG(GCJ)])]) m4_ifdef([LT_PROG_GCJ], [m4_define([LT_PROG_GCJ], defn([LT_PROG_GCJ])[LT_LANG(GCJ)])])])])]) AC_PROVIDE_IFELSE([AC_PROG_GO], [LT_LANG(GO)], [m4_define([AC_PROG_GO], defn([AC_PROG_GO])[LT_LANG(GO)])]) AC_PROVIDE_IFELSE([LT_PROG_RC], [LT_LANG(RC)], [m4_define([LT_PROG_RC], defn([LT_PROG_RC])[LT_LANG(RC)])]) ])# _LT_LANG_DEFAULT_CONFIG # Obsolete macros: AU_DEFUN([AC_LIBTOOL_CXX], [LT_LANG(C++)]) AU_DEFUN([AC_LIBTOOL_F77], [LT_LANG(Fortran 77)]) AU_DEFUN([AC_LIBTOOL_FC], [LT_LANG(Fortran)]) AU_DEFUN([AC_LIBTOOL_GCJ], [LT_LANG(Java)]) AU_DEFUN([AC_LIBTOOL_RC], [LT_LANG(Windows Resource)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_CXX], []) dnl AC_DEFUN([AC_LIBTOOL_F77], []) dnl AC_DEFUN([AC_LIBTOOL_FC], []) dnl AC_DEFUN([AC_LIBTOOL_GCJ], []) dnl AC_DEFUN([AC_LIBTOOL_RC], []) # _LT_TAG_COMPILER # ---------------- m4_defun([_LT_TAG_COMPILER], [AC_REQUIRE([AC_PROG_CC])dnl _LT_DECL([LTCC], [CC], [1], [A C compiler])dnl _LT_DECL([LTCFLAGS], [CFLAGS], [1], [LTCC compiler flags])dnl _LT_TAGDECL([CC], [compiler], [1], [A language specific compiler])dnl _LT_TAGDECL([with_gcc], [GCC], [0], [Is the compiler the GNU compiler?])dnl # If no C compiler was specified, use CC. LTCC=${LTCC-"$CC"} # If no C compiler flags were specified, use CFLAGS. LTCFLAGS=${LTCFLAGS-"$CFLAGS"} # Allow CC to be a program name with arguments. compiler=$CC ])# _LT_TAG_COMPILER # _LT_COMPILER_BOILERPLATE # ------------------------ # Check for compiler boilerplate output or warnings with # the simple compiler test code. m4_defun([_LT_COMPILER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_compile_test_code" >conftest.$ac_ext eval "$ac_compile" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_compiler_boilerplate=`cat conftest.err` $RM conftest* ])# _LT_COMPILER_BOILERPLATE # _LT_LINKER_BOILERPLATE # ---------------------- # Check for linker boilerplate output or warnings with # the simple link test code. m4_defun([_LT_LINKER_BOILERPLATE], [m4_require([_LT_DECL_SED])dnl ac_outfile=conftest.$ac_objext echo "$lt_simple_link_test_code" >conftest.$ac_ext eval "$ac_link" 2>&1 >/dev/null | $SED '/^$/d; /^ *+/d' >conftest.err _lt_linker_boilerplate=`cat conftest.err` $RM -r conftest* ])# _LT_LINKER_BOILERPLATE # _LT_REQUIRED_DARWIN_CHECKS # ------------------------- m4_defun_once([_LT_REQUIRED_DARWIN_CHECKS],[ case $host_os in rhapsody* | darwin*) AC_CHECK_TOOL([DSYMUTIL], [dsymutil], [:]) AC_CHECK_TOOL([NMEDIT], [nmedit], [:]) AC_CHECK_TOOL([LIPO], [lipo], [:]) AC_CHECK_TOOL([OTOOL], [otool], [:]) AC_CHECK_TOOL([OTOOL64], [otool64], [:]) _LT_DECL([], [DSYMUTIL], [1], [Tool to manipulate archived DWARF debug symbol files on Mac OS X]) _LT_DECL([], [NMEDIT], [1], [Tool to change global to local symbols on Mac OS X]) _LT_DECL([], [LIPO], [1], [Tool to manipulate fat objects and archives on Mac OS X]) _LT_DECL([], [OTOOL], [1], [ldd/readelf like tool for Mach-O binaries on Mac OS X]) _LT_DECL([], [OTOOL64], [1], [ldd/readelf like tool for 64 bit Mach-O binaries on Mac OS X 10.4]) AC_CACHE_CHECK([for -single_module linker flag],[lt_cv_apple_cc_single_mod], [lt_cv_apple_cc_single_mod=no if test -z "$LT_MULTI_MODULE"; then # By default we will add the -single_module flag. You can override # by either setting the environment variable LT_MULTI_MODULE # non-empty at configure time, or by adding -multi_module to the # link flags. rm -rf libconftest.dylib* echo "int foo(void){return 1;}" > conftest.c echo "$LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o libconftest.dylib \ -dynamiclib -Wl,-single_module conftest.c 2>conftest.err _lt_result=$? # If there is a non-empty error log, and "single_module" # appears in it, assume the flag caused a linker warning if test -s conftest.err && $GREP single_module conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD # Otherwise, if the output was created with a 0 exit code from # the compiler, it worked. elif test -f libconftest.dylib && test 0 = "$_lt_result"; then lt_cv_apple_cc_single_mod=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -rf libconftest.dylib* rm -f conftest.* fi]) AC_CACHE_CHECK([for -exported_symbols_list linker flag], [lt_cv_ld_exported_symbols_list], [lt_cv_ld_exported_symbols_list=no save_LDFLAGS=$LDFLAGS echo "_main" > conftest.sym LDFLAGS="$LDFLAGS -Wl,-exported_symbols_list,conftest.sym" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [lt_cv_ld_exported_symbols_list=yes], [lt_cv_ld_exported_symbols_list=no]) LDFLAGS=$save_LDFLAGS ]) AC_CACHE_CHECK([for -force_load linker flag],[lt_cv_ld_force_load], [lt_cv_ld_force_load=no cat > conftest.c << _LT_EOF int forced_loaded() { return 2;} _LT_EOF echo "$LTCC $LTCFLAGS -c -o conftest.o conftest.c" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS -c -o conftest.o conftest.c 2>&AS_MESSAGE_LOG_FD echo "$AR cru libconftest.a conftest.o" >&AS_MESSAGE_LOG_FD $AR cru libconftest.a conftest.o 2>&AS_MESSAGE_LOG_FD echo "$RANLIB libconftest.a" >&AS_MESSAGE_LOG_FD $RANLIB libconftest.a 2>&AS_MESSAGE_LOG_FD cat > conftest.c << _LT_EOF int main() { return 0;} _LT_EOF echo "$LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a" >&AS_MESSAGE_LOG_FD $LTCC $LTCFLAGS $LDFLAGS -o conftest conftest.c -Wl,-force_load,./libconftest.a 2>conftest.err _lt_result=$? if test -s conftest.err && $GREP force_load conftest.err; then cat conftest.err >&AS_MESSAGE_LOG_FD elif test -f conftest && test 0 = "$_lt_result" && $GREP forced_load conftest >/dev/null 2>&1; then lt_cv_ld_force_load=yes else cat conftest.err >&AS_MESSAGE_LOG_FD fi rm -f conftest.err libconftest.a conftest conftest.c rm -rf conftest.dSYM ]) case $host_os in rhapsody* | darwin1.[[012]]) _lt_dar_allow_undefined='$wl-undefined ${wl}suppress' ;; darwin1.*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; darwin*) # darwin 5.x on # if running on 10.5 or later, the deployment target defaults # to the OS version, if on x86, and 10.4, the deployment # target defaults to 10.4. Don't you love it? case ${MACOSX_DEPLOYMENT_TARGET-10.0},$host in 10.0,*86*-darwin8*|10.0,*-darwin[[91]]*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; 10.[[012]][[,.]]*) _lt_dar_allow_undefined='$wl-flat_namespace $wl-undefined ${wl}suppress' ;; 10.*) _lt_dar_allow_undefined='$wl-undefined ${wl}dynamic_lookup' ;; esac ;; esac if test yes = "$lt_cv_apple_cc_single_mod"; then _lt_dar_single_mod='$single_module' fi if test yes = "$lt_cv_ld_exported_symbols_list"; then _lt_dar_export_syms=' $wl-exported_symbols_list,$output_objdir/$libname-symbols.expsym' else _lt_dar_export_syms='~$NMEDIT -s $output_objdir/$libname-symbols.expsym $lib' fi if test : != "$DSYMUTIL" && test no = "$lt_cv_ld_force_load"; then _lt_dsymutil='~$DSYMUTIL $lib || :' else _lt_dsymutil= fi ;; esac ]) # _LT_DARWIN_LINKER_FEATURES([TAG]) # --------------------------------- # Checks for linker and compiler features on darwin m4_defun([_LT_DARWIN_LINKER_FEATURES], [ m4_require([_LT_REQUIRED_DARWIN_CHECKS]) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported if test yes = "$lt_cv_ld_force_load"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience $wl-force_load,$conv\"; done; func_echo_all \"$new_convenience\"`' m4_case([$1], [F77], [_LT_TAGVAR(compiler_needs_object, $1)=yes], [FC], [_LT_TAGVAR(compiler_needs_object, $1)=yes]) else _LT_TAGVAR(whole_archive_flag_spec, $1)='' fi _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=$_lt_dar_allow_undefined case $cc_basename in ifort*|nagfor*) _lt_dar_can_shared=yes ;; *) _lt_dar_can_shared=$GCC ;; esac if test yes = "$_lt_dar_can_shared"; then output_verbose_link_cmd=func_echo_all _LT_TAGVAR(archive_cmds, $1)="\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dsymutil" _LT_TAGVAR(module_cmds, $1)="\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$libobjs \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring $_lt_dar_single_mod$_lt_dar_export_syms$_lt_dsymutil" _LT_TAGVAR(module_expsym_cmds, $1)="sed -e 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC \$allow_undefined_flag -o \$lib -bundle \$libobjs \$deplibs \$compiler_flags$_lt_dar_export_syms$_lt_dsymutil" m4_if([$1], [CXX], [ if test yes != "$lt_cv_apple_cc_single_mod"; then _LT_TAGVAR(archive_cmds, $1)="\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dsymutil" _LT_TAGVAR(archive_expsym_cmds, $1)="sed 's|^|_|' < \$export_symbols > \$output_objdir/\$libname-symbols.expsym~\$CC -r -keep_private_externs -nostdlib -o \$lib-master.o \$libobjs~\$CC -dynamiclib \$allow_undefined_flag -o \$lib \$lib-master.o \$deplibs \$compiler_flags -install_name \$rpath/\$soname \$verstring$_lt_dar_export_syms$_lt_dsymutil" fi ],[]) else _LT_TAGVAR(ld_shlibs, $1)=no fi ]) # _LT_SYS_MODULE_PATH_AIX([TAGNAME]) # ---------------------------------- # Links a minimal program and checks the executable # for the system default hardcoded library path. In most cases, # this is /usr/lib:/lib, but when the MPI compilers are used # the location of the communication and MPI libs are included too. # If we don't find anything, use the default library path according # to the aix ld manual. # Store the results from the different compilers for each TAGNAME. # Allow to override them for all tags through lt_cv_aix_libpath. m4_defun([_LT_SYS_MODULE_PATH_AIX], [m4_require([_LT_DECL_SED])dnl if test set = "${lt_cv_aix_libpath+set}"; then aix_libpath=$lt_cv_aix_libpath else AC_CACHE_VAL([_LT_TAGVAR([lt_cv_aix_libpath_], [$1])], [AC_LINK_IFELSE([AC_LANG_PROGRAM],[ lt_aix_libpath_sed='[ /Import File Strings/,/^$/ { /^0/ { s/^0 *\([^ ]*\) *$/\1/ p } }]' _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -H conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` # Check for a 64-bit object if we didn't find anything. if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=`dump -HX64 conftest$ac_exeext 2>/dev/null | $SED -n -e "$lt_aix_libpath_sed"` fi],[]) if test -z "$_LT_TAGVAR([lt_cv_aix_libpath_], [$1])"; then _LT_TAGVAR([lt_cv_aix_libpath_], [$1])=/usr/lib:/lib fi ]) aix_libpath=$_LT_TAGVAR([lt_cv_aix_libpath_], [$1]) fi ])# _LT_SYS_MODULE_PATH_AIX # _LT_SHELL_INIT(ARG) # ------------------- m4_define([_LT_SHELL_INIT], [m4_divert_text([M4SH-INIT], [$1 ])])# _LT_SHELL_INIT # _LT_PROG_ECHO_BACKSLASH # ----------------------- # Find how we can fake an echo command that does not interpret backslash. # In particular, with Autoconf 2.60 or later we add some code to the start # of the generated configure script that will find a shell with a builtin # printf (that we can use as an echo command). m4_defun([_LT_PROG_ECHO_BACKSLASH], [ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO AC_MSG_CHECKING([how to print strings]) # Test print first, because it will be a builtin if present. if test "X`( print -r -- -n ) 2>/dev/null`" = X-n && \ test "X`print -r -- $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='print -r --' elif test "X`printf %s $ECHO 2>/dev/null`" = "X$ECHO"; then ECHO='printf %s\n' else # Use this function as a fallback that always works. func_fallback_echo () { eval 'cat <<_LTECHO_EOF $[]1 _LTECHO_EOF' } ECHO='func_fallback_echo' fi # func_echo_all arg... # Invoke $ECHO with all args, space-separated. func_echo_all () { $ECHO "$*" } case $ECHO in printf*) AC_MSG_RESULT([printf]) ;; print*) AC_MSG_RESULT([print -r]) ;; *) AC_MSG_RESULT([cat]) ;; esac m4_ifdef([_AS_DETECT_SUGGESTED], [_AS_DETECT_SUGGESTED([ test -n "${ZSH_VERSION+set}${BASH_VERSION+set}" || ( ECHO='\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\\' ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO ECHO=$ECHO$ECHO$ECHO$ECHO$ECHO$ECHO PATH=/empty FPATH=/empty; export PATH FPATH test "X`printf %s $ECHO`" = "X$ECHO" \ || test "X`print -r -- $ECHO`" = "X$ECHO" )])]) _LT_DECL([], [SHELL], [1], [Shell to use when invoking shell scripts]) _LT_DECL([], [ECHO], [1], [An echo program that protects backslashes]) ])# _LT_PROG_ECHO_BACKSLASH # _LT_WITH_SYSROOT # ---------------- AC_DEFUN([_LT_WITH_SYSROOT], [AC_MSG_CHECKING([for sysroot]) AC_ARG_WITH([sysroot], [AS_HELP_STRING([--with-sysroot@<:@=DIR@:>@], [Search for dependent libraries within DIR (or the compiler's sysroot if not specified).])], [], [with_sysroot=no]) dnl lt_sysroot will always be passed unquoted. We quote it here dnl in case the user passed a directory name. lt_sysroot= case $with_sysroot in #( yes) if test yes = "$GCC"; then lt_sysroot=`$CC --print-sysroot 2>/dev/null` fi ;; #( /*) lt_sysroot=`echo "$with_sysroot" | sed -e "$sed_quote_subst"` ;; #( no|'') ;; #( *) AC_MSG_RESULT([$with_sysroot]) AC_MSG_ERROR([The sysroot must be an absolute path.]) ;; esac AC_MSG_RESULT([${lt_sysroot:-no}]) _LT_DECL([], [lt_sysroot], [0], [The root where to search for ]dnl [dependent libraries, and where our libraries should be installed.])]) # _LT_ENABLE_LOCK # --------------- m4_defun([_LT_ENABLE_LOCK], [AC_ARG_ENABLE([libtool-lock], [AS_HELP_STRING([--disable-libtool-lock], [avoid locking (might break parallel builds)])]) test no = "$enable_libtool_lock" || enable_libtool_lock=yes # Some flags need to be propagated to the compiler or linker for good # libtool support. case $host in ia64-*-hpux*) # Find out what ABI is being produced by ac_compile, and set mode # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.$ac_objext` in *ELF-32*) HPUX_IA64_MODE=32 ;; *ELF-64*) HPUX_IA64_MODE=64 ;; esac fi rm -rf conftest* ;; *-*-irix6*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then if test yes = "$lt_cv_prog_gnu_ld"; then case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -melf32bsmip" ;; *N32*) LD="${LD-ld} -melf32bmipn32" ;; *64-bit*) LD="${LD-ld} -melf64bmip" ;; esac else case `/usr/bin/file conftest.$ac_objext` in *32-bit*) LD="${LD-ld} -32" ;; *N32*) LD="${LD-ld} -n32" ;; *64-bit*) LD="${LD-ld} -64" ;; esac fi fi rm -rf conftest* ;; mips64*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo '[#]line '$LINENO' "configure"' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then emul=elf case `/usr/bin/file conftest.$ac_objext` in *32-bit*) emul="${emul}32" ;; *64-bit*) emul="${emul}64" ;; esac case `/usr/bin/file conftest.$ac_objext` in *MSB*) emul="${emul}btsmip" ;; *LSB*) emul="${emul}ltsmip" ;; esac case `/usr/bin/file conftest.$ac_objext` in *N32*) emul="${emul}n32" ;; esac LD="${LD-ld} -m $emul" fi rm -rf conftest* ;; x86_64-*kfreebsd*-gnu|x86_64-*linux*|powerpc*-*linux*| \ s390*-*linux*|s390*-*tpf*|sparc*-*linux*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. Note that the listed cases only cover the # situations where additional linker options are needed (such as when # doing 32-bit compilation for a host where ld defaults to 64-bit, or # vice versa); the common cases where no linker options are needed do # not appear in the list. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *32-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_i386_fbsd" ;; x86_64-*linux*) case `/usr/bin/file conftest.o` in *x86-64*) LD="${LD-ld} -m elf32_x86_64" ;; *) LD="${LD-ld} -m elf_i386" ;; esac ;; powerpc64le-*linux*) LD="${LD-ld} -m elf32lppclinux" ;; powerpc64-*linux*) LD="${LD-ld} -m elf32ppclinux" ;; s390x-*linux*) LD="${LD-ld} -m elf_s390" ;; sparc64-*linux*) LD="${LD-ld} -m elf32_sparc" ;; esac ;; *64-bit*) case $host in x86_64-*kfreebsd*-gnu) LD="${LD-ld} -m elf_x86_64_fbsd" ;; x86_64-*linux*) LD="${LD-ld} -m elf_x86_64" ;; powerpcle-*linux*) LD="${LD-ld} -m elf64lppc" ;; powerpc-*linux*) LD="${LD-ld} -m elf64ppc" ;; s390*-*linux*|s390*-*tpf*) LD="${LD-ld} -m elf64_s390" ;; sparc*-*linux*) LD="${LD-ld} -m elf64_sparc" ;; esac ;; esac fi rm -rf conftest* ;; *-*-sco3.2v5*) # On SCO OpenServer 5, we need -belf to get full-featured binaries. SAVE_CFLAGS=$CFLAGS CFLAGS="$CFLAGS -belf" AC_CACHE_CHECK([whether the C compiler needs -belf], lt_cv_cc_needs_belf, [AC_LANG_PUSH(C) AC_LINK_IFELSE([AC_LANG_PROGRAM([[]],[[]])],[lt_cv_cc_needs_belf=yes],[lt_cv_cc_needs_belf=no]) AC_LANG_POP]) if test yes != "$lt_cv_cc_needs_belf"; then # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf CFLAGS=$SAVE_CFLAGS fi ;; *-*solaris*) # Find out what ABI is being produced by ac_compile, and set linker # options accordingly. echo 'int i;' > conftest.$ac_ext if AC_TRY_EVAL(ac_compile); then case `/usr/bin/file conftest.o` in *64-bit*) case $lt_cv_prog_gnu_ld in yes*) case $host in i?86-*-solaris*|x86_64-*-solaris*) LD="${LD-ld} -m elf_x86_64" ;; sparc*-*-solaris*) LD="${LD-ld} -m elf64_sparc" ;; esac # GNU ld 2.21 introduced _sol2 emulations. Use them if available. if ${LD-ld} -V | grep _sol2 >/dev/null 2>&1; then LD=${LD-ld}_sol2 fi ;; *) if ${LD-ld} -64 -r -o conftest2.o conftest.o >/dev/null 2>&1; then LD="${LD-ld} -64" fi ;; esac ;; esac fi rm -rf conftest* ;; esac need_locks=$enable_libtool_lock ])# _LT_ENABLE_LOCK # _LT_PROG_AR # ----------- m4_defun([_LT_PROG_AR], [AC_CHECK_TOOLS(AR, [ar], false) : ${AR=ar} : ${AR_FLAGS=cru} _LT_DECL([], [AR], [1], [The archiver]) _LT_DECL([], [AR_FLAGS], [1], [Flags to create an archive]) AC_CACHE_CHECK([for archiver @FILE support], [lt_cv_ar_at_file], [lt_cv_ar_at_file=no AC_COMPILE_IFELSE([AC_LANG_PROGRAM], [echo conftest.$ac_objext > conftest.lst lt_ar_try='$AR $AR_FLAGS libconftest.a @conftest.lst >&AS_MESSAGE_LOG_FD' AC_TRY_EVAL([lt_ar_try]) if test 0 -eq "$ac_status"; then # Ensure the archiver fails upon bogus file names. rm -f conftest.$ac_objext libconftest.a AC_TRY_EVAL([lt_ar_try]) if test 0 -ne "$ac_status"; then lt_cv_ar_at_file=@ fi fi rm -f conftest.* libconftest.a ]) ]) if test no = "$lt_cv_ar_at_file"; then archiver_list_spec= else archiver_list_spec=$lt_cv_ar_at_file fi _LT_DECL([], [archiver_list_spec], [1], [How to feed a file listing to the archiver]) ])# _LT_PROG_AR # _LT_CMD_OLD_ARCHIVE # ------------------- m4_defun([_LT_CMD_OLD_ARCHIVE], [_LT_PROG_AR AC_CHECK_TOOL(STRIP, strip, :) test -z "$STRIP" && STRIP=: _LT_DECL([], [STRIP], [1], [A symbol stripping program]) AC_CHECK_TOOL(RANLIB, ranlib, :) test -z "$RANLIB" && RANLIB=: _LT_DECL([], [RANLIB], [1], [Commands used to install an old-style archive]) # Determine commands to create old-style static archives. old_archive_cmds='$AR $AR_FLAGS $oldlib$oldobjs' old_postinstall_cmds='chmod 644 $oldlib' old_postuninstall_cmds= if test -n "$RANLIB"; then case $host_os in bitrig* | openbsd*) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB -t \$tool_oldlib" ;; *) old_postinstall_cmds="$old_postinstall_cmds~\$RANLIB \$tool_oldlib" ;; esac old_archive_cmds="$old_archive_cmds~\$RANLIB \$tool_oldlib" fi case $host_os in darwin*) lock_old_archive_extraction=yes ;; *) lock_old_archive_extraction=no ;; esac _LT_DECL([], [old_postinstall_cmds], [2]) _LT_DECL([], [old_postuninstall_cmds], [2]) _LT_TAGDECL([], [old_archive_cmds], [2], [Commands used to build an old-style archive]) _LT_DECL([], [lock_old_archive_extraction], [0], [Whether to use a lock for old archive extraction]) ])# _LT_CMD_OLD_ARCHIVE # _LT_COMPILER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [OUTPUT-FILE], [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------------------- # Check whether the given compiler option works AC_DEFUN([_LT_COMPILER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no m4_if([$4], , [ac_outfile=conftest.$ac_objext], [ac_outfile=$4]) echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="$3" ## exclude from sc_useless_quotes_in_assignment # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. # The option is referenced via a variable to avoid confusing sed. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>conftest.err) ac_status=$? cat conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s "$ac_outfile"; then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings other than the usual output. $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' >conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if test ! -s conftest.er2 || diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi fi $RM conftest* ]) if test yes = "[$]$2"; then m4_if([$5], , :, [$5]) else m4_if([$6], , :, [$6]) fi ])# _LT_COMPILER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_COMPILER_OPTION], [_LT_COMPILER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_COMPILER_OPTION], []) # _LT_LINKER_OPTION(MESSAGE, VARIABLE-NAME, FLAGS, # [ACTION-SUCCESS], [ACTION-FAILURE]) # ---------------------------------------------------- # Check whether the given linker option works AC_DEFUN([_LT_LINKER_OPTION], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_SED])dnl AC_CACHE_CHECK([$1], [$2], [$2=no save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS $3" echo "$lt_simple_link_test_code" > conftest.$ac_ext if (eval $ac_link 2>conftest.err) && test -s conftest$ac_exeext; then # The linker can only warn and ignore the option if not recognized # So say no if there are warnings if test -s conftest.err; then # Append any errors to the config.log. cat conftest.err 1>&AS_MESSAGE_LOG_FD $ECHO "$_lt_linker_boilerplate" | $SED '/^$/d' > conftest.exp $SED '/^$/d; /^ *+/d' conftest.err >conftest.er2 if diff conftest.exp conftest.er2 >/dev/null; then $2=yes fi else $2=yes fi fi $RM -r conftest* LDFLAGS=$save_LDFLAGS ]) if test yes = "[$]$2"; then m4_if([$4], , :, [$4]) else m4_if([$5], , :, [$5]) fi ])# _LT_LINKER_OPTION # Old name: AU_ALIAS([AC_LIBTOOL_LINKER_OPTION], [_LT_LINKER_OPTION]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_LINKER_OPTION], []) # LT_CMD_MAX_LEN #--------------- AC_DEFUN([LT_CMD_MAX_LEN], [AC_REQUIRE([AC_CANONICAL_HOST])dnl # find the maximum length of command line arguments AC_MSG_CHECKING([the maximum length of command line arguments]) AC_CACHE_VAL([lt_cv_sys_max_cmd_len], [dnl i=0 teststring=ABCD case $build_os in msdosdjgpp*) # On DJGPP, this test can blow up pretty badly due to problems in libc # (any single argument exceeding 2000 bytes causes a buffer overrun # during glob expansion). Even if it were fixed, the result of this # check would be larger than it should be. lt_cv_sys_max_cmd_len=12288; # 12K is about right ;; gnu*) # Under GNU Hurd, this test is not required because there is # no limit to the length of command line arguments. # Libtool will interpret -1 as no limit whatsoever lt_cv_sys_max_cmd_len=-1; ;; cygwin* | mingw* | cegcc*) # On Win9x/ME, this test blows up -- it succeeds, but takes # about 5 minutes as the teststring grows exponentially. # Worse, since 9x/ME are not pre-emptively multitasking, # you end up with a "frozen" computer, even though with patience # the test eventually succeeds (with a max line length of 256k). # Instead, let's just punt: use the minimum linelength reported by # all of the supported platforms: 8192 (on NT/2K/XP). lt_cv_sys_max_cmd_len=8192; ;; mint*) # On MiNT this can take a long time and run out of memory. lt_cv_sys_max_cmd_len=8192; ;; amigaos*) # On AmigaOS with pdksh, this test takes hours, literally. # So we just punt and use a minimum line length of 8192. lt_cv_sys_max_cmd_len=8192; ;; bitrig* | darwin* | dragonfly* | freebsd* | netbsd* | openbsd*) # This has been around since 386BSD, at least. Likely further. if test -x /sbin/sysctl; then lt_cv_sys_max_cmd_len=`/sbin/sysctl -n kern.argmax` elif test -x /usr/sbin/sysctl; then lt_cv_sys_max_cmd_len=`/usr/sbin/sysctl -n kern.argmax` else lt_cv_sys_max_cmd_len=65536 # usable default for all BSDs fi # And add a safety zone lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` ;; interix*) # We know the value 262144 and hardcode it with a safety zone (like BSD) lt_cv_sys_max_cmd_len=196608 ;; os2*) # The test takes a long time on OS/2. lt_cv_sys_max_cmd_len=8192 ;; osf*) # Dr. Hans Ekkehard Plesser reports seeing a kernel panic running configure # due to this test when exec_disable_arg_limit is 1 on Tru64. It is not # nice to cause kernel panics so lets avoid the loop below. # First set a reasonable default. lt_cv_sys_max_cmd_len=16384 # if test -x /sbin/sysconfig; then case `/sbin/sysconfig -q proc exec_disable_arg_limit` in *1*) lt_cv_sys_max_cmd_len=-1 ;; esac fi ;; sco3.2v5*) lt_cv_sys_max_cmd_len=102400 ;; sysv5* | sco5v6* | sysv4.2uw2*) kargmax=`grep ARG_MAX /etc/conf/cf.d/stune 2>/dev/null` if test -n "$kargmax"; then lt_cv_sys_max_cmd_len=`echo $kargmax | sed 's/.*[[ ]]//'` else lt_cv_sys_max_cmd_len=32768 fi ;; *) lt_cv_sys_max_cmd_len=`(getconf ARG_MAX) 2> /dev/null` if test -n "$lt_cv_sys_max_cmd_len" && \ test undefined != "$lt_cv_sys_max_cmd_len"; then lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 4` lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \* 3` else # Make teststring a little bigger before we do anything with it. # a 1K string should be a reasonable start. for i in 1 2 3 4 5 6 7 8; do teststring=$teststring$teststring done SHELL=${SHELL-${CONFIG_SHELL-/bin/sh}} # If test is not a shell built-in, we'll probably end up computing a # maximum length that is only half of the actual maximum length, but # we can't tell. while { test X`env echo "$teststring$teststring" 2>/dev/null` \ = "X$teststring$teststring"; } >/dev/null 2>&1 && test 17 != "$i" # 1/2 MB should be enough do i=`expr $i + 1` teststring=$teststring$teststring done # Only check the string length outside the loop. lt_cv_sys_max_cmd_len=`expr "X$teststring" : ".*" 2>&1` teststring= # Add a significant safety factor because C++ compilers can tack on # massive amounts of additional arguments before passing them to the # linker. It appears as though 1/2 is a usable value. lt_cv_sys_max_cmd_len=`expr $lt_cv_sys_max_cmd_len \/ 2` fi ;; esac ]) if test -n "$lt_cv_sys_max_cmd_len"; then AC_MSG_RESULT($lt_cv_sys_max_cmd_len) else AC_MSG_RESULT(none) fi max_cmd_len=$lt_cv_sys_max_cmd_len _LT_DECL([], [max_cmd_len], [0], [What is the maximum length of a command?]) ])# LT_CMD_MAX_LEN # Old name: AU_ALIAS([AC_LIBTOOL_SYS_MAX_CMD_LEN], [LT_CMD_MAX_LEN]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_SYS_MAX_CMD_LEN], []) # _LT_HEADER_DLFCN # ---------------- m4_defun([_LT_HEADER_DLFCN], [AC_CHECK_HEADERS([dlfcn.h], [], [], [AC_INCLUDES_DEFAULT])dnl ])# _LT_HEADER_DLFCN # _LT_TRY_DLOPEN_SELF (ACTION-IF-TRUE, ACTION-IF-TRUE-W-USCORE, # ACTION-IF-FALSE, ACTION-IF-CROSS-COMPILING) # ---------------------------------------------------------------- m4_defun([_LT_TRY_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes = "$cross_compiling"; then : [$4] else lt_dlunknown=0; lt_dlno_uscore=1; lt_dlneed_uscore=2 lt_status=$lt_dlunknown cat > conftest.$ac_ext <<_LT_EOF [#line $LINENO "configure" #include "confdefs.h" #if HAVE_DLFCN_H #include <dlfcn.h> #endif #include <stdio.h> #ifdef RTLD_GLOBAL # define LT_DLGLOBAL RTLD_GLOBAL #else # ifdef DL_GLOBAL # define LT_DLGLOBAL DL_GLOBAL # else # define LT_DLGLOBAL 0 # endif #endif /* We may have to define LT_DLLAZY_OR_NOW in the command line if we find out it does not work in some platform. */ #ifndef LT_DLLAZY_OR_NOW # ifdef RTLD_LAZY # define LT_DLLAZY_OR_NOW RTLD_LAZY # else # ifdef DL_LAZY # define LT_DLLAZY_OR_NOW DL_LAZY # else # ifdef RTLD_NOW # define LT_DLLAZY_OR_NOW RTLD_NOW # else # ifdef DL_NOW # define LT_DLLAZY_OR_NOW DL_NOW # else # define LT_DLLAZY_OR_NOW 0 # endif # endif # endif # endif #endif /* When -fvisibility=hidden is used, assume the code has been annotated correspondingly for the symbols needed. */ #if defined __GNUC__ && (((__GNUC__ == 3) && (__GNUC_MINOR__ >= 3)) || (__GNUC__ > 3)) int fnord () __attribute__((visibility("default"))); #endif int fnord () { return 42; } int main () { void *self = dlopen (0, LT_DLGLOBAL|LT_DLLAZY_OR_NOW); int status = $lt_dlunknown; if (self) { if (dlsym (self,"fnord")) status = $lt_dlno_uscore; else { if (dlsym( self,"_fnord")) status = $lt_dlneed_uscore; else puts (dlerror ()); } /* dlclose (self); */ } else puts (dlerror ()); return status; }] _LT_EOF if AC_TRY_EVAL(ac_link) && test -s "conftest$ac_exeext" 2>/dev/null; then (./conftest; exit; ) >&AS_MESSAGE_LOG_FD 2>/dev/null lt_status=$? case x$lt_status in x$lt_dlno_uscore) $1 ;; x$lt_dlneed_uscore) $2 ;; x$lt_dlunknown|x*) $3 ;; esac else : # compilation failed $3 fi fi rm -fr conftest* ])# _LT_TRY_DLOPEN_SELF # LT_SYS_DLOPEN_SELF # ------------------ AC_DEFUN([LT_SYS_DLOPEN_SELF], [m4_require([_LT_HEADER_DLFCN])dnl if test yes != "$enable_dlopen"; then enable_dlopen=unknown enable_dlopen_self=unknown enable_dlopen_self_static=unknown else lt_cv_dlopen=no lt_cv_dlopen_libs= case $host_os in beos*) lt_cv_dlopen=load_add_on lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ;; mingw* | pw32* | cegcc*) lt_cv_dlopen=LoadLibrary lt_cv_dlopen_libs= ;; cygwin*) lt_cv_dlopen=dlopen lt_cv_dlopen_libs= ;; darwin*) # if libdl is installed we need to link against it AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl],[ lt_cv_dlopen=dyld lt_cv_dlopen_libs= lt_cv_dlopen_self=yes ]) ;; tpf*) # Don't try to run any link tests for TPF. We know it's impossible # because TPF is a cross-compiler, and we know how we open DSOs. lt_cv_dlopen=dlopen lt_cv_dlopen_libs= lt_cv_dlopen_self=no ;; *) AC_CHECK_FUNC([shl_load], [lt_cv_dlopen=shl_load], [AC_CHECK_LIB([dld], [shl_load], [lt_cv_dlopen=shl_load lt_cv_dlopen_libs=-ldld], [AC_CHECK_FUNC([dlopen], [lt_cv_dlopen=dlopen], [AC_CHECK_LIB([dl], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-ldl], [AC_CHECK_LIB([svld], [dlopen], [lt_cv_dlopen=dlopen lt_cv_dlopen_libs=-lsvld], [AC_CHECK_LIB([dld], [dld_link], [lt_cv_dlopen=dld_link lt_cv_dlopen_libs=-ldld]) ]) ]) ]) ]) ]) ;; esac if test no = "$lt_cv_dlopen"; then enable_dlopen=no else enable_dlopen=yes fi case $lt_cv_dlopen in dlopen) save_CPPFLAGS=$CPPFLAGS test yes = "$ac_cv_header_dlfcn_h" && CPPFLAGS="$CPPFLAGS -DHAVE_DLFCN_H" save_LDFLAGS=$LDFLAGS wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $export_dynamic_flag_spec\" save_LIBS=$LIBS LIBS="$lt_cv_dlopen_libs $LIBS" AC_CACHE_CHECK([whether a program can dlopen itself], lt_cv_dlopen_self, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self=yes, lt_cv_dlopen_self=yes, lt_cv_dlopen_self=no, lt_cv_dlopen_self=cross) ]) if test yes = "$lt_cv_dlopen_self"; then wl=$lt_prog_compiler_wl eval LDFLAGS=\"\$LDFLAGS $lt_prog_compiler_static\" AC_CACHE_CHECK([whether a statically linked program can dlopen itself], lt_cv_dlopen_self_static, [dnl _LT_TRY_DLOPEN_SELF( lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=yes, lt_cv_dlopen_self_static=no, lt_cv_dlopen_self_static=cross) ]) fi CPPFLAGS=$save_CPPFLAGS LDFLAGS=$save_LDFLAGS LIBS=$save_LIBS ;; esac case $lt_cv_dlopen_self in yes|no) enable_dlopen_self=$lt_cv_dlopen_self ;; *) enable_dlopen_self=unknown ;; esac case $lt_cv_dlopen_self_static in yes|no) enable_dlopen_self_static=$lt_cv_dlopen_self_static ;; *) enable_dlopen_self_static=unknown ;; esac fi _LT_DECL([dlopen_support], [enable_dlopen], [0], [Whether dlopen is supported]) _LT_DECL([dlopen_self], [enable_dlopen_self], [0], [Whether dlopen of programs is supported]) _LT_DECL([dlopen_self_static], [enable_dlopen_self_static], [0], [Whether dlopen of statically linked programs is supported]) ])# LT_SYS_DLOPEN_SELF # Old name: AU_ALIAS([AC_LIBTOOL_DLOPEN_SELF], [LT_SYS_DLOPEN_SELF]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN_SELF], []) # _LT_COMPILER_C_O([TAGNAME]) # --------------------------- # Check to see if options -c and -o are simultaneously supported by compiler. # This macro does not hard code the compiler like AC_PROG_CC_C_O. m4_defun([_LT_COMPILER_C_O], [m4_require([_LT_DECL_SED])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_CACHE_CHECK([if $compiler supports -c -o file.$ac_objext], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=no $RM -r conftest 2>/dev/null mkdir conftest cd conftest mkdir out echo "$lt_simple_compile_test_code" > conftest.$ac_ext lt_compiler_flag="-o out/conftest2.$ac_objext" # Insert the option either (1) after the last *FLAGS variable, or # (2) before a word containing "conftest.", or (3) at the end. # Note that $ac_compile itself does not contain backslashes and begins # with a dollar sign (not a hyphen), so the echo should work correctly. lt_compile=`echo "$ac_compile" | $SED \ -e 's:.*FLAGS}\{0,1\} :&$lt_compiler_flag :; t' \ -e 's: [[^ ]]*conftest\.: $lt_compiler_flag&:; t' \ -e 's:$: $lt_compiler_flag:'` (eval echo "\"\$as_me:$LINENO: $lt_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$lt_compile" 2>out/conftest.err) ac_status=$? cat out/conftest.err >&AS_MESSAGE_LOG_FD echo "$as_me:$LINENO: \$? = $ac_status" >&AS_MESSAGE_LOG_FD if (exit $ac_status) && test -s out/conftest2.$ac_objext then # The compiler can only warn and ignore the option if not recognized # So say no if there are warnings $ECHO "$_lt_compiler_boilerplate" | $SED '/^$/d' > out/conftest.exp $SED '/^$/d; /^ *+/d' out/conftest.err >out/conftest.er2 if test ! -s out/conftest.er2 || diff out/conftest.exp out/conftest.er2 >/dev/null; then _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes fi fi chmod u+w . 2>&AS_MESSAGE_LOG_FD $RM conftest* # SGI C++ compiler will create directory out/ii_files/ for # template instantiation test -d out/ii_files && $RM out/ii_files/* && rmdir out/ii_files $RM out/* && rmdir out cd .. $RM -r conftest $RM conftest* ]) _LT_TAGDECL([compiler_c_o], [lt_cv_prog_compiler_c_o], [1], [Does compiler simultaneously support -c and -o options?]) ])# _LT_COMPILER_C_O # _LT_COMPILER_FILE_LOCKS([TAGNAME]) # ---------------------------------- # Check to see if we can do hard links to lock some files if needed m4_defun([_LT_COMPILER_FILE_LOCKS], [m4_require([_LT_ENABLE_LOCK])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl _LT_COMPILER_C_O([$1]) hard_links=nottested if test no = "$_LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)" && test no != "$need_locks"; then # do not overwrite the value of need_locks provided by the user AC_MSG_CHECKING([if we can lock with hard links]) hard_links=yes $RM conftest* ln conftest.a conftest.b 2>/dev/null && hard_links=no touch conftest.a ln conftest.a conftest.b 2>&5 || hard_links=no ln conftest.a conftest.b 2>/dev/null && hard_links=no AC_MSG_RESULT([$hard_links]) if test no = "$hard_links"; then AC_MSG_WARN(['$CC' does not support '-c -o', so 'make -j' may be unsafe]) need_locks=warn fi else need_locks=no fi _LT_DECL([], [need_locks], [1], [Must we lock files when doing compilation?]) ])# _LT_COMPILER_FILE_LOCKS # _LT_CHECK_OBJDIR # ---------------- m4_defun([_LT_CHECK_OBJDIR], [AC_CACHE_CHECK([for objdir], [lt_cv_objdir], [rm -f .libs 2>/dev/null mkdir .libs 2>/dev/null if test -d .libs; then lt_cv_objdir=.libs else # MS-DOS does not allow filenames that begin with a dot. lt_cv_objdir=_libs fi rmdir .libs 2>/dev/null]) objdir=$lt_cv_objdir _LT_DECL([], [objdir], [0], [The name of the directory that contains temporary libtool files])dnl m4_pattern_allow([LT_OBJDIR])dnl AC_DEFINE_UNQUOTED([LT_OBJDIR], "$lt_cv_objdir/", [Define to the sub-directory where libtool stores uninstalled libraries.]) ])# _LT_CHECK_OBJDIR # _LT_LINKER_HARDCODE_LIBPATH([TAGNAME]) # -------------------------------------- # Check hardcoding attributes. m4_defun([_LT_LINKER_HARDCODE_LIBPATH], [AC_MSG_CHECKING([how to hardcode library paths into programs]) _LT_TAGVAR(hardcode_action, $1)= if test -n "$_LT_TAGVAR(hardcode_libdir_flag_spec, $1)" || test -n "$_LT_TAGVAR(runpath_var, $1)" || test yes = "$_LT_TAGVAR(hardcode_automatic, $1)"; then # We can hardcode non-existent directories. if test no != "$_LT_TAGVAR(hardcode_direct, $1)" && # If the only mechanism to avoid hardcoding is shlibpath_var, we # have to relink, otherwise we might link with an installed library # when we should be linking with a yet-to-be-installed one ## test no != "$_LT_TAGVAR(hardcode_shlibpath_var, $1)" && test no != "$_LT_TAGVAR(hardcode_minus_L, $1)"; then # Linking always hardcodes the temporary library directory. _LT_TAGVAR(hardcode_action, $1)=relink else # We can link without hardcoding, and we can hardcode nonexisting dirs. _LT_TAGVAR(hardcode_action, $1)=immediate fi else # We cannot hardcode anything, or else we can only hardcode existing # directories. _LT_TAGVAR(hardcode_action, $1)=unsupported fi AC_MSG_RESULT([$_LT_TAGVAR(hardcode_action, $1)]) if test relink = "$_LT_TAGVAR(hardcode_action, $1)" || test yes = "$_LT_TAGVAR(inherit_rpath, $1)"; then # Fast installation is not supported enable_fast_install=no elif test yes = "$shlibpath_overrides_runpath" || test no = "$enable_shared"; then # Fast installation is not necessary enable_fast_install=needless fi _LT_TAGDECL([], [hardcode_action], [0], [How to hardcode a shared library path into an executable]) ])# _LT_LINKER_HARDCODE_LIBPATH # _LT_CMD_STRIPLIB # ---------------- m4_defun([_LT_CMD_STRIPLIB], [m4_require([_LT_DECL_EGREP]) striplib= old_striplib= AC_MSG_CHECKING([whether stripping libraries is possible]) if test -n "$STRIP" && $STRIP -V 2>&1 | $GREP "GNU strip" >/dev/null; then test -z "$old_striplib" && old_striplib="$STRIP --strip-debug" test -z "$striplib" && striplib="$STRIP --strip-unneeded" AC_MSG_RESULT([yes]) else # FIXME - insert some real tests, host_os isn't really good enough case $host_os in darwin*) if test -n "$STRIP"; then striplib="$STRIP -x" old_striplib="$STRIP -S" AC_MSG_RESULT([yes]) else AC_MSG_RESULT([no]) fi ;; *) AC_MSG_RESULT([no]) ;; esac fi _LT_DECL([], [old_striplib], [1], [Commands to strip libraries]) _LT_DECL([], [striplib], [1]) ])# _LT_CMD_STRIPLIB # _LT_PREPARE_MUNGE_PATH_LIST # --------------------------- # Make sure func_munge_path_list() is defined correctly. m4_defun([_LT_PREPARE_MUNGE_PATH_LIST], [[# func_munge_path_list VARIABLE PATH # ----------------------------------- # VARIABLE is name of variable containing _space_ separated list of # directories to be munged by the contents of PATH, which is string # having a format: # "DIR[:DIR]:" # string "DIR[ DIR]" will be prepended to VARIABLE # ":DIR[:DIR]" # string "DIR[ DIR]" will be appended to VARIABLE # "DIRP[:DIRP]::[DIRA:]DIRA" # string "DIRP[ DIRP]" will be prepended to VARIABLE and string # "DIRA[ DIRA]" will be appended to VARIABLE # "DIR[:DIR]" # VARIABLE will be replaced by "DIR[ DIR]" func_munge_path_list () { case x@S|@2 in x) ;; *:) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'` \@S|@@S|@1\" ;; x:*) eval @S|@1=\"\@S|@@S|@1 `$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; *::*) eval @S|@1=\"\@S|@@S|@1\ `$ECHO @S|@2 | $SED -e 's/.*:://' -e 's/:/ /g'`\" eval @S|@1=\"`$ECHO @S|@2 | $SED -e 's/::.*//' -e 's/:/ /g'`\ \@S|@@S|@1\" ;; *) eval @S|@1=\"`$ECHO @S|@2 | $SED 's/:/ /g'`\" ;; esac } ]])# _LT_PREPARE_PATH_LIST # _LT_SYS_DYNAMIC_LINKER([TAG]) # ----------------------------- # PORTME Fill in your ld.so characteristics m4_defun([_LT_SYS_DYNAMIC_LINKER], [AC_REQUIRE([AC_CANONICAL_HOST])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_OBJDUMP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CHECK_SHELL_FEATURES])dnl m4_require([_LT_PREPARE_MUNGE_PATH_LIST])dnl AC_MSG_CHECKING([dynamic linker characteristics]) m4_if([$1], [], [ if test yes = "$GCC"; then case $host_os in darwin*) lt_awk_arg='/^libraries:/,/LR/' ;; *) lt_awk_arg='/^libraries:/' ;; esac case $host_os in mingw* | cegcc*) lt_sed_strip_eq='s|=\([[A-Za-z]]:\)|\1|g' ;; *) lt_sed_strip_eq='s|=/|/|g' ;; esac lt_search_path_spec=`$CC -print-search-dirs | awk $lt_awk_arg | $SED -e "s/^libraries://" -e $lt_sed_strip_eq` case $lt_search_path_spec in *\;*) # if the path contains ";" then we assume it to be the separator # otherwise default to the standard path separator (i.e. ":") - it is # assumed that no part of a normal pathname contains ";" but that should # okay in the real world where ";" in dirpaths is itself problematic. lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED 's/;/ /g'` ;; *) lt_search_path_spec=`$ECHO "$lt_search_path_spec" | $SED "s/$PATH_SEPARATOR/ /g"` ;; esac # Ok, now we have the path, separated by spaces, we can step through it # and add multilib dir if necessary... lt_tmp_lt_search_path_spec= lt_multi_os_dir=/`$CC $CPPFLAGS $CFLAGS $LDFLAGS -print-multi-os-directory 2>/dev/null` # ...but if some path component already ends with the multilib dir we assume # that all is fine and trust -print-search-dirs as is (GCC 4.2? or newer). case "$lt_multi_os_dir; $lt_search_path_spec " in "/; "* | "/.; "* | "/./; "* | *"$lt_multi_os_dir "* | *"$lt_multi_os_dir/ "*) lt_multi_os_dir= ;; esac for lt_sys_path in $lt_search_path_spec; do if test -d "$lt_sys_path$lt_multi_os_dir"; then lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path$lt_multi_os_dir" elif test -n "$lt_multi_os_dir"; then test -d "$lt_sys_path" && \ lt_tmp_lt_search_path_spec="$lt_tmp_lt_search_path_spec $lt_sys_path" fi done lt_search_path_spec=`$ECHO "$lt_tmp_lt_search_path_spec" | awk ' BEGIN {RS = " "; FS = "/|\n";} { lt_foo = ""; lt_count = 0; for (lt_i = NF; lt_i > 0; lt_i--) { if ($lt_i != "" && $lt_i != ".") { if ($lt_i == "..") { lt_count++; } else { if (lt_count == 0) { lt_foo = "/" $lt_i lt_foo; } else { lt_count--; } } } } if (lt_foo != "") { lt_freq[[lt_foo]]++; } if (lt_freq[[lt_foo]] == 1) { print lt_foo; } }'` # AWK program above erroneously prepends '/' to C:/dos/paths # for these hosts. case $host_os in mingw* | cegcc*) lt_search_path_spec=`$ECHO "$lt_search_path_spec" |\ $SED 's|/\([[A-Za-z]]:\)|\1|g'` ;; esac sys_lib_search_path_spec=`$ECHO "$lt_search_path_spec" | $lt_NL2SP` else sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" fi]) library_names_spec= libname_spec='lib$name' soname_spec= shrext_cmds=.so postinstall_cmds= postuninstall_cmds= finish_cmds= finish_eval= shlibpath_var= shlibpath_overrides_runpath=unknown version_type=none dynamic_linker="$host_os ld.so" sys_lib_dlsearch_path_spec="/lib /usr/lib" need_lib_prefix=unknown hardcode_into_libs=no # when you set need_version to no, make sure it does not cause -set_version # flags to be left without arguments need_version=unknown AC_ARG_VAR([LT_SYS_LIBRARY_PATH], [User-defined run-time library search path.]) case $host_os in aix3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname.a' shlibpath_var=LIBPATH # AIX 3 has no versioning support, so we append a major version to the name. soname_spec='$libname$release$shared_ext$major' ;; aix[[4-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no hardcode_into_libs=yes if test ia64 = "$host_cpu"; then # AIX 5 supports IA64 library_names_spec='$libname$release$shared_ext$major $libname$release$shared_ext$versuffix $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH else # With GCC up to 2.95.x, collect2 would create an import file # for dependence libraries. The import file would start with # the line '#! .'. This would cause the generated library to # depend on '.', always an invalid library. This was fixed in # development snapshots of GCC prior to 3.0. case $host_os in aix4 | aix4.[[01]] | aix4.[[01]].*) if { echo '#if __GNUC__ > 2 || (__GNUC__ == 2 && __GNUC_MINOR__ >= 97)' echo ' yes ' echo '#endif'; } | $CC -E - | $GREP yes > /dev/null; then : else can_build_shared=no fi ;; esac # Using Import Files as archive members, it is possible to support # filename-based versioning of shared library archives on AIX. While # this would work for both with and without runtime linking, it will # prevent static linking of such archives. So we do filename-based # shared library versioning with .so extension only, which is used # when both runtime linking and shared linking is enabled. # Unfortunately, runtime linking may impact performance, so we do # not want this to be the default eventually. Also, we use the # versioned .so libs for executables only if there is the -brtl # linker flag in LDFLAGS as well, or --with-aix-soname=svr4 only. # To allow for filename-based versioning support, we need to create # libNAME.so.V as an archive file, containing: # *) an Import File, referring to the versioned filename of the # archive as well as the shared archive member, telling the # bitwidth (32 or 64) of that shared object, and providing the # list of exported symbols of that shared object, eventually # decorated with the 'weak' keyword # *) the shared object with the F_LOADONLY flag set, to really avoid # it being seen by the linker. # At run time we better use the real file rather than another symlink, # but for link time we create the symlink libNAME.so -> libNAME.so.V case $with_aix_soname,$aix_use_runtimelinking in # AIX (on Power*) has no versioning support, so currently we cannot hardcode correct # soname into executable. Probably we can add versioning support to # collect2, so additional links can be useful in future. aix,yes) # traditional libtool dynamic_linker='AIX unversionable lib.so' # If using run time linking (on AIX 4.2 or later) use lib<name>.so # instead of lib<name>.a to let people know that these are not # typical AIX shared libraries. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; aix,no) # traditional AIX only dynamic_linker='AIX lib.a[(]lib.so.V[)]' # We preserve .a as extension for shared libraries through AIX4.2 # and later when we are not doing run time linking. library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' ;; svr4,*) # full svr4 only dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,yes) # both, prefer svr4 dynamic_linker="AIX lib.so.V[(]$shared_archive_member_spec.o[)], lib.a[(]lib.so.V[)]" library_names_spec='$libname$release$shared_ext$major $libname$shared_ext' # unpreferred sharedlib libNAME.a needs extra handling postinstall_cmds='test -n "$linkname" || linkname="$realname"~func_stripname "" ".so" "$linkname"~$install_shared_prog "$dir/$func_stripname_result.$libext" "$destdir/$func_stripname_result.$libext"~test -z "$tstripme" || test -z "$striplib" || $striplib "$destdir/$func_stripname_result.$libext"' postuninstall_cmds='for n in $library_names $old_library; do :; done~func_stripname "" ".so" "$n"~test "$func_stripname_result" = "$n" || func_append rmfiles " $odir/$func_stripname_result.$libext"' # We do not specify a path in Import Files, so LIBPATH fires. shlibpath_overrides_runpath=yes ;; *,no) # both, prefer aix dynamic_linker="AIX lib.a[(]lib.so.V[)], lib.so.V[(]$shared_archive_member_spec.o[)]" library_names_spec='$libname$release.a $libname.a' soname_spec='$libname$release$shared_ext$major' # unpreferred sharedlib libNAME.so.V and symlink libNAME.so need extra handling postinstall_cmds='test -z "$dlname" || $install_shared_prog $dir/$dlname $destdir/$dlname~test -z "$tstripme" || test -z "$striplib" || $striplib $destdir/$dlname~test -n "$linkname" || linkname=$realname~func_stripname "" ".a" "$linkname"~(cd "$destdir" && $LN_S -f $dlname $func_stripname_result.so)' postuninstall_cmds='test -z "$dlname" || func_append rmfiles " $odir/$dlname"~for n in $old_library $library_names; do :; done~func_stripname "" ".a" "$n"~func_append rmfiles " $odir/$func_stripname_result.so"' ;; esac shlibpath_var=LIBPATH fi ;; amigaos*) case $host_cpu in powerpc) # Since July 2007 AmigaOS4 officially supports .so libraries. # When compiling the executable, add -use-dynld -Lsobjs: to the compileline. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' ;; m68k) library_names_spec='$libname.ixlibrary $libname.a' # Create ${libname}_ixlibrary.a entries in /sys/libs. finish_eval='for lib in `ls $libdir/*.ixlibrary 2>/dev/null`; do libname=`func_echo_all "$lib" | $SED '\''s%^.*/\([[^/]]*\)\.ixlibrary$%\1%'\''`; $RM /sys/libs/${libname}_ixlibrary.a; $show "cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a"; cd /sys/libs && $LN_S $lib ${libname}_ixlibrary.a || exit 1; done' ;; esac ;; beos*) library_names_spec='$libname$shared_ext' dynamic_linker="$host_os ld.so" shlibpath_var=LIBRARY_PATH ;; bsdi[[45]]*) version_type=linux # correct to gnu/linux during the next big refactor need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/shlib /usr/lib /usr/X11/lib /usr/contrib/lib /lib /usr/local/lib" sys_lib_dlsearch_path_spec="/shlib /usr/lib /usr/local/lib" # the default ld.so.conf also contains /usr/contrib/lib and # /usr/X11R6/lib (/usr/X11 is a link to /usr/X11R6), but let us allow # libtool to hard-code these into programs ;; cygwin* | mingw* | pw32* | cegcc*) version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no case $GCC,$cc_basename in yes,*) # gcc library_names_spec='$libname.dll.a' # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes case $host_os in cygwin*) # Cygwin DLLs use 'cyg' prefix rather than 'lib' soname_spec='`echo $libname | sed -e 's/^lib/cyg/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/lib/w32api"]) ;; mingw* | cegcc*) # MinGW DLLs use traditional 'lib' prefix soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; pw32*) # pw32 DLLs use 'pw' prefix rather than 'lib' library_names_spec='`echo $libname | sed -e 's/^lib/pw/'``echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' ;; esac dynamic_linker='Win32 ld.exe' ;; *,cl*) # Native MSVC libname_spec='$name' soname_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext' library_names_spec='$libname.dll.lib' case $build_os in mingw*) sys_lib_search_path_spec= lt_save_ifs=$IFS IFS=';' for lt_path in $LIB do IFS=$lt_save_ifs # Let DOS variable expansion print the short 8.3 style file name. lt_path=`cd "$lt_path" 2>/dev/null && cmd //C "for %i in (".") do @echo %~si"` sys_lib_search_path_spec="$sys_lib_search_path_spec $lt_path" done IFS=$lt_save_ifs # Convert to MSYS style. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | sed -e 's|\\\\|/|g' -e 's| \\([[a-zA-Z]]\\):| /\\1|g' -e 's|^ ||'` ;; cygwin*) # Convert to unix form, then to dos form, then back to unix form # but this time dos style (no spaces!) so that the unix form looks # like /cygdrive/c/PROGRA~1:/cygdr... sys_lib_search_path_spec=`cygpath --path --unix "$LIB"` sys_lib_search_path_spec=`cygpath --path --dos "$sys_lib_search_path_spec" 2>/dev/null` sys_lib_search_path_spec=`cygpath --path --unix "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` ;; *) sys_lib_search_path_spec=$LIB if $ECHO "$sys_lib_search_path_spec" | [$GREP ';[c-zC-Z]:/' >/dev/null]; then # It is most probably a Windows format PATH. sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e 's/;/ /g'` else sys_lib_search_path_spec=`$ECHO "$sys_lib_search_path_spec" | $SED -e "s/$PATH_SEPARATOR/ /g"` fi # FIXME: find the short name or the path components, as spaces are # common. (e.g. "Program Files" -> "PROGRA~1") ;; esac # DLL is installed to $(libdir)/../bin by postinstall_cmds postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; echo \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; echo \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' shlibpath_overrides_runpath=yes dynamic_linker='Win32 link.exe' ;; *) # Assume MSVC wrapper library_names_spec='$libname`echo $release | $SED -e 's/[[.]]/-/g'`$versuffix$shared_ext $libname.lib' dynamic_linker='Win32 ld.exe' ;; esac # FIXME: first we should search . and the directory the executable is in shlibpath_var=PATH ;; darwin* | rhapsody*) dynamic_linker="$host_os dyld" version_type=darwin need_lib_prefix=no need_version=no library_names_spec='$libname$release$major$shared_ext $libname$shared_ext' soname_spec='$libname$release$major$shared_ext' shlibpath_overrides_runpath=yes shlibpath_var=DYLD_LIBRARY_PATH shrext_cmds='`test .$module = .yes && echo .so || echo .dylib`' m4_if([$1], [],[ sys_lib_search_path_spec="$sys_lib_search_path_spec /usr/local/lib"]) sys_lib_dlsearch_path_spec='/usr/local/lib /lib /usr/lib' ;; dgux*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; freebsd* | dragonfly*) # DragonFly does not have aout. When/if they implement a new # versioning mechanism, adjust this. if test -x /usr/bin/objformat; then objformat=`/usr/bin/objformat` else case $host_os in freebsd[[23]].*) objformat=aout ;; *) objformat=elf ;; esac fi version_type=freebsd-$objformat case $version_type in freebsd-elf*) library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' need_version=no need_lib_prefix=no ;; freebsd-*) library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' need_version=yes ;; esac shlibpath_var=LD_LIBRARY_PATH case $host_os in freebsd2.*) shlibpath_overrides_runpath=yes ;; freebsd3.[[01]]* | freebsdelf3.[[01]]*) shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; freebsd3.[[2-9]]* | freebsdelf3.[[2-9]]* | \ freebsd4.[[0-5]] | freebsdelf4.[[0-5]] | freebsd4.1.1 | freebsdelf4.1.1) shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; *) # from 4.6 on, and DragonFly shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; esac ;; haiku*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no dynamic_linker="$host_os runtime_loader" library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LIBRARY_PATH shlibpath_overrides_runpath=no sys_lib_dlsearch_path_spec='/boot/home/config/lib /boot/common/lib /boot/system/lib' hardcode_into_libs=yes ;; hpux9* | hpux10* | hpux11*) # Give a soname corresponding to the major version so that dld.sl refuses to # link against other versions. version_type=sunos need_lib_prefix=no need_version=no case $host_cpu in ia64*) shrext_cmds='.so' hardcode_into_libs=yes dynamic_linker="$host_os dld.so" shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' if test 32 = "$HPUX_IA64_MODE"; then sys_lib_search_path_spec="/usr/lib/hpux32 /usr/local/lib/hpux32 /usr/local/lib" sys_lib_dlsearch_path_spec=/usr/lib/hpux32 else sys_lib_search_path_spec="/usr/lib/hpux64 /usr/local/lib/hpux64" sys_lib_dlsearch_path_spec=/usr/lib/hpux64 fi ;; hppa*64*) shrext_cmds='.sl' hardcode_into_libs=yes dynamic_linker="$host_os dld.sl" shlibpath_var=LD_LIBRARY_PATH # How should we handle SHLIB_PATH shlibpath_overrides_runpath=yes # Unless +noenvvar is specified. library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' sys_lib_search_path_spec="/usr/lib/pa20_64 /usr/ccs/lib/pa20_64" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; *) shrext_cmds='.sl' dynamic_linker="$host_os dld.sl" shlibpath_var=SHLIB_PATH shlibpath_overrides_runpath=no # +s is required to enable SHLIB_PATH library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' ;; esac # HP-UX runs *really* slowly unless shared libraries are mode 555, ... postinstall_cmds='chmod 555 $lib' # or fails outright, so override atomically: install_override_mode=555 ;; interix[[3-9]]*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='Interix 3.x ld.so.1 (PE, like ELF)' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; irix5* | irix6* | nonstopux*) case $host_os in nonstopux*) version_type=nonstopux ;; *) if test yes = "$lt_cv_prog_gnu_ld"; then version_type=linux # correct to gnu/linux during the next big refactor else version_type=irix fi ;; esac need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$release$shared_ext $libname$shared_ext' case $host_os in irix5* | nonstopux*) libsuff= shlibsuff= ;; *) case $LD in # libtool.m4 will add one of these switches to LD *-32|*"-32 "|*-melf32bsmip|*"-melf32bsmip ") libsuff= shlibsuff= libmagic=32-bit;; *-n32|*"-n32 "|*-melf32bmipn32|*"-melf32bmipn32 ") libsuff=32 shlibsuff=N32 libmagic=N32;; *-64|*"-64 "|*-melf64bmip|*"-melf64bmip ") libsuff=64 shlibsuff=64 libmagic=64-bit;; *) libsuff= shlibsuff= libmagic=never-match;; esac ;; esac shlibpath_var=LD_LIBRARY${shlibsuff}_PATH shlibpath_overrides_runpath=no sys_lib_search_path_spec="/usr/lib$libsuff /lib$libsuff /usr/local/lib$libsuff" sys_lib_dlsearch_path_spec="/usr/lib$libsuff /lib$libsuff" hardcode_into_libs=yes ;; # No shared lib support for Linux oldld, aout, or coff. linux*oldld* | linux*aout* | linux*coff*) dynamic_linker=no ;; linux*android*) version_type=none # Android doesn't support versioned libraries. need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext' soname_spec='$libname$release$shared_ext' finish_cmds= shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes dynamic_linker='Android linker' # Don't embed -rpath directories since the linker doesn't support them. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' finish_cmds='PATH="\$PATH:/sbin" ldconfig -n $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no # Some binutils ld are patched to set DT_RUNPATH AC_CACHE_VAL([lt_cv_shlibpath_overrides_runpath], [lt_cv_shlibpath_overrides_runpath=no save_LDFLAGS=$LDFLAGS save_libdir=$libdir eval "libdir=/foo; wl=\"$_LT_TAGVAR(lt_prog_compiler_wl, $1)\"; \ LDFLAGS=\"\$LDFLAGS $_LT_TAGVAR(hardcode_libdir_flag_spec, $1)\"" AC_LINK_IFELSE([AC_LANG_PROGRAM([],[])], [AS_IF([ ($OBJDUMP -p conftest$ac_exeext) 2>/dev/null | grep "RUNPATH.*$libdir" >/dev/null], [lt_cv_shlibpath_overrides_runpath=yes])]) LDFLAGS=$save_LDFLAGS libdir=$save_libdir ]) shlibpath_overrides_runpath=$lt_cv_shlibpath_overrides_runpath # This implies no fast_install, which is unacceptable. # Some rework will be needed to allow for fast_install # before this can be enabled. hardcode_into_libs=yes # Ideally, we could use ldconfig to report *all* directores which are # searched for libraries, however this is still not possible. Aside from not # being certain /sbin/ldconfig is available, command # 'ldconfig -N -X -v | grep ^/' on 64bit Fedora does not report /usr/lib64, # even though it is searched at run-time. Try to do the best guess by # appending ld.so.conf contents (and includes) to the search path. if test -f /etc/ld.so.conf; then lt_ld_extra=`awk '/^include / { system(sprintf("cd /etc; cat %s 2>/dev/null", \[$]2)); skip = 1; } { if (!skip) print \[$]0; skip = 0; }' < /etc/ld.so.conf | $SED -e 's/#.*//;/^[ ]*hwcap[ ]/d;s/[:, ]/ /g;s/=[^=]*$//;s/=[^= ]* / /g;s/"//g;/^$/d' | tr '\n' ' '` sys_lib_dlsearch_path_spec="/lib /usr/lib $lt_ld_extra" fi # We used to test for /lib/ld.so.1 and disable shared libraries on # powerpc, because MkLinux only supported shared libraries with the # GNU dynamic linker. Since this was broken with cross compilers, # most powerpc-linux boxes support dynamic linking these days and # people can always --disable-shared, the test was removed, and we # assume the GNU/Linux dynamic linker is in use. dynamic_linker='GNU/Linux ld.so' ;; netbsdelf*-gnu) version_type=linux need_lib_prefix=no need_version=no library_names_spec='${libname}${release}${shared_ext}$versuffix ${libname}${release}${shared_ext}$major ${libname}${shared_ext}' soname_spec='${libname}${release}${shared_ext}$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='NetBSD ld.elf_so' ;; netbsd*) version_type=sunos need_lib_prefix=no need_version=no if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' dynamic_linker='NetBSD (a.out) ld.so' else library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' dynamic_linker='NetBSD ld.elf_so' fi shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes ;; newsos6) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; *nto* | *qnx*) version_type=qnx need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes dynamic_linker='ldqnx.so' ;; openbsd* | bitrig*) version_type=sunos sys_lib_dlsearch_path_spec=/usr/lib need_lib_prefix=no if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then need_version=no else need_version=yes fi library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/sbin" ldconfig -m $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes ;; os2*) libname_spec='$name' version_type=windows shrext_cmds=.dll need_version=no need_lib_prefix=no # OS/2 can only load a DLL with a base name of 8 characters or less. soname_spec='`test -n "$os2dllname" && libname="$os2dllname"; v=$($ECHO $release$versuffix | tr -d .-); n=$($ECHO $libname | cut -b -$((8 - ${#v})) | tr . _); $ECHO $n$v`$shared_ext' library_names_spec='${libname}_dll.$libext' dynamic_linker='OS/2 ld.exe' shlibpath_var=BEGINLIBPATH sys_lib_search_path_spec="/lib /usr/lib /usr/local/lib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec postinstall_cmds='base_file=`basename \$file`~ dlpath=`$SHELL 2>&1 -c '\''. $dir/'\''\$base_file'\''i; $ECHO \$dlname'\''`~ dldir=$destdir/`dirname \$dlpath`~ test -d \$dldir || mkdir -p \$dldir~ $install_prog $dir/$dlname \$dldir/$dlname~ chmod a+x \$dldir/$dlname~ if test -n '\''$stripme'\'' && test -n '\''$striplib'\''; then eval '\''$striplib \$dldir/$dlname'\'' || exit \$?; fi' postuninstall_cmds='dldll=`$SHELL 2>&1 -c '\''. $file; $ECHO \$dlname'\''`~ dlpath=$dir/\$dldll~ $RM \$dlpath' ;; osf3* | osf4* | osf5*) version_type=osf need_lib_prefix=no need_version=no soname_spec='$libname$release$shared_ext$major' library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH sys_lib_search_path_spec="/usr/shlib /usr/ccs/lib /usr/lib/cmplrs/cc /usr/lib /usr/local/lib /var/shlib" sys_lib_dlsearch_path_spec=$sys_lib_search_path_spec ;; rdos*) dynamic_linker=no ;; solaris*) version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes # ldd complains unless libraries are executable postinstall_cmds='chmod +x $lib' ;; sunos4*) version_type=sunos library_names_spec='$libname$release$shared_ext$versuffix $libname$shared_ext$versuffix' finish_cmds='PATH="\$PATH:/usr/etc" ldconfig $libdir' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes if test yes = "$with_gnu_ld"; then need_lib_prefix=no fi need_version=yes ;; sysv4 | sysv4.3*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH case $host_vendor in sni) shlibpath_overrides_runpath=no need_lib_prefix=no runpath_var=LD_RUN_PATH ;; siemens) need_lib_prefix=no ;; motorola) need_lib_prefix=no need_version=no shlibpath_overrides_runpath=no sys_lib_search_path_spec='/lib /usr/lib /usr/ccs/lib' ;; esac ;; sysv4*MP*) if test -d /usr/nec; then version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$shared_ext.$versuffix $libname$shared_ext.$major $libname$shared_ext' soname_spec='$libname$shared_ext.$major' shlibpath_var=LD_LIBRARY_PATH fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) version_type=sco need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=yes hardcode_into_libs=yes if test yes = "$with_gnu_ld"; then sys_lib_search_path_spec='/usr/local/lib /usr/gnu/lib /usr/ccs/lib /usr/lib /lib' else sys_lib_search_path_spec='/usr/ccs/lib /usr/lib' case $host_os in sco3.2v5*) sys_lib_search_path_spec="$sys_lib_search_path_spec /lib" ;; esac fi sys_lib_dlsearch_path_spec='/usr/lib' ;; tpf*) # TPF is a cross-target only. Preferred cross-host = GNU/Linux. version_type=linux # correct to gnu/linux during the next big refactor need_lib_prefix=no need_version=no library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' shlibpath_var=LD_LIBRARY_PATH shlibpath_overrides_runpath=no hardcode_into_libs=yes ;; uts4*) version_type=linux # correct to gnu/linux during the next big refactor library_names_spec='$libname$release$shared_ext$versuffix $libname$release$shared_ext$major $libname$shared_ext' soname_spec='$libname$release$shared_ext$major' shlibpath_var=LD_LIBRARY_PATH ;; *) dynamic_linker=no ;; esac AC_MSG_RESULT([$dynamic_linker]) test no = "$dynamic_linker" && can_build_shared=no variables_saved_for_relink="PATH $shlibpath_var $runpath_var" if test yes = "$GCC"; then variables_saved_for_relink="$variables_saved_for_relink GCC_EXEC_PREFIX COMPILER_PATH LIBRARY_PATH" fi if test set = "${lt_cv_sys_lib_search_path_spec+set}"; then sys_lib_search_path_spec=$lt_cv_sys_lib_search_path_spec fi if test set = "${lt_cv_sys_lib_dlsearch_path_spec+set}"; then sys_lib_dlsearch_path_spec=$lt_cv_sys_lib_dlsearch_path_spec fi # remember unaugmented sys_lib_dlsearch_path content for libtool script decls... configure_time_dlsearch_path=$sys_lib_dlsearch_path_spec # ... but it needs LT_SYS_LIBRARY_PATH munging for other configure-time code func_munge_path_list sys_lib_dlsearch_path_spec "$LT_SYS_LIBRARY_PATH" # to be used as default LT_SYS_LIBRARY_PATH value in generated libtool configure_time_lt_sys_library_path=$LT_SYS_LIBRARY_PATH _LT_DECL([], [variables_saved_for_relink], [1], [Variables whose values should be saved in libtool wrapper scripts and restored at link time]) _LT_DECL([], [need_lib_prefix], [0], [Do we need the "lib" prefix for modules?]) _LT_DECL([], [need_version], [0], [Do we need a version for libraries?]) _LT_DECL([], [version_type], [0], [Library versioning type]) _LT_DECL([], [runpath_var], [0], [Shared library runtime path variable]) _LT_DECL([], [shlibpath_var], [0],[Shared library path variable]) _LT_DECL([], [shlibpath_overrides_runpath], [0], [Is shlibpath searched before the hard-coded library search path?]) _LT_DECL([], [libname_spec], [1], [Format of library name prefix]) _LT_DECL([], [library_names_spec], [1], [[List of archive names. First name is the real one, the rest are links. The last name is the one that the linker finds with -lNAME]]) _LT_DECL([], [soname_spec], [1], [[The coded name of the library, if different from the real name]]) _LT_DECL([], [install_override_mode], [1], [Permission mode override for installation of shared libraries]) _LT_DECL([], [postinstall_cmds], [2], [Command to use after installation of a shared archive]) _LT_DECL([], [postuninstall_cmds], [2], [Command to use after uninstallation of a shared archive]) _LT_DECL([], [finish_cmds], [2], [Commands used to finish a libtool library installation in a directory]) _LT_DECL([], [finish_eval], [1], [[As "finish_cmds", except a single script fragment to be evaled but not shown]]) _LT_DECL([], [hardcode_into_libs], [0], [Whether we should hardcode library paths into libraries]) _LT_DECL([], [sys_lib_search_path_spec], [2], [Compile-time system search path for libraries]) _LT_DECL([sys_lib_dlsearch_path_spec], [configure_time_dlsearch_path], [2], [Detected run-time system search path for libraries]) _LT_DECL([], [configure_time_lt_sys_library_path], [2], [Explicit LT_SYS_LIBRARY_PATH set during ./configure time]) ])# _LT_SYS_DYNAMIC_LINKER # _LT_PATH_TOOL_PREFIX(TOOL) # -------------------------- # find a file program that can recognize shared library AC_DEFUN([_LT_PATH_TOOL_PREFIX], [m4_require([_LT_DECL_EGREP])dnl AC_MSG_CHECKING([for $1]) AC_CACHE_VAL(lt_cv_path_MAGIC_CMD, [case $MAGIC_CMD in [[\\/*] | ?:[\\/]*]) lt_cv_path_MAGIC_CMD=$MAGIC_CMD # Let the user override the test with a path. ;; *) lt_save_MAGIC_CMD=$MAGIC_CMD lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR dnl $ac_dummy forces splitting on constant user-supplied paths. dnl POSIX.2 word splitting is done only on the output of word expansions, dnl not every word. This closes a longstanding sh security hole. ac_dummy="m4_if([$2], , $PATH, [$2])" for ac_dir in $ac_dummy; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$1"; then lt_cv_path_MAGIC_CMD=$ac_dir/"$1" if test -n "$file_magic_test_file"; then case $deplibs_check_method in "file_magic "*) file_magic_regex=`expr "$deplibs_check_method" : "file_magic \(.*\)"` MAGIC_CMD=$lt_cv_path_MAGIC_CMD if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | $EGREP "$file_magic_regex" > /dev/null; then : else cat <<_LT_EOF 1>&2 *** Warning: the command libtool uses to detect shared libraries, *** $file_magic_cmd, produces output that libtool cannot recognize. *** The result is that libtool may fail to recognize shared libraries *** as such. This will affect the creation of libtool libraries that *** depend on shared libraries, but programs linked with such libtool *** libraries will work regardless of this problem. Nevertheless, you *** may want to report the problem to your system manager and/or to *** bug-libtool@gnu.org _LT_EOF fi ;; esac fi break fi done IFS=$lt_save_ifs MAGIC_CMD=$lt_save_MAGIC_CMD ;; esac]) MAGIC_CMD=$lt_cv_path_MAGIC_CMD if test -n "$MAGIC_CMD"; then AC_MSG_RESULT($MAGIC_CMD) else AC_MSG_RESULT(no) fi _LT_DECL([], [MAGIC_CMD], [0], [Used to examine libraries when file_magic_cmd begins with "file"])dnl ])# _LT_PATH_TOOL_PREFIX # Old name: AU_ALIAS([AC_PATH_TOOL_PREFIX], [_LT_PATH_TOOL_PREFIX]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_PATH_TOOL_PREFIX], []) # _LT_PATH_MAGIC # -------------- # find a file program that can recognize a shared library m4_defun([_LT_PATH_MAGIC], [_LT_PATH_TOOL_PREFIX(${ac_tool_prefix}file, /usr/bin$PATH_SEPARATOR$PATH) if test -z "$lt_cv_path_MAGIC_CMD"; then if test -n "$ac_tool_prefix"; then _LT_PATH_TOOL_PREFIX(file, /usr/bin$PATH_SEPARATOR$PATH) else MAGIC_CMD=: fi fi ])# _LT_PATH_MAGIC # LT_PATH_LD # ---------- # find the pathname to the GNU or non-GNU linker AC_DEFUN([LT_PATH_LD], [AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PROG_ECHO_BACKSLASH])dnl AC_ARG_WITH([gnu-ld], [AS_HELP_STRING([--with-gnu-ld], [assume the C compiler uses GNU ld @<:@default=no@:>@])], [test no = "$withval" || with_gnu_ld=yes], [with_gnu_ld=no])dnl ac_prog=ld if test yes = "$GCC"; then # Check if gcc -print-prog-name=ld gives a path. AC_MSG_CHECKING([for ld used by $CC]) case $host in *-*-mingw*) # gcc leaves a trailing carriage return, which upsets mingw ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; *) ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; esac case $ac_prog in # Accept absolute paths. [[\\/]]* | ?:[[\\/]]*) re_direlt='/[[^/]][[^/]]*/\.\./' # Canonicalize the pathname of ld ac_prog=`$ECHO "$ac_prog"| $SED 's%\\\\%/%g'` while $ECHO "$ac_prog" | $GREP "$re_direlt" > /dev/null 2>&1; do ac_prog=`$ECHO $ac_prog| $SED "s%$re_direlt%/%"` done test -z "$LD" && LD=$ac_prog ;; "") # If it fails, then pretend we aren't using GCC. ac_prog=ld ;; *) # If it is relative, then search for the first ld in PATH. with_gnu_ld=unknown ;; esac elif test yes = "$with_gnu_ld"; then AC_MSG_CHECKING([for GNU ld]) else AC_MSG_CHECKING([for non-GNU ld]) fi AC_CACHE_VAL(lt_cv_path_LD, [if test -z "$LD"; then lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then lt_cv_path_LD=$ac_dir/$ac_prog # Check to see if the program is GNU ld. I'd rather use --version, # but apparently some variants of GNU ld only accept -v. # Break only if it was the GNU/non-GNU ld that we prefer. case `"$lt_cv_path_LD" -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) test no != "$with_gnu_ld" && break ;; *) test yes != "$with_gnu_ld" && break ;; esac fi done IFS=$lt_save_ifs else lt_cv_path_LD=$LD # Let the user override the test with a path. fi]) LD=$lt_cv_path_LD if test -n "$LD"; then AC_MSG_RESULT($LD) else AC_MSG_RESULT(no) fi test -z "$LD" && AC_MSG_ERROR([no acceptable ld found in \$PATH]) _LT_PATH_LD_GNU AC_SUBST([LD]) _LT_TAGDECL([], [LD], [1], [The linker used to build libraries]) ])# LT_PATH_LD # Old names: AU_ALIAS([AM_PROG_LD], [LT_PATH_LD]) AU_ALIAS([AC_PROG_LD], [LT_PATH_LD]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_LD], []) dnl AC_DEFUN([AC_PROG_LD], []) # _LT_PATH_LD_GNU #- -------------- m4_defun([_LT_PATH_LD_GNU], [AC_CACHE_CHECK([if the linker ($LD) is GNU ld], lt_cv_prog_gnu_ld, [# I'd rather use --version here, but apparently some GNU lds only accept -v. case `$LD -v 2>&1 </dev/null` in *GNU* | *'with BFD'*) lt_cv_prog_gnu_ld=yes ;; *) lt_cv_prog_gnu_ld=no ;; esac]) with_gnu_ld=$lt_cv_prog_gnu_ld ])# _LT_PATH_LD_GNU # _LT_CMD_RELOAD # -------------- # find reload flag for linker # -- PORTME Some linkers may need a different reload flag. m4_defun([_LT_CMD_RELOAD], [AC_CACHE_CHECK([for $LD option to reload object files], lt_cv_ld_reload_flag, [lt_cv_ld_reload_flag='-r']) reload_flag=$lt_cv_ld_reload_flag case $reload_flag in "" | " "*) ;; *) reload_flag=" $reload_flag" ;; esac reload_cmds='$LD$reload_flag -o $output$reload_objs' case $host_os in cygwin* | mingw* | pw32* | cegcc*) if test yes != "$GCC"; then reload_cmds=false fi ;; darwin*) if test yes = "$GCC"; then reload_cmds='$LTCC $LTCFLAGS -nostdlib $wl-r -o $output$reload_objs' else reload_cmds='$LD$reload_flag -o $output$reload_objs' fi ;; esac _LT_TAGDECL([], [reload_flag], [1], [How to create reloadable object files])dnl _LT_TAGDECL([], [reload_cmds], [2])dnl ])# _LT_CMD_RELOAD # _LT_PATH_DD # ----------- # find a working dd m4_defun([_LT_PATH_DD], [AC_CACHE_CHECK([for a working dd], [ac_cv_path_lt_DD], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i : ${lt_DD:=$DD} AC_PATH_PROGS_FEATURE_CHECK([lt_DD], [dd], [if "$ac_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && ac_cv_path_lt_DD="$ac_path_lt_DD" ac_path_lt_DD_found=: fi]) rm -f conftest.i conftest2.i conftest.out]) ])# _LT_PATH_DD # _LT_CMD_TRUNCATE # ---------------- # find command to truncate a binary pipe m4_defun([_LT_CMD_TRUNCATE], [m4_require([_LT_PATH_DD]) AC_CACHE_CHECK([how to truncate binary pipes], [lt_cv_truncate_bin], [printf 0123456789abcdef0123456789abcdef >conftest.i cat conftest.i conftest.i >conftest2.i lt_cv_truncate_bin= if "$ac_cv_path_lt_DD" bs=32 count=1 <conftest2.i >conftest.out 2>/dev/null; then cmp -s conftest.i conftest.out \ && lt_cv_truncate_bin="$ac_cv_path_lt_DD bs=4096 count=1" fi rm -f conftest.i conftest2.i conftest.out test -z "$lt_cv_truncate_bin" && lt_cv_truncate_bin="$SED -e 4q"]) _LT_DECL([lt_truncate_bin], [lt_cv_truncate_bin], [1], [Command to truncate a binary pipe]) ])# _LT_CMD_TRUNCATE # _LT_CHECK_MAGIC_METHOD # ---------------------- # how to check for library dependencies # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_MAGIC_METHOD], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) AC_CACHE_CHECK([how to recognize dependent libraries], lt_cv_deplibs_check_method, [lt_cv_file_magic_cmd='$MAGIC_CMD' lt_cv_file_magic_test_file= lt_cv_deplibs_check_method='unknown' # Need to set the preceding variable on all platforms that support # interlibrary dependencies. # 'none' -- dependencies not supported. # 'unknown' -- same as none, but documents that we really don't know. # 'pass_all' -- all dependencies passed with no checks. # 'test_compile' -- check by making test program. # 'file_magic [[regex]]' -- check by looking for files in library path # that responds to the $file_magic_cmd with a given extended regex. # If you have 'file' or equivalent on your system and you're not sure # whether 'pass_all' will *always* work, you probably want this one. case $host_os in aix[[4-9]]*) lt_cv_deplibs_check_method=pass_all ;; beos*) lt_cv_deplibs_check_method=pass_all ;; bsdi[[45]]*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib)' lt_cv_file_magic_cmd='/usr/bin/file -L' lt_cv_file_magic_test_file=/shlib/libc.so ;; cygwin*) # func_win32_libid is a shell function defined in ltmain.sh lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' ;; mingw* | pw32*) # Base MSYS/MinGW do not provide the 'file' command needed by # func_win32_libid shell function, so use a weaker test based on 'objdump', # unless we find 'file', for example because we are cross-compiling. if ( file / ) >/dev/null 2>&1; then lt_cv_deplibs_check_method='file_magic ^x86 archive import|^x86 DLL' lt_cv_file_magic_cmd='func_win32_libid' else # Keep this pattern in sync with the one in func_win32_libid. lt_cv_deplibs_check_method='file_magic file format (pei*-i386(.*architecture: i386)?|pe-arm-wince|pe-x86-64)' lt_cv_file_magic_cmd='$OBJDUMP -f' fi ;; cegcc*) # use the weaker test based on 'objdump'. See mingw*. lt_cv_deplibs_check_method='file_magic file format pe-arm-.*little(.*architecture: arm)?' lt_cv_file_magic_cmd='$OBJDUMP -f' ;; darwin* | rhapsody*) lt_cv_deplibs_check_method=pass_all ;; freebsd* | dragonfly*) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then case $host_cpu in i*86 ) # Not sure whether the presence of OpenBSD here was a mistake. # Let's accept both of them until this is cleared up. lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD|DragonFly)/i[[3-9]]86 (compact )?demand paged shared library' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ;; esac else lt_cv_deplibs_check_method=pass_all fi ;; haiku*) lt_cv_deplibs_check_method=pass_all ;; hpux10.20* | hpux11*) lt_cv_file_magic_cmd=/usr/bin/file case $host_cpu in ia64*) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|ELF-[[0-9]][[0-9]]) shared object file - IA64' lt_cv_file_magic_test_file=/usr/lib/hpux32/libc.so ;; hppa*64*) [lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|ELF[ -][0-9][0-9])(-bit)?( [LM]SB)? shared object( file)?[, -]* PA-RISC [0-9]\.[0-9]'] lt_cv_file_magic_test_file=/usr/lib/pa20_64/libc.sl ;; *) lt_cv_deplibs_check_method='file_magic (s[[0-9]][[0-9]][[0-9]]|PA-RISC[[0-9]]\.[[0-9]]) shared library' lt_cv_file_magic_test_file=/usr/lib/libc.sl ;; esac ;; interix[[3-9]]*) # PIC code is broken on Interix 3.x, that's why |\.a not |_pic\.a here lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|\.a)$' ;; irix5* | irix6* | nonstopux*) case $LD in *-32|*"-32 ") libmagic=32-bit;; *-n32|*"-n32 ") libmagic=N32;; *-64|*"-64 ") libmagic=64-bit;; *) libmagic=never-match;; esac lt_cv_deplibs_check_method=pass_all ;; # This must be glibc/ELF. linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) lt_cv_deplibs_check_method=pass_all ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ > /dev/null; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so|_pic\.a)$' fi ;; newos6*) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (executable|dynamic lib)' lt_cv_file_magic_cmd=/usr/bin/file lt_cv_file_magic_test_file=/usr/lib/libnls.so ;; *nto* | *qnx*) lt_cv_deplibs_check_method=pass_all ;; openbsd* | bitrig*) if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|\.so|_pic\.a)$' else lt_cv_deplibs_check_method='match_pattern /lib[[^/]]+(\.so\.[[0-9]]+\.[[0-9]]+|_pic\.a)$' fi ;; osf3* | osf4* | osf5*) lt_cv_deplibs_check_method=pass_all ;; rdos*) lt_cv_deplibs_check_method=pass_all ;; solaris*) lt_cv_deplibs_check_method=pass_all ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX* | sysv4*uw2*) lt_cv_deplibs_check_method=pass_all ;; sysv4 | sysv4.3*) case $host_vendor in motorola) lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[ML]]SB (shared object|dynamic lib) M[[0-9]][[0-9]]* Version [[0-9]]' lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ;; ncr) lt_cv_deplibs_check_method=pass_all ;; sequent) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method='file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB (shared object|dynamic lib )' ;; sni) lt_cv_file_magic_cmd='/bin/file' lt_cv_deplibs_check_method="file_magic ELF [[0-9]][[0-9]]*-bit [[LM]]SB dynamic lib" lt_cv_file_magic_test_file=/lib/libc.so ;; siemens) lt_cv_deplibs_check_method=pass_all ;; pc) lt_cv_deplibs_check_method=pass_all ;; esac ;; tpf*) lt_cv_deplibs_check_method=pass_all ;; os2*) lt_cv_deplibs_check_method=pass_all ;; esac ]) file_magic_glob= want_nocaseglob=no if test "$build" = "$host"; then case $host_os in mingw* | pw32*) if ( shopt | grep nocaseglob ) >/dev/null 2>&1; then want_nocaseglob=yes else file_magic_glob=`echo aAbBcCdDeEfFgGhHiIjJkKlLmMnNoOpPqQrRsStTuUvVwWxXyYzZ | $SED -e "s/\(..\)/s\/[[\1]]\/[[\1]]\/g;/g"` fi ;; esac fi file_magic_cmd=$lt_cv_file_magic_cmd deplibs_check_method=$lt_cv_deplibs_check_method test -z "$deplibs_check_method" && deplibs_check_method=unknown _LT_DECL([], [deplibs_check_method], [1], [Method to check whether dependent libraries are shared objects]) _LT_DECL([], [file_magic_cmd], [1], [Command to use when deplibs_check_method = "file_magic"]) _LT_DECL([], [file_magic_glob], [1], [How to find potential files when deplibs_check_method = "file_magic"]) _LT_DECL([], [want_nocaseglob], [1], [Find potential files using nocaseglob when deplibs_check_method = "file_magic"]) ])# _LT_CHECK_MAGIC_METHOD # LT_PATH_NM # ---------- # find the pathname to a BSD- or MS-compatible name lister AC_DEFUN([LT_PATH_NM], [AC_REQUIRE([AC_PROG_CC])dnl AC_CACHE_CHECK([for BSD- or MS-compatible name lister (nm)], lt_cv_path_NM, [if test -n "$NM"; then # Let the user override the test. lt_cv_path_NM=$NM else lt_nm_to_check=${ac_tool_prefix}nm if test -n "$ac_tool_prefix" && test "$build" = "$host"; then lt_nm_to_check="$lt_nm_to_check nm" fi for lt_tmp_nm in $lt_nm_to_check; do lt_save_ifs=$IFS; IFS=$PATH_SEPARATOR for ac_dir in $PATH /usr/ccs/bin/elf /usr/ccs/bin /usr/ucb /bin; do IFS=$lt_save_ifs test -z "$ac_dir" && ac_dir=. tmp_nm=$ac_dir/$lt_tmp_nm if test -f "$tmp_nm" || test -f "$tmp_nm$ac_exeext"; then # Check to see if the nm accepts a BSD-compat flag. # Adding the 'sed 1q' prevents false positives on HP-UX, which says: # nm: unknown option "B" ignored # Tru64's nm complains that /dev/null is an invalid object file # MSYS converts /dev/null to NUL, MinGW nm treats NUL as empty case $build_os in mingw*) lt_bad_file=conftest.nm/nofile ;; *) lt_bad_file=/dev/null ;; esac case `"$tmp_nm" -B $lt_bad_file 2>&1 | sed '1q'` in *$lt_bad_file* | *'Invalid file or object type'*) lt_cv_path_NM="$tmp_nm -B" break 2 ;; *) case `"$tmp_nm" -p /dev/null 2>&1 | sed '1q'` in */dev/null*) lt_cv_path_NM="$tmp_nm -p" break 2 ;; *) lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but continue # so that we can try to find one that supports BSD flags ;; esac ;; esac fi done IFS=$lt_save_ifs done : ${lt_cv_path_NM=no} fi]) if test no != "$lt_cv_path_NM"; then NM=$lt_cv_path_NM else # Didn't find any BSD compatible name lister, look for dumpbin. if test -n "$DUMPBIN"; then : # Let the user override the test. else AC_CHECK_TOOLS(DUMPBIN, [dumpbin "link -dump"], :) case `$DUMPBIN -symbols -headers /dev/null 2>&1 | sed '1q'` in *COFF*) DUMPBIN="$DUMPBIN -symbols -headers" ;; *) DUMPBIN=: ;; esac fi AC_SUBST([DUMPBIN]) if test : != "$DUMPBIN"; then NM=$DUMPBIN fi fi test -z "$NM" && NM=nm AC_SUBST([NM]) _LT_DECL([], [NM], [1], [A BSD- or MS-compatible name lister])dnl AC_CACHE_CHECK([the name lister ($NM) interface], [lt_cv_nm_interface], [lt_cv_nm_interface="BSD nm" echo "int some_variable = 0;" > conftest.$ac_ext (eval echo "\"\$as_me:$LINENO: $ac_compile\"" >&AS_MESSAGE_LOG_FD) (eval "$ac_compile" 2>conftest.err) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: $NM \\\"conftest.$ac_objext\\\"\"" >&AS_MESSAGE_LOG_FD) (eval "$NM \"conftest.$ac_objext\"" 2>conftest.err > conftest.out) cat conftest.err >&AS_MESSAGE_LOG_FD (eval echo "\"\$as_me:$LINENO: output\"" >&AS_MESSAGE_LOG_FD) cat conftest.out >&AS_MESSAGE_LOG_FD if $GREP 'External.*some_variable' conftest.out > /dev/null; then lt_cv_nm_interface="MS dumpbin" fi rm -f conftest*]) ])# LT_PATH_NM # Old names: AU_ALIAS([AM_PROG_NM], [LT_PATH_NM]) AU_ALIAS([AC_PROG_NM], [LT_PATH_NM]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_PROG_NM], []) dnl AC_DEFUN([AC_PROG_NM], []) # _LT_CHECK_SHAREDLIB_FROM_LINKLIB # -------------------------------- # how to determine the name of the shared library # associated with a specific link library. # -- PORTME fill in with the dynamic library characteristics m4_defun([_LT_CHECK_SHAREDLIB_FROM_LINKLIB], [m4_require([_LT_DECL_EGREP]) m4_require([_LT_DECL_OBJDUMP]) m4_require([_LT_DECL_DLLTOOL]) AC_CACHE_CHECK([how to associate runtime and link libraries], lt_cv_sharedlib_from_linklib_cmd, [lt_cv_sharedlib_from_linklib_cmd='unknown' case $host_os in cygwin* | mingw* | pw32* | cegcc*) # two different shell functions defined in ltmain.sh; # decide which one to use based on capabilities of $DLLTOOL case `$DLLTOOL --help 2>&1` in *--identify-strict*) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib ;; *) lt_cv_sharedlib_from_linklib_cmd=func_cygming_dll_for_implib_fallback ;; esac ;; *) # fallback: assume linklib IS sharedlib lt_cv_sharedlib_from_linklib_cmd=$ECHO ;; esac ]) sharedlib_from_linklib_cmd=$lt_cv_sharedlib_from_linklib_cmd test -z "$sharedlib_from_linklib_cmd" && sharedlib_from_linklib_cmd=$ECHO _LT_DECL([], [sharedlib_from_linklib_cmd], [1], [Command to associate shared and link libraries]) ])# _LT_CHECK_SHAREDLIB_FROM_LINKLIB # _LT_PATH_MANIFEST_TOOL # ---------------------- # locate the manifest tool m4_defun([_LT_PATH_MANIFEST_TOOL], [AC_CHECK_TOOL(MANIFEST_TOOL, mt, :) test -z "$MANIFEST_TOOL" && MANIFEST_TOOL=mt AC_CACHE_CHECK([if $MANIFEST_TOOL is a manifest tool], [lt_cv_path_mainfest_tool], [lt_cv_path_mainfest_tool=no echo "$as_me:$LINENO: $MANIFEST_TOOL '-?'" >&AS_MESSAGE_LOG_FD $MANIFEST_TOOL '-?' 2>conftest.err > conftest.out cat conftest.err >&AS_MESSAGE_LOG_FD if $GREP 'Manifest Tool' conftest.out > /dev/null; then lt_cv_path_mainfest_tool=yes fi rm -f conftest*]) if test yes != "$lt_cv_path_mainfest_tool"; then MANIFEST_TOOL=: fi _LT_DECL([], [MANIFEST_TOOL], [1], [Manifest tool])dnl ])# _LT_PATH_MANIFEST_TOOL # _LT_DLL_DEF_P([FILE]) # --------------------- # True iff FILE is a Windows DLL '.def' file. # Keep in sync with func_dll_def_p in the libtool script AC_DEFUN([_LT_DLL_DEF_P], [dnl test DEF = "`$SED -n dnl -e '\''s/^[[ ]]*//'\'' dnl Strip leading whitespace -e '\''/^\(;.*\)*$/d'\'' dnl Delete empty lines and comments -e '\''s/^\(EXPORTS\|LIBRARY\)\([[ ]].*\)*$/DEF/p'\'' dnl -e q dnl Only consider the first "real" line $1`" dnl ])# _LT_DLL_DEF_P # LT_LIB_M # -------- # check for math library AC_DEFUN([LT_LIB_M], [AC_REQUIRE([AC_CANONICAL_HOST])dnl LIBM= case $host in *-*-beos* | *-*-cegcc* | *-*-cygwin* | *-*-haiku* | *-*-pw32* | *-*-darwin*) # These system don't have libm, or don't need it ;; *-ncr-sysv4.3*) AC_CHECK_LIB(mw, _mwvalidcheckl, LIBM=-lmw) AC_CHECK_LIB(m, cos, LIBM="$LIBM -lm") ;; *) AC_CHECK_LIB(m, cos, LIBM=-lm) ;; esac AC_SUBST([LIBM]) ])# LT_LIB_M # Old name: AU_ALIAS([AC_CHECK_LIBM], [LT_LIB_M]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_CHECK_LIBM], []) # _LT_COMPILER_NO_RTTI([TAGNAME]) # ------------------------------- m4_defun([_LT_COMPILER_NO_RTTI], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= if test yes = "$GCC"; then case $cc_basename in nvcc*) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -Xcompiler -fno-builtin' ;; *) _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' ;; esac _LT_COMPILER_OPTION([if $compiler supports -fno-rtti -fno-exceptions], lt_cv_prog_compiler_rtti_exceptions, [-fno-rtti -fno-exceptions], [], [_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)="$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1) -fno-rtti -fno-exceptions"]) fi _LT_TAGDECL([no_builtin_flag], [lt_prog_compiler_no_builtin_flag], [1], [Compiler flag to turn off builtin functions]) ])# _LT_COMPILER_NO_RTTI # _LT_CMD_GLOBAL_SYMBOLS # ---------------------- m4_defun([_LT_CMD_GLOBAL_SYMBOLS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_PROG_CC])dnl AC_REQUIRE([AC_PROG_AWK])dnl AC_REQUIRE([LT_PATH_NM])dnl AC_REQUIRE([LT_PATH_LD])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_TAG_COMPILER])dnl # Check for command to grab the raw symbol name followed by C symbol from nm. AC_MSG_CHECKING([command to parse $NM output from $compiler object]) AC_CACHE_VAL([lt_cv_sys_global_symbol_pipe], [ # These are sane defaults that work on at least a few old systems. # [They come from Ultrix. What could be older than Ultrix?!! ;)] # Character class describing NM global symbol codes. symcode='[[BCDEGRST]]' # Regexp to match symbols that can be accessed directly from C. sympat='\([[_A-Za-z]][[_A-Za-z0-9]]*\)' # Define system-specific variables. case $host_os in aix*) symcode='[[BCDT]]' ;; cygwin* | mingw* | pw32* | cegcc*) symcode='[[ABCDGISTW]]' ;; hpux*) if test ia64 = "$host_cpu"; then symcode='[[ABCDEGRST]]' fi ;; irix* | nonstopux*) symcode='[[BCDEGRST]]' ;; osf*) symcode='[[BCDEGQRST]]' ;; solaris*) symcode='[[BDRT]]' ;; sco3.2v5*) symcode='[[DT]]' ;; sysv4.2uw2*) symcode='[[DT]]' ;; sysv5* | sco5v6* | unixware* | OpenUNIX*) symcode='[[ABDT]]' ;; sysv4) symcode='[[DFNSTU]]' ;; esac # If we're using GNU nm, then use its standard symbol codes. case `$NM -V 2>&1` in *GNU* | *'with BFD'*) symcode='[[ABCDGIRSTW]]' ;; esac if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Gets list of data symbols to import. lt_cv_sys_global_symbol_to_import="sed -n -e 's/^I .* \(.*\)$/\1/p'" # Adjust the below global symbol transforms to fixup imported variables. lt_cdecl_hook=" -e 's/^I .* \(.*\)$/extern __declspec(dllimport) char \1;/p'" lt_c_name_hook=" -e 's/^I .* \(.*\)$/ {\"\1\", (void *) 0},/p'" lt_c_name_lib_hook="\ -e 's/^I .* \(lib.*\)$/ {\"\1\", (void *) 0},/p'\ -e 's/^I .* \(.*\)$/ {\"lib\1\", (void *) 0},/p'" else # Disable hooks by default. lt_cv_sys_global_symbol_to_import= lt_cdecl_hook= lt_c_name_hook= lt_c_name_lib_hook= fi # Transform an extracted symbol line into a proper C declaration. # Some systems (esp. on ia64) link data and code symbols differently, # so use this general approach. lt_cv_sys_global_symbol_to_cdecl="sed -n"\ $lt_cdecl_hook\ " -e 's/^T .* \(.*\)$/extern int \1();/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/extern char \1;/p'" # Transform an extracted symbol line into symbol name and symbol address lt_cv_sys_global_symbol_to_c_name_address="sed -n"\ $lt_c_name_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/p'" # Transform an extracted symbol line into symbol name with lib prefix and # symbol address. lt_cv_sys_global_symbol_to_c_name_address_lib_prefix="sed -n"\ $lt_c_name_lib_hook\ " -e 's/^: \(.*\) .*$/ {\"\1\", (void *) 0},/p'"\ " -e 's/^$symcode$symcode* .* \(lib.*\)$/ {\"\1\", (void *) \&\1},/p'"\ " -e 's/^$symcode$symcode* .* \(.*\)$/ {\"lib\1\", (void *) \&\1},/p'" # Handle CRLF in mingw tool chain opt_cr= case $build_os in mingw*) opt_cr=`$ECHO 'x\{0,1\}' | tr x '\015'` # option cr in regexp ;; esac # Try without a prefix underscore, then with it. for ac_symprfx in "" "_"; do # Transform symcode, sympat, and symprfx into a raw symbol and a C symbol. symxfrm="\\1 $ac_symprfx\\2 \\2" # Write the raw and C identifiers. if test "$lt_cv_nm_interface" = "MS dumpbin"; then # Fake it for dumpbin and say T for any non-static function, # D for any global variable and I for any imported variable. # Also find C++ and __fastcall symbols from MSVC++, # which start with @ or ?. lt_cv_sys_global_symbol_pipe="$AWK ['"\ " {last_section=section; section=\$ 3};"\ " /^COFF SYMBOL TABLE/{for(i in hide) delete hide[i]};"\ " /Section length .*#relocs.*(pick any)/{hide[last_section]=1};"\ " /^ *Symbol name *: /{split(\$ 0,sn,\":\"); si=substr(sn[2],2)};"\ " /^ *Type *: code/{print \"T\",si,substr(si,length(prfx))};"\ " /^ *Type *: data/{print \"I\",si,substr(si,length(prfx))};"\ " \$ 0!~/External *\|/{next};"\ " / 0+ UNDEF /{next}; / UNDEF \([^|]\)*()/{next};"\ " {if(hide[section]) next};"\ " {f=\"D\"}; \$ 0~/\(\).*\|/{f=\"T\"};"\ " {split(\$ 0,a,/\||\r/); split(a[2],s)};"\ " s[1]~/^[@?]/{print f,s[1],s[1]; next};"\ " s[1]~prfx {split(s[1],t,\"@\"); print f,t[1],substr(t[1],length(prfx))}"\ " ' prfx=^$ac_symprfx]" else lt_cv_sys_global_symbol_pipe="sed -n -e 's/^.*[[ ]]\($symcode$symcode*\)[[ ]][[ ]]*$ac_symprfx$sympat$opt_cr$/$symxfrm/p'" fi lt_cv_sys_global_symbol_pipe="$lt_cv_sys_global_symbol_pipe | sed '/ __gnu_lto/d'" # Check to see that the pipe works correctly. pipe_works=no rm -f conftest* cat > conftest.$ac_ext <<_LT_EOF #ifdef __cplusplus extern "C" { #endif char nm_test_var; void nm_test_func(void); void nm_test_func(void){} #ifdef __cplusplus } #endif int main(){nm_test_var='a';nm_test_func();return(0);} _LT_EOF if AC_TRY_EVAL(ac_compile); then # Now try to grab the symbols. nlist=conftest.nm if AC_TRY_EVAL(NM conftest.$ac_objext \| "$lt_cv_sys_global_symbol_pipe" \> $nlist) && test -s "$nlist"; then # Try sorting and uniquifying the output. if sort "$nlist" | uniq > "$nlist"T; then mv -f "$nlist"T "$nlist" else rm -f "$nlist"T fi # Make sure that we snagged all the symbols we need. if $GREP ' nm_test_var$' "$nlist" >/dev/null; then if $GREP ' nm_test_func$' "$nlist" >/dev/null; then cat <<_LT_EOF > conftest.$ac_ext /* Keep this code in sync between libtool.m4, ltmain, lt_system.h, and tests. */ #if defined _WIN32 || defined __CYGWIN__ || defined _WIN32_WCE /* DATA imports from DLLs on WIN32 can't be const, because runtime relocations are performed -- see ld's documentation on pseudo-relocs. */ # define LT@&t@_DLSYM_CONST #elif defined __osf__ /* This system does not cope well with relocations in const data. */ # define LT@&t@_DLSYM_CONST #else # define LT@&t@_DLSYM_CONST const #endif #ifdef __cplusplus extern "C" { #endif _LT_EOF # Now generate the symbol file. eval "$lt_cv_sys_global_symbol_to_cdecl"' < "$nlist" | $GREP -v main >> conftest.$ac_ext' cat <<_LT_EOF >> conftest.$ac_ext /* The mapping between symbol names and symbols. */ LT@&t@_DLSYM_CONST struct { const char *name; void *address; } lt__PROGRAM__LTX_preloaded_symbols[[]] = { { "@PROGRAM@", (void *) 0 }, _LT_EOF $SED "s/^$symcode$symcode* .* \(.*\)$/ {\"\1\", (void *) \&\1},/" < "$nlist" | $GREP -v main >> conftest.$ac_ext cat <<\_LT_EOF >> conftest.$ac_ext {0, (void *) 0} }; /* This works around a problem in FreeBSD linker */ #ifdef FREEBSD_WORKAROUND static const void *lt_preloaded_setup() { return lt__PROGRAM__LTX_preloaded_symbols; } #endif #ifdef __cplusplus } #endif _LT_EOF # Now try linking the two files. mv conftest.$ac_objext conftstm.$ac_objext lt_globsym_save_LIBS=$LIBS lt_globsym_save_CFLAGS=$CFLAGS LIBS=conftstm.$ac_objext CFLAGS="$CFLAGS$_LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)" if AC_TRY_EVAL(ac_link) && test -s conftest$ac_exeext; then pipe_works=yes fi LIBS=$lt_globsym_save_LIBS CFLAGS=$lt_globsym_save_CFLAGS else echo "cannot find nm_test_func in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot find nm_test_var in $nlist" >&AS_MESSAGE_LOG_FD fi else echo "cannot run $lt_cv_sys_global_symbol_pipe" >&AS_MESSAGE_LOG_FD fi else echo "$progname: failed program was:" >&AS_MESSAGE_LOG_FD cat conftest.$ac_ext >&5 fi rm -rf conftest* conftst* # Do not use the global_symbol_pipe unless it works. if test yes = "$pipe_works"; then break else lt_cv_sys_global_symbol_pipe= fi done ]) if test -z "$lt_cv_sys_global_symbol_pipe"; then lt_cv_sys_global_symbol_to_cdecl= fi if test -z "$lt_cv_sys_global_symbol_pipe$lt_cv_sys_global_symbol_to_cdecl"; then AC_MSG_RESULT(failed) else AC_MSG_RESULT(ok) fi # Response file support. if test "$lt_cv_nm_interface" = "MS dumpbin"; then nm_file_list_spec='@' elif $NM --help 2>/dev/null | grep '[[@]]FILE' >/dev/null; then nm_file_list_spec='@' fi _LT_DECL([global_symbol_pipe], [lt_cv_sys_global_symbol_pipe], [1], [Take the output of nm and produce a listing of raw symbols and C names]) _LT_DECL([global_symbol_to_cdecl], [lt_cv_sys_global_symbol_to_cdecl], [1], [Transform the output of nm in a proper C declaration]) _LT_DECL([global_symbol_to_import], [lt_cv_sys_global_symbol_to_import], [1], [Transform the output of nm into a list of symbols to manually relocate]) _LT_DECL([global_symbol_to_c_name_address], [lt_cv_sys_global_symbol_to_c_name_address], [1], [Transform the output of nm in a C name address pair]) _LT_DECL([global_symbol_to_c_name_address_lib_prefix], [lt_cv_sys_global_symbol_to_c_name_address_lib_prefix], [1], [Transform the output of nm in a C name address pair when lib prefix is needed]) _LT_DECL([nm_interface], [lt_cv_nm_interface], [1], [The name lister interface]) _LT_DECL([], [nm_file_list_spec], [1], [Specify filename containing input files for $NM]) ]) # _LT_CMD_GLOBAL_SYMBOLS # _LT_COMPILER_PIC([TAGNAME]) # --------------------------- m4_defun([_LT_COMPILER_PIC], [m4_require([_LT_TAG_COMPILER])dnl _LT_TAGVAR(lt_prog_compiler_wl, $1)= _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)= m4_if([$1], [CXX], [ # C++ specific cases for pic, static, wl, etc. if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; *djgpp*) # DJGPP does not support shared libraries at all _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac else case $host_os in aix[[4-9]]*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; chorus*) case $cc_basename in cxch68*) # Green Hills C++ Compiler # _LT_TAGVAR(lt_prog_compiler_static, $1)="--no_auto_instantiation -u __main -u __premain -u _abort -r $COOL_DIR/lib/libOrb.a $MVME_DIR/lib/CC/libC.a $MVME_DIR/lib/classix/libcx.s.a" ;; esac ;; mingw* | cygwin* | os2* | pw32* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) ;; dgux*) case $cc_basename in ec++*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; ghcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; freebsd* | dragonfly*) # FreeBSD uses GNU C++ ;; hpux9* | hpux10* | hpux11*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' if test ia64 != "$host_cpu"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' fi ;; aCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac ;; *) ;; esac ;; interix*) # This is c89, which is MS Visual C++ (no shared libs) # Anyone wants to do a port? ;; irix5* | irix6* | nonstopux*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' # CC pic flag -KPIC is the default. ;; *) ;; esac ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # KAI C++ Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; ecpc* ) # old Intel C++ for x86_64, which still supported -KPIC. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; icpc* ) # Intel C++, used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgCC* | pgcpp*) # Portland Group C++ compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; cxx*) # Compaq C++ # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xlc* | xlC* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL 8.0, 9.0 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; esac ;; esac ;; lynxos*) ;; m88k*) ;; mvs*) case $cc_basename in cxx*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-W c,exportall' ;; *) ;; esac ;; netbsd* | netbsdelf*-gnu) ;; *qnx* | *nto*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='--backend -Wl,' ;; RCC*) # Rational C++ 2.4.1 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; cxx*) # Digital/Compaq C++ _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # Make sure the PIC flag is empty. It appears that all Alpha # Linux and Compaq Tru64 Unix objects are PIC. _LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; *) ;; esac ;; psos*) ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' ;; *) ;; esac ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; lcc*) # Lucid _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' ;; *) ;; esac ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) case $cc_basename in CC*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' ;; *) ;; esac ;; vxworks*) ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ], [ if test yes = "$GCC"; then _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' case $host_os in aix*) # All AIX code is PIC. if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; m68k) # FIXME: we need at least 68020 code to build shared libraries, but # adding the '-m68020' flag to GCC prevents building anything better, # like '-m68040'. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-m68020 -resident32 -malways-restore-a4' ;; esac ;; beos* | irix5* | irix6* | nonstopux* | osf3* | osf4* | osf5*) # PIC is the default for these OSes. ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). # Although the cygwin gcc ignores -fPIC, still need this for old-style # (--disable-auto-import) libraries m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' ;; haiku*) # PIC is the default for Haiku. # The "-static" flag exists, but is broken. _LT_TAGVAR(lt_prog_compiler_static, $1)= ;; hpux*) # PIC is the default for 64-bit PA HP-UX, but not for 32-bit # PA HP-UX. On IA64 HP-UX, PIC is the default but the pic flag # sets the default TLS model and affects inlining. case $host_cpu in hppa*64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac ;; interix[[3-9]]*) # Interix 3.x gcc -fpic/-fPIC options generate broken code. # Instead, we relocate shared libraries at runtime. ;; msdosdjgpp*) # Just because we use GCC doesn't mean we suddenly get shared libraries # on systems that don't support them. _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no enable_shared=no ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)=-Kconform_pic fi ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' ;; esac case $cc_basename in nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Xlinker ' if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_TAGVAR(lt_prog_compiler_pic, $1)="-Xcompiler $_LT_TAGVAR(lt_prog_compiler_pic, $1)" fi ;; esac else # PORTME Check for flag to pass linker flags through the system compiler. case $host_os in aix*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' if test ia64 = "$host_cpu"; then # AIX 5 now supports IA64 processor _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' else _LT_TAGVAR(lt_prog_compiler_static, $1)='-bnso -bI:/lib/syscalls.exp' fi ;; darwin* | rhapsody*) # PIC is the default on this platform # Common symbols not allowed in MH_DYLIB files _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fno-common' case $cc_basename in nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; mingw* | cygwin* | pw32* | os2* | cegcc*) # This hack is so that the source file can tell whether it is being # built for inclusion in a dll (and should export symbols for example). m4_if([$1], [GCJ], [], [_LT_TAGVAR(lt_prog_compiler_pic, $1)='-DDLL_EXPORT']) case $host_os in os2*) _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-static' ;; esac ;; hpux9* | hpux10* | hpux11*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC is the default for IA64 HP-UX and 64-bit HP-UX, but # not for PA HP-UX. case $host_cpu in hppa*64*|ia64*) # +Z the default ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)='+Z' ;; esac # Is there a better lt_prog_compiler_static that works with the bundled CC? _LT_TAGVAR(lt_prog_compiler_static, $1)='$wl-a ${wl}archive' ;; irix5* | irix6* | nonstopux*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # PIC (with -KPIC) is the default. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in # old Intel for x86_64, which still supported -KPIC. ecc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # icc used to be incompatible with GCC. # ICC 10 doesn't accept -KPIC any more. icc* | ifort*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; # Lahey Fortran 8.1. lf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='--shared' _LT_TAGVAR(lt_prog_compiler_static, $1)='--static' ;; nagfor*) # NAG Fortran compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,-Wl,,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; pgcc* | pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group compilers (*not* the Pentium gcc compiler, # which looks to be a dead project) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; ccc*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All Alpha code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; xl* | bgxl* | bgf* | mpixl*) # IBM XL C 8.0/Fortran 10.1, 11.1 on PPC and BlueGene _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-qpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-qstaticlink' ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ Ceres\ Fortran* | *Sun*Fortran*\ [[1-7]].* | *Sun*Fortran*\ 8.[[0-3]]*) # Sun Fortran 8.3 passes all unrecognized flags to the linker _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='' ;; *Sun\ F* | *Sun*Fortran*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' ;; *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' ;; *Intel*\ [[CF]]*Compiler*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-static' ;; *Portland\ Group*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fpic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; esac ;; esac ;; newsos6) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *nto* | *qnx*) # QNX uses GNU C++, but need to define -shared option too, otherwise # it will coredump. _LT_TAGVAR(lt_prog_compiler_pic, $1)='-fPIC -shared' ;; osf3* | osf4* | osf5*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' # All OSF/1 code is PIC. _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; rdos*) _LT_TAGVAR(lt_prog_compiler_static, $1)='-non_shared' ;; solaris*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' case $cc_basename in f77* | f90* | f95* | sunf77* | sunf90* | sunf95*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ';; *) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,';; esac ;; sunos4*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Qoption ld ' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-PIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4 | sysv4.2uw2* | sysv4.3*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(lt_prog_compiler_pic, $1)='-Kconform_pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' fi ;; sysv5* | unixware* | sco3.2v5* | sco5v6* | OpenUNIX*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_pic, $1)='-KPIC' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; unicos*) _LT_TAGVAR(lt_prog_compiler_wl, $1)='-Wl,' _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; uts4*) _LT_TAGVAR(lt_prog_compiler_pic, $1)='-pic' _LT_TAGVAR(lt_prog_compiler_static, $1)='-Bstatic' ;; *) _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no ;; esac fi ]) case $host_os in # For platforms that do not support PIC, -DPIC is meaningless: *djgpp*) _LT_TAGVAR(lt_prog_compiler_pic, $1)= ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)="$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])" ;; esac AC_CACHE_CHECK([for $compiler option to produce PIC], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)], [_LT_TAGVAR(lt_cv_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_prog_compiler_pic, $1)]) _LT_TAGVAR(lt_prog_compiler_pic, $1)=$_LT_TAGVAR(lt_cv_prog_compiler_pic, $1) # # Check to make sure the PIC flag actually works. # if test -n "$_LT_TAGVAR(lt_prog_compiler_pic, $1)"; then _LT_COMPILER_OPTION([if $compiler PIC flag $_LT_TAGVAR(lt_prog_compiler_pic, $1) works], [_LT_TAGVAR(lt_cv_prog_compiler_pic_works, $1)], [$_LT_TAGVAR(lt_prog_compiler_pic, $1)@&t@m4_if([$1],[],[ -DPIC],[m4_if([$1],[CXX],[ -DPIC],[])])], [], [case $_LT_TAGVAR(lt_prog_compiler_pic, $1) in "" | " "*) ;; *) _LT_TAGVAR(lt_prog_compiler_pic, $1)=" $_LT_TAGVAR(lt_prog_compiler_pic, $1)" ;; esac], [_LT_TAGVAR(lt_prog_compiler_pic, $1)= _LT_TAGVAR(lt_prog_compiler_can_build_shared, $1)=no]) fi _LT_TAGDECL([pic_flag], [lt_prog_compiler_pic], [1], [Additional compiler flags for building library objects]) _LT_TAGDECL([wl], [lt_prog_compiler_wl], [1], [How to pass a linker flag through the compiler]) # # Check to make sure the static flag actually works. # wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) eval lt_tmp_static_flag=\"$_LT_TAGVAR(lt_prog_compiler_static, $1)\" _LT_LINKER_OPTION([if $compiler static flag $lt_tmp_static_flag works], _LT_TAGVAR(lt_cv_prog_compiler_static_works, $1), $lt_tmp_static_flag, [], [_LT_TAGVAR(lt_prog_compiler_static, $1)=]) _LT_TAGDECL([link_static_flag], [lt_prog_compiler_static], [1], [Compiler flag to prevent dynamic linking]) ])# _LT_COMPILER_PIC # _LT_LINKER_SHLIBS([TAGNAME]) # ---------------------------- # See if the linker supports building shared libraries. m4_defun([_LT_LINKER_SHLIBS], [AC_REQUIRE([LT_PATH_LD])dnl AC_REQUIRE([LT_PATH_NM])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_DECL_SED])dnl m4_require([_LT_CMD_GLOBAL_SYMBOLS])dnl m4_require([_LT_TAG_COMPILER])dnl AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) m4_if([$1], [CXX], [ _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] case $host_os in aix[[4-9]]*) # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi ;; pw32*) _LT_TAGVAR(export_symbols_cmds, $1)=$ltdll_cmds ;; cygwin* | mingw* | cegcc*) case $cc_basename in cl*) _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] ;; esac ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; *) _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' ;; esac ], [ runpath_var= _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_cmds, $1)= _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED '\''s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(old_archive_from_new_cmds, $1)= _LT_TAGVAR(old_archive_from_expsyms_cmds, $1)= _LT_TAGVAR(thread_safe_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= # include_expsyms should be a list of space-separated symbols to be *always* # included in the symbol list _LT_TAGVAR(include_expsyms, $1)= # exclude_expsyms can be an extended regexp of symbols to exclude # it will be wrapped by ' (' and ')$', so one must not match beginning or # end of line. Example: 'a|bc|.*d.*' will exclude the symbols 'a' and 'bc', # as well as any symbol that contains 'd'. _LT_TAGVAR(exclude_expsyms, $1)=['_GLOBAL_OFFSET_TABLE_|_GLOBAL__F[ID]_.*'] # Although _GLOBAL_OFFSET_TABLE_ is a valid symbol C name, most a.out # platforms (ab)use it in PIC code, but their linkers get confused if # the symbol is explicitly referenced. Since portable code cannot # rely on this symbol name, it's probably fine to never include it in # preloaded symbol tables. # Exclude shared library initialization/finalization symbols. dnl Note also adjust exclude_expsyms for C++ above. extract_expsyms_cmds= case $host_os in cygwin* | mingw* | pw32* | cegcc*) # FIXME: the MSVC++ port hasn't been tested in a loooong time # When not using gcc, we currently assume that we are using # Microsoft Visual C++. if test yes != "$GCC"; then with_gnu_ld=no fi ;; interix*) # we just hope/assume this is gcc and not c89 (= MSVC++) with_gnu_ld=yes ;; openbsd* | bitrig*) with_gnu_ld=no ;; linux* | k*bsd*-gnu | gnu*) _LT_TAGVAR(link_all_deplibs, $1)=no ;; esac _LT_TAGVAR(ld_shlibs, $1)=yes # On some targets, GNU ld is compatible enough with the native linker # that we're better off using the native interface for both. lt_use_gnu_ld_interface=no if test yes = "$with_gnu_ld"; then case $host_os in aix*) # The AIX port of GNU ld has always aspired to compatibility # with the native linker. However, as the warning in the GNU ld # block says, versions before 2.19.5* couldn't really create working # shared libraries, regardless of the interface used. case `$LD -v 2>&1` in *\ \(GNU\ Binutils\)\ 2.19.5*) ;; *\ \(GNU\ Binutils\)\ 2.[[2-9]]*) ;; *\ \(GNU\ Binutils\)\ [[3-9]]*) ;; *) lt_use_gnu_ld_interface=yes ;; esac ;; *) lt_use_gnu_ld_interface=yes ;; esac fi if test yes = "$lt_use_gnu_ld_interface"; then # If archive_cmds runs LD, not CC, wlarc should be empty wlarc='$wl' # Set some defaults for GNU ld with shared library support. These # are reset later if shared libraries are not supported. Putting them # here allows them to be overridden if necessary. runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # ancient GNU ld didn't support --whole-archive et. al. if $LD --help 2>&1 | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi supports_anon_versioning=no case `$LD -v | $SED -e 's/([^)]\+)\s\+//' 2>&1` in *GNU\ gold*) supports_anon_versioning=yes ;; *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.10.*) ;; # catch versions < 2.11 *\ 2.11.93.0.2\ *) supports_anon_versioning=yes ;; # RH7.3 ... *\ 2.11.92.0.12\ *) supports_anon_versioning=yes ;; # Mandrake 8.2 ... *\ 2.11.*) ;; # other 2.11 versions *) supports_anon_versioning=yes ;; esac # See if GNU ld supports shared libraries. case $host_os in aix[[3-9]]*) # On AIX/PPC, the GNU linker is very broken if test ia64 != "$host_cpu"; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: the GNU linker, at least up to release 2.19, is reported *** to be unable to reliably create shared libraries on AIX. *** Therefore, libtool is disabling shared libraries support. If you *** really care for shared libraries, you may want to install binutils *** 2.20 or above, or modify your PATH so that a non-GNU linker is found. *** You will then need to restart the configuration process. _LT_EOF fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; cygwin* | mingw* | pw32* | cegcc*) # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1 DATA/;s/^.*[[ ]]__nm__\([[^ ]]*\)[[ ]][[^ ]]*/\1 DATA/;/^I[[ ]]/d;/^[[AITW]][[ ]]/s/.* //'\'' | sort | uniq > $export_symbols' _LT_TAGVAR(exclude_expsyms, $1)=['[_]+GLOBAL_OFFSET_TABLE_|[_]+GLOBAL__[FID]_.*|[_]+head_[A-Za-z0-9_]+_dll|[A-Za-z0-9_]+_dll_iname'] if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared $output_objdir/$soname.def $libobjs $deplibs $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; gnu* | linux* | tpf* | k*bsd*-gnu | kopensolaris*-gnu) tmp_diet=no if test linux-dietlibc = "$host_os"; then case $cc_basename in diet\ *) tmp_diet=yes;; # linux-dietlibc with static linking (!diet-dyn) esac fi if $LD --help 2>&1 | $EGREP ': supported targets:.* elf' > /dev/null \ && test no = "$tmp_diet" then tmp_addflag=' $pic_flag' tmp_sharedflag='-shared' case $cc_basename,$host_cpu in pgcc*) # Portland Group C compiler _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag' ;; pgf77* | pgf90* | pgf95* | pgfortran*) # Portland Group f77 and f90 compilers _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' tmp_addflag=' $pic_flag -Mnomain' ;; ecc*,ia64* | icc*,ia64*) # Intel C compiler on ia64 tmp_addflag=' -i_dynamic' ;; efc*,ia64* | ifort*,ia64*) # Intel Fortran compiler on ia64 tmp_addflag=' -i_dynamic -nofor_main' ;; ifc* | ifort*) # Intel Fortran compiler tmp_addflag=' -nofor_main' ;; lf95*) # Lahey Fortran 8.1 _LT_TAGVAR(whole_archive_flag_spec, $1)= tmp_sharedflag='--shared' ;; nagfor*) # NAGFOR 5.3 tmp_sharedflag='-Wl,-shared' ;; xl[[cC]]* | bgxl[[cC]]* | mpixl[[cC]]*) # IBM XL C 8.0 on PPC (deal with xlf below) tmp_sharedflag='-qmkshrobj' tmp_addflag= ;; nvcc*) # Cuda Compiler Driver 2.2 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes ;; esac case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C 5.9 _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes tmp_sharedflag='-G' ;; *Sun\ F*) # Sun Fortran 8.3 tmp_sharedflag='-G' ;; esac _LT_TAGVAR(archive_cmds, $1)='$CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC '"$tmp_sharedflag""$tmp_addflag"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi case $cc_basename in tcc*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='-rdynamic' ;; xlf* | bgf* | bgxlf* | mpixlf*) # IBM XL Fortran 10.1 on PPC cannot create shared libs itself _LT_TAGVAR(whole_archive_flag_spec, $1)='--whole-archive$convenience --no-whole-archive' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$LD -shared $libobjs $deplibs $linker_flags -soname $soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $LD -shared $libobjs $deplibs $linker_flags -soname $soname -version-script $output_objdir/$libname.ver -o $lib' fi ;; esac else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable $libobjs $deplibs $linker_flags -o $lib' wlarc= else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' fi ;; solaris*) if $LD -v 2>&1 | $GREP 'BFD 2\.8' > /dev/null; then _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: The releases 2.8.* of the GNU linker cannot reliably *** create shared libraries on Solaris systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.9.1 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF elif $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; sysv5* | sco3.2v5* | sco5v6* | unixware* | OpenUNIX*) case `$LD -v 2>&1` in *\ [[01]].* | *\ 2.[[0-9]].* | *\ 2.1[[0-5]].*) _LT_TAGVAR(ld_shlibs, $1)=no cat <<_LT_EOF 1>&2 *** Warning: Releases of the GNU linker prior to 2.16.91.0.3 cannot *** reliably create shared libraries on SCO systems. Therefore, libtool *** is disabling shared libraries support. We urge you to upgrade GNU *** binutils to release 2.16.91.0.3 or newer. Another option is to modify *** your PATH or compiler configuration so that the native linker is *** used, and then restart. _LT_EOF ;; *) # For security reasons, it is highly recommended that you always # use absolute paths for naming shared libraries, and exclude the # DT_RUNPATH tag from executables and libraries. But doing so # requires that you compile everything twice, which is a pain. if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; sunos4*) _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bshareable -o $lib $libobjs $deplibs $linker_flags' wlarc= _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac if test no = "$_LT_TAGVAR(ld_shlibs, $1)"; then runpath_var= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else # PORTME fill in a description of your system's linker (not GNU ld) case $host_os in aix3*) _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$LD -o $output_objdir/$soname $libobjs $deplibs $linker_flags -bE:$export_symbols -T512 -H512 -bM:SRE~$AR $AR_FLAGS $lib $output_objdir/$soname' # Note: this linker hardcodes the directories in LIBPATH if there # are no directories specified by -L. _LT_TAGVAR(hardcode_minus_L, $1)=yes if test yes = "$GCC" && test -z "$lt_prog_compiler_static"; then # Neither direct hardcoding nor static linking is supported with a # broken collect2. _LT_TAGVAR(hardcode_direct, $1)=unsupported fi ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else # If we're using GNU nm, then we don't want the "-C" option. # -C means demangle to GNU nm, but means don't demangle to AIX nm. # Without the "-l" option, or with the "-B" option, AIX nm treats # weak defined symbols like other global defined symbols, whereas # GNU nm marks them as "W". # While the 'weak' keyword is ignored in the Export File, we need # it in the Import File for the 'aix-soname' feature, so we have # to replace the "-B" option with "-P" for AIX nm. if $NM -V 2>&1 | $GREP 'GNU' > /dev/null; then _LT_TAGVAR(export_symbols_cmds, $1)='$NM -Bpg $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W")) && ([substr](\$ 3,1,1) != ".")) { if (\$ 2 == "W") { print \$ 3 " weak" } else { print \$ 3 } } }'\'' | sort -u > $export_symbols' else _LT_TAGVAR(export_symbols_cmds, $1)='`func_echo_all $NM | $SED -e '\''s/B\([[^B]]*\)$/P\1/'\''` -PCpgl $libobjs $convenience | awk '\''{ if (((\$ 2 == "T") || (\$ 2 == "D") || (\$ 2 == "B") || (\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) && ([substr](\$ 1,1,1) != ".")) { if ((\$ 2 == "W") || (\$ 2 == "V") || (\$ 2 == "Z")) { print \$ 1 " weak" } else { print \$ 1 } } }'\'' | sort -u > $export_symbols' fi aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do if (test x-brtl = "x$ld_flag" || test x-Wl,-brtl = "x$ld_flag"); then aix_use_runtimelinking=yes break fi done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # traditional, no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GCC"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi ;; esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag="$shared_flag "'$wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. _LT_TAGVAR(allow_undefined_flag, $1)='-berok' # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared libraries. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; amigaos*) case $host_cpu in powerpc) # see comment about AmigaOS4 .so support _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='' ;; m68k) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/a2ixlibrary.data~$ECHO "#define NAME $libname" > $output_objdir/a2ixlibrary.data~$ECHO "#define LIBRARY_ID 1" >> $output_objdir/a2ixlibrary.data~$ECHO "#define VERSION $major" >> $output_objdir/a2ixlibrary.data~$ECHO "#define REVISION $revision" >> $output_objdir/a2ixlibrary.data~$AR $AR_FLAGS $lib $libobjs~$RANLIB $lib~(cd $output_objdir && a2ixlibrary -32)' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac ;; bsdi[[45]]*) _LT_TAGVAR(export_dynamic_flag_spec, $1)=-rdynamic ;; cygwin* | mingw* | pw32* | cegcc*) # When not using gcc, we currently assume that we are using # Microsoft Visual C++. # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. case $cc_basename in cl*) # Native MSVC _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes _LT_TAGVAR(exclude_expsyms, $1)='_NULL_IMPORT_DESCRIPTOR|_IMPORT_DESCRIPTOR_.*' _LT_TAGVAR(export_symbols_cmds, $1)='$NM $libobjs $convenience | $global_symbol_pipe | $SED -e '\''/^[[BCDGRS]][[ ]]/s/.*[[ ]]\([[^ ]]*\)/\1,DATA/'\'' | $SED -e '\''/^[[AITW]][[ ]]/s/.*[[ ]]//'\'' | sort | uniq > $export_symbols' # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # Assume MSVC wrapper _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $lib $libobjs $compiler_flags `func_echo_all "$deplibs" | $SED '\''s/ -lc$//'\''` -link -dll~linknames=' # The linker will automatically build a .lib file if we build a DLL. _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' # FIXME: Should let the user specify the lib program. _LT_TAGVAR(old_archive_cmds, $1)='lib -OUT:$oldlib$oldobjs$old_deplibs' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; dgux*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 2.2.[012] allows us to include c++rt0.o to get C++ constructor # support. Future versions do this automatically, but an explicit c++rt0.o # does not break anything, and helps significantly (at the cost of a little # extra space). freebsd2.2*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags /usr/lib/c++rt0.o' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # Unfortunately, older versions of FreeBSD 2 do not have this feature. freebsd2.*) _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; # FreeBSD 3 and greater uses gcc -shared to do shared libraries. freebsd* | dragonfly*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; hpux9*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $libobjs $deplibs $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$LD -b +b $install_libdir -o $output_objdir/$soname $libobjs $deplibs $linker_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; hpux10*) if test yes,no = "$GCC,$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags' fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes fi ;; hpux11*) if test yes,no = "$GCC,$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags' ;; esac else case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $libobjs $deplibs $compiler_flags' ;; *) m4_if($1, [], [ # Older versions of the 11.00 compiler do not understand -b yet # (HP92453-01 A.11.01.20 doesn't, HP92453-01 B.11.X.35175-35176.GP does) _LT_LINKER_OPTION([if $CC understands -b], _LT_TAGVAR(lt_cv_prog_compiler__b, $1), [-b], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags'], [_LT_TAGVAR(archive_cmds, $1)='$LD -b +h $soname +b $install_libdir -o $lib $libobjs $deplibs $linker_flags'])], [_LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $libobjs $deplibs $compiler_flags']) ;; esac fi if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # hardcode_minus_L: Not really in the search PATH, # but as the default location of the library. _LT_TAGVAR(hardcode_minus_L, $1)=yes ;; esac fi ;; irix5* | irix6* | nonstopux*) if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' # Try to use the -exported_symbol ld option, if it does not # work, assume that -exports_file does not work either and # implicitly export all symbols. # This should be the same for all languages, so no per-tag cache variable. AC_CACHE_CHECK([whether the $host_os linker accepts -exported_symbol], [lt_cv_irix_exported_symbol], [save_LDFLAGS=$LDFLAGS LDFLAGS="$LDFLAGS -shared $wl-exported_symbol ${wl}foo $wl-update_registry $wl/dev/null" AC_LINK_IFELSE( [AC_LANG_SOURCE( [AC_LANG_CASE([C], [[int foo (void) { return 0; }]], [C++], [[int foo (void) { return 0; }]], [Fortran 77], [[ subroutine foo end]], [Fortran], [[ subroutine foo end]])])], [lt_cv_irix_exported_symbol=yes], [lt_cv_irix_exported_symbol=no]) LDFLAGS=$save_LDFLAGS]) if test yes = "$lt_cv_irix_exported_symbol"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations $wl-exports_file $wl$export_symbols -o $lib' fi _LT_TAGVAR(link_all_deplibs, $1)=no else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -exports_file $export_symbols -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes _LT_TAGVAR(link_all_deplibs, $1)=yes ;; linux*) case $cc_basename in tcc*) # Fabrice Bellard et al's Tiny C Compiler _LT_TAGVAR(ld_shlibs, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; netbsd* | netbsdelf*-gnu) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $libobjs $deplibs $linker_flags' # a.out else _LT_TAGVAR(archive_cmds, $1)='$LD -shared -o $lib $libobjs $deplibs $linker_flags' # ELF fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; newsos6) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *nto* | *qnx*) ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes if test -z "`echo __ELF__ | $CC -E - | $GREP __ELF__`"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags $wl-retain-symbols-file,$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' fi else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; osf3*) if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; osf4* | osf5*) # as osf3* with the addition of -msym flag if test yes = "$GCC"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $pic_flag $libobjs $deplibs $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' else _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $libobjs $deplibs $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done; printf "%s\\n" "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $wl-input $wl$lib.exp $compiler_flags $libobjs $deplibs -soname $soname `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~$RM $lib.exp' # Both c and cxx compiler support -rpath directly _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' fi _LT_TAGVAR(archive_cmds_need_lc, $1)='no' _LT_TAGVAR(hardcode_libdir_separator, $1)=: ;; solaris*) _LT_TAGVAR(no_undefined_flag, $1)=' -z defs' if test yes = "$GCC"; then wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $wl-z ${wl}text $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag $wl-z ${wl}text $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' else case `$CC -V 2>&1` in *"Compilers 5.0"*) wlarc='' _LT_TAGVAR(archive_cmds, $1)='$LD -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $LD -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $linker_flags~$RM $lib.exp' ;; *) wlarc='$wl' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h $soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag -M $lib.exp -h $soname -o $lib $libobjs $deplibs $compiler_flags~$RM $lib.exp' ;; esac fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. GCC discards it without '$wl', # but is careful enough not to reorder. # Supported since Solaris 2.6 (maybe 2.5.1?) if test yes = "$GCC"; then _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' else _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' fi ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes ;; sunos4*) if test sequent = "$host_vendor"; then # Use $CC to link under sequent, because it throws in some extra .o # files that make .init and .fini sections work. _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h $soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$LD -assert pure-text -Bstatic -o $lib $libobjs $deplibs $linker_flags' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4) case $host_vendor in sni) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=yes # is this really true??? ;; siemens) ## LD is ld it makes a PLAMLIB ## CC just makes a GrossModule. _LT_TAGVAR(archive_cmds, $1)='$LD -G -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(reload_cmds, $1)='$CC -r -o $output$reload_objs' _LT_TAGVAR(hardcode_direct, $1)=no ;; motorola) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_direct, $1)=no #Motorola manual says yes, but my tests say they lie ;; esac runpath_var='LD_RUN_PATH' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; sysv4.3*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)='-Bexport' ;; sysv4*MP*) if test -d /usr/nec; then _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var=LD_RUN_PATH hardcode_runpath_var=yes _LT_TAGVAR(ld_shlibs, $1)=yes fi ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' if test yes = "$GCC"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' else _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' fi ;; uts4*) _LT_TAGVAR(archive_cmds, $1)='$LD -G -h $soname -o $lib $libobjs $deplibs $linker_flags' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(ld_shlibs, $1)=no ;; esac if test sni = "$host_vendor"; then case $host in sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Blargedynsym' ;; esac fi fi ]) AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(with_gnu_ld, $1)=$with_gnu_ld _LT_DECL([], [libext], [0], [Old archive suffix (normally "a")])dnl _LT_DECL([], [shrext_cmds], [1], [Shared library suffix (normally ".so")])dnl _LT_DECL([], [extract_expsyms_cmds], [2], [The commands to extract the exported symbol list from a shared archive]) # # Do we need to explicitly link libc? # case "x$_LT_TAGVAR(archive_cmds_need_lc, $1)" in x|xyes) # Assume -lc should be added _LT_TAGVAR(archive_cmds_need_lc, $1)=yes if test yes,yes = "$GCC,$enable_shared"; then case $_LT_TAGVAR(archive_cmds, $1) in *'~'*) # FIXME: we may have to deal with multi-command sequences. ;; '$CC '*) # Test whether the compiler implicitly links with -lc since on some # systems, -lgcc has to come before -lc. If gcc already passes -lc # to ld, don't add -lc before -lgcc. AC_CACHE_CHECK([whether -lc should be explicitly linked in], [lt_cv_]_LT_TAGVAR(archive_cmds_need_lc, $1), [$RM conftest* echo "$lt_simple_compile_test_code" > conftest.$ac_ext if AC_TRY_EVAL(ac_compile) 2>conftest.err; then soname=conftest lib=conftest libobjs=conftest.$ac_objext deplibs= wl=$_LT_TAGVAR(lt_prog_compiler_wl, $1) pic_flag=$_LT_TAGVAR(lt_prog_compiler_pic, $1) compiler_flags=-v linker_flags=-v verstring= output_objdir=. libname=conftest lt_save_allow_undefined_flag=$_LT_TAGVAR(allow_undefined_flag, $1) _LT_TAGVAR(allow_undefined_flag, $1)= if AC_TRY_EVAL(_LT_TAGVAR(archive_cmds, $1) 2\>\&1 \| $GREP \" -lc \" \>/dev/null 2\>\&1) then lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=no else lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1)=yes fi _LT_TAGVAR(allow_undefined_flag, $1)=$lt_save_allow_undefined_flag else cat conftest.err 1>&5 fi $RM conftest* ]) _LT_TAGVAR(archive_cmds_need_lc, $1)=$lt_cv_[]_LT_TAGVAR(archive_cmds_need_lc, $1) ;; esac fi ;; esac _LT_TAGDECL([build_libtool_need_lc], [archive_cmds_need_lc], [0], [Whether or not to add -lc for building shared libraries]) _LT_TAGDECL([allow_libtool_libs_with_static_runtimes], [enable_shared_with_static_runtimes], [0], [Whether or not to disallow shared libs when runtime libs are static]) _LT_TAGDECL([], [export_dynamic_flag_spec], [1], [Compiler flag to allow reflexive dlopens]) _LT_TAGDECL([], [whole_archive_flag_spec], [1], [Compiler flag to generate shared objects directly from archives]) _LT_TAGDECL([], [compiler_needs_object], [1], [Whether the compiler copes with passing no objects directly]) _LT_TAGDECL([], [old_archive_from_new_cmds], [2], [Create an old-style archive from a shared archive]) _LT_TAGDECL([], [old_archive_from_expsyms_cmds], [2], [Create a temporary old-style archive to link instead of a shared archive]) _LT_TAGDECL([], [archive_cmds], [2], [Commands used to build a shared archive]) _LT_TAGDECL([], [archive_expsym_cmds], [2]) _LT_TAGDECL([], [module_cmds], [2], [Commands used to build a loadable module if different from building a shared archive.]) _LT_TAGDECL([], [module_expsym_cmds], [2]) _LT_TAGDECL([], [with_gnu_ld], [1], [Whether we are building with GNU ld or not]) _LT_TAGDECL([], [allow_undefined_flag], [1], [Flag that allows shared libraries with undefined symbols to be built]) _LT_TAGDECL([], [no_undefined_flag], [1], [Flag that enforces no undefined symbols]) _LT_TAGDECL([], [hardcode_libdir_flag_spec], [1], [Flag to hardcode $libdir into a binary during linking. This must work even if $libdir does not exist]) _LT_TAGDECL([], [hardcode_libdir_separator], [1], [Whether we need a single "-rpath" flag with a separated argument]) _LT_TAGDECL([], [hardcode_direct], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_direct_absolute], [0], [Set to "yes" if using DIR/libNAME$shared_ext during linking hardcodes DIR into the resulting binary and the resulting library dependency is "absolute", i.e impossible to change by setting $shlibpath_var if the library is relocated]) _LT_TAGDECL([], [hardcode_minus_L], [0], [Set to "yes" if using the -LDIR flag during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_shlibpath_var], [0], [Set to "yes" if using SHLIBPATH_VAR=DIR during linking hardcodes DIR into the resulting binary]) _LT_TAGDECL([], [hardcode_automatic], [0], [Set to "yes" if building a shared library automatically hardcodes DIR into the library and all subsequent libraries and executables linked against it]) _LT_TAGDECL([], [inherit_rpath], [0], [Set to yes if linker adds runtime paths of dependent libraries to runtime path list]) _LT_TAGDECL([], [link_all_deplibs], [0], [Whether libtool must link a program against all its dependency libraries]) _LT_TAGDECL([], [always_export_symbols], [0], [Set to "yes" if exported symbols are required]) _LT_TAGDECL([], [export_symbols_cmds], [2], [The commands to list exported symbols]) _LT_TAGDECL([], [exclude_expsyms], [1], [Symbols that should not be listed in the preloaded symbols]) _LT_TAGDECL([], [include_expsyms], [1], [Symbols that must always be exported]) _LT_TAGDECL([], [prelink_cmds], [2], [Commands necessary for linking programs (against libraries) with templates]) _LT_TAGDECL([], [postlink_cmds], [2], [Commands necessary for finishing linking programs]) _LT_TAGDECL([], [file_list_spec], [1], [Specify filename containing input files]) dnl FIXME: Not yet implemented dnl _LT_TAGDECL([], [thread_safe_flag_spec], [1], dnl [Compiler flag to generate thread safe objects]) ])# _LT_LINKER_SHLIBS # _LT_LANG_C_CONFIG([TAG]) # ------------------------ # Ensure that the configuration variables for a C compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_C_CONFIG], [m4_require([_LT_DECL_EGREP])dnl lt_save_CC=$CC AC_LANG_PUSH(C) # Source file extension for C test sources. ac_ext=c # Object file extension for compiled C test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(){return(0);}' _LT_TAG_COMPILER # Save the default compiler, since it gets overwritten when the other # tags are being tested, and _LT_TAGVAR(compiler, []) is a NOP. compiler_DEFAULT=$CC # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) LT_SYS_DLOPEN_SELF _LT_CMD_STRIPLIB # Report what library types will actually be built AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_CONFIG($1) fi AC_LANG_POP CC=$lt_save_CC ])# _LT_LANG_C_CONFIG # _LT_LANG_CXX_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a C++ compiler are suitably # defined. These variables are subsequently used by _LT_CONFIG to write # the compiler configuration to 'libtool'. m4_defun([_LT_LANG_CXX_CONFIG], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl m4_require([_LT_DECL_EGREP])dnl m4_require([_LT_PATH_MANIFEST_TOOL])dnl if test -n "$CXX" && ( test no != "$CXX" && ( (test g++ = "$CXX" && `g++ -v >/dev/null 2>&1` ) || (test g++ != "$CXX"))); then AC_PROG_CXXCPP else _lt_caught_CXX_error=yes fi AC_LANG_PUSH(C++) _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(compiler_needs_object, $1)=no _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=unsupported _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for C++ test sources. ac_ext=cpp # Object file extension for compiled C++ test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the CXX compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_caught_CXX_error"; then # Code to be used in simple compile tests lt_simple_compile_test_code="int some_variable = 0;" # Code to be used in simple link tests lt_simple_link_test_code='int main(int, char *[[]]) { return(0); }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_LD=$LD lt_save_GCC=$GCC GCC=$GXX lt_save_with_gnu_ld=$with_gnu_ld lt_save_path_LD=$lt_cv_path_LD if test -n "${lt_cv_prog_gnu_ldcxx+set}"; then lt_cv_prog_gnu_ld=$lt_cv_prog_gnu_ldcxx else $as_unset lt_cv_prog_gnu_ld fi if test -n "${lt_cv_path_LDCXX+set}"; then lt_cv_path_LD=$lt_cv_path_LDCXX else $as_unset lt_cv_path_LD fi test -z "${LDCXX+set}" || LD=$LDCXX CC=${CXX-"c++"} CFLAGS=$CXXFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then # We don't want -fno-exception when compiling C++ code, so set the # no_builtin_flag separately if test yes = "$GXX"; then _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)=' -fno-builtin' else _LT_TAGVAR(lt_prog_compiler_no_builtin_flag, $1)= fi if test yes = "$GXX"; then # Set up default GNU C++ configuration LT_PATH_LD # Check if GNU C++ uses GNU ld as the underlying linker, since the # archiving commands below assume that GNU ld is being used. if test yes = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC $pic_flag -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # If archive_cmds runs LD, not CC, wlarc should be empty # XXX I think wlarc can be eliminated in ltcf-cxx, but I need to # investigate it a little bit more. (MM) wlarc='$wl' # ancient GNU ld didn't support --whole-archive et. al. if eval "`$CC -print-prog-name=ld` --help 2>&1" | $GREP 'no-whole-archive' > /dev/null; then _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' else _LT_TAGVAR(whole_archive_flag_spec, $1)= fi else with_gnu_ld=no wlarc= # A generic and very simple default shared library creation # command for GNU C++ for the case where it uses the native # linker, instead of GNU ld. If possible, this setting should # overridden to take advantage of the native linker features on # the platform it is being used on. _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' fi # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else GXX=no with_gnu_ld=no wlarc= fi # PORTME: fill in a description of your system's C++ link characteristics AC_MSG_CHECKING([whether the $compiler linker ($LD) supports shared libraries]) _LT_TAGVAR(ld_shlibs, $1)=yes case $host_os in aix3*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aix[[4-9]]*) if test ia64 = "$host_cpu"; then # On IA64, the linker does run time linking by default, so we don't # have to do anything special. aix_use_runtimelinking=no exp_sym_flag='-Bexport' no_entry_flag= else aix_use_runtimelinking=no # Test if we are trying to use run time linking or normal # AIX style linking. If -brtl is somewhere in LDFLAGS, we # have runtime linking enabled, and use it for executables. # For shared libraries, we enable/disable runtime linking # depending on the kind of the shared library created - # when "with_aix_soname,aix_use_runtimelinking" is: # "aix,no" lib.a(lib.so.V) shared, rtl:no, for executables # "aix,yes" lib.so shared, rtl:yes, for executables # lib.a static archive # "both,no" lib.so.V(shr.o) shared, rtl:yes # lib.a(lib.so.V) shared, rtl:no, for executables # "both,yes" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a(lib.so.V) shared, rtl:no # "svr4,*" lib.so.V(shr.o) shared, rtl:yes, for executables # lib.a static archive case $host_os in aix4.[[23]]|aix4.[[23]].*|aix[[5-9]]*) for ld_flag in $LDFLAGS; do case $ld_flag in *-brtl*) aix_use_runtimelinking=yes break ;; esac done if test svr4,no = "$with_aix_soname,$aix_use_runtimelinking"; then # With aix-soname=svr4, we create the lib.so.V shared archives only, # so we don't have lib.a shared libs to link our executables. # We have to force runtime linking in this case. aix_use_runtimelinking=yes LDFLAGS="$LDFLAGS -Wl,-brtl" fi ;; esac exp_sym_flag='-bexport' no_entry_flag='-bnoentry' fi # When large executables or shared objects are built, AIX ld can # have problems creating the table of contents. If linking a library # or program results in "error TOC overflow" add -mminimal-toc to # CXXFLAGS/CFLAGS for g++/gcc. In the cases where that is not # enough to fix the problem, add -Wl,-bbigtoc to LDFLAGS. _LT_TAGVAR(archive_cmds, $1)='' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(file_list_spec, $1)='$wl-f,' case $with_aix_soname,$aix_use_runtimelinking in aix,*) ;; # no import file svr4,* | *,yes) # use import file # The Import File defines what to hardcode. _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no ;; esac if test yes = "$GXX"; then case $host_os in aix4.[[012]]|aix4.[[012]].*) # We only want to do this on AIX 4.2 and lower, the check # below for broken collect2 doesn't work under 4.3+ collect2name=`$CC -print-prog-name=collect2` if test -f "$collect2name" && strings "$collect2name" | $GREP resolve_lib_name >/dev/null then # We have reworked collect2 : else # We have old collect2 _LT_TAGVAR(hardcode_direct, $1)=unsupported # It fails to find uninstalled libraries when the uninstalled # path is not listed in the libpath. Setting hardcode_minus_L # to unsupported forces relinking _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)= fi esac shared_flag='-shared' if test yes = "$aix_use_runtimelinking"; then shared_flag=$shared_flag' $wl-G' fi # Need to ensure runtime linking is disabled for the traditional # shared library, or the linker may eventually find shared libraries # /with/ Import File - we do not want to mix them. shared_flag_aix='-shared' shared_flag_svr4='-shared $wl-G' else # not using gcc if test ia64 = "$host_cpu"; then # VisualAge C++, Version 5.5 for AIX 5L for IA-64, Beta 3 Release # chokes on -Wl,-G. The following line is correct: shared_flag='-G' else if test yes = "$aix_use_runtimelinking"; then shared_flag='$wl-G' else shared_flag='$wl-bM:SRE' fi shared_flag_aix='$wl-bM:SRE' shared_flag_svr4='$wl-G' fi fi _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-bexpall' # It seems that -bexpall does not export symbols beginning with # underscore (_), so it is better to generate a list of symbols to # export. _LT_TAGVAR(always_export_symbols, $1)=yes if test aix,yes = "$with_aix_soname,$aix_use_runtimelinking"; then # Warning - without using the other runtime loading flags (-brtl), # -berok will link without error, but may produce a broken library. # The "-G" linker flag allows undefined symbols. _LT_TAGVAR(no_undefined_flag, $1)='-bernotok' # Determine the default libpath from the value encoded in an empty # executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $deplibs $wl'$no_entry_flag' $compiler_flags `if test -n "$allow_undefined_flag"; then func_echo_all "$wl$allow_undefined_flag"; else :; fi` $wl'$exp_sym_flag:\$export_symbols' '$shared_flag else if test ia64 = "$host_cpu"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $libdir:/usr/lib:/lib' _LT_TAGVAR(allow_undefined_flag, $1)="-z nodefs" _LT_TAGVAR(archive_expsym_cmds, $1)="\$CC $shared_flag"' -o $output_objdir/$soname $libobjs $deplibs '"\$wl$no_entry_flag"' $compiler_flags $wl$allow_undefined_flag '"\$wl$exp_sym_flag:\$export_symbols" else # Determine the default libpath from the value encoded in an # empty executable. _LT_SYS_MODULE_PATH_AIX([$1]) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-blibpath:$libdir:'"$aix_libpath" # Warning - without using the other run time loading flags, # -berok will link without error, but may produce a broken library. _LT_TAGVAR(no_undefined_flag, $1)=' $wl-bernotok' _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-berok' if test yes = "$with_gnu_ld"; then # We only use this code for GNU lds that support --whole-archive. _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' else # Exported symbols can be pulled into shared objects from archives _LT_TAGVAR(whole_archive_flag_spec, $1)='$convenience' fi _LT_TAGVAR(archive_cmds_need_lc, $1)=yes _LT_TAGVAR(archive_expsym_cmds, $1)='$RM -r $output_objdir/$realname.d~$MKDIR $output_objdir/$realname.d' # -brtl affects multiple linker settings, -berok does not and is overridden later compiler_flags_filtered='`func_echo_all "$compiler_flags " | $SED -e "s%-brtl\\([[, ]]\\)%-berok\\1%g"`' if test svr4 != "$with_aix_soname"; then # This is similar to how AIX traditionally builds its shared # libraries. Need -bnortl late, we may have -brtl in LDFLAGS. _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_aix' -o $output_objdir/$realname.d/$soname $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$AR $AR_FLAGS $output_objdir/$libname$release.a $output_objdir/$realname.d/$soname' fi if test aix != "$with_aix_soname"; then _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$CC '$shared_flag_svr4' -o $output_objdir/$realname.d/$shared_archive_member_spec.o $libobjs $deplibs $wl-bnoentry '$compiler_flags_filtered'$wl-bE:$export_symbols$allow_undefined_flag~$STRIP -e $output_objdir/$realname.d/$shared_archive_member_spec.o~( func_echo_all "#! $soname($shared_archive_member_spec.o)"; if test shr_64 = "$shared_archive_member_spec"; then func_echo_all "# 64"; else func_echo_all "# 32"; fi; cat $export_symbols ) > $output_objdir/$realname.d/$shared_archive_member_spec.imp~$AR $AR_FLAGS $output_objdir/$soname $output_objdir/$realname.d/$shared_archive_member_spec.o $output_objdir/$realname.d/$shared_archive_member_spec.imp' else # used by -dlpreopen to get the symbols _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$MV $output_objdir/$realname.d/$soname $output_objdir' fi _LT_TAGVAR(archive_expsym_cmds, $1)="$_LT_TAGVAR(archive_expsym_cmds, $1)"'~$RM -r $output_objdir/$realname.d' fi fi ;; beos*) if $LD --help 2>&1 | $GREP ': supported targets:.* elf' > /dev/null; then _LT_TAGVAR(allow_undefined_flag, $1)=unsupported # Joseph Beckenbach <jrb3@best.com> says some releases of gcc # support --undefined. This deserves some investigation. FIXME _LT_TAGVAR(archive_cmds, $1)='$CC -nostart $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; chorus*) case $cc_basename in *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; cygwin* | mingw* | pw32* | cegcc*) case $GXX,$cc_basename in ,cl* | no,cl*) # Native MSVC # hardcode_libdir_flag_spec is actually meaningless, as there is # no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)=' ' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=yes _LT_TAGVAR(file_list_spec, $1)='@' # Tell ltmain to make .lib files, not .a files. libext=lib # Tell ltmain to make .dll files, not .so files. shrext_cmds=.dll # FIXME: Setting linknames here is a bad hack. _LT_TAGVAR(archive_cmds, $1)='$CC -o $output_objdir/$soname $libobjs $compiler_flags $deplibs -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~linknames=' _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp "$export_symbols" "$output_objdir/$soname.def"; echo "$tool_output_objdir$soname.def" > "$output_objdir/$soname.exp"; else $SED -e '\''s/^/-link -EXPORT:/'\'' < $export_symbols > $output_objdir/$soname.exp; fi~ $CC -o $tool_output_objdir$soname $libobjs $compiler_flags $deplibs "@$tool_output_objdir$soname.exp" -Wl,-DLL,-IMPLIB:"$tool_output_objdir$libname.dll.lib"~ linknames=' # The linker will not automatically build a static lib if we build a DLL. # _LT_TAGVAR(old_archive_from_new_cmds, $1)='true' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes # Don't use ranlib _LT_TAGVAR(old_postinstall_cmds, $1)='chmod 644 $oldlib' _LT_TAGVAR(postlink_cmds, $1)='lt_outputfile="@OUTPUT@"~ lt_tool_outputfile="@TOOL_OUTPUT@"~ case $lt_outputfile in *.exe|*.EXE) ;; *) lt_outputfile=$lt_outputfile.exe lt_tool_outputfile=$lt_tool_outputfile.exe ;; esac~ func_to_tool_file "$lt_outputfile"~ if test : != "$MANIFEST_TOOL" && test -f "$lt_outputfile.manifest"; then $MANIFEST_TOOL -manifest "$lt_tool_outputfile.manifest" -outputresource:"$lt_tool_outputfile" || exit 1; $RM "$lt_outputfile.manifest"; fi' ;; *) # g++ # _LT_TAGVAR(hardcode_libdir_flag_spec, $1) is actually meaningless, # as there is no search path for DLLs. _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-all-symbols' _LT_TAGVAR(allow_undefined_flag, $1)=unsupported _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes if $LD --help 2>&1 | $GREP 'auto-import' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' # If the export-symbols file already is a .def file, use it as # is; otherwise, prepend EXPORTS... _LT_TAGVAR(archive_expsym_cmds, $1)='if _LT_DLL_DEF_P([$export_symbols]); then cp $export_symbols $output_objdir/$soname.def; else echo EXPORTS > $output_objdir/$soname.def; cat $export_symbols >> $output_objdir/$soname.def; fi~ $CC -shared -nostdlib $output_objdir/$soname.def $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $output_objdir/$soname $wl--enable-auto-image-base -Xlinker --out-implib -Xlinker $lib' else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; darwin* | rhapsody*) _LT_DARWIN_LINKER_FEATURES($1) ;; os2*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-L$libdir' _LT_TAGVAR(hardcode_minus_L, $1)=yes _LT_TAGVAR(allow_undefined_flag, $1)=unsupported shrext_cmds=.dll _LT_TAGVAR(archive_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ emxexp $libobjs | $SED /"_DLL_InitTerm"/d >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(archive_expsym_cmds, $1)='$ECHO "LIBRARY ${soname%$shared_ext} INITINSTANCE TERMINSTANCE" > $output_objdir/$libname.def~ $ECHO "DESCRIPTION \"$libname\"" >> $output_objdir/$libname.def~ $ECHO "DATA MULTIPLE NONSHARED" >> $output_objdir/$libname.def~ $ECHO EXPORTS >> $output_objdir/$libname.def~ prefix_cmds="$SED"~ if test EXPORTS = "`$SED 1q $export_symbols`"; then prefix_cmds="$prefix_cmds -e 1d"; fi~ prefix_cmds="$prefix_cmds -e \"s/^\(.*\)$/_\1/g\""~ cat $export_symbols | $prefix_cmds >> $output_objdir/$libname.def~ $CC -Zdll -Zcrtdll -o $output_objdir/$soname $libobjs $deplibs $compiler_flags $output_objdir/$libname.def~ emximp -o $lib $output_objdir/$libname.def' _LT_TAGVAR(old_archive_From_new_cmds, $1)='emximp -o $output_objdir/${libname}_dll.a $output_objdir/$libname.def' _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=yes ;; dgux*) case $cc_basename in ec++*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; ghcx*) # Green Hills C++ Compiler # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; freebsd2.*) # C++ shared libraries reported to be fairly broken before # switch to ELF _LT_TAGVAR(ld_shlibs, $1)=no ;; freebsd-elf*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; freebsd* | dragonfly*) # FreeBSD 3 and later use GNU C++ and GNU ld with standard ELF # conventions _LT_TAGVAR(ld_shlibs, $1)=yes ;; haiku*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(link_all_deplibs, $1)=yes ;; hpux9*) _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -b $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $EGREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then _LT_TAGVAR(archive_cmds, $1)='$RM $output_objdir/$soname~$CC -shared -nostdlib $pic_flag $wl+b $wl$install_libdir -o $output_objdir/$soname $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~test "x$output_objdir/$soname" = "x$lib" || mv $output_objdir/$soname $lib' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; hpux10*|hpux11*) if test no = "$with_gnu_ld"; then _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl+b $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: case $host_cpu in hppa*64*|ia64*) ;; *) _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' ;; esac fi case $host_cpu in hppa*64*|ia64*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no ;; *) _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(hardcode_minus_L, $1)=yes # Not in the search PATH, # but as the default # location of the library. ;; esac case $cc_basename in CC*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; aCC*) case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -b $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`($CC -b $CFLAGS -v conftest.$objext 2>&1) | $GREP "\-L"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then case $host_cpu in hppa*64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib -fPIC $wl+h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; ia64*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+nodefaultrpath -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $pic_flag $wl+h $wl$soname $wl+b $wl$install_libdir -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' ;; esac fi else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; interix[[3-9]]*) _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' # Hack: On Interix 3.x, we cannot compile PIC because of a broken gcc. # Instead, shared libraries are loaded at an image base (0x10000000 by # default) and relocated if they conflict, which is a slow very memory # consuming and fragmenting process. To avoid this, we pick a random, # 256 KiB-aligned image base between 0x50000000 and 0x6FFC0000 at link # time. Moving up from 0x10000000 also allows more sbrk(2) space. _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='sed "s|^|_|" $export_symbols >$output_objdir/$soname.expsym~$CC -shared $pic_flag $libobjs $deplibs $compiler_flags $wl-h,$soname $wl--retain-symbols-file,$output_objdir/$soname.expsym $wl--image-base,`expr ${RANDOM-$$} % 4096 / 2 \* 262144 + 1342177280` -o $lib' ;; irix5* | irix6*) case $cc_basename in CC*) # SGI C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared -all -multigot $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' # Archives containing C++ object files must be created using # "CC -ar", where "CC" is the IRIX C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -ar -WR,-u -o $oldlib $oldobjs' ;; *) if test yes = "$GXX"; then if test no = "$with_gnu_ld"; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' else _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` -o $lib' fi fi _LT_TAGVAR(link_all_deplibs, $1)=yes ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: _LT_TAGVAR(inherit_rpath, $1)=yes ;; linux* | k*bsd*-gnu | kopensolaris*-gnu | gnu*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo $lib | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib $wl-retain-symbols-file,$export_symbols; mv \$templib $lib' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 | $GREP "ld"`; rm -f libconftest$shared_ext; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' # Archives containing C++ object files must be created using # "CC -Bstatic", where "CC" is the KAI C++ compiler. _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; icpc* | ecpc* ) # Intel C++ with_gnu_ld=yes # version 8.0 and above of icpc choke on multiply defined symbols # if we add $predep_objects and $postdep_objects, however 7.1 and # earlier do not add the objects themselves. case `$CC -V 2>&1` in *"Version 7."*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 8.0 or newer tmp_idyn= case $host_cpu in ia64*) tmp_idyn=' -i_dynamic';; esac _LT_TAGVAR(archive_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared'"$tmp_idyn"' $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive$convenience $wl--no-whole-archive' ;; pgCC* | pgcpp*) # Portland Group C++ compiler case `$CC -V` in *pgCC\ [[1-5]].* | *pgcpp\ [[1-5]].*) _LT_TAGVAR(prelink_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $objs $libobjs $compile_deplibs~ compile_command="$compile_command `find $tpldir -name \*.o | sort | $NL2SP`"' _LT_TAGVAR(old_archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $oldobjs$old_deplibs~ $AR $AR_FLAGS $oldlib$oldobjs$old_deplibs `find $tpldir -name \*.o | sort | $NL2SP`~ $RANLIB $oldlib' _LT_TAGVAR(archive_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='tpldir=Template.dir~ rm -rf $tpldir~ $CC --prelink_objects --instantiation_dir $tpldir $predep_objects $libobjs $deplibs $convenience $postdep_objects~ $CC -shared $pic_flag $predep_objects $libobjs $deplibs `find $tpldir -name \*.o | sort | $NL2SP` $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; *) # Version 6 and above use weak symbols _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname $wl-retain-symbols-file $wl$export_symbols -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl--rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`for conv in $convenience\"\"; do test -n \"$conv\" && new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' ;; cxx*) # Compaq C++ _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname -o $lib $wl-retain-symbols-file $wl$export_symbols' runpath_var=LD_RUN_PATH _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld .*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "X$list" | $Xsed' ;; xl* | mpixl* | bgxl*) # IBM XL 8.0 on PPC, with GNU ld _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl--export-dynamic' _LT_TAGVAR(archive_cmds, $1)='$CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname -o $lib' if test yes = "$supports_anon_versioning"; then _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $output_objdir/$libname.ver~ cat $export_symbols | sed -e "s/\(.*\)/\1;/" >> $output_objdir/$libname.ver~ echo "local: *; };" >> $output_objdir/$libname.ver~ $CC -qmkshrobj $libobjs $deplibs $compiler_flags $wl-soname $wl$soname $wl-version-script $wl$output_objdir/$libname.ver -o $lib' fi ;; *) case `$CC -V 2>&1 | sed 5q` in *Sun\ C*) # Sun C++ 5.9 _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file $wl$export_symbols' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl--whole-archive`new_convenience=; for conv in $convenience\"\"; do test -z \"$conv\" || new_convenience=\"$new_convenience,$conv\"; done; func_echo_all \"$new_convenience\"` $wl--no-whole-archive' _LT_TAGVAR(compiler_needs_object, $1)=yes # Not sure whether something based on # $CC $CFLAGS -v conftest.$objext -o libconftest$shared_ext 2>&1 # would be better. output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; esac ;; esac ;; lynxos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; m88k*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; mvs*) case $cc_basename in cxx*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; netbsd*) if echo __ELF__ | $CC -E - | $GREP __ELF__ >/dev/null; then _LT_TAGVAR(archive_cmds, $1)='$LD -Bshareable -o $lib $predep_objects $libobjs $deplibs $postdep_objects $linker_flags' wlarc= _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no fi # Workaround some broken pre-1.5 toolchains output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP conftest.$objext | $SED -e "s:-lgcc -lc -lgcc::"' ;; *nto* | *qnx*) _LT_TAGVAR(ld_shlibs, $1)=yes ;; openbsd* | bitrig*) if test -f /usr/libexec/ld.so; then _LT_TAGVAR(hardcode_direct, $1)=yes _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=yes _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' if test -z "`echo __ELF__ | $CC -E - | grep __ELF__`"; then _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $pic_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-retain-symbols-file,$export_symbols -o $lib' _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-E' _LT_TAGVAR(whole_archive_flag_spec, $1)=$wlarc'--whole-archive$convenience '$wlarc'--no-whole-archive' fi output_verbose_link_cmd=func_echo_all else _LT_TAGVAR(ld_shlibs, $1)=no fi ;; osf3* | osf4* | osf5*) case $cc_basename in KCC*) # Kuck and Associates, Inc. (KAI) C++ Compiler # KCC will only create a shared library if the output file # ends with ".so" (or ".sl" for HP-UX), so rename the library # to its proper name (with version) after linking. _LT_TAGVAR(archive_cmds, $1)='tempext=`echo $shared_ext | $SED -e '\''s/\([[^()0-9A-Za-z{}]]\)/\\\\\1/g'\''`; templib=`echo "$lib" | $SED -e "s/\$tempext\..*/.so/"`; $CC $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags --soname $soname -o \$templib; mv \$templib $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Archives containing C++ object files must be created using # the KAI C++ compiler. case $host in osf3*) _LT_TAGVAR(old_archive_cmds, $1)='$CC -Bstatic -o $oldlib $oldobjs' ;; *) _LT_TAGVAR(old_archive_cmds, $1)='$CC -o $oldlib $oldobjs' ;; esac ;; RCC*) # Rational C++ 2.4.1 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; cxx*) case $host in osf3*) _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $soname `test -n "$verstring" && func_echo_all "$wl-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' ;; *) _LT_TAGVAR(allow_undefined_flag, $1)=' -expect_unresolved \*' _LT_TAGVAR(archive_cmds, $1)='$CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname `test -n "$verstring" && func_echo_all "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='for i in `cat $export_symbols`; do printf "%s %s\\n" -exported_symbol "\$i" >> $lib.exp; done~ echo "-hidden">> $lib.exp~ $CC -shared$allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags -msym -soname $soname $wl-input $wl$lib.exp `test -n "$verstring" && $ECHO "-set_version $verstring"` -update_registry $output_objdir/so_locations -o $lib~ $RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-rpath $libdir' ;; esac _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. # # There doesn't appear to be a way to prevent this compiler from # explicitly linking system object files so we need to strip them # from the output so that they don't get included in the library # dependencies. output_verbose_link_cmd='templist=`$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP "ld" | $GREP -v "ld:"`; templist=`func_echo_all "$templist" | $SED "s/\(^.*ld.*\)\( .*ld.*$\)/\1/"`; list= ; for z in $templist; do case $z in conftest.$objext) list="$list $z";; *.$objext);; *) list="$list $z";;esac; done; func_echo_all "$list"' ;; *) if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(allow_undefined_flag, $1)=' $wl-expect_unresolved $wl\*' case $host in osf3*) _LT_TAGVAR(archive_cmds, $1)='$CC -shared -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $allow_undefined_flag $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-msym $wl-soname $wl$soname `test -n "$verstring" && func_echo_all "$wl-set_version $wl$verstring"` $wl-update_registry $wl$output_objdir/so_locations -o $lib' ;; esac _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-rpath $wl$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=: # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no fi ;; esac ;; psos*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; sunos4*) case $cc_basename in CC*) # Sun C++ 4.x # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; lcc*) # Lucid # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; solaris*) case $cc_basename in CC* | sunCC*) # Sun C++ 4.2, 5.x and Centerline C++ _LT_TAGVAR(archive_cmds_need_lc,$1)=yes _LT_TAGVAR(no_undefined_flag, $1)=' -zdefs' _LT_TAGVAR(archive_cmds, $1)='$CC -G$allow_undefined_flag -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G$allow_undefined_flag $wl-M $wl$lib.exp -h$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='-R$libdir' _LT_TAGVAR(hardcode_shlibpath_var, $1)=no case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) # The compiler driver will combine and reorder linker options, # but understands '-z linker_flag'. # Supported since Solaris 2.6 (maybe 2.5.1?) _LT_TAGVAR(whole_archive_flag_spec, $1)='-z allextract$convenience -z defaultextract' ;; esac _LT_TAGVAR(link_all_deplibs, $1)=yes output_verbose_link_cmd='func_echo_all' # Archives containing C++ object files must be created using # "CC -xar", where "CC" is the Sun C++ compiler. This is # necessary to make sure instantiated templates are included # in the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC -xar -o $oldlib $oldobjs' ;; gcx*) # Green Hills C++ Compiler _LT_TAGVAR(archive_cmds, $1)='$CC -shared $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' # The C++ compiler must be used to create the archive. _LT_TAGVAR(old_archive_cmds, $1)='$CC $LDFLAGS -archive -o $oldlib $oldobjs' ;; *) # GNU C++ compiler with Solaris linker if test yes,no = "$GXX,$with_gnu_ld"; then _LT_TAGVAR(no_undefined_flag, $1)=' $wl-z ${wl}defs' if $CC --version | $GREP -v '^2\.7' > /dev/null; then _LT_TAGVAR(archive_cmds, $1)='$CC -shared $pic_flag -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -shared $pic_flag -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -shared $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' else # g++ 2.7 appears to require '-G' NOT '-shared' on this # platform. _LT_TAGVAR(archive_cmds, $1)='$CC -G -nostdlib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags $wl-h $wl$soname -o $lib' _LT_TAGVAR(archive_expsym_cmds, $1)='echo "{ global:" > $lib.exp~cat $export_symbols | $SED -e "s/\(.*\)/\1;/" >> $lib.exp~echo "local: *; };" >> $lib.exp~ $CC -G -nostdlib $wl-M $wl$lib.exp $wl-h $wl$soname -o $lib $predep_objects $libobjs $deplibs $postdep_objects $compiler_flags~$RM $lib.exp' # Commands to make compiler produce verbose output that lists # what "hidden" libraries, object files and flags are used when # linking a shared library. output_verbose_link_cmd='$CC -G $CFLAGS -v conftest.$objext 2>&1 | $GREP -v "^Configured with:" | $GREP "\-L"' fi _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R $wl$libdir' case $host_os in solaris2.[[0-5]] | solaris2.[[0-5]].*) ;; *) _LT_TAGVAR(whole_archive_flag_spec, $1)='$wl-z ${wl}allextract$convenience $wl-z ${wl}defaultextract' ;; esac fi ;; esac ;; sysv4*uw2* | sysv5OpenUNIX* | sysv5UnixWare7.[[01]].[[10]]* | unixware7* | sco3.2v5.0.[[024]]*) _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; sysv5* | sco3.2v5* | sco5v6*) # Note: We CANNOT use -z defs as we might desire, because we do not # link with -lc, and that would cause any symbols used from libc to # always be unresolved, which means just about no library would # ever link correctly. If we're not using GNU ld we use -z text # though, which does catch some bad symbols but isn't as heavy-handed # as -z defs. _LT_TAGVAR(no_undefined_flag, $1)='$wl-z,text' _LT_TAGVAR(allow_undefined_flag, $1)='$wl-z,nodefs' _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(hardcode_shlibpath_var, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)='$wl-R,$libdir' _LT_TAGVAR(hardcode_libdir_separator, $1)=':' _LT_TAGVAR(link_all_deplibs, $1)=yes _LT_TAGVAR(export_dynamic_flag_spec, $1)='$wl-Bexport' runpath_var='LD_RUN_PATH' case $cc_basename in CC*) _LT_TAGVAR(archive_cmds, $1)='$CC -G $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -G $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(old_archive_cmds, $1)='$CC -Tprelink_objects $oldobjs~ '"$_LT_TAGVAR(old_archive_cmds, $1)" _LT_TAGVAR(reload_cmds, $1)='$CC -Tprelink_objects $reload_objs~ '"$_LT_TAGVAR(reload_cmds, $1)" ;; *) _LT_TAGVAR(archive_cmds, $1)='$CC -shared $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' _LT_TAGVAR(archive_expsym_cmds, $1)='$CC -shared $wl-Bexport:$export_symbols $wl-h,$soname -o $lib $libobjs $deplibs $compiler_flags' ;; esac ;; tandem*) case $cc_basename in NCC*) # NonStop-UX NCC 3.20 # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac ;; vxworks*) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; *) # FIXME: insert proper C++ library support _LT_TAGVAR(ld_shlibs, $1)=no ;; esac AC_MSG_RESULT([$_LT_TAGVAR(ld_shlibs, $1)]) test no = "$_LT_TAGVAR(ld_shlibs, $1)" && can_build_shared=no _LT_TAGVAR(GCC, $1)=$GXX _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS LDCXX=$LD LD=$lt_save_LD GCC=$lt_save_GCC with_gnu_ld=$lt_save_with_gnu_ld lt_cv_path_LDCXX=$lt_cv_path_LD lt_cv_path_LD=$lt_save_path_LD lt_cv_prog_gnu_ldcxx=$lt_cv_prog_gnu_ld lt_cv_prog_gnu_ld=$lt_save_with_gnu_ld fi # test yes != "$_lt_caught_CXX_error" AC_LANG_POP ])# _LT_LANG_CXX_CONFIG # _LT_FUNC_STRIPNAME_CNF # ---------------------- # func_stripname_cnf prefix suffix name # strip PREFIX and SUFFIX off of NAME. # PREFIX and SUFFIX must not contain globbing or regex special # characters, hashes, percent signs, but SUFFIX may contain a leading # dot (in which case that matches only a dot). # # This function is identical to the (non-XSI) version of func_stripname, # except this one can be used by m4 code that may be executed by configure, # rather than the libtool script. m4_defun([_LT_FUNC_STRIPNAME_CNF],[dnl AC_REQUIRE([_LT_DECL_SED]) AC_REQUIRE([_LT_PROG_ECHO_BACKSLASH]) func_stripname_cnf () { case @S|@2 in .*) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%\\\\@S|@2\$%%"`;; *) func_stripname_result=`$ECHO "@S|@3" | $SED "s%^@S|@1%%; s%@S|@2\$%%"`;; esac } # func_stripname_cnf ])# _LT_FUNC_STRIPNAME_CNF # _LT_SYS_HIDDEN_LIBDEPS([TAGNAME]) # --------------------------------- # Figure out "hidden" library dependencies from verbose # compiler output when linking a shared library. # Parse the compiler output and extract the necessary # objects, libraries and library flags. m4_defun([_LT_SYS_HIDDEN_LIBDEPS], [m4_require([_LT_FILEUTILS_DEFAULTS])dnl AC_REQUIRE([_LT_FUNC_STRIPNAME_CNF])dnl # Dependencies to place before and after the object being linked: _LT_TAGVAR(predep_objects, $1)= _LT_TAGVAR(postdep_objects, $1)= _LT_TAGVAR(predeps, $1)= _LT_TAGVAR(postdeps, $1)= _LT_TAGVAR(compiler_lib_search_path, $1)= dnl we can't use the lt_simple_compile_test_code here, dnl because it contains code intended for an executable, dnl not a library. It's possible we should let each dnl tag define a new lt_????_link_test_code variable, dnl but it's only used here... m4_if([$1], [], [cat > conftest.$ac_ext <<_LT_EOF int a; void foo (void) { a = 0; } _LT_EOF ], [$1], [CXX], [cat > conftest.$ac_ext <<_LT_EOF class Foo { public: Foo (void) { a = 0; } private: int a; }; _LT_EOF ], [$1], [F77], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer*4 a a=0 return end _LT_EOF ], [$1], [FC], [cat > conftest.$ac_ext <<_LT_EOF subroutine foo implicit none integer a a=0 return end _LT_EOF ], [$1], [GCJ], [cat > conftest.$ac_ext <<_LT_EOF public class foo { private int a; public void bar (void) { a = 0; } }; _LT_EOF ], [$1], [GO], [cat > conftest.$ac_ext <<_LT_EOF package foo func foo() { } _LT_EOF ]) _lt_libdeps_save_CFLAGS=$CFLAGS case "$CC $CFLAGS " in #( *\ -flto*\ *) CFLAGS="$CFLAGS -fno-lto" ;; *\ -fwhopr*\ *) CFLAGS="$CFLAGS -fno-whopr" ;; *\ -fuse-linker-plugin*\ *) CFLAGS="$CFLAGS -fno-use-linker-plugin" ;; esac dnl Parse the compiler output and extract the necessary dnl objects, libraries and library flags. if AC_TRY_EVAL(ac_compile); then # Parse the compiler output and extract the necessary # objects, libraries and library flags. # Sentinel used to keep track of whether or not we are before # the conftest object file. pre_test_object_deps_done=no for p in `eval "$output_verbose_link_cmd"`; do case $prev$p in -L* | -R* | -l*) # Some compilers place space between "-{L,R}" and the path. # Remove the space. if test x-L = "$p" || test x-R = "$p"; then prev=$p continue fi # Expand the sysroot to ease extracting the directories later. if test -z "$prev"; then case $p in -L*) func_stripname_cnf '-L' '' "$p"; prev=-L; p=$func_stripname_result ;; -R*) func_stripname_cnf '-R' '' "$p"; prev=-R; p=$func_stripname_result ;; -l*) func_stripname_cnf '-l' '' "$p"; prev=-l; p=$func_stripname_result ;; esac fi case $p in =*) func_stripname_cnf '=' '' "$p"; p=$lt_sysroot$func_stripname_result ;; esac if test no = "$pre_test_object_deps_done"; then case $prev in -L | -R) # Internal compiler library paths should come after those # provided the user. The postdeps already come after the # user supplied libs so there is no need to process them. if test -z "$_LT_TAGVAR(compiler_lib_search_path, $1)"; then _LT_TAGVAR(compiler_lib_search_path, $1)=$prev$p else _LT_TAGVAR(compiler_lib_search_path, $1)="${_LT_TAGVAR(compiler_lib_search_path, $1)} $prev$p" fi ;; # The "-l" case would never come before the object being # linked, so don't bother handling this case. esac else if test -z "$_LT_TAGVAR(postdeps, $1)"; then _LT_TAGVAR(postdeps, $1)=$prev$p else _LT_TAGVAR(postdeps, $1)="${_LT_TAGVAR(postdeps, $1)} $prev$p" fi fi prev= ;; *.lto.$objext) ;; # Ignore GCC LTO objects *.$objext) # This assumes that the test object file only shows up # once in the compiler output. if test "$p" = "conftest.$objext"; then pre_test_object_deps_done=yes continue fi if test no = "$pre_test_object_deps_done"; then if test -z "$_LT_TAGVAR(predep_objects, $1)"; then _LT_TAGVAR(predep_objects, $1)=$p else _LT_TAGVAR(predep_objects, $1)="$_LT_TAGVAR(predep_objects, $1) $p" fi else if test -z "$_LT_TAGVAR(postdep_objects, $1)"; then _LT_TAGVAR(postdep_objects, $1)=$p else _LT_TAGVAR(postdep_objects, $1)="$_LT_TAGVAR(postdep_objects, $1) $p" fi fi ;; *) ;; # Ignore the rest. esac done # Clean up. rm -f a.out a.exe else echo "libtool.m4: error: problem compiling $1 test program" fi $RM -f confest.$objext CFLAGS=$_lt_libdeps_save_CFLAGS # PORTME: override above test on systems where it is broken m4_if([$1], [CXX], [case $host_os in interix[[3-9]]*) # Interix 3.5 installs completely hosed .la files for C++, so rather than # hack all around it, let's just trust "g++" to DTRT. _LT_TAGVAR(predep_objects,$1)= _LT_TAGVAR(postdep_objects,$1)= _LT_TAGVAR(postdeps,$1)= ;; esac ]) case " $_LT_TAGVAR(postdeps, $1) " in *" -lc "*) _LT_TAGVAR(archive_cmds_need_lc, $1)=no ;; esac _LT_TAGVAR(compiler_lib_search_dirs, $1)= if test -n "${_LT_TAGVAR(compiler_lib_search_path, $1)}"; then _LT_TAGVAR(compiler_lib_search_dirs, $1)=`echo " ${_LT_TAGVAR(compiler_lib_search_path, $1)}" | $SED -e 's! -L! !g' -e 's!^ !!'` fi _LT_TAGDECL([], [compiler_lib_search_dirs], [1], [The directories searched by this compiler when creating a shared library]) _LT_TAGDECL([], [predep_objects], [1], [Dependencies to place before and after the objects being linked to create a shared library]) _LT_TAGDECL([], [postdep_objects], [1]) _LT_TAGDECL([], [predeps], [1]) _LT_TAGDECL([], [postdeps], [1]) _LT_TAGDECL([], [compiler_lib_search_path], [1], [The library search path used internally by the compiler when linking a shared library]) ])# _LT_SYS_HIDDEN_LIBDEPS # _LT_LANG_F77_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for a Fortran 77 compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_F77_CONFIG], [AC_LANG_PUSH(Fortran 77) if test -z "$F77" || test no = "$F77"; then _lt_disable_F77=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for f77 test sources. ac_ext=f # Object file extension for compiled f77 test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the F77 compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_F77"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${F77-"f77"} CFLAGS=$FFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) GCC=$G77 if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$G77 _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_F77" AC_LANG_POP ])# _LT_LANG_F77_CONFIG # _LT_LANG_FC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for a Fortran compiler are # suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_FC_CONFIG], [AC_LANG_PUSH(Fortran) if test -z "$FC" || test no = "$FC"; then _lt_disable_FC=yes fi _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(allow_undefined_flag, $1)= _LT_TAGVAR(always_export_symbols, $1)=no _LT_TAGVAR(archive_expsym_cmds, $1)= _LT_TAGVAR(export_dynamic_flag_spec, $1)= _LT_TAGVAR(hardcode_direct, $1)=no _LT_TAGVAR(hardcode_direct_absolute, $1)=no _LT_TAGVAR(hardcode_libdir_flag_spec, $1)= _LT_TAGVAR(hardcode_libdir_separator, $1)= _LT_TAGVAR(hardcode_minus_L, $1)=no _LT_TAGVAR(hardcode_automatic, $1)=no _LT_TAGVAR(inherit_rpath, $1)=no _LT_TAGVAR(module_cmds, $1)= _LT_TAGVAR(module_expsym_cmds, $1)= _LT_TAGVAR(link_all_deplibs, $1)=unknown _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds _LT_TAGVAR(no_undefined_flag, $1)= _LT_TAGVAR(whole_archive_flag_spec, $1)= _LT_TAGVAR(enable_shared_with_static_runtimes, $1)=no # Source file extension for fc test sources. ac_ext=${ac_fc_srcext-f} # Object file extension for compiled fc test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # No sense in running all these tests if we already determined that # the FC compiler isn't working. Some variables (like enable_shared) # are currently assumed to apply to all compilers on this platform, # and will be corrupted by setting them based on a non-working compiler. if test yes != "$_lt_disable_FC"; then # Code to be used in simple compile tests lt_simple_compile_test_code="\ subroutine t return end " # Code to be used in simple link tests lt_simple_link_test_code="\ program t end " # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_GCC=$GCC lt_save_CFLAGS=$CFLAGS CC=${FC-"f95"} CFLAGS=$FCFLAGS compiler=$CC GCC=$ac_cv_fc_compiler_gnu _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) if test -n "$compiler"; then AC_MSG_CHECKING([if libtool supports shared libraries]) AC_MSG_RESULT([$can_build_shared]) AC_MSG_CHECKING([whether to build shared libraries]) test no = "$can_build_shared" && enable_shared=no # On AIX, shared libraries and static libraries use the same namespace, and # are all built from PIC. case $host_os in aix3*) test yes = "$enable_shared" && enable_static=no if test -n "$RANLIB"; then archive_cmds="$archive_cmds~\$RANLIB \$lib" postinstall_cmds='$RANLIB $lib' fi ;; aix[[4-9]]*) if test ia64 != "$host_cpu"; then case $enable_shared,$with_aix_soname,$aix_use_runtimelinking in yes,aix,yes) ;; # shared object as lib.so file only yes,svr4,*) ;; # shared object as lib.so archive member only yes,*) enable_static=no ;; # shared object in lib.a archive as well esac fi ;; esac AC_MSG_RESULT([$enable_shared]) AC_MSG_CHECKING([whether to build static libraries]) # Make sure either enable_shared or enable_static is yes. test yes = "$enable_shared" || enable_static=yes AC_MSG_RESULT([$enable_static]) _LT_TAGVAR(GCC, $1)=$ac_cv_fc_compiler_gnu _LT_TAGVAR(LD, $1)=$LD ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... _LT_SYS_HIDDEN_LIBDEPS($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_SYS_DYNAMIC_LINKER($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi # test -n "$compiler" GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS fi # test yes != "$_lt_disable_FC" AC_LANG_POP ])# _LT_LANG_FC_CONFIG # _LT_LANG_GCJ_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Java Compiler compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GCJ_CONFIG], [AC_REQUIRE([LT_PROG_GCJ])dnl AC_LANG_SAVE # Source file extension for Java test sources. ac_ext=java # Object file extension for compiled Java test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="class foo {}" # Code to be used in simple link tests lt_simple_link_test_code='public class conftest { public static void main(String[[]] argv) {}; }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GCJ-"gcj"} CFLAGS=$GCJFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # GCJ did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GCJ_CONFIG # _LT_LANG_GO_CONFIG([TAG]) # -------------------------- # Ensure that the configuration variables for the GNU Go compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_GO_CONFIG], [AC_REQUIRE([LT_PROG_GO])dnl AC_LANG_SAVE # Source file extension for Go test sources. ac_ext=go # Object file extension for compiled Go test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code="package main; func main() { }" # Code to be used in simple link tests lt_simple_link_test_code='package main; func main() { }' # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC=yes CC=${GOC-"gccgo"} CFLAGS=$GOFLAGS compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_TAGVAR(LD, $1)=$LD _LT_CC_BASENAME([$compiler]) # Go did not exist at the time GCC didn't implicitly link libc in. _LT_TAGVAR(archive_cmds_need_lc, $1)=no _LT_TAGVAR(old_archive_cmds, $1)=$old_archive_cmds _LT_TAGVAR(reload_flag, $1)=$reload_flag _LT_TAGVAR(reload_cmds, $1)=$reload_cmds ## CAVEAT EMPTOR: ## There is no encapsulation within the following macros, do not change ## the running order or otherwise move them around unless you know exactly ## what you are doing... if test -n "$compiler"; then _LT_COMPILER_NO_RTTI($1) _LT_COMPILER_PIC($1) _LT_COMPILER_C_O($1) _LT_COMPILER_FILE_LOCKS($1) _LT_LINKER_SHLIBS($1) _LT_LINKER_HARDCODE_LIBPATH($1) _LT_CONFIG($1) fi AC_LANG_RESTORE GCC=$lt_save_GCC CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_GO_CONFIG # _LT_LANG_RC_CONFIG([TAG]) # ------------------------- # Ensure that the configuration variables for the Windows resource compiler # are suitably defined. These variables are subsequently used by _LT_CONFIG # to write the compiler configuration to 'libtool'. m4_defun([_LT_LANG_RC_CONFIG], [AC_REQUIRE([LT_PROG_RC])dnl AC_LANG_SAVE # Source file extension for RC test sources. ac_ext=rc # Object file extension for compiled RC test sources. objext=o _LT_TAGVAR(objext, $1)=$objext # Code to be used in simple compile tests lt_simple_compile_test_code='sample MENU { MENUITEM "&Soup", 100, CHECKED }' # Code to be used in simple link tests lt_simple_link_test_code=$lt_simple_compile_test_code # ltmain only uses $CC for tagged configurations so make sure $CC is set. _LT_TAG_COMPILER # save warnings/boilerplate of simple test code _LT_COMPILER_BOILERPLATE _LT_LINKER_BOILERPLATE # Allow CC to be a program name with arguments. lt_save_CC=$CC lt_save_CFLAGS=$CFLAGS lt_save_GCC=$GCC GCC= CC=${RC-"windres"} CFLAGS= compiler=$CC _LT_TAGVAR(compiler, $1)=$CC _LT_CC_BASENAME([$compiler]) _LT_TAGVAR(lt_cv_prog_compiler_c_o, $1)=yes if test -n "$compiler"; then : _LT_CONFIG($1) fi GCC=$lt_save_GCC AC_LANG_RESTORE CC=$lt_save_CC CFLAGS=$lt_save_CFLAGS ])# _LT_LANG_RC_CONFIG # LT_PROG_GCJ # ----------- AC_DEFUN([LT_PROG_GCJ], [m4_ifdef([AC_PROG_GCJ], [AC_PROG_GCJ], [m4_ifdef([A][M_PROG_GCJ], [A][M_PROG_GCJ], [AC_CHECK_TOOL(GCJ, gcj,) test set = "${GCJFLAGS+set}" || GCJFLAGS="-g -O2" AC_SUBST(GCJFLAGS)])])[]dnl ]) # Old name: AU_ALIAS([LT_AC_PROG_GCJ], [LT_PROG_GCJ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_GCJ], []) # LT_PROG_GO # ---------- AC_DEFUN([LT_PROG_GO], [AC_CHECK_TOOL(GOC, gccgo,) ]) # LT_PROG_RC # ---------- AC_DEFUN([LT_PROG_RC], [AC_CHECK_TOOL(RC, windres,) ]) # Old name: AU_ALIAS([LT_AC_PROG_RC], [LT_PROG_RC]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_RC], []) # _LT_DECL_EGREP # -------------- # If we don't have a new enough Autoconf to choose the best grep # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_EGREP], [AC_REQUIRE([AC_PROG_EGREP])dnl AC_REQUIRE([AC_PROG_FGREP])dnl test -z "$GREP" && GREP=grep _LT_DECL([], [GREP], [1], [A grep program that handles long lines]) _LT_DECL([], [EGREP], [1], [An ERE matcher]) _LT_DECL([], [FGREP], [1], [A literal string matcher]) dnl Non-bleeding-edge autoconf doesn't subst GREP, so do it here too AC_SUBST([GREP]) ]) # _LT_DECL_OBJDUMP # -------------- # If we don't have a new enough Autoconf to choose the best objdump # available, choose the one first in the user's PATH. m4_defun([_LT_DECL_OBJDUMP], [AC_CHECK_TOOL(OBJDUMP, objdump, false) test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [An object symbol dumper]) AC_SUBST([OBJDUMP]) ]) # _LT_DECL_DLLTOOL # ---------------- # Ensure DLLTOOL variable is set. m4_defun([_LT_DECL_DLLTOOL], [AC_CHECK_TOOL(DLLTOOL, dlltool, false) test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program]) AC_SUBST([DLLTOOL]) ]) # _LT_DECL_SED # ------------ # Check for a fully-functional sed program, that truncates # as few characters as possible. Prefer GNU sed if found. m4_defun([_LT_DECL_SED], [AC_PROG_SED test -z "$SED" && SED=sed Xsed="$SED -e 1s/^X//" _LT_DECL([], [SED], [1], [A sed program that does not truncate output]) _LT_DECL([], [Xsed], ["\$SED -e 1s/^X//"], [Sed that helps us avoid accidentally triggering echo(1) options like -n]) ])# _LT_DECL_SED m4_ifndef([AC_PROG_SED], [ ############################################################ # NOTE: This macro has been submitted for inclusion into # # GNU Autoconf as AC_PROG_SED. When it is available in # # a released version of Autoconf we should remove this # # macro and use it instead. # ############################################################ m4_defun([AC_PROG_SED], [AC_MSG_CHECKING([for a sed that does not truncate output]) AC_CACHE_VAL(lt_cv_path_SED, [# Loop through the user's path and test for sed and gsed. # Then use that list of sed's as ones to test for truncation. as_save_IFS=$IFS; IFS=$PATH_SEPARATOR for as_dir in $PATH do IFS=$as_save_IFS test -z "$as_dir" && as_dir=. for lt_ac_prog in sed gsed; do for ac_exec_ext in '' $ac_executable_extensions; do if $as_executable_p "$as_dir/$lt_ac_prog$ac_exec_ext"; then lt_ac_sed_list="$lt_ac_sed_list $as_dir/$lt_ac_prog$ac_exec_ext" fi done done done IFS=$as_save_IFS lt_ac_max=0 lt_ac_count=0 # Add /usr/xpg4/bin/sed as it is typically found on Solaris # along with /bin/sed that truncates output. for lt_ac_sed in $lt_ac_sed_list /usr/xpg4/bin/sed; do test ! -f "$lt_ac_sed" && continue cat /dev/null > conftest.in lt_ac_count=0 echo $ECHO_N "0123456789$ECHO_C" >conftest.in # Check for GNU sed and select it if it is found. if "$lt_ac_sed" --version 2>&1 < /dev/null | grep 'GNU' > /dev/null; then lt_cv_path_SED=$lt_ac_sed break fi while true; do cat conftest.in conftest.in >conftest.tmp mv conftest.tmp conftest.in cp conftest.in conftest.nl echo >>conftest.nl $lt_ac_sed -e 's/a$//' < conftest.nl >conftest.out || break cmp -s conftest.out conftest.nl || break # 10000 chars as input seems more than enough test 10 -lt "$lt_ac_count" && break lt_ac_count=`expr $lt_ac_count + 1` if test "$lt_ac_count" -gt "$lt_ac_max"; then lt_ac_max=$lt_ac_count lt_cv_path_SED=$lt_ac_sed fi done done ]) SED=$lt_cv_path_SED AC_SUBST([SED]) AC_MSG_RESULT([$SED]) ])#AC_PROG_SED ])#m4_ifndef # Old name: AU_ALIAS([LT_AC_PROG_SED], [AC_PROG_SED]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([LT_AC_PROG_SED], []) # _LT_CHECK_SHELL_FEATURES # ------------------------ # Find out whether the shell is Bourne or XSI compatible, # or has some other useful features. m4_defun([_LT_CHECK_SHELL_FEATURES], [if ( (MAIL=60; unset MAIL) || exit) >/dev/null 2>&1; then lt_unset=unset else lt_unset=false fi _LT_DECL([], [lt_unset], [0], [whether the shell understands "unset"])dnl # test EBCDIC or ASCII case `echo X|tr X '\101'` in A) # ASCII based system # \n is not interpreted correctly by Solaris 8 /usr/ucb/tr lt_SP2NL='tr \040 \012' lt_NL2SP='tr \015\012 \040\040' ;; *) # EBCDIC based system lt_SP2NL='tr \100 \n' lt_NL2SP='tr \r\n \100\100' ;; esac _LT_DECL([SP2NL], [lt_SP2NL], [1], [turn spaces into newlines])dnl _LT_DECL([NL2SP], [lt_NL2SP], [1], [turn newlines into spaces])dnl ])# _LT_CHECK_SHELL_FEATURES # _LT_PATH_CONVERSION_FUNCTIONS # ----------------------------- # Determine what file name conversion functions should be used by # func_to_host_file (and, implicitly, by func_to_host_path). These are needed # for certain cross-compile configurations and native mingw. m4_defun([_LT_PATH_CONVERSION_FUNCTIONS], [AC_REQUIRE([AC_CANONICAL_HOST])dnl AC_REQUIRE([AC_CANONICAL_BUILD])dnl AC_MSG_CHECKING([how to convert $build file names to $host format]) AC_CACHE_VAL(lt_cv_to_host_file_cmd, [case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_w32 ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_cygwin_to_w32 ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_w32 ;; esac ;; *-*-cygwin* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_host_file_cmd=func_convert_file_msys_to_cygwin ;; *-*-cygwin* ) lt_cv_to_host_file_cmd=func_convert_file_noop ;; * ) # otherwise, assume *nix lt_cv_to_host_file_cmd=func_convert_file_nix_to_cygwin ;; esac ;; * ) # unhandled hosts (and "normal" native builds) lt_cv_to_host_file_cmd=func_convert_file_noop ;; esac ]) to_host_file_cmd=$lt_cv_to_host_file_cmd AC_MSG_RESULT([$lt_cv_to_host_file_cmd]) _LT_DECL([to_host_file_cmd], [lt_cv_to_host_file_cmd], [0], [convert $build file names to $host format])dnl AC_MSG_CHECKING([how to convert $build file names to toolchain format]) AC_CACHE_VAL(lt_cv_to_tool_file_cmd, [#assume ordinary cross tools, or native build. lt_cv_to_tool_file_cmd=func_convert_file_noop case $host in *-*-mingw* ) case $build in *-*-mingw* ) # actually msys lt_cv_to_tool_file_cmd=func_convert_file_msys_to_w32 ;; esac ;; esac ]) to_tool_file_cmd=$lt_cv_to_tool_file_cmd AC_MSG_RESULT([$lt_cv_to_tool_file_cmd]) _LT_DECL([to_tool_file_cmd], [lt_cv_to_tool_file_cmd], [0], [convert $build files to toolchain format])dnl ])# _LT_PATH_CONVERSION_FUNCTIONS �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/mkstemp.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000006100�14226564452�012355� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 28 # Copyright (C) 2001, 2003-2007, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # On some hosts (e.g., HP-UX 10.20, SunOS 4.1.4, Solaris 2.5.1), mkstemp has a # silly limit that it can create no more than 26 files from a given template. # Other systems lack mkstemp altogether. # On OSF1/Tru64 V4.0F, the system-provided mkstemp function can create # only 32 files per process. # On some hosts, mkstemp creates files with mode 0666, which is a security # problem and a violation of POSIX 2008. # On systems like the above, arrange to use the replacement function. AC_DEFUN([gl_FUNC_MKSTEMP], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([mkstemp]) if test $ac_cv_func_mkstemp = yes; then AC_CACHE_CHECK([for working mkstemp], [gl_cv_func_working_mkstemp], [ mkdir conftest.mkstemp AC_RUN_IFELSE( [AC_LANG_PROGRAM( [AC_INCLUDES_DEFAULT GL_MDA_DEFINES], [[int result = 0; int i; off_t large = (off_t) 4294967295u; if (large < 0) large = 2147483647; umask (0); for (i = 0; i < 70; i++) { char templ[] = "conftest.mkstemp/coXXXXXX"; int (*mkstemp_function) (char *) = mkstemp; int fd = mkstemp_function (templ); if (fd < 0) result |= 1; else { struct stat st; if (lseek (fd, large, SEEK_SET) != large) result |= 2; if (fstat (fd, &st) < 0) result |= 4; else if (st.st_mode & 0077) result |= 8; if (close (fd)) result |= 16; } } return result;]])], [gl_cv_func_working_mkstemp=yes], [gl_cv_func_working_mkstemp=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_mkstemp="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_working_mkstemp="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_working_mkstemp="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_mkstemp="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.mkstemp ]) case "$gl_cv_func_working_mkstemp" in *yes) ;; *) REPLACE_MKSTEMP=1 ;; esac else HAVE_MKSTEMP=0 fi ]) # Prerequisites of lib/mkstemp.c. AC_DEFUN([gl_PREREQ_MKSTEMP], [ ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/error.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000002003�14226564451�012023� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 15 # Copyright (C) 1996-1998, 2001-2004, 2009-2022 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_ERROR], [ dnl We don't use AC_FUNC_ERROR_AT_LINE any more, because it is no longer dnl maintained in Autoconf and because it invokes AC_LIBOBJ. AC_CACHE_CHECK([for error_at_line], [ac_cv_lib_error_at_line], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <error.h>]], [[error_at_line (0, 0, "", 0, "an error occurred");]])], [ac_cv_lib_error_at_line=yes], [ac_cv_lib_error_at_line=no])]) ]) # Prerequisites of lib/error.c. AC_DEFUN([gl_PREREQ_ERROR], [ dnl Use system extensions on Android, so that AC_FUNC_STRERROR_R dnl discovers the GNU API for strerror_r on Android API level 23 and later. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_FUNC_STRERROR_R]) : ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/tzset.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000000754�14226564453�012060� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 16 # Copyright (C) 2003, 2007, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Jim Meyering. AC_DEFUN([gl_FUNC_TZSET], [ AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) REPLACE_TZSET=0 case "$host_os" in mingw*) REPLACE_TZSET=1 ;; esac ]) ��������������������recutils-1.9/m4/memchr.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000006520�14226564452�012156� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# memchr.m4 serial 18 dnl Copyright (C) 2002-2004, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_FUNC_MEMCHR], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Check for prerequisites for memory fence checks. gl_FUNC_MMAP_ANON AC_CHECK_HEADERS_ONCE([sys/mman.h]) AC_CHECK_FUNCS_ONCE([mprotect]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) # Detect platform-specific bugs in some versions of glibc: # memchr should not dereference anything with length 0 # https://bugzilla.redhat.com/show_bug.cgi?id=499689 # memchr should not dereference overestimated length after a match # https://bugs.debian.org/cgi-bin/bugreport.cgi?bug=521737 # https://sourceware.org/bugzilla/show_bug.cgi?id=10162 # memchr should cast the second argument to 'unsigned char'. # This bug exists in Android 4.3. # Assume that memchr works on platforms that lack mprotect. AC_CACHE_CHECK([whether memchr works], [gl_cv_func_memchr_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> #if HAVE_SYS_MMAN_H # include <fcntl.h> # include <unistd.h> # include <sys/types.h> # include <sys/mman.h> # ifndef MAP_FILE # define MAP_FILE 0 # endif #endif ]], [[ int result = 0; char *fence = NULL; #if HAVE_SYS_MMAN_H && HAVE_MPROTECT # if HAVE_MAP_ANONYMOUS const int flags = MAP_ANONYMOUS | MAP_PRIVATE; const int fd = -1; # else /* !HAVE_MAP_ANONYMOUS */ const int flags = MAP_FILE | MAP_PRIVATE; int fd = open ("/dev/zero", O_RDONLY, 0666); if (fd >= 0) # endif { int pagesize = getpagesize (); char *two_pages = (char *) mmap (NULL, 2 * pagesize, PROT_READ | PROT_WRITE, flags, fd, 0); if (two_pages != (char *)(-1) && mprotect (two_pages + pagesize, pagesize, PROT_NONE) == 0) fence = two_pages + pagesize; } #endif if (fence) { /* Test against bugs on glibc systems. */ if (memchr (fence, 0, 0)) result |= 1; strcpy (fence - 9, "12345678"); if (memchr (fence - 9, 0, 79) != fence - 1) result |= 2; if (memchr (fence - 1, 0, 3) != fence - 1) result |= 4; /* Test against bug on AIX 7.2. */ if (memchr (fence - 4, '6', 16) != fence - 4) result |= 8; } /* Test against bug on Android 4.3. */ { char input[3]; input[0] = 'a'; input[1] = 'b'; input[2] = 'c'; if (memchr (input, 0x789abc00 | 'b', 3) != input + 1) result |= 16; } return result; ]])], [gl_cv_func_memchr_works=yes], [gl_cv_func_memchr_works=no], [case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_memchr_works="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_memchr_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_memchr_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_memchr_works" in *yes) ;; *) REPLACE_MEMCHR=1 ;; esac ]) # Prerequisites of lib/memchr.c. AC_DEFUN([gl_PREREQ_MEMCHR], [ AC_CHECK_HEADERS([bp-sym.h]) ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fchdir.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000004574�14226564447�012155� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fchdir.m4 serial 27 dnl Copyright (C) 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FCHDIR], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([fchdir]) if test $ac_cv_have_decl_fchdir = no; then HAVE_DECL_FCHDIR=0 fi AC_REQUIRE([gl_TEST_FCHDIR]) if test $HAVE_FCHDIR = 0; then AC_DEFINE([REPLACE_FCHDIR], [1], [Define to 1 if gnulib's fchdir() replacement is used.]) dnl We must also replace anything that can manipulate a directory fd, dnl to keep our bookkeeping up-to-date. We don't have to replace dnl fstatat, since no platform has fstatat but lacks fchdir. AC_CACHE_CHECK([whether open can visit directories], [gl_cv_func_open_directory_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <fcntl.h> ]GL_MDA_DEFINES], [[return open(".", O_RDONLY) < 0;]])], [gl_cv_func_open_directory_works=yes], [gl_cv_func_open_directory_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_open_directory_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_open_directory_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_open_directory_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_open_directory_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_open_directory_works" in *yes) ;; *) AC_DEFINE([REPLACE_OPEN_DIRECTORY], [1], [Define to 1 if open() should work around the inability to open a directory.]) ;; esac fi ]) # Determine whether to use the overrides in lib/fchdir.c. AC_DEFUN([gl_TEST_FCHDIR], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([fchdir]) if test $ac_cv_func_fchdir = no; then HAVE_FCHDIR=0 fi ]) # Prerequisites of lib/fchdir.c. AC_DEFUN([gl_PREREQ_FCHDIR], [:]) ������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/copy-file-range.m4������������������������������������������������������������������0000644�0000000�0000000�00000004056�14226564451�013665� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# copy-file-range.m4 dnl Copyright 2019-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_COPY_FILE_RANGE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl Persuade glibc <unistd.h> to declare copy_file_range. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Use AC_LINK_IFELSE, rather than AC_CHECK_FUNCS or a variant, dnl since we don't want AC_CHECK_FUNCS's checks for glibc stubs. dnl Programs that use copy_file_range must fall back on read+write dnl anyway, and there's little point to substituting the Gnulib stub dnl for a glibc stub. AC_CACHE_CHECK([for copy_file_range], [gl_cv_func_copy_file_range], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[ssize_t (*func) (int, off_t *, int, off_t *, size_t, unsigned) = copy_file_range; return func (0, 0, 0, 0, 0, 0) & 127; ]]) ], [gl_cv_func_copy_file_range=yes], [gl_cv_func_copy_file_range=no]) ]) if test "$gl_cv_func_copy_file_range" != yes; then HAVE_COPY_FILE_RANGE=0 else AC_DEFINE([HAVE_COPY_FILE_RANGE], 1, [Define to 1 if the function copy_file_range exists.]) case $host_os in linux*) AC_CACHE_CHECK([whether copy_file_range is known to work], [gl_cv_copy_file_range_known_to_work], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <linux/version.h> ]], [[#if LINUX_VERSION_CODE < KERNEL_VERSION (5, 3, 0) #error "copy_file_range is buggy" #endif ]])], [gl_cv_copy_file_range_known_to_work=yes], [gl_cv_copy_file_range_known_to_work=no])]) if test "$gl_cv_copy_file_range_known_to_work" = no; then REPLACE_COPY_FILE_RANGE=1 fi;; esac fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/ltoptions.m4������������������������������������������������������������������������0000644�0000000�0000000�00000034262�13253165100�012724� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Helper functions for option handling. -*- Autoconf -*- # # Copyright (C) 2004-2005, 2007-2009, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 8 ltoptions.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTOPTIONS_VERSION], [m4_if([1])]) # _LT_MANGLE_OPTION(MACRO-NAME, OPTION-NAME) # ------------------------------------------ m4_define([_LT_MANGLE_OPTION], [[_LT_OPTION_]m4_bpatsubst($1__$2, [[^a-zA-Z0-9_]], [_])]) # _LT_SET_OPTION(MACRO-NAME, OPTION-NAME) # --------------------------------------- # Set option OPTION-NAME for macro MACRO-NAME, and if there is a # matching handler defined, dispatch to it. Other OPTION-NAMEs are # saved as a flag. m4_define([_LT_SET_OPTION], [m4_define(_LT_MANGLE_OPTION([$1], [$2]))dnl m4_ifdef(_LT_MANGLE_DEFUN([$1], [$2]), _LT_MANGLE_DEFUN([$1], [$2]), [m4_warning([Unknown $1 option '$2'])])[]dnl ]) # _LT_IF_OPTION(MACRO-NAME, OPTION-NAME, IF-SET, [IF-NOT-SET]) # ------------------------------------------------------------ # Execute IF-SET if OPTION is set, IF-NOT-SET otherwise. m4_define([_LT_IF_OPTION], [m4_ifdef(_LT_MANGLE_OPTION([$1], [$2]), [$3], [$4])]) # _LT_UNLESS_OPTIONS(MACRO-NAME, OPTION-LIST, IF-NOT-SET) # ------------------------------------------------------- # Execute IF-NOT-SET unless all options in OPTION-LIST for MACRO-NAME # are set. m4_define([_LT_UNLESS_OPTIONS], [m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [m4_ifdef(_LT_MANGLE_OPTION([$1], _LT_Option), [m4_define([$0_found])])])[]dnl m4_ifdef([$0_found], [m4_undefine([$0_found])], [$3 ])[]dnl ]) # _LT_SET_OPTIONS(MACRO-NAME, OPTION-LIST) # ---------------------------------------- # OPTION-LIST is a space-separated list of Libtool options associated # with MACRO-NAME. If any OPTION has a matching handler declared with # LT_OPTION_DEFINE, dispatch to that macro; otherwise complain about # the unknown option and exit. m4_defun([_LT_SET_OPTIONS], [# Set options m4_foreach([_LT_Option], m4_split(m4_normalize([$2])), [_LT_SET_OPTION([$1], _LT_Option)]) m4_if([$1],[LT_INIT],[ dnl dnl Simply set some default values (i.e off) if boolean options were not dnl specified: _LT_UNLESS_OPTIONS([LT_INIT], [dlopen], [enable_dlopen=no ]) _LT_UNLESS_OPTIONS([LT_INIT], [win32-dll], [enable_win32_dll=no ]) dnl dnl If no reference was made to various pairs of opposing options, then dnl we run the default mode handler for the pair. For example, if neither dnl 'shared' nor 'disable-shared' was passed, we enable building of shared dnl archives by default: _LT_UNLESS_OPTIONS([LT_INIT], [shared disable-shared], [_LT_ENABLE_SHARED]) _LT_UNLESS_OPTIONS([LT_INIT], [static disable-static], [_LT_ENABLE_STATIC]) _LT_UNLESS_OPTIONS([LT_INIT], [pic-only no-pic], [_LT_WITH_PIC]) _LT_UNLESS_OPTIONS([LT_INIT], [fast-install disable-fast-install], [_LT_ENABLE_FAST_INSTALL]) _LT_UNLESS_OPTIONS([LT_INIT], [aix-soname=aix aix-soname=both aix-soname=svr4], [_LT_WITH_AIX_SONAME([aix])]) ]) ])# _LT_SET_OPTIONS ## --------------------------------- ## ## Macros to handle LT_INIT options. ## ## --------------------------------- ## # _LT_MANGLE_DEFUN(MACRO-NAME, OPTION-NAME) # ----------------------------------------- m4_define([_LT_MANGLE_DEFUN], [[_LT_OPTION_DEFUN_]m4_bpatsubst(m4_toupper([$1__$2]), [[^A-Z0-9_]], [_])]) # LT_OPTION_DEFINE(MACRO-NAME, OPTION-NAME, CODE) # ----------------------------------------------- m4_define([LT_OPTION_DEFINE], [m4_define(_LT_MANGLE_DEFUN([$1], [$2]), [$3])[]dnl ])# LT_OPTION_DEFINE # dlopen # ------ LT_OPTION_DEFINE([LT_INIT], [dlopen], [enable_dlopen=yes ]) AU_DEFUN([AC_LIBTOOL_DLOPEN], [_LT_SET_OPTION([LT_INIT], [dlopen]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'dlopen' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_DLOPEN], []) # win32-dll # --------- # Declare package support for building win32 dll's. LT_OPTION_DEFINE([LT_INIT], [win32-dll], [enable_win32_dll=yes case $host in *-*-cygwin* | *-*-mingw* | *-*-pw32* | *-*-cegcc*) AC_CHECK_TOOL(AS, as, false) AC_CHECK_TOOL(DLLTOOL, dlltool, false) AC_CHECK_TOOL(OBJDUMP, objdump, false) ;; esac test -z "$AS" && AS=as _LT_DECL([], [AS], [1], [Assembler program])dnl test -z "$DLLTOOL" && DLLTOOL=dlltool _LT_DECL([], [DLLTOOL], [1], [DLL creation program])dnl test -z "$OBJDUMP" && OBJDUMP=objdump _LT_DECL([], [OBJDUMP], [1], [Object dumper program])dnl ])# win32-dll AU_DEFUN([AC_LIBTOOL_WIN32_DLL], [AC_REQUIRE([AC_CANONICAL_HOST])dnl _LT_SET_OPTION([LT_INIT], [win32-dll]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'win32-dll' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_WIN32_DLL], []) # _LT_ENABLE_SHARED([DEFAULT]) # ---------------------------- # implement the --enable-shared flag, and supports the 'shared' and # 'disable-shared' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_SHARED], [m4_define([_LT_ENABLE_SHARED_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([shared], [AS_HELP_STRING([--enable-shared@<:@=PKGS@:>@], [build shared libraries @<:@default=]_LT_ENABLE_SHARED_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_shared=yes ;; no) enable_shared=no ;; *) enable_shared=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_shared=yes fi done IFS=$lt_save_ifs ;; esac], [enable_shared=]_LT_ENABLE_SHARED_DEFAULT) _LT_DECL([build_libtool_libs], [enable_shared], [0], [Whether or not to build shared libraries]) ])# _LT_ENABLE_SHARED LT_OPTION_DEFINE([LT_INIT], [shared], [_LT_ENABLE_SHARED([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-shared], [_LT_ENABLE_SHARED([no])]) # Old names: AC_DEFUN([AC_ENABLE_SHARED], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[shared]) ]) AC_DEFUN([AC_DISABLE_SHARED], [_LT_SET_OPTION([LT_INIT], [disable-shared]) ]) AU_DEFUN([AM_ENABLE_SHARED], [AC_ENABLE_SHARED($@)]) AU_DEFUN([AM_DISABLE_SHARED], [AC_DISABLE_SHARED($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_SHARED], []) dnl AC_DEFUN([AM_DISABLE_SHARED], []) # _LT_ENABLE_STATIC([DEFAULT]) # ---------------------------- # implement the --enable-static flag, and support the 'static' and # 'disable-static' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_STATIC], [m4_define([_LT_ENABLE_STATIC_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([static], [AS_HELP_STRING([--enable-static@<:@=PKGS@:>@], [build static libraries @<:@default=]_LT_ENABLE_STATIC_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_static=yes ;; no) enable_static=no ;; *) enable_static=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_static=yes fi done IFS=$lt_save_ifs ;; esac], [enable_static=]_LT_ENABLE_STATIC_DEFAULT) _LT_DECL([build_old_libs], [enable_static], [0], [Whether or not to build static libraries]) ])# _LT_ENABLE_STATIC LT_OPTION_DEFINE([LT_INIT], [static], [_LT_ENABLE_STATIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-static], [_LT_ENABLE_STATIC([no])]) # Old names: AC_DEFUN([AC_ENABLE_STATIC], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[static]) ]) AC_DEFUN([AC_DISABLE_STATIC], [_LT_SET_OPTION([LT_INIT], [disable-static]) ]) AU_DEFUN([AM_ENABLE_STATIC], [AC_ENABLE_STATIC($@)]) AU_DEFUN([AM_DISABLE_STATIC], [AC_DISABLE_STATIC($@)]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AM_ENABLE_STATIC], []) dnl AC_DEFUN([AM_DISABLE_STATIC], []) # _LT_ENABLE_FAST_INSTALL([DEFAULT]) # ---------------------------------- # implement the --enable-fast-install flag, and support the 'fast-install' # and 'disable-fast-install' LT_INIT options. # DEFAULT is either 'yes' or 'no'. If omitted, it defaults to 'yes'. m4_define([_LT_ENABLE_FAST_INSTALL], [m4_define([_LT_ENABLE_FAST_INSTALL_DEFAULT], [m4_if($1, no, no, yes)])dnl AC_ARG_ENABLE([fast-install], [AS_HELP_STRING([--enable-fast-install@<:@=PKGS@:>@], [optimize for fast installation @<:@default=]_LT_ENABLE_FAST_INSTALL_DEFAULT[@:>@])], [p=${PACKAGE-default} case $enableval in yes) enable_fast_install=yes ;; no) enable_fast_install=no ;; *) enable_fast_install=no # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for pkg in $enableval; do IFS=$lt_save_ifs if test "X$pkg" = "X$p"; then enable_fast_install=yes fi done IFS=$lt_save_ifs ;; esac], [enable_fast_install=]_LT_ENABLE_FAST_INSTALL_DEFAULT) _LT_DECL([fast_install], [enable_fast_install], [0], [Whether or not to optimize for fast installation])dnl ])# _LT_ENABLE_FAST_INSTALL LT_OPTION_DEFINE([LT_INIT], [fast-install], [_LT_ENABLE_FAST_INSTALL([yes])]) LT_OPTION_DEFINE([LT_INIT], [disable-fast-install], [_LT_ENABLE_FAST_INSTALL([no])]) # Old names: AU_DEFUN([AC_ENABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], m4_if([$1], [no], [disable-])[fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'fast-install' option into LT_INIT's first parameter.]) ]) AU_DEFUN([AC_DISABLE_FAST_INSTALL], [_LT_SET_OPTION([LT_INIT], [disable-fast-install]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'disable-fast-install' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_ENABLE_FAST_INSTALL], []) dnl AC_DEFUN([AM_DISABLE_FAST_INSTALL], []) # _LT_WITH_AIX_SONAME([DEFAULT]) # ---------------------------------- # implement the --with-aix-soname flag, and support the `aix-soname=aix' # and `aix-soname=both' and `aix-soname=svr4' LT_INIT options. DEFAULT # is either `aix', `both' or `svr4'. If omitted, it defaults to `aix'. m4_define([_LT_WITH_AIX_SONAME], [m4_define([_LT_WITH_AIX_SONAME_DEFAULT], [m4_if($1, svr4, svr4, m4_if($1, both, both, aix))])dnl shared_archive_member_spec= case $host,$enable_shared in power*-*-aix[[5-9]]*,yes) AC_MSG_CHECKING([which variant of shared library versioning to provide]) AC_ARG_WITH([aix-soname], [AS_HELP_STRING([--with-aix-soname=aix|svr4|both], [shared library versioning (aka "SONAME") variant to provide on AIX, @<:@default=]_LT_WITH_AIX_SONAME_DEFAULT[@:>@.])], [case $withval in aix|svr4|both) ;; *) AC_MSG_ERROR([Unknown argument to --with-aix-soname]) ;; esac lt_cv_with_aix_soname=$with_aix_soname], [AC_CACHE_VAL([lt_cv_with_aix_soname], [lt_cv_with_aix_soname=]_LT_WITH_AIX_SONAME_DEFAULT) with_aix_soname=$lt_cv_with_aix_soname]) AC_MSG_RESULT([$with_aix_soname]) if test aix != "$with_aix_soname"; then # For the AIX way of multilib, we name the shared archive member # based on the bitwidth used, traditionally 'shr.o' or 'shr_64.o', # and 'shr.imp' or 'shr_64.imp', respectively, for the Import File. # Even when GNU compilers ignore OBJECT_MODE but need '-maix64' flag, # the AIX toolchain works better with OBJECT_MODE set (default 32). if test 64 = "${OBJECT_MODE-32}"; then shared_archive_member_spec=shr_64 else shared_archive_member_spec=shr fi fi ;; *) with_aix_soname=aix ;; esac _LT_DECL([], [shared_archive_member_spec], [0], [Shared archive member basename, for filename based shared library versioning on AIX])dnl ])# _LT_WITH_AIX_SONAME LT_OPTION_DEFINE([LT_INIT], [aix-soname=aix], [_LT_WITH_AIX_SONAME([aix])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=both], [_LT_WITH_AIX_SONAME([both])]) LT_OPTION_DEFINE([LT_INIT], [aix-soname=svr4], [_LT_WITH_AIX_SONAME([svr4])]) # _LT_WITH_PIC([MODE]) # -------------------- # implement the --with-pic flag, and support the 'pic-only' and 'no-pic' # LT_INIT options. # MODE is either 'yes' or 'no'. If omitted, it defaults to 'both'. m4_define([_LT_WITH_PIC], [AC_ARG_WITH([pic], [AS_HELP_STRING([--with-pic@<:@=PKGS@:>@], [try to use only PIC/non-PIC objects @<:@default=use both@:>@])], [lt_p=${PACKAGE-default} case $withval in yes|no) pic_mode=$withval ;; *) pic_mode=default # Look at the argument we got. We use all the common list separators. lt_save_ifs=$IFS; IFS=$IFS$PATH_SEPARATOR, for lt_pkg in $withval; do IFS=$lt_save_ifs if test "X$lt_pkg" = "X$lt_p"; then pic_mode=yes fi done IFS=$lt_save_ifs ;; esac], [pic_mode=m4_default([$1], [default])]) _LT_DECL([], [pic_mode], [0], [What type of objects to build])dnl ])# _LT_WITH_PIC LT_OPTION_DEFINE([LT_INIT], [pic-only], [_LT_WITH_PIC([yes])]) LT_OPTION_DEFINE([LT_INIT], [no-pic], [_LT_WITH_PIC([no])]) # Old name: AU_DEFUN([AC_LIBTOOL_PICMODE], [_LT_SET_OPTION([LT_INIT], [pic-only]) AC_DIAGNOSE([obsolete], [$0: Remove this warning and the call to _LT_SET_OPTION when you put the 'pic-only' option into LT_INIT's first parameter.]) ]) dnl aclocal-1.4 backwards compatibility: dnl AC_DEFUN([AC_LIBTOOL_PICMODE], []) ## ----------------- ## ## LTDL_INIT Options ## ## ----------------- ## m4_define([_LTDL_MODE], []) LT_OPTION_DEFINE([LTDL_INIT], [nonrecursive], [m4_define([_LTDL_MODE], [nonrecursive])]) LT_OPTION_DEFINE([LTDL_INIT], [recursive], [m4_define([_LTDL_MODE], [recursive])]) LT_OPTION_DEFINE([LTDL_INIT], [subproject], [m4_define([_LTDL_MODE], [subproject])]) m4_define([_LTDL_TYPE], []) LT_OPTION_DEFINE([LTDL_INIT], [installable], [m4_define([_LTDL_TYPE], [installable])]) LT_OPTION_DEFINE([LTDL_INIT], [convenience], [m4_define([_LTDL_TYPE], [convenience])]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/sys_time_h.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000010420�14226564452�013040� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a replacement for <sys/time.h>. # serial 12 # Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Martin Lambers. AC_DEFUN_ONCE([gl_SYS_TIME_H], [ dnl Use AC_REQUIRE here, so that the REPLACE_GETTIMEOFDAY=0 statement dnl below is expanded once only, before all REPLACE_GETTIMEOFDAY=1 dnl statements that occur in other macros. AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) AC_CHECK_HEADERS_ONCE([sys/time.h]) gl_CHECK_NEXT_HEADERS([sys/time.h]) if test $ac_cv_header_sys_time_h != yes; then HAVE_SYS_TIME_H=0 fi dnl On native Windows with MSVC, 'struct timeval' is defined in <winsock2.h> dnl only. So include that header in the list. gl_PREREQ_SYS_H_WINSOCK2 AC_CACHE_CHECK([for struct timeval], [gl_cv_sys_struct_timeval], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#if HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <time.h> #if HAVE_WINSOCK2_H # include <winsock2.h> #endif ]], [[static struct timeval x; x.tv_sec = x.tv_usec;]])], [gl_cv_sys_struct_timeval=yes], [gl_cv_sys_struct_timeval=no]) ]) if test $gl_cv_sys_struct_timeval != yes; then HAVE_STRUCT_TIMEVAL=0 else dnl On native Windows with a 64-bit 'time_t', 'struct timeval' is defined dnl (in <sys/time.h> and <winsock2.h> for mingw64, in <winsock2.h> only dnl for MSVC) with a tv_sec field of type 'long' (32-bit!), which is dnl smaller than the 'time_t' type mandated by POSIX. dnl On OpenBSD 5.1 amd64, tv_sec is 64 bits and time_t 32 bits, but dnl that is good enough. AC_CACHE_CHECK([for wide-enough struct timeval.tv_sec member], [gl_cv_sys_struct_timeval_tv_sec], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#if HAVE_SYS_TIME_H #include <sys/time.h> #endif #include <time.h> #if HAVE_WINSOCK2_H # include <winsock2.h> #endif ]], [[static struct timeval x; typedef int verify_tv_sec_type[ sizeof (time_t) <= sizeof x.tv_sec ? 1 : -1 ]; ]])], [gl_cv_sys_struct_timeval_tv_sec=yes], [gl_cv_sys_struct_timeval_tv_sec=no]) ]) if test $gl_cv_sys_struct_timeval_tv_sec != yes; then REPLACE_STRUCT_TIMEVAL=1 fi fi dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[ #if HAVE_SYS_TIME_H # include <sys/time.h> #endif #include <time.h> ]], [gettimeofday]) ]) # gl_SYS_TIME_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_SYS_TIME_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_SYS_TIME_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_SYS_TIME_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_SYS_TIME_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_GETTIMEOFDAY]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_SYS_TIME_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_SYS_TIME_H_DEFAULTS]) ]) AC_DEFUN([gl_SYS_TIME_H_DEFAULTS], [ dnl Assume POSIX behavior unless another module says otherwise. HAVE_GETTIMEOFDAY=1; AC_SUBST([HAVE_GETTIMEOFDAY]) HAVE_STRUCT_TIMEVAL=1; AC_SUBST([HAVE_STRUCT_TIMEVAL]) HAVE_SYS_TIME_H=1; AC_SUBST([HAVE_SYS_TIME_H]) REPLACE_GETTIMEOFDAY=0; AC_SUBST([REPLACE_GETTIMEOFDAY]) REPLACE_STRUCT_TIMEVAL=0; AC_SUBST([REPLACE_STRUCT_TIMEVAL]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/random_r.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000002052�14226564452�012500� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 5 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RANDOM_R], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_HEADERS([random.h], [], [], [AC_INCLUDES_DEFAULT]) if test $ac_cv_header_random_h = no; then HAVE_RANDOM_H=0 fi AC_CHECK_TYPES([struct random_data], [], [HAVE_STRUCT_RANDOM_DATA=0], [[#include <stdlib.h> #if HAVE_RANDOM_H # include <random.h> #endif ]]) dnl On AIX and OSF/1, these functions exist, but with different declarations. dnl Override them all. case "$host_os" in aix* | osf*) REPLACE_RANDOM_R=1 ;; *) AC_CHECK_FUNCS([random_r]) if test $ac_cv_func_random_r = no; then HAVE_RANDOM_R=0 fi ;; esac ]) # Prerequisites of lib/random_r.c. AC_DEFUN([gl_PREREQ_RANDOM_R], [ : ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/rmdir.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000003611�14226564452�012016� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rmdir.m4 serial 18 dnl Copyright (C) 2002, 2005, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RMDIR], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Detect cygwin 1.5.x bug. AC_CHECK_HEADERS_ONCE([unistd.h]) AC_CACHE_CHECK([whether rmdir works], [gl_cv_func_rmdir_works], [mkdir conftest.dir touch conftest.file AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdio.h> #include <errno.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <direct.h> #endif ]GL_MDA_DEFINES], [[int result = 0; if (!rmdir ("conftest.file/")) result |= 1; else if (errno != ENOTDIR) result |= 2; if (!rmdir ("conftest.dir/./")) result |= 4; return result; ]])], [gl_cv_func_rmdir_works=yes], [gl_cv_func_rmdir_works=no], [case "$host_os" in # Guess yes on Linux systems. linux-* | linux) gl_cv_func_rmdir_works="guessing yes" ;; # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_rmdir_works="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_rmdir_works="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_rmdir_works="$gl_cross_guess_normal" ;; esac ]) rm -rf conftest.dir conftest.file]) case "$gl_cv_func_rmdir_works" in *yes) ;; *) REPLACE_RMDIR=1 ;; esac ]) �����������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/selinux-label-h.m4������������������������������������������������������������������0000644�0000000�0000000�00000001053�14226564447�013674� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Copyright 2020-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # From Paul Eggert # Provide <selinux/label.h>, if necessary. AC_DEFUN([gl_HEADERS_SELINUX_LABEL_H], [ AC_REQUIRE([gl_LIBSELINUX]) GL_GENERATE_SELINUX_LABEL_H=true if test "$with_selinux" != no; then AC_CHECK_HEADERS([selinux/label.h], [GL_GENERATE_SELINUX_LABEL_H=false]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fdopendir.m4������������������������������������������������������������������������0000644�0000000�0000000�00000003661�14226564447�012664� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 14 # See if we need to provide fdopendir. dnl Copyright (C) 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # Written by Eric Blake. AC_DEFUN([gl_FUNC_FDOPENDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl FreeBSD 7.3 has the function, but failed to declare it. AC_CHECK_DECLS([fdopendir], [], [HAVE_DECL_FDOPENDIR=0], [[ #include <dirent.h> ]]) AC_CHECK_FUNCS_ONCE([fdopendir]) if test $ac_cv_func_fdopendir = no; then HAVE_FDOPENDIR=0 else AC_CACHE_CHECK([whether fdopendir works], [gl_cv_func_fdopendir_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM([[ #include <dirent.h> #include <fcntl.h> #include <unistd.h> ]GL_MDA_DEFINES[ #if !HAVE_DECL_FDOPENDIR extern # ifdef __cplusplus "C" # endif DIR *fdopendir (int); #endif ]], [[int result = 0; int fd = open ("conftest.c", O_RDONLY); if (fd < 0) result |= 1; if (fdopendir (fd)) result |= 2; if (close (fd)) result |= 4; return result; ]])], [gl_cv_func_fdopendir_works=yes], [gl_cv_func_fdopendir_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu*) gl_cv_func_fdopendir_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_fdopendir_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fdopendir_works="$gl_cross_guess_normal" ;; esac ])]) case "$gl_cv_func_fdopendir_works" in *yes) ;; *) REPLACE_FDOPENDIR=1 ;; esac fi ]) �������������������������������������������������������������������������������recutils-1.9/m4/include_next.m4���������������������������������������������������������������������0000644�0000000�0000000�00000021034�14226564452�013361� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# include_next.m4 serial 26 dnl Copyright (C) 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert and Derek Price. dnl Sets INCLUDE_NEXT, INCLUDE_NEXT_AS_FIRST_DIRECTIVE, PRAGMA_SYSTEM_HEADER, dnl and PRAGMA_COLUMNS. dnl dnl INCLUDE_NEXT expands to 'include_next' if the compiler supports it, or to dnl 'include' otherwise. dnl dnl INCLUDE_NEXT_AS_FIRST_DIRECTIVE expands to 'include_next' if the compiler dnl supports it in the special case that it is the first include directive in dnl the given file, or to 'include' otherwise. dnl dnl PRAGMA_SYSTEM_HEADER can be used in files that contain #include_next, dnl so as to avoid GCC warnings when the gcc option -pedantic is used. dnl '#pragma GCC system_header' has the same effect as if the file was found dnl through the include search path specified with '-isystem' options (as dnl opposed to the search path specified with '-I' options). Namely, gcc dnl does not warn about some things, and on some systems (Solaris and Interix) dnl __STDC__ evaluates to 0 instead of to 1. The latter is an undesired side dnl effect; we are therefore careful to use 'defined __STDC__' or '1' instead dnl of plain '__STDC__'. dnl dnl PRAGMA_COLUMNS can be used in files that override system header files, so dnl as to avoid compilation errors on HP NonStop systems when the gnulib file dnl is included by a system header file that does a "#pragma COLUMNS 80" (which dnl has the effect of truncating the lines of that file and all files that it dnl includes to 80 columns) and the gnulib file has lines longer than 80 dnl columns. AC_DEFUN([gl_INCLUDE_NEXT], [ AC_LANG_PREPROC_REQUIRE() AC_CACHE_CHECK([whether the preprocessor supports include_next], [gl_cv_have_include_next], [rm -rf conftestd1a conftestd1b conftestd2 mkdir conftestd1a conftestd1b conftestd2 dnl IBM C 9.0, 10.1 (original versions, prior to the 2009-01 updates) on dnl AIX 6.1 support include_next when used as first preprocessor directive dnl in a file, but not when preceded by another include directive. Check dnl for this bug by including <stdio.h>. dnl Additionally, with this same compiler, include_next is a no-op when dnl used in a header file that was included by specifying its absolute dnl file name. Despite these two bugs, include_next is used in the dnl compiler's <math.h>. By virtue of the second bug, we need to use dnl include_next as well in this case. cat <<EOF > conftestd1a/conftest.h #define DEFINED_IN_CONFTESTD1 #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd1b/conftest.h #define DEFINED_IN_CONFTESTD1 #include <stdio.h> #include_next <conftest.h> #ifdef DEFINED_IN_CONFTESTD2 int foo; #else #error "include_next doesn't work" #endif EOF cat <<EOF > conftestd2/conftest.h #ifndef DEFINED_IN_CONFTESTD1 #error "include_next test doesn't work" #endif #define DEFINED_IN_CONFTESTD2 EOF gl_save_CPPFLAGS="$CPPFLAGS" CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1b -Iconftestd2" dnl We intentionally avoid using AC_LANG_SOURCE here. AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], [gl_cv_have_include_next=yes], [CPPFLAGS="$gl_save_CPPFLAGS -Iconftestd1a -Iconftestd2" AC_COMPILE_IFELSE([AC_LANG_DEFINES_PROVIDED[#include <conftest.h>]], [gl_cv_have_include_next=buggy], [gl_cv_have_include_next=no]) ]) CPPFLAGS="$gl_save_CPPFLAGS" rm -rf conftestd1a conftestd1b conftestd2 ]) PRAGMA_SYSTEM_HEADER= if test $gl_cv_have_include_next = yes; then INCLUDE_NEXT=include_next INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next if test -n "$GCC"; then PRAGMA_SYSTEM_HEADER='#pragma GCC system_header' fi else if test $gl_cv_have_include_next = buggy; then INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include_next else INCLUDE_NEXT=include INCLUDE_NEXT_AS_FIRST_DIRECTIVE=include fi fi AC_SUBST([INCLUDE_NEXT]) AC_SUBST([INCLUDE_NEXT_AS_FIRST_DIRECTIVE]) AC_SUBST([PRAGMA_SYSTEM_HEADER]) dnl HP NonStop systems, which define __TANDEM, limit the line length dnl after including some system header files. AC_CACHE_CHECK([whether source code line length is unlimited], [gl_cv_source_line_length_unlimited], [AC_EGREP_CPP([choke me], [ #ifdef __TANDEM choke me #endif ], [gl_cv_source_line_length_unlimited=no], [gl_cv_source_line_length_unlimited=yes]) ]) if test $gl_cv_source_line_length_unlimited = no; then PRAGMA_COLUMNS="#pragma COLUMNS 10000" else PRAGMA_COLUMNS= fi AC_SUBST([PRAGMA_COLUMNS]) ]) # gl_CHECK_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------------ # For each arg foo.h, if #include_next works, define NEXT_FOO_H to be # '<foo.h>'; otherwise define it to be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # Also, if #include_next works as first preprocessing directive in a file, # define NEXT_AS_FIRST_DIRECTIVE_FOO_H to be '<foo.h>'; otherwise define it to # be # '"///usr/include/foo.h"', or whatever other absolute file name is suitable. # That way, a header file with the following line: # #@INCLUDE_NEXT@ @NEXT_FOO_H@ # or # #@INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ @NEXT_AS_FIRST_DIRECTIVE_FOO_H@ # behaves (after sed substitution) as if it contained # #include_next <foo.h> # even if the compiler does not support include_next. # The three "///" are to pacify Sun C 5.8, which otherwise would say # "warning: #include of /usr/include/... may be non-portable". # Use '""', not '<>', so that the /// cannot be confused with a C99 comment. # Note: This macro assumes that the header file is not empty after # preprocessing, i.e. it does not only define preprocessor macros but also # provides some type/enum definitions or function/variable declarations. # # This macro also checks whether each header exists, by invoking # AC_CHECK_HEADERS_ONCE or AC_CHECK_HEADERS on each argument. AC_DEFUN([gl_CHECK_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [check]) ]) # gl_NEXT_HEADERS(HEADER1 HEADER2 ...) # ------------------------------------ # Like gl_CHECK_NEXT_HEADERS, except do not check whether the headers exist. # This is suitable for headers like <stddef.h> that are standardized by C89 # and therefore can be assumed to exist. AC_DEFUN([gl_NEXT_HEADERS], [ gl_NEXT_HEADERS_INTERNAL([$1], [assume]) ]) # The guts of gl_CHECK_NEXT_HEADERS and gl_NEXT_HEADERS. AC_DEFUN([gl_NEXT_HEADERS_INTERNAL], [ AC_REQUIRE([gl_INCLUDE_NEXT]) AC_REQUIRE([AC_CANONICAL_HOST]) m4_if([$2], [check], [AC_CHECK_HEADERS_ONCE([$1]) ]) m4_foreach_w([gl_HEADER_NAME], [$1], [AS_VAR_PUSHDEF([gl_next_header], [gl_cv_next_]m4_defn([gl_HEADER_NAME])) if test $gl_cv_have_include_next = yes; then AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) else AC_CACHE_CHECK( [absolute name of <]m4_defn([gl_HEADER_NAME])[>], [gl_next_header], [m4_if([$2], [check], [AS_VAR_PUSHDEF([gl_header_exists], [ac_cv_header_]m4_defn([gl_HEADER_NAME])) if test AS_VAR_GET([gl_header_exists]) = yes; then AS_VAR_POPDEF([gl_header_exists]) ]) gl_ABSOLUTE_HEADER_ONE(gl_HEADER_NAME) AS_VAR_COPY([gl_header], [gl_cv_absolute_]AS_TR_SH(gl_HEADER_NAME)) AS_VAR_SET([gl_next_header], ['"'$gl_header'"']) m4_if([$2], [check], [else AS_VAR_SET([gl_next_header], ['<'gl_HEADER_NAME'>']) fi ]) ]) fi AC_SUBST( AS_TR_CPP([NEXT_]m4_defn([gl_HEADER_NAME])), [AS_VAR_GET([gl_next_header])]) if test $gl_cv_have_include_next = yes || test $gl_cv_have_include_next = buggy; then # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include_next' gl_next_as_first_directive='<'gl_HEADER_NAME'>' else # INCLUDE_NEXT_AS_FIRST_DIRECTIVE='include' gl_next_as_first_directive=AS_VAR_GET([gl_next_header]) fi AC_SUBST( AS_TR_CPP([NEXT_AS_FIRST_DIRECTIVE_]m4_defn([gl_HEADER_NAME])), [$gl_next_as_first_directive]) AS_VAR_POPDEF([gl_next_header])]) ]) # Autoconf 2.68 added warnings for our use of AC_COMPILE_IFELSE; # this fallback is safe for all earlier autoconf versions. m4_define_default([AC_LANG_DEFINES_PROVIDED]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/time_r.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000006525�14226564453�012170� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������dnl Reentrant time functions: localtime_r, gmtime_r. dnl Copyright (C) 2003, 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Written by Paul Eggert. AC_DEFUN([gl_TIME_R], [ dnl Persuade glibc and Solaris <time.h> to declare localtime_r. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_TIME_H_DEFAULTS]) AC_REQUIRE([AC_C_RESTRICT]) dnl Some systems don't declare localtime_r() and gmtime_r() if _REENTRANT is dnl not defined. AC_CHECK_DECLS([localtime_r], [], [], [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> ]]) if test $ac_cv_have_decl_localtime_r = no; then HAVE_DECL_LOCALTIME_R=0 fi AC_CHECK_FUNCS_ONCE([localtime_r]) if test $ac_cv_func_localtime_r = yes; then HAVE_LOCALTIME_R=1 AC_CACHE_CHECK([whether localtime_r is compatible with its POSIX signature], [gl_cv_time_r_posix], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> ]], [[/* We don't need to append 'restrict's to the argument types, even though the POSIX signature has the 'restrict's, since C99 says they can't affect type compatibility. */ struct tm * (*ptr) (time_t const *, struct tm *) = localtime_r; if (ptr) return 0; /* Check the return type is a pointer. On HP-UX 10 it is 'int'. */ *localtime_r (0, 0);]]) ], [gl_cv_time_r_posix=yes], [gl_cv_time_r_posix=no]) ]) if test $gl_cv_time_r_posix = yes; then REPLACE_LOCALTIME_R=0 else REPLACE_LOCALTIME_R=1 fi else HAVE_LOCALTIME_R=0 dnl On mingw, localtime_r() is defined as an inline function; use through a dnl direct function call works but the use as a function pointer leads to a dnl link error. AC_CACHE_CHECK([whether localtime_r exists as an inline function], [gl_cv_func_localtime_r_inline], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[/* mingw's <time.h> provides the functions asctime_r, ctime_r, gmtime_r, localtime_r only if <unistd.h> or <pthread.h> has been included before. */ #if defined __MINGW32__ # include <unistd.h> #endif #include <time.h> ]], [[time_t a; struct tm r; localtime_r (&a, &r); ]]) ], [gl_cv_func_localtime_r_inline=yes], [gl_cv_func_localtime_r_inline=no]) ]) if test $gl_cv_func_localtime_r_inline = yes; then REPLACE_LOCALTIME_R=1 fi fi ]) # Prerequisites of lib/time_r.c. AC_DEFUN([gl_PREREQ_TIME_R], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/intmax_t.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000003544�14226564452�012531� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intmax_t.m4 serial 9 dnl Copyright (C) 1997-2004, 2006-2007, 2009-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Paul Eggert. AC_PREREQ([2.53]) # Define intmax_t to 'long' or 'long long' # if it is not already defined in <stdint.h> or <inttypes.h>. AC_DEFUN([gl_AC_TYPE_INTMAX_T], [ dnl For simplicity, we assume that a header file defines 'intmax_t' if and dnl only if it defines 'uintmax_t'. AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) if test $gl_cv_header_inttypes_h = no && test $gl_cv_header_stdint_h = no; then AC_DEFINE_UNQUOTED([intmax_t], [long long], [Define to long or long long if <inttypes.h> and <stdint.h> don't define.]) else AC_DEFINE([HAVE_INTMAX_T], [1], [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) fi ]) dnl An alternative would be to explicitly test for 'intmax_t'. AC_DEFUN([gt_AC_TYPE_INTMAX_T], [ AC_REQUIRE([gl_AC_HEADER_INTTYPES_H]) AC_REQUIRE([gl_AC_HEADER_STDINT_H]) AC_CACHE_CHECK([for intmax_t], [gt_cv_c_intmax_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <stddef.h> #include <stdlib.h> #if HAVE_STDINT_H_WITH_UINTMAX #include <stdint.h> #endif #if HAVE_INTTYPES_H_WITH_UINTMAX #include <inttypes.h> #endif ]], [[intmax_t x = -1; return !x;]])], [gt_cv_c_intmax_t=yes], [gt_cv_c_intmax_t=no])]) if test $gt_cv_c_intmax_t = yes; then AC_DEFINE([HAVE_INTMAX_T], [1], [Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>.]) else AC_DEFINE_UNQUOTED([intmax_t], [long long], [Define to long or long long if <stdint.h> and <inttypes.h> don't define.]) fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/free.m4�����������������������������������������������������������������������������0000644�0000000�0000000�00000003710�14226564447�011626� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# free.m4 serial 6 # Copyright (C) 2003-2005, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Bruno Haible. AC_DEFUN([gl_FUNC_FREE], [ AC_REQUIRE([gl_STDLIB_H_DEFAULTS]) dnl In the next release of POSIX, free must preserve errno. dnl https://www.austingroupbugs.net/view.php?id=385 dnl https://sourceware.org/bugzilla/show_bug.cgi?id=17924 dnl So far, we know of three platforms that do this: dnl * glibc >= 2.33, thanks to the fix for this bug: dnl <https://sourceware.org/bugzilla/show_bug.cgi?id=17924> dnl * OpenBSD >= 4.5, thanks to this commit: dnl <https://cvsweb.openbsd.org/cgi-bin/cvsweb/src/lib/libc/stdlib/malloc.c.diff?r1=1.100&r2=1.101&f=h> dnl * Solaris, because its malloc() implementation is based on brk(), dnl not mmap(); hence its free() implementation makes no system calls. dnl For other platforms, you can only be sure if they state it in their dnl documentation, or by code inspection of the free() implementation in libc. AC_CACHE_CHECK([whether free is known to preserve errno], [gl_cv_func_free_preserves_errno], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdlib.h> ]], [[#if 2 < __GLIBC__ + (33 <= __GLIBC_MINOR__) #elif defined __OpenBSD__ #elif defined __sun #else #error "'free' is not known to preserve errno" #endif ]])], [gl_cv_func_free_preserves_errno=yes], [gl_cv_func_free_preserves_errno=no]) ]) case $gl_cv_func_free_preserves_errno in *yes) AC_DEFINE([HAVE_FREE_POSIX], [1], [Define if the 'free' function is guaranteed to preserve errno.]) ;; *) REPLACE_FREE=1 ;; esac ]) # Prerequisites of lib/free.c. AC_DEFUN([gl_PREREQ_FREE], [:]) ��������������������������������������������������������recutils-1.9/m4/filenamecat.m4����������������������������������������������������������������������0000644�0000000�0000000�00000000755�14226564447�013163� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# filenamecat.m4 serial 11 dnl Copyright (C) 2002-2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FILE_NAME_CONCAT], [ AC_REQUIRE([gl_FILE_NAME_CONCAT_LGPL]) ]) AC_DEFUN([gl_FILE_NAME_CONCAT_LGPL], [ dnl Prerequisites of lib/filenamecat-lgpl.c. AC_CHECK_FUNCS_ONCE([mempcpy]) ]) �������������������recutils-1.9/m4/acl.m4������������������������������������������������������������������������������0000644�0000000�0000000�00000016506�14226564451�011446� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# acl.m4 - check for access control list (ACL) primitives # serial 24 # Copyright (C) 2002, 2004-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Jim Meyering. AC_DEFUN([gl_FUNC_ACL_ARG], [ gl_need_lib_has_acl= AC_ARG_ENABLE([acl], AS_HELP_STRING([--disable-acl], [do not support ACLs]), , [enable_acl=auto]) ]) AC_DEFUN([gl_FUNC_ACL], [ AC_REQUIRE([gl_FUNC_ACL_ARG]) AC_CHECK_FUNCS_ONCE([fchmod]) LIB_ACL= use_acl=0 if test "$enable_acl" != no; then dnl On all platforms, the ACL related API is declared in <sys/acl.h>. AC_CHECK_HEADERS([sys/acl.h]) if test $ac_cv_header_sys_acl_h = yes; then ac_save_LIBS=$LIBS dnl Test for POSIX-draft-like API (GNU/Linux, FreeBSD, Mac OS X, dnl IRIX, Tru64, Cygwin >= 2.5). dnl -lacl is needed on GNU/Linux, -lpacl on OSF/1. if test $use_acl = 0; then AC_SEARCH_LIBS([acl_get_file], [acl pacl], [if test "$ac_cv_search_acl_get_file" != "none required"; then LIB_ACL=$ac_cv_search_acl_get_file fi AC_CHECK_FUNCS( [acl_get_file acl_get_fd acl_set_file acl_set_fd \ acl_free acl_from_mode acl_from_text \ acl_delete_def_file acl_extended_file \ acl_delete_fd_np acl_delete_file_np \ acl_copy_ext_native acl_create_entry_np \ acl_to_short_text acl_free_text]) # If the acl_get_file bug is detected, don't enable the ACL support. gl_ACL_GET_FILE([use_acl=1], []) if test $use_acl = 1; then dnl On GNU/Linux, an additional API is declared in <acl/libacl.h>. AC_CHECK_HEADERS([acl/libacl.h]) AC_REPLACE_FUNCS([acl_entries]) AC_CACHE_CHECK([for ACL_FIRST_ENTRY], [gl_cv_acl_ACL_FIRST_ENTRY], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/acl.h> int type = ACL_FIRST_ENTRY;]])], [gl_cv_acl_ACL_FIRST_ENTRY=yes], [gl_cv_acl_ACL_FIRST_ENTRY=no])]) if test $gl_cv_acl_ACL_FIRST_ENTRY = yes; then AC_DEFINE([HAVE_ACL_FIRST_ENTRY], [1], [Define to 1 if the constant ACL_FIRST_ENTRY exists.]) fi dnl On Mac OS X, other types of ACLs are supported. AC_CACHE_CHECK([for ACL_TYPE_EXTENDED], [gl_cv_acl_ACL_TYPE_EXTENDED], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/acl.h> int type = ACL_TYPE_EXTENDED;]])], [gl_cv_acl_ACL_TYPE_EXTENDED=yes], [gl_cv_acl_ACL_TYPE_EXTENDED=no])]) if test $gl_cv_acl_ACL_TYPE_EXTENDED = yes; then AC_DEFINE([HAVE_ACL_TYPE_EXTENDED], [1], [Define to 1 if the ACL type ACL_TYPE_EXTENDED exists.]) fi else LIB_ACL= fi ]) fi dnl Test for Solaris API (Solaris, Cygwin). if test $use_acl = 0; then AC_CHECK_FUNCS([facl]) if test $ac_cv_func_facl = yes; then AC_SEARCH_LIBS([acl_trivial], [sec], [if test "$ac_cv_search_acl_trivial" != "none required"; then LIB_ACL=$ac_cv_search_acl_trivial fi ]) AC_CHECK_FUNCS([acl_trivial]) use_acl=1 fi fi dnl Test for HP-UX API. if test $use_acl = 0; then AC_CHECK_FUNCS([getacl]) if test $ac_cv_func_getacl = yes; then use_acl=1 fi dnl Test for HP-UX 11.11 API. AC_CHECK_HEADERS([aclv.h], [], [], [#include <sys/types.h>]) fi dnl Test for AIX API (AIX 5.3 or newer). if test $use_acl = 0; then AC_CHECK_FUNCS([aclx_get]) if test $ac_cv_func_aclx_get = yes; then use_acl=1 fi fi dnl Test for older AIX API. if test $use_acl = 0 || test "$ac_cv_func_aclx_get" = yes; then AC_CHECK_FUNCS([statacl]) if test $ac_cv_func_statacl = yes; then use_acl=1 fi fi dnl Test for NonStop Kernel API. if test $use_acl = 0; then AC_CHECK_FUNCS([aclsort]) if test $ac_cv_func_aclsort = yes; then use_acl=1 fi fi LIBS=$ac_save_LIBS fi if test "$enable_acl$use_acl" = yes0; then AC_MSG_ERROR([ACLs enabled but support not detected]) elif test "$enable_acl$use_acl" = auto0; then AC_MSG_WARN([libacl development library was not found or not usable.]) AC_MSG_WARN([AC_PACKAGE_NAME will be built without ACL support.]) fi fi test -n "$gl_need_lib_has_acl" && LIB_HAS_ACL=$LIB_ACL AC_SUBST([LIB_ACL]) AC_DEFINE_UNQUOTED([USE_ACL], [$use_acl], [Define to nonzero if you want access control list support.]) USE_ACL=$use_acl AC_SUBST([USE_ACL]) ]) # gl_ACL_GET_FILE(IF-WORKS, IF-NOT) # --------------------------------- # If 'acl_get_file' works (does not have a particular bug), # run IF-WORKS, otherwise, IF-NOT. # When building natively, test for a Darwin 8.7.0 bug, whereby acl_get_file # returns NULL, but sets errno = ENOENT for an existing file or directory. # When cross-compiling, assume that this old bug no longer applies. AC_DEFUN([gl_ACL_GET_FILE], [ AC_CACHE_CHECK([for working acl_get_file], [gl_cv_func_working_acl_get_file], [gl_cv_func_working_acl_get_file=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/acl.h> #include <errno.h> ]], [[acl_t acl = acl_get_file (".", ACL_TYPE_ACCESS); return acl ? acl_free (acl) != 0 : errno == ENOENT; ]])], [if test $cross_compiling = yes; then gl_cv_func_working_acl_get_file="guessing yes" elif ./conftest$ac_exeext; then gl_cv_func_working_acl_get_file=yes fi])]) AS_IF([test "$gl_cv_func_working_acl_get_file" != no], [$1], [$2]) ]) # On GNU/Linux, testing if a file has an acl can be done with the getxattr # syscall which doesn't require linking against additional libraries. AC_DEFUN([gl_FILE_HAS_ACL], [ AC_REQUIRE([gl_FUNC_ACL_ARG]) if test "$enable_acl" != no; then AC_CACHE_CHECK([for getxattr with XATTR_NAME_POSIX_ACL macros], [gl_cv_getxattr_with_posix_acls], [gl_cv_getxattr_with_posix_acls=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> #include <sys/xattr.h> #include <linux/xattr.h> ]], [[ssize_t a = getxattr (".", XATTR_NAME_POSIX_ACL_ACCESS, 0, 0); ssize_t b = getxattr (".", XATTR_NAME_POSIX_ACL_DEFAULT, 0, 0); return a < 0 || b < 0; ]])], [gl_cv_getxattr_with_posix_acls=yes])]) fi if test "$gl_cv_getxattr_with_posix_acls" = yes; then LIB_HAS_ACL= AC_DEFINE([GETXATTR_WITH_POSIX_ACLS], 1, [Define to 1 if getxattr works with XATTR_NAME_POSIX_ACL_ACCESS and XATTR_NAME_POSIX_ACL_DEFAULT.]) else dnl Set gl_need_lib_has_acl to a nonempty value, so that any dnl later gl_FUNC_ACL call will set LIB_HAS_ACL=$LIB_ACL. gl_need_lib_has_acl=1 LIB_HAS_ACL=$LIB_ACL fi AC_SUBST([LIB_HAS_ACL]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/iconv.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000022072�13413351610�012004� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# iconv.m4 serial 19 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2007-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_ICONV_LINKFLAGS_BODY], [ dnl Prerequisites of AC_LIB_LINKFLAGS_BODY. AC_REQUIRE([AC_LIB_PREPARE_PREFIX]) AC_REQUIRE([AC_LIB_RPATH]) dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_LIB_LINKFLAGS_BODY([iconv]) ]) AC_DEFUN([AM_ICONV_LINK], [ dnl Some systems have iconv in libc, some have it in libiconv (OSF/1 and dnl those with the standalone portable GNU libiconv installed). AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl Search for libiconv and define LIBICONV, LTLIBICONV and INCICONV dnl accordingly. AC_REQUIRE([AM_ICONV_LINKFLAGS_BODY]) dnl Add $INCICONV to CPPFLAGS before performing the following checks, dnl because if the user has installed libiconv and not disabled its use dnl via --without-libiconv-prefix, he wants to use it. The first dnl AC_LINK_IFELSE will then fail, the second AC_LINK_IFELSE will succeed. am_save_CPPFLAGS="$CPPFLAGS" AC_LIB_APPENDTOVAR([CPPFLAGS], [$INCICONV]) AC_CACHE_CHECK([for iconv], [am_cv_func_iconv], [ am_cv_func_iconv="no, consider installing GNU libiconv" am_cv_lib_iconv=no AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_func_iconv=yes]) if test "$am_cv_func_iconv" != yes; then am_save_LIBS="$LIBS" LIBS="$LIBS $LIBICONV" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> ]], [[iconv_t cd = iconv_open("",""); iconv(cd,NULL,NULL,NULL,NULL); iconv_close(cd);]])], [am_cv_lib_iconv=yes] [am_cv_func_iconv=yes]) LIBS="$am_save_LIBS" fi ]) if test "$am_cv_func_iconv" = yes; then AC_CACHE_CHECK([for working iconv], [am_cv_func_iconv_works], [ dnl This tests against bugs in AIX 5.1, AIX 6.1..7.1, HP-UX 11.11, dnl Solaris 10. am_save_LIBS="$LIBS" if test $am_cv_lib_iconv = yes; then LIBS="$LIBS $LIBICONV" fi am_cv_func_iconv_works=no for ac_iconv_const in '' 'const'; do AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[ #include <iconv.h> #include <string.h> #ifndef ICONV_CONST # define ICONV_CONST $ac_iconv_const #endif ]], [[int result = 0; /* Test against AIX 5.1 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_utf8_to_88591 = iconv_open ("ISO8859-1", "UTF-8"); if (cd_utf8_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\342\202\254"; /* EURO SIGN */ char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_utf8_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 1; iconv_close (cd_utf8_to_88591); } } /* Test against Solaris 10 bug: Failures are not distinguishable from successful returns. */ { iconv_t cd_ascii_to_88591 = iconv_open ("ISO8859-1", "646"); if (cd_ascii_to_88591 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\263"; char buf[10]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_ascii_to_88591, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res == 0) result |= 2; iconv_close (cd_ascii_to_88591); } } /* Test against AIX 6.1..7.1 bug: Buffer overrun. */ { iconv_t cd_88591_to_utf8 = iconv_open ("UTF-8", "ISO-8859-1"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304"; static char buf[2] = { (char)0xDE, (char)0xAD }; ICONV_CONST char *inptr = input; size_t inbytesleft = 1; char *outptr = buf; size_t outbytesleft = 1; size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if (res != (size_t)(-1) || outptr - buf > 1 || buf[1] != (char)0xAD) result |= 4; iconv_close (cd_88591_to_utf8); } } #if 0 /* This bug could be worked around by the caller. */ /* Test against HP-UX 11.11 bug: Positive return value instead of 0. */ { iconv_t cd_88591_to_utf8 = iconv_open ("utf8", "iso88591"); if (cd_88591_to_utf8 != (iconv_t)(-1)) { static ICONV_CONST char input[] = "\304rger mit b\366sen B\374bchen ohne Augenma\337"; char buf[50]; ICONV_CONST char *inptr = input; size_t inbytesleft = strlen (input); char *outptr = buf; size_t outbytesleft = sizeof (buf); size_t res = iconv (cd_88591_to_utf8, &inptr, &inbytesleft, &outptr, &outbytesleft); if ((int)res > 0) result |= 8; iconv_close (cd_88591_to_utf8); } } #endif /* Test against HP-UX 11.11 bug: No converter from EUC-JP to UTF-8 is provided. */ if (/* Try standardized names. */ iconv_open ("UTF-8", "EUC-JP") == (iconv_t)(-1) /* Try IRIX, OSF/1 names. */ && iconv_open ("UTF-8", "eucJP") == (iconv_t)(-1) /* Try AIX names. */ && iconv_open ("UTF-8", "IBM-eucJP") == (iconv_t)(-1) /* Try HP-UX names. */ && iconv_open ("utf8", "eucJP") == (iconv_t)(-1)) result |= 16; return result; ]])], [am_cv_func_iconv_works=yes], , [case "$host_os" in aix* | hpux*) am_cv_func_iconv_works="guessing no" ;; *) am_cv_func_iconv_works="guessing yes" ;; esac]) test "$am_cv_func_iconv_works" = no || break done LIBS="$am_save_LIBS" ]) case "$am_cv_func_iconv_works" in *no) am_func_iconv=no am_cv_lib_iconv=no ;; *) am_func_iconv=yes ;; esac else am_func_iconv=no am_cv_lib_iconv=no fi if test "$am_func_iconv" = yes; then AC_DEFINE([HAVE_ICONV], [1], [Define if you have the iconv() function and it works.]) fi if test "$am_cv_lib_iconv" = yes; then AC_MSG_CHECKING([how to link with libiconv]) AC_MSG_RESULT([$LIBICONV]) else dnl If $LIBICONV didn't lead to a usable library, we don't need $INCICONV dnl either. CPPFLAGS="$am_save_CPPFLAGS" LIBICONV= LTLIBICONV= fi AC_SUBST([LIBICONV]) AC_SUBST([LTLIBICONV]) ]) dnl Define AM_ICONV using AC_DEFUN_ONCE for Autoconf >= 2.64, in order to dnl avoid warnings like dnl "warning: AC_REQUIRE: `AM_ICONV' was expanded before it was required". dnl This is tricky because of the way 'aclocal' is implemented: dnl - It requires defining an auxiliary macro whose name ends in AC_DEFUN. dnl Otherwise aclocal's initial scan pass would miss the macro definition. dnl - It requires a line break inside the AC_DEFUN_ONCE and AC_DEFUN expansions. dnl Otherwise aclocal would emit many "Use of uninitialized value $1" dnl warnings. m4_define([gl_iconv_AC_DEFUN], m4_version_prereq([2.64], [[AC_DEFUN_ONCE( [$1], [$2])]], [m4_ifdef([gl_00GNULIB], [[AC_DEFUN_ONCE( [$1], [$2])]], [[AC_DEFUN( [$1], [$2])]])])) gl_iconv_AC_DEFUN([AM_ICONV], [ AM_ICONV_LINK if test "$am_cv_func_iconv" = yes; then AC_MSG_CHECKING([for iconv declaration]) AC_CACHE_VAL([am_cv_proto_iconv], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdlib.h> #include <iconv.h> extern #ifdef __cplusplus "C" #endif #if defined(__STDC__) || defined(_MSC_VER) || defined(__cplusplus) size_t iconv (iconv_t cd, char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft); #else size_t iconv(); #endif ]], [[]])], [am_cv_proto_iconv_arg1=""], [am_cv_proto_iconv_arg1="const"]) am_cv_proto_iconv="extern size_t iconv (iconv_t cd, $am_cv_proto_iconv_arg1 char * *inbuf, size_t *inbytesleft, char * *outbuf, size_t *outbytesleft);"]) am_cv_proto_iconv=`echo "[$]am_cv_proto_iconv" | tr -s ' ' | sed -e 's/( /(/'` AC_MSG_RESULT([ $am_cv_proto_iconv]) AC_DEFINE_UNQUOTED([ICONV_CONST], [$am_cv_proto_iconv_arg1], [Define as const if the declaration of iconv() needs const.]) dnl Also substitute ICONV_CONST in the gnulib generated <iconv.h>. m4_ifdef([gl_ICONV_H_DEFAULTS], [AC_REQUIRE([gl_ICONV_H_DEFAULTS]) if test -n "$am_cv_proto_iconv_arg1"; then ICONV_CONST="const" fi ]) fi ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/ltsugar.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000010440�13253165100�012342� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ltsugar.m4 -- libtool m4 base layer. -*-Autoconf-*- # # Copyright (C) 2004-2005, 2007-2008, 2011-2015 Free Software # Foundation, Inc. # Written by Gary V. Vaughan, 2004 # # This file is free software; the Free Software Foundation gives # unlimited permission to copy and/or distribute it, with or without # modifications, as long as this notice is preserved. # serial 6 ltsugar.m4 # This is to help aclocal find these macros, as it can't see m4_define. AC_DEFUN([LTSUGAR_VERSION], [m4_if([0.1])]) # lt_join(SEP, ARG1, [ARG2...]) # ----------------------------- # Produce ARG1SEPARG2...SEPARGn, omitting [] arguments and their # associated separator. # Needed until we can rely on m4_join from Autoconf 2.62, since all earlier # versions in m4sugar had bugs. m4_define([lt_join], [m4_if([$#], [1], [], [$#], [2], [[$2]], [m4_if([$2], [], [], [[$2]_])$0([$1], m4_shift(m4_shift($@)))])]) m4_define([_lt_join], [m4_if([$#$2], [2], [], [m4_if([$2], [], [], [[$1$2]])$0([$1], m4_shift(m4_shift($@)))])]) # lt_car(LIST) # lt_cdr(LIST) # ------------ # Manipulate m4 lists. # These macros are necessary as long as will still need to support # Autoconf-2.59, which quotes differently. m4_define([lt_car], [[$1]]) m4_define([lt_cdr], [m4_if([$#], 0, [m4_fatal([$0: cannot be called without arguments])], [$#], 1, [], [m4_dquote(m4_shift($@))])]) m4_define([lt_unquote], $1) # lt_append(MACRO-NAME, STRING, [SEPARATOR]) # ------------------------------------------ # Redefine MACRO-NAME to hold its former content plus 'SEPARATOR''STRING'. # Note that neither SEPARATOR nor STRING are expanded; they are appended # to MACRO-NAME as is (leaving the expansion for when MACRO-NAME is invoked). # No SEPARATOR is output if MACRO-NAME was previously undefined (different # than defined and empty). # # This macro is needed until we can rely on Autoconf 2.62, since earlier # versions of m4sugar mistakenly expanded SEPARATOR but not STRING. m4_define([lt_append], [m4_define([$1], m4_ifdef([$1], [m4_defn([$1])[$3]])[$2])]) # lt_combine(SEP, PREFIX-LIST, INFIX, SUFFIX1, [SUFFIX2...]) # ---------------------------------------------------------- # Produce a SEP delimited list of all paired combinations of elements of # PREFIX-LIST with SUFFIX1 through SUFFIXn. Each element of the list # has the form PREFIXmINFIXSUFFIXn. # Needed until we can rely on m4_combine added in Autoconf 2.62. m4_define([lt_combine], [m4_if(m4_eval([$# > 3]), [1], [m4_pushdef([_Lt_sep], [m4_define([_Lt_sep], m4_defn([lt_car]))])]]dnl [[m4_foreach([_Lt_prefix], [$2], [m4_foreach([_Lt_suffix], ]m4_dquote(m4_dquote(m4_shift(m4_shift(m4_shift($@)))))[, [_Lt_sep([$1])[]m4_defn([_Lt_prefix])[$3]m4_defn([_Lt_suffix])])])])]) # lt_if_append_uniq(MACRO-NAME, VARNAME, [SEPARATOR], [UNIQ], [NOT-UNIQ]) # ----------------------------------------------------------------------- # Iff MACRO-NAME does not yet contain VARNAME, then append it (delimited # by SEPARATOR if supplied) and expand UNIQ, else NOT-UNIQ. m4_define([lt_if_append_uniq], [m4_ifdef([$1], [m4_if(m4_index([$3]m4_defn([$1])[$3], [$3$2$3]), [-1], [lt_append([$1], [$2], [$3])$4], [$5])], [lt_append([$1], [$2], [$3])$4])]) # lt_dict_add(DICT, KEY, VALUE) # ----------------------------- m4_define([lt_dict_add], [m4_define([$1($2)], [$3])]) # lt_dict_add_subkey(DICT, KEY, SUBKEY, VALUE) # -------------------------------------------- m4_define([lt_dict_add_subkey], [m4_define([$1($2:$3)], [$4])]) # lt_dict_fetch(DICT, KEY, [SUBKEY]) # ---------------------------------- m4_define([lt_dict_fetch], [m4_ifval([$3], m4_ifdef([$1($2:$3)], [m4_defn([$1($2:$3)])]), m4_ifdef([$1($2)], [m4_defn([$1($2)])]))]) # lt_if_dict_fetch(DICT, KEY, [SUBKEY], VALUE, IF-TRUE, [IF-FALSE]) # ----------------------------------------------------------------- m4_define([lt_if_dict_fetch], [m4_if(lt_dict_fetch([$1], [$2], [$3]), [$4], [$5], [$6])]) # lt_dict_filter(DICT, [SUBKEY], VALUE, [SEPARATOR], KEY, [...]) # -------------------------------------------------------------- m4_define([lt_dict_filter], [m4_if([$5], [], [], [lt_join(m4_quote(m4_default([$4], [[, ]])), lt_unquote(m4_split(m4_normalize(m4_foreach(_Lt_key, lt_car([m4_shiftn(4, $@)]), [lt_if_dict_fetch([$1], _Lt_key, [$2], [$3], [_Lt_key ])])))))])[]dnl ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/fopen.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000007714�14226564452�012020� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# fopen.m4 serial 13 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FOPEN], [ AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw* | pw*) dnl Replace fopen, for handling of "/dev/null". REPLACE_FOPEN=1 dnl fopen on mingw also has the trailing slash bug. gl_cv_func_fopen_slash="guessing no" ;; *) dnl fopen("foo/", "w") should not create a file when the file name has a dnl trailing slash. AC_CACHE_CHECK([whether fopen recognizes a trailing slash], [gl_cv_func_fopen_slash], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stddef.h> #include <stdio.h> int main () { FILE *fp = fopen ("conftest.sl/", "w"); int result = (fp != NULL); if (fp != NULL) fclose (fp); return result; }]])], [gl_cv_func_fopen_slash=yes], [gl_cv_func_fopen_slash=no], [ changequote(,)dnl case "$host_os" in aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_fopen_slash="guessing no" ;; *) gl_cv_func_fopen_slash="guessing yes" ;; esac changequote([,])dnl ]) rm -f conftest.sl ]) ;; esac case "$gl_cv_func_fopen_slash" in *no) AC_DEFINE([FOPEN_TRAILING_SLASH_BUG], [1], [Define to 1 if fopen() fails to recognize a trailing slash.]) REPLACE_FOPEN=1 ;; esac ]) AC_DEFUN([gl_FUNC_FOPEN_GNU], [ AC_REQUIRE([gl_FUNC_FOPEN]) AC_CACHE_CHECK([whether fopen supports the mode character 'x'], [gl_cv_func_fopen_mode_x], [rm -f conftest.x AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <errno.h> int main () { FILE *fp; fp = fopen ("conftest.x", "w"); fclose (fp); fp = fopen ("conftest.x", "wx"); if (fp != NULL) /* 'x' ignored */ return 1; else if (errno == EEXIST) return 0; else /* 'x' rejected */ return 2; }]])], [gl_cv_func_fopen_mode_x=yes], [gl_cv_func_fopen_mode_x=no], [case "$host_os" in # Guess yes on glibc and musl systems. linux*-gnu* | gnu* | kfreebsd*-gnu | *-musl*) gl_cv_func_fopen_mode_x="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fopen_mode_x="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.x ]) AC_CACHE_CHECK([whether fopen supports the mode character 'e'], [gl_cv_func_fopen_mode_e], [echo foo > conftest.x AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #include <errno.h> #include <fcntl.h> ]GL_MDA_DEFINES[ int main () { FILE *fp = fopen ("conftest.x", "re"); if (fp != NULL) { if (fcntl (fileno (fp), F_GETFD) & FD_CLOEXEC) return 0; else /* 'e' ignored */ return 1; } else /* 'e' rejected */ return 2; }]])], [gl_cv_func_fopen_mode_e=yes], [gl_cv_func_fopen_mode_e=no], [case "$host_os" in # Guess yes on glibc and musl systems. linux*-gnu* | gnu* | kfreebsd*-gnu | *-musl*) gl_cv_func_fopen_mode_e="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_fopen_mode_e="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_fopen_mode_e="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.x ]) REPLACE_FOPEN_FOR_FOPEN_GNU="$REPLACE_FOPEN" case "$gl_cv_func_fopen_mode_x" in *no) REPLACE_FOPEN_FOR_FOPEN_GNU=1 ;; esac case "$gl_cv_func_fopen_mode_e" in *no) REPLACE_FOPEN_FOR_FOPEN_GNU=1 ;; esac ]) # Prerequisites of lib/fopen.c. AC_DEFUN([gl_PREREQ_FOPEN], [:]) ����������������������������������������������������recutils-1.9/m4/stdbool.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000007403�14226564452�012352� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Check for stdbool.h that conforms to C99. dnl Copyright (C) 2002-2006, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. #serial 9 # Prepare for substituting <stdbool.h> if it is not supported. AC_DEFUN([gl_STDBOOL_H], [ AC_REQUIRE([AC_CHECK_HEADER_STDBOOL]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl On some platforms, <stdbool.h> does not exist or does not conform to C99. dnl On Solaris 10 with CC=cc CXX=CC, <stdbool.h> exists but is not usable dnl in C++ mode (and no <cstdbool> exists). In this case, we use our dnl replacement, also in C mode (for binary compatibility between C and C++). if test "$ac_cv_header_stdbool_h" = yes; then case "$host_os" in solaris*) if test -z "$GCC"; then GL_GENERATE_STDBOOL_H=true else GL_GENERATE_STDBOOL_H=false fi ;; *) GL_GENERATE_STDBOOL_H=false ;; esac else GL_GENERATE_STDBOOL_H=true fi if test "$ac_cv_type__Bool" = yes; then HAVE__BOOL=1 else HAVE__BOOL=0 fi AC_SUBST([HAVE__BOOL]) ]) # This version of the macro is needed in autoconf <= 2.68. AC_DEFUN([AC_CHECK_HEADER_STDBOOL], [AC_CACHE_CHECK([for stdbool.h that conforms to C99], [ac_cv_header_stdbool_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[ #include <stdbool.h> #ifdef __cplusplus typedef bool Bool; #else typedef _Bool Bool; #ifndef bool "error: bool is not defined" #endif #ifndef false "error: false is not defined" #endif #if false "error: false is not 0" #endif #ifndef true "error: true is not defined" #endif #if true != 1 "error: true is not 1" #endif #endif #ifndef __bool_true_false_are_defined "error: __bool_true_false_are_defined is not defined" #endif struct s { Bool s: 1; Bool t; bool u: 1; bool v; } s; char a[true == 1 ? 1 : -1]; char b[false == 0 ? 1 : -1]; char c[__bool_true_false_are_defined == 1 ? 1 : -1]; char d[(bool) 0.5 == true ? 1 : -1]; /* See body of main program for 'e'. */ char f[(Bool) 0.0 == false ? 1 : -1]; char g[true]; char h[sizeof (Bool)]; char i[sizeof s.t]; enum { j = false, k = true, l = false * true, m = true * 256 }; /* The following fails for HP aC++/ANSI C B3910B A.05.55 [Dec 04 2003]. */ Bool n[m]; char o[sizeof n == m * sizeof n[0] ? 1 : -1]; char p[-1 - (Bool) 0 < 0 && -1 - (bool) 0 < 0 ? 1 : -1]; /* Catch a bug in an HP-UX C compiler. See https://gcc.gnu.org/ml/gcc-patches/2003-12/msg02303.html https://lists.gnu.org/r/bug-coreutils/2005-11/msg00161.html */ Bool q = true; Bool *pq = &q; bool *qq = &q; ]], [[ bool e = &s; *pq |= q; *pq |= ! q; *qq |= q; *qq |= ! q; /* Refer to every declared value, to avoid compiler optimizations. */ return (!a + !b + !c + !d + !e + !f + !g + !h + !i + !!j + !k + !!l + !m + !n + !o + !p + !q + !pq + !qq); ]])], [ac_cv_header_stdbool_h=yes], [ac_cv_header_stdbool_h=no])]) AC_CHECK_TYPES([_Bool]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/posix_spawn.m4����������������������������������������������������������������������0000644�0000000�0000000�00000054010�14226564452�013252� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# posix_spawn.m4 serial 22 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Tests whether the entire posix_spawn facility is available. AC_DEFUN([gl_POSIX_SPAWN], [ AC_REQUIRE([gl_POSIX_SPAWN_BODY]) ]) AC_DEFUN([gl_POSIX_SPAWN_BODY], [ AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) AC_REQUIRE([gl_HAVE_POSIX_SPAWN]) dnl Assume that when the main function exists, all the others, dnl except posix_spawnattr_{get,set}sched*, are available as well. dnl AC_CHECK_FUNCS_ONCE([posix_spawnp]) dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_init]) dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addclose]) dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_adddup2]) dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addopen]) dnl AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_destroy]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_init]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getflags]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setflags]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getpgroup]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setpgroup]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getsigdefault]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setsigdefault]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getsigmask]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setsigmask]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_destroy]) AC_CHECK_DECLS([posix_spawn], , , [[#include <spawn.h>]]) if test $ac_cv_func_posix_spawn = yes; then m4_ifdef([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR], [dnl Module 'posix_spawn_file_actions_addchdir' is present. AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addchdir_np]) if test $ac_cv_func_posix_spawn_file_actions_addchdir_np = no; then dnl In order to implement the posix_spawn_file_actions_addchdir dnl function, we need to replace the entire posix_spawn facility. REPLACE_POSIX_SPAWN=1 fi ]) m4_ifdef([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR], [dnl Module 'posix_spawn_file_actions_addfchdir' is present. AC_CHECK_FUNCS_ONCE([posix_spawn_file_actions_addfchdir_np]) if test $ac_cv_func_posix_spawn_file_actions_addfchdir_np = no; then dnl In order to implement the posix_spawn_file_actions_addfchdir dnl function, we need to replace the entire posix_spawn facility. REPLACE_POSIX_SPAWN=1 fi ]) if test $REPLACE_POSIX_SPAWN = 0; then gl_POSIX_SPAWN_WORKS case "$gl_cv_func_posix_spawn_works" in *yes) ;; *) REPLACE_POSIX_SPAWN=1 ;; esac fi if test $REPLACE_POSIX_SPAWN = 0; then gl_POSIX_SPAWN_SECURE case "$gl_cv_func_posix_spawn_secure_exec" in *yes) ;; *) REPLACE_POSIX_SPAWN=1 ;; esac case "$gl_cv_func_posix_spawnp_secure_exec" in *yes) ;; *) REPLACE_POSIX_SPAWN=1 ;; esac fi if test $REPLACE_POSIX_SPAWN = 0; then dnl Assume that these functions are available if POSIX_SPAWN_SETSCHEDULER dnl evaluates to nonzero. dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getschedpolicy]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setschedpolicy]) AC_CACHE_CHECK([whether posix_spawnattr_setschedpolicy is supported], [gl_cv_func_spawnattr_setschedpolicy], [AC_EGREP_CPP([POSIX scheduling supported], [ #include <spawn.h> #if POSIX_SPAWN_SETSCHEDULER POSIX scheduling supported #endif ], [gl_cv_func_spawnattr_setschedpolicy=yes], [gl_cv_func_spawnattr_setschedpolicy=no]) ]) dnl Assume that these functions are available if POSIX_SPAWN_SETSCHEDPARAM dnl evaluates to nonzero. dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_getschedparam]) dnl AC_CHECK_FUNCS_ONCE([posix_spawnattr_setschedparam]) AC_CACHE_CHECK([whether posix_spawnattr_setschedparam is supported], [gl_cv_func_spawnattr_setschedparam], [AC_EGREP_CPP([POSIX scheduling supported], [ #include <spawn.h> #if POSIX_SPAWN_SETSCHEDPARAM POSIX scheduling supported #endif ], [gl_cv_func_spawnattr_setschedparam=yes], [gl_cv_func_spawnattr_setschedparam=no]) ]) fi else dnl The system does not have the main function. Therefore we have to dnl provide our own implementation. This implies to define our own dnl posix_spawn_file_actions_t and posix_spawnattr_t types. if test $ac_cv_have_decl_posix_spawn = yes; then dnl The system declares posix_spawn() already. This declaration uses dnl the original posix_spawn_file_actions_t and posix_spawnattr_t types. dnl But we need a declaration with our own posix_spawn_file_actions_t and dnl posix_spawnattr_t types. REPLACE_POSIX_SPAWN=1 fi fi if test $ac_cv_func_posix_spawn != yes || test $REPLACE_POSIX_SPAWN = 1; then AC_DEFINE([REPLACE_POSIX_SPAWN], [1], [Define if gnulib uses its own posix_spawn and posix_spawnp functions.]) fi ]) dnl Test whether posix_spawn actually works. dnl posix_spawn on AIX 5.3..6.1 has two bugs: dnl 1) When it fails to execute the program, the child process exits with dnl exit() rather than _exit(), which causes the stdio buffers to be dnl flushed. Reported by Rainer Tammer. dnl 2) The posix_spawn_file_actions_addopen function does not support file dnl names that contain a '*'. dnl posix_spawn on AIX 5.3..6.1 has also a third bug: It does not work dnl when POSIX threads are used. But we don't test against this bug here. AC_DEFUN([gl_POSIX_SPAWN_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether posix_spawn works], [gl_cv_func_posix_spawn_works], [if test $cross_compiling = no; then AC_LINK_IFELSE([AC_LANG_SOURCE([[ #include <errno.h> #include <fcntl.h> #include <signal.h> #include <spawn.h> #include <stdbool.h> #include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> ]GL_MDA_DEFINES[ extern char **environ; #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif #ifndef WTERMSIG # define WTERMSIG(x) ((x) & 0x7f) #endif #ifndef WIFEXITED # define WIFEXITED(x) (WTERMSIG (x) == 0) #endif #ifndef WEXITSTATUS # define WEXITSTATUS(x) (((x) >> 8) & 0xff) #endif #define CHILD_PROGRAM_FILENAME "/non/exist/ent" static int fd_safer (int fd) { if (0 <= fd && fd <= 2) { int f = fd_safer (dup (fd)); int e = errno; close (fd); errno = e; fd = f; } return fd; } int main () { char *argv[2] = { CHILD_PROGRAM_FILENAME, NULL }; int ofd[2]; sigset_t blocked_signals; sigset_t fatal_signal_set; posix_spawn_file_actions_t actions; bool actions_allocated; posix_spawnattr_t attrs; bool attrs_allocated; int err; pid_t child; int status; int exitstatus; setvbuf (stdout, NULL, _IOFBF, 0); puts ("This should be seen only once."); if (pipe (ofd) < 0 || (ofd[1] = fd_safer (ofd[1])) < 0) { perror ("cannot create pipe"); exit (1); } sigprocmask (SIG_SETMASK, NULL, &blocked_signals); sigemptyset (&fatal_signal_set); sigaddset (&fatal_signal_set, SIGINT); sigaddset (&fatal_signal_set, SIGTERM); sigaddset (&fatal_signal_set, SIGHUP); sigaddset (&fatal_signal_set, SIGPIPE); sigprocmask (SIG_BLOCK, &fatal_signal_set, NULL); actions_allocated = false; attrs_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (err = posix_spawn_file_actions_adddup2 (&actions, ofd[0], STDIN_FILENO)) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ofd[0])) != 0 || (err = posix_spawn_file_actions_addclose (&actions, ofd[1])) != 0 || (err = posix_spawnattr_init (&attrs)) != 0 || (attrs_allocated = true, (err = posix_spawnattr_setsigmask (&attrs, &blocked_signals)) != 0 || (err = posix_spawnattr_setflags (&attrs, POSIX_SPAWN_SETSIGMASK)) != 0) || (err = posix_spawnp (&child, CHILD_PROGRAM_FILENAME, &actions, &attrs, argv, environ)) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); if (attrs_allocated) posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); if (err == ENOENT) return 0; else { errno = err; perror ("subprocess failed"); exit (1); } } posix_spawn_file_actions_destroy (&actions); posix_spawnattr_destroy (&attrs); sigprocmask (SIG_UNBLOCK, &fatal_signal_set, NULL); close (ofd[0]); close (ofd[1]); status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); exit (1); } exitstatus = WEXITSTATUS (status); if (exitstatus != 127) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); exit (1); } return 0; } ]])], [if test -s conftest$ac_exeext \ && ./conftest$ac_exeext > conftest.out \ && echo 'This should be seen only once.' > conftest.ok \ && cmp conftest.out conftest.ok >/dev/null 2>&1; then gl_cv_func_posix_spawn_works=yes else gl_cv_func_posix_spawn_works=no fi], [gl_cv_func_posix_spawn_works=no]) if test $gl_cv_func_posix_spawn_works = yes; then AC_RUN_IFELSE([AC_LANG_SOURCE([[ /* Test whether posix_spawn_file_actions_addopen supports filename arguments that contain special characters such as '*'. */ #include <errno.h> #include <fcntl.h> #include <signal.h> #include <spawn.h> #include <stdbool.h> #include <stdio.h> #include <string.h> #include <unistd.h> #include <sys/types.h> #include <sys/wait.h> ]GL_MDA_DEFINES[ extern char **environ; #ifndef STDIN_FILENO # define STDIN_FILENO 0 #endif #ifndef STDOUT_FILENO # define STDOUT_FILENO 1 #endif #ifndef STDERR_FILENO # define STDERR_FILENO 2 #endif #ifndef WTERMSIG # define WTERMSIG(x) ((x) & 0x7f) #endif #ifndef WIFEXITED # define WIFEXITED(x) (WTERMSIG (x) == 0) #endif #ifndef WEXITSTATUS # define WEXITSTATUS(x) (((x) >> 8) & 0xff) #endif #define CHILD_PROGRAM_FILENAME "conftest" #define DATA_FILENAME "conftest%=*#?" static int parent_main (void) { FILE *fp; char *argv[3] = { CHILD_PROGRAM_FILENAME, "-child", NULL }; posix_spawn_file_actions_t actions; bool actions_allocated; int err; pid_t child; int status; int exitstatus; /* Create a data file with specific contents. */ fp = fopen (DATA_FILENAME, "wb"); if (fp == NULL) { perror ("cannot create data file"); return 1; } fwrite ("Halle Potta", 1, 11, fp); if (fflush (fp) || fclose (fp)) { perror ("cannot prepare data file"); return 2; } /* Avoid reading from our stdin, as it could block. */ freopen ("/dev/null", "rb", stdin); /* Test whether posix_spawn_file_actions_addopen with this file name actually works, but spawning a child that reads from this file. */ actions_allocated = false; if ((err = posix_spawn_file_actions_init (&actions)) != 0 || (actions_allocated = true, (err = posix_spawn_file_actions_addopen (&actions, STDIN_FILENO, DATA_FILENAME, O_RDONLY, 0600)) != 0 || (err = posix_spawn (&child, CHILD_PROGRAM_FILENAME, &actions, NULL, argv, environ)) != 0)) { if (actions_allocated) posix_spawn_file_actions_destroy (&actions); errno = err; perror ("subprocess failed"); return 3; } posix_spawn_file_actions_destroy (&actions); status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) { fprintf (stderr, "subprocess terminated with unexpected wait status %d\n", status); return 4; } exitstatus = WEXITSTATUS (status); if (exitstatus != 0) { fprintf (stderr, "subprocess terminated with unexpected exit status %d\n", exitstatus); return 5; } return 0; } static int child_main (void) { char buf[1024]; /* See if reading from STDIN_FILENO yields the expected contents. */ if (fread (buf, 1, sizeof (buf), stdin) == 11 && memcmp (buf, "Halle Potta", 11) == 0) return 0; else return 8; } static void cleanup_then_die (int sig) { /* Clean up data file. */ unlink (DATA_FILENAME); /* Re-raise the signal and die from it. */ signal (sig, SIG_DFL); raise (sig); } int main (int argc, char *argv[]) { int exitstatus; if (!(argc > 1 && strcmp (argv[1], "-child") == 0)) { /* This is the parent process. */ signal (SIGINT, cleanup_then_die); signal (SIGTERM, cleanup_then_die); #ifdef SIGHUP signal (SIGHUP, cleanup_then_die); #endif exitstatus = parent_main (); } else { /* This is the child process. */ exitstatus = child_main (); } unlink (DATA_FILENAME); return exitstatus; } ]])], [], [gl_cv_func_posix_spawn_works=no]) fi else case "$host_os" in aix*) gl_cv_func_posix_spawn_works="guessing no";; *) gl_cv_func_posix_spawn_works="guessing yes";; esac fi ]) ]) dnl Test whether posix_spawn and posix_spawnp are secure. AC_DEFUN([gl_POSIX_SPAWN_SECURE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl On many platforms, posix_spawn or posix_spawnp allow executing a dnl script without a '#!' marker as a shell script. This is unsecure. AC_CACHE_CHECK([whether posix_spawn rejects scripts without shebang], [gl_cv_func_posix_spawn_secure_exec], [echo ':' > conftest.scr chmod a+x conftest.scr AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <errno.h> #include <spawn.h> #include <stddef.h> #include <sys/types.h> #include <sys/wait.h> int main () { const char *prog_path = "./conftest.scr"; const char *prog_argv[2] = { prog_path, NULL }; const char *environment[2] = { "PATH=.", NULL }; pid_t child; int status; int err = posix_spawn (&child, prog_path, NULL, NULL, (char **) prog_argv, (char **) environment); if (err == ENOEXEC) return 0; if (err != 0) return 1; status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) return 2; if (WEXITSTATUS (status) != 127) return 3; return 0; } ]])], [gl_cv_func_posix_spawn_secure_exec=yes], [gl_cv_func_posix_spawn_secure_exec=no], [case "$host_os" in # Guess no on GNU/Hurd. gnu*) gl_cv_func_posix_spawn_secure_exec="guessing no" ;; # Guess yes on all other platforms. *) gl_cv_func_posix_spawn_secure_exec="guessing yes" ;; esac ]) rm -f conftest.scr ]) AC_CACHE_CHECK([whether posix_spawnp rejects scripts without shebang], [gl_cv_func_posix_spawnp_secure_exec], [echo ':' > conftest.scr chmod a+x conftest.scr AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <errno.h> #include <spawn.h> #include <stddef.h> #include <sys/types.h> #include <sys/wait.h> int main () { const char *prog_path = "./conftest.scr"; const char *prog_argv[2] = { prog_path, NULL }; const char *environment[2] = { "PATH=.", NULL }; pid_t child; int status; int err = posix_spawnp (&child, prog_path, NULL, NULL, (char **) prog_argv, (char **) environment); if (err == ENOEXEC) return 0; if (err != 0) return 1; status = 0; while (waitpid (child, &status, 0) != child) ; if (!WIFEXITED (status)) return 2; if (WEXITSTATUS (status) != 127) return 3; return 0; } ]])], [gl_cv_func_posix_spawnp_secure_exec=yes], [gl_cv_func_posix_spawnp_secure_exec=no], [case "$host_os" in # Guess yes on glibc systems (glibc >= 2.15 actually) except GNU/Hurd, # musl libc, NetBSD. *-gnu* | *-musl* | netbsd*) gl_cv_func_posix_spawnp_secure_exec="guessing yes" ;; # Guess no on GNU/Hurd, macOS, FreeBSD, OpenBSD, AIX, Solaris, Cygwin. gnu* | darwin* | freebsd* | dragonfly* | midnightbsd* | openbsd* | \ aix* | solaris* | cygwin*) gl_cv_func_posix_spawnp_secure_exec="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_posix_spawnp_secure_exec="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.scr ]) ]) # Prerequisites of lib/spawni.c. AC_DEFUN([gl_PREREQ_POSIX_SPAWN_INTERNAL], [ AC_CHECK_HEADERS([paths.h]) AC_CHECK_FUNCS([confstr sched_setparam sched_setscheduler setegid seteuid vfork]) ]) AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE], [ AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_POSIX_SPAWN if test $REPLACE_POSIX_SPAWN = 1; then REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=1 else dnl On musl libc, posix_spawn_file_actions_addclose succeeds even if the fd dnl argument is negative. AC_CACHE_CHECK([whether posix_spawn_file_actions_addclose works], [gl_cv_func_posix_spawn_file_actions_addclose_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <spawn.h> int main () { posix_spawn_file_actions_t actions; if (posix_spawn_file_actions_init (&actions) != 0) return 1; if (posix_spawn_file_actions_addclose (&actions, -5) == 0) return 2; return 0; }]])], [gl_cv_func_posix_spawn_file_actions_addclose_works=yes], [gl_cv_func_posix_spawn_file_actions_addclose_works=no], [# Guess no on musl libc and Solaris, yes otherwise. case "$host_os" in *-musl*) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;; solaris*) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;; # Guess no on native Windows. mingw*) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing no" ;; *) gl_cv_func_posix_spawn_file_actions_addclose_works="guessing yes" ;; esac ]) ]) case "$gl_cv_func_posix_spawn_file_actions_addclose_works" in *yes) ;; *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE=1 ;; esac fi ]) AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2], [ AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_POSIX_SPAWN if test $REPLACE_POSIX_SPAWN = 1; then REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=1 else dnl On musl libc and Solaris 11.0, posix_spawn_file_actions_adddup2 dnl succeeds even if the fd argument is out of range. AC_CACHE_CHECK([whether posix_spawn_file_actions_adddup2 works], [gl_cv_func_posix_spawn_file_actions_adddup2_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <spawn.h> int main () { posix_spawn_file_actions_t actions; if (posix_spawn_file_actions_init (&actions) != 0) return 1; if (posix_spawn_file_actions_adddup2 (&actions, 10000000, 2) == 0) return 2; return 0; }]])], [gl_cv_func_posix_spawn_file_actions_adddup2_works=yes], [gl_cv_func_posix_spawn_file_actions_adddup2_works=no], [# Guess no on musl libc and Solaris, yes otherwise. case "$host_os" in *-musl*) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no";; solaris*) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing no" ;; *) gl_cv_func_posix_spawn_file_actions_adddup2_works="guessing yes";; esac ]) ]) case "$gl_cv_func_posix_spawn_file_actions_adddup2_works" in *yes) ;; *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2=1 ;; esac fi ]) AC_DEFUN([gl_FUNC_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN], [ AC_REQUIRE([gl_SPAWN_H_DEFAULTS]) AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles gl_POSIX_SPAWN if test $REPLACE_POSIX_SPAWN = 1; then REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 else dnl On musl libc and Solaris 11.0, posix_spawn_file_actions_addopen dnl succeeds even if the fd argument is out of range. AC_CACHE_CHECK([whether posix_spawn_file_actions_addopen works], [gl_cv_func_posix_spawn_file_actions_addopen_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <spawn.h> #include <fcntl.h> int main () { posix_spawn_file_actions_t actions; if (posix_spawn_file_actions_init (&actions) != 0) return 1; if (posix_spawn_file_actions_addopen (&actions, 10000000, "foo", 0, O_RDONLY) == 0) return 2; return 0; }]])], [gl_cv_func_posix_spawn_file_actions_addopen_works=yes], [gl_cv_func_posix_spawn_file_actions_addopen_works=no], [# Guess no on musl libc and Solaris, yes otherwise. case "$host_os" in *-musl*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";; solaris*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no";; # Guess no on native Windows. mingw*) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing no" ;; *) gl_cv_func_posix_spawn_file_actions_addopen_works="guessing yes";; esac ]) ]) case "$gl_cv_func_posix_spawn_file_actions_addopen_works" in *yes) ;; *) REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN=1 ;; esac fi ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/codeset.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000001525�14226564451�012330� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# codeset.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2000-2002, 2006, 2008-2014, 2016, 2019-2022 Free Software dnl Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([AM_LANGINFO_CODESET], [ AC_CACHE_CHECK([for nl_langinfo and CODESET], [am_cv_langinfo_codeset], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <langinfo.h>]], [[char* cs = nl_langinfo(CODESET); return !cs;]])], [am_cv_langinfo_codeset=yes], [am_cv_langinfo_codeset=no]) ]) if test $am_cv_langinfo_codeset = yes; then AC_DEFINE([HAVE_LANGINFO_CODESET], [1], [Define if you have <langinfo.h> and nl_langinfo(CODESET).]) fi ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/ssize_t.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000001463�14226564452�012364� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# ssize_t.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2001-2003, 2006, 2010-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Test whether ssize_t is defined. AC_DEFUN([gt_TYPE_SSIZE_T], [ AC_CACHE_CHECK([for ssize_t], [gt_cv_ssize_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h>]], [[int x = sizeof (ssize_t *) + sizeof (ssize_t); return !x;]])], [gt_cv_ssize_t=yes], [gt_cv_ssize_t=no])]) if test $gt_cv_ssize_t = no; then AC_DEFINE([ssize_t], [int], [Define as a signed type of the same size as size_t.]) fi ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/inttypes.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000013774�14226564452�012573� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# inttypes.m4 serial 36 dnl Copyright (C) 2006-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Derek Price, Bruno Haible. dnl Test whether <inttypes.h> is supported or must be substituted. AC_DEFUN_ONCE([gl_INTTYPES_H], [ AC_REQUIRE([gl_INTTYPES_INCOMPLETE]) gl_INTTYPES_PRI_SCN ]) AC_DEFUN_ONCE([gl_INTTYPES_INCOMPLETE], [ AC_REQUIRE([gl_STDINT_H]) AC_CHECK_HEADERS_ONCE([inttypes.h]) dnl Override <inttypes.h> always, so that the portability warnings work. AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) gl_CHECK_NEXT_HEADERS([inttypes.h]) AC_REQUIRE([gl_MULTIARCH]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <inttypes.h> ]], [imaxabs imaxdiv strtoimax strtoumax]) AC_REQUIRE([AC_C_RESTRICT]) ]) # Ensure that the PRI* and SCN* macros are defined appropriately. AC_DEFUN([gl_INTTYPES_PRI_SCN], [ PRIPTR_PREFIX= if $GL_GENERATE_STDINT_H; then dnl Using the gnulib <stdint.h>. It defines intptr_t to 'long' or dnl 'long long', depending on _WIN64. AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #ifdef _WIN64 LLP64 #endif ]]) ], [PRIPTR_PREFIX='"l"'], [PRIPTR_PREFIX='"ll"']) else dnl Using the system's <stdint.h>. for glpfx in '' l ll I64; do case $glpfx in '') gltype1='int';; l) gltype1='long int';; ll) gltype1='long long int';; I64) gltype1='__int64';; esac AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[#include <stdint.h> extern intptr_t foo; extern $gltype1 foo;]])], [PRIPTR_PREFIX='"'$glpfx'"']) test -n "$PRIPTR_PREFIX" && break done fi AC_SUBST([PRIPTR_PREFIX]) gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [INT32_MAX_LT_INTMAX_MAX], [defined INT32_MAX && defined INTMAX_MAX], [INT32_MAX < INTMAX_MAX], [sizeof (int) < sizeof (long long int)]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [INT64_MAX_EQ_LONG_MAX], [defined INT64_MAX], [INT64_MAX == LONG_MAX], [sizeof (long long int) == sizeof (long int)]) else INT64_MAX_EQ_LONG_MAX=-1 fi gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [UINT32_MAX_LT_UINTMAX_MAX], [defined UINT32_MAX && defined UINTMAX_MAX], [UINT32_MAX < UINTMAX_MAX], [sizeof (unsigned int) < sizeof (unsigned long long int)]) if test $APPLE_UNIVERSAL_BUILD = 0; then gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION( [UINT64_MAX_EQ_ULONG_MAX], [defined UINT64_MAX], [UINT64_MAX == ULONG_MAX], [sizeof (unsigned long long int) == sizeof (unsigned long int)]) else UINT64_MAX_EQ_ULONG_MAX=-1 fi ]) # Define the symbol $1 to be 1 if the condition is true, 0 otherwise. # If $2 is true, the condition is $3; otherwise if long long int is supported # approximate the condition with $4; otherwise, assume the condition is false. # The condition should work on all C99 platforms; the approximations should be # good enough to work on all practical pre-C99 platforms. # $2 is evaluated by the C preprocessor, $3 and $4 as compile-time constants. AC_DEFUN([gl_INTTYPES_CHECK_LONG_LONG_INT_CONDITION], [ AC_CACHE_CHECK([whether $3], [gl_cv_test_$1], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[/* Work also in C++ mode. */ #define __STDC_LIMIT_MACROS 1 /* Work if build is not clean. */ #define _GL_JUST_INCLUDE_SYSTEM_STDINT_H #include <limits.h> #if HAVE_STDINT_H #include <stdint.h> #endif #if $2 #define CONDITION ($3) #else #define CONDITION ($4) #endif int test[CONDITION ? 1 : -1];]])], [gl_cv_test_$1=yes], [gl_cv_test_$1=no])]) if test $gl_cv_test_$1 = yes; then $1=1; else $1=0; fi AC_SUBST([$1]) ]) # gl_INTTYPES_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_INTTYPES_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_INTTYPES_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_INTTYPES_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXABS]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_IMAXDIV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOIMAX]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRTOUMAX]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_INTTYPES_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_INTTYPES_H_DEFAULTS]) ]) AC_DEFUN([gl_INTTYPES_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_IMAXABS=1; AC_SUBST([HAVE_DECL_IMAXABS]) HAVE_DECL_IMAXDIV=1; AC_SUBST([HAVE_DECL_IMAXDIV]) HAVE_DECL_STRTOIMAX=1; AC_SUBST([HAVE_DECL_STRTOIMAX]) HAVE_DECL_STRTOUMAX=1; AC_SUBST([HAVE_DECL_STRTOUMAX]) HAVE_IMAXDIV_T=1; AC_SUBST([HAVE_IMAXDIV_T]) REPLACE_STRTOIMAX=0; AC_SUBST([REPLACE_STRTOIMAX]) REPLACE_STRTOUMAX=0; AC_SUBST([REPLACE_STRTOUMAX]) INT32_MAX_LT_INTMAX_MAX=1; AC_SUBST([INT32_MAX_LT_INTMAX_MAX]) INT64_MAX_EQ_LONG_MAX='defined _LP64'; AC_SUBST([INT64_MAX_EQ_LONG_MAX]) PRIPTR_PREFIX=__PRIPTR_PREFIX; AC_SUBST([PRIPTR_PREFIX]) UINT32_MAX_LT_UINTMAX_MAX=1; AC_SUBST([UINT32_MAX_LT_UINTMAX_MAX]) UINT64_MAX_EQ_ULONG_MAX='defined _LP64'; AC_SUBST([UINT64_MAX_EQ_ULONG_MAX]) ]) ����recutils-1.9/m4/raise.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000001771�14226564452�012011� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# raise.m4 serial 4 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RAISE], [ AC_REQUIRE([gl_SIGNAL_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CHECK_FUNCS([raise]) if test $ac_cv_func_raise = no; then HAVE_RAISE=0 else m4_ifdef([gl_MSVC_INVAL], [ AC_REQUIRE([gl_MSVC_INVAL]) if test $HAVE_MSVC_INVALID_PARAMETER_HANDLER = 1; then REPLACE_RAISE=1 fi ]) m4_ifdef([gl_SIGNALBLOCKING], [ gl_SIGNALBLOCKING if test $HAVE_POSIX_SIGNALBLOCKING = 0; then m4_ifdef([gl_SIGNAL_SIGPIPE], [ gl_SIGNAL_SIGPIPE if test $gl_cv_header_signal_h_SIGPIPE != yes; then REPLACE_RAISE=1 fi ], [:]) fi ]) fi ]) # Prerequisites of lib/raise.c. AC_DEFUN([gl_PREREQ_RAISE], [:]) �������recutils-1.9/m4/opendir.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000001701�14226564447�012343� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# opendir.m4 serial 5 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_OPENDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS([opendir]) if test $ac_cv_func_opendir = no; then HAVE_OPENDIR=0 fi dnl Replace opendir() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then if test $HAVE_OPENDIR = 1; then REPLACE_OPENDIR=1 fi fi ]) dnl Replace opendir() on OS/2 kLIBC to support dirfd() function replaced dnl by gnulib. case $host_os,$HAVE_OPENDIR in os2*,1) REPLACE_OPENDIR=1;; esac ]) ���������������������������������������������������������������recutils-1.9/m4/mbrtowc.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000055646�14226564452�012375� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# mbrtowc.m4 serial 38 -*- coding: utf-8 -*- dnl Copyright (C) 2001-2002, 2004-2005, 2008-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_MBRTOWC], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([gl_PTHREADLIB]) AC_CHECK_HEADERS_ONCE([threads.h]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([mbrtowc]) if test $ac_cv_func_mbrtowc = no; then HAVE_MBRTOWC=0 AC_CHECK_DECLS([mbrtowc],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_mbrtowc = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares mbrtowc() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_MBRTOWC=1 fi else if test $REPLACE_MBSTATE_T = 1; then REPLACE_MBRTOWC=1 else gl_MBRTOWC_NULL_ARG1 gl_MBRTOWC_NULL_ARG2 gl_MBRTOWC_RETVAL gl_MBRTOWC_NUL_RETVAL gl_MBRTOWC_STORES_INCOMPLETE gl_MBRTOWC_EMPTY_INPUT gl_MBRTOWC_C_LOCALE case "$gl_cv_func_mbrtowc_null_arg1" in *yes) ;; *) AC_DEFINE([MBRTOWC_NULL_ARG1_BUG], [1], [Define if the mbrtowc function has the NULL pwc argument bug.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_null_arg2" in *yes) ;; *) AC_DEFINE([MBRTOWC_NULL_ARG2_BUG], [1], [Define if the mbrtowc function has the NULL string argument bug.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_retval" in *yes) ;; *) AC_DEFINE([MBRTOWC_RETVAL_BUG], [1], [Define if the mbrtowc function returns a wrong return value.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_nul_retval" in *yes) ;; *) AC_DEFINE([MBRTOWC_NUL_RETVAL_BUG], [1], [Define if the mbrtowc function does not return 0 for a NUL character.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_stores_incomplete" in *no) ;; *) AC_DEFINE([MBRTOWC_STORES_INCOMPLETE_BUG], [1], [Define if the mbrtowc function stores a wide character when reporting incomplete input.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_empty_input" in *yes) ;; *) AC_DEFINE([MBRTOWC_EMPTY_INPUT_BUG], [1], [Define if the mbrtowc function does not return (size_t) -2 for empty input.]) REPLACE_MBRTOWC=1 ;; esac case "$gl_cv_func_mbrtowc_C_locale_sans_EILSEQ" in *yes) ;; *) AC_DEFINE([MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ], [1], [Define if the mbrtowc function may signal encoding errors in the C locale.]) REPLACE_MBRTOWC=1 ;; esac fi fi if test $REPLACE_MBSTATE_T = 1; then case "$host_os" in mingw*) LIB_MBRTOWC= ;; *) gl_WEAK_SYMBOLS case "$gl_cv_have_weak" in *yes) LIB_MBRTOWC= ;; *) LIB_MBRTOWC="$LIBPTHREAD" ;; esac ;; esac else LIB_MBRTOWC= fi dnl LIB_MBRTOWC is expected to be '-pthread' or '-lpthread' on AIX dnl with gcc or xlc, and empty otherwise. AC_SUBST([LIB_MBRTOWC]) ]) dnl Test whether mbsinit() and mbrtowc() need to be overridden in a way that dnl redefines the semantics of the given mbstate_t type. dnl Result is REPLACE_MBSTATE_T. dnl When this is set to 1, we replace both mbsinit() and mbrtowc(), in order to dnl avoid inconsistencies. AC_DEFUN([gl_MBSTATE_T_BROKEN], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_CHECK_FUNCS_ONCE([mbsinit]) AC_CHECK_FUNCS_ONCE([mbrtowc]) dnl On native Windows, we know exactly how mbsinit() behaves and don't need dnl to override it, even if - like on MSVC - mbsinit() is only defined as dnl an inline function, not as a global function. if case "$host_os" in mingw*) true ;; *) test $ac_cv_func_mbsinit = yes ;; esac \ && test $ac_cv_func_mbrtowc = yes; then gl_MBRTOWC_INCOMPLETE_STATE gl_MBRTOWC_SANITYCHECK REPLACE_MBSTATE_T=0 case "$gl_cv_func_mbrtowc_incomplete_state" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac case "$gl_cv_func_mbrtowc_sanitycheck" in *yes) ;; *) REPLACE_MBSTATE_T=1 ;; esac else REPLACE_MBSTATE_T=1 fi ]) dnl Test whether mbrtowc puts the state into non-initial state when parsing an dnl incomplete multibyte character. dnl Result is gl_cv_func_mbrtowc_incomplete_state. AC_DEFUN([gl_MBRTOWC_INCOMPLETE_STATE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles incomplete characters], [gl_cv_func_mbrtowc_incomplete_state], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and OSF/1. aix* | osf*) gl_cv_func_mbrtowc_incomplete_state="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_incomplete_state="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_JA != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { const char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_incomplete_state=yes], [gl_cv_func_mbrtowc_incomplete_state=no], [:]) else if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { const char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) if (mbsinit (&state)) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_incomplete_state=yes], [gl_cv_func_mbrtowc_incomplete_state=no], [:]) fi fi ]) ]) dnl Test whether mbrtowc works not worse than mbtowc. dnl Result is gl_cv_func_mbrtowc_sanitycheck. AC_DEFUN([gl_MBRTOWC_SANITYCHECK], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc works as well as mbtowc], [gl_cv_func_mbrtowc_sanitycheck], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris 8. solaris2.8) gl_cv_func_mbrtowc_sanitycheck="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_sanitycheck="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8: mbrtowc returns 2, and sets wc to 0x00F0. mbtowc returns 4 (correct) and sets wc to 0x5EDC. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { char input[] = "B\250\271\201\060\211\070er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 6, &state) != 4 && mbtowc (&wc, input + 3, 6) == 4) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_sanitycheck=yes], [gl_cv_func_mbrtowc_sanitycheck=no], [:]) fi ]) ]) dnl Test whether mbrtowc supports a NULL pwc argument correctly. dnl Result is gl_cv_func_mbrtowc_null_arg1. AC_DEFUN([gl_MBRTOWC_NULL_ARG1], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles a NULL pwc argument], [gl_cv_func_mbrtowc_null_arg1], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris. solaris*) gl_cv_func_mbrtowc_null_arg1="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg1="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <stdlib.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "\303\237er"; mbstate_t state; wchar_t wc; size_t ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; ret = mbrtowc (&wc, input, 5, &state); if (ret != 2) result |= 1; if (!mbsinit (&state)) result |= 2; memset (&state, '\0', sizeof (mbstate_t)); ret = mbrtowc (NULL, input, 5, &state); if (ret != 2) /* Solaris 7 fails here: ret is -1. */ result |= 4; if (!mbsinit (&state)) result |= 8; } return result; }]])], [gl_cv_func_mbrtowc_null_arg1=yes], [gl_cv_func_mbrtowc_null_arg1=no], [:]) fi ]) ]) dnl Test whether mbrtowc supports a NULL string argument correctly. dnl Result is gl_cv_func_mbrtowc_null_arg2. AC_DEFUN([gl_MBRTOWC_NULL_ARG2], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc handles a NULL string argument], [gl_cv_func_mbrtowc_null_arg2], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on OSF/1. osf*) gl_cv_func_mbrtowc_null_arg2="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_null_arg2="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { mbstate_t state; wchar_t wc; int ret; memset (&state, '\0', sizeof (mbstate_t)); wc = (wchar_t) 0xBADFACE; mbrtowc (&wc, NULL, 5, &state); /* Check that wc was not modified. */ if (wc != (wchar_t) 0xBADFACE) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_null_arg2=yes], [gl_cv_func_mbrtowc_null_arg2=no], [:]) fi ]) ]) dnl Test whether mbrtowc, when parsing the end of a multibyte character, dnl correctly returns the number of bytes that were needed to complete the dnl character (not the total number of bytes of the multibyte character). dnl Result is gl_cv_func_mbrtowc_retval. AC_DEFUN([gl_MBRTOWC_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether mbrtowc has a correct return value], [gl_cv_func_mbrtowc_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on HP-UX, Solaris, native Windows. hpux* | solaris* | mingw*) gl_cv_func_mbrtowc_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none \ || { case "$host_os" in mingw*) true;; *) false;; esac; }; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; int found_some_locale = 0; /* This fails on Solaris. */ if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { char input[] = "B\303\274\303\237er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 1) result |= 1; } found_some_locale = 1; } /* This fails on HP-UX 11.11. */ if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { char input[] = "B\217\253\344\217\251\316er"; /* "Büßer" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 1, 1, &state) == (size_t)(-2)) { input[1] = '\0'; if (mbrtowc (&wc, input + 2, 5, &state) != 2) result |= 2; } found_some_locale = 1; } /* This fails on native Windows. */ if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { char input[] = "<\223\372\226\173\214\352>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 4; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { char input[] = "<\244\351\245\273\273\171>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 8; } found_some_locale = 1; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { char input[] = "<\310\325\261\276\325\132>"; /* "<日本語>" */ mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, input + 3, 1, &state) == (size_t)(-2)) { input[3] = '\0'; if (mbrtowc (&wc, input + 4, 4, &state) != 1) result |= 16; } found_some_locale = 1; } return (found_some_locale ? result : 77); }]])], [gl_cv_func_mbrtowc_retval=yes], [if test $? != 77; then gl_cv_func_mbrtowc_retval=no fi ], [:]) fi ]) ]) dnl Test whether mbrtowc, when parsing a NUL character, correctly returns 0. dnl Result is gl_cv_func_mbrtowc_nul_retval. AC_DEFUN([gl_MBRTOWC_NUL_RETVAL], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc returns 0 when parsing a NUL character], [gl_cv_func_mbrtowc_nul_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on Solaris 8 and 9. solaris2.[89]) gl_cv_func_mbrtowc_nul_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_mbrtowc_nul_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { /* This fails on Solaris 8 and 9. */ if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { mbstate_t state; wchar_t wc; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "", 1, &state) != 0) return 2; } return 0; }]])], [gl_cv_func_mbrtowc_nul_retval=yes], [gl_cv_func_mbrtowc_nul_retval=no], [:]) fi ]) ]) dnl Test whether mbrtowc stores a wide character when reporting incomplete dnl input. AC_DEFUN([gl_MBRTOWC_STORES_INCOMPLETE], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc stores incomplete characters], [gl_cv_func_mbrtowc_stores_incomplete], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_stores_incomplete="guessing yes" ;; *) gl_cv_func_mbrtowc_stores_incomplete="guessing no" ;; esac changequote([,])dnl case "$host_os" in mingw*) AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { int result = 0; if (setlocale (LC_ALL, "French_France.65001") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 1; } if (setlocale (LC_ALL, "Japanese_Japan.932") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\226", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 2; } if (setlocale (LC_ALL, "Chinese_Taiwan.950") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\245", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 4; } if (setlocale (LC_ALL, "Chinese_China.936") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\261", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) result |= 8; } return result; }]])], [gl_cv_func_mbrtowc_stores_incomplete=no], [gl_cv_func_mbrtowc_stores_incomplete=yes], [:]) ;; *) AC_REQUIRE([gt_LOCALE_FR_UTF8]) if test $LOCALE_FR_UTF8 != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> int main () { if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { wchar_t wc = (wchar_t) 0xBADFACE; mbstate_t state; memset (&state, '\0', sizeof (mbstate_t)); if (mbrtowc (&wc, "\303", 1, &state) == (size_t)(-2) && wc != (wchar_t) 0xBADFACE) return 1; } return 0; }]])], [gl_cv_func_mbrtowc_stores_incomplete=no], [gl_cv_func_mbrtowc_stores_incomplete=yes], [:]) fi ;; esac ]) ]) dnl Test whether mbrtowc returns the correct value on empty input. AC_DEFUN([gl_MBRTOWC_EMPTY_INPUT], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether mbrtowc works on empty input], [gl_cv_func_mbrtowc_empty_input], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX and glibc systems. aix* | *-gnu* | gnu*) gl_cv_func_mbrtowc_empty_input="guessing no" ;; # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; *) gl_cv_func_mbrtowc_empty_input="guessing yes" ;; esac changequote([,])dnl AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <wchar.h> static wchar_t wc; static mbstate_t mbs; int main (void) { return mbrtowc (&wc, "", 0, &mbs) != (size_t) -2; }]])], [gl_cv_func_mbrtowc_empty_input=yes], [gl_cv_func_mbrtowc_empty_input=no], [:]) ]) ]) dnl Test whether mbrtowc reports encoding errors in the C locale. dnl Although POSIX was never intended to allow this, the GNU C Library dnl and other implementations do it. See: dnl https://sourceware.org/bugzilla/show_bug.cgi?id=19932 AC_DEFUN([gl_MBRTOWC_C_LOCALE], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether the C locale is free of encoding errors], [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="$gl_cross_guess_normal" AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <limits.h> #include <locale.h> #include <wchar.h> ]], [[ int i; char *locale = setlocale (LC_ALL, "C"); if (! locale) return 2; for (i = CHAR_MIN; i <= CHAR_MAX; i++) { char c = i; wchar_t wc; mbstate_t mbs = { 0, }; size_t ss = mbrtowc (&wc, &c, 1, &mbs); if (1 < ss) return 3; } return 0; ]])], [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=yes], [gl_cv_func_mbrtowc_C_locale_sans_EILSEQ=no], [case "$host_os" in # Guess yes on native Windows. mingw*) gl_cv_func_mbrtowc_C_locale_sans_EILSEQ="guessing yes" ;; esac ]) ]) ]) # Prerequisites of lib/mbrtowc.c and lib/lc-charset-dispatch.c. AC_DEFUN([gl_PREREQ_MBRTOWC], [ AC_REQUIRE([AC_C_INLINE]) : ]) # Prerequisites of lib/mbtowc-lock.c. AC_DEFUN([gl_PREREQ_MBTOWC_LOCK], [ gl_VISIBILITY ]) dnl From Paul Eggert dnl This is an override of an autoconf macro. AC_DEFUN([AC_FUNC_MBRTOWC], [ dnl Same as AC_FUNC_MBRTOWC in autoconf-2.60. AC_CACHE_CHECK([whether mbrtowc and mbstate_t are properly declared], [gl_cv_func_mbrtowc], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <wchar.h>]], [[wchar_t wc; char const s[] = ""; size_t n = 1; mbstate_t state; return ! (sizeof state && (mbrtowc) (&wc, s, n, &state));]])], [gl_cv_func_mbrtowc=yes], [gl_cv_func_mbrtowc=no])]) if test $gl_cv_func_mbrtowc = yes; then AC_DEFINE([HAVE_MBRTOWC], [1], [Define to 1 if mbrtowc and mbstate_t are properly declared.]) fi ]) ������������������������������������������������������������������������������������������recutils-1.9/m4/wcrtomb.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000011035�14226564453�012356� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# wcrtomb.m4 serial 17 dnl Copyright (C) 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_WCRTOMB], [ AC_REQUIRE([gl_WCHAR_H_DEFAULTS]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) gl_MBSTATE_T_BROKEN AC_CHECK_FUNCS_ONCE([wcrtomb]) if test $ac_cv_func_wcrtomb = no; then HAVE_WCRTOMB=0 AC_CHECK_DECLS([wcrtomb],,, [[ #include <wchar.h> ]]) if test $ac_cv_have_decl_wcrtomb = yes; then dnl On Minix 3.1.8, the system's <wchar.h> declares wcrtomb() although dnl it does not have the function. Avoid a collision with gnulib's dnl replacement. REPLACE_WCRTOMB=1 fi else dnl We don't actually need to override wcrtomb when redefining the semantics dnl of the mbstate_t type. Tested on 32-bit AIX. dnl if test $REPLACE_MBSTATE_T = 1; then dnl REPLACE_WCRTOMB=1 dnl fi if test $REPLACE_WCRTOMB = 0; then dnl On Android 4.3, wcrtomb produces wrong characters in the C locale. dnl On AIX 4.3, OSF/1 5.1 and Solaris <= 11.3, wcrtomb (NULL, 0, NULL) dnl sometimes returns 0 instead of 1. AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([gt_LOCALE_FR]) AC_REQUIRE([gt_LOCALE_FR_UTF8]) AC_REQUIRE([gt_LOCALE_JA]) AC_REQUIRE([gt_LOCALE_ZH_CN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether wcrtomb works in the C locale], [gl_cv_func_wcrtomb_works], [AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <string.h> #include <stdlib.h> #include <wchar.h> int main () { mbstate_t state; char out[64]; int count; memset (&state, 0, sizeof (state)); out[0] = 'x'; count = wcrtomb (out, L'a', &state); return !(count == 1 && out[0] == 'a'); }]])], [gl_cv_func_wcrtomb_works=yes], [gl_cv_func_wcrtomb_works=no], [case "$host_os" in # Guess no on Android. linux*-android*) gl_cv_func_wcrtomb_works="guessing no";; # Guess yes otherwise. *) gl_cv_func_wcrtomb_works="guessing yes";; esac ]) ]) case "$gl_cv_func_wcrtomb_works" in *yes) ;; *) AC_DEFINE([WCRTOMB_C_LOCALE_BUG], [1], [Define if the wcrtomb function does not work in the C locale.]) REPLACE_WCRTOMB=1 ;; esac fi if test $REPLACE_WCRTOMB = 0; then AC_CACHE_CHECK([whether wcrtomb return value is correct], [gl_cv_func_wcrtomb_retval], [ dnl Initial guess, used when cross-compiling or when no suitable locale dnl is present. changequote(,)dnl case "$host_os" in # Guess no on AIX 4, OSF/1, Solaris, native Windows. aix4* | osf* | solaris* | mingw*) gl_cv_func_wcrtomb_retval="guessing no" ;; # Guess yes otherwise. *) gl_cv_func_wcrtomb_retval="guessing yes" ;; esac changequote([,])dnl if test $LOCALE_FR != none || test $LOCALE_FR_UTF8 != none || test $LOCALE_JA != none || test $LOCALE_ZH_CN != none; then AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <locale.h> #include <string.h> #include <wchar.h> #include <stdlib.h> int main () { int result = 0; if (setlocale (LC_ALL, "$LOCALE_FR") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 1; } if (setlocale (LC_ALL, "$LOCALE_FR_UTF8") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 2; { wchar_t wc = (wchar_t) 0xBADFACE; if (mbtowc (&wc, "\303\274", 2) == 2) if (wcrtomb (NULL, wc, NULL) != 1) result |= 2; } } if (setlocale (LC_ALL, "$LOCALE_JA") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 4; } if (setlocale (LC_ALL, "$LOCALE_ZH_CN") != NULL) { if (wcrtomb (NULL, 0, NULL) != 1) result |= 8; } return result; }]])], [gl_cv_func_wcrtomb_retval=yes], [gl_cv_func_wcrtomb_retval=no], [:]) fi ]) case "$gl_cv_func_wcrtomb_retval" in *yes) ;; *) AC_DEFINE([WCRTOMB_RETVAL_BUG], [1], [Define if the wcrtomb function has an incorrect return value.]) REPLACE_WCRTOMB=1 ;; esac fi fi ]) # Prerequisites of lib/wcrtomb.c. AC_DEFUN([gl_PREREQ_WCRTOMB], [ : ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/sig_atomic_t.m4���������������������������������������������������������������������0000644�0000000�0000000�00000001103�14226564452�013334� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# sig_atomic_t.m4 serial 3 dnl Copyright (C) 2003, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gt_TYPE_SIG_ATOMIC_T], [ AC_CHECK_TYPES([sig_atomic_t], , [AC_DEFINE([sig_atomic_t], [int], [Define as an integer type suitable for memory locations that can be accessed atomically even in the presence of asynchronous signals.])], [#include <signal.h>]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/execute.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000000573�14226564451�012346� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# execute.m4 serial 5 dnl Copyright (C) 2003, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EXECUTE], [ dnl Prerequisites of lib/execute.c. AC_REQUIRE([AC_TYPE_MODE_T]) ]) �������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/vasprintf.m4������������������������������������������������������������������������0000644�0000000�0000000�00000002100�14226564453�012706� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# vasprintf.m4 serial 6 dnl Copyright (C) 2002-2003, 2006-2007, 2009-2022 Free Software Foundation, dnl Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_VASPRINTF], [ AC_CHECK_FUNCS([vasprintf]) if test $ac_cv_func_vasprintf = no; then gl_REPLACE_VASPRINTF fi ]) AC_DEFUN([gl_REPLACE_VASPRINTF], [ AC_LIBOBJ([vasprintf]) AC_LIBOBJ([asprintf]) AC_REQUIRE([gl_STDIO_H_DEFAULTS]) if test $ac_cv_func_vasprintf = yes; then REPLACE_VASPRINTF=1 else HAVE_VASPRINTF=0 fi gl_PREREQ_VASPRINTF_H gl_PREREQ_VASPRINTF gl_PREREQ_ASPRINTF ]) # Prerequisites of the vasprintf portion of lib/stdio.h. AC_DEFUN([gl_PREREQ_VASPRINTF_H], [ dnl Persuade glibc <stdio.h> to declare asprintf() and vasprintf(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) ]) # Prerequisites of lib/vasprintf.c. AC_DEFUN([gl_PREREQ_VASPRINTF], [ ]) # Prerequisites of lib/asprintf.c. AC_DEFUN([gl_PREREQ_ASPRINTF], [ ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/remove.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000002725�14226564452�012203� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# remove.m4 serial 5 dnl Copyright (C) 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_REMOVE], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_REQUIRE([gl_STDIO_H_DEFAULTS]) AC_REQUIRE([gl_FUNC_RMDIR]) AC_REQUIRE([gl_FUNC_UNLINK]) if { case "$gl_cv_func_rmdir_works:$gl_cv_func_unlink_honors_slashes" in *yes:*yes) false;; *) true;; esac }; then dnl If either underlying syscall is broken, then remove likely has dnl the same bug; blindly use our replacement. REPLACE_REMOVE=1 else dnl C89 requires remove(), but only POSIX requires it to handle dnl directories. On mingw, directories fails with EPERM. AC_CACHE_CHECK([whether remove handles directories], [gl_cv_func_remove_dir_works], [mkdir conftest.dir AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <stdio.h> ]], [[return remove ("conftest.dir");]])], [gl_cv_func_remove_dir_works=yes], [gl_cv_func_remove_dir_works=no], [case $host_os in mingw*) gl_cv_func_remove_dir_works="guessing no";; *) gl_cv_func_remove_dir_works="guessing yes";; esac]) rm -rf conftest.dir]) case $gl_cv_func_remove_dir_works in *no*) REPLACE_REMOVE=1;; esac fi ]) �������������������������������������������recutils-1.9/m4/zzgnulib.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000001522�14226564453�012545� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# zzgnulib.m4 serial 1 dnl Copyright (C) 2020-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl This file must be named something that sorts after all other dnl package- or gnulib-provided .m4 files - at least for those packages dnl that redefine AC_PROG_CC. dnl Redefine AC_PROG_CC so that it ends with invocations of gl_COMPILER_CLANG dnl and gl_COMPILER_PREPARE_CHECK_DECL. m4_define([AC_PROG_CC], m4_defn([AC_PROG_CC])[ gl_COMPILER_CLANG gl_COMPILER_PREPARE_CHECK_DECL ]) # gl_ZZGNULIB # ----------- # Witness macro that this file has been included. Needed to force # Automake to include this file after all other gnulib .m4 files. AC_DEFUN([gl_ZZGNULIB]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/locale_h.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000013756�14226564452�012462� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# locale_h.m4 serial 28 dnl Copyright (C) 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN_ONCE([gl_LOCALE_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) dnl Persuade glibc <locale.h> to define locale_t and the int_p_*, int_n_* dnl members of 'struct lconv'. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl If <stddef.h> is replaced, then <locale.h> must also be replaced. AC_REQUIRE([gl_STDDEF_H]) AC_REQUIRE([gl_LOCALE_T]) dnl Solaris 11.0 defines the int_p_*, int_n_* members of 'struct lconv' dnl only if _LCONV_C99 is defined. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in solaris*) AC_DEFINE([_LCONV_C99], [1], [Define to 1 on Solaris.]) ;; esac AC_CACHE_CHECK([whether locale.h conforms to POSIX:2001], [gl_cv_header_locale_h_posix2001], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h> int x = LC_MESSAGES; int y = sizeof (((struct lconv *) 0)->decimal_point);]], [[]])], [gl_cv_header_locale_h_posix2001=yes], [gl_cv_header_locale_h_posix2001=no])]) dnl Check whether 'struct lconv' is complete. dnl Bionic libc's 'struct lconv' is just a dummy. dnl On OpenBSD 4.9, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 9, Cygwin 1.5.x, dnl mingw, MSVC 9, it lacks the int_p_* and int_n_* members. AC_CACHE_CHECK([whether struct lconv is properly defined], [gl_cv_sys_struct_lconv_ok], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h> struct lconv l; int x = sizeof (l.decimal_point); int y = sizeof (l.int_p_cs_precedes);]], [[]])], [gl_cv_sys_struct_lconv_ok=yes], [gl_cv_sys_struct_lconv_ok=no]) ]) if test $gl_cv_sys_struct_lconv_ok = no; then dnl On native Windows with MSVC, merely define these member names as macros. dnl This avoids trouble in C++ mode. case "$host_os" in mingw*) AC_EGREP_CPP([Special], [ #ifdef _MSC_VER Special #endif ], [], [REPLACE_STRUCT_LCONV=1]) ;; *) REPLACE_STRUCT_LCONV=1 ;; esac fi dnl <locale.h> is always overridden, because of GNULIB_POSIXCHECK. gl_NEXT_HEADERS([locale.h]) dnl Check for declarations of anything we want to poison if the dnl corresponding gnulib module is not in use. gl_WARN_ON_USE_PREPARE([[#include <locale.h> /* Some systems provide declarations in a non-standard header. */ #if HAVE_XLOCALE_H # include <xlocale.h> #endif ]], [setlocale newlocale duplocale freelocale]) ]) dnl Checks to determine whether the system has the locale_t type, dnl and how to obtain it. AC_DEFUN([gl_LOCALE_T], [ dnl Persuade glibc and Solaris <locale.h> to define locale_t. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) dnl Check whether use of locale_t requires inclusion of <xlocale.h>, dnl e.g. on Mac OS X 10.5. If <locale.h> does not define locale_t by dnl itself, we assume that <xlocale.h> will do so. AC_CACHE_CHECK([whether locale.h defines locale_t], [gl_cv_header_locale_has_locale_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <locale.h> locale_t x;]], [[]])], [gl_cv_header_locale_has_locale_t=yes], [gl_cv_header_locale_has_locale_t=no]) ]) dnl Check for <xlocale.h>. AC_CHECK_HEADERS_ONCE([xlocale.h]) if test $ac_cv_header_xlocale_h = yes; then HAVE_XLOCALE_H=1 if test $gl_cv_header_locale_has_locale_t = yes; then gl_cv_header_locale_h_needs_xlocale_h=no else gl_cv_header_locale_h_needs_xlocale_h=yes fi HAVE_LOCALE_T=1 else HAVE_XLOCALE_H=0 gl_cv_header_locale_h_needs_xlocale_h=no if test $gl_cv_header_locale_has_locale_t = yes; then HAVE_LOCALE_T=1 else HAVE_LOCALE_T=0 fi fi AC_SUBST([HAVE_XLOCALE_H]) ]) # gl_LOCALE_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_LOCALE_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_LOCALE_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_LOCALE_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALECONV]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_SETLOCALE_NULL]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_DUPLOCALE]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALENAME]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_LOCALE_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_LOCALE_H_DEFAULTS]) ]) AC_DEFUN([gl_LOCALE_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_NEWLOCALE=1; AC_SUBST([HAVE_NEWLOCALE]) HAVE_DUPLOCALE=1; AC_SUBST([HAVE_DUPLOCALE]) HAVE_FREELOCALE=1; AC_SUBST([HAVE_FREELOCALE]) REPLACE_LOCALECONV=0; AC_SUBST([REPLACE_LOCALECONV]) REPLACE_SETLOCALE=0; AC_SUBST([REPLACE_SETLOCALE]) REPLACE_NEWLOCALE=0; AC_SUBST([REPLACE_NEWLOCALE]) REPLACE_DUPLOCALE=0; AC_SUBST([REPLACE_DUPLOCALE]) REPLACE_FREELOCALE=0; AC_SUBST([REPLACE_FREELOCALE]) REPLACE_STRUCT_LCONV=0; AC_SUBST([REPLACE_STRUCT_LCONV]) LOCALENAME_ENHANCE_LOCALE_FUNCS=0; AC_SUBST([LOCALENAME_ENHANCE_LOCALE_FUNCS]) ]) ������������������recutils-1.9/m4/pipe.m4�����������������������������������������������������������������������������0000644�0000000�0000000�00000000660�14226564447�011643� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# pipe.m4 serial 2 dnl Copyright (C) 2010-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_PIPE], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_CHECK_FUNCS_ONCE([pipe]) if test $ac_cv_func_pipe != yes; then HAVE_PIPE=0 fi ]) ��������������������������������������������������������������������������������recutils-1.9/m4/xsize.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000000626�14226564453�012047� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# xsize.m4 serial 5 dnl Copyright (C) 2003-2004, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_XSIZE], [ dnl Prerequisites of lib/xsize.h. AC_REQUIRE([gl_SIZE_MAX]) AC_CHECK_HEADERS([stdint.h]) ]) ����������������������������������������������������������������������������������������������������������recutils-1.9/m4/rawmemchr.m4������������������������������������������������������������������������0000644�0000000�0000000�00000001163�14226564452�012666� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rawmemchr.m4 serial 3 dnl Copyright (C) 2003, 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_RAWMEMCHR], [ dnl Persuade glibc <string.h> to declare rawmemchr(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([rawmemchr]) if test $ac_cv_func_rawmemchr = no; then HAVE_RAWMEMCHR=0 fi ]) # Prerequisites of lib/strchrnul.c. AC_DEFUN([gl_PREREQ_RAWMEMCHR], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/year2038.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000011437�14226564447�012167� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# year2038.m4 serial 7 dnl Copyright (C) 2017-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Attempt to ensure that 'time_t' can go past the year 2038 and that dnl the functions 'time', 'stat', etc. work with post-2038 timestamps. AC_DEFUN([gl_YEAR2038_EARLY], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) AC_DEFINE([__MINGW_USE_VC2005_COMPAT], [1], [For 64-bit time_t on 32-bit mingw.]) ;; esac ]) # gl_YEAR2038_TEST_INCLUDES # ------------------------- AC_DEFUN([gl_YEAR2038_TEST_INCLUDES], [[ #include <time.h> /* Check that time_t can represent 2**32 - 1 correctly. */ #define LARGE_TIME_T \\ ((time_t) (((time_t) 1 << 30) - 1 + 3 * ((time_t) 1 << 30))) int verify_time_t_range[(LARGE_TIME_T / 65537 == 65535 && LARGE_TIME_T % 65537 == 0) ? 1 : -1]; ]]) # gl_YEAR2038_BODY(REQUIRE-YEAR2038-SAFE) ----------------------------------------- AC_DEFUN([gl_YEAR2038_BODY], [ AC_ARG_ENABLE([year2038], [ --disable-year2038 omit support for timestamps past the year 2038]) AS_IF([test "$enable_year2038" != no], [ dnl On many systems, time_t is already a 64-bit type. dnl On those systems where time_t is still 32-bit, it requires kernel dnl and libc support to make it 64-bit. For glibc 2.34 and later on Linux, dnl defining _TIME_BITS=64 and _FILE_OFFSET_BITS=64 is needed on x86 and ARM. dnl dnl On native Windows, the system include files define types __time32_t dnl and __time64_t. By default, time_t is an alias of dnl - __time32_t on 32-bit mingw, dnl - __time64_t on 64-bit mingw and on MSVC (since MSVC 8). dnl But when compiling with -D__MINGW_USE_VC2005_COMPAT, time_t is an dnl alias of __time64_t. dnl And when compiling with -D_USE_32BIT_TIME_T, time_t is an alias of dnl __time32_t. AC_CACHE_CHECK([for time_t past the year 2038], [gl_cv_type_time_t_y2038], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE([gl_YEAR2038_TEST_INCLUDES])], [gl_cv_type_time_t_y2038=yes], [gl_cv_type_time_t_y2038=no]) ]) if test "$gl_cv_type_time_t_y2038" = no; then AC_CACHE_CHECK([for 64-bit time_t with _TIME_BITS=64], [gl_cv_type_time_t_bits_macro], [AC_COMPILE_IFELSE( [AC_LANG_SOURCE([[#define _TIME_BITS 64 #define _FILE_OFFSET_BITS 64 ]gl_YEAR2038_TEST_INCLUDES])], [gl_cv_type_time_t_bits_macro=yes], [gl_cv_type_time_t_bits_macro=no]) ]) if test "$gl_cv_type_time_t_bits_macro" = yes; then AC_DEFINE([_TIME_BITS], [64], [Number of bits in a timestamp, on hosts where this is settable.]) dnl AC_SYS_LARGFILE also defines this; it's OK if we do too. AC_DEFINE([_FILE_OFFSET_BITS], [64], [Number of bits in a file offset, on hosts where this is settable.]) gl_cv_type_time_t_y2038=yes fi fi if test $gl_cv_type_time_t_y2038 = no; then AC_COMPILE_IFELSE( [AC_LANG_SOURCE( [[#ifdef _USE_32BIT_TIME_T int ok; #else error fail #endif ]])], [AC_MSG_FAILURE( [The 'time_t' type stops working after January 2038. Remove _USE_32BIT_TIME_T from the compiler flags.])], [# If not cross-compiling and $1 says we should check, # and 'touch' works with a large timestamp, then evidently wider time_t # is desired and supported, so fail and ask the builder to fix the # problem. Otherwise, just warn the builder. m4_ifval([$1], [if test $cross_compiling = no \ && TZ=UTC0 touch -t 210602070628.15 conftest.time 2>/dev/null; then case `TZ=UTC0 LC_ALL=C ls -l conftest.time 2>/dev/null` in *'Feb 7 2106'* | *'Feb 7 17:10'*) AC_MSG_FAILURE( [The 'time_t' type stops working after January 2038, and your system appears to support a wider 'time_t'. Try configuring with 'CC="${CC} -m64"'. To build with a 32-bit time_t anyway (not recommended), configure with '--disable-year2038'.]);; esac rm -f conftest.time fi]) if test "$gl_warned_about_y2038" != yes; then AC_MSG_WARN( [The 'time_t' type stops working after January 2038, and this package needs a wider 'time_t' type if there is any way to access timestamps after that. Configure with 'CC="${CC} -m64"' perhaps?]) gl_warned_about_y2038=yes fi ]) fi]) ]) AC_DEFUN([gl_YEAR2038], [ gl_YEAR2038_BODY([require-year2038-safe]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/rewinddir.m4������������������������������������������������������������������������0000644�0000000�0000000�00000000702�14226564447�012672� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# rewinddir.m4 serial 1 dnl Copyright (C) 2011-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_REWINDDIR], [ AC_REQUIRE([gl_DIRENT_H_DEFAULTS]) AC_CHECK_FUNCS([rewinddir]) if test $ac_cv_func_rewinddir = no; then HAVE_REWINDDIR=0 fi ]) ��������������������������������������������������������������recutils-1.9/m4/frexp.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000012071�14226564452�012025� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# frexp.m4 serial 16 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_FREXP], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM]) FREXP_LIBM= if test $gl_cv_func_frexp_no_libm = no; then AC_CACHE_CHECK([whether frexp() can be used with libm], [gl_cv_func_frexp_in_libm], [ save_LIBS="$LIBS" LIBS="$LIBS -lm" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> double x;]], [[int e; return frexp (x, &e) > 0;]])], [gl_cv_func_frexp_in_libm=yes], [gl_cv_func_frexp_in_libm=no]) LIBS="$save_LIBS" ]) if test $gl_cv_func_frexp_in_libm = yes; then FREXP_LIBM=-lm fi fi if test $gl_cv_func_frexp_no_libm = yes \ || test $gl_cv_func_frexp_in_libm = yes; then save_LIBS="$LIBS" LIBS="$LIBS $FREXP_LIBM" gl_FUNC_FREXP_WORKS LIBS="$save_LIBS" case "$gl_cv_func_frexp_works" in *yes) gl_func_frexp=yes ;; *) gl_func_frexp=no; REPLACE_FREXP=1; FREXP_LIBM= ;; esac else gl_func_frexp=no fi if test $gl_func_frexp = yes; then AC_DEFINE([HAVE_FREXP], [1], [Define if the frexp() function is available and works.]) fi AC_SUBST([FREXP_LIBM]) ]) AC_DEFUN([gl_FUNC_FREXP_NO_LIBM], [ AC_REQUIRE([gl_MATH_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_FREXP_NO_LIBM]) if test $gl_cv_func_frexp_no_libm = yes; then gl_FUNC_FREXP_WORKS case "$gl_cv_func_frexp_works" in *yes) gl_func_frexp_no_libm=yes ;; *) gl_func_frexp_no_libm=no; REPLACE_FREXP=1 ;; esac else gl_func_frexp_no_libm=no dnl Set REPLACE_FREXP here because the system may have frexp in libm. REPLACE_FREXP=1 fi if test $gl_func_frexp_no_libm = yes; then AC_DEFINE([HAVE_FREXP_IN_LIBC], [1], [Define if the frexp() function is available in libc.]) fi ]) dnl Test whether frexp() can be used without linking with libm. dnl Set gl_cv_func_frexp_no_libm to 'yes' or 'no' accordingly. AC_DEFUN([gl_CHECK_FREXP_NO_LIBM], [ AC_CACHE_CHECK([whether frexp() can be used without linking with libm], [gl_cv_func_frexp_no_libm], [ AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <math.h> double x;]], [[int e; return frexp (x, &e) > 0;]])], [gl_cv_func_frexp_no_libm=yes], [gl_cv_func_frexp_no_libm=no]) ]) ]) dnl Test whether frexp() works also on denormalized numbers (this fails e.g. on dnl NetBSD 3.0), on infinite numbers (this fails e.g. on IRIX 6.5 and mingw), dnl and on negative zero (this fails e.g. on NetBSD 4.99 and mingw). AC_DEFUN([gl_FUNC_FREXP_WORKS], [ AC_REQUIRE([AC_PROG_CC]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([alarm]) AC_CACHE_CHECK([whether frexp works], [gl_cv_func_frexp_works], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <math.h> #include <string.h> #if HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif /* HP cc on HP-UX 10.20 has a bug with the constant expression -0.0. ICC 10.0 has a bug when optimizing the expression -zero. The expression -DBL_MIN * DBL_MIN does not work when cross-compiling to PowerPC on Mac OS X 10.5. */ #if defined __hpux || defined __sgi || defined __ICC static double compute_minus_zero (void) { return -DBL_MIN * DBL_MIN; } # define minus_zero compute_minus_zero () #else double minus_zero = -0.0; #endif int main() { int result = 0; int i; volatile double x; double zero = 0.0; #if HAVE_DECL_ALARM /* NeXTstep 3.3 frexp() runs into an endless loop when called on an infinite number. Let the test fail in this case. */ signal (SIGALRM, SIG_DFL); alarm (5); #endif /* Test on denormalized numbers. */ for (i = 1, x = 1.0; i >= DBL_MIN_EXP; i--, x *= 0.5) ; if (x > 0.0) { int exp; double y = frexp (x, &exp); /* On machines with IEEE754 arithmetic: x = 1.11254e-308, exp = -1022. On NetBSD: y = 0.75. Correct: y = 0.5. */ if (y != 0.5) result |= 1; } /* Test on infinite numbers. */ x = 1.0 / zero; { int exp; double y = frexp (x, &exp); if (y != x) result |= 2; } /* Test on negative zero. */ x = minus_zero; { int exp; double y = frexp (x, &exp); if (memcmp (&y, &x, sizeof x)) result |= 4; } return result; }]])], [gl_cv_func_frexp_works=yes], [gl_cv_func_frexp_works=no], [case "$host_os" in netbsd* | irix*) gl_cv_func_frexp_works="guessing no" ;; mingw*) # Guess yes with MSVC, no with mingw. AC_EGREP_CPP([Good], [ #ifdef _MSC_VER Good #endif ], [gl_cv_func_frexp_works="guessing yes"], [gl_cv_func_frexp_works="guessing no"]) ;; *) gl_cv_func_frexp_works="guessing yes" ;; esac ]) ]) ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/threadlib.m4������������������������������������������������������������������������0000644�0000000�0000000�00000060253�14226564453�012645� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# threadlib.m4 serial 32 dnl Copyright (C) 2005-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_PREREQ([2.60]) dnl The general structure of the multithreading modules in gnulib is that we dnl have three set of modules: dnl dnl * POSIX API: dnl pthread, which combines dnl pthread-h dnl pthread-thread dnl pthread-once dnl pthread-mutex dnl pthread-rwlock dnl pthread-cond dnl pthread-tss dnl pthread-spin dnl sched_yield dnl dnl * ISO C API: dnl threads, which combines dnl threads-h dnl thrd dnl mtx dnl cnd dnl tss dnl dnl * Gnulib API, with an implementation that can be chosen at configure dnl time through the option --enable-threads=... dnl thread dnl lock dnl cond dnl tls dnl yield dnl dnl They are independent, except for the fact that dnl - the implementation of the ISO C API may use the POSIX (or some other dnl platform dependent) API, dnl - the implementation of the Gnulib API may use the POSIX or ISO C or dnl some other platform dependent API, depending on the --enable-threads dnl option. dnl dnl This file contains macros for all of these APIs! dnl ============================================================================ dnl Macros for all thread APIs AC_DEFUN([gl_ANYTHREADLIB_EARLY], [ AC_REQUIRE([AC_CANONICAL_HOST]) if test -z "$gl_anythreadlib_early_done"; then case "$host_os" in osf*) # On OSF/1, the compiler needs the flag -D_REENTRANT so that it # groks <pthread.h>. cc also understands the flag -pthread, but # we don't use it because 1. gcc-2.95 doesn't understand -pthread, # 2. putting a flag into CPPFLAGS that has an effect on the linker # causes the AC_LINK_IFELSE test below to succeed unexpectedly, # leading to wrong values of LIBTHREAD and LTLIBTHREAD. CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac # Some systems optimize for single-threaded programs by default, and # need special flags to disable these optimizations. For example, the # definition of 'errno' in <errno.h>. case "$host_os" in aix* | freebsd*) CPPFLAGS="$CPPFLAGS -D_THREAD_SAFE" ;; solaris*) CPPFLAGS="$CPPFLAGS -D_REENTRANT" ;; esac gl_anythreadlib_early_done=done fi ]) dnl Checks whether the compiler and linker support weak declarations of symbols. AC_DEFUN([gl_WEAK_SYMBOLS], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether imported symbols can be declared weak], [gl_cv_have_weak], [case "$host_os" in cygwin*) dnl On Cygwin 3.2.0 with gcc 10.2, the test below would succeed, but dnl programs that use pthread_in_use() with weak symbol references dnl crash miserably at runtime. gl_cv_have_weak="guessing no" ;; *) gl_cv_have_weak=no dnl First, test whether the compiler accepts it syntactically. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[extern void xyzzy (); #pragma weak xyzzy]], [[xyzzy();]])], [gl_cv_have_weak=maybe]) if test $gl_cv_have_weak = maybe; then dnl Second, test whether it actually works. On Cygwin 1.7.2, with dnl gcc 4.3, symbols declared weak always evaluate to the address 0. AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <stdio.h> #pragma weak fputs int main () { return (fputs == NULL); }]])], [gl_cv_have_weak=yes], [gl_cv_have_weak=no], [dnl When cross-compiling, assume that only ELF platforms support dnl weak symbols. AC_EGREP_CPP([Extensible Linking Format], [#ifdef __ELF__ Extensible Linking Format #endif ], [gl_cv_have_weak="guessing yes"], [gl_cv_have_weak="guessing no"]) ]) fi ;; esac dnl But when linking statically, weak symbols don't work. case " $LDFLAGS " in *" -static "*) gl_cv_have_weak=no ;; esac dnl Test for a bug in FreeBSD 11: A link error occurs when using a weak dnl symbol and linking against a shared library that has a dependency on dnl the shared library that defines the symbol. case "$gl_cv_have_weak" in *yes) case "$host_os" in freebsd* | dragonfly* | midnightbsd*) : > conftest1.c $CC $CPPFLAGS $CFLAGS $LDFLAGS -fPIC -shared -o libempty.so conftest1.c -lpthread >&AS_MESSAGE_LOG_FD 2>&1 cat <<EOF > conftest2.c #include <pthread.h> #pragma weak pthread_mutexattr_gettype int main () { return (pthread_mutexattr_gettype != NULL); } EOF $CC $CPPFLAGS $CFLAGS $LDFLAGS -o conftest conftest2.c libempty.so >&AS_MESSAGE_LOG_FD 2>&1 \ || gl_cv_have_weak=no rm -f conftest1.c libempty.so conftest2.c conftest ;; esac ;; esac ]) case "$gl_cv_have_weak" in *yes) AC_DEFINE([HAVE_WEAK_SYMBOLS], [1], [Define to 1 if the compiler and linker support weak declarations of symbols.]) ;; esac ]) dnl ============================================================================ dnl Macros for the POSIX API dnl gl_PTHREADLIB dnl ------------- dnl Tests for the libraries needs for using the POSIX threads API. dnl Sets the variable LIBPTHREAD to the linker options for use in a Makefile. dnl Sets the variable LIBPMULTITHREAD, for programs that really need dnl multithread functionality. The difference between LIBPTHREAD and dnl LIBPMULTITHREAD is that on platforms supporting weak symbols, typically dnl LIBPTHREAD is empty whereas LIBPMULTITHREAD is not. dnl Sets the variable LIB_SCHED_YIELD to the linker options needed to use the dnl sched_yield() function. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. dnl Defines the C macro HAVE_PTHREAD_API if (at least parts of) the POSIX dnl threads API is available. dnl The guts of gl_PTHREADLIB. Needs to be expanded only once. AC_DEFUN([gl_PTHREADLIB_BODY], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) if test -z "$gl_pthreadlib_body_done"; then gl_pthread_api=no LIBPTHREAD= LIBPMULTITHREAD= # On OSF/1, the compiler needs the flag -pthread or -D_REENTRANT so that # it groks <pthread.h>. It's added above, in gl_ANYTHREADLIB_EARLY. AC_CHECK_HEADER([pthread.h], [gl_have_pthread_h=yes], [gl_have_pthread_h=no]) if test "$gl_have_pthread_h" = yes; then # Other possible tests: # -lpthreads (FSU threads, PCthreads) # -lgthreads # Test whether both pthread_mutex_lock and pthread_mutexattr_init exist # in libc. IRIX 6.5 has the first one in both libc and libpthread, but # the second one only in libpthread, and lock.c needs it. # # If -pthread works, prefer it to -lpthread, since Ubuntu 14.04 # needs -pthread for some reason. See: # https://lists.gnu.org/r/bug-gnulib/2014-09/msg00023.html save_LIBS=$LIBS for gl_pthread in '' '-pthread'; do LIBS="$LIBS $gl_pthread" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> pthread_mutex_t m; pthread_mutexattr_t ma; ]], [[pthread_mutex_lock (&m); pthread_mutexattr_init (&ma);]])], [gl_pthread_api=yes LIBPTHREAD=$gl_pthread LIBPMULTITHREAD=$gl_pthread]) LIBS=$save_LIBS test $gl_pthread_api = yes && break done echo "$as_me:__oline__: gl_pthread_api=$gl_pthread_api" >&AS_MESSAGE_LOG_FD echo "$as_me:__oline__: LIBPTHREAD=$LIBPTHREAD" >&AS_MESSAGE_LOG_FD gl_pthread_in_glibc=no # On Linux with glibc >= 2.34, libc contains the fully functional # pthread functions. case "$host_os" in linux*) AC_EGREP_CPP([Lucky user], [#include <features.h> #ifdef __GNU_LIBRARY__ #if (__GLIBC__ == 2 && __GLIBC_MINOR__ >= 34) || (__GLIBC__ > 2) Lucky user #endif #endif ], [gl_pthread_in_glibc=yes], []) ;; esac echo "$as_me:__oline__: gl_pthread_in_glibc=$gl_pthread_in_glibc" >&AS_MESSAGE_LOG_FD # Test for libpthread by looking for pthread_kill. (Not pthread_self, # since it is defined as a macro on OSF/1.) if test $gl_pthread_api = yes && test -z "$LIBPTHREAD"; then # The program links fine without libpthread. But it may actually # need to link with libpthread in order to create multiple threads. AC_CHECK_LIB([pthread], [pthread_kill], [if test $gl_pthread_in_glibc = yes; then LIBPMULTITHREAD= else LIBPMULTITHREAD=-lpthread # On Solaris and HP-UX, most pthread functions exist also in libc. # Therefore pthread_in_use() needs to actually try to create a # thread: pthread_create from libc will fail, whereas # pthread_create will actually create a thread. # On Solaris 10 or newer, this test is no longer needed, because # libc contains the fully functional pthread functions. case "$host_os" in solaris | solaris2.[1-9] | solaris2.[1-9].* | hpux*) AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], [Define if the pthread_in_use() detection is hard.]) esac fi ]) elif test $gl_pthread_api != yes; then # Some library is needed. Try libpthread and libc_r. AC_CHECK_LIB([pthread], [pthread_kill], [gl_pthread_api=yes LIBPTHREAD=-lpthread LIBPMULTITHREAD=-lpthread]) if test $gl_pthread_api != yes; then # For FreeBSD 4. AC_CHECK_LIB([c_r], [pthread_kill], [gl_pthread_api=yes LIBPTHREAD=-lc_r LIBPMULTITHREAD=-lc_r]) fi fi echo "$as_me:__oline__: LIBPMULTITHREAD=$LIBPMULTITHREAD" >&AS_MESSAGE_LOG_FD fi AC_MSG_CHECKING([whether POSIX threads API is available]) AC_MSG_RESULT([$gl_pthread_api]) AC_SUBST([LIBPTHREAD]) AC_SUBST([LIBPMULTITHREAD]) if test $gl_pthread_api = yes; then AC_DEFINE([HAVE_PTHREAD_API], [1], [Define if you have the <pthread.h> header and the POSIX threads API.]) fi dnl On some systems, sched_yield is in librt, rather than in libpthread. AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <sched.h>]], [[sched_yield ();]])], [LIB_SCHED_YIELD= ], [dnl Solaris 7...10 has sched_yield in librt, not in libpthread or libc. AC_CHECK_LIB([rt], [sched_yield], [LIB_SCHED_YIELD=-lrt], [dnl Solaris 2.5.1, 2.6 has sched_yield in libposix4, not librt. AC_CHECK_LIB([posix4], [sched_yield], [LIB_SCHED_YIELD=-lposix4])]) ]) AC_SUBST([LIB_SCHED_YIELD]) gl_pthreadlib_body_done=done fi ]) AC_DEFUN([gl_PTHREADLIB], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) gl_PTHREADLIB_BODY ]) dnl ============================================================================ dnl Macros for the ISO C API dnl gl_STDTHREADLIB dnl --------------- dnl Tests for the libraries needs for using the ISO C threads API. dnl Sets the variable LIBSTDTHREAD to the linker options for use in a Makefile. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. dnl Defines the C macro HAVE_THREADS_H if (at least parts of) the ISO C threads dnl API is available. dnl The guts of gl_STDTHREADLIB. Needs to be expanded only once. AC_DEFUN([gl_STDTHREADLIB_BODY], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) AC_REQUIRE([AC_CANONICAL_HOST]) if test -z "$gl_stdthreadlib_body_done"; then AC_CHECK_HEADERS_ONCE([threads.h]) case "$host_os" in mingw*) LIBSTDTHREAD= ;; *) gl_PTHREADLIB_BODY if test $ac_cv_header_threads_h = yes; then dnl glibc >= 2.29 has thrd_create in libpthread. dnl FreeBSD >= 10 has thrd_create in libstdthreads; this library depends dnl on libpthread (for the symbol 'pthread_mutexattr_gettype'). dnl glibc >= 2.34, AIX >= 7.1, and Solaris >= 11.4 have thrd_create in dnl libc. AC_CHECK_FUNCS([thrd_create]) if test $ac_cv_func_thrd_create = yes; then LIBSTDTHREAD= else AC_CHECK_LIB([stdthreads], [thrd_create], [ LIBSTDTHREAD='-lstdthreads -lpthread' ], [ dnl Guess that thrd_create is in libpthread. LIBSTDTHREAD="$LIBPMULTITHREAD" ]) fi else dnl Libraries needed by thrd.c, mtx.c, cnd.c, tss.c. LIBSTDTHREAD="$LIBPMULTITHREAD $LIB_SCHED_YIELD" fi ;; esac AC_SUBST([LIBSTDTHREAD]) AC_MSG_CHECKING([whether ISO C threads API is available]) AC_MSG_RESULT([$ac_cv_header_threads_h]) gl_stdthreadlib_body_done=done fi ]) AC_DEFUN([gl_STDTHREADLIB], [ AC_REQUIRE([gl_ANYTHREADLIB_EARLY]) gl_STDTHREADLIB_BODY ]) dnl ============================================================================ dnl Macros for the Gnulib API dnl gl_THREADLIB dnl ------------ dnl Tests for a multithreading library to be used. dnl If the configure.ac contains a definition of the gl_THREADLIB_DEFAULT_NO dnl (it must be placed before the invocation of gl_THREADLIB_EARLY!), then the dnl default is 'no', otherwise it is system dependent. In both cases, the user dnl can change the choice through the options --enable-threads=choice or dnl --disable-threads. dnl Defines at most one of the macros USE_ISOC_THREADS, USE_POSIX_THREADS, dnl USE_ISOC_AND_POSIX_THREADS, USE_WINDOWS_THREADS. dnl The choice --enable-threads=isoc+posix is available only on platforms that dnl have both the ISO C and the POSIX threads APIs. It has the effect of using dnl the ISO C API for most things and the POSIX API only for creating and dnl controlling threads (because there is no equivalent to pthread_atfork in dnl the ISO C API). dnl Sets the variables LIBTHREAD and LTLIBTHREAD to the linker options for use dnl in a Makefile (LIBTHREAD for use without libtool, LTLIBTHREAD for use with dnl libtool). dnl Sets the variables LIBMULTITHREAD and LTLIBMULTITHREAD similarly, for dnl programs that really need multithread functionality. The difference dnl between LIBTHREAD and LIBMULTITHREAD is that on platforms supporting weak dnl symbols, typically LIBTHREAD is empty whereas LIBMULTITHREAD is not. dnl Adds to CPPFLAGS the flag -D_REENTRANT or -D_THREAD_SAFE if needed for dnl multithread-safe programs. dnl Since support for GNU pth was removed, $LTLIBTHREAD and $LIBTHREAD have the dnl same value, and similarly $LTLIBMULTITHREAD and $LIBMULTITHREAD have the dnl same value. Only system libraries are needed. AC_DEFUN([gl_THREADLIB_EARLY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) ]) dnl The guts of gl_THREADLIB_EARLY. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_EARLY_BODY], [ dnl Ordering constraints: This macro modifies CPPFLAGS in a way that dnl influences the result of the autoconf tests that test for *_unlocked dnl declarations, on AIX 5 at least. Therefore it must come early. AC_BEFORE([$0], [gl_FUNC_GLIBC_UNLOCKED_IO])dnl AC_BEFORE([$0], [gl_ARGP])dnl AC_REQUIRE([AC_CANONICAL_HOST]) dnl _GNU_SOURCE is needed for pthread_rwlock_t on glibc systems. AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl Check for multithreading. m4_ifdef([gl_THREADLIB_DEFAULT_NO], [m4_divert_text([DEFAULTS], [gl_use_threads_default=no])], [m4_divert_text([DEFAULTS], [gl_use_threads_default=])]) m4_divert_text([DEFAULTS], [gl_use_winpthreads_default=]) AC_ARG_ENABLE([threads], AS_HELP_STRING([--enable-threads={isoc|posix|isoc+posix|windows}], [specify multithreading API])m4_ifdef([gl_THREADLIB_DEFAULT_NO], [], [ AS_HELP_STRING([--disable-threads], [build without multithread safety])]), [gl_use_threads=$enableval], [if test -n "$gl_use_threads_default"; then gl_use_threads="$gl_use_threads_default" else changequote(,)dnl case "$host_os" in dnl Disable multithreading by default on OSF/1, because it interferes dnl with fork()/exec(): When msgexec is linked with -lpthread, its dnl child process gets an endless segmentation fault inside execvp(). osf*) gl_use_threads=no ;; dnl Disable multithreading by default on Cygwin 1.5.x, because it has dnl bugs that lead to endless loops or crashes. See dnl <https://cygwin.com/ml/cygwin/2009-08/msg00283.html>. cygwin*) case `uname -r` in 1.[0-5].*) gl_use_threads=no ;; *) gl_use_threads=yes ;; esac ;; dnl Obey gl_AVOID_WINPTHREAD on mingw. mingw*) case "$gl_use_winpthreads_default" in yes) gl_use_threads=posix ;; no) gl_use_threads=windows ;; *) gl_use_threads=yes ;; esac ;; *) gl_use_threads=yes ;; esac changequote([,])dnl fi ]) if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = isoc \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then # For using <threads.h> or <pthread.h>: gl_ANYTHREADLIB_EARLY fi ]) dnl The guts of gl_THREADLIB. Needs to be expanded only once. AC_DEFUN([gl_THREADLIB_BODY], [ AC_REQUIRE([gl_THREADLIB_EARLY_BODY]) gl_threads_api=none LIBTHREAD= LTLIBTHREAD= LIBMULTITHREAD= LTLIBMULTITHREAD= if test "$gl_use_threads" != no; then dnl Check whether the compiler and linker support weak declarations. gl_WEAK_SYMBOLS if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then dnl If we use weak symbols to implement pthread_in_use / pth_in_use / dnl thread_in_use, we also need to test whether the ISO C 11 thrd_create dnl facility is in use. AC_CHECK_HEADERS_ONCE([threads.h]) : fi if test "$gl_use_threads" = isoc || test "$gl_use_threads" = isoc+posix; then AC_CHECK_HEADERS_ONCE([threads.h]) gl_have_isoc_threads="$ac_cv_header_threads_h" fi if test "$gl_use_threads" = yes \ || test "$gl_use_threads" = posix \ || test "$gl_use_threads" = isoc+posix; then gl_PTHREADLIB_BODY LIBTHREAD=$LIBPTHREAD LTLIBTHREAD=$LIBPTHREAD LIBMULTITHREAD=$LIBPMULTITHREAD LTLIBMULTITHREAD=$LIBPMULTITHREAD if test $gl_pthread_api = yes; then if test "$gl_use_threads" = isoc+posix && test "$gl_have_isoc_threads" = yes; then gl_threads_api='isoc+posix' AC_DEFINE([USE_ISOC_AND_POSIX_THREADS], [1], [Define if the combination of the ISO C and POSIX multithreading APIs can be used.]) LIBTHREAD= LTLIBTHREAD= else gl_threads_api=posix AC_DEFINE([USE_POSIX_THREADS], [1], [Define if the POSIX multithreading library can be used.]) if test -z "$LIBMULTITHREAD" && test -z "$LTLIBMULTITHREAD"; then AC_DEFINE([USE_POSIX_THREADS_FROM_LIBC], [1], [Define if references to the POSIX multithreading library are satisfied by libc.]) else if case "$gl_cv_have_weak" in *yes) true;; *) false;; esac; then AC_DEFINE([USE_POSIX_THREADS_WEAK], [1], [Define if references to the POSIX multithreading library should be made weak.]) LIBTHREAD= LTLIBTHREAD= else case "$host_os" in freebsd* | dragonfly* | midnightbsd*) if test "x$LIBTHREAD" != "x$LIBMULTITHREAD"; then dnl If weak symbols can't tell whether pthread_create(), pthread_key_create() dnl etc. will succeed, we need a runtime test. AC_DEFINE([PTHREAD_IN_USE_DETECTION_HARD], [1], [Define if the pthread_in_use() detection is hard.]) fi ;; esac fi fi fi fi fi if test $gl_threads_api = none; then if test "$gl_use_threads" = isoc && test "$gl_have_isoc_threads" = yes; then gl_STDTHREADLIB_BODY LIBTHREAD=$LIBSTDTHREAD LTLIBTHREAD=$LIBSTDTHREAD LIBMULTITHREAD=$LIBSTDTHREAD LTLIBMULTITHREAD=$LIBSTDTHREAD gl_threads_api=isoc AC_DEFINE([USE_ISOC_THREADS], [1], [Define if the ISO C multithreading library can be used.]) fi fi if test $gl_threads_api = none; then case "$gl_use_threads" in yes | windows | win32) # The 'win32' is for backward compatibility. if { case "$host_os" in mingw*) true;; *) false;; esac }; then gl_threads_api=windows AC_DEFINE([USE_WINDOWS_THREADS], [1], [Define if the native Windows multithreading API can be used.]) fi ;; esac fi fi AC_MSG_CHECKING([for multithread API to use]) AC_MSG_RESULT([$gl_threads_api]) AC_SUBST([LIBTHREAD]) AC_SUBST([LTLIBTHREAD]) AC_SUBST([LIBMULTITHREAD]) AC_SUBST([LTLIBMULTITHREAD]) ]) AC_DEFUN([gl_THREADLIB], [ AC_REQUIRE([gl_THREADLIB_EARLY]) AC_REQUIRE([gl_THREADLIB_BODY]) ]) dnl gl_DISABLE_THREADS dnl ------------------ dnl Sets the gl_THREADLIB default so that threads are not used by default. dnl The user can still override it at installation time, by using the dnl configure option '--enable-threads'. AC_DEFUN([gl_DISABLE_THREADS], [ m4_divert_text([INIT_PREPARE], [gl_use_threads_default=no]) ]) dnl gl_AVOID_WINPTHREAD dnl ------------------- dnl Sets the gl_THREADLIB default so that on mingw, a dependency to the dnl libwinpthread DLL (mingw-w64 winpthreads library) is avoided. dnl The user can still override it at installation time, by using the dnl configure option '--enable-threads'. AC_DEFUN([gl_AVOID_WINPTHREAD], [ m4_divert_text([INIT_PREPARE], [gl_use_winpthreads_default=no]) ]) dnl ============================================================================ dnl Survey of platforms: dnl dnl Platform Available Compiler Supports test-lock dnl flavours option weak result dnl --------------- --------- --------- -------- --------- dnl Linux 2.4/glibc posix -lpthread Y OK dnl dnl Linux/glibc 2.34 posix Y OK dnl dnl GNU Hurd/glibc posix -lpthread Y OK dnl dnl Ubuntu 14.04 posix -pthread Y OK dnl dnl FreeBSD 5.3 posix -lc_r Y dnl posix -lkse ? Y dnl posix -lpthread ? Y dnl posix -lthr Y dnl dnl FreeBSD 5.2 posix -lc_r Y dnl posix -lkse Y dnl posix -lthr Y dnl dnl FreeBSD 4.0,4.10 posix -lc_r Y OK dnl dnl NetBSD 1.6 -- dnl dnl OpenBSD 3.4 posix -lpthread Y OK dnl dnl Mac OS X 10.[123] posix -lpthread Y OK dnl dnl Solaris 7,8,9 posix -lpthread Y Sol 7,8: 0.0; Sol 9: OK dnl dnl HP-UX 11 posix -lpthread N (cc) OK dnl Y (gcc) dnl dnl IRIX 6.5 posix -lpthread Y 0.5 dnl dnl AIX 4.3,5.1 posix -lpthread N AIX 4: 0.5; AIX 5: OK dnl dnl OSF/1 4.0,5.1 posix -pthread (cc) N OK dnl -lpthread (gcc) Y dnl dnl Cygwin posix -lpthread Y OK dnl dnl Mingw windows N OK dnl dnl BeOS 5 -- dnl dnl The test-lock result shows what happens if in test-lock.c EXPLICIT_YIELD is dnl turned off: dnl OK if all three tests terminate OK, dnl 0.5 if the first test terminates OK but the second one loops endlessly, dnl 0.0 if the first test already loops endlessly. �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/utimes.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000011752�14226564453�012215� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Detect some bugs in glibc's implementation of utimes. # serial 8 dnl Copyright (C) 2003-2005, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. # See if we need to work around bugs in glibc's implementation of # utimes from 2003-07-12 to 2003-09-17. # First, there was a bug that would make utimes set mtime # and atime to zero (1970-01-01) unconditionally. # Then, there was code to round rather than truncate. # Then, there was an implementation (sparc64, Linux-2.4.28, glibc-2.3.3) # that didn't honor the NULL-means-set-to-current-time semantics. # Finally, there was also a version of utimes that failed on read-only # files, while utime worked fine (linux-2.2.20, glibc-2.2.5). # # From Jim Meyering, with suggestions from Paul Eggert. AC_DEFUN([gl_FUNC_UTIMES], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([whether the utimes function works], [gl_cv_func_working_utimes], [AC_RUN_IFELSE([AC_LANG_SOURCE([[ #include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <sys/time.h> #include <time.h> #include <unistd.h> #include <stdlib.h> #include <stdio.h> #include <utime.h> #include <errno.h> ]GL_MDA_DEFINES[ static int inorder (time_t a, time_t b, time_t c) { return a <= b && b <= c; } int main () { int result = 0; char const *file = "conftest.utimes"; /* On OS/2, file timestamps must be on or after 1980 in local time, with an even number of seconds. */ static struct timeval timeval[2] = {{315620000 + 10, 10}, {315620000 + 1000000, 999998}}; /* Test whether utimes() essentially works. */ { struct stat sbuf; FILE *f = fopen (file, "w"); if (f == NULL) result |= 1; else if (fclose (f) != 0) result |= 1; else if (utimes (file, timeval) != 0) result |= 2; else if (lstat (file, &sbuf) != 0) result |= 1; else if (!(sbuf.st_atime == timeval[0].tv_sec && sbuf.st_mtime == timeval[1].tv_sec)) result |= 4; if (unlink (file) != 0) result |= 1; } /* Test whether utimes() with a NULL argument sets the file's timestamp to the current time. Use 'fstat' as well as 'time' to determine the "current" time, to accommodate NFS file systems if there is a time skew between the host and the NFS server. */ { int fd = open (file, O_WRONLY|O_CREAT, 0644); if (fd < 0) result |= 1; else { time_t t0, t2; struct stat st0, st1, st2; if (time (&t0) == (time_t) -1) result |= 1; else if (fstat (fd, &st0) != 0) result |= 1; else if (utimes (file, timeval) != 0 && (errno != EACCES /* OS/2 kLIBC utimes fails on opened files. */ || close (fd) != 0 || utimes (file, timeval) != 0 || (fd = open (file, O_WRONLY)) < 0)) result |= 2; else if (utimes (file, NULL) != 0 && (errno != EACCES /* OS/2 kLIBC utimes fails on opened files. */ || close (fd) != 0 || utimes (file, NULL) != 0 || (fd = open (file, O_WRONLY)) < 0)) result |= 8; else if (fstat (fd, &st1) != 0) result |= 1; else if (write (fd, "\n", 1) != 1) result |= 1; else if (fstat (fd, &st2) != 0) result |= 1; else if (time (&t2) == (time_t) -1) result |= 1; else { int m_ok_POSIX = inorder (t0, st1.st_mtime, t2); int m_ok_NFS = inorder (st0.st_mtime, st1.st_mtime, st2.st_mtime); if (! (st1.st_atime == st1.st_mtime)) result |= 16; if (! (m_ok_POSIX || m_ok_NFS)) result |= 32; } if (close (fd) != 0) result |= 1; } if (unlink (file) != 0) result |= 1; } /* Test whether utimes() with a NULL argument works on read-only files. */ { int fd = open (file, O_WRONLY|O_CREAT, 0444); if (fd < 0) result |= 1; else if (close (fd) != 0) result |= 1; else if (utimes (file, NULL) != 0) result |= 64; if (unlink (file) != 0) result |= 1; } return result; } ]])], [gl_cv_func_working_utimes=yes], [gl_cv_func_working_utimes=no], [case "$host_os" in # Guess yes on musl systems. *-musl*) gl_cv_func_working_utimes="guessing yes" ;; # Guess no on native Windows. mingw*) gl_cv_func_working_utimes="guessing no" ;; *) gl_cv_func_working_utimes="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_working_utimes" in *yes) AC_DEFINE([HAVE_WORKING_UTIMES], [1], [Define if utimes works properly.]) ;; esac ]) ����������������������recutils-1.9/m4/stdarg.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000005233�14226564452�012167� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stdarg.m4 serial 8 dnl Copyright (C) 2006, 2008-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. dnl Provide a working va_copy in combination with <stdarg.h>. AC_DEFUN([gl_STDARG_H], [ GL_GENERATE_STDARG_H=false NEXT_STDARG_H='<stdarg.h>' AC_CACHE_CHECK([for va_copy], [gl_cv_func_va_copy], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdarg.h>]], [[ #ifndef va_copy void (*func) (va_list, va_list) = va_copy; #endif ]])], [gl_cv_func_va_copy=yes], [gl_cv_func_va_copy=no]) ]) if test $gl_cv_func_va_copy = no; then dnl Provide a substitute. dnl Usually a simple definition in <config.h> is enough. Not so on AIX 5 dnl with some versions of the /usr/vac/bin/cc compiler. It has an <stdarg.h> dnl which does '#undef va_copy', leading to a missing va_copy symbol. For dnl this platform, we use an <stdarg.h> substitute. But we cannot use this dnl approach on other platforms, because <stdarg.h> often defines only dnl preprocessor macros and gl_ABSOLUTE_HEADER, gl_CHECK_NEXT_HEADERS do dnl not work in this situation. AC_EGREP_CPP([vaccine], [#if defined _AIX && !defined __GNUC__ AIX vaccine #endif ], [gl_aixcc=yes], [gl_aixcc=no]) if test $gl_aixcc = yes; then dnl Provide a substitute <stdarg.h> file. GL_GENERATE_STDARG_H=true gl_NEXT_HEADERS([stdarg.h]) dnl Fallback for the case when <stdarg.h> contains only macro definitions. if test "$gl_cv_next_stdarg_h" = '""'; then gl_cv_next_stdarg_h='"///usr/include/stdarg.h"' NEXT_STDARG_H="$gl_cv_next_stdarg_h" fi else dnl Provide a substitute in <config.h>, either __va_copy or as a simple dnl assignment. gl_CACHE_VAL_SILENT([gl_cv_func___va_copy], [ AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stdarg.h>]], [[ #ifndef __va_copy error, bail out #endif ]])], [gl_cv_func___va_copy=yes], [gl_cv_func___va_copy=no])]) if test $gl_cv_func___va_copy = yes; then AC_DEFINE([va_copy], [__va_copy], [Define as a macro for copying va_list variables.]) else AH_VERBATIM([gl_VA_COPY], [/* A replacement for va_copy, if needed. */ #define gl_va_copy(a,b) ((a) = (b))]) AC_DEFINE([va_copy], [gl_va_copy], [Define as a macro for copying va_list variables.]) fi fi fi AC_SUBST([NEXT_STDARG_H]) ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/readlink.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000007731�14226564452�012501� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# readlink.m4 serial 16 dnl Copyright (C) 2003, 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_READLINK], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_FUNCS_ONCE([readlink]) if test $ac_cv_func_readlink = no; then HAVE_READLINK=0 else AC_CACHE_CHECK([whether readlink signature is correct], [gl_cv_decl_readlink_works], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> /* Cause compilation failure if original declaration has wrong type. */ ssize_t readlink (const char *, char *, size_t);]])], [gl_cv_decl_readlink_works=yes], [gl_cv_decl_readlink_works=no])]) dnl Solaris 9 ignores trailing slash. dnl FreeBSD 7.2 dereferences only one level of links with trailing slash. AC_CACHE_CHECK([whether readlink handles trailing slash correctly], [gl_cv_func_readlink_trailing_slash], [# We have readlink, so assume ln -s works. ln -s conftest.no-such conftest.link ln -s conftest.link conftest.lnk2 AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[char buf[20]; return readlink ("conftest.lnk2/", buf, sizeof buf) != -1;]])], [gl_cv_func_readlink_trailing_slash=yes], [gl_cv_func_readlink_trailing_slash=no], [case "$host_os" in # Guess yes on Linux or glibc systems. linux-* | linux | *-gnu* | gnu*) gl_cv_func_readlink_trailing_slash="guessing yes" ;; # Guess no on AIX or HP-UX. aix* | hpux*) gl_cv_func_readlink_trailing_slash="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_readlink_trailing_slash="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.link conftest.lnk2]) case "$gl_cv_func_readlink_trailing_slash" in *yes) if test "$gl_cv_decl_readlink_works" != yes; then REPLACE_READLINK=1 fi ;; *) AC_DEFINE([READLINK_TRAILING_SLASH_BUG], [1], [Define to 1 if readlink fails to recognize a trailing slash.]) REPLACE_READLINK=1 ;; esac AC_CACHE_CHECK([whether readlink truncates results correctly], [gl_cv_func_readlink_truncate], [# We have readlink, so assume ln -s works. ln -s ab conftest.link AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[char c; return readlink ("conftest.link", &c, 1) != 1;]])], [gl_cv_func_readlink_truncate=yes], [gl_cv_func_readlink_truncate=no], [case "$host_os" in # Guess yes on Linux or glibc systems. linux-* | linux | *-gnu* | gnu*) gl_cv_func_readlink_truncate="guessing yes" ;; # Guess no on AIX or HP-UX. aix* | hpux*) gl_cv_func_readlink_truncate="guessing no" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_readlink_truncate="$gl_cross_guess_normal" ;; esac ]) rm -f conftest.link conftest.lnk2]) case $gl_cv_func_readlink_truncate in *yes) if test "$gl_cv_decl_readlink_works" != yes; then REPLACE_READLINK=1 fi ;; *) AC_DEFINE([READLINK_TRUNCATE_BUG], [1], [Define to 1 if readlink sets errno instead of truncating a too-long link.]) REPLACE_READLINK=1 ;; esac fi ]) # Like gl_FUNC_READLINK, except prepare for separate compilation # (no REPLACE_READLINK, no AC_LIBOBJ). AC_DEFUN([gl_FUNC_READLINK_SEPARATE], [ AC_CHECK_FUNCS_ONCE([readlink]) gl_PREREQ_READLINK ]) # Prerequisites of lib/readlink.c. AC_DEFUN([gl_PREREQ_READLINK], [ : ]) ���������������������������������������recutils-1.9/m4/largefile.m4������������������������������������������������������������������������0000644�0000000�0000000�00000015200�14226564452�012630� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Enable large files on systems where this is not the default. # Enable support for files on Linux file systems with 64-bit inode numbers. # Copyright 1992-1996, 1998-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # The following macro works around a problem in Autoconf's AC_FUNC_FSEEKO: # It does not set _LARGEFILE_SOURCE=1 on HP-UX/ia64 32-bit, although this # setting of _LARGEFILE_SOURCE is needed so that <stdio.h> declares fseeko # and ftello in C++ mode as well. AC_DEFUN([gl_SET_LARGEFILE_SOURCE], [ AC_REQUIRE([AC_CANONICAL_HOST]) AC_FUNC_FSEEKO case "$host_os" in hpux*) AC_DEFINE([_LARGEFILE_SOURCE], [1], [Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2).]) ;; esac ]) # Work around a problem in Autoconf through at least 2.71 on glibc 2.34+ # with _TIME_BITS. Also, work around a problem in autoconf <= 2.69: # AC_SYS_LARGEFILE does not configure for large inodes on Mac OS X 10.5, # or configures them incorrectly in some cases. m4_version_prereq([2.70], [], [ # _AC_SYS_LARGEFILE_TEST_INCLUDES # ------------------------------- m4_define([_AC_SYS_LARGEFILE_TEST_INCLUDES], [#include <sys/types.h> /* Check that off_t can represent 2**63 - 1 correctly. We can't simply define LARGE_OFF_T to be 9223372036854775807, since some C++ compilers masquerading as C compilers incorrectly reject 9223372036854775807. */ #define LARGE_OFF_T (((off_t) 1 << 31 << 31) - 1 + ((off_t) 1 << 31 << 31)) int off_t_is_large[[(LARGE_OFF_T % 2147483629 == 721 && LARGE_OFF_T % 2147483647 == 1) ? 1 : -1]];[]dnl ]) ])# m4_version_prereq 2.70 # _AC_SYS_LARGEFILE_MACRO_VALUE(C-MACRO, VALUE, # CACHE-VAR, # DESCRIPTION, # PROLOGUE, [FUNCTION-BODY]) # -------------------------------------------------------- m4_define([_AC_SYS_LARGEFILE_MACRO_VALUE], [AC_CACHE_CHECK([for $1 value needed for large files], [$3], [while :; do m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( [AC_LANG_PROGRAM([$5], [$6])], [$3=no; break]) m4_ifval([$6], [AC_LINK_IFELSE], [AC_COMPILE_IFELSE])( [AC_LANG_PROGRAM([#undef $1 #define $1 $2 $5], [$6])], [$3=$2; break]) $3=unknown break done]) case $$3 in #( no | unknown) ;; *) AC_DEFINE_UNQUOTED([$1], [$$3], [$4]);; esac rm -rf conftest*[]dnl ])# _AC_SYS_LARGEFILE_MACRO_VALUE # AC_SYS_LARGEFILE # ---------------- # By default, many hosts won't let programs access large files; # one must use special compiler options to get large-file access to work. # For more details about this brain damage please see: # http://www.unix.org/version2/whatsnew/lfs20mar.html # Additionally, on Linux file systems with 64-bit inodes a file that happens # to have a 64-bit inode number cannot be accessed by 32-bit applications on # Linux x86/x86_64. This can occur with file systems such as XFS and NFS. AC_DEFUN([AC_SYS_LARGEFILE], [AC_ARG_ENABLE(largefile, [ --disable-largefile omit support for large files]) AS_IF([test "$enable_largefile" != no], [AC_CACHE_CHECK([for special C compiler options needed for large files], ac_cv_sys_largefile_CC, [ac_cv_sys_largefile_CC=no if test "$GCC" != yes; then ac_save_CC=$CC while :; do # IRIX 6.2 and later do not support large files by default, # so use the C compiler's -n32 option if that helps. AC_LANG_CONFTEST([AC_LANG_PROGRAM([_AC_SYS_LARGEFILE_TEST_INCLUDES])]) AC_COMPILE_IFELSE([], [break]) CC="$CC -n32" AC_COMPILE_IFELSE([], [ac_cv_sys_largefile_CC=' -n32'; break]) break done CC=$ac_save_CC rm -f conftest.$ac_ext fi]) if test "$ac_cv_sys_largefile_CC" != no; then CC=$CC$ac_cv_sys_largefile_CC fi _AC_SYS_LARGEFILE_MACRO_VALUE(_FILE_OFFSET_BITS, 64, ac_cv_sys_file_offset_bits, [Number of bits in a file offset, on hosts where this is settable.], [_AC_SYS_LARGEFILE_TEST_INCLUDES]) AS_CASE([$ac_cv_sys_file_offset_bits], [unknown], [_AC_SYS_LARGEFILE_MACRO_VALUE([_LARGE_FILES], [1], [ac_cv_sys_large_files], [Define for large files, on AIX-style hosts.], [_AC_SYS_LARGEFILE_TEST_INCLUDES])], [64], [gl_YEAR2038_BODY([])])]) ])# AC_SYS_LARGEFILE # Enable large files on systems where this is implemented by Gnulib, not by the # system headers. # Set the variables WINDOWS_64_BIT_OFF_T, WINDOWS_64_BIT_ST_SIZE if Gnulib # overrides ensure that off_t or 'struct size.st_size' are 64-bit, respectively. AC_DEFUN([gl_LARGEFILE], [ AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in mingw*) dnl Native Windows. dnl mingw64 defines off_t to a 64-bit type already, if dnl _FILE_OFFSET_BITS=64, which is ensured by AC_SYS_LARGEFILE. AC_CACHE_CHECK([for 64-bit off_t], [gl_cv_type_off_t_64], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> int verify_off_t_size[sizeof (off_t) >= 8 ? 1 : -1]; ]], [[]])], [gl_cv_type_off_t_64=yes], [gl_cv_type_off_t_64=no]) ]) if test $gl_cv_type_off_t_64 = no; then WINDOWS_64_BIT_OFF_T=1 else WINDOWS_64_BIT_OFF_T=0 fi dnl Some mingw versions define, if _FILE_OFFSET_BITS=64, 'struct stat' dnl to 'struct _stat32i64' or 'struct _stat64' (depending on dnl _USE_32BIT_TIME_T), which has a 32-bit st_size member. AC_CACHE_CHECK([for 64-bit st_size], [gl_cv_member_st_size_64], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/types.h> struct stat buf; int verify_st_size_size[sizeof (buf.st_size) >= 8 ? 1 : -1]; ]], [[]])], [gl_cv_member_st_size_64=yes], [gl_cv_member_st_size_64=no]) ]) if test $gl_cv_member_st_size_64 = no; then WINDOWS_64_BIT_ST_SIZE=1 else WINDOWS_64_BIT_ST_SIZE=0 fi ;; *) dnl Nothing to do on gnulib's side. dnl A 64-bit off_t is dnl - already the default on Mac OS X, FreeBSD, NetBSD, OpenBSD, IRIX, dnl OSF/1, Cygwin, dnl - enabled by _FILE_OFFSET_BITS=64 (ensured by AC_SYS_LARGEFILE) on dnl glibc, HP-UX, Solaris, dnl - enabled by _LARGE_FILES=1 (ensured by AC_SYS_LARGEFILE) on AIX, dnl - impossible to achieve on Minix 3.1.8. WINDOWS_64_BIT_OFF_T=0 WINDOWS_64_BIT_ST_SIZE=0 ;; esac ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/strdup.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000001455�14226564452�012226� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strdup.m4 serial 15 dnl Copyright (C) 2002-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRDUP], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_DECLS_ONCE([strdup]) if test $ac_cv_have_decl_strdup = no; then HAVE_DECL_STRDUP=0 fi ]) AC_DEFUN([gl_FUNC_STRDUP_POSIX], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([gl_CHECK_MALLOC_POSIX]) if test $gl_cv_func_malloc_posix != yes; then REPLACE_STRDUP=1 fi AC_CHECK_DECLS_ONCE([strdup]) if test $ac_cv_have_decl_strdup = no; then HAVE_DECL_STRDUP=0 fi ]) # Prerequisites of lib/strdup.c. AC_DEFUN([gl_PREREQ_STRDUP], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/strchrnul.m4������������������������������������������������������������������������0000644�0000000�0000000�00000002760�14226564452�012731� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strchrnul.m4 serial 10 dnl Copyright (C) 2003, 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRCHRNUL], [ dnl Persuade glibc <string.h> to declare strchrnul(). AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_CHECK_FUNCS([strchrnul]) if test $ac_cv_func_strchrnul = no; then HAVE_STRCHRNUL=0 else AC_CACHE_CHECK([whether strchrnul works], [gl_cv_func_strchrnul_works], [AC_RUN_IFELSE([AC_LANG_PROGRAM([[ #include <string.h> /* for strchrnul */ ]], [[const char *buf = "a"; return strchrnul (buf, 'b') != buf + 1; ]])], [gl_cv_func_strchrnul_works=yes], [gl_cv_func_strchrnul_works=no], [dnl Cygwin 1.7.9 introduced strchrnul, but it was broken until 1.7.10 AC_EGREP_CPP([Lucky user], [ #if defined __CYGWIN__ #include <cygwin/version.h> #if CYGWIN_VERSION_DLL_COMBINED > CYGWIN_VERSION_DLL_MAKE_COMBINED (1007, 9) Lucky user #endif #else Lucky user #endif ], [gl_cv_func_strchrnul_works="guessing yes"], [gl_cv_func_strchrnul_works="guessing no"]) ]) ]) case "$gl_cv_func_strchrnul_works" in *yes) ;; *) REPLACE_STRCHRNUL=1 ;; esac fi ]) # Prerequisites of lib/strchrnul.c. AC_DEFUN([gl_PREREQ_STRCHRNUL], [:]) ����������������recutils-1.9/m4/stddef_h.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000007103�14226564452�012461� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# stddef_h.m4 serial 12 dnl Copyright (C) 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl A placeholder for <stddef.h>, for platforms that have issues. AC_DEFUN_ONCE([gl_STDDEF_H], [ AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) AC_REQUIRE([gt_TYPE_WCHAR_T]) dnl Persuade OpenBSD <stddef.h> to declare max_align_t. AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) GL_GENERATE_STDDEF_H=false dnl Test whether the type max_align_t exists and whether its alignment dnl "is as great as is supported by the implementation in all contexts". AC_CACHE_CHECK([for good max_align_t], [gl_cv_type_max_align_t], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <stddef.h> unsigned int s = sizeof (max_align_t); #if defined __GNUC__ || defined __clang__ || defined __IBM__ALIGNOF__ int check1[2 * (__alignof__ (double) <= __alignof__ (max_align_t)) - 1]; int check2[2 * (__alignof__ (long double) <= __alignof__ (max_align_t)) - 1]; #endif typedef struct { char a; max_align_t b; } max_helper; typedef struct { char a; long b; } long_helper; typedef struct { char a; double b; } double_helper; typedef struct { char a; long double b; } long_double_helper; int check3[2 * (offsetof (long_helper, b) <= offsetof (max_helper, b)) - 1]; int check4[2 * (offsetof (double_helper, b) <= offsetof (max_helper, b)) - 1]; int check5[2 * (offsetof (long_double_helper, b) <= offsetof (max_helper, b)) - 1]; ]])], [gl_cv_type_max_align_t=yes], [gl_cv_type_max_align_t=no]) ]) if test $gl_cv_type_max_align_t = no; then HAVE_MAX_ALIGN_T=0 GL_GENERATE_STDDEF_H=true fi if test $gt_cv_c_wchar_t = no; then HAVE_WCHAR_T=0 GL_GENERATE_STDDEF_H=true fi AC_CACHE_CHECK([whether NULL can be used in arbitrary expressions], [gl_cv_decl_null_works], [AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[#include <stddef.h> int test[2 * (sizeof NULL == sizeof (void *)) -1]; ]])], [gl_cv_decl_null_works=yes], [gl_cv_decl_null_works=no])]) if test $gl_cv_decl_null_works = no; then REPLACE_NULL=1 GL_GENERATE_STDDEF_H=true fi if $GL_GENERATE_STDDEF_H; then gl_NEXT_HEADERS([stddef.h]) fi ]) # gl_STDDEF_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_STDDEF_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_STDDEF_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_STDDEF_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_STDDEF_H_MODULE_INDICATOR_DEFAULTS], [ ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_STDDEF_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_STDDEF_H_DEFAULTS]) ]) AC_DEFUN([gl_STDDEF_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. REPLACE_NULL=0; AC_SUBST([REPLACE_NULL]) HAVE_MAX_ALIGN_T=1; AC_SUBST([HAVE_MAX_ALIGN_T]) HAVE_WCHAR_T=1; AC_SUBST([HAVE_WCHAR_T]) ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/exponentl.m4������������������������������������������������������������������������0000644�0000000�0000000�00000007130�14226564451�012714� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# exponentl.m4 serial 5 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_LONG_DOUBLE_EXPONENT_LOCATION], [ AC_REQUIRE([gl_BIGENDIAN]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CACHE_CHECK([where to find the exponent in a 'long double'], [gl_cv_cc_long_double_expbit0], [ AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <float.h> #include <stddef.h> #include <stdio.h> #include <string.h> #define NWORDS \ ((sizeof (long double) + sizeof (unsigned int) - 1) / sizeof (unsigned int)) typedef union { long double value; unsigned int word[NWORDS]; } memory_long_double; static unsigned int ored_words[NWORDS]; static unsigned int anded_words[NWORDS]; static void add_to_ored_words (long double *x) { memory_long_double m; size_t i; /* Clear it first, in case sizeof (long double) < sizeof (memory_long_double). */ memset (&m, 0, sizeof (memory_long_double)); m.value = *x; for (i = 0; i < NWORDS; i++) { ored_words[i] |= m.word[i]; anded_words[i] &= m.word[i]; } } int main () { static long double samples[5] = { 0.25L, 0.5L, 1.0L, 2.0L, 4.0L }; size_t j; FILE *fp = fopen ("conftest.out", "w"); if (fp == NULL) return 1; for (j = 0; j < NWORDS; j++) anded_words[j] = ~ (unsigned int) 0; for (j = 0; j < 5; j++) add_to_ored_words (&samples[j]); /* Remove bits that are common (e.g. if representation of the first mantissa bit is explicit). */ for (j = 0; j < NWORDS; j++) ored_words[j] &= ~anded_words[j]; /* Now find the nonzero word. */ for (j = 0; j < NWORDS; j++) if (ored_words[j] != 0) break; if (j < NWORDS) { size_t i; for (i = j + 1; i < NWORDS; i++) if (ored_words[i] != 0) { fprintf (fp, "unknown"); return (fclose (fp) != 0); } for (i = 0; ; i++) if ((ored_words[j] >> i) & 1) { fprintf (fp, "word %d bit %d", (int) j, (int) i); return (fclose (fp) != 0); } } fprintf (fp, "unknown"); return (fclose (fp) != 0); } ]])], [gl_cv_cc_long_double_expbit0=`cat conftest.out`], [gl_cv_cc_long_double_expbit0="unknown"], [ dnl When cross-compiling, in general we don't know. It depends on the dnl ABI and compiler version. There are too many cases. gl_cv_cc_long_double_expbit0="unknown" case "$host_os" in mingw*) # On native Windows (little-endian), we know the result # in two cases: mingw, MSVC. AC_EGREP_CPP([Known], [ #ifdef __MINGW32__ Known #endif ], [gl_cv_cc_long_double_expbit0="word 2 bit 0"]) AC_EGREP_CPP([Known], [ #ifdef _MSC_VER Known #endif ], [gl_cv_cc_long_double_expbit0="word 1 bit 20"]) ;; esac ]) rm -f conftest.out ]) case "$gl_cv_cc_long_double_expbit0" in word*bit*) word=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word //' -e 's/ bit.*//'` bit=`echo "$gl_cv_cc_long_double_expbit0" | sed -e 's/word.*bit //'` AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_WORD], [$word], [Define as the word index where to find the exponent of 'long double'.]) AC_DEFINE_UNQUOTED([LDBL_EXPBIT0_BIT], [$bit], [Define as the bit index in the word where to find bit 0 of the exponent of 'long double'.]) ;; esac ]) ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/extensions.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000020333�14226564451�013077� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 22 -*- Autoconf -*- # Enable extensions on systems that normally disable them. # Copyright (C) 2003, 2006-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl Define to empty for the benefit of Autoconf 2.69 and earlier, so that dnl AC_USE_SYSTEM_EXTENSIONS (below) can be used unchanged from Autoconf 2.70+. m4_ifndef([AC_CHECK_INCLUDES_DEFAULT], [AC_DEFUN([AC_CHECK_INCLUDES_DEFAULT], [])]) # This definition of AC_USE_SYSTEM_EXTENSIONS is stolen from git # Autoconf. Perhaps we can remove this once we can assume Autoconf # is recent-enough everywhere, but since Autoconf mutates rapidly # enough in this area it's likely we'll need to redefine # AC_USE_SYSTEM_EXTENSIONS for quite some time. # If autoconf reports a warning # warning: AC_COMPILE_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # or warning: AC_RUN_IFELSE was called before AC_USE_SYSTEM_EXTENSIONS # the fix is # 1) to ensure that AC_USE_SYSTEM_EXTENSIONS is never directly invoked # but always AC_REQUIREd, # 2) to ensure that for each occurrence of # AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) # or # AC_REQUIRE([gl_USE_SYSTEM_EXTENSIONS]) # the corresponding gnulib module description has 'extensions' among # its dependencies. This will ensure that the gl_USE_SYSTEM_EXTENSIONS # invocation occurs in gl_EARLY, not in gl_INIT. m4_version_prereq([2.70.1], [], [ # AC_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. # We unconditionally define as many of the known feature-enabling # as possible, reserving conditional behavior for macros that are # known to cause problems on some platforms (such as __EXTENSIONS__). AC_DEFUN_ONCE([AC_USE_SYSTEM_EXTENSIONS], [AC_BEFORE([$0], [AC_PREPROC_IFELSE])dnl AC_BEFORE([$0], [AC_COMPILE_IFELSE])dnl AC_BEFORE([$0], [AC_LINK_IFELSE])dnl AC_BEFORE([$0], [AC_RUN_IFELSE])dnl AC_BEFORE([$0], [AC_CHECK_INCLUDES_DEFAULT])dnl dnl #undef in AH_VERBATIM gets replaced with #define by AC_DEFINE. dnl Use a different key than __EXTENSIONS__, as that name broke existing dnl configure.ac when using autoheader 2.62. dnl The macros below are in alphabetical order ignoring leading _ or __ dnl prefixes. AH_VERBATIM([USE_SYSTEM_EXTENSIONS], [/* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif ])dnl AC_REQUIRE([AC_CHECK_INCLUDES_DEFAULT])dnl _AC_CHECK_HEADER_ONCE([wchar.h]) _AC_CHECK_HEADER_ONCE([minix/config.h]) dnl Defining __EXTENSIONS__ may break the system headers on some systems. dnl (FIXME: Which ones?) AC_CACHE_CHECK([whether it is safe to define __EXTENSIONS__], [ac_cv_safe_to_define___extensions__], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ # define __EXTENSIONS__ 1 ]AC_INCLUDES_DEFAULT])], [ac_cv_safe_to_define___extensions__=yes], [ac_cv_safe_to_define___extensions__=no])]) dnl HP-UX 11.11 defines mbstate_t only if _XOPEN_SOURCE is defined to dnl 500, regardless of whether compiling with -Ae or -D_HPUX_SOURCE=1. dnl But defining _XOPEN_SOURCE may turn *off* extensions on platforms dnl not covered by turn-on-extensions macros (notably Dragonfly, Free, dnl and OpenBSD, which don't have any equivalent of _NETBSD_SOURCE) so dnl it should only be defined when necessary. AC_CACHE_CHECK([whether _XOPEN_SOURCE should be defined], [ac_cv_should_define__xopen_source], [ac_cv_should_define__xopen_source=no AS_IF([test $ac_cv_header_wchar_h = yes], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #include <wchar.h> mbstate_t x;]])], [], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM([[ #define _XOPEN_SOURCE 500 #include <wchar.h> mbstate_t x;]])], [ac_cv_should_define__xopen_source=yes])])])]) AC_DEFINE([_ALL_SOURCE]) AC_DEFINE([_DARWIN_C_SOURCE]) AC_DEFINE([_GNU_SOURCE]) AC_DEFINE([_HPUX_ALT_XOPEN_SOCKET_API]) AC_DEFINE([_NETBSD_SOURCE]) AC_DEFINE([_OPENBSD_SOURCE]) AC_DEFINE([_POSIX_PTHREAD_SEMANTICS]) AC_DEFINE([__STDC_WANT_IEC_60559_ATTRIBS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_BFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_DFP_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_FUNCS_EXT__]) AC_DEFINE([__STDC_WANT_IEC_60559_TYPES_EXT__]) AC_DEFINE([__STDC_WANT_LIB_EXT2__]) AC_DEFINE([__STDC_WANT_MATH_SPEC_FUNCS__]) AC_DEFINE([_TANDEM_SOURCE]) AS_IF([test $ac_cv_header_minix_config_h = yes], [MINIX=yes AC_DEFINE([_MINIX]) AC_DEFINE([_POSIX_SOURCE]) AC_DEFINE([_POSIX_1_SOURCE], [2])], [MINIX=]) AS_IF([test $ac_cv_safe_to_define___extensions__ = yes], [AC_DEFINE([__EXTENSIONS__])]) AS_IF([test $ac_cv_should_define__xopen_source = yes], [AC_DEFINE([_XOPEN_SOURCE], [500])]) ])# AC_USE_SYSTEM_EXTENSIONS ]) # gl_USE_SYSTEM_EXTENSIONS # ------------------------ # Enable extensions on systems that normally disable them, # typically due to standards-conformance issues. AC_DEFUN_ONCE([gl_USE_SYSTEM_EXTENSIONS], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) dnl On OpenBSD 6.8 with GCC, the include files contain a couple of dnl definitions that are only activated with an explicit -D_ISOC11_SOURCE. dnl That's because this version of GCC (4.2.1) supports the option dnl '-std=gnu99' but not the option '-std=gnu11'. AC_REQUIRE([AC_CANONICAL_HOST]) case "$host_os" in openbsd*) AC_DEFINE([_ISOC11_SOURCE], [1], [Define to enable the declarations of ISO C 11 types and functions.]) ;; esac ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/intlmacosx.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000004745�13413351610�013056� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# intlmacosx.m4 serial 5 (gettext-0.18.2) dnl Copyright (C) 2004-2014, 2016 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl dnl This file can be used in projects which are not available under dnl the GNU General Public License or the GNU Library General Public dnl License but which still want to provide support for the GNU gettext dnl functionality. dnl Please note that the actual code of the GNU gettext library is covered dnl by the GNU Library General Public License, and the rest of the GNU dnl gettext package is covered by the GNU General Public License. dnl They are *not* in the public domain. dnl Checks for special options needed on Mac OS X. dnl Defines INTL_MACOSX_LIBS. AC_DEFUN([gt_INTL_MACOSX], [ dnl Check for API introduced in Mac OS X 10.2. AC_CACHE_CHECK([for CFPreferencesCopyAppValue], [gt_cv_func_CFPreferencesCopyAppValue], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <CoreFoundation/CFPreferences.h>]], [[CFPreferencesCopyAppValue(NULL, NULL)]])], [gt_cv_func_CFPreferencesCopyAppValue=yes], [gt_cv_func_CFPreferencesCopyAppValue=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFPreferencesCopyAppValue = yes; then AC_DEFINE([HAVE_CFPREFERENCESCOPYAPPVALUE], [1], [Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework.]) fi dnl Check for API introduced in Mac OS X 10.3. AC_CACHE_CHECK([for CFLocaleCopyCurrent], [gt_cv_func_CFLocaleCopyCurrent], [gt_save_LIBS="$LIBS" LIBS="$LIBS -Wl,-framework -Wl,CoreFoundation" AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include <CoreFoundation/CFLocale.h>]], [[CFLocaleCopyCurrent();]])], [gt_cv_func_CFLocaleCopyCurrent=yes], [gt_cv_func_CFLocaleCopyCurrent=no]) LIBS="$gt_save_LIBS"]) if test $gt_cv_func_CFLocaleCopyCurrent = yes; then AC_DEFINE([HAVE_CFLOCALECOPYCURRENT], [1], [Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework.]) fi INTL_MACOSX_LIBS= if test $gt_cv_func_CFPreferencesCopyAppValue = yes || test $gt_cv_func_CFLocaleCopyCurrent = yes; then INTL_MACOSX_LIBS="-Wl,-framework -Wl,CoreFoundation" fi AC_SUBST([INTL_MACOSX_LIBS]) ]) ���������������������������recutils-1.9/m4/obstack.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000002267�14226564452�012335� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# See if we need to provide obstacks. dnl Copyright 1996-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Autoconf's AC_FUNC_OBSTACK is marked obsolete since version 2.70. dnl We provide our own macro here. AC_DEFUN([gl_FUNC_OBSTACK], [ AC_CACHE_CHECK([for obstacks that work with any size object], [gl_cv_func_obstack], [AC_LINK_IFELSE( [AC_LANG_PROGRAM( [[#include "obstack.h" void *obstack_chunk_alloc (size_t n) { return 0; } void obstack_chunk_free (void *p) { } /* Check that an internal function returns size_t, not int. */ size_t _obstack_memory_used (struct obstack *); ]], [[struct obstack mem; obstack_init (&mem); obstack_free (&mem, 0); ]])], [gl_cv_func_obstack=yes], [gl_cv_func_obstack=no])]) if test "$gl_cv_func_obstack" = yes; then AC_DEFINE([HAVE_OBSTACK], 1, [Define to 1 if the system has obstacks that work with any size object.]) fi ]) �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/open-slash.m4�����������������������������������������������������������������������0000644�0000000�0000000�00000003455�14226564452�012760� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# open-slash.m4 serial 2 dnl Copyright (C) 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl Tests whether open() and creat() recognize a trailing slash. dnl Sets gl_cv_func_open_slash. AC_DEFUN([gl_OPEN_TRAILING_SLASH_BUG], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles dnl open("foo/") should not create a file when the file name has a dnl trailing slash. FreeBSD only has the problem on symlinks. AC_CHECK_FUNCS_ONCE([lstat]) AC_CACHE_CHECK([whether open recognizes a trailing slash], [gl_cv_func_open_slash], [# Assume that if we have lstat, we can also check symlinks. if test $ac_cv_func_lstat = yes; then touch conftest.tmp ln -s conftest.tmp conftest.lnk fi AC_RUN_IFELSE( [AC_LANG_SOURCE([[ #include <fcntl.h> #if HAVE_UNISTD_H # include <unistd.h> #endif ]GL_MDA_DEFINES[ int main () { int result = 0; #if HAVE_LSTAT if (open ("conftest.lnk/", O_RDONLY) != -1) result |= 1; #endif if (open ("conftest.sl/", O_CREAT, 0600) >= 0) result |= 2; return result; }]])], [gl_cv_func_open_slash=yes], [gl_cv_func_open_slash=no], [ changequote(,)dnl case "$host_os" in freebsd* | aix* | hpux* | solaris2.[0-9] | solaris2.[0-9].*) gl_cv_func_open_slash="guessing no" ;; *) gl_cv_func_open_slash="guessing yes" ;; esac changequote([,])dnl ]) rm -f conftest.sl conftest.tmp conftest.lnk ]) case "$gl_cv_func_open_slash" in *no) AC_DEFINE([OPEN_TRAILING_SLASH_BUG], [1], [Define to 1 if open() fails to recognize a trailing slash.]) ;; esac ]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/strerror.m4�������������������������������������������������������������������������0000644�0000000�0000000�00000007203�14226564452�012564� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# strerror.m4 serial 23 dnl Copyright (C) 2002, 2007-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_STRERROR], [ AC_REQUIRE([gl_STRING_H_DEFAULTS]) AC_REQUIRE([gl_HEADER_ERRNO_H]) AC_REQUIRE([gl_FUNC_STRERROR_0]) AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ AC_REQUIRE([gl_FUNC_STRERROR_R_WORKS]) ]) if test "$GL_GENERATE_ERRNO_H:$REPLACE_STRERROR_0" = false:0; then AC_CACHE_CHECK([for working strerror function], [gl_cv_func_working_strerror], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> ]], [[if (!*strerror (-2)) return 1;]])], [gl_cv_func_working_strerror=yes], [gl_cv_func_working_strerror=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_working_strerror="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_working_strerror="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_working_strerror="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_working_strerror" in *yes) ;; *) dnl The system's strerror() fails to return a string for out-of-range dnl integers. Replace it. REPLACE_STRERROR=1 ;; esac m4_ifdef([gl_FUNC_STRERROR_R_WORKS], [ dnl If the system's strerror_r or __xpg_strerror_r clobbers strerror's dnl buffer, we must replace strerror. case "$gl_cv_func_strerror_r_works" in *no) REPLACE_STRERROR=1 ;; esac ]) else dnl The system's strerror() cannot know about the new errno values we add dnl to <errno.h>, or any fix for strerror(0). Replace it. REPLACE_STRERROR=1 fi ]) dnl Detect if strerror(0) passes (that is, does not set errno, and does not dnl return a string that matches strerror(-1)). AC_DEFUN([gl_FUNC_STRERROR_0], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles REPLACE_STRERROR_0=0 AC_CACHE_CHECK([whether strerror(0) succeeds], [gl_cv_func_strerror_0_works], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <string.h> #include <errno.h> ]], [[int result = 0; char *str; errno = 0; str = strerror (0); if (!*str) result |= 1; if (errno) result |= 2; if (strstr (str, "nknown") || strstr (str, "ndefined")) result |= 4; return result;]])], [gl_cv_func_strerror_0_works=yes], [gl_cv_func_strerror_0_works=no], [case "$host_os" in # Guess yes on glibc systems. *-gnu* | gnu*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on musl systems. *-musl*) gl_cv_func_strerror_0_works="guessing yes" ;; # Guess yes on native Windows. mingw*) gl_cv_func_strerror_0_works="guessing yes" ;; # If we don't know, obey --enable-cross-guesses. *) gl_cv_func_strerror_0_works="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_strerror_0_works" in *yes) ;; *) REPLACE_STRERROR_0=1 AC_DEFINE([REPLACE_STRERROR_0], [1], [Define to 1 if strerror(0) does not return a message implying success.]) ;; esac ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/dup2.m4�����������������������������������������������������������������������������0000644�0000000�0000000�00000007236�14226564451�011561� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#serial 27 dnl Copyright (C) 2002, 2005, 2007, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_FUNC_DUP2], [ AC_REQUIRE([gl_UNISTD_H_DEFAULTS]) AC_REQUIRE([AC_CANONICAL_HOST]) AC_CACHE_CHECK([whether dup2 works], [gl_cv_func_dup2_works], [AC_RUN_IFELSE([ AC_LANG_PROGRAM( [[#include <errno.h> #include <fcntl.h> #include <limits.h> #include <sys/resource.h> #include <unistd.h> ]GL_MDA_DEFINES[ #ifndef RLIM_SAVED_CUR # define RLIM_SAVED_CUR RLIM_INFINITY #endif #ifndef RLIM_SAVED_MAX # define RLIM_SAVED_MAX RLIM_INFINITY #endif ]], [[int result = 0; int bad_fd = INT_MAX; struct rlimit rlim; if (getrlimit (RLIMIT_NOFILE, &rlim) == 0 && 0 <= rlim.rlim_cur && rlim.rlim_cur <= INT_MAX && rlim.rlim_cur != RLIM_INFINITY && rlim.rlim_cur != RLIM_SAVED_MAX && rlim.rlim_cur != RLIM_SAVED_CUR) bad_fd = rlim.rlim_cur; #ifdef FD_CLOEXEC if (fcntl (1, F_SETFD, FD_CLOEXEC) == -1) result |= 1; #endif if (dup2 (1, 1) != 1) result |= 2; #ifdef FD_CLOEXEC if (fcntl (1, F_GETFD) != FD_CLOEXEC) result |= 4; #endif close (0); if (dup2 (0, 0) != -1) result |= 8; /* Many gnulib modules require POSIX conformance of EBADF. */ if (dup2 (2, bad_fd) == -1 && errno != EBADF) result |= 16; /* Flush out some cygwin core dumps. */ if (dup2 (2, -1) != -1 || errno != EBADF) result |= 32; dup2 (2, 255); dup2 (2, 256); /* On OS/2 kLIBC, dup2() does not work on a directory fd. */ { int fd = open (".", O_RDONLY); if (fd == -1) result |= 64; else if (dup2 (fd, fd + 1) == -1) result |= 128; close (fd); } return result;]]) ], [gl_cv_func_dup2_works=yes], [gl_cv_func_dup2_works=no], [case "$host_os" in mingw*) # on this platform, dup2 always returns 0 for success gl_cv_func_dup2_works="guessing no" ;; cygwin*) # on cygwin 1.5.x, dup2(1,1) returns 0 gl_cv_func_dup2_works="guessing no" ;; aix* | freebsd*) # on AIX 7.1 and FreeBSD 6.1, dup2 (1,toobig) gives EMFILE, # not EBADF. gl_cv_func_dup2_works="guessing no" ;; haiku*) # on Haiku alpha 2, dup2(1, 1) resets FD_CLOEXEC. gl_cv_func_dup2_works="guessing no" ;; *-android*) # implemented using dup3(), which fails if oldfd == newfd gl_cv_func_dup2_works="guessing no" ;; os2*) # on OS/2 kLIBC, dup2() does not work on a directory fd. gl_cv_func_dup2_works="guessing no" ;; *) gl_cv_func_dup2_works="guessing yes" ;; esac]) ]) case "$gl_cv_func_dup2_works" in *yes) ;; *) REPLACE_DUP2=1 AC_CHECK_FUNCS([setdtablesize]) ;; esac dnl Replace dup2() for supporting the gnulib-defined fchdir() function, dnl to keep fchdir's bookkeeping up-to-date. m4_ifdef([gl_FUNC_FCHDIR], [ gl_TEST_FCHDIR if test $HAVE_FCHDIR = 0; then REPLACE_DUP2=1 fi ]) ]) # Prerequisites of lib/dup2.c. AC_DEFUN([gl_PREREQ_DUP2], []) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/regex.m4����������������������������������������������������������������������������0000644�0000000�0000000�00000035750�14226564452�012024� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 73 # Copyright (C) 1996-2001, 2003-2022 Free Software Foundation, Inc. # # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl Initially derived from code in GNU grep. dnl Mostly written by Jim Meyering. AC_PREREQ([2.50]) AC_DEFUN([gl_REGEX], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_ARG_WITH([included-regex], [AS_HELP_STRING([--without-included-regex], [don't compile regex; this is the default on systems with recent-enough versions of the GNU C Library (use with caution on other systems).])]) case $with_included_regex in #( yes|no) ac_use_included_regex=$with_included_regex ;; '') # If the system regex support is good enough that it passes the # following run test, then default to *not* using the included regex.c. # If cross compiling, assume the test would fail and use the included # regex.c. AC_CHECK_DECLS_ONCE([alarm]) AC_CHECK_HEADERS_ONCE([malloc.h]) AC_CACHE_CHECK([for working re_compile_pattern], [gl_cv_func_re_compile_pattern_working], [AC_RUN_IFELSE( [AC_LANG_PROGRAM( [[#include <regex.h> #include <locale.h> #include <limits.h> #include <string.h> #if defined M_CHECK_ACTION || HAVE_DECL_ALARM # include <signal.h> # include <unistd.h> #endif #if HAVE_MALLOC_H # include <malloc.h> #endif #ifdef M_CHECK_ACTION /* Exit with distinguishable exit code. */ static void sigabrt_no_core (int sig) { raise (SIGTERM); } #endif ]], [[int result = 0; static struct re_pattern_buffer regex; unsigned char folded_chars[UCHAR_MAX + 1]; int i; const char *s; struct re_registers regs; /* Some builds of glibc go into an infinite loop on this test. Use alarm to force death, and mallopt to avoid malloc recursion in diagnosing the corrupted heap. */ #if HAVE_DECL_ALARM signal (SIGALRM, SIG_DFL); alarm (2); #endif #ifdef M_CHECK_ACTION signal (SIGABRT, sigabrt_no_core); mallopt (M_CHECK_ACTION, 2); #endif if (setlocale (LC_ALL, "en_US.UTF-8")) { { /* https://sourceware.org/ml/libc-hacker/2006-09/msg00008.html This test needs valgrind to catch the bug on Debian GNU/Linux 3.1 x86, but it might catch the bug better on other platforms and it shouldn't hurt to try the test here. */ static char const pat[] = "insert into"; static char const data[] = "\xFF\0\x12\xA2\xAA\xC4\xB1,K\x12\xC4\xB1*\xACK"; re_set_syntax (RE_SYNTAX_GREP | RE_HAT_LISTS_NOT_NEWLINE | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { if (re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, ®s) != -1) result |= 1; regfree (®ex); } } { /* This test is from glibc bug 15078. The test case is from Andreas Schwab in <https://sourceware.org/ml/libc-alpha/2013-01/msg00967.html>. */ static char const pat[] = "[^x]x"; static char const data[] = /* <U1000><U103B><U103D><U1014><U103A><U102F><U1015><U103A> */ "\xe1\x80\x80" "\xe1\x80\xbb" "\xe1\x80\xbd" "\xe1\x80\x94" "\xe1\x80\xba" "\xe1\x80\xaf" "\xe1\x80\x95" "\xe1\x80\xba" "x"; re_set_syntax (0); memset (®ex, 0, sizeof regex); s = re_compile_pattern (pat, sizeof pat - 1, ®ex); if (s) result |= 1; else { i = re_search (®ex, data, sizeof data - 1, 0, sizeof data - 1, 0); if (i != 0 && i != 21) result |= 1; regfree (®ex); } } if (! setlocale (LC_ALL, "C")) return 1; } /* This test is from glibc bug 3957, reported by Andrew Mackey. */ re_set_syntax (RE_SYNTAX_EGREP | RE_HAT_LISTS_NOT_NEWLINE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[^x]b", 6, ®ex); if (s) result |= 2; else { /* This should fail, but succeeds for glibc-2.5. */ if (re_search (®ex, "a\nb", 3, 0, 3, ®s) != -1) result |= 2; regfree (®ex); } /* This regular expression is from Spencer ere test number 75 in grep-2.3. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); for (i = 0; i <= UCHAR_MAX; i++) folded_chars[i] = i; regex.translate = folded_chars; s = re_compile_pattern ("a[[:@:>@:]]b\n", 11, ®ex); /* This should fail with _Invalid character class name_ error. */ if (!s) { result |= 4; regfree (®ex); } /* Ensure that [b-a] is diagnosed as invalid, when using RE_NO_EMPTY_RANGES. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP | RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("a[b-a]", 6, ®ex); if (s == 0) { result |= 8; regfree (®ex); } /* This should succeed, but does not for glibc-2.1.3. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("{1", 2, ®ex); if (s) result |= 8; else regfree (®ex); /* The following example is derived from a problem report against gawk from Jorge Stolfi <stolfi@ic.unicamp.br>. */ memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[an\371]*n", 7, ®ex); if (s) result |= 8; else { /* This should match, but does not for glibc-2.2.1. */ if (re_match (®ex, "an", 2, 0, ®s) != 2) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 8; else { /* glibc-2.2.93 does not work with a negative RANGE argument. */ if (re_search (®ex, "wxy", 3, 2, -2, ®s) != 1) result |= 8; else { free (regs.start); free (regs.end); } regfree (®ex); } /* The version of regex.c in older versions of gnulib ignored RE_ICASE. Detect that problem too. */ re_set_syntax (RE_SYNTAX_EMACS | RE_ICASE); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("x", 1, ®ex); if (s) result |= 16; else { if (re_search (®ex, "WXY", 3, 0, 3, ®s) < 0) result |= 16; else { free (regs.start); free (regs.end); } regfree (®ex); } /* Catch a bug reported by Vin Shelton in https://lists.gnu.org/r/bug-coreutils/2007-06/msg00089.html */ re_set_syntax (RE_SYNTAX_POSIX_BASIC & ~RE_CONTEXT_INVALID_DUP & ~RE_NO_EMPTY_RANGES); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("[[:alnum:]_-]\\\\+\$", 16, ®ex); if (s) result |= 32; else regfree (®ex); /* REG_STARTEND was added to glibc on 2004-01-15. Reject older versions. */ if (! REG_STARTEND) result |= 64; /* Matching with the compiled form of this regexp would provoke an assertion failure prior to glibc-2.28: regexec.c:1375: pop_fail_stack: Assertion 'num >= 0' failed With glibc-2.28, compilation fails and reports the invalid back reference. */ re_set_syntax (RE_SYNTAX_POSIX_EGREP); memset (®ex, 0, sizeof regex); s = re_compile_pattern ("0|()0|\\\\1|0", 10, ®ex); if (!s) { memset (®s, 0, sizeof regs); i = re_search (®ex, "x", 1, 0, 1, ®s); if (i != -1) result |= 64; if (0 <= i) { free (regs.start); free (regs.end); } regfree (®ex); } else { if (strcmp (s, "Invalid back reference")) result |= 64; } /* glibc bug 11053. */ re_set_syntax (RE_SYNTAX_POSIX_BASIC); memset (®ex, 0, sizeof regex); static char const pat_sub2[] = "\\\\(a*\\\\)*a*\\\\1"; s = re_compile_pattern (pat_sub2, sizeof pat_sub2 - 1, ®ex); if (s) result |= 64; else { memset (®s, 0, sizeof regs); static char const data[] = "a"; int datalen = sizeof data - 1; i = re_search (®ex, data, datalen, 0, datalen, ®s); if (i != 0) result |= 64; else if (regs.num_regs < 2) result |= 64; else if (! (regs.start[0] == 0 && regs.end[0] == 1)) result |= 64; else if (! (regs.start[1] == 0 && regs.end[1] == 0)) result |= 64; regfree (®ex); free (regs.start); free (regs.end); } #if 0 /* It would be nice to reject hosts whose regoff_t values are too narrow (including glibc on hosts with 64-bit ptrdiff_t and 32-bit int), but we should wait until glibc implements this feature. Otherwise, support for equivalence classes and multibyte collation symbols would always be broken except when compiling --without-included-regex. */ if (sizeof (regoff_t) < sizeof (ptrdiff_t) || sizeof (regoff_t) < sizeof (ssize_t)) result |= 64; #endif return result; ]])], [gl_cv_func_re_compile_pattern_working=yes], [gl_cv_func_re_compile_pattern_working=no], [case "$host_os" in # Guess no on native Windows. mingw*) gl_cv_func_re_compile_pattern_working="guessing no" ;; # Otherwise obey --enable-cross-guesses. *) gl_cv_func_re_compile_pattern_working="$gl_cross_guess_normal" ;; esac ]) ]) case "$gl_cv_func_re_compile_pattern_working" in #( *yes) ac_use_included_regex=no;; #( *no) ac_use_included_regex=yes;; esac ;; *) AC_MSG_ERROR([Invalid value for --with-included-regex: $with_included_regex]) ;; esac if test $ac_use_included_regex = yes; then AC_DEFINE([_REGEX_INCLUDE_LIMITS_H], [1], [Define if you want <regex.h> to include <limits.h>, so that it consistently overrides <limits.h>'s RE_DUP_MAX.]) AC_DEFINE([_REGEX_LARGE_OFFSETS], [1], [Define if you want regoff_t to be at least as wide POSIX requires.]) AC_DEFINE([re_syntax_options], [rpl_re_syntax_options], [Define to rpl_re_syntax_options if the replacement should be used.]) AC_DEFINE([re_set_syntax], [rpl_re_set_syntax], [Define to rpl_re_set_syntax if the replacement should be used.]) AC_DEFINE([re_compile_pattern], [rpl_re_compile_pattern], [Define to rpl_re_compile_pattern if the replacement should be used.]) AC_DEFINE([re_compile_fastmap], [rpl_re_compile_fastmap], [Define to rpl_re_compile_fastmap if the replacement should be used.]) AC_DEFINE([re_search], [rpl_re_search], [Define to rpl_re_search if the replacement should be used.]) AC_DEFINE([re_search_2], [rpl_re_search_2], [Define to rpl_re_search_2 if the replacement should be used.]) AC_DEFINE([re_match], [rpl_re_match], [Define to rpl_re_match if the replacement should be used.]) AC_DEFINE([re_match_2], [rpl_re_match_2], [Define to rpl_re_match_2 if the replacement should be used.]) AC_DEFINE([re_set_registers], [rpl_re_set_registers], [Define to rpl_re_set_registers if the replacement should be used.]) AC_DEFINE([re_comp], [rpl_re_comp], [Define to rpl_re_comp if the replacement should be used.]) AC_DEFINE([re_exec], [rpl_re_exec], [Define to rpl_re_exec if the replacement should be used.]) AC_DEFINE([regcomp], [rpl_regcomp], [Define to rpl_regcomp if the replacement should be used.]) AC_DEFINE([regexec], [rpl_regexec], [Define to rpl_regexec if the replacement should be used.]) AC_DEFINE([regerror], [rpl_regerror], [Define to rpl_regerror if the replacement should be used.]) AC_DEFINE([regfree], [rpl_regfree], [Define to rpl_regfree if the replacement should be used.]) fi ]) # Prerequisites of lib/regex.c and lib/regex_internal.c. AC_DEFUN([gl_PREREQ_REGEX], [ AC_REQUIRE([AC_USE_SYSTEM_EXTENSIONS]) AC_REQUIRE([AC_C_INLINE]) AC_REQUIRE([AC_C_RESTRICT]) AC_REQUIRE([AC_TYPE_MBSTATE_T]) AC_REQUIRE([gl_EEMALLOC]) AC_CHECK_HEADERS([libintl.h]) AC_CHECK_FUNCS_ONCE([isblank iswctype]) AC_CHECK_DECLS([isblank], [], [], [[#include <ctype.h>]]) ]) ������������������������recutils-1.9/m4/version-etc.m4����������������������������������������������������������������������0000644�0000000�0000000�00000002226�14226564453�013141� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# version-etc.m4 serial 1 # Copyright (C) 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. dnl $1 - configure flag and define name dnl $2 - human readable description m4_define([gl_VERSION_ETC_FLAG], [dnl AC_ARG_WITH([$1], [AS_HELP_STRING([--with-$1], [$2])], [dnl case $withval in yes|no) ;; *) AC_DEFINE_UNQUOTED(AS_TR_CPP([PACKAGE_$1]), ["$withval"], [$2]) ;; esac ]) ]) AC_DEFUN([gl_VERSION_ETC], [dnl gl_VERSION_ETC_FLAG([packager], [String identifying the packager of this software]) gl_VERSION_ETC_FLAG([packager-version], [Packager-specific version information]) gl_VERSION_ETC_FLAG([packager-bug-reports], [Packager info for bug reports (URL/e-mail/...)]) if test "X$with_packager" = "X" && \ test "X$with_packager_version$with_packager_bug_reports" != "X" then AC_MSG_ERROR([The --with-packager-{bug-reports,version} options require --with-packager]) fi ]) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/lock.m4�����������������������������������������������������������������������������0000644�0000000�0000000�00000003037�14226564452�011633� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# lock.m4 serial 14 dnl Copyright (C) 2005-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. dnl From Bruno Haible. AC_DEFUN([gl_LOCK], [ AC_REQUIRE([gl_THREADLIB]) if test "$gl_threads_api" = posix; then # OSF/1 4.0 and Mac OS X 10.1 lack the pthread_rwlock_t type and the # pthread_rwlock_* functions. has_rwlock=false AC_CHECK_TYPE([pthread_rwlock_t], [has_rwlock=true AC_DEFINE([HAVE_PTHREAD_RWLOCK], [1], [Define if the POSIX multithreading library has read/write locks.])], [], [#include <pthread.h>]) if $has_rwlock; then gl_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER fi # glibc defines PTHREAD_MUTEX_RECURSIVE as enum, not as a macro. AC_COMPILE_IFELSE([ AC_LANG_PROGRAM( [[#include <pthread.h>]], [[ #if __FreeBSD__ == 4 error "No, in FreeBSD 4.0 recursive mutexes actually don't work." #elif (defined __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ \ && __ENVIRONMENT_MAC_OS_X_VERSION_MIN_REQUIRED__ < 1070) error "No, in Mac OS X < 10.7 recursive mutexes actually don't work." #else int x = (int)PTHREAD_MUTEX_RECURSIVE; return !x; #endif ]])], [AC_DEFINE([HAVE_PTHREAD_MUTEX_RECURSIVE], [1], [Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE.])]) fi gl_PREREQ_LOCK ]) # Prerequisites of lib/glthread/lock.c. AC_DEFUN([gl_PREREQ_LOCK], [:]) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/eealloc.m4��������������������������������������������������������������������������0000644�0000000�0000000�00000001667�14226564451�012315� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# eealloc.m4 serial 3 dnl Copyright (C) 2003, 2009-2022 Free Software Foundation, Inc. dnl This file is free software; the Free Software Foundation dnl gives unlimited permission to copy and/or distribute it, dnl with or without modifications, as long as this notice is preserved. AC_DEFUN([gl_EEALLOC], [ AC_REQUIRE([gl_EEMALLOC]) AC_REQUIRE([gl_EEREALLOC]) ]) AC_DEFUN([gl_EEMALLOC], [ _AC_FUNC_MALLOC_IF( [gl_cv_func_malloc_0_nonnull=1], [gl_cv_func_malloc_0_nonnull=0]) AC_DEFINE_UNQUOTED([MALLOC_0_IS_NONNULL], [$gl_cv_func_malloc_0_nonnull], [If malloc(0) is != NULL, define this to 1. Otherwise define this to 0.]) ]) AC_DEFUN([gl_EEREALLOC], [ _AC_FUNC_REALLOC_IF( [gl_cv_func_realloc_0_nonnull=1], [gl_cv_func_realloc_0_nonnull=0]) AC_DEFINE_UNQUOTED([REALLOC_0_IS_NONNULL], [$gl_cv_func_realloc_0_nonnull], [If realloc(NULL,0) is != NULL, define this to 1. Otherwise define this to 0.]) ]) �������������������������������������������������������������������������recutils-1.9/m4/time_h.m4���������������������������������������������������������������������������0000644�0000000�0000000�00000016236�14226564453�012156� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Configure a more-standard replacement for <time.h>. # Copyright (C) 2000-2001, 2003-2007, 2009-2022 Free Software Foundation, Inc. # serial 19 # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # Written by Paul Eggert and Jim Meyering. AC_DEFUN_ONCE([gl_TIME_H], [ dnl Ensure to expand the default settings once only, before all statements dnl that occur in other macros. AC_REQUIRE([gl_TIME_H_DEFAULTS]) gl_NEXT_HEADERS([time.h]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) AC_REQUIRE([AC_C_RESTRICT]) AC_CACHE_CHECK([for TIME_UTC in <time.h>], [gl_cv_time_h_has_TIME_UTC], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <time.h> ]], [[static int x = TIME_UTC; x++;]])], [gl_cv_time_h_has_TIME_UTC=yes], [gl_cv_time_h_has_TIME_UTC=no])]) if test $gl_cv_time_h_has_TIME_UTC = yes; then TIME_H_DEFINES_TIME_UTC=1 else TIME_H_DEFINES_TIME_UTC=0 fi AC_SUBST([TIME_H_DEFINES_TIME_UTC]) ]) dnl Check whether 'struct timespec' is declared dnl in time.h, sys/time.h, pthread.h, or unistd.h. AC_DEFUN([gl_CHECK_TYPE_STRUCT_TIMESPEC], [ AC_CHECK_HEADERS_ONCE([sys/time.h]) AC_CACHE_CHECK([for struct timespec in <time.h>], [gl_cv_sys_struct_timespec_in_time_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <time.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_time_h=yes], [gl_cv_sys_struct_timespec_in_time_h=no])]) TIME_H_DEFINES_STRUCT_TIMESPEC=0 SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=0 PTHREAD_H_DEFINES_STRUCT_TIMESPEC=0 UNISTD_H_DEFINES_STRUCT_TIMESPEC=0 if test $gl_cv_sys_struct_timespec_in_time_h = yes; then TIME_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in <sys/time.h>], [gl_cv_sys_struct_timespec_in_sys_time_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <sys/time.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_sys_time_h=yes], [gl_cv_sys_struct_timespec_in_sys_time_h=no])]) if test $gl_cv_sys_struct_timespec_in_sys_time_h = yes; then SYS_TIME_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in <pthread.h>], [gl_cv_sys_struct_timespec_in_pthread_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <pthread.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_pthread_h=yes], [gl_cv_sys_struct_timespec_in_pthread_h=no])]) if test $gl_cv_sys_struct_timespec_in_pthread_h = yes; then PTHREAD_H_DEFINES_STRUCT_TIMESPEC=1 else AC_CACHE_CHECK([for struct timespec in <unistd.h>], [gl_cv_sys_struct_timespec_in_unistd_h], [AC_COMPILE_IFELSE( [AC_LANG_PROGRAM( [[#include <unistd.h> ]], [[static struct timespec x; x.tv_sec = x.tv_nsec;]])], [gl_cv_sys_struct_timespec_in_unistd_h=yes], [gl_cv_sys_struct_timespec_in_unistd_h=no])]) if test $gl_cv_sys_struct_timespec_in_unistd_h = yes; then UNISTD_H_DEFINES_STRUCT_TIMESPEC=1 fi fi fi fi AC_SUBST([TIME_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([SYS_TIME_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([PTHREAD_H_DEFINES_STRUCT_TIMESPEC]) AC_SUBST([UNISTD_H_DEFINES_STRUCT_TIMESPEC]) ]) # gl_TIME_MODULE_INDICATOR([modulename]) # sets the shell variable that indicates the presence of the given module # to a C preprocessor expression that will evaluate to 1. # This macro invocation must not occur in macros that are AC_REQUIREd. AC_DEFUN([gl_TIME_MODULE_INDICATOR], [ dnl Ensure to expand the default settings once only. gl_TIME_H_REQUIRE_DEFAULTS gl_MODULE_INDICATOR_SET_VARIABLE([$1]) dnl Define it also as a C macro, for the benefit of the unit tests. gl_MODULE_INDICATOR_FOR_TESTS([$1]) ]) # Initializes the default values for AC_SUBSTed shell variables. # This macro must not be AC_REQUIREd. It must only be invoked, and only # outside of macros or in macros that are not AC_REQUIREd. AC_DEFUN([gl_TIME_H_REQUIRE_DEFAULTS], [ m4_defun(GL_MODULE_INDICATOR_PREFIX[_TIME_H_MODULE_INDICATOR_DEFAULTS], [ gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_CTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MKTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_LOCALTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_NANOSLEEP]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRFTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_STRPTIME]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMEGM]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GET]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIMESPEC_GETRES]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_R]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TIME_RZ]) gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_TZSET]) dnl Support Microsoft deprecated alias function names by default. gl_MODULE_INDICATOR_INIT_VARIABLE([GNULIB_MDA_TZSET], [1]) ]) m4_require(GL_MODULE_INDICATOR_PREFIX[_TIME_H_MODULE_INDICATOR_DEFAULTS]) AC_REQUIRE([gl_TIME_H_DEFAULTS]) ]) AC_DEFUN([gl_TIME_H_DEFAULTS], [ dnl Assume proper GNU behavior unless another module says otherwise. HAVE_DECL_LOCALTIME_R=1; AC_SUBST([HAVE_DECL_LOCALTIME_R]) HAVE_NANOSLEEP=1; AC_SUBST([HAVE_NANOSLEEP]) HAVE_STRPTIME=1; AC_SUBST([HAVE_STRPTIME]) HAVE_TIMEGM=1; AC_SUBST([HAVE_TIMEGM]) HAVE_TIMESPEC_GET=1; AC_SUBST([HAVE_TIMESPEC_GET]) HAVE_TIMESPEC_GETRES=1; AC_SUBST([HAVE_TIMESPEC_GETRES]) dnl Even GNU libc does not have timezone_t yet. HAVE_TIMEZONE_T=0; AC_SUBST([HAVE_TIMEZONE_T]) dnl If another module says to replace or to not replace, do that. dnl Otherwise, replace only if someone compiles with -DGNULIB_PORTCHECK; dnl this lets maintainers check for portability. REPLACE_CTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_CTIME]) REPLACE_LOCALTIME_R=GNULIB_PORTCHECK; AC_SUBST([REPLACE_LOCALTIME_R]) REPLACE_MKTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_MKTIME]) REPLACE_NANOSLEEP=GNULIB_PORTCHECK; AC_SUBST([REPLACE_NANOSLEEP]) REPLACE_STRFTIME=GNULIB_PORTCHECK; AC_SUBST([REPLACE_STRFTIME]) REPLACE_TIMEGM=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TIMEGM]) REPLACE_TZSET=GNULIB_PORTCHECK; AC_SUBST([REPLACE_TZSET]) dnl Hack so that the time module doesn't depend on the sys_time module. dnl First, default GNULIB_GETTIMEOFDAY to 0 if sys_time is absent. : ${GNULIB_GETTIMEOFDAY=0}; AC_SUBST([GNULIB_GETTIMEOFDAY]) dnl Second, it's OK to not use GNULIB_PORTCHECK for REPLACE_GMTIME dnl and REPLACE_LOCALTIME, as portability to Solaris 2.6 and earlier dnl is no longer a big deal. REPLACE_GMTIME=0; AC_SUBST([REPLACE_GMTIME]) REPLACE_LOCALTIME=0; AC_SUBST([REPLACE_LOCALTIME]) ]) ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/m4/getcwd-abort-bug.m4�����������������������������������������������������������������0000644�0000000�0000000�00000011123�14226564447�014037� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# serial 16 # Determine whether getcwd aborts when the length of the working directory # name is unusually large. Any length between 4k and 16k trigger the bug # when using glibc-2.4.90-9 or older. # Copyright (C) 2006, 2009-2022 Free Software Foundation, Inc. # This file is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # From Jim Meyering # gl_FUNC_GETCWD_ABORT_BUG([ACTION-IF-BUGGY[, ACTION-IF-WORKS]]) AC_DEFUN([gl_FUNC_GETCWD_ABORT_BUG], [ AC_REQUIRE([AC_CANONICAL_HOST]) dnl for cross-compiles AC_CHECK_DECLS_ONCE([getcwd]) AC_CHECK_HEADERS_ONCE([unistd.h]) AC_REQUIRE([gl_PATHMAX_SNIPPET_PREREQ]) gl_CHECK_FUNC_GETPAGESIZE if test $gl_cv_func_getpagesize = yes; then AC_DEFINE_UNQUOTED([HAVE_GETPAGESIZE], [1], [Define to 1 if the system has the 'getpagesize' function.]) fi AC_CACHE_CHECK([whether getcwd succeeds when 4k < cwd_length < 16k], [gl_cv_func_getcwd_succeeds_beyond_4k], [# Remove any remnants of a previous test. rm -rf confdir-14B--- # Arrange for deletion of the temporary directory this test creates. ac_clean_files="$ac_clean_files confdir-14B---" dnl Please keep this in sync with tests/test-getcwd.c. AC_RUN_IFELSE( [AC_LANG_SOURCE( [[ #include <errno.h> #include <stdlib.h> #if HAVE_UNISTD_H # include <unistd.h> #else /* on Windows with MSVC */ # include <direct.h> #endif #include <string.h> #include <sys/stat.h> ]gl_PATHMAX_SNIPPET[ ]GL_MDA_DEFINES[ #ifndef S_IRWXU # define S_IRWXU 0700 #endif /* FIXME: skip the run-test altogether on systems without getpagesize. */ #if ! HAVE_GETPAGESIZE # define getpagesize() 0 #endif /* This size is chosen to be larger than PATH_MAX (4k), yet smaller than the 16kB pagesize on ia64 linux. Those conditions make the code below trigger a bug in glibc's getcwd implementation before 2.4.90-10. */ #define TARGET_LEN (5 * 1024) int main () { char *cwd; size_t initial_cwd_len; int fail = 0; /* The bug is triggered when PATH_MAX < getpagesize (), so skip this relatively expensive and invasive test if that's not true. */ #ifdef PATH_MAX int bug_possible = PATH_MAX < getpagesize (); #else int bug_possible = 0; #endif if (! bug_possible) return 0; cwd = getcwd (NULL, 0); if (cwd == NULL) return 2; initial_cwd_len = strlen (cwd); free (cwd); if (1) { static char const dir_name[] = "confdir-14B---"; size_t desired_depth = ((TARGET_LEN - 1 - initial_cwd_len) / sizeof dir_name); size_t d; for (d = 0; d < desired_depth; d++) { if (mkdir (dir_name, S_IRWXU) < 0 || chdir (dir_name) < 0) { if (! (errno == ERANGE || errno == ENAMETOOLONG || errno == ENOENT)) fail = 3; /* Unable to construct deep hierarchy. */ break; } } /* If libc has the bug in question, this invocation of getcwd results in a failed assertion. */ cwd = getcwd (NULL, 0); if (cwd == NULL) fail = 4; /* getcwd didn't assert, but it failed for a long name where the answer could have been learned. */ free (cwd); /* Call rmdir first, in case the above chdir failed. */ rmdir (dir_name); while (0 < d--) { if (chdir ("..") < 0) { fail = 5; break; } rmdir (dir_name); } } return fail; } ]])], [gl_cv_func_getcwd_succeeds_beyond_4k=yes], [dnl An abort will provoke an exit code of something like 134 (128 + 6). dnl An exit code of 4 can also occur (for example in dnl musl libc 1.2.2/powerpc64le, NetBSD 9.0, OpenBSD 6.7: dnl getcwd (NULL, 0) fails rather than returning a string longer than dnl PATH_MAX. This may be POSIX compliant (in some interpretations of dnl POSIX). But gnulib's getcwd module wants to provide a non-NULL dnl value in this case. ret=$? if test $ret -ge 128 || test $ret = 4; then gl_cv_func_getcwd_succeeds_beyond_4k=no else gl_cv_func_getcwd_succeeds_beyond_4k=yes fi ], [case "$host_os" in # Guess no otherwise, even on glibc systems and musl systems. *) gl_cv_func_getcwd_succeeds_beyond_4k="guessing no" esac ]) ]) case "$gl_cv_func_getcwd_succeeds_beyond_4k" in *no) $1 ;; *) $2 ;; esac ]) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/������������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�010620� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/fi.po�������������������������������������������������������������������������������0000644�0000000�0000000�00000204007�14226577415�011500� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Finnish messages for recutils. # Copyright © 2011, 2012, 2013, 2014 Free Software Foundation, Inc. # Copyright © 2010 Jose E. Marchesi (msgids) # This file is distributed under the same license as the recutils package. # Jorma Karvonen <karvonen.jorma@gmail.com>, 2011-2014. # msgid "" msgstr "" "Project-Id-Version: GNU recutils 1.6.90\n" "Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" "POT-Creation-Date: 2022-04-16 19:38+0200\n" "PO-Revision-Date: 2014-04-18 12:00+0200\n" "Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com>\n" "Language-Team: Finnish <translation-team-fi@lists.sourceforge.net>\n" "Language: fi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" #: lib/closeout.c:122 msgid "write error" msgstr "kirjoitusvirhe" #: lib/copy-acl.c:54 lib/copy-file.c:215 #, c-format msgid "preserving permissions for %s" msgstr "" #: lib/copy-file.c:192 #, fuzzy, c-format msgid "error while opening %s for reading" msgstr "tiedoston %s avaus lukemista varten epäonnistui.\n" #: lib/copy-file.c:196 #, fuzzy, c-format msgid "cannot open backup file %s for writing" msgstr "tiedoston %s avaus lukemista varten epäonnistui.\n" #: lib/copy-file.c:200 #, fuzzy, c-format msgid "error reading %s" msgstr "virhe: tiedoston %s lukeminen epäonnistui\n" #: lib/copy-file.c:204 #, c-format msgid "error writing %s" msgstr "" #: lib/copy-file.c:208 #, fuzzy, c-format msgid "error after reading %s" msgstr "virhe: tiedoston %s lukeminen epäonnistui\n" #: lib/error.c:195 msgid "Unknown system error" msgstr "Tuntematon järjestelmävirhe" #: lib/execute.c:348 lib/wait-process.c:291 lib/wait-process.c:365 #, c-format msgid "%s subprocess failed" msgstr "%s aliprosessi epäonnistui" #: lib/getopt.c:278 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: valitsin ’-W %s’ ei ole yksiselitteinen\n" #: lib/getopt.c:284 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: valitsin ’%s’ ei ole yksiselitteinen; mahdollisuudet:" #: lib/getopt.c:319 #, fuzzy, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: tunnistamaton valitsin ’%c%s’\n" #: lib/getopt.c:345 #, fuzzy, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: valitsin ’%c%s’ ei salli argumenttia\n" #: lib/getopt.c:360 #, fuzzy, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: valitsin ’--%s’ vaatii argumentin\n" #: lib/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: virheellinen valitsin -- ’%c’\n" #: lib/getopt.c:636 lib/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: valitsin vaatii argumentin -- ’%c’\n" #: lib/obstack.c:337 lib/obstack.c:339 lib/xalloc-die.c:34 msgid "memory exhausted" msgstr "muisti loppui" #: lib/openat-die.c:38 #, c-format msgid "unable to record current working directory" msgstr "" #: lib/openat-die.c:57 #, c-format msgid "failed to return to initial working directory" msgstr "" #: parse-datetime.y:440 parse-datetime.y:540 #, c-format msgid "parsed %s part: " msgstr "" #: parse-datetime.y:455 #, c-format msgid "year: %04<PRIdMAX>" msgstr "" #: parse-datetime.y:483 #, c-format msgid "%s (day ordinal=%<PRIdMAX> number=%d)" msgstr "" #: parse-datetime.y:514 #, c-format msgid "number of seconds: %<PRIdMAX>" msgstr "" #: parse-datetime.y:547 msgid "today/this/now\n" msgstr "" #: parse-datetime.y:612 msgid "number of seconds" msgstr "" #: parse-datetime.y:625 msgid "datetime" msgstr "" #: parse-datetime.y:630 msgid "time" msgstr "" #: parse-datetime.y:635 msgid "local_zone" msgstr "" #: parse-datetime.y:640 msgid "zone" msgstr "" #: parse-datetime.y:645 msgid "date" msgstr "" #: parse-datetime.y:650 msgid "day" msgstr "" #: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 msgid "relative" msgstr "" #: parse-datetime.y:658 msgid "number" msgstr "" #: parse-datetime.y:662 msgid "hybrid" msgstr "" #: parse-datetime.y:820 #, c-format msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" msgstr "" #: parse-datetime.y:832 #, c-format msgid "" "warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" msgstr "" #: parse-datetime.y:1279 #, c-format msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" msgstr "" #: parse-datetime.y:1289 #, c-format msgid "error: out-of-range year %<PRIdMAX>\n" msgstr "" #: parse-datetime.y:1520 #, fuzzy, c-format msgid "error: unknown word '%s'\n" msgstr "virhe: tiedoston %s lukeminen epäonnistui\n" #: parse-datetime.y:1669 #, fuzzy msgid "error: invalid date/time value:\n" msgstr "virheellinen enumeraatioarvo." #: parse-datetime.y:1670 #, c-format msgid " user provided time: '%s'\n" msgstr "" #: parse-datetime.y:1672 #, c-format msgid " normalized time: '%s'\n" msgstr "" #: parse-datetime.y:1695 msgid " possible reasons:\n" msgstr "" #: parse-datetime.y:1697 msgid " non-existing due to daylight-saving time;\n" msgstr "" #: parse-datetime.y:1699 msgid " invalid day/month combination;\n" msgstr "" #: parse-datetime.y:1700 msgid " numeric values overflow;\n" msgstr "" #: parse-datetime.y:1701 msgid "incorrect timezone" msgstr "" #: parse-datetime.y:1702 msgid "missing timezone" msgstr "" #: parse-datetime.y:1810 msgid "error: initial year out of range\n" msgstr "" #: parse-datetime.y:1905 #, fuzzy msgid "error: parsing failed\n" msgstr "virhe jäsennettäessä CSV-tiedostoa: %s\n" #: parse-datetime.y:1906 #, fuzzy, c-format msgid "error: parsing failed, stopped at '%s'\n" msgstr "virhe jäsennettäessä CSV-tiedostoa: %s\n" #: parse-datetime.y:1916 msgid "input timezone: " msgstr "" #: parse-datetime.y:1919 #, c-format msgid "'@timespec' - always UTC" msgstr "" #: parse-datetime.y:1921 #, c-format msgid "parsed date/time string" msgstr "" #: parse-datetime.y:1925 #, c-format msgid "TZ=\"%s\" in date string" msgstr "" #: parse-datetime.y:1929 #, c-format msgid "TZ=\"UTC0\" environment value or -u" msgstr "" #: parse-datetime.y:1932 #, c-format msgid "TZ=\"%s\" environment value" msgstr "" #: parse-datetime.y:1935 #, c-format msgid "system default" msgstr "" #: parse-datetime.y:1977 msgid "error: year, month, or day overflow\n" msgstr "" #: parse-datetime.y:1988 #, fuzzy, c-format msgid "error: invalid hour %<PRIdMAX>%s\n" msgstr "%s:%s: virhe: väärä tietuetyyppi %s\n" #: parse-datetime.y:1996 #, c-format msgid "using specified time as starting value: '%s'\n" msgstr "" #: parse-datetime.y:1997 #, c-format msgid "using current time as starting value: '%s'\n" msgstr "" #: parse-datetime.y:2051 #, c-format msgid "error: tzalloc (\"%s\") failed\n" msgstr "" #: parse-datetime.y:2095 #, c-format msgid "" "error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " "date: '%s'\n" msgstr "" #: parse-datetime.y:2106 #, c-format msgid "new start date: '%s' is '%s'\n" msgstr "" #: parse-datetime.y:2115 #, c-format msgid "using current date as starting value: '%s'\n" msgstr "" #: parse-datetime.y:2119 #, c-format msgid "warning: day (%s) ignored when explicit dates are given\n" msgstr "" #: parse-datetime.y:2123 #, c-format msgid "starting date/time: '%s'\n" msgstr "" #: parse-datetime.y:2133 msgid "" "warning: when adding relative months/years, it is recommended to specify the " "15th of the months\n" msgstr "" #: parse-datetime.y:2138 msgid "warning: when adding relative days, it is recommended to specify noon\n" msgstr "" #: parse-datetime.y:2148 #, fuzzy, c-format msgid "error: %s:%d\n" msgstr ": virhe: " #: parse-datetime.y:2163 #, c-format msgid "error: adding relative date resulted in an invalid date: '%s'\n" msgstr "" #: parse-datetime.y:2172 #, c-format msgid "" "after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " "days),\n" msgstr "" #: parse-datetime.y:2176 #, c-format msgid " new date/time = '%s'\n" msgstr "" #: parse-datetime.y:2195 msgid "warning: daylight saving time changed after date adjustment\n" msgstr "" #: parse-datetime.y:2214 msgid "warning: month/year adjustment resulted in shifted dates:\n" msgstr "" #: parse-datetime.y:2217 #, c-format msgid " adjusted Y M D: %s %02d %02d\n" msgstr "" #: parse-datetime.y:2219 #, c-format msgid " normalized Y M D: %s %02d %02d\n" msgstr "" #: parse-datetime.y:2248 #, c-format msgid "error: timezone %d caused time_t overflow\n" msgstr "" #: parse-datetime.y:2258 #, c-format msgid "'%s' = %<PRIdMAX> epoch-seconds\n" msgstr "" #: parse-datetime.y:2286 msgid "error: adding relative time caused an overflow\n" msgstr "" #: parse-datetime.y:2297 #, c-format msgid "" "after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " "seconds, %+d ns),\n" msgstr "" #: parse-datetime.y:2303 #, c-format msgid " new time = %<PRIdMAX> epoch-seconds\n" msgstr "" #: parse-datetime.y:2319 msgid "warning: daylight saving time changed after time adjustment\n" msgstr "" #: parse-datetime.y:2329 msgid "timezone: system default\n" msgstr "" #: parse-datetime.y:2331 msgid "timezone: Universal Time\n" msgstr "" #: parse-datetime.y:2333 #, c-format msgid "timezone: TZ=\"%s\" environment value\n" msgstr "" #: parse-datetime.y:2337 #, c-format msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" msgstr "" #: parse-datetime.y:2343 #, c-format msgid "final: %s (UTC)\n" msgstr "" #: parse-datetime.y:2358 #, c-format msgid "final: %s (UTC%s)\n" msgstr "" #: parse-datetime.y:2362 #, c-format msgid "final: %s (unknown time zone offset)\n" msgstr "" #. TRANSLATORS: #. Get translations for open and closing quotation marks. #. The message catalog should translate "`" to a left #. quotation mark suitable for the locale, and similarly for #. "'". For example, a French Unicode local should translate #. these to U+00AB (LEFT-POINTING DOUBLE ANGLE #. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE #. QUOTATION MARK), respectively. #. #. If the catalog has no translation, we will try to #. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and #. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the #. current locale is not Unicode, locale_quoting_style #. will quote 'like this', and clocale_quoting_style will #. quote "like this". You should always include translations #. for "`" and "'" even if U+2018 and U+2019 are appropriate #. for your locale. #. #. If you don't know what to put here, please see #. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> #. and use glyphs suitable for your language. #: lib/quotearg.c:355 msgid "`" msgstr "â€" #: lib/quotearg.c:356 msgid "'" msgstr "â€" #: lib/regcomp.c:122 msgid "Success" msgstr "Onnistui" #: lib/regcomp.c:125 msgid "No match" msgstr "Ei täsmää" #: lib/regcomp.c:128 msgid "Invalid regular expression" msgstr "Virheellinen säännöllinen lauseke" #: lib/regcomp.c:131 msgid "Invalid collation character" msgstr "Virheellinen lajittelumerkki" #: lib/regcomp.c:134 msgid "Invalid character class name" msgstr "Virheellinen merkkiluokkanimi" #: lib/regcomp.c:137 msgid "Trailing backslash" msgstr "Jäljessä oleva kenoviiva" #: lib/regcomp.c:140 msgid "Invalid back reference" msgstr "Virheellinen paluuviite" #: lib/regcomp.c:143 #, fuzzy msgid "Unmatched [, [^, [:, [., or [=" msgstr "Pariton [ tai [^" #: lib/regcomp.c:146 msgid "Unmatched ( or \\(" msgstr "Pariton ( tai \\(" #: lib/regcomp.c:149 msgid "Unmatched \\{" msgstr "Pariton \\{" #: lib/regcomp.c:152 msgid "Invalid content of \\{\\}" msgstr "Virheellinen \\{\\}-sisältö" #: lib/regcomp.c:155 msgid "Invalid range end" msgstr "virheellinen lukualueen loppu" #: lib/regcomp.c:158 msgid "Memory exhausted" msgstr "Muisti loppui" #: lib/regcomp.c:161 msgid "Invalid preceding regular expression" msgstr "Virheellinen edeltävä säännöllinen lauseke" #: lib/regcomp.c:164 msgid "Premature end of regular expression" msgstr "Säännöllisen lausekkeen ennenaikainen loppu" #: lib/regcomp.c:167 msgid "Regular expression too big" msgstr "Säännöllinen lauseke on liian iso" #: lib/regcomp.c:170 msgid "Unmatched ) or \\)" msgstr "Pariton ) tai \\)" #: lib/regcomp.c:650 msgid "No previous regular expression" msgstr "Ei edellistä säännöllistä lauseketta" #: lib/set-acl.c:46 #, c-format msgid "setting permissions for %s" msgstr "" #: lib/version-etc.c:73 #, c-format msgid "Packaged by %s (%s)\n" msgstr "" #: lib/version-etc.c:76 #, c-format msgid "Packaged by %s\n" msgstr "" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: lib/version-etc.c:83 msgid "(C)" msgstr "" #. TRANSLATORS: The %s placeholder is the web address of the GPL license. #: lib/version-etc.c:88 #, fuzzy, c-format msgid "" "License GPLv3+: GNU GPL version 3 or later <%s>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright © %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL versio 3 tai myöhäisempi <http://gnu.org/licenses/" "gpl.html>.\n" "Tämä on vapaa ohjelmisto: voi muuttaa ja jakaa sitä vapaasti edelleen.\n" "Ohjelmalla EI OLE TAKUUTA siinä laajuudessa, minkä laki sallii.\n" #. TRANSLATORS: %s denotes an author name. #: lib/version-etc.c:105 #, c-format msgid "Written by %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:109 #, fuzzy, c-format msgid "Written by %s and %s.\n" msgstr "" "\n" "Tekijä: Jose E. Marchesi." #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:113 #, fuzzy, c-format msgid "Written by %s, %s, and %s.\n" msgstr "" "\n" "Tekijä: Jose E. Marchesi." #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:120 #, c-format msgid "" "Written by %s, %s, %s,\n" "and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:127 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:134 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:142 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:150 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:159 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:170 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s, and others.\n" msgstr "" #. TRANSLATORS: The placeholder indicates the bug-reporting address #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for translation #. bugs (typically your translation team's web or email address). #. TRANSLATORS: --help output 5+ (reports) #. TRANSLATORS: the placeholder indicates the bug-reporting address #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap #: lib/version-etc.c:249 utils/recutl.c:114 #, c-format msgid "Report bugs to: %s\n" msgstr "" "Ilmoita virheistä (englanniksi) osoitteeseen: %s\n" "Ilmoita käännösvirheistä osoitteeseen <translation-team-fi@lists.sourceforge." "net>\n" #: lib/version-etc.c:251 utils/recutl.c:117 #, c-format msgid "Report %s bugs to: %s\n" msgstr "" "Ilmoita %s-virheistä osoitteeseen: %s\n" "Ilmoita käännösvirheistä osoitteeseen <translation-team-fi@lists.sourceforge." "net>\n" #: lib/version-etc.c:255 lib/version-etc.c:257 utils/recutl.c:121 #, c-format msgid "%s home page: <%s>\n" msgstr "%s kotisivu: <%s>\n" #: lib/version-etc.c:260 #, fuzzy, c-format msgid "General help using GNU software: <%s>\n" msgstr "" "Yleinen opaste GNU-ohjelmistojen käytöstä: <http://www.gnu.org/gethelp/>\n" #: lib/wait-process.c:232 lib/wait-process.c:264 lib/wait-process.c:326 #, c-format msgid "%s subprocess" msgstr "%s aliprosessi" #: lib/wait-process.c:283 lib/wait-process.c:355 #, c-format msgid "%s subprocess got fatal signal %d" msgstr "%s aliprosessi sai kuolettavan signaalin %d" #: src/rec-fex.c:726 #, c-format msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" msgstr "sisäinen virhe: REC_FEX_MAX_ELEMS ylitetty. Ilmoita tästä.\n" #: src/rec-int.c:132 src/rec-int.c:186 src/rec-int.c:243 src/rec-int.c:287 #: utils/recutl.c:199 msgid "out of memory\n" msgstr "muisti loppui\n" #: src/rec-int.c:147 #, c-format msgid "%s:%s: error: mandatory field '%s' not found in record\n" msgstr "%s:%s: virhe: pakollista kenttää ’%s’ ei löytynyt tietueesta\n" #: src/rec-int.c:210 #, c-format msgid "%s:%s: error: field '%s' not allowed in this record set\n" msgstr "%s:%s: virhe: kenttä ’%s’ ei ole sallittu tässä tietuejoukossa\n" #: src/rec-int.c:257 #, c-format msgid "%s:%s: error: field '%s' should be unique in this record\n" msgstr "%s:%s: virhe: kentän ’%s’ pitäisi olla uniikki tässä tietueessa\n" #: src/rec-int.c:301 #, c-format msgid "%s:%s: error: prohibited field '%s' found in record\n" msgstr "%s:%s: virhe: kielletty kenttä ’%s’ löytyi tietueessa\n" #: src/rec-int.c:333 #, c-format msgid "%s:%s: error: %%constraint[%d] violated in record\n" msgstr "%s:%s: virhe: %%constraint[%d]-sääntörikkomus tietueessa\n" #: src/rec-int.c:370 #, c-format msgid "%s:%s: error: confidential field is not encrypted\n" msgstr "%s:%s: virhe: luottamuksellinen kenttä ei ole salattu\n" #: src/rec-int.c:422 #, c-format msgid "%s:%s: error: key field '%s' not found in record\n" msgstr "%s:%s: virhe: avainkenttää ’%s’ ei löytynyt tietueesta\n" #: src/rec-int.c:431 #, c-format msgid "%s:%s: error: multiple key fields '%s' in record\n" msgstr "%s:%s: virhe: useita avainkenttiä ’%s’ tietueessa\n" #: src/rec-int.c:474 #, c-format msgid "%s:%s: error: duplicated key value in field '%s' in record\n" msgstr "%s:%s: virhe: kaksoiskappale avainarvo tietueen kentässä ’%s’\n" #: src/rec-int.c:562 #, fuzzy, c-format msgid "%s:%s: error: duplicated value in singular field '%s' in record\n" msgstr "%s:%s: virhe: kaksoiskappale avainarvo tietueen kentässä ’%s’\n" #: src/rec-int.c:620 #, c-format msgid "%s:%s: error: missing %%rec field in record descriptor\n" msgstr "%s:%s: virhe: puuttuva %%rec-kenttä tietueselosteessa\n" #: src/rec-int.c:628 #, c-format msgid "%s:%s: error: too many %%rec fields in record descriptor\n" msgstr "%s:%s: virhe: liian monia %%rec-kenttiä tietueselosteessa\n" #: src/rec-int.c:638 #, c-format msgid "%s:%s: error: invalid record type %s\n" msgstr "%s:%s: virhe: väärä tietuetyyppi %s\n" #: src/rec-int.c:649 #, c-format msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" msgstr "%s:%s: virhe: vain yksi %%key-kenttä sallitaan tietueselosteessa\n" #: src/rec-int.c:659 #, c-format msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" msgstr "%s:%s: virhe: vain yksi %%size-kenttä sallitaan tietueselosteessa\n" #: src/rec-int.c:669 #, c-format msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" msgstr "%s:%s: virhe: vain yksi %%sort-kenttä sallitaan tietueselosteessa\n" #: src/rec-int.c:692 #, c-format msgid "" "%s:%s: error: expected a comma-separated list of fields before the type " "specification\n" msgstr "" "%s:%s: virhe: odotettiin pilkulla eroteltua kenttien luetteloa ennen " "tyyppimäärittelyä\n" #: src/rec-int.c:718 src/rec-int.c:771 #, c-format msgid "%s:%s: error: the referred type %s does not exist\n" msgstr "%s:%s: virhe: viitattu tyyppi %s ei ole olemassa\n" #: src/rec-int.c:730 #, c-format msgid "%s:%s: error: invalid type specification\n" msgstr "%s:%s: virhe: virheellinen tyyppimäärittely\n" #: src/rec-int.c:745 #, c-format msgid "%s:%s: error: expected a type name before the type specification\n" msgstr "%s:%s: virhe: odotettiin tyyppinimeä ennen tyyppimäärittelyä\n" #: src/rec-int.c:783 #, c-format msgid "%s:%s: error: invalid typedef specification\n" msgstr "%s:%s: virhe: virheellinen typedef-määrittely\n" #: src/rec-int.c:805 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" msgstr "" "%s:%s: virhe: arvo kohteelle %s[%zd] ei ole kelvollinen valintalauseke\n" #: src/rec-int.c:836 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" msgstr "%s:%s: virhe: arvo kohteelle %s[%zd] ei ole kenttänimien luettelo\n" #: src/rec-int.c:849 #, c-format msgid "" "%s:%s: error: value for %s should be a number optionally preceded by >, <, " ">= or <=.\n" msgstr "" "%s:%s: virhe: arvon %s pitäisi olla numero, jota valinnaisesti edeltää >, <, " ">= tai <=.\n" #: src/rec-int.c:865 #, c-format msgid "%s:%s: error: value for %s should be a list of field names.\n" msgstr "%s:%s: virhe: arvon kohteelle %s olisi oltava kenttänimien luettelo.\n" #: src/rec-int.c:893 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range, uuid " "or date\n" msgstr "" "%s:%s: virhe: automaattisen askelkasvatuskentän %s pitäisi olla tyyppiä " "kokonaisluku, lukualue, uuid tai päivämäärä\n" #: src/rec-int.c:895 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range or " "date\n" msgstr "" "%s:%s: virhe: automaattisen askelkasvatuskentän %s pitäisi olla tyyppiä " "kokonaisluku, lukualue tai päivämäärä\n" #: src/rec-int.c:978 #, c-format msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" msgstr "%s:%s: virhe: etäselosteen nouto verkko-osoitteesta %s epäonnistui.\n" #: src/rec-int.c:997 #, c-format msgid "%s:%s: error: could not read external descriptor from file %s.\n" msgstr "" "%s:%s: virhe: ulkoisen selosteen lukemien tiedostosta %s epäonnistui.\n" #: src/rec-int.c:1012 #, c-format msgid "%s:%s: error: %s does not contain valid rec data.\n" msgstr "%s:%s: virhe: verkko-osoite %s ei sisällä kelvollista rec-tietoa.\n" #: src/rec-int.c:1026 #, c-format msgid "%s:%s: error: %s does not contain information for type %s.\n" msgstr "%s:%s: virhe: verkko-osoite %s ei sisällä tietoa tyypille %s.\n" #: src/rec-int.c:1150 #, c-format msgid "%s: error: the number of records of type %s should be %zd.\n" msgstr "%s: virhe: tietuetyypin %s lukumäärän pitää olla %zd.\n" #: src/rec-int.c:1160 #, c-format msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" msgstr "" "%s: virhe: liian monta %s-tyyppistä tietuetta. Sallitaan enintään %zd.\n" #: src/rec-int.c:1167 #, c-format msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" msgstr "" "%s: virhe: liian vähän %s-tyyppisiä tietueita. Sallittu vähimmäismäärä on " "%zd.\n" #: src/rec-types.c:304 msgid "invalid integer." msgstr "virheellinen kokonaisluku." #: src/rec-types.c:332 msgid "invalid 'field' value." msgstr "virheellinen ’field’-arvo." #: src/rec-types.c:353 msgid "invalid 'uuid' value." msgstr "virheellinen ’uuid’-arvo." #: src/rec-types.c:369 msgid "invalid 'bool' value." msgstr "virheellinen ’bool’-arvo." #: src/rec-types.c:390 msgid "invalid 'range' value." msgstr "virheellinen ’range’-alue." #: src/rec-types.c:399 #, c-format msgid "expected an integer between %d and %d." msgstr "odotettiin kokonaislukua väliltä %d ... %d." #: src/rec-types.c:419 msgid "invalid 'real' value." msgstr "virheellinen ’real’-arvo." #: src/rec-types.c:436 #, c-format msgid "value too large. Expected a size <= %zu." msgstr "arvo on liian iso. Odotettiin kokoa <= %zu." #: src/rec-types.c:456 msgid "invalid 'line' value." msgstr "virheellinen ’line’-arvo." #: src/rec-types.c:473 msgid "value does not match the regexp." msgstr "arvo ei täsmää säännöllisessä lausekkeessa." #: src/rec-types.c:492 msgid "invalid date." msgstr "virheellinen päivämäärä." #: src/rec-types.c:506 msgid "invalid email." msgstr "virheellinen sähköpostiosoite." #: src/rec-types.c:547 msgid "invalid enum value." msgstr "virheellinen enumeraatioarvo." #: src/rec-types.c:898 #, c-format msgid "" "internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " "in rec_type_new().\n" msgstr "" "sisäinen virhe: rec-tyypit: saatiin REC_TYPE_NONE funktiosta " "rec_type_parse_type_kind() funktiossa rec_type_new().\n" #: src/rec-utils.c:86 #, c-format msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" msgstr "" "sisäinen virhe: rec_int_rec_extract_file: virhe käännettäessä säännöllistä " "lauseketta.\n" #: src/rec-utils.c:116 src/rec-utils.c:147 #, c-format msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" msgstr "" "sisäinen virhe: rec_int_rec_extract_url: virhe käännettäessä säännöllistä " "lauseketta.\n" #: src/rec-utils.c:290 #, c-format msgid "internal error: rec_match: error compiling regexp.\n" msgstr "" "sisäinen virhe: rec_match: virhe käännettäessä säännöllistä lauseketta.\n" #. TRANSLATORS: --help output, csv2rec synopsis. #. no-wrap #: utils/csv2rec.c:98 #, c-format msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" msgstr "Käyttö: csv2rec [VALITSIMET]... [CSV_TIEDOSTO]\n" #. TRANSLATORS: --help output, csv2rec short description. #. no-wrap #: utils/csv2rec.c:103 msgid "Convert csv data into rec data.\n" msgstr "Muunna csv-tietoa rec-tiedoksi.\n" #. TRANSLATORS: --help output, csv2rec options. #. no-wrap #: utils/csv2rec.c:109 #, fuzzy msgid "" " -t, --type=TYPE type name for the converted records; " "if this\n" " parameter is omitted then no type is " "used.\n" " -s, --strict be strict parsing the csv file.\n" " -e, --omit-empty omit empty fields.\n" msgstr "" " -t, --type=TYYPPI Muunnettujen tietueiden tyyppinimi. " "Jos tämä\n" " parametri ohitetaan, mitään tyyppiä " "ei käytetä.\n" " -s, --strict Noudata tiukkaa jäsennystä csv-" "tiedostossa.\n" " -e, --omit-empty Ohita tyhjät kentät.\n" #: utils/csv2rec.c:212 #, c-format msgid "invalid field name '%s' in header\n" msgstr "virheellinen kenttänimi ’%s’ otsakkeessa\n" #: utils/csv2rec.c:221 #, fuzzy msgid "error while parsing CSV file: too many columns in row\n" msgstr "virhe jäsennettäessä CSV-tiedostoa: %s\n" #: utils/csv2rec.c:241 #, fuzzy, c-format msgid "" "%s: %lu: this line contains %lu fields, but %lu header fields were read\n" msgstr "" "%s: %d: tämä rivi sisältää %d kenttää, mutta %d -otsakekenttää luettiin\n" #: utils/csv2rec.c:331 utils/recdel.c:233 utils/recset.c:306 utils/recutl.c:317 #, c-format msgid "cannot read file %s\n" msgstr "tiedoston %s lukeminen epäonnistui\n" #: utils/csv2rec.c:338 msgid "failed to initialize csv parser\n" msgstr "csv-jäsentimen alustus epäonnistui\n" #: utils/csv2rec.c:355 #, c-format msgid "error while parsing CSV file: %s\n" msgstr "virhe jäsennettäessä CSV-tiedostoa: %s\n" #. TRANSLATORS: --help output, mdb2rec synopsis. #. no-wrap #: utils/mdb2rec.c:97 #, c-format msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" msgstr "Käyttö: mdb2rec [VALITSIMET]... MDB_TIEDOSTO [TAULU]\n" #. TRANSLATORS: --help output, mdb2rec short description. #. no-wrap #: utils/mdb2rec.c:102 msgid "Convert an mdb file into a rec file.\n" msgstr "Muunna mdb-tiedosto rec-tiedostoksi.\n" #. TRANSLATORS: --help output, mdb2rec options. #. no-wrap #: utils/mdb2rec.c:108 msgid "" " -s, --system-tables include system tables.\n" " -e, --keep-empty-fields don't prune empty fields in the rec\n" " output.\n" " -l, --list-tables dump a list of the table names " "contained\n" " in the mdb file.\n" msgstr "" " -s, --system-tables sisällytä järjestelmätaulut.\n" " -e, --keep-empty-fields älä karsi tyhjiä kenttiä rec-\n" " tulosteesta\n" " -l, --list-tables vedosta mbd-tiedostoon sisältyvä " "taulu-\n" " nimien luettelo\n" #: utils/mdb2rec.c:230 utils/mdb2rec.c:288 #, c-format msgid "failed to normalise record type name %s\n" msgstr "tietuetyypin nimen %s normalisointi epäonnistui\n" #: utils/mdb2rec.c:236 utils/mdb2rec.c:245 #, c-format msgid "failed to normalise field name %s\n" msgstr "kenttänimen %s normalisointi epäonnistui\n" #: utils/mdb2rec.c:307 #, c-format msgid "failed to normalise the field name %s\n" msgstr "kenttänimen %s normalisointi epäonnistui\n" #: utils/mdb2rec.c:396 utils/recins.c:191 utils/recset.c:223 #, c-format msgid "invalid field name %s.\n" msgstr "virheellinen kenttänimi %s.\n" #: utils/mdb2rec.c:436 #, c-format msgid "could not open file %s\n" msgstr "tiedoston %s avaus epäonnistui\n" #: utils/mdb2rec.c:441 msgid "file does not appear to be an Access database\n" msgstr "tiedosto ei näytä olevan Access-tietokanta\n" #. TRANSLATORS: --help output, rec2csv synopsis. #. no-wrap #: utils/rec2csv.c:70 #, c-format msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" msgstr "Käyttö: rec2csv [VALITSIMET]... [REC_TIEDOSTO]\n" #. TRANSLATORS: --help output, rec2csv short description. #. no-wrap #: utils/rec2csv.c:75 msgid "Convert rec data into csv data.\n" msgstr "Muunna rec-tietoa csv-tiedoksi.\n" #. TRANSLATORS: --help output, rec2csv options. #. no-wrap #: utils/rec2csv.c:81 msgid "" " -d, --delim=char sets the deliminator (default ',')\n" " -t, --type=TYPE record set to convert to csv; if this " "parameter\n" " is omitted then the default record " "set is used\n" " -S, --sort=FIELDS sort the output by the specified " "fields.\n" msgstr "" " -d, --delim=merkki asettaa rajoittimen (oletus ’,’)\n" " -t, --type=TYYPPI csv-muotoon muunnettava tietuejoukko. " "Jos tämä parametri\n" " ohitetaan, käytetään " "oletustietuejoukkoa\n" " -S, --sort=KENTÄT lajittele tuloste määritellyn kentän " "mukaan.\n" #: utils/rec2csv.c:121 msgid "only one list of fields can be specified as a sorting criteria.\n" msgstr "vain yksi kenttien luettelo voidaan määritellä lajittelukriteerinä.\n" #: utils/rec2csv.c:126 msgid "invalid field name list in -S.\n" msgstr "virheellinen kenttänimiluettelo valitsimelle -S.\n" #: utils/rec2csv.c:130 utils/recsel.c:221 utils/recsel.c:245 msgid "internal error creating fex.\n" msgstr "sisäinen virhe luotaessa kohdetta fex.\n" #. TRANSLATORS: --help output, recdel synopsis. #. no-wrap #: utils/recdel.c:78 #, c-format msgid "" "Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [FILE]\n" msgstr "" "Käyttö: recdel [VALITSIMET]... [-t TYYPPI] [-n NUMERO | -e TIETUE_LAUSEKE | -" "q MERKKIJONO | -m NUMERO] [TIEDOSTO]\n" #. TRANSLATORS: --help output, recdel short description. #. no-wrap #: utils/recdel.c:83 msgid "Remove (or comment out) records from a rec file.\n" msgstr "Poista (tai muuta kommenteiksi) rec-tiedoston tietueita.\n" #. TRANSLATORS: --help output, recdel arguments. #. no-wrap #: utils/recdel.c:90 msgid "" " -c, --comment comment out the matching records " "instead of\n" " deleting them.\n" " --force delete even in potentially dangerous " "situations,\n" " and if the deletion is violating " "record restrictions.\n" " --no-external don't use external descriptors.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -c, --comment muuta täsmäävät tietueet kommenteiksi " "sen sijaan että\n" " ne poistettaisiin.\n" " --force poista myös potentiaalisesti " "vaarallisissa tilanteissa, ja\n" " jos poistaminen on ristiriidassa " "tietuerajoitusten kanssa.\n" " --no-external älä käytä ulkoisia selosteita.\n" " --verbose anna yksityiskohtainen ilmoitus, jos " "integriteetti-\n" " tarkistus epäonnistuu.\n" #. TRANSLATORS: --help output, notes on recdel. #. no-wrap #. TRANSLATORS: --help output, notes on recfix. #. no-wrap #. TRANSLATORS: --help output, notes on recins. #. no-wrap #: utils/recdel.c:108 utils/recfix.c:149 utils/recins.c:138 msgid "" "If no FILE is specified then the command acts like a filter, getting\n" "the data from standard input and writing the result to standard output.\n" msgstr "" "Jos TIEDOSTOa ei ole määritelty, silloin komento toimii kuin suodatin " "hakien\n" "tietoja vakiosyötteestä ja kirjoittaen tuloksen vakiotulosteeseen.\n" #: utils/recdel.c:123 #, c-format msgid "no records of type %s found.\n" msgstr "%s-tyyppisiä tietueita ei löytynyt.\n" #: utils/recdel.c:196 #, c-format msgid "ignoring a request to delete all records of type %s.\n" msgstr "ohitetaan pyyntö poistaa kaikki %s-tyyppiset tietueet.\n" #: utils/recdel.c:198 msgid "use --force if you really want to proceed, or use either -n or -e.\n" msgstr "" "käytä valitsinta --force jos haluat todella jatkaa, tai käytä joko " "valitsinta -n tai -e.\n" #: utils/recdel.c:206 msgid "invalid selection expression.\n" msgstr "virheellinen valintalauseke.\n" #: utils/recdel.c:241 utils/recfix.c:344 utils/recins.c:361 utils/recset.c:312 #, c-format msgid "file %s is not writable.\n" msgstr "tiedosto %s on kirjoitussuojattu.\n" #. TRANSLATORS: --help output, recfix synopsis. #. no-wrap #: utils/recfix.c:99 #, c-format msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" msgstr "" "Käyttö: recfix [VALITSIN]... [TOIMINTO] [TOIMINTO_VALITSIN]... [TIEDOSTO]\n" #. TRANSLATORS: --help output, recfix short description. #. no-wrap #: utils/recfix.c:104 msgid "Check and fix rec files.\n" msgstr "Tarkista ja korjaa rec-tiedostot.\n" #. TRANSLATORS: --help output, recfix global arguments. #. no-wrap #: utils/recfix.c:111 msgid "" " --no-external don't use external descriptors.\n" " --force force the requested operation.\n" msgstr "" " --no-external älä käytä ulkoisia kuvaajia.\n" " --force poista jopa potentiaalisesti " "vaarallisissa tilanteissa.\n" #. TRANSLATORS: --help output, recfix operations. #. no-wrap #: utils/recfix.c:121 msgid "" "Operations:\n" " --check check integrity of the specified " "file. Default.\n" " --sort sort the records in the specified " "file.\n" " --auto insert auto-generated fields in " "records missing them.\n" msgstr "" "Toiminnot:\n" " --check tarkista määritellyn tiedosto " "integriteetti. Oletus.\n" " --sort lajittele tietueet määritellyssä " "tiedostossa.\n" " --auto lisää automaattisesti tuotetut kentät " "tietueisiin, joista ne puuttuvat.\n" #. TRANSLATORS: --help output, recfix operations related with encryption. #. no-wrap #: utils/recfix.c:131 msgid "" " --encrypt encrypt confidential fields in the " "specified file.\n" " --decrypt decrypt confidential fields in the " "specified file.\n" msgstr "" " --encrypt salaa luottamukselliset kentät " "määritellyssä tiedostossa.\n" " --decrypt pura luottamuksellisten kenttien " "salaus määritellyssä tiedostossa.\n" #. TRANSLATORS: --help output, recfix encryption and decryption #. options. #. no-wrap #: utils/recfix.c:140 msgid "" "De/Encryption options:\n" " -s, --password=PASSWORD encrypt/decrypt with this password.\n" msgstr "" "Salauksen purku-/salausvalitsimet:\n" " -s, --password=SALASANA salaa/pura salaus tällä salasanalla.\n" #: utils/recfix.c:184 msgid "--password|-s must be used as an operation argument.\n" msgstr "--password|-s on käytettävä toiminta-argumentteina.\n" #: utils/recfix.c:188 msgid "the specified operation does not require a password.\n" msgstr "määritelty toiminto ei vaadi salasanaa.\n" #: utils/recfix.c:191 msgid "please specify just one password.\n" msgstr "määritä vain yksi salasana.\n" #: utils/recfix.c:198 utils/recfix.c:204 utils/recfix.c:210 utils/recfix.c:217 #: utils/recfix.c:223 msgid "please specify just one operation.\n" msgstr "määritä vain yksi toiminto.\n" #: utils/recfix.c:304 utils/recfix.c:326 utils/recfix.c:365 utils/recfix.c:435 #, fuzzy, c-format msgid "recfix: error: cannot read file %s\n" msgstr "virhe: tiedoston %s lukeminen epäonnistui\n" #: utils/recfix.c:399 msgid "the database contains already encrypted fields\n" msgstr "tietokanta sisältää jo salattuja kenttiä\n" #: utils/recfix.c:400 msgid "please use --force or --decrypt\n" msgstr "käytä valitsimia --force tai --decrypt\n" #: utils/recfix.c:499 msgid "unknown operation in recfix: please report this as a bug.\n" msgstr "tuntematon toiminto kohteessa recfix: ilmoita tästä viasta.\n" #. TRANSLATORS: --help output, recfmt synopsis. #. no-wrap #: utils/recfmt.c:64 #, c-format msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" msgstr "Käyttö: recfmt [VALITSIN]... [MALLINNE]\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:69 msgid "Apply a template to records read from standard input.\n" msgstr "Aseta mallinne tietuisiin, jotka on luettu vakiosyötteestä.\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:75 msgid "" " -f, --file=FILENAME read the template to apply from a " "file.\n" msgstr "" " -f, --file=TIEDOSTONIMI lue mallinne, joka haettiin " "tiedostosta.\n" #: utils/recfmt.c:107 #, c-format msgid "can't open file %s for reading.\n" msgstr "tiedoston %s avaus lukemista varten epäonnistui.\n" #: utils/recfmt.c:120 msgid "don't specify a template in the command line and -f at the same time.\n" msgstr "" "älä määritä samalla kertaa sekä mallinnetta komentorivillä että valitsinta -" "f.\n" #: utils/recfmt.c:142 msgid "invalid expression in a template slot.\n" msgstr "virheellinen lauseke mallinnevälissä.\n" #: utils/recfmt.c:146 msgid "error evaluating expression in a template slot.\n" msgstr "virhe arvioitaessa lauseketta mallinnevälissä.\n" #: utils/recfmt.c:178 msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" msgstr "" "recfmt_apply_template: virhe käännettäessä säännöllistä lauseketta. Ilmoita " "tästä.\n" #. TRANSLATORS: --help output, recinf synopsis. #. no-wrap #: utils/recinf.c:77 #, c-format msgid "Usage: recinf [OPTION]... [FILE]...\n" msgstr "Käyttö: recinf [VALITSIN]... [TIEDOSTO]...\n" #. TRANSLATORS: --help output, recinf short description. #. no-wrap #: utils/recinf.c:82 msgid "Print information about the types of records stored in the input.\n" msgstr "Tulosta syötteeseen tallennettujen tietuiden tyypit.\n" #. TRANSLATORS: --help output, recinf arguments. #. no-wrap #: utils/recinf.c:89 msgid "" " -t, --type=RECORD_TYPE print information on the records having " "the\n" " specified type.\n" " -d, --descriptor include the full record descriptors.\n" " -n, --names-only output just the names of the record files\n" " found in the input.\n" msgstr "" " -t, --type=TIETUE_TYYPPI tulosta tietoja määritellyn tyyppisistä\n" " tietueista.\n" " -d, --descriptor sisällytä täydet tietueselosteet.\n" " -n, --names-only tulosta vain syöteestä löydettyjen " "tietue-\n" " tiedostojen nimet.\n" #. TRANSLATORS: --help output, recinf special options. #. no-wrap #: utils/recinf.c:102 msgid "" "Special options:\n" " -S, --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Erikoisvalitsimet:\n" " -S, --print-sexps tulosta tietoja sexps-muodossa eikä " "rec-muodossa.\n" #: utils/recinf.c:234 #, c-format msgid "error: cannot read file %s\n" msgstr "virhe: tiedoston %s lukeminen epäonnistui\n" #. TRANSLATORS: --help output, recins synopsis. #. no-wrap #: utils/recins.c:100 #, c-format msgid "" "Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" msgstr "" "Käyttö: recins [VALITSIN]... [-t TYYPPI] [-n NUMERO | -e TIETUE_LAUSEKE | -q " "MERKKIJONO | -m NUMERO] [(-f NIMI -v MERKKIJONO]|[-r RECDATA)]... " "[TIEDOSTO]\n" #. TRANSLATORS: --help output, recins short description. #. no-wrap #: utils/recins.c:105 msgid "Insert new records in a rec database.\n" msgstr "Lisää uusia tietueita rec-tietokantaan.\n" #. TRANSLATORS: --help output, recins arguments. #. no-wrap #: utils/recins.c:111 msgid "" " -f, --field=STR field name; should be followed by a -" "v.\n" " -v, --value=STR field value; should be preceded by an -" "f.\n" " -r, --record=STR record that will be inserted in the " "file.\n" " --force insert the record even if it is " "violating\n" " record restrictions.\n" " --no-external don't use external descriptors.\n" " --no-auto don't insert auto generated fields.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -f, --field=MERKKIJONO kenttänimi. Pitäisi olla valitsimen -" "v jäljessä.\n" " -v, --value=MERKKIJONO kenttänimi. Pitäisi edeltää " "valitsinta -f.\n" " -r, --record=MERKKIJONO tietue, joka lisätään tiedostoon.\n" " --force lisää tietue, vaikka se on " "ristiriidassa tietue-\n" " rajoitusten kanssa.\n" " --no-external älä käytä ulkoisia selosteita.\n" " --no-auto älä lisää automaattisesti tuotettuja " "kenttiä.\n" " --verbose anna yksityiskohtainen ilmoitus, jos " "integriteetti-\n" " tarkistus epäonnistuu.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recins.c:125 msgid "" " -s, --password=STR encrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=MERKKIJONO salaa luottamukselliset kentän " "annetulla salasanalla.\n" #: utils/recins.c:179 msgid "a -f should be followed by a -v\n" msgstr "valitsimen -f pitäisi seurata valitsinta -v\n" #: utils/recins.c:198 msgid "a -v should be preceded by a -f\n" msgstr "valitsimen -v pitäisi edeltää valitsinta -f\n" #: utils/recins.c:214 utils/recsel.c:204 msgid "more than one password was specified\n" msgstr "on määritelty useampia kuin yksi salasana\n" #: utils/recins.c:224 msgid "error while parsing the record provided by -r\n" msgstr "virhe jäsennettäessä valitsimen -r tarjoamaa tietuetta\n" #: utils/recins.c:256 #, c-format msgid "please provide a value for the field %s\n" msgstr "tarjoa arvo kentälle %s\n" #. TRANSLATORS: --help output, recsel synopsis. #. no-wrap #: utils/recsel.c:107 #, c-format msgid "" "Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " "| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" msgstr "" "Käyttö: recsel [VALITSIN]... [-t TYYPPI] [-j KENTTÄ] [-n INDEKSIT | -e " "TIETUE_LAUSEKE | -q MERKKIJONO | -m NUMERO] [-c | (-p|-P) KENTTÄ_LAUSEKE] " "[TIEDOSTO]...\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:112 msgid "Select and print rec data.\n" msgstr "Valitse ja tulosta rec-tietoja.\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:118 msgid "" " -d, --include-descriptors print record descriptors along with " "the matched\n" " records.\n" " -C, --collapse do not section the result in records " "with newlines.\n" " -S, --sort=FIELD,... sort the output by the specified " "fields.\n" " -G, --group-by=FIELD,... group records by the specified " "fields.\n" " -U, --uniq remove duplicated fields in the output " "records.\n" msgstr "" " -d, --include-descriptors tulosta tietueselosteet täsmäävistä " "tietueista.\n" " -C, --collapse älä jaa tulosta tietueissa lohkoihin " "rivinvaihdoilla.\n" " -S, --sort=KENTTÄ lajittele tuloste määritellyn kentän " "mukaan.\n" " -G, --group-by=KENTTÄ,... määriteltyjen kenttien ryhmätietueet.\n" " -U, --uniq poista kaksoiskappalekentät " "tulostetietueista.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recsel.c:130 msgid "" " -s, --password=STR decrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=MERKKIJONO pura luottamuksellisten kenttien " "salaus annetulla salasanalla.\n" #: utils/recsel.c:139 msgid "" " -j, --join=FIELD perform an inner join using the " "specified field.\n" msgstr "" " -j, --join=FIELD suorita sisäinen liitos käyttäen " "määriteltyä kenttää.\n" #. TRANSLATORS: --help output, recsel output options. #. no-wrap #: utils/recsel.c:146 msgid "" "Output options:\n" " -p, --print=FIELDS comma-separated list of fields to " "print for each\n" " matching record.\n" " -P, --print-values=FIELDS as -p, but print only the values of " "the selected\n" " fields.\n" " -R, --print-row=FIELDS as -P, but separate the values with " "spaces instead\n" " of newlines.\n" " -c, --count print a count of the matching records " "instead of\n" " the records themselves.\n" msgstr "" "Tulostusvalitsimet:\n" " -p, --print=KENTÄT pilkulla eroteltu kenttien luettelo " "jokaiselle\n" " täsmäävälle tietueelle.\n" " -P, --print-values=KENTÄT sama kuin -p, mutta tulostaa vain " "valittujen\n" " kenttien arvot.\n" " -R, --print-row=KENTÄT sama kuin -P, mutta tulostettavat " "arvot erotellaan\n" " välilyönneillä eikä " "rivinvaihdoilla.\n" " -c, --count tarjoa täsmäävien tietueiden lukumäärä " "eikä itse\n" " tietueita.\n" #. TRANSLATORS: --help output, recsel special options. #. no-wrap #: utils/recsel.c:160 msgid "" "Special options:\n" " --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Erikoisvalitsimet:\n" " --print-sexps tulosta tietoja sexps-muodossa eikä " "rec-muodossa.\n" #: utils/recsel.c:212 msgid "only one field list can be specified as a sorting criteria.\n" msgstr "vain yksi kenttäluettelo voidaan määritellä lajittelukriteerinä.\n" #: utils/recsel.c:217 msgid "invalid field names in -S.\n" msgstr "virheelliset kenttänimet valitsimelle -S.\n" #: utils/recsel.c:226 msgid "only one field can be specified as join criteria.\n" msgstr "vain yksi kenttä voidaan määritellä liitoskriteerinä.\n" #: utils/recsel.c:229 msgid "please specify a correct field name to -j|--join.\n" msgstr "määritä oikea kenttänimi valitsimien -j|--join kanssa.\n" #: utils/recsel.c:236 msgid "only one field list can be specified as a grouping criteria.\n" msgstr "vain yksi kenttäluettelo voidaan määritellä lajittelukriteerinä.\n" #: utils/recsel.c:241 msgid "invalid field names in -G.\n" msgstr "virheellinen kenttänimi valitsimelle -G.\n" #: utils/recsel.c:255 msgid "cannot specify -[pPR] and also -c.\n" msgstr "ei voida määritellä sekä valitsimia -[pPR] että myös valitsinta -c.\n" #: utils/recsel.c:266 #, c-format msgid "invalid list of fields in -%c\n" msgstr "virheellinen kenttien luettelo kohteessa -%c\n" #: utils/recsel.c:272 msgid "internal error creating the field expression.\n" msgstr "sisäinen virhe luotaessa kenttälauseketta.\n" #: utils/recsel.c:284 #, c-format msgid "invalid aggregate function '%s'\n" msgstr "virheellinen ryhmitysfunktio ’%s’\n" #: utils/recsel.c:296 msgid "cannot specify -c and also -p.\n" msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" #: utils/recsel.c:309 msgid "joins can only be used when a named record set is selected.\n" msgstr "" "yhteenliittymiä voidaan käyttää vain kun valitaan nimettyjä tietuejoukkoja.\n" #: utils/recsel.c:363 msgid "several record types found. Please use -t to specify one.\n" msgstr "" "löydettiin useita tietuetyyppejä. Käytä valitsinta -t määrittämään yksi.\n" #. TRANSLATORS: --help output, recset synopsis. #. no-wrap #: utils/recset.c:99 #, c-format msgid "Usage: recset [OPTION]... [FILE]...\n" msgstr "Käyttö: recset [VALITSIN]... [TIEDOSTO]...\n" #. TRANSLATORS: --help output, recset short description. #. no-wrap #: utils/recset.c:104 msgid "Alter or delete fields in records.\n" msgstr "Muuta tai poista kentät tietueissa.\n" #. TRANSLATORS: --help output, recset options. #. no-wrap #: utils/recset.c:110 msgid "" " --no-external don't use external descriptors.\n" " --force alter the records even if violating " "record\n" " restrictions.\n" msgstr "" " --no-external älä käytä ulkoisia selosteita.\n" " --force muuta tietueita vaikka se on " "ristiriidassa tietue-\n" " rajoitteiden kanssa.\n" #. TRANSLATORS: --help output, recset field selection options. #. no-wrap #: utils/recset.c:123 msgid "" "Field selection options:\n" " -f, --fields=FIELDS comma-separated list of field names " "with optional\n" " subscripts.\n" msgstr "" "Kenttien valintavalitsimet:\n" " -f, --fields=KENTÄT pilkulla eroteltu kenttänimien " "luettelo valinnaisilla\n" " alaindekseillä.\n" #. TRANSLATORS: --help output, recset actions. #. no-wrap #: utils/recset.c:131 msgid "" "Actions:\n" " -s, --set=VALUE change the value of the selected " "fields.\n" " -a, --add=VALUE add the selected fields with the given " "value.\n" " -S, --set-add=VALUE change the value of the selected " "fields. If they don't\n" " exist then add a new field with that " "value.\n" " -r, --rename=NAME rename the selected fields to a given " "name. If an entire\n" " record set is selected then the " "field is renamed in the\n" " record descriptor as well.\n" " -d, --delete delete the selected fields.\n" " -c, --comment comment out the selected fields.\n" msgstr "" "Toimet:\n" " -s, --set=ARVO muuta valittujen kenttien arvoa.\n" " -a, --add=ARVO lisää valitut kentät annetulla " "arvolla.\n" " -S, --set-add=VALUE muuta valittujen kenttien arvo. Jos " "niitä ei ole\n" " olemassa, lisää uusi kenttä tuolla " "arvolla.\n" " -r, --rename=NIMI nimeä uudelleen valitut kentät " "annetulla nimellä. Jos koko\n" " tietuejoukko on valittu niin silloin " "kenttä nimetään\n" " uudelleen myös tietueselosteessa.\n" " -d, --delete poista valitut kentät.\n" " -c, --comment muuta valitut kentät kommenteiksi.\n" #: utils/recset.c:154 msgid "please specify some field with -f.\n" msgstr "määritä joku kenttä valitsimen -f kanssa.\n" #: utils/recset.c:159 msgid "please specify just one action.\n" msgstr "määritä vain yksi toiminto.\n" #: utils/recset.c:193 msgid "invalid field expression in -f.\n" msgstr "virheellinen kenttälauseke valitsimessa -f.\n" #: utils/recset.c:199 msgid "creating the field expression.\n" msgstr "luodaan kenttälauseke.\n" #: utils/recset.c:214 msgid "" "the rename operation requires just one field with an optional subscript.\n" msgstr "" "uudelleennimeämistoiminto vaatii vain yhden kentän valinnaisella " "alaindeksillä.\n" #: utils/recutl.c:123 #, c-format msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" msgstr "%s kotisivu: <http://www.gnu.org/software/recutils/>\n" #: utils/recutl.c:126 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" "Yleinen opaste GNU-ohjelmistojen käytöstä: <http://www.gnu.org/gethelp/>\n" #. TRANSLATORS: --help output, common arguments. #. no-wrap #: utils/recutl.c:135 msgid "" " --help print a help message and exit.\n" " --version show version and exit.\n" msgstr "" " --help tulosta opasteviesti ja poistu.\n" " --version näytä versio ja poistu.\n" #. TRANSLATORS: --help output, record selection arguments #. no-wrap #: utils/recutl.c:146 msgid "" "Record selection options:\n" " -i, --case-insensitive make strings case-insensitive in " "selection\n" " expressions.\n" " -t, --type=TYPE operate on records of the specified " "type only.\n" " -e, --expression=RECORD_EXPR selection expression.\n" " -q, --quick=STR select records with fields containing " "a string.\n" " -n, --number=NUM,... select specific records by position, " "with ranges.\n" " -m, --random=NUM select a given number of random " "records.\n" msgstr "" "Tietuevalintavalitsimet:\n" " -i, --case-insensitive tee merkkijonoista kirjainkoosta " "riippuvia valinta-\n" " lausekkeissa.\n" " -t, --type=TYYPPI tulosta vain määritellyntyyppiset " "tietueet.\n" " -e, --expression=LAUSEKE valintalauseke.\n" " -q, --quick=MERKKIJONO valitse tietueet, joiden kentissä on " "merkkijono.\n" " -n, --number=NUMERO valitse määritelty tietue.\n" " -m, --random=NUMERO valitse annettu satunnaistietuemäärä.\n" #: utils/recutl.c:171 #, c-format msgid "" "Copyright (C) %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright © %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL versio 3 tai myöhäisempi <http://gnu.org/licenses/" "gpl.html>.\n" "Tämä on vapaa ohjelmisto: voi muuttaa ja jakaa sitä vapaasti edelleen.\n" "Ohjelmalla EI OLE TAKUUTA siinä laajuudessa, minkä laki sallii.\n" #: utils/recutl.c:177 msgid "" "\n" "Written by Jose E. Marchesi." msgstr "" "\n" "Tekijä: Jose E. Marchesi." #: utils/recutl.c:189 utils/recutl.c:209 msgid ": error: " msgstr ": virhe: " #: utils/recutl.c:221 msgid ": warning: " msgstr ": varoitus: " #: utils/recutl.c:246 #, c-format msgid "duplicated record set '%s' from %s.\n" msgstr "kaksoiskappale tietuejoukko ’%s’ kohteesta %s.\n" #: utils/recutl.c:401 msgid "cannot create a unique name.\n" msgstr "uniikin nimen luominen epäonnistui.\n" #: utils/recutl.c:421 #, c-format msgid "renaming file %s to %s\n" msgstr "nimetään tiedosto %s uudelleen nimellä %s\n" #: utils/recutl.c:463 msgid "operation aborted due to integrity failures.\n" msgstr "toiminta keskeytettiin integriteettivirheiden vuoksi.\n" #: utils/recutl.c:464 msgid "use --verbose to get a detailed report.\n" msgstr "käytä valitsinta --verbose samaan yksityiskohtainen ilmoitus.\n" #: utils/recutl.c:471 msgid "use --force to skip the integrity check.\n" msgstr "käytä valitsinta --force ohittamaan integriteettitarkistus.\n" #: utils/recutl.c:529 msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" msgstr "" "sisäinen virhe: recutl_index_list_parse: virhe käännettäessä säännöllistä " "lauseketta.\n" #: utils/recutl.c:596 msgid "Password: " msgstr "Salasana: " #: utils/recutl.c:602 msgid "Password again: " msgstr "Salasana uudelleen: " #: utils/recutl.c:607 msgid "the provided passwords don't match.\n" msgstr "annetut salasanat eivät täsmää.\n" #: utils/recutl.h:84 utils/recutl.h:131 utils/recutl.h:133 #, fuzzy msgid "cannot specify -e and also -n\n" msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" #: utils/recutl.h:86 #, fuzzy msgid "cannot specify -e and also -q\n" msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" #: utils/recutl.h:94 #, fuzzy msgid "invalid selection expression\n" msgstr "virheellinen valintalauseke.\n" #: utils/recutl.h:100 #, fuzzy msgid "cannot specify -n and also -e\n" msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" #: utils/recutl.h:102 #, fuzzy msgid "cannot specify -n and also -q\n" msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" #: utils/recutl.h:106 #, fuzzy msgid "invalid list of indexes in -n\n" msgstr "virheellinen kenttien luettelo kohteessa -%c\n" #: utils/recutl.h:111 #, fuzzy msgid "cannot specify -m and also -e\n" msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" #: utils/recutl.h:113 #, fuzzy msgid "cannot specify -m and also -q\n" msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" #: utils/recutl.h:115 #, fuzzy msgid "cannot specify -m and also -n\n" msgstr "ei voida määritellä valitsinta -c ja myös valitsinta -p.\n" #~ msgid "_open_osfhandle failed" #~ msgstr "_open_osfhandle epäonnistui" #~ msgid "cannot restore fd %d: dup2 failed" #~ msgstr "ei voi palauttaa fd %d: dup2 epäonnistui" #, fuzzy #~ msgid "" #~ "\n" #~ "Report bugs to: %s\n" #~ msgstr "" #~ "Ilmoita virheistä (englanniksi) osoitteeseen: %s\n" #~ "Ilmoita käännösvirheistä osoitteeseen <translation-team-fi@lists." #~ "sourceforge.net>\n" #, fuzzy #~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n" #~ msgstr "%s kotisivu: <http://www.gnu.org/software/recutils/>\n" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: valitsin ’--%s’ ei salli argumenttia\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: tunnistamaton valitsin ’--%s’\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: valitsin ’-W %s’ ei salli argumenttia\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: valitsin ’-W %s’ vaatii argumentin\n" #~ msgid "" #~ "%s:%s: warning: type %s collides with referred type %s in the rset %s.\n" #~ msgstr "" #~ "%s:%s: varoitus: tyyppi %s on ristiriidassa viitetyypin %s kanssa " #~ "kohteessa rset %s.\n" #~ msgid "%s:%s: error: value for %s shall be a field name.\n" #~ msgstr "%s:%s: virhe: arvon kohteelle %s pitää olla kenttänimi.\n" #~ msgid "reached maximum number of fields: %d\n" #~ msgstr "saavutettiin kenttien enimmäismäärä: %d\n" #~ msgid "not enough headers" #~ msgstr "otsakkeita ei ole tarpeeksi" #~ msgid "out of memory" #~ msgstr "muisti loppui" #~ msgid "evaluating the selection expression.\n" #~ msgstr "arvioidaan valintalauseketta.\n" #~ msgid "reading file %s" #~ msgstr "luetaan tiedosto %s" #~ msgid "internal error: rec_resolver_check: error compiling regexp.\n" #~ msgstr "" #~ "sisäinen virhe: rec_resolver_check: virhe käännettäessä säännöllistä " #~ "lauseketta.\n" #~ msgid "internal error: rec_field_name_part_str_p: error compiling regexp.\n" #~ msgstr "" #~ "sisäinen virhe: rec_field_name_part_str_p: virhe käännettäessä " #~ "säännöllistä lauseketta.\n" #~ msgid "internal error: rec_int_rec_type_p: error compiling regexp.\n" #~ msgstr "" #~ "sisäinen virhe: rec_int_rec_type_p: virhe käännettäessä säännöllistä " #~ "lauseketta.\n" #~ msgid "internal error: rec-types: error compiling regexp.\n" #~ msgstr "" #~ "sisäinen virhe: rec-types: virhe käännettäessä säännöllistä lauseketta.\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " csv2rec contacts.csv > contacts.rec\n" #~ " cat contacts.csv | csv2rec > contacts.rec\n" #~ msgstr "" #~ "Esimerkit:\n" #~ "\n" #~ " csv2rec contacts.csv > contacts.rec\n" #~ " cat contacts.csv | csv2rec > contacts.rec\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " mdb2rec database.mdb > database.rec\n" #~ " mdb2rec database.mdb Customers > customers.rec\n" #~ msgstr "" #~ "Esimerkit:\n" #~ "\n" #~ " mdb2rec database.mdb > database.rec\n" #~ " mdb2rec database.mdb Customers > customers.rec\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " rec2csv contacts.rec > contacts.csv\n" #~ " cat contacts.rec | rec2csv -t Contact > contacts.csv\n" #~ msgstr "" #~ "Esimerkit:\n" #~ "\n" #~ " rec2csv contacts.rec > contacts.csv\n" #~ " cat contacts.rec | rec2csv -t Contact > contacts.csv\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " recdel -n 10 contacts.rec\n" #~ " cat hackers.rec | recdel -e \"Email[0] = 'foo@bar.com'\" > other." #~ "rec\n" #~ msgstr "" #~ "Esimerkit:\n" #~ "\n" #~ " recdel -n 10 contacts.rec\n" #~ " cat hackers.rec | recdel -e \"Email[0] = 'foo@bar.com'\" > other." #~ "rec\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " cat employees.rec | recfmt 'Dear {{Name}}, you are fired.'\n" #~ " cat employees.rec | recfmt -f fire-letter.tmpl\n" #~ msgstr "" #~ "Esimerkit:\n" #~ "\n" #~ " cat employees.rec | recfmt 'Rakas {{Nimi}}, olet erotettu.'\n" #~ " cat employees.rec | recfmt -f fire-letter.tmpl\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " recinf mydata.rec\n" #~ " recinf -d mydata.rec moredata.rec\n" #~ " recinf -t Task TODO\n" #~ msgstr "" #~ "Esimerkit:\n" #~ "\n" #~ " recinf mydata.rec\n" #~ " recinf -d mydata.rec moredata.rec\n" #~ " recinf -t Task TODO\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " recins -f Name -v \"Mr Foo\" -f Email -v foo@foo.org contacts." #~ "rec\n" #~ " cat hackers.rec | recins -t Hacker -f Email -v foo@foo.org > " #~ "other.rec\n" #~ msgstr "" #~ "Esimerkit:\n" #~ "\n" #~ " recins -f Name -v \"Mr Foo\" -f Email -v foo@foo.org contacts." #~ "rec\n" #~ " cat hackers.rec | recins -t Hacker -f Email -v foo@foo.org > " #~ "other.rec\n" #~ msgid "" #~ "the record set contains confidential fields but no password was provided\n" #~ msgstr "" #~ "tietuejoukko sisältää luottamuksellisia kenttiä, mutta salasanaa ei " #~ "tarjottu\n" #~ msgid "the resulting record will have those fields unencrypted!\n" #~ msgstr "tuloksena olevalla tietueella on nuo kentät salaamattomia!\n" # Heittomerkit jätetty muuttamatta suomalaistyyppiseksi, koska käskyparametreissa heittomerkin tyyppi voi olla kriittinen. #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " recsel -t Friend -e \"Name ~ 'Smith'\" friends.rec\n" #~ " recsel -C -e \"#Email && Wiki = 'no'\" -P Email[0] gnupdf-hackers." #~ "rec\n" #~ msgstr "" #~ "Esimerkit:\n" #~ "\n" #~ " recsel -t Friend -e \"Name ~ 'Smith'\" friends.rec\n" #~ " recsel -C -e \"#Email && Wiki = 'no'\" -P Email[0] gnupdf-hackers." #~ "rec\n" # Heittomerkit jätetty muuttamatta suomalaistyyppiseksi, koska käskyparametreissa heittomerkin tyyppi voi olla kriittinen. #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " recset -f TmpName -d data.rec\n" #~ " recset -f Email[1] -s invalid@email.com friends.rec\n" #~ " recset -e \"Name ~ 'Smith'\" -f Email -a new@email.com friends." #~ "rec\n" #~ " recset -f Email[1] -r AltEmail friends.rec\n" #~ msgstr "" #~ "Esimerkit:\n" #~ "\n" #~ " recset -f TmpName -d data.rec\n" #~ " recset -f Email[1] -s invalid@email.com friends.rec\n" #~ " recset -e \"Name ~ 'Smith'\" -f Email -a new@email.com friends." #~ "rec\n" #~ " recset -f Email[1] -r AltEmail friends.rec\n" #~ msgid " --no-external don't use external descriptors.\n" #~ msgstr " --no-external älä käytä ulkoisia selosteita.\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " recfix data.rec\n" #~ " recfix data1.rec data2.rec\n" #~ " cat data1.rec data2.rec | recfix\n" #~ msgstr "" #~ "Esimerkit:\n" #~ "\n" #~ " recfix data.rec\n" #~ " recfix data1.rec data2.rec\n" #~ " cat data1.rec data2.rec | recfix\n" #~ msgid "evaluating selection expression.\n" #~ msgstr "arvioidaan valintalauseketta.\n" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/en@quot.header����������������������������������������������������������������������0000644�0000000�0000000�00000002263�13253176007�013316� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/de.gmo������������������������������������������������������������������������������0000644�0000000�0000000�00000130322�14226577416�011635� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•�����0��� ��‘��������D�����L��„������L�����M��&���k��1���’�����Ä�� ���â��²�����‚���¶��Í���9��‹�����"���“�����¶�����Î�����è��"�������)��E��1!��Ó��w"��Ž��K$��N���Ú&��W���)'��[���'��[���Ý'��?��9(��M��y)�����Ç*��6���Û*�� ���+����� +��!���5+��H���W+��;��� +��@���Ü+��A���,�����_,��,���{,�����¨,��.���È,��'���÷,��(���-�����H-��2���h-��;���›-��2���×-��M��� .��S���X.��2���¬.��=���ß.��?���/��;���]/��V���™/��A���ð/��8���20��9���k0��%���¥0��)���Ë0��,���õ0��1���"1��7���T1��7���Œ1��1���Ä1��E���ö1��F���<2��F���ƒ2��4���Ê2��2���ÿ2��9���23��<���l3��U���©3��=���ÿ3��D���=4�����‚4�����„4�����4��5���¡4�� ���×4�� ���á4��ê��í4��#���Ø7��6���ü7�����38��%���M8�� ���s8�� ���”8��ë���µ8��a���¡9��¥���:��?���©:�����é:��&���w;�����ž;�����µ;�����Ò;�����î;��$���<�����+<�����=<�����X<�����i<�����r<�� ��‘<��L��Ÿ=�����ì?�����ü?�����@�� ���"@��#���-@��B���Q@��.��”@�����ÃB��1���ÞB�����C�����'C�����;C��f���WC��f���¾C�����%D�����-D�����GD��!���^D�����€D�����“D�����¨D�����ºD�����ÌD�� ���ëD��'���øD��-��� E��'���NE��X���vE��<���ÏE��%��� F��$���2F��z���WF��ƒ���ÒF��$���VG�����{G��;���’G��3���ÎG��/���H��+���2H��'���^H��#���†H�����ªH�����ÊH�����æH�����öH�� ���øH�� ���I�� ���:I�����[I�����yI��#���ŽI�����²I�����ÒI�����ñI�����J�����/J�����NJ�����mJ�����ŒJ�����«J�����ÃJ�����ãJ�����èJ�����ñJ��F���õJ��$���<K��0���aK��!���’K��.���´K�� ���ãK��>���ñK��/���0L�����`L��!���|L�� ���žL�����¿L��'���ÖL��*���þL�����)M�����GM��$���aM��&���†M�� ���­M��"���ÎM��(���ñM��&���N�����AN��.���[N�����ŠN�����N��%���®N�����ÔN��5���ÛN�����O�����$O�����5O��.���SO��A���‚O��`���ÄO��B���%P��A���hP��3���ªP��A���ÞP����� Q�����6Q�����MQ�����cQ�����zQ�����Q�� ���¦Q�� ���ÇQ�����ÕQ�����äQ��'���øQ�� ��� R�����AR��"���YR�����|R�����œR�����¸R�����ÔR�����åR�����S�����#S�����AS��<���`S�� ���S�����¨S�����¹S��%���ÊS�����ðS�����T�����,T�����3T��2���ET��=���xT��<���¶T��@���óT��-���4U�����bU�����qU�����‚U��(���šU��2���ÃU�� ���öU��#���V��"���;V��#���^V�� ���‚V�����£V��C���ÁV�����W�����W�����&W��;���AW�����}W�����—W��/���¦W��$���ÖW��I���ûW��5���EX�����{X��$���€X�����¥X�����¿X�����ÙX��:���éX��C���$Y��)���hY��(���’Y��+���»Y��+���çY��-���Z�� ���AZ��)���bZ��8���ŒZ��<���ÅZ��<���[��:���?[��F���z[��`���Á[�� ���"\�����.\����3\��"���J^��+���m^��=���™^��"���×^��"���ú^����_��†���4`��ß���»`��™���›a��%���5b�����[b�� ���tb��$���•b��&���ºb��u��áb����We��1��åf��Ë��i��S���ãk�����7l�����Ål�����Um��P��åm��e��6o�����œp��9���³p�����íp�����ýp��1���q��S���Nq��D���¢q��N���çq��H���6r�����r��.���œr��,���Ër��=���ør��/���6s��2���fs�����™s��?���¹s��<���ùs��6���6t��[���mt��a���Ét��;���+u��P���gu��L���¸u��D���v��W���Jv��<���¢v��A���ßv��D���!w��+���fw��%���’w��)���¸w��A���âw��G���$x��;���lx��<���¨x��C���åx��D���)y��D���ny��?���³y��0���óy��<���$z��=���az��g���Ÿz��:���{��D���B{�����‡{�����Š{�����¢{��<���¦{�� ���ã{�� ���î{����ú{��1���˜��M���Ê��%���€��,���>€��"���k€��"���Ž€��ò���±€��w���¤��«���‚��@���È‚��²��� ƒ��2���¼ƒ�����ïƒ��#���„�����,„�����G„��.���c„�����’„�����«„�����Ë„�� ���ß„��'���ì„��V��…��—��k†�����‰�����‰�����(‰�� ���:‰��)���E‰��H���o‰��î��¸‰�����§Œ��A���ÄŒ��!�����u���(��#���ž��m���Â��m���0Ž�����žŽ��$���¥Ž�����ÊŽ��.���êŽ����������0��&���I�����p��3���‡�����»��+���Û��3�����+���;��a���g��@���É��&��� ‘��(���1‘��ƒ���Z‘��‡���Þ‘��(���f’�����’��A���«’��7���í’��3���%“��/���Y“��+���‰“��'���µ“��#���Ý“�����”�����!”�����6”�����9”��#���V”��4���z”��-���¯”��#���Ý”��9���•��7���;•��7���s•��7���«•��7���ã•��7���–��7���S–��7���‹–��7���Ö��'���û–�����#—�����@—�� ���F—�����Q—��P���U—��#���¦—��=���Ê—��'���˜��8���0˜�����i˜��M���x˜��?���Ƙ��+���™��;���2™��%���n™�����”™��5���²™��1���è™��,���š�� ���Gš��*���hš��+���“š��/���¿š��/���ïš��5���›��-���U›�� ���ƒ›��-���¤›�����Ò›�����å›��)���ö›����� œ��C���'œ�����kœ�����œ��2���’œ��2���Åœ��U���øœ��e���N��]���´��\���ž��N���ož��\���¾ž�����Ÿ�����6Ÿ�����RŸ�����mŸ�����‰Ÿ�����¤Ÿ��#���¿Ÿ�����ãŸ�����öŸ�����  ��,���' �� ���T �����u ��&��� ��!���¶ �����Ø �����õ �����¡�����'¡�����D¡�����a¡�����~¡��]���œ¡�� ���ú¡�����¢�����¢��)���)¢��$���S¢��'���x¢����� ¢�����¥¢��?���¹¢��@���ù¢��?���:£��?���z£��7���º£�� ���ò£�����¤��#���'¤��/���K¤��<���{¤��$���¸¤��'���ݤ��%���¥��$���+¥��'���P¥��&���x¥��i���Ÿ¥����� ¦�����¦��%���0¦��B���V¦�����™¦�� ���³¦��6���Á¦��4���ø¦��I���-§��2���w§�����ª§��/���¯§�����ß§�����ù§�����¨��B���$¨��R���g¨��B���º¨��9���ý¨��5���7©��3���m©��5���¡©��-���ש��-���ª��F���3ª��H���zª��F���ê��<��� «��S���G«��^���›«�� ���ú«�����¬�����Ú���Œ���ý���n���W��������� ���y���œ���•���g���ë�����������€�����½�������ú�����������������F�������(���D��� ���ƒ�����������������/���ä�����������H������a���æ�����������Í���¶�������>������1�����w����������T���Q���ˆ���������������-���ã���†���`���M������������������� ��’�������ù�������Ó���j���þ���Ö���h���<���×����������i��� ����������·�����A���v���ž���Ä��� ��!���“���Ý���Y���å���È���¤���ß���O��������������������ò���G�������e���U����������������������¸���o���»�����������%���J���������Â�����������#���±���,�������������������Ü�������ö������&�������ç���¦���}���è���º������ ��� ��ð���é���������V��� �����������R���K���µ���°�������Ù�������[���Ÿ���|�������î����������Þ�����������É���u�������¿���:�������$�������û������Û������Ï�������\�������Ì���¥���������à���–����������¯����������³�������B���������������”���ü���3��������������x���7���L���*���������Š���Ñ�����~�������+�������‚������ô���_���Å�������k���Ã���´����������m�������â���P���À���¹���C���ó����������������������í���„���^�������ì���f�������l���¢�����������N���8�������¨���'�����¼�������š���]���¾���Ç���ñ���;���Õ���9���=���)���p��������������������� ��‰���©�������Æ������������� �����ª���õ���4���Î����������d���ø�������0���I�������t���Ô�������.���r�������—���?�����������"���§���‡���5���S����������›�������˜����������™���������Ø���Z���c���Ž���á������¡�����‘���¬�������«�����������÷�������‹�������²�����������Á������� ���®���6������ï������������������������2���ÿ����� �������X���Ë���Ð�����������������������Ê���­���b������z���£���ê���{���Ò���@���q�������s���…���E������ ¬��¼��Ð��ä��ø����(��D��X��l��€��¤��¸��Ü��ð������,��@��\��p��Œ�� ��´��È��ì�����$��8��¬�� ����������ÿÿÿÿ¬��������� ���ÿÿÿÿ<¬������������ÿÿÿÿQ¬�������������������ÿÿÿÿ…¬���������0���ÿÿÿÿŬ�������������������ÿÿÿÿë¬������������ÿÿÿÿ­������������ÿÿÿÿ ­���������/���ÿÿÿÿm­��������� ������� ������� ���ÿÿÿÿ¤­������������ÿÿÿÿ¼­��������� ������� ����������ÿÿÿÿÿ­������������ÿÿÿÿ®������������ÿÿÿÿ>®�� ����������ÿÿÿÿH®��������� ���ÿÿÿÿh®������������ÿÿÿÿ®����������������&���ÿÿÿÿº®���������9���ÿÿÿÿ¯��������� ������� ���ÿÿÿÿ1¯���������&���ÿÿÿÿe¯������������ÿÿÿÿ„¯��'�������/���ÿÿÿÿÚ¯��������� ������� ������� ���ÿÿÿÿ°�� ����������ÿÿÿÿ5°��������� ������� ����������ÿÿÿÿ|°������������ÿÿÿÿ¨°���������"���ÿÿÿÿ� Written by Jose E. Marchesi.� invalid day/month combination; � non-existing due to daylight-saving time; � normalized time: '%s' � numeric values overflow; � --encrypt encrypt confidential fields in the specified file. --decrypt decrypt confidential fields in the specified file. � --help print a help message and exit. --version show version and exit. � --no-external don't use external descriptors. --force alter the records even if violating record restrictions. � --no-external don't use external descriptors. --force force the requested operation. � adjusted Y M D: %s %02d %02d � possible reasons: � new date/time = '%s' � user provided time: '%s' � normalized Y M D: %s %02d %02d � -c, --comment comment out the matching records instead of deleting them. --force delete even in potentially dangerous situations, and if the deletion is violating record restrictions. --no-external don't use external descriptors. --verbose give a detailed report if the integrity check fails. � -d, --delim=char sets the deliminator (default ',') -t, --type=TYPE record set to convert to csv; if this parameter is omitted then the default record set is used -S, --sort=FIELDS sort the output by the specified fields. � -d, --include-descriptors print record descriptors along with the matched records. -C, --collapse do not section the result in records with newlines. -S, --sort=FIELD,... sort the output by the specified fields. -G, --group-by=FIELD,... group records by the specified fields. -U, --uniq remove duplicated fields in the output records. � -f, --field=STR field name; should be followed by a -v. -v, --value=STR field value; should be preceded by an -f. -r, --record=STR record that will be inserted in the file. --force insert the record even if it is violating record restrictions. --no-external don't use external descriptors. --no-auto don't insert auto generated fields. --verbose give a detailed report if the integrity check fails. � -f, --file=FILENAME read the template to apply from a file. � -j, --join=FIELD perform an inner join using the specified field. � -s, --password=STR decrypt confidential fields with the given password. � -s, --password=STR encrypt confidential fields with the given password. � -s, --system-tables include system tables. -e, --keep-empty-fields don't prune empty fields in the rec output. -l, --list-tables dump a list of the table names contained in the mdb file. � -t, --type=RECORD_TYPE print information on the records having the specified type. -d, --descriptor include the full record descriptors. -n, --names-only output just the names of the record files found in the input. �%s home page: <%s> �%s home page: <http://www.gnu.org/software/recutils/> �%s subprocess�%s subprocess failed�%s subprocess got fatal signal %d�%s: %lu: this line contains %lu fields, but %lu header fields were read �%s: error: the number of records of type %s should be %zd. �%s: error: too few records of type %s. Minimum allowed are %zd. �%s: error: too many records of type %s. Maximum allowed are %zd. �%s: invalid option -- '%c' �%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: unrecognized option '%s%s' �%s:%s: error: %%constraint[%d] violated in record �%s:%s: error: %s does not contain information for type %s. �%s:%s: error: %s does not contain valid rec data. �%s:%s: error: auto-incremented field %s should be of type int, range or date �%s:%s: error: auto-incremented field %s should be of type int, range, uuid or date �%s:%s: error: confidential field is not encrypted �%s:%s: error: could not fetch remote descriptor from url %s. �%s:%s: error: could not read external descriptor from file %s. �%s:%s: error: duplicated key value in field '%s' in record �%s:%s: error: expected a comma-separated list of fields before the type specification �%s:%s: error: expected a type name before the type specification �%s:%s: error: field '%s' not allowed in this record set �%s:%s: error: field '%s' should be unique in this record �%s:%s: error: invalid record type %s �%s:%s: error: invalid type specification �%s:%s: error: invalid typedef specification �%s:%s: error: key field '%s' not found in record �%s:%s: error: mandatory field '%s' not found in record �%s:%s: error: missing %%rec field in record descriptor �%s:%s: error: multiple key fields '%s' in record �%s:%s: error: only one %%key field is allowed in a record descriptor �%s:%s: error: only one %%size field is allowed in a record descriptor �%s:%s: error: only one %%sort field is allowed in a record descriptor �%s:%s: error: prohibited field '%s' found in record �%s:%s: error: the referred type %s does not exist �%s:%s: error: too many %%rec fields in record descriptor �%s:%s: error: value for %s should be a list of field names. �%s:%s: error: value for %s should be a number optionally preceded by >, <, >= or <=. �%s:%s: error: value for %s[%zd] is not a list of field names �%s:%s: error: value for %s[%zd] is not a valid selection expression �'�'@timespec' - always UTC�(C)�--password|-s must be used as an operation argument. �: error: �: warning: �Actions: -s, --set=VALUE change the value of the selected fields. -a, --add=VALUE add the selected fields with the given value. -S, --set-add=VALUE change the value of the selected fields. If they don't exist then add a new field with that value. -r, --rename=NAME rename the selected fields to a given name. If an entire record set is selected then the field is renamed in the record descriptor as well. -d, --delete delete the selected fields. -c, --comment comment out the selected fields. �Alter or delete fields in records. �Apply a template to records read from standard input. �Check and fix rec files. �Convert an mdb file into a rec file. �Convert csv data into rec data. �Convert rec data into csv data. �Copyright (C) %s Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �De/Encryption options: -s, --password=PASSWORD encrypt/decrypt with this password. �Field selection options: -f, --fields=FIELDS comma-separated list of field names with optional subscripts. �General help using GNU software: <http://www.gnu.org/gethelp/> �If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. �Insert new records in a rec database. �Invalid back reference�Invalid character class name�Invalid collation character�Invalid content of \{\}�Invalid preceding regular expression�Invalid range end�Invalid regular expression�Memory exhausted�No match�No previous regular expression�Operations: --check check integrity of the specified file. Default. --sort sort the records in the specified file. --auto insert auto-generated fields in records missing them. �Output options: -p, --print=FIELDS comma-separated list of fields to print for each matching record. -P, --print-values=FIELDS as -p, but print only the values of the selected fields. -R, --print-row=FIELDS as -P, but separate the values with spaces instead of newlines. -c, --count print a count of the matching records instead of the records themselves. �Packaged by %s �Packaged by %s (%s) �Password again: �Password: �Premature end of regular expression�Print information about the types of records stored in the input. �Record selection options: -i, --case-insensitive make strings case-insensitive in selection expressions. -t, --type=TYPE operate on records of the specified type only. -e, --expression=RECORD_EXPR selection expression. -q, --quick=STR select records with fields containing a string. -n, --number=NUM,... select specific records by position, with ranges. -m, --random=NUM select a given number of random records. �Regular expression too big�Remove (or comment out) records from a rec file. �Report %s bugs to: %s �Report bugs to: %s �Select and print rec data. �Special options: --print-sexps print the data in sexps instead of rec format. �Special options: -S, --print-sexps print the data in sexps instead of rec format. �Success�TZ="%s" environment value�TZ="%s" in date string�TZ="UTC0" environment value or -u�Trailing backslash�Unknown system error�Unmatched ( or \(�Unmatched ) or \)�Unmatched [, [^, [:, [., or [=�Unmatched \{�Usage: csv2rec [OPTIONS]... [CSV_FILE] �Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE] �Usage: rec2csv [OPTIONS]... [REC_FILE] �Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [FILE] �Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE] �Usage: recfmt [OPTION]... [TEMPLATE] �Usage: recinf [OPTION]... [FILE]... �Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE] �Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]... �Usage: recset [OPTION]... [FILE]... �Written by %s and %s. �Written by %s, %s, %s, %s, %s, %s, %s, %s, %s, and others. �Written by %s, %s, %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, and %s. �Written by %s, %s, %s, and %s. �Written by %s, %s, and %s. �Written by %s. �`�a -f should be followed by a -v �a -v should be preceded by a -f �can't open file %s for reading. �cannot create a unique name. �cannot read file %s �cannot specify -[pPR] and also -c. �cannot specify -c and also -p. �cannot specify -e and also -n �cannot specify -e and also -q �cannot specify -m and also -e �cannot specify -m and also -n �cannot specify -m and also -q �cannot specify -n and also -e �cannot specify -n and also -q �could not open file %s �creating the field expression. �date�datetime�day�don't specify a template in the command line and -f at the same time. �duplicated record set '%s' from %s. �error evaluating expression in a template slot. �error while parsing CSV file: %s �error while parsing the record provided by -r �error: %s:%d �error: adding relative date resulted in an invalid date: '%s' �error: adding relative time caused an overflow �error: cannot read file %s �error: initial year out of range �error: invalid date/time value: �error: parsing failed �error: parsing failed, stopped at '%s' �error: timezone %d caused time_t overflow �error: tzalloc ("%s") failed �error: unknown word '%s' �error: year, month, or day overflow �expected an integer between %d and %d.�failed to initialize csv parser �failed to normalise field name %s �failed to normalise record type name %s �failed to normalise the field name %s �file %s is not writable. �file does not appear to be an Access database �final: %s (UTC%s) �final: %s (UTC) �final: %s (unknown time zone offset) �hybrid�ignoring a request to delete all records of type %s. �incorrect timezone�input timezone: �internal error creating fex. �internal error creating the field expression. �internal error: REC_FEX_MAX_ELEMS exceeded. Please report this. �internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() in rec_type_new(). �internal error: rec_int_rec_extract_file: error compiling regexp. �internal error: rec_int_rec_extract_url: error compiling regexp. �internal error: rec_match: error compiling regexp. �internal error: recutl_index_list_parse: error compiling regexp. �invalid 'bool' value.�invalid 'field' value.�invalid 'line' value.�invalid 'range' value.�invalid 'real' value.�invalid 'uuid' value.�invalid aggregate function '%s' �invalid date.�invalid email.�invalid enum value.�invalid expression in a template slot. �invalid field expression in -f. �invalid field name %s. �invalid field name '%s' in header �invalid field name list in -S. �invalid field names in -G. �invalid field names in -S. �invalid integer.�invalid list of fields in -%c �invalid list of indexes in -n �invalid selection expression �invalid selection expression. �joins can only be used when a named record set is selected. �local_zone�memory exhausted�missing timezone�more than one password was specified �new start date: '%s' is '%s' �no records of type %s found. �number�number of seconds�only one field can be specified as join criteria. �only one field list can be specified as a grouping criteria. �only one field list can be specified as a sorting criteria. �only one list of fields can be specified as a sorting criteria. �operation aborted due to integrity failures. �out of memory �parsed %s part: �parsed date/time string�please provide a value for the field %s �please specify a correct field name to -j|--join. �please specify just one action. �please specify just one operation. �please specify just one password. �please specify some field with -f. �please use --force or --decrypt �preserving permissions for %s�recfmt_apply_template: error compiling regexp. Please report this. �relative�renaming file %s to %s �setting permissions for %s�several record types found. Please use -t to specify one. �starting date/time: '%s' �system default�the database contains already encrypted fields �the provided passwords don't match. �the rename operation requires just one field with an optional subscript. �the specified operation does not require a password. �time�timezone: TZ="%s" environment value �timezone: Universal Time �timezone: system default �today/this/now �unknown operation in recfix: please report this as a bug. �use --force if you really want to proceed, or use either -n or -e. �use --force to skip the integrity check. �use --verbose to get a detailed report. �using current date as starting value: '%s' �using current time as starting value: '%s' �using specified time as starting value: '%s' �value does not match the regexp.�value too large. Expected a size <= %zu.�warning: day (%s) ignored when explicit dates are given �warning: daylight saving time changed after date adjustment �warning: daylight saving time changed after time adjustment �warning: month/year adjustment resulted in shifted dates: �warning: when adding relative days, it is recommended to specify noon �warning: when adding relative months/years, it is recommended to specify the 15th of the months �write error�zone�Project-Id-Version: GNU recutils 1.8 Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org POT-Creation-Date: 2022-04-16 19:38+0200 PO-Revision-Date: 2019-01-31 12:04+0100 Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com> Language-Team: German <translation-team-de@lists.sourceforge.net> Language: de MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: Lokalize 18.12.1 Plural-Forms: nplurals=2; plural=(n != 1) � Geschrieben von Jose E. Marchesi.� Unzulässige Tag/Monat-Kombination; � nicht vorhanden wegen Sommerzeit/Winterzeit-Regelung; � normalisierte Zeit: »%s« � numerischer Wertüberlauf; � --encrypt Vertrauliche Felder in der angegebenen Datei verschlüsseln. --decrypt Vertrauliche Felder in der angegebenen Datei entschlüsseln. � --help Hilfe anzeigen und beenden. --version Version anzeigen und beenden. � --no-external keine externen Deskriptoren verwenden. --force Datensätze auch dann bearbeiten, wenn Richtlinien dies untersagen. � --no-external Keine externen Deskriptoren verwenden. --force Die angeforderte Operation erzwingen. � angepasstes J M T: %s %02d %02d � Mögliche Gründe: � Neue(s) Datum/Zeit = »%s« � benutzerdefinierte Zeit: »%s« � Normalisiertes J M D: %s %02d %02d � -c, --comment Die betreffenden Datensätze auskommentieren, anstatt sie zu löschen. --force Auch in potenziell gefährlichen Situationen löschen, auch wenn der Löschvorgang Einschränkungen des Datensatzes berührt. --no-external Keine externen Deskriptoren verwenden. --verbose Einen ausführlichen Bericht ausgeben, falls die Integritätsprüfung scheitert. � -d, --delim=ZEICHEN legt das Trennzeichen fest (Vorgabe ist »,«) -t, --type=TYP Datensatz zum Umwandeln in csv; Falls dieser Parameter fehlt, wird der vorgegebene Datensatz verwendet. -S, --sort=FELDER sortiert die Ausgabe anhand der angegebenen Felder. � -d, --include-descriptors Datensatzdeskriptoren mit den übereinstimmenden Datensätzen ausgeben. -C, --collapse Ergebnis in Datensätzen nicht in neue Zeile umbrechen. -S, --sort=FELD Die Ausgabe anhand des angegebenen Feldes sortieren. -G, --group-by=FELD, … Datensätze anhand des angegebenen Feldes gruppieren. -U, --uniq Feldduplikate in ausgegebenen Datensätzen entfernen. � -f, --field=STR Feldname. Darauf sollte ein -v folgen. -v, --value=STR Feldwert. Sollte auf ein -f folgen. -r, --record=STR In die Datei einzufügender Datensatz. --force Datensatz auch dann einfügen, wenn dies Einschränkungen des Datensatzes berührt. --no-external Keine externen Deskriptoren verwenden. --no-auto Keine automatisch generierten Felder einfügen. --verbose Einen ausführlichen Bericht ausgeben, falls die Intergritätsprüfung scheitert. � -f, --file=DATEINAME Zu benutzende Vorlage aus einer Datei holen. � -j, --join=FELD Eine innere Verknüpfung mit dem angegebenen Feld ausführen. � -s, --password=PASSWORT Vertrauliche Felder mit dem angegebenen Passwort entschlüsseln. � -s, --password=STR Vertrauliche Felder mit dem angegebenen Passwort verschlüsseln. � -s, --system-tables Systemtabellen einschließen. -e, --keep-empty-fields Leere Felder in rec-Ausgabe nicht weglassen -l, --list-tables Eine Liste der in der mdb-Datei enthaltenen Tabellennamen ausgeben. � -t, --type=DATENSATZTYP Informationen zu Datensätzen des angegebenen Typs ausgeben. -d, --descriptor Vollständige Datensatzdeskriptoren einschließen. -n, --names-only Nur die Namen der in der Eingabe gefundenen Datensatzdateien ausgeben. �Webseite von %s: <%s> �Webseite von %s: <http://www.gnu.org/software/recutils/> �Unterprozess %s�Unterprozess %s fehlgeschlagen�Unterprozess %s hat das fatale Signal %d erhalten�%s: %lu: diese Zeile enthält %lu Felder, aber %lu Kopfzeilenfelder wurden gelesen �%s: Fehler: Die Anzahl der Datensätze des Typs %s sollte %zd sein. �%s: Fehler: Zu wenige Datensätze des Typs %s. Minimal erforderlich sind %zd. �%s: Fehler: Zu viele Datensätze des Typs %s. Maximal erlaubt sind %zd. �%s: Ungültige Option -- %c �%s: Die Option »%s%s« erlaubt kein Argument �%s: Die Option »%s%s« ist nicht eindeutig �%s: Die Option »%s%s« ist nicht eindeutig; möglich wären:�%s: Die Option »%s%s« benötigt ein Argument �%s: Diese Option benötigt ein Argument -- »%c« �%s: Unbekannte Option »%s%s« �%s:%s: Fehler: %%constraint[%d] wurde im Datensatz beschädigt �%s:%s: Fehler: %s enthält keine Informationen für Typ %s. �%s:%s: Fehler: %s enthält keine gültigen rec-Daten. �%s:%s: Fehler: Automatisch hochgezähltes Feld %s sollte vom Typ int, range oder date sein �%s:%s: Fehler: Automatisch hochgezähltes Feld %s sollte vom Typ int, range, uuid oder date sein �%s:%s: Fehler: vertrauliches Feld ist nicht verschlüsselt �%s:%s: Fehler: Entfernter Deskriptor von Adresse %s konnte nicht geholt werden. �%s:%s: Fehler: Externer Deskriptor aus Datei %s konnte nicht geholt werden. �%s:%s: Fehler: Doppelter Schlüsselwert im Feld »%s« im Datensatz �%s:%s: Fehler: eine durch Kommata getrennte Feldliste wurde vor der Typangabe erwartet �%s:%s: Fehler: Vor der Typangabe wurde ein Typname erwartet �%s:%s: Fehler: Feld »%s« ist in diesem Datensatz nicht erlaubt �%s:%s: Fehler: Feld »%s« sollte in diesem Datensatz einmalig sein �%s:%s: Fehler: Ungültiger Datensatztyp %s �%s:%s: Fehler: Ungültige Typ-Angabe �%s:%s: Fehler: Ungültige typedef-Angabe �%s:%s: Fehler: Schlüsselfeld »%s« nicht im Datensatz gefunden �%s:%s: Fehler: Obligatorisches Feld »%s« nicht im Datensatz gefunden �%s:%s: Fehler: Fehlendes %%rec-Feld im Datensatzdeskriptor �%s:%s: Fehler: Mehrere Schlüsselfelder »%s« im Datensatz �%s:%s: Fehler: Nur ein %%key-Feld im Datensatzdeskriptor zulässig �%s:%s: Fehler: Nur ein %%size-Feld im Datensatzdeskriptor zulässig �%s:%s: Fehler: Nur ein %%sort-Feld im Datensatzdeskriptor zulässig �%s:%s: Fehler: Unzulässiges Feld »%s« im Datensatz gefunden �%s:%s: Fehler: Der Bezugstyp %s existiert nicht �%s:%s: Fehler: Zu viele %%rec-Felder im Datensatzdeskriptor �%s:%s: Fehler: Wert für %s sollte eine Feldnamenliste sein. �%s:%s: Fehler: Wert von %s sollte eine Zahl sein, der optional ein >, <, >= oder <= vorangestellt ist. �%s:%s: Fehler: Wert für %s[%zd] ist keine Feldnamenliste �%s:%s: Fehler: Wert für %s[%zd] ist kein gültiger Auswahlausdruck �«�'@timespec' - immer UTC�(C)�--password|-s muss als Operationsargument verwendet werden. �: Fehler: �: Warnung: �Aktionen: -s, --set=WERT Wert der ausgewählten Felder ändern. -a, --add=WERT Angegebenen Wert auf die ausgewählten Felder anwenden. -S, --set-add=VALUE Den Wert der ausgewählten Felder ändern. Falls diese nicht existieren, ein neues Feld mit diesem Wert hinzufügen. -r, --rename=NAME Die ausgewählten Felder in einen angegebenen Namen umbenennen. Falls ein ganzer Datensatz ausgewählt wird, dann wird das Feld im Datensatzdeskriptor ebenfalls umbenannt. -d, --delete Ausgewählte Felder löschen. -c, --comment Ausgewählte Felder auskommentieren. �Felder in Datensätzen bearbeiten oder löschen. �Eine Vorlage auf die aus der Standardeingabe gelesenen Datensätze anwenden. �rec-Dateien prüfen und korrigieren. �Eine mdb-Datei in eine rec-Datei umwandeln. �CSV-Daten in rec-Daten-umwandeln. �REC-Daten in CSV-Daten-umwandeln. �Copyright (C) %s Jose E. Marchesi. Lizenz GPLv3+: GNU GPL Version 3 oder neuer <http://gnu.org/licenses/gpl.html>. Dies ist freie Software: Sie können Sie frei verändern und weitergeben. Es gibt KEINE GARANTIE, soweit gesetzlich zulässig. �Optionen zur Ver- und Entschlüsselung: -s, --password=PASSWORT Mit diesem Passwort ver-/entschlüsseln. �Feldauswahloptionen: -f, --fields=FELDER Durch Kommata getrennte Liste von Feldnamen mit optionalen Subskripten. �Allgemeine Hilfe zu GNU-Software: <http://www.gnu.org/gethelp/> �Falls keine DATEI angegeben wird, arbeitet der Befehl als Filter, wobei die Daten aus der Standardeingabe geholt werden und das Ergebnis in die Standardausgabe geschrieben wird. �Neue Datensätze in eine rec-Datenbank einfügen. �Ungültige Rückreferenz�Ungültiger Name für Zeichenklasse�Ungültiges Sortierzeichen�Ungültiger Inhalt von \{\}�Ungültiger vorhergehender regulärer Ausdruck�Ungültiges Bereichsende�Ungültiger regulärer Ausdruck�Speicher verbraucht�Kein Treffer�Kein vorhergehender regulärer Ausdruck�Operationen: --check Integrität der angegebenen Datei prüfen. Vorgabe. --sort Datensätze in der angegebenen Datei sortieren. --auto Automatisch generierte Felder in Datensätze einfügen, sofern diese fehlen. �Ausgabeoptionen: -p, --print=FELDER Durch Kommata getrennte Liste von Feldern, die für jeden übereinstimmenden Datensatz auszugeben sind. -P, --print-values=FELDER Wie -p, aber die Werte der ausgewählten Felder ausgeben. -R, --print-row=FELDER Wie -P, aber ausgegebene Werte durch Leerzeichen anstatt durch Zeilenumbrüche trennen. -c, --count Anzahl der übereinstimmenden Datensätze anstelle der Datensätze selbst ausgeben. �Gepackt von %s �Gepackt von %s (%s) �Passwort erneut: �Passwort: �Vorzeitiges Ende des regulären Ausdrucks�Informationen über die Datensatztypen in der Standardeingabe ausgeben. �Optionen zur Datensatzauswahl: -i, --case-insensitive Groß- oder Kleinschreibung in Auswahlausdrücken nicht beachten. -t, --type=TYP Nur auf Datensätze des angegebenen Typs anwenden. -e, --expression=DATENS_AUSDR Auswahlausdruck. -q, --quick=STRING Datensätze mit Feldern auswählen, die eine Zeichenkette enthalten. -n, --number=ZAHL Bestimmten Datensatz nach Position auswählen, mit Bereichsangabe. -m, --random=ZAHL Eine angegebene Zahl von Datensätzen zufällig auswählen. �Regulärer Ausdruck zu groß�Entfernen oder Auskommentieren von Datensätzen einer rec-Datei. �Fehler in %s bitte melden an: %s �Melden Sie Fehler an: %s Fehler in der Übersetzung melden Sie bitte an: <translation-team-de@lists.sourceforge.net> �rec-Daten auswählen und ausgeben. �Spezielle Optionen: --print-sexps Daten im sexps- anstelle des rec-Formats ausgeben. �Spezielle Optionen: -S, --print-sexps Daten im sexps- anstelle des rec-Formats ausgeben. �Erfolg�Wert der Umgebungsvariable TZ=»%s«�TZ=»%s« in Datum-Zeichenkette�Wert der Umgebungsvariable TZ=»UTC0« oder -u�Angehängter Backslash�Unbekannter Systemfehler�Öffnende ( oder \( ohne schließende.�Schließende ) oder \)�Öffnende [, [^, [:, [., oder [= ohne schließende.�Öffnende \{ ohne schließende.�Aufruf: csv2rec [OPTIONEN] … [CSV-DATEI] �Aufruf: mdb2rec [OPTIONEN] … MDB-DATEI [TABELLE] �Aufruf: rec2csv [OPTIONEN] … [REC-DATEI] �Aufruf: recdel [OPTIONEN] … [-t TYP] [-n ZAHL | -e DATENSATZ_AUSDR | -q STR | -m ZAHL] [DATEI] �Aufruf: recfix [OPTION] … [OPERATION] [OP_OPTION] … [DATEI] �Aufruf: recfmt [OPTION] … [VORLAGE] �Aufruf: recinf [OPTION] … [DATEI] … �Aufruf: recins [OPTION] … [t TYP] [-n ZAHL | -e DATENSATZ_AUSDR | -q STR | -m ZAHL] [(-f NAME -v STR]|[-r RECDATEN)] … [DATEI] �Aufruf: recsel [OPTION] … [-t TYP] [-j FELD] [-n INDIZES | -e DATENSAUSDR | -q AUSDR | -m ZAHL] [-c | (-p|-P) FELDAUSDR] [DATEI] … �Aufruf: recset [OPTION] … [DATEI] … �Geschrieben von %s und %s. �Geschrieben von %s, %s, %s, %s, %s, %s, %s, %s, %s und weiteren. �Geschrieben von %s, %s, %s, %s, %s, %s, %s, %s und %s. �Geschrieben von %s, %s, %s, %s, %s, %s, %s und %s. �Geschrieben von %s, %s, %s, %s, %s, %s und %s. �Geschrieben von %s, %s, %s, %s, %s und %s. �Geschrieben von %s, %s, %s, %s und %s. �Geschrieben von %s, %s, %s und %s. �Geschrieben von %s, %s und %s. �Geschrieben von %s. �»�Auf -f sollte ein -v folgen �Einem -v sollte ein -f vorausgehen �Datei »%s« kann nicht zum Lesen geöffnet werden. �Eindeutiger Name kann nicht erstellt werden. �Datei %s kann nicht gelesen werden �Die Optionen -[pPR] und -c sind gemeinsam nicht erlaubt. �-c und -p können nicht gleichzeitig angegeben werden. �-e und -n können nicht gleichzeitig angegeben werden. �-e und -q können nicht gleichzeitig angegeben werden. �-m und -e können nicht gleichzeitig angegeben werden. �-m und -n können nicht gleichzeitig angegeben werden. �-m und -q können nicht gleichzeitig angegeben werden. �-n und -e können nicht gleichzeitig angegeben werden. �-n und -q können nicht gleichzeitig angegeben werden. �Datei %s konnte nicht geöffnet werden �Feldausdruck wird erstellt. �Datum�Datum/Zeit�Tag�Vorlage und -f können nicht gleichzeitig in der Befehlszeile angegeben werden. �Doppelter Datensatz »%s« von %s. �Fehler beim Verarbeiten des Ausdrucks in einem Vorlagenslot. �Fehler beim Einlesen der CSV-Datei: %s �Fehler beim Einlesen des mit -r angegebenen Datensatzes �Fehler: %s:%d �Fehler: Hinzufügen des relativen Datums ergab ein ungültiges Datum: »%s« �Fehler: Hinzufügen relativer Zeit verursachte einen Überlauf �Fehler: Datei %s kann nicht gelesen werden �Fehler: initiales Jahr außerhalb des zulässigen Bereichs �Fehler: Ungültiger Datum/Zeit-Wert: �Fehler: Einlesen gescheitert �Fehler: Einlesen fehlgeschlagen, gestoppt bei »%s« �Fehler: Zeitz %d verursachte Überlauf in time_t �Fehler: tzalloc (»%s«) ist fehlgeschlagen �Fehler: Unbekanntes Wort »%s« �Fehler: Überlauf in Jahr, Monat oder Tag �Ganzzahl zwischen %d und %d wurde erwartet.�Initialisieren des CSV-Parsers ist gescheitert �Normalisieren des Feldnamens %s fehlgeschlagen �Datensatztypname %s konnte nicht normalisiert werden �Feldname %s konnte nicht normalisiert werden �Datei %s ist schreibgeschützt. �Datei scheint keine Access-Datenbank zu sein �Final: %s (UTC%s) �Final: %s (UTC) �Final: %s (unbekannter Zeitzonenversatz) �hybrid�Anfrage zum Löschen aller Datensätze des Typs %s wird ignoriert. �Inkorrekte Zeitzone�Eingabe-Zeitzone: �Interner Fehler beim Erstellen des Feldausdrucks. �Interner Fehler beim Erstellen des Feldausdrucks. �Interner Fehler: REC_FEX_MAX_ELEMS überschritten. Bitte einen Fehlerbericht senden. �Interner Fehler: rec-types: REC_TYPE_NONE von rec_type_parse_type_kind() erhalten in rec_type_new(). �Interner Fehler: rec_int_rec_extract_file: Fehler beim Kompilieren des regulären Ausdrucks. �Interner Fehler: rec_int_rec_extract_url: Fehler beim Kompilieren des regulären Ausdrucks. �Interner Fehler: rec_match: Fehler beim Kompilieren des regulären Ausdrucks. �Interner Fehler: recutl_index_list_parse: Fehler beim Kompilieren des regulären Ausdrucks. �Ungültiger »bool«-Wert.�Ungültiger »field«-Wert.�Ungültiger »line«-Wert.�Ungültiger »range«-Wert.�Ungültiger »real«-Wert.�Ungültiger »uuid«-Wert.�Ungültige Aggregatfunktion »%s« �Ungültiges Datum.�Ungültige E-Mail.�Ungültiger Aufzählungswert.�Ungültiger Ausdruck in einem Vorlagenslot. �Ungültiger Feldausdruck in -f. �Ungültiger Feldname %s. �Ungültiger Feldname »%s« in Header �Ungültige Feldnamenliste in -S. �Ungültige Feldnamen in -G. �Ungültige Feldnamen in -S. �Ungültige Ganzzahl.�Ungültige Feldliste in -%c �Ungültige Indexliste in -n �Ungültiger Auswahlausdruck �Ungültiger Auswahlausdruck. �Verknüpfungen können nur ausgeführt werden, wenn ein benannter Datensatz ausgewählt ist. �Lokale_Zone�Speicher verbraucht�Zeitzone fehlt�Es wurde mehr als ein Passwort angegeben �Neues Startdatum: »%s« ist »%s« �Keine Datensätze vom Typ %s gefunden. �Zahl�Anzahl der Sekunden�Nur ein Feld kann als Verknüpfungskriterium angegeben werden. �Nur eine Feldliste kann als Gruppierkriterium angegeben werden. �Nur eine Feldliste kann als Sortierkriterium angegeben werden. �Nur eine Feldliste kann als Sortierkriterium angegeben werden. �Vorgang wurde wegen Integritätsproblemen abgebrochen. �Nicht genügend freier Speicher �Teil %s eingelesen:�Datum/Zeit-Zeichenkette ausgewertet�Bitte geben Sie einen Wert für das Feld %s an �Bitte geben Sie mit -j|--join einen korrekten Feldnamen an. �Bitte geben Sie nur eine Aktion an. �Bitte geben Sie nur eine Operation an. �Bitte geben Sie nur ein Passwort an. �Bitte geben Sie mit -f ein Feld an. �Bitte --force oder --decrypt verwenden �Zugriffsrechte für %s werden erhalten�recfmt_apply_template: Fehler beim Kompilieren des regulären Ausdrucks. Bitte melden Sie diesen Fehler. �relativ�Datei %s wird in %s umbenannt �Zugriffsrechte für %s werden gesetzt�Verschiedene Datensatztypen gefunden. Bitte mit -t einen angeben. �Startdatum/-zeit: »%s« �Systemvorgabe�Die Datenbank enthält bereits verschlüsselte Felder �Die angegebenen Passwörter stimmen nicht überein. �Die rename-Aktion benötigt nur ein Feld mit einem optionalen Subskript. �Die angegebene Operation benötigt kein Passwort. �Zeit�Zeitzone: Wert der Umgebungsvariable TZ=»%s« �Zeitzone: Weltzeit (UTC) �Zeitzone: Systemvorgabe �heute/dies/jetzt �Unbekannte Operation in recfix: Bitte melden Sie dies als Fehler. �Verwenden Sie --force, wenn Sie wirklich fortsetzen wollen, ansonsten -n oder -e. �Benutzen Sie --force, um die Integritätsprüfung zu unterbinden. �Mit --verbose erhalten Sie einen ausführlichen Bericht. �Aktuelles Datum wird als Startwert verwendet: »%s« �Aktuelle Zeit wird als Startwert verwendet: »%s« �Angegebene Zeit wird als Startwert verwendet: »%s« �Wert passt nicht auf den regulären Ausdruck.�Wert zu groß. Größe <= %zu wurde erwartet.�Warnung: Tag (%s) wird ignoriert, wenn explizite Daten angegeben sind �Warnung: Sommerzeit/Winterzeit wurde nach der Datumsanpassung geändert �Warnung: Sommerzeit/Winterzeit wurde nach der Zeitanpassung geändert �Warnung: Anpassung von Monat/Jahr ergab Datumsverschiebung: �Warnung: Beim Hinzufügen relativer Tage wird empfohlen, Mittag (12 Uhr) anzugeben �Warnung: Beim Hinzufügen relativer Monate/Jahre wird empfohlen, den 15. der Monate anzugeben �Schreibfehler�Zone�PRIdMAX�year: %04�%s (day ordinal=% number=%d)�number of seconds: %�warning: value % has % digits. Assuming YYYY/MM/DD �warning: value % has less than 4 digits. Assuming MM/DD/YY[YY] �warning: adjusting year value % to % �error: out-of-range year % �error: invalid hour %%s �error: day '%s' (day ordinal=% number=%d) resulted in an invalid date: '%s' �after date adjustment (%+ years, %+ months, %+ days), �'%s' = % epoch-seconds �after time adjustment (%+ hours, %+ minutes, %+ seconds, %+d ns), � new time = % epoch-seconds �final: %.%09d (epoch-seconds) �Jahr: %04�%s (Tag Ordnungszahl=% Zahl=%d)�Anzahl der Sekunden: %�Warnung: Wert % hat % Stellen. JJJJ/MM/TT wird angenommen �Warnung: Wert % hat weniger als 4 Stellen. MM/TT/JJ[JJ] wir angenommen �Warnung: Jahresangabe % wird auf % korrigiert �Fehler: Jahr % außerhalb des zulässigen Bereichs �Fehler: Ungültige Stunde %%s �Fehlerr: Tag »%s« (Tag Ordnungszahl=% Zahl=%d) ergab ein ungültiges Datum: »%s« �nach Datumsanpassung (%+ Jahre, %+ Monate, %+ Tage), �»%s« = % Sekunden seit der Epoche �nach der Zeitanpassung (%+ Stunden, %+ Minuten, %+ Sekunden, %+d ns), � Neue Zeit = % Sekunden seit der Epoche �Final: %.%09d (Sekunden seit der Epoche) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/en@boldquot.header������������������������������������������������������������������0000644�0000000�0000000�00000002471�13253176007�014160� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# All this catalog "translates" are quotation characters. # The msgids must be ASCII and therefore cannot contain real quotation # characters, only substitutes like grave accent (0x60), apostrophe (0x27) # and double quote (0x22). These substitutes look strange; see # http://www.cl.cam.ac.uk/~mgk25/ucs/quotes.html # # This catalog translates grave accent (0x60) and apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019). # It also translates pairs of apostrophe (0x27) to # left single quotation mark (U+2018) and right single quotation mark (U+2019) # and pairs of quotation mark (0x22) to # left double quotation mark (U+201C) and right double quotation mark (U+201D). # # When output to an UTF-8 terminal, the quotation characters appear perfectly. # When output to an ISO-8859-1 terminal, the single quotation marks are # transliterated to apostrophes (by iconv in glibc 2.2 or newer) or to # grave/acute accent (by libiconv), and the double quotation marks are # transliterated to 0x22. # When output to an ASCII terminal, the single quotation marks are # transliterated to apostrophes, and the double quotation marks are # transliterated to 0x22. # # This catalog furthermore displays the text between the quotation marks in # bold face, assuming the VT100/XTerm escape sequences. # �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/pt_BR.po����������������������������������������������������������������������������0000644�0000000�0000000�00000177166�14226577415�012127� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Brazilian Portuguese translations for recutils package # Traduções em português brasileiro para o pacote recutils # Copyright (C) 2019 Free Software Foundation, Inc. # This file is distributed under the same license as the recutils package. # Rafael Fontenelle <rafaelff@gnome.org>, 2016-2019. msgid "" msgstr "" "Project-Id-Version: recutils 1.8\n" "Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" "POT-Creation-Date: 2022-04-16 19:38+0200\n" "PO-Revision-Date: 2019-08-28 15:29-0300\n" "Last-Translator: Rafael Fontenelle <rafaelff@gnome.org>\n" "Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge." "net>\n" "Language: pt_BR\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=2; plural=(n > 1);\n" "X-Generator: Virtaal 1.0.0-beta1\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: lib/closeout.c:122 msgid "write error" msgstr "erro de escrita" #: lib/copy-acl.c:54 lib/copy-file.c:215 #, c-format msgid "preserving permissions for %s" msgstr "preservando permissões para %s" #: lib/copy-file.c:192 #, fuzzy, c-format msgid "error while opening %s for reading" msgstr "não foi possível abrir %s para leitura.\n" #: lib/copy-file.c:196 #, fuzzy, c-format msgid "cannot open backup file %s for writing" msgstr "não foi possível abrir %s para leitura.\n" #: lib/copy-file.c:200 #, fuzzy, c-format msgid "error reading %s" msgstr "erro: não foi possível ler o arquivo %s\n" #: lib/copy-file.c:204 #, c-format msgid "error writing %s" msgstr "" #: lib/copy-file.c:208 #, fuzzy, c-format msgid "error after reading %s" msgstr "erro: não foi possível ler o arquivo %s\n" #: lib/error.c:195 msgid "Unknown system error" msgstr "Erro desconhecido de sistema" #: lib/execute.c:348 lib/wait-process.c:291 lib/wait-process.c:365 #, c-format msgid "%s subprocess failed" msgstr "subprocesso %s falhou" #: lib/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: a opção \"%s%s\" é ambígua\n" #: lib/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: a opção \"%s%s\" é ambígua; possibilidades:" #: lib/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: opção desconhecida \"%s%s\"\n" #: lib/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: a opção \"%s%s\" não permite um argumento\n" #: lib/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: a opção \"%s%s\" exige um argumento\n" #: lib/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: opção inválida -- \"%c\"\n" #: lib/getopt.c:636 lib/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: a opção exige um argumento -- \"%c\"\n" #: lib/obstack.c:337 lib/obstack.c:339 lib/xalloc-die.c:34 msgid "memory exhausted" msgstr "memória esgotada" #: lib/openat-die.c:38 #, c-format msgid "unable to record current working directory" msgstr "" #: lib/openat-die.c:57 #, c-format msgid "failed to return to initial working directory" msgstr "" #: parse-datetime.y:440 parse-datetime.y:540 #, c-format msgid "parsed %s part: " msgstr "analisada parte de %s: " #: parse-datetime.y:455 #, c-format msgid "year: %04<PRIdMAX>" msgstr "ano: %04<PRIdMAX>" #: parse-datetime.y:483 #, c-format msgid "%s (day ordinal=%<PRIdMAX> number=%d)" msgstr "%s (dia ordinal=%<PRIdMAX> número=%d)" #: parse-datetime.y:514 #, c-format msgid "number of seconds: %<PRIdMAX>" msgstr "número de segundos: %<PRIdMAX>" #: parse-datetime.y:547 msgid "today/this/now\n" msgstr "hoje/isso/agora\n" #: parse-datetime.y:612 msgid "number of seconds" msgstr "número de segundos" #: parse-datetime.y:625 msgid "datetime" msgstr "datahorário" #: parse-datetime.y:630 msgid "time" msgstr "horário" #: parse-datetime.y:635 msgid "local_zone" msgstr "fuso local" #: parse-datetime.y:640 msgid "zone" msgstr "fuso" #: parse-datetime.y:645 msgid "date" msgstr "data" #: parse-datetime.y:650 msgid "day" msgstr "dia" #: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 msgid "relative" msgstr "relativo" #: parse-datetime.y:658 msgid "number" msgstr "número" #: parse-datetime.y:662 msgid "hybrid" msgstr "híbrido" #: parse-datetime.y:820 #, c-format msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" msgstr "" "aviso: o valor %<PRIdMAX> tem %<PRIdMAX> dígitos. Presumindo AAAA/MM/DD\n" #: parse-datetime.y:832 #, c-format msgid "" "warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" msgstr "" "aviso: o valor %<PRIdMAX> tme menos de 4 dígitos. Presumindo MM/DD/AA[AA]\n" #: parse-datetime.y:1279 #, c-format msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" msgstr "aviso: ajustando o valor de ano %<PRIdMAX> para %<PRIdMAX>\n" #: parse-datetime.y:1289 #, c-format msgid "error: out-of-range year %<PRIdMAX>\n" msgstr "erro: ano %<PRIdMAX> fora do intervalo\n" #: parse-datetime.y:1520 #, c-format msgid "error: unknown word '%s'\n" msgstr "erro: palavra desconhecida \"%s\"\n" #: parse-datetime.y:1669 msgid "error: invalid date/time value:\n" msgstr "erro: valor de data/horário inválido:\n" #: parse-datetime.y:1670 #, c-format msgid " user provided time: '%s'\n" msgstr " horário fornecido pelo usuário: \"%s\"\n" #: parse-datetime.y:1672 #, c-format msgid " normalized time: '%s'\n" msgstr " horário normalizado: \"%s\"\n" #: parse-datetime.y:1695 msgid " possible reasons:\n" msgstr " motivos possíveis:\n" #: parse-datetime.y:1697 msgid " non-existing due to daylight-saving time;\n" msgstr " não existente por causa de horário de verão;\n" #: parse-datetime.y:1699 msgid " invalid day/month combination;\n" msgstr " combinação de dia/mês inválida;\n" #: parse-datetime.y:1700 msgid " numeric values overflow;\n" msgstr " estouro de valores numéricos;\n" #: parse-datetime.y:1701 msgid "incorrect timezone" msgstr "fuzo horário incorreto" #: parse-datetime.y:1702 msgid "missing timezone" msgstr "faltando fuso horário" #: parse-datetime.y:1810 msgid "error: initial year out of range\n" msgstr "erro: ano inicial fora do intervalo\n" #: parse-datetime.y:1905 msgid "error: parsing failed\n" msgstr "erro: análise falhou\n" #: parse-datetime.y:1906 #, c-format msgid "error: parsing failed, stopped at '%s'\n" msgstr "erro: análise falhou, parou em \"%s\"\n" #: parse-datetime.y:1916 msgid "input timezone: " msgstr "fuso horário de entrada: " #: parse-datetime.y:1919 #, c-format msgid "'@timespec' - always UTC" msgstr "\"@timespec\" - sempre UTC" #: parse-datetime.y:1921 #, c-format msgid "parsed date/time string" msgstr "string de data/horário analisada" #: parse-datetime.y:1925 #, c-format msgid "TZ=\"%s\" in date string" msgstr "TZ=\"%s\" em string de data" #: parse-datetime.y:1929 #, c-format msgid "TZ=\"UTC0\" environment value or -u" msgstr "valor de ambiente TZ=\"UTC0\" ou -u" #: parse-datetime.y:1932 #, c-format msgid "TZ=\"%s\" environment value" msgstr "valor de ambiente TZ=\"%s\"" #: parse-datetime.y:1935 #, c-format msgid "system default" msgstr "padrão do sistema" #: parse-datetime.y:1977 msgid "error: year, month, or day overflow\n" msgstr "erro: estouro de ano, mês ou dia\n" #: parse-datetime.y:1988 #, c-format msgid "error: invalid hour %<PRIdMAX>%s\n" msgstr "erro: hora %<PRIdMAX>%s inválido\n" #: parse-datetime.y:1996 #, c-format msgid "using specified time as starting value: '%s'\n" msgstr "usando horário especificado como valor inicial: \"%s\"\n" #: parse-datetime.y:1997 #, c-format msgid "using current time as starting value: '%s'\n" msgstr "usando horário atual como valor inicial: \"%s\"\n" #: parse-datetime.y:2051 #, c-format msgid "error: tzalloc (\"%s\") failed\n" msgstr "erro: tzalloc (\"%s\") falhou\n" #: parse-datetime.y:2095 #, c-format msgid "" "error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " "date: '%s'\n" msgstr "" "erro: o dia \"%s\" (dia ordinal=%<PRIdMAX> número=%d) resultou em uma data " "inválida: \"%s\"\n" #: parse-datetime.y:2106 #, c-format msgid "new start date: '%s' is '%s'\n" msgstr "nova data inicial: \"%s\" é \"%s\"\n" #: parse-datetime.y:2115 #, c-format msgid "using current date as starting value: '%s'\n" msgstr "usando data atual como valor inicial: \"%s\"\n" #: parse-datetime.y:2119 #, c-format msgid "warning: day (%s) ignored when explicit dates are given\n" msgstr "aviso: dia (%s) ignorado quando datas explícitas são dadas\n" #: parse-datetime.y:2123 #, c-format msgid "starting date/time: '%s'\n" msgstr "data/horário inicial: \"%s\"\n" #: parse-datetime.y:2133 msgid "" "warning: when adding relative months/years, it is recommended to specify the " "15th of the months\n" msgstr "" "aviso: ao adicionar meses/anos relativos, é recomendado especificar o 15º " "dos meses\n" #: parse-datetime.y:2138 msgid "warning: when adding relative days, it is recommended to specify noon\n" msgstr "" "aviso: ao adicionar dias relativos, é recomendado especificar meio-dia\n" #: parse-datetime.y:2148 #, c-format msgid "error: %s:%d\n" msgstr "erro: %s:%d\n" #: parse-datetime.y:2163 #, c-format msgid "error: adding relative date resulted in an invalid date: '%s'\n" msgstr "" "erro: a adição de data relativa resultou em uma data inválida: \"%s\"\n" #: parse-datetime.y:2172 #, c-format msgid "" "after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " "days),\n" msgstr "" "após o ajuste de data (%+<PRIdMAX> anos, %+<PRIdMAX> meses, %+<PRIdMAX> " "dias),\n" #: parse-datetime.y:2176 #, c-format msgid " new date/time = '%s'\n" msgstr " nov data/horário = \"%s\"\n" #: parse-datetime.y:2195 msgid "warning: daylight saving time changed after date adjustment\n" msgstr "aviso: horário de verão alterado após o ajuste da data\n" #: parse-datetime.y:2214 msgid "warning: month/year adjustment resulted in shifted dates:\n" msgstr "aviso: o ajuste de mês/ano resultou em datas deslocadas:\n" #: parse-datetime.y:2217 #, c-format msgid " adjusted Y M D: %s %02d %02d\n" msgstr " A M D ajustados: %s %02d %02d\n" #: parse-datetime.y:2219 #, c-format msgid " normalized Y M D: %s %02d %02d\n" msgstr " A M D normalizados: %s %02d %02d\n" #: parse-datetime.y:2248 #, c-format msgid "error: timezone %d caused time_t overflow\n" msgstr "erro: fuso horário %d causou estouro em time_t\n" #: parse-datetime.y:2258 #, c-format msgid "'%s' = %<PRIdMAX> epoch-seconds\n" msgstr "\"%s\" = %<PRIdMAX> segundos desde o epoch\n" #: parse-datetime.y:2286 msgid "error: adding relative time caused an overflow\n" msgstr "erro: a adição de horário relativo causou um estouro\n" #: parse-datetime.y:2297 #, c-format msgid "" "after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " "seconds, %+d ns),\n" msgstr "" "após o ajuste de horário (%+<PRIdMAX> horas, %+<PRIdMAX> minutos, " "%+<PRIdMAX> segundos, %+d ns),\n" #: parse-datetime.y:2303 #, c-format msgid " new time = %<PRIdMAX> epoch-seconds\n" msgstr " novo horário = %<PRIdMAX> segundos desde o epoch\n" #: parse-datetime.y:2319 msgid "warning: daylight saving time changed after time adjustment\n" msgstr "aviso: horário de verão alterado após o ajuste do horário\n" #: parse-datetime.y:2329 msgid "timezone: system default\n" msgstr "fuso horário: padrão do sistema\n" #: parse-datetime.y:2331 msgid "timezone: Universal Time\n" msgstr "fuso horário: Tempo Universal\n" #: parse-datetime.y:2333 #, c-format msgid "timezone: TZ=\"%s\" environment value\n" msgstr "fuso horário: valor ambiente TZ=\"%s\"\n" #: parse-datetime.y:2337 #, c-format msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" msgstr "final: %<PRIdMAX>.%09d (segundos desde epoch)\n" #: parse-datetime.y:2343 #, c-format msgid "final: %s (UTC)\n" msgstr "final: %s (UTC)\n" #: parse-datetime.y:2358 #, c-format msgid "final: %s (UTC%s)\n" msgstr "final: %s (UTC%s)\n" #: parse-datetime.y:2362 #, c-format msgid "final: %s (unknown time zone offset)\n" msgstr "final: %s (posição de fuso horário desconhecida)\n" #. TRANSLATORS: #. Get translations for open and closing quotation marks. #. The message catalog should translate "`" to a left #. quotation mark suitable for the locale, and similarly for #. "'". For example, a French Unicode local should translate #. these to U+00AB (LEFT-POINTING DOUBLE ANGLE #. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE #. QUOTATION MARK), respectively. #. #. If the catalog has no translation, we will try to #. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and #. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the #. current locale is not Unicode, locale_quoting_style #. will quote 'like this', and clocale_quoting_style will #. quote "like this". You should always include translations #. for "`" and "'" even if U+2018 and U+2019 are appropriate #. for your locale. #. #. If you don't know what to put here, please see #. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> #. and use glyphs suitable for your language. #: lib/quotearg.c:355 msgid "`" msgstr "“" #: lib/quotearg.c:356 msgid "'" msgstr "â€" #: lib/regcomp.c:122 msgid "Success" msgstr "Sucesso" #: lib/regcomp.c:125 msgid "No match" msgstr "Nenhuma ocorrência do padrão" #: lib/regcomp.c:128 msgid "Invalid regular expression" msgstr "Expressão regular inválida" #: lib/regcomp.c:131 msgid "Invalid collation character" msgstr "Caractere de combinação inválido" #: lib/regcomp.c:134 msgid "Invalid character class name" msgstr "Nome inválido de categoria de caracteres" #: lib/regcomp.c:137 msgid "Trailing backslash" msgstr "Barra invertida no final" #: lib/regcomp.c:140 msgid "Invalid back reference" msgstr "Retrorreferência inválida" #: lib/regcomp.c:143 msgid "Unmatched [, [^, [:, [., or [=" msgstr "[, [^, [:, [., ou [= sem correspondente" #: lib/regcomp.c:146 msgid "Unmatched ( or \\(" msgstr "( ou \\( sem correspondente" #: lib/regcomp.c:149 msgid "Unmatched \\{" msgstr "\\{ sem correspondente" #: lib/regcomp.c:152 msgid "Invalid content of \\{\\}" msgstr "Conteúdo inválido de \\{\\}" #: lib/regcomp.c:155 msgid "Invalid range end" msgstr "Fim de intervalo inválido" #: lib/regcomp.c:158 msgid "Memory exhausted" msgstr "Memória esgotada" #: lib/regcomp.c:161 msgid "Invalid preceding regular expression" msgstr "A expressão regular precedente é inválida" #: lib/regcomp.c:164 msgid "Premature end of regular expression" msgstr "Fim prematuro da expressão regular" #: lib/regcomp.c:167 msgid "Regular expression too big" msgstr "Expressão regular grande demais" #: lib/regcomp.c:170 msgid "Unmatched ) or \\)" msgstr ") ou \\) sem correspondente" #: lib/regcomp.c:650 msgid "No previous regular expression" msgstr "Nenhuma expressão regular anterior" #: lib/set-acl.c:46 #, c-format msgid "setting permissions for %s" msgstr "definindo permissões para %s" #: lib/version-etc.c:73 #, c-format msgid "Packaged by %s (%s)\n" msgstr "Empacotado por %s (%s)\n" #: lib/version-etc.c:76 #, c-format msgid "Packaged by %s\n" msgstr "Empacotado por %s\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: lib/version-etc.c:83 msgid "(C)" msgstr "(C)" #. TRANSLATORS: The %s placeholder is the web address of the GPL license. #: lib/version-etc.c:88 #, fuzzy, c-format msgid "" "License GPLv3+: GNU GPL version 3 or later <%s>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "\n" "Licença GPLv3+: GNU GPL versão 3 ou posterior <https://gnu.org/licenses/gpl." "html>.\n" "Este é um software livre: você é livre para alterá-lo e redistribuí-lo.\n" "NÃO Hà QUALQUER GARANTIA, na máxima extensão permitida em lei.\n" "\n" #. TRANSLATORS: %s denotes an author name. #: lib/version-etc.c:105 #, c-format msgid "Written by %s.\n" msgstr "Escrito por%s.\n" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:109 #, c-format msgid "Written by %s and %s.\n" msgstr "Escrito por %s e %s.\n" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:113 #, c-format msgid "Written by %s, %s, and %s.\n" msgstr "Escrito por %s, %s e %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:120 #, c-format msgid "" "Written by %s, %s, %s,\n" "and %s.\n" msgstr "" "Escrito po %s, %s, %s\n" "e %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:127 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, and %s.\n" msgstr "" "Escrito por %s, %s, %s,\n" "%s e %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:134 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, and %s.\n" msgstr "" "Escrito por %s, %s, %s,\n" "%s, %s e %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:142 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, and %s.\n" msgstr "" "Escrito por %s, %s, %s,\n" "%s, %s, %s e %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:150 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "and %s.\n" msgstr "" "Escrito por %s, %s, %s,\n" "%s, %s, %s, %s\n" "e %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:159 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, and %s.\n" msgstr "" "Escrito por %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s e %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:170 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s, and others.\n" msgstr "" "Escrito por %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s e outros.\n" #. TRANSLATORS: The placeholder indicates the bug-reporting address #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for translation #. bugs (typically your translation team's web or email address). #. TRANSLATORS: --help output 5+ (reports) #. TRANSLATORS: the placeholder indicates the bug-reporting address #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap #: lib/version-etc.c:249 utils/recutl.c:114 #, c-format msgid "Report bugs to: %s\n" msgstr "" "Relate erros para: %s\n" "Relate erros de tradução para <http://translationproject.org/team/pt_BR." "html>\n" #: lib/version-etc.c:251 utils/recutl.c:117 #, c-format msgid "Report %s bugs to: %s\n" msgstr "Relate os erros do %s para: %s\n" #: lib/version-etc.c:255 lib/version-etc.c:257 utils/recutl.c:121 #, c-format msgid "%s home page: <%s>\n" msgstr "Página do %s: <%s>\n" #: lib/version-etc.c:260 #, fuzzy, c-format msgid "General help using GNU software: <%s>\n" msgstr "Ajuda geral no uso de software GNU: <https://www.gnu.org/gethelp/>\n" #: lib/wait-process.c:232 lib/wait-process.c:264 lib/wait-process.c:326 #, c-format msgid "%s subprocess" msgstr "subprocesso %s" #: lib/wait-process.c:283 lib/wait-process.c:355 #, c-format msgid "%s subprocess got fatal signal %d" msgstr "o subprocesso %s recebeu sinal fatal %d" #: src/rec-fex.c:726 #, c-format msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" msgstr "erro interno: REC_FEX_MAX_ELEMS excedido. Por favor, relate isso.\n" #: src/rec-int.c:132 src/rec-int.c:186 src/rec-int.c:243 src/rec-int.c:287 #: utils/recutl.c:199 msgid "out of memory\n" msgstr "memória insuficiente\n" #: src/rec-int.c:147 #, c-format msgid "%s:%s: error: mandatory field '%s' not found in record\n" msgstr "%s:%s: erro: campo obrigatório \"%s\" não foi encontrado no registro\n" #: src/rec-int.c:210 #, c-format msgid "%s:%s: error: field '%s' not allowed in this record set\n" msgstr "%s:%s: erro: campo \"%s\" não admitido neste conjunto de registros\n" #: src/rec-int.c:257 #, c-format msgid "%s:%s: error: field '%s' should be unique in this record\n" msgstr "%s:%s: erro: o campo \"%s\" deveria ser único neste registro\n" #: src/rec-int.c:301 #, c-format msgid "%s:%s: error: prohibited field '%s' found in record\n" msgstr "%s:%s: erro: campo proibido \"%s\" encontrado no registro\n" #: src/rec-int.c:333 #, c-format msgid "%s:%s: error: %%constraint[%d] violated in record\n" msgstr "%s:%s: erro: %%constraint[%d] violada no registro\n" #: src/rec-int.c:370 #, c-format msgid "%s:%s: error: confidential field is not encrypted\n" msgstr "%s:%s: erro: campo confidencial não está criptografado\n" #: src/rec-int.c:422 #, c-format msgid "%s:%s: error: key field '%s' not found in record\n" msgstr "%s:%s: erro: o campo de chave \"%s\" não foi encontrado no registro\n" #: src/rec-int.c:431 #, c-format msgid "%s:%s: error: multiple key fields '%s' in record\n" msgstr "%s:%s: erro: múltiplos campos de chave \"%s\" no registro\n" #: src/rec-int.c:474 #, c-format msgid "%s:%s: error: duplicated key value in field '%s' in record\n" msgstr "%s:%s: erro: valor de chave duplicada no campo \"%s\" no registro\n" #: src/rec-int.c:562 #, fuzzy, c-format msgid "%s:%s: error: duplicated value in singular field '%s' in record\n" msgstr "%s:%s: erro: valor de chave duplicada no campo \"%s\" no registro\n" #: src/rec-int.c:620 #, c-format msgid "%s:%s: error: missing %%rec field in record descriptor\n" msgstr "%s:%s: erro: faltando o campo %%rec no descritor de registro\n" #: src/rec-int.c:628 #, c-format msgid "%s:%s: error: too many %%rec fields in record descriptor\n" msgstr "" "%s:%s: erro: número excessivo de campos %%rec no descritor de registro\n" #: src/rec-int.c:638 #, c-format msgid "%s:%s: error: invalid record type %s\n" msgstr "%s:%s: erro: tipo de registro %s inválido\n" #: src/rec-int.c:649 #, c-format msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" msgstr "" "%s:%s: erro: apenas um campo %%key é permitido em um descritor de registro\n" #: src/rec-int.c:659 #, c-format msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" msgstr "" "%s:%s: erro: apenas um campo %%size é permitido em um descritor de registro\n" #: src/rec-int.c:669 #, c-format msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" msgstr "" "%s:%s: erro: apenas um campo %%sort é permitido em um descritor de registro\n" #: src/rec-int.c:692 #, c-format msgid "" "%s:%s: error: expected a comma-separated list of fields before the type " "specification\n" msgstr "" "%s:%s: erro: esperava uma lista, separada por vírgula, de campos antes do " "tipo especificado\n" #: src/rec-int.c:718 src/rec-int.c:771 #, c-format msgid "%s:%s: error: the referred type %s does not exist\n" msgstr "%s:%s: erro: o tipo referido %s não existe\n" #: src/rec-int.c:730 #, c-format msgid "%s:%s: error: invalid type specification\n" msgstr "%s:%s: erro: especificação de \"type\" inválida\n" #: src/rec-int.c:745 #, c-format msgid "%s:%s: error: expected a type name before the type specification\n" msgstr "%s:%s: erro: esperava um nome de tipo antes da especificação\n" #: src/rec-int.c:783 #, c-format msgid "%s:%s: error: invalid typedef specification\n" msgstr "%s:%s: erro: especificação de \"typedef\" inválida\n" #: src/rec-int.c:805 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" msgstr "" "%s:%s: erro: o valor de %s[%zd] não é uma expressão de seleção válida\n" #: src/rec-int.c:836 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" msgstr "%s:%s: erro: o valor de %s[%zd] não é uma lista de nomes de campos\n" #: src/rec-int.c:849 #, c-format msgid "" "%s:%s: error: value for %s should be a number optionally preceded by >, <, " ">= or <=.\n" msgstr "" "%s:%s: erro: o valor de %s deveria ser um número precedido opcionalmente por " ">, <, >= ou <=.\n" #: src/rec-int.c:865 #, c-format msgid "%s:%s: error: value for %s should be a list of field names.\n" msgstr "%s:%s: erro: o valor de %s deveria ser uma lista de nomes de campos.\n" #: src/rec-int.c:893 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range, uuid " "or date\n" msgstr "" "%s:%s: erro: campo autoincrementado %s deveria ser do tipo int, range, uuid " "ou date\n" #: src/rec-int.c:895 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range or " "date\n" msgstr "" "%s:%s: erro: campo autoincrementado %s deveria ser do tipo int, range ou " "data\n" #: src/rec-int.c:978 #, c-format msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" msgstr "%s:%s: erro: não foi possível obter o descritor remoto da url %s.\n" #: src/rec-int.c:997 #, c-format msgid "%s:%s: error: could not read external descriptor from file %s.\n" msgstr "%s:%s: erro: não foi possível ler o descritor externo do arquivo %s.\n" #: src/rec-int.c:1012 #, c-format msgid "%s:%s: error: %s does not contain valid rec data.\n" msgstr "%s:%s: erro: %s não contém dados rec válidos.\n" #: src/rec-int.c:1026 #, c-format msgid "%s:%s: error: %s does not contain information for type %s.\n" msgstr "%s:%s: erro: %s não contém informação para tipo %s.\n" #: src/rec-int.c:1150 #, c-format msgid "%s: error: the number of records of type %s should be %zd.\n" msgstr "%s: erro: o número de registros do tipo %s deveria ser %zd.\n" #: src/rec-int.c:1160 #, c-format msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" msgstr "" "%s: erro: número excessivo de registros do tipo %s. Máximo admitido é %zd.\n" #: src/rec-int.c:1167 #, c-format msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" msgstr "" "%s: erro: número insuficiente de registros do tipo %s. Mínimo admitido é " "%zd.\n" #: src/rec-types.c:304 msgid "invalid integer." msgstr "inteiro inválido." #: src/rec-types.c:332 msgid "invalid 'field' value." msgstr "o valor de \"field\" é inválido." #: src/rec-types.c:353 msgid "invalid 'uuid' value." msgstr "o valor de \"uuid\" é inválido." #: src/rec-types.c:369 msgid "invalid 'bool' value." msgstr "o valor de \"bool\" é inválido." #: src/rec-types.c:390 msgid "invalid 'range' value." msgstr "o valor de \"range\" é inválido." #: src/rec-types.c:399 #, c-format msgid "expected an integer between %d and %d." msgstr "esperava um inteiro entre %d e %d." #: src/rec-types.c:419 msgid "invalid 'real' value." msgstr "o valor de \"real\" é inválido." #: src/rec-types.c:436 #, c-format msgid "value too large. Expected a size <= %zu." msgstr "valor grande demais. Esperava um tamanho <= %zu." #: src/rec-types.c:456 msgid "invalid 'line' value." msgstr "o valor de \"line\" é inválido." #: src/rec-types.c:473 msgid "value does not match the regexp." msgstr "o valor não corresponde à expressão regular." #: src/rec-types.c:492 msgid "invalid date." msgstr "data inválida." #: src/rec-types.c:506 msgid "invalid email." msgstr "e-mail inválido." #: src/rec-types.c:547 msgid "invalid enum value." msgstr "o valor de \"enum\" é inválido." #: src/rec-types.c:898 #, c-format msgid "" "internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " "in rec_type_new().\n" msgstr "" "erro interno: rec-types: obteve REC_TYPE_NONE de rec_type_parse_type_kind() " "em rec_type_new().\n" #: src/rec-utils.c:86 #, c-format msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" msgstr "" "erro interno: rec_int_rec_extract_file: erro ao compilar a expressão " "regular.\n" #: src/rec-utils.c:116 src/rec-utils.c:147 #, c-format msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" msgstr "" "erro interno: rec_int_rec_extract_url: erro ao compilar a expressão " "regular.\n" #: src/rec-utils.c:290 #, c-format msgid "internal error: rec_match: error compiling regexp.\n" msgstr "erro interno: rec_match: erro ao compilar a expressão regular.\n" #. TRANSLATORS: --help output, csv2rec synopsis. #. no-wrap #: utils/csv2rec.c:98 #, c-format msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" msgstr "Uso: csv2rec [OPÇÕES]... [ARQUIVO_CSV]\n" #. TRANSLATORS: --help output, csv2rec short description. #. no-wrap #: utils/csv2rec.c:103 msgid "Convert csv data into rec data.\n" msgstr "Converte dados csv em dados rec.\n" #. TRANSLATORS: --help output, csv2rec options. #. no-wrap #: utils/csv2rec.c:109 #, fuzzy msgid "" " -t, --type=TYPE type name for the converted records; " "if this\n" " parameter is omitted then no type is " "used.\n" " -s, --strict be strict parsing the csv file.\n" " -e, --omit-empty omit empty fields.\n" msgstr "" " -t, --type=TIPO nome do tipo para registros " "convertidos;\n" " se este parâmetro for omitido, " "então,\n" " nenhum tipo é usado.\n" " -s, --strict análise estrita do arquivo csv.\n" " -e, --omit-empty omite campos vazios.\n" #: utils/csv2rec.c:212 #, c-format msgid "invalid field name '%s' in header\n" msgstr "nome de campo inválido \"%s\" no cabeçalho\n" #: utils/csv2rec.c:221 #, fuzzy msgid "error while parsing CSV file: too many columns in row\n" msgstr "erro enquanto analisava o arquivo CSV: %s\n" #: utils/csv2rec.c:241 #, c-format msgid "" "%s: %lu: this line contains %lu fields, but %lu header fields were read\n" msgstr "" "%s: %lu: esta linha contém %lu campos, mas %lu campos de cabeçalho foram " "lidos\n" #: utils/csv2rec.c:331 utils/recdel.c:233 utils/recset.c:306 utils/recutl.c:317 #, c-format msgid "cannot read file %s\n" msgstr "não foi possível ler o arquivo %s\n" #: utils/csv2rec.c:338 msgid "failed to initialize csv parser\n" msgstr "falha ao inicializar o analisador de csv\n" #: utils/csv2rec.c:355 #, c-format msgid "error while parsing CSV file: %s\n" msgstr "erro enquanto analisava o arquivo CSV: %s\n" #. TRANSLATORS: --help output, mdb2rec synopsis. #. no-wrap #: utils/mdb2rec.c:97 #, c-format msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" msgstr "Uso: mdb2rec [OPÇÕES]... ARQUIVO_MDB [TABELA]\n" #. TRANSLATORS: --help output, mdb2rec short description. #. no-wrap #: utils/mdb2rec.c:102 msgid "Convert an mdb file into a rec file.\n" msgstr "Converte um arquivo mdb em um arquivo rec.\n" #. TRANSLATORS: --help output, mdb2rec options. #. no-wrap #: utils/mdb2rec.c:108 msgid "" " -s, --system-tables include system tables.\n" " -e, --keep-empty-fields don't prune empty fields in the rec\n" " output.\n" " -l, --list-tables dump a list of the table names " "contained\n" " in the mdb file.\n" msgstr "" " -s, --system-tables inclui tabelas do sistema.\n" " -e, --keep-empty-fields não remove campos vazios na saída da\n" " tabela rec.\n" " -l, --list-tables despeja uma lista dos nomes de " "tabelas\n" " contidos no arquivo mdb.\n" #: utils/mdb2rec.c:230 utils/mdb2rec.c:288 #, c-format msgid "failed to normalise record type name %s\n" msgstr "falha ao normalizar o nome do tipo de registro %s\n" #: utils/mdb2rec.c:236 utils/mdb2rec.c:245 #, c-format msgid "failed to normalise field name %s\n" msgstr "falha ao normalizar o nome do campo %s\n" #: utils/mdb2rec.c:307 #, c-format msgid "failed to normalise the field name %s\n" msgstr "falha ao normalizar o nome do campo %s\n" #: utils/mdb2rec.c:396 utils/recins.c:191 utils/recset.c:223 #, c-format msgid "invalid field name %s.\n" msgstr "nome de campo inválido %s.\n" #: utils/mdb2rec.c:436 #, c-format msgid "could not open file %s\n" msgstr "não foi possível abrir o arquivo %s\n" #: utils/mdb2rec.c:441 msgid "file does not appear to be an Access database\n" msgstr "o arquivo não parece ser um banco de dados Access\n" #. TRANSLATORS: --help output, rec2csv synopsis. #. no-wrap #: utils/rec2csv.c:70 #, c-format msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" msgstr "Uso: rec2csv [OPÇÕES]... [ARQUIVO_CSV]\n" #. TRANSLATORS: --help output, rec2csv short description. #. no-wrap #: utils/rec2csv.c:75 msgid "Convert rec data into csv data.\n" msgstr "Converte dados rec em dados csv.\n" #. TRANSLATORS: --help output, rec2csv options. #. no-wrap #: utils/rec2csv.c:81 msgid "" " -d, --delim=char sets the deliminator (default ',')\n" " -t, --type=TYPE record set to convert to csv; if this " "parameter\n" " is omitted then the default record " "set is used\n" " -S, --sort=FIELDS sort the output by the specified " "fields.\n" msgstr "" " -d, --delim=char define o delimitador (padrão \",\")\n" " -t, --type=TIPO conjunto de registros a ser " "convertido\n" " para csv; se este parâmetro for " "omitido,\n" " então usa o conjunto de registros " "padrão\n" " -S, --sort=CAMPOS ordena a saída pelos campos " "especificados.\n" #: utils/rec2csv.c:121 msgid "only one list of fields can be specified as a sorting criteria.\n" msgstr "" "apenas uma lista de campos pode ser especificada como um critério de " "ordenação.\n" #: utils/rec2csv.c:126 msgid "invalid field name list in -S.\n" msgstr "lista de nomes de campos inválida em -S.\n" #: utils/rec2csv.c:130 utils/recsel.c:221 utils/recsel.c:245 msgid "internal error creating fex.\n" msgstr "erro interno ao criar fex.\n" #. TRANSLATORS: --help output, recdel synopsis. #. no-wrap #: utils/recdel.c:78 #, c-format msgid "" "Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [FILE]\n" msgstr "" "Uso: recdel [OPÇÕES]... [-t TIPO] [-n NÚM | -e EXPR_REGISTRO | -q TEXTO | -m " "NÚM] [ARQUIVO]\n" #. TRANSLATORS: --help output, recdel short description. #. no-wrap #: utils/recdel.c:83 msgid "Remove (or comment out) records from a rec file.\n" msgstr "Remove (ou comenta) registros de um arquivo rec.\n" #. TRANSLATORS: --help output, recdel arguments. #. no-wrap #: utils/recdel.c:90 msgid "" " -c, --comment comment out the matching records " "instead of\n" " deleting them.\n" " --force delete even in potentially dangerous " "situations,\n" " and if the deletion is violating " "record restrictions.\n" " --no-external don't use external descriptors.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -c, --comment comenta os registros correspondentes,\n" " ao invés de excluí-los.\n" " --force exclui mesmo em situações " "potencialmente\n" " perigosas e se a exclusão estiver\n" " violando restrições do registro.\n" " --no-external não usa descritores externos.\n" " --verbose fornece um relatório detalhado se a\n" " verificação de integridade falhar.\n" #. TRANSLATORS: --help output, notes on recdel. #. no-wrap #. TRANSLATORS: --help output, notes on recfix. #. no-wrap #. TRANSLATORS: --help output, notes on recins. #. no-wrap #: utils/recdel.c:108 utils/recfix.c:149 utils/recins.c:138 msgid "" "If no FILE is specified then the command acts like a filter, getting\n" "the data from standard input and writing the result to standard output.\n" msgstr "" "Se nenhum ARQUIVO for especificado, então o comando age como um filtro,\n" "obtendo dados da saída padrão e escrevendo o resultado na saída padrão.\n" #: utils/recdel.c:123 #, c-format msgid "no records of type %s found.\n" msgstr "nenhum registro do tipo %s encontrado.\n" #: utils/recdel.c:196 #, c-format msgid "ignoring a request to delete all records of type %s.\n" msgstr "ignorando uma requisição para excluir todos registros do tipo %s.\n" #: utils/recdel.c:198 msgid "use --force if you really want to proceed, or use either -n or -e.\n" msgstr "use --force se você realmente deseja prosseguir ou use -n ou -e.\n" #: utils/recdel.c:206 msgid "invalid selection expression.\n" msgstr "expressão de seleção inválida.\n" #: utils/recdel.c:241 utils/recfix.c:344 utils/recins.c:361 utils/recset.c:312 #, c-format msgid "file %s is not writable.\n" msgstr "arquivo %s não pode ser escrito.\n" #. TRANSLATORS: --help output, recfix synopsis. #. no-wrap #: utils/recfix.c:99 #, c-format msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" msgstr "Uso: recfix [OPÇÃO]... [OPERAÇÃO] [OPÇÃO-OPERAÇÃO]... [ARQUIVO]\n" #. TRANSLATORS: --help output, recfix short description. #. no-wrap #: utils/recfix.c:104 msgid "Check and fix rec files.\n" msgstr "Verifica e corrige arquivos rec.\n" #. TRANSLATORS: --help output, recfix global arguments. #. no-wrap #: utils/recfix.c:111 msgid "" " --no-external don't use external descriptors.\n" " --force force the requested operation.\n" msgstr "" " --no-external não usa descritores externos.\n" " --force força a operação requisitada.\n" #. TRANSLATORS: --help output, recfix operations. #. no-wrap #: utils/recfix.c:121 msgid "" "Operations:\n" " --check check integrity of the specified " "file. Default.\n" " --sort sort the records in the specified " "file.\n" " --auto insert auto-generated fields in " "records missing them.\n" msgstr "" "Operações:\n" " --check verifica integridade do arquivo\n" " especificado. Padrão.\n" " --sort ordena os registros no arquivo\n" " especificado.\n" " --auto insere campos auto-gerados em " "registros\n" " que precisem deles.\n" #. TRANSLATORS: --help output, recfix operations related with encryption. #. no-wrap #: utils/recfix.c:131 msgid "" " --encrypt encrypt confidential fields in the " "specified file.\n" " --decrypt decrypt confidential fields in the " "specified file.\n" msgstr "" " --encrypt criptografa campos confidenciais no\n" " arquivo especificado.\n" " --decrypt descriptografa campos confidenciais " "no\n" " arquivo especificado.\n" #. TRANSLATORS: --help output, recfix encryption and decryption #. options. #. no-wrap #: utils/recfix.c:140 msgid "" "De/Encryption options:\n" " -s, --password=PASSWORD encrypt/decrypt with this password.\n" msgstr "" "Opções de (des)criptografia:\n" " -s, --password=SENHA criptografa/descriptografa com essa " "senha.\n" #: utils/recfix.c:184 msgid "--password|-s must be used as an operation argument.\n" msgstr "--password|-s deve ser usado como um argumento de operação.\n" #: utils/recfix.c:188 msgid "the specified operation does not require a password.\n" msgstr "a operação especificada não requer uma senha.\n" #: utils/recfix.c:191 msgid "please specify just one password.\n" msgstr "por favor, especifique apenas uma senha.\n" #: utils/recfix.c:198 utils/recfix.c:204 utils/recfix.c:210 utils/recfix.c:217 #: utils/recfix.c:223 msgid "please specify just one operation.\n" msgstr "por favor, especifique apenas uma operação.\n" #: utils/recfix.c:304 utils/recfix.c:326 utils/recfix.c:365 utils/recfix.c:435 #, fuzzy, c-format msgid "recfix: error: cannot read file %s\n" msgstr "erro: não foi possível ler o arquivo %s\n" #: utils/recfix.c:399 msgid "the database contains already encrypted fields\n" msgstr "o banco de dados já contém campos criptografados\n" #: utils/recfix.c:400 msgid "please use --force or --decrypt\n" msgstr "por favor, use --force ou --decrypt\n" #: utils/recfix.c:499 msgid "unknown operation in recfix: please report this as a bug.\n" msgstr "" "operação desconhecida em recfix: por favor, relate isto como um erro.\n" #. TRANSLATORS: --help output, recfmt synopsis. #. no-wrap #: utils/recfmt.c:64 #, c-format msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" msgstr "Uso: recfmt [OPÇÕES]... [MODELO]\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:69 msgid "Apply a template to records read from standard input.\n" msgstr "Aplica um modelo aos registros lidos da entrada padrão.\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:75 msgid "" " -f, --file=FILENAME read the template to apply from a " "file.\n" msgstr "" " -f, --file=ARQUIVO lê o modelo para aplicar de um " "arquivo.\n" #: utils/recfmt.c:107 #, c-format msgid "can't open file %s for reading.\n" msgstr "não foi possível abrir %s para leitura.\n" #: utils/recfmt.c:120 msgid "don't specify a template in the command line and -f at the same time.\n" msgstr "não especifique um modelo na linha de comando e -f ao mesmo tempo.\n" #: utils/recfmt.c:142 msgid "invalid expression in a template slot.\n" msgstr "expressão inválida em um slot de modelo.\n" #: utils/recfmt.c:146 msgid "error evaluating expression in a template slot.\n" msgstr "erro ao avaliar uma expressão em um slot de modelo.\n" #: utils/recfmt.c:178 msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" msgstr "" "recfmt_apply_template: erro ao compilar expressão regular. Por favor, relate " "isto.\n" #. TRANSLATORS: --help output, recinf synopsis. #. no-wrap #: utils/recinf.c:77 #, c-format msgid "Usage: recinf [OPTION]... [FILE]...\n" msgstr "Uso: recinf [OPÇÃO]... [ARQUIVO]...\n" #. TRANSLATORS: --help output, recinf short description. #. no-wrap #: utils/recinf.c:82 msgid "Print information about the types of records stored in the input.\n" msgstr "" "Imprime informação sobre os tipos de registros armazenados na entrada.\n" #. TRANSLATORS: --help output, recinf arguments. #. no-wrap #: utils/recinf.c:89 msgid "" " -t, --type=RECORD_TYPE print information on the records having " "the\n" " specified type.\n" " -d, --descriptor include the full record descriptors.\n" " -n, --names-only output just the names of the record files\n" " found in the input.\n" msgstr "" " -t, --type=TIPO_REGISTRO imprime informação sobre os registros " "tendo\n" " o tipo especificado.\n" " -d, --descriptor inclui os descritores de registros " "completos.\n" " -n, --names-only mostra apenas os nomes dos arquivos de\n" " registro encontrados na entrada.\n" # Alinhado com outras mensagens de saída do --help #. TRANSLATORS: --help output, recinf special options. #. no-wrap #: utils/recinf.c:102 msgid "" "Special options:\n" " -S, --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Opções especiais:\n" " -S, --print-sexps mostra dados em sexps, em vez de formato " "rec.\n" #: utils/recinf.c:234 #, c-format msgid "error: cannot read file %s\n" msgstr "erro: não foi possível ler o arquivo %s\n" #. TRANSLATORS: --help output, recins synopsis. #. no-wrap #: utils/recins.c:100 #, c-format msgid "" "Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" msgstr "" "Uso: recins [OPÇÃO]... [-t TIPO] [-n NÚM | -e EXPR_REGISTRO | -q TEXTO | -m " "NÚM] [(-f NOME -v TEXTO) | -r DADOS-REC]... [ARQUIVO]\n" #. TRANSLATORS: --help output, recins short description. #. no-wrap #: utils/recins.c:105 msgid "Insert new records in a rec database.\n" msgstr "Insere novos registros em um banco de dados rec.\n" #. TRANSLATORS: --help output, recins arguments. #. no-wrap #: utils/recins.c:111 msgid "" " -f, --field=STR field name; should be followed by a -" "v.\n" " -v, --value=STR field value; should be preceded by an -" "f.\n" " -r, --record=STR record that will be inserted in the " "file.\n" " --force insert the record even if it is " "violating\n" " record restrictions.\n" " --no-external don't use external descriptors.\n" " --no-auto don't insert auto generated fields.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -f, --field=TEXTO nome do campo; deve ser seguido por -" "v.\n" " -v, --value=TEXTO valor do campo; deve vir após um -f.\n" " -r, --record=TEXTO registro que será inserido no " "arquivo.\n" " --force insere o registro mesmo se isso foi " "uma\n" " violação das restrições do " "registro.\n" " --no-external não usa descritores externos.\n" " --no-auto não insere campos gerados " "automaticamente.\n" " --verbose fornece um relatório detalhado se a\n" " verificação de integridade falhar.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recins.c:125 msgid "" " -s, --password=STR encrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=SENHA criptografa campos confidenciais com\n" " a SENHA.\n" #: utils/recins.c:179 msgid "a -f should be followed by a -v\n" msgstr "um -f deve ser seguido por um -v\n" #: utils/recins.c:198 msgid "a -v should be preceded by a -f\n" msgstr "um -v deve vir após um -f\n" #: utils/recins.c:214 utils/recsel.c:204 msgid "more than one password was specified\n" msgstr "mais do que uma senha foi especificada\n" #: utils/recins.c:224 msgid "error while parsing the record provided by -r\n" msgstr "erro ao analisar o registro fornecido por -r\n" #: utils/recins.c:256 #, c-format msgid "please provide a value for the field %s\n" msgstr "por favor, forneça um valor para o campo %s\n" #. TRANSLATORS: --help output, recsel synopsis. #. no-wrap #: utils/recsel.c:107 #, c-format msgid "" "Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " "| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" msgstr "" "Uso: recsel [OPÇÃO]... [-t TIPO] [-j CAMPO] [-n ÃNDICES | -e EXPR_REGISTRO | " "-q TEXTO | -m NÚM] [-c | (-p|-P) EXPR_CAMPO] [ARQUIVO]...\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:112 msgid "Select and print rec data.\n" msgstr "Selecione e imprime dados rec.\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:118 msgid "" " -d, --include-descriptors print record descriptors along with " "the matched\n" " records.\n" " -C, --collapse do not section the result in records " "with newlines.\n" " -S, --sort=FIELD,... sort the output by the specified " "fields.\n" " -G, --group-by=FIELD,... group records by the specified " "fields.\n" " -U, --uniq remove duplicated fields in the output " "records.\n" msgstr "" " -d, --include-descriptors imprime descritores de registro junto\n" " com os registros correspondentes.\n" " -C, --collapse não secciona o resultado em registros\n" " com novas linhas.\n" " -S, --sort=CAMPO,... ordena a saída pelos campos.\n" " -G, --group-by=CAMPO,... agrupa registros pelos campos\n" " especificados.\n" " -U, --uniq remove campos duplicados nos " "registros\n" " de saída.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recsel.c:130 msgid "" " -s, --password=STR decrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=SENHA descriptografa campos confidenciais " "com\n" " a SENHA.\n" #: utils/recsel.c:139 msgid "" " -j, --join=FIELD perform an inner join using the " "specified field.\n" msgstr "" " -j, --join=CAMPO faz uma aglutinação, estilo inner " "join, \n" " usando o campo especificado.\n" #. TRANSLATORS: --help output, recsel output options. #. no-wrap #: utils/recsel.c:146 msgid "" "Output options:\n" " -p, --print=FIELDS comma-separated list of fields to " "print for each\n" " matching record.\n" " -P, --print-values=FIELDS as -p, but print only the values of " "the selected\n" " fields.\n" " -R, --print-row=FIELDS as -P, but separate the values with " "spaces instead\n" " of newlines.\n" " -c, --count print a count of the matching records " "instead of\n" " the records themselves.\n" msgstr "" "Opções de saída:\n" " -p, --print=CAMPOS lista separada por vírgula de campos " "a\n" " ser impressos para cada registro\n" " correspondente.\n" " -P, --print-values=CAMPOS semelhante a -p, mas imprime apenas " "os\n" " valores dos campos selecionados.\n" " -R, --print-row=CAMPOS semelhante a -P, mas separa os " "valores\n" " com espaços, ao invés de novas " "linhas.\n" " -c, --count imprime uma contagem de registros\n" " correspondentes, ao invés dos " "registros\n" " em si.\n" #. TRANSLATORS: --help output, recsel special options. #. no-wrap #: utils/recsel.c:160 msgid "" "Special options:\n" " --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Opções especiais:\n" " --print-sexps imprime os dados em sexps, ao invés " "do\n" " formato rec.\n" #: utils/recsel.c:212 msgid "only one field list can be specified as a sorting criteria.\n" msgstr "" "apenas uma lista de campos pode ser especificada como um critério de " "ordenação.\n" #: utils/recsel.c:217 msgid "invalid field names in -S.\n" msgstr "nomes de campos inválidos em -S.\n" #: utils/recsel.c:226 msgid "only one field can be specified as join criteria.\n" msgstr "" "apenas um campo pode ser especificado como um critério de aglutinação " "(join).\n" #: utils/recsel.c:229 msgid "please specify a correct field name to -j|--join.\n" msgstr "por favor, especifique um nome de campo correto para -j|--join.\n" #: utils/recsel.c:236 msgid "only one field list can be specified as a grouping criteria.\n" msgstr "" "apenas uma lista de campos pode ser especificada como um critério de " "agrupamento.\n" #: utils/recsel.c:241 msgid "invalid field names in -G.\n" msgstr "nomes de campos inválidos em -G.\n" #: utils/recsel.c:255 msgid "cannot specify -[pPR] and also -c.\n" msgstr "não é permitido especificar -[pPR] e também -c.\n" #: utils/recsel.c:266 #, c-format msgid "invalid list of fields in -%c\n" msgstr "lista de campos inválida em -%c\n" #: utils/recsel.c:272 msgid "internal error creating the field expression.\n" msgstr "erro interno ao criar a expressão de campo.\n" #: utils/recsel.c:284 #, c-format msgid "invalid aggregate function '%s'\n" msgstr "função de agregação inválida \"%s\"\n" #: utils/recsel.c:296 msgid "cannot specify -c and also -p.\n" msgstr "não é permitido especificar -c e também -p.\n" #: utils/recsel.c:309 msgid "joins can only be used when a named record set is selected.\n" msgstr "" "aglutinações (join) podem ser usadas apenas quando um conjunto de registro " "dado for selecionado.\n" #: utils/recsel.c:363 msgid "several record types found. Please use -t to specify one.\n" msgstr "" "vários tipos de registros encontrados. Por favor, use -t para especificar " "um.\n" #. TRANSLATORS: --help output, recset synopsis. #. no-wrap #: utils/recset.c:99 #, c-format msgid "Usage: recset [OPTION]... [FILE]...\n" msgstr "Uso: recset [OPÇÃO]... [ARQUIVO]...\n" #. TRANSLATORS: --help output, recset short description. #. no-wrap #: utils/recset.c:104 msgid "Alter or delete fields in records.\n" msgstr "Altera ou exclui campos em registros.\n" #. TRANSLATORS: --help output, recset options. #. no-wrap #: utils/recset.c:110 msgid "" " --no-external don't use external descriptors.\n" " --force alter the records even if violating " "record\n" " restrictions.\n" msgstr "" " --no-external não usa descritores externos.\n" " --force altera os registros mesmo se isso " "violar\n" " restrições de registros.\n" #. TRANSLATORS: --help output, recset field selection options. #. no-wrap #: utils/recset.c:123 msgid "" "Field selection options:\n" " -f, --fields=FIELDS comma-separated list of field names " "with optional\n" " subscripts.\n" msgstr "" "Opções de seleção de campos:\n" " -f, --fields=CAMPOS lista separada por vírgula de campos\n" " dados com subscritos opcionais.\n" #. TRANSLATORS: --help output, recset actions. #. no-wrap #: utils/recset.c:131 msgid "" "Actions:\n" " -s, --set=VALUE change the value of the selected " "fields.\n" " -a, --add=VALUE add the selected fields with the given " "value.\n" " -S, --set-add=VALUE change the value of the selected " "fields. If they don't\n" " exist then add a new field with that " "value.\n" " -r, --rename=NAME rename the selected fields to a given " "name. If an entire\n" " record set is selected then the " "field is renamed in the\n" " record descriptor as well.\n" " -d, --delete delete the selected fields.\n" " -c, --comment comment out the selected fields.\n" msgstr "" "Ações:\n" " -s, --set=VALOR altera o valor dos campos " "selecionados.\n" " -a, --add=VALOR adiciona campos selecionados com o " "valor.\n" " -S, --set-add=VALOR altera o valor dos campos " "selecionados.\n" " Se eles não existiram, então " "adiciona\n" " um novo campo com aquele valor.\n" " -r, --rename=NOME renomeia os campos selecionadas para " "um\n" " nome dado. Se todo um conjunto de\n" " registro for selecionado, então o\n" " campo também é renomeado no " "descritor\n" " de arquivo.\n" " -d, --delete exclui os campos selecionados.\n" " -c, --comment comenta os campos selecionados.\n" #: utils/recset.c:154 msgid "please specify some field with -f.\n" msgstr "por favor, especifique alguns campos com -f.\n" #: utils/recset.c:159 msgid "please specify just one action.\n" msgstr "por favor, especifique apenas uma ação.\n" #: utils/recset.c:193 msgid "invalid field expression in -f.\n" msgstr "expressão de campo inválido em -f.\n" #: utils/recset.c:199 msgid "creating the field expression.\n" msgstr "criando a expressão do campo.\n" #: utils/recset.c:214 msgid "" "the rename operation requires just one field with an optional subscript.\n" msgstr "" "a operação de renomeação requer apenas um campo com um subscrito opcional.\n" #: utils/recutl.c:123 #, c-format msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" msgstr "Página do %s: <http://www.gnu.org/software/recutils/>\n" #: utils/recutl.c:126 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "Ajuda geral no uso de software GNU: <http://www.gnu.org/gethelp/>\n" #. TRANSLATORS: --help output, common arguments. #. no-wrap #: utils/recutl.c:135 msgid "" " --help print a help message and exit.\n" " --version show version and exit.\n" msgstr "" " --help mostra uma mensagem de ajuda e sai.\n" " --version mostra a versão e sai.\n" #. TRANSLATORS: --help output, record selection arguments #. no-wrap #: utils/recutl.c:146 msgid "" "Record selection options:\n" " -i, --case-insensitive make strings case-insensitive in " "selection\n" " expressions.\n" " -t, --type=TYPE operate on records of the specified " "type only.\n" " -e, --expression=RECORD_EXPR selection expression.\n" " -q, --quick=STR select records with fields containing " "a string.\n" " -n, --number=NUM,... select specific records by position, " "with ranges.\n" " -m, --random=NUM select a given number of random " "records.\n" msgstr "" "Opções de seleção de registros:\n" " -i, --case-insensitive diferencia textos entre maiúsculo e\n" " minúsculo nas expressões de " "seleção.\n" " -t, --type=TIPO opera em registros apenas do tipo\n" " especificado.\n" " -e, --expression=EXPR_REGISTRO expressão de seleção.\n" " -q, --quick=TEXTO seleciona registros com campos " "contendo\n" " um texto.\n" " -n, --number=NÚM,... seleciona registros por posição, com\n" " intervalos.\n" " -m, --random=NÚM seleciona um número dado de registros\n" " aleatórios.\n" #: utils/recutl.c:171 #, c-format msgid "" "Copyright (C) %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright (C) %s Jose E. Marchesi.\n" "Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl." "html>\n" "Este é um software livre: você é livre para alterá-lo e redistribuí-lo.\n" "NÃO Hà QUALQUER GARANTIA, na máxima extensão permitida em lei.\n" #: utils/recutl.c:177 msgid "" "\n" "Written by Jose E. Marchesi." msgstr "" "\n" "Escrito por Jose E. Marchesi." #: utils/recutl.c:189 utils/recutl.c:209 msgid ": error: " msgstr ": erro: " #: utils/recutl.c:221 msgid ": warning: " msgstr ": aviso: " #: utils/recutl.c:246 #, c-format msgid "duplicated record set '%s' from %s.\n" msgstr "conjunto de registros duplicados \"%s\" de \"%s\".\n" #: utils/recutl.c:401 msgid "cannot create a unique name.\n" msgstr "não foi possível criar um nome único.\n" #: utils/recutl.c:421 #, c-format msgid "renaming file %s to %s\n" msgstr "renomeando o arquivo %s para %s\n" #: utils/recutl.c:463 msgid "operation aborted due to integrity failures.\n" msgstr "operação abortada em decorrência de falhas de integridade.\n" #: utils/recutl.c:464 msgid "use --verbose to get a detailed report.\n" msgstr "use --verbose para obter um relatório detalhado.\n" #: utils/recutl.c:471 msgid "use --force to skip the integrity check.\n" msgstr "use --force para ignorar a verificação de integridade.\n" #: utils/recutl.c:529 msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" msgstr "" "erro interno: recutl_index_list_parse: erro ao compilar a expressão " "regular.\n" #: utils/recutl.c:596 msgid "Password: " msgstr "Senha: " #: utils/recutl.c:602 msgid "Password again: " msgstr "Senha novamente: " #: utils/recutl.c:607 msgid "the provided passwords don't match.\n" msgstr "as senhas fornecidas não correspondem.\n" #: utils/recutl.h:84 utils/recutl.h:131 utils/recutl.h:133 msgid "cannot specify -e and also -n\n" msgstr "não é permitido especificar -e e também -n\n" #: utils/recutl.h:86 msgid "cannot specify -e and also -q\n" msgstr "não é permitido especificar -e e também -q\n" #: utils/recutl.h:94 msgid "invalid selection expression\n" msgstr "expressão de seleção inválida\n" #: utils/recutl.h:100 msgid "cannot specify -n and also -e\n" msgstr "não é permitido especificar -n e também -e\n" #: utils/recutl.h:102 msgid "cannot specify -n and also -q\n" msgstr "não é permitido especificar -n e também -q\n" #: utils/recutl.h:106 msgid "invalid list of indexes in -n\n" msgstr "lista de índices inválida em -n\n" #: utils/recutl.h:111 msgid "cannot specify -m and also -e\n" msgstr "não é permitido especificar -m e também -e\n" #: utils/recutl.h:113 msgid "cannot specify -m and also -q\n" msgstr "não é permitido especificar -m e também -q\n" #: utils/recutl.h:115 msgid "cannot specify -m and also -n\n" msgstr "não é permitido especificar -m e também -n\n" #~ msgid "_open_osfhandle failed" #~ msgstr "_open_osfhandle falhou" #~ msgid "cannot restore fd %d: dup2 failed" #~ msgstr "não foi possível restaurar descritor de arquivo %d: dup2 falhou" #~ msgid "" #~ "\n" #~ "Report bugs to: %s\n" #~ msgstr "" #~ "\n" #~ "Relate erros para: %s\n" #~ "Relate erros de tradução para <https://translationproject.org/team/pt_BR." #~ "html>\n" #~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n" #~ msgstr "Página do %s: <https://www.gnu.org/software/%s/>\n" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: a opção \"--%s\" não permite um argumento\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: opção desconhecida \"--%s\"\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: a opção \"-W %s\" não permite um argumento\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: a opção \"-W %s\" exige um argumento\n" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/de.po�������������������������������������������������������������������������������0000644�0000000�0000000�00000176557�14226577415�011514� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# German translation for GNU recutils. # Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the recutils package. # # Mario Blättermann <mario.blaettermann@gmail.com>, 2011-2019. msgid "" msgstr "" "Project-Id-Version: GNU recutils 1.8\n" "Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" "POT-Creation-Date: 2022-04-16 19:38+0200\n" "PO-Revision-Date: 2019-01-31 12:04+0100\n" "Last-Translator: Mario Blättermann <mario.blaettermann@gmail.com>\n" "Language-Team: German <translation-team-de@lists.sourceforge.net>\n" "Language: de\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Lokalize 18.12.1\n" "Plural-Forms: nplurals=2; plural=(n != 1)\n" #: lib/closeout.c:122 msgid "write error" msgstr "Schreibfehler" #: lib/copy-acl.c:54 lib/copy-file.c:215 #, c-format msgid "preserving permissions for %s" msgstr "Zugriffsrechte für %s werden erhalten" #: lib/copy-file.c:192 #, fuzzy, c-format msgid "error while opening %s for reading" msgstr "Datei »%s« kann nicht zum Lesen geöffnet werden.\n" #: lib/copy-file.c:196 #, fuzzy, c-format msgid "cannot open backup file %s for writing" msgstr "Datei »%s« kann nicht zum Lesen geöffnet werden.\n" #: lib/copy-file.c:200 #, fuzzy, c-format msgid "error reading %s" msgstr "Fehler: Datei %s kann nicht gelesen werden\n" #: lib/copy-file.c:204 #, c-format msgid "error writing %s" msgstr "" #: lib/copy-file.c:208 #, fuzzy, c-format msgid "error after reading %s" msgstr "Fehler: Datei %s kann nicht gelesen werden\n" #: lib/error.c:195 msgid "Unknown system error" msgstr "Unbekannter Systemfehler" #: lib/execute.c:348 lib/wait-process.c:291 lib/wait-process.c:365 #, c-format msgid "%s subprocess failed" msgstr "Unterprozess %s fehlgeschlagen" #: lib/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: Die Option »%s%s« ist nicht eindeutig\n" #: lib/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: Die Option »%s%s« ist nicht eindeutig; möglich wären:" #: lib/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: Unbekannte Option »%s%s«\n" #: lib/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: Die Option »%s%s« erlaubt kein Argument\n" #: lib/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: Die Option »%s%s« benötigt ein Argument\n" #: lib/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: Ungültige Option -- %c\n" #: lib/getopt.c:636 lib/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: Diese Option benötigt ein Argument -- »%c«\n" #: lib/obstack.c:337 lib/obstack.c:339 lib/xalloc-die.c:34 msgid "memory exhausted" msgstr "Speicher verbraucht" #: lib/openat-die.c:38 #, c-format msgid "unable to record current working directory" msgstr "" #: lib/openat-die.c:57 #, c-format msgid "failed to return to initial working directory" msgstr "" #: parse-datetime.y:440 parse-datetime.y:540 #, c-format msgid "parsed %s part: " msgstr "Teil %s eingelesen:" #: parse-datetime.y:455 #, c-format msgid "year: %04<PRIdMAX>" msgstr "Jahr: %04<PRIdMAX>" #: parse-datetime.y:483 #, c-format msgid "%s (day ordinal=%<PRIdMAX> number=%d)" msgstr "%s (Tag Ordnungszahl=%<PRIdMAX> Zahl=%d)" #: parse-datetime.y:514 #, c-format msgid "number of seconds: %<PRIdMAX>" msgstr "Anzahl der Sekunden: %<PRIdMAX>" #: parse-datetime.y:547 msgid "today/this/now\n" msgstr "heute/dies/jetzt\n" #: parse-datetime.y:612 msgid "number of seconds" msgstr "Anzahl der Sekunden" #: parse-datetime.y:625 msgid "datetime" msgstr "Datum/Zeit" #: parse-datetime.y:630 msgid "time" msgstr "Zeit" #: parse-datetime.y:635 msgid "local_zone" msgstr "Lokale_Zone" #: parse-datetime.y:640 msgid "zone" msgstr "Zone" #: parse-datetime.y:645 msgid "date" msgstr "Datum" #: parse-datetime.y:650 msgid "day" msgstr "Tag" #: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 msgid "relative" msgstr "relativ" #: parse-datetime.y:658 msgid "number" msgstr "Zahl" #: parse-datetime.y:662 msgid "hybrid" msgstr "hybrid" #: parse-datetime.y:820 #, c-format msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" msgstr "" "Warnung: Wert %<PRIdMAX> hat %<PRIdMAX> Stellen. JJJJ/MM/TT wird angenommen\n" #: parse-datetime.y:832 #, c-format msgid "" "warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" msgstr "" "Warnung: Wert %<PRIdMAX> hat weniger als 4 Stellen. MM/TT/JJ[JJ] wir " "angenommen\n" #: parse-datetime.y:1279 #, c-format msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" msgstr "Warnung: Jahresangabe %<PRIdMAX> wird auf %<PRIdMAX> korrigiert\n" #: parse-datetime.y:1289 #, c-format msgid "error: out-of-range year %<PRIdMAX>\n" msgstr "Fehler: Jahr %<PRIdMAX> außerhalb des zulässigen Bereichs\n" #: parse-datetime.y:1520 #, c-format msgid "error: unknown word '%s'\n" msgstr "Fehler: Unbekanntes Wort »%s«\n" #: parse-datetime.y:1669 msgid "error: invalid date/time value:\n" msgstr "Fehler: Ungültiger Datum/Zeit-Wert:\n" #: parse-datetime.y:1670 #, c-format msgid " user provided time: '%s'\n" msgstr " benutzerdefinierte Zeit: »%s«\n" #: parse-datetime.y:1672 #, c-format msgid " normalized time: '%s'\n" msgstr " normalisierte Zeit: »%s«\n" #: parse-datetime.y:1695 msgid " possible reasons:\n" msgstr " Mögliche Gründe:\n" #: parse-datetime.y:1697 msgid " non-existing due to daylight-saving time;\n" msgstr " nicht vorhanden wegen Sommerzeit/Winterzeit-Regelung;\n" #: parse-datetime.y:1699 msgid " invalid day/month combination;\n" msgstr " Unzulässige Tag/Monat-Kombination;\n" #: parse-datetime.y:1700 msgid " numeric values overflow;\n" msgstr " numerischer Wertüberlauf;\n" #: parse-datetime.y:1701 msgid "incorrect timezone" msgstr "Inkorrekte Zeitzone" #: parse-datetime.y:1702 msgid "missing timezone" msgstr "Zeitzone fehlt" #: parse-datetime.y:1810 msgid "error: initial year out of range\n" msgstr "Fehler: initiales Jahr außerhalb des zulässigen Bereichs\n" #: parse-datetime.y:1905 msgid "error: parsing failed\n" msgstr "Fehler: Einlesen gescheitert\n" #: parse-datetime.y:1906 #, c-format msgid "error: parsing failed, stopped at '%s'\n" msgstr "Fehler: Einlesen fehlgeschlagen, gestoppt bei »%s«\n" #: parse-datetime.y:1916 msgid "input timezone: " msgstr "Eingabe-Zeitzone: " #: parse-datetime.y:1919 #, c-format msgid "'@timespec' - always UTC" msgstr "'@timespec' - immer UTC" #: parse-datetime.y:1921 #, c-format msgid "parsed date/time string" msgstr "Datum/Zeit-Zeichenkette ausgewertet" #: parse-datetime.y:1925 #, c-format msgid "TZ=\"%s\" in date string" msgstr "TZ=»%s« in Datum-Zeichenkette" #: parse-datetime.y:1929 #, c-format msgid "TZ=\"UTC0\" environment value or -u" msgstr "Wert der Umgebungsvariable TZ=»UTC0« oder -u" #: parse-datetime.y:1932 #, c-format msgid "TZ=\"%s\" environment value" msgstr "Wert der Umgebungsvariable TZ=»%s«" #: parse-datetime.y:1935 #, c-format msgid "system default" msgstr "Systemvorgabe" #: parse-datetime.y:1977 msgid "error: year, month, or day overflow\n" msgstr "Fehler: Überlauf in Jahr, Monat oder Tag\n" #: parse-datetime.y:1988 #, c-format msgid "error: invalid hour %<PRIdMAX>%s\n" msgstr "Fehler: Ungültige Stunde %<PRIdMAX>%s\n" #: parse-datetime.y:1996 #, c-format msgid "using specified time as starting value: '%s'\n" msgstr "Angegebene Zeit wird als Startwert verwendet: »%s«\n" #: parse-datetime.y:1997 #, c-format msgid "using current time as starting value: '%s'\n" msgstr "Aktuelle Zeit wird als Startwert verwendet: »%s«\n" #: parse-datetime.y:2051 #, c-format msgid "error: tzalloc (\"%s\") failed\n" msgstr "Fehler: tzalloc (»%s«) ist fehlgeschlagen\n" #: parse-datetime.y:2095 #, c-format msgid "" "error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " "date: '%s'\n" msgstr "" "Fehlerr: Tag »%s« (Tag Ordnungszahl=%<PRIdMAX> Zahl=%d) ergab ein ungültiges " "Datum: »%s«\n" #: parse-datetime.y:2106 #, c-format msgid "new start date: '%s' is '%s'\n" msgstr "Neues Startdatum: »%s« ist »%s«\n" #: parse-datetime.y:2115 #, c-format msgid "using current date as starting value: '%s'\n" msgstr "Aktuelles Datum wird als Startwert verwendet: »%s«\n" #: parse-datetime.y:2119 #, c-format msgid "warning: day (%s) ignored when explicit dates are given\n" msgstr "" "Warnung: Tag (%s) wird ignoriert, wenn explizite Daten angegeben sind\n" #: parse-datetime.y:2123 #, c-format msgid "starting date/time: '%s'\n" msgstr "Startdatum/-zeit: »%s«\n" #: parse-datetime.y:2133 msgid "" "warning: when adding relative months/years, it is recommended to specify the " "15th of the months\n" msgstr "" "Warnung: Beim Hinzufügen relativer Monate/Jahre wird empfohlen, den 15. der " "Monate anzugeben\n" #: parse-datetime.y:2138 msgid "warning: when adding relative days, it is recommended to specify noon\n" msgstr "" "Warnung: Beim Hinzufügen relativer Tage wird empfohlen, Mittag (12 Uhr) " "anzugeben\n" #: parse-datetime.y:2148 #, c-format msgid "error: %s:%d\n" msgstr "Fehler: %s:%d\n" #: parse-datetime.y:2163 #, c-format msgid "error: adding relative date resulted in an invalid date: '%s'\n" msgstr "" "Fehler: Hinzufügen des relativen Datums ergab ein ungültiges Datum: »%s«\n" #: parse-datetime.y:2172 #, c-format msgid "" "after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " "days),\n" msgstr "" "nach Datumsanpassung (%+<PRIdMAX> Jahre, %+<PRIdMAX> Monate, %+<PRIdMAX> " "Tage),\n" #: parse-datetime.y:2176 #, c-format msgid " new date/time = '%s'\n" msgstr " Neue(s) Datum/Zeit = »%s«\n" #: parse-datetime.y:2195 msgid "warning: daylight saving time changed after date adjustment\n" msgstr "" "Warnung: Sommerzeit/Winterzeit wurde nach der Datumsanpassung geändert\n" #: parse-datetime.y:2214 msgid "warning: month/year adjustment resulted in shifted dates:\n" msgstr "Warnung: Anpassung von Monat/Jahr ergab Datumsverschiebung:\n" #: parse-datetime.y:2217 #, c-format msgid " adjusted Y M D: %s %02d %02d\n" msgstr " angepasstes J M T: %s %02d %02d\n" #: parse-datetime.y:2219 #, c-format msgid " normalized Y M D: %s %02d %02d\n" msgstr " Normalisiertes J M D: %s %02d %02d\n" #: parse-datetime.y:2248 #, c-format msgid "error: timezone %d caused time_t overflow\n" msgstr "Fehler: Zeitz %d verursachte Überlauf in time_t\n" #: parse-datetime.y:2258 #, c-format msgid "'%s' = %<PRIdMAX> epoch-seconds\n" msgstr "»%s« = %<PRIdMAX> Sekunden seit der Epoche\n" #: parse-datetime.y:2286 msgid "error: adding relative time caused an overflow\n" msgstr "Fehler: Hinzufügen relativer Zeit verursachte einen Überlauf\n" #: parse-datetime.y:2297 #, c-format msgid "" "after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " "seconds, %+d ns),\n" msgstr "" "nach der Zeitanpassung (%+<PRIdMAX> Stunden, %+<PRIdMAX> Minuten, " "%+<PRIdMAX> Sekunden, %+d ns),\n" #: parse-datetime.y:2303 #, c-format msgid " new time = %<PRIdMAX> epoch-seconds\n" msgstr " Neue Zeit = %<PRIdMAX> Sekunden seit der Epoche\n" #: parse-datetime.y:2319 msgid "warning: daylight saving time changed after time adjustment\n" msgstr "Warnung: Sommerzeit/Winterzeit wurde nach der Zeitanpassung geändert\n" #: parse-datetime.y:2329 msgid "timezone: system default\n" msgstr "Zeitzone: Systemvorgabe\n" #: parse-datetime.y:2331 msgid "timezone: Universal Time\n" msgstr "Zeitzone: Weltzeit (UTC)\n" #: parse-datetime.y:2333 #, c-format msgid "timezone: TZ=\"%s\" environment value\n" msgstr "Zeitzone: Wert der Umgebungsvariable TZ=»%s«\n" #: parse-datetime.y:2337 #, c-format msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" msgstr "Final: %<PRIdMAX>.%09d (Sekunden seit der Epoche)\n" #: parse-datetime.y:2343 #, c-format msgid "final: %s (UTC)\n" msgstr "Final: %s (UTC)\n" #: parse-datetime.y:2358 #, c-format msgid "final: %s (UTC%s)\n" msgstr "Final: %s (UTC%s)\n" #: parse-datetime.y:2362 #, c-format msgid "final: %s (unknown time zone offset)\n" msgstr "Final: %s (unbekannter Zeitzonenversatz)\n" #. TRANSLATORS: #. Get translations for open and closing quotation marks. #. The message catalog should translate "`" to a left #. quotation mark suitable for the locale, and similarly for #. "'". For example, a French Unicode local should translate #. these to U+00AB (LEFT-POINTING DOUBLE ANGLE #. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE #. QUOTATION MARK), respectively. #. #. If the catalog has no translation, we will try to #. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and #. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the #. current locale is not Unicode, locale_quoting_style #. will quote 'like this', and clocale_quoting_style will #. quote "like this". You should always include translations #. for "`" and "'" even if U+2018 and U+2019 are appropriate #. for your locale. #. #. If you don't know what to put here, please see #. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> #. and use glyphs suitable for your language. #: lib/quotearg.c:355 msgid "`" msgstr "»" #: lib/quotearg.c:356 msgid "'" msgstr "«" #: lib/regcomp.c:122 msgid "Success" msgstr "Erfolg" #: lib/regcomp.c:125 msgid "No match" msgstr "Kein Treffer" #: lib/regcomp.c:128 msgid "Invalid regular expression" msgstr "Ungültiger regulärer Ausdruck" #: lib/regcomp.c:131 msgid "Invalid collation character" msgstr "Ungültiges Sortierzeichen" #: lib/regcomp.c:134 msgid "Invalid character class name" msgstr "Ungültiger Name für Zeichenklasse" #: lib/regcomp.c:137 msgid "Trailing backslash" msgstr "Angehängter Backslash" #: lib/regcomp.c:140 msgid "Invalid back reference" msgstr "Ungültige Rückreferenz" #: lib/regcomp.c:143 msgid "Unmatched [, [^, [:, [., or [=" msgstr "Öffnende [, [^, [:, [., oder [= ohne schließende." #: lib/regcomp.c:146 msgid "Unmatched ( or \\(" msgstr "Öffnende ( oder \\( ohne schließende." #: lib/regcomp.c:149 msgid "Unmatched \\{" msgstr "Öffnende \\{ ohne schließende." #: lib/regcomp.c:152 msgid "Invalid content of \\{\\}" msgstr "Ungültiger Inhalt von \\{\\}" #: lib/regcomp.c:155 msgid "Invalid range end" msgstr "Ungültiges Bereichsende" #: lib/regcomp.c:158 msgid "Memory exhausted" msgstr "Speicher verbraucht" #: lib/regcomp.c:161 msgid "Invalid preceding regular expression" msgstr "Ungültiger vorhergehender regulärer Ausdruck" #: lib/regcomp.c:164 msgid "Premature end of regular expression" msgstr "Vorzeitiges Ende des regulären Ausdrucks" #: lib/regcomp.c:167 msgid "Regular expression too big" msgstr "Regulärer Ausdruck zu groß" #: lib/regcomp.c:170 msgid "Unmatched ) or \\)" msgstr "Schließende ) oder \\)" #: lib/regcomp.c:650 msgid "No previous regular expression" msgstr "Kein vorhergehender regulärer Ausdruck" #: lib/set-acl.c:46 #, c-format msgid "setting permissions for %s" msgstr "Zugriffsrechte für %s werden gesetzt" #: lib/version-etc.c:73 #, c-format msgid "Packaged by %s (%s)\n" msgstr "Gepackt von %s (%s)\n" #: lib/version-etc.c:76 #, c-format msgid "Packaged by %s\n" msgstr "Gepackt von %s\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: lib/version-etc.c:83 msgid "(C)" msgstr "(C)" #. TRANSLATORS: The %s placeholder is the web address of the GPL license. #: lib/version-etc.c:88 #, fuzzy, c-format msgid "" "License GPLv3+: GNU GPL version 3 or later <%s>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "\n" "Lizenz GPLv3+: GNU GPL Version 3 oder neuer <http://gnu.org/licenses/gpl." "html>.\n" "Dies ist freie Software: Sie können Sie frei verändern und weitergeben.\n" "Es gibt KEINE GARANTIE, soweit gesetzlich zulässig.\n" #. TRANSLATORS: %s denotes an author name. #: lib/version-etc.c:105 #, c-format msgid "Written by %s.\n" msgstr "Geschrieben von %s.\n" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:109 #, c-format msgid "Written by %s and %s.\n" msgstr "Geschrieben von %s und %s.\n" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:113 #, c-format msgid "Written by %s, %s, and %s.\n" msgstr "Geschrieben von %s, %s und %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:120 #, c-format msgid "" "Written by %s, %s, %s,\n" "and %s.\n" msgstr "" "Geschrieben von %s, %s, %s\n" "und %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:127 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, and %s.\n" msgstr "" "Geschrieben von %s, %s, %s,\n" "%s und %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:134 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, and %s.\n" msgstr "" "Geschrieben von %s, %s, %s,\n" "%s, %s und %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:142 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, and %s.\n" msgstr "" "Geschrieben von %s, %s, %s,\n" "%s, %s, %s und %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:150 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "and %s.\n" msgstr "" "Geschrieben von %s, %s, %s,\n" "%s, %s, %s, %s\n" "und %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:159 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, and %s.\n" msgstr "" "Geschrieben von %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s und %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:170 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s, and others.\n" msgstr "" "Geschrieben von %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s und weiteren.\n" #. TRANSLATORS: The placeholder indicates the bug-reporting address #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for translation #. bugs (typically your translation team's web or email address). #. TRANSLATORS: --help output 5+ (reports) #. TRANSLATORS: the placeholder indicates the bug-reporting address #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap #: lib/version-etc.c:249 utils/recutl.c:114 #, c-format msgid "Report bugs to: %s\n" msgstr "" "Melden Sie Fehler an: %s\n" "Fehler in der Übersetzung melden Sie bitte an:\n" "<translation-team-de@lists.sourceforge.net>\n" #: lib/version-etc.c:251 utils/recutl.c:117 #, c-format msgid "Report %s bugs to: %s\n" msgstr "Fehler in %s bitte melden an: %s\n" #: lib/version-etc.c:255 lib/version-etc.c:257 utils/recutl.c:121 #, c-format msgid "%s home page: <%s>\n" msgstr "Webseite von %s: <%s>\n" #: lib/version-etc.c:260 #, fuzzy, c-format msgid "General help using GNU software: <%s>\n" msgstr "Allgemeine Hilfe zu GNU-Software: <https://www.gnu.org/gethelp/>\n" #: lib/wait-process.c:232 lib/wait-process.c:264 lib/wait-process.c:326 #, c-format msgid "%s subprocess" msgstr "Unterprozess %s" #: lib/wait-process.c:283 lib/wait-process.c:355 #, c-format msgid "%s subprocess got fatal signal %d" msgstr "Unterprozess %s hat das fatale Signal %d erhalten" #: src/rec-fex.c:726 #, c-format msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" msgstr "" "Interner Fehler: REC_FEX_MAX_ELEMS überschritten. Bitte einen Fehlerbericht " "senden.\n" #: src/rec-int.c:132 src/rec-int.c:186 src/rec-int.c:243 src/rec-int.c:287 #: utils/recutl.c:199 msgid "out of memory\n" msgstr "Nicht genügend freier Speicher\n" #: src/rec-int.c:147 #, c-format msgid "%s:%s: error: mandatory field '%s' not found in record\n" msgstr "%s:%s: Fehler: Obligatorisches Feld »%s« nicht im Datensatz gefunden\n" #: src/rec-int.c:210 #, c-format msgid "%s:%s: error: field '%s' not allowed in this record set\n" msgstr "%s:%s: Fehler: Feld »%s« ist in diesem Datensatz nicht erlaubt\n" #: src/rec-int.c:257 #, c-format msgid "%s:%s: error: field '%s' should be unique in this record\n" msgstr "%s:%s: Fehler: Feld »%s« sollte in diesem Datensatz einmalig sein\n" #: src/rec-int.c:301 #, c-format msgid "%s:%s: error: prohibited field '%s' found in record\n" msgstr "%s:%s: Fehler: Unzulässiges Feld »%s« im Datensatz gefunden\n" #: src/rec-int.c:333 #, c-format msgid "%s:%s: error: %%constraint[%d] violated in record\n" msgstr "%s:%s: Fehler: %%constraint[%d] wurde im Datensatz beschädigt\n" #: src/rec-int.c:370 #, c-format msgid "%s:%s: error: confidential field is not encrypted\n" msgstr "%s:%s: Fehler: vertrauliches Feld ist nicht verschlüsselt\n" #: src/rec-int.c:422 #, c-format msgid "%s:%s: error: key field '%s' not found in record\n" msgstr "%s:%s: Fehler: Schlüsselfeld »%s« nicht im Datensatz gefunden\n" #: src/rec-int.c:431 #, c-format msgid "%s:%s: error: multiple key fields '%s' in record\n" msgstr "%s:%s: Fehler: Mehrere Schlüsselfelder »%s« im Datensatz\n" #: src/rec-int.c:474 #, c-format msgid "%s:%s: error: duplicated key value in field '%s' in record\n" msgstr "%s:%s: Fehler: Doppelter Schlüsselwert im Feld »%s« im Datensatz\n" #: src/rec-int.c:562 #, fuzzy, c-format msgid "%s:%s: error: duplicated value in singular field '%s' in record\n" msgstr "%s:%s: Fehler: Doppelter Schlüsselwert im Feld »%s« im Datensatz\n" #: src/rec-int.c:620 #, c-format msgid "%s:%s: error: missing %%rec field in record descriptor\n" msgstr "%s:%s: Fehler: Fehlendes %%rec-Feld im Datensatzdeskriptor\n" #: src/rec-int.c:628 #, c-format msgid "%s:%s: error: too many %%rec fields in record descriptor\n" msgstr "%s:%s: Fehler: Zu viele %%rec-Felder im Datensatzdeskriptor\n" #: src/rec-int.c:638 #, c-format msgid "%s:%s: error: invalid record type %s\n" msgstr "%s:%s: Fehler: Ungültiger Datensatztyp %s\n" #: src/rec-int.c:649 #, c-format msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" msgstr "%s:%s: Fehler: Nur ein %%key-Feld im Datensatzdeskriptor zulässig\n" #: src/rec-int.c:659 #, c-format msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" msgstr "%s:%s: Fehler: Nur ein %%size-Feld im Datensatzdeskriptor zulässig\n" #: src/rec-int.c:669 #, c-format msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" msgstr "%s:%s: Fehler: Nur ein %%sort-Feld im Datensatzdeskriptor zulässig\n" #: src/rec-int.c:692 #, c-format msgid "" "%s:%s: error: expected a comma-separated list of fields before the type " "specification\n" msgstr "" "%s:%s: Fehler: eine durch Kommata getrennte Feldliste wurde vor der " "Typangabe erwartet\n" #: src/rec-int.c:718 src/rec-int.c:771 #, c-format msgid "%s:%s: error: the referred type %s does not exist\n" msgstr "%s:%s: Fehler: Der Bezugstyp %s existiert nicht\n" #: src/rec-int.c:730 #, c-format msgid "%s:%s: error: invalid type specification\n" msgstr "%s:%s: Fehler: Ungültige Typ-Angabe\n" #: src/rec-int.c:745 #, c-format msgid "%s:%s: error: expected a type name before the type specification\n" msgstr "%s:%s: Fehler: Vor der Typangabe wurde ein Typname erwartet\n" #: src/rec-int.c:783 #, c-format msgid "%s:%s: error: invalid typedef specification\n" msgstr "%s:%s: Fehler: Ungültige typedef-Angabe\n" #: src/rec-int.c:805 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" msgstr "%s:%s: Fehler: Wert für %s[%zd] ist kein gültiger Auswahlausdruck\n" #: src/rec-int.c:836 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" msgstr "%s:%s: Fehler: Wert für %s[%zd] ist keine Feldnamenliste\n" #: src/rec-int.c:849 #, c-format msgid "" "%s:%s: error: value for %s should be a number optionally preceded by >, <, " ">= or <=.\n" msgstr "" "%s:%s: Fehler: Wert von %s sollte eine Zahl sein, der optional ein >, <, >= " "oder <= vorangestellt ist.\n" #: src/rec-int.c:865 #, c-format msgid "%s:%s: error: value for %s should be a list of field names.\n" msgstr "%s:%s: Fehler: Wert für %s sollte eine Feldnamenliste sein.\n" #: src/rec-int.c:893 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range, uuid " "or date\n" msgstr "" "%s:%s: Fehler: Automatisch hochgezähltes Feld %s sollte vom Typ int, range, " "uuid oder date sein\n" #: src/rec-int.c:895 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range or " "date\n" msgstr "" "%s:%s: Fehler: Automatisch hochgezähltes Feld %s sollte vom Typ int, range " "oder date sein\n" #: src/rec-int.c:978 #, c-format msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" msgstr "" "%s:%s: Fehler: Entfernter Deskriptor von Adresse %s konnte nicht geholt " "werden.\n" #: src/rec-int.c:997 #, c-format msgid "%s:%s: error: could not read external descriptor from file %s.\n" msgstr "" "%s:%s: Fehler: Externer Deskriptor aus Datei %s konnte nicht geholt werden.\n" #: src/rec-int.c:1012 #, c-format msgid "%s:%s: error: %s does not contain valid rec data.\n" msgstr "%s:%s: Fehler: %s enthält keine gültigen rec-Daten.\n" #: src/rec-int.c:1026 #, c-format msgid "%s:%s: error: %s does not contain information for type %s.\n" msgstr "%s:%s: Fehler: %s enthält keine Informationen für Typ %s.\n" #: src/rec-int.c:1150 #, c-format msgid "%s: error: the number of records of type %s should be %zd.\n" msgstr "%s: Fehler: Die Anzahl der Datensätze des Typs %s sollte %zd sein.\n" #: src/rec-int.c:1160 #, c-format msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" msgstr "" "%s: Fehler: Zu viele Datensätze des Typs %s. Maximal erlaubt sind %zd.\n" #: src/rec-int.c:1167 #, c-format msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" msgstr "" "%s: Fehler: Zu wenige Datensätze des Typs %s. Minimal erforderlich sind " "%zd.\n" #: src/rec-types.c:304 msgid "invalid integer." msgstr "Ungültige Ganzzahl." #: src/rec-types.c:332 msgid "invalid 'field' value." msgstr "Ungültiger »field«-Wert." #: src/rec-types.c:353 msgid "invalid 'uuid' value." msgstr "Ungültiger »uuid«-Wert." #: src/rec-types.c:369 msgid "invalid 'bool' value." msgstr "Ungültiger »bool«-Wert." #: src/rec-types.c:390 msgid "invalid 'range' value." msgstr "Ungültiger »range«-Wert." #: src/rec-types.c:399 #, c-format msgid "expected an integer between %d and %d." msgstr "Ganzzahl zwischen %d und %d wurde erwartet." #: src/rec-types.c:419 msgid "invalid 'real' value." msgstr "Ungültiger »real«-Wert." #: src/rec-types.c:436 #, c-format msgid "value too large. Expected a size <= %zu." msgstr "Wert zu groß. Größe <= %zu wurde erwartet." #: src/rec-types.c:456 msgid "invalid 'line' value." msgstr "Ungültiger »line«-Wert." #: src/rec-types.c:473 msgid "value does not match the regexp." msgstr "Wert passt nicht auf den regulären Ausdruck." #: src/rec-types.c:492 msgid "invalid date." msgstr "Ungültiges Datum." #: src/rec-types.c:506 msgid "invalid email." msgstr "Ungültige E-Mail." #: src/rec-types.c:547 msgid "invalid enum value." msgstr "Ungültiger Aufzählungswert." #: src/rec-types.c:898 #, c-format msgid "" "internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " "in rec_type_new().\n" msgstr "" "Interner Fehler: rec-types: REC_TYPE_NONE von rec_type_parse_type_kind() " "erhalten in rec_type_new().\n" #: src/rec-utils.c:86 #, c-format msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" msgstr "" "Interner Fehler: rec_int_rec_extract_file:\n" "Fehler beim Kompilieren des regulären Ausdrucks.\n" #: src/rec-utils.c:116 src/rec-utils.c:147 #, c-format msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" msgstr "" "Interner Fehler: rec_int_rec_extract_url:\n" "Fehler beim Kompilieren des regulären Ausdrucks.\n" #: src/rec-utils.c:290 #, c-format msgid "internal error: rec_match: error compiling regexp.\n" msgstr "" "Interner Fehler: rec_match:\n" "Fehler beim Kompilieren des regulären Ausdrucks.\n" #. TRANSLATORS: --help output, csv2rec synopsis. #. no-wrap #: utils/csv2rec.c:98 #, c-format msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" msgstr "Aufruf: csv2rec [OPTIONEN] … [CSV-DATEI]\n" #. TRANSLATORS: --help output, csv2rec short description. #. no-wrap #: utils/csv2rec.c:103 msgid "Convert csv data into rec data.\n" msgstr "CSV-Daten in rec-Daten-umwandeln.\n" #. TRANSLATORS: --help output, csv2rec options. #. no-wrap #: utils/csv2rec.c:109 #, fuzzy msgid "" " -t, --type=TYPE type name for the converted records; " "if this\n" " parameter is omitted then no type is " "used.\n" " -s, --strict be strict parsing the csv file.\n" " -e, --omit-empty omit empty fields.\n" msgstr "" " -t, --type Typname der konvertierten Datensätze. " "Falls\n" " dieser Parameter fehlt, wird kein " "Typ\n" " verwendet.\n" " -s, --strict CSV-Datei strikt verarbeiten.\n" " -e, --omit-empty Leere Felder weglassen.\n" #: utils/csv2rec.c:212 #, c-format msgid "invalid field name '%s' in header\n" msgstr "Ungültiger Feldname »%s« in Header\n" #: utils/csv2rec.c:221 #, fuzzy msgid "error while parsing CSV file: too many columns in row\n" msgstr "Fehler beim Einlesen der CSV-Datei: %s\n" #: utils/csv2rec.c:241 #, c-format msgid "" "%s: %lu: this line contains %lu fields, but %lu header fields were read\n" msgstr "" "%s: %lu: diese Zeile enthält %lu Felder, aber %lu Kopfzeilenfelder wurden " "gelesen\n" #: utils/csv2rec.c:331 utils/recdel.c:233 utils/recset.c:306 utils/recutl.c:317 #, c-format msgid "cannot read file %s\n" msgstr "Datei %s kann nicht gelesen werden\n" #: utils/csv2rec.c:338 msgid "failed to initialize csv parser\n" msgstr "Initialisieren des CSV-Parsers ist gescheitert\n" #: utils/csv2rec.c:355 #, c-format msgid "error while parsing CSV file: %s\n" msgstr "Fehler beim Einlesen der CSV-Datei: %s\n" #. TRANSLATORS: --help output, mdb2rec synopsis. #. no-wrap #: utils/mdb2rec.c:97 #, c-format msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" msgstr "Aufruf: mdb2rec [OPTIONEN] … MDB-DATEI [TABELLE]\n" #. TRANSLATORS: --help output, mdb2rec short description. #. no-wrap #: utils/mdb2rec.c:102 msgid "Convert an mdb file into a rec file.\n" msgstr "Eine mdb-Datei in eine rec-Datei umwandeln.\n" #. TRANSLATORS: --help output, mdb2rec options. #. no-wrap #: utils/mdb2rec.c:108 msgid "" " -s, --system-tables include system tables.\n" " -e, --keep-empty-fields don't prune empty fields in the rec\n" " output.\n" " -l, --list-tables dump a list of the table names " "contained\n" " in the mdb file.\n" msgstr "" " -s, --system-tables Systemtabellen einschließen.\n" " -e, --keep-empty-fields Leere Felder in rec-Ausgabe\n" " nicht weglassen\n" " -l, --list-tables Eine Liste der in der mdb-Datei " "enthaltenen\n" " Tabellennamen ausgeben.\n" #: utils/mdb2rec.c:230 utils/mdb2rec.c:288 #, c-format msgid "failed to normalise record type name %s\n" msgstr "Datensatztypname %s konnte nicht normalisiert werden\n" #: utils/mdb2rec.c:236 utils/mdb2rec.c:245 #, c-format msgid "failed to normalise field name %s\n" msgstr "Normalisieren des Feldnamens %s fehlgeschlagen\n" #: utils/mdb2rec.c:307 #, c-format msgid "failed to normalise the field name %s\n" msgstr "Feldname %s konnte nicht normalisiert werden\n" #: utils/mdb2rec.c:396 utils/recins.c:191 utils/recset.c:223 #, c-format msgid "invalid field name %s.\n" msgstr "Ungültiger Feldname %s.\n" #: utils/mdb2rec.c:436 #, c-format msgid "could not open file %s\n" msgstr "Datei %s konnte nicht geöffnet werden\n" #: utils/mdb2rec.c:441 msgid "file does not appear to be an Access database\n" msgstr "Datei scheint keine Access-Datenbank zu sein\n" #. TRANSLATORS: --help output, rec2csv synopsis. #. no-wrap #: utils/rec2csv.c:70 #, c-format msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" msgstr "Aufruf: rec2csv [OPTIONEN] … [REC-DATEI]\n" #. TRANSLATORS: --help output, rec2csv short description. #. no-wrap #: utils/rec2csv.c:75 msgid "Convert rec data into csv data.\n" msgstr "REC-Daten in CSV-Daten-umwandeln.\n" #. TRANSLATORS: --help output, rec2csv options. #. no-wrap #: utils/rec2csv.c:81 msgid "" " -d, --delim=char sets the deliminator (default ',')\n" " -t, --type=TYPE record set to convert to csv; if this " "parameter\n" " is omitted then the default record " "set is used\n" " -S, --sort=FIELDS sort the output by the specified " "fields.\n" msgstr "" " -d, --delim=ZEICHEN legt das Trennzeichen fest (Vorgabe " "ist »,«)\n" " -t, --type=TYP Datensatz zum Umwandeln in csv; Falls " "dieser\n" " Parameter fehlt, wird der " "vorgegebene Datensatz\n" " verwendet.\n" " -S, --sort=FELDER sortiert die Ausgabe anhand der " "angegebenen Felder.\n" #: utils/rec2csv.c:121 msgid "only one list of fields can be specified as a sorting criteria.\n" msgstr "Nur eine Feldliste kann als Sortierkriterium angegeben werden.\n" #: utils/rec2csv.c:126 msgid "invalid field name list in -S.\n" msgstr "Ungültige Feldnamenliste in -S.\n" #: utils/rec2csv.c:130 utils/recsel.c:221 utils/recsel.c:245 msgid "internal error creating fex.\n" msgstr "Interner Fehler beim Erstellen des Feldausdrucks.\n" #. TRANSLATORS: --help output, recdel synopsis. #. no-wrap #: utils/recdel.c:78 #, c-format msgid "" "Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [FILE]\n" msgstr "" "Aufruf: recdel [OPTIONEN] … [-t TYP] [-n ZAHL | -e DATENSATZ_AUSDR | -q STR " "| -m ZAHL] [DATEI]\n" #. TRANSLATORS: --help output, recdel short description. #. no-wrap #: utils/recdel.c:83 msgid "Remove (or comment out) records from a rec file.\n" msgstr "Entfernen oder Auskommentieren von Datensätzen einer rec-Datei.\n" #. TRANSLATORS: --help output, recdel arguments. #. no-wrap #: utils/recdel.c:90 msgid "" " -c, --comment comment out the matching records " "instead of\n" " deleting them.\n" " --force delete even in potentially dangerous " "situations,\n" " and if the deletion is violating " "record restrictions.\n" " --no-external don't use external descriptors.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -c, --comment Die betreffenden Datensätze " "auskommentieren,\n" " anstatt sie zu löschen.\n" " --force Auch in potenziell gefährlichen " "Situationen löschen,\n" " auch wenn der Löschvorgang " "Einschränkungen des\n" " Datensatzes berührt.\n" " --no-external Keine externen Deskriptoren " "verwenden.\n" " --verbose Einen ausführlichen Bericht ausgeben, " "falls\n" " die Integritätsprüfung scheitert.\n" #. TRANSLATORS: --help output, notes on recdel. #. no-wrap #. TRANSLATORS: --help output, notes on recfix. #. no-wrap #. TRANSLATORS: --help output, notes on recins. #. no-wrap #: utils/recdel.c:108 utils/recfix.c:149 utils/recins.c:138 msgid "" "If no FILE is specified then the command acts like a filter, getting\n" "the data from standard input and writing the result to standard output.\n" msgstr "" "Falls keine DATEI angegeben wird, arbeitet der Befehl als Filter,\n" "wobei die Daten aus der Standardeingabe geholt werden und das\n" "Ergebnis in die Standardausgabe geschrieben wird.\n" #: utils/recdel.c:123 #, c-format msgid "no records of type %s found.\n" msgstr "Keine Datensätze vom Typ %s gefunden.\n" #: utils/recdel.c:196 #, c-format msgid "ignoring a request to delete all records of type %s.\n" msgstr "Anfrage zum Löschen aller Datensätze des Typs %s wird ignoriert.\n" #: utils/recdel.c:198 msgid "use --force if you really want to proceed, or use either -n or -e.\n" msgstr "" "Verwenden Sie --force, wenn Sie wirklich fortsetzen wollen, ansonsten -n " "oder -e.\n" #: utils/recdel.c:206 msgid "invalid selection expression.\n" msgstr "Ungültiger Auswahlausdruck.\n" #: utils/recdel.c:241 utils/recfix.c:344 utils/recins.c:361 utils/recset.c:312 #, c-format msgid "file %s is not writable.\n" msgstr "Datei %s ist schreibgeschützt.\n" #. TRANSLATORS: --help output, recfix synopsis. #. no-wrap #: utils/recfix.c:99 #, c-format msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" msgstr "Aufruf: recfix [OPTION] … [OPERATION] [OP_OPTION] … [DATEI]\n" #. TRANSLATORS: --help output, recfix short description. #. no-wrap #: utils/recfix.c:104 msgid "Check and fix rec files.\n" msgstr "rec-Dateien prüfen und korrigieren.\n" #. TRANSLATORS: --help output, recfix global arguments. #. no-wrap #: utils/recfix.c:111 msgid "" " --no-external don't use external descriptors.\n" " --force force the requested operation.\n" msgstr "" " --no-external Keine externen Deskriptoren " "verwenden.\n" " --force Die angeforderte Operation erzwingen.\n" #. TRANSLATORS: --help output, recfix operations. #. no-wrap #: utils/recfix.c:121 msgid "" "Operations:\n" " --check check integrity of the specified " "file. Default.\n" " --sort sort the records in the specified " "file.\n" " --auto insert auto-generated fields in " "records missing them.\n" msgstr "" "Operationen:\n" " --check Integrität der angegebenen Datei " "prüfen. Vorgabe.\n" " --sort Datensätze in der angegebenen Datei " "sortieren.\n" " --auto Automatisch generierte Felder in " "Datensätze einfügen,\n" " sofern diese fehlen.\n" #. TRANSLATORS: --help output, recfix operations related with encryption. #. no-wrap #: utils/recfix.c:131 msgid "" " --encrypt encrypt confidential fields in the " "specified file.\n" " --decrypt decrypt confidential fields in the " "specified file.\n" msgstr "" " --encrypt Vertrauliche Felder in der angegebenen " "Datei\n" " verschlüsseln.\n" " --decrypt Vertrauliche Felder in der angegebenen " "Datei\n" " entschlüsseln.\n" #. TRANSLATORS: --help output, recfix encryption and decryption #. options. #. no-wrap #: utils/recfix.c:140 msgid "" "De/Encryption options:\n" " -s, --password=PASSWORD encrypt/decrypt with this password.\n" msgstr "" "Optionen zur Ver- und Entschlüsselung:\n" " -s, --password=PASSWORT Mit diesem Passwort ver-/" "entschlüsseln.\n" #: utils/recfix.c:184 msgid "--password|-s must be used as an operation argument.\n" msgstr "--password|-s muss als Operationsargument verwendet werden.\n" #: utils/recfix.c:188 msgid "the specified operation does not require a password.\n" msgstr "Die angegebene Operation benötigt kein Passwort.\n" #: utils/recfix.c:191 msgid "please specify just one password.\n" msgstr "Bitte geben Sie nur ein Passwort an.\n" #: utils/recfix.c:198 utils/recfix.c:204 utils/recfix.c:210 utils/recfix.c:217 #: utils/recfix.c:223 msgid "please specify just one operation.\n" msgstr "Bitte geben Sie nur eine Operation an.\n" #: utils/recfix.c:304 utils/recfix.c:326 utils/recfix.c:365 utils/recfix.c:435 #, fuzzy, c-format msgid "recfix: error: cannot read file %s\n" msgstr "Fehler: Datei %s kann nicht gelesen werden\n" #: utils/recfix.c:399 msgid "the database contains already encrypted fields\n" msgstr "Die Datenbank enthält bereits verschlüsselte Felder\n" #: utils/recfix.c:400 msgid "please use --force or --decrypt\n" msgstr "Bitte --force oder --decrypt verwenden\n" #: utils/recfix.c:499 msgid "unknown operation in recfix: please report this as a bug.\n" msgstr "Unbekannte Operation in recfix: Bitte melden Sie dies als Fehler.\n" #. TRANSLATORS: --help output, recfmt synopsis. #. no-wrap #: utils/recfmt.c:64 #, c-format msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" msgstr "Aufruf: recfmt [OPTION] … [VORLAGE]\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:69 msgid "Apply a template to records read from standard input.\n" msgstr "" "Eine Vorlage auf die aus der Standardeingabe gelesenen Datensätze anwenden.\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:75 msgid "" " -f, --file=FILENAME read the template to apply from a " "file.\n" msgstr "" " -f, --file=DATEINAME Zu benutzende Vorlage aus einer Datei " "holen.\n" #: utils/recfmt.c:107 #, c-format msgid "can't open file %s for reading.\n" msgstr "Datei »%s« kann nicht zum Lesen geöffnet werden.\n" #: utils/recfmt.c:120 msgid "don't specify a template in the command line and -f at the same time.\n" msgstr "" "Vorlage und -f können nicht gleichzeitig in der Befehlszeile angegeben " "werden.\n" #: utils/recfmt.c:142 msgid "invalid expression in a template slot.\n" msgstr "Ungültiger Ausdruck in einem Vorlagenslot.\n" #: utils/recfmt.c:146 msgid "error evaluating expression in a template slot.\n" msgstr "Fehler beim Verarbeiten des Ausdrucks in einem Vorlagenslot.\n" #: utils/recfmt.c:178 msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" msgstr "" "recfmt_apply_template: Fehler beim Kompilieren des regulären Ausdrucks.\n" "Bitte melden Sie diesen Fehler.\n" #. TRANSLATORS: --help output, recinf synopsis. #. no-wrap #: utils/recinf.c:77 #, c-format msgid "Usage: recinf [OPTION]... [FILE]...\n" msgstr "Aufruf: recinf [OPTION] … [DATEI] …\n" #. TRANSLATORS: --help output, recinf short description. #. no-wrap #: utils/recinf.c:82 msgid "Print information about the types of records stored in the input.\n" msgstr "" "Informationen über die Datensatztypen in der Standardeingabe ausgeben.\n" #. TRANSLATORS: --help output, recinf arguments. #. no-wrap #: utils/recinf.c:89 msgid "" " -t, --type=RECORD_TYPE print information on the records having " "the\n" " specified type.\n" " -d, --descriptor include the full record descriptors.\n" " -n, --names-only output just the names of the record files\n" " found in the input.\n" msgstr "" " -t, --type=DATENSATZTYP Informationen zu Datensätzen des\n" " angegebenen Typs ausgeben.\n" " -d, --descriptor Vollständige Datensatzdeskriptoren " "einschließen.\n" " -n, --names-only Nur die Namen der in der Eingabe " "gefundenen\n" " Datensatzdateien ausgeben.\n" #. TRANSLATORS: --help output, recinf special options. #. no-wrap #: utils/recinf.c:102 msgid "" "Special options:\n" " -S, --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Spezielle Optionen:\n" " -S, --print-sexps Daten im sexps- anstelle des rec-" "Formats ausgeben.\n" #: utils/recinf.c:234 #, c-format msgid "error: cannot read file %s\n" msgstr "Fehler: Datei %s kann nicht gelesen werden\n" #. TRANSLATORS: --help output, recins synopsis. #. no-wrap #: utils/recins.c:100 #, c-format msgid "" "Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" msgstr "" "Aufruf: recins [OPTION] … [t TYP] [-n ZAHL | -e DATENSATZ_AUSDR | -q STR | -" "m ZAHL] [(-f NAME -v STR]|[-r RECDATEN)] … [DATEI]\n" #. TRANSLATORS: --help output, recins short description. #. no-wrap #: utils/recins.c:105 msgid "Insert new records in a rec database.\n" msgstr "Neue Datensätze in eine rec-Datenbank einfügen.\n" #. TRANSLATORS: --help output, recins arguments. #. no-wrap #: utils/recins.c:111 msgid "" " -f, --field=STR field name; should be followed by a -" "v.\n" " -v, --value=STR field value; should be preceded by an -" "f.\n" " -r, --record=STR record that will be inserted in the " "file.\n" " --force insert the record even if it is " "violating\n" " record restrictions.\n" " --no-external don't use external descriptors.\n" " --no-auto don't insert auto generated fields.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -f, --field=STR Feldname. Darauf sollte ein -v " "folgen.\n" " -v, --value=STR Feldwert. Sollte auf ein -f folgen.\n" " -r, --record=STR In die Datei einzufügender Datensatz.\n" " --force Datensatz auch dann einfügen, wenn " "dies\n" " Einschränkungen des Datensatzes " "berührt.\n" " --no-external Keine externen Deskriptoren " "verwenden.\n" " --no-auto Keine automatisch generierten Felder " "einfügen.\n" " --verbose Einen ausführlichen Bericht ausgeben, " "falls\n" " die Intergritätsprüfung scheitert.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recins.c:125 msgid "" " -s, --password=STR encrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=STR Vertrauliche Felder mit dem " "angegebenen Passwort\n" " verschlüsseln.\n" #: utils/recins.c:179 msgid "a -f should be followed by a -v\n" msgstr "Auf -f sollte ein -v folgen\n" #: utils/recins.c:198 msgid "a -v should be preceded by a -f\n" msgstr "Einem -v sollte ein -f vorausgehen\n" #: utils/recins.c:214 utils/recsel.c:204 msgid "more than one password was specified\n" msgstr "Es wurde mehr als ein Passwort angegeben\n" #: utils/recins.c:224 msgid "error while parsing the record provided by -r\n" msgstr "Fehler beim Einlesen des mit -r angegebenen Datensatzes\n" #: utils/recins.c:256 #, c-format msgid "please provide a value for the field %s\n" msgstr "Bitte geben Sie einen Wert für das Feld %s an\n" #. TRANSLATORS: --help output, recsel synopsis. #. no-wrap #: utils/recsel.c:107 #, c-format msgid "" "Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " "| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" msgstr "" "Aufruf: recsel [OPTION] … [-t TYP] [-j FELD] [-n INDIZES | -e DATENSAUSDR | -" "q AUSDR | -m ZAHL] [-c | (-p|-P) FELDAUSDR] [DATEI] …\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:112 msgid "Select and print rec data.\n" msgstr "rec-Daten auswählen und ausgeben.\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:118 msgid "" " -d, --include-descriptors print record descriptors along with " "the matched\n" " records.\n" " -C, --collapse do not section the result in records " "with newlines.\n" " -S, --sort=FIELD,... sort the output by the specified " "fields.\n" " -G, --group-by=FIELD,... group records by the specified " "fields.\n" " -U, --uniq remove duplicated fields in the output " "records.\n" msgstr "" " -d, --include-descriptors Datensatzdeskriptoren mit den " "übereinstimmenden\n" " Datensätzen ausgeben.\n" " -C, --collapse Ergebnis in Datensätzen nicht in neue " "Zeile\n" " umbrechen.\n" " -S, --sort=FELD Die Ausgabe anhand des angegebenen " "Feldes sortieren.\n" " -G, --group-by=FELD, … Datensätze anhand des angegebenen " "Feldes gruppieren.\n" " -U, --uniq Feldduplikate in ausgegebenen " "Datensätzen entfernen.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recsel.c:130 msgid "" " -s, --password=STR decrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=PASSWORT Vertrauliche Felder mit dem " "angegebenen Passwort\n" " entschlüsseln.\n" #: utils/recsel.c:139 msgid "" " -j, --join=FIELD perform an inner join using the " "specified field.\n" msgstr "" " -j, --join=FELD Eine innere Verknüpfung mit dem " "angegebenen\n" " Feld ausführen.\n" #. TRANSLATORS: --help output, recsel output options. #. no-wrap #: utils/recsel.c:146 msgid "" "Output options:\n" " -p, --print=FIELDS comma-separated list of fields to " "print for each\n" " matching record.\n" " -P, --print-values=FIELDS as -p, but print only the values of " "the selected\n" " fields.\n" " -R, --print-row=FIELDS as -P, but separate the values with " "spaces instead\n" " of newlines.\n" " -c, --count print a count of the matching records " "instead of\n" " the records themselves.\n" msgstr "" "Ausgabeoptionen:\n" " -p, --print=FELDER Durch Kommata getrennte Liste von " "Feldern, die für\n" " jeden übereinstimmenden Datensatz " "auszugeben sind.\n" " -P, --print-values=FELDER Wie -p, aber die Werte der " "ausgewählten\n" " Felder ausgeben.\n" " -R, --print-row=FELDER Wie -P, aber ausgegebene Werte durch " "Leerzeichen\n" " anstatt durch Zeilenumbrüche " "trennen.\n" " -c, --count Anzahl der übereinstimmenden " "Datensätze anstelle\n" " der Datensätze selbst ausgeben.\n" #. TRANSLATORS: --help output, recsel special options. #. no-wrap #: utils/recsel.c:160 msgid "" "Special options:\n" " --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Spezielle Optionen:\n" " --print-sexps Daten im sexps- anstelle des rec-" "Formats ausgeben.\n" #: utils/recsel.c:212 msgid "only one field list can be specified as a sorting criteria.\n" msgstr "Nur eine Feldliste kann als Sortierkriterium angegeben werden.\n" #: utils/recsel.c:217 msgid "invalid field names in -S.\n" msgstr "Ungültige Feldnamen in -S.\n" #: utils/recsel.c:226 msgid "only one field can be specified as join criteria.\n" msgstr "Nur ein Feld kann als Verknüpfungskriterium angegeben werden.\n" #: utils/recsel.c:229 msgid "please specify a correct field name to -j|--join.\n" msgstr "Bitte geben Sie mit -j|--join einen korrekten Feldnamen an.\n" #: utils/recsel.c:236 msgid "only one field list can be specified as a grouping criteria.\n" msgstr "Nur eine Feldliste kann als Gruppierkriterium angegeben werden.\n" #: utils/recsel.c:241 msgid "invalid field names in -G.\n" msgstr "Ungültige Feldnamen in -G.\n" #: utils/recsel.c:255 msgid "cannot specify -[pPR] and also -c.\n" msgstr "Die Optionen -[pPR] und -c sind gemeinsam nicht erlaubt.\n" #: utils/recsel.c:266 #, c-format msgid "invalid list of fields in -%c\n" msgstr "Ungültige Feldliste in -%c\n" #: utils/recsel.c:272 msgid "internal error creating the field expression.\n" msgstr "Interner Fehler beim Erstellen des Feldausdrucks.\n" #: utils/recsel.c:284 #, c-format msgid "invalid aggregate function '%s'\n" msgstr "Ungültige Aggregatfunktion »%s«\n" #: utils/recsel.c:296 msgid "cannot specify -c and also -p.\n" msgstr "-c und -p können nicht gleichzeitig angegeben werden.\n" #: utils/recsel.c:309 msgid "joins can only be used when a named record set is selected.\n" msgstr "" "Verknüpfungen können nur ausgeführt werden, wenn ein benannter Datensatz " "ausgewählt ist.\n" #: utils/recsel.c:363 msgid "several record types found. Please use -t to specify one.\n" msgstr "Verschiedene Datensatztypen gefunden. Bitte mit -t einen angeben.\n" #. TRANSLATORS: --help output, recset synopsis. #. no-wrap #: utils/recset.c:99 #, c-format msgid "Usage: recset [OPTION]... [FILE]...\n" msgstr "Aufruf: recset [OPTION] … [DATEI] …\n" #. TRANSLATORS: --help output, recset short description. #. no-wrap #: utils/recset.c:104 msgid "Alter or delete fields in records.\n" msgstr "Felder in Datensätzen bearbeiten oder löschen.\n" #. TRANSLATORS: --help output, recset options. #. no-wrap #: utils/recset.c:110 msgid "" " --no-external don't use external descriptors.\n" " --force alter the records even if violating " "record\n" " restrictions.\n" msgstr "" " --no-external keine externen Deskriptoren " "verwenden.\n" " --force Datensätze auch dann bearbeiten, wenn " "Richtlinien\n" " dies untersagen.\n" #. TRANSLATORS: --help output, recset field selection options. #. no-wrap #: utils/recset.c:123 msgid "" "Field selection options:\n" " -f, --fields=FIELDS comma-separated list of field names " "with optional\n" " subscripts.\n" msgstr "" "Feldauswahloptionen:\n" " -f, --fields=FELDER Durch Kommata getrennte Liste von " "Feldnamen mit\n" " optionalen Subskripten.\n" #. TRANSLATORS: --help output, recset actions. #. no-wrap #: utils/recset.c:131 msgid "" "Actions:\n" " -s, --set=VALUE change the value of the selected " "fields.\n" " -a, --add=VALUE add the selected fields with the given " "value.\n" " -S, --set-add=VALUE change the value of the selected " "fields. If they don't\n" " exist then add a new field with that " "value.\n" " -r, --rename=NAME rename the selected fields to a given " "name. If an entire\n" " record set is selected then the " "field is renamed in the\n" " record descriptor as well.\n" " -d, --delete delete the selected fields.\n" " -c, --comment comment out the selected fields.\n" msgstr "" "Aktionen:\n" " -s, --set=WERT Wert der ausgewählten Felder ändern.\n" " -a, --add=WERT Angegebenen Wert auf die ausgewählten " "Felder\n" " anwenden.\n" " -S, --set-add=VALUE Den Wert der ausgewählten Felder " "ändern. Falls diese\n" " nicht existieren, ein neues Feld mit " "diesem\n" " Wert hinzufügen.\n" " -r, --rename=NAME Die ausgewählten Felder in einen " "angegebenen\n" " Namen umbenennen. Falls ein ganzer " "Datensatz\n" " ausgewählt wird, dann wird das Feld " "im\n" " Datensatzdeskriptor ebenfalls " "umbenannt.\n" " -d, --delete Ausgewählte Felder löschen.\n" " -c, --comment Ausgewählte Felder auskommentieren.\n" #: utils/recset.c:154 msgid "please specify some field with -f.\n" msgstr "Bitte geben Sie mit -f ein Feld an.\n" #: utils/recset.c:159 msgid "please specify just one action.\n" msgstr "Bitte geben Sie nur eine Aktion an.\n" #: utils/recset.c:193 msgid "invalid field expression in -f.\n" msgstr "Ungültiger Feldausdruck in -f.\n" #: utils/recset.c:199 msgid "creating the field expression.\n" msgstr "Feldausdruck wird erstellt.\n" #: utils/recset.c:214 msgid "" "the rename operation requires just one field with an optional subscript.\n" msgstr "" "Die rename-Aktion benötigt nur ein Feld mit einem optionalen Subskript.\n" #: utils/recutl.c:123 #, c-format msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" msgstr "Webseite von %s: <http://www.gnu.org/software/recutils/>\n" #: utils/recutl.c:126 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "Allgemeine Hilfe zu GNU-Software: <http://www.gnu.org/gethelp/>\n" #. TRANSLATORS: --help output, common arguments. #. no-wrap #: utils/recutl.c:135 msgid "" " --help print a help message and exit.\n" " --version show version and exit.\n" msgstr "" " --help Hilfe anzeigen und beenden.\n" " --version Version anzeigen und beenden.\n" #. TRANSLATORS: --help output, record selection arguments #. no-wrap #: utils/recutl.c:146 msgid "" "Record selection options:\n" " -i, --case-insensitive make strings case-insensitive in " "selection\n" " expressions.\n" " -t, --type=TYPE operate on records of the specified " "type only.\n" " -e, --expression=RECORD_EXPR selection expression.\n" " -q, --quick=STR select records with fields containing " "a string.\n" " -n, --number=NUM,... select specific records by position, " "with ranges.\n" " -m, --random=NUM select a given number of random " "records.\n" msgstr "" "Optionen zur Datensatzauswahl:\n" " -i, --case-insensitive Groß- oder Kleinschreibung in\n" " Auswahlausdrücken nicht beachten.\n" " -t, --type=TYP Nur auf Datensätze des angegebenen " "Typs anwenden.\n" " -e, --expression=DATENS_AUSDR Auswahlausdruck.\n" " -q, --quick=STRING Datensätze mit Feldern auswählen, die " "eine\n" " Zeichenkette enthalten.\n" " -n, --number=ZAHL Bestimmten Datensatz nach Position " "auswählen,\n" " mit Bereichsangabe.\n" " -m, --random=ZAHL Eine angegebene Zahl von Datensätzen\n" " zufällig auswählen.\n" #: utils/recutl.c:171 #, c-format msgid "" "Copyright (C) %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright (C) %s Jose E. Marchesi.\n" "Lizenz GPLv3+: GNU GPL Version 3 oder neuer <http://gnu.org/licenses/gpl." "html>.\n" "Dies ist freie Software: Sie können Sie frei verändern und weitergeben.\n" "Es gibt KEINE GARANTIE, soweit gesetzlich zulässig.\n" #: utils/recutl.c:177 msgid "" "\n" "Written by Jose E. Marchesi." msgstr "" "\n" "Geschrieben von Jose E. Marchesi." #: utils/recutl.c:189 utils/recutl.c:209 msgid ": error: " msgstr ": Fehler: " #: utils/recutl.c:221 msgid ": warning: " msgstr ": Warnung: " #: utils/recutl.c:246 #, c-format msgid "duplicated record set '%s' from %s.\n" msgstr "Doppelter Datensatz »%s« von %s.\n" #: utils/recutl.c:401 msgid "cannot create a unique name.\n" msgstr "Eindeutiger Name kann nicht erstellt werden.\n" #: utils/recutl.c:421 #, c-format msgid "renaming file %s to %s\n" msgstr "Datei %s wird in %s umbenannt\n" #: utils/recutl.c:463 msgid "operation aborted due to integrity failures.\n" msgstr "Vorgang wurde wegen Integritätsproblemen abgebrochen.\n" #: utils/recutl.c:464 msgid "use --verbose to get a detailed report.\n" msgstr "Mit --verbose erhalten Sie einen ausführlichen Bericht.\n" #: utils/recutl.c:471 msgid "use --force to skip the integrity check.\n" msgstr "Benutzen Sie --force, um die Integritätsprüfung zu unterbinden.\n" #: utils/recutl.c:529 msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" msgstr "" "Interner Fehler: recutl_index_list_parse:\n" "Fehler beim Kompilieren des regulären Ausdrucks.\n" #: utils/recutl.c:596 msgid "Password: " msgstr "Passwort: " #: utils/recutl.c:602 msgid "Password again: " msgstr "Passwort erneut: " #: utils/recutl.c:607 msgid "the provided passwords don't match.\n" msgstr "Die angegebenen Passwörter stimmen nicht überein.\n" #: utils/recutl.h:84 utils/recutl.h:131 utils/recutl.h:133 msgid "cannot specify -e and also -n\n" msgstr "-e und -n können nicht gleichzeitig angegeben werden.\n" #: utils/recutl.h:86 msgid "cannot specify -e and also -q\n" msgstr "-e und -q können nicht gleichzeitig angegeben werden.\n" #: utils/recutl.h:94 msgid "invalid selection expression\n" msgstr "Ungültiger Auswahlausdruck\n" #: utils/recutl.h:100 msgid "cannot specify -n and also -e\n" msgstr "-n und -e können nicht gleichzeitig angegeben werden.\n" #: utils/recutl.h:102 msgid "cannot specify -n and also -q\n" msgstr "-n und -q können nicht gleichzeitig angegeben werden.\n" #: utils/recutl.h:106 msgid "invalid list of indexes in -n\n" msgstr "Ungültige Indexliste in -n\n" #: utils/recutl.h:111 msgid "cannot specify -m and also -e\n" msgstr "-m und -e können nicht gleichzeitig angegeben werden.\n" #: utils/recutl.h:113 msgid "cannot specify -m and also -q\n" msgstr "-m und -q können nicht gleichzeitig angegeben werden.\n" #: utils/recutl.h:115 msgid "cannot specify -m and also -n\n" msgstr "-m und -n können nicht gleichzeitig angegeben werden.\n" #~ msgid "_open_osfhandle failed" #~ msgstr "_open_osfhandle fehlgeschlagen" #~ msgid "cannot restore fd %d: dup2 failed" #~ msgstr "fd %d kann nicht wiederhergestellt werden: dup2 ist fehlgeschlagen" #~ msgid "" #~ "\n" #~ "Report bugs to: %s\n" #~ msgstr "" #~ "\n" #~ "Melden Sie Fehler an: %s\n" #~ "Fehler in der Übersetzung melden Sie bitte an:\n" #~ "<translation-team-de@lists.sourceforge.net>\n" #~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n" #~ msgstr "Webseite von %s: <https://www.gnu.org/software/%s/>\n" �������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/Makevars����������������������������������������������������������������������������0000644�0000000�0000000�00000007302�14226573151�012226� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile variables for PO directory in any package using GNU gettext. # Usually the message domain is the same as the package name. DOMAIN = $(PACKAGE) # These two variables depend on the location of this directory. subdir = po top_builddir = .. # These options get passed to xgettext. XGETTEXT_OPTIONS = --keyword=_ --keyword=N_ \ \ --flag=_:1:pass-c-format\ --flag=N_:1:pass-c-format\ --flag=error:3:c-format --flag=error_at_line:5:c-format\ \ --from-code=UTF-8\ --flag=asprintf:2:c-format --flag=vasprintf:2:c-format\ --flag=asnprintf:3:c-format --flag=vasnprintf:3:c-format\ --flag=wrapf:1:c-format\ --flag=error:3:c-format --flag=error_at_line:5:c-format\ $${end_of_xgettext_options+} # This is the copyright holder that gets inserted into the header of the # $(DOMAIN).pot file. Set this to the copyright holder of the surrounding # package. (Note that the msgstr strings, extracted from the package's # sources, belong to the copyright holder of the package.) Translators are # expected to transfer the copyright for their translations to this person # or entity, or to disclaim their copyright. The empty string stands for # the public domain; in this case the translators are expected to disclaim # their copyright. COPYRIGHT_HOLDER = Free Software Foundation, Inc. # This tells whether or not to prepend "GNU " prefix to the package # name that gets inserted into the header of the $(DOMAIN).pot file. # Possible values are "yes", "no", or empty. If it is empty, try to # detect it automatically by scanning the files in $(top_srcdir) for # "GNU packagename" string. PACKAGE_GNU = # This is the email address or URL to which the translators shall report # bugs in the untranslated strings: # - Strings which are not entire sentences, see the maintainer guidelines # in the GNU gettext documentation, section 'Preparing Strings'. # - Strings which use unclear terms or require additional context to be # understood. # - Strings which make invalid assumptions about notation of date, time or # money. # - Pluralisation problems. # - Incorrect English spelling. # - Incorrect formatting. # It can be your email address, or a mailing list address where translators # can write to without being subscribed, or the URL of a web page through # which the translators can contact you. MSGID_BUGS_ADDRESS = bug-gnu-utils@gnu.org # This is the list of locale categories, beyond LC_MESSAGES, for which the # message catalogs shall be used. It is usually empty. EXTRA_LOCALE_CATEGORIES = # This tells whether the $(DOMAIN).pot file contains messages with an 'msgctxt' # context. Possible values are "yes" and "no". Set this to yes if the # package uses functions taking also a message context, like pgettext(), or # if in $(XGETTEXT_OPTIONS) you define keywords with a context argument. USE_MSGCTXT = no # These options get passed to msgmerge. # Useful options are in particular: # --previous to keep previous msgids of translated messages, # --quiet to reduce the verbosity. MSGMERGE_OPTIONS = # These options get passed to msginit. # If you want to disable line wrapping when writing PO files, add # --no-wrap to MSGMERGE_OPTIONS, XGETTEXT_OPTIONS, and # MSGINIT_OPTIONS. MSGINIT_OPTIONS = # This tells whether or not to regenerate a PO file when $(DOMAIN).pot # has changed. Possible values are "yes" and "no". Set this to no if # the POT file is checked in the repository and the version control # program ignores timestamps. PO_DEPENDS_ON_POT = yes # This tells whether or not to forcibly update $(DOMAIN).pot and # regenerate PO files on "make dist". Possible values are "yes" and # "no". Set this to no if the POT file and PO files are maintained # externally. DIST_DEPENDS_ON_UPDATE_PO = yes ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/vi.po�������������������������������������������������������������������������������0000644�0000000�0000000�00000176264�14226577416�011536� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Vietnamese translation for recutils. # Copyright © 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the recutils package. # Trần Ngá»c Quân <vnwildman@gmail.com>, 2012-2014. # msgid "" msgstr "" "Project-Id-Version: recutils 1.6.90\n" "Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" "POT-Creation-Date: 2022-04-16 19:38+0200\n" "PO-Revision-Date: 2014-03-20 09:17+0700\n" "Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com>\n" "Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net>\n" "Language: vi\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=1; plural=0;\n" "X-Language-Team-Website: <http://translationproject.org/team/vi.html>\n" "X-Generator: LocFactoryEditor 1.8\n" "X-Poedit-SourceCharset: UTF-8\n" #: lib/closeout.c:122 msgid "write error" msgstr "lá»—i ghi" #: lib/copy-acl.c:54 lib/copy-file.c:215 #, c-format msgid "preserving permissions for %s" msgstr "" #: lib/copy-file.c:192 #, fuzzy, c-format msgid "error while opening %s for reading" msgstr "Không thể mở tập tin %s để Ä‘á»c.\n" #: lib/copy-file.c:196 #, fuzzy, c-format msgid "cannot open backup file %s for writing" msgstr "Không thể mở tập tin %s để Ä‘á»c.\n" #: lib/copy-file.c:200 #, fuzzy, c-format msgid "error reading %s" msgstr "lá»—i: không thể Ä‘á»c tập tin %s\n" #: lib/copy-file.c:204 #, c-format msgid "error writing %s" msgstr "" #: lib/copy-file.c:208 #, fuzzy, c-format msgid "error after reading %s" msgstr "lá»—i: không thể Ä‘á»c tập tin %s\n" #: lib/error.c:195 msgid "Unknown system error" msgstr "Lá»—i hệ thống không rõ" #: lib/execute.c:348 lib/wait-process.c:291 lib/wait-process.c:365 #, c-format msgid "%s subprocess failed" msgstr "tiến trình con %s bị lá»—i" #: lib/getopt.c:278 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: tùy chá»n “-W %s†chưa rõ ràng\n" #: lib/getopt.c:284 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: tùy chá»n “%s†chưa rõ ràng; khả năng là:" #: lib/getopt.c:319 #, fuzzy, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: không nhận ra tùy chá»n “%c%sâ€\n" #: lib/getopt.c:345 #, fuzzy, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: tùy chá»n “%c%s†không cho phép đối số\n" #: lib/getopt.c:360 #, fuzzy, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: tùy chá»n “--%s†cần má»™t đối số\n" #: lib/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: tùy chá»n không hợp lệ -- “%câ€\n" #: lib/getopt.c:636 lib/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: tùy chá»n cần má»™t đối số -- “%câ€\n" #: lib/obstack.c:337 lib/obstack.c:339 lib/xalloc-die.c:34 msgid "memory exhausted" msgstr "hết bá»™ nhá»›" #: lib/openat-die.c:38 #, c-format msgid "unable to record current working directory" msgstr "" #: lib/openat-die.c:57 #, c-format msgid "failed to return to initial working directory" msgstr "" #: parse-datetime.y:440 parse-datetime.y:540 #, c-format msgid "parsed %s part: " msgstr "" #: parse-datetime.y:455 #, c-format msgid "year: %04<PRIdMAX>" msgstr "" #: parse-datetime.y:483 #, c-format msgid "%s (day ordinal=%<PRIdMAX> number=%d)" msgstr "" #: parse-datetime.y:514 #, c-format msgid "number of seconds: %<PRIdMAX>" msgstr "" #: parse-datetime.y:547 msgid "today/this/now\n" msgstr "" #: parse-datetime.y:612 msgid "number of seconds" msgstr "" #: parse-datetime.y:625 msgid "datetime" msgstr "" #: parse-datetime.y:630 msgid "time" msgstr "" #: parse-datetime.y:635 msgid "local_zone" msgstr "" #: parse-datetime.y:640 msgid "zone" msgstr "" #: parse-datetime.y:645 msgid "date" msgstr "" #: parse-datetime.y:650 msgid "day" msgstr "" #: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 msgid "relative" msgstr "" #: parse-datetime.y:658 msgid "number" msgstr "" #: parse-datetime.y:662 msgid "hybrid" msgstr "" #: parse-datetime.y:820 #, c-format msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" msgstr "" #: parse-datetime.y:832 #, c-format msgid "" "warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" msgstr "" #: parse-datetime.y:1279 #, c-format msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" msgstr "" #: parse-datetime.y:1289 #, c-format msgid "error: out-of-range year %<PRIdMAX>\n" msgstr "" #: parse-datetime.y:1520 #, fuzzy, c-format msgid "error: unknown word '%s'\n" msgstr "lá»—i: không thể Ä‘á»c tập tin %s\n" #: parse-datetime.y:1669 #, fuzzy msgid "error: invalid date/time value:\n" msgstr "kiểu liệt kê (enum) không hợp lệ." #: parse-datetime.y:1670 #, c-format msgid " user provided time: '%s'\n" msgstr "" #: parse-datetime.y:1672 #, c-format msgid " normalized time: '%s'\n" msgstr "" #: parse-datetime.y:1695 msgid " possible reasons:\n" msgstr "" #: parse-datetime.y:1697 msgid " non-existing due to daylight-saving time;\n" msgstr "" #: parse-datetime.y:1699 msgid " invalid day/month combination;\n" msgstr "" #: parse-datetime.y:1700 msgid " numeric values overflow;\n" msgstr "" #: parse-datetime.y:1701 msgid "incorrect timezone" msgstr "" #: parse-datetime.y:1702 msgid "missing timezone" msgstr "" #: parse-datetime.y:1810 msgid "error: initial year out of range\n" msgstr "" #: parse-datetime.y:1905 #, fuzzy msgid "error: parsing failed\n" msgstr "gặp lá»—i khi phân tích ngữ pháp tập tin CSV: %s\n" #: parse-datetime.y:1906 #, fuzzy, c-format msgid "error: parsing failed, stopped at '%s'\n" msgstr "gặp lá»—i khi phân tích ngữ pháp tập tin CSV: %s\n" #: parse-datetime.y:1916 msgid "input timezone: " msgstr "" #: parse-datetime.y:1919 #, c-format msgid "'@timespec' - always UTC" msgstr "" #: parse-datetime.y:1921 #, c-format msgid "parsed date/time string" msgstr "" #: parse-datetime.y:1925 #, c-format msgid "TZ=\"%s\" in date string" msgstr "" #: parse-datetime.y:1929 #, c-format msgid "TZ=\"UTC0\" environment value or -u" msgstr "" #: parse-datetime.y:1932 #, c-format msgid "TZ=\"%s\" environment value" msgstr "" #: parse-datetime.y:1935 #, c-format msgid "system default" msgstr "" #: parse-datetime.y:1977 msgid "error: year, month, or day overflow\n" msgstr "" #: parse-datetime.y:1988 #, fuzzy, c-format msgid "error: invalid hour %<PRIdMAX>%s\n" msgstr "%s:%s: lá»—i: kiểu bản ghi %s không hợp lệ\n" #: parse-datetime.y:1996 #, c-format msgid "using specified time as starting value: '%s'\n" msgstr "" #: parse-datetime.y:1997 #, c-format msgid "using current time as starting value: '%s'\n" msgstr "" #: parse-datetime.y:2051 #, c-format msgid "error: tzalloc (\"%s\") failed\n" msgstr "" #: parse-datetime.y:2095 #, c-format msgid "" "error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " "date: '%s'\n" msgstr "" #: parse-datetime.y:2106 #, c-format msgid "new start date: '%s' is '%s'\n" msgstr "" #: parse-datetime.y:2115 #, c-format msgid "using current date as starting value: '%s'\n" msgstr "" #: parse-datetime.y:2119 #, c-format msgid "warning: day (%s) ignored when explicit dates are given\n" msgstr "" #: parse-datetime.y:2123 #, c-format msgid "starting date/time: '%s'\n" msgstr "" #: parse-datetime.y:2133 msgid "" "warning: when adding relative months/years, it is recommended to specify the " "15th of the months\n" msgstr "" #: parse-datetime.y:2138 msgid "warning: when adding relative days, it is recommended to specify noon\n" msgstr "" #: parse-datetime.y:2148 #, fuzzy, c-format msgid "error: %s:%d\n" msgstr ": lá»—i:" #: parse-datetime.y:2163 #, c-format msgid "error: adding relative date resulted in an invalid date: '%s'\n" msgstr "" #: parse-datetime.y:2172 #, c-format msgid "" "after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " "days),\n" msgstr "" #: parse-datetime.y:2176 #, c-format msgid " new date/time = '%s'\n" msgstr "" #: parse-datetime.y:2195 msgid "warning: daylight saving time changed after date adjustment\n" msgstr "" #: parse-datetime.y:2214 msgid "warning: month/year adjustment resulted in shifted dates:\n" msgstr "" #: parse-datetime.y:2217 #, c-format msgid " adjusted Y M D: %s %02d %02d\n" msgstr "" #: parse-datetime.y:2219 #, c-format msgid " normalized Y M D: %s %02d %02d\n" msgstr "" #: parse-datetime.y:2248 #, c-format msgid "error: timezone %d caused time_t overflow\n" msgstr "" #: parse-datetime.y:2258 #, c-format msgid "'%s' = %<PRIdMAX> epoch-seconds\n" msgstr "" #: parse-datetime.y:2286 msgid "error: adding relative time caused an overflow\n" msgstr "" #: parse-datetime.y:2297 #, c-format msgid "" "after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " "seconds, %+d ns),\n" msgstr "" #: parse-datetime.y:2303 #, c-format msgid " new time = %<PRIdMAX> epoch-seconds\n" msgstr "" #: parse-datetime.y:2319 msgid "warning: daylight saving time changed after time adjustment\n" msgstr "" #: parse-datetime.y:2329 msgid "timezone: system default\n" msgstr "" #: parse-datetime.y:2331 msgid "timezone: Universal Time\n" msgstr "" #: parse-datetime.y:2333 #, c-format msgid "timezone: TZ=\"%s\" environment value\n" msgstr "" #: parse-datetime.y:2337 #, c-format msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" msgstr "" #: parse-datetime.y:2343 #, c-format msgid "final: %s (UTC)\n" msgstr "" #: parse-datetime.y:2358 #, c-format msgid "final: %s (UTC%s)\n" msgstr "" #: parse-datetime.y:2362 #, c-format msgid "final: %s (unknown time zone offset)\n" msgstr "" #. TRANSLATORS: #. Get translations for open and closing quotation marks. #. The message catalog should translate "`" to a left #. quotation mark suitable for the locale, and similarly for #. "'". For example, a French Unicode local should translate #. these to U+00AB (LEFT-POINTING DOUBLE ANGLE #. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE #. QUOTATION MARK), respectively. #. #. If the catalog has no translation, we will try to #. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and #. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the #. current locale is not Unicode, locale_quoting_style #. will quote 'like this', and clocale_quoting_style will #. quote "like this". You should always include translations #. for "`" and "'" even if U+2018 and U+2019 are appropriate #. for your locale. #. #. If you don't know what to put here, please see #. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> #. and use glyphs suitable for your language. #: lib/quotearg.c:355 msgid "`" msgstr "“" #: lib/quotearg.c:356 msgid "'" msgstr "â€" #: lib/regcomp.c:122 msgid "Success" msgstr "Thành công" #: lib/regcomp.c:125 msgid "No match" msgstr "Không tìm thấy" #: lib/regcomp.c:128 msgid "Invalid regular expression" msgstr "Biểu thức chính quy không hợp lệ" #: lib/regcomp.c:131 msgid "Invalid collation character" msgstr "Ký tá»± đối chiếu không hợp lệ" #: lib/regcomp.c:134 msgid "Invalid character class name" msgstr "Tên lá»›p ký tá»± không hợp lệ" #: lib/regcomp.c:137 msgid "Trailing backslash" msgstr "Có dấu gạch ngược ở cuối" #: lib/regcomp.c:140 msgid "Invalid back reference" msgstr "Sai tham chiếu ngược" #: lib/regcomp.c:143 #, fuzzy msgid "Unmatched [, [^, [:, [., or [=" msgstr "Có má»™t ký tá»± “[†hay “[^†lẻ đôi" #: lib/regcomp.c:146 msgid "Unmatched ( or \\(" msgstr "Có má»™t ký tá»± “(†hay “\\(†lẻ đôi" #: lib/regcomp.c:149 msgid "Unmatched \\{" msgstr "Có má»™t ký tá»± “\\{†lẻ đôi" #: lib/regcomp.c:152 msgid "Invalid content of \\{\\}" msgstr "Ná»™i dung cá»§a “\\{\\}†không hợp lệ" #: lib/regcomp.c:155 msgid "Invalid range end" msgstr "Sai kết thúc phạm vi" #: lib/regcomp.c:158 msgid "Memory exhausted" msgstr "Hết bá»™ nhá»›" #: lib/regcomp.c:161 msgid "Invalid preceding regular expression" msgstr "Sai biểu thức chính quy Ä‘i trước" #: lib/regcomp.c:164 msgid "Premature end of regular expression" msgstr "Kết thúc sá»›m biểu thức chính quy" #: lib/regcomp.c:167 msgid "Regular expression too big" msgstr "Biểu thức chính quy quá lá»›n" #: lib/regcomp.c:170 msgid "Unmatched ) or \\)" msgstr "Có má»™t ký tá»± “)†hay “\\)†lẻ đôi" #: lib/regcomp.c:650 msgid "No previous regular expression" msgstr "Không có biểu thức chính quy Ä‘i trước" #: lib/set-acl.c:46 #, c-format msgid "setting permissions for %s" msgstr "" #: lib/version-etc.c:73 #, c-format msgid "Packaged by %s (%s)\n" msgstr "" #: lib/version-etc.c:76 #, c-format msgid "Packaged by %s\n" msgstr "" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: lib/version-etc.c:83 msgid "(C)" msgstr "" #. TRANSLATORS: The %s placeholder is the web address of the GPL license. #: lib/version-etc.c:88 #, fuzzy, c-format msgid "" "License GPLv3+: GNU GPL version 3 or later <%s>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Tác quyá»n © %s Jose E. Marchesi.\n" "Giấy Phép Công Cá»™ng GNU (GPL), phiên bản 3 hay sau <http://gnu.org/licenses/" "gpl.html>.\n" "Äây là phần má»m tá»± do: bạn có quyá»n thay đổi và phát hành lại nó.\n" "KHÔNG CÓ BẢO HÀNH GÃŒ CẢ, vá»›i Ä‘iá»u kiện được pháp luật cho phép.\n" #. TRANSLATORS: %s denotes an author name. #: lib/version-etc.c:105 #, c-format msgid "Written by %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:109 #, fuzzy, c-format msgid "Written by %s and %s.\n" msgstr "" "\n" "ÄÆ°á»£c viết bởi Jose E. Marchesi." #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:113 #, fuzzy, c-format msgid "Written by %s, %s, and %s.\n" msgstr "" "\n" "ÄÆ°á»£c viết bởi Jose E. Marchesi." #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:120 #, c-format msgid "" "Written by %s, %s, %s,\n" "and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:127 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:134 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:142 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:150 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:159 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:170 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s, and others.\n" msgstr "" #. TRANSLATORS: The placeholder indicates the bug-reporting address #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for translation #. bugs (typically your translation team's web or email address). #. TRANSLATORS: --help output 5+ (reports) #. TRANSLATORS: the placeholder indicates the bug-reporting address #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap #: lib/version-etc.c:249 utils/recutl.c:114 #, c-format msgid "Report bugs to: %s\n" msgstr "" "Thông báo lá»—i cho: %s\n" "Thông báo lá»—i dịch cho: <http://translationproject.org/team/vi.html>.\n" #: lib/version-etc.c:251 utils/recutl.c:117 #, c-format msgid "Report %s bugs to: %s\n" msgstr "" "Thông báo lá»—i %s cho: %s\n" "Thông báo lá»—i dịch cho: <http://translationproject.org/team/vi.html>.\n" #: lib/version-etc.c:255 lib/version-etc.c:257 utils/recutl.c:121 #, c-format msgid "%s home page: <%s>\n" msgstr "Trang chá»§ %s: <%s>\n" #: lib/version-etc.c:260 #, fuzzy, c-format msgid "General help using GNU software: <%s>\n" msgstr "" "Trợ giúp chung vá» sá»­ dụng phần má»m GNU: <http://www.gnu.org/gethelp/>\n" #: lib/wait-process.c:232 lib/wait-process.c:264 lib/wait-process.c:326 #, c-format msgid "%s subprocess" msgstr "tiến trình con %s" #: lib/wait-process.c:283 lib/wait-process.c:355 #, c-format msgid "%s subprocess got fatal signal %d" msgstr "tiến trình con %s đã nhận tín hiệu nghiêm trá»ng %d" #: src/rec-fex.c:726 #, c-format msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" msgstr "lá»—i ná»™i bá»™: đã vượt quá REC_FEX_MAX_ELEMS. Hãy báo cáo lá»—i này.\n" #: src/rec-int.c:132 src/rec-int.c:186 src/rec-int.c:243 src/rec-int.c:287 #: utils/recutl.c:199 msgid "out of memory\n" msgstr "không đủ bá»™ nhá»›\n" #: src/rec-int.c:147 #, c-format msgid "%s:%s: error: mandatory field '%s' not found in record\n" msgstr "%s:%s: lá»—i: trưá»ng yêu cầu “%s†không tìm thấy trong bản ghi\n" #: src/rec-int.c:210 #, c-format msgid "%s:%s: error: field '%s' not allowed in this record set\n" msgstr "%s:%s: lá»—i: không cho phép trưá»ng “%s†trong tập hợp bản ghi này\n" #: src/rec-int.c:257 #, c-format msgid "%s:%s: error: field '%s' should be unique in this record\n" msgstr "%s:%s: cảnh báo: trưá»ng “%s†cần phải là duy nhất trong bản ghi này\n" #: src/rec-int.c:301 #, c-format msgid "%s:%s: error: prohibited field '%s' found in record\n" msgstr "%s:%s: lá»—i: trưá»ng cấm “%s†tìm thấy trong bản ghi\n" #: src/rec-int.c:333 #, c-format msgid "%s:%s: error: %%constraint[%d] violated in record\n" msgstr "%s:%s: lá»—i: %%constraint[%d] bị vi phạm trong bản ghi\n" #: src/rec-int.c:370 #, c-format msgid "%s:%s: error: confidential field is not encrypted\n" msgstr "%s:%s: lá»—i: trưá»ng bí mật thì chưa được mã hóa\n" #: src/rec-int.c:422 #, c-format msgid "%s:%s: error: key field '%s' not found in record\n" msgstr "%s:%s: lá»—i: trưá»ng yêu cầu “%s†không tìm thấy trong bản ghi\n" #: src/rec-int.c:431 #, c-format msgid "%s:%s: error: multiple key fields '%s' in record\n" msgstr "%s:%s: lá»—i: có nhiá»u trưá»ng khóa “%s†trong bản ghi\n" #: src/rec-int.c:474 #, c-format msgid "%s:%s: error: duplicated key value in field '%s' in record\n" msgstr "%s:%s: lá»—i: trùng lặp khóa trong trưá»ng “%s†trong bản ghi\n" #: src/rec-int.c:562 #, fuzzy, c-format msgid "%s:%s: error: duplicated value in singular field '%s' in record\n" msgstr "%s:%s: lá»—i: trùng lặp khóa trong trưá»ng “%s†trong bản ghi\n" #: src/rec-int.c:620 #, c-format msgid "%s:%s: error: missing %%rec field in record descriptor\n" msgstr "%s:%s: lá»—i: thiếu trưá»ng %%rec trong bá»™ mô tả bản ghi\n" #: src/rec-int.c:628 #, c-format msgid "%s:%s: error: too many %%rec fields in record descriptor\n" msgstr "%s:%s: lá»—i: quá nhiá»u trưá»ng %%rec trong bá»™ mô tả bản ghi\n" #: src/rec-int.c:638 #, c-format msgid "%s:%s: error: invalid record type %s\n" msgstr "%s:%s: lá»—i: kiểu bản ghi %s không hợp lệ\n" #: src/rec-int.c:649 #, c-format msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" msgstr "%s:%s: lá»—i: chỉ cho phép má»™t trưá»ng %%key trong bá»™ mô tả bản ghi\n" #: src/rec-int.c:659 #, c-format msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" msgstr "%s:%s: lá»—i: chỉ cho phép má»™t trưá»ng %%size trong bá»™ mô tả bản ghi\n" #: src/rec-int.c:669 #, c-format msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" msgstr "%s:%s: lá»—i: chỉ cho phép má»™t trưá»ng %%sort trong bá»™ mô tả bản ghi\n" #: src/rec-int.c:692 #, c-format msgid "" "%s:%s: error: expected a comma-separated list of fields before the type " "specification\n" msgstr "" "%s:%s: lá»—i: cần danh sách các trưá»ng ngăn cách bằng dấu phẩy trước đặc tả " "kiểu\n" #: src/rec-int.c:718 src/rec-int.c:771 #, c-format msgid "%s:%s: error: the referred type %s does not exist\n" msgstr "%s:%s: lá»—i: kiểu tham chiếu %s không tồn tại\n" #: src/rec-int.c:730 #, c-format msgid "%s:%s: error: invalid type specification\n" msgstr "%s:%s: lá»—i: đặc tả kiểu không hợp lệ\n" #: src/rec-int.c:745 #, c-format msgid "%s:%s: error: expected a type name before the type specification\n" msgstr "%s:%s: lá»—i: cần tên kiểu trước đặc tả kiểu\n" #: src/rec-int.c:783 #, c-format msgid "%s:%s: error: invalid typedef specification\n" msgstr "%s:%s: lá»—i: đặc tả kiểu không hợp lệ\n" #: src/rec-int.c:805 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" msgstr "" "%s:%s: lá»—i: giá trị cho %s[%zd] không phải là má»™t biểu thức chá»n hợp lệ\n" #: src/rec-int.c:836 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" msgstr "" "%s:%s: lá»—i: giá trị cho %s[%zd] không phải là má»™t danh sách tên trưá»ng\n" #: src/rec-int.c:849 #, c-format msgid "" "%s:%s: error: value for %s should be a number optionally preceded by >, <, " ">= or <=.\n" msgstr "" "%s:%s: lá»—i: giá trị cho %s phải là con số tùy chá»n được treo trước bằng >, " "<, >= or <=.\n" #: src/rec-int.c:865 #, c-format msgid "%s:%s: error: value for %s should be a list of field names.\n" msgstr "%s:%s: lá»—i: giá trị cho %s phải là danh sách tên trưá»ng.\n" #: src/rec-int.c:893 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range, uuid " "or date\n" msgstr "" "%s:%s: lá»—i: trưá»ng tá»±-động-tăng %s phải là kiểu int, vùng, uuid hay ngày " "tháng\n" #: src/rec-int.c:895 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range or " "date\n" msgstr "" "%s:%s: lá»—i: trưá»ng tá»±-động-tăng %s phải là kiểu int, vùng hay ngày tháng\n" #: src/rec-int.c:978 #, c-format msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" msgstr "%s:%s: lá»—i: không thể lấy vá» bá»™ mô tả máy chá»§ từ địa chỉ url %s.\n" #: src/rec-int.c:997 #, c-format msgid "%s:%s: error: could not read external descriptor from file %s.\n" msgstr "%s:%s: lá»—i: không thể Ä‘á»c bá»™ mô tả mở rá»™ng từ tập tin %s.\n" #: src/rec-int.c:1012 #, c-format msgid "%s:%s: error: %s does not contain valid rec data.\n" msgstr "%s:%s: lá»—i: %s không chứa dữ liệu rec hợp lệ.\n" #: src/rec-int.c:1026 #, c-format msgid "%s:%s: error: %s does not contain information for type %s.\n" msgstr "%s:%s: lá»—i: %s không chứa thông tin cho kiểu %s.\n" #: src/rec-int.c:1150 #, c-format msgid "%s: error: the number of records of type %s should be %zd.\n" msgstr "%s: lá»—i: số bản ghi cá»§a kiểu %s phải là %zd.\n" #: src/rec-int.c:1160 #, c-format msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" msgstr "%s: lá»—i: có quá nhiá»u bản ghi cho kiểu %s. Tối Ä‘a là %zd.\n" #: src/rec-int.c:1167 #, c-format msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" msgstr "%s: lá»—i: có quá ít bản ghi cho kiểu %s. Tối thiểu là %zd.\n" #: src/rec-types.c:304 msgid "invalid integer." msgstr "số nguyên không hợp lệ." #: src/rec-types.c:332 msgid "invalid 'field' value." msgstr "giá trị không hợp lệ cho “trưá»ngâ€." #: src/rec-types.c:353 msgid "invalid 'uuid' value." msgstr "giá trị “uuid†không hợp lệ." #: src/rec-types.c:369 msgid "invalid 'bool' value." msgstr "giá trị lôgíc “bool†không hợp lệ." #: src/rec-types.c:390 msgid "invalid 'range' value." msgstr "giá trị “vùng†không hợp lệ." #: src/rec-types.c:399 #, c-format msgid "expected an integer between %d and %d." msgstr "cần má»™t số nguyên nằm giữa %d và %d." #: src/rec-types.c:419 msgid "invalid 'real' value." msgstr "giá trị thá»±c “real†không hợp lệ." #: src/rec-types.c:436 #, c-format msgid "value too large. Expected a size <= %zu." msgstr "giá trị quá lá»›n. Cần kích thước <= %zu." #: src/rec-types.c:456 msgid "invalid 'line' value." msgstr "giá trị dòng “line†không hợp lệ." #: src/rec-types.c:473 msgid "value does not match the regexp." msgstr "giá trị không khá»›p vá»›i biểu thức chính quy regexp." #: src/rec-types.c:492 msgid "invalid date." msgstr "ngày tháng không hợp lệ." #: src/rec-types.c:506 msgid "invalid email." msgstr "địa chỉ thư Ä‘iện tá»­ không hợp lệ." #: src/rec-types.c:547 msgid "invalid enum value." msgstr "kiểu liệt kê (enum) không hợp lệ." #: src/rec-types.c:898 #, c-format msgid "" "internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " "in rec_type_new().\n" msgstr "" "lá»—i ná»™i bá»™: rec-types: nhận REC_TYPE_NONE từ rec_type_parse_type_kind() " "trong rec_type_new().\n" #: src/rec-utils.c:86 #, c-format msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" msgstr "" "lá»—i ná»™i bá»™: rec_int_rec_extract_file: lá»—i khi biên dịch biểu thức chính quy " "(regexp).\n" #: src/rec-utils.c:116 src/rec-utils.c:147 #, c-format msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" msgstr "" "lá»—i ná»™i bá»™: rec_int_rec_extract_url: lá»—i biên dịch biểu thức chính quy " "regexp.\n" #: src/rec-utils.c:290 #, c-format msgid "internal error: rec_match: error compiling regexp.\n" msgstr "lá»—i ná»™i bá»™: rec_match: lá»—i biên dịch biểu thức chính quy regexp.\n" #. TRANSLATORS: --help output, csv2rec synopsis. #. no-wrap #: utils/csv2rec.c:98 #, c-format msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" msgstr "Cách dùng: csv2rec [CÃC-TÙY-CHỌN]... [TẬP-TIN-CSV]\n" #. TRANSLATORS: --help output, csv2rec short description. #. no-wrap #: utils/csv2rec.c:103 msgid "Convert csv data into rec data.\n" msgstr "Chuyển đổi dữ liệu từ kiểu csv sang rec.\n" #. TRANSLATORS: --help output, csv2rec options. #. no-wrap #: utils/csv2rec.c:109 #, fuzzy msgid "" " -t, --type=TYPE type name for the converted records; " "if this\n" " parameter is omitted then no type is " "used.\n" " -s, --strict be strict parsing the csv file.\n" " -e, --omit-empty omit empty fields.\n" msgstr "" " -t, --type=KIỂU tên kiểu cho các bản ghi được chuyển " "đổi; nếu tham số\n" " này được để trống thì kiểu mặc định " "sẽ được áp dụng.\n" " -s, --strict phân tích theo chuẩn csv.\n" " -e, --omit-empty bá» qua các trưá»ng trống.\n" #: utils/csv2rec.c:212 #, c-format msgid "invalid field name '%s' in header\n" msgstr "tên ngưá»i trưá»ng sai “%s†trong phần mở đầu\n" #: utils/csv2rec.c:221 #, fuzzy msgid "error while parsing CSV file: too many columns in row\n" msgstr "gặp lá»—i khi phân tích ngữ pháp tập tin CSV: %s\n" #: utils/csv2rec.c:241 #, fuzzy, c-format msgid "" "%s: %lu: this line contains %lu fields, but %lu header fields were read\n" msgstr "%s: %d: dòng này chứa %d trưá»ng, nhưng mà lại Ä‘á»c được %d trưá»ng đầu\n" #: utils/csv2rec.c:331 utils/recdel.c:233 utils/recset.c:306 utils/recutl.c:317 #, c-format msgid "cannot read file %s\n" msgstr "không thể Ä‘á»c tập tin %s\n" #: utils/csv2rec.c:338 msgid "failed to initialize csv parser\n" msgstr "gặp lá»—i khi khởi tạo bá»™ phân tích csv\n" #: utils/csv2rec.c:355 #, c-format msgid "error while parsing CSV file: %s\n" msgstr "gặp lá»—i khi phân tích ngữ pháp tập tin CSV: %s\n" #. TRANSLATORS: --help output, mdb2rec synopsis. #. no-wrap #: utils/mdb2rec.c:97 #, c-format msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" msgstr "Cách dùng: mdb2rec [TÙY-CHỌN]... TẬP-TIN-MDB [BẢNG]\n" #. TRANSLATORS: --help output, mdb2rec short description. #. no-wrap #: utils/mdb2rec.c:102 msgid "Convert an mdb file into a rec file.\n" msgstr "Chuyển đổi tập tin từ kiểu mdb sang rec.\n" #. TRANSLATORS: --help output, mdb2rec options. #. no-wrap #: utils/mdb2rec.c:108 msgid "" " -s, --system-tables include system tables.\n" " -e, --keep-empty-fields don't prune empty fields in the rec\n" " output.\n" " -l, --list-tables dump a list of the table names " "contained\n" " in the mdb file.\n" msgstr "" " -s, --system-tables bao gồm các bảng hệ thống.\n" " -e, --keep-empty-fields không cắt cụt các trưá»ng trống trong " "kết\n" " xuất rec.\n" " -l, --list-tables đổ danh sách tên các bảng chứa trong\n" " trong tập tin mdb.\n" #: utils/mdb2rec.c:230 utils/mdb2rec.c:288 #, c-format msgid "failed to normalise record type name %s\n" msgstr "gặp lá»—i khi tiêu chuẩn hóa tên kiểu bản ghi %s\n" #: utils/mdb2rec.c:236 utils/mdb2rec.c:245 #, c-format msgid "failed to normalise field name %s\n" msgstr "gặp lá»—i khi tiêu chuẩn hóa tên trưá»ng %s\n" #: utils/mdb2rec.c:307 #, c-format msgid "failed to normalise the field name %s\n" msgstr "gặp lá»—i khi tiêu chuẩn hóa tên trưá»ng %s\n" #: utils/mdb2rec.c:396 utils/recins.c:191 utils/recset.c:223 #, c-format msgid "invalid field name %s.\n" msgstr "tên trưá»ng không hợp lệ %s.\n" #: utils/mdb2rec.c:436 #, c-format msgid "could not open file %s\n" msgstr "không thể mở tập tin %s\n" #: utils/mdb2rec.c:441 msgid "file does not appear to be an Access database\n" msgstr "tập tin có vẻ không phải là cÆ¡ sở dữ liệu Access\n" #. TRANSLATORS: --help output, rec2csv synopsis. #. no-wrap #: utils/rec2csv.c:70 #, c-format msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" msgstr "Cách dùng: rec2csv [TÙY-CHỌN]... [TẬP-TIN-REC]\n" #. TRANSLATORS: --help output, rec2csv short description. #. no-wrap #: utils/rec2csv.c:75 msgid "Convert rec data into csv data.\n" msgstr "Chuyển đổi dữ liệu từ kiểu rec sang csv.\n" #. TRANSLATORS: --help output, rec2csv options. #. no-wrap #: utils/rec2csv.c:81 msgid "" " -d, --delim=char sets the deliminator (default ',')\n" " -t, --type=TYPE record set to convert to csv; if this " "parameter\n" " is omitted then the default record " "set is used\n" " -S, --sort=FIELDS sort the output by the specified " "fields.\n" msgstr "" " -d, --delim=ký_tá»± ngăn cách bằng ký tá»± này (mặc định là " "“,â€)\n" " -t, --type=KIỂU tập hợp các bản ghi chuyển đổi sang " "csv; nếu tham số này\n" " được bá» qua thì tập hợp các bản ghi " "mặc định sẽ được dùng\n" " -S, --sort=TRƯỜNG sắp xếp kết xuất theo trưá»ng này.\n" #: utils/rec2csv.c:121 msgid "only one list of fields can be specified as a sorting criteria.\n" msgstr "chỉ được chỉ ra má»™t trưá»ng làm tiêu chí để sắp xếp.\n" #: utils/rec2csv.c:126 msgid "invalid field name list in -S.\n" msgstr "tên trưá»ng không hợp lệ trong -S.\n" #: utils/rec2csv.c:130 utils/recsel.c:221 utils/recsel.c:245 msgid "internal error creating fex.\n" msgstr "lá»—i ná»™i bá»™ khi tạo “fexâ€.\n" #. TRANSLATORS: --help output, recdel synopsis. #. no-wrap #: utils/recdel.c:78 #, c-format msgid "" "Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [FILE]\n" msgstr "" "Cách dùng: recdel [TÙY-CHỌN]... [-t KIỂU] [-n Sá» | -e BTHỨC_BẢNGHI | -q " "CHUá»–I | -m Sá»] [TẬP-TIN]\n" #. TRANSLATORS: --help output, recdel short description. #. no-wrap #: utils/recdel.c:83 msgid "Remove (or comment out) records from a rec file.\n" msgstr "Gỡ bá» (biến thành ghi chú) các bản ghi từ tập tin rec.\n" #. TRANSLATORS: --help output, recdel arguments. #. no-wrap #: utils/recdel.c:90 msgid "" " -c, --comment comment out the matching records " "instead of\n" " deleting them.\n" " --force delete even in potentially dangerous " "situations,\n" " and if the deletion is violating " "record restrictions.\n" " --no-external don't use external descriptors.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -c, --comment đánh dấu là ghi chú cho các bản ghi " "được tìm thấy\n" " thay vì xóa chúng Ä‘i.\n" " --force xóa ngay cả khi nó tiá»m ẩn rá»§i ro,\n" " và khi nó vi phạm các hạn chế.\n" " --no-external không dùng mô tả từ bên ngoài.\n" " --verbose đưa ra báo cáo chi tiết nếu việc kiểm " "tra\n" " tính toàn vẹn thất bại.\n" #. TRANSLATORS: --help output, notes on recdel. #. no-wrap #. TRANSLATORS: --help output, notes on recfix. #. no-wrap #. TRANSLATORS: --help output, notes on recins. #. no-wrap #: utils/recdel.c:108 utils/recfix.c:149 utils/recins.c:138 msgid "" "If no FILE is specified then the command acts like a filter, getting\n" "the data from standard input and writing the result to standard output.\n" msgstr "" "Nếu không đưa ra TẬP-TIN thì lệnh thá»±c hiện như là má»™t bá»™ lá»c, lấy\n" "dữ liệu từ đầu vào tiêu chuẩn và kết quả đưa ra đầu ra tiêu chuẩn.\n" #: utils/recdel.c:123 #, c-format msgid "no records of type %s found.\n" msgstr "không tìm thấy bản ghi nào thuá»™c kiểu %s.\n" #: utils/recdel.c:196 #, c-format msgid "ignoring a request to delete all records of type %s.\n" msgstr "lá» Ä‘i các yêu cầu xóa các bản ghi thuá»™c kiểu %s.\n" #: utils/recdel.c:198 msgid "use --force if you really want to proceed, or use either -n or -e.\n" msgstr "" "dùng --force nếu bạn thá»±c sá»± muốn xá»­ lý, hoặc dùng má»™t trong hai tùy chá»n -" "n, -e.\n" #: utils/recdel.c:206 msgid "invalid selection expression.\n" msgstr "Biểu thức chính quy đã chá»n không hợp lệ.\n" #: utils/recdel.c:241 utils/recfix.c:344 utils/recins.c:361 utils/recset.c:312 #, c-format msgid "file %s is not writable.\n" msgstr "không thể ghi vào tập tin %s.\n" #. TRANSLATORS: --help output, recfix synopsis. #. no-wrap #: utils/recfix.c:99 #, c-format msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" msgstr "" "Cách dùng: recfix [TÙY-CHỌN]... [THAO-TÃC] [TÙY-CHỌN-THAO-TÃC]... [TẬP-TIN]\n" #. TRANSLATORS: --help output, recfix short description. #. no-wrap #: utils/recfix.c:104 msgid "Check and fix rec files.\n" msgstr "Kiểm tra và sá»­a chữa các tập tin rec.\n" #. TRANSLATORS: --help output, recfix global arguments. #. no-wrap #: utils/recfix.c:111 msgid "" " --no-external don't use external descriptors.\n" " --force force the requested operation.\n" msgstr "" " --no-external không dùng mô tả từ bên ngoài.\n" " --force ép buá»™c thao tác được yêu cầu.\n" #. TRANSLATORS: --help output, recfix operations. #. no-wrap #: utils/recfix.c:121 msgid "" "Operations:\n" " --check check integrity of the specified " "file. Default.\n" " --sort sort the records in the specified " "file.\n" " --auto insert auto-generated fields in " "records missing them.\n" msgstr "" "Các thao tác:\n" " --check kiểm tra tính toàn vẹn cá»§a tập tin. " "Mặc định.\n" " --sort sắp xếp các bản ghi trong tập tin đã " "cho.\n" " --auto chèn thêm các trưá»ng auto-generated " "vào các bản ghi bị thiếu.\n" #. TRANSLATORS: --help output, recfix operations related with encryption. #. no-wrap #: utils/recfix.c:131 msgid "" " --encrypt encrypt confidential fields in the " "specified file.\n" " --decrypt decrypt confidential fields in the " "specified file.\n" msgstr "" " --encrypt mã hóa các trưá»ng trong tập tin đã " "cho.\n" " --decrypt giải mã các trưá»ng trong tập tin đã " "cho.\n" #. TRANSLATORS: --help output, recfix encryption and decryption #. options. #. no-wrap #: utils/recfix.c:140 msgid "" "De/Encryption options:\n" " -s, --password=PASSWORD encrypt/decrypt with this password.\n" msgstr "" "Tùy chá»n mã hóa và giải mã:\n" " -s, --password=MẬT_KHẨU mã hóa hoặc giải mã dùng MẬT_KHẨU " "này.\n" #: utils/recfix.c:184 msgid "--password|-s must be used as an operation argument.\n" msgstr "--password|-s phải được dùng như là má»™t đối số thao tác.\n" #: utils/recfix.c:188 msgid "the specified operation does not require a password.\n" msgstr "thao tác đã cho không yêu cầu mật khẩu.\n" #: utils/recfix.c:191 msgid "please specify just one password.\n" msgstr "chỉ được phép chỉ ra má»™t mật khẩu.\n" #: utils/recfix.c:198 utils/recfix.c:204 utils/recfix.c:210 utils/recfix.c:217 #: utils/recfix.c:223 msgid "please specify just one operation.\n" msgstr "chỉ được phép chỉ ra má»™t thao tác.\n" #: utils/recfix.c:304 utils/recfix.c:326 utils/recfix.c:365 utils/recfix.c:435 #, fuzzy, c-format msgid "recfix: error: cannot read file %s\n" msgstr "lá»—i: không thể Ä‘á»c tập tin %s\n" #: utils/recfix.c:399 msgid "the database contains already encrypted fields\n" msgstr "cÆ¡ sở dữ liệu đã sẵn chứa các trưá»ng được mã hóa\n" #: utils/recfix.c:400 msgid "please use --force or --decrypt\n" msgstr "hãy dùng --force hoặc --decrypt\n" #: utils/recfix.c:499 msgid "unknown operation in recfix: please report this as a bug.\n" msgstr "không hiểu thao tác recfix: hãy báo cáo đây là má»™t lá»—i.\n" #. TRANSLATORS: --help output, recfmt synopsis. #. no-wrap #: utils/recfmt.c:64 #, c-format msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" msgstr "Cách dùng: recfmt [TÙY-CHỌN]... [MẪU]\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:69 msgid "Apply a template to records read from standard input.\n" msgstr "Ãp dụng mẫu cho các bản ghi Ä‘á»c từ đầu ra tiêu chuẩn.\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:75 msgid "" " -f, --file=FILENAME read the template to apply from a " "file.\n" msgstr "" " -f, --file=TẬP-TIN Ä‘á»c mẫu để áp dụng từ má»™t tập tin.\n" #: utils/recfmt.c:107 #, c-format msgid "can't open file %s for reading.\n" msgstr "Không thể mở tập tin %s để Ä‘á»c.\n" #: utils/recfmt.c:120 msgid "don't specify a template in the command line and -f at the same time.\n" msgstr "đừng dùng mẫu trong câu lệnh và tùy chá»n -f cùng má»™t lúc.\n" #: utils/recfmt.c:142 msgid "invalid expression in a template slot.\n" msgstr "biểu thức không hợp lệ trong slot mẫu.\n" #: utils/recfmt.c:146 msgid "error evaluating expression in a template slot.\n" msgstr "gặp lá»—i khi ước lượng giá trị cá»§a biểu thức trong slot mẫu.\n" #: utils/recfmt.c:178 msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" msgstr "" "recfmt_apply_template: lá»—i dịch biểu thức chính qui. Hãy báo cáo lá»—i này.\n" #. TRANSLATORS: --help output, recinf synopsis. #. no-wrap #: utils/recinf.c:77 #, c-format msgid "Usage: recinf [OPTION]... [FILE]...\n" msgstr "Cách dùng: recinf [TÙY-CHỌN]... [TẬP-TIN]...\n" #. TRANSLATORS: --help output, recinf short description. #. no-wrap #: utils/recinf.c:82 msgid "Print information about the types of records stored in the input.\n" msgstr "Hiển thị thông tin vá» các kiểu cá»§a các trưá»ng đã lưu trong đầu vào.\n" #. TRANSLATORS: --help output, recinf arguments. #. no-wrap #: utils/recinf.c:89 msgid "" " -t, --type=RECORD_TYPE print information on the records having " "the\n" " specified type.\n" " -d, --descriptor include the full record descriptors.\n" " -n, --names-only output just the names of the record files\n" " found in the input.\n" msgstr "" " -t, --type=KIỂU-BẢN-GHI hiển thị thông tin trên những bản ghi có\n" " kiểu đã cho.\n" " -d, --descriptor bao gồm đầy đủ cả các mô tả bản ghi.\n" " -n, --names-only chỉ hiển thị tên cá»§a những tập tin bản " "ghi\n" " được tìm thấy từ đầu vào.\n" #. TRANSLATORS: --help output, recinf special options. #. no-wrap #: utils/recinf.c:102 msgid "" "Special options:\n" " -S, --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Các tùy chá»n đặc biệt:\n" " -S, --print-sexps hiển thị dữ liệu ở định dạng sexps " "thay cho rec.\n" #: utils/recinf.c:234 #, c-format msgid "error: cannot read file %s\n" msgstr "lá»—i: không thể Ä‘á»c tập tin %s\n" #. TRANSLATORS: --help output, recins synopsis. #. no-wrap #: utils/recins.c:100 #, c-format msgid "" "Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" msgstr "" "Cách dùng: recins [TÙY-CHỌN]... [-t KIỂU] [-n Sá» | -e BTHỨC_BẢN_GHI | -q " "CHUá»–I | -m Sá»] [(-f TÊN -v CHUá»–I]|[-R RECDATA)]... [TẬP-TIN]\n" #. TRANSLATORS: --help output, recins short description. #. no-wrap #: utils/recins.c:105 msgid "Insert new records in a rec database.\n" msgstr "Chèn thêm các bản ghi má»›i vào cÆ¡ sở dữ liệu rec.\n" #. TRANSLATORS: --help output, recins arguments. #. no-wrap #: utils/recins.c:111 msgid "" " -f, --field=STR field name; should be followed by a -" "v.\n" " -v, --value=STR field value; should be preceded by an -" "f.\n" " -r, --record=STR record that will be inserted in the " "file.\n" " --force insert the record even if it is " "violating\n" " record restrictions.\n" " --no-external don't use external descriptors.\n" " --no-auto don't insert auto generated fields.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -f, --field=CHUá»–I tên trưá»ng; nên được theo sau -v.\n" " -v, --value=CHUá»–I tên trưá»ng; nên được theo trước -f.\n" " -r, --record=CHUá»–I bản ghi sẽ được chèn trong tập tin.\n" " --force chèn bản ghi thậm chí nó vi phạm\n" " các hạn chế.\n" " --no-external không dùng các mô tả từ bên ngoài.\n" " --no-auto không chèn các trưá»ng tá»± động.\n" " --verbose đưa ra thông tin chi tiết nếu không " "đạt\n" " khi kiểm tra tính toàn vẹn dữ liệu.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recins.c:125 msgid "" " -s, --password=STR encrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=MK mã hóa các trưá»ng bằng mật khẩu đã " "cho.\n" #: utils/recins.c:179 msgid "a -f should be followed by a -v\n" msgstr "-f phải theo sau bởi -v\n" #: utils/recins.c:198 msgid "a -v should be preceded by a -f\n" msgstr "-v phải được Ä‘i trước bởi -f\n" #: utils/recins.c:214 utils/recsel.c:204 msgid "more than one password was specified\n" msgstr "đã đưa ra nhiá»u hÆ¡n má»™t mật khẩu\n" #: utils/recins.c:224 msgid "error while parsing the record provided by -r\n" msgstr "gặp lá»—i trong khi phân tích bản ghi cung cấp bởi tùy chá»n -r\n" #: utils/recins.c:256 #, c-format msgid "please provide a value for the field %s\n" msgstr "hãy cung cấp giá trị cho trưá»ng %s\n" #. TRANSLATORS: --help output, recsel synopsis. #. no-wrap #: utils/recsel.c:107 #, c-format msgid "" "Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " "| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" msgstr "" "Cách dùng: recsel [TÙY-CHỌN]... [-t KIỂU] [-j TRƯỜNG] [-n CHỈSá» | -e " "BTHỨC_BẢNGHI | -q CHUá»–I | -m Sá»] [-c | (-p|-P) BTHỨC_TRƯỜNG] [TẬP-TIN]...\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:112 msgid "Select and print rec data.\n" msgstr "Chá»n và hiển thị dữ liệu rec.\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:118 msgid "" " -d, --include-descriptors print record descriptors along with " "the matched\n" " records.\n" " -C, --collapse do not section the result in records " "with newlines.\n" " -S, --sort=FIELD,... sort the output by the specified " "fields.\n" " -G, --group-by=FIELD,... group records by the specified " "fields.\n" " -U, --uniq remove duplicated fields in the output " "records.\n" msgstr "" " -d, --include-descriptors hiển thị các mô tả bản ghi cùng vá»›i\n" " các bản ghi tìm thấy.\n" " -C, --collapse không phân Ä‘oạn kết quả từng bản ghi " "bằng ngắt dòng.\n" " -S, --sort=TRƯỜNG sắp xếp kết xuất theo trưá»ng đã cho.\n" " -G, --group-by=TRƯỜNG,... nhóm các bản ghi theo trưá»ng đã cho.\n" " -U, --uniq gỡ bá» các trưá»ng bị trùng trong các " "bản ghi kết xuất.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recsel.c:130 msgid "" " -s, --password=STR decrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=MK giải mã các trưá»ng bằng mật khẩu.\n" #: utils/recsel.c:139 msgid "" " -j, --join=FIELD perform an inner join using the " "specified field.\n" msgstr "" " -j, --join=TRƯỜNG thá»±c hiện phép gia nhập “inner join†" "dùng trưá»ng đã cho.\n" #. TRANSLATORS: --help output, recsel output options. #. no-wrap #: utils/recsel.c:146 msgid "" "Output options:\n" " -p, --print=FIELDS comma-separated list of fields to " "print for each\n" " matching record.\n" " -P, --print-values=FIELDS as -p, but print only the values of " "the selected\n" " fields.\n" " -R, --print-row=FIELDS as -P, but separate the values with " "spaces instead\n" " of newlines.\n" " -c, --count print a count of the matching records " "instead of\n" " the records themselves.\n" msgstr "" "Các tùy chá»n kết xuất:\n" " -p, --print=TRƯỜNG danh sách các trưá»ng (ngăn cách bằng " "dấu phẩy) sẽ được in ra\n" " khi kết xuất.\n" " -P, --print-values=TRƯỜNG như -p, nhưng chỉ in giá trị cá»§a các " "trưá»ng\n" " đã chá»n.\n" " -R, --print-row=TRƯỜNG như -P, nhưng ngăn cách các giá trị " "bằng khoảng trắng\n" " thay vì ngắt dòng.\n" " -c, --count in ra số lượng cá»§a các bản ghi\n" " thay cho các bản ghi.\n" #. TRANSLATORS: --help output, recsel special options. #. no-wrap #: utils/recsel.c:160 msgid "" "Special options:\n" " --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Tùy chá»n đặc biệt:\n" " --print-sexps hiển thị dữ liệu theo định dạng sexps " "thay cho rec.\n" #: utils/recsel.c:212 msgid "only one field list can be specified as a sorting criteria.\n" msgstr "chỉ được chỉ ra má»™t trưá»ng làm tiêu chí để sắp xếp.\n" #: utils/recsel.c:217 msgid "invalid field names in -S.\n" msgstr "tên trưá»ng không hợp lệ trong -S.\n" #: utils/recsel.c:226 msgid "only one field can be specified as join criteria.\n" msgstr "chỉ được chỉ ra má»™t trưá»ng làm tiêu chí để gia nhập (join).\n" #: utils/recsel.c:229 msgid "please specify a correct field name to -j|--join.\n" msgstr "hãy chỉ ra má»™t tên trưá»ng đúng cho tùy chá»n -j|--join.\n" #: utils/recsel.c:236 msgid "only one field list can be specified as a grouping criteria.\n" msgstr "chỉ được chỉ ra má»™t trưá»ng làm tiêu chí để nhóm.\n" #: utils/recsel.c:241 msgid "invalid field names in -G.\n" msgstr "tên trưá»ng không hợp lệ trong -G.\n" #: utils/recsel.c:255 msgid "cannot specify -[pPR] and also -c.\n" msgstr "không được phép đưa ra -[pPR] mà lại còn dùng -c.\n" #: utils/recsel.c:266 #, c-format msgid "invalid list of fields in -%c\n" msgstr "tên trưá»ng không hợp lệ trong -%c\n" #: utils/recsel.c:272 msgid "internal error creating the field expression.\n" msgstr "lá»—i ná»™i bá»™ khi tạo biểu thức trưá»ng.\n" #: utils/recsel.c:284 #, c-format msgid "invalid aggregate function '%s'\n" msgstr "hàm kết tập “%s†không hợp lệ\n" #: utils/recsel.c:296 msgid "cannot specify -c and also -p.\n" msgstr "không thể chỉ ra đồng thá»i hai tùy chá»n -c và -p.\n" #: utils/recsel.c:309 msgid "joins can only be used when a named record set is selected.\n" msgstr "phép gia nhập chỉ được dùng khi mà tập hợp bản ghi có tên được chá»n.\n" #: utils/recsel.c:363 msgid "several record types found. Please use -t to specify one.\n" msgstr "tìm thấy vài kiểu bản ghi. Hãy dùng tùy chá»n -t để chỉ định má»™t.\n" #. TRANSLATORS: --help output, recset synopsis. #. no-wrap #: utils/recset.c:99 #, c-format msgid "Usage: recset [OPTION]... [FILE]...\n" msgstr "Cách dùng: recset [TÙY-CHỌN]... [TẬP-TIN]...\n" #. TRANSLATORS: --help output, recset short description. #. no-wrap #: utils/recset.c:104 msgid "Alter or delete fields in records.\n" msgstr "Thay thế hay xóa các trưá»ng trong bản ghi.\n" #. TRANSLATORS: --help output, recset options. #. no-wrap #: utils/recset.c:110 msgid "" " --no-external don't use external descriptors.\n" " --force alter the records even if violating " "record\n" " restrictions.\n" msgstr "" " --no-external không dùng bá»™ mô tả từ bên ngoài.\n" " --force thay thế các bản ghi ngay cả khi nó vi " "phạm\n" " các hạn chế.\n" #. TRANSLATORS: --help output, recset field selection options. #. no-wrap #: utils/recset.c:123 msgid "" "Field selection options:\n" " -f, --fields=FIELDS comma-separated list of field names " "with optional\n" " subscripts.\n" msgstr "" "Các tùy chá»n chá»n trưá»ng:\n" " -f, --fields=TRƯỜNG danh sách tên trưá»ng được ngăn cách " "bằng dấu phẩy\n" " vá»›i chỉ số phụ tùy chá»n.\n" #. TRANSLATORS: --help output, recset actions. #. no-wrap #: utils/recset.c:131 msgid "" "Actions:\n" " -s, --set=VALUE change the value of the selected " "fields.\n" " -a, --add=VALUE add the selected fields with the given " "value.\n" " -S, --set-add=VALUE change the value of the selected " "fields. If they don't\n" " exist then add a new field with that " "value.\n" " -r, --rename=NAME rename the selected fields to a given " "name. If an entire\n" " record set is selected then the " "field is renamed in the\n" " record descriptor as well.\n" " -d, --delete delete the selected fields.\n" " -c, --comment comment out the selected fields.\n" msgstr "" "Hành vi:\n" " -s, --set=GIÃ-TRỊ thay đổi giá trị cá»§a các trưá»ng đã " "chá»n.\n" " -a, --add=GIÃ-TRỊ thêm các trưá»ng đã chá»n bằng giá trị " "đã cho.\n" " -S, --set-add=GIÃ-TRỊ thay đổi giá trị cá»§a các trưá»ng đã " "chá»n. Nếu chúng\n" " chưa có thì thêm trưá»ng bằng giá trị " "này.\n" " -r, --rename=TÊN đổi tên trưá»ng bằng tên đã cho. Nếu " "toàn bá»™ tập hợp\n" " bản ghi được chá»n thì trưá»ng đổi " "tên \n" " mô tả bản ghi cÅ©ng bị đổi tên.\n" " -d, --delete xóa các trưá»ng đã chá»n.\n" " -c, --comment biến các trưá»ng đã chá»n thành ghi " "chú.\n" #: utils/recset.c:154 msgid "please specify some field with -f.\n" msgstr "hãy chỉ ra má»™t số trưá»ng cho tùy chá»n -f.\n" #: utils/recset.c:159 msgid "please specify just one action.\n" msgstr "chỉ được phép chỉ ra má»™t hành động.\n" #: utils/recset.c:193 msgid "invalid field expression in -f.\n" msgstr "biểu thức trưá»ng không hợp lệ trong -f.\n" #: utils/recset.c:199 msgid "creating the field expression.\n" msgstr "tạo biểu thức trưá»ng.\n" #: utils/recset.c:214 msgid "" "the rename operation requires just one field with an optional subscript.\n" msgstr "thao tác đổi tên yêu cầu chỉ má»™t trưá»ng vá»›i má»™t subcript tùy chá»n.\n" #: utils/recutl.c:123 #, c-format msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" msgstr "Trang chá»§ %s: <http://www.gnu.org/software/recutils/>\n" #: utils/recutl.c:126 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" "Trợ giúp chung vá» sá»­ dụng phần má»m GNU: <http://www.gnu.org/gethelp/>\n" #. TRANSLATORS: --help output, common arguments. #. no-wrap #: utils/recutl.c:135 msgid "" " --help print a help message and exit.\n" " --version show version and exit.\n" msgstr "" " --help hiển thị trợ giúp rồi thoát.\n" " --version hiển thị phiên bản rồi thoát.\n" #. TRANSLATORS: --help output, record selection arguments #. no-wrap #: utils/recutl.c:146 msgid "" "Record selection options:\n" " -i, --case-insensitive make strings case-insensitive in " "selection\n" " expressions.\n" " -t, --type=TYPE operate on records of the specified " "type only.\n" " -e, --expression=RECORD_EXPR selection expression.\n" " -q, --quick=STR select records with fields containing " "a string.\n" " -n, --number=NUM,... select specific records by position, " "with ranges.\n" " -m, --random=NUM select a given number of random " "records.\n" msgstr "" "Các tùy chá»n để lấy bản ghi:\n" " -i, --case-insensitive làm cho biểu thức chá»n phân biệt HOA/" "thưá»ng\n" " -t, --type=KIỂU chỉ thao tác vá»›i các bản ghi có kiểu " "đã cho.\n" " -e, --expression=BTHỨC_BGHI biểu thức chá»n.\n" " -q, --quick=CHUá»–I lấy các bản ghi vá»›i các trưá»ng chứa " "chuá»—i.\n" " -n, --number=Sá»,... lấy các bản ghi theo vị trí vá»›i má»™t " "vùng.\n" " -m, --random=Sá» lấy ra số bản ghi ngẫu nhiên.\n" #: utils/recutl.c:171 #, c-format msgid "" "Copyright (C) %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Tác quyá»n © %s Jose E. Marchesi.\n" "Giấy Phép Công Cá»™ng GNU (GPL), phiên bản 3 hay sau <http://gnu.org/licenses/" "gpl.html>.\n" "Äây là phần má»m tá»± do: bạn có quyá»n thay đổi và phát hành lại nó.\n" "KHÔNG CÓ BẢO HÀNH GÃŒ CẢ, vá»›i Ä‘iá»u kiện được pháp luật cho phép.\n" #: utils/recutl.c:177 msgid "" "\n" "Written by Jose E. Marchesi." msgstr "" "\n" "ÄÆ°á»£c viết bởi Jose E. Marchesi." #: utils/recutl.c:189 utils/recutl.c:209 msgid ": error: " msgstr ": lá»—i:" #: utils/recutl.c:221 msgid ": warning: " msgstr ": cảnh báo: " #: utils/recutl.c:246 #, c-format msgid "duplicated record set '%s' from %s.\n" msgstr "trùng lặp tập hợp bản ghi “%s†từ %s.\n" #: utils/recutl.c:401 msgid "cannot create a unique name.\n" msgstr "không tạo được tên tập tin duy nhất.\n" #: utils/recutl.c:421 #, c-format msgid "renaming file %s to %s\n" msgstr "đổi tên tập tin %s thành %s\n" #: utils/recutl.c:463 msgid "operation aborted due to integrity failures.\n" msgstr "thao tác bị bãi bá» bởi vì tính liêm chính không được đảm bảo.\n" #: utils/recutl.c:464 msgid "use --verbose to get a detailed report.\n" msgstr "" "dùng --verbose để nhận được báo cáo chi tiết những gì Ä‘ang thá»±c hiện.\n" #: utils/recutl.c:471 msgid "use --force to skip the integrity check.\n" msgstr "dùng --force để bá» qua kiểm tra sá»± toàn vẹn dữ liệu.\n" #: utils/recutl.c:529 msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" msgstr "" "lá»—i ná»™i bá»™: recutl_index_list_parse: lá»—i biên dịch biểu thức chính quy.\n" #: utils/recutl.c:596 msgid "Password: " msgstr "Mật khẩu: " #: utils/recutl.c:602 msgid "Password again: " msgstr "Gõ lại mật khẩu: " #: utils/recutl.c:607 msgid "the provided passwords don't match.\n" msgstr "mật khẩu đã cung cấp không khá»›p.\n" #: utils/recutl.h:84 utils/recutl.h:131 utils/recutl.h:133 #, fuzzy msgid "cannot specify -e and also -n\n" msgstr "không thể chỉ ra đồng thá»i hai tùy chá»n -c và -p.\n" #: utils/recutl.h:86 #, fuzzy msgid "cannot specify -e and also -q\n" msgstr "không thể chỉ ra đồng thá»i hai tùy chá»n -c và -p.\n" #: utils/recutl.h:94 #, fuzzy msgid "invalid selection expression\n" msgstr "Biểu thức chính quy đã chá»n không hợp lệ.\n" #: utils/recutl.h:100 #, fuzzy msgid "cannot specify -n and also -e\n" msgstr "không thể chỉ ra đồng thá»i hai tùy chá»n -c và -p.\n" #: utils/recutl.h:102 #, fuzzy msgid "cannot specify -n and also -q\n" msgstr "không thể chỉ ra đồng thá»i hai tùy chá»n -c và -p.\n" #: utils/recutl.h:106 #, fuzzy msgid "invalid list of indexes in -n\n" msgstr "tên trưá»ng không hợp lệ trong -%c\n" #: utils/recutl.h:111 #, fuzzy msgid "cannot specify -m and also -e\n" msgstr "không thể chỉ ra đồng thá»i hai tùy chá»n -c và -p.\n" #: utils/recutl.h:113 #, fuzzy msgid "cannot specify -m and also -q\n" msgstr "không thể chỉ ra đồng thá»i hai tùy chá»n -c và -p.\n" #: utils/recutl.h:115 #, fuzzy msgid "cannot specify -m and also -n\n" msgstr "không thể chỉ ra đồng thá»i hai tùy chá»n -c và -p.\n" #~ msgid "_open_osfhandle failed" #~ msgstr "_open_osfhandle gặp lá»—i" #~ msgid "cannot restore fd %d: dup2 failed" #~ msgstr "không thể phục hồi bá»™ mô tả tập tin %d: dup2 gặp lá»—i" #, fuzzy #~ msgid "" #~ "\n" #~ "Report bugs to: %s\n" #~ msgstr "" #~ "Thông báo lá»—i cho: %s\n" #~ "Thông báo lá»—i dịch cho: <http://translationproject.org/team/vi.html>.\n" #, fuzzy #~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n" #~ msgstr "Trang chá»§ %s: <http://www.gnu.org/software/recutils/>\n" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: tùy chá»n “--%s†không cho phép đối số\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: không nhận ra tùy chá»n “--%sâ€\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: tùy chá»n “-W %s†không cho phép có đối số\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: tùy chá»n “-W %s†cần má»™t đối số\n" #~ msgid "" #~ "%s:%s: warning: type %s collides with referred type %s in the rset %s.\n" #~ msgstr "" #~ "%s:%s: cảnh báo: kiểu %s đối lập vá»›i kiểu tham chiếu %s trong rset %s.\n" #~ msgid "%s:%s: error: value for %s shall be a field name.\n" #~ msgstr "%s:%s: lá»—i: giá trị cho %s phải là tên trưá»ng.\n" #~ msgid "reached maximum number of fields: %d\n" #~ msgstr "đã đạt đến số lượng trưá»ng tối Ä‘a: %d\n" #~ msgid "not enough headers" #~ msgstr "không đủ header" #~ msgid "out of memory" #~ msgstr "hết bá»™ nhá»›" #~ msgid "evaluating the selection expression.\n" #~ msgstr "ước lượng biểu thức chính qui đã chá»n.\n" #~ msgid "reading file %s" #~ msgstr "Ä‘ang Ä‘á»c tập tin %s" ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/es.po�������������������������������������������������������������������������������0000644�0000000�0000000�00000152722�14226577415�011517� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Translation for GNU recutils for Spanish # Copyright (C) 2015 Free Software Foundation, Inc. # This file is distributed under the same license as the recutils package. # Enrique Lazcorreta Puigmartí <enrique.lazcorreta@gmail.com>, 2015. # msgid "" msgstr "" "Project-Id-Version: GNU recutils 1.6.90\n" "Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" "POT-Creation-Date: 2022-04-16 19:38+0200\n" "PO-Revision-Date: 2015-01-28 11:16+0100\n" "Last-Translator: Enrique Lazcorreta Puigmartí <enrique.lazcorreta@gmail." "com>\n" "Language-Team: Spanish <es@tp.org.es>\n" "Language: es\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n != 1);\n" "X-Generator: Poedit 1.7.4\n" #: lib/closeout.c:122 #, fuzzy msgid "write error" msgstr "error de escritura" #: lib/copy-acl.c:54 lib/copy-file.c:215 #, c-format msgid "preserving permissions for %s" msgstr "" #: lib/copy-file.c:192 #, fuzzy, c-format msgid "error while opening %s for reading" msgstr "error al analizar el archivo CSV: %s\n" #: lib/copy-file.c:196 #, c-format msgid "cannot open backup file %s for writing" msgstr "" #: lib/copy-file.c:200 #, fuzzy, c-format msgid "error reading %s" msgstr "no se puede leer el archivo %s\n" #: lib/copy-file.c:204 #, c-format msgid "error writing %s" msgstr "" #: lib/copy-file.c:208 #, fuzzy, c-format msgid "error after reading %s" msgstr "no se puede leer el archivo %s\n" #: lib/error.c:195 msgid "Unknown system error" msgstr "Error del sistema desconocido" #: lib/execute.c:348 lib/wait-process.c:291 lib/wait-process.c:365 #, c-format msgid "%s subprocess failed" msgstr "Fallo en el subproceso %s" #: lib/getopt.c:278 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: la opción '-W %s' es ambigua\n" #: lib/getopt.c:284 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: la opción '%s' es ambigua; posibilidades:" #: lib/getopt.c:319 #, fuzzy, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: no se reconoce la opción '%c%s'\n" #: lib/getopt.c:345 #, fuzzy, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: la opción '%c%s' no admite ningún argumento\n" #: lib/getopt.c:360 #, fuzzy, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: la opción '--%s' requiere un argumento\n" #: lib/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: opción inválida -- '%c'\n" #: lib/getopt.c:636 lib/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: la opción -- '%c' requiere un argumento\n" #: lib/obstack.c:337 lib/obstack.c:339 lib/xalloc-die.c:34 msgid "memory exhausted" msgstr "memoria agotada" #: lib/openat-die.c:38 #, c-format msgid "unable to record current working directory" msgstr "" #: lib/openat-die.c:57 #, c-format msgid "failed to return to initial working directory" msgstr "" #: parse-datetime.y:440 parse-datetime.y:540 #, c-format msgid "parsed %s part: " msgstr "" #: parse-datetime.y:455 #, c-format msgid "year: %04<PRIdMAX>" msgstr "" #: parse-datetime.y:483 #, c-format msgid "%s (day ordinal=%<PRIdMAX> number=%d)" msgstr "" #: parse-datetime.y:514 #, c-format msgid "number of seconds: %<PRIdMAX>" msgstr "" #: parse-datetime.y:547 msgid "today/this/now\n" msgstr "" #: parse-datetime.y:612 msgid "number of seconds" msgstr "" #: parse-datetime.y:625 msgid "datetime" msgstr "" #: parse-datetime.y:630 msgid "time" msgstr "" #: parse-datetime.y:635 msgid "local_zone" msgstr "" #: parse-datetime.y:640 msgid "zone" msgstr "" #: parse-datetime.y:645 msgid "date" msgstr "" #: parse-datetime.y:650 msgid "day" msgstr "" #: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 msgid "relative" msgstr "" #: parse-datetime.y:658 msgid "number" msgstr "" #: parse-datetime.y:662 msgid "hybrid" msgstr "" #: parse-datetime.y:820 #, c-format msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" msgstr "" #: parse-datetime.y:832 #, c-format msgid "" "warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" msgstr "" #: parse-datetime.y:1279 #, c-format msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" msgstr "" #: parse-datetime.y:1289 #, c-format msgid "error: out-of-range year %<PRIdMAX>\n" msgstr "" #: parse-datetime.y:1520 #, fuzzy, c-format msgid "error: unknown word '%s'\n" msgstr "no se puede leer el archivo %s\n" #: parse-datetime.y:1669 #, fuzzy msgid "error: invalid date/time value:\n" msgstr "valor de enumeración no válido" #: parse-datetime.y:1670 #, c-format msgid " user provided time: '%s'\n" msgstr "" #: parse-datetime.y:1672 #, c-format msgid " normalized time: '%s'\n" msgstr "" #: parse-datetime.y:1695 msgid " possible reasons:\n" msgstr "" #: parse-datetime.y:1697 msgid " non-existing due to daylight-saving time;\n" msgstr "" #: parse-datetime.y:1699 msgid " invalid day/month combination;\n" msgstr "" #: parse-datetime.y:1700 msgid " numeric values overflow;\n" msgstr "" #: parse-datetime.y:1701 msgid "incorrect timezone" msgstr "" #: parse-datetime.y:1702 msgid "missing timezone" msgstr "" #: parse-datetime.y:1810 msgid "error: initial year out of range\n" msgstr "" #: parse-datetime.y:1905 #, fuzzy msgid "error: parsing failed\n" msgstr "error al analizar el archivo CSV: %s\n" #: parse-datetime.y:1906 #, fuzzy, c-format msgid "error: parsing failed, stopped at '%s'\n" msgstr "error al analizar el archivo CSV: %s\n" #: parse-datetime.y:1916 msgid "input timezone: " msgstr "" #: parse-datetime.y:1919 #, c-format msgid "'@timespec' - always UTC" msgstr "" #: parse-datetime.y:1921 #, c-format msgid "parsed date/time string" msgstr "" #: parse-datetime.y:1925 #, c-format msgid "TZ=\"%s\" in date string" msgstr "" #: parse-datetime.y:1929 #, c-format msgid "TZ=\"UTC0\" environment value or -u" msgstr "" #: parse-datetime.y:1932 #, c-format msgid "TZ=\"%s\" environment value" msgstr "" #: parse-datetime.y:1935 #, c-format msgid "system default" msgstr "" #: parse-datetime.y:1977 msgid "error: year, month, or day overflow\n" msgstr "" #: parse-datetime.y:1988 #, fuzzy, c-format msgid "error: invalid hour %<PRIdMAX>%s\n" msgstr "%s:%s: error: tipo de registro %s no válido\n" #: parse-datetime.y:1996 #, c-format msgid "using specified time as starting value: '%s'\n" msgstr "" #: parse-datetime.y:1997 #, c-format msgid "using current time as starting value: '%s'\n" msgstr "" #: parse-datetime.y:2051 #, c-format msgid "error: tzalloc (\"%s\") failed\n" msgstr "" #: parse-datetime.y:2095 #, c-format msgid "" "error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " "date: '%s'\n" msgstr "" #: parse-datetime.y:2106 #, c-format msgid "new start date: '%s' is '%s'\n" msgstr "" #: parse-datetime.y:2115 #, c-format msgid "using current date as starting value: '%s'\n" msgstr "" #: parse-datetime.y:2119 #, c-format msgid "warning: day (%s) ignored when explicit dates are given\n" msgstr "" #: parse-datetime.y:2123 #, c-format msgid "starting date/time: '%s'\n" msgstr "" #: parse-datetime.y:2133 msgid "" "warning: when adding relative months/years, it is recommended to specify the " "15th of the months\n" msgstr "" #: parse-datetime.y:2138 msgid "warning: when adding relative days, it is recommended to specify noon\n" msgstr "" #: parse-datetime.y:2148 #, fuzzy, c-format msgid "error: %s:%d\n" msgstr "error de escritura" #: parse-datetime.y:2163 #, c-format msgid "error: adding relative date resulted in an invalid date: '%s'\n" msgstr "" #: parse-datetime.y:2172 #, c-format msgid "" "after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " "days),\n" msgstr "" #: parse-datetime.y:2176 #, c-format msgid " new date/time = '%s'\n" msgstr "" #: parse-datetime.y:2195 msgid "warning: daylight saving time changed after date adjustment\n" msgstr "" #: parse-datetime.y:2214 msgid "warning: month/year adjustment resulted in shifted dates:\n" msgstr "" #: parse-datetime.y:2217 #, c-format msgid " adjusted Y M D: %s %02d %02d\n" msgstr "" #: parse-datetime.y:2219 #, c-format msgid " normalized Y M D: %s %02d %02d\n" msgstr "" #: parse-datetime.y:2248 #, c-format msgid "error: timezone %d caused time_t overflow\n" msgstr "" #: parse-datetime.y:2258 #, c-format msgid "'%s' = %<PRIdMAX> epoch-seconds\n" msgstr "" #: parse-datetime.y:2286 msgid "error: adding relative time caused an overflow\n" msgstr "" #: parse-datetime.y:2297 #, c-format msgid "" "after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " "seconds, %+d ns),\n" msgstr "" #: parse-datetime.y:2303 #, c-format msgid " new time = %<PRIdMAX> epoch-seconds\n" msgstr "" #: parse-datetime.y:2319 msgid "warning: daylight saving time changed after time adjustment\n" msgstr "" #: parse-datetime.y:2329 msgid "timezone: system default\n" msgstr "" #: parse-datetime.y:2331 msgid "timezone: Universal Time\n" msgstr "" #: parse-datetime.y:2333 #, c-format msgid "timezone: TZ=\"%s\" environment value\n" msgstr "" #: parse-datetime.y:2337 #, c-format msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" msgstr "" #: parse-datetime.y:2343 #, c-format msgid "final: %s (UTC)\n" msgstr "" #: parse-datetime.y:2358 #, c-format msgid "final: %s (UTC%s)\n" msgstr "" #: parse-datetime.y:2362 #, c-format msgid "final: %s (unknown time zone offset)\n" msgstr "" #. TRANSLATORS: #. Get translations for open and closing quotation marks. #. The message catalog should translate "`" to a left #. quotation mark suitable for the locale, and similarly for #. "'". For example, a French Unicode local should translate #. these to U+00AB (LEFT-POINTING DOUBLE ANGLE #. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE #. QUOTATION MARK), respectively. #. #. If the catalog has no translation, we will try to #. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and #. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the #. current locale is not Unicode, locale_quoting_style #. will quote 'like this', and clocale_quoting_style will #. quote "like this". You should always include translations #. for "`" and "'" even if U+2018 and U+2019 are appropriate #. for your locale. #. #. If you don't know what to put here, please see #. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> #. and use glyphs suitable for your language. #: lib/quotearg.c:355 msgid "`" msgstr "«" #: lib/quotearg.c:356 msgid "'" msgstr "»" #: lib/regcomp.c:122 msgid "Success" msgstr "Éxito" #: lib/regcomp.c:125 msgid "No match" msgstr "No hay resultados" #: lib/regcomp.c:128 msgid "Invalid regular expression" msgstr "Expresión regular no válida" #: lib/regcomp.c:131 msgid "Invalid collation character" msgstr "Carácter de secuencia inválido" #: lib/regcomp.c:134 msgid "Invalid character class name" msgstr "Nombre de clase de caracteres inválido" #: lib/regcomp.c:137 msgid "Trailing backslash" msgstr "Barra invertida final" #: lib/regcomp.c:140 msgid "Invalid back reference" msgstr "Referencia hacia atrás inválida" #: lib/regcomp.c:143 #, fuzzy msgid "Unmatched [, [^, [:, [., or [=" msgstr "[ o [^ desemparejado" #: lib/regcomp.c:146 msgid "Unmatched ( or \\(" msgstr "( or \\( desemparejado" #: lib/regcomp.c:149 msgid "Unmatched \\{" msgstr "\\{ desemparejado" #: lib/regcomp.c:152 msgid "Invalid content of \\{\\}" msgstr "Contenido de \\{\\} inválido" #: lib/regcomp.c:155 msgid "Invalid range end" msgstr "Fin de rango inválido" #: lib/regcomp.c:158 msgid "Memory exhausted" msgstr "Memoria agotada" #: lib/regcomp.c:161 msgid "Invalid preceding regular expression" msgstr "Expresión regular precedente inválida" #: lib/regcomp.c:164 #, fuzzy msgid "Premature end of regular expression" msgstr "Expresión regular no válida" #: lib/regcomp.c:167 msgid "Regular expression too big" msgstr "Expresión regular demasiado grande" #: lib/regcomp.c:170 msgid "Unmatched ) or \\)" msgstr ") or \\) desemparejado" #: lib/regcomp.c:650 msgid "No previous regular expression" msgstr "No hay ninguna expresión regular previa" #: lib/set-acl.c:46 #, c-format msgid "setting permissions for %s" msgstr "" #: lib/version-etc.c:73 #, c-format msgid "Packaged by %s (%s)\n" msgstr "" #: lib/version-etc.c:76 #, c-format msgid "Packaged by %s\n" msgstr "" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: lib/version-etc.c:83 msgid "(C)" msgstr "" #. TRANSLATORS: The %s placeholder is the web address of the GPL license. #: lib/version-etc.c:88 #, c-format msgid "" "License GPLv3+: GNU GPL version 3 or later <%s>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" #. TRANSLATORS: %s denotes an author name. #: lib/version-etc.c:105 #, c-format msgid "Written by %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:109 #, c-format msgid "Written by %s and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:113 #, c-format msgid "Written by %s, %s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:120 #, c-format msgid "" "Written by %s, %s, %s,\n" "and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:127 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:134 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:142 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:150 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:159 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:170 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s, and others.\n" msgstr "" #. TRANSLATORS: The placeholder indicates the bug-reporting address #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for translation #. bugs (typically your translation team's web or email address). #. TRANSLATORS: --help output 5+ (reports) #. TRANSLATORS: the placeholder indicates the bug-reporting address #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap #: lib/version-etc.c:249 utils/recutl.c:114 #, c-format msgid "Report bugs to: %s\n" msgstr "" #: lib/version-etc.c:251 utils/recutl.c:117 #, c-format msgid "Report %s bugs to: %s\n" msgstr "" #: lib/version-etc.c:255 lib/version-etc.c:257 utils/recutl.c:121 #, c-format msgid "%s home page: <%s>\n" msgstr "" #: lib/version-etc.c:260 #, c-format msgid "General help using GNU software: <%s>\n" msgstr "" #: lib/wait-process.c:232 lib/wait-process.c:264 lib/wait-process.c:326 #, c-format msgid "%s subprocess" msgstr "subproceso %s" #: lib/wait-process.c:283 lib/wait-process.c:355 #, c-format msgid "%s subprocess got fatal signal %d" msgstr "subproceso %s recibió la señal fatal %d" #: src/rec-fex.c:726 #, c-format msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" msgstr "error interno: REC_FEX_MAX_ELEMS superado. Por favor, comuníquelo.\n" #: src/rec-int.c:132 src/rec-int.c:186 src/rec-int.c:243 src/rec-int.c:287 #: utils/recutl.c:199 msgid "out of memory\n" msgstr "memoria insuficiente\n" #: src/rec-int.c:147 #, c-format msgid "%s:%s: error: mandatory field '%s' not found in record\n" msgstr "%s:%s: error: el campo obligatorio '%s' no está en el registro\n" #: src/rec-int.c:210 #, c-format msgid "%s:%s: error: field '%s' not allowed in this record set\n" msgstr "%s:%s: error: este conjunto de registros no admite el campo '%s'\n" #: src/rec-int.c:257 #, c-format msgid "%s:%s: error: field '%s' should be unique in this record\n" msgstr "%s:%s: error: el campo '%s' debería ser único en este registro\n" #: src/rec-int.c:301 #, c-format msgid "%s:%s: error: prohibited field '%s' found in record\n" msgstr "" "%s:%s: error: se ha encontrado en el registro el campo prohibido '%s'\n" # No traduzco %%constraint, %%rec, %%key, %%size ni %%sort porque parece el nombre de un campo. #: src/rec-int.c:333 #, c-format msgid "%s:%s: error: %%constraint[%d] violated in record\n" msgstr "%s:%s: error: %%constraint[%d] violada en el registro\n" #: src/rec-int.c:370 #, c-format msgid "%s:%s: error: confidential field is not encrypted\n" msgstr "%s:%s: error: campo confidencial sin encriptar\n" #: src/rec-int.c:422 #, c-format msgid "%s:%s: error: key field '%s' not found in record\n" msgstr "%s:%s: error: no se encuentra el campo clave '%s' en el registro\n" #: src/rec-int.c:431 #, c-format msgid "%s:%s: error: multiple key fields '%s' in record\n" msgstr "%s:%s: error: múltiples campos clave '%s' en el registro\n" #: src/rec-int.c:474 #, c-format msgid "%s:%s: error: duplicated key value in field '%s' in record\n" msgstr "%s:%s: error: valor clave duplicada en el campo '%s' del registro\n" #: src/rec-int.c:562 #, fuzzy, c-format msgid "%s:%s: error: duplicated value in singular field '%s' in record\n" msgstr "%s:%s: error: valor clave duplicada en el campo '%s' del registro\n" # No traduzco %%constraint, %%rec, %%key, %%size ni %%sort porque parece el nombre de un campo. #: src/rec-int.c:620 #, c-format msgid "%s:%s: error: missing %%rec field in record descriptor\n" msgstr "%s:%s: error: falta el campo %%rec en el descriptor del registro\n" # No traduzco %%constraint, %%rec, %%key, %%size ni %%sort porque parece el nombre de un campo. #: src/rec-int.c:628 #, c-format msgid "%s:%s: error: too many %%rec fields in record descriptor\n" msgstr "%s:%s: error: demasiados campos %%rec en el descriptor del registro\n" #: src/rec-int.c:638 #, c-format msgid "%s:%s: error: invalid record type %s\n" msgstr "%s:%s: error: tipo de registro %s no válido\n" # No traduzco %%constraint, %%rec, %%key, %%size ni %%sort porque parece el nombre de un campo. #: src/rec-int.c:649 #, c-format msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" msgstr "" "%s:%s: error: sólo se permite un campo %%key en el descriptor del registro\n" # No traduzco %%constraint, %%rec, %%key, %%size ni %%sort porque parece el nombre de un campo. #: src/rec-int.c:659 #, c-format msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" msgstr "" "%s:%s: error: sólo se permite un campo %%size en el descriptor del registro\n" # No traduzco %%constraint, %%rec, %%key, %%size ni %%sort porque parece el nombre de un campo. #: src/rec-int.c:669 #, c-format msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" msgstr "" "%s:%s: error: sólo se permite un campo %%sort en el descriptor del registro\n" #: src/rec-int.c:692 #, c-format msgid "" "%s:%s: error: expected a comma-separated list of fields before the type " "specification\n" msgstr "" "%s:%s: error: se esperaba una lista de campos separada por comas antes de la " "especificación de tipo\n" #: src/rec-int.c:718 src/rec-int.c:771 #, c-format msgid "%s:%s: error: the referred type %s does not exist\n" msgstr "%s:%s: error: el tipo indicado %s no existe\n" #: src/rec-int.c:730 #, c-format msgid "%s:%s: error: invalid type specification\n" msgstr "%s:%s: error: especificación de tipo no válida\n" #: src/rec-int.c:745 #, c-format msgid "%s:%s: error: expected a type name before the type specification\n" msgstr "" "%s:%s: error: se esperaba un nombre de tipo antes de su especificación\n" # No entiendo el código, no sé si se debe traducir typedef. #: src/rec-int.c:783 #, c-format msgid "%s:%s: error: invalid typedef specification\n" msgstr "%s:%s: error: especificación typedef no válida\n" #: src/rec-int.c:805 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" msgstr "" "%s:%s: error: el valor de %s[%zd] no es una expresión de selección válida\n" #: src/rec-int.c:836 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" msgstr "" "%s:%s: error: el valor de %s[%zd] no es una lista de nombres de campos\n" #: src/rec-int.c:849 #, c-format msgid "" "%s:%s: error: value for %s should be a number optionally preceded by >, <, " ">= or <=.\n" msgstr "" "%s:%s: error: el valor de %s debe ser un número que puede estar precedido " "por >, <, >= o <=.\n" #: src/rec-int.c:865 #, c-format msgid "%s:%s: error: value for %s should be a list of field names.\n" msgstr "" "%s:%s: error: el valor de %s debe ser una lista de campos de nombres.\n" #: src/rec-int.c:893 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range, uuid " "or date\n" msgstr "" "%s:%s: error: el campo auto-incrementado %s debe ser de tipo int, range, " "uuid o date\n" #: src/rec-int.c:895 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range or " "date\n" msgstr "" "%s:%s: error: el campo auto-incrementado %s debe ser de tipo int, range o " "date\n" #: src/rec-int.c:978 #, c-format msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" msgstr "" "%s:%s: error: no se pudo obtener el descriptor remoto desde la url %s.\n" #: src/rec-int.c:997 #, c-format msgid "%s:%s: error: could not read external descriptor from file %s.\n" msgstr "" "%s:%s: error: no se pudo leer el descriptor externo desde el archivo %s.\n" # Repasar traducción #: src/rec-int.c:1012 #, c-format msgid "%s:%s: error: %s does not contain valid rec data.\n" msgstr "%s:%s: error: %s no contiene datos válidos rec.\n" #: src/rec-int.c:1026 #, c-format msgid "%s:%s: error: %s does not contain information for type %s.\n" msgstr "%s:%s: error: %s no contiene información para el tipo %s.\n" #: src/rec-int.c:1150 #, c-format msgid "%s: error: the number of records of type %s should be %zd.\n" msgstr "%s: error: el número de registros de tipo %s debería ser %zd.\n" #: src/rec-int.c:1160 #, c-format msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" msgstr "" "%s: error: demasiados registros de tipo %s. El máximo permitido es %zd.\n" #: src/rec-int.c:1167 #, c-format msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" msgstr "" "%s: error: muy pocos registros de tipo %s. El mínimo permitido es %zd.\n" #: src/rec-types.c:304 msgid "invalid integer." msgstr "entero no válido." #: src/rec-types.c:332 msgid "invalid 'field' value." msgstr "valor 'field' no válido." #: src/rec-types.c:353 msgid "invalid 'uuid' value." msgstr "valor 'uuid' no válido." #: src/rec-types.c:369 msgid "invalid 'bool' value." msgstr "valor 'bool' no válido." #: src/rec-types.c:390 msgid "invalid 'range' value." msgstr "valor 'range' no válido." #: src/rec-types.c:399 #, c-format msgid "expected an integer between %d and %d." msgstr "se esperaba un entero entre %d y %d." #: src/rec-types.c:419 msgid "invalid 'real' value." msgstr "valor 'real' no válido." #: src/rec-types.c:436 #, c-format msgid "value too large. Expected a size <= %zu." msgstr "valor demasiado grande. Se esperaba un tamaño <= %zu." #: src/rec-types.c:456 msgid "invalid 'line' value." msgstr "valor 'line' no válido." #: src/rec-types.c:473 msgid "value does not match the regexp." msgstr "el valor no coincide con la expresión regular." #: src/rec-types.c:492 msgid "invalid date." msgstr "fecha incorrecta." # Averiguar si es correcta la traducción. #: src/rec-types.c:506 msgid "invalid email." msgstr "correo electrónico no válido." #: src/rec-types.c:547 msgid "invalid enum value." msgstr "valor de enumeración no válido" #: src/rec-types.c:898 #, c-format msgid "" "internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " "in rec_type_new().\n" msgstr "" "error interno: rec-types: obtuvo REC_TYPE_NONE desde " "rec_type_parse_type_kind() en rec_type_new().\n" #: src/rec-utils.c:86 #, c-format msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" msgstr "" "error interno: rec_int_rec_extract_file: error compilando expresión " "regular.\n" #: src/rec-utils.c:116 src/rec-utils.c:147 #, c-format msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" msgstr "" "error interno: rec_int_rec_extract_url: error compilando expresión regular.\n" #: src/rec-utils.c:290 #, c-format msgid "internal error: rec_match: error compiling regexp.\n" msgstr "error interno: rec_match: error compilando expresión regular.\n" #. TRANSLATORS: --help output, csv2rec synopsis. #. no-wrap #: utils/csv2rec.c:98 #, c-format msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" msgstr "Uso: csv2rec [OPCIONES]... [ARCHIVO_CSV]\n" #. TRANSLATORS: --help output, csv2rec short description. #. no-wrap #: utils/csv2rec.c:103 msgid "Convert csv data into rec data.\n" msgstr "Convertir datos csv en datos rec.\n" #. TRANSLATORS: --help output, csv2rec options. #. no-wrap #: utils/csv2rec.c:109 #, fuzzy msgid "" " -t, --type=TYPE type name for the converted records; " "if this\n" " parameter is omitted then no type is " "used.\n" " -s, --strict be strict parsing the csv file.\n" " -e, --omit-empty omit empty fields.\n" msgstr "" " -t, --type=TYPE nombre del tipo para el registro " "convertido;\n" " se omite este parámetro no se usará " "ningún tipo.\n" " -s, --strict ser estricto al analizar el archivo " "csv.\n" " -e, --omit-empty omitir campos vacíos.\n" #: utils/csv2rec.c:212 #, c-format msgid "invalid field name '%s' in header\n" msgstr "nombre de campo '%s' no válido en la cabecera\n" #: utils/csv2rec.c:221 #, fuzzy msgid "error while parsing CSV file: too many columns in row\n" msgstr "error al analizar el archivo CSV: %s\n" #: utils/csv2rec.c:241 #, fuzzy, c-format msgid "" "%s: %lu: this line contains %lu fields, but %lu header fields were read\n" msgstr "" "%s: %d: esta línea contiene %d campos, pero se leyeron %d campos en la " "cabecera\n" #: utils/csv2rec.c:331 utils/recdel.c:233 utils/recset.c:306 utils/recutl.c:317 #, c-format msgid "cannot read file %s\n" msgstr "no se puede leer el archivo %s\n" #: utils/csv2rec.c:338 msgid "failed to initialize csv parser\n" msgstr "no se pudo inicializar el analizador de csv\n" #: utils/csv2rec.c:355 #, c-format msgid "error while parsing CSV file: %s\n" msgstr "error al analizar el archivo CSV: %s\n" #. TRANSLATORS: --help output, mdb2rec synopsis. #. no-wrap #: utils/mdb2rec.c:97 #, c-format msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" msgstr "UsO: mdb2rec [OPCIONES]... ARCHIVO_MDB [TABLA]\n" #. TRANSLATORS: --help output, mdb2rec short description. #. no-wrap #: utils/mdb2rec.c:102 msgid "Convert an mdb file into a rec file.\n" msgstr "Convertir un archivo mdb en un archivo rec.\n" #. TRANSLATORS: --help output, mdb2rec options. #. no-wrap #: utils/mdb2rec.c:108 msgid "" " -s, --system-tables include system tables.\n" " -e, --keep-empty-fields don't prune empty fields in the rec\n" " output.\n" " -l, --list-tables dump a list of the table names " "contained\n" " in the mdb file.\n" msgstr "" " -s, --system-tables incluir tablas del sistema.\n" " -e, --keep-empty-fields no se eliminan los campos vacíos\n" " en la salida rec.\n" " -l, --list-tables volcar una lista de los nombres de " "tablas\n" " contenidas en el archivo mdb.\n" #: utils/mdb2rec.c:230 utils/mdb2rec.c:288 #, c-format msgid "failed to normalise record type name %s\n" msgstr "error al normalizar registros de nombre de tipo %s\n" #: utils/mdb2rec.c:236 utils/mdb2rec.c:245 #, c-format msgid "failed to normalise field name %s\n" msgstr "error al normalizar nombre de campo %s\n" #: utils/mdb2rec.c:307 #, c-format msgid "failed to normalise the field name %s\n" msgstr "error al normalizar el nombre de campo %s\n" #: utils/mdb2rec.c:396 utils/recins.c:191 utils/recset.c:223 #, c-format msgid "invalid field name %s.\n" msgstr "nombre de campo %s inválido.\n" #: utils/mdb2rec.c:436 #, c-format msgid "could not open file %s\n" msgstr "no se puede abrir el archivo %s\n" #: utils/mdb2rec.c:441 msgid "file does not appear to be an Access database\n" msgstr "el archivo no parece ser una base de datos Access\n" #. TRANSLATORS: --help output, rec2csv synopsis. #. no-wrap #: utils/rec2csv.c:70 #, c-format msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" msgstr "Uso: rec2csv [OPCIONES]... [ARCHIVO_REC]\n" #. TRANSLATORS: --help output, rec2csv short description. #. no-wrap #: utils/rec2csv.c:75 msgid "Convert rec data into csv data.\n" msgstr "Convertir datos rec en datos csv.\n" #. TRANSLATORS: --help output, rec2csv options. #. no-wrap #: utils/rec2csv.c:81 msgid "" " -d, --delim=char sets the deliminator (default ',')\n" " -t, --type=TYPE record set to convert to csv; if this " "parameter\n" " is omitted then the default record " "set is used\n" " -S, --sort=FIELDS sort the output by the specified " "fields.\n" msgstr "" " -d, --delim=char establece el separador (',' por " "defecto)\n" " -t, --type=TIPO conjunto de registros a convertir a " "csv; si se omite\n" " este parámetro se usará el conjunto " "de registros por defecto\n" " -S, --sort=CAMPOS ordenar la salida por los campos " "especificados\n" #: utils/rec2csv.c:121 msgid "only one list of fields can be specified as a sorting criteria.\n" msgstr "" "sólo se puede especificar una lista de campos como criterio de ordenación.\n" #: utils/rec2csv.c:126 msgid "invalid field name list in -S.\n" msgstr "lista de nombres de campos inválida en -S.\n" #: utils/rec2csv.c:130 utils/recsel.c:221 utils/recsel.c:245 msgid "internal error creating fex.\n" msgstr "error interno creando fex.\n" #. TRANSLATORS: --help output, recdel synopsis. #. no-wrap #: utils/recdel.c:78 #, c-format msgid "" "Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [FILE]\n" msgstr "" "Uso: recdel [OPCIONES]... [-t TIPO] [-n NUM | -e EXPR_REGISTRO | -q STR | -m " "NUM] [ARCHIVO]\n" #. TRANSLATORS: --help output, recdel short description. #. no-wrap #: utils/recdel.c:83 msgid "Remove (or comment out) records from a rec file.\n" msgstr "Eliminar (o comentar) registros de un archivo rec.\n" #. TRANSLATORS: --help output, recdel arguments. #. no-wrap #: utils/recdel.c:90 msgid "" " -c, --comment comment out the matching records " "instead of\n" " deleting them.\n" " --force delete even in potentially dangerous " "situations,\n" " and if the deletion is violating " "record restrictions.\n" " --no-external don't use external descriptors.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -c, --comment comentar los registros coincidentes en " "lugar de\n" " eliminarlos.\n" " --force eliminar incluso en situaciones " "potencialmente peligrosas,\n" " y si la eliminación está violando " "las restricciones del registro.\n" " --no-external no utilice descriptores externos.\n" " --verbose dar un informe detallado si la " "comprobación de\n" " integridad falla.\n" #. TRANSLATORS: --help output, notes on recdel. #. no-wrap #. TRANSLATORS: --help output, notes on recfix. #. no-wrap #. TRANSLATORS: --help output, notes on recins. #. no-wrap #: utils/recdel.c:108 utils/recfix.c:149 utils/recins.c:138 msgid "" "If no FILE is specified then the command acts like a filter, getting\n" "the data from standard input and writing the result to standard output.\n" msgstr "" "Si no se especifica un ARCHIVO el comando actúa como un filtro, obteniendo\n" "los datos de la entrada estándar y escribiendo el resultado en la salida " "estándar.\n" #: utils/recdel.c:123 #, c-format msgid "no records of type %s found.\n" msgstr "no se encontraron registros del tipo %s.\n" #: utils/recdel.c:196 #, c-format msgid "ignoring a request to delete all records of type %s.\n" msgstr "" "omitiendo una solicitud para eliminar todos los registros de tipo %s.\n" #: utils/recdel.c:198 msgid "use --force if you really want to proceed, or use either -n or -e.\n" msgstr "use --force si realmente quiere continuar, o use -n o -e.\n" #: utils/recdel.c:206 msgid "invalid selection expression.\n" msgstr "expresión de selección no válida.\n" #: utils/recdel.c:241 utils/recfix.c:344 utils/recins.c:361 utils/recset.c:312 #, c-format msgid "file %s is not writable.\n" msgstr "no se puede escribir en el archivo %s.\n" #. TRANSLATORS: --help output, recfix synopsis. #. no-wrap #: utils/recfix.c:99 #, c-format msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" msgstr "Uso: recfix [OPCIÓN]... [OPERACIÓN] [OPCIÓN_OP]... [ARCHIVO]\n" #. TRANSLATORS: --help output, recfix short description. #. no-wrap #: utils/recfix.c:104 msgid "Check and fix rec files.\n" msgstr "Comprobar y reparar archivos rec.\n" #. TRANSLATORS: --help output, recfix global arguments. #. no-wrap #: utils/recfix.c:111 msgid "" " --no-external don't use external descriptors.\n" " --force force the requested operation.\n" msgstr "" " --no-external no use descriptores externos.\n" " --force forzar la operación solicitada.\n" #. TRANSLATORS: --help output, recfix operations. #. no-wrap #: utils/recfix.c:121 msgid "" "Operations:\n" " --check check integrity of the specified " "file. Default.\n" " --sort sort the records in the specified " "file.\n" " --auto insert auto-generated fields in " "records missing them.\n" msgstr "" "Operations:\n" " --check comprobar la integridad del archivo " "especificado. Por defecto.\n" " --sort ordenar los registros del archivo " "especificado.\n" " --auto insertar campos generados " "automáticamente en los registros en que han desaparecido.\n" #. TRANSLATORS: --help output, recfix operations related with encryption. #. no-wrap #: utils/recfix.c:131 msgid "" " --encrypt encrypt confidential fields in the " "specified file.\n" " --decrypt decrypt confidential fields in the " "specified file.\n" msgstr "" " --encrypt codificar campos confidenciales en el " "archivo especificado.\n" " --decrypt descodificar los campos confidenciales " "en el archivo especificado.\n" #. TRANSLATORS: --help output, recfix encryption and decryption #. options. #. no-wrap #: utils/recfix.c:140 msgid "" "De/Encryption options:\n" " -s, --password=PASSWORD encrypt/decrypt with this password.\n" msgstr "" "Opciones de Des/Encriptado:\n" " -s, --password=CONTRASEÑA encripta /desencripta con esta " "contraseña.\n" #: utils/recfix.c:184 msgid "--password|-s must be used as an operation argument.\n" msgstr "--password|-s se ha de usar como un argumento de operación.\n" #: utils/recfix.c:188 msgid "the specified operation does not require a password.\n" msgstr "la operación especificada no necesita contraseña.\n" #: utils/recfix.c:191 msgid "please specify just one password.\n" msgstr "por favor, especifique sólo una contraseña.\n" #: utils/recfix.c:198 utils/recfix.c:204 utils/recfix.c:210 utils/recfix.c:217 #: utils/recfix.c:223 msgid "please specify just one operation.\n" msgstr "por favor, especifique sólo una operación.\n" #: utils/recfix.c:304 utils/recfix.c:326 utils/recfix.c:365 utils/recfix.c:435 #, fuzzy, c-format msgid "recfix: error: cannot read file %s\n" msgstr "no se puede leer el archivo %s\n" #: utils/recfix.c:399 msgid "the database contains already encrypted fields\n" msgstr "la base de datos contiene campos ya encriptados\n" #: utils/recfix.c:400 msgid "please use --force or --decrypt\n" msgstr "" #: utils/recfix.c:499 msgid "unknown operation in recfix: please report this as a bug.\n" msgstr "" #. TRANSLATORS: --help output, recfmt synopsis. #. no-wrap #: utils/recfmt.c:64 #, c-format msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" msgstr "" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:69 msgid "Apply a template to records read from standard input.\n" msgstr "" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:75 msgid "" " -f, --file=FILENAME read the template to apply from a " "file.\n" msgstr "" #: utils/recfmt.c:107 #, c-format msgid "can't open file %s for reading.\n" msgstr "" #: utils/recfmt.c:120 msgid "don't specify a template in the command line and -f at the same time.\n" msgstr "" #: utils/recfmt.c:142 msgid "invalid expression in a template slot.\n" msgstr "" #: utils/recfmt.c:146 msgid "error evaluating expression in a template slot.\n" msgstr "" #: utils/recfmt.c:178 msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" msgstr "" #. TRANSLATORS: --help output, recinf synopsis. #. no-wrap #: utils/recinf.c:77 #, fuzzy, c-format msgid "Usage: recinf [OPTION]... [FILE]...\n" msgstr "Uso: rec2csv [OPCIONES]... [ARCHIVO_REC]\n" #. TRANSLATORS: --help output, recinf short description. #. no-wrap #: utils/recinf.c:82 msgid "Print information about the types of records stored in the input.\n" msgstr "" #. TRANSLATORS: --help output, recinf arguments. #. no-wrap #: utils/recinf.c:89 msgid "" " -t, --type=RECORD_TYPE print information on the records having " "the\n" " specified type.\n" " -d, --descriptor include the full record descriptors.\n" " -n, --names-only output just the names of the record files\n" " found in the input.\n" msgstr "" #. TRANSLATORS: --help output, recinf special options. #. no-wrap #: utils/recinf.c:102 msgid "" "Special options:\n" " -S, --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" #: utils/recinf.c:234 #, fuzzy, c-format msgid "error: cannot read file %s\n" msgstr "no se puede leer el archivo %s\n" #. TRANSLATORS: --help output, recins synopsis. #. no-wrap #: utils/recins.c:100 #, fuzzy, c-format msgid "" "Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" msgstr "" "Uso: recdel [OPCIONES]... [-t TIPO] [-n NUM | -e EXPR_REGISTRO | -q STR | -m " "NUM] [ARCHIVO]\n" #. TRANSLATORS: --help output, recins short description. #. no-wrap #: utils/recins.c:105 #, fuzzy msgid "Insert new records in a rec database.\n" msgstr "Convertir datos csv en datos rec.\n" #. TRANSLATORS: --help output, recins arguments. #. no-wrap #: utils/recins.c:111 #, fuzzy msgid "" " -f, --field=STR field name; should be followed by a -" "v.\n" " -v, --value=STR field value; should be preceded by an -" "f.\n" " -r, --record=STR record that will be inserted in the " "file.\n" " --force insert the record even if it is " "violating\n" " record restrictions.\n" " --no-external don't use external descriptors.\n" " --no-auto don't insert auto generated fields.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -c, --comment comentar los registros coincidentes en " "lugar de\n" " eliminarlos.\n" " --force eliminar incluso en situaciones " "potencialmente peligrosas,\n" " y si la eliminación está violando " "las restricciones del registro.\n" " --no-external no utilice descriptores externos.\n" " --verbose dar un informe detallado si la " "comprobación de\n" " integridad falla.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recins.c:125 #, fuzzy msgid "" " -s, --password=STR encrypt confidential fields with the " "given password.\n" msgstr "" "Opciones de Des/Encriptado:\n" " -s, --password=CONTRASEÑA encripta /desencripta con esta " "contraseña.\n" #: utils/recins.c:179 msgid "a -f should be followed by a -v\n" msgstr "" #: utils/recins.c:198 msgid "a -v should be preceded by a -f\n" msgstr "" #: utils/recins.c:214 utils/recsel.c:204 msgid "more than one password was specified\n" msgstr "" #: utils/recins.c:224 #, fuzzy msgid "error while parsing the record provided by -r\n" msgstr "error al analizar el archivo CSV: %s\n" #: utils/recins.c:256 #, c-format msgid "please provide a value for the field %s\n" msgstr "" #. TRANSLATORS: --help output, recsel synopsis. #. no-wrap #: utils/recsel.c:107 #, fuzzy, c-format msgid "" "Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " "| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" msgstr "" "Uso: recdel [OPCIONES]... [-t TIPO] [-n NUM | -e EXPR_REGISTRO | -q STR | -m " "NUM] [ARCHIVO]\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:112 #, fuzzy msgid "Select and print rec data.\n" msgstr "Convertir datos csv en datos rec.\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:118 msgid "" " -d, --include-descriptors print record descriptors along with " "the matched\n" " records.\n" " -C, --collapse do not section the result in records " "with newlines.\n" " -S, --sort=FIELD,... sort the output by the specified " "fields.\n" " -G, --group-by=FIELD,... group records by the specified " "fields.\n" " -U, --uniq remove duplicated fields in the output " "records.\n" msgstr "" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recsel.c:130 #, fuzzy msgid "" " -s, --password=STR decrypt confidential fields with the " "given password.\n" msgstr "" "Opciones de Des/Encriptado:\n" " -s, --password=CONTRASEÑA encripta /desencripta con esta " "contraseña.\n" #: utils/recsel.c:139 msgid "" " -j, --join=FIELD perform an inner join using the " "specified field.\n" msgstr "" #. TRANSLATORS: --help output, recsel output options. #. no-wrap #: utils/recsel.c:146 msgid "" "Output options:\n" " -p, --print=FIELDS comma-separated list of fields to " "print for each\n" " matching record.\n" " -P, --print-values=FIELDS as -p, but print only the values of " "the selected\n" " fields.\n" " -R, --print-row=FIELDS as -P, but separate the values with " "spaces instead\n" " of newlines.\n" " -c, --count print a count of the matching records " "instead of\n" " the records themselves.\n" msgstr "" #. TRANSLATORS: --help output, recsel special options. #. no-wrap #: utils/recsel.c:160 msgid "" "Special options:\n" " --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" #: utils/recsel.c:212 #, fuzzy msgid "only one field list can be specified as a sorting criteria.\n" msgstr "" "sólo se puede especificar una lista de campos como criterio de ordenación.\n" #: utils/recsel.c:217 #, fuzzy msgid "invalid field names in -S.\n" msgstr "lista de nombres de campos inválida en -S.\n" #: utils/recsel.c:226 #, fuzzy msgid "only one field can be specified as join criteria.\n" msgstr "" "sólo se puede especificar una lista de campos como criterio de ordenación.\n" #: utils/recsel.c:229 #, fuzzy msgid "please specify a correct field name to -j|--join.\n" msgstr "por favor, especifique sólo una operación.\n" #: utils/recsel.c:236 #, fuzzy msgid "only one field list can be specified as a grouping criteria.\n" msgstr "" "sólo se puede especificar una lista de campos como criterio de ordenación.\n" #: utils/recsel.c:241 #, fuzzy msgid "invalid field names in -G.\n" msgstr "lista de nombres de campos inválida en -S.\n" #: utils/recsel.c:255 msgid "cannot specify -[pPR] and also -c.\n" msgstr "" #: utils/recsel.c:266 #, fuzzy, c-format msgid "invalid list of fields in -%c\n" msgstr "nombre de campo %s inválido.\n" #: utils/recsel.c:272 #, fuzzy msgid "internal error creating the field expression.\n" msgstr "error interno creando fex.\n" #: utils/recsel.c:284 #, c-format msgid "invalid aggregate function '%s'\n" msgstr "" #: utils/recsel.c:296 msgid "cannot specify -c and also -p.\n" msgstr "" #: utils/recsel.c:309 msgid "joins can only be used when a named record set is selected.\n" msgstr "" #: utils/recsel.c:363 msgid "several record types found. Please use -t to specify one.\n" msgstr "" #. TRANSLATORS: --help output, recset synopsis. #. no-wrap #: utils/recset.c:99 #, fuzzy, c-format msgid "Usage: recset [OPTION]... [FILE]...\n" msgstr "Uso: rec2csv [OPCIONES]... [ARCHIVO_REC]\n" #. TRANSLATORS: --help output, recset short description. #. no-wrap #: utils/recset.c:104 #, fuzzy msgid "Alter or delete fields in records.\n" msgstr "%s:%s: error: múltiples campos clave '%s' en el registro\n" #. TRANSLATORS: --help output, recset options. #. no-wrap #: utils/recset.c:110 #, fuzzy msgid "" " --no-external don't use external descriptors.\n" " --force alter the records even if violating " "record\n" " restrictions.\n" msgstr "" " --no-external no use descriptores externos.\n" " --force forzar la operación solicitada.\n" #. TRANSLATORS: --help output, recset field selection options. #. no-wrap #: utils/recset.c:123 msgid "" "Field selection options:\n" " -f, --fields=FIELDS comma-separated list of field names " "with optional\n" " subscripts.\n" msgstr "" #. TRANSLATORS: --help output, recset actions. #. no-wrap #: utils/recset.c:131 msgid "" "Actions:\n" " -s, --set=VALUE change the value of the selected " "fields.\n" " -a, --add=VALUE add the selected fields with the given " "value.\n" " -S, --set-add=VALUE change the value of the selected " "fields. If they don't\n" " exist then add a new field with that " "value.\n" " -r, --rename=NAME rename the selected fields to a given " "name. If an entire\n" " record set is selected then the " "field is renamed in the\n" " record descriptor as well.\n" " -d, --delete delete the selected fields.\n" " -c, --comment comment out the selected fields.\n" msgstr "" #: utils/recset.c:154 #, fuzzy msgid "please specify some field with -f.\n" msgstr "por favor, especifique sólo una operación.\n" #: utils/recset.c:159 #, fuzzy msgid "please specify just one action.\n" msgstr "por favor, especifique sólo una operación.\n" #: utils/recset.c:193 #, fuzzy msgid "invalid field expression in -f.\n" msgstr "expresión de selección no válida.\n" #: utils/recset.c:199 #, fuzzy msgid "creating the field expression.\n" msgstr "Fin prematuro de expresión regular" #: utils/recset.c:214 msgid "" "the rename operation requires just one field with an optional subscript.\n" msgstr "" #: utils/recutl.c:123 #, c-format msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" msgstr "" #: utils/recutl.c:126 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" #. TRANSLATORS: --help output, common arguments. #. no-wrap #: utils/recutl.c:135 #, fuzzy msgid "" " --help print a help message and exit.\n" " --version show version and exit.\n" msgstr "" " --no-external no use descriptores externos.\n" " --force forzar la operación solicitada.\n" #. TRANSLATORS: --help output, record selection arguments #. no-wrap #: utils/recutl.c:146 msgid "" "Record selection options:\n" " -i, --case-insensitive make strings case-insensitive in " "selection\n" " expressions.\n" " -t, --type=TYPE operate on records of the specified " "type only.\n" " -e, --expression=RECORD_EXPR selection expression.\n" " -q, --quick=STR select records with fields containing " "a string.\n" " -n, --number=NUM,... select specific records by position, " "with ranges.\n" " -m, --random=NUM select a given number of random " "records.\n" msgstr "" #: utils/recutl.c:171 #, c-format msgid "" "Copyright (C) %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" #: utils/recutl.c:177 msgid "" "\n" "Written by Jose E. Marchesi." msgstr "" #: utils/recutl.c:189 utils/recutl.c:209 #, fuzzy msgid ": error: " msgstr "error de escritura" #: utils/recutl.c:221 msgid ": warning: " msgstr "" #: utils/recutl.c:246 #, c-format msgid "duplicated record set '%s' from %s.\n" msgstr "" #: utils/recutl.c:401 #, fuzzy msgid "cannot create a unique name.\n" msgstr "no se puede leer el archivo %s\n" #: utils/recutl.c:421 #, c-format msgid "renaming file %s to %s\n" msgstr "" #: utils/recutl.c:463 msgid "operation aborted due to integrity failures.\n" msgstr "" #: utils/recutl.c:464 msgid "use --verbose to get a detailed report.\n" msgstr "" #: utils/recutl.c:471 msgid "use --force to skip the integrity check.\n" msgstr "" #: utils/recutl.c:529 #, fuzzy msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" msgstr "" "error interno: rec_int_rec_extract_url: error compilando expresión regular.\n" #: utils/recutl.c:596 msgid "Password: " msgstr "" #: utils/recutl.c:602 msgid "Password again: " msgstr "" #: utils/recutl.c:607 msgid "the provided passwords don't match.\n" msgstr "" #: utils/recutl.h:84 utils/recutl.h:131 utils/recutl.h:133 msgid "cannot specify -e and also -n\n" msgstr "" #: utils/recutl.h:86 msgid "cannot specify -e and also -q\n" msgstr "" #: utils/recutl.h:94 #, fuzzy msgid "invalid selection expression\n" msgstr "expresión de selección no válida.\n" #: utils/recutl.h:100 msgid "cannot specify -n and also -e\n" msgstr "" #: utils/recutl.h:102 msgid "cannot specify -n and also -q\n" msgstr "" #: utils/recutl.h:106 #, fuzzy msgid "invalid list of indexes in -n\n" msgstr "nombre de campo %s inválido.\n" #: utils/recutl.h:111 msgid "cannot specify -m and also -e\n" msgstr "" #: utils/recutl.h:113 msgid "cannot specify -m and also -q\n" msgstr "" #: utils/recutl.h:115 msgid "cannot specify -m and also -n\n" msgstr "" #~ msgid "_open_osfhandle failed" #~ msgstr "falló _open_osfhandle" #~ msgid "cannot restore fd %d: dup2 failed" #~ msgstr "no se puede restaurar fd %d: falló dup2" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: la opción '--%s' no admite ningún argumento\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: no se reconoce la opción '--%s'\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: la opción '-W %s' no admite ningún argumento\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: la opción '-W %s' requiere un argumento\n" ����������������������������������������������recutils-1.9/po/es.gmo������������������������������������������������������������������������������0000644�0000000�0000000�00000041352�14226577416�011660� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����w������Ô��£���Œ������ ��²��� ��‹���Ì ����X ��E��` ��?��¦�� ���æ�����ô��!��� ��;���+��@���g��A���¨�����ê��(�����2���/��;���b��2���ž��M���Ñ��S�����2���s��=���¦��?���ä��;���$��V���`��A���·��8���ù��9���2��%���l��)���’��,���¼��1���é��7�����7���S��1���‹��E���½��F�����F���J��4���‘��2���Æ��9���ù��<���3��U���p��=���Æ��D��������I��5���K�������%���›�� ���Á�� ���â��a��������e�����ó����� �����'�����C��$���[�����€�����’�����­�����¾�����Ç�� ��æ�����ô��1��������A�����I�����\�����q�����ƒ�� ���•��'���¢��-���Ê��'���ø��X��� ��<���y�����¶�����¸�����Í��!���å��&����� ���.��"���O��(���r��&���›�����Â��.���Ü��5��� �����A��A���_��`���¡��B��� ��A���E ��3���‡ �����» �����Ñ �����è �����þ �����!�����+!�� ���A!�����O!�����^!�����r!��"���Š!�����­!�����Í!�����Þ!�����ý!�����"��@���,"�����m"��#���|"��"��� "��/���Ã"��5���ó"��C���)#�� ���m#��)���Ž#����¸#��Ë���¾%��‹���Š&��0��'��f��G)��Z��®*�� ��� ,�����,��)���1,��@���[,��H���œ,��I���å,�����/-��-���N-��6���|-��;���³-��1���ï-��O���!.��U���q.��/���Ç.��G���÷.��I���?/��B���‰/��e���Ì/��H���20��A���{0��A���½0��-���ÿ0��1���-1��1���_1��A���‘1��@���Ó1��A���2��:���V2��L���‘2��M���Þ2��M���,3��F���z3��,���Á3��D���î3��F���34��^���z4��G���Ù4��M���!5�����o5��=���r5��"���°5��,���Ó5��"����6��"���#6��q���F6��¡���¸6��!���Z7��'���|7�� ���¤7�����Å7��'���á7����� 8����� 8�����>8�����N8��(���`8��B��‰8��#���Ì9��3���ð9�����$:�����+:�����A:�����_:�����u:�����‹:��)���œ:��/���Æ:��)���ö:��\��� ;��@���};�����¾;�����Á;�� ���á;��%���<��$���(<��,���M<��'���z<��3���¢<��*���Ö<��'���=��2���)=��F���\=�����£=��E���¿=��c���>��N���i>��M���¸>��?���?�����F?�����_?�����y?�����’?�����¬?�����Å?�����Þ?�����ð?�� ���@�����1@��/���P@��,���€@�����­@��%���À@�����æ@��)���ö@��M��� A�����nA��-���„A��.���²A��0���áA��4���B��:���GB��/���‚B��7���²B��������"����������q���k�������$���I������R�����������_������t������!���D������]���2������1���U���L���Q�����������M�������j���C�����������l������O���-���b���Y����������;�������[���p������A���^�������9����������������������T�������%����������W���&���n���8���m������Z���o������� ���J���c���?������v��� ���@������6���5���<��������������\�������P����������X������=�������*���,��� ���K������d���h�������a���g�������:���)��� ���s�������H���w����������V���.���F���7���`������4���0����������E�������S������u���>�������r�������'����������+���e�������i���G��� ���#�����������B����������������������/�����������3���N�������(���f������� ���� --encrypt encrypt confidential fields in the specified file. --decrypt decrypt confidential fields in the specified file. � --no-external don't use external descriptors. --force force the requested operation. � -c, --comment comment out the matching records instead of deleting them. --force delete even in potentially dangerous situations, and if the deletion is violating record restrictions. --no-external don't use external descriptors. --verbose give a detailed report if the integrity check fails. � -d, --delim=char sets the deliminator (default ',') -t, --type=TYPE record set to convert to csv; if this parameter is omitted then the default record set is used -S, --sort=FIELDS sort the output by the specified fields. � -s, --system-tables include system tables. -e, --keep-empty-fields don't prune empty fields in the rec output. -l, --list-tables dump a list of the table names contained in the mdb file. �%s subprocess�%s subprocess failed�%s subprocess got fatal signal %d�%s: error: the number of records of type %s should be %zd. �%s: error: too few records of type %s. Minimum allowed are %zd. �%s: error: too many records of type %s. Maximum allowed are %zd. �%s: invalid option -- '%c' �%s: option requires an argument -- '%c' �%s:%s: error: %%constraint[%d] violated in record �%s:%s: error: %s does not contain information for type %s. �%s:%s: error: %s does not contain valid rec data. �%s:%s: error: auto-incremented field %s should be of type int, range or date �%s:%s: error: auto-incremented field %s should be of type int, range, uuid or date �%s:%s: error: confidential field is not encrypted �%s:%s: error: could not fetch remote descriptor from url %s. �%s:%s: error: could not read external descriptor from file %s. �%s:%s: error: duplicated key value in field '%s' in record �%s:%s: error: expected a comma-separated list of fields before the type specification �%s:%s: error: expected a type name before the type specification �%s:%s: error: field '%s' not allowed in this record set �%s:%s: error: field '%s' should be unique in this record �%s:%s: error: invalid record type %s �%s:%s: error: invalid type specification �%s:%s: error: invalid typedef specification �%s:%s: error: key field '%s' not found in record �%s:%s: error: mandatory field '%s' not found in record �%s:%s: error: missing %%rec field in record descriptor �%s:%s: error: multiple key fields '%s' in record �%s:%s: error: only one %%key field is allowed in a record descriptor �%s:%s: error: only one %%size field is allowed in a record descriptor �%s:%s: error: only one %%sort field is allowed in a record descriptor �%s:%s: error: prohibited field '%s' found in record �%s:%s: error: the referred type %s does not exist �%s:%s: error: too many %%rec fields in record descriptor �%s:%s: error: value for %s should be a list of field names. �%s:%s: error: value for %s should be a number optionally preceded by >, <, >= or <=. �%s:%s: error: value for %s[%zd] is not a list of field names �%s:%s: error: value for %s[%zd] is not a valid selection expression �'�--password|-s must be used as an operation argument. �Check and fix rec files. �Convert an mdb file into a rec file. �Convert csv data into rec data. �Convert rec data into csv data. �De/Encryption options: -s, --password=PASSWORD encrypt/decrypt with this password. �If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. �Invalid back reference�Invalid character class name�Invalid collation character�Invalid content of \{\}�Invalid preceding regular expression�Invalid range end�Invalid regular expression�Memory exhausted�No match�No previous regular expression�Operations: --check check integrity of the specified file. Default. --sort sort the records in the specified file. --auto insert auto-generated fields in records missing them. �Regular expression too big�Remove (or comment out) records from a rec file. �Success�Trailing backslash�Unknown system error�Unmatched ( or \(�Unmatched ) or \)�Unmatched \{�Usage: csv2rec [OPTIONS]... [CSV_FILE] �Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE] �Usage: rec2csv [OPTIONS]... [REC_FILE] �Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [FILE] �Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE] �`�cannot read file %s �could not open file %s �error while parsing CSV file: %s �expected an integer between %d and %d.�failed to initialize csv parser �failed to normalise field name %s �failed to normalise record type name %s �failed to normalise the field name %s �file %s is not writable. �file does not appear to be an Access database �ignoring a request to delete all records of type %s. �internal error creating fex. �internal error: REC_FEX_MAX_ELEMS exceeded. Please report this. �internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() in rec_type_new(). �internal error: rec_int_rec_extract_file: error compiling regexp. �internal error: rec_int_rec_extract_url: error compiling regexp. �internal error: rec_match: error compiling regexp. �invalid 'bool' value.�invalid 'field' value.�invalid 'line' value.�invalid 'range' value.�invalid 'real' value.�invalid 'uuid' value.�invalid date.�invalid email.�invalid enum value.�invalid field name %s. �invalid field name '%s' in header �invalid field name list in -S. �invalid integer.�invalid selection expression. �memory exhausted�no records of type %s found. �only one list of fields can be specified as a sorting criteria. �out of memory �please specify just one operation. �please specify just one password. �the database contains already encrypted fields �the specified operation does not require a password. �use --force if you really want to proceed, or use either -n or -e. �value does not match the regexp.�value too large. Expected a size <= %zu.�Project-Id-Version: GNU recutils 1.6.90 Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org POT-Creation-Date: 2022-04-16 19:38+0200 PO-Revision-Date: 2015-01-28 11:16+0100 Last-Translator: Enrique Lazcorreta Puigmartí <enrique.lazcorreta@gmail.com> Language-Team: Spanish <es@tp.org.es> Language: es MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=(n != 1); X-Generator: Poedit 1.7.4 � --encrypt codificar campos confidenciales en el archivo especificado. --decrypt descodificar los campos confidenciales en el archivo especificado. � --no-external no use descriptores externos. --force forzar la operación solicitada. � -c, --comment comentar los registros coincidentes en lugar de eliminarlos. --force eliminar incluso en situaciones potencialmente peligrosas, y si la eliminación está violando las restricciones del registro. --no-external no utilice descriptores externos. --verbose dar un informe detallado si la comprobación de integridad falla. � -d, --delim=char establece el separador (',' por defecto) -t, --type=TIPO conjunto de registros a convertir a csv; si se omite este parámetro se usará el conjunto de registros por defecto -S, --sort=CAMPOS ordenar la salida por los campos especificados � -s, --system-tables incluir tablas del sistema. -e, --keep-empty-fields no se eliminan los campos vacíos en la salida rec. -l, --list-tables volcar una lista de los nombres de tablas contenidas en el archivo mdb. �subproceso %s�Fallo en el subproceso %s�subproceso %s recibió la señal fatal %d�%s: error: el número de registros de tipo %s debería ser %zd. �%s: error: muy pocos registros de tipo %s. El mínimo permitido es %zd. �%s: error: demasiados registros de tipo %s. El máximo permitido es %zd. �%s: opción inválida -- '%c' �%s: la opción -- '%c' requiere un argumento �%s:%s: error: %%constraint[%d] violada en el registro �%s:%s: error: %s no contiene información para el tipo %s. �%s:%s: error: %s no contiene datos válidos rec. �%s:%s: error: el campo auto-incrementado %s debe ser de tipo int, range o date �%s:%s: error: el campo auto-incrementado %s debe ser de tipo int, range, uuid o date �%s:%s: error: campo confidencial sin encriptar �%s:%s: error: no se pudo obtener el descriptor remoto desde la url %s. �%s:%s: error: no se pudo leer el descriptor externo desde el archivo %s. �%s:%s: error: valor clave duplicada en el campo '%s' del registro �%s:%s: error: se esperaba una lista de campos separada por comas antes de la especificación de tipo �%s:%s: error: se esperaba un nombre de tipo antes de su especificación �%s:%s: error: este conjunto de registros no admite el campo '%s' �%s:%s: error: el campo '%s' debería ser único en este registro �%s:%s: error: tipo de registro %s no válido �%s:%s: error: especificación de tipo no válida �%s:%s: error: especificación typedef no válida �%s:%s: error: no se encuentra el campo clave '%s' en el registro �%s:%s: error: el campo obligatorio '%s' no está en el registro �%s:%s: error: falta el campo %%rec en el descriptor del registro �%s:%s: error: múltiples campos clave '%s' en el registro �%s:%s: error: sólo se permite un campo %%key en el descriptor del registro �%s:%s: error: sólo se permite un campo %%size en el descriptor del registro �%s:%s: error: sólo se permite un campo %%sort en el descriptor del registro �%s:%s: error: se ha encontrado en el registro el campo prohibido '%s' �%s:%s: error: el tipo indicado %s no existe �%s:%s: error: demasiados campos %%rec en el descriptor del registro �%s:%s: error: el valor de %s debe ser una lista de campos de nombres. �%s:%s: error: el valor de %s debe ser un número que puede estar precedido por >, <, >= o <=. �%s:%s: error: el valor de %s[%zd] no es una lista de nombres de campos �%s:%s: error: el valor de %s[%zd] no es una expresión de selección válida �»�--password|-s se ha de usar como un argumento de operación. �Comprobar y reparar archivos rec. �Convertir un archivo mdb en un archivo rec. �Convertir datos csv en datos rec. �Convertir datos rec en datos csv. �Opciones de Des/Encriptado: -s, --password=CONTRASEÑA encripta /desencripta con esta contraseña. �Si no se especifica un ARCHIVO el comando actúa como un filtro, obteniendo los datos de la entrada estándar y escribiendo el resultado en la salida estándar. �Referencia hacia atrás inválida�Nombre de clase de caracteres inválido�Carácter de secuencia inválido�Contenido de \{\} inválido�Expresión regular precedente inválida�Fin de rango inválido�Expresión regular no válida�Memoria agotada�No hay resultados�No hay ninguna expresión regular previa�Operations: --check comprobar la integridad del archivo especificado. Por defecto. --sort ordenar los registros del archivo especificado. --auto insertar campos generados automáticamente en los registros en que han desaparecido. �Expresión regular demasiado grande�Eliminar (o comentar) registros de un archivo rec. �Éxito�Barra invertida final�Error del sistema desconocido�( or \( desemparejado�) or \) desemparejado�\{ desemparejado�Uso: csv2rec [OPCIONES]... [ARCHIVO_CSV] �UsO: mdb2rec [OPCIONES]... ARCHIVO_MDB [TABLA] �Uso: rec2csv [OPCIONES]... [ARCHIVO_REC] �Uso: recdel [OPCIONES]... [-t TIPO] [-n NUM | -e EXPR_REGISTRO | -q STR | -m NUM] [ARCHIVO] �Uso: recfix [OPCIÓN]... [OPERACIÓN] [OPCIÓN_OP]... [ARCHIVO] �«�no se puede leer el archivo %s �no se puede abrir el archivo %s �error al analizar el archivo CSV: %s �se esperaba un entero entre %d y %d.�no se pudo inicializar el analizador de csv �error al normalizar nombre de campo %s �error al normalizar registros de nombre de tipo %s �error al normalizar el nombre de campo %s �no se puede escribir en el archivo %s. �el archivo no parece ser una base de datos Access �omitiendo una solicitud para eliminar todos los registros de tipo %s. �error interno creando fex. �error interno: REC_FEX_MAX_ELEMS superado. Por favor, comuníquelo. �error interno: rec-types: obtuvo REC_TYPE_NONE desde rec_type_parse_type_kind() en rec_type_new(). �error interno: rec_int_rec_extract_file: error compilando expresión regular. �error interno: rec_int_rec_extract_url: error compilando expresión regular. �error interno: rec_match: error compilando expresión regular. �valor 'bool' no válido.�valor 'field' no válido.�valor 'line' no válido.�valor 'range' no válido.�valor 'real' no válido.�valor 'uuid' no válido.�fecha incorrecta.�correo electrónico no válido.�valor de enumeración no válido�nombre de campo %s inválido. �nombre de campo '%s' no válido en la cabecera �lista de nombres de campos inválida en -S. �entero no válido.�expresión de selección no válida. �memoria agotada�no se encontraron registros del tipo %s. �sólo se puede especificar una lista de campos como criterio de ordenación. �memoria insuficiente �por favor, especifique sólo una operación. �por favor, especifique sólo una contraseña. �la base de datos contiene campos ya encriptados �la operación especificada no necesita contraseña. �use --force si realmente quiere continuar, o use -n o -e. �el valor no coincide con la expresión regular.�valor demasiado grande. Se esperaba un tamaño <= %zu.���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/Makefile.in.in����������������������������������������������������������������������0000644�0000000�0000000�00000042251�14226563465�013215� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile for PO directory in any package using GNU gettext. # Copyright (C) 1995-1997, 2000-2007, 2009-2010 by Ulrich Drepper <drepper@gnu.ai.mit.edu> # # Copying and distribution of this file, with or without modification, # are permitted in any medium without royalty provided the copyright # notice and this notice are preserved. This file is offered as-is, # without any warranty. # # Origin: gettext-0.19.8 GETTEXT_MACRO_VERSION = 0.19 PACKAGE = @PACKAGE@ VERSION = @VERSION@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ SED = @SED@ SHELL = /bin/sh @SET_MAKE@ srcdir = @srcdir@ top_srcdir = @top_srcdir@ VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ datarootdir = @datarootdir@ datadir = @datadir@ localedir = @localedir@ gettextsrcdir = $(datadir)/gettext/po INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ # We use $(mkdir_p). # In automake <= 1.9.x, $(mkdir_p) is defined either as "mkdir -p --" or as # "$(mkinstalldirs)" or as "$(install_sh) -d". For these automake versions, # @install_sh@ does not start with $(SHELL), so we add it. # In automake >= 1.10, @mkdir_p@ is derived from ${MKDIR_P}, which is defined # either as "/path/to/mkdir -p" or ".../install-sh -c -d". For these automake # versions, $(mkinstalldirs) and $(install_sh) are unused. mkinstalldirs = $(SHELL) @install_sh@ -d install_sh = $(SHELL) @install_sh@ MKDIR_P = @MKDIR_P@ mkdir_p = @mkdir_p@ # When building gettext-tools, we prefer to use the built programs # rather than installed programs. However, we can't do that when we # are cross compiling. CROSS_COMPILING = @CROSS_COMPILING@ GMSGFMT_ = @GMSGFMT@ GMSGFMT_no = @GMSGFMT@ GMSGFMT_yes = @GMSGFMT_015@ GMSGFMT = $(GMSGFMT_$(USE_MSGCTXT)) MSGFMT_ = @MSGFMT@ MSGFMT_no = @MSGFMT@ MSGFMT_yes = @MSGFMT_015@ MSGFMT = $(MSGFMT_$(USE_MSGCTXT)) XGETTEXT_ = @XGETTEXT@ XGETTEXT_no = @XGETTEXT@ XGETTEXT_yes = @XGETTEXT_015@ XGETTEXT = $(XGETTEXT_$(USE_MSGCTXT)) MSGMERGE = msgmerge MSGMERGE_UPDATE = @MSGMERGE@ --update MSGINIT = msginit MSGCONV = msgconv MSGFILTER = msgfilter POFILES = @POFILES@ GMOFILES = @GMOFILES@ UPDATEPOFILES = @UPDATEPOFILES@ DUMMYPOFILES = @DUMMYPOFILES@ DISTFILES.common = Makefile.in.in remove-potcdate.sin \ $(DISTFILES.common.extra1) $(DISTFILES.common.extra2) $(DISTFILES.common.extra3) DISTFILES = $(DISTFILES.common) Makevars POTFILES.in \ $(POFILES) $(GMOFILES) \ $(DISTFILES.extra1) $(DISTFILES.extra2) $(DISTFILES.extra3) POTFILES = \ CATALOGS = @CATALOGS@ POFILESDEPS_ = $(srcdir)/$(DOMAIN).pot POFILESDEPS_yes = $(POFILESDEPS_) POFILESDEPS_no = POFILESDEPS = $(POFILESDEPS_$(PO_DEPENDS_ON_POT)) DISTFILESDEPS_ = update-po DISTFILESDEPS_yes = $(DISTFILESDEPS_) DISTFILESDEPS_no = DISTFILESDEPS = $(DISTFILESDEPS_$(DIST_DEPENDS_ON_UPDATE_PO)) # Makevars gets inserted here. (Don't remove this line!) .SUFFIXES: .SUFFIXES: .po .gmo .mo .sed .sin .nop .po-create .po-update .po.mo: @echo "$(MSGFMT) -c -o $@ $<"; \ $(MSGFMT) -c -o t-$@ $< && mv t-$@ $@ .po.gmo: @lang=`echo $* | sed -e 's,.*/,,'`; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o $${lang}.gmo $${lang}.po"; \ cd $(srcdir) && rm -f $${lang}.gmo && $(GMSGFMT) -c --statistics --verbose -o t-$${lang}.gmo $${lang}.po && mv t-$${lang}.gmo $${lang}.gmo .sin.sed: sed -e '/^#/d' $< > t-$@ mv t-$@ $@ all: all-@USE_NLS@ all-yes: stamp-po all-no: # Ensure that the gettext macros and this Makefile.in.in are in sync. CHECK_MACRO_VERSION = \ test "$(GETTEXT_MACRO_VERSION)" = "@GETTEXT_MACRO_VERSION@" \ || { echo "*** error: gettext infrastructure mismatch: using a Makefile.in.in from gettext version $(GETTEXT_MACRO_VERSION) but the autoconf macros are from gettext version @GETTEXT_MACRO_VERSION@" 1>&2; \ exit 1; \ } # $(srcdir)/$(DOMAIN).pot is only created when needed. When xgettext finds no # internationalized messages, no $(srcdir)/$(DOMAIN).pot is created (because # we don't want to bother translators with empty POT files). We assume that # LINGUAS is empty in this case, i.e. $(POFILES) and $(GMOFILES) are empty. # In this case, stamp-po is a nop (i.e. a phony target). # stamp-po is a timestamp denoting the last time at which the CATALOGS have # been loosely updated. Its purpose is that when a developer or translator # checks out the package via CVS, and the $(DOMAIN).pot file is not in CVS, # "make" will update the $(DOMAIN).pot and the $(CATALOGS), but subsequent # invocations of "make" will do nothing. This timestamp would not be necessary # if updating the $(CATALOGS) would always touch them; however, the rule for # $(POFILES) has been designed to not touch files that don't need to be # changed. stamp-po: $(srcdir)/$(DOMAIN).pot @$(CHECK_MACRO_VERSION) test ! -f $(srcdir)/$(DOMAIN).pot || \ test -z "$(GMOFILES)" || $(MAKE) $(GMOFILES) @test ! -f $(srcdir)/$(DOMAIN).pot || { \ echo "touch stamp-po" && \ echo timestamp > stamp-poT && \ mv stamp-poT stamp-po; \ } # Note: Target 'all' must not depend on target '$(DOMAIN).pot-update', # otherwise packages like GCC can not be built if only parts of the source # have been downloaded. # This target rebuilds $(DOMAIN).pot; it is an expensive operation. # Note that $(DOMAIN).pot is not touched if it doesn't need to be changed. # The determination of whether the package xyz is a GNU one is based on the # heuristic whether some file in the top level directory mentions "GNU xyz". # If GNU 'find' is available, we avoid grepping through monster files. $(DOMAIN).pot-update: $(POTFILES) $(srcdir)/POTFILES.in remove-potcdate.sed package_gnu="$(PACKAGE_GNU)"; \ test -n "$$package_gnu" || { \ if { if (LC_ALL=C find --version) 2>/dev/null | grep GNU >/dev/null; then \ LC_ALL=C find -L $(top_srcdir) -maxdepth 1 -type f \ -size -10000000c -exec grep 'GNU @PACKAGE@' \ /dev/null '{}' ';' 2>/dev/null; \ else \ LC_ALL=C grep 'GNU @PACKAGE@' $(top_srcdir)/* 2>/dev/null; \ fi; \ } | grep -v 'libtool:' >/dev/null; then \ package_gnu=yes; \ else \ package_gnu=no; \ fi; \ }; \ if test "$$package_gnu" = "yes"; then \ package_prefix='GNU '; \ else \ package_prefix=''; \ fi; \ if test -n '$(MSGID_BUGS_ADDRESS)' || test '$(PACKAGE_BUGREPORT)' = '@'PACKAGE_BUGREPORT'@'; then \ msgid_bugs_address='$(MSGID_BUGS_ADDRESS)'; \ else \ msgid_bugs_address='$(PACKAGE_BUGREPORT)'; \ fi; \ case `$(XGETTEXT) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-5] | 0.1[0-5].* | 0.16 | 0.16.[0-1]*) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ *) \ $(XGETTEXT) --default-domain=$(DOMAIN) --directory=$(top_srcdir) \ --add-comments=TRANSLATORS: $(XGETTEXT_OPTIONS) @XGETTEXT_EXTRA_OPTIONS@ \ --files-from=$(srcdir)/POTFILES.in \ --copyright-holder='$(COPYRIGHT_HOLDER)' \ --package-name="$${package_prefix}@PACKAGE@" \ --package-version='@VERSION@' \ --msgid-bugs-address="$$msgid_bugs_address" \ ;; \ esac test ! -f $(DOMAIN).po || { \ if test -f $(srcdir)/$(DOMAIN).pot-header; then \ sed -e '1,/^#$$/d' < $(DOMAIN).po > $(DOMAIN).1po && \ cat $(srcdir)/$(DOMAIN).pot-header $(DOMAIN).1po > $(DOMAIN).po; \ rm -f $(DOMAIN).1po; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ sed -f remove-potcdate.sed < $(srcdir)/$(DOMAIN).pot > $(DOMAIN).1po && \ sed -f remove-potcdate.sed < $(DOMAIN).po > $(DOMAIN).2po && \ if cmp $(DOMAIN).1po $(DOMAIN).2po >/dev/null 2>&1; then \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(DOMAIN).po; \ else \ rm -f $(DOMAIN).1po $(DOMAIN).2po $(srcdir)/$(DOMAIN).pot && \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ else \ mv $(DOMAIN).po $(srcdir)/$(DOMAIN).pot; \ fi; \ } # This rule has no dependencies: we don't need to update $(DOMAIN).pot at # every "make" invocation, only create it when it is missing. # Only "make $(DOMAIN).pot-update" or "make dist" will force an update. $(srcdir)/$(DOMAIN).pot: $(MAKE) $(DOMAIN).pot-update # This target rebuilds a PO file if $(DOMAIN).pot has changed. # Note that a PO file is not touched if it doesn't need to be changed. $(POFILES): $(POFILESDEPS) @lang=`echo $@ | sed -e 's,.*/,,' -e 's/\.po$$//'`; \ if test -f "$(srcdir)/$${lang}.po"; then \ test -f $(srcdir)/$(DOMAIN).pot || $(MAKE) $(srcdir)/$(DOMAIN).pot; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot"; \ cd $(srcdir) \ && { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) $${lang}.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE_UPDATE) $(MSGMERGE_OPTIONS) --lang=$${lang} $${lang}.po $(DOMAIN).pot;; \ esac; \ }; \ else \ $(MAKE) $${lang}.po-create; \ fi install: install-exec install-data install-exec: install-data: install-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ for file in $(DISTFILES.common) Makevars.template; do \ $(INSTALL_DATA) $(srcdir)/$$file \ $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ for file in Makevars; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi install-data-no: all install-data-yes: all @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ if test -r $$cat; then realcat=$$cat; else realcat=$(srcdir)/$$cat; fi; \ $(INSTALL_DATA) $$realcat $(DESTDIR)$$dir/$(DOMAIN).mo; \ echo "installing $$realcat as $(DESTDIR)$$dir/$(DOMAIN).mo"; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ ln -s ../LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ ln $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo 2>/dev/null || \ cp -p $(DESTDIR)$(localedir)/$$lang/LC_MESSAGES/$(DOMAIN).mo $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ echo "installing $$realcat link as $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo"; \ fi; \ done; \ done install-strip: install installdirs: installdirs-exec installdirs-data installdirs-exec: installdirs-data: installdirs-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ $(mkdir_p) $(DESTDIR)$(gettextsrcdir); \ else \ : ; \ fi installdirs-data-no: installdirs-data-yes: @catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ dir=$(localedir)/$$lang/LC_MESSAGES; \ $(mkdir_p) $(DESTDIR)$$dir; \ for lc in '' $(EXTRA_LOCALE_CATEGORIES); do \ if test -n "$$lc"; then \ if (cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc 2>/dev/null) | grep ' -> ' >/dev/null; then \ link=`cd $(DESTDIR)$(localedir)/$$lang && LC_ALL=C ls -l -d $$lc | sed -e 's/^.* -> //'`; \ mv $(DESTDIR)$(localedir)/$$lang/$$lc $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ (cd $(DESTDIR)$(localedir)/$$lang/$$lc.old && \ for file in *; do \ if test -f $$file; then \ ln -s ../$$link/$$file $(DESTDIR)$(localedir)/$$lang/$$lc/$$file; \ fi; \ done); \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc.old; \ else \ if test -d $(DESTDIR)$(localedir)/$$lang/$$lc; then \ :; \ else \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc; \ mkdir $(DESTDIR)$(localedir)/$$lang/$$lc; \ fi; \ fi; \ fi; \ done; \ done # Define this as empty until I found a useful application. installcheck: uninstall: uninstall-exec uninstall-data uninstall-exec: uninstall-data: uninstall-data-@USE_NLS@ if test "$(PACKAGE)" = "gettext-tools"; then \ for file in $(DISTFILES.common) Makevars.template; do \ rm -f $(DESTDIR)$(gettextsrcdir)/$$file; \ done; \ else \ : ; \ fi uninstall-data-no: uninstall-data-yes: catalogs='$(CATALOGS)'; \ for cat in $$catalogs; do \ cat=`basename $$cat`; \ lang=`echo $$cat | sed -e 's/\.gmo$$//'`; \ for lc in LC_MESSAGES $(EXTRA_LOCALE_CATEGORIES); do \ rm -f $(DESTDIR)$(localedir)/$$lang/$$lc/$(DOMAIN).mo; \ done; \ done check: all info dvi ps pdf html tags TAGS ctags CTAGS ID: mostlyclean: rm -f remove-potcdate.sed rm -f stamp-poT rm -f core core.* $(DOMAIN).po $(DOMAIN).1po $(DOMAIN).2po *.new.po rm -fr *.o clean: mostlyclean distclean: clean rm -f Makefile Makefile.in POTFILES *.mo maintainer-clean: distclean @echo "This command is intended for maintainers to use;" @echo "it deletes files that may require special tools to rebuild." rm -f stamp-po $(GMOFILES) distdir = $(top_builddir)/$(PACKAGE)-$(VERSION)/$(subdir) dist distdir: test -z "$(DISTFILESDEPS)" || $(MAKE) $(DISTFILESDEPS) @$(MAKE) dist2 # This is a separate target because 'update-po' must be executed before. dist2: stamp-po $(DISTFILES) dists="$(DISTFILES)"; \ if test "$(PACKAGE)" = "gettext-tools"; then \ dists="$$dists Makevars.template"; \ fi; \ if test -f $(srcdir)/$(DOMAIN).pot; then \ dists="$$dists $(DOMAIN).pot stamp-po"; \ fi; \ if test -f $(srcdir)/ChangeLog; then \ dists="$$dists ChangeLog"; \ fi; \ for i in 0 1 2 3 4 5 6 7 8 9; do \ if test -f $(srcdir)/ChangeLog.$$i; then \ dists="$$dists ChangeLog.$$i"; \ fi; \ done; \ if test -f $(srcdir)/LINGUAS; then dists="$$dists LINGUAS"; fi; \ for file in $$dists; do \ if test -f $$file; then \ cp -p $$file $(distdir) || exit 1; \ else \ cp -p $(srcdir)/$$file $(distdir) || exit 1; \ fi; \ done update-po: Makefile $(MAKE) $(DOMAIN).pot-update test -z "$(UPDATEPOFILES)" || $(MAKE) $(UPDATEPOFILES) $(MAKE) update-gmo # General rule for creating PO files. .nop.po-create: @lang=`echo $@ | sed -e 's/\.po-create$$//'`; \ echo "File $$lang.po does not exist. If you are a translator, you can create it through 'msginit'." 1>&2; \ exit 1 # General rule for updating PO files. .nop.po-update: @lang=`echo $@ | sed -e 's/\.po-update$$//'`; \ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ test "$(srcdir)" = . && cdcmd="" || cdcmd="cd $(srcdir) && "; \ echo "$${cdcmd}$(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang $$lang.po $(DOMAIN).pot -o $$lang.new.po"; \ cd $(srcdir); \ if { case `$(MSGMERGE) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-7] | 0.1[0-7].*) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ *) \ $(MSGMERGE) $(MSGMERGE_OPTIONS) --lang=$$lang -o $$tmpdir/$$lang.new.po $$lang.po $(DOMAIN).pot;; \ esac; \ }; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "msgmerge for $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "msgmerge for $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi $(DUMMYPOFILES): update-gmo: Makefile $(GMOFILES) @: # Recreate Makefile by invoking config.status. Explicitly invoke the shell, # because execution permission bits may not work on the current file system. # Use @SHELL@, which is the shell determined by autoconf for the use by its # scripts, not $(SHELL) which is hardwired to /bin/sh and may be deficient. Makefile: Makefile.in.in Makevars $(top_builddir)/config.status @POMAKEFILEDEPS@ cd $(top_builddir) \ && @SHELL@ ./config.status $(subdir)/$@.in po-directories force: # Tell versions [3.59,3.63) of GNU make not to export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/nl.po�������������������������������������������������������������������������������0000644�0000000�0000000�00000201215�14226577415�011511� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Dutch translations for GNU recutils. # Copyright (C) 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the recutils package. # # « Si le nez de Cléopatre avait été plus long, # Jules César se serait piqué le ventre. » # # Benno Schulenberg <benno@vertaalt.nl>, 2011, 2012, 2013, 2014. msgid "" msgstr "" "Project-Id-Version: recutils 1.6.90\n" "Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" "POT-Creation-Date: 2022-04-16 19:38+0200\n" "PO-Revision-Date: 2014-03-20 21:55+0100\n" "Last-Translator: Benno Schulenberg <benno@vertaalt.nl>\n" "Language-Team: Dutch <vertaling@vrijschrift.org>\n" "Language: nl\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Lokalize 1.0\n" "Plural-Forms: nplurals=2; plural=n != 1;\n" #: lib/closeout.c:122 msgid "write error" msgstr "schrijffout" #: lib/copy-acl.c:54 lib/copy-file.c:215 #, c-format msgid "preserving permissions for %s" msgstr "" #: lib/copy-file.c:192 #, fuzzy, c-format msgid "error while opening %s for reading" msgstr "kan bestand %s niet openen om te lezen.\n" #: lib/copy-file.c:196 #, fuzzy, c-format msgid "cannot open backup file %s for writing" msgstr "kan bestand %s niet openen om te lezen.\n" #: lib/copy-file.c:200 #, fuzzy, c-format msgid "error reading %s" msgstr "fout: kan bestand %s niet lezen.\n" #: lib/copy-file.c:204 #, c-format msgid "error writing %s" msgstr "" #: lib/copy-file.c:208 #, fuzzy, c-format msgid "error after reading %s" msgstr "fout: kan bestand %s niet lezen.\n" #: lib/error.c:195 msgid "Unknown system error" msgstr "Onbekende systeemfout" #: lib/execute.c:348 lib/wait-process.c:291 lib/wait-process.c:365 #, c-format msgid "%s subprocess failed" msgstr "subproces %s is mislukt" #: lib/getopt.c:278 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: optie '-W %s' is niet eenduidig\n" #: lib/getopt.c:284 #, fuzzy, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: optie '%s' is niet eenduidig; mogelijkheden zijn:" #: lib/getopt.c:319 #, fuzzy, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: onbekende optie '%c%s'\n" #: lib/getopt.c:345 #, fuzzy, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: optie '%c%s' staat geen argument toe\n" #: lib/getopt.c:360 #, fuzzy, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: optie '--%s' vereist een argument\n" #: lib/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: ongeldige optie -- '%c'\n" #: lib/getopt.c:636 lib/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: optie vereist een argument -- '%c'\n" #: lib/obstack.c:337 lib/obstack.c:339 lib/xalloc-die.c:34 msgid "memory exhausted" msgstr "onvoldoende geheugen beschikbaar" #: lib/openat-die.c:38 #, c-format msgid "unable to record current working directory" msgstr "" #: lib/openat-die.c:57 #, c-format msgid "failed to return to initial working directory" msgstr "" #: parse-datetime.y:440 parse-datetime.y:540 #, c-format msgid "parsed %s part: " msgstr "" #: parse-datetime.y:455 #, c-format msgid "year: %04<PRIdMAX>" msgstr "" #: parse-datetime.y:483 #, c-format msgid "%s (day ordinal=%<PRIdMAX> number=%d)" msgstr "" #: parse-datetime.y:514 #, c-format msgid "number of seconds: %<PRIdMAX>" msgstr "" #: parse-datetime.y:547 msgid "today/this/now\n" msgstr "" #: parse-datetime.y:612 msgid "number of seconds" msgstr "" #: parse-datetime.y:625 msgid "datetime" msgstr "" #: parse-datetime.y:630 msgid "time" msgstr "" #: parse-datetime.y:635 msgid "local_zone" msgstr "" #: parse-datetime.y:640 msgid "zone" msgstr "" #: parse-datetime.y:645 msgid "date" msgstr "" #: parse-datetime.y:650 msgid "day" msgstr "" #: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 msgid "relative" msgstr "" #: parse-datetime.y:658 msgid "number" msgstr "" #: parse-datetime.y:662 msgid "hybrid" msgstr "" #: parse-datetime.y:820 #, c-format msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" msgstr "" #: parse-datetime.y:832 #, c-format msgid "" "warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" msgstr "" #: parse-datetime.y:1279 #, c-format msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" msgstr "" #: parse-datetime.y:1289 #, c-format msgid "error: out-of-range year %<PRIdMAX>\n" msgstr "" #: parse-datetime.y:1520 #, fuzzy, c-format msgid "error: unknown word '%s'\n" msgstr "fout: kan bestand %s niet lezen.\n" #: parse-datetime.y:1669 #, fuzzy msgid "error: invalid date/time value:\n" msgstr "ongeldige opsommingswaarde." #: parse-datetime.y:1670 #, c-format msgid " user provided time: '%s'\n" msgstr "" #: parse-datetime.y:1672 #, c-format msgid " normalized time: '%s'\n" msgstr "" #: parse-datetime.y:1695 msgid " possible reasons:\n" msgstr "" #: parse-datetime.y:1697 msgid " non-existing due to daylight-saving time;\n" msgstr "" #: parse-datetime.y:1699 msgid " invalid day/month combination;\n" msgstr "" #: parse-datetime.y:1700 msgid " numeric values overflow;\n" msgstr "" #: parse-datetime.y:1701 msgid "incorrect timezone" msgstr "" #: parse-datetime.y:1702 msgid "missing timezone" msgstr "" #: parse-datetime.y:1810 msgid "error: initial year out of range\n" msgstr "" #: parse-datetime.y:1905 #, fuzzy msgid "error: parsing failed\n" msgstr "fout tijdens ontleden van CSV-bestand: %s\n" #: parse-datetime.y:1906 #, fuzzy, c-format msgid "error: parsing failed, stopped at '%s'\n" msgstr "fout tijdens ontleden van CSV-bestand: %s\n" #: parse-datetime.y:1916 msgid "input timezone: " msgstr "" #: parse-datetime.y:1919 #, c-format msgid "'@timespec' - always UTC" msgstr "" #: parse-datetime.y:1921 #, c-format msgid "parsed date/time string" msgstr "" #: parse-datetime.y:1925 #, c-format msgid "TZ=\"%s\" in date string" msgstr "" #: parse-datetime.y:1929 #, c-format msgid "TZ=\"UTC0\" environment value or -u" msgstr "" #: parse-datetime.y:1932 #, c-format msgid "TZ=\"%s\" environment value" msgstr "" #: parse-datetime.y:1935 #, c-format msgid "system default" msgstr "" #: parse-datetime.y:1977 msgid "error: year, month, or day overflow\n" msgstr "" #: parse-datetime.y:1988 #, fuzzy, c-format msgid "error: invalid hour %<PRIdMAX>%s\n" msgstr "%s:%s: fout: ongeldig recordtype %s\n" #: parse-datetime.y:1996 #, c-format msgid "using specified time as starting value: '%s'\n" msgstr "" #: parse-datetime.y:1997 #, c-format msgid "using current time as starting value: '%s'\n" msgstr "" #: parse-datetime.y:2051 #, c-format msgid "error: tzalloc (\"%s\") failed\n" msgstr "" #: parse-datetime.y:2095 #, c-format msgid "" "error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " "date: '%s'\n" msgstr "" #: parse-datetime.y:2106 #, c-format msgid "new start date: '%s' is '%s'\n" msgstr "" #: parse-datetime.y:2115 #, c-format msgid "using current date as starting value: '%s'\n" msgstr "" #: parse-datetime.y:2119 #, c-format msgid "warning: day (%s) ignored when explicit dates are given\n" msgstr "" #: parse-datetime.y:2123 #, c-format msgid "starting date/time: '%s'\n" msgstr "" #: parse-datetime.y:2133 msgid "" "warning: when adding relative months/years, it is recommended to specify the " "15th of the months\n" msgstr "" #: parse-datetime.y:2138 msgid "warning: when adding relative days, it is recommended to specify noon\n" msgstr "" #: parse-datetime.y:2148 #, fuzzy, c-format msgid "error: %s:%d\n" msgstr ": fout: " #: parse-datetime.y:2163 #, c-format msgid "error: adding relative date resulted in an invalid date: '%s'\n" msgstr "" #: parse-datetime.y:2172 #, c-format msgid "" "after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " "days),\n" msgstr "" #: parse-datetime.y:2176 #, c-format msgid " new date/time = '%s'\n" msgstr "" #: parse-datetime.y:2195 msgid "warning: daylight saving time changed after date adjustment\n" msgstr "" #: parse-datetime.y:2214 msgid "warning: month/year adjustment resulted in shifted dates:\n" msgstr "" #: parse-datetime.y:2217 #, c-format msgid " adjusted Y M D: %s %02d %02d\n" msgstr "" #: parse-datetime.y:2219 #, c-format msgid " normalized Y M D: %s %02d %02d\n" msgstr "" #: parse-datetime.y:2248 #, c-format msgid "error: timezone %d caused time_t overflow\n" msgstr "" #: parse-datetime.y:2258 #, c-format msgid "'%s' = %<PRIdMAX> epoch-seconds\n" msgstr "" #: parse-datetime.y:2286 msgid "error: adding relative time caused an overflow\n" msgstr "" #: parse-datetime.y:2297 #, c-format msgid "" "after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " "seconds, %+d ns),\n" msgstr "" #: parse-datetime.y:2303 #, c-format msgid " new time = %<PRIdMAX> epoch-seconds\n" msgstr "" #: parse-datetime.y:2319 msgid "warning: daylight saving time changed after time adjustment\n" msgstr "" #: parse-datetime.y:2329 msgid "timezone: system default\n" msgstr "" #: parse-datetime.y:2331 msgid "timezone: Universal Time\n" msgstr "" #: parse-datetime.y:2333 #, c-format msgid "timezone: TZ=\"%s\" environment value\n" msgstr "" #: parse-datetime.y:2337 #, c-format msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" msgstr "" #: parse-datetime.y:2343 #, c-format msgid "final: %s (UTC)\n" msgstr "" #: parse-datetime.y:2358 #, c-format msgid "final: %s (UTC%s)\n" msgstr "" #: parse-datetime.y:2362 #, c-format msgid "final: %s (unknown time zone offset)\n" msgstr "" #. TRANSLATORS: #. Get translations for open and closing quotation marks. #. The message catalog should translate "`" to a left #. quotation mark suitable for the locale, and similarly for #. "'". For example, a French Unicode local should translate #. these to U+00AB (LEFT-POINTING DOUBLE ANGLE #. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE #. QUOTATION MARK), respectively. #. #. If the catalog has no translation, we will try to #. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and #. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the #. current locale is not Unicode, locale_quoting_style #. will quote 'like this', and clocale_quoting_style will #. quote "like this". You should always include translations #. for "`" and "'" even if U+2018 and U+2019 are appropriate #. for your locale. #. #. If you don't know what to put here, please see #. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> #. and use glyphs suitable for your language. #: lib/quotearg.c:355 msgid "`" msgstr "‘" #: lib/quotearg.c:356 msgid "'" msgstr "’" #: lib/regcomp.c:122 msgid "Success" msgstr "Gelukt" #: lib/regcomp.c:125 msgid "No match" msgstr "Geen overeenkomsten" #: lib/regcomp.c:128 msgid "Invalid regular expression" msgstr "Ongeldige reguliere expressie" # Zie http://mailman.vrijschrift.org/pipermail/vertaling/2005-August/004670.html #: lib/regcomp.c:131 msgid "Invalid collation character" msgstr "Ongeldig samengesteld teken" #: lib/regcomp.c:134 msgid "Invalid character class name" msgstr "Ongeldige tekenklassenaam" #: lib/regcomp.c:137 msgid "Trailing backslash" msgstr "Backslash aan het eind" #: lib/regcomp.c:140 msgid "Invalid back reference" msgstr "Ongeldige terugverwijzing" #: lib/regcomp.c:143 #, fuzzy msgid "Unmatched [, [^, [:, [., or [=" msgstr "Ongepaarde [ of [^" #: lib/regcomp.c:146 msgid "Unmatched ( or \\(" msgstr "Ongepaarde ( of \\(" #: lib/regcomp.c:149 msgid "Unmatched \\{" msgstr "Ongepaarde \\{" #: lib/regcomp.c:152 msgid "Invalid content of \\{\\}" msgstr "Ongeldige inhoud van \\{\\}" #: lib/regcomp.c:155 msgid "Invalid range end" msgstr "Ongeldig bereikeinde" #: lib/regcomp.c:158 msgid "Memory exhausted" msgstr "Onvoldoende geheugen beschikbaar" #: lib/regcomp.c:161 msgid "Invalid preceding regular expression" msgstr "Ongeldige voorafgaande reguliere expressie" #: lib/regcomp.c:164 msgid "Premature end of regular expression" msgstr "Voortijdig einde van reguliere expressie" #: lib/regcomp.c:167 msgid "Regular expression too big" msgstr "Reguliere expressie is te groot" #: lib/regcomp.c:170 msgid "Unmatched ) or \\)" msgstr "Ongepaarde ) of \\)" #: lib/regcomp.c:650 msgid "No previous regular expression" msgstr "Geen eerdere reguliere expressie" #: lib/set-acl.c:46 #, c-format msgid "setting permissions for %s" msgstr "" #: lib/version-etc.c:73 #, c-format msgid "Packaged by %s (%s)\n" msgstr "" #: lib/version-etc.c:76 #, c-format msgid "Packaged by %s\n" msgstr "" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: lib/version-etc.c:83 msgid "(C)" msgstr "" #. TRANSLATORS: The %s placeholder is the web address of the GPL license. #: lib/version-etc.c:88 #, fuzzy, c-format msgid "" "License GPLv3+: GNU GPL version 3 or later <%s>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright (C) %s Jose E. Marchesi.\n" "Dit is vrije software: u mag het vrijelijk wijzigen en verder verspreiden.\n" "De precieze licentie is GPL-3+: GNU General Public License versie 3 of " "later.\n" "Zie http://gnu.org/licenses/gpl.html voor de volledige (Engelse) tekst.\n" "Deze software kent GEEN GARANTIE, voor zover de wet dit toestaat.\n" "\n" #. TRANSLATORS: %s denotes an author name. #: lib/version-etc.c:105 #, c-format msgid "Written by %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:109 #, fuzzy, c-format msgid "Written by %s and %s.\n" msgstr "" "\n" "Geschreven door Jose E. Marchesi." #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:113 #, fuzzy, c-format msgid "Written by %s, %s, and %s.\n" msgstr "" "\n" "Geschreven door Jose E. Marchesi." #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:120 #, c-format msgid "" "Written by %s, %s, %s,\n" "and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:127 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:134 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:142 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:150 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:159 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:170 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s, and others.\n" msgstr "" #. TRANSLATORS: The placeholder indicates the bug-reporting address #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for translation #. bugs (typically your translation team's web or email address). #. TRANSLATORS: --help output 5+ (reports) #. TRANSLATORS: the placeholder indicates the bug-reporting address #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap #: lib/version-etc.c:249 utils/recutl.c:114 #, c-format msgid "Report bugs to: %s\n" msgstr "" "Rapporteer gebreken in het programma aan <%s>;\n" "meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n" #: lib/version-etc.c:251 utils/recutl.c:117 #, c-format msgid "Report %s bugs to: %s\n" msgstr "" "Rapporteer gebreken in het programma '%s' aan <%s>;\n" "meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n" #: lib/version-etc.c:255 lib/version-etc.c:257 utils/recutl.c:121 #, c-format msgid "%s home page: <%s>\n" msgstr "Webpagina van %s: <%s>\n" #: lib/version-etc.c:260 #, fuzzy, c-format msgid "General help using GNU software: <%s>\n" msgstr "" "Algemene hulp bij gebruik van GNU-software: <http://www.gnu.org/gethelp/>\n" #: lib/wait-process.c:232 lib/wait-process.c:264 lib/wait-process.c:326 #, c-format msgid "%s subprocess" msgstr "subproces %s" #: lib/wait-process.c:283 lib/wait-process.c:355 #, c-format msgid "%s subprocess got fatal signal %d" msgstr "subproces %s ontving het fatale signaal %d" #: src/rec-fex.c:726 #, c-format msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" msgstr "" "**interne programmafout**: REC_FEX_MAX_ELEMS is overschreden.\n" "Rapporteer dit alstublieft aan de maker.\n" #: src/rec-int.c:132 src/rec-int.c:186 src/rec-int.c:243 src/rec-int.c:287 #: utils/recutl.c:199 msgid "out of memory\n" msgstr "onvoldoende geheugen beschikbaar\n" #: src/rec-int.c:147 #, c-format msgid "%s:%s: error: mandatory field '%s' not found in record\n" msgstr "%s:%s: fout: verplicht veld '%s' niet gevonden in record\n" #: src/rec-int.c:210 #, c-format msgid "%s:%s: error: field '%s' not allowed in this record set\n" msgstr "%s:%s: fout: veld '%s' is niet toegestaan in deze recordset\n" #: src/rec-int.c:257 #, c-format msgid "%s:%s: error: field '%s' should be unique in this record\n" msgstr "%s:%s: fout: veld '%s' moet uniek zijn in dit record\n" #: src/rec-int.c:301 #, c-format msgid "%s:%s: error: prohibited field '%s' found in record\n" msgstr "%s:%s: fout: verboden veld '%s' gevonden in record\n" #: src/rec-int.c:333 #, c-format msgid "%s:%s: error: %%constraint[%d] violated in record\n" msgstr "%s:%s: error: %%begrenzing[%d] is overschreden in record\n" #: src/rec-int.c:370 #, c-format msgid "%s:%s: error: confidential field is not encrypted\n" msgstr "%s:%s: fout: vertrouwelijk veld is niet versleuteld\n" #: src/rec-int.c:422 #, c-format msgid "%s:%s: error: key field '%s' not found in record\n" msgstr "%s:%s: fout: sleutelveld '%s' niet gevonden in record\n" #: src/rec-int.c:431 #, c-format msgid "%s:%s: error: multiple key fields '%s' in record\n" msgstr "%s:%s: fout: meerdere sleutelvelden '%s' in record\n" #: src/rec-int.c:474 #, c-format msgid "%s:%s: error: duplicated key value in field '%s' in record\n" msgstr "%s:%s: fout: duplicaat sleutel in veld '%s' in record\n" #: src/rec-int.c:562 #, fuzzy, c-format msgid "%s:%s: error: duplicated value in singular field '%s' in record\n" msgstr "%s:%s: fout: duplicaat sleutel in veld '%s' in record\n" #: src/rec-int.c:620 #, c-format msgid "%s:%s: error: missing %%rec field in record descriptor\n" msgstr "%s:%s: fout: ontbrekend %%rec-veld in recorddescriptor\n" #: src/rec-int.c:628 #, c-format msgid "%s:%s: error: too many %%rec fields in record descriptor\n" msgstr "%s:%s: fout: te veel %%rec-velden in recorddescriptor\n" #: src/rec-int.c:638 #, c-format msgid "%s:%s: error: invalid record type %s\n" msgstr "%s:%s: fout: ongeldig recordtype %s\n" #: src/rec-int.c:649 #, c-format msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" msgstr "" "%s:%s: fout: slechts één %%key-veld is toegestaan in een recorddescriptor\n" #: src/rec-int.c:659 #, c-format msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" msgstr "" "%s:%s: fout: slechts één %%size-veld is toegestaan in een recorddescriptor\n" #: src/rec-int.c:669 #, c-format msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" msgstr "" "%s:%s: fout: slechts één %%sort-veld is toegestaan in een recorddescriptor\n" #: src/rec-int.c:692 #, c-format msgid "" "%s:%s: error: expected a comma-separated list of fields before the type " "specification\n" msgstr "" "%s:%s: fout: er werd een kommagescheiden lijst van velden verwacht vóór de " "typespecificatie\n" #: src/rec-int.c:718 src/rec-int.c:771 #, c-format msgid "%s:%s: error: the referred type %s does not exist\n" msgstr "%s:%s: fout: genoemd type %s bestaat niet\n" #: src/rec-int.c:730 #, c-format msgid "%s:%s: error: invalid type specification\n" msgstr "%s:%s: fout: ongeldige typespecificatie\n" #: src/rec-int.c:745 #, c-format msgid "%s:%s: error: expected a type name before the type specification\n" msgstr "%s:%s: fout: er wordt een typenaam verwacht vóór de typespecificatie\n" #: src/rec-int.c:783 #, c-format msgid "%s:%s: error: invalid typedef specification\n" msgstr "%s:%s: fout: ongeldige 'typedef'-specificatie\n" #: src/rec-int.c:805 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" msgstr "" "%s:%s: fout: de waarde van %s[%zd] is geen geldige selectie-expressie\n" #: src/rec-int.c:836 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" msgstr "%s:%s: fout: de waarde van %s[%zd] is geen lijst van veldnamen\n" #: src/rec-int.c:849 #, c-format msgid "" "%s:%s: error: value for %s should be a number optionally preceded by >, <, " ">= or <=.\n" msgstr "" "%s: %s: fout: de waarde voor %s moet een getal zijn,\n" "eventueel voorafgegaan door '>', '<', '>=' of '<='.\n" #: src/rec-int.c:865 #, c-format msgid "%s:%s: error: value for %s should be a list of field names.\n" msgstr "%s:%s: fout: de waarde van %s moet een lijst van veldnamen zijn\n" #: src/rec-int.c:893 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range, uuid " "or date\n" msgstr "" "%s:%s: fout: automatisch opgehoogd veld '%s' moet een geheel getal, bereik, " "UUID of datum zijn\n" #: src/rec-int.c:895 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range or " "date\n" msgstr "" "%s:%s: fout: automatisch opgehoogd veld '%s' moet een geheel getal, bereik " "of datum zijn\n" #: src/rec-int.c:978 #, c-format msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" msgstr "%s:%s: fout: kan descriptor op afstand niet laden vanaf URL %s.\n" #: src/rec-int.c:997 #, c-format msgid "%s:%s: error: could not read external descriptor from file %s.\n" msgstr "%s:%s: fout: kan externe descriptor niet laden uit bestand %s.\n" #: src/rec-int.c:1012 #, c-format msgid "%s:%s: error: %s does not contain valid rec data.\n" msgstr "%s:%s: fout: %s bevat geen geldige rec-gegevens.\n" #: src/rec-int.c:1026 #, c-format msgid "%s:%s: error: %s does not contain information for type %s.\n" msgstr "%s:%s: fout: %s bevat geen informatie voor type %s.\n" #: src/rec-int.c:1150 #, c-format msgid "%s: error: the number of records of type %s should be %zd.\n" msgstr "%s: fout: het aantal records van type %s moet %zd zijn.\n" #: src/rec-int.c:1160 #, c-format msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" msgstr "%s: fout: te veel records van type %s; maximum aantal is %zd.\n" #: src/rec-int.c:1167 #, c-format msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" msgstr "%s: fout: te weinig records van type %s; minimum aantal is %zd.\n" #: src/rec-types.c:304 msgid "invalid integer." msgstr "ongeldig geheel getal." #: src/rec-types.c:332 msgid "invalid 'field' value." msgstr "ongeldige waarde voor 'field'." #: src/rec-types.c:353 msgid "invalid 'uuid' value." msgstr "ongeldige waarde voor UUID." #: src/rec-types.c:369 msgid "invalid 'bool' value." msgstr "ongeldige waarde voor 'bool'." #: src/rec-types.c:390 msgid "invalid 'range' value." msgstr "ongeldige waarde voor 'range'." #: src/rec-types.c:399 #, c-format msgid "expected an integer between %d and %d." msgstr "verwachtte een geheel getal tussen %d en %d." #: src/rec-types.c:419 msgid "invalid 'real' value." msgstr "ongeldige waarde voor 'real'." #: src/rec-types.c:436 #, c-format msgid "value too large. Expected a size <= %zu." msgstr "waarde is te groot. Verwachtte een grootte <= %zu." #: src/rec-types.c:456 msgid "invalid 'line' value." msgstr "ongeldige waarde voor 'line'." #: src/rec-types.c:473 msgid "value does not match the regexp." msgstr "waarde komt niet overeen met reguliere expressie." #: src/rec-types.c:492 msgid "invalid date." msgstr "ongeldige datum." #: src/rec-types.c:506 msgid "invalid email." msgstr "ongeldig e-mailadres." #: src/rec-types.c:547 msgid "invalid enum value." msgstr "ongeldige opsommingswaarde." #: src/rec-types.c:898 #, c-format msgid "" "internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " "in rec_type_new().\n" msgstr "" "**interne programmafout**: REC_TYPE_NONE gekregen van " "rec_type_parse_type_kind() in rec_type_new().\n" #: src/rec-utils.c:86 #, c-format msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" msgstr "" "**interne programmafout**: rec_int_rec_extract_file(): fout bij compileren " "van regexp.\n" #: src/rec-utils.c:116 src/rec-utils.c:147 #, c-format msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" msgstr "" "**interne programmafout**: rec_int_rec_extract_url(): fout bij compileren " "van regexp.\n" #: src/rec-utils.c:290 #, c-format msgid "internal error: rec_match: error compiling regexp.\n" msgstr "" "**interne programmafout**: rec_match: fout bij compileren van regexp.\n" #. TRANSLATORS: --help output, csv2rec synopsis. #. no-wrap #: utils/csv2rec.c:98 #, c-format msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" msgstr "Gebruik: csv2rec [OPTIE...] [CSV-BESTAND]\n" #. TRANSLATORS: --help output, csv2rec short description. #. no-wrap #: utils/csv2rec.c:103 msgid "Convert csv data into rec data.\n" msgstr "Converteert kommagescheiden gegevens naar rec-gegevens.\n" #. TRANSLATORS: --help output, csv2rec options. #. no-wrap #: utils/csv2rec.c:109 #, fuzzy msgid "" " -t, --type=TYPE type name for the converted records; " "if this\n" " parameter is omitted then no type is " "used.\n" " -s, --strict be strict parsing the csv file.\n" " -e, --omit-empty omit empty fields.\n" msgstr "" " -t, --type=TYPE typenaam voor geconverteerde records; als deze " "optie\n" " weggelaten wordt, dan wordt geen type gebruikt\n" " -s, --strict streng zijn bij ontleden van CSV-bestand\n" " -e, --omit-empty lege velden weglaten\n" #: utils/csv2rec.c:212 #, c-format msgid "invalid field name '%s' in header\n" msgstr "ongeldige veldnaam '%s' in kopregel\n" #: utils/csv2rec.c:221 #, fuzzy msgid "error while parsing CSV file: too many columns in row\n" msgstr "fout tijdens ontleden van CSV-bestand: %s\n" #: utils/csv2rec.c:241 #, fuzzy, c-format msgid "" "%s: %lu: this line contains %lu fields, but %lu header fields were read\n" msgstr "" "%s: %d: deze regel bevat %d velden, maar er werden %d kopvelden gelezen\n" #: utils/csv2rec.c:331 utils/recdel.c:233 utils/recset.c:306 utils/recutl.c:317 #, c-format msgid "cannot read file %s\n" msgstr "kan bestand %s niet lezen\n" #: utils/csv2rec.c:338 msgid "failed to initialize csv parser\n" msgstr "initialiseren van CSV-ontleder is mislukt\n" #: utils/csv2rec.c:355 #, c-format msgid "error while parsing CSV file: %s\n" msgstr "fout tijdens ontleden van CSV-bestand: %s\n" #. TRANSLATORS: --help output, mdb2rec synopsis. #. no-wrap #: utils/mdb2rec.c:97 #, c-format msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" msgstr "Gebruik: mdb2rec [OPTIE...] MDB-BESTAND [TABEL]\n" #. TRANSLATORS: --help output, mdb2rec short description. #. no-wrap #: utils/mdb2rec.c:102 msgid "Convert an mdb file into a rec file.\n" msgstr "Converteert een mdb-bestand naar een rec-bestand.\n" #. TRANSLATORS: --help output, mdb2rec options. #. no-wrap #: utils/mdb2rec.c:108 msgid "" " -s, --system-tables include system tables.\n" " -e, --keep-empty-fields don't prune empty fields in the rec\n" " output.\n" " -l, --list-tables dump a list of the table names " "contained\n" " in the mdb file.\n" msgstr "" " -s, --system-tables ook de systeemtabellen tonen\n" " -e, --keep-empty-fields lege velden in rec-uitvoer niet weglaten\n" " -l, --list-tables een lijst van tabelnamen in mdb-bestand tonen\n" #: utils/mdb2rec.c:230 utils/mdb2rec.c:288 #, c-format msgid "failed to normalise record type name %s\n" msgstr "kan recordtypenaam %s niet normaliseren.\n" #: utils/mdb2rec.c:236 utils/mdb2rec.c:245 #, c-format msgid "failed to normalise field name %s\n" msgstr "kan veldnaam %s niet normaliseren.\n" #: utils/mdb2rec.c:307 #, c-format msgid "failed to normalise the field name %s\n" msgstr "kan veldnaam %s niet normaliseren.\n" #: utils/mdb2rec.c:396 utils/recins.c:191 utils/recset.c:223 #, c-format msgid "invalid field name %s.\n" msgstr "ongeldige veldnaam %s.\n" #: utils/mdb2rec.c:436 #, c-format msgid "could not open file %s\n" msgstr "kan bestand %s niet openen.\n" #: utils/mdb2rec.c:441 msgid "file does not appear to be an Access database\n" msgstr "bestand schijnt geen Access-databank te zijn.\n" #. TRANSLATORS: --help output, rec2csv synopsis. #. no-wrap #: utils/rec2csv.c:70 #, c-format msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" msgstr "Gebruik: rec2csv [OPTIE...] [REC-BESTAND]\n" #. TRANSLATORS: --help output, rec2csv short description. #. no-wrap #: utils/rec2csv.c:75 msgid "Convert rec data into csv data.\n" msgstr "Converteert rec-gegevens naar kommagescheiden gegevens.\n" #. TRANSLATORS: --help output, rec2csv options. #. no-wrap #: utils/rec2csv.c:81 msgid "" " -d, --delim=char sets the deliminator (default ',')\n" " -t, --type=TYPE record set to convert to csv; if this " "parameter\n" " is omitted then the default record " "set is used\n" " -S, --sort=FIELDS sort the output by the specified " "fields.\n" msgstr "" " -d, --delim=TEKEN te gebruiken scheidingsteken (standaard ',')\n" " -t, --type=TYPE te converteren recordset; als deze optie " "weggelaten\n" " wordt, dan wordt de standaard recordset " "gebruikt\n" " -S, --sort=VELD,... de uitvoer sorteren op deze velden\n" #: utils/rec2csv.c:121 msgid "only one list of fields can be specified as a sorting criteria.\n" msgstr "" "er kan slechts één lijst van velden gegeven worden als sorteercriterium.\n" #: utils/rec2csv.c:126 msgid "invalid field name list in -S.\n" msgstr "ongeldige veldnamenlijst bij optie '-S'.\n" #: utils/rec2csv.c:130 utils/recsel.c:221 utils/recsel.c:245 msgid "internal error creating fex.\n" msgstr "**interne programmafout** tijdens aanmaken van de veldexpressie.\n" #. TRANSLATORS: --help output, recdel synopsis. #. no-wrap #: utils/recdel.c:78 #, c-format msgid "" "Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [FILE]\n" msgstr "" "Gebruik: recdel [OPTIE...] [-t TYPE]\n" " [-n NUMMER | -e RECORDEXPRESSIE | -q TEKENREEKS | -m " "GETAL]\n" " [BESTAND]\n" #. TRANSLATORS: --help output, recdel short description. #. no-wrap #: utils/recdel.c:83 msgid "Remove (or comment out) records from a rec file.\n" msgstr "Verwijdert records uit een rec-bestand (of zet ze om in commentaar).\n" #. TRANSLATORS: --help output, recdel arguments. #. no-wrap #: utils/recdel.c:90 msgid "" " -c, --comment comment out the matching records " "instead of\n" " deleting them.\n" " --force delete even in potentially dangerous " "situations,\n" " and if the deletion is violating " "record restrictions.\n" " --no-external don't use external descriptors.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -c, --comment van de overeenkomende records commentaar maken\n" " in plaats van ze te verwijderen\n" " --force records ook verwijderen als dit mogelijk " "gevaar\n" " oplevert of beperkingen overtreedt\n" " --no-external geen externe descriptors gebruiken\n" " --verbose een gedetailleerd rapport produceren als de\n" " integriteitscontrole faalt\n" #. TRANSLATORS: --help output, notes on recdel. #. no-wrap #. TRANSLATORS: --help output, notes on recfix. #. no-wrap #. TRANSLATORS: --help output, notes on recins. #. no-wrap #: utils/recdel.c:108 utils/recfix.c:149 utils/recins.c:138 msgid "" "If no FILE is specified then the command acts like a filter, getting\n" "the data from standard input and writing the result to standard output.\n" msgstr "" "Als geen BESTAND gegeven is dan fungeert de opdracht als een filter: het " "leest\n" "de gegevens van standaardinvoer en schrijft het resultaat naar " "standaarduitvoer.\n" #: utils/recdel.c:123 #, c-format msgid "no records of type %s found.\n" msgstr "geen records van type %s gevonden.\n" #: utils/recdel.c:196 #, c-format msgid "ignoring a request to delete all records of type %s.\n" msgstr "verzoek om alle records van type %s te verwijderen wordt genegeerd.\n" #: utils/recdel.c:198 msgid "use --force if you really want to proceed, or use either -n or -e.\n" msgstr "" "gebruik optie '--force' als u echt door wilt gaan, of gebruik '-n' of '-e'\n" #: utils/recdel.c:206 msgid "invalid selection expression.\n" msgstr "ongeldige selectie-expressie.\n" #: utils/recdel.c:241 utils/recfix.c:344 utils/recins.c:361 utils/recset.c:312 #, c-format msgid "file %s is not writable.\n" msgstr "bestand %s is niet schrijfbaar.\n" #. TRANSLATORS: --help output, recfix synopsis. #. no-wrap #: utils/recfix.c:99 #, c-format msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" msgstr "" "Gebruik: recfix [OPTIE...] [BEWERKING] [BEWERKINGSOPTIE...] [BESTAND]\n" #. TRANSLATORS: --help output, recfix short description. #. no-wrap #: utils/recfix.c:104 msgid "Check and fix rec files.\n" msgstr "Controleert en repareert rec-bestanden.\n" #. TRANSLATORS: --help output, recfix global arguments. #. no-wrap #: utils/recfix.c:111 msgid "" " --no-external don't use external descriptors.\n" " --force force the requested operation.\n" msgstr "" " --no-external geen externe descriptors gebruiken\n" " --force de gevraagde bewerking afdwingen\n" #. TRANSLATORS: --help output, recfix operations. #. no-wrap #: utils/recfix.c:121 msgid "" "Operations:\n" " --check check integrity of the specified " "file. Default.\n" " --sort sort the records in the specified " "file.\n" " --auto insert auto-generated fields in " "records missing them.\n" msgstr "" "Bewerkingen:\n" " --check integriteit van gegeven bestand controleren\n" " --sort de records in het gegeven bestand sorteren\n" " --auto automatisch gegenereerde velden invoegen\n" " in records waarin ze ontbreken\n" #. TRANSLATORS: --help output, recfix operations related with encryption. #. no-wrap #: utils/recfix.c:131 msgid "" " --encrypt encrypt confidential fields in the " "specified file.\n" " --decrypt decrypt confidential fields in the " "specified file.\n" msgstr "" " --encrypt vertrouwelijke velden versleutelen\n" " --decrypt vertrouwelijke velden ontsleutelen\n" #. TRANSLATORS: --help output, recfix encryption and decryption #. options. #. no-wrap #: utils/recfix.c:140 msgid "" "De/Encryption options:\n" " -s, --password=PASSWORD encrypt/decrypt with this password.\n" msgstr "" "Versleutelings-/Ontsleutelingsoptie:\n" " -s, --password=WACHTWOORD versleutelen/ontsleutelen met dit wachtwoord\n" #: utils/recfix.c:184 msgid "--password|-s must be used as an operation argument.\n" msgstr "optie '--password' ('-s') moet gebruikt worden als bewerkingsoptie\n" #: utils/recfix.c:188 msgid "the specified operation does not require a password.\n" msgstr "de opgegeven bewerking vraagt geen wachtwoord.\n" #: utils/recfix.c:191 msgid "please specify just one password.\n" msgstr "u kunt slechts één wachtwoord opgeven.\n" #: utils/recfix.c:198 utils/recfix.c:204 utils/recfix.c:210 utils/recfix.c:217 #: utils/recfix.c:223 msgid "please specify just one operation.\n" msgstr "u kunt slechts één bewerking opgeven.\n" #: utils/recfix.c:304 utils/recfix.c:326 utils/recfix.c:365 utils/recfix.c:435 #, fuzzy, c-format msgid "recfix: error: cannot read file %s\n" msgstr "fout: kan bestand %s niet lezen.\n" #: utils/recfix.c:399 msgid "the database contains already encrypted fields\n" msgstr "de databank bevat al versleutelde velden\n" #: utils/recfix.c:400 msgid "please use --force or --decrypt\n" msgstr "gebruik ofwel '--force' ofwel '--decrypt'\n" #: utils/recfix.c:499 msgid "unknown operation in recfix: please report this as a bug.\n" msgstr "" "onbekende bewerking in 'recfix'; rapporteer dit als een programmafout.\n" #. TRANSLATORS: --help output, recfmt synopsis. #. no-wrap #: utils/recfmt.c:64 #, c-format msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" msgstr "Gebruik: recfmt [OPTIE...] [SJABLOON]\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:69 msgid "Apply a template to records read from standard input.\n" msgstr "Past een sjabloon toe op de records gelezen van standaardinvoer.\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:75 msgid "" " -f, --file=FILENAME read the template to apply from a " "file.\n" msgstr "" " -f, --file=BESTANDSNAAM te gebruiken sjabloon uit dit bestand lezen\n" #: utils/recfmt.c:107 #, c-format msgid "can't open file %s for reading.\n" msgstr "kan bestand %s niet openen om te lezen.\n" #: utils/recfmt.c:120 msgid "don't specify a template in the command line and -f at the same time.\n" msgstr "optie '-f' gaat niet samen met een sjabloon op de opdrachtregel.\n" #: utils/recfmt.c:142 msgid "invalid expression in a template slot.\n" msgstr "ongeldige expressie opgegeven voor sjabloon.\n" #: utils/recfmt.c:146 msgid "error evaluating expression in a template slot.\n" msgstr "fout tijdens evalueren van sjabloonexpressie.\n" #: utils/recfmt.c:178 msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" msgstr "" "**interne programmafout**: recfmt_apply_template(): fout bij compileren van " "regexp.\n" #. TRANSLATORS: --help output, recinf synopsis. #. no-wrap #: utils/recinf.c:77 #, c-format msgid "Usage: recinf [OPTION]... [FILE]...\n" msgstr "Gebruik: recinf [OPTIE...] [BESTAND...]\n" #. TRANSLATORS: --help output, recinf short description. #. no-wrap #: utils/recinf.c:82 msgid "Print information about the types of records stored in the input.\n" msgstr "Toont informatie over de soorten records aanwezig in de invoer.\n" #. TRANSLATORS: --help output, recinf arguments. #. no-wrap #: utils/recinf.c:89 msgid "" " -t, --type=RECORD_TYPE print information on the records having " "the\n" " specified type.\n" " -d, --descriptor include the full record descriptors.\n" " -n, --names-only output just the names of the record files\n" " found in the input.\n" msgstr "" " -t, --type=RECORDTYPE alleen informatie tonen over records van dit " "type\n" " -d, --descriptor ook de volledige recorddescriptors tonen\n" " -n, --names-only alleen de namen van de recordbestanden tonen\n" #. TRANSLATORS: --help output, recinf special options. #. no-wrap #: utils/recinf.c:102 msgid "" "Special options:\n" " -S, --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Speciaal:\n" " -S, --print-sexps de gegevens als S-expressies tonen\n" " in plaats van in rec-indeling\n" #: utils/recinf.c:234 #, c-format msgid "error: cannot read file %s\n" msgstr "fout: kan bestand %s niet lezen.\n" #. TRANSLATORS: --help output, recins synopsis. #. no-wrap #: utils/recins.c:100 #, c-format msgid "" "Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" msgstr "" "Gebruik: recins [OPTIE...] [-t TYPE]\n" " [-n NUMMER | -e RECORDEXPRESSIE | -q TEKENREEKS | -m " "GETAL]\n" " [(-f VELDNAAM -v TEKENREEKS) | -r REC-GEGEVENS]... " "[BESTAND]\n" #. TRANSLATORS: --help output, recins short description. #. no-wrap #: utils/recins.c:105 msgid "Insert new records in a rec database.\n" msgstr "Voegt nieuwe records in in rec-databank.\n" #. TRANSLATORS: --help output, recins arguments. #. no-wrap #: utils/recins.c:111 msgid "" " -f, --field=STR field name; should be followed by a -" "v.\n" " -v, --value=STR field value; should be preceded by an -" "f.\n" " -r, --record=STR record that will be inserted in the " "file.\n" " --force insert the record even if it is " "violating\n" " record restrictions.\n" " --no-external don't use external descriptors.\n" " --no-auto don't insert auto generated fields.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -f, --field=NAAM veldnaam (dient gevolgd te worden door '-v')\n" " -v, --value=TEKENREEKS veldwaarde (dient voorafgegaan te worden door '-" "f')\n" " -r, --record=NAAM in het bestand in te voegen record\n" " --force records ook wijzigen als dit beperkingen " "overtreedt\n" " --no-external geen externe descriptors gebruiken\n" " --no-auto geen automatisch gegenereerde velden invoegen\n" " --verbose een gedetailleerd rapport produceren als de\n" " integriteitscontrole faalt\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recins.c:125 msgid "" " -s, --password=STR encrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=WOORD vertrouwelijke velden versleutelen met dit " "wachtwoord\n" #: utils/recins.c:179 msgid "a -f should be followed by a -v\n" msgstr "optie '-f' dient gevolgd te worden door optie '-v'.\n" #: utils/recins.c:198 msgid "a -v should be preceded by a -f\n" msgstr "optie '-v' dient voorafgegaan te worden door optie '-f'.\n" #: utils/recins.c:214 utils/recsel.c:204 msgid "more than one password was specified\n" msgstr "er is meer dan één wachtwoord opgegeven\n" #: utils/recins.c:224 msgid "error while parsing the record provided by -r\n" msgstr "fout tijdens ontleden van record gegeven met optie '-r'.\n" #: utils/recins.c:256 #, c-format msgid "please provide a value for the field %s\n" msgstr "u dient een waarde op te geven voor veld %s.\n" #. TRANSLATORS: --help output, recsel synopsis. #. no-wrap #: utils/recsel.c:107 #, c-format msgid "" "Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " "| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" msgstr "" "Gebruik: recsel [OPTIE...] [-t TYPE] [-j VELDNAAM]\n" " [-n INDEXEN | -e RECORDEXPRESSIE | -q TEKENREEKS | -m " "GETAL]\n" " [-c | (-p|-P) VELDEXPRESSIE] [BESTAND...]\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:112 msgid "Select and print rec data.\n" msgstr "Selecteert en toont rec-gegevens.\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:118 msgid "" " -d, --include-descriptors print record descriptors along with " "the matched\n" " records.\n" " -C, --collapse do not section the result in records " "with newlines.\n" " -S, --sort=FIELD,... sort the output by the specified " "fields.\n" " -G, --group-by=FIELD,... group records by the specified " "fields.\n" " -U, --uniq remove duplicated fields in the output " "records.\n" msgstr "" " -d, --include-descriptors bij de overeenkomende records ook\n" " de recorddescriptors tonen\n" " -C, --collapse de records niet scheiden met nieuwe regels\n" " -G, --group-by=VELD,... de records groeperen op deze velden\n" " -S, --sort=VELD,... de uitvoer sorteren op deze velden\n" " -U, --uniq duplicaatvelden in uitvoerrecords weglaten\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recsel.c:130 msgid "" " -s, --password=STR decrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=WOORD vertrouwelijke velden ontsleutelen met dit " "wachtwoord\n" #: utils/recsel.c:139 msgid "" " -j, --join=FIELD perform an inner join using the " "specified field.\n" msgstr "" " -j, --join=VELD een interne samenvoeging uitvoeren via dit veld\n" #. TRANSLATORS: --help output, recsel output options. #. no-wrap #: utils/recsel.c:146 msgid "" "Output options:\n" " -p, --print=FIELDS comma-separated list of fields to " "print for each\n" " matching record.\n" " -P, --print-values=FIELDS as -p, but print only the values of " "the selected\n" " fields.\n" " -R, --print-row=FIELDS as -P, but separate the values with " "spaces instead\n" " of newlines.\n" " -c, --count print a count of the matching records " "instead of\n" " the records themselves.\n" msgstr "" "Uitvoeropties:\n" " -p, --print=VELDEN kommagescheiden lijst van te tonen velden voor\n" " elk overeenkomend record\n" " -P, --print-values=VELDEN als -p, maar alleen de veldwaarden tonen\n" " -R, --print-row=FIELDS als -P, maar de waarden scheiden met spaties\n" " in plaats van nieuwe regels\n" " -c, --count alleen het aantal overeenkomende records tonen\n" #. TRANSLATORS: --help output, recsel special options. #. no-wrap #: utils/recsel.c:160 msgid "" "Special options:\n" " --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Speciaal:\n" " --print-sexps de gegevens als S-expressies tonen\n" " in plaats van in rec-indeling\n" #: utils/recsel.c:212 msgid "only one field list can be specified as a sorting criteria.\n" msgstr "" "er kan slechts één veldnamenlijst gegeven worden als sorteercriterium.\n" #: utils/recsel.c:217 msgid "invalid field names in -S.\n" msgstr "ongeldige veldnamen bij optie '-S'.\n" #: utils/recsel.c:226 msgid "only one field can be specified as join criteria.\n" msgstr "er kan slechts één veld gegeven worden als samenvoegingscriterium.\n" #: utils/recsel.c:229 msgid "please specify a correct field name to -j|--join.\n" msgstr "u dient bij optie '-j|--join' een geldige veldnaam op te geven.\n" #: utils/recsel.c:236 msgid "only one field list can be specified as a grouping criteria.\n" msgstr "" "er kan slechts één veldnamenlijst gegeven worden als groeperingscriterium.\n" #: utils/recsel.c:241 msgid "invalid field names in -G.\n" msgstr "ongeldige veldnamen bij optie '-G'.\n" #: utils/recsel.c:255 msgid "cannot specify -[pPR] and also -c.\n" msgstr "opties '-c' en '-[pPR][' gaan niet samen.\n" #: utils/recsel.c:266 #, c-format msgid "invalid list of fields in -%c\n" msgstr "ongeldige veldnamenlijst bij '-%c'.\n" #: utils/recsel.c:272 msgid "internal error creating the field expression.\n" msgstr "**interne programmafout** tijdens aanmaken van de veldexpressie.\n" #: utils/recsel.c:284 #, c-format msgid "invalid aggregate function '%s'\n" msgstr "ongeldige verzamelfunctie '%s'\n" #: utils/recsel.c:296 msgid "cannot specify -c and also -p.\n" msgstr "opties '-c' en '-p' gaan niet samen.\n" #: utils/recsel.c:309 msgid "joins can only be used when a named record set is selected.\n" msgstr "" "samenvoegingen kunnen alleen gebruikt worden wanneer een benoemde recordset " "geselecteerd is.\n" #: utils/recsel.c:363 msgid "several record types found. Please use -t to specify one.\n" msgstr "" "meerdere recordtypes gevonden. Gebruik optie '-t' om er één op te geven.\n" #. TRANSLATORS: --help output, recset synopsis. #. no-wrap #: utils/recset.c:99 #, c-format msgid "Usage: recset [OPTION]... [FILE]...\n" msgstr "Gebruik: recset [OPTIE...] [BESTAND...]\n" #. TRANSLATORS: --help output, recset short description. #. no-wrap #: utils/recset.c:104 msgid "Alter or delete fields in records.\n" msgstr "Wijzigt of verwijdert velden in records.\n" #. TRANSLATORS: --help output, recset options. #. no-wrap #: utils/recset.c:110 msgid "" " --no-external don't use external descriptors.\n" " --force alter the records even if violating " "record\n" " restrictions.\n" msgstr "" " --no-external geen externe descriptors gebruiken\n" " --force records ook wijzigen als dit beperkingen " "overtreedt\n" #. TRANSLATORS: --help output, recset field selection options. #. no-wrap #: utils/recset.c:123 msgid "" "Field selection options:\n" " -f, --fields=FIELDS comma-separated list of field names " "with optional\n" " subscripts.\n" msgstr "" "Veldselectie:\n" " -f, --fields=VELDEN kommagescheiden lijst van veldnamen\n" " met optionele indexwaarden\n" #. TRANSLATORS: --help output, recset actions. #. no-wrap #: utils/recset.c:131 msgid "" "Actions:\n" " -s, --set=VALUE change the value of the selected " "fields.\n" " -a, --add=VALUE add the selected fields with the given " "value.\n" " -S, --set-add=VALUE change the value of the selected " "fields. If they don't\n" " exist then add a new field with that " "value.\n" " -r, --rename=NAME rename the selected fields to a given " "name. If an entire\n" " record set is selected then the " "field is renamed in the\n" " record descriptor as well.\n" " -d, --delete delete the selected fields.\n" " -c, --comment comment out the selected fields.\n" msgstr "" "Acties:\n" " -s, --set=WAARDE deze waarde aan de geselecteerde velden " "toekennen\n" " -a, --add=WAARDE de geselecteerde velden met deze waarde " "toevoegen\n" " -S, --set-add=WAARDE deze waarde aan de geselecteerde velden " "toekennen;\n" " als die velden niet bestaan, dan een nieuw " "veld\n" " met deze waarde aanmaken\n" " -r, --rename=NAAM de geselecteerde velden naar deze naam " "hernoemen;\n" " als een gehele recordset geselecteerd is, " "dan\n" " het veld ook hernoemen in de " "recorddescriptor\n" " -d, --delete de geselecteerde velden verwijderen\n" " -c, --comment de geselecteerde velden omzetten in commentaar\n" #: utils/recset.c:154 msgid "please specify some field with -f.\n" msgstr "u dient bij optie '-f' een veld op te geven.\n" #: utils/recset.c:159 msgid "please specify just one action.\n" msgstr "u kunt slechts één actie opgeven.\n" #: utils/recset.c:193 msgid "invalid field expression in -f.\n" msgstr "ongeldige veldexpressie bij optie '-f'.\n" #: utils/recset.c:199 msgid "creating the field expression.\n" msgstr "aanmaken van de veldexpressie.\n" #: utils/recset.c:214 msgid "" "the rename operation requires just one field with an optional subscript.\n" msgstr "hernoemen vereist slechts één veld met een optionele index.\n" #: utils/recutl.c:123 #, c-format msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" msgstr "Webpagina van %s: <http://www.gnu.org/software/recutils/>\n" #: utils/recutl.c:126 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" "Algemene hulp bij gebruik van GNU-software: <http://www.gnu.org/gethelp/>\n" #. TRANSLATORS: --help output, common arguments. #. no-wrap #: utils/recutl.c:135 msgid "" " --help print a help message and exit.\n" " --version show version and exit.\n" msgstr "" " --help deze hulptekst tonen en stoppen\n" " --version programmaversie tonen en stoppen\n" #. TRANSLATORS: --help output, record selection arguments #. no-wrap #: utils/recutl.c:146 msgid "" "Record selection options:\n" " -i, --case-insensitive make strings case-insensitive in " "selection\n" " expressions.\n" " -t, --type=TYPE operate on records of the specified " "type only.\n" " -e, --expression=RECORD_EXPR selection expression.\n" " -q, --quick=STR select records with fields containing " "a string.\n" " -n, --number=NUM,... select specific records by position, " "with ranges.\n" " -m, --random=NUM select a given number of random " "records.\n" msgstr "" "Recordselectie:\n" " -i, --case-insensitive geen onderscheid maken tussen hoofd- en kleine\n" " letters in selectie-expressies\n" " -t, --type=TYPE alleen dit type records bewerken\n" " -e, --expression=EXPR te gebruiken selectie-expressie\n" " -q, --quick=TEKENREEKS records selecteren met velden met deze " "tekenreeks\n" " -n, --number=NUMMER,... specifieke records selecteren (bereiken kunnen " "ook)\n" " -m, --random=AANTAL dit aantal willekeurig gekozen records " "selecteren\n" #: utils/recutl.c:171 #, c-format msgid "" "Copyright (C) %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright (C) %s Jose E. Marchesi.\n" "Dit is vrije software: u mag het vrijelijk wijzigen en verder verspreiden.\n" "De precieze licentie is GPL-3+: GNU General Public License versie 3 of " "later.\n" "Zie http://gnu.org/licenses/gpl.html voor de volledige (Engelse) tekst.\n" "Deze software kent GEEN GARANTIE, voor zover de wet dit toestaat.\n" "\n" #: utils/recutl.c:177 msgid "" "\n" "Written by Jose E. Marchesi." msgstr "" "\n" "Geschreven door Jose E. Marchesi." #: utils/recutl.c:189 utils/recutl.c:209 msgid ": error: " msgstr ": fout: " #: utils/recutl.c:221 msgid ": warning: " msgstr ": waarschuwing: " #: utils/recutl.c:246 #, c-format msgid "duplicated record set '%s' from %s.\n" msgstr "duplicaat recordset '%s' uit %s.\n" #: utils/recutl.c:401 msgid "cannot create a unique name.\n" msgstr "kan geen unieke naam aanmaken.\n" #: utils/recutl.c:421 #, c-format msgid "renaming file %s to %s\n" msgstr "hernoemen van bestand %s naar %s\n" #: utils/recutl.c:463 msgid "operation aborted due to integrity failures.\n" msgstr "bewerking is afgebroken wegens integriteitsproblemen.\n" #: utils/recutl.c:464 msgid "use --verbose to get a detailed report.\n" msgstr "gebruik optie '--verbose' voor een gedetailleerd rapport.\n" #: utils/recutl.c:471 msgid "use --force to skip the integrity check.\n" msgstr "gebruik optie '--force' op de integriteitscontrole over te slaan.\n" #: utils/recutl.c:529 msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" msgstr "" "**interne programmafout**: recutl_index_list_parse(): fout bij compileren " "van regexp.\n" #: utils/recutl.c:596 msgid "Password: " msgstr "Wachtwoord: " #: utils/recutl.c:602 msgid "Password again: " msgstr "Wachtwoord opnieuw: " #: utils/recutl.c:607 msgid "the provided passwords don't match.\n" msgstr "de gegeven wachtwoorden komen niet overeen.\n" #: utils/recutl.h:84 utils/recutl.h:131 utils/recutl.h:133 #, fuzzy msgid "cannot specify -e and also -n\n" msgstr "opties '-c' en '-p' gaan niet samen.\n" #: utils/recutl.h:86 #, fuzzy msgid "cannot specify -e and also -q\n" msgstr "opties '-c' en '-p' gaan niet samen.\n" #: utils/recutl.h:94 #, fuzzy msgid "invalid selection expression\n" msgstr "ongeldige selectie-expressie.\n" #: utils/recutl.h:100 #, fuzzy msgid "cannot specify -n and also -e\n" msgstr "opties '-c' en '-p' gaan niet samen.\n" #: utils/recutl.h:102 #, fuzzy msgid "cannot specify -n and also -q\n" msgstr "opties '-c' en '-p' gaan niet samen.\n" #: utils/recutl.h:106 #, fuzzy msgid "invalid list of indexes in -n\n" msgstr "ongeldige veldnamenlijst bij '-%c'.\n" #: utils/recutl.h:111 #, fuzzy msgid "cannot specify -m and also -e\n" msgstr "opties '-c' en '-p' gaan niet samen.\n" #: utils/recutl.h:113 #, fuzzy msgid "cannot specify -m and also -q\n" msgstr "opties '-c' en '-p' gaan niet samen.\n" #: utils/recutl.h:115 #, fuzzy msgid "cannot specify -m and also -n\n" msgstr "opties '-c' en '-p' gaan niet samen.\n" #~ msgid "_open_osfhandle failed" #~ msgstr "_open_osfhandle() is mislukt" #~ msgid "cannot restore fd %d: dup2 failed" #~ msgstr "kan bestandsdescriptor %d niet herstellen: dup2() is mislukt" #, fuzzy #~ msgid "" #~ "\n" #~ "Report bugs to: %s\n" #~ msgstr "" #~ "Rapporteer gebreken in het programma aan <%s>;\n" #~ "meld fouten in de vertaling aan <vertaling@vrijschrift.org>.\n" #, fuzzy #~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n" #~ msgstr "Webpagina van %s: <http://www.gnu.org/software/recutils/>\n" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: optie '--%s' staat geen argument toe\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: onbekende optie '--%s'\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: optie '-W %s' staat geen argument toe\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: optie '-W %s' vereist een argument\n" #~ msgid "" #~ "%s:%s: warning: type %s collides with referred type %s in the rset %s.\n" #~ msgstr "" #~ "%s:%s: waarschuwing: type %s botst met gerefereerd type %s in rset %s.\n" #~ msgid "%s:%s: error: value for %s shall be a field name.\n" #~ msgstr "%s:%s: fout: de waarde van %s moet een veldnaam zijn\n" #~ msgid "reached maximum number of fields: %d\n" #~ msgstr "maximum aantal velden (%d) is bereikt\n" #~ msgid "not enough headers" #~ msgstr "niet genoeg koppen" #~ msgid "out of memory" #~ msgstr "onvoldoende geheugen beschikbaar" #~ msgid "evaluating the selection expression.\n" #~ msgstr "evalueren van selectie-expressie\n" #~ msgid "reading file %s" #~ msgstr "lezen van bestand %s" #~ msgid "internal error: rec_resolver_check: error compiling regexp.\n" #~ msgstr "" #~ "**interne programmafout**: rec_resolver_check(): fout bij compileren van " #~ "regexp.\n" #~ msgid "internal error: rec_field_name_part_str_p: error compiling regexp.\n" #~ msgstr "" #~ "**interne programmafout**: rec_field_name_part_str_p(): fout bij " #~ "compileren van regexp.\n" #~ msgid "internal error: rec_int_rec_type_p: error compiling regexp.\n" #~ msgstr "" #~ "**interne programmafout**: rec_int_rec_type_p(): fout bij compileren van " #~ "regexp.\n" #~ msgid "internal error: rec-types: error compiling regexp.\n" #~ msgstr "" #~ "**interne programmafout**: rec_types: fout bij compileren van regexp.\n" #~ msgid "" #~ "the record set contains confidential fields but no password was provided\n" #~ msgstr "" #~ "de recordset bevat vertrouwelijke velden maar er is geen wachtwoord " #~ "opgegeven\n" #~ msgid "the resulting record will have those fields unencrypted!\n" #~ msgstr "in het resulterende record zullen die velden onversleuteld zijn!\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " csv2rec contacts.csv > contacts.rec\n" #~ " cat contacts.csv | csv2rec > contacts.rec\n" #~ msgstr "" #~ "Voorbeelden:\n" #~ "\n" #~ " csv2rec contacten.csv > contacten.rec\n" #~ " cat contacten.csv | csv2rec > contacten.rec\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " mdb2rec database.mdb > database.rec\n" #~ " mdb2rec database.mdb Customers > customers.rec\n" #~ msgstr "" #~ "Voorbeelden:\n" #~ "\n" #~ " mdb2rec databank.mdb > databank.rec\n" #~ " mdb2rec databank.mdb Klanten > klanten.rec\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " rec2csv contacts.rec > contacts.csv\n" #~ " cat contacts.rec | rec2csv -t Contact > contacts.csv\n" #~ msgstr "" #~ "Voorbeelden:\n" #~ "\n" #~ " rec2csv contacten.rec > contacten.csv\n" #~ " cat contacten.rec | rec2csv -t Contact > contacten.csv\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " recdel -n 10 contacts.rec\n" #~ " cat hackers.rec | recdel -e \"Email[0] = 'foo@bar.com'\" > other." #~ "rec\n" #~ msgstr "" #~ "Voorbeelden:\n" #~ "\n" #~ " recdel -n 10 contacten.rec\n" #~ " cat hackers.rec | recdel -e \"Email[0] = 'foo@bar.com'\" > ander." #~ "rec\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " cat employees.rec | recfmt 'Dear {{Name}}, you are fired.'\n" #~ " cat employees.rec | recfmt -f fire-letter.tmpl\n" #~ msgstr "" #~ "Voorbeelden:\n" #~ "\n" #~ " cat werknemers.rec | recfmt 'Beste {{Naam}}, u bent ontslagen.'\n" #~ " cat werknemers.rec | recfmt -f ontslagbrief.tmpl\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " recinf mydata.rec\n" #~ " recinf -d mydata.rec moredata.rec\n" #~ " recinf -t Task TODO\n" #~ msgstr "" #~ "Voorbeelden:\n" #~ "\n" #~ " recinf mijngegevens.rec\n" #~ " recinf -d mijngegevens.rec meergegevens.rec\n" #~ " recinf -t Task TODO\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " recins -f Name -v \"Mr Foo\" -f Email -v foo@foo.org contacts." #~ "rec\n" #~ " cat hackers.rec | recins -t Hacker -f Email -v foo@foo.org > " #~ "other.rec\n" #~ msgstr "" #~ "Voorbeelden:\n" #~ "\n" #~ " recins -f Naam -v \"Hr Foo\" -f Email -v foo@foo.org contacten." #~ "rec\n" #~ " cat hackers.rec | recins -t Hacker -f Email -v foo@foo.org > " #~ "ander.rec\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " recsel -t Friend -e \"Name ~ 'Smith'\" friends.rec\n" #~ " recsel -C -e \"#Email && Wiki = 'no'\" -P Email[0] gnupdf-hackers." #~ "rec\n" #~ msgstr "" #~ "Voorbeelden:\n" #~ "\n" #~ " recsel -t Vriend -e \"Naam ~ 'Jansen'\" vrienden.rec\n" #~ " recsel -C -e \"#Email && Wiki = 'no'\" -P Email[0] gnupdf-hackers." #~ "rec\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " recset -f TmpName -d data.rec\n" #~ " recset -f Email[1] -s invalid@email.com friends.rec\n" #~ " recset -e \"Name ~ 'Smith'\" -f Email -a new@email.com friends." #~ "rec\n" #~ " recset -f Email[1] -r AltEmail friends.rec\n" #~ msgstr "" #~ "Voorbeelden:\n" #~ "\n" #~ " recset -f TmpName -d data.rec\n" #~ " recset -f Email[1] -s ongeldig@email.com vrienden.rec\n" #~ " recset -e \"Naam ~ 'Jansen'\" -f Email -a new@email.com vrienden." #~ "rec\n" #~ " recset -f Email[1] -r AltEmail vrienden.rec\n" #~ msgid " --no-external don't use external descriptors.\n" #~ msgstr " --no-external geen externe descriptors gebruiken\n" #~ msgid "" #~ "Examples:\n" #~ "\n" #~ " recfix data.rec\n" #~ " recfix data1.rec data2.rec\n" #~ " cat data1.rec data2.rec | recfix\n" #~ msgstr "" #~ "Voorbeelden:\n" #~ "\n" #~ " recfix gegevens.rec\n" #~ " recfix gegevens1.rec gegevens2.rec\n" #~ " cat gegevens1.rec gegevens2.rec | recfix\n" #~ msgid "evaluating selection expression.\n" #~ msgstr "evalueren van selectie-expressie\n" #~ msgid "operation aborted due to integrity failures\n" #~ msgstr "bewerking is afgebroken wegens integriteitsproblemen.\n" #~ msgid "use --verbose to get a detailed report\n" #~ msgstr "gebruik optie '--verbose' voor een gedetailleerd rapport.\n" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/pt_BR.gmo���������������������������������������������������������������������������0000644�0000000�0000000�00000127550�14226577416�012264� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•�����0��� ��‘��������D�����L��„������L�����M��&���k��1���’�����Ä�� ���â��²�����‚���¶��Í���9��‹�����"���“�����¶�����Î�����è��"�������)��E��1!��Ó��w"��Ž��K$��N���Ú&��W���)'��[���'��[���Ý'��?��9(��M��y)�����Ç*��6���Û*�� ���+����� +��!���5+��H���W+��;��� +��@���Ü+��A���,�����_,��,���{,�����¨,��.���È,��'���÷,��(���-�����H-��2���h-��;���›-��2���×-��M��� .��S���X.��2���¬.��=���ß.��?���/��;���]/��V���™/��A���ð/��8���20��9���k0��%���¥0��)���Ë0��,���õ0��1���"1��7���T1��7���Œ1��1���Ä1��E���ö1��F���<2��F���ƒ2��4���Ê2��2���ÿ2��9���23��<���l3��U���©3��=���ÿ3��D���=4�����‚4�����„4�����4��5���¡4�� ���×4�� ���á4��ê��í4��#���Ø7��6���ü7�����38��%���M8�� ���s8�� ���”8��ë���µ8��a���¡9��¥���:��?���©:�����é:��&���w;�����ž;�����µ;�����Ò;�����î;��$���<�����+<�����=<�����X<�����i<�����r<�� ��‘<��L��Ÿ=�����ì?�����ü?�����@�� ���"@��#���-@��B���Q@��.��”@�����ÃB��1���ÞB�����C�����'C�����;C��f���WC��f���¾C�����%D�����-D�����GD��!���^D�����€D�����“D�����¨D�����ºD�����ÌD�� ���ëD��'���øD��-��� E��'���NE��X���vE��<���ÏE��%��� F��$���2F��z���WF��ƒ���ÒF��$���VG�����{G��;���’G��3���ÎG��/���H��+���2H��'���^H��#���†H�����ªH�����ÊH�����æH�����öH�� ���øH�� ���I�� ���:I�����[I�����yI��#���ŽI�����²I�����ÒI�����ñI�����J�����/J�����NJ�����mJ�����ŒJ�����«J�����ÃJ�����ãJ�����èJ�����ñJ��F���õJ��$���<K��0���aK��!���’K��.���´K�� ���ãK��>���ñK��/���0L�����`L��!���|L�� ���žL�����¿L��'���ÖL��*���þL�����)M�����GM��$���aM��&���†M�� ���­M��"���ÎM��(���ñM��&���N�����AN��.���[N�����ŠN�����N��%���®N�����ÔN��5���ÛN�����O�����$O�����5O��.���SO��A���‚O��`���ÄO��B���%P��A���hP��3���ªP��A���ÞP����� Q�����6Q�����MQ�����cQ�����zQ�����Q�� ���¦Q�� ���ÇQ�����ÕQ�����äQ��'���øQ�� ��� R�����AR��"���YR�����|R�����œR�����¸R�����ÔR�����åR�����S�����#S�����AS��<���`S�� ���S�����¨S�����¹S��%���ÊS�����ðS�����T�����,T�����3T��2���ET��=���xT��<���¶T��@���óT��-���4U�����bU�����qU�����‚U��(���šU��2���ÃU�� ���öU��#���V��"���;V��#���^V�� ���‚V�����£V��C���ÁV�����W�����W�����&W��;���AW�����}W�����—W��/���¦W��$���ÖW��I���ûW��5���EX�����{X��$���€X�����¥X�����¿X�����ÙX��:���éX��C���$Y��)���hY��(���’Y��+���»Y��+���çY��-���Z�� ���AZ��)���bZ��8���ŒZ��<���ÅZ��<���[��:���?[��F���z[��`���Á[�� ���"\�����.\����3\�����M^��+���l^��7���˜^��(���Ð^��&���ù^���� _��ˆ���4`��×���½`��Œ���•a��$���"b��#���Gb�����kb��)���‰b��$���³b��R��Øb����+e��\��¹f��¶��i��O���Ík��–���l�����´l��|���4m��P��±m��g��o�����jp��7���p�����·p�����Æp��'���Üp��Q���q��=���Vq��Q���”q��N���æq�����5r��/���Tr��!���„r��1���¦r��(���Ør��)���s�� ���+s��2���Ls��8���s��1���¸s��N���ês��T���9t��9���Žt��D���Èt��G��� u��@���Uu��]���–u��?���ôu��B���4v��<���wv��+���´v��1���àv��4���w��C���Gw��E���‹w��=���Ñw��9���x��L���Ix��M���–x��M���äx��8���2y��,���ky��H���˜y��E���áy��^���'z��E���†z��L���Ìz�����{�����{�����6{��>���:{�����y{�� ���‚{����Œ{��&��� ��9���3��!���m��+�����!���»��!���Ý����ÿ��p�����µ���w��B���-‚��•���p‚��1���ƒ�����8ƒ��)���Tƒ��#���~ƒ�����¢ƒ��,���¾ƒ�����ëƒ�����„�����#„�����5„��#���T„��—��x„��ß��†�����ðˆ�����‰�����‰�����-‰��#���5‰��I���Y‰����£‰�� ���¦Œ��1���ÇŒ�����ùŒ��f��������€��—��� ��e���8Ž�����žŽ�����¦Ž�����ÀŽ��!���ÚŽ�����üŽ����������2�����M��'���h�������)���¦��0���Ð��)�����`���+��H���Œ��#���Õ��&���ù��†��� ‘��‹���§‘��&���3’�����Z’��9���p’��1���ª’��-���Ü’��)��� “��%���4“��!���Z“�����|“�����™“�����³“�����Ó��!���Ç“�����é“��*���”��)���0”��$���Z”��3���”��/���³”��.���ã”��.���•��.���A•��.���p•��.���Ÿ•��.���Ε��.���ý•��&���,–�����S–�����s–�� ���x–�����…–��D���‰–��/���Ζ��5���þ–��*���4—��-���_—�� ���—��G���š—��8���â—��*���˜��$���F˜��(���k˜�����”˜��%���«˜��0���ј�����™�� ���™��"���@™��"���c™��)���†™��'���°™��2���Ø™��'��� š��"���3š��3���Vš�����Šš�����š��4���®š�����ãš��D���ìš�����1›�����I›�����d›��-���€›��B���®›��_���ñ›��O���Qœ��N���¡œ��@���ðœ��N���1�����€�� ��� �����Á�� ���á�����ž�����"ž��'���Bž�����jž�����zž�����Œž��+���¬ž��%���Øž�����þž��+���Ÿ��*���GŸ��"���rŸ��"���•Ÿ�����¸Ÿ��!���ËŸ��"���íŸ��"��� ��#���3 ��c���W �� ���» �����Æ �����Ø ��'���ï �� ���¡��'���8¡�����`¡�����h¡��Q���|¡��S���Ρ��S���"¢��S���v¢��>���Ê¢����� £����� £��!���8£��-���Z£��@���ˆ£��*���É£��.���ô£��)���#¤��-���M¤��$���{¤����� ¤��T���À¤�����¥�� ���¥�����?¥��O���]¥�����­¥�����Ê¥��3���Ý¥��(���¦��O���:¦��1���Ц�����¼¦��&���Ŧ�����ì¦��"��� §�����/§��H���@§��B���‰§��9���̧��2���¨��+���9¨��/���e¨��6���•¨��/���̨��0���ü¨��=���-©��:���k©��>���¦©��:���å©��H��� ª��V���iª�����Àª�����Ъ�����Ú���Œ���ý���n���W��������� ���y���œ���•���g���ë�����������€�����½�������ú�����������������F�������(���D��� ���ƒ�����������������/���ä�����������H������a���æ�����������Í���¶�������>������1�����w����������T���Q���ˆ���������������-���ã���†���`���M������������������� ��’�������ù�������Ó���j���þ���Ö���h���<���×����������i��� ����������·�����A���v���ž���Ä��� ��!���“���Ý���Y���å���È���¤���ß���O��������������������ò���G�������e���U����������������������¸���o���»�����������%���J���������Â�����������#���±���,�������������������Ü�������ö������&�������ç���¦���}���è���º������ ��� ��ð���é���������V��� �����������R���K���µ���°�������Ù�������[���Ÿ���|�������î����������Þ�����������É���u�������¿���:�������$�������û������Û������Ï�������\�������Ì���¥���������à���–����������¯����������³�������B���������������”���ü���3��������������x���7���L���*���������Š���Ñ�����~�������+�������‚������ô���_���Å�������k���Ã���´����������m�������â���P���À���¹���C���ó����������������������í���„���^�������ì���f�������l���¢�����������N���8�������¨���'�����¼�������š���]���¾���Ç���ñ���;���Õ���9���=���)���p��������������������� ��‰���©�������Æ������������� �����ª���õ���4���Î����������d���ø�������0���I�������t���Ô�������.���r�������—���?�����������"���§���‡���5���S����������›�������˜����������™���������Ø���Z���c���Ž���á������¡�����‘���¬�������«�����������÷�������‹�������²�����������Á������� ���®���6������ï������������������������2���ÿ����� �������X���Ë���Ð�����������������������Ê���­���b������z���£���ê���{���Ò���@���q�������s���…���E������Õª��¼��Ð��ä��ø����(��D��X��l��€��¤��¸��Ü��ð������,��@��\��p��Œ�� ��´��È��ì�����$��8��ݪ�� ����������ÿÿÿÿçª��������� ���ÿÿÿÿ«������������ÿÿÿÿ«�������������������ÿÿÿÿM«���������0���ÿÿÿÿ«�������������������ÿÿÿÿ³«������������ÿÿÿÿÏ«������������ÿÿÿÿè«���������/���ÿÿÿÿ5¬��������� ������� ������� ���ÿÿÿÿl¬������������ÿÿÿÿ„¬��������� ������� ����������ÿÿÿÿǬ������������ÿÿÿÿç¬������������ÿÿÿÿ­������������ÿÿÿÿ­��������� ���ÿÿÿÿ-­������������ÿÿÿÿD­����������������"���ÿÿÿÿ|­���������3���ÿÿÿÿ¿­��!�����������������ÿÿÿÿé­�� ����������ÿÿÿÿ®�� ����������ÿÿÿÿ"®���������3���ÿÿÿÿt®��������� ������� ������� ���ÿÿÿÿª®������������ÿÿÿÿË®��������� ������� ����������ÿÿÿÿ¯������������ÿÿÿÿB¯������������ÿÿÿÿ� Written by Jose E. Marchesi.� invalid day/month combination; � non-existing due to daylight-saving time; � normalized time: '%s' � numeric values overflow; � --encrypt encrypt confidential fields in the specified file. --decrypt decrypt confidential fields in the specified file. � --help print a help message and exit. --version show version and exit. � --no-external don't use external descriptors. --force alter the records even if violating record restrictions. � --no-external don't use external descriptors. --force force the requested operation. � adjusted Y M D: %s %02d %02d � possible reasons: � new date/time = '%s' � user provided time: '%s' � normalized Y M D: %s %02d %02d � -c, --comment comment out the matching records instead of deleting them. --force delete even in potentially dangerous situations, and if the deletion is violating record restrictions. --no-external don't use external descriptors. --verbose give a detailed report if the integrity check fails. � -d, --delim=char sets the deliminator (default ',') -t, --type=TYPE record set to convert to csv; if this parameter is omitted then the default record set is used -S, --sort=FIELDS sort the output by the specified fields. � -d, --include-descriptors print record descriptors along with the matched records. -C, --collapse do not section the result in records with newlines. -S, --sort=FIELD,... sort the output by the specified fields. -G, --group-by=FIELD,... group records by the specified fields. -U, --uniq remove duplicated fields in the output records. � -f, --field=STR field name; should be followed by a -v. -v, --value=STR field value; should be preceded by an -f. -r, --record=STR record that will be inserted in the file. --force insert the record even if it is violating record restrictions. --no-external don't use external descriptors. --no-auto don't insert auto generated fields. --verbose give a detailed report if the integrity check fails. � -f, --file=FILENAME read the template to apply from a file. � -j, --join=FIELD perform an inner join using the specified field. � -s, --password=STR decrypt confidential fields with the given password. � -s, --password=STR encrypt confidential fields with the given password. � -s, --system-tables include system tables. -e, --keep-empty-fields don't prune empty fields in the rec output. -l, --list-tables dump a list of the table names contained in the mdb file. � -t, --type=RECORD_TYPE print information on the records having the specified type. -d, --descriptor include the full record descriptors. -n, --names-only output just the names of the record files found in the input. �%s home page: <%s> �%s home page: <http://www.gnu.org/software/recutils/> �%s subprocess�%s subprocess failed�%s subprocess got fatal signal %d�%s: %lu: this line contains %lu fields, but %lu header fields were read �%s: error: the number of records of type %s should be %zd. �%s: error: too few records of type %s. Minimum allowed are %zd. �%s: error: too many records of type %s. Maximum allowed are %zd. �%s: invalid option -- '%c' �%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: unrecognized option '%s%s' �%s:%s: error: %%constraint[%d] violated in record �%s:%s: error: %s does not contain information for type %s. �%s:%s: error: %s does not contain valid rec data. �%s:%s: error: auto-incremented field %s should be of type int, range or date �%s:%s: error: auto-incremented field %s should be of type int, range, uuid or date �%s:%s: error: confidential field is not encrypted �%s:%s: error: could not fetch remote descriptor from url %s. �%s:%s: error: could not read external descriptor from file %s. �%s:%s: error: duplicated key value in field '%s' in record �%s:%s: error: expected a comma-separated list of fields before the type specification �%s:%s: error: expected a type name before the type specification �%s:%s: error: field '%s' not allowed in this record set �%s:%s: error: field '%s' should be unique in this record �%s:%s: error: invalid record type %s �%s:%s: error: invalid type specification �%s:%s: error: invalid typedef specification �%s:%s: error: key field '%s' not found in record �%s:%s: error: mandatory field '%s' not found in record �%s:%s: error: missing %%rec field in record descriptor �%s:%s: error: multiple key fields '%s' in record �%s:%s: error: only one %%key field is allowed in a record descriptor �%s:%s: error: only one %%size field is allowed in a record descriptor �%s:%s: error: only one %%sort field is allowed in a record descriptor �%s:%s: error: prohibited field '%s' found in record �%s:%s: error: the referred type %s does not exist �%s:%s: error: too many %%rec fields in record descriptor �%s:%s: error: value for %s should be a list of field names. �%s:%s: error: value for %s should be a number optionally preceded by >, <, >= or <=. �%s:%s: error: value for %s[%zd] is not a list of field names �%s:%s: error: value for %s[%zd] is not a valid selection expression �'�'@timespec' - always UTC�(C)�--password|-s must be used as an operation argument. �: error: �: warning: �Actions: -s, --set=VALUE change the value of the selected fields. -a, --add=VALUE add the selected fields with the given value. -S, --set-add=VALUE change the value of the selected fields. If they don't exist then add a new field with that value. -r, --rename=NAME rename the selected fields to a given name. If an entire record set is selected then the field is renamed in the record descriptor as well. -d, --delete delete the selected fields. -c, --comment comment out the selected fields. �Alter or delete fields in records. �Apply a template to records read from standard input. �Check and fix rec files. �Convert an mdb file into a rec file. �Convert csv data into rec data. �Convert rec data into csv data. �Copyright (C) %s Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �De/Encryption options: -s, --password=PASSWORD encrypt/decrypt with this password. �Field selection options: -f, --fields=FIELDS comma-separated list of field names with optional subscripts. �General help using GNU software: <http://www.gnu.org/gethelp/> �If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. �Insert new records in a rec database. �Invalid back reference�Invalid character class name�Invalid collation character�Invalid content of \{\}�Invalid preceding regular expression�Invalid range end�Invalid regular expression�Memory exhausted�No match�No previous regular expression�Operations: --check check integrity of the specified file. Default. --sort sort the records in the specified file. --auto insert auto-generated fields in records missing them. �Output options: -p, --print=FIELDS comma-separated list of fields to print for each matching record. -P, --print-values=FIELDS as -p, but print only the values of the selected fields. -R, --print-row=FIELDS as -P, but separate the values with spaces instead of newlines. -c, --count print a count of the matching records instead of the records themselves. �Packaged by %s �Packaged by %s (%s) �Password again: �Password: �Premature end of regular expression�Print information about the types of records stored in the input. �Record selection options: -i, --case-insensitive make strings case-insensitive in selection expressions. -t, --type=TYPE operate on records of the specified type only. -e, --expression=RECORD_EXPR selection expression. -q, --quick=STR select records with fields containing a string. -n, --number=NUM,... select specific records by position, with ranges. -m, --random=NUM select a given number of random records. �Regular expression too big�Remove (or comment out) records from a rec file. �Report %s bugs to: %s �Report bugs to: %s �Select and print rec data. �Special options: --print-sexps print the data in sexps instead of rec format. �Special options: -S, --print-sexps print the data in sexps instead of rec format. �Success�TZ="%s" environment value�TZ="%s" in date string�TZ="UTC0" environment value or -u�Trailing backslash�Unknown system error�Unmatched ( or \(�Unmatched ) or \)�Unmatched [, [^, [:, [., or [=�Unmatched \{�Usage: csv2rec [OPTIONS]... [CSV_FILE] �Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE] �Usage: rec2csv [OPTIONS]... [REC_FILE] �Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [FILE] �Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE] �Usage: recfmt [OPTION]... [TEMPLATE] �Usage: recinf [OPTION]... [FILE]... �Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE] �Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]... �Usage: recset [OPTION]... [FILE]... �Written by %s and %s. �Written by %s, %s, %s, %s, %s, %s, %s, %s, %s, and others. �Written by %s, %s, %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, and %s. �Written by %s, %s, %s, and %s. �Written by %s, %s, and %s. �Written by %s. �`�a -f should be followed by a -v �a -v should be preceded by a -f �can't open file %s for reading. �cannot create a unique name. �cannot read file %s �cannot specify -[pPR] and also -c. �cannot specify -c and also -p. �cannot specify -e and also -n �cannot specify -e and also -q �cannot specify -m and also -e �cannot specify -m and also -n �cannot specify -m and also -q �cannot specify -n and also -e �cannot specify -n and also -q �could not open file %s �creating the field expression. �date�datetime�day�don't specify a template in the command line and -f at the same time. �duplicated record set '%s' from %s. �error evaluating expression in a template slot. �error while parsing CSV file: %s �error while parsing the record provided by -r �error: %s:%d �error: adding relative date resulted in an invalid date: '%s' �error: adding relative time caused an overflow �error: cannot read file %s �error: initial year out of range �error: invalid date/time value: �error: parsing failed �error: parsing failed, stopped at '%s' �error: timezone %d caused time_t overflow �error: tzalloc ("%s") failed �error: unknown word '%s' �error: year, month, or day overflow �expected an integer between %d and %d.�failed to initialize csv parser �failed to normalise field name %s �failed to normalise record type name %s �failed to normalise the field name %s �file %s is not writable. �file does not appear to be an Access database �final: %s (UTC%s) �final: %s (UTC) �final: %s (unknown time zone offset) �hybrid�ignoring a request to delete all records of type %s. �incorrect timezone�input timezone: �internal error creating fex. �internal error creating the field expression. �internal error: REC_FEX_MAX_ELEMS exceeded. Please report this. �internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() in rec_type_new(). �internal error: rec_int_rec_extract_file: error compiling regexp. �internal error: rec_int_rec_extract_url: error compiling regexp. �internal error: rec_match: error compiling regexp. �internal error: recutl_index_list_parse: error compiling regexp. �invalid 'bool' value.�invalid 'field' value.�invalid 'line' value.�invalid 'range' value.�invalid 'real' value.�invalid 'uuid' value.�invalid aggregate function '%s' �invalid date.�invalid email.�invalid enum value.�invalid expression in a template slot. �invalid field expression in -f. �invalid field name %s. �invalid field name '%s' in header �invalid field name list in -S. �invalid field names in -G. �invalid field names in -S. �invalid integer.�invalid list of fields in -%c �invalid list of indexes in -n �invalid selection expression �invalid selection expression. �joins can only be used when a named record set is selected. �local_zone�memory exhausted�missing timezone�more than one password was specified �new start date: '%s' is '%s' �no records of type %s found. �number�number of seconds�only one field can be specified as join criteria. �only one field list can be specified as a grouping criteria. �only one field list can be specified as a sorting criteria. �only one list of fields can be specified as a sorting criteria. �operation aborted due to integrity failures. �out of memory �parsed %s part: �parsed date/time string�please provide a value for the field %s �please specify a correct field name to -j|--join. �please specify just one action. �please specify just one operation. �please specify just one password. �please specify some field with -f. �please use --force or --decrypt �preserving permissions for %s�recfmt_apply_template: error compiling regexp. Please report this. �relative�renaming file %s to %s �setting permissions for %s�several record types found. Please use -t to specify one. �starting date/time: '%s' �system default�the database contains already encrypted fields �the provided passwords don't match. �the rename operation requires just one field with an optional subscript. �the specified operation does not require a password. �time�timezone: TZ="%s" environment value �timezone: Universal Time �timezone: system default �today/this/now �unknown operation in recfix: please report this as a bug. �use --force if you really want to proceed, or use either -n or -e. �use --force to skip the integrity check. �use --verbose to get a detailed report. �using current date as starting value: '%s' �using current time as starting value: '%s' �using specified time as starting value: '%s' �value does not match the regexp.�value too large. Expected a size <= %zu.�warning: day (%s) ignored when explicit dates are given �warning: daylight saving time changed after date adjustment �warning: daylight saving time changed after time adjustment �warning: month/year adjustment resulted in shifted dates: �warning: when adding relative days, it is recommended to specify noon �warning: when adding relative months/years, it is recommended to specify the 15th of the months �write error�zone�Project-Id-Version: recutils 1.8 Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org POT-Creation-Date: 2022-04-16 19:38+0200 PO-Revision-Date: 2019-08-28 15:29-0300 Last-Translator: Rafael Fontenelle <rafaelff@gnome.org> Language-Team: Brazilian Portuguese <ldpbr-translation@lists.sourceforge.net> Language: pt_BR MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=2; plural=(n > 1); X-Generator: Virtaal 1.0.0-beta1 X-Bugs: Report translation errors to the Language-Team address. � Escrito por Jose E. Marchesi.� combinação de dia/mês inválida; � não existente por causa de horário de verão; � horário normalizado: "%s" � estouro de valores numéricos; � --encrypt criptografa campos confidenciais no arquivo especificado. --decrypt descriptografa campos confidenciais no arquivo especificado. � --help mostra uma mensagem de ajuda e sai. --version mostra a versão e sai. � --no-external não usa descritores externos. --force altera os registros mesmo se isso violar restrições de registros. � --no-external não usa descritores externos. --force força a operação requisitada. � A M D ajustados: %s %02d %02d � motivos possíveis: � nov data/horário = "%s" � horário fornecido pelo usuário: "%s" � A M D normalizados: %s %02d %02d � -c, --comment comenta os registros correspondentes, ao invés de excluí-los. --force exclui mesmo em situações potencialmente perigosas e se a exclusão estiver violando restrições do registro. --no-external não usa descritores externos. --verbose fornece um relatório detalhado se a verificação de integridade falhar. � -d, --delim=char define o delimitador (padrão ",") -t, --type=TIPO conjunto de registros a ser convertido para csv; se este parâmetro for omitido, então usa o conjunto de registros padrão -S, --sort=CAMPOS ordena a saída pelos campos especificados. � -d, --include-descriptors imprime descritores de registro junto com os registros correspondentes. -C, --collapse não secciona o resultado em registros com novas linhas. -S, --sort=CAMPO,... ordena a saída pelos campos. -G, --group-by=CAMPO,... agrupa registros pelos campos especificados. -U, --uniq remove campos duplicados nos registros de saída. � -f, --field=TEXTO nome do campo; deve ser seguido por -v. -v, --value=TEXTO valor do campo; deve vir após um -f. -r, --record=TEXTO registro que será inserido no arquivo. --force insere o registro mesmo se isso foi uma violação das restrições do registro. --no-external não usa descritores externos. --no-auto não insere campos gerados automaticamente. --verbose fornece um relatório detalhado se a verificação de integridade falhar. � -f, --file=ARQUIVO lê o modelo para aplicar de um arquivo. � -j, --join=CAMPO faz uma aglutinação, estilo inner join, usando o campo especificado. � -s, --password=SENHA descriptografa campos confidenciais com a SENHA. � -s, --password=SENHA criptografa campos confidenciais com a SENHA. � -s, --system-tables inclui tabelas do sistema. -e, --keep-empty-fields não remove campos vazios na saída da tabela rec. -l, --list-tables despeja uma lista dos nomes de tabelas contidos no arquivo mdb. � -t, --type=TIPO_REGISTRO imprime informação sobre os registros tendo o tipo especificado. -d, --descriptor inclui os descritores de registros completos. -n, --names-only mostra apenas os nomes dos arquivos de registro encontrados na entrada. �Página do %s: <%s> �Página do %s: <http://www.gnu.org/software/recutils/> �subprocesso %s�subprocesso %s falhou�o subprocesso %s recebeu sinal fatal %d�%s: %lu: esta linha contém %lu campos, mas %lu campos de cabeçalho foram lidos �%s: erro: o número de registros do tipo %s deveria ser %zd. �%s: erro: número insuficiente de registros do tipo %s. Mínimo admitido é %zd. �%s: erro: número excessivo de registros do tipo %s. Máximo admitido é %zd. �%s: opção inválida -- "%c" �%s: a opção "%s%s" não permite um argumento �%s: a opção "%s%s" é ambígua �%s: a opção "%s%s" é ambígua; possibilidades:�%s: a opção "%s%s" exige um argumento �%s: a opção exige um argumento -- "%c" �%s: opção desconhecida "%s%s" �%s:%s: erro: %%constraint[%d] violada no registro �%s:%s: erro: %s não contém informação para tipo %s. �%s:%s: erro: %s não contém dados rec válidos. �%s:%s: erro: campo autoincrementado %s deveria ser do tipo int, range ou data �%s:%s: erro: campo autoincrementado %s deveria ser do tipo int, range, uuid ou date �%s:%s: erro: campo confidencial não está criptografado �%s:%s: erro: não foi possível obter o descritor remoto da url %s. �%s:%s: erro: não foi possível ler o descritor externo do arquivo %s. �%s:%s: erro: valor de chave duplicada no campo "%s" no registro �%s:%s: erro: esperava uma lista, separada por vírgula, de campos antes do tipo especificado �%s:%s: erro: esperava um nome de tipo antes da especificação �%s:%s: erro: campo "%s" não admitido neste conjunto de registros �%s:%s: erro: o campo "%s" deveria ser único neste registro �%s:%s: erro: tipo de registro %s inválido �%s:%s: erro: especificação de "type" inválida �%s:%s: erro: especificação de "typedef" inválida �%s:%s: erro: o campo de chave "%s" não foi encontrado no registro �%s:%s: erro: campo obrigatório "%s" não foi encontrado no registro �%s:%s: erro: faltando o campo %%rec no descritor de registro �%s:%s: erro: múltiplos campos de chave "%s" no registro �%s:%s: erro: apenas um campo %%key é permitido em um descritor de registro �%s:%s: erro: apenas um campo %%size é permitido em um descritor de registro �%s:%s: erro: apenas um campo %%sort é permitido em um descritor de registro �%s:%s: erro: campo proibido "%s" encontrado no registro �%s:%s: erro: o tipo referido %s não existe �%s:%s: erro: número excessivo de campos %%rec no descritor de registro �%s:%s: erro: o valor de %s deveria ser uma lista de nomes de campos. �%s:%s: erro: o valor de %s deveria ser um número precedido opcionalmente por >, <, >= ou <=. �%s:%s: erro: o valor de %s[%zd] não é uma lista de nomes de campos �%s:%s: erro: o valor de %s[%zd] não é uma expressão de seleção válida �â€�"@timespec" - sempre UTC�(C)�--password|-s deve ser usado como um argumento de operação. �: erro: �: aviso: �Ações: -s, --set=VALOR altera o valor dos campos selecionados. -a, --add=VALOR adiciona campos selecionados com o valor. -S, --set-add=VALOR altera o valor dos campos selecionados. Se eles não existiram, então adiciona um novo campo com aquele valor. -r, --rename=NOME renomeia os campos selecionadas para um nome dado. Se todo um conjunto de registro for selecionado, então o campo também é renomeado no descritor de arquivo. -d, --delete exclui os campos selecionados. -c, --comment comenta os campos selecionados. �Altera ou exclui campos em registros. �Aplica um modelo aos registros lidos da entrada padrão. �Verifica e corrige arquivos rec. �Converte um arquivo mdb em um arquivo rec. �Converte dados csv em dados rec. �Converte dados rec em dados csv. �Copyright (C) %s Jose E. Marchesi. Licença GPLv3+: GNU GPL versão 3 ou posterior <http://gnu.org/licenses/gpl.html> Este é um software livre: você é livre para alterá-lo e redistribuí-lo. NÃO Hà QUALQUER GARANTIA, na máxima extensão permitida em lei. �Opções de (des)criptografia: -s, --password=SENHA criptografa/descriptografa com essa senha. �Opções de seleção de campos: -f, --fields=CAMPOS lista separada por vírgula de campos dados com subscritos opcionais. �Ajuda geral no uso de software GNU: <http://www.gnu.org/gethelp/> �Se nenhum ARQUIVO for especificado, então o comando age como um filtro, obtendo dados da saída padrão e escrevendo o resultado na saída padrão. �Insere novos registros em um banco de dados rec. �Retrorreferência inválida�Nome inválido de categoria de caracteres�Caractere de combinação inválido�Conteúdo inválido de \{\}�A expressão regular precedente é inválida�Fim de intervalo inválido�Expressão regular inválida�Memória esgotada�Nenhuma ocorrência do padrão�Nenhuma expressão regular anterior�Operações: --check verifica integridade do arquivo especificado. Padrão. --sort ordena os registros no arquivo especificado. --auto insere campos auto-gerados em registros que precisem deles. �Opções de saída: -p, --print=CAMPOS lista separada por vírgula de campos a ser impressos para cada registro correspondente. -P, --print-values=CAMPOS semelhante a -p, mas imprime apenas os valores dos campos selecionados. -R, --print-row=CAMPOS semelhante a -P, mas separa os valores com espaços, ao invés de novas linhas. -c, --count imprime uma contagem de registros correspondentes, ao invés dos registros em si. �Empacotado por %s �Empacotado por %s (%s) �Senha novamente: �Senha: �Fim prematuro da expressão regular�Imprime informação sobre os tipos de registros armazenados na entrada. �Opções de seleção de registros: -i, --case-insensitive diferencia textos entre maiúsculo e minúsculo nas expressões de seleção. -t, --type=TIPO opera em registros apenas do tipo especificado. -e, --expression=EXPR_REGISTRO expressão de seleção. -q, --quick=TEXTO seleciona registros com campos contendo um texto. -n, --number=NÚM,... seleciona registros por posição, com intervalos. -m, --random=NÚM seleciona um número dado de registros aleatórios. �Expressão regular grande demais�Remove (ou comenta) registros de um arquivo rec. �Relate os erros do %s para: %s �Relate erros para: %s Relate erros de tradução para <http://translationproject.org/team/pt_BR.html> �Selecione e imprime dados rec. �Opções especiais: --print-sexps imprime os dados em sexps, ao invés do formato rec. �Opções especiais: -S, --print-sexps mostra dados em sexps, em vez de formato rec. �Sucesso�valor de ambiente TZ="%s"�TZ="%s" em string de data�valor de ambiente TZ="UTC0" ou -u�Barra invertida no final�Erro desconhecido de sistema�( ou \( sem correspondente�) ou \) sem correspondente�[, [^, [:, [., ou [= sem correspondente�\{ sem correspondente�Uso: csv2rec [OPÇÕES]... [ARQUIVO_CSV] �Uso: mdb2rec [OPÇÕES]... ARQUIVO_MDB [TABELA] �Uso: rec2csv [OPÇÕES]... [ARQUIVO_CSV] �Uso: recdel [OPÇÕES]... [-t TIPO] [-n NÚM | -e EXPR_REGISTRO | -q TEXTO | -m NÚM] [ARQUIVO] �Uso: recfix [OPÇÃO]... [OPERAÇÃO] [OPÇÃO-OPERAÇÃO]... [ARQUIVO] �Uso: recfmt [OPÇÕES]... [MODELO] �Uso: recinf [OPÇÃO]... [ARQUIVO]... �Uso: recins [OPÇÃO]... [-t TIPO] [-n NÚM | -e EXPR_REGISTRO | -q TEXTO | -m NÚM] [(-f NOME -v TEXTO) | -r DADOS-REC]... [ARQUIVO] �Uso: recsel [OPÇÃO]... [-t TIPO] [-j CAMPO] [-n ÃNDICES | -e EXPR_REGISTRO | -q TEXTO | -m NÚM] [-c | (-p|-P) EXPR_CAMPO] [ARQUIVO]... �Uso: recset [OPÇÃO]... [ARQUIVO]... �Escrito por %s e %s. �Escrito por %s, %s, %s, %s, %s, %s, %s, %s, %s e outros. �Escrito por %s, %s, %s, %s, %s, %s, %s, %s e %s. �Escrito por %s, %s, %s, %s, %s, %s, %s e %s. �Escrito por %s, %s, %s, %s, %s, %s e %s. �Escrito por %s, %s, %s, %s, %s e %s. �Escrito por %s, %s, %s, %s e %s. �Escrito po %s, %s, %s e %s. �Escrito por %s, %s e %s. �Escrito por%s. �“�um -f deve ser seguido por um -v �um -v deve vir após um -f �não foi possível abrir %s para leitura. �não foi possível criar um nome único. �não foi possível ler o arquivo %s �não é permitido especificar -[pPR] e também -c. �não é permitido especificar -c e também -p. �não é permitido especificar -e e também -n �não é permitido especificar -e e também -q �não é permitido especificar -m e também -e �não é permitido especificar -m e também -n �não é permitido especificar -m e também -q �não é permitido especificar -n e também -e �não é permitido especificar -n e também -q �não foi possível abrir o arquivo %s �criando a expressão do campo. �data�datahorário�dia�não especifique um modelo na linha de comando e -f ao mesmo tempo. �conjunto de registros duplicados "%s" de "%s". �erro ao avaliar uma expressão em um slot de modelo. �erro enquanto analisava o arquivo CSV: %s �erro ao analisar o registro fornecido por -r �erro: %s:%d �erro: a adição de data relativa resultou em uma data inválida: "%s" �erro: a adição de horário relativo causou um estouro �erro: não foi possível ler o arquivo %s �erro: ano inicial fora do intervalo �erro: valor de data/horário inválido: �erro: análise falhou �erro: análise falhou, parou em "%s" �erro: fuso horário %d causou estouro em time_t �erro: tzalloc ("%s") falhou �erro: palavra desconhecida "%s" �erro: estouro de ano, mês ou dia �esperava um inteiro entre %d e %d.�falha ao inicializar o analisador de csv �falha ao normalizar o nome do campo %s �falha ao normalizar o nome do tipo de registro %s �falha ao normalizar o nome do campo %s �arquivo %s não pode ser escrito. �o arquivo não parece ser um banco de dados Access �final: %s (UTC%s) �final: %s (UTC) �final: %s (posição de fuso horário desconhecida) �híbrido�ignorando uma requisição para excluir todos registros do tipo %s. �fuzo horário incorreto�fuso horário de entrada: �erro interno ao criar fex. �erro interno ao criar a expressão de campo. �erro interno: REC_FEX_MAX_ELEMS excedido. Por favor, relate isso. �erro interno: rec-types: obteve REC_TYPE_NONE de rec_type_parse_type_kind() em rec_type_new(). �erro interno: rec_int_rec_extract_file: erro ao compilar a expressão regular. �erro interno: rec_int_rec_extract_url: erro ao compilar a expressão regular. �erro interno: rec_match: erro ao compilar a expressão regular. �erro interno: recutl_index_list_parse: erro ao compilar a expressão regular. �o valor de "bool" é inválido.�o valor de "field" é inválido.�o valor de "line" é inválido.�o valor de "range" é inválido.�o valor de "real" é inválido.�o valor de "uuid" é inválido.�função de agregação inválida "%s" �data inválida.�e-mail inválido.�o valor de "enum" é inválido.�expressão inválida em um slot de modelo. �expressão de campo inválido em -f. �nome de campo inválido %s. �nome de campo inválido "%s" no cabeçalho �lista de nomes de campos inválida em -S. �nomes de campos inválidos em -G. �nomes de campos inválidos em -S. �inteiro inválido.�lista de campos inválida em -%c �lista de índices inválida em -n �expressão de seleção inválida �expressão de seleção inválida. �aglutinações (join) podem ser usadas apenas quando um conjunto de registro dado for selecionado. �fuso local�memória esgotada�faltando fuso horário�mais do que uma senha foi especificada �nova data inicial: "%s" é "%s" �nenhum registro do tipo %s encontrado. �número�número de segundos�apenas um campo pode ser especificado como um critério de aglutinação (join). �apenas uma lista de campos pode ser especificada como um critério de agrupamento. �apenas uma lista de campos pode ser especificada como um critério de ordenação. �apenas uma lista de campos pode ser especificada como um critério de ordenação. �operação abortada em decorrência de falhas de integridade. �memória insuficiente �analisada parte de %s: �string de data/horário analisada�por favor, forneça um valor para o campo %s �por favor, especifique um nome de campo correto para -j|--join. �por favor, especifique apenas uma ação. �por favor, especifique apenas uma operação. �por favor, especifique apenas uma senha. �por favor, especifique alguns campos com -f. �por favor, use --force ou --decrypt �preservando permissões para %s�recfmt_apply_template: erro ao compilar expressão regular. Por favor, relate isto. �relativo�renomeando o arquivo %s para %s �definindo permissões para %s�vários tipos de registros encontrados. Por favor, use -t para especificar um. �data/horário inicial: "%s" �padrão do sistema�o banco de dados já contém campos criptografados �as senhas fornecidas não correspondem. �a operação de renomeação requer apenas um campo com um subscrito opcional. �a operação especificada não requer uma senha. �horário�fuso horário: valor ambiente TZ="%s" �fuso horário: Tempo Universal �fuso horário: padrão do sistema �hoje/isso/agora �operação desconhecida em recfix: por favor, relate isto como um erro. �use --force se você realmente deseja prosseguir ou use -n ou -e. �use --force para ignorar a verificação de integridade. �use --verbose para obter um relatório detalhado. �usando data atual como valor inicial: "%s" �usando horário atual como valor inicial: "%s" �usando horário especificado como valor inicial: "%s" �o valor não corresponde à expressão regular.�valor grande demais. Esperava um tamanho <= %zu.�aviso: dia (%s) ignorado quando datas explícitas são dadas �aviso: horário de verão alterado após o ajuste da data �aviso: horário de verão alterado após o ajuste do horário �aviso: o ajuste de mês/ano resultou em datas deslocadas: �aviso: ao adicionar dias relativos, é recomendado especificar meio-dia �aviso: ao adicionar meses/anos relativos, é recomendado especificar o 15º dos meses �erro de escrita�fuso�PRIdMAX�year: %04�%s (day ordinal=% number=%d)�number of seconds: %�warning: value % has % digits. Assuming YYYY/MM/DD �warning: value % has less than 4 digits. Assuming MM/DD/YY[YY] �warning: adjusting year value % to % �error: out-of-range year % �error: invalid hour %%s �error: day '%s' (day ordinal=% number=%d) resulted in an invalid date: '%s' �after date adjustment (%+ years, %+ months, %+ days), �'%s' = % epoch-seconds �after time adjustment (%+ hours, %+ minutes, %+ seconds, %+d ns), � new time = % epoch-seconds �final: %.%09d (epoch-seconds) �ano: %04�%s (dia ordinal=% número=%d)�número de segundos: %�aviso: o valor % tem % dígitos. Presumindo AAAA/MM/DD �aviso: o valor % tme menos de 4 dígitos. Presumindo MM/DD/AA[AA] �aviso: ajustando o valor de ano % para % �erro: ano % fora do intervalo �erro: hora %%s inválido �erro: o dia "%s" (dia ordinal=% número=%d) resultou em uma data inválida: "%s" �após o ajuste de data (%+ anos, %+ meses, %+ dias), �"%s" = % segundos desde o epoch �após o ajuste de horário (%+ horas, %+ minutos, %+ segundos, %+d ns), � novo horário = % segundos desde o epoch �final: %.%09d (segundos desde epoch) ���������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/sv.gmo������������������������������������������������������������������������������0000644�0000000�0000000�00000124163�14226577416�011703� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•�����0��� ��‘��������D�����L��„������L�����M��&���k��1���’�����Ä�� ���â��²�����‚���¶��Í���9��‹�����"���“�����¶�����Î�����è��"�������)��E��1!��Ó��w"��Ž��K$��N���Ú&��W���)'��[���'��[���Ý'��?��9(��M��y)�����Ç*��6���Û*�� ���+����� +��!���5+��H���W+��;��� +��@���Ü+��A���,�����_,��,���{,�����¨,��.���È,��'���÷,��(���-�����H-��2���h-��;���›-��2���×-��M��� .��S���X.��2���¬.��=���ß.��?���/��;���]/��V���™/��A���ð/��8���20��9���k0��%���¥0��)���Ë0��,���õ0��1���"1��7���T1��7���Œ1��1���Ä1��E���ö1��F���<2��F���ƒ2��4���Ê2��2���ÿ2��9���23��<���l3��U���©3��=���ÿ3��D���=4�����‚4�����„4�����4��5���¡4�� ���×4�� ���á4��ê��í4��#���Ø7��6���ü7�����38��%���M8�� ���s8�� ���”8��ë���µ8��a���¡9��¥���:��?���©:�����é:��&���w;�����ž;�����µ;�����Ò;�����î;��$���<�����+<�����=<�����X<�����i<�����r<�� ��‘<��L��Ÿ=�����ì?�����ü?�����@�� ���"@��#���-@��B���Q@��.��”@�����ÃB��1���ÞB�����C�����'C�����;C��f���WC��f���¾C�����%D�����-D�����GD��!���^D�����€D�����“D�����¨D�����ºD�����ÌD�� ���ëD��'���øD��-��� E��'���NE��X���vE��<���ÏE��%��� F��$���2F��z���WF��ƒ���ÒF��$���VG�����{G��;���’G��3���ÎG��/���H��+���2H��'���^H��#���†H�����ªH�����ÊH�����æH�����öH�� ���øH�� ���I�� ���:I�����[I�����yI��#���ŽI�����²I�����ÒI�����ñI�����J�����/J�����NJ�����mJ�����ŒJ�����«J�����ÃJ�����ãJ�����èJ�����ñJ��F���õJ��$���<K��0���aK��!���’K��.���´K�� ���ãK��>���ñK��/���0L�����`L��!���|L�� ���žL�����¿L��'���ÖL��*���þL�����)M�����GM��$���aM��&���†M�� ���­M��"���ÎM��(���ñM��&���N�����AN��.���[N�����ŠN�����N��%���®N�����ÔN��5���ÛN�����O�����$O�����5O��.���SO��A���‚O��`���ÄO��B���%P��A���hP��3���ªP��A���ÞP����� Q�����6Q�����MQ�����cQ�����zQ�����Q�� ���¦Q�� ���ÇQ�����ÕQ�����äQ��'���øQ�� ��� R�����AR��"���YR�����|R�����œR�����¸R�����ÔR�����åR�����S�����#S�����AS��<���`S�� ���S�����¨S�����¹S��%���ÊS�����ðS�����T�����,T�����3T��2���ET��=���xT��<���¶T��@���óT��-���4U�����bU�����qU�����‚U��(���šU��2���ÃU�� ���öU��#���V��"���;V��#���^V�� ���‚V�����£V��C���ÁV�����W�����W�����&W��;���AW�����}W�����—W��/���¦W��$���ÖW��I���ûW��5���EX�����{X��$���€X�����¥X�����¿X�����ÙX��:���éX��C���$Y��)���hY��(���’Y��+���»Y��+���çY��-���Z�� ���AZ��)���bZ��8���ŒZ��<���ÅZ��<���[��:���?[��F���z[��`���Á[�� ���"\�����.\��®��3\�����â]��(����^��*���)^��"���T^��"���w^����š^��™���Ÿ_��Ö���9`��”���a��$���¥a�����Êa�����âa��!���b��&���#b��?��Jb��€��Šd��ó�� f��–��ÿg��G���–j��T���Þj��c���3k��a���—k����ùk��G��m�����]n��4���pn�����¥n�����µn��)���Òn��E���ün��2���Bo��A���uo��D���·o�� ���üo��*���p��$���Hp��2���mp��,��� p��.���Íp�����üp��-���q��;���Hq��8���„q��Z���½q��`���r��4���yr��D���®r��A���ór��>���5s��U���ts��?���Ês��=��� t��9���Ht�����‚t��%���¢t��*���Èt��7���ót��@���+u��3���lu��0��� u��H���Ñu��I���v��I���dv��5���®v��/���äv��8���w��?���Mw��Z���w��A���èw��D���*x�����ox�����sx�����’x��:���•x�����Ðx�� ���Øx��[��äx��%���@|��7���f|��%���ž|��'���Ä|��#���ì|��#���}��û���4}��h���0~��Ÿ���™~��K���9��‚���…��$���€�����-€�����D€�����]€�����|€��%���–€�����¼€�����Ó€�����ï€�����ÿ€��!�����m��1��b��Ÿ‚�����…�����…�����)…�� ���:…��'���F…��G���n…��q��¶…��!���(ˆ��9���Jˆ�����„ˆ��b��� ˆ�����‰�����!‰�����²‰�����CŠ�����LŠ�����eŠ��#���€Š�����¤Š�����Š�����ÓŠ�����äŠ�����õŠ�����‹��-���‹��4���I‹��-���~‹��Z���¬‹��@���Œ��'���HŒ��)���pŒ��|���šŒ��€�����)���˜�����Â��9���Ù��2���Ž��.���FŽ��*���uŽ��&��� Ž��"���ÇŽ�����êŽ����� �����$�����4�����8��!���X��(���z��(���£�����Ì��0���å��,�����+���C��+���o��+���›��+���Ç��+���ó��+���‘��+���K‘��"���w‘�����š‘�����·‘�����½‘�����Æ‘��6���Ê‘��)���’��0���+’�� ���\’��+���}’�� ���©’��T���µ’��0��� “��"���;“��1���^“�� ���“�����±“��6���Ï“��(���”��!���/”�����Q”��)���k”��*���•”��&���À”��,���ç”��.���•��,���C•�����p•��)���•�����·•�����Í•��'���á•����� –��=���–�����N–�����_–�����q–��*���‘–��F���¼–��^���—��P���b—��O���³—��A���˜��O���E˜�����•˜�����±˜�����Θ�����ê˜�����™�����#™��#���?™�����c™�����s™�����ƒ™��#���™™�����½™�����Ú™��&���ò™��!���š�����;š�����Xš�����uš�����†š�����£š�����¿š�����ך��>���ðš�� ���/›�� ���9›�����E›�����T›��'���r›�� ���š›�����»›�����›��3���Ñ›��=���œ��<���Cœ��@���€œ��1���Áœ�����óœ������������ ���/��+���P�����|�����”�����¬�����Æ�� ���á�����ž��`���ž�����€ž�����ˆž�����¤ž��8���Áž�����úž�����Ÿ��-���$Ÿ��-���RŸ��C���€Ÿ��7���ÄŸ�����üŸ������ ����� �����8 �����Q ��?���a ��V���¡ ��<���ø ��6���5¡��3���l¡��0��� ¡��0���Ñ¡��+���¢��5���.¢��7���d¢��4���œ¢��3���Ñ¢��@���£��O���F£��_���–£�����ö£�����ÿ£�����Ú���Œ���ý���n���W��������� ���y���œ���•���g���ë�����������€�����½�������ú�����������������F�������(���D��� ���ƒ�����������������/���ä�����������H������a���æ�����������Í���¶�������>������1�����w����������T���Q���ˆ���������������-���ã���†���`���M������������������� ��’�������ù�������Ó���j���þ���Ö���h���<���×����������i��� ����������·�����A���v���ž���Ä��� ��!���“���Ý���Y���å���È���¤���ß���O��������������������ò���G�������e���U����������������������¸���o���»�����������%���J���������Â�����������#���±���,�������������������Ü�������ö������&�������ç���¦���}���è���º������ ��� ��ð���é���������V��� �����������R���K���µ���°�������Ù�������[���Ÿ���|�������î����������Þ�����������É���u�������¿���:�������$�������û������Û������Ï�������\�������Ì���¥���������à���–����������¯����������³�������B���������������”���ü���3��������������x���7���L���*���������Š���Ñ�����~�������+�������‚������ô���_���Å�������k���Ã���´����������m�������â���P���À���¹���C���ó����������������������í���„���^�������ì���f�������l���¢�����������N���8�������¨���'�����¼�������š���]���¾���Ç���ñ���;���Õ���9���=���)���p��������������������� ��‰���©�������Æ������������� �����ª���õ���4���Î����������d���ø�������0���I�������t���Ô�������.���r�������—���?�����������"���§���‡���5���S����������›�������˜����������™���������Ø���Z���c���Ž���á������¡�����‘���¬�������«�����������÷�������‹�������²�����������Á������� ���®���6������ï������������������������2���ÿ����� �������X���Ë���Ð�����������������������Ê���­���b������z���£���ê���{���Ò���@���q�������s���…���E������¤��¼��Ð��ä��ø����(��D��X��l��€��¤��¸��Ü��ð������,��@��\��p��Œ�� ��´��È��ì�����$��8�� ¤�� ����������ÿÿÿÿ¤��������� ���ÿÿÿÿ2¤������������ÿÿÿÿG¤�������������������ÿÿÿÿ{¤���������0���ÿÿÿÿ»¤�������������������ÿÿÿÿá¤������������ÿÿÿÿý¤������������ÿÿÿÿ¥���������/���ÿÿÿÿc¥��������� ������� ������� ���ÿÿÿÿš¥������������ÿÿÿÿ²¥��������� ������� ����������ÿÿÿÿõ¥������������ÿÿÿÿ¦������������ÿÿÿÿ4¦������������ÿÿÿÿ=¦�� ������� ���ÿÿÿÿV¦������������ÿÿÿÿh¦���������������� ���ÿÿÿÿ ¦���������4���ÿÿÿÿæ¦�������������������ÿÿÿÿ§��"����������ÿÿÿÿ2§������������ÿÿÿÿK§���������9���ÿÿÿÿ §���������������� ������� ���ÿÿÿÿ×§�� ����������ÿÿÿÿò§��������� ������� ����������ÿÿÿÿ5¨������������ÿÿÿÿR¨�� ����������ÿÿÿÿ� Written by Jose E. Marchesi.� invalid day/month combination; � non-existing due to daylight-saving time; � normalized time: '%s' � numeric values overflow; � --encrypt encrypt confidential fields in the specified file. --decrypt decrypt confidential fields in the specified file. � --help print a help message and exit. --version show version and exit. � --no-external don't use external descriptors. --force alter the records even if violating record restrictions. � --no-external don't use external descriptors. --force force the requested operation. � adjusted Y M D: %s %02d %02d � possible reasons: � new date/time = '%s' � user provided time: '%s' � normalized Y M D: %s %02d %02d � -c, --comment comment out the matching records instead of deleting them. --force delete even in potentially dangerous situations, and if the deletion is violating record restrictions. --no-external don't use external descriptors. --verbose give a detailed report if the integrity check fails. � -d, --delim=char sets the deliminator (default ',') -t, --type=TYPE record set to convert to csv; if this parameter is omitted then the default record set is used -S, --sort=FIELDS sort the output by the specified fields. � -d, --include-descriptors print record descriptors along with the matched records. -C, --collapse do not section the result in records with newlines. -S, --sort=FIELD,... sort the output by the specified fields. -G, --group-by=FIELD,... group records by the specified fields. -U, --uniq remove duplicated fields in the output records. � -f, --field=STR field name; should be followed by a -v. -v, --value=STR field value; should be preceded by an -f. -r, --record=STR record that will be inserted in the file. --force insert the record even if it is violating record restrictions. --no-external don't use external descriptors. --no-auto don't insert auto generated fields. --verbose give a detailed report if the integrity check fails. � -f, --file=FILENAME read the template to apply from a file. � -j, --join=FIELD perform an inner join using the specified field. � -s, --password=STR decrypt confidential fields with the given password. � -s, --password=STR encrypt confidential fields with the given password. � -s, --system-tables include system tables. -e, --keep-empty-fields don't prune empty fields in the rec output. -l, --list-tables dump a list of the table names contained in the mdb file. � -t, --type=RECORD_TYPE print information on the records having the specified type. -d, --descriptor include the full record descriptors. -n, --names-only output just the names of the record files found in the input. �%s home page: <%s> �%s home page: <http://www.gnu.org/software/recutils/> �%s subprocess�%s subprocess failed�%s subprocess got fatal signal %d�%s: %lu: this line contains %lu fields, but %lu header fields were read �%s: error: the number of records of type %s should be %zd. �%s: error: too few records of type %s. Minimum allowed are %zd. �%s: error: too many records of type %s. Maximum allowed are %zd. �%s: invalid option -- '%c' �%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: unrecognized option '%s%s' �%s:%s: error: %%constraint[%d] violated in record �%s:%s: error: %s does not contain information for type %s. �%s:%s: error: %s does not contain valid rec data. �%s:%s: error: auto-incremented field %s should be of type int, range or date �%s:%s: error: auto-incremented field %s should be of type int, range, uuid or date �%s:%s: error: confidential field is not encrypted �%s:%s: error: could not fetch remote descriptor from url %s. �%s:%s: error: could not read external descriptor from file %s. �%s:%s: error: duplicated key value in field '%s' in record �%s:%s: error: expected a comma-separated list of fields before the type specification �%s:%s: error: expected a type name before the type specification �%s:%s: error: field '%s' not allowed in this record set �%s:%s: error: field '%s' should be unique in this record �%s:%s: error: invalid record type %s �%s:%s: error: invalid type specification �%s:%s: error: invalid typedef specification �%s:%s: error: key field '%s' not found in record �%s:%s: error: mandatory field '%s' not found in record �%s:%s: error: missing %%rec field in record descriptor �%s:%s: error: multiple key fields '%s' in record �%s:%s: error: only one %%key field is allowed in a record descriptor �%s:%s: error: only one %%size field is allowed in a record descriptor �%s:%s: error: only one %%sort field is allowed in a record descriptor �%s:%s: error: prohibited field '%s' found in record �%s:%s: error: the referred type %s does not exist �%s:%s: error: too many %%rec fields in record descriptor �%s:%s: error: value for %s should be a list of field names. �%s:%s: error: value for %s should be a number optionally preceded by >, <, >= or <=. �%s:%s: error: value for %s[%zd] is not a list of field names �%s:%s: error: value for %s[%zd] is not a valid selection expression �'�'@timespec' - always UTC�(C)�--password|-s must be used as an operation argument. �: error: �: warning: �Actions: -s, --set=VALUE change the value of the selected fields. -a, --add=VALUE add the selected fields with the given value. -S, --set-add=VALUE change the value of the selected fields. If they don't exist then add a new field with that value. -r, --rename=NAME rename the selected fields to a given name. If an entire record set is selected then the field is renamed in the record descriptor as well. -d, --delete delete the selected fields. -c, --comment comment out the selected fields. �Alter or delete fields in records. �Apply a template to records read from standard input. �Check and fix rec files. �Convert an mdb file into a rec file. �Convert csv data into rec data. �Convert rec data into csv data. �Copyright (C) %s Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �De/Encryption options: -s, --password=PASSWORD encrypt/decrypt with this password. �Field selection options: -f, --fields=FIELDS comma-separated list of field names with optional subscripts. �General help using GNU software: <http://www.gnu.org/gethelp/> �If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. �Insert new records in a rec database. �Invalid back reference�Invalid character class name�Invalid collation character�Invalid content of \{\}�Invalid preceding regular expression�Invalid range end�Invalid regular expression�Memory exhausted�No match�No previous regular expression�Operations: --check check integrity of the specified file. Default. --sort sort the records in the specified file. --auto insert auto-generated fields in records missing them. �Output options: -p, --print=FIELDS comma-separated list of fields to print for each matching record. -P, --print-values=FIELDS as -p, but print only the values of the selected fields. -R, --print-row=FIELDS as -P, but separate the values with spaces instead of newlines. -c, --count print a count of the matching records instead of the records themselves. �Packaged by %s �Packaged by %s (%s) �Password again: �Password: �Premature end of regular expression�Print information about the types of records stored in the input. �Record selection options: -i, --case-insensitive make strings case-insensitive in selection expressions. -t, --type=TYPE operate on records of the specified type only. -e, --expression=RECORD_EXPR selection expression. -q, --quick=STR select records with fields containing a string. -n, --number=NUM,... select specific records by position, with ranges. -m, --random=NUM select a given number of random records. �Regular expression too big�Remove (or comment out) records from a rec file. �Report %s bugs to: %s �Report bugs to: %s �Select and print rec data. �Special options: --print-sexps print the data in sexps instead of rec format. �Special options: -S, --print-sexps print the data in sexps instead of rec format. �Success�TZ="%s" environment value�TZ="%s" in date string�TZ="UTC0" environment value or -u�Trailing backslash�Unknown system error�Unmatched ( or \(�Unmatched ) or \)�Unmatched [, [^, [:, [., or [=�Unmatched \{�Usage: csv2rec [OPTIONS]... [CSV_FILE] �Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE] �Usage: rec2csv [OPTIONS]... [REC_FILE] �Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [FILE] �Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE] �Usage: recfmt [OPTION]... [TEMPLATE] �Usage: recinf [OPTION]... [FILE]... �Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE] �Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]... �Usage: recset [OPTION]... [FILE]... �Written by %s and %s. �Written by %s, %s, %s, %s, %s, %s, %s, %s, %s, and others. �Written by %s, %s, %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, and %s. �Written by %s, %s, %s, and %s. �Written by %s, %s, and %s. �Written by %s. �`�a -f should be followed by a -v �a -v should be preceded by a -f �can't open file %s for reading. �cannot create a unique name. �cannot read file %s �cannot specify -[pPR] and also -c. �cannot specify -c and also -p. �cannot specify -e and also -n �cannot specify -e and also -q �cannot specify -m and also -e �cannot specify -m and also -n �cannot specify -m and also -q �cannot specify -n and also -e �cannot specify -n and also -q �could not open file %s �creating the field expression. �date�datetime�day�don't specify a template in the command line and -f at the same time. �duplicated record set '%s' from %s. �error evaluating expression in a template slot. �error while parsing CSV file: %s �error while parsing the record provided by -r �error: %s:%d �error: adding relative date resulted in an invalid date: '%s' �error: adding relative time caused an overflow �error: cannot read file %s �error: initial year out of range �error: invalid date/time value: �error: parsing failed �error: parsing failed, stopped at '%s' �error: timezone %d caused time_t overflow �error: tzalloc ("%s") failed �error: unknown word '%s' �error: year, month, or day overflow �expected an integer between %d and %d.�failed to initialize csv parser �failed to normalise field name %s �failed to normalise record type name %s �failed to normalise the field name %s �file %s is not writable. �file does not appear to be an Access database �final: %s (UTC%s) �final: %s (UTC) �final: %s (unknown time zone offset) �hybrid�ignoring a request to delete all records of type %s. �incorrect timezone�input timezone: �internal error creating fex. �internal error creating the field expression. �internal error: REC_FEX_MAX_ELEMS exceeded. Please report this. �internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() in rec_type_new(). �internal error: rec_int_rec_extract_file: error compiling regexp. �internal error: rec_int_rec_extract_url: error compiling regexp. �internal error: rec_match: error compiling regexp. �internal error: recutl_index_list_parse: error compiling regexp. �invalid 'bool' value.�invalid 'field' value.�invalid 'line' value.�invalid 'range' value.�invalid 'real' value.�invalid 'uuid' value.�invalid aggregate function '%s' �invalid date.�invalid email.�invalid enum value.�invalid expression in a template slot. �invalid field expression in -f. �invalid field name %s. �invalid field name '%s' in header �invalid field name list in -S. �invalid field names in -G. �invalid field names in -S. �invalid integer.�invalid list of fields in -%c �invalid list of indexes in -n �invalid selection expression �invalid selection expression. �joins can only be used when a named record set is selected. �local_zone�memory exhausted�missing timezone�more than one password was specified �new start date: '%s' is '%s' �no records of type %s found. �number�number of seconds�only one field can be specified as join criteria. �only one field list can be specified as a grouping criteria. �only one field list can be specified as a sorting criteria. �only one list of fields can be specified as a sorting criteria. �operation aborted due to integrity failures. �out of memory �parsed %s part: �parsed date/time string�please provide a value for the field %s �please specify a correct field name to -j|--join. �please specify just one action. �please specify just one operation. �please specify just one password. �please specify some field with -f. �please use --force or --decrypt �preserving permissions for %s�recfmt_apply_template: error compiling regexp. Please report this. �relative�renaming file %s to %s �setting permissions for %s�several record types found. Please use -t to specify one. �starting date/time: '%s' �system default�the database contains already encrypted fields �the provided passwords don't match. �the rename operation requires just one field with an optional subscript. �the specified operation does not require a password. �time�timezone: TZ="%s" environment value �timezone: Universal Time �timezone: system default �today/this/now �unknown operation in recfix: please report this as a bug. �use --force if you really want to proceed, or use either -n or -e. �use --force to skip the integrity check. �use --verbose to get a detailed report. �using current date as starting value: '%s' �using current time as starting value: '%s' �using specified time as starting value: '%s' �value does not match the regexp.�value too large. Expected a size <= %zu.�warning: day (%s) ignored when explicit dates are given �warning: daylight saving time changed after date adjustment �warning: daylight saving time changed after time adjustment �warning: month/year adjustment resulted in shifted dates: �warning: when adding relative days, it is recommended to specify noon �warning: when adding relative months/years, it is recommended to specify the 15th of the months �write error�zone�Project-Id-Version: GNU recutils 1.8 Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org POT-Creation-Date: 2022-04-16 19:38+0200 PO-Revision-Date: 2020-08-01 12:46+0200 Last-Translator: Göran Uddeborg <goeran@uddeborg.se> Language-Team: Swedish <tp-sv@listor.tp-sv.se> Language: sv MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. � Skrivet av Jose E. Marchesi.� felaktig dag/mÃ¥nad-kombination; � finns inte pÃ¥ grund av sommartid; � normaliserad tid: â€%s†� spill i numeriska värden; � --encrypt kryptera konfidentiella fält i den angivna filen. --decrypt dekryptera konfidentiella fält i den angivna filen. � --help visa ett hjälpmeddelande och avsluta. --version visa versionsinformation och avsluta. � --no-external använd inte externa identifierare. --force ändra posterna även om det bryter mot postbegränsningarna. � --no-external använd inte externa identifierare --force tvinga fram den begärda Ã¥tgärden. � justerade Ã… M D: %s %02d %02d � möjliga orsaker: � nytt datum/tid = â€%s†� användargiven tid: â€%s†� normaliserade Ã… M D: %s %02d %02d � -c, --comment kommentera ut de matchande posterna istället för att radera dem. --force radera även i potentiellt farliga situationer, och om raderingen bryter mot postrestriktionerna. --no-external använd inte externa identifierare. --verbose ge en detaljerad rapport om integritetskontrollen hittar fel. � -d, --delim=tecken sätter avgränsaren (standard â€,â€) -t, --type=TYP postuppsättning att konvertera till csv; om denna parameter utelämnas används standardpostuppsättningen -S, --sort=FÄLT sortera utdata efter de angivna fälten. �-d, --include-descriptors skriv ut postidentifierare tillsammans med matchade poster. -C, --collapse dela inte upp resultatet i poster med nyrader. -S, --sort=FÄLT sortera utdata efter det angivna fältet. -G, --group-by=FÄLT,… grupper poster efter de angivna fälten. -U, --uniq ta bort dubblerade fält i utposter. � -f, --field=STR fältnamn; skall följas av ett -v. -v, --value=STR fältvärde; skall föregÃ¥s av ett -f. -r, --record=STR post som kommer skjutas in i filen. --force skjut in posten även om det bryter mot postrestriktionerna. --no-external använd inte externa identifierare. --no-auto skjut inte in automatiskt genererade fält. --verbose fÃ¥ en detaljerad rapport om integritetskontrollen hittar fel. � -f, -file=FILNAMN läs mallen att använda frÃ¥n en fil. � -j, --join=FÄLT utför en inre join med det angivna fältet. � -s, --password=STR dekryptera konfidentiella fält med det angivna lösenordet. � -s, --password=STR kryptera konfidentiella fält med det angivna lösenordet. � -s, --system-tables inkludera systemtabeller. -e, --keep-empty-fields beskär aldrig tomma fält i rec-utdata. -l, --list-tables skriv ut en lista av tabellnamnen som Ã¥terfinns i mdb-filen. � -t, --type=POST_TYP skriv ut information om de poster som har angiven typ. -d, -descriptor inkludera fullständiga postidentifierare. -n, -names-only skriv bara ut namnen pÃ¥ postfiler som fanns i indata. �%s webbsida: <%s> �%s hemsida: <http://www.gnu.org/software/recutils/> �%s-underprocess�%s underprocess misslyckades�%s-underprocess fick ödesdiger signal %d�%s: %lu: denna rad innehÃ¥ller %lu fält, men %lu huvudfält lästes �%s: fel: antalet poster av typ %s skall vara %zd. �%s: fel: för fÃ¥ poster av typ %s. Minimalt tillÃ¥tet är %zd. �%s: fel: för mÃ¥nga poster av typ %s. Maximalt tillÃ¥tet är %zd. �%s: ogiltig flagga — â€%c†�%s: flaggan â€%s%s†tar inget argument �%s: flaggan â€%s%s†är tvetydig �%s: flaggan â€%s%s†är tvetydig; möjligheter:�%s: flaggan â€%s%s†kräver ett argument �%s: flaggan kräver ett argument — â€%c†�%s: okänd flagga â€%s%s†�%s:%s: fel: %%constraint[%d] brutet i posten �%s:%s: fel: %s innehÃ¥ller inte information för typen %s. �%s:%s: fel: %s innehÃ¥ller inte nÃ¥gon giltig rec-data. �%s:%s: fel: automatökat fält â€%s†skall vara av typen heltal, intervall eller datum �%s:%s: fel: automatökat fält â€%s†skall vara av typen heltal, intervall, uuid eller datum �%s:%s: fel: konfidentiellt fält är inte krypterat �%s:%s: fel: kunde inte hämta fjärridentifieraren frÃ¥n url:en %s. �%s:%s: vel: kan inte läsa extern identifieraren frÃ¥n filen %s. �%s:%s: fel: duplicerat nyckelvärde i fält â€%s†i posten �%s:%s: fel: en kommaseparerad lista med fält förväntades före typspecifikationen �%s:%s: fel: ett typnamn förväntades före typspecifikationen �%s:%s: fel: fältet â€%s†är inte tillÃ¥tet i postmängd �%s:%s: fel: fält â€%s†skall vara unikt i denna post �%s:%s: fel: ogiltig posttyp %s �%s:%s: fel: ogiltig typspecifikation �%s:%s: fel: ogiltig typedef-specifikation �%s:%s: fel: nyckelfältet â€%s†finns inte i posten �%s:%s: fel: obligatoriskt fält â€%s†hittades inte i posten �%s:%s: fel: saknat %%rec-fält i postidentifierare �%s:%s: fel: flera nyckelfält â€%s†i posten �%s:%s: fel: endast ett %%key-fält är tillÃ¥tet i en postidentifierare �%s:%s: fel: endast ett %%size-fält är tillÃ¥tet i en postidentifierare �%s:%s: fel: endast ett %%sort-fält är tillÃ¥tet i en postidentifierare �%s:%s: fel: förbjudet fält â€%s†finns i posten �%s:%s: fel: den refererade typen %s finns inte �%s:%s: fel: för mÃ¥nga %%rec-fält i postidentifierare �%s:%s: fel: värdet för %s skall vara en lista med fältnamn. �%s:%s: fel: värdet pÃ¥ %s skall vara ett tal eventuellt föregÃ¥tt av >, <, >= eller <=. �%s:%s: fel: värdet för %s[%zd] är inte en lista med fältnamn �%s:%s: fel: värdet för %s[%zd] är inte ett giltigt urvalsuttryck �â€�â€@timespec†— alltid UTC�©�--password|-s mÃ¥ste användas som ett Ã¥tgärdsargument. �: fel: �: varning: �Ã…tgärder: -s, --set=VÄRDE ändra värdet pÃ¥ de valda fälten. -a, --add=VÄRDE lägg till de valda fälten med det angivna värdet. -S, --set-add=VÄRDE ändra värdet pÃ¥ de valda fälten. Om de inte finns, lägg dÃ¥ till ett nytt fält med det värdet. -r, --rename=NAMN byt namn pÃ¥ de valda fälten till ett angivet namn. Om en hel postmängd är vald byts namnet även i postidentifieraren. -d, --delete radera de valda fälten. -c, --comment kommentera bort de valda fälten. �Ändra eller ta bort fält i poster. �Använda en mall för poster lästa frÃ¥n standard in. �Kontrollera och Ã¥tgärda rec-filer. �Konvertera en mdb-fil till en rec-fil. �Konvertera CSV-data till rec-data. �Konvertera rec-data till csv-data. �Copyright © %s Jose E. Marchesi. Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl.html>. Detta är fri programvara: du har rätt att ändra och vidaredistribuera den. Det finns INGEN GARANTI, sÃ¥ lÃ¥ngt som lagen tillÃ¥ter. �(De)krypteringsflaggor: -s, --password=LÖSENORD kryptera/dekryptera med detta lösenord. �Flaggor för fältval: -f, --fields=FÄLT kommaseparerad lista med fältnamn och eventuella index. �Allmän hjälp med att använda GNU-program: <http://www.gnu.org/gethelp/> �Om ingen FIL anges fungerar kommandot som ett filter, som hämtar data frÃ¥n standard in och skriver resultatet till standard ut. �Infoga nya poster i en rec-databas. �Ogiltig bakÃ¥treferens�Ogiltigt teckenklassnamn�Ogiltigt kollationeringstecken�Ogiltigt innehÃ¥ll i \{\}�Felaktigt tidigare reguljärt uttryck�Ogiltigt intervallslut�Ogiltigt reguljärt uttryck�Minnet är slut�Ingen matchning�Inget tidigare reguljärt uttryck�Ã…tgärder: --check kontrollera integriteten pÃ¥ den angivna filen. Standardfall. --sort sortera posterna i den angivna filen. --auto lägg in automatgenererade fält i poster som saknar dem. �Utskriftsflaggor: -p, --print=FÄLT kommaseparerad lista av fält att skriva ut för varje matchad post. -P, --print-values=FÄLT samma som -p, men skriv endast värdena i de valda fälten. -R, --print-row=FÄLT samma som -P, men dela av värdena med blanktecken istället för nyrader. -c, --count skriv antalet matchade poster istället istället för själva posterna. �Paketerat av %s �Paketerat av %s (%s) �Lösenord igen: �Lösenord: �För tidigt slut pÃ¥ reguljärt uttryck�Skriv ut information om typerna pÃ¥ poster som finns lagrade i indata. �Flaggor för postval: -i, --case-insensitive gör strängar skiftlägseokänsliga i urvalsuttryck. -t, --type=TYP arbeta enbart pÃ¥ poster med angiven typ. -e, --expression=POSTUTTR urvalsuttryck. -q, --quick=STR välj poster med fält som innehÃ¥ller en sträng. -n, --number=NUM,… välj vissa poster efter position, med intervall. -R, --random=ANT välj ett angivet antal med slumpposter. �Reguljärt uttryck är för stort�Ta bort (eller kommentera bort) poster frÃ¥n en rec-fil. �Rapportera %s-fel till: %s �Rapportera fel till: %s Rapportera kommentarer pÃ¥ översättningen till <tp-sv@listor.tp-sv.se>. �Välj och skriv ut rec-data. �Specialflaggor: --print-sexps skriv ut data i sexps- istället för rec-format. �Specialflaggor: -S, --print-sexps skriv ut data i sexps- istället för rec-format. �Gick bra�TZ=â€%s†miljövärde�TZ=â€%s†i datumsträng�TZ=â€UTC0†miljövärde eller -u�Avslutande omvänt snedstreck�Okänt systemfel�Ensam ( eller \(�Ensam ) eller \)�Ensam [, [^, [:, [. eller [=�Ensam \{�Användning: csv2rec [FLAGGOR] … [CSV_FIL] �Användning: mdb2rec [FLAGGOR] … MDB_FIL [TABELL] �Användning: rec2csv [FLAGGOR] … [CSV_FIL] �Användning: recdel [FLAGGOR] … [-t TYP] [-n NUM | -e POSTUTTR | -q STR | -m ANT] [FIL] �Användning: recfix [FLAGGA]… [Ã…TGÄRD] [OP_FLAGGA]… [FIL] �Användning: recfmt [FLAGGA]… [MALL] �Användning: recinf [FLAGGA]… [FIL]… �Användning: recins [FLAGGA]… [-t TYP] [-n NUM | -e POSTUTTR | -q STR | -m ANT] [(-f NAMN -v STR) | -r POSTDATA]… [FIL] �Användning: recsel [FLAGGA]… [-t TYP] [-j FÄLT] [-n INDEX |-e POSTUTTR | -q STR | -m ANT] [-c | (-p|-P) FÄLTUTTR] [FIL]… �Användning: recset [FLAGGA]… [FIL]… �Skrivet av %s och %s. �Skrivet av %s, %s, %s, %s, %s, %s, %s, %s, %s med flera. �Skrivet av %s, %s, %s, %s, %s, %s, %s, %s och %s. �Skrivet av %s, %s, %s, %s, %s, %s, %s och %s. �Skrivet av %s, %s, %s, %s, %s, %s och %s. �Skrivet av %s, %s, %s, %s, %s och %s. �Skrivet av %s, %s, %s, %s och %s. �Skrivet av %s, %s, %s och %s. �Skrivet av %s, %s och %s. �Skrivet av %s. �â€�ett -f skall följas av ett -v �ett -v skall föregÃ¥s av ett -f �kan inte öppna filen %s för läsning. �det gÃ¥r inte att skapa ett unikt namn. �kan inte läsa filen %s �det gÃ¥r inte att ange -[pPR] samtidigt som -c. �det gÃ¥r inte att ange -c samtidigt som -p. �det gÃ¥r inte att ange -e samtidigt som -n �det gÃ¥r inte att ange -e samtidigt som -q �det gÃ¥r inte att ange -m samtidigt som -e �det gÃ¥r inte att ange -m samtidigt som -n �det gÃ¥r inte att ange -m samtidigt som -q �det gÃ¥r inte att ange -n samtidigt som -e �det gÃ¥r inte att ange -n samtidigt som -q �det gick inte att öppna filen %s �när fältuttryck skapades. �datum�datumtid�dag�ange inte en mall pÃ¥ kommandoraden och -f samtidigt. �duplicerad postmängd â€%s†frÃ¥n %s. �fel vid beräkning av uttryck pÃ¥ en mallplats. �fel vid tolkning av CSV-fil: %s �fel vid tolkning av posten som gavs via -r �fel: %s:%d �fel: att lägga till ett relativt datum resulterade i ett felaktigt datum: â€%s†�fel: att lägga till relativ tid orsakade spill �fel: det gÃ¥r inte läsa filen %s �fel: ursprungligt Ã¥r utanför giltigt intervall �fel: ogiltigt datum-/tidvärde: �fel: tolkningen misslyckades �fel: tolkningen misslyckades, avslutades vid â€%s†�fel: tidszon %d orsakade spill i time_t �fel: tzalloc ("%s") misslyckades �fel: okänt ord â€%s†�fel: Ã¥r, mÃ¥nad eller dag spiller över �ett heltal mellan %d och %d förväntades.�det gick inte att initiera csv-tolken �misslyckades att normalisera fältnamnet %s �misslyckades att normalisera posttypnamnet %s �misslyckades att normalisera fältnamnet %s �filen %s är inte skrivbar. �filen verkar inte vara en Access-databas �slutligt: %s (UTC%s) �slutligt: %s (UTC) �slutligt: %s (okänd tidszonsavstÃ¥nd) �hybrid�ignorera en begäran om att ta bort alla poster av typen %s. �felaktig tidszon�inmatad tidszon: �internt fel när fex skapades. �internt fel när fältuttrycket skapades. �internt fel: REC_FEX_MAX_ELEMS överskreds. Rapportera gärna detta. �internt fel: rec-types: fick REC_TYPE_NONE frÃ¥n rec_type_parse_type_kind() i rec_type_new(). �internt fel: rec_int_rec_extract_file: fel vid kompilering av reguljäruttryck. �internt fel: rec_int_rec_extract_url: fel vid kompilering av reguljäruttryck. �internt fel: rec_match: fel vid kompilering av reguljäruttryck. �internt fel: recutl_index_list_parse: fel vid kompilering av reguljäruttryck. �ogiltigt â€boolâ€-värde.�ogiltigt â€fieldâ€-värde.�ogiltigt â€lineâ€-värde.�ogiltigt â€rangeâ€-värde.�ogiltigt â€realâ€-värde.�ogiltigt â€uuidâ€-värde.�felaktig aggregatfunktion â€%s†�ogiltigt datum.�ogiltig e-post.�ogiltigt enum-värde.�ogiltigt uttryck pÃ¥ en mallplats. �ogiltigt fältuttryck i -f. �ogiltigt fältnamn %s. �ogiltigt fältnamn â€%s†i huvudet �ogiltig fältnamnslista till -S. �ogiltiga fältnamn till -G. �ogiltiga fältnamn till -S. �ogiltigt heltal.�ogiltig fältlista till -%c �ogiltig indexlista till -n �ogiltigt urvalsuttryck �ogiltigt urvalsuttryck. �join kan endast göras när en namngiven postmängd är vald. �lokal zon�minnet slut�saknad tidszon�mer än ett lösenord angavs �nytt startdatum: â€%s†är â€%s†�inga poster av typ %s hittades. �nummer�antal sekunder�endast ett fält kan anges som ett join-kriterium. �endast en fältlista kan anges som ett grupperingskriterium. �endast en fältlista kan anges som ett sorteringskriterium. �endast en lista av fält kan anges som ett sorteringskriterium. �Ã¥tgärden avbruten pÃ¥ grund av integritetsfel. �slut pÃ¥ minne �tolkade %s-delen: �tolkad datum/tid-sträng�ange ett värde för fältet %s �ange ett korrekt fältnamn till -j|--join. �ange bara en Ã¥tgärd. �ange bara en Ã¥tgärd. �ange bara ett lösenord. �ange nÃ¥got fält med -f. �använd --force eller --decrypt �bevarar rättigheter för %s�recfmt_apply_template: fel vid kompilering av reguljäruttryck. Vänligen rapportera det här. �relativ�döper om filen %s till %s �sätter rättigheter för %s�flera posttyper hittades. Använd -t för att ange en. �startdatum/-tid: â€%s†�systemstandard�databasen innehÃ¥ller redan krypterade fält �de givna lösenorden stämmer inte överens. �Ã¥tgärden namnbyte tar endast ett fält med ett eventuellt index. �den angivna Ã¥tgärden behöver inte nÃ¥got lösenord. �tid�Tidszon: TZ="%s" miljövärde �tidszon: universell tid �tidszon: systemstandard �idag/dennes/nu �okänd Ã¥tgärd i recfix: rapportera gärna detta som ett fel. �använd --force om du verkligen vill fortsätta, eller använda antingen -n eller -e. �använd --force för att hoppa över integritetskontrollen. �använd --verbose för att fÃ¥ en detaljerad rapport. �använder aktuellt datum som startvärde: â€%s†�använder aktuell tid som startvärde: â€%s†�använder angiven tid som startvärde: â€%s†�värdet stämmer inte med reguljäruttryck.�för stort värde. En storlek ≤ %zu förväntades.�varning: dag (%s) ignoreras när explicita datum anges �varning: sommartid ändrades efter datumjusteringen �varning: sommartid ändrades efter tidsjusteringen �varning: mÃ¥nads-/Ã¥rsjusteringen resulterade i skiftade datum: �varning: när relativa dagar läggs till rekommenderas det att ange middagstid �varning: när relativa mÃ¥nader/Ã¥r läggs till rekommenderas det att ange den 15:e i mÃ¥naden �skrivfel�zon�PRIdMAX�year: %04�%s (day ordinal=% number=%d)�number of seconds: %�warning: value % has % digits. Assuming YYYY/MM/DD �warning: value % has less than 4 digits. Assuming MM/DD/YY[YY] �warning: adjusting year value % to % �error: out-of-range year % �error: invalid hour %%s �error: day '%s' (day ordinal=% number=%d) resulted in an invalid date: '%s' �after date adjustment (%+ years, %+ months, %+ days), �'%s' = % epoch-seconds �after time adjustment (%+ hours, %+ minutes, %+ seconds, %+d ns), � new time = % epoch-seconds �final: %.%09d (epoch-seconds) �Ã¥r: %04�%s (Ã¥rsdag=% nummer=%d)�antal sekunder: %�varning: värdet % har % siffor. Antar Ã…Ã…Ã…Ã…/MM/DD �varning: värdet % har mindre än 4 siffror. Antar MM/DD/Ã…Ã…[Ã…Ã…] �varning: justerar Ã¥rsvärdet % till % �fel: Ã¥rtal utanför intervallet % �fel: felaktig timma %%s �fel: dag â€%s†(Ã¥rsdag=% nummer=%d) resulterade i ett felaktigt datum: â€%s†�efter datumjustering (%+ Ã¥r, %+ mÃ¥nader, %+ dagar), �â€%s†= % epoksekunder �efter tidsjustering (%+ timmar, %+ minuter, %+ sekunder, %+d ns), � ny tid = % epoksekunder �slutligt: %.%09d (epoksekunder) ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/LINGUAS�����������������������������������������������������������������������������0000644�0000000�0000000�00000000041�14226573007�011550� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������de es fi fr nl pt_BR sr sv uk vi �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/fr.po�������������������������������������������������������������������������������0000644�0000000�0000000�00000205062�14226577415�011513� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Translation of recutils to French. # Copyright (C) 2019 Free Software Foundation, Inc. # This file is distributed under the same license as the recutils package. # Je ne désire pas continuer cette traduction. Quiconque voudrait continuer # la traduction est le bienvenu. # # Frédéric Marchal <fmarchal@perso.be>, 2019. msgid "" msgstr "" "Project-Id-Version: GNU recutils 1.8\n" "Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" "POT-Creation-Date: 2022-04-16 19:38+0200\n" "PO-Revision-Date: 2019-01-06 17:05+0100\n" "Last-Translator: Frédéric Marchal <fmarchal@perso.be>\n" "Language-Team: French <traduc@traduc.org>\n" "Language: fr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "Plural-Forms: nplurals=2; plural=(n >= 2);\n" #: lib/closeout.c:122 msgid "write error" msgstr "Erreur d'écriture" #: lib/copy-acl.c:54 lib/copy-file.c:215 #, c-format msgid "preserving permissions for %s" msgstr "préservation des permissions pour %s" #: lib/copy-file.c:192 #, fuzzy, c-format msgid "error while opening %s for reading" msgstr "le fichier %s n'a pas pu être ouvert en lecture.\n" #: lib/copy-file.c:196 #, fuzzy, c-format msgid "cannot open backup file %s for writing" msgstr "le fichier %s n'a pas pu être ouvert en lecture.\n" #: lib/copy-file.c:200 #, fuzzy, c-format msgid "error reading %s" msgstr "erreur: impossible de lire le fichier %s\n" #: lib/copy-file.c:204 #, c-format msgid "error writing %s" msgstr "" #: lib/copy-file.c:208 #, fuzzy, c-format msgid "error after reading %s" msgstr "erreur: impossible de lire le fichier %s\n" #: lib/error.c:195 msgid "Unknown system error" msgstr "Erreur système inconnue" #: lib/execute.c:348 lib/wait-process.c:291 lib/wait-process.c:365 #, c-format msgid "%s subprocess failed" msgstr "Le sous-processus %s a échoué" #: lib/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: l'option « %s%s » est ambiguë\n" #: lib/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: l'option « %s%s » est ambiguë; les possibilités sont:" #: lib/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: option « %s%s » pas reconnue\n" #: lib/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: l'option « %s%s » n'accepte pas d'argument\n" #: lib/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: l'option « %s%s » exige un argument\n" #: lib/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: option invalide -- « %c »\n" #: lib/getopt.c:636 lib/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: l'option exige un argument -- « %c »\n" #: lib/obstack.c:337 lib/obstack.c:339 lib/xalloc-die.c:34 msgid "memory exhausted" msgstr "mémoire épuisée" #: lib/openat-die.c:38 #, c-format msgid "unable to record current working directory" msgstr "" #: lib/openat-die.c:57 #, c-format msgid "failed to return to initial working directory" msgstr "" #: parse-datetime.y:440 parse-datetime.y:540 #, c-format msgid "parsed %s part: " msgstr "partie %s analysée: " #: parse-datetime.y:455 #, c-format msgid "year: %04<PRIdMAX>" msgstr "année: %04<PRIdMAX>" #: parse-datetime.y:483 #, c-format msgid "%s (day ordinal=%<PRIdMAX> number=%d)" msgstr "%s (jour ordinal=%<PRIdMAX> numéro=%d)" #: parse-datetime.y:514 #, c-format msgid "number of seconds: %<PRIdMAX>" msgstr "nombre de secondes: %<PRIdMAX>" # Je ne comprend pas l'usage de cette chaîne dans le code source. Elle semble utilisée comme indicateur en mode debug sur stderr. # Il n'est pas certain qu'elle aurait dû être traduite mais puisque le développeur en a décidé ainsi… #: parse-datetime.y:547 msgid "today/this/now\n" msgstr "aujourd'hui/ce/maintenant\n" #: parse-datetime.y:612 msgid "number of seconds" msgstr "nombre de secondes" #: parse-datetime.y:625 msgid "datetime" msgstr "horodatage" #: parse-datetime.y:630 msgid "time" msgstr "temps" #: parse-datetime.y:635 msgid "local_zone" msgstr "zone_locale" #: parse-datetime.y:640 msgid "zone" msgstr "zone" #: parse-datetime.y:645 msgid "date" msgstr "date" #: parse-datetime.y:650 msgid "day" msgstr "jour" #: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 msgid "relative" msgstr "relative" #: parse-datetime.y:658 msgid "number" msgstr "numéro" #: parse-datetime.y:662 msgid "hybrid" msgstr "hybride" #: parse-datetime.y:820 #, c-format msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" msgstr "" "attention: la valeur %<PRIdMAX> a %<PRIdMAX> chiffres. On suppose AAAA/MM/" "JJ\n" #: parse-datetime.y:832 #, c-format msgid "" "warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" msgstr "" "attention: la valeur %<PRIdMAX> a moins de 4 chiffres. On suppose MM/JJ/" "AA[AA]\n" #: parse-datetime.y:1279 #, c-format msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" msgstr "" "attention: ajustement de la valeur de l'année %<PRIdMAX> en %<PRIdMAX>\n" #: parse-datetime.y:1289 #, c-format msgid "error: out-of-range year %<PRIdMAX>\n" msgstr "erreur: année %<PRIdMAX> hors limites\n" #: parse-datetime.y:1520 #, c-format msgid "error: unknown word '%s'\n" msgstr "erreur: mot « %s » inconnu\n" #: parse-datetime.y:1669 msgid "error: invalid date/time value:\n" msgstr "erreur: valeur date/temps invalide:\n" #: parse-datetime.y:1670 #, c-format msgid " user provided time: '%s'\n" msgstr " temps fourni par l'utilisateur: « %s »\n" #: parse-datetime.y:1672 #, c-format msgid " normalized time: '%s'\n" msgstr " temps normalisé: « %s »\n" #: parse-datetime.y:1695 msgid " possible reasons:\n" msgstr " raisons possibles:\n" #: parse-datetime.y:1697 msgid " non-existing due to daylight-saving time;\n" msgstr " inexistant à cause du changement d'heure été/hiver;\n" #: parse-datetime.y:1699 msgid " invalid day/month combination;\n" msgstr " combinaison jour/mois invalide;\n" #: parse-datetime.y:1700 msgid " numeric values overflow;\n" msgstr " débordement des valeur numériques;\n" #: parse-datetime.y:1701 msgid "incorrect timezone" msgstr "fuseau horaire incorrect" #: parse-datetime.y:1702 msgid "missing timezone" msgstr "fuseau horaire manquant" #: parse-datetime.y:1810 msgid "error: initial year out of range\n" msgstr "erreur: année de départ hors limites\n" #: parse-datetime.y:1905 msgid "error: parsing failed\n" msgstr "erreur: l'analyse a échoué\n" #: parse-datetime.y:1906 #, c-format msgid "error: parsing failed, stopped at '%s'\n" msgstr "erreur: l'analyse a échoué, arrêt à « %s »\n" #: parse-datetime.y:1916 msgid "input timezone: " msgstr "entrée fuseau horaire: " #: parse-datetime.y:1919 #, c-format msgid "'@timespec' - always UTC" msgstr "« @timespec » – toujours UTC" #: parse-datetime.y:1921 #, c-format msgid "parsed date/time string" msgstr "chaîne date/temps analysée" # Message de debug: volontairement court #: parse-datetime.y:1925 #, c-format msgid "TZ=\"%s\" in date string" msgstr "TZ=\"%s\" dans la chaîne de date" # Message de debug: volontairement court #: parse-datetime.y:1929 #, c-format msgid "TZ=\"UTC0\" environment value or -u" msgstr "TZ=\"UTC0\" valeur d'environnement ou -u" # Message de debug: volontairement court #: parse-datetime.y:1932 #, c-format msgid "TZ=\"%s\" environment value" msgstr "TZ=\"%s\" valeur d'environnement" # Message de debug: difficile de faire plus court en gardant le même sens #: parse-datetime.y:1935 #, c-format msgid "system default" msgstr "valeur par défaut du système" #: parse-datetime.y:1977 msgid "error: year, month, or day overflow\n" msgstr "erreur: débordement de l'année, du mois ou du jour\n" # %s est soit AM soit PM #: parse-datetime.y:1988 #, c-format msgid "error: invalid hour %<PRIdMAX>%s\n" msgstr "erreur: heure %<PRIdMAX>%s invalide\n" #: parse-datetime.y:1996 #, c-format msgid "using specified time as starting value: '%s'\n" msgstr "utilisation du temps spécifié comme valeur de départ: « %s »\n" #: parse-datetime.y:1997 #, c-format msgid "using current time as starting value: '%s'\n" msgstr "utilisation du temps actuel comme point de départ: « %s »\n" # %s est le contenu du tampon passé à tzalloc d'où les guillemets du code source #: parse-datetime.y:2051 #, c-format msgid "error: tzalloc (\"%s\") failed\n" msgstr "erreur: échec de tzalloc (\"%s\")\n" #: parse-datetime.y:2095 #, c-format msgid "" "error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " "date: '%s'\n" msgstr "" "erreur: le jour « %s » (jour ordinal=%<PRIdMAX> numéro=%d) a résulté en une " "date invalide: « %s »\n" #: parse-datetime.y:2106 #, c-format msgid "new start date: '%s' is '%s'\n" msgstr "nouvelle date de départ: « %s » est « %s »\n" #: parse-datetime.y:2115 #, c-format msgid "using current date as starting value: '%s'\n" msgstr "utilisation de la date courante comme valeur de départ: « %s »\n" #: parse-datetime.y:2119 #, c-format msgid "warning: day (%s) ignored when explicit dates are given\n" msgstr "" "attention: le jour (%s) est ignoré quand des dates explicites sont fournies\n" #: parse-datetime.y:2123 #, c-format msgid "starting date/time: '%s'\n" msgstr "date/heure de départ: « %s »\n" #: parse-datetime.y:2133 msgid "" "warning: when adding relative months/years, it is recommended to specify the " "15th of the months\n" msgstr "" "attention: lors de l'ajout d'années/mois relatifs, il est recommandé de " "spécifier le 15 du mois\n" #: parse-datetime.y:2138 msgid "warning: when adding relative days, it is recommended to specify noon\n" msgstr "" "attention: lors de l'ajout de jours relatifs, il est recommandé de spécifier " "midi\n" #: parse-datetime.y:2148 #, c-format msgid "error: %s:%d\n" msgstr "erreur: %s:%d\n" #: parse-datetime.y:2163 #, c-format msgid "error: adding relative date resulted in an invalid date: '%s'\n" msgstr "" "erreur: l'ajout d'une date relative a produit une date invalide: « %s »\n" #: parse-datetime.y:2172 #, c-format msgid "" "after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " "days),\n" msgstr "" "après l'ajustement de la date (%+<PRIdMAX> années, %+<PRIdMAX> mois, " "%+<PRIdMAX> jours),\n" #: parse-datetime.y:2176 #, c-format msgid " new date/time = '%s'\n" msgstr " nouvelle date/temps = « %s »\n" #: parse-datetime.y:2195 msgid "warning: daylight saving time changed after date adjustment\n" msgstr "" "attention: l'heure été/hiver a été changée après l'ajustement de la date\n" #: parse-datetime.y:2214 msgid "warning: month/year adjustment resulted in shifted dates:\n" msgstr "" "attention: l'ajustement du mois/année a résulté en des dates décalées:\n" #: parse-datetime.y:2217 #, c-format msgid " adjusted Y M D: %s %02d %02d\n" msgstr " ajusté A M J: %s %02d %02d\n" #: parse-datetime.y:2219 #, c-format msgid " normalized Y M D: %s %02d %02d\n" msgstr " normalisé A M J: %s %02d %02d\n" #: parse-datetime.y:2248 #, c-format msgid "error: timezone %d caused time_t overflow\n" msgstr "erreur: le fuseau horaire %d a causé un débordement de time_t\n" #: parse-datetime.y:2258 #, c-format msgid "'%s' = %<PRIdMAX> epoch-seconds\n" msgstr "« %s » = %<PRIdMAX> secondes-époque\n" #: parse-datetime.y:2286 msgid "error: adding relative time caused an overflow\n" msgstr "erreur: l'ajout d'un temps relatif a provoqué un débordement\n" #: parse-datetime.y:2297 #, c-format msgid "" "after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " "seconds, %+d ns),\n" msgstr "" "après l'ajustement du temps (%+<PRIdMAX> heures, %+<PRIdMAX> minutes, " "%+<PRIdMAX> secondes, %+d ns),\n" #: parse-datetime.y:2303 #, c-format msgid " new time = %<PRIdMAX> epoch-seconds\n" msgstr " nouveau temps = %<PRIdMAX> secondes-époque\n" #: parse-datetime.y:2319 msgid "warning: daylight saving time changed after time adjustment\n" msgstr "attention: l'heure été/hiver a changé le temps après l'ajustement\n" #: parse-datetime.y:2329 msgid "timezone: system default\n" msgstr "fuseau horaire: valeur par défaut du système\n" #: parse-datetime.y:2331 msgid "timezone: Universal Time\n" msgstr "fuseau horaire: Temps Universel\n" #: parse-datetime.y:2333 #, c-format msgid "timezone: TZ=\"%s\" environment value\n" msgstr "fuseau horaire: TZ=\"%s\" valeur d'environnement\n" #: parse-datetime.y:2337 #, c-format msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" msgstr "final: %<PRIdMAX>.%09d (secondes-époque)\n" #: parse-datetime.y:2343 #, c-format msgid "final: %s (UTC)\n" msgstr "final: %s (UTC)\n" #: parse-datetime.y:2358 #, c-format msgid "final: %s (UTC%s)\n" msgstr "final: %s (UTC%s)\n" #: parse-datetime.y:2362 #, c-format msgid "final: %s (unknown time zone offset)\n" msgstr "final: %s (décalage de fuseau horaire inconnu)\n" #. TRANSLATORS: #. Get translations for open and closing quotation marks. #. The message catalog should translate "`" to a left #. quotation mark suitable for the locale, and similarly for #. "'". For example, a French Unicode local should translate #. these to U+00AB (LEFT-POINTING DOUBLE ANGLE #. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE #. QUOTATION MARK), respectively. #. #. If the catalog has no translation, we will try to #. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and #. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the #. current locale is not Unicode, locale_quoting_style #. will quote 'like this', and clocale_quoting_style will #. quote "like this". You should always include translations #. for "`" and "'" even if U+2018 and U+2019 are appropriate #. for your locale. #. #. If you don't know what to put here, please see #. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> #. and use glyphs suitable for your language. #: lib/quotearg.c:355 msgid "`" msgstr "« " #: lib/quotearg.c:356 msgid "'" msgstr " »" #: lib/regcomp.c:122 msgid "Success" msgstr "Succès" #: lib/regcomp.c:125 msgid "No match" msgstr "Aucune correspondance" #: lib/regcomp.c:128 msgid "Invalid regular expression" msgstr "Expression régulière invalide" #: lib/regcomp.c:131 msgid "Invalid collation character" msgstr "Caractère d'interclassement invalide" #: lib/regcomp.c:134 msgid "Invalid character class name" msgstr "Nom de classe de caractère invalide" #: lib/regcomp.c:137 msgid "Trailing backslash" msgstr "Barre oblique inverse à la fin" #: lib/regcomp.c:140 msgid "Invalid back reference" msgstr "Référence arrière invalide" #: lib/regcomp.c:143 msgid "Unmatched [, [^, [:, [., or [=" msgstr "[, [^, [:, [. ou [= sans correspondant" #: lib/regcomp.c:146 msgid "Unmatched ( or \\(" msgstr "( ou \\( sans correspondant" #: lib/regcomp.c:149 msgid "Unmatched \\{" msgstr "\\{ sans correspondant" #: lib/regcomp.c:152 msgid "Invalid content of \\{\\}" msgstr "Contenu de \\{\\} invalide" #: lib/regcomp.c:155 msgid "Invalid range end" msgstr "Fin de plage invalide" #: lib/regcomp.c:158 msgid "Memory exhausted" msgstr "Mémoire épuisée" #: lib/regcomp.c:161 msgid "Invalid preceding regular expression" msgstr "Expression régulière précédente invalide" #: lib/regcomp.c:164 msgid "Premature end of regular expression" msgstr "Fin prématurée de l'expression régulière" #: lib/regcomp.c:167 msgid "Regular expression too big" msgstr "Expression régulière trop grande" #: lib/regcomp.c:170 msgid "Unmatched ) or \\)" msgstr ") ou \\) sans correspondant" #: lib/regcomp.c:650 msgid "No previous regular expression" msgstr "Pas d'expression régulière précédente" #: lib/set-acl.c:46 #, c-format msgid "setting permissions for %s" msgstr "défini les permissions pour %s" #: lib/version-etc.c:73 #, c-format msgid "Packaged by %s (%s)\n" msgstr "Préparé par %s (%s)\n" #: lib/version-etc.c:76 #, c-format msgid "Packaged by %s\n" msgstr "Préparé par %s\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: lib/version-etc.c:83 msgid "(C)" msgstr "©" #. TRANSLATORS: The %s placeholder is the web address of the GPL license. #: lib/version-etc.c:88 #, fuzzy, c-format msgid "" "License GPLv3+: GNU GPL version 3 or later <%s>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "\n" "License GPLv3+: GNU GPL version 3 ou supérieure <https://www.gnu.org/" "licenses/gpl-3.0.fr.html>.\n" "Ceci est un logiciel libre: vous êtes libre de le changer et de le " "redistribuer.\n" "Il n'y a PAS de GARANTIE, dans les limites permises par la loi.\n" "\n" #. TRANSLATORS: %s denotes an author name. #: lib/version-etc.c:105 #, c-format msgid "Written by %s.\n" msgstr "Écrit par %s.\n" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:109 #, c-format msgid "Written by %s and %s.\n" msgstr "Écrit par %s et %s.\n" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:113 #, c-format msgid "Written by %s, %s, and %s.\n" msgstr "Écrit par %s, %s et %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:120 #, c-format msgid "" "Written by %s, %s, %s,\n" "and %s.\n" msgstr "" "Écrit par %s, %s, %s\n" "et %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:127 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, and %s.\n" msgstr "" "Écrit par %s, %s, %s,\n" "%s et %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:134 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, and %s.\n" msgstr "" "Écrit par %s, %s, %s,\n" "%s, %s et %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:142 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, and %s.\n" msgstr "" "Écrit par %s, %s, %s,\n" "%s, %s, %s et %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:150 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "and %s.\n" msgstr "" "Écrit par %s, %s, %s,\n" "%s, %s, %s, %s\n" "et %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:159 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, and %s.\n" msgstr "" "Écrit par %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s et %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:170 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s, and others.\n" msgstr "" "Écrit par %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s et d'autres.\n" #. TRANSLATORS: The placeholder indicates the bug-reporting address #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for translation #. bugs (typically your translation team's web or email address). #. TRANSLATORS: --help output 5+ (reports) #. TRANSLATORS: the placeholder indicates the bug-reporting address #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap #: lib/version-etc.c:249 utils/recutl.c:114 #, c-format msgid "Report bugs to: %s\n" msgstr "" "Signalez les bugs à: %s\n" "Signalez les erreurs de traduction à: traduc@traduc.org\n" #: lib/version-etc.c:251 utils/recutl.c:117 #, c-format msgid "Report %s bugs to: %s\n" msgstr "Rapportez les bogues de %s à: %s\n" #: lib/version-etc.c:255 lib/version-etc.c:257 utils/recutl.c:121 #, c-format msgid "%s home page: <%s>\n" msgstr "Page d'accueil de %s: <%s>\n" #: lib/version-etc.c:260 #, fuzzy, c-format msgid "General help using GNU software: <%s>\n" msgstr "" "Aide générale sur l'utilisation des logiciels GNU: <https://www.gnu.org/" "software/gethelp.fr.html>\n" #: lib/wait-process.c:232 lib/wait-process.c:264 lib/wait-process.c:326 #, c-format msgid "%s subprocess" msgstr "sous-processus %s" #: lib/wait-process.c:283 lib/wait-process.c:355 #, c-format msgid "%s subprocess got fatal signal %d" msgstr "le sous-processus %s a reçu le signal fatal %d" #: src/rec-fex.c:726 #, c-format msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" msgstr "erreur interne: REC_FEX_MAX_ELEMS dépassé. Merci de rapporter ceci.\n" #: src/rec-int.c:132 src/rec-int.c:186 src/rec-int.c:243 src/rec-int.c:287 #: utils/recutl.c:199 msgid "out of memory\n" msgstr "à cours de mémoire\n" #: src/rec-int.c:147 #, c-format msgid "%s:%s: error: mandatory field '%s' not found in record\n" msgstr "" "%s:%s: erreur: champ obligatoire « %s » pas trouvé dans l'enregistrement\n" #: src/rec-int.c:210 #, c-format msgid "%s:%s: error: field '%s' not allowed in this record set\n" msgstr "" "%s:%s: erreur: le champ « %s » n'est pas permis dans cet ensemble " "d'enregistrements\n" #: src/rec-int.c:257 #, c-format msgid "%s:%s: error: field '%s' should be unique in this record\n" msgstr "" "%s:%s: erreur: le champ « %s » devrait être unique dans cet enregistrement\n" #: src/rec-int.c:301 #, c-format msgid "%s:%s: error: prohibited field '%s' found in record\n" msgstr "%s:%s erreur: champ prohibé « %s » rencontré dans l'enregistrement\n" #: src/rec-int.c:333 #, c-format msgid "%s:%s: error: %%constraint[%d] violated in record\n" msgstr "%s:%s: erreur: %%constraint[%d] violée dans l'enregistrement\n" #: src/rec-int.c:370 #, c-format msgid "%s:%s: error: confidential field is not encrypted\n" msgstr "%s:%s: erreur: le champ confidentiel n'est pas chiffré\n" #: src/rec-int.c:422 #, c-format msgid "%s:%s: error: key field '%s' not found in record\n" msgstr "" "%s:%s: erreur: le champ clé « %s » n'est pas trouvé dans l'enregistrement\n" #: src/rec-int.c:431 #, c-format msgid "%s:%s: error: multiple key fields '%s' in record\n" msgstr "%s:%s: erreur: plusieurs champs clé « %s » dans l'enregistrement\n" #: src/rec-int.c:474 #, c-format msgid "%s:%s: error: duplicated key value in field '%s' in record\n" msgstr "" "%s:%s: erreur: valeur de clé en double dans le champ « %s » de " "l'enregistrement\n" #: src/rec-int.c:562 #, fuzzy, c-format msgid "%s:%s: error: duplicated value in singular field '%s' in record\n" msgstr "" "%s:%s: erreur: valeur de clé en double dans le champ « %s » de " "l'enregistrement\n" #: src/rec-int.c:620 #, c-format msgid "%s:%s: error: missing %%rec field in record descriptor\n" msgstr "" "%s:%s: erreur: champ %%rec manquant dans le descripteur de l'enregistrement\n" #: src/rec-int.c:628 #, c-format msgid "%s:%s: error: too many %%rec fields in record descriptor\n" msgstr "" "%s:%s: erreur: trop de champs %%rec dans le descripteur d'enregistrement\n" #: src/rec-int.c:638 #, c-format msgid "%s:%s: error: invalid record type %s\n" msgstr "%s:%s: erreur: type d'enregistrement %s invalide\n" #: src/rec-int.c:649 #, c-format msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" msgstr "" "%s:%s: erreur: un seul champ %%key permis dans le descripteur " "d'enregistrement\n" #: src/rec-int.c:659 #, c-format msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" msgstr "" "%s:%s: erreur: un seul champ %%size permis dans le descripteur " "d'enregistrement\n" #: src/rec-int.c:669 #, c-format msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" msgstr "" "%s:%s: erreur: un seul champ %%sort permis dans le descripteur " "d'enregistrement\n" #: src/rec-int.c:692 #, c-format msgid "" "%s:%s: error: expected a comma-separated list of fields before the type " "specification\n" msgstr "" "%s:%s: erreur: une liste de champs délimités par des virgules est attendue " "devant la spécification de type\n" #: src/rec-int.c:718 src/rec-int.c:771 #, c-format msgid "%s:%s: error: the referred type %s does not exist\n" msgstr "%s:%s: erreur: le type référé %s n'existe pas\n" #: src/rec-int.c:730 #, c-format msgid "%s:%s: error: invalid type specification\n" msgstr "%s:%s: erreur: spécification type invalide\n" #: src/rec-int.c:745 #, c-format msgid "%s:%s: error: expected a type name before the type specification\n" msgstr "" "%s:%s: erreur: un nom de type est attendu avant la spécification du type\n" #: src/rec-int.c:783 #, c-format msgid "%s:%s: error: invalid typedef specification\n" msgstr "%s:%s: erreur: spécification typedef invalide\n" #: src/rec-int.c:805 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" msgstr "" "%s:%s: erreur: la valeur de %s[%zd] n'est pas une expression de sélection " "valide\n" #: src/rec-int.c:836 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" msgstr "" "%s:%s: erreur: la valeur de %s[%zd] n'est pas une liste de noms de champs\n" #: src/rec-int.c:849 #, c-format msgid "" "%s:%s: error: value for %s should be a number optionally preceded by >, <, " ">= or <=.\n" msgstr "" "%s:%s: erreur: la valeur de %s devrait être un nombre facultatif précédé de " ">, <, >= ou <=.\n" #: src/rec-int.c:865 #, c-format msgid "%s:%s: error: value for %s should be a list of field names.\n" msgstr "" "%s:%s: erreur: la valeur de %s devrait être une liste de noms de champs.\n" #: src/rec-int.c:893 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range, uuid " "or date\n" msgstr "" "%s:%s: erreur: le champ auto-incrémenté %s devrait être de type entier, " "plage, uuid ou date\n" #: src/rec-int.c:895 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range or " "date\n" msgstr "" "%s:%s: erreur: le champ auto-incrémenté %s devrait être de type entier, " "plage ou date\n" #: src/rec-int.c:978 #, c-format msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" msgstr "" "%s:%s: erreur: le descripteur distant n'a pas pu être récupéré depuis l'URL " "%s.\n" #: src/rec-int.c:997 #, c-format msgid "%s:%s: error: could not read external descriptor from file %s.\n" msgstr "" "%s:%s: erreur: le descripteur externe n'a pas pu être lu depuis le fichier " "%s.\n" #: src/rec-int.c:1012 #, c-format msgid "%s:%s: error: %s does not contain valid rec data.\n" msgstr "" "%s:%s: erreur: %s ne contient aucune donnée d'enregistrement valable.\n" #: src/rec-int.c:1026 #, c-format msgid "%s:%s: error: %s does not contain information for type %s.\n" msgstr "%s:%s: erreur: %s ne contient aucune information pour le type %s.\n" #: src/rec-int.c:1150 #, c-format msgid "%s: error: the number of records of type %s should be %zd.\n" msgstr "%s: erreur: le nombre d'enregistrements de type %s devrait être %zd.\n" #: src/rec-int.c:1160 #, c-format msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" msgstr "" "%s: erreur: trop d'enregistrements de type %s. Le maximum permis est %zd.\n" #: src/rec-int.c:1167 #, c-format msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" msgstr "" "%s: erreur: trop peu d'enregistrements de type %s. Le minimum permis est " "%zd.\n" #: src/rec-types.c:304 msgid "invalid integer." msgstr "entier invalide." #: src/rec-types.c:332 msgid "invalid 'field' value." msgstr "valeur « field » invalide." #: src/rec-types.c:353 msgid "invalid 'uuid' value." msgstr "valeur « uuid » invalide." #: src/rec-types.c:369 msgid "invalid 'bool' value." msgstr "valeur « bool » invalide." #: src/rec-types.c:390 msgid "invalid 'range' value." msgstr "valeur « range » invalide." #: src/rec-types.c:399 #, c-format msgid "expected an integer between %d and %d." msgstr "entier entre %d et %d attendu." #: src/rec-types.c:419 msgid "invalid 'real' value." msgstr "valeur « real » invalide." #: src/rec-types.c:436 #, c-format msgid "value too large. Expected a size <= %zu." msgstr "valeur trop grande. Taille attendue <= %zu." #: src/rec-types.c:456 msgid "invalid 'line' value." msgstr "valeur « ligne » attendue." #: src/rec-types.c:473 msgid "value does not match the regexp." msgstr "valeur ne correspond pas à l'expression régulière." #: src/rec-types.c:492 msgid "invalid date." msgstr "date invalide." #: src/rec-types.c:506 msgid "invalid email." msgstr "email invalide." #: src/rec-types.c:547 msgid "invalid enum value." msgstr "valeur énumérée invalide." #: src/rec-types.c:898 #, c-format msgid "" "internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " "in rec_type_new().\n" msgstr "" "erreur interne: rec-types: REC_TYPE_NONE reçu de rec_type_parse_type_kind() " "dans rec_type_new().\n" #: src/rec-utils.c:86 #, c-format msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" msgstr "" "erreur interne: rec_int_rec_extract_file: erreur à la compilation de la " "regexp.\n" #: src/rec-utils.c:116 src/rec-utils.c:147 #, c-format msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" msgstr "" "erreur interne: rec_int_rec_extract_url: erreur à la compilation de la " "regexp.\n" #: src/rec-utils.c:290 #, c-format msgid "internal error: rec_match: error compiling regexp.\n" msgstr "erreur interne: rec_match: erreur à la compilation de la regexp.\n" #. TRANSLATORS: --help output, csv2rec synopsis. #. no-wrap #: utils/csv2rec.c:98 #, c-format msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" msgstr "Usage: csv2rec [OPTIONS]… [FICHIER_CSV]\n" #. TRANSLATORS: --help output, csv2rec short description. #. no-wrap #: utils/csv2rec.c:103 msgid "Convert csv data into rec data.\n" msgstr "Convertit les données csv en des données d'enregistrement.\n" #. TRANSLATORS: --help output, csv2rec options. #. no-wrap #: utils/csv2rec.c:109 #, fuzzy msgid "" " -t, --type=TYPE type name for the converted records; " "if this\n" " parameter is omitted then no type is " "used.\n" " -s, --strict be strict parsing the csv file.\n" " -e, --omit-empty omit empty fields.\n" msgstr "" " -t, --type=TYPE nom de type pour les enregistrements " "convertis; aucun type n'est utilisé\n" " si ce paramètre est omis.\n" " -s, --strict analyser le fichier csv de manière " "stricte.\n" " -e, --omit-empty omettre les champs vides.\n" #: utils/csv2rec.c:212 #, c-format msgid "invalid field name '%s' in header\n" msgstr "nom de champ « %s » invalide dans l'en-tête\n" #: utils/csv2rec.c:221 #, fuzzy msgid "error while parsing CSV file: too many columns in row\n" msgstr "erreur lors de l'analyse du fichier CSV: %s\n" #: utils/csv2rec.c:241 #, c-format msgid "" "%s: %lu: this line contains %lu fields, but %lu header fields were read\n" msgstr "" "%s: %lu: cette ligne contient %lu champs mais %lu champs d'en-têtes ont été " "lus\n" #: utils/csv2rec.c:331 utils/recdel.c:233 utils/recset.c:306 utils/recutl.c:317 #, c-format msgid "cannot read file %s\n" msgstr "impossible de lire le fichier %s\n" #: utils/csv2rec.c:338 msgid "failed to initialize csv parser\n" msgstr "échec à l'initialisation de l'analyseur csv\n" #: utils/csv2rec.c:355 #, c-format msgid "error while parsing CSV file: %s\n" msgstr "erreur lors de l'analyse du fichier CSV: %s\n" #. TRANSLATORS: --help output, mdb2rec synopsis. #. no-wrap #: utils/mdb2rec.c:97 #, c-format msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" msgstr "Usage mdb2rec [OPTIONS]… FICHIER_MDB [TABLE]\n" #. TRANSLATORS: --help output, mdb2rec short description. #. no-wrap #: utils/mdb2rec.c:102 msgid "Convert an mdb file into a rec file.\n" msgstr "Convertit un fichier mdb en un fichier d'enregistrements.\n" #. TRANSLATORS: --help output, mdb2rec options. #. no-wrap #: utils/mdb2rec.c:108 msgid "" " -s, --system-tables include system tables.\n" " -e, --keep-empty-fields don't prune empty fields in the rec\n" " output.\n" " -l, --list-tables dump a list of the table names " "contained\n" " in the mdb file.\n" msgstr "" " -s, --system-tables inclure les tables systèmes.\n" " -e, --keep-empty-fields garder les champs vides dans la " "sortie\n" " des enregistrements.\n" " -l, --list-tables afficher une liste des noms des " "tables\n" " contenues dans le fichier mdb.\n" #: utils/mdb2rec.c:230 utils/mdb2rec.c:288 #, c-format msgid "failed to normalise record type name %s\n" msgstr "erreur lors de la normalisation du nom de type d'enregistrement %s\n" #: utils/mdb2rec.c:236 utils/mdb2rec.c:245 #, c-format msgid "failed to normalise field name %s\n" msgstr "erreur lors de la normalisation du nom du champ %s\n" #: utils/mdb2rec.c:307 #, c-format msgid "failed to normalise the field name %s\n" msgstr "erreur lors de la normalisation du nom du champ %s\n" #: utils/mdb2rec.c:396 utils/recins.c:191 utils/recset.c:223 #, c-format msgid "invalid field name %s.\n" msgstr "nom de champ %s invalide.\n" #: utils/mdb2rec.c:436 #, c-format msgid "could not open file %s\n" msgstr "le fichier %s n'a pas pu être ouvert\n" #: utils/mdb2rec.c:441 msgid "file does not appear to be an Access database\n" msgstr "le fichier ne semble pas être une base de données Access\n" #. TRANSLATORS: --help output, rec2csv synopsis. #. no-wrap #: utils/rec2csv.c:70 #, c-format msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" msgstr "Usage: rec2csv [OPTIONS]… [FICHIER_ENRG]\n" #. TRANSLATORS: --help output, rec2csv short description. #. no-wrap #: utils/rec2csv.c:75 msgid "Convert rec data into csv data.\n" msgstr "Convertit les données enrg en données csv.\n" #. TRANSLATORS: --help output, rec2csv options. #. no-wrap #: utils/rec2csv.c:81 msgid "" " -d, --delim=char sets the deliminator (default ',')\n" " -t, --type=TYPE record set to convert to csv; if this " "parameter\n" " is omitted then the default record " "set is used\n" " -S, --sort=FIELDS sort the output by the specified " "fields.\n" msgstr "" " -d, --delim=CARACT change le délimiteur (« , » par " "défaut)\n" " -t, --type=TYPE ensemble d'enregistrements à convertir " "en csv; l'ensemble d'enregistrements\n" " par défaut est utilisé si ce " "paramètre est omis\n" " -S, --sort=CHAMPS trier la sortie selon les champs " "spécifiés.\n" #: utils/rec2csv.c:121 msgid "only one list of fields can be specified as a sorting criteria.\n" msgstr "une seule liste de champs peut servir de critère de tri.\n" #: utils/rec2csv.c:126 msgid "invalid field name list in -S.\n" msgstr "liste de noms de champs invalide dans -S.\n" #: utils/rec2csv.c:130 utils/recsel.c:221 utils/recsel.c:245 msgid "internal error creating fex.\n" msgstr "erreur interne lors de la création de fex.\n" #. TRANSLATORS: --help output, recdel synopsis. #. no-wrap #: utils/recdel.c:78 #, c-format msgid "" "Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [FILE]\n" msgstr "" "Usage: recdel [OPTIONS]… [-t TYPE] [-n NUM | -e EXPR_ENR | -q CHAÃŽNE | -m " "NUM] [FICHIER]\n" #. TRANSLATORS: --help output, recdel short description. #. no-wrap #: utils/recdel.c:83 msgid "Remove (or comment out) records from a rec file.\n" msgstr "" "Supprime (ou met en commentaire) les enregistrements du fichier enrg.\n" #. TRANSLATORS: --help output, recdel arguments. #. no-wrap #: utils/recdel.c:90 msgid "" " -c, --comment comment out the matching records " "instead of\n" " deleting them.\n" " --force delete even in potentially dangerous " "situations,\n" " and if the deletion is violating " "record restrictions.\n" " --no-external don't use external descriptors.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -c, --comment mettre en commentaire les " "enregistrements correspondants au lieu de\n" " les supprimer.\n" " --force supprimer même dans des situations " "potentiellement dangereuses\n" " et si l'effacement viole des " "restrictions d'enregistrements.\n" " --no-external ne pas utiliser de descripteur " "externe.\n" " --verbose fournir un rapport détaillé si le " "contrôle d'intégrité\n" " échoue.\n" #. TRANSLATORS: --help output, notes on recdel. #. no-wrap #. TRANSLATORS: --help output, notes on recfix. #. no-wrap #. TRANSLATORS: --help output, notes on recins. #. no-wrap #: utils/recdel.c:108 utils/recfix.c:149 utils/recins.c:138 msgid "" "If no FILE is specified then the command acts like a filter, getting\n" "the data from standard input and writing the result to standard output.\n" msgstr "" "Si aucun FICHIER n'est spécifié alors la commande agit comme un filtre " "récupérant les\n" "données depuis l'entrée standard et écrivant le résultat sur la sortie " "standard.\n" #: utils/recdel.c:123 #, c-format msgid "no records of type %s found.\n" msgstr "aucun enregistrement de type %s trouvé.\n" #: utils/recdel.c:196 #, c-format msgid "ignoring a request to delete all records of type %s.\n" msgstr "ignore la demande de supprimer tous les enregistrements de type %s.\n" #: utils/recdel.c:198 msgid "use --force if you really want to proceed, or use either -n or -e.\n" msgstr "" "utilisez --force si vous voulez réellement continuer ou alors utilisez -n ou " "-e.\n" #: utils/recdel.c:206 msgid "invalid selection expression.\n" msgstr "expression de sélection invalide.\n" #: utils/recdel.c:241 utils/recfix.c:344 utils/recins.c:361 utils/recset.c:312 #, c-format msgid "file %s is not writable.\n" msgstr "le fichier %s n'est pas accessible en écriture.\n" #. TRANSLATORS: --help output, recfix synopsis. #. no-wrap #: utils/recfix.c:99 #, c-format msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" msgstr "Usage: recfix [OPTION]… [OPÉRATION] [OP_OPTION]… [FICHIER]\n" #. TRANSLATORS: --help output, recfix short description. #. no-wrap #: utils/recfix.c:104 msgid "Check and fix rec files.\n" msgstr "Vérifie et corrige les fichiers enrg.\n" #. TRANSLATORS: --help output, recfix global arguments. #. no-wrap #: utils/recfix.c:111 msgid "" " --no-external don't use external descriptors.\n" " --force force the requested operation.\n" msgstr "" " --no-external ne pas utiliser de descripteur " "externe.\n" " --force forcer l'opération demandée.\n" #. TRANSLATORS: --help output, recfix operations. #. no-wrap #: utils/recfix.c:121 msgid "" "Operations:\n" " --check check integrity of the specified " "file. Default.\n" " --sort sort the records in the specified " "file.\n" " --auto insert auto-generated fields in " "records missing them.\n" msgstr "" "Opérations:\n" " --check vérifie l'intégrité du fichier " "spécifié. Défaut.\n" " --sort trier les enregistrements dans le " "fichier spécifié.\n" " --auto insérer des champs auto-générés dans " "les enregistrements où ils manquent.\n" #. TRANSLATORS: --help output, recfix operations related with encryption. #. no-wrap #: utils/recfix.c:131 msgid "" " --encrypt encrypt confidential fields in the " "specified file.\n" " --decrypt decrypt confidential fields in the " "specified file.\n" msgstr "" " --encrypt chiffrer les champs confidentiels dans " "le fichier spécifié.\n" " --decrypt déchiffrer les champs confidentiels " "dans le fichier spécifié.\n" #. TRANSLATORS: --help output, recfix encryption and decryption #. options. #. no-wrap #: utils/recfix.c:140 msgid "" "De/Encryption options:\n" " -s, --password=PASSWORD encrypt/decrypt with this password.\n" msgstr "" "Options de dé/chiffrement:\n" " -s, --password=MOT_DE_PASSE chiffre/déchiffre avec ce mot de " "passe.\n" #: utils/recfix.c:184 msgid "--password|-s must be used as an operation argument.\n" msgstr "--password|-s doit être utilisé comme un argument d'opération.\n" #: utils/recfix.c:188 msgid "the specified operation does not require a password.\n" msgstr "l'opération spécifiée n'a pas besoin de mot de passe.\n" #: utils/recfix.c:191 msgid "please specify just one password.\n" msgstr "veuillez n'indiquer qu'un seul mot de passe.\n" #: utils/recfix.c:198 utils/recfix.c:204 utils/recfix.c:210 utils/recfix.c:217 #: utils/recfix.c:223 msgid "please specify just one operation.\n" msgstr "veuillez n'indiquer qu'une seule opération\n" #: utils/recfix.c:304 utils/recfix.c:326 utils/recfix.c:365 utils/recfix.c:435 #, fuzzy, c-format msgid "recfix: error: cannot read file %s\n" msgstr "erreur: impossible de lire le fichier %s\n" #: utils/recfix.c:399 msgid "the database contains already encrypted fields\n" msgstr "la base de données contient déjà des champs chiffrés\n" #: utils/recfix.c:400 msgid "please use --force or --decrypt\n" msgstr "veuillez utiliser --force ou --decrypt\n" #: utils/recfix.c:499 msgid "unknown operation in recfix: please report this as a bug.\n" msgstr "" "opération inconnue dans recfix: veuillez rapporter ceci comme un bug.\n" #. TRANSLATORS: --help output, recfmt synopsis. #. no-wrap #: utils/recfmt.c:64 #, c-format msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" msgstr "Usage: recfmt [OPTION]… [MODÈLE]\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:69 msgid "Apply a template to records read from standard input.\n" msgstr "Appliquer un modèle aux enregistrements lus sur l'entrée standard.\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:75 msgid "" " -f, --file=FILENAME read the template to apply from a " "file.\n" msgstr "" " -f, --file=FICHIER lire le modèle à appliquer dans le " "fichier.\n" #: utils/recfmt.c:107 #, c-format msgid "can't open file %s for reading.\n" msgstr "le fichier %s n'a pas pu être ouvert en lecture.\n" #: utils/recfmt.c:120 msgid "don't specify a template in the command line and -f at the same time.\n" msgstr "" "ne spécifiez pas de modèle sur la ligne de commande et avec -f en même " "temps.\n" #: utils/recfmt.c:142 msgid "invalid expression in a template slot.\n" msgstr "expression invalide dans un emplacement de modèle.\n" #: utils/recfmt.c:146 msgid "error evaluating expression in a template slot.\n" msgstr "" "erreur lors de l'évaluation d'une expression dans un emplacement de modèle.\n" #: utils/recfmt.c:178 msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" msgstr "" "recfmt_apply_template: erreur à la compilation de la regexp. Merci de " "rapporter ceci.\n" #. TRANSLATORS: --help output, recinf synopsis. #. no-wrap #: utils/recinf.c:77 #, c-format msgid "Usage: recinf [OPTION]... [FILE]...\n" msgstr "Usage: recinf [OPTION]… [FICHIER]…\n" #. TRANSLATORS: --help output, recinf short description. #. no-wrap #: utils/recinf.c:82 msgid "Print information about the types of records stored in the input.\n" msgstr "" "Afficher les informations à propos des types d'enregistrements stockés dans " "l'entrée.\n" #. TRANSLATORS: --help output, recinf arguments. #. no-wrap #: utils/recinf.c:89 msgid "" " -t, --type=RECORD_TYPE print information on the records having " "the\n" " specified type.\n" " -d, --descriptor include the full record descriptors.\n" " -n, --names-only output just the names of the record files\n" " found in the input.\n" msgstr "" " -t, --type=TYPE_ENREGISTREMENT afficher les informations sur les " "enregistrements ayant\n" " le type spécifié.\n" " -d, --descriptor inclure les descriptors complets de " "l'enregistrement.\n" " -n, --names-only afficher uniquement les noms des fichiers " "d'enregistrements\n" " rencontrés en entrée.\n" #. TRANSLATORS: --help output, recinf special options. #. no-wrap #: utils/recinf.c:102 msgid "" "Special options:\n" " -S, --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Options spéciales:\n" " -S, --print-sexps afficher les données en sexps au lieu " "du format enrg.\n" #: utils/recinf.c:234 #, c-format msgid "error: cannot read file %s\n" msgstr "erreur: impossible de lire le fichier %s\n" #. TRANSLATORS: --help output, recins synopsis. #. no-wrap #: utils/recins.c:100 #, c-format msgid "" "Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" msgstr "" "Usage: recins [OPTION]… [-t TYPE] [-n NUM | -e EXPR_ENR | -q CHAÃŽNE | -m " "NUM] [(-f CHAÃŽNE -v CHAÃŽNE]|[-r RECDATA)]… [FICHIER]\n" #. TRANSLATORS: --help output, recins short description. #. no-wrap #: utils/recins.c:105 msgid "Insert new records in a rec database.\n" msgstr "" "Insérer les nouveaux enregistrements dans une base de données " "d'enregistrements.\n" #. TRANSLATORS: --help output, recins arguments. #. no-wrap #: utils/recins.c:111 msgid "" " -f, --field=STR field name; should be followed by a -" "v.\n" " -v, --value=STR field value; should be preceded by an -" "f.\n" " -r, --record=STR record that will be inserted in the " "file.\n" " --force insert the record even if it is " "violating\n" " record restrictions.\n" " --no-external don't use external descriptors.\n" " --no-auto don't insert auto generated fields.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -f, --field=CHAÃŽNE nom du champ; devrait être suivi par -" "v.\n" " -v, --value=CHAÃŽNE valeur du champ; devrait être précédé " "par -f.\n" " -r, --record=CHAÃŽNE enregistrement qui sera inséré dans le " "fichier.\n" " --force insérer l'enregistrement même si il " "viole\n" " les restrictions de " "l'enregistrement.\n" " --no-external ne pas utiliser de descripteur " "externe.\n" " --no-auto ne pas insérer de champ généré " "automatiquement.\n" " --verbose fournir un rapport détaillé si la " "validation d'intégrité\n" " échoue.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recins.c:125 msgid "" " -s, --password=STR encrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=CHAÃŽNE chiffrer les champs confidentiels avec " "ce mot de passe.\n" #: utils/recins.c:179 msgid "a -f should be followed by a -v\n" msgstr "un -f devrait être suivi par un -v\n" #: utils/recins.c:198 msgid "a -v should be preceded by a -f\n" msgstr "un -v devrait être précédé par un -f\n" #: utils/recins.c:214 utils/recsel.c:204 msgid "more than one password was specified\n" msgstr "plus d'un mot de passe a été spécifié\n" #: utils/recins.c:224 msgid "error while parsing the record provided by -r\n" msgstr "erreur lors de l'analyse de l'enregistrement fourni par -r\n" #: utils/recins.c:256 #, c-format msgid "please provide a value for the field %s\n" msgstr "veuillez fournir une valeur pour le champ %s\n" #. TRANSLATORS: --help output, recsel synopsis. #. no-wrap #: utils/recsel.c:107 #, c-format msgid "" "Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " "| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" msgstr "" "Usage: recsel [OPTION]… [-t TYPE] [-j CHAMP] [-n INDEXES | -e EXPR_ENRG | -q " "EXPR | -m NUM] [-c | (-p|-P) EXPR_CHAMP] [FICHIER]…\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:112 msgid "Select and print rec data.\n" msgstr "Sélectionne et affiche les données de l'enregistrement.\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:118 msgid "" " -d, --include-descriptors print record descriptors along with " "the matched\n" " records.\n" " -C, --collapse do not section the result in records " "with newlines.\n" " -S, --sort=FIELD,... sort the output by the specified " "fields.\n" " -G, --group-by=FIELD,... group records by the specified " "fields.\n" " -U, --uniq remove duplicated fields in the output " "records.\n" msgstr "" " -d, --include-descriptors afficher les descripteurs " "d'enregistrements ainsi que les enregistrements\n" " correspondants.\n" " -C, --collapse ne pas séparer les résultats des " "enregistrements avec des sauts de lignes.\n" " -S, --sort=CHAMP,… trier la sortie selon le champ " "spécifié.\n" " -G, --group-by=CHAMP,… grouper les enregistrements selon le " "champ spécifié.\n" " -U, --uniq supprimer les champs dupliqués dans " "les enregistrements de sortie.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recsel.c:130 msgid "" " -s, --password=STR decrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=CHAÃŽNE déchiffrer les champs confidentiels " "avec ce mot de passe.\n" #: utils/recsel.c:139 msgid "" " -j, --join=FIELD perform an inner join using the " "specified field.\n" msgstr "" " -j, --join=CHAMP effectuer une jointure interne sur le " "champ spécifié.\n" #. TRANSLATORS: --help output, recsel output options. #. no-wrap #: utils/recsel.c:146 msgid "" "Output options:\n" " -p, --print=FIELDS comma-separated list of fields to " "print for each\n" " matching record.\n" " -P, --print-values=FIELDS as -p, but print only the values of " "the selected\n" " fields.\n" " -R, --print-row=FIELDS as -P, but separate the values with " "spaces instead\n" " of newlines.\n" " -c, --count print a count of the matching records " "instead of\n" " the records themselves.\n" msgstr "" "Options de sortie:\n" " -p, --print=CHAMPS liste séparée par des virgules des " "champs à afficher pour chaque\n" " enregistrement correspondant.\n" " -P, --print-values=CHAMPS comme -p mais afficher uniquement les " "valeurs des champs sélectionnés.\n" " -R, --print-row=CHAMPS comme -P mais séparer les valeurs avec " "des espaces au lieu\n" " de sauts de lignes.\n" " -c, --count afficher le décompte des " "enregistrements correspondants au lieu\n" " des enregistrements.\n" #. TRANSLATORS: --help output, recsel special options. #. no-wrap #: utils/recsel.c:160 msgid "" "Special options:\n" " --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Options spéciales:\n" " --print-sexps afficher les données en sexps au lieu " "du format enrg.\n" #: utils/recsel.c:212 msgid "only one field list can be specified as a sorting criteria.\n" msgstr "une seule liste de champs peut servir de critère de tri.\n" #: utils/recsel.c:217 msgid "invalid field names in -S.\n" msgstr "noms de champ invalides dans -S.\n" #: utils/recsel.c:226 msgid "only one field can be specified as join criteria.\n" msgstr "un seul champ peut servir de critère de jointure.\n" #: utils/recsel.c:229 msgid "please specify a correct field name to -j|--join.\n" msgstr "veuillez spécifier un nom de champ correct avec -j|--join.\n" #: utils/recsel.c:236 msgid "only one field list can be specified as a grouping criteria.\n" msgstr "une seule liste de champs peut servir de critère de groupement.\n" #: utils/recsel.c:241 msgid "invalid field names in -G.\n" msgstr "noms de champ invalides dans -G.\n" #: utils/recsel.c:255 msgid "cannot specify -[pPR] and also -c.\n" msgstr "vous ne pouvez pas spécifier -[pPR] en même temps que -c.\n" #: utils/recsel.c:266 #, c-format msgid "invalid list of fields in -%c\n" msgstr "liste de champs invalide dans -%c\n" #: utils/recsel.c:272 msgid "internal error creating the field expression.\n" msgstr "erreur interne lors de la création de l'expression de champ.\n" #: utils/recsel.c:284 #, c-format msgid "invalid aggregate function '%s'\n" msgstr "fonction d'aggrégation « %s » invalide\n" #: utils/recsel.c:296 msgid "cannot specify -c and also -p.\n" msgstr "vous ne pouvez pas spécifier -c en même temps que -p.\n" #: utils/recsel.c:309 msgid "joins can only be used when a named record set is selected.\n" msgstr "" "les jointures peuvent uniquement être utilisées si un ensemble " "d'enregistrements nommés est sélectionné.\n" #: utils/recsel.c:363 msgid "several record types found. Please use -t to specify one.\n" msgstr "" "plusieurs types d'enregistrements trouvés. Veuillez utiliser -t pour en " "spécifier un.\n" #. TRANSLATORS: --help output, recset synopsis. #. no-wrap #: utils/recset.c:99 #, c-format msgid "Usage: recset [OPTION]... [FILE]...\n" msgstr "Usage: recset [OPTION]… [FICHIER]…\n" #. TRANSLATORS: --help output, recset short description. #. no-wrap #: utils/recset.c:104 msgid "Alter or delete fields in records.\n" msgstr "Altérer ou éditer les champs dans les enregistrements.\n" #. TRANSLATORS: --help output, recset options. #. no-wrap #: utils/recset.c:110 msgid "" " --no-external don't use external descriptors.\n" " --force alter the records even if violating " "record\n" " restrictions.\n" msgstr "" " --no-external ne pas utiliser de descripteur " "externe.\n" " --force altérer les enregistrements même si " "cela viole les restrictions\n" " des enregistrements.\n" #. TRANSLATORS: --help output, recset field selection options. #. no-wrap #: utils/recset.c:123 msgid "" "Field selection options:\n" " -f, --fields=FIELDS comma-separated list of field names " "with optional\n" " subscripts.\n" msgstr "" "Options de sélection des champs:\n" " -f, --fields=CHAMPS liste séparée par des virgules des " "noms des champs avec\n" " les indices optionnels.\n" #. TRANSLATORS: --help output, recset actions. #. no-wrap #: utils/recset.c:131 msgid "" "Actions:\n" " -s, --set=VALUE change the value of the selected " "fields.\n" " -a, --add=VALUE add the selected fields with the given " "value.\n" " -S, --set-add=VALUE change the value of the selected " "fields. If they don't\n" " exist then add a new field with that " "value.\n" " -r, --rename=NAME rename the selected fields to a given " "name. If an entire\n" " record set is selected then the " "field is renamed in the\n" " record descriptor as well.\n" " -d, --delete delete the selected fields.\n" " -c, --comment comment out the selected fields.\n" msgstr "" "Actions:\n" " -s, --set=VALEUR changer la valeur des champs " "sélectionnés.\n" " -a, --add=VALEUR ajouter les champs sélectionnés avec " "la valeur indiquée.\n" " -S, --set-add=VALEUR changer la valeur des champs " "sélectionner. Si ils n'existent pas,\n" " ajouter un nouveau champ avec cette " "valeur.\n" " -r, --rename=NOM renommer les champs sélectionnés avec " "le nom indiqué. Si un ensemble complet\n" " d'enregistrements est sélectionné, " "alors le champ est également renommé dans\n" " le descripteur d'enregistrement.\n" " -d, --delete effacer les champs sélectionnés.\n" " -c, --comment mettre en commentaire les champs " "sélectionnés.\n" #: utils/recset.c:154 msgid "please specify some field with -f.\n" msgstr "veuillez spécifier des champs avec -f.\n" #: utils/recset.c:159 msgid "please specify just one action.\n" msgstr "veuillez ne spécifier qu'une seule action.\n" #: utils/recset.c:193 msgid "invalid field expression in -f.\n" msgstr "expression de champ invalide dans -f.\n" #: utils/recset.c:199 msgid "creating the field expression.\n" msgstr "création de l'expression de champ.\n" #: utils/recset.c:214 msgid "" "the rename operation requires just one field with an optional subscript.\n" msgstr "" "l'opération de renommage requiert un seul champ avec un indice optionnel.\n" #: utils/recutl.c:123 #, c-format msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" msgstr "Page d'accueil de %s: <http://www.gnu.org/software/recutils/>\n" #: utils/recutl.c:126 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" "Aide générale sur l'utilisation des logiciels GNU: <http://www.gnu.org/" "gethelp/>\n" #. TRANSLATORS: --help output, common arguments. #. no-wrap #: utils/recutl.c:135 msgid "" " --help print a help message and exit.\n" " --version show version and exit.\n" msgstr "" " --help afficher un message d'aide et " "quitter.\n" " --version afficher la version et quitter.\n" #. TRANSLATORS: --help output, record selection arguments #. no-wrap #: utils/recutl.c:146 msgid "" "Record selection options:\n" " -i, --case-insensitive make strings case-insensitive in " "selection\n" " expressions.\n" " -t, --type=TYPE operate on records of the specified " "type only.\n" " -e, --expression=RECORD_EXPR selection expression.\n" " -q, --quick=STR select records with fields containing " "a string.\n" " -n, --number=NUM,... select specific records by position, " "with ranges.\n" " -m, --random=NUM select a given number of random " "records.\n" msgstr "" "Options de sélection des enregistrements:\n" " -i, --case-insensitive rendre les chaînes insensibles à la " "casse dans les expressions\n" " de sélection.\n" " -t, --type=TYPE agir uniquement sur les " "enregistrements du type sélectionné.\n" " -e, --expression=EXPR_ENR expression de sélection.\n" " -q, --quick=CHAÃŽNE sélectionner les enregistrements avec " "des champs contenant une chaîne.\n" " -n, --number=NUM,… sélectionner les enregistrements " "spécifiés par position (plage permise).\n" " -m, --random=NUM sélectionner un nombre aléatoire " "d'enregistrements.\n" #: utils/recutl.c:171 #, c-format msgid "" "Copyright (C) %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright (C) %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL version 3 ou supérieure <http://gnu.org/licenses/gpl." "html>.\n" "Ceci est un logiciel libre: vous êtes libre de le changer et de le " "redistribuer.\n" "Il n'y a PAS de GARANTIE, dans les limites permises par la loi.\n" #: utils/recutl.c:177 msgid "" "\n" "Written by Jose E. Marchesi." msgstr "" "\n" "Écrit par Jose E. Marchesi." #: utils/recutl.c:189 utils/recutl.c:209 msgid ": error: " msgstr ": erreur: " #: utils/recutl.c:221 msgid ": warning: " msgstr ": avertissement: " #: utils/recutl.c:246 #, c-format msgid "duplicated record set '%s' from %s.\n" msgstr "ensemble d'enregistrement « %s » en double dans %s.\n" #: utils/recutl.c:401 msgid "cannot create a unique name.\n" msgstr "impossible de créer un nom unique.\n" #: utils/recutl.c:421 #, c-format msgid "renaming file %s to %s\n" msgstr "renomme le fichier %s en %s\n" #: utils/recutl.c:463 msgid "operation aborted due to integrity failures.\n" msgstr "opération annulée à cause d'erreurs d'intégrité.\n" #: utils/recutl.c:464 msgid "use --verbose to get a detailed report.\n" msgstr "utilisez --verbose pour obtenir un rapport détaillé.\n" #: utils/recutl.c:471 msgid "use --force to skip the integrity check.\n" msgstr "utilisez --force pour ignorer la validation d'intégrité.\n" #: utils/recutl.c:529 msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" msgstr "" "erreur interne: recutl_index_list_parse: erreur à la compilation de la " "regexp.\n" #: utils/recutl.c:596 msgid "Password: " msgstr "Mot de passe: " #: utils/recutl.c:602 msgid "Password again: " msgstr "Mot de passe, à nouveau: " #: utils/recutl.c:607 msgid "the provided passwords don't match.\n" msgstr "les mots de passes entrés ne sont pas les mêmes.\n" #: utils/recutl.h:84 utils/recutl.h:131 utils/recutl.h:133 msgid "cannot specify -e and also -n\n" msgstr "vous ne pouvez pas spécifier -e en même temps que -n\n" #: utils/recutl.h:86 msgid "cannot specify -e and also -q\n" msgstr "vous ne pouvez pas spécifier -e en même temps que -q\n" #: utils/recutl.h:94 msgid "invalid selection expression\n" msgstr "expression de sélection invalide\n" #: utils/recutl.h:100 msgid "cannot specify -n and also -e\n" msgstr "vous ne pouvez pas spécifier -n en même temps que -e\n" #: utils/recutl.h:102 msgid "cannot specify -n and also -q\n" msgstr "vous ne pouvez pas spécifier -n en même temps que -q\n" #: utils/recutl.h:106 msgid "invalid list of indexes in -n\n" msgstr "liste d'index invalide dans -n\n" #: utils/recutl.h:111 msgid "cannot specify -m and also -e\n" msgstr "vous ne pouvez pas spécifier -m en même temps que -e\n" #: utils/recutl.h:113 msgid "cannot specify -m and also -q\n" msgstr "vous ne pouvez pas spécifier -m en même temps que -q\n" #: utils/recutl.h:115 msgid "cannot specify -m and also -n\n" msgstr "vous ne pouvez pas spécifier -m en même temps que -n\n" #~ msgid "_open_osfhandle failed" #~ msgstr "échec de _open_osfhandle" #~ msgid "cannot restore fd %d: dup2 failed" #~ msgstr "ne peut rétablir fd %d: dup2 a échoué" #~ msgid "" #~ "\n" #~ "Report bugs to: %s\n" #~ msgstr "" #~ "\n" #~ "Signalez les bogues à: %s\n" #~ "Signalez les erreurs de traduction à: traduc@traduc.org\n" #~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n" #~ msgstr "Page d'accueil de %s: <https://www.gnu.org/software/%s/>\n" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: l'option « --%s » n'accepte pas d'argument\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: option « --%s » pas reconnue\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: l'option « -W %s » n'accepte pas d'argument\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: l'option « -W %s » exige un argument\n" #~ msgid "" #~ "%s:%s: warning: type %s collides with referred type %s in the rset %s.\n" #~ msgstr "" #~ "%s:%s: attention: le type %s entre en collision avec le type référé %s " #~ "dans le rset %s.\n" #~ msgid "%s:%s: error: value for %s shall be a field name.\n" #~ msgstr "%s:%s: erreur: la valeur de %s sera un nom de champ.\n" #~ msgid "reached maximum number of fields: %d\n" #~ msgstr "nombre maximum de champs atteint: %d\n" #~ msgid "not enough headers" #~ msgstr "pas assez d'en-têtes" #~ msgid "out of memory" #~ msgstr "à cours de mémoire" #~ msgid "evaluating the selection expression.\n" #~ msgstr "évaluation de l'expression sélectionnée.\n" #~ msgid "reading file %s" #~ msgstr "lecture du fichier %s" #~ msgid "internal error: rec_resolver_check: error compiling regexp.\n" #~ msgstr "" #~ "erreur interne: rec_resolver_check: erreur lors de la compilation de la " #~ "regexp.\n" #~ msgid "internal error: rec_field_name_part_str_p: error compiling regexp.\n" #~ msgstr "" #~ "erreur interne: rec_field_name_part_str_p: erreur à la compilation de la " #~ "regexp.\n" #~ msgid "internal error: rec_int_rec_type_p: error compiling regexp.\n" #~ msgstr "" #~ "erreur interne: rec_int_rec_type_p: erreur à la compilation de la " #~ "regexp.\n" #~ msgid "internal error: rec-types: error compiling regexp.\n" #~ msgstr "erreur interne: rec-types: erreur à la compilation de la regexp.\n" #~ msgid "" #~ "the record set contains confidential fields but no password was provided\n" #~ msgstr "" #~ "l'ensemble d'enregistrements contient des champs confidentiels mais aucun " #~ "mot de passe n'a été fourni\n" #~ msgid "the resulting record will have those fields unencrypted!\n" #~ msgstr "l'enregistrement résultant contiendra ces champs non chiffrés !\n" ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/fr.gmo������������������������������������������������������������������������������0000644�0000000�0000000�00000131006�14226577416�011654� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•�����0��� ��‘��������D�����L��„������L�����M��&���k��1���’�����Ä�� ���â��²�����‚���¶��Í���9��‹�����"���“�����¶�����Î�����è��"�������)��E��1!��Ó��w"��Ž��K$��N���Ú&��W���)'��[���'��[���Ý'��?��9(��M��y)�����Ç*��6���Û*�� ���+����� +��!���5+��H���W+��;��� +��@���Ü+��A���,�����_,��,���{,�����¨,��.���È,��'���÷,��(���-�����H-��2���h-��;���›-��2���×-��M��� .��S���X.��2���¬.��=���ß.��?���/��;���]/��V���™/��A���ð/��8���20��9���k0��%���¥0��)���Ë0��,���õ0��1���"1��7���T1��7���Œ1��1���Ä1��E���ö1��F���<2��F���ƒ2��4���Ê2��2���ÿ2��9���23��<���l3��U���©3��=���ÿ3��D���=4�����‚4�����„4�����4��5���¡4�� ���×4�� ���á4��ê��í4��#���Ø7��6���ü7�����38��%���M8�� ���s8�� ���”8��ë���µ8��a���¡9��¥���:��?���©:�����é:��&���w;�����ž;�����µ;�����Ò;�����î;��$���<�����+<�����=<�����X<�����i<�����r<�� ��‘<��L��Ÿ=�����ì?�����ü?�����@�� ���"@��#���-@��B���Q@��.��”@�����ÃB��1���ÞB�����C�����'C�����;C��f���WC��f���¾C�����%D�����-D�����GD��!���^D�����€D�����“D�����¨D�����ºD�����ÌD�� ���ëD��'���øD��-��� E��'���NE��X���vE��<���ÏE��%��� F��$���2F��z���WF��ƒ���ÒF��$���VG�����{G��;���’G��3���ÎG��/���H��+���2H��'���^H��#���†H�����ªH�����ÊH�����æH�����öH�� ���øH�� ���I�� ���:I�����[I�����yI��#���ŽI�����²I�����ÒI�����ñI�����J�����/J�����NJ�����mJ�����ŒJ�����«J�����ÃJ�����ãJ�����èJ�����ñJ��F���õJ��$���<K��0���aK��!���’K��.���´K�� ���ãK��>���ñK��/���0L�����`L��!���|L�� ���žL�����¿L��'���ÖL��*���þL�����)M�����GM��$���aM��&���†M�� ���­M��"���ÎM��(���ñM��&���N�����AN��.���[N�����ŠN�����N��%���®N�����ÔN��5���ÛN�����O�����$O�����5O��.���SO��A���‚O��`���ÄO��B���%P��A���hP��3���ªP��A���ÞP����� Q�����6Q�����MQ�����cQ�����zQ�����Q�� ���¦Q�� ���ÇQ�����ÕQ�����äQ��'���øQ�� ��� R�����AR��"���YR�����|R�����œR�����¸R�����ÔR�����åR�����S�����#S�����AS��<���`S�� ���S�����¨S�����¹S��%���ÊS�����ðS�����T�����,T�����3T��2���ET��=���xT��<���¶T��@���óT��-���4U�����bU�����qU�����‚U��(���šU��2���ÃU�� ���öU��#���V��"���;V��#���^V�� ���‚V�����£V��C���ÁV�����W�����W�����&W��;���AW�����}W�����—W��/���¦W��$���ÖW��I���ûW��5���EX�����{X��$���€X�����¥X�����¿X�����ÙX��:���éX��C���$Y��)���hY��(���’Y��+���»Y��+���çY��-���Z�� ���AZ��)���bZ��8���ŒZ��<���ÅZ��<���[��:���?[��F���z[��`���Á[�� ���"\�����.\��Ö��3\����� ^��'���(^��>���P^��$���^��,���´^��Ë���á^��“���­_��ó���A`��“���5a��!���Éa�����ëa��%���b��/���*b��"���Zb��M��}b��v��Ëd��7��Bf��ß��zh��S���Zk��^���®k��b��� l��_���pl��c��Ðl��„��4n�����¹o��>���Õo�����p�����&p��/���Fp��S���vp��F���Êp��N���q��J���`q��"���«q��3���Îq��'���r��?���*r��,���jr��-���—r��%���År��>���ër��B���*s��G���ms��Y���µs��_���t��8���ot��T���¨t��P���ýt��U���Nu��n���¤u��J���v��X���^v��P���·v��1���w��,���:w��/���gw��P���—w��N���èw��L���7x��F���„x��O���Ëx��P���y��P���ly��I���½y��1���z��I���9z��J���ƒz��`���Îz��J���/{��R���z{�����Í{��"���Ò{�����õ{��B���ø{�� ���;|�����F|��S��X|��9���¬��E���æ��'���,€��:���T€��=���€��-���Í€�� ��û€��k���‚��Â���r‚��S���5ƒ��¯���‰ƒ��S���9„�����„��$���«„��%���Є�����ö„��,���…�����<…�����R…�����r…�����……��)���›…��;��Å…��t��‡�����v‰�����ˆ‰�����Ÿ‰�����º‰��,���ɉ��Y���ö‰��®��PŠ��"���ÿŒ��F���"��"���i��R���Œ��:���ß��q���Ž��q���ŒŽ�����þŽ����������%��&���E�����l�����Œ�����¥�����À��&���Û�������*�����/���C��+���s��\���Ÿ��@���ü��$���=‘��'���b‘��…���Š‘��…���’��'���–’�����¾’��;���Ô’��1���“��-���B“��)���p“��%���š“��!���À“�����â“������”�����”�����*”��$���/”��)���T”��2���~”��$���±”��!���Ö”��<���ø”��8���5•��7���n•��7���¦•��7���Þ•��7���–��7���N–��7���†–��7���¾–��&���ö–��$���—�����B—�� ���G—�����R—��Q���W—��8���©—��N���â—��,���1˜��;���^˜�����š˜��L���©˜��?���ö˜��)���6™��'���`™��$���ˆ™�����­™��3���Ë™��@���ÿ™��!���@š�����bš��5���‚š�����¸š��.���ך��3���›��C���:›��3���~›��1���²›��;���ä›����� œ�����3œ��0���Dœ�����uœ��D���}œ�����œ�����Ûœ��,���ôœ��>���!��F���`��b���§��Q��� ž��P���\ž��B���­ž��P���ðž�����AŸ�����_Ÿ�����~Ÿ�����Ÿ�����¼Ÿ�����ÚŸ��,���øŸ�����% �����4 �����D ��4���a ��&���– �����½ ��1���Ø ��*��� ¡��!���5¡��!���W¡�����y¡��"���Š¡�����­¡��"���Í¡��#���ð¡��n���¢�� ���ƒ¢�����¢�����¢¢��*���º¢��4���å¢��)���£�����D£�����L£��3���_£��A���“£��:���Õ£��:���¤��6���K¤�����‚¤�����˜¤�����®¤��-���ˤ��<���ù¤��,���6¥��,���c¥��-���¥��(���¾¥��'���ç¥��%���¦��W���5¦�����¦�����–¦�����³¦��X���Ó¦��"���,§�����O§��9���n§��3���¨§��K���ܧ��9���(¨�����b¨��/���h¨�� ���˜¨��/���¹¨�����é¨��G���©��R���L©��;���Ÿ©��7���Û©��D���ª��?���Xª��D���˜ª��5���ݪ��+���«��M���?«��O���«��F���Ý«��L���$¬��T���q¬��c���Ƭ�����*­�����=­�����Ú���Œ���ý���n���W��������� ���y���œ���•���g���ë�����������€�����½�������ú�����������������F�������(���D��� ���ƒ�����������������/���ä�����������H������a���æ�����������Í���¶�������>������1�����w����������T���Q���ˆ���������������-���ã���†���`���M������������������� ��’�������ù�������Ó���j���þ���Ö���h���<���×����������i��� ����������·�����A���v���ž���Ä��� ��!���“���Ý���Y���å���È���¤���ß���O��������������������ò���G�������e���U����������������������¸���o���»�����������%���J���������Â�����������#���±���,�������������������Ü�������ö������&�������ç���¦���}���è���º������ ��� ��ð���é���������V��� �����������R���K���µ���°�������Ù�������[���Ÿ���|�������î����������Þ�����������É���u�������¿���:�������$�������û������Û������Ï�������\�������Ì���¥���������à���–����������¯����������³�������B���������������”���ü���3��������������x���7���L���*���������Š���Ñ�����~�������+�������‚������ô���_���Å�������k���Ã���´����������m�������â���P���À���¹���C���ó����������������������í���„���^�������ì���f�������l���¢�����������N���8�������¨���'�����¼�������š���]���¾���Ç���ñ���;���Õ���9���=���)���p��������������������� ��‰���©�������Æ������������� �����ª���õ���4���Î����������d���ø�������0���I�������t���Ô�������.���r�������—���?�����������"���§���‡���5���S����������›�������˜����������™���������Ø���Z���c���Ž���á������¡�����‘���¬�������«�����������÷�������‹�������²�����������Á������� ���®���6������ï������������������������2���ÿ����� �������X���Ë���Ð�����������������������Ê���­���b������z���£���ê���{���Ò���@���q�������s���…���E������B­��¼��Ð��ä��ø����(��D��X��l��€��¤��¸��Ü��ð������,��@��\��p��Œ�� ��´��È��ì�����$��8��J­�� ����������ÿÿÿÿT­��������� ���ÿÿÿÿq­������������ÿÿÿÿ†­�������������������ÿÿÿÿº­���������0���ÿÿÿÿú­�������������������ÿÿÿÿ ®������������ÿÿÿÿ<®������������ÿÿÿÿU®���������/���ÿÿÿÿ¢®��������� ������� ������� ���ÿÿÿÿÙ®������������ÿÿÿÿñ®��������� ������� ����������ÿÿÿÿ4¯������������ÿÿÿÿT¯������������ÿÿÿÿs¯�� ����������ÿÿÿÿ¯��������� ���ÿÿÿÿž¯������������ÿÿÿÿ´¯����������������"���ÿÿÿÿð¯���������1���ÿÿÿÿ7°��0�����������������ÿÿÿÿn°������������ÿÿÿÿ°��������� ���ÿÿÿÿ©°��*�������;���ÿÿÿÿ±��"������� ������� ������� ���ÿÿÿÿO±������������ÿÿÿÿp±�� ������� ������� ����������ÿÿÿÿ¼±������������ÿÿÿÿä±������������ÿÿÿÿ� Written by Jose E. Marchesi.� invalid day/month combination; � non-existing due to daylight-saving time; � normalized time: '%s' � numeric values overflow; � --encrypt encrypt confidential fields in the specified file. --decrypt decrypt confidential fields in the specified file. � --help print a help message and exit. --version show version and exit. � --no-external don't use external descriptors. --force alter the records even if violating record restrictions. � --no-external don't use external descriptors. --force force the requested operation. � adjusted Y M D: %s %02d %02d � possible reasons: � new date/time = '%s' � user provided time: '%s' � normalized Y M D: %s %02d %02d � -c, --comment comment out the matching records instead of deleting them. --force delete even in potentially dangerous situations, and if the deletion is violating record restrictions. --no-external don't use external descriptors. --verbose give a detailed report if the integrity check fails. � -d, --delim=char sets the deliminator (default ',') -t, --type=TYPE record set to convert to csv; if this parameter is omitted then the default record set is used -S, --sort=FIELDS sort the output by the specified fields. � -d, --include-descriptors print record descriptors along with the matched records. -C, --collapse do not section the result in records with newlines. -S, --sort=FIELD,... sort the output by the specified fields. -G, --group-by=FIELD,... group records by the specified fields. -U, --uniq remove duplicated fields in the output records. � -f, --field=STR field name; should be followed by a -v. -v, --value=STR field value; should be preceded by an -f. -r, --record=STR record that will be inserted in the file. --force insert the record even if it is violating record restrictions. --no-external don't use external descriptors. --no-auto don't insert auto generated fields. --verbose give a detailed report if the integrity check fails. � -f, --file=FILENAME read the template to apply from a file. � -j, --join=FIELD perform an inner join using the specified field. � -s, --password=STR decrypt confidential fields with the given password. � -s, --password=STR encrypt confidential fields with the given password. � -s, --system-tables include system tables. -e, --keep-empty-fields don't prune empty fields in the rec output. -l, --list-tables dump a list of the table names contained in the mdb file. � -t, --type=RECORD_TYPE print information on the records having the specified type. -d, --descriptor include the full record descriptors. -n, --names-only output just the names of the record files found in the input. �%s home page: <%s> �%s home page: <http://www.gnu.org/software/recutils/> �%s subprocess�%s subprocess failed�%s subprocess got fatal signal %d�%s: %lu: this line contains %lu fields, but %lu header fields were read �%s: error: the number of records of type %s should be %zd. �%s: error: too few records of type %s. Minimum allowed are %zd. �%s: error: too many records of type %s. Maximum allowed are %zd. �%s: invalid option -- '%c' �%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: unrecognized option '%s%s' �%s:%s: error: %%constraint[%d] violated in record �%s:%s: error: %s does not contain information for type %s. �%s:%s: error: %s does not contain valid rec data. �%s:%s: error: auto-incremented field %s should be of type int, range or date �%s:%s: error: auto-incremented field %s should be of type int, range, uuid or date �%s:%s: error: confidential field is not encrypted �%s:%s: error: could not fetch remote descriptor from url %s. �%s:%s: error: could not read external descriptor from file %s. �%s:%s: error: duplicated key value in field '%s' in record �%s:%s: error: expected a comma-separated list of fields before the type specification �%s:%s: error: expected a type name before the type specification �%s:%s: error: field '%s' not allowed in this record set �%s:%s: error: field '%s' should be unique in this record �%s:%s: error: invalid record type %s �%s:%s: error: invalid type specification �%s:%s: error: invalid typedef specification �%s:%s: error: key field '%s' not found in record �%s:%s: error: mandatory field '%s' not found in record �%s:%s: error: missing %%rec field in record descriptor �%s:%s: error: multiple key fields '%s' in record �%s:%s: error: only one %%key field is allowed in a record descriptor �%s:%s: error: only one %%size field is allowed in a record descriptor �%s:%s: error: only one %%sort field is allowed in a record descriptor �%s:%s: error: prohibited field '%s' found in record �%s:%s: error: the referred type %s does not exist �%s:%s: error: too many %%rec fields in record descriptor �%s:%s: error: value for %s should be a list of field names. �%s:%s: error: value for %s should be a number optionally preceded by >, <, >= or <=. �%s:%s: error: value for %s[%zd] is not a list of field names �%s:%s: error: value for %s[%zd] is not a valid selection expression �'�'@timespec' - always UTC�(C)�--password|-s must be used as an operation argument. �: error: �: warning: �Actions: -s, --set=VALUE change the value of the selected fields. -a, --add=VALUE add the selected fields with the given value. -S, --set-add=VALUE change the value of the selected fields. If they don't exist then add a new field with that value. -r, --rename=NAME rename the selected fields to a given name. If an entire record set is selected then the field is renamed in the record descriptor as well. -d, --delete delete the selected fields. -c, --comment comment out the selected fields. �Alter or delete fields in records. �Apply a template to records read from standard input. �Check and fix rec files. �Convert an mdb file into a rec file. �Convert csv data into rec data. �Convert rec data into csv data. �Copyright (C) %s Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �De/Encryption options: -s, --password=PASSWORD encrypt/decrypt with this password. �Field selection options: -f, --fields=FIELDS comma-separated list of field names with optional subscripts. �General help using GNU software: <http://www.gnu.org/gethelp/> �If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. �Insert new records in a rec database. �Invalid back reference�Invalid character class name�Invalid collation character�Invalid content of \{\}�Invalid preceding regular expression�Invalid range end�Invalid regular expression�Memory exhausted�No match�No previous regular expression�Operations: --check check integrity of the specified file. Default. --sort sort the records in the specified file. --auto insert auto-generated fields in records missing them. �Output options: -p, --print=FIELDS comma-separated list of fields to print for each matching record. -P, --print-values=FIELDS as -p, but print only the values of the selected fields. -R, --print-row=FIELDS as -P, but separate the values with spaces instead of newlines. -c, --count print a count of the matching records instead of the records themselves. �Packaged by %s �Packaged by %s (%s) �Password again: �Password: �Premature end of regular expression�Print information about the types of records stored in the input. �Record selection options: -i, --case-insensitive make strings case-insensitive in selection expressions. -t, --type=TYPE operate on records of the specified type only. -e, --expression=RECORD_EXPR selection expression. -q, --quick=STR select records with fields containing a string. -n, --number=NUM,... select specific records by position, with ranges. -m, --random=NUM select a given number of random records. �Regular expression too big�Remove (or comment out) records from a rec file. �Report %s bugs to: %s �Report bugs to: %s �Select and print rec data. �Special options: --print-sexps print the data in sexps instead of rec format. �Special options: -S, --print-sexps print the data in sexps instead of rec format. �Success�TZ="%s" environment value�TZ="%s" in date string�TZ="UTC0" environment value or -u�Trailing backslash�Unknown system error�Unmatched ( or \(�Unmatched ) or \)�Unmatched [, [^, [:, [., or [=�Unmatched \{�Usage: csv2rec [OPTIONS]... [CSV_FILE] �Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE] �Usage: rec2csv [OPTIONS]... [REC_FILE] �Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [FILE] �Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE] �Usage: recfmt [OPTION]... [TEMPLATE] �Usage: recinf [OPTION]... [FILE]... �Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE] �Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]... �Usage: recset [OPTION]... [FILE]... �Written by %s and %s. �Written by %s, %s, %s, %s, %s, %s, %s, %s, %s, and others. �Written by %s, %s, %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, and %s. �Written by %s, %s, %s, and %s. �Written by %s, %s, and %s. �Written by %s. �`�a -f should be followed by a -v �a -v should be preceded by a -f �can't open file %s for reading. �cannot create a unique name. �cannot read file %s �cannot specify -[pPR] and also -c. �cannot specify -c and also -p. �cannot specify -e and also -n �cannot specify -e and also -q �cannot specify -m and also -e �cannot specify -m and also -n �cannot specify -m and also -q �cannot specify -n and also -e �cannot specify -n and also -q �could not open file %s �creating the field expression. �date�datetime�day�don't specify a template in the command line and -f at the same time. �duplicated record set '%s' from %s. �error evaluating expression in a template slot. �error while parsing CSV file: %s �error while parsing the record provided by -r �error: %s:%d �error: adding relative date resulted in an invalid date: '%s' �error: adding relative time caused an overflow �error: cannot read file %s �error: initial year out of range �error: invalid date/time value: �error: parsing failed �error: parsing failed, stopped at '%s' �error: timezone %d caused time_t overflow �error: tzalloc ("%s") failed �error: unknown word '%s' �error: year, month, or day overflow �expected an integer between %d and %d.�failed to initialize csv parser �failed to normalise field name %s �failed to normalise record type name %s �failed to normalise the field name %s �file %s is not writable. �file does not appear to be an Access database �final: %s (UTC%s) �final: %s (UTC) �final: %s (unknown time zone offset) �hybrid�ignoring a request to delete all records of type %s. �incorrect timezone�input timezone: �internal error creating fex. �internal error creating the field expression. �internal error: REC_FEX_MAX_ELEMS exceeded. Please report this. �internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() in rec_type_new(). �internal error: rec_int_rec_extract_file: error compiling regexp. �internal error: rec_int_rec_extract_url: error compiling regexp. �internal error: rec_match: error compiling regexp. �internal error: recutl_index_list_parse: error compiling regexp. �invalid 'bool' value.�invalid 'field' value.�invalid 'line' value.�invalid 'range' value.�invalid 'real' value.�invalid 'uuid' value.�invalid aggregate function '%s' �invalid date.�invalid email.�invalid enum value.�invalid expression in a template slot. �invalid field expression in -f. �invalid field name %s. �invalid field name '%s' in header �invalid field name list in -S. �invalid field names in -G. �invalid field names in -S. �invalid integer.�invalid list of fields in -%c �invalid list of indexes in -n �invalid selection expression �invalid selection expression. �joins can only be used when a named record set is selected. �local_zone�memory exhausted�missing timezone�more than one password was specified �new start date: '%s' is '%s' �no records of type %s found. �number�number of seconds�only one field can be specified as join criteria. �only one field list can be specified as a grouping criteria. �only one field list can be specified as a sorting criteria. �only one list of fields can be specified as a sorting criteria. �operation aborted due to integrity failures. �out of memory �parsed %s part: �parsed date/time string�please provide a value for the field %s �please specify a correct field name to -j|--join. �please specify just one action. �please specify just one operation. �please specify just one password. �please specify some field with -f. �please use --force or --decrypt �preserving permissions for %s�recfmt_apply_template: error compiling regexp. Please report this. �relative�renaming file %s to %s �setting permissions for %s�several record types found. Please use -t to specify one. �starting date/time: '%s' �system default�the database contains already encrypted fields �the provided passwords don't match. �the rename operation requires just one field with an optional subscript. �the specified operation does not require a password. �time�timezone: TZ="%s" environment value �timezone: Universal Time �timezone: system default �today/this/now �unknown operation in recfix: please report this as a bug. �use --force if you really want to proceed, or use either -n or -e. �use --force to skip the integrity check. �use --verbose to get a detailed report. �using current date as starting value: '%s' �using current time as starting value: '%s' �using specified time as starting value: '%s' �value does not match the regexp.�value too large. Expected a size <= %zu.�warning: day (%s) ignored when explicit dates are given �warning: daylight saving time changed after date adjustment �warning: daylight saving time changed after time adjustment �warning: month/year adjustment resulted in shifted dates: �warning: when adding relative days, it is recommended to specify noon �warning: when adding relative months/years, it is recommended to specify the 15th of the months �write error�zone�Project-Id-Version: GNU recutils 1.8 Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org POT-Creation-Date: 2022-04-16 19:38+0200 PO-Revision-Date: 2019-01-06 17:05+0100 Last-Translator: Frédéric Marchal <fmarchal@perso.be> Language-Team: French <traduc@traduc.org> Language: fr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=(n >= 2); � Écrit par Jose E. Marchesi.� combinaison jour/mois invalide; � inexistant à cause du changement d'heure été/hiver; � temps normalisé: « %s » � débordement des valeur numériques; � --encrypt chiffrer les champs confidentiels dans le fichier spécifié. --decrypt déchiffrer les champs confidentiels dans le fichier spécifié. � --help afficher un message d'aide et quitter. --version afficher la version et quitter. � --no-external ne pas utiliser de descripteur externe. --force altérer les enregistrements même si cela viole les restrictions des enregistrements. � --no-external ne pas utiliser de descripteur externe. --force forcer l'opération demandée. � ajusté A M J: %s %02d %02d � raisons possibles: � nouvelle date/temps = « %s » � temps fourni par l'utilisateur: « %s » � normalisé A M J: %s %02d %02d � -c, --comment mettre en commentaire les enregistrements correspondants au lieu de les supprimer. --force supprimer même dans des situations potentiellement dangereuses et si l'effacement viole des restrictions d'enregistrements. --no-external ne pas utiliser de descripteur externe. --verbose fournir un rapport détaillé si le contrôle d'intégrité échoue. � -d, --delim=CARACT change le délimiteur (« , » par défaut) -t, --type=TYPE ensemble d'enregistrements à convertir en csv; l'ensemble d'enregistrements par défaut est utilisé si ce paramètre est omis -S, --sort=CHAMPS trier la sortie selon les champs spécifiés. � -d, --include-descriptors afficher les descripteurs d'enregistrements ainsi que les enregistrements correspondants. -C, --collapse ne pas séparer les résultats des enregistrements avec des sauts de lignes. -S, --sort=CHAMP,… trier la sortie selon le champ spécifié. -G, --group-by=CHAMP,… grouper les enregistrements selon le champ spécifié. -U, --uniq supprimer les champs dupliqués dans les enregistrements de sortie. � -f, --field=CHAÃŽNE nom du champ; devrait être suivi par -v. -v, --value=CHAÃŽNE valeur du champ; devrait être précédé par -f. -r, --record=CHAÃŽNE enregistrement qui sera inséré dans le fichier. --force insérer l'enregistrement même si il viole les restrictions de l'enregistrement. --no-external ne pas utiliser de descripteur externe. --no-auto ne pas insérer de champ généré automatiquement. --verbose fournir un rapport détaillé si la validation d'intégrité échoue. � -f, --file=FICHIER lire le modèle à appliquer dans le fichier. � -j, --join=CHAMP effectuer une jointure interne sur le champ spécifié. � -s, --password=CHAÃŽNE déchiffrer les champs confidentiels avec ce mot de passe. � -s, --password=CHAÃŽNE chiffrer les champs confidentiels avec ce mot de passe. � -s, --system-tables inclure les tables systèmes. -e, --keep-empty-fields garder les champs vides dans la sortie des enregistrements. -l, --list-tables afficher une liste des noms des tables contenues dans le fichier mdb. � -t, --type=TYPE_ENREGISTREMENT afficher les informations sur les enregistrements ayant le type spécifié. -d, --descriptor inclure les descriptors complets de l'enregistrement. -n, --names-only afficher uniquement les noms des fichiers d'enregistrements rencontrés en entrée. �Page d'accueil de %s: <%s> �Page d'accueil de %s: <http://www.gnu.org/software/recutils/> �sous-processus %s�Le sous-processus %s a échoué�le sous-processus %s a reçu le signal fatal %d�%s: %lu: cette ligne contient %lu champs mais %lu champs d'en-têtes ont été lus �%s: erreur: le nombre d'enregistrements de type %s devrait être %zd. �%s: erreur: trop peu d'enregistrements de type %s. Le minimum permis est %zd. �%s: erreur: trop d'enregistrements de type %s. Le maximum permis est %zd. �%s: option invalide -- « %c » �%s: l'option « %s%s » n'accepte pas d'argument �%s: l'option « %s%s » est ambiguë �%s: l'option « %s%s » est ambiguë; les possibilités sont:�%s: l'option « %s%s » exige un argument �%s: l'option exige un argument -- « %c » �%s: option « %s%s » pas reconnue �%s:%s: erreur: %%constraint[%d] violée dans l'enregistrement �%s:%s: erreur: %s ne contient aucune information pour le type %s. �%s:%s: erreur: %s ne contient aucune donnée d'enregistrement valable. �%s:%s: erreur: le champ auto-incrémenté %s devrait être de type entier, plage ou date �%s:%s: erreur: le champ auto-incrémenté %s devrait être de type entier, plage, uuid ou date �%s:%s: erreur: le champ confidentiel n'est pas chiffré �%s:%s: erreur: le descripteur distant n'a pas pu être récupéré depuis l'URL %s. �%s:%s: erreur: le descripteur externe n'a pas pu être lu depuis le fichier %s. �%s:%s: erreur: valeur de clé en double dans le champ « %s » de l'enregistrement �%s:%s: erreur: une liste de champs délimités par des virgules est attendue devant la spécification de type �%s:%s: erreur: un nom de type est attendu avant la spécification du type �%s:%s: erreur: le champ « %s » n'est pas permis dans cet ensemble d'enregistrements �%s:%s: erreur: le champ « %s » devrait être unique dans cet enregistrement �%s:%s: erreur: type d'enregistrement %s invalide �%s:%s: erreur: spécification type invalide �%s:%s: erreur: spécification typedef invalide �%s:%s: erreur: le champ clé « %s » n'est pas trouvé dans l'enregistrement �%s:%s: erreur: champ obligatoire « %s » pas trouvé dans l'enregistrement �%s:%s: erreur: champ %%rec manquant dans le descripteur de l'enregistrement �%s:%s: erreur: plusieurs champs clé « %s » dans l'enregistrement �%s:%s: erreur: un seul champ %%key permis dans le descripteur d'enregistrement �%s:%s: erreur: un seul champ %%size permis dans le descripteur d'enregistrement �%s:%s: erreur: un seul champ %%sort permis dans le descripteur d'enregistrement �%s:%s erreur: champ prohibé « %s » rencontré dans l'enregistrement �%s:%s: erreur: le type référé %s n'existe pas �%s:%s: erreur: trop de champs %%rec dans le descripteur d'enregistrement �%s:%s: erreur: la valeur de %s devrait être une liste de noms de champs. �%s:%s: erreur: la valeur de %s devrait être un nombre facultatif précédé de >, <, >= ou <=. �%s:%s: erreur: la valeur de %s[%zd] n'est pas une liste de noms de champs �%s:%s: erreur: la valeur de %s[%zd] n'est pas une expression de sélection valide � »�« @timespec » – toujours UTC�©�--password|-s doit être utilisé comme un argument d'opération. �: erreur: �: avertissement: �Actions: -s, --set=VALEUR changer la valeur des champs sélectionnés. -a, --add=VALEUR ajouter les champs sélectionnés avec la valeur indiquée. -S, --set-add=VALEUR changer la valeur des champs sélectionner. Si ils n'existent pas, ajouter un nouveau champ avec cette valeur. -r, --rename=NOM renommer les champs sélectionnés avec le nom indiqué. Si un ensemble complet d'enregistrements est sélectionné, alors le champ est également renommé dans le descripteur d'enregistrement. -d, --delete effacer les champs sélectionnés. -c, --comment mettre en commentaire les champs sélectionnés. �Altérer ou éditer les champs dans les enregistrements. �Appliquer un modèle aux enregistrements lus sur l'entrée standard. �Vérifie et corrige les fichiers enrg. �Convertit un fichier mdb en un fichier d'enregistrements. �Convertit les données csv en des données d'enregistrement. �Convertit les données enrg en données csv. �Copyright (C) %s Jose E. Marchesi. License GPLv3+: GNU GPL version 3 ou supérieure <http://gnu.org/licenses/gpl.html>. Ceci est un logiciel libre: vous êtes libre de le changer et de le redistribuer. Il n'y a PAS de GARANTIE, dans les limites permises par la loi. �Options de dé/chiffrement: -s, --password=MOT_DE_PASSE chiffre/déchiffre avec ce mot de passe. �Options de sélection des champs: -f, --fields=CHAMPS liste séparée par des virgules des noms des champs avec les indices optionnels. �Aide générale sur l'utilisation des logiciels GNU: <http://www.gnu.org/gethelp/> �Si aucun FICHIER n'est spécifié alors la commande agit comme un filtre récupérant les données depuis l'entrée standard et écrivant le résultat sur la sortie standard. �Insérer les nouveaux enregistrements dans une base de données d'enregistrements. �Référence arrière invalide�Nom de classe de caractère invalide�Caractère d'interclassement invalide�Contenu de \{\} invalide�Expression régulière précédente invalide�Fin de plage invalide�Expression régulière invalide�Mémoire épuisée�Aucune correspondance�Pas d'expression régulière précédente�Opérations: --check vérifie l'intégrité du fichier spécifié. Défaut. --sort trier les enregistrements dans le fichier spécifié. --auto insérer des champs auto-générés dans les enregistrements où ils manquent. �Options de sortie: -p, --print=CHAMPS liste séparée par des virgules des champs à afficher pour chaque enregistrement correspondant. -P, --print-values=CHAMPS comme -p mais afficher uniquement les valeurs des champs sélectionnés. -R, --print-row=CHAMPS comme -P mais séparer les valeurs avec des espaces au lieu de sauts de lignes. -c, --count afficher le décompte des enregistrements correspondants au lieu des enregistrements. �Préparé par %s �Préparé par %s (%s) �Mot de passe, à nouveau: �Mot de passe: �Fin prématurée de l'expression régulière�Afficher les informations à propos des types d'enregistrements stockés dans l'entrée. �Options de sélection des enregistrements: -i, --case-insensitive rendre les chaînes insensibles à la casse dans les expressions de sélection. -t, --type=TYPE agir uniquement sur les enregistrements du type sélectionné. -e, --expression=EXPR_ENR expression de sélection. -q, --quick=CHAÃŽNE sélectionner les enregistrements avec des champs contenant une chaîne. -n, --number=NUM,… sélectionner les enregistrements spécifiés par position (plage permise). -m, --random=NUM sélectionner un nombre aléatoire d'enregistrements. �Expression régulière trop grande�Supprime (ou met en commentaire) les enregistrements du fichier enrg. �Rapportez les bogues de %s à: %s �Signalez les bugs à: %s Signalez les erreurs de traduction à: traduc@traduc.org �Sélectionne et affiche les données de l'enregistrement. �Options spéciales: --print-sexps afficher les données en sexps au lieu du format enrg. �Options spéciales: -S, --print-sexps afficher les données en sexps au lieu du format enrg. �Succès�TZ="%s" valeur d'environnement�TZ="%s" dans la chaîne de date�TZ="UTC0" valeur d'environnement ou -u�Barre oblique inverse à la fin�Erreur système inconnue�( ou \( sans correspondant�) ou \) sans correspondant�[, [^, [:, [. ou [= sans correspondant�\{ sans correspondant�Usage: csv2rec [OPTIONS]… [FICHIER_CSV] �Usage mdb2rec [OPTIONS]… FICHIER_MDB [TABLE] �Usage: rec2csv [OPTIONS]… [FICHIER_ENRG] �Usage: recdel [OPTIONS]… [-t TYPE] [-n NUM | -e EXPR_ENR | -q CHAÃŽNE | -m NUM] [FICHIER] �Usage: recfix [OPTION]… [OPÉRATION] [OP_OPTION]… [FICHIER] �Usage: recfmt [OPTION]… [MODÈLE] �Usage: recinf [OPTION]… [FICHIER]… �Usage: recins [OPTION]… [-t TYPE] [-n NUM | -e EXPR_ENR | -q CHAÃŽNE | -m NUM] [(-f CHAÃŽNE -v CHAÃŽNE]|[-r RECDATA)]… [FICHIER] �Usage: recsel [OPTION]… [-t TYPE] [-j CHAMP] [-n INDEXES | -e EXPR_ENRG | -q EXPR | -m NUM] [-c | (-p|-P) EXPR_CHAMP] [FICHIER]… �Usage: recset [OPTION]… [FICHIER]… �Écrit par %s et %s. �Écrit par %s, %s, %s, %s, %s, %s, %s, %s, %s et d'autres. �Écrit par %s, %s, %s, %s, %s, %s, %s, %s et %s. �Écrit par %s, %s, %s, %s, %s, %s, %s et %s. �Écrit par %s, %s, %s, %s, %s, %s et %s. �Écrit par %s, %s, %s, %s, %s et %s. �Écrit par %s, %s, %s, %s et %s. �Écrit par %s, %s, %s et %s. �Écrit par %s, %s et %s. �Écrit par %s. �« �un -f devrait être suivi par un -v �un -v devrait être précédé par un -f �le fichier %s n'a pas pu être ouvert en lecture. �impossible de créer un nom unique. �impossible de lire le fichier %s �vous ne pouvez pas spécifier -[pPR] en même temps que -c. �vous ne pouvez pas spécifier -c en même temps que -p. �vous ne pouvez pas spécifier -e en même temps que -n �vous ne pouvez pas spécifier -e en même temps que -q �vous ne pouvez pas spécifier -m en même temps que -e �vous ne pouvez pas spécifier -m en même temps que -n �vous ne pouvez pas spécifier -m en même temps que -q �vous ne pouvez pas spécifier -n en même temps que -e �vous ne pouvez pas spécifier -n en même temps que -q �le fichier %s n'a pas pu être ouvert �création de l'expression de champ. �date�horodatage�jour�ne spécifiez pas de modèle sur la ligne de commande et avec -f en même temps. �ensemble d'enregistrement « %s » en double dans %s. �erreur lors de l'évaluation d'une expression dans un emplacement de modèle. �erreur lors de l'analyse du fichier CSV: %s �erreur lors de l'analyse de l'enregistrement fourni par -r �erreur: %s:%d �erreur: l'ajout d'une date relative a produit une date invalide: « %s » �erreur: l'ajout d'un temps relatif a provoqué un débordement �erreur: impossible de lire le fichier %s �erreur: année de départ hors limites �erreur: valeur date/temps invalide: �erreur: l'analyse a échoué �erreur: l'analyse a échoué, arrêt à « %s » �erreur: le fuseau horaire %d a causé un débordement de time_t �erreur: échec de tzalloc ("%s") �erreur: mot « %s » inconnu �erreur: débordement de l'année, du mois ou du jour �entier entre %d et %d attendu.�échec à l'initialisation de l'analyseur csv �erreur lors de la normalisation du nom du champ %s �erreur lors de la normalisation du nom de type d'enregistrement %s �erreur lors de la normalisation du nom du champ %s �le fichier %s n'est pas accessible en écriture. �le fichier ne semble pas être une base de données Access �final: %s (UTC%s) �final: %s (UTC) �final: %s (décalage de fuseau horaire inconnu) �hybride�ignore la demande de supprimer tous les enregistrements de type %s. �fuseau horaire incorrect�entrée fuseau horaire: �erreur interne lors de la création de fex. �erreur interne lors de la création de l'expression de champ. �erreur interne: REC_FEX_MAX_ELEMS dépassé. Merci de rapporter ceci. �erreur interne: rec-types: REC_TYPE_NONE reçu de rec_type_parse_type_kind() dans rec_type_new(). �erreur interne: rec_int_rec_extract_file: erreur à la compilation de la regexp. �erreur interne: rec_int_rec_extract_url: erreur à la compilation de la regexp. �erreur interne: rec_match: erreur à la compilation de la regexp. �erreur interne: recutl_index_list_parse: erreur à la compilation de la regexp. �valeur « bool » invalide.�valeur « field » invalide.�valeur « ligne » attendue.�valeur « range » invalide.�valeur « real » invalide.�valeur « uuid » invalide.�fonction d'aggrégation « %s » invalide �date invalide.�email invalide.�valeur énumérée invalide.�expression invalide dans un emplacement de modèle. �expression de champ invalide dans -f. �nom de champ %s invalide. �nom de champ « %s » invalide dans l'en-tête �liste de noms de champs invalide dans -S. �noms de champ invalides dans -G. �noms de champ invalides dans -S. �entier invalide.�liste de champs invalide dans -%c �liste d'index invalide dans -n �expression de sélection invalide �expression de sélection invalide. �les jointures peuvent uniquement être utilisées si un ensemble d'enregistrements nommés est sélectionné. �zone_locale�mémoire épuisée�fuseau horaire manquant�plus d'un mot de passe a été spécifié �nouvelle date de départ: « %s » est « %s » �aucun enregistrement de type %s trouvé. �numéro�nombre de secondes�un seul champ peut servir de critère de jointure. �une seule liste de champs peut servir de critère de groupement. �une seule liste de champs peut servir de critère de tri. �une seule liste de champs peut servir de critère de tri. �opération annulée à cause d'erreurs d'intégrité. �à cours de mémoire �partie %s analysée: �chaîne date/temps analysée�veuillez fournir une valeur pour le champ %s �veuillez spécifier un nom de champ correct avec -j|--join. �veuillez ne spécifier qu'une seule action. �veuillez n'indiquer qu'une seule opération �veuillez n'indiquer qu'un seul mot de passe. �veuillez spécifier des champs avec -f. �veuillez utiliser --force ou --decrypt �préservation des permissions pour %s�recfmt_apply_template: erreur à la compilation de la regexp. Merci de rapporter ceci. �relative�renomme le fichier %s en %s �défini les permissions pour %s�plusieurs types d'enregistrements trouvés. Veuillez utiliser -t pour en spécifier un. �date/heure de départ: « %s » �valeur par défaut du système�la base de données contient déjà des champs chiffrés �les mots de passes entrés ne sont pas les mêmes. �l'opération de renommage requiert un seul champ avec un indice optionnel. �l'opération spécifiée n'a pas besoin de mot de passe. �temps�fuseau horaire: TZ="%s" valeur d'environnement �fuseau horaire: Temps Universel �fuseau horaire: valeur par défaut du système �aujourd'hui/ce/maintenant �opération inconnue dans recfix: veuillez rapporter ceci comme un bug. �utilisez --force si vous voulez réellement continuer ou alors utilisez -n ou -e. �utilisez --force pour ignorer la validation d'intégrité. �utilisez --verbose pour obtenir un rapport détaillé. �utilisation de la date courante comme valeur de départ: « %s » �utilisation du temps actuel comme point de départ: « %s » �utilisation du temps spécifié comme valeur de départ: « %s » �valeur ne correspond pas à l'expression régulière.�valeur trop grande. Taille attendue <= %zu.�attention: le jour (%s) est ignoré quand des dates explicites sont fournies �attention: l'heure été/hiver a été changée après l'ajustement de la date �attention: l'heure été/hiver a changé le temps après l'ajustement �attention: l'ajustement du mois/année a résulté en des dates décalées: �attention: lors de l'ajout de jours relatifs, il est recommandé de spécifier midi �attention: lors de l'ajout d'années/mois relatifs, il est recommandé de spécifier le 15 du mois �Erreur d'écriture�zone�PRIdMAX�year: %04�%s (day ordinal=% number=%d)�number of seconds: %�warning: value % has % digits. Assuming YYYY/MM/DD �warning: value % has less than 4 digits. Assuming MM/DD/YY[YY] �warning: adjusting year value % to % �error: out-of-range year % �error: invalid hour %%s �error: day '%s' (day ordinal=% number=%d) resulted in an invalid date: '%s' �after date adjustment (%+ years, %+ months, %+ days), �'%s' = % epoch-seconds �after time adjustment (%+ hours, %+ minutes, %+ seconds, %+d ns), � new time = % epoch-seconds �final: %.%09d (epoch-seconds) �année: %04�%s (jour ordinal=% numéro=%d)�nombre de secondes: %�attention: la valeur % a % chiffres. On suppose AAAA/MM/JJ �attention: la valeur % a moins de 4 chiffres. On suppose MM/JJ/AA[AA] �attention: ajustement de la valeur de l'année % en % �erreur: année % hors limites �erreur: heure %%s invalide �erreur: le jour « %s » (jour ordinal=% numéro=%d) a résulté en une date invalide: « %s » �après l'ajustement de la date (%+ années, %+ mois, %+ jours), �« %s » = % secondes-époque �après l'ajustement du temps (%+ heures, %+ minutes, %+ secondes, %+d ns), � nouveau temps = % secondes-époque �final: %.%09d (secondes-époque) ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/stamp-po����������������������������������������������������������������������������0000644�0000000�0000000�00000000012�14226577416�012214� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������timestamp ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/recutils.pot������������������������������������������������������������������������0000644�0000000�0000000�00000121031�14226577415�013113� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# SOME DESCRIPTIVE TITLE. # Copyright (C) YEAR Free Software Foundation, Inc. # This file is distributed under the same license as the GNU recutils package. # FIRST AUTHOR <EMAIL@ADDRESS>, YEAR. # #, fuzzy msgid "" msgstr "" "Project-Id-Version: GNU recutils 1.9\n" "Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" "POT-Creation-Date: 2022-04-16 19:38+0200\n" "PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" "Last-Translator: FULL NAME <EMAIL@ADDRESS>\n" "Language-Team: LANGUAGE <LL@li.org>\n" "Language: \n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=CHARSET\n" "Content-Transfer-Encoding: 8bit\n" #: lib/closeout.c:122 msgid "write error" msgstr "" #: lib/copy-acl.c:54 lib/copy-file.c:215 #, c-format msgid "preserving permissions for %s" msgstr "" #: lib/copy-file.c:192 #, c-format msgid "error while opening %s for reading" msgstr "" #: lib/copy-file.c:196 #, c-format msgid "cannot open backup file %s for writing" msgstr "" #: lib/copy-file.c:200 #, c-format msgid "error reading %s" msgstr "" #: lib/copy-file.c:204 #, c-format msgid "error writing %s" msgstr "" #: lib/copy-file.c:208 #, c-format msgid "error after reading %s" msgstr "" #: lib/error.c:195 msgid "Unknown system error" msgstr "" #: lib/execute.c:348 lib/wait-process.c:291 lib/wait-process.c:365 #, c-format msgid "%s subprocess failed" msgstr "" #: lib/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "" #: lib/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "" #: lib/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "" #: lib/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "" #: lib/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "" #: lib/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "" #: lib/getopt.c:636 lib/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "" #: lib/obstack.c:337 lib/obstack.c:339 lib/xalloc-die.c:34 msgid "memory exhausted" msgstr "" #: lib/openat-die.c:38 #, c-format msgid "unable to record current working directory" msgstr "" #: lib/openat-die.c:57 #, c-format msgid "failed to return to initial working directory" msgstr "" #: parse-datetime.y:440 parse-datetime.y:540 #, c-format msgid "parsed %s part: " msgstr "" #: parse-datetime.y:455 #, c-format msgid "year: %04<PRIdMAX>" msgstr "" #: parse-datetime.y:483 #, c-format msgid "%s (day ordinal=%<PRIdMAX> number=%d)" msgstr "" #: parse-datetime.y:514 #, c-format msgid "number of seconds: %<PRIdMAX>" msgstr "" #: parse-datetime.y:547 msgid "today/this/now\n" msgstr "" #: parse-datetime.y:612 msgid "number of seconds" msgstr "" #: parse-datetime.y:625 msgid "datetime" msgstr "" #: parse-datetime.y:630 msgid "time" msgstr "" #: parse-datetime.y:635 msgid "local_zone" msgstr "" #: parse-datetime.y:640 msgid "zone" msgstr "" #: parse-datetime.y:645 msgid "date" msgstr "" #: parse-datetime.y:650 msgid "day" msgstr "" #: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 msgid "relative" msgstr "" #: parse-datetime.y:658 msgid "number" msgstr "" #: parse-datetime.y:662 msgid "hybrid" msgstr "" #: parse-datetime.y:820 #, c-format msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" msgstr "" #: parse-datetime.y:832 #, c-format msgid "" "warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" msgstr "" #: parse-datetime.y:1279 #, c-format msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" msgstr "" #: parse-datetime.y:1289 #, c-format msgid "error: out-of-range year %<PRIdMAX>\n" msgstr "" #: parse-datetime.y:1520 #, c-format msgid "error: unknown word '%s'\n" msgstr "" #: parse-datetime.y:1669 msgid "error: invalid date/time value:\n" msgstr "" #: parse-datetime.y:1670 #, c-format msgid " user provided time: '%s'\n" msgstr "" #: parse-datetime.y:1672 #, c-format msgid " normalized time: '%s'\n" msgstr "" #: parse-datetime.y:1695 msgid " possible reasons:\n" msgstr "" #: parse-datetime.y:1697 msgid " non-existing due to daylight-saving time;\n" msgstr "" #: parse-datetime.y:1699 msgid " invalid day/month combination;\n" msgstr "" #: parse-datetime.y:1700 msgid " numeric values overflow;\n" msgstr "" #: parse-datetime.y:1701 msgid "incorrect timezone" msgstr "" #: parse-datetime.y:1702 msgid "missing timezone" msgstr "" #: parse-datetime.y:1810 msgid "error: initial year out of range\n" msgstr "" #: parse-datetime.y:1905 msgid "error: parsing failed\n" msgstr "" #: parse-datetime.y:1906 #, c-format msgid "error: parsing failed, stopped at '%s'\n" msgstr "" #: parse-datetime.y:1916 msgid "input timezone: " msgstr "" #: parse-datetime.y:1919 #, c-format msgid "'@timespec' - always UTC" msgstr "" #: parse-datetime.y:1921 #, c-format msgid "parsed date/time string" msgstr "" #: parse-datetime.y:1925 #, c-format msgid "TZ=\"%s\" in date string" msgstr "" #: parse-datetime.y:1929 #, c-format msgid "TZ=\"UTC0\" environment value or -u" msgstr "" #: parse-datetime.y:1932 #, c-format msgid "TZ=\"%s\" environment value" msgstr "" #: parse-datetime.y:1935 #, c-format msgid "system default" msgstr "" #: parse-datetime.y:1977 msgid "error: year, month, or day overflow\n" msgstr "" #: parse-datetime.y:1988 #, c-format msgid "error: invalid hour %<PRIdMAX>%s\n" msgstr "" #: parse-datetime.y:1996 #, c-format msgid "using specified time as starting value: '%s'\n" msgstr "" #: parse-datetime.y:1997 #, c-format msgid "using current time as starting value: '%s'\n" msgstr "" #: parse-datetime.y:2051 #, c-format msgid "error: tzalloc (\"%s\") failed\n" msgstr "" #: parse-datetime.y:2095 #, c-format msgid "" "error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " "date: '%s'\n" msgstr "" #: parse-datetime.y:2106 #, c-format msgid "new start date: '%s' is '%s'\n" msgstr "" #: parse-datetime.y:2115 #, c-format msgid "using current date as starting value: '%s'\n" msgstr "" #: parse-datetime.y:2119 #, c-format msgid "warning: day (%s) ignored when explicit dates are given\n" msgstr "" #: parse-datetime.y:2123 #, c-format msgid "starting date/time: '%s'\n" msgstr "" #: parse-datetime.y:2133 msgid "" "warning: when adding relative months/years, it is recommended to specify the " "15th of the months\n" msgstr "" #: parse-datetime.y:2138 msgid "warning: when adding relative days, it is recommended to specify noon\n" msgstr "" #: parse-datetime.y:2148 #, c-format msgid "error: %s:%d\n" msgstr "" #: parse-datetime.y:2163 #, c-format msgid "error: adding relative date resulted in an invalid date: '%s'\n" msgstr "" #: parse-datetime.y:2172 #, c-format msgid "" "after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " "days),\n" msgstr "" #: parse-datetime.y:2176 #, c-format msgid " new date/time = '%s'\n" msgstr "" #: parse-datetime.y:2195 msgid "warning: daylight saving time changed after date adjustment\n" msgstr "" #: parse-datetime.y:2214 msgid "warning: month/year adjustment resulted in shifted dates:\n" msgstr "" #: parse-datetime.y:2217 #, c-format msgid " adjusted Y M D: %s %02d %02d\n" msgstr "" #: parse-datetime.y:2219 #, c-format msgid " normalized Y M D: %s %02d %02d\n" msgstr "" #: parse-datetime.y:2248 #, c-format msgid "error: timezone %d caused time_t overflow\n" msgstr "" #: parse-datetime.y:2258 #, c-format msgid "'%s' = %<PRIdMAX> epoch-seconds\n" msgstr "" #: parse-datetime.y:2286 msgid "error: adding relative time caused an overflow\n" msgstr "" #: parse-datetime.y:2297 #, c-format msgid "" "after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " "seconds, %+d ns),\n" msgstr "" #: parse-datetime.y:2303 #, c-format msgid " new time = %<PRIdMAX> epoch-seconds\n" msgstr "" #: parse-datetime.y:2319 msgid "warning: daylight saving time changed after time adjustment\n" msgstr "" #: parse-datetime.y:2329 msgid "timezone: system default\n" msgstr "" #: parse-datetime.y:2331 msgid "timezone: Universal Time\n" msgstr "" #: parse-datetime.y:2333 #, c-format msgid "timezone: TZ=\"%s\" environment value\n" msgstr "" #: parse-datetime.y:2337 #, c-format msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" msgstr "" #: parse-datetime.y:2343 #, c-format msgid "final: %s (UTC)\n" msgstr "" #: parse-datetime.y:2358 #, c-format msgid "final: %s (UTC%s)\n" msgstr "" #: parse-datetime.y:2362 #, c-format msgid "final: %s (unknown time zone offset)\n" msgstr "" #. TRANSLATORS: #. Get translations for open and closing quotation marks. #. The message catalog should translate "`" to a left #. quotation mark suitable for the locale, and similarly for #. "'". For example, a French Unicode local should translate #. these to U+00AB (LEFT-POINTING DOUBLE ANGLE #. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE #. QUOTATION MARK), respectively. #. #. If the catalog has no translation, we will try to #. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and #. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the #. current locale is not Unicode, locale_quoting_style #. will quote 'like this', and clocale_quoting_style will #. quote "like this". You should always include translations #. for "`" and "'" even if U+2018 and U+2019 are appropriate #. for your locale. #. #. If you don't know what to put here, please see #. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> #. and use glyphs suitable for your language. #: lib/quotearg.c:355 msgid "`" msgstr "" #: lib/quotearg.c:356 msgid "'" msgstr "" #: lib/regcomp.c:122 msgid "Success" msgstr "" #: lib/regcomp.c:125 msgid "No match" msgstr "" #: lib/regcomp.c:128 msgid "Invalid regular expression" msgstr "" #: lib/regcomp.c:131 msgid "Invalid collation character" msgstr "" #: lib/regcomp.c:134 msgid "Invalid character class name" msgstr "" #: lib/regcomp.c:137 msgid "Trailing backslash" msgstr "" #: lib/regcomp.c:140 msgid "Invalid back reference" msgstr "" #: lib/regcomp.c:143 msgid "Unmatched [, [^, [:, [., or [=" msgstr "" #: lib/regcomp.c:146 msgid "Unmatched ( or \\(" msgstr "" #: lib/regcomp.c:149 msgid "Unmatched \\{" msgstr "" #: lib/regcomp.c:152 msgid "Invalid content of \\{\\}" msgstr "" #: lib/regcomp.c:155 msgid "Invalid range end" msgstr "" #: lib/regcomp.c:158 msgid "Memory exhausted" msgstr "" #: lib/regcomp.c:161 msgid "Invalid preceding regular expression" msgstr "" #: lib/regcomp.c:164 msgid "Premature end of regular expression" msgstr "" #: lib/regcomp.c:167 msgid "Regular expression too big" msgstr "" #: lib/regcomp.c:170 msgid "Unmatched ) or \\)" msgstr "" #: lib/regcomp.c:650 msgid "No previous regular expression" msgstr "" #: lib/set-acl.c:46 #, c-format msgid "setting permissions for %s" msgstr "" #: lib/version-etc.c:73 #, c-format msgid "Packaged by %s (%s)\n" msgstr "" #: lib/version-etc.c:76 #, c-format msgid "Packaged by %s\n" msgstr "" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: lib/version-etc.c:83 msgid "(C)" msgstr "" #. TRANSLATORS: The %s placeholder is the web address of the GPL license. #: lib/version-etc.c:88 #, c-format msgid "" "License GPLv3+: GNU GPL version 3 or later <%s>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" #. TRANSLATORS: %s denotes an author name. #: lib/version-etc.c:105 #, c-format msgid "Written by %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:109 #, c-format msgid "Written by %s and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:113 #, c-format msgid "Written by %s, %s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:120 #, c-format msgid "" "Written by %s, %s, %s,\n" "and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:127 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:134 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:142 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:150 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:159 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, and %s.\n" msgstr "" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:170 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s, and others.\n" msgstr "" #. TRANSLATORS: The placeholder indicates the bug-reporting address #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for translation #. bugs (typically your translation team's web or email address). #. TRANSLATORS: --help output 5+ (reports) #. TRANSLATORS: the placeholder indicates the bug-reporting address #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap #: lib/version-etc.c:249 utils/recutl.c:114 #, c-format msgid "Report bugs to: %s\n" msgstr "" #: lib/version-etc.c:251 utils/recutl.c:117 #, c-format msgid "Report %s bugs to: %s\n" msgstr "" #: lib/version-etc.c:255 lib/version-etc.c:257 utils/recutl.c:121 #, c-format msgid "%s home page: <%s>\n" msgstr "" #: lib/version-etc.c:260 #, c-format msgid "General help using GNU software: <%s>\n" msgstr "" #: lib/wait-process.c:232 lib/wait-process.c:264 lib/wait-process.c:326 #, c-format msgid "%s subprocess" msgstr "" #: lib/wait-process.c:283 lib/wait-process.c:355 #, c-format msgid "%s subprocess got fatal signal %d" msgstr "" #: src/rec-fex.c:726 #, c-format msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" msgstr "" #: src/rec-int.c:132 src/rec-int.c:186 src/rec-int.c:243 src/rec-int.c:287 #: utils/recutl.c:199 msgid "out of memory\n" msgstr "" #: src/rec-int.c:147 #, c-format msgid "%s:%s: error: mandatory field '%s' not found in record\n" msgstr "" #: src/rec-int.c:210 #, c-format msgid "%s:%s: error: field '%s' not allowed in this record set\n" msgstr "" #: src/rec-int.c:257 #, c-format msgid "%s:%s: error: field '%s' should be unique in this record\n" msgstr "" #: src/rec-int.c:301 #, c-format msgid "%s:%s: error: prohibited field '%s' found in record\n" msgstr "" #: src/rec-int.c:333 #, c-format msgid "%s:%s: error: %%constraint[%d] violated in record\n" msgstr "" #: src/rec-int.c:370 #, c-format msgid "%s:%s: error: confidential field is not encrypted\n" msgstr "" #: src/rec-int.c:422 #, c-format msgid "%s:%s: error: key field '%s' not found in record\n" msgstr "" #: src/rec-int.c:431 #, c-format msgid "%s:%s: error: multiple key fields '%s' in record\n" msgstr "" #: src/rec-int.c:474 #, c-format msgid "%s:%s: error: duplicated key value in field '%s' in record\n" msgstr "" #: src/rec-int.c:562 #, c-format msgid "%s:%s: error: duplicated value in singular field '%s' in record\n" msgstr "" #: src/rec-int.c:620 #, c-format msgid "%s:%s: error: missing %%rec field in record descriptor\n" msgstr "" #: src/rec-int.c:628 #, c-format msgid "%s:%s: error: too many %%rec fields in record descriptor\n" msgstr "" #: src/rec-int.c:638 #, c-format msgid "%s:%s: error: invalid record type %s\n" msgstr "" #: src/rec-int.c:649 #, c-format msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" msgstr "" #: src/rec-int.c:659 #, c-format msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" msgstr "" #: src/rec-int.c:669 #, c-format msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" msgstr "" #: src/rec-int.c:692 #, c-format msgid "" "%s:%s: error: expected a comma-separated list of fields before the type " "specification\n" msgstr "" #: src/rec-int.c:718 src/rec-int.c:771 #, c-format msgid "%s:%s: error: the referred type %s does not exist\n" msgstr "" #: src/rec-int.c:730 #, c-format msgid "%s:%s: error: invalid type specification\n" msgstr "" #: src/rec-int.c:745 #, c-format msgid "%s:%s: error: expected a type name before the type specification\n" msgstr "" #: src/rec-int.c:783 #, c-format msgid "%s:%s: error: invalid typedef specification\n" msgstr "" #: src/rec-int.c:805 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" msgstr "" #: src/rec-int.c:836 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" msgstr "" #: src/rec-int.c:849 #, c-format msgid "" "%s:%s: error: value for %s should be a number optionally preceded by >, <, " ">= or <=.\n" msgstr "" #: src/rec-int.c:865 #, c-format msgid "%s:%s: error: value for %s should be a list of field names.\n" msgstr "" #: src/rec-int.c:893 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range, uuid " "or date\n" msgstr "" #: src/rec-int.c:895 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range or " "date\n" msgstr "" #: src/rec-int.c:978 #, c-format msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" msgstr "" #: src/rec-int.c:997 #, c-format msgid "%s:%s: error: could not read external descriptor from file %s.\n" msgstr "" #: src/rec-int.c:1012 #, c-format msgid "%s:%s: error: %s does not contain valid rec data.\n" msgstr "" #: src/rec-int.c:1026 #, c-format msgid "%s:%s: error: %s does not contain information for type %s.\n" msgstr "" #: src/rec-int.c:1150 #, c-format msgid "%s: error: the number of records of type %s should be %zd.\n" msgstr "" #: src/rec-int.c:1160 #, c-format msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" msgstr "" #: src/rec-int.c:1167 #, c-format msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" msgstr "" #: src/rec-types.c:304 msgid "invalid integer." msgstr "" #: src/rec-types.c:332 msgid "invalid 'field' value." msgstr "" #: src/rec-types.c:353 msgid "invalid 'uuid' value." msgstr "" #: src/rec-types.c:369 msgid "invalid 'bool' value." msgstr "" #: src/rec-types.c:390 msgid "invalid 'range' value." msgstr "" #: src/rec-types.c:399 #, c-format msgid "expected an integer between %d and %d." msgstr "" #: src/rec-types.c:419 msgid "invalid 'real' value." msgstr "" #: src/rec-types.c:436 #, c-format msgid "value too large. Expected a size <= %zu." msgstr "" #: src/rec-types.c:456 msgid "invalid 'line' value." msgstr "" #: src/rec-types.c:473 msgid "value does not match the regexp." msgstr "" #: src/rec-types.c:492 msgid "invalid date." msgstr "" #: src/rec-types.c:506 msgid "invalid email." msgstr "" #: src/rec-types.c:547 msgid "invalid enum value." msgstr "" #: src/rec-types.c:898 #, c-format msgid "" "internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " "in rec_type_new().\n" msgstr "" #: src/rec-utils.c:86 #, c-format msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" msgstr "" #: src/rec-utils.c:116 src/rec-utils.c:147 #, c-format msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" msgstr "" #: src/rec-utils.c:290 #, c-format msgid "internal error: rec_match: error compiling regexp.\n" msgstr "" #. TRANSLATORS: --help output, csv2rec synopsis. #. no-wrap #: utils/csv2rec.c:98 #, c-format msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" msgstr "" #. TRANSLATORS: --help output, csv2rec short description. #. no-wrap #: utils/csv2rec.c:103 msgid "Convert csv data into rec data.\n" msgstr "" #. TRANSLATORS: --help output, csv2rec options. #. no-wrap #: utils/csv2rec.c:109 msgid "" " -t, --type=TYPE type name for the converted records; " "if this\n" " parameter is omitted then no type is " "used.\n" " -s, --strict be strict parsing the csv file.\n" " -e, --omit-empty omit empty fields.\n" msgstr "" #: utils/csv2rec.c:212 #, c-format msgid "invalid field name '%s' in header\n" msgstr "" #: utils/csv2rec.c:221 msgid "error while parsing CSV file: too many columns in row\n" msgstr "" #: utils/csv2rec.c:241 #, c-format msgid "" "%s: %lu: this line contains %lu fields, but %lu header fields were read\n" msgstr "" #: utils/csv2rec.c:331 utils/recdel.c:233 utils/recset.c:306 utils/recutl.c:317 #, c-format msgid "cannot read file %s\n" msgstr "" #: utils/csv2rec.c:338 msgid "failed to initialize csv parser\n" msgstr "" #: utils/csv2rec.c:355 #, c-format msgid "error while parsing CSV file: %s\n" msgstr "" #. TRANSLATORS: --help output, mdb2rec synopsis. #. no-wrap #: utils/mdb2rec.c:97 #, c-format msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" msgstr "" #. TRANSLATORS: --help output, mdb2rec short description. #. no-wrap #: utils/mdb2rec.c:102 msgid "Convert an mdb file into a rec file.\n" msgstr "" #. TRANSLATORS: --help output, mdb2rec options. #. no-wrap #: utils/mdb2rec.c:108 msgid "" " -s, --system-tables include system tables.\n" " -e, --keep-empty-fields don't prune empty fields in the rec\n" " output.\n" " -l, --list-tables dump a list of the table names " "contained\n" " in the mdb file.\n" msgstr "" #: utils/mdb2rec.c:230 utils/mdb2rec.c:288 #, c-format msgid "failed to normalise record type name %s\n" msgstr "" #: utils/mdb2rec.c:236 utils/mdb2rec.c:245 #, c-format msgid "failed to normalise field name %s\n" msgstr "" #: utils/mdb2rec.c:307 #, c-format msgid "failed to normalise the field name %s\n" msgstr "" #: utils/mdb2rec.c:396 utils/recins.c:191 utils/recset.c:223 #, c-format msgid "invalid field name %s.\n" msgstr "" #: utils/mdb2rec.c:436 #, c-format msgid "could not open file %s\n" msgstr "" #: utils/mdb2rec.c:441 msgid "file does not appear to be an Access database\n" msgstr "" #. TRANSLATORS: --help output, rec2csv synopsis. #. no-wrap #: utils/rec2csv.c:70 #, c-format msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" msgstr "" #. TRANSLATORS: --help output, rec2csv short description. #. no-wrap #: utils/rec2csv.c:75 msgid "Convert rec data into csv data.\n" msgstr "" #. TRANSLATORS: --help output, rec2csv options. #. no-wrap #: utils/rec2csv.c:81 msgid "" " -d, --delim=char sets the deliminator (default ',')\n" " -t, --type=TYPE record set to convert to csv; if this " "parameter\n" " is omitted then the default record " "set is used\n" " -S, --sort=FIELDS sort the output by the specified " "fields.\n" msgstr "" #: utils/rec2csv.c:121 msgid "only one list of fields can be specified as a sorting criteria.\n" msgstr "" #: utils/rec2csv.c:126 msgid "invalid field name list in -S.\n" msgstr "" #: utils/rec2csv.c:130 utils/recsel.c:221 utils/recsel.c:245 msgid "internal error creating fex.\n" msgstr "" #. TRANSLATORS: --help output, recdel synopsis. #. no-wrap #: utils/recdel.c:78 #, c-format msgid "" "Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [FILE]\n" msgstr "" #. TRANSLATORS: --help output, recdel short description. #. no-wrap #: utils/recdel.c:83 msgid "Remove (or comment out) records from a rec file.\n" msgstr "" #. TRANSLATORS: --help output, recdel arguments. #. no-wrap #: utils/recdel.c:90 msgid "" " -c, --comment comment out the matching records " "instead of\n" " deleting them.\n" " --force delete even in potentially dangerous " "situations,\n" " and if the deletion is violating " "record restrictions.\n" " --no-external don't use external descriptors.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" #. TRANSLATORS: --help output, notes on recdel. #. no-wrap #. TRANSLATORS: --help output, notes on recfix. #. no-wrap #. TRANSLATORS: --help output, notes on recins. #. no-wrap #: utils/recdel.c:108 utils/recfix.c:149 utils/recins.c:138 msgid "" "If no FILE is specified then the command acts like a filter, getting\n" "the data from standard input and writing the result to standard output.\n" msgstr "" #: utils/recdel.c:123 #, c-format msgid "no records of type %s found.\n" msgstr "" #: utils/recdel.c:196 #, c-format msgid "ignoring a request to delete all records of type %s.\n" msgstr "" #: utils/recdel.c:198 msgid "use --force if you really want to proceed, or use either -n or -e.\n" msgstr "" #: utils/recdel.c:206 msgid "invalid selection expression.\n" msgstr "" #: utils/recdel.c:241 utils/recfix.c:344 utils/recins.c:361 utils/recset.c:312 #, c-format msgid "file %s is not writable.\n" msgstr "" #. TRANSLATORS: --help output, recfix synopsis. #. no-wrap #: utils/recfix.c:99 #, c-format msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" msgstr "" #. TRANSLATORS: --help output, recfix short description. #. no-wrap #: utils/recfix.c:104 msgid "Check and fix rec files.\n" msgstr "" #. TRANSLATORS: --help output, recfix global arguments. #. no-wrap #: utils/recfix.c:111 msgid "" " --no-external don't use external descriptors.\n" " --force force the requested operation.\n" msgstr "" #. TRANSLATORS: --help output, recfix operations. #. no-wrap #: utils/recfix.c:121 msgid "" "Operations:\n" " --check check integrity of the specified " "file. Default.\n" " --sort sort the records in the specified " "file.\n" " --auto insert auto-generated fields in " "records missing them.\n" msgstr "" #. TRANSLATORS: --help output, recfix operations related with encryption. #. no-wrap #: utils/recfix.c:131 msgid "" " --encrypt encrypt confidential fields in the " "specified file.\n" " --decrypt decrypt confidential fields in the " "specified file.\n" msgstr "" #. TRANSLATORS: --help output, recfix encryption and decryption #. options. #. no-wrap #: utils/recfix.c:140 msgid "" "De/Encryption options:\n" " -s, --password=PASSWORD encrypt/decrypt with this password.\n" msgstr "" #: utils/recfix.c:184 msgid "--password|-s must be used as an operation argument.\n" msgstr "" #: utils/recfix.c:188 msgid "the specified operation does not require a password.\n" msgstr "" #: utils/recfix.c:191 msgid "please specify just one password.\n" msgstr "" #: utils/recfix.c:198 utils/recfix.c:204 utils/recfix.c:210 utils/recfix.c:217 #: utils/recfix.c:223 msgid "please specify just one operation.\n" msgstr "" #: utils/recfix.c:304 utils/recfix.c:326 utils/recfix.c:365 utils/recfix.c:435 #, c-format msgid "recfix: error: cannot read file %s\n" msgstr "" #: utils/recfix.c:399 msgid "the database contains already encrypted fields\n" msgstr "" #: utils/recfix.c:400 msgid "please use --force or --decrypt\n" msgstr "" #: utils/recfix.c:499 msgid "unknown operation in recfix: please report this as a bug.\n" msgstr "" #. TRANSLATORS: --help output, recfmt synopsis. #. no-wrap #: utils/recfmt.c:64 #, c-format msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" msgstr "" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:69 msgid "Apply a template to records read from standard input.\n" msgstr "" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:75 msgid "" " -f, --file=FILENAME read the template to apply from a " "file.\n" msgstr "" #: utils/recfmt.c:107 #, c-format msgid "can't open file %s for reading.\n" msgstr "" #: utils/recfmt.c:120 msgid "don't specify a template in the command line and -f at the same time.\n" msgstr "" #: utils/recfmt.c:142 msgid "invalid expression in a template slot.\n" msgstr "" #: utils/recfmt.c:146 msgid "error evaluating expression in a template slot.\n" msgstr "" #: utils/recfmt.c:178 msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" msgstr "" #. TRANSLATORS: --help output, recinf synopsis. #. no-wrap #: utils/recinf.c:77 #, c-format msgid "Usage: recinf [OPTION]... [FILE]...\n" msgstr "" #. TRANSLATORS: --help output, recinf short description. #. no-wrap #: utils/recinf.c:82 msgid "Print information about the types of records stored in the input.\n" msgstr "" #. TRANSLATORS: --help output, recinf arguments. #. no-wrap #: utils/recinf.c:89 msgid "" " -t, --type=RECORD_TYPE print information on the records having " "the\n" " specified type.\n" " -d, --descriptor include the full record descriptors.\n" " -n, --names-only output just the names of the record files\n" " found in the input.\n" msgstr "" #. TRANSLATORS: --help output, recinf special options. #. no-wrap #: utils/recinf.c:102 msgid "" "Special options:\n" " -S, --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" #: utils/recinf.c:234 #, c-format msgid "error: cannot read file %s\n" msgstr "" #. TRANSLATORS: --help output, recins synopsis. #. no-wrap #: utils/recins.c:100 #, c-format msgid "" "Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" msgstr "" #. TRANSLATORS: --help output, recins short description. #. no-wrap #: utils/recins.c:105 msgid "Insert new records in a rec database.\n" msgstr "" #. TRANSLATORS: --help output, recins arguments. #. no-wrap #: utils/recins.c:111 msgid "" " -f, --field=STR field name; should be followed by a -" "v.\n" " -v, --value=STR field value; should be preceded by an -" "f.\n" " -r, --record=STR record that will be inserted in the " "file.\n" " --force insert the record even if it is " "violating\n" " record restrictions.\n" " --no-external don't use external descriptors.\n" " --no-auto don't insert auto generated fields.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recins.c:125 msgid "" " -s, --password=STR encrypt confidential fields with the " "given password.\n" msgstr "" #: utils/recins.c:179 msgid "a -f should be followed by a -v\n" msgstr "" #: utils/recins.c:198 msgid "a -v should be preceded by a -f\n" msgstr "" #: utils/recins.c:214 utils/recsel.c:204 msgid "more than one password was specified\n" msgstr "" #: utils/recins.c:224 msgid "error while parsing the record provided by -r\n" msgstr "" #: utils/recins.c:256 #, c-format msgid "please provide a value for the field %s\n" msgstr "" #. TRANSLATORS: --help output, recsel synopsis. #. no-wrap #: utils/recsel.c:107 #, c-format msgid "" "Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " "| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" msgstr "" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:112 msgid "Select and print rec data.\n" msgstr "" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:118 msgid "" " -d, --include-descriptors print record descriptors along with " "the matched\n" " records.\n" " -C, --collapse do not section the result in records " "with newlines.\n" " -S, --sort=FIELD,... sort the output by the specified " "fields.\n" " -G, --group-by=FIELD,... group records by the specified " "fields.\n" " -U, --uniq remove duplicated fields in the output " "records.\n" msgstr "" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recsel.c:130 msgid "" " -s, --password=STR decrypt confidential fields with the " "given password.\n" msgstr "" #: utils/recsel.c:139 msgid "" " -j, --join=FIELD perform an inner join using the " "specified field.\n" msgstr "" #. TRANSLATORS: --help output, recsel output options. #. no-wrap #: utils/recsel.c:146 msgid "" "Output options:\n" " -p, --print=FIELDS comma-separated list of fields to " "print for each\n" " matching record.\n" " -P, --print-values=FIELDS as -p, but print only the values of " "the selected\n" " fields.\n" " -R, --print-row=FIELDS as -P, but separate the values with " "spaces instead\n" " of newlines.\n" " -c, --count print a count of the matching records " "instead of\n" " the records themselves.\n" msgstr "" #. TRANSLATORS: --help output, recsel special options. #. no-wrap #: utils/recsel.c:160 msgid "" "Special options:\n" " --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" #: utils/recsel.c:212 msgid "only one field list can be specified as a sorting criteria.\n" msgstr "" #: utils/recsel.c:217 msgid "invalid field names in -S.\n" msgstr "" #: utils/recsel.c:226 msgid "only one field can be specified as join criteria.\n" msgstr "" #: utils/recsel.c:229 msgid "please specify a correct field name to -j|--join.\n" msgstr "" #: utils/recsel.c:236 msgid "only one field list can be specified as a grouping criteria.\n" msgstr "" #: utils/recsel.c:241 msgid "invalid field names in -G.\n" msgstr "" #: utils/recsel.c:255 msgid "cannot specify -[pPR] and also -c.\n" msgstr "" #: utils/recsel.c:266 #, c-format msgid "invalid list of fields in -%c\n" msgstr "" #: utils/recsel.c:272 msgid "internal error creating the field expression.\n" msgstr "" #: utils/recsel.c:284 #, c-format msgid "invalid aggregate function '%s'\n" msgstr "" #: utils/recsel.c:296 msgid "cannot specify -c and also -p.\n" msgstr "" #: utils/recsel.c:309 msgid "joins can only be used when a named record set is selected.\n" msgstr "" #: utils/recsel.c:363 msgid "several record types found. Please use -t to specify one.\n" msgstr "" #. TRANSLATORS: --help output, recset synopsis. #. no-wrap #: utils/recset.c:99 #, c-format msgid "Usage: recset [OPTION]... [FILE]...\n" msgstr "" #. TRANSLATORS: --help output, recset short description. #. no-wrap #: utils/recset.c:104 msgid "Alter or delete fields in records.\n" msgstr "" #. TRANSLATORS: --help output, recset options. #. no-wrap #: utils/recset.c:110 msgid "" " --no-external don't use external descriptors.\n" " --force alter the records even if violating " "record\n" " restrictions.\n" msgstr "" #. TRANSLATORS: --help output, recset field selection options. #. no-wrap #: utils/recset.c:123 msgid "" "Field selection options:\n" " -f, --fields=FIELDS comma-separated list of field names " "with optional\n" " subscripts.\n" msgstr "" #. TRANSLATORS: --help output, recset actions. #. no-wrap #: utils/recset.c:131 msgid "" "Actions:\n" " -s, --set=VALUE change the value of the selected " "fields.\n" " -a, --add=VALUE add the selected fields with the given " "value.\n" " -S, --set-add=VALUE change the value of the selected " "fields. If they don't\n" " exist then add a new field with that " "value.\n" " -r, --rename=NAME rename the selected fields to a given " "name. If an entire\n" " record set is selected then the " "field is renamed in the\n" " record descriptor as well.\n" " -d, --delete delete the selected fields.\n" " -c, --comment comment out the selected fields.\n" msgstr "" #: utils/recset.c:154 msgid "please specify some field with -f.\n" msgstr "" #: utils/recset.c:159 msgid "please specify just one action.\n" msgstr "" #: utils/recset.c:193 msgid "invalid field expression in -f.\n" msgstr "" #: utils/recset.c:199 msgid "creating the field expression.\n" msgstr "" #: utils/recset.c:214 msgid "" "the rename operation requires just one field with an optional subscript.\n" msgstr "" #: utils/recutl.c:123 #, c-format msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" msgstr "" #: utils/recutl.c:126 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" #. TRANSLATORS: --help output, common arguments. #. no-wrap #: utils/recutl.c:135 msgid "" " --help print a help message and exit.\n" " --version show version and exit.\n" msgstr "" #. TRANSLATORS: --help output, record selection arguments #. no-wrap #: utils/recutl.c:146 msgid "" "Record selection options:\n" " -i, --case-insensitive make strings case-insensitive in " "selection\n" " expressions.\n" " -t, --type=TYPE operate on records of the specified " "type only.\n" " -e, --expression=RECORD_EXPR selection expression.\n" " -q, --quick=STR select records with fields containing " "a string.\n" " -n, --number=NUM,... select specific records by position, " "with ranges.\n" " -m, --random=NUM select a given number of random " "records.\n" msgstr "" #: utils/recutl.c:171 #, c-format msgid "" "Copyright (C) %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" #: utils/recutl.c:177 msgid "" "\n" "Written by Jose E. Marchesi." msgstr "" #: utils/recutl.c:189 utils/recutl.c:209 msgid ": error: " msgstr "" #: utils/recutl.c:221 msgid ": warning: " msgstr "" #: utils/recutl.c:246 #, c-format msgid "duplicated record set '%s' from %s.\n" msgstr "" #: utils/recutl.c:401 msgid "cannot create a unique name.\n" msgstr "" #: utils/recutl.c:421 #, c-format msgid "renaming file %s to %s\n" msgstr "" #: utils/recutl.c:463 msgid "operation aborted due to integrity failures.\n" msgstr "" #: utils/recutl.c:464 msgid "use --verbose to get a detailed report.\n" msgstr "" #: utils/recutl.c:471 msgid "use --force to skip the integrity check.\n" msgstr "" #: utils/recutl.c:529 msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" msgstr "" #: utils/recutl.c:596 msgid "Password: " msgstr "" #: utils/recutl.c:602 msgid "Password again: " msgstr "" #: utils/recutl.c:607 msgid "the provided passwords don't match.\n" msgstr "" #: utils/recutl.h:84 utils/recutl.h:131 utils/recutl.h:133 msgid "cannot specify -e and also -n\n" msgstr "" #: utils/recutl.h:86 msgid "cannot specify -e and also -q\n" msgstr "" #: utils/recutl.h:94 msgid "invalid selection expression\n" msgstr "" #: utils/recutl.h:100 msgid "cannot specify -n and also -e\n" msgstr "" #: utils/recutl.h:102 msgid "cannot specify -n and also -q\n" msgstr "" #: utils/recutl.h:106 msgid "invalid list of indexes in -n\n" msgstr "" #: utils/recutl.h:111 msgid "cannot specify -m and also -e\n" msgstr "" #: utils/recutl.h:113 msgid "cannot specify -m and also -q\n" msgstr "" #: utils/recutl.h:115 msgid "cannot specify -m and also -n\n" msgstr "" �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/Rules-quot��������������������������������������������������������������������������0000644�0000000�0000000�00000004233�13253176007�012533� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# This file, Rules-quot, can be copied and used freely without restrictions. # Special Makefile rules for English message catalogs with quotation marks. DISTFILES.common.extra1 = quot.sed boldquot.sed en@quot.header en@boldquot.header insert-header.sin Rules-quot .SUFFIXES: .insert-header .po-update-en en@quot.po-create: $(MAKE) en@quot.po-update en@boldquot.po-create: $(MAKE) en@boldquot.po-update en@quot.po-update: en@quot.po-update-en en@boldquot.po-update: en@boldquot.po-update-en .insert-header.po-update-en: @lang=`echo $@ | sed -e 's/\.po-update-en$$//'`; \ if test "$(PACKAGE)" = "gettext-tools" && test "$(CROSS_COMPILING)" != "yes"; then PATH=`pwd`/../src:$$PATH; GETTEXTLIBDIR=`cd $(top_srcdir)/src && pwd`; export GETTEXTLIBDIR; fi; \ tmpdir=`pwd`; \ echo "$$lang:"; \ ll=`echo $$lang | sed -e 's/@.*//'`; \ LC_ALL=C; export LC_ALL; \ cd $(srcdir); \ if $(MSGINIT) $(MSGINIT_OPTIONS) -i $(DOMAIN).pot --no-translator -l $$lang -o - 2>/dev/null \ | $(SED) -f $$tmpdir/$$lang.insert-header | $(MSGCONV) -t UTF-8 | \ { case `$(MSGFILTER) --version | sed 1q | sed -e 's,^[^0-9]*,,'` in \ '' | 0.[0-9] | 0.[0-9].* | 0.1[0-8] | 0.1[0-8].*) \ $(MSGFILTER) $(SED) -f `echo $$lang | sed -e 's/.*@//'`.sed \ ;; \ *) \ $(MSGFILTER) `echo $$lang | sed -e 's/.*@//'` \ ;; \ esac } 2>/dev/null > $$tmpdir/$$lang.new.po \ ; then \ if cmp $$lang.po $$tmpdir/$$lang.new.po >/dev/null 2>&1; then \ rm -f $$tmpdir/$$lang.new.po; \ else \ if mv -f $$tmpdir/$$lang.new.po $$lang.po; then \ :; \ else \ echo "creation of $$lang.po failed: cannot move $$tmpdir/$$lang.new.po to $$lang.po" 1>&2; \ exit 1; \ fi; \ fi; \ else \ echo "creation of $$lang.po failed!" 1>&2; \ rm -f $$tmpdir/$$lang.new.po; \ fi en@quot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@quot.header/g' $(srcdir)/insert-header.sin > en@quot.insert-header en@boldquot.insert-header: insert-header.sin sed -e '/^#/d' -e 's/HEADER/en@boldquot.header/g' $(srcdir)/insert-header.sin > en@boldquot.insert-header mostlyclean: mostlyclean-quot mostlyclean-quot: rm -f *.insert-header ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/nl.gmo������������������������������������������������������������������������������0000644�0000000�0000000�00000100612�14226577416�011655� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����Ä������<����\ ������x�����y��²���—��‚���J��Í���Í��‹���›����'��E��/��Ó��u��Ž��I��N���Ø��W���'��[�����[���Û��?��7��M��w�����Å��6���Ù�� ����������!���3��;���U��@���‘��A���Ò����� ��(���0 ��2���Y ��;���Œ ��2���È ��M���û ��S���I!��2���!��=���Ð!��?���"��;���N"��V���Š"��A���á"��8���##��9���\#��%���–#��)���¼#��,���æ#��1���$��7���E$��7���}$��1���µ$��E���ç$��F���-%��F���t%��4���»%��2���ð%��9���#&��<���]&��U���š&��=���ð&��D���.'�����s'��5���u'�� ���«'�� ���µ'��ê��Á'��#���¬*��6���Ð*�����+��%���!+�� ���G+�� ���h+��ë���‰+��a���u,��¥���×,��?���}-�����½-��&���K.�����r.�����‰.�����¦.�����Â.��$���Ú.�����ÿ.�����/�����,/�����=/�����F/�� ��e/��L��s0�����À2�� ���Ñ2��#���Ü2��B����3��.��C3�����r5��1���5�����¿5�����Ö5�����ê5��f���6��f���m6�����Ô6�����Ü6�����ï6�����7�����7�� ���(7��'���57��-���]7��'���‹7��X���³7��<��� 8��%���I8��$���o8��z���”8��ƒ���9��$���“9�����¸9�� ���º9�� ���Û9�� ���ü9�����:�����;:��#���P:�����t:�����”:�����¬:��F���Ì:��$���;��0���8;��!���i;��.���‹;�����º;��&���Ö;�� ���ý;��"���<��(���A<��&���j<�����‘<��.���«<��5���Ú<�����=��.���.=��A���]=��`���Ÿ=��B����>��A���C>��3���…>��A���¹>�����û>�����?�����(?�����>?�����U?�����k?�� ���?�� ���¢?�����°?�����¿?��'���Ó?�� ���û?�����@��"���4@�����W@�����w@�����“@�����¯@�����À@�����ß@��<���þ@�����;A��%���LA�����rA��2���A��=���ÃA��<���B��@���>B��-���B�����­B��(���¼B��2���åB�� ���C��#���9C��"���]C��#���€C�� ���¤C��C���ÅC����� D��;���!D��/���]D��$���D��I���²D��5���üD��:���2E��C���mE��)���±E��(���ÛE�� ���F��)���%F�� ���OF��ó��[F��"���OH��€���rH��{���óH��‘���oI��~���J��Ý��€J��+��^L��–��ŠM��:��!O��I���\Q��L���¦Q��R���óQ��R���FR��Ë���™R��ß���eS�����ET��:���]T�� ���˜T�����¥T��*���½T��8���èT��@���!U��>���bU�����¡U��'���¾U��9���æU��4��� V��1���UV��Y���‡V��_���áV��4���AW��@���vW��?���·W��6���÷W��^���.X��G���X��<���ÕX��5���Y��$���HY��(���mY��.���–Y��6���ÅY��9���üY��7���6Z��3���nZ��L���¢Z��M���ïZ��M���=[��3���‹[��*���¿[��6���ê[��@���!\��i���b\��?���Ì\��F��� ]�����S]��C���W]�����›]�����¤]��ó��µ]��)���©`��A���Ó`��(���a��2���>a��8���qa��8���ªa��G��ãa��o���+c��‰���›c��J���%d�� ���pd��)���e�����;e�����Ue�����oe�����‹e��*���¥e�����Ðe�����åe�� ���f�����$f�� ���8f��"��Yf��ª��|g�����'i�� ���<i��(���Ii��@���ri����³i�����¸k��E���Øk��q���l��l���l��"���ýl��‡��� m��‡���¨m�����0n�����7n�����Nn�����dn�����wn�� ���Šn��+���˜n��1���Än��+���ön��Ž���"o��G���±o��'���ùo��)���!p��Á���Kp��½��� q��)���Ëq�����õq��4���ùq��9���.r��(���hr�����‘r�����±r��*���Ìr��%���÷r�����s�����:s��A���Zs��!���œs��.���¾s��*���ís��9���t��!���Rt��,���tt��*���¡t��#���Ìt��)���ðt��#���u�� ���>u��.���_u��D���Žu��A���Óu��A���v��g���Wv��d���¿v��W���$w��V���|w��F���Ów��V���x�����qx�����x�����®x�����Ìx�����ëx����� y�����%y�����Ey�����Vy�����ly��-���ˆy��(���¶y�����ßy��$���÷y��)���z��$���Fz��$���kz�����z��$���§z�����Ìz��]���ëz�� ���I{��*���j{��#���•{��E���¹{��M���ÿ{��I���M|��K���—|��6���ã|��!���}��-���<}��@���j}��$���«}��(���Ð}��)���ù}��-���#~��*���Q~��T���|~��!���Ñ~��L���ó~��)���@��,���j��>���—��/���Ö��G���€��K���N€��B���š€��:���Ý€��1�����3���J�� ���~�����e���g���L���Œ���¾���m������µ��������������¸���J���ž���d���������¡���Q���=���u��� ���ˆ���Ÿ���;������������������,�������~�����������­�������’���½���9�������U���y������A���f���‡���Â���¤�������X���F���b�������E���(��������������� ���¼���>���‚���„���N���-������B����������� �������.���l���+���^����������D���±���\������x�������€���©���0������V���°����������)���™���¢���¿���2������?�������%���O���������������‰���������Z����������£�������›���I���¨���:�������������–���¬���P������1�������˜���&���Á�������Š���À��� ���•���´�����������5���G���®���“���!�������¶�������*���$�����������†���/���q���s���œ�����������3�������Ä���c�������j������i���w���������������R���v���ª�������<���ƒ���C���t��� �������a������}���T�������@���4���³���������� �������#���—���K���r���H���Ã�������”���8���{���Y�������h���k���¦���p�������n�������S��������������M���Ž���‹����������_���º���¹���z���|�������»����������������6������7���`�������"������‘���«���²���§��������������o��� ���¯��������������·�������¥���'���š�������]����������…�������[�������W���� Written by Jose E. Marchesi.� --encrypt encrypt confidential fields in the specified file. --decrypt decrypt confidential fields in the specified file. � --help print a help message and exit. --version show version and exit. � --no-external don't use external descriptors. --force alter the records even if violating record restrictions. � --no-external don't use external descriptors. --force force the requested operation. � -c, --comment comment out the matching records instead of deleting them. --force delete even in potentially dangerous situations, and if the deletion is violating record restrictions. --no-external don't use external descriptors. --verbose give a detailed report if the integrity check fails. � -d, --delim=char sets the deliminator (default ',') -t, --type=TYPE record set to convert to csv; if this parameter is omitted then the default record set is used -S, --sort=FIELDS sort the output by the specified fields. � -d, --include-descriptors print record descriptors along with the matched records. -C, --collapse do not section the result in records with newlines. -S, --sort=FIELD,... sort the output by the specified fields. -G, --group-by=FIELD,... group records by the specified fields. -U, --uniq remove duplicated fields in the output records. � -f, --field=STR field name; should be followed by a -v. -v, --value=STR field value; should be preceded by an -f. -r, --record=STR record that will be inserted in the file. --force insert the record even if it is violating record restrictions. --no-external don't use external descriptors. --no-auto don't insert auto generated fields. --verbose give a detailed report if the integrity check fails. � -f, --file=FILENAME read the template to apply from a file. � -j, --join=FIELD perform an inner join using the specified field. � -s, --password=STR decrypt confidential fields with the given password. � -s, --password=STR encrypt confidential fields with the given password. � -s, --system-tables include system tables. -e, --keep-empty-fields don't prune empty fields in the rec output. -l, --list-tables dump a list of the table names contained in the mdb file. � -t, --type=RECORD_TYPE print information on the records having the specified type. -d, --descriptor include the full record descriptors. -n, --names-only output just the names of the record files found in the input. �%s home page: <%s> �%s home page: <http://www.gnu.org/software/recutils/> �%s subprocess�%s subprocess failed�%s subprocess got fatal signal %d�%s: error: the number of records of type %s should be %zd. �%s: error: too few records of type %s. Minimum allowed are %zd. �%s: error: too many records of type %s. Maximum allowed are %zd. �%s: invalid option -- '%c' �%s: option requires an argument -- '%c' �%s:%s: error: %%constraint[%d] violated in record �%s:%s: error: %s does not contain information for type %s. �%s:%s: error: %s does not contain valid rec data. �%s:%s: error: auto-incremented field %s should be of type int, range or date �%s:%s: error: auto-incremented field %s should be of type int, range, uuid or date �%s:%s: error: confidential field is not encrypted �%s:%s: error: could not fetch remote descriptor from url %s. �%s:%s: error: could not read external descriptor from file %s. �%s:%s: error: duplicated key value in field '%s' in record �%s:%s: error: expected a comma-separated list of fields before the type specification �%s:%s: error: expected a type name before the type specification �%s:%s: error: field '%s' not allowed in this record set �%s:%s: error: field '%s' should be unique in this record �%s:%s: error: invalid record type %s �%s:%s: error: invalid type specification �%s:%s: error: invalid typedef specification �%s:%s: error: key field '%s' not found in record �%s:%s: error: mandatory field '%s' not found in record �%s:%s: error: missing %%rec field in record descriptor �%s:%s: error: multiple key fields '%s' in record �%s:%s: error: only one %%key field is allowed in a record descriptor �%s:%s: error: only one %%size field is allowed in a record descriptor �%s:%s: error: only one %%sort field is allowed in a record descriptor �%s:%s: error: prohibited field '%s' found in record �%s:%s: error: the referred type %s does not exist �%s:%s: error: too many %%rec fields in record descriptor �%s:%s: error: value for %s should be a list of field names. �%s:%s: error: value for %s should be a number optionally preceded by >, <, >= or <=. �%s:%s: error: value for %s[%zd] is not a list of field names �%s:%s: error: value for %s[%zd] is not a valid selection expression �'�--password|-s must be used as an operation argument. �: error: �: warning: �Actions: -s, --set=VALUE change the value of the selected fields. -a, --add=VALUE add the selected fields with the given value. -S, --set-add=VALUE change the value of the selected fields. If they don't exist then add a new field with that value. -r, --rename=NAME rename the selected fields to a given name. If an entire record set is selected then the field is renamed in the record descriptor as well. -d, --delete delete the selected fields. -c, --comment comment out the selected fields. �Alter or delete fields in records. �Apply a template to records read from standard input. �Check and fix rec files. �Convert an mdb file into a rec file. �Convert csv data into rec data. �Convert rec data into csv data. �Copyright (C) %s Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �De/Encryption options: -s, --password=PASSWORD encrypt/decrypt with this password. �Field selection options: -f, --fields=FIELDS comma-separated list of field names with optional subscripts. �General help using GNU software: <http://www.gnu.org/gethelp/> �If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. �Insert new records in a rec database. �Invalid back reference�Invalid character class name�Invalid collation character�Invalid content of \{\}�Invalid preceding regular expression�Invalid range end�Invalid regular expression�Memory exhausted�No match�No previous regular expression�Operations: --check check integrity of the specified file. Default. --sort sort the records in the specified file. --auto insert auto-generated fields in records missing them. �Output options: -p, --print=FIELDS comma-separated list of fields to print for each matching record. -P, --print-values=FIELDS as -p, but print only the values of the selected fields. -R, --print-row=FIELDS as -P, but separate the values with spaces instead of newlines. -c, --count print a count of the matching records instead of the records themselves. �Password again: �Password: �Premature end of regular expression�Print information about the types of records stored in the input. �Record selection options: -i, --case-insensitive make strings case-insensitive in selection expressions. -t, --type=TYPE operate on records of the specified type only. -e, --expression=RECORD_EXPR selection expression. -q, --quick=STR select records with fields containing a string. -n, --number=NUM,... select specific records by position, with ranges. -m, --random=NUM select a given number of random records. �Regular expression too big�Remove (or comment out) records from a rec file. �Report %s bugs to: %s �Report bugs to: %s �Select and print rec data. �Special options: --print-sexps print the data in sexps instead of rec format. �Special options: -S, --print-sexps print the data in sexps instead of rec format. �Success�Trailing backslash�Unknown system error�Unmatched ( or \(�Unmatched ) or \)�Unmatched \{�Usage: csv2rec [OPTIONS]... [CSV_FILE] �Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE] �Usage: rec2csv [OPTIONS]... [REC_FILE] �Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [FILE] �Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE] �Usage: recfmt [OPTION]... [TEMPLATE] �Usage: recinf [OPTION]... [FILE]... �Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE] �Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]... �Usage: recset [OPTION]... [FILE]... �`�a -f should be followed by a -v �a -v should be preceded by a -f �can't open file %s for reading. �cannot create a unique name. �cannot read file %s �cannot specify -[pPR] and also -c. �cannot specify -c and also -p. �could not open file %s �creating the field expression. �don't specify a template in the command line and -f at the same time. �duplicated record set '%s' from %s. �error evaluating expression in a template slot. �error while parsing CSV file: %s �error while parsing the record provided by -r �error: cannot read file %s �expected an integer between %d and %d.�failed to initialize csv parser �failed to normalise field name %s �failed to normalise record type name %s �failed to normalise the field name %s �file %s is not writable. �file does not appear to be an Access database �ignoring a request to delete all records of type %s. �internal error creating fex. �internal error creating the field expression. �internal error: REC_FEX_MAX_ELEMS exceeded. Please report this. �internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() in rec_type_new(). �internal error: rec_int_rec_extract_file: error compiling regexp. �internal error: rec_int_rec_extract_url: error compiling regexp. �internal error: rec_match: error compiling regexp. �internal error: recutl_index_list_parse: error compiling regexp. �invalid 'bool' value.�invalid 'field' value.�invalid 'line' value.�invalid 'range' value.�invalid 'real' value.�invalid 'uuid' value.�invalid aggregate function '%s' �invalid date.�invalid email.�invalid enum value.�invalid expression in a template slot. �invalid field expression in -f. �invalid field name %s. �invalid field name '%s' in header �invalid field name list in -S. �invalid field names in -G. �invalid field names in -S. �invalid integer.�invalid list of fields in -%c �invalid selection expression. �joins can only be used when a named record set is selected. �memory exhausted�more than one password was specified �no records of type %s found. �only one field can be specified as join criteria. �only one field list can be specified as a grouping criteria. �only one field list can be specified as a sorting criteria. �only one list of fields can be specified as a sorting criteria. �operation aborted due to integrity failures. �out of memory �please provide a value for the field %s �please specify a correct field name to -j|--join. �please specify just one action. �please specify just one operation. �please specify just one password. �please specify some field with -f. �please use --force or --decrypt �recfmt_apply_template: error compiling regexp. Please report this. �renaming file %s to %s �several record types found. Please use -t to specify one. �the database contains already encrypted fields �the provided passwords don't match. �the rename operation requires just one field with an optional subscript. �the specified operation does not require a password. �unknown operation in recfix: please report this as a bug. �use --force if you really want to proceed, or use either -n or -e. �use --force to skip the integrity check. �use --verbose to get a detailed report. �value does not match the regexp.�value too large. Expected a size <= %zu.�write error�Project-Id-Version: recutils 1.6.90 Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org POT-Creation-Date: 2022-04-16 19:38+0200 PO-Revision-Date: 2014-03-20 21:55+0100 Last-Translator: Benno Schulenberg <benno@vertaalt.nl> Language-Team: Dutch <vertaling@vrijschrift.org> Language: nl MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: Lokalize 1.0 Plural-Forms: nplurals=2; plural=n != 1; � Geschreven door Jose E. Marchesi.� --encrypt vertrouwelijke velden versleutelen --decrypt vertrouwelijke velden ontsleutelen � --help deze hulptekst tonen en stoppen --version programmaversie tonen en stoppen � --no-external geen externe descriptors gebruiken --force records ook wijzigen als dit beperkingen overtreedt � --no-external geen externe descriptors gebruiken --force de gevraagde bewerking afdwingen � -c, --comment van de overeenkomende records commentaar maken in plaats van ze te verwijderen --force records ook verwijderen als dit mogelijk gevaar oplevert of beperkingen overtreedt --no-external geen externe descriptors gebruiken --verbose een gedetailleerd rapport produceren als de integriteitscontrole faalt � -d, --delim=TEKEN te gebruiken scheidingsteken (standaard ',') -t, --type=TYPE te converteren recordset; als deze optie weggelaten wordt, dan wordt de standaard recordset gebruikt -S, --sort=VELD,... de uitvoer sorteren op deze velden � -d, --include-descriptors bij de overeenkomende records ook de recorddescriptors tonen -C, --collapse de records niet scheiden met nieuwe regels -G, --group-by=VELD,... de records groeperen op deze velden -S, --sort=VELD,... de uitvoer sorteren op deze velden -U, --uniq duplicaatvelden in uitvoerrecords weglaten � -f, --field=NAAM veldnaam (dient gevolgd te worden door '-v') -v, --value=TEKENREEKS veldwaarde (dient voorafgegaan te worden door '-f') -r, --record=NAAM in het bestand in te voegen record --force records ook wijzigen als dit beperkingen overtreedt --no-external geen externe descriptors gebruiken --no-auto geen automatisch gegenereerde velden invoegen --verbose een gedetailleerd rapport produceren als de integriteitscontrole faalt � -f, --file=BESTANDSNAAM te gebruiken sjabloon uit dit bestand lezen � -j, --join=VELD een interne samenvoeging uitvoeren via dit veld � -s, --password=WOORD vertrouwelijke velden ontsleutelen met dit wachtwoord � -s, --password=WOORD vertrouwelijke velden versleutelen met dit wachtwoord � -s, --system-tables ook de systeemtabellen tonen -e, --keep-empty-fields lege velden in rec-uitvoer niet weglaten -l, --list-tables een lijst van tabelnamen in mdb-bestand tonen � -t, --type=RECORDTYPE alleen informatie tonen over records van dit type -d, --descriptor ook de volledige recorddescriptors tonen -n, --names-only alleen de namen van de recordbestanden tonen �Webpagina van %s: <%s> �Webpagina van %s: <http://www.gnu.org/software/recutils/> �subproces %s�subproces %s is mislukt�subproces %s ontving het fatale signaal %d�%s: fout: het aantal records van type %s moet %zd zijn. �%s: fout: te weinig records van type %s; minimum aantal is %zd. �%s: fout: te veel records van type %s; maximum aantal is %zd. �%s: ongeldige optie -- '%c' �%s: optie vereist een argument -- '%c' �%s:%s: error: %%begrenzing[%d] is overschreden in record �%s:%s: fout: %s bevat geen informatie voor type %s. �%s:%s: fout: %s bevat geen geldige rec-gegevens. �%s:%s: fout: automatisch opgehoogd veld '%s' moet een geheel getal, bereik of datum zijn �%s:%s: fout: automatisch opgehoogd veld '%s' moet een geheel getal, bereik, UUID of datum zijn �%s:%s: fout: vertrouwelijk veld is niet versleuteld �%s:%s: fout: kan descriptor op afstand niet laden vanaf URL %s. �%s:%s: fout: kan externe descriptor niet laden uit bestand %s. �%s:%s: fout: duplicaat sleutel in veld '%s' in record �%s:%s: fout: er werd een kommagescheiden lijst van velden verwacht vóór de typespecificatie �%s:%s: fout: er wordt een typenaam verwacht vóór de typespecificatie �%s:%s: fout: veld '%s' is niet toegestaan in deze recordset �%s:%s: fout: veld '%s' moet uniek zijn in dit record �%s:%s: fout: ongeldig recordtype %s �%s:%s: fout: ongeldige typespecificatie �%s:%s: fout: ongeldige 'typedef'-specificatie �%s:%s: fout: sleutelveld '%s' niet gevonden in record �%s:%s: fout: verplicht veld '%s' niet gevonden in record �%s:%s: fout: ontbrekend %%rec-veld in recorddescriptor �%s:%s: fout: meerdere sleutelvelden '%s' in record �%s:%s: fout: slechts één %%key-veld is toegestaan in een recorddescriptor �%s:%s: fout: slechts één %%size-veld is toegestaan in een recorddescriptor �%s:%s: fout: slechts één %%sort-veld is toegestaan in een recorddescriptor �%s:%s: fout: verboden veld '%s' gevonden in record �%s:%s: fout: genoemd type %s bestaat niet �%s:%s: fout: te veel %%rec-velden in recorddescriptor �%s:%s: fout: de waarde van %s moet een lijst van veldnamen zijn �%s: %s: fout: de waarde voor %s moet een getal zijn, eventueel voorafgegaan door '>', '<', '>=' of '<='. �%s:%s: fout: de waarde van %s[%zd] is geen lijst van veldnamen �%s:%s: fout: de waarde van %s[%zd] is geen geldige selectie-expressie �’�optie '--password' ('-s') moet gebruikt worden als bewerkingsoptie �: fout: �: waarschuwing: �Acties: -s, --set=WAARDE deze waarde aan de geselecteerde velden toekennen -a, --add=WAARDE de geselecteerde velden met deze waarde toevoegen -S, --set-add=WAARDE deze waarde aan de geselecteerde velden toekennen; als die velden niet bestaan, dan een nieuw veld met deze waarde aanmaken -r, --rename=NAAM de geselecteerde velden naar deze naam hernoemen; als een gehele recordset geselecteerd is, dan het veld ook hernoemen in de recorddescriptor -d, --delete de geselecteerde velden verwijderen -c, --comment de geselecteerde velden omzetten in commentaar �Wijzigt of verwijdert velden in records. �Past een sjabloon toe op de records gelezen van standaardinvoer. �Controleert en repareert rec-bestanden. �Converteert een mdb-bestand naar een rec-bestand. �Converteert kommagescheiden gegevens naar rec-gegevens. �Converteert rec-gegevens naar kommagescheiden gegevens. �Copyright (C) %s Jose E. Marchesi. Dit is vrije software: u mag het vrijelijk wijzigen en verder verspreiden. De precieze licentie is GPL-3+: GNU General Public License versie 3 of later. Zie http://gnu.org/licenses/gpl.html voor de volledige (Engelse) tekst. Deze software kent GEEN GARANTIE, voor zover de wet dit toestaat. �Versleutelings-/Ontsleutelingsoptie: -s, --password=WACHTWOORD versleutelen/ontsleutelen met dit wachtwoord �Veldselectie: -f, --fields=VELDEN kommagescheiden lijst van veldnamen met optionele indexwaarden �Algemene hulp bij gebruik van GNU-software: <http://www.gnu.org/gethelp/> �Als geen BESTAND gegeven is dan fungeert de opdracht als een filter: het leest de gegevens van standaardinvoer en schrijft het resultaat naar standaarduitvoer. �Voegt nieuwe records in in rec-databank. �Ongeldige terugverwijzing�Ongeldige tekenklassenaam�Ongeldig samengesteld teken�Ongeldige inhoud van \{\}�Ongeldige voorafgaande reguliere expressie�Ongeldig bereikeinde�Ongeldige reguliere expressie�Onvoldoende geheugen beschikbaar�Geen overeenkomsten�Geen eerdere reguliere expressie�Bewerkingen: --check integriteit van gegeven bestand controleren --sort de records in het gegeven bestand sorteren --auto automatisch gegenereerde velden invoegen in records waarin ze ontbreken �Uitvoeropties: -p, --print=VELDEN kommagescheiden lijst van te tonen velden voor elk overeenkomend record -P, --print-values=VELDEN als -p, maar alleen de veldwaarden tonen -R, --print-row=FIELDS als -P, maar de waarden scheiden met spaties in plaats van nieuwe regels -c, --count alleen het aantal overeenkomende records tonen �Wachtwoord opnieuw: �Wachtwoord: �Voortijdig einde van reguliere expressie�Toont informatie over de soorten records aanwezig in de invoer. �Recordselectie: -i, --case-insensitive geen onderscheid maken tussen hoofd- en kleine letters in selectie-expressies -t, --type=TYPE alleen dit type records bewerken -e, --expression=EXPR te gebruiken selectie-expressie -q, --quick=TEKENREEKS records selecteren met velden met deze tekenreeks -n, --number=NUMMER,... specifieke records selecteren (bereiken kunnen ook) -m, --random=AANTAL dit aantal willekeurig gekozen records selecteren �Reguliere expressie is te groot�Verwijdert records uit een rec-bestand (of zet ze om in commentaar). �Rapporteer gebreken in het programma '%s' aan <%s>; meld fouten in de vertaling aan <vertaling@vrijschrift.org>. �Rapporteer gebreken in het programma aan <%s>; meld fouten in de vertaling aan <vertaling@vrijschrift.org>. �Selecteert en toont rec-gegevens. �Speciaal: --print-sexps de gegevens als S-expressies tonen in plaats van in rec-indeling �Speciaal: -S, --print-sexps de gegevens als S-expressies tonen in plaats van in rec-indeling �Gelukt�Backslash aan het eind�Onbekende systeemfout�Ongepaarde ( of \(�Ongepaarde ) of \)�Ongepaarde \{�Gebruik: csv2rec [OPTIE...] [CSV-BESTAND] �Gebruik: mdb2rec [OPTIE...] MDB-BESTAND [TABEL] �Gebruik: rec2csv [OPTIE...] [REC-BESTAND] �Gebruik: recdel [OPTIE...] [-t TYPE] [-n NUMMER | -e RECORDEXPRESSIE | -q TEKENREEKS | -m GETAL] [BESTAND] �Gebruik: recfix [OPTIE...] [BEWERKING] [BEWERKINGSOPTIE...] [BESTAND] �Gebruik: recfmt [OPTIE...] [SJABLOON] �Gebruik: recinf [OPTIE...] [BESTAND...] �Gebruik: recins [OPTIE...] [-t TYPE] [-n NUMMER | -e RECORDEXPRESSIE | -q TEKENREEKS | -m GETAL] [(-f VELDNAAM -v TEKENREEKS) | -r REC-GEGEVENS]... [BESTAND] �Gebruik: recsel [OPTIE...] [-t TYPE] [-j VELDNAAM] [-n INDEXEN | -e RECORDEXPRESSIE | -q TEKENREEKS | -m GETAL] [-c | (-p|-P) VELDEXPRESSIE] [BESTAND...] �Gebruik: recset [OPTIE...] [BESTAND...] �‘�optie '-f' dient gevolgd te worden door optie '-v'. �optie '-v' dient voorafgegaan te worden door optie '-f'. �kan bestand %s niet openen om te lezen. �kan geen unieke naam aanmaken. �kan bestand %s niet lezen �opties '-c' en '-[pPR][' gaan niet samen. �opties '-c' en '-p' gaan niet samen. �kan bestand %s niet openen. �aanmaken van de veldexpressie. �optie '-f' gaat niet samen met een sjabloon op de opdrachtregel. �duplicaat recordset '%s' uit %s. �fout tijdens evalueren van sjabloonexpressie. �fout tijdens ontleden van CSV-bestand: %s �fout tijdens ontleden van record gegeven met optie '-r'. �fout: kan bestand %s niet lezen. �verwachtte een geheel getal tussen %d en %d.�initialiseren van CSV-ontleder is mislukt �kan veldnaam %s niet normaliseren. �kan recordtypenaam %s niet normaliseren. �kan veldnaam %s niet normaliseren. �bestand %s is niet schrijfbaar. �bestand schijnt geen Access-databank te zijn. �verzoek om alle records van type %s te verwijderen wordt genegeerd. �**interne programmafout** tijdens aanmaken van de veldexpressie. �**interne programmafout** tijdens aanmaken van de veldexpressie. �**interne programmafout**: REC_FEX_MAX_ELEMS is overschreden. Rapporteer dit alstublieft aan de maker. �**interne programmafout**: REC_TYPE_NONE gekregen van rec_type_parse_type_kind() in rec_type_new(). �**interne programmafout**: rec_int_rec_extract_file(): fout bij compileren van regexp. �**interne programmafout**: rec_int_rec_extract_url(): fout bij compileren van regexp. �**interne programmafout**: rec_match: fout bij compileren van regexp. �**interne programmafout**: recutl_index_list_parse(): fout bij compileren van regexp. �ongeldige waarde voor 'bool'.�ongeldige waarde voor 'field'.�ongeldige waarde voor 'line'.�ongeldige waarde voor 'range'.�ongeldige waarde voor 'real'.�ongeldige waarde voor UUID.�ongeldige verzamelfunctie '%s' �ongeldige datum.�ongeldig e-mailadres.�ongeldige opsommingswaarde.�ongeldige expressie opgegeven voor sjabloon. �ongeldige veldexpressie bij optie '-f'. �ongeldige veldnaam %s. �ongeldige veldnaam '%s' in kopregel �ongeldige veldnamenlijst bij optie '-S'. �ongeldige veldnamen bij optie '-G'. �ongeldige veldnamen bij optie '-S'. �ongeldig geheel getal.�ongeldige veldnamenlijst bij '-%c'. �ongeldige selectie-expressie. �samenvoegingen kunnen alleen gebruikt worden wanneer een benoemde recordset geselecteerd is. �onvoldoende geheugen beschikbaar�er is meer dan één wachtwoord opgegeven �geen records van type %s gevonden. �er kan slechts één veld gegeven worden als samenvoegingscriterium. �er kan slechts één veldnamenlijst gegeven worden als groeperingscriterium. �er kan slechts één veldnamenlijst gegeven worden als sorteercriterium. �er kan slechts één lijst van velden gegeven worden als sorteercriterium. �bewerking is afgebroken wegens integriteitsproblemen. �onvoldoende geheugen beschikbaar �u dient een waarde op te geven voor veld %s. �u dient bij optie '-j|--join' een geldige veldnaam op te geven. �u kunt slechts één actie opgeven. �u kunt slechts één bewerking opgeven. �u kunt slechts één wachtwoord opgeven. �u dient bij optie '-f' een veld op te geven. �gebruik ofwel '--force' ofwel '--decrypt' �**interne programmafout**: recfmt_apply_template(): fout bij compileren van regexp. �hernoemen van bestand %s naar %s �meerdere recordtypes gevonden. Gebruik optie '-t' om er één op te geven. �de databank bevat al versleutelde velden �de gegeven wachtwoorden komen niet overeen. �hernoemen vereist slechts één veld met een optionele index. �de opgegeven bewerking vraagt geen wachtwoord. �onbekende bewerking in 'recfix'; rapporteer dit als een programmafout. �gebruik optie '--force' als u echt door wilt gaan, of gebruik '-n' of '-e' �gebruik optie '--force' op de integriteitscontrole over te slaan. �gebruik optie '--verbose' voor een gedetailleerd rapport. �waarde komt niet overeen met reguliere expressie.�waarde is te groot. Verwachtte een grootte <= %zu.�schrijffout�����������������������������������������������������������������������������������������������������������������������recutils-1.9/po/ChangeLog���������������������������������������������������������������������������0000644�0000000�0000000�00000000756�14226577410�012314� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������2022-04-16 Jose E. Marchesi <jemarch@gnu.org> * POTFILES.in: Updated. 2020-11-11 Jose E. Marchesi <jemarch@gnu.org> * POTFILES.in: Updated. 2018-03-18 Jose E. Marchesi <jemarch@gnu.org> * POTFILES.in: Updated. 2018-03-17 Jose E. Marchesi <jemarch@gnu.org> * POTFILES.in: recreate after last gettexttize. 2018-03-17 gettextize <bug-gnu-gettext@gnu.org> * Makefile.in.in: Upgrade to gettext-0.19.8.1. * Rules-quot: Upgrade to gettext-0.19.8.1. * POTFILES.in: New file. ������������������recutils-1.9/po/insert-header.sin�������������������������������������������������������������������0000644�0000000�0000000�00000001240�13253176007�013770� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sed script that inserts the file called HEADER before the header entry. # # At each occurrence of a line starting with "msgid ", we execute the following # commands. At the first occurrence, insert the file. At the following # occurrences, do nothing. The distinction between the first and the following # occurrences is achieved by looking at the hold space. /^msgid /{ x # Test if the hold space is empty. s/m/m/ ta # Yes it was empty. First occurrence. Read the file. r HEADER # Output the file's contents by reading the next line. But don't lose the # current line while doing this. g N bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/fi.gmo������������������������������������������������������������������������������0000644�0000000�0000000�00000103062�14226577416�011644� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����Ä������<����\ ������x�����y��²���—��‚���J��Í���Í��‹���›����'��E��/��Ó��u��Ž��I��N���Ø��W���'��[�����[���Û��?��7��M��w�����Å��6���Ù�� ����������!���3��;���U��@���‘��A���Ò����� ��(���0 ��2���Y ��;���Œ ��2���È ��M���û ��S���I!��2���!��=���Ð!��?���"��;���N"��V���Š"��A���á"��8���##��9���\#��%���–#��)���¼#��,���æ#��1���$��7���E$��7���}$��1���µ$��E���ç$��F���-%��F���t%��4���»%��2���ð%��9���#&��<���]&��U���š&��=���ð&��D���.'�����s'��5���u'�� ���«'�� ���µ'��ê��Á'��#���¬*��6���Ð*�����+��%���!+�� ���G+�� ���h+��ë���‰+��a���u,��¥���×,��?���}-�����½-��&���K.�����r.�����‰.�����¦.�����Â.��$���Ú.�����ÿ.�����/�����,/�����=/�����F/�� ��e/��L��s0�����À2�� ���Ñ2��#���Ü2��B����3��.��C3�����r5��1���5�����¿5�����Ö5�����ê5��f���6��f���m6�����Ô6�����Ü6�����ï6�����7�����7�� ���(7��'���57��-���]7��'���‹7��X���³7��<��� 8��%���I8��$���o8��z���”8��ƒ���9��$���“9�����¸9�� ���º9�� ���Û9�� ���ü9�����:�����;:��#���P:�����t:�����”:�����¬:��F���Ì:��$���;��0���8;��!���i;��.���‹;�����º;��&���Ö;�� ���ý;��"���<��(���A<��&���j<�����‘<��.���«<��5���Ú<�����=��.���.=��A���]=��`���Ÿ=��B����>��A���C>��3���…>��A���¹>�����û>�����?�����(?�����>?�����U?�����k?�� ���?�� ���¢?�����°?�����¿?��'���Ó?�� ���û?�����@��"���4@�����W@�����w@�����“@�����¯@�����À@�����ß@��<���þ@�����;A��%���LA�����rA��2���A��=���ÃA��<���B��@���>B��-���B�����­B��(���¼B��2���åB�� ���C��#���9C��"���]C��#���€C�� ���¤C��C���ÅC����� D��;���!D��/���]D��$���D��I���²D��5���üD��:���2E��C���mE��)���±E��(���ÛE�� ���F��)���%F�� ���OF��õ��[F�����QH��Ð���mH��†���>I��ß���ÅI��¥���¥J��D��KK��W��M��µ��èN��Î��žP��O���mS��d���½S��e���"T��]���ˆT��K��æT��K��2V�����~W��5���‘W�����ÇW�����ÖW��+���òW��;���X��W���ZX��J���²X��&���ýX��+���$Y��<���PY��@���Y��D���ÎY��v���Z��|���ŠZ��7���[��F���?[��G���†[��D���Î[��Z���\��A���n\��F���°\��H���÷\��'���@]��.���h]��0���—]��>���È]��D���^��7���L^��7���„^��B���¼^��C���ÿ^��C���C_��<���‡_��1���Ä_��;���ö_��F���2`��[���y`��C���Õ`��G���a�����aa��7���ea�� ���a�� ���§a��è��´a��%���d��>���Ãd��"���e��%���%e�� ���Ke�� ���le����e��p���“f��³���g��L���¸g��”���h��*���šh�����Åh�����Ýh�����ûh�����i��/���4i�����di��$���‚i�� ���§i�� ���µi��)���Âi��1��ìi��v��k�����•m�� ���ªm��.���µm��6���äm����n��$���9p��9���^p��}���˜p��ˆ���q�� ���Ÿq��l���Àq��l���-r�����šr�����£r�����¾r�����Ür�����ír�� ���þr��1��� s��7���;s��1���ss��t���¥s��L���t��*���gt��-���’t��œ���Àt��£���]u��-���v�����/v��-���3v��/���av��2���‘v��%���Äv��$���êv��J���w��=���Zw�� ���˜w�����¹w��W���Òw��3���*x��1���^x��*���x��:���»x��+���öx��-���"y��%���Py��+���vy��1���¢y��+���Ôy��"����z��-���#z��8���Qz��(���Šz��-���³z��?���áz��t���!{��`���–{��_���÷{��Q���W|��_���©|����� }�����'}�����F}�����d}�����ƒ}�����¡}��&���¿}�����æ}�� ���~�����%~��(���C~��-���l~�����š~��.���¸~��2���ç~��*�����+���E�����q��-���Œ�����º��Q���Ø�� ���*€��,���8€��&���e€��;���Œ€��F���È€��F�����H���V��6���Ÿ�����Ö�����å��;���ÿ�����;‚�����[‚�����{‚��.���›‚��)���Ê‚��]���ô‚��-���Rƒ��S���€ƒ��-���Ôƒ��$���„��S���'„��*���{„��>���¦„��]���å„��>���C…��@���‚…��2���Ã…��,���ö…�����#†�����e���g���L���Œ���¾���m������µ��������������¸���J���ž���d���������¡���Q���=���u��� ���ˆ���Ÿ���;������������������,�������~�����������­�������’���½���9�������U���y������A���f���‡���Â���¤�������X���F���b�������E���(��������������� ���¼���>���‚���„���N���-������B����������� �������.���l���+���^����������D���±���\������x�������€���©���0������V���°����������)���™���¢���¿���2������?�������%���O���������������‰���������Z����������£�������›���I���¨���:�������������–���¬���P������1�������˜���&���Á�������Š���À��� ���•���´�����������5���G���®���“���!�������¶�������*���$�����������†���/���q���s���œ�����������3�������Ä���c�������j������i���w���������������R���v���ª�������<���ƒ���C���t��� �������a������}���T�������@���4���³���������� �������#���—���K���r���H���Ã�������”���8���{���Y�������h���k���¦���p�������n�������S��������������M���Ž���‹����������_���º���¹���z���|�������»����������������6������7���`�������"������‘���«���²���§��������������o��� ���¯��������������·�������¥���'���š�������]����������…�������[�������W���� Written by Jose E. Marchesi.� --encrypt encrypt confidential fields in the specified file. --decrypt decrypt confidential fields in the specified file. � --help print a help message and exit. --version show version and exit. � --no-external don't use external descriptors. --force alter the records even if violating record restrictions. � --no-external don't use external descriptors. --force force the requested operation. � -c, --comment comment out the matching records instead of deleting them. --force delete even in potentially dangerous situations, and if the deletion is violating record restrictions. --no-external don't use external descriptors. --verbose give a detailed report if the integrity check fails. � -d, --delim=char sets the deliminator (default ',') -t, --type=TYPE record set to convert to csv; if this parameter is omitted then the default record set is used -S, --sort=FIELDS sort the output by the specified fields. � -d, --include-descriptors print record descriptors along with the matched records. -C, --collapse do not section the result in records with newlines. -S, --sort=FIELD,... sort the output by the specified fields. -G, --group-by=FIELD,... group records by the specified fields. -U, --uniq remove duplicated fields in the output records. � -f, --field=STR field name; should be followed by a -v. -v, --value=STR field value; should be preceded by an -f. -r, --record=STR record that will be inserted in the file. --force insert the record even if it is violating record restrictions. --no-external don't use external descriptors. --no-auto don't insert auto generated fields. --verbose give a detailed report if the integrity check fails. � -f, --file=FILENAME read the template to apply from a file. � -j, --join=FIELD perform an inner join using the specified field. � -s, --password=STR decrypt confidential fields with the given password. � -s, --password=STR encrypt confidential fields with the given password. � -s, --system-tables include system tables. -e, --keep-empty-fields don't prune empty fields in the rec output. -l, --list-tables dump a list of the table names contained in the mdb file. � -t, --type=RECORD_TYPE print information on the records having the specified type. -d, --descriptor include the full record descriptors. -n, --names-only output just the names of the record files found in the input. �%s home page: <%s> �%s home page: <http://www.gnu.org/software/recutils/> �%s subprocess�%s subprocess failed�%s subprocess got fatal signal %d�%s: error: the number of records of type %s should be %zd. �%s: error: too few records of type %s. Minimum allowed are %zd. �%s: error: too many records of type %s. Maximum allowed are %zd. �%s: invalid option -- '%c' �%s: option requires an argument -- '%c' �%s:%s: error: %%constraint[%d] violated in record �%s:%s: error: %s does not contain information for type %s. �%s:%s: error: %s does not contain valid rec data. �%s:%s: error: auto-incremented field %s should be of type int, range or date �%s:%s: error: auto-incremented field %s should be of type int, range, uuid or date �%s:%s: error: confidential field is not encrypted �%s:%s: error: could not fetch remote descriptor from url %s. �%s:%s: error: could not read external descriptor from file %s. �%s:%s: error: duplicated key value in field '%s' in record �%s:%s: error: expected a comma-separated list of fields before the type specification �%s:%s: error: expected a type name before the type specification �%s:%s: error: field '%s' not allowed in this record set �%s:%s: error: field '%s' should be unique in this record �%s:%s: error: invalid record type %s �%s:%s: error: invalid type specification �%s:%s: error: invalid typedef specification �%s:%s: error: key field '%s' not found in record �%s:%s: error: mandatory field '%s' not found in record �%s:%s: error: missing %%rec field in record descriptor �%s:%s: error: multiple key fields '%s' in record �%s:%s: error: only one %%key field is allowed in a record descriptor �%s:%s: error: only one %%size field is allowed in a record descriptor �%s:%s: error: only one %%sort field is allowed in a record descriptor �%s:%s: error: prohibited field '%s' found in record �%s:%s: error: the referred type %s does not exist �%s:%s: error: too many %%rec fields in record descriptor �%s:%s: error: value for %s should be a list of field names. �%s:%s: error: value for %s should be a number optionally preceded by >, <, >= or <=. �%s:%s: error: value for %s[%zd] is not a list of field names �%s:%s: error: value for %s[%zd] is not a valid selection expression �'�--password|-s must be used as an operation argument. �: error: �: warning: �Actions: -s, --set=VALUE change the value of the selected fields. -a, --add=VALUE add the selected fields with the given value. -S, --set-add=VALUE change the value of the selected fields. If they don't exist then add a new field with that value. -r, --rename=NAME rename the selected fields to a given name. If an entire record set is selected then the field is renamed in the record descriptor as well. -d, --delete delete the selected fields. -c, --comment comment out the selected fields. �Alter or delete fields in records. �Apply a template to records read from standard input. �Check and fix rec files. �Convert an mdb file into a rec file. �Convert csv data into rec data. �Convert rec data into csv data. �Copyright (C) %s Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �De/Encryption options: -s, --password=PASSWORD encrypt/decrypt with this password. �Field selection options: -f, --fields=FIELDS comma-separated list of field names with optional subscripts. �General help using GNU software: <http://www.gnu.org/gethelp/> �If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. �Insert new records in a rec database. �Invalid back reference�Invalid character class name�Invalid collation character�Invalid content of \{\}�Invalid preceding regular expression�Invalid range end�Invalid regular expression�Memory exhausted�No match�No previous regular expression�Operations: --check check integrity of the specified file. Default. --sort sort the records in the specified file. --auto insert auto-generated fields in records missing them. �Output options: -p, --print=FIELDS comma-separated list of fields to print for each matching record. -P, --print-values=FIELDS as -p, but print only the values of the selected fields. -R, --print-row=FIELDS as -P, but separate the values with spaces instead of newlines. -c, --count print a count of the matching records instead of the records themselves. �Password again: �Password: �Premature end of regular expression�Print information about the types of records stored in the input. �Record selection options: -i, --case-insensitive make strings case-insensitive in selection expressions. -t, --type=TYPE operate on records of the specified type only. -e, --expression=RECORD_EXPR selection expression. -q, --quick=STR select records with fields containing a string. -n, --number=NUM,... select specific records by position, with ranges. -m, --random=NUM select a given number of random records. �Regular expression too big�Remove (or comment out) records from a rec file. �Report %s bugs to: %s �Report bugs to: %s �Select and print rec data. �Special options: --print-sexps print the data in sexps instead of rec format. �Special options: -S, --print-sexps print the data in sexps instead of rec format. �Success�Trailing backslash�Unknown system error�Unmatched ( or \(�Unmatched ) or \)�Unmatched \{�Usage: csv2rec [OPTIONS]... [CSV_FILE] �Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE] �Usage: rec2csv [OPTIONS]... [REC_FILE] �Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [FILE] �Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE] �Usage: recfmt [OPTION]... [TEMPLATE] �Usage: recinf [OPTION]... [FILE]... �Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE] �Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]... �Usage: recset [OPTION]... [FILE]... �`�a -f should be followed by a -v �a -v should be preceded by a -f �can't open file %s for reading. �cannot create a unique name. �cannot read file %s �cannot specify -[pPR] and also -c. �cannot specify -c and also -p. �could not open file %s �creating the field expression. �don't specify a template in the command line and -f at the same time. �duplicated record set '%s' from %s. �error evaluating expression in a template slot. �error while parsing CSV file: %s �error while parsing the record provided by -r �error: cannot read file %s �expected an integer between %d and %d.�failed to initialize csv parser �failed to normalise field name %s �failed to normalise record type name %s �failed to normalise the field name %s �file %s is not writable. �file does not appear to be an Access database �ignoring a request to delete all records of type %s. �internal error creating fex. �internal error creating the field expression. �internal error: REC_FEX_MAX_ELEMS exceeded. Please report this. �internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() in rec_type_new(). �internal error: rec_int_rec_extract_file: error compiling regexp. �internal error: rec_int_rec_extract_url: error compiling regexp. �internal error: rec_match: error compiling regexp. �internal error: recutl_index_list_parse: error compiling regexp. �invalid 'bool' value.�invalid 'field' value.�invalid 'line' value.�invalid 'range' value.�invalid 'real' value.�invalid 'uuid' value.�invalid aggregate function '%s' �invalid date.�invalid email.�invalid enum value.�invalid expression in a template slot. �invalid field expression in -f. �invalid field name %s. �invalid field name '%s' in header �invalid field name list in -S. �invalid field names in -G. �invalid field names in -S. �invalid integer.�invalid list of fields in -%c �invalid selection expression. �joins can only be used when a named record set is selected. �memory exhausted�more than one password was specified �no records of type %s found. �only one field can be specified as join criteria. �only one field list can be specified as a grouping criteria. �only one field list can be specified as a sorting criteria. �only one list of fields can be specified as a sorting criteria. �operation aborted due to integrity failures. �out of memory �please provide a value for the field %s �please specify a correct field name to -j|--join. �please specify just one action. �please specify just one operation. �please specify just one password. �please specify some field with -f. �please use --force or --decrypt �recfmt_apply_template: error compiling regexp. Please report this. �renaming file %s to %s �several record types found. Please use -t to specify one. �the database contains already encrypted fields �the provided passwords don't match. �the rename operation requires just one field with an optional subscript. �the specified operation does not require a password. �unknown operation in recfix: please report this as a bug. �use --force if you really want to proceed, or use either -n or -e. �use --force to skip the integrity check. �use --verbose to get a detailed report. �value does not match the regexp.�value too large. Expected a size <= %zu.�write error�Project-Id-Version: GNU recutils 1.6.90 Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org POT-Creation-Date: 2022-04-16 19:38+0200 PO-Revision-Date: 2014-04-18 12:00+0200 Last-Translator: Jorma Karvonen <karvonen.jorma@gmail.com> Language-Team: Finnish <translation-team-fi@lists.sourceforge.net> Language: fi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=2; plural=(n != 1); � Tekijä: Jose E. Marchesi.� --encrypt salaa luottamukselliset kentät määritellyssä tiedostossa. --decrypt pura luottamuksellisten kenttien salaus määritellyssä tiedostossa. � --help tulosta opasteviesti ja poistu. --version näytä versio ja poistu. � --no-external älä käytä ulkoisia selosteita. --force muuta tietueita vaikka se on ristiriidassa tietue- rajoitteiden kanssa. � --no-external älä käytä ulkoisia kuvaajia. --force poista jopa potentiaalisesti vaarallisissa tilanteissa. � -c, --comment muuta täsmäävät tietueet kommenteiksi sen sijaan että ne poistettaisiin. --force poista myös potentiaalisesti vaarallisissa tilanteissa, ja jos poistaminen on ristiriidassa tietuerajoitusten kanssa. --no-external älä käytä ulkoisia selosteita. --verbose anna yksityiskohtainen ilmoitus, jos integriteetti- tarkistus epäonnistuu. � -d, --delim=merkki asettaa rajoittimen (oletus ’,’) -t, --type=TYYPPI csv-muotoon muunnettava tietuejoukko. Jos tämä parametri ohitetaan, käytetään oletustietuejoukkoa -S, --sort=KENTÄT lajittele tuloste määritellyn kentän mukaan. � -d, --include-descriptors tulosta tietueselosteet täsmäävistä tietueista. -C, --collapse älä jaa tulosta tietueissa lohkoihin rivinvaihdoilla. -S, --sort=KENTTÄ lajittele tuloste määritellyn kentän mukaan. -G, --group-by=KENTTÄ,... määriteltyjen kenttien ryhmätietueet. -U, --uniq poista kaksoiskappalekentät tulostetietueista. � -f, --field=MERKKIJONO kenttänimi. Pitäisi olla valitsimen -v jäljessä. -v, --value=MERKKIJONO kenttänimi. Pitäisi edeltää valitsinta -f. -r, --record=MERKKIJONO tietue, joka lisätään tiedostoon. --force lisää tietue, vaikka se on ristiriidassa tietue- rajoitusten kanssa. --no-external älä käytä ulkoisia selosteita. --no-auto älä lisää automaattisesti tuotettuja kenttiä. --verbose anna yksityiskohtainen ilmoitus, jos integriteetti- tarkistus epäonnistuu. � -f, --file=TIEDOSTONIMI lue mallinne, joka haettiin tiedostosta. � -j, --join=FIELD suorita sisäinen liitos käyttäen määriteltyä kenttää. � -s, --password=MERKKIJONO pura luottamuksellisten kenttien salaus annetulla salasanalla. � -s, --password=MERKKIJONO salaa luottamukselliset kentän annetulla salasanalla. � -s, --system-tables sisällytä järjestelmätaulut. -e, --keep-empty-fields älä karsi tyhjiä kenttiä rec- tulosteesta -l, --list-tables vedosta mbd-tiedostoon sisältyvä taulu- nimien luettelo � -t, --type=TIETUE_TYYPPI tulosta tietoja määritellyn tyyppisistä tietueista. -d, --descriptor sisällytä täydet tietueselosteet. -n, --names-only tulosta vain syöteestä löydettyjen tietue- tiedostojen nimet. �%s kotisivu: <%s> �%s kotisivu: <http://www.gnu.org/software/recutils/> �%s aliprosessi�%s aliprosessi epäonnistui�%s aliprosessi sai kuolettavan signaalin %d�%s: virhe: tietuetyypin %s lukumäärän pitää olla %zd. �%s: virhe: liian vähän %s-tyyppisiä tietueita. Sallittu vähimmäismäärä on %zd. �%s: virhe: liian monta %s-tyyppistä tietuetta. Sallitaan enintään %zd. �%s: virheellinen valitsin -- ’%c’ �%s: valitsin vaatii argumentin -- ’%c’ �%s:%s: virhe: %%constraint[%d]-sääntörikkomus tietueessa �%s:%s: virhe: verkko-osoite %s ei sisällä tietoa tyypille %s. �%s:%s: virhe: verkko-osoite %s ei sisällä kelvollista rec-tietoa. �%s:%s: virhe: automaattisen askelkasvatuskentän %s pitäisi olla tyyppiä kokonaisluku, lukualue tai päivämäärä �%s:%s: virhe: automaattisen askelkasvatuskentän %s pitäisi olla tyyppiä kokonaisluku, lukualue, uuid tai päivämäärä �%s:%s: virhe: luottamuksellinen kenttä ei ole salattu �%s:%s: virhe: etäselosteen nouto verkko-osoitteesta %s epäonnistui. �%s:%s: virhe: ulkoisen selosteen lukemien tiedostosta %s epäonnistui. �%s:%s: virhe: kaksoiskappale avainarvo tietueen kentässä ’%s’ �%s:%s: virhe: odotettiin pilkulla eroteltua kenttien luetteloa ennen tyyppimäärittelyä �%s:%s: virhe: odotettiin tyyppinimeä ennen tyyppimäärittelyä �%s:%s: virhe: kenttä ’%s’ ei ole sallittu tässä tietuejoukossa �%s:%s: virhe: kentän ’%s’ pitäisi olla uniikki tässä tietueessa �%s:%s: virhe: väärä tietuetyyppi %s �%s:%s: virhe: virheellinen tyyppimäärittely �%s:%s: virhe: virheellinen typedef-määrittely �%s:%s: virhe: avainkenttää ’%s’ ei löytynyt tietueesta �%s:%s: virhe: pakollista kenttää ’%s’ ei löytynyt tietueesta �%s:%s: virhe: puuttuva %%rec-kenttä tietueselosteessa �%s:%s: virhe: useita avainkenttiä ’%s’ tietueessa �%s:%s: virhe: vain yksi %%key-kenttä sallitaan tietueselosteessa �%s:%s: virhe: vain yksi %%size-kenttä sallitaan tietueselosteessa �%s:%s: virhe: vain yksi %%sort-kenttä sallitaan tietueselosteessa �%s:%s: virhe: kielletty kenttä ’%s’ löytyi tietueessa �%s:%s: virhe: viitattu tyyppi %s ei ole olemassa �%s:%s: virhe: liian monia %%rec-kenttiä tietueselosteessa �%s:%s: virhe: arvon kohteelle %s olisi oltava kenttänimien luettelo. �%s:%s: virhe: arvon %s pitäisi olla numero, jota valinnaisesti edeltää >, <, >= tai <=. �%s:%s: virhe: arvo kohteelle %s[%zd] ei ole kenttänimien luettelo �%s:%s: virhe: arvo kohteelle %s[%zd] ei ole kelvollinen valintalauseke �â€�--password|-s on käytettävä toiminta-argumentteina. �: virhe: �: varoitus: �Toimet: -s, --set=ARVO muuta valittujen kenttien arvoa. -a, --add=ARVO lisää valitut kentät annetulla arvolla. -S, --set-add=VALUE muuta valittujen kenttien arvo. Jos niitä ei ole olemassa, lisää uusi kenttä tuolla arvolla. -r, --rename=NIMI nimeä uudelleen valitut kentät annetulla nimellä. Jos koko tietuejoukko on valittu niin silloin kenttä nimetään uudelleen myös tietueselosteessa. -d, --delete poista valitut kentät. -c, --comment muuta valitut kentät kommenteiksi. �Muuta tai poista kentät tietueissa. �Aseta mallinne tietuisiin, jotka on luettu vakiosyötteestä. �Tarkista ja korjaa rec-tiedostot. �Muunna mdb-tiedosto rec-tiedostoksi. �Muunna csv-tietoa rec-tiedoksi. �Muunna rec-tietoa csv-tiedoksi. �Copyright © %s Jose E. Marchesi. License GPLv3+: GNU GPL versio 3 tai myöhäisempi <http://gnu.org/licenses/gpl.html>. Tämä on vapaa ohjelmisto: voi muuttaa ja jakaa sitä vapaasti edelleen. Ohjelmalla EI OLE TAKUUTA siinä laajuudessa, minkä laki sallii. �Salauksen purku-/salausvalitsimet: -s, --password=SALASANA salaa/pura salaus tällä salasanalla. �Kenttien valintavalitsimet: -f, --fields=KENTÄT pilkulla eroteltu kenttänimien luettelo valinnaisilla alaindekseillä. �Yleinen opaste GNU-ohjelmistojen käytöstä: <http://www.gnu.org/gethelp/> �Jos TIEDOSTOa ei ole määritelty, silloin komento toimii kuin suodatin hakien tietoja vakiosyötteestä ja kirjoittaen tuloksen vakiotulosteeseen. �Lisää uusia tietueita rec-tietokantaan. �Virheellinen paluuviite�Virheellinen merkkiluokkanimi�Virheellinen lajittelumerkki�Virheellinen \{\}-sisältö�Virheellinen edeltävä säännöllinen lauseke�virheellinen lukualueen loppu�Virheellinen säännöllinen lauseke�Muisti loppui�Ei täsmää�Ei edellistä säännöllistä lauseketta�Toiminnot: --check tarkista määritellyn tiedosto integriteetti. Oletus. --sort lajittele tietueet määritellyssä tiedostossa. --auto lisää automaattisesti tuotetut kentät tietueisiin, joista ne puuttuvat. �Tulostusvalitsimet: -p, --print=KENTÄT pilkulla eroteltu kenttien luettelo jokaiselle täsmäävälle tietueelle. -P, --print-values=KENTÄT sama kuin -p, mutta tulostaa vain valittujen kenttien arvot. -R, --print-row=KENTÄT sama kuin -P, mutta tulostettavat arvot erotellaan välilyönneillä eikä rivinvaihdoilla. -c, --count tarjoa täsmäävien tietueiden lukumäärä eikä itse tietueita. �Salasana uudelleen: �Salasana: �Säännöllisen lausekkeen ennenaikainen loppu�Tulosta syötteeseen tallennettujen tietuiden tyypit. �Tietuevalintavalitsimet: -i, --case-insensitive tee merkkijonoista kirjainkoosta riippuvia valinta- lausekkeissa. -t, --type=TYYPPI tulosta vain määritellyntyyppiset tietueet. -e, --expression=LAUSEKE valintalauseke. -q, --quick=MERKKIJONO valitse tietueet, joiden kentissä on merkkijono. -n, --number=NUMERO valitse määritelty tietue. -m, --random=NUMERO valitse annettu satunnaistietuemäärä. �Säännöllinen lauseke on liian iso�Poista (tai muuta kommenteiksi) rec-tiedoston tietueita. �Ilmoita %s-virheistä osoitteeseen: %s Ilmoita käännösvirheistä osoitteeseen <translation-team-fi@lists.sourceforge.net> �Ilmoita virheistä (englanniksi) osoitteeseen: %s Ilmoita käännösvirheistä osoitteeseen <translation-team-fi@lists.sourceforge.net> �Valitse ja tulosta rec-tietoja. �Erikoisvalitsimet: --print-sexps tulosta tietoja sexps-muodossa eikä rec-muodossa. �Erikoisvalitsimet: -S, --print-sexps tulosta tietoja sexps-muodossa eikä rec-muodossa. �Onnistui�Jäljessä oleva kenoviiva�Tuntematon järjestelmävirhe�Pariton ( tai \(�Pariton ) tai \)�Pariton \{�Käyttö: csv2rec [VALITSIMET]... [CSV_TIEDOSTO] �Käyttö: mdb2rec [VALITSIMET]... MDB_TIEDOSTO [TAULU] �Käyttö: rec2csv [VALITSIMET]... [REC_TIEDOSTO] �Käyttö: recdel [VALITSIMET]... [-t TYYPPI] [-n NUMERO | -e TIETUE_LAUSEKE | -q MERKKIJONO | -m NUMERO] [TIEDOSTO] �Käyttö: recfix [VALITSIN]... [TOIMINTO] [TOIMINTO_VALITSIN]... [TIEDOSTO] �Käyttö: recfmt [VALITSIN]... [MALLINNE] �Käyttö: recinf [VALITSIN]... [TIEDOSTO]... �Käyttö: recins [VALITSIN]... [-t TYYPPI] [-n NUMERO | -e TIETUE_LAUSEKE | -q MERKKIJONO | -m NUMERO] [(-f NIMI -v MERKKIJONO]|[-r RECDATA)]... [TIEDOSTO] �Käyttö: recsel [VALITSIN]... [-t TYYPPI] [-j KENTTÄ] [-n INDEKSIT | -e TIETUE_LAUSEKE | -q MERKKIJONO | -m NUMERO] [-c | (-p|-P) KENTTÄ_LAUSEKE] [TIEDOSTO]... �Käyttö: recset [VALITSIN]... [TIEDOSTO]... �â€�valitsimen -f pitäisi seurata valitsinta -v �valitsimen -v pitäisi edeltää valitsinta -f �tiedoston %s avaus lukemista varten epäonnistui. �uniikin nimen luominen epäonnistui. �tiedoston %s lukeminen epäonnistui �ei voida määritellä sekä valitsimia -[pPR] että myös valitsinta -c. �ei voida määritellä valitsinta -c ja myös valitsinta -p. �tiedoston %s avaus epäonnistui �luodaan kenttälauseke. �älä määritä samalla kertaa sekä mallinnetta komentorivillä että valitsinta -f. �kaksoiskappale tietuejoukko ’%s’ kohteesta %s. �virhe arvioitaessa lauseketta mallinnevälissä. �virhe jäsennettäessä CSV-tiedostoa: %s �virhe jäsennettäessä valitsimen -r tarjoamaa tietuetta �virhe: tiedoston %s lukeminen epäonnistui �odotettiin kokonaislukua väliltä %d ... %d.�csv-jäsentimen alustus epäonnistui �kenttänimen %s normalisointi epäonnistui �tietuetyypin nimen %s normalisointi epäonnistui �kenttänimen %s normalisointi epäonnistui �tiedosto %s on kirjoitussuojattu. �tiedosto ei näytä olevan Access-tietokanta �ohitetaan pyyntö poistaa kaikki %s-tyyppiset tietueet. �sisäinen virhe luotaessa kohdetta fex. �sisäinen virhe luotaessa kenttälauseketta. �sisäinen virhe: REC_FEX_MAX_ELEMS ylitetty. Ilmoita tästä. �sisäinen virhe: rec-tyypit: saatiin REC_TYPE_NONE funktiosta rec_type_parse_type_kind() funktiossa rec_type_new(). �sisäinen virhe: rec_int_rec_extract_file: virhe käännettäessä säännöllistä lauseketta. �sisäinen virhe: rec_int_rec_extract_url: virhe käännettäessä säännöllistä lauseketta. �sisäinen virhe: rec_match: virhe käännettäessä säännöllistä lauseketta. �sisäinen virhe: recutl_index_list_parse: virhe käännettäessä säännöllistä lauseketta. �virheellinen ’bool’-arvo.�virheellinen ’field’-arvo.�virheellinen ’line’-arvo.�virheellinen ’range’-alue.�virheellinen ’real’-arvo.�virheellinen ’uuid’-arvo.�virheellinen ryhmitysfunktio ’%s’ �virheellinen päivämäärä.�virheellinen sähköpostiosoite.�virheellinen enumeraatioarvo.�virheellinen lauseke mallinnevälissä. �virheellinen kenttälauseke valitsimessa -f. �virheellinen kenttänimi %s. �virheellinen kenttänimi ’%s’ otsakkeessa �virheellinen kenttänimiluettelo valitsimelle -S. �virheellinen kenttänimi valitsimelle -G. �virheelliset kenttänimet valitsimelle -S. �virheellinen kokonaisluku.�virheellinen kenttien luettelo kohteessa -%c �virheellinen valintalauseke. �yhteenliittymiä voidaan käyttää vain kun valitaan nimettyjä tietuejoukkoja. �muisti loppui�on määritelty useampia kuin yksi salasana �%s-tyyppisiä tietueita ei löytynyt. �vain yksi kenttä voidaan määritellä liitoskriteerinä. �vain yksi kenttäluettelo voidaan määritellä lajittelukriteerinä. �vain yksi kenttäluettelo voidaan määritellä lajittelukriteerinä. �vain yksi kenttien luettelo voidaan määritellä lajittelukriteerinä. �toiminta keskeytettiin integriteettivirheiden vuoksi. �muisti loppui �tarjoa arvo kentälle %s �määritä oikea kenttänimi valitsimien -j|--join kanssa. �määritä vain yksi toiminto. �määritä vain yksi toiminto. �määritä vain yksi salasana. �määritä joku kenttä valitsimen -f kanssa. �käytä valitsimia --force tai --decrypt �recfmt_apply_template: virhe käännettäessä säännöllistä lauseketta. Ilmoita tästä. �nimetään tiedosto %s uudelleen nimellä %s �löydettiin useita tietuetyyppejä. Käytä valitsinta -t määrittämään yksi. �tietokanta sisältää jo salattuja kenttiä �annetut salasanat eivät täsmää. �uudelleennimeämistoiminto vaatii vain yhden kentän valinnaisella alaindeksillä. �määritelty toiminto ei vaadi salasanaa. �tuntematon toiminto kohteessa recfix: ilmoita tästä viasta. �käytä valitsinta --force jos haluat todella jatkaa, tai käytä joko valitsinta -n tai -e. �käytä valitsinta --force ohittamaan integriteettitarkistus. �käytä valitsinta --verbose samaan yksityiskohtainen ilmoitus. �arvo ei täsmää säännöllisessä lausekkeessa.�arvo on liian iso. Odotettiin kokoa <= %zu.�kirjoitusvirhe�������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/vi.gmo������������������������������������������������������������������������������0000644�0000000�0000000�00000107166�14226577416�011675� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•����Ä������<����\ ������x�����y��²���—��‚���J��Í���Í��‹���›����'��E��/��Ó��u��Ž��I��N���Ø��W���'��[�����[���Û��?��7��M��w�����Å��6���Ù�� ����������!���3��;���U��@���‘��A���Ò����� ��(���0 ��2���Y ��;���Œ ��2���È ��M���û ��S���I!��2���!��=���Ð!��?���"��;���N"��V���Š"��A���á"��8���##��9���\#��%���–#��)���¼#��,���æ#��1���$��7���E$��7���}$��1���µ$��E���ç$��F���-%��F���t%��4���»%��2���ð%��9���#&��<���]&��U���š&��=���ð&��D���.'�����s'��5���u'�� ���«'�� ���µ'��ê��Á'��#���¬*��6���Ð*�����+��%���!+�� ���G+�� ���h+��ë���‰+��a���u,��¥���×,��?���}-�����½-��&���K.�����r.�����‰.�����¦.�����Â.��$���Ú.�����ÿ.�����/�����,/�����=/�����F/�� ��e/��L��s0�����À2�� ���Ñ2��#���Ü2��B����3��.��C3�����r5��1���5�����¿5�����Ö5�����ê5��f���6��f���m6�����Ô6�����Ü6�����ï6�����7�����7�� ���(7��'���57��-���]7��'���‹7��X���³7��<��� 8��%���I8��$���o8��z���”8��ƒ���9��$���“9�����¸9�� ���º9�� ���Û9�� ���ü9�����:�����;:��#���P:�����t:�����”:�����¬:��F���Ì:��$���;��0���8;��!���i;��.���‹;�����º;��&���Ö;�� ���ý;��"���<��(���A<��&���j<�����‘<��.���«<��5���Ú<�����=��.���.=��A���]=��`���Ÿ=��B����>��A���C>��3���…>��A���¹>�����û>�����?�����(?�����>?�����U?�����k?�� ���?�� ���¢?�����°?�����¿?��'���Ó?�� ���û?�����@��"���4@�����W@�����w@�����“@�����¯@�����À@�����ß@��<���þ@�����;A��%���LA�����rA��2���A��=���ÃA��<���B��@���>B��-���B�����­B��(���¼B��2���åB�� ���C��#���9C��"���]C��#���€C�� ���¤C��C���ÅC����� D��;���!D��/���]D��$���D��I���²D��5���üD��:���2E��C���mE��)���±E��(���ÛE�� ���F��)���%F�� ���OF��s��[F��(���ÏH��²���øH��›���«I��é���GJ��ž���1K��?��ÐK��«��N��(��¼O��Þ��åQ��\���ÄT��s���!U��U���•U��\���ëU��l��HV����µW�����CY��8���YY�����’Y�����§Y��?���ÇY��:���Z��H���BZ��H���‹Z��.���ÔZ��4���[��>���8[��9���w[��;���±[��\���í[��b���J\��?���­\��Y���í\��O���G]��J���—]��j���â]��<���M^��S���Š^��X���Þ^��4���7_��3���l_��3��� _��O���Ô_��O���$`��D���t`��C���¹`��R���ý`��S���Pa��S���¤a��C���øa��8���<b��I���ub��F���¿b��n���c��W���uc��]���Íc�����+d��J���/d�����zd�����ƒd��a��“d��4���õg��I���*h��0���th��4���¥h��6���Úh��6���i��5��Hi��ƒ���~j��Û���k��S���Þk��¸���2l��@���ël�����,m��%���Fm��)���lm��-���–m��)���Äm�����îm��*���n�����3n�����Dn��0���Wn��A��ˆn��¥��Êo�����pr�����‰r��*���˜r��[���Ãr��7��s��#���Wu��F���{u��i���Âu��f���,v��)���“v��‚���½v��†���@w�� ���Çw��$���Ôw�����ùw��2���x��2���Jx��&���}x��;���¤x��=���àx��6���y��t���Uy��X���Êy��-���#z��4���Qz��œ���†z��¬���#{��4���Ð{�����|����� |��)���&|��-���P|��1���~|��!���°|��?���Ò|��@���}�����S}�����s}��K���“}��5���ß}��Q���~��:���g~��L���¢~��(���ï~��0�����2���I��5���|��<���²��5���ï��$���%€��A���J€��@���Œ€��&���Í€��4���ô€��S���)��h���}��f���æ��_���M‚��Q���­‚��X���ÿ‚��0���Xƒ��1���‰ƒ��.���»ƒ��)���êƒ��/���„��(���D„��,���m„�����š„��1���º„��+���ì„��2���…��4���K…��%���€…��>���¦…��+���å…��+���†��+���=†�����i†��+���‰†��8���µ†��^���î†�����M‡��.���^‡��5���‡��Q���Ç��E���ˆ��K���[ˆ��K���§ˆ��T���óˆ�����H‰��,���a‰��E���މ��3���Ô‰��/���Š��2���8Š��7���kŠ��$���£Š��Y���ÈŠ��#���"‹��X���F‹��H���Ÿ‹��,���è‹��Y���Œ��3���oŒ��F���£Œ��h���êŒ��F���S��\���š��?���÷��4���7Ž�� ���lŽ�����e���g���L���Œ���¾���m������µ��������������¸���J���ž���d���������¡���Q���=���u��� ���ˆ���Ÿ���;������������������,�������~�����������­�������’���½���9�������U���y������A���f���‡���Â���¤�������X���F���b�������E���(��������������� ���¼���>���‚���„���N���-������B����������� �������.���l���+���^����������D���±���\������x�������€���©���0������V���°����������)���™���¢���¿���2������?�������%���O���������������‰���������Z����������£�������›���I���¨���:�������������–���¬���P������1�������˜���&���Á�������Š���À��� ���•���´�����������5���G���®���“���!�������¶�������*���$�����������†���/���q���s���œ�����������3�������Ä���c�������j������i���w���������������R���v���ª�������<���ƒ���C���t��� �������a������}���T�������@���4���³���������� �������#���—���K���r���H���Ã�������”���8���{���Y�������h���k���¦���p�������n�������S��������������M���Ž���‹����������_���º���¹���z���|�������»����������������6������7���`�������"������‘���«���²���§��������������o��� ���¯��������������·�������¥���'���š�������]����������…�������[�������W���� Written by Jose E. Marchesi.� --encrypt encrypt confidential fields in the specified file. --decrypt decrypt confidential fields in the specified file. � --help print a help message and exit. --version show version and exit. � --no-external don't use external descriptors. --force alter the records even if violating record restrictions. � --no-external don't use external descriptors. --force force the requested operation. � -c, --comment comment out the matching records instead of deleting them. --force delete even in potentially dangerous situations, and if the deletion is violating record restrictions. --no-external don't use external descriptors. --verbose give a detailed report if the integrity check fails. � -d, --delim=char sets the deliminator (default ',') -t, --type=TYPE record set to convert to csv; if this parameter is omitted then the default record set is used -S, --sort=FIELDS sort the output by the specified fields. � -d, --include-descriptors print record descriptors along with the matched records. -C, --collapse do not section the result in records with newlines. -S, --sort=FIELD,... sort the output by the specified fields. -G, --group-by=FIELD,... group records by the specified fields. -U, --uniq remove duplicated fields in the output records. � -f, --field=STR field name; should be followed by a -v. -v, --value=STR field value; should be preceded by an -f. -r, --record=STR record that will be inserted in the file. --force insert the record even if it is violating record restrictions. --no-external don't use external descriptors. --no-auto don't insert auto generated fields. --verbose give a detailed report if the integrity check fails. � -f, --file=FILENAME read the template to apply from a file. � -j, --join=FIELD perform an inner join using the specified field. � -s, --password=STR decrypt confidential fields with the given password. � -s, --password=STR encrypt confidential fields with the given password. � -s, --system-tables include system tables. -e, --keep-empty-fields don't prune empty fields in the rec output. -l, --list-tables dump a list of the table names contained in the mdb file. � -t, --type=RECORD_TYPE print information on the records having the specified type. -d, --descriptor include the full record descriptors. -n, --names-only output just the names of the record files found in the input. �%s home page: <%s> �%s home page: <http://www.gnu.org/software/recutils/> �%s subprocess�%s subprocess failed�%s subprocess got fatal signal %d�%s: error: the number of records of type %s should be %zd. �%s: error: too few records of type %s. Minimum allowed are %zd. �%s: error: too many records of type %s. Maximum allowed are %zd. �%s: invalid option -- '%c' �%s: option requires an argument -- '%c' �%s:%s: error: %%constraint[%d] violated in record �%s:%s: error: %s does not contain information for type %s. �%s:%s: error: %s does not contain valid rec data. �%s:%s: error: auto-incremented field %s should be of type int, range or date �%s:%s: error: auto-incremented field %s should be of type int, range, uuid or date �%s:%s: error: confidential field is not encrypted �%s:%s: error: could not fetch remote descriptor from url %s. �%s:%s: error: could not read external descriptor from file %s. �%s:%s: error: duplicated key value in field '%s' in record �%s:%s: error: expected a comma-separated list of fields before the type specification �%s:%s: error: expected a type name before the type specification �%s:%s: error: field '%s' not allowed in this record set �%s:%s: error: field '%s' should be unique in this record �%s:%s: error: invalid record type %s �%s:%s: error: invalid type specification �%s:%s: error: invalid typedef specification �%s:%s: error: key field '%s' not found in record �%s:%s: error: mandatory field '%s' not found in record �%s:%s: error: missing %%rec field in record descriptor �%s:%s: error: multiple key fields '%s' in record �%s:%s: error: only one %%key field is allowed in a record descriptor �%s:%s: error: only one %%size field is allowed in a record descriptor �%s:%s: error: only one %%sort field is allowed in a record descriptor �%s:%s: error: prohibited field '%s' found in record �%s:%s: error: the referred type %s does not exist �%s:%s: error: too many %%rec fields in record descriptor �%s:%s: error: value for %s should be a list of field names. �%s:%s: error: value for %s should be a number optionally preceded by >, <, >= or <=. �%s:%s: error: value for %s[%zd] is not a list of field names �%s:%s: error: value for %s[%zd] is not a valid selection expression �'�--password|-s must be used as an operation argument. �: error: �: warning: �Actions: -s, --set=VALUE change the value of the selected fields. -a, --add=VALUE add the selected fields with the given value. -S, --set-add=VALUE change the value of the selected fields. If they don't exist then add a new field with that value. -r, --rename=NAME rename the selected fields to a given name. If an entire record set is selected then the field is renamed in the record descriptor as well. -d, --delete delete the selected fields. -c, --comment comment out the selected fields. �Alter or delete fields in records. �Apply a template to records read from standard input. �Check and fix rec files. �Convert an mdb file into a rec file. �Convert csv data into rec data. �Convert rec data into csv data. �Copyright (C) %s Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �De/Encryption options: -s, --password=PASSWORD encrypt/decrypt with this password. �Field selection options: -f, --fields=FIELDS comma-separated list of field names with optional subscripts. �General help using GNU software: <http://www.gnu.org/gethelp/> �If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. �Insert new records in a rec database. �Invalid back reference�Invalid character class name�Invalid collation character�Invalid content of \{\}�Invalid preceding regular expression�Invalid range end�Invalid regular expression�Memory exhausted�No match�No previous regular expression�Operations: --check check integrity of the specified file. Default. --sort sort the records in the specified file. --auto insert auto-generated fields in records missing them. �Output options: -p, --print=FIELDS comma-separated list of fields to print for each matching record. -P, --print-values=FIELDS as -p, but print only the values of the selected fields. -R, --print-row=FIELDS as -P, but separate the values with spaces instead of newlines. -c, --count print a count of the matching records instead of the records themselves. �Password again: �Password: �Premature end of regular expression�Print information about the types of records stored in the input. �Record selection options: -i, --case-insensitive make strings case-insensitive in selection expressions. -t, --type=TYPE operate on records of the specified type only. -e, --expression=RECORD_EXPR selection expression. -q, --quick=STR select records with fields containing a string. -n, --number=NUM,... select specific records by position, with ranges. -m, --random=NUM select a given number of random records. �Regular expression too big�Remove (or comment out) records from a rec file. �Report %s bugs to: %s �Report bugs to: %s �Select and print rec data. �Special options: --print-sexps print the data in sexps instead of rec format. �Special options: -S, --print-sexps print the data in sexps instead of rec format. �Success�Trailing backslash�Unknown system error�Unmatched ( or \(�Unmatched ) or \)�Unmatched \{�Usage: csv2rec [OPTIONS]... [CSV_FILE] �Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE] �Usage: rec2csv [OPTIONS]... [REC_FILE] �Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [FILE] �Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE] �Usage: recfmt [OPTION]... [TEMPLATE] �Usage: recinf [OPTION]... [FILE]... �Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE] �Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]... �Usage: recset [OPTION]... [FILE]... �`�a -f should be followed by a -v �a -v should be preceded by a -f �can't open file %s for reading. �cannot create a unique name. �cannot read file %s �cannot specify -[pPR] and also -c. �cannot specify -c and also -p. �could not open file %s �creating the field expression. �don't specify a template in the command line and -f at the same time. �duplicated record set '%s' from %s. �error evaluating expression in a template slot. �error while parsing CSV file: %s �error while parsing the record provided by -r �error: cannot read file %s �expected an integer between %d and %d.�failed to initialize csv parser �failed to normalise field name %s �failed to normalise record type name %s �failed to normalise the field name %s �file %s is not writable. �file does not appear to be an Access database �ignoring a request to delete all records of type %s. �internal error creating fex. �internal error creating the field expression. �internal error: REC_FEX_MAX_ELEMS exceeded. Please report this. �internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() in rec_type_new(). �internal error: rec_int_rec_extract_file: error compiling regexp. �internal error: rec_int_rec_extract_url: error compiling regexp. �internal error: rec_match: error compiling regexp. �internal error: recutl_index_list_parse: error compiling regexp. �invalid 'bool' value.�invalid 'field' value.�invalid 'line' value.�invalid 'range' value.�invalid 'real' value.�invalid 'uuid' value.�invalid aggregate function '%s' �invalid date.�invalid email.�invalid enum value.�invalid expression in a template slot. �invalid field expression in -f. �invalid field name %s. �invalid field name '%s' in header �invalid field name list in -S. �invalid field names in -G. �invalid field names in -S. �invalid integer.�invalid list of fields in -%c �invalid selection expression. �joins can only be used when a named record set is selected. �memory exhausted�more than one password was specified �no records of type %s found. �only one field can be specified as join criteria. �only one field list can be specified as a grouping criteria. �only one field list can be specified as a sorting criteria. �only one list of fields can be specified as a sorting criteria. �operation aborted due to integrity failures. �out of memory �please provide a value for the field %s �please specify a correct field name to -j|--join. �please specify just one action. �please specify just one operation. �please specify just one password. �please specify some field with -f. �please use --force or --decrypt �recfmt_apply_template: error compiling regexp. Please report this. �renaming file %s to %s �several record types found. Please use -t to specify one. �the database contains already encrypted fields �the provided passwords don't match. �the rename operation requires just one field with an optional subscript. �the specified operation does not require a password. �unknown operation in recfix: please report this as a bug. �use --force if you really want to proceed, or use either -n or -e. �use --force to skip the integrity check. �use --verbose to get a detailed report. �value does not match the regexp.�value too large. Expected a size <= %zu.�write error�Project-Id-Version: recutils 1.6.90 Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org POT-Creation-Date: 2022-04-16 19:38+0200 PO-Revision-Date: 2014-03-20 09:17+0700 Last-Translator: Trần Ngá»c Quân <vnwildman@gmail.com> Language-Team: Vietnamese <translation-team-vi@lists.sourceforge.net> Language: vi MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. Plural-Forms: nplurals=1; plural=0; X-Language-Team-Website: <http://translationproject.org/team/vi.html> X-Generator: LocFactoryEditor 1.8 X-Poedit-SourceCharset: UTF-8 � ÄÆ°á»£c viết bởi Jose E. Marchesi.� --encrypt mã hóa các trưá»ng trong tập tin đã cho. --decrypt giải mã các trưá»ng trong tập tin đã cho. � --help hiển thị trợ giúp rồi thoát. --version hiển thị phiên bản rồi thoát. � --no-external không dùng bá»™ mô tả từ bên ngoài. --force thay thế các bản ghi ngay cả khi nó vi phạm các hạn chế. � --no-external không dùng mô tả từ bên ngoài. --force ép buá»™c thao tác được yêu cầu. � -c, --comment đánh dấu là ghi chú cho các bản ghi được tìm thấy thay vì xóa chúng Ä‘i. --force xóa ngay cả khi nó tiá»m ẩn rá»§i ro, và khi nó vi phạm các hạn chế. --no-external không dùng mô tả từ bên ngoài. --verbose đưa ra báo cáo chi tiết nếu việc kiểm tra tính toàn vẹn thất bại. � -d, --delim=ký_tá»± ngăn cách bằng ký tá»± này (mặc định là “,â€) -t, --type=KIỂU tập hợp các bản ghi chuyển đổi sang csv; nếu tham số này được bá» qua thì tập hợp các bản ghi mặc định sẽ được dùng -S, --sort=TRƯỜNG sắp xếp kết xuất theo trưá»ng này. � -d, --include-descriptors hiển thị các mô tả bản ghi cùng vá»›i các bản ghi tìm thấy. -C, --collapse không phân Ä‘oạn kết quả từng bản ghi bằng ngắt dòng. -S, --sort=TRƯỜNG sắp xếp kết xuất theo trưá»ng đã cho. -G, --group-by=TRƯỜNG,... nhóm các bản ghi theo trưá»ng đã cho. -U, --uniq gỡ bá» các trưá»ng bị trùng trong các bản ghi kết xuất. � -f, --field=CHUá»–I tên trưá»ng; nên được theo sau -v. -v, --value=CHUá»–I tên trưá»ng; nên được theo trước -f. -r, --record=CHUá»–I bản ghi sẽ được chèn trong tập tin. --force chèn bản ghi thậm chí nó vi phạm các hạn chế. --no-external không dùng các mô tả từ bên ngoài. --no-auto không chèn các trưá»ng tá»± động. --verbose đưa ra thông tin chi tiết nếu không đạt khi kiểm tra tính toàn vẹn dữ liệu. � -f, --file=TẬP-TIN Ä‘á»c mẫu để áp dụng từ má»™t tập tin. � -j, --join=TRƯỜNG thá»±c hiện phép gia nhập “inner join†dùng trưá»ng đã cho. � -s, --password=MK giải mã các trưá»ng bằng mật khẩu. � -s, --password=MK mã hóa các trưá»ng bằng mật khẩu đã cho. � -s, --system-tables bao gồm các bảng hệ thống. -e, --keep-empty-fields không cắt cụt các trưá»ng trống trong kết xuất rec. -l, --list-tables đổ danh sách tên các bảng chứa trong trong tập tin mdb. � -t, --type=KIỂU-BẢN-GHI hiển thị thông tin trên những bản ghi có kiểu đã cho. -d, --descriptor bao gồm đầy đủ cả các mô tả bản ghi. -n, --names-only chỉ hiển thị tên cá»§a những tập tin bản ghi được tìm thấy từ đầu vào. �Trang chá»§ %s: <%s> �Trang chá»§ %s: <http://www.gnu.org/software/recutils/> �tiến trình con %s�tiến trình con %s bị lá»—i�tiến trình con %s đã nhận tín hiệu nghiêm trá»ng %d�%s: lá»—i: số bản ghi cá»§a kiểu %s phải là %zd. �%s: lá»—i: có quá ít bản ghi cho kiểu %s. Tối thiểu là %zd. �%s: lá»—i: có quá nhiá»u bản ghi cho kiểu %s. Tối Ä‘a là %zd. �%s: tùy chá»n không hợp lệ -- “%c†�%s: tùy chá»n cần má»™t đối số -- “%c†�%s:%s: lá»—i: %%constraint[%d] bị vi phạm trong bản ghi �%s:%s: lá»—i: %s không chứa thông tin cho kiểu %s. �%s:%s: lá»—i: %s không chứa dữ liệu rec hợp lệ. �%s:%s: lá»—i: trưá»ng tá»±-động-tăng %s phải là kiểu int, vùng hay ngày tháng �%s:%s: lá»—i: trưá»ng tá»±-động-tăng %s phải là kiểu int, vùng, uuid hay ngày tháng �%s:%s: lá»—i: trưá»ng bí mật thì chưa được mã hóa �%s:%s: lá»—i: không thể lấy vá» bá»™ mô tả máy chá»§ từ địa chỉ url %s. �%s:%s: lá»—i: không thể Ä‘á»c bá»™ mô tả mở rá»™ng từ tập tin %s. �%s:%s: lá»—i: trùng lặp khóa trong trưá»ng “%s†trong bản ghi �%s:%s: lá»—i: cần danh sách các trưá»ng ngăn cách bằng dấu phẩy trước đặc tả kiểu �%s:%s: lá»—i: cần tên kiểu trước đặc tả kiểu �%s:%s: lá»—i: không cho phép trưá»ng “%s†trong tập hợp bản ghi này �%s:%s: cảnh báo: trưá»ng “%s†cần phải là duy nhất trong bản ghi này �%s:%s: lá»—i: kiểu bản ghi %s không hợp lệ �%s:%s: lá»—i: đặc tả kiểu không hợp lệ �%s:%s: lá»—i: đặc tả kiểu không hợp lệ �%s:%s: lá»—i: trưá»ng yêu cầu “%s†không tìm thấy trong bản ghi �%s:%s: lá»—i: trưá»ng yêu cầu “%s†không tìm thấy trong bản ghi �%s:%s: lá»—i: thiếu trưá»ng %%rec trong bá»™ mô tả bản ghi �%s:%s: lá»—i: có nhiá»u trưá»ng khóa “%s†trong bản ghi �%s:%s: lá»—i: chỉ cho phép má»™t trưá»ng %%key trong bá»™ mô tả bản ghi �%s:%s: lá»—i: chỉ cho phép má»™t trưá»ng %%size trong bá»™ mô tả bản ghi �%s:%s: lá»—i: chỉ cho phép má»™t trưá»ng %%sort trong bá»™ mô tả bản ghi �%s:%s: lá»—i: trưá»ng cấm “%s†tìm thấy trong bản ghi �%s:%s: lá»—i: kiểu tham chiếu %s không tồn tại �%s:%s: lá»—i: quá nhiá»u trưá»ng %%rec trong bá»™ mô tả bản ghi �%s:%s: lá»—i: giá trị cho %s phải là danh sách tên trưá»ng. �%s:%s: lá»—i: giá trị cho %s phải là con số tùy chá»n được treo trước bằng >, <, >= or <=. �%s:%s: lá»—i: giá trị cho %s[%zd] không phải là má»™t danh sách tên trưá»ng �%s:%s: lá»—i: giá trị cho %s[%zd] không phải là má»™t biểu thức chá»n hợp lệ �â€�--password|-s phải được dùng như là má»™t đối số thao tác. �: lá»—i:�: cảnh báo: �Hành vi: -s, --set=GIÃ-TRỊ thay đổi giá trị cá»§a các trưá»ng đã chá»n. -a, --add=GIÃ-TRỊ thêm các trưá»ng đã chá»n bằng giá trị đã cho. -S, --set-add=GIÃ-TRỊ thay đổi giá trị cá»§a các trưá»ng đã chá»n. Nếu chúng chưa có thì thêm trưá»ng bằng giá trị này. -r, --rename=TÊN đổi tên trưá»ng bằng tên đã cho. Nếu toàn bá»™ tập hợp bản ghi được chá»n thì trưá»ng đổi tên mô tả bản ghi cÅ©ng bị đổi tên. -d, --delete xóa các trưá»ng đã chá»n. -c, --comment biến các trưá»ng đã chá»n thành ghi chú. �Thay thế hay xóa các trưá»ng trong bản ghi. �Ãp dụng mẫu cho các bản ghi Ä‘á»c từ đầu ra tiêu chuẩn. �Kiểm tra và sá»­a chữa các tập tin rec. �Chuyển đổi tập tin từ kiểu mdb sang rec. �Chuyển đổi dữ liệu từ kiểu csv sang rec. �Chuyển đổi dữ liệu từ kiểu rec sang csv. �Tác quyá»n © %s Jose E. Marchesi. Giấy Phép Công Cá»™ng GNU (GPL), phiên bản 3 hay sau <http://gnu.org/licenses/gpl.html>. Äây là phần má»m tá»± do: bạn có quyá»n thay đổi và phát hành lại nó. KHÔNG CÓ BẢO HÀNH GÃŒ CẢ, vá»›i Ä‘iá»u kiện được pháp luật cho phép. �Tùy chá»n mã hóa và giải mã: -s, --password=MẬT_KHẨU mã hóa hoặc giải mã dùng MẬT_KHẨU này. �Các tùy chá»n chá»n trưá»ng: -f, --fields=TRƯỜNG danh sách tên trưá»ng được ngăn cách bằng dấu phẩy vá»›i chỉ số phụ tùy chá»n. �Trợ giúp chung vá» sá»­ dụng phần má»m GNU: <http://www.gnu.org/gethelp/> �Nếu không đưa ra TẬP-TIN thì lệnh thá»±c hiện như là má»™t bá»™ lá»c, lấy dữ liệu từ đầu vào tiêu chuẩn và kết quả đưa ra đầu ra tiêu chuẩn. �Chèn thêm các bản ghi má»›i vào cÆ¡ sở dữ liệu rec. �Sai tham chiếu ngược�Tên lá»›p ký tá»± không hợp lệ�Ký tá»± đối chiếu không hợp lệ�Ná»™i dung cá»§a “\{\}†không hợp lệ�Sai biểu thức chính quy Ä‘i trước�Sai kết thúc phạm vi�Biểu thức chính quy không hợp lệ�Hết bá»™ nhá»›�Không tìm thấy�Không có biểu thức chính quy Ä‘i trước�Các thao tác: --check kiểm tra tính toàn vẹn cá»§a tập tin. Mặc định. --sort sắp xếp các bản ghi trong tập tin đã cho. --auto chèn thêm các trưá»ng auto-generated vào các bản ghi bị thiếu. �Các tùy chá»n kết xuất: -p, --print=TRƯỜNG danh sách các trưá»ng (ngăn cách bằng dấu phẩy) sẽ được in ra khi kết xuất. -P, --print-values=TRƯỜNG như -p, nhưng chỉ in giá trị cá»§a các trưá»ng đã chá»n. -R, --print-row=TRƯỜNG như -P, nhưng ngăn cách các giá trị bằng khoảng trắng thay vì ngắt dòng. -c, --count in ra số lượng cá»§a các bản ghi thay cho các bản ghi. �Gõ lại mật khẩu: �Mật khẩu: �Kết thúc sá»›m biểu thức chính quy�Hiển thị thông tin vá» các kiểu cá»§a các trưá»ng đã lưu trong đầu vào. �Các tùy chá»n để lấy bản ghi: -i, --case-insensitive làm cho biểu thức chá»n phân biệt HOA/thưá»ng -t, --type=KIỂU chỉ thao tác vá»›i các bản ghi có kiểu đã cho. -e, --expression=BTHỨC_BGHI biểu thức chá»n. -q, --quick=CHUá»–I lấy các bản ghi vá»›i các trưá»ng chứa chuá»—i. -n, --number=Sá»,... lấy các bản ghi theo vị trí vá»›i má»™t vùng. -m, --random=Sá» lấy ra số bản ghi ngẫu nhiên. �Biểu thức chính quy quá lá»›n�Gỡ bá» (biến thành ghi chú) các bản ghi từ tập tin rec. �Thông báo lá»—i %s cho: %s Thông báo lá»—i dịch cho: <http://translationproject.org/team/vi.html>. �Thông báo lá»—i cho: %s Thông báo lá»—i dịch cho: <http://translationproject.org/team/vi.html>. �Chá»n và hiển thị dữ liệu rec. �Tùy chá»n đặc biệt: --print-sexps hiển thị dữ liệu theo định dạng sexps thay cho rec. �Các tùy chá»n đặc biệt: -S, --print-sexps hiển thị dữ liệu ở định dạng sexps thay cho rec. �Thành công�Có dấu gạch ngược ở cuối�Lá»—i hệ thống không rõ�Có má»™t ký tá»± “(†hay “\(†lẻ đôi�Có má»™t ký tá»± “)†hay “\)†lẻ đôi�Có má»™t ký tá»± “\{†lẻ đôi�Cách dùng: csv2rec [CÃC-TÙY-CHỌN]... [TẬP-TIN-CSV] �Cách dùng: mdb2rec [TÙY-CHỌN]... TẬP-TIN-MDB [BẢNG] �Cách dùng: rec2csv [TÙY-CHỌN]... [TẬP-TIN-REC] �Cách dùng: recdel [TÙY-CHỌN]... [-t KIỂU] [-n Sá» | -e BTHỨC_BẢNGHI | -q CHUá»–I | -m Sá»] [TẬP-TIN] �Cách dùng: recfix [TÙY-CHỌN]... [THAO-TÃC] [TÙY-CHỌN-THAO-TÃC]... [TẬP-TIN] �Cách dùng: recfmt [TÙY-CHỌN]... [MẪU] �Cách dùng: recinf [TÙY-CHỌN]... [TẬP-TIN]... �Cách dùng: recins [TÙY-CHỌN]... [-t KIỂU] [-n Sá» | -e BTHỨC_BẢN_GHI | -q CHUá»–I | -m Sá»] [(-f TÊN -v CHUá»–I]|[-R RECDATA)]... [TẬP-TIN] �Cách dùng: recsel [TÙY-CHỌN]... [-t KIỂU] [-j TRƯỜNG] [-n CHỈSá» | -e BTHỨC_BẢNGHI | -q CHUá»–I | -m Sá»] [-c | (-p|-P) BTHỨC_TRƯỜNG] [TẬP-TIN]... �Cách dùng: recset [TÙY-CHỌN]... [TẬP-TIN]... �“�-f phải theo sau bởi -v �-v phải được Ä‘i trước bởi -f �Không thể mở tập tin %s để Ä‘á»c. �không tạo được tên tập tin duy nhất. �không thể Ä‘á»c tập tin %s �không được phép đưa ra -[pPR] mà lại còn dùng -c. �không thể chỉ ra đồng thá»i hai tùy chá»n -c và -p. �không thể mở tập tin %s �tạo biểu thức trưá»ng. �đừng dùng mẫu trong câu lệnh và tùy chá»n -f cùng má»™t lúc. �trùng lặp tập hợp bản ghi “%s†từ %s. �gặp lá»—i khi ước lượng giá trị cá»§a biểu thức trong slot mẫu. �gặp lá»—i khi phân tích ngữ pháp tập tin CSV: %s �gặp lá»—i trong khi phân tích bản ghi cung cấp bởi tùy chá»n -r �lá»—i: không thể Ä‘á»c tập tin %s �cần má»™t số nguyên nằm giữa %d và %d.�gặp lá»—i khi khởi tạo bá»™ phân tích csv �gặp lá»—i khi tiêu chuẩn hóa tên trưá»ng %s �gặp lá»—i khi tiêu chuẩn hóa tên kiểu bản ghi %s �gặp lá»—i khi tiêu chuẩn hóa tên trưá»ng %s �không thể ghi vào tập tin %s. �tập tin có vẻ không phải là cÆ¡ sở dữ liệu Access �lá» Ä‘i các yêu cầu xóa các bản ghi thuá»™c kiểu %s. �lá»—i ná»™i bá»™ khi tạo “fexâ€. �lá»—i ná»™i bá»™ khi tạo biểu thức trưá»ng. �lá»—i ná»™i bá»™: đã vượt quá REC_FEX_MAX_ELEMS. Hãy báo cáo lá»—i này. �lá»—i ná»™i bá»™: rec-types: nhận REC_TYPE_NONE từ rec_type_parse_type_kind() trong rec_type_new(). �lá»—i ná»™i bá»™: rec_int_rec_extract_file: lá»—i khi biên dịch biểu thức chính quy (regexp). �lá»—i ná»™i bá»™: rec_int_rec_extract_url: lá»—i biên dịch biểu thức chính quy regexp. �lá»—i ná»™i bá»™: rec_match: lá»—i biên dịch biểu thức chính quy regexp. �lá»—i ná»™i bá»™: recutl_index_list_parse: lá»—i biên dịch biểu thức chính quy. �giá trị lôgíc “bool†không hợp lệ.�giá trị không hợp lệ cho “trưá»ngâ€.�giá trị dòng “line†không hợp lệ.�giá trị “vùng†không hợp lệ.�giá trị thá»±c “real†không hợp lệ.�giá trị “uuid†không hợp lệ.�hàm kết tập “%s†không hợp lệ �ngày tháng không hợp lệ.�địa chỉ thư Ä‘iện tá»­ không hợp lệ.�kiểu liệt kê (enum) không hợp lệ.�biểu thức không hợp lệ trong slot mẫu. �biểu thức trưá»ng không hợp lệ trong -f. �tên trưá»ng không hợp lệ %s. �tên ngưá»i trưá»ng sai “%s†trong phần mở đầu �tên trưá»ng không hợp lệ trong -S. �tên trưá»ng không hợp lệ trong -G. �tên trưá»ng không hợp lệ trong -S. �số nguyên không hợp lệ.�tên trưá»ng không hợp lệ trong -%c �Biểu thức chính quy đã chá»n không hợp lệ. �phép gia nhập chỉ được dùng khi mà tập hợp bản ghi có tên được chá»n. �hết bá»™ nhá»›�đã đưa ra nhiá»u hÆ¡n má»™t mật khẩu �không tìm thấy bản ghi nào thuá»™c kiểu %s. �chỉ được chỉ ra má»™t trưá»ng làm tiêu chí để gia nhập (join). �chỉ được chỉ ra má»™t trưá»ng làm tiêu chí để nhóm. �chỉ được chỉ ra má»™t trưá»ng làm tiêu chí để sắp xếp. �chỉ được chỉ ra má»™t trưá»ng làm tiêu chí để sắp xếp. �thao tác bị bãi bá» bởi vì tính liêm chính không được đảm bảo. �không đủ bá»™ nhá»› �hãy cung cấp giá trị cho trưá»ng %s �hãy chỉ ra má»™t tên trưá»ng đúng cho tùy chá»n -j|--join. �chỉ được phép chỉ ra má»™t hành động. �chỉ được phép chỉ ra má»™t thao tác. �chỉ được phép chỉ ra má»™t mật khẩu. �hãy chỉ ra má»™t số trưá»ng cho tùy chá»n -f. �hãy dùng --force hoặc --decrypt �recfmt_apply_template: lá»—i dịch biểu thức chính qui. Hãy báo cáo lá»—i này. �đổi tên tập tin %s thành %s �tìm thấy vài kiểu bản ghi. Hãy dùng tùy chá»n -t để chỉ định má»™t. �cÆ¡ sở dữ liệu đã sẵn chứa các trưá»ng được mã hóa �mật khẩu đã cung cấp không khá»›p. �thao tác đổi tên yêu cầu chỉ má»™t trưá»ng vá»›i má»™t subcript tùy chá»n. �thao tác đã cho không yêu cầu mật khẩu. �không hiểu thao tác recfix: hãy báo cáo đây là má»™t lá»—i. �dùng --force nếu bạn thá»±c sá»± muốn xá»­ lý, hoặc dùng má»™t trong hai tùy chá»n -n, -e. �dùng --force để bá» qua kiểm tra sá»± toàn vẹn dữ liệu. �dùng --verbose để nhận được báo cáo chi tiết những gì Ä‘ang thá»±c hiện. �giá trị không khá»›p vá»›i biểu thức chính quy regexp.�giá trị quá lá»›n. Cần kích thước <= %zu.�lá»—i ghi�����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/sr.po�������������������������������������������������������������������������������0000644�0000000�0000000�00000220201�14226577415�011520� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Serbian translation of recutils. # Copyright © 2014 Free Software Foundation, Inc. # This file is distributed under the same license as the recutils package. # МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>, 2012—2020. msgid "" msgstr "" "Project-Id-Version: recutils-1.8\n" "Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" "POT-Creation-Date: 2022-04-16 19:38+0200\n" "PO-Revision-Date: 2020-11-09 18:00+0200\n" "Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com>\n" "Language-Team: Serbian <(nothing)>\n" "Language: sr\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n" "%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2);\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: lib/closeout.c:122 msgid "write error" msgstr "грешка пиÑања" #: lib/copy-acl.c:54 lib/copy-file.c:215 #, c-format msgid "preserving permissions for %s" msgstr "причувавам овлашћења за „%s“" #: lib/copy-file.c:192 #, fuzzy, c-format msgid "error while opening %s for reading" msgstr "не могу да отворим датотеку „%s“ за читање.\n" #: lib/copy-file.c:196 #, fuzzy, c-format msgid "cannot open backup file %s for writing" msgstr "не могу да отворим датотеку „%s“ за читање.\n" #: lib/copy-file.c:200 #, fuzzy, c-format msgid "error reading %s" msgstr "грешка: не могу да читам датотеку „%s“\n" #: lib/copy-file.c:204 #, c-format msgid "error writing %s" msgstr "" #: lib/copy-file.c:208 #, fuzzy, c-format msgid "error after reading %s" msgstr "грешка: не могу да читам датотеку „%s“\n" #: lib/error.c:195 msgid "Unknown system error" msgstr "Ðепозната грешка ÑиÑтема" #: lib/execute.c:348 lib/wait-process.c:291 lib/wait-process.c:365 #, c-format msgid "%s subprocess failed" msgstr "%s Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð¸Ñ˜Ðµ уÑпео" #: lib/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: опција „%s%s“ је нејаÑна\n" #: lib/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: опција „%s%s“ је нејаÑна; могућноÑти:" #: lib/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: непозната опција „%s%s“\n" #: lib/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: опција „%s%s“ не дозвољава аргумент\n" #: lib/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: опција „%s%s“ захтева аргумент\n" #: lib/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: неиÑправна опција -- „%c“\n" #: lib/getopt.c:636 lib/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: опција захтева аргумент -- „%c“\n" #: lib/obstack.c:337 lib/obstack.c:339 lib/xalloc-die.c:34 msgid "memory exhausted" msgstr "меморија је потрошена" #: lib/openat-die.c:38 #, c-format msgid "unable to record current working directory" msgstr "" #: lib/openat-die.c:57 #, c-format msgid "failed to return to initial working directory" msgstr "" #: parse-datetime.y:440 parse-datetime.y:540 #, c-format msgid "parsed %s part: " msgstr "обрадих %s део: " #: parse-datetime.y:455 #, c-format msgid "year: %04<PRIdMAX>" msgstr "година: %04<PRIdMAX>" #: parse-datetime.y:483 #, c-format msgid "%s (day ordinal=%<PRIdMAX> number=%d)" msgstr "%s (редни дан=%<PRIdMAX> број=%d)" #: parse-datetime.y:514 #, c-format msgid "number of seconds: %<PRIdMAX>" msgstr "број Ñекунди: %<PRIdMAX>" #: parse-datetime.y:547 msgid "today/this/now\n" msgstr "данаÑ/ово/Ñада\n" #: parse-datetime.y:612 msgid "number of seconds" msgstr "број Ñекунди" #: parse-datetime.y:625 msgid "datetime" msgstr "датум и време" #: parse-datetime.y:630 msgid "time" msgstr "време" #: parse-datetime.y:635 msgid "local_zone" msgstr "меÑна_зона" #: parse-datetime.y:640 msgid "zone" msgstr "зона" #: parse-datetime.y:645 msgid "date" msgstr "датум" #: parse-datetime.y:650 msgid "day" msgstr "дан" #: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 msgid "relative" msgstr "релативно" #: parse-datetime.y:658 msgid "number" msgstr "број" #: parse-datetime.y:662 msgid "hybrid" msgstr "хибрид" #: parse-datetime.y:820 #, c-format msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" msgstr "" "упозорење: вредноÑÑ‚ %<PRIdMAX> има %<PRIdMAX> цифре. ПретпоÑтављам ГГГГ/ММ/" "ДД\n" #: parse-datetime.y:832 #, c-format msgid "" "warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" msgstr "" "упозорење: вредноÑÑ‚ %<PRIdMAX> има мање од 4 цифара. ПретпоÑтављам ММ/ДД/" "ГГ[ГГ]\n" #: parse-datetime.y:1279 #, c-format msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" msgstr "упозорење: дотерујем вредноÑÑ‚ године %<PRIdMAX> на %<PRIdMAX>\n" #: parse-datetime.y:1289 #, c-format msgid "error: out-of-range year %<PRIdMAX>\n" msgstr "грешка: година ван опÑега %<PRIdMAX>\n" #: parse-datetime.y:1520 #, c-format msgid "error: unknown word '%s'\n" msgstr "грешка: непозната реч „%s“\n" #: parse-datetime.y:1669 msgid "error: invalid date/time value:\n" msgstr "грешка: неиÑправна вредноÑÑ‚ датума/времена:\n" #: parse-datetime.y:1670 #, c-format msgid " user provided time: '%s'\n" msgstr " време које доÑтавља кориÑник: „%s“\n" #: parse-datetime.y:1672 #, c-format msgid " normalized time: '%s'\n" msgstr " нормализовано време: „%s“\n" #: parse-datetime.y:1695 msgid " possible reasons:\n" msgstr " могући разлози:\n" #: parse-datetime.y:1697 msgid " non-existing due to daylight-saving time;\n" msgstr " непоÑтојеће због времена чувања дневног Ñветла;\n" #: parse-datetime.y:1699 msgid " invalid day/month combination;\n" msgstr " неиÑправна комбинација дана/меÑеца;\n" #: parse-datetime.y:1700 msgid " numeric values overflow;\n" msgstr " прекорачење бројевне вредноÑти;\n" #: parse-datetime.y:1701 msgid "incorrect timezone" msgstr "неиÑправна временÑка зона" #: parse-datetime.y:1702 msgid "missing timezone" msgstr "недоÑтаје временÑка зона" #: parse-datetime.y:1810 msgid "error: initial year out of range\n" msgstr "грешка: почетна година је ван опÑега\n" #: parse-datetime.y:1905 msgid "error: parsing failed\n" msgstr "грешка: обрада није уÑпела\n" #: parse-datetime.y:1906 #, c-format msgid "error: parsing failed, stopped at '%s'\n" msgstr "грешка: обрада није уÑпела, зауÑтавих Ñе на „%s“\n" #: parse-datetime.y:1916 msgid "input timezone: " msgstr "временÑка зона улаза: " #: parse-datetime.y:1919 #, c-format msgid "'@timespec' - always UTC" msgstr "„@timespec“ – увек КУВ" #: parse-datetime.y:1921 #, c-format msgid "parsed date/time string" msgstr "обрађена ниÑка датума/времена" #: parse-datetime.y:1925 #, c-format msgid "TZ=\"%s\" in date string" msgstr "ВЗ=„%s“ у ниÑци датума" #: parse-datetime.y:1929 #, c-format msgid "TZ=\"UTC0\" environment value or -u" msgstr "ВЗ=„UTC0“ променљива окружења или -u" #: parse-datetime.y:1932 #, c-format msgid "TZ=\"%s\" environment value" msgstr "ВЗ=„%s“ променљива окружења" #: parse-datetime.y:1935 #, c-format msgid "system default" msgstr "оÑновноÑÑ‚ ÑиÑтема" #: parse-datetime.y:1977 msgid "error: year, month, or day overflow\n" msgstr "грешка: прекорачење године, меÑеца, или дана\n" #: parse-datetime.y:1988 #, c-format msgid "error: invalid hour %<PRIdMAX>%s\n" msgstr "грешка: неиÑправан Ñ‡Ð°Ñ %<PRIdMAX>%s\n" #: parse-datetime.y:1996 #, c-format msgid "using specified time as starting value: '%s'\n" msgstr "кориÑтим наведено време као почетну вредноÑÑ‚: „%s“\n" #: parse-datetime.y:1997 #, c-format msgid "using current time as starting value: '%s'\n" msgstr "кориÑтим текуће време као почетну вредноÑÑ‚: „%s“\n" #: parse-datetime.y:2051 #, c-format msgid "error: tzalloc (\"%s\") failed\n" msgstr "грешка: „tzalloc“ (%s) није уÑпело\n" #: parse-datetime.y:2095 #, c-format msgid "" "error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " "date: '%s'\n" msgstr "" "грешка: дан „%s“ (редни дан=%<PRIdMAX> број=%d) је резултирао неиÑправним " "датумом: %s\n" #: parse-datetime.y:2106 #, c-format msgid "new start date: '%s' is '%s'\n" msgstr "нови датум почетка: „%s“ је „%s“\n" #: parse-datetime.y:2115 #, c-format msgid "using current date as starting value: '%s'\n" msgstr "кориÑтим текући датум као почетну вредноÑÑ‚: „%s“\n" #: parse-datetime.y:2119 #, c-format msgid "warning: day (%s) ignored when explicit dates are given\n" msgstr "упозорење: дан (%s) је занемарен када Ñу дати изричити датуми\n" #: parse-datetime.y:2123 #, c-format msgid "starting date/time: '%s'\n" msgstr "почетни датум/време: „%s“\n" #: parse-datetime.y:2133 msgid "" "warning: when adding relative months/years, it is recommended to specify the " "15th of the months\n" msgstr "" "упозорење: приликом додавања релативног меÑеца/године, препоручује Ñе " "навођење 15-ог у меÑецу\n" #: parse-datetime.y:2138 msgid "warning: when adding relative days, it is recommended to specify noon\n" msgstr "" "упозорење: приликом додавања релативних дана, препоручује Ñе навођење " "поноћи\n" #: parse-datetime.y:2148 #, c-format msgid "error: %s:%d\n" msgstr "грешка: %s:%d\n" #: parse-datetime.y:2163 #, c-format msgid "error: adding relative date resulted in an invalid date: '%s'\n" msgstr "" "грешка: додавање релативног датума резултирало је неиÑправним датумом: %s\n" #: parse-datetime.y:2172 #, c-format msgid "" "after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " "days),\n" msgstr "" "након дотеривања датума (%+<PRIdMAX> године, %+<PRIdMAX> меÑеца, %+<PRIdMAX> " "дана),\n" #: parse-datetime.y:2176 #, c-format msgid " new date/time = '%s'\n" msgstr " нови датум/времена = „%s“\n" #: parse-datetime.y:2195 msgid "warning: daylight saving time changed after date adjustment\n" msgstr "" "упозорење: време очувања дневне ÑветлоÑти је измењено након дотеривања " "датума\n" #: parse-datetime.y:2214 msgid "warning: month/year adjustment resulted in shifted dates:\n" msgstr "" "упозорење: дотеривање меÑеца/године је резултирало промењеним датумима:\n" #: parse-datetime.y:2217 #, c-format msgid " adjusted Y M D: %s %02d %02d\n" msgstr " дотерана Г М Д: %s %02d %02d\n" #: parse-datetime.y:2219 #, c-format msgid " normalized Y M D: %s %02d %02d\n" msgstr " нормализована Г М Д: %s %02d %02d\n" #: parse-datetime.y:2248 #, c-format msgid "error: timezone %d caused time_t overflow\n" msgstr "грешка: временÑка зона %d је довела до „time_t“ прекорачења\n" #: parse-datetime.y:2258 #, c-format msgid "'%s' = %<PRIdMAX> epoch-seconds\n" msgstr "„%s“ = %<PRIdMAX> Ñекунде-епохе\n" #: parse-datetime.y:2286 msgid "error: adding relative time caused an overflow\n" msgstr "грешка: додавање релативног времена је довело до прекорачења\n" #: parse-datetime.y:2297 #, c-format msgid "" "after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " "seconds, %+d ns),\n" msgstr "" "након дотеривања времена (%+<PRIdMAX> чаÑа, %+<PRIdMAX> минута, %+<PRIdMAX> " "Ñекунде, %+d ns),\n" #: parse-datetime.y:2303 #, c-format msgid " new time = %<PRIdMAX> epoch-seconds\n" msgstr " ново време = %<PRIdMAX> Ñекунде-епохе\n" #: parse-datetime.y:2319 msgid "warning: daylight saving time changed after time adjustment\n" msgstr "" "упозорење: време очувања дневне ÑветлоÑти је измењено након дотеривања " "времена\n" #: parse-datetime.y:2329 msgid "timezone: system default\n" msgstr "временÑка зона: оÑновноÑти ÑиÑтема\n" #: parse-datetime.y:2331 msgid "timezone: Universal Time\n" msgstr "времнÑка зона: Универзално време\n" #: parse-datetime.y:2333 #, c-format msgid "timezone: TZ=\"%s\" environment value\n" msgstr "временÑка зона: ВЗ=„%s“ вредноÑÑ‚ окружења\n" #: parse-datetime.y:2337 #, c-format msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" msgstr "крајње: %<PRIdMAX>.%09d (Ñекунде епохе)\n" #: parse-datetime.y:2343 #, c-format msgid "final: %s (UTC)\n" msgstr "крајње: %s (КУВ)\n" #: parse-datetime.y:2358 #, c-format msgid "final: %s (UTC%s)\n" msgstr "крајње: %s (КУВ%s)\n" #: parse-datetime.y:2362 #, c-format msgid "final: %s (unknown time zone offset)\n" msgstr "крајње: %s (непознат померај временÑке зоне)\n" #. TRANSLATORS: #. Get translations for open and closing quotation marks. #. The message catalog should translate "`" to a left #. quotation mark suitable for the locale, and similarly for #. "'". For example, a French Unicode local should translate #. these to U+00AB (LEFT-POINTING DOUBLE ANGLE #. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE #. QUOTATION MARK), respectively. #. #. If the catalog has no translation, we will try to #. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and #. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the #. current locale is not Unicode, locale_quoting_style #. will quote 'like this', and clocale_quoting_style will #. quote "like this". You should always include translations #. for "`" and "'" even if U+2018 and U+2019 are appropriate #. for your locale. #. #. If you don't know what to put here, please see #. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> #. and use glyphs suitable for your language. #: lib/quotearg.c:355 msgid "`" msgstr "„" #: lib/quotearg.c:356 msgid "'" msgstr "“" #: lib/regcomp.c:122 msgid "Success" msgstr "УÑпешно" #: lib/regcomp.c:125 msgid "No match" msgstr "Ðема подударања" #: lib/regcomp.c:128 msgid "Invalid regular expression" msgstr "ÐеиÑправан регуларан израз" #: lib/regcomp.c:131 msgid "Invalid collation character" msgstr "ÐеиÑправан знак поретка" #: lib/regcomp.c:134 msgid "Invalid character class name" msgstr "ÐеиÑправан назив клаÑе знака" #: lib/regcomp.c:137 msgid "Trailing backslash" msgstr "Пратећа контра коÑа црта" #: lib/regcomp.c:140 msgid "Invalid back reference" msgstr "ÐеиÑправна повратна референца" #: lib/regcomp.c:143 msgid "Unmatched [, [^, [:, [., or [=" msgstr "Ðе одговара [, [^, [:, [., или [=" #: lib/regcomp.c:146 msgid "Unmatched ( or \\(" msgstr "Ðе одговара ( или \\(" #: lib/regcomp.c:149 msgid "Unmatched \\{" msgstr "Ðе одговара \\{" #: lib/regcomp.c:152 msgid "Invalid content of \\{\\}" msgstr "ÐеиÑправан Ñадржај \\{\\}" #: lib/regcomp.c:155 msgid "Invalid range end" msgstr "ÐеиÑправан крај опÑега" #: lib/regcomp.c:158 msgid "Memory exhausted" msgstr "Меморија је потрошена" #: lib/regcomp.c:161 msgid "Invalid preceding regular expression" msgstr "ÐеиÑправан регуларан израз који претходи" #: lib/regcomp.c:164 msgid "Premature end of regular expression" msgstr "Прерани крај регуларног израза" #: lib/regcomp.c:167 msgid "Regular expression too big" msgstr "Регуларни израз је превелик" #: lib/regcomp.c:170 msgid "Unmatched ) or \\)" msgstr "Ðе одговара ) или \\)" #: lib/regcomp.c:650 msgid "No previous regular expression" msgstr "Ðема претходног регуларног израза" #: lib/set-acl.c:46 #, c-format msgid "setting permissions for %s" msgstr "поÑтављам овлашћења за „%s“" #: lib/version-etc.c:73 #, c-format msgid "Packaged by %s (%s)\n" msgstr "Запаковао је %s (%s)\n" #: lib/version-etc.c:76 #, c-format msgid "Packaged by %s\n" msgstr "Запаковао је %s\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: lib/version-etc.c:83 msgid "(C)" msgstr "©" #. TRANSLATORS: The %s placeholder is the web address of the GPL license. #: lib/version-etc.c:88 #, fuzzy, c-format msgid "" "License GPLv3+: GNU GPL version 3 or later <%s>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "\n" "Лиценца ОЈЛв3+: ГÐУ ОЈЛ издање 3 или новије <http://gnu.org/licenses/gpl." "html>.\n" "Ово је Ñлободан Ñофтвер: Ñлободни Ñте да га мењате и раÑподељујете.\n" "Ðе поÑтоји ÐИКÐКВРГÐРÐÐЦИЈÐ, у оквирима дозвољеним законом.\n" "\n" #. TRANSLATORS: %s denotes an author name. #: lib/version-etc.c:105 #, c-format msgid "Written by %s.\n" msgstr "ÐапиÑао је %s.\n" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:109 #, c-format msgid "Written by %s and %s.\n" msgstr "ÐапиÑали Ñу %s и %s.\n" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:113 #, c-format msgid "Written by %s, %s, and %s.\n" msgstr "ÐапиÑали Ñу %s, %s и %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:120 #, c-format msgid "" "Written by %s, %s, %s,\n" "and %s.\n" msgstr "" "ÐапиÑали Ñу %s, %s, %s\n" "и %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:127 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, and %s.\n" msgstr "" "ÐапиÑали Ñу %s, %s, %s\n" "%s и %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:134 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, and %s.\n" msgstr "" "ÐапиÑали Ñу %s, %s, %s\n" "%s, %s и %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:142 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, and %s.\n" msgstr "" "ÐапиÑали Ñу %s, %s, %s\n" "%s, %s, %s и %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:150 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "and %s.\n" msgstr "" "ÐапиÑали Ñу %s, %s, %s\n" "%s, %s, %s, %s\n" "и %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:159 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, and %s.\n" msgstr "" "ÐапиÑали Ñу %s, %s, %s\n" "%s, %s, %s, %s\n" "%s, и %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:170 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s, and others.\n" msgstr "" "ÐапиÑали Ñу %s, %s, %s\n" "%s, %s, %s, %s\n" "%s, %s и други.\n" #. TRANSLATORS: The placeholder indicates the bug-reporting address #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for translation #. bugs (typically your translation team's web or email address). #. TRANSLATORS: --help output 5+ (reports) #. TRANSLATORS: the placeholder indicates the bug-reporting address #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap #: lib/version-etc.c:249 utils/recutl.c:114 #, c-format msgid "Report bugs to: %s\n" msgstr "Грешке пријавите на: %s\n" #: lib/version-etc.c:251 utils/recutl.c:117 #, c-format msgid "Report %s bugs to: %s\n" msgstr "Грешке програма „%s“ пријавите на: %s\n" #: lib/version-etc.c:255 lib/version-etc.c:257 utils/recutl.c:121 #, c-format msgid "%s home page: <%s>\n" msgstr "%s матична Ñтраница: <%s>\n" #: lib/version-etc.c:260 #, fuzzy, c-format msgid "General help using GNU software: <%s>\n" msgstr "Општа помоћ кориÑтећи ГÐУ Ñофтвер: <https://www.gnu.org/gethelp/>\n" #: lib/wait-process.c:232 lib/wait-process.c:264 lib/wait-process.c:326 #, c-format msgid "%s subprocess" msgstr "%s потпроцеÑ" #: lib/wait-process.c:283 lib/wait-process.c:355 #, c-format msgid "%s subprocess got fatal signal %d" msgstr "%s Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ добио кобни Ñигнал %d" #: src/rec-fex.c:726 #, c-format msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" msgstr "" "унутрашња грешка: „REC_FEX_MAX_ELEMS“ је превелико. Молим извеÑтите о " "овоме.\n" #: src/rec-int.c:132 src/rec-int.c:186 src/rec-int.c:243 src/rec-int.c:287 #: utils/recutl.c:199 msgid "out of memory\n" msgstr "нема више меморије\n" #: src/rec-int.c:147 #, c-format msgid "%s:%s: error: mandatory field '%s' not found in record\n" msgstr "%s:%s: грешка: обавезно поље „%s“ није пронађено у запиÑу\n" #: src/rec-int.c:210 #, c-format msgid "%s:%s: error: field '%s' not allowed in this record set\n" msgstr "%s:%s: грешка: поље „%s“ није допуштено у овом Ñкупу запиÑа\n" #: src/rec-int.c:257 #, c-format msgid "%s:%s: error: field '%s' should be unique in this record\n" msgstr "%s:%s: грешка: поље „%s“ треба да буде јединÑтвено у овом запиÑу\n" #: src/rec-int.c:301 #, c-format msgid "%s:%s: error: prohibited field '%s' found in record\n" msgstr "%s:%s: грешка: забрањено поље „%s“ је пронађено у запиÑу\n" #: src/rec-int.c:333 #, c-format msgid "%s:%s: error: %%constraint[%d] violated in record\n" msgstr "%s:%s: грешка: %%constraint[%d] је повређено у запиÑу\n" #: src/rec-int.c:370 #, c-format msgid "%s:%s: error: confidential field is not encrypted\n" msgstr "%s:%s: грешка: поверљиво поље није шифровано\n" #: src/rec-int.c:422 #, c-format msgid "%s:%s: error: key field '%s' not found in record\n" msgstr "%s:%s: грешка: кључно поље „%s“ није пронађено у запиÑу\n" #: src/rec-int.c:431 #, c-format msgid "%s:%s: error: multiple key fields '%s' in record\n" msgstr "%s:%s: грешка: више кључних поља „%s“ у запиÑу\n" #: src/rec-int.c:474 #, c-format msgid "%s:%s: error: duplicated key value in field '%s' in record\n" msgstr "%s:%s: грешка: удвоÑтрчена вредноÑÑ‚ кључа у пољу „%s“ у запиÑу\n" #: src/rec-int.c:562 #, fuzzy, c-format msgid "%s:%s: error: duplicated value in singular field '%s' in record\n" msgstr "%s:%s: грешка: удвоÑтрчена вредноÑÑ‚ кључа у пољу „%s“ у запиÑу\n" #: src/rec-int.c:620 #, c-format msgid "%s:%s: error: missing %%rec field in record descriptor\n" msgstr "%s:%s: грешка: недоÑтаје поље „%%rec“ у опиÑнику запиÑа\n" #: src/rec-int.c:628 #, c-format msgid "%s:%s: error: too many %%rec fields in record descriptor\n" msgstr "%s:%s: грешка: превише %%rec поља у опиÑнику запиÑа\n" #: src/rec-int.c:638 #, c-format msgid "%s:%s: error: invalid record type %s\n" msgstr "%s:%s: грешка: неиÑправна врÑта запиÑа %s\n" #: src/rec-int.c:649 #, c-format msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" msgstr "%s:%s: грешка: Ñамо једно %%key поље је дозвољено у опиÑнику запиÑа\n" #: src/rec-int.c:659 #, c-format msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" msgstr "%s:%s: грешка: Ñамо једно %%size поље је дозвољено у опиÑнику запиÑа\n" #: src/rec-int.c:669 #, c-format msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" msgstr "%s:%s: грешка: Ñамо једно %%sort поље је дозвољено у опиÑнику запиÑа\n" #: src/rec-int.c:692 #, c-format msgid "" "%s:%s: error: expected a comma-separated list of fields before the type " "specification\n" msgstr "" "%s:%s: грешка: очекиван је зарезом раздвојен ÑпиÑак поља пре Ñпецификације " "врÑте\n" #: src/rec-int.c:718 src/rec-int.c:771 #, c-format msgid "%s:%s: error: the referred type %s does not exist\n" msgstr "%s:%s: грешка: одноÑна врÑта %s не поÑтоји\n" #: src/rec-int.c:730 #, c-format msgid "%s:%s: error: invalid type specification\n" msgstr "%s:%s: грешка: неиÑправна Ñпецификација врÑте\n" #: src/rec-int.c:745 #, c-format msgid "%s:%s: error: expected a type name before the type specification\n" msgstr "%s:%s: грешка: очекиван је назив врÑте пре Ñпецификације врÑте\n" #: src/rec-int.c:783 #, c-format msgid "%s:%s: error: invalid typedef specification\n" msgstr "%s:%s: грешка: неиÑправна Ñпецификација одреднице врÑте\n" #: src/rec-int.c:805 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" msgstr "%s:%s: грешка: вредноÑÑ‚ за %s[%zd] није иÑправан израз избора\n" #: src/rec-int.c:836 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" msgstr "%s:%s: грешка: вредноÑÑ‚ за %s[%zd] није ÑпиÑак назива поља\n" #: src/rec-int.c:849 #, c-format msgid "" "%s:%s: error: value for %s should be a number optionally preceded by >, <, " ">= or <=.\n" msgstr "" "%s:%s: грешка: вредноÑÑ‚ за „%s“ треба бити број коме по могућноÑти претходи " ">, <, >= или <=.\n" #: src/rec-int.c:865 #, c-format msgid "%s:%s: error: value for %s should be a list of field names.\n" msgstr "%s:%s: грешка: вредноÑÑ‚ за „%s“ треба бити ÑпиÑак назива поља.\n" #: src/rec-int.c:893 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range, uuid " "or date\n" msgstr "" "%s:%s: грешка: Ñамо-повећано поље „%s“ треба бити врÑте „int“ (цео број), " "„range“ (опÑег), „uuid“ (ујиб) или „date“ (датум)\n" #: src/rec-int.c:895 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range or " "date\n" msgstr "" "%s:%s: грешка: Ñамо-повећано поље „%s“ треба бити врÑте „int“ (цео број), " "„range“ (опÑег) или „date“ (датум)\n" #: src/rec-int.c:978 #, c-format msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" msgstr "%s:%s: грешка: не могу да довучем удаљени опиÑник Ñа адреÑе %s.\n" #: src/rec-int.c:997 #, c-format msgid "%s:%s: error: could not read external descriptor from file %s.\n" msgstr "%s:%s: грешка: не могу прочитам Ñпољни опиÑник из датотеке %s.\n" #: src/rec-int.c:1012 #, c-format msgid "%s:%s: error: %s does not contain valid rec data.\n" msgstr "%s:%s: грешка: %s не Ñадржи иÑправне податке запиÑа.\n" #: src/rec-int.c:1026 #, c-format msgid "%s:%s: error: %s does not contain information for type %s.\n" msgstr "%s:%s: грешка: %s не Ñадржи податке за врÑту %s.\n" #: src/rec-int.c:1150 #, c-format msgid "%s: error: the number of records of type %s should be %zd.\n" msgstr "%s: грешка: број запиÑа врÑте „%s“ треба бити %zd.\n" #: src/rec-int.c:1160 #, c-format msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" msgstr "%s: грешка: превише запиÑа врÑте %s. Ðајвише је дозвољено %zd.\n" #: src/rec-int.c:1167 #, c-format msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" msgstr "%s: грешка: премало запиÑа врÑте %s. Ðајмање је дозвољено %zd.\n" #: src/rec-types.c:304 msgid "invalid integer." msgstr "неиÑправ цео број." #: src/rec-types.c:332 msgid "invalid 'field' value." msgstr "неиÑправна вредноÑÑ‚ „field“." #: src/rec-types.c:353 msgid "invalid 'uuid' value." msgstr "неиÑправна вредноÑÑ‚ „uuid“." #: src/rec-types.c:369 msgid "invalid 'bool' value." msgstr "неиÑправна вредноÑÑ‚ „bool“." #: src/rec-types.c:390 msgid "invalid 'range' value." msgstr "неиÑправна вредноÑÑ‚ „range“." #: src/rec-types.c:399 #, c-format msgid "expected an integer between %d and %d." msgstr "очекиван је цео број између %d и %d." #: src/rec-types.c:419 msgid "invalid 'real' value." msgstr "неиÑправна вредноÑÑ‚ „real“." #: src/rec-types.c:436 #, c-format msgid "value too large. Expected a size <= %zu." msgstr "вредноÑÑ‚ је превелика. Очекивана вредноÑÑ‚ је <= %zu." #: src/rec-types.c:456 msgid "invalid 'line' value." msgstr "неиÑправна вредноÑÑ‚ „line“." #: src/rec-types.c:473 msgid "value does not match the regexp." msgstr "вредноÑÑ‚ Ñе не поклапа Ñа регуларним изразом." #: src/rec-types.c:492 msgid "invalid date." msgstr "неиÑправан датум." #: src/rec-types.c:506 msgid "invalid email." msgstr "неиÑправна ел. пошта." #: src/rec-types.c:547 msgid "invalid enum value." msgstr "неиÑправна бројевна вредноÑÑ‚." #: src/rec-types.c:898 #, c-format msgid "" "internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " "in rec_type_new().\n" msgstr "" "унутрашња грешка: врÑте-запиÑа: добих „REC_TYPE_NONE“ из " "„rec_type_parse_type_kind()“ у „rec_type_new()“.\n" #: src/rec-utils.c:86 #, c-format msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" msgstr "" "унутрашња грешка: „rec_int_rec_extract_file“: грешка превођења регуларног " "израза.\n" #: src/rec-utils.c:116 src/rec-utils.c:147 #, c-format msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" msgstr "" "унутрашња грешка: „rec_int_rec_extract_url“: грешка превођења регуларног " "израза.\n" #: src/rec-utils.c:290 #, c-format msgid "internal error: rec_match: error compiling regexp.\n" msgstr "унутрашња грешка: „rec_match“: грешка превођења регуларног израза.\n" #. TRANSLATORS: --help output, csv2rec synopsis. #. no-wrap #: utils/csv2rec.c:98 #, c-format msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" msgstr "Употреба: csv2rec [ОПЦИЈЕ]... [ЦСВ_ДÐТОТЕКÐ]\n" #. TRANSLATORS: --help output, csv2rec short description. #. no-wrap #: utils/csv2rec.c:103 msgid "Convert csv data into rec data.\n" msgstr "Претворите цÑв податке у податке запиÑа.\n" #. TRANSLATORS: --help output, csv2rec options. #. no-wrap #: utils/csv2rec.c:109 #, fuzzy msgid "" " -t, --type=TYPE type name for the converted records; " "if this\n" " parameter is omitted then no type is " "used.\n" " -s, --strict be strict parsing the csv file.\n" " -e, --omit-empty omit empty fields.\n" msgstr "" " -t, --type=ВРСТРназив врÑте за претворене запиÑе; ако " "је овај\n" " параметар изоÑтављен онда Ñе не " "кориÑти врÑта.\n" " -s, --strict бива тачан обрађујући цÑв датотеку.\n" " -e, --omit-empty изоÑтавља празна поља.\n" #: utils/csv2rec.c:212 #, c-format msgid "invalid field name '%s' in header\n" msgstr "неиÑправан назив поља „%s“ у заглављу\n" #: utils/csv2rec.c:221 #, fuzzy msgid "error while parsing CSV file: too many columns in row\n" msgstr "грешка приликом обраде ЦСВ датотеке: %s\n" #: utils/csv2rec.c:241 #, c-format msgid "" "%s: %lu: this line contains %lu fields, but %lu header fields were read\n" msgstr "" "%s: %lu: овај ред Ñадржи %lu поља, али Ñу прочитана %lu поља заглавља\n" #: utils/csv2rec.c:331 utils/recdel.c:233 utils/recset.c:306 utils/recutl.c:317 #, c-format msgid "cannot read file %s\n" msgstr "не могу да прочитам датотеку „%s“\n" #: utils/csv2rec.c:338 msgid "failed to initialize csv parser\n" msgstr "ниÑам уÑпео да покренем цÑв обрађивача\n" #: utils/csv2rec.c:355 #, c-format msgid "error while parsing CSV file: %s\n" msgstr "грешка приликом обраде ЦСВ датотеке: %s\n" #. TRANSLATORS: --help output, mdb2rec synopsis. #. no-wrap #: utils/mdb2rec.c:97 #, c-format msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" msgstr "Употреба: mdb2rec [ОПЦИЈЕ]... МДБ_ДÐТОТЕКР[ТÐБЕЛÐ]\n" #. TRANSLATORS: --help output, mdb2rec short description. #. no-wrap #: utils/mdb2rec.c:102 msgid "Convert an mdb file into a rec file.\n" msgstr "Претворите мдб датотеку у датотеку запиÑа.\n" #. TRANSLATORS: --help output, mdb2rec options. #. no-wrap #: utils/mdb2rec.c:108 msgid "" " -s, --system-tables include system tables.\n" " -e, --keep-empty-fields don't prune empty fields in the rec\n" " output.\n" " -l, --list-tables dump a list of the table names " "contained\n" " in the mdb file.\n" msgstr "" " -s, --system-tables укључује ÑиÑтемÑке табеле.\n" " -e, --keep-empty-fields не избацује празна поља у излазу\n" " запиÑа.\n" " -l, --list-tables проÑлеђује ÑпиÑак назива табела\n" " Ñадржаних у мдб датотеци.\n" #: utils/mdb2rec.c:230 utils/mdb2rec.c:288 #, c-format msgid "failed to normalise record type name %s\n" msgstr "ниÑам уÑпео да нормализујем назив врÑте запиÑа %s\n" #: utils/mdb2rec.c:236 utils/mdb2rec.c:245 #, c-format msgid "failed to normalise field name %s\n" msgstr "ниÑам уÑпео да нормализујем назив поља %s\n" #: utils/mdb2rec.c:307 #, c-format msgid "failed to normalise the field name %s\n" msgstr "ниÑам уÑпео да нормализујем назив поља %s\n" #: utils/mdb2rec.c:396 utils/recins.c:191 utils/recset.c:223 #, c-format msgid "invalid field name %s.\n" msgstr "неиÑправан назив поља %s.\n" #: utils/mdb2rec.c:436 #, c-format msgid "could not open file %s\n" msgstr "не могу да отворим датотеку %s\n" #: utils/mdb2rec.c:441 msgid "file does not appear to be an Access database\n" msgstr "датотека не изгледа да је база пдатака ÐкÑеÑа\n" #. TRANSLATORS: --help output, rec2csv synopsis. #. no-wrap #: utils/rec2csv.c:70 #, c-format msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" msgstr "Употреба: rec2csv [ОПЦИЈЕ]... [ДÐТОТЕКÐ_ЗÐПИСÐ]\n" #. TRANSLATORS: --help output, rec2csv short description. #. no-wrap #: utils/rec2csv.c:75 msgid "Convert rec data into csv data.\n" msgstr "Претворите податке запиÑа у цÑв податке.\n" #. TRANSLATORS: --help output, rec2csv options. #. no-wrap #: utils/rec2csv.c:81 msgid "" " -d, --delim=char sets the deliminator (default ',')\n" " -t, --type=TYPE record set to convert to csv; if this " "parameter\n" " is omitted then the default record " "set is used\n" " -S, --sort=FIELDS sort the output by the specified " "fields.\n" msgstr "" " -d, --delim=знак подешава раздвајач (оÑновно је ,)\n" " -t, --type=ВРСТРÑкуп запиÑа за претварање у цÑв; ако " "је овај параматар\n" " изоÑтављен онда Ñе кориÑти оÑновни " "Ñкуп запиÑа\n" " -S, --sort=ПОЉРређа резултат према наведеном пољу.\n" #: utils/rec2csv.c:121 msgid "only one list of fields can be specified as a sorting criteria.\n" msgstr "Ñамо један ÑпиÑак поља може бити наведен као мерило ређања.\n" #: utils/rec2csv.c:126 msgid "invalid field name list in -S.\n" msgstr "неиÑправан ÑпиÑак назива поља у „-S“.\n" #: utils/rec2csv.c:130 utils/recsel.c:221 utils/recsel.c:245 msgid "internal error creating fex.\n" msgstr "унутрашња грешка Ñтварања фекÑа.\n" #. TRANSLATORS: --help output, recdel synopsis. #. no-wrap #: utils/recdel.c:78 #, c-format msgid "" "Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [FILE]\n" msgstr "" "Употреба: recdel [ОПЦИЈЕ]... [-t ВРСТÐ] [-n БРОЈ | -e ИЗРÐЗ_ЗÐПИСР| -q ÐИЗ " "| -m БРОЈ] [ДÐТОТЕКÐ]\n" #. TRANSLATORS: --help output, recdel short description. #. no-wrap #: utils/recdel.c:83 msgid "Remove (or comment out) records from a rec file.\n" msgstr "Уклоните (или Ñтавите у напомену) запиÑе из датотеке запиÑа.\n" #. TRANSLATORS: --help output, recdel arguments. #. no-wrap #: utils/recdel.c:90 msgid "" " -c, --comment comment out the matching records " "instead of\n" " deleting them.\n" " --force delete even in potentially dangerous " "situations,\n" " and if the deletion is violating " "record restrictions.\n" " --no-external don't use external descriptors.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -c, --comment Ñтавља у напомену подударајуће запиÑе\n" " умеÑто да их брише.\n" " --force брише чак и у потенцијално опаÑним " "Ñитуацијама,\n" " и ако бриÑање нарушава ограничења " "запиÑа.\n" " --no-external не кориÑти Ñпољне опиÑнике.\n" " --verbose даје опширан извештај ако провера\n" " целовитоÑти не уÑпе.\n" #. TRANSLATORS: --help output, notes on recdel. #. no-wrap #. TRANSLATORS: --help output, notes on recfix. #. no-wrap #. TRANSLATORS: --help output, notes on recins. #. no-wrap #: utils/recdel.c:108 utils/recfix.c:149 utils/recins.c:138 msgid "" "If no FILE is specified then the command acts like a filter, getting\n" "the data from standard input and writing the result to standard output.\n" msgstr "" "Ðко ДÐТОТЕКРније наведена онда наредба делује као пропуÑник, добављајући\n" "податке Ñа Ñтандардног улаза и запиÑујући резултат на Ñтандардни излаз.\n" #: utils/recdel.c:123 #, c-format msgid "no records of type %s found.\n" msgstr "ниÑу пронађени запиÑи врÑте %s.\n" #: utils/recdel.c:196 #, c-format msgid "ignoring a request to delete all records of type %s.\n" msgstr "занемарује захтев за бриÑање Ñвих запиÑа врÑте %s.\n" #: utils/recdel.c:198 msgid "use --force if you really want to proceed, or use either -n or -e.\n" msgstr "" "кориÑтите „--force“ ако заиÑта желите да наÑтавите, или кориÑтите „-n“ или „-" "e“.\n" #: utils/recdel.c:206 msgid "invalid selection expression.\n" msgstr "неиÑправан израз избора.\n" #: utils/recdel.c:241 utils/recfix.c:344 utils/recins.c:361 utils/recset.c:312 #, c-format msgid "file %s is not writable.\n" msgstr "датотека „%s“ није упиÑива.\n" #. TRANSLATORS: --help output, recfix synopsis. #. no-wrap #: utils/recfix.c:99 #, c-format msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" msgstr "Употреба: recfix [ОПЦИЈÐ]... [РÐДЊÐ] [ОПЦИЈÐ_РÐДЊЕ]... [ДÐТОТЕКÐ]\n" #. TRANSLATORS: --help output, recfix short description. #. no-wrap #: utils/recfix.c:104 msgid "Check and fix rec files.\n" msgstr "Проверите и поправите датотеке запиÑа.\n" #. TRANSLATORS: --help output, recfix global arguments. #. no-wrap #: utils/recfix.c:111 msgid "" " --no-external don't use external descriptors.\n" " --force force the requested operation.\n" msgstr "" " --no-external не кориÑти Ñпољног опиÑника.\n" " --force приморава захтевану радњу.\n" #. TRANSLATORS: --help output, recfix operations. #. no-wrap #: utils/recfix.c:121 msgid "" "Operations:\n" " --check check integrity of the specified " "file. Default.\n" " --sort sort the records in the specified " "file.\n" " --auto insert auto-generated fields in " "records missing them.\n" msgstr "" "Радње:\n" " --check cпроверава целовитоÑÑ‚ наведене " "датотеке. ОÑновно.\n" " --sort ређа запиÑе у наведеној датотеци.\n" " --auto умеће ÑамоÑтворена поља у запиÑима " "који их немају.\n" #. TRANSLATORS: --help output, recfix operations related with encryption. #. no-wrap #: utils/recfix.c:131 msgid "" " --encrypt encrypt confidential fields in the " "specified file.\n" " --decrypt decrypt confidential fields in the " "specified file.\n" msgstr "" " --encrypt шифрује поверљива поља у наведеној " "датотеци.\n" " --decrypt дешифрује поверљива поља у наведеној " "датотеци.\n" #. TRANSLATORS: --help output, recfix encryption and decryption #. options. #. no-wrap #: utils/recfix.c:140 msgid "" "De/Encryption options:\n" " -s, --password=PASSWORD encrypt/decrypt with this password.\n" msgstr "" "Опције де/шифровања:\n" " -s, --password=ЛОЗИÐКРшифрује/дешифрује овом лозинком.\n" #: utils/recfix.c:184 msgid "--password|-s must be used as an operation argument.\n" msgstr "„--password|-s“ мора бити коришћено као аргумент радње.\n" #: utils/recfix.c:188 msgid "the specified operation does not require a password.\n" msgstr "наведена радња не захтева лозинку.\n" #: utils/recfix.c:191 msgid "please specify just one password.\n" msgstr "молим наведите барем једну лозинку.\n" #: utils/recfix.c:198 utils/recfix.c:204 utils/recfix.c:210 utils/recfix.c:217 #: utils/recfix.c:223 msgid "please specify just one operation.\n" msgstr "молим наведите барем једну радњу.\n" #: utils/recfix.c:304 utils/recfix.c:326 utils/recfix.c:365 utils/recfix.c:435 #, fuzzy, c-format msgid "recfix: error: cannot read file %s\n" msgstr "грешка: не могу да читам датотеку „%s“\n" #: utils/recfix.c:399 msgid "the database contains already encrypted fields\n" msgstr "база података Ñадржи већ шифрована поља\n" #: utils/recfix.c:400 msgid "please use --force or --decrypt\n" msgstr "молим кориÑтите „--force“ или „--decrypt“\n" #: utils/recfix.c:499 msgid "unknown operation in recfix: please report this as a bug.\n" msgstr "непозната радња у поправци запиÑа: молим пријавите ово као грешку.\n" #. TRANSLATORS: --help output, recfmt synopsis. #. no-wrap #: utils/recfmt.c:64 #, c-format msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" msgstr "Употреба: recfmt [ОПЦИЈÐ]... [ШÐБЛОÐ]\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:69 msgid "Apply a template to records read from standard input.\n" msgstr "Примените шаблон на читања запиÑа Ñа Ñтандардног улаза.\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:75 msgid "" " -f, --file=FILENAME read the template to apply from a " "file.\n" msgstr "" " -f, --file=ÐÐЗИВДÐТОТЕКЕ чита шаблон за примену из датотеке.\n" #: utils/recfmt.c:107 #, c-format msgid "can't open file %s for reading.\n" msgstr "не могу да отворим датотеку „%s“ за читање.\n" #: utils/recfmt.c:120 msgid "don't specify a template in the command line and -f at the same time.\n" msgstr "не наводи шаблон на линији наредби и „-f“ у иÑто време.\n" #: utils/recfmt.c:142 msgid "invalid expression in a template slot.\n" msgstr "неиÑправан израз у прикључку шаблона.\n" #: utils/recfmt.c:146 msgid "error evaluating expression in a template slot.\n" msgstr "грешка процењивања израза у прикључку шаблона.\n" #: utils/recfmt.c:178 msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" msgstr "" "фмтзпÑ_примени_шаблон: грешка превођења регуларног израза. Молим пријавите " "ово.\n" #. TRANSLATORS: --help output, recinf synopsis. #. no-wrap #: utils/recinf.c:77 #, c-format msgid "Usage: recinf [OPTION]... [FILE]...\n" msgstr "Употреба: recinf [ОПЦИЈÐ]... [ДÐТОТЕКÐ]...\n" #. TRANSLATORS: --help output, recinf short description. #. no-wrap #: utils/recinf.c:82 msgid "Print information about the types of records stored in the input.\n" msgstr "ИÑпиÑшите податке о врÑтама запиÑа уÑкладиштених у улазу.\n" #. TRANSLATORS: --help output, recinf arguments. #. no-wrap #: utils/recinf.c:89 msgid "" " -t, --type=RECORD_TYPE print information on the records having " "the\n" " specified type.\n" " -d, --descriptor include the full record descriptors.\n" " -n, --names-only output just the names of the record files\n" " found in the input.\n" msgstr "" " -t, --type=ВРСТÐ_ЗÐПИСРиÑпиÑује податке о запиÑима који имају\n" " наведене врÑте.\n" " -d, --descriptor укључује пуне опиÑнике запиÑа.\n" " -n, --names-only резултира Ñамо називима датотека запиÑа\n" " пронађених у уноÑу.\n" #. TRANSLATORS: --help output, recinf special options. #. no-wrap #: utils/recinf.c:102 msgid "" "Special options:\n" " -S, --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "ПоÑебне опције:\n" " -S, --print-sexps иÑпиÑује податке у ÑÐµÑ…Ð¿Ñ ÑƒÐ¼ÐµÑто у рек " "формату.\n" #: utils/recinf.c:234 #, c-format msgid "error: cannot read file %s\n" msgstr "грешка: не могу да читам датотеку „%s“\n" #. TRANSLATORS: --help output, recins synopsis. #. no-wrap #: utils/recins.c:100 #, c-format msgid "" "Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" msgstr "" "Употреба: recins [ОПЦИЈÐ]... [-t ВРСТÐ] [-n БРОЈ | -e ИЗРÐЗ_ЗÐПИСР| -q ÐИЗ " "| -m БРОЈ] [(-f ÐÐЗИВ -v ÐИСКÐ) | -r ПОДÐЦИЗÐПИСÐ]... [ДÐТОТЕКÐ]\n" #. TRANSLATORS: --help output, recins short description. #. no-wrap #: utils/recins.c:105 msgid "Insert new records in a rec database.\n" msgstr "Уметните нове запиÑе у базу података.\n" #. TRANSLATORS: --help output, recins arguments. #. no-wrap #: utils/recins.c:111 msgid "" " -f, --field=STR field name; should be followed by a -" "v.\n" " -v, --value=STR field value; should be preceded by an -" "f.\n" " -r, --record=STR record that will be inserted in the " "file.\n" " --force insert the record even if it is " "violating\n" " record restrictions.\n" " --no-external don't use external descriptors.\n" " --no-auto don't insert auto generated fields.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -f, --field=ÐИЗ назив поља; трба да га Ñледи -v.\n" " -v, --value=ÐИЗ вредноÑÑ‚ поља; трба да јој претходи -" "f.\n" " -r, --record=ÐИЗ Ð·Ð°Ð¿Ð¸Ñ ÐºÐ¾Ñ˜Ð¸ ће бити уметнут у " "датотеку.\n" " --force умеће Ð·Ð°Ð¿Ð¸Ñ Ñ‡Ð°Ðº и ако нарушава\n" " ограничења запиÑа.\n" " --no-external не кориÑти Ñпољне опиÑнике.\n" " --no-auto не умеће ÑамоÑтворена поља.\n" " --verbose даје опширан извештај ако провера " "целовитоÑти\n" " не уÑпе.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recins.c:125 msgid "" " -s, --password=STR encrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=ÐИЗ шифрује поверљива поља датом " "лозинком.\n" #: utils/recins.c:179 msgid "a -f should be followed by a -v\n" msgstr "након „-f“ треба да Ñледи „-v“\n" #: utils/recins.c:198 msgid "a -v should be preceded by a -f\n" msgstr "иÑпред „-v“ треба да претходи „-f“\n" #: utils/recins.c:214 utils/recsel.c:204 msgid "more than one password was specified\n" msgstr "наведено је неколико лозинки\n" #: utils/recins.c:224 msgid "error while parsing the record provided by -r\n" msgstr "грешка за време обраде запиÑа доÑтављеног „-r“-ом\n" #: utils/recins.c:256 #, c-format msgid "please provide a value for the field %s\n" msgstr "молим обезбедите вредноÑÑ‚ за поље %s\n" #. TRANSLATORS: --help output, recsel synopsis. #. no-wrap #: utils/recsel.c:107 #, c-format msgid "" "Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " "| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" msgstr "" "Употреба: recsel [ОПЦИЈÐ]... [-t ВРСТÐ] [-j ПОЉЕ] [-n ИÐДЕКСИ | -e " "ИЗРÐЗ_ЗÐПИСР| -q ÐИСКР| -m БРОЈ] [-c | (-p|-P) ИЗРÐЗ_ПОЉÐ] [ДÐТОТЕКÐ]...\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:112 msgid "Select and print rec data.\n" msgstr "Изаберите и иÑпиÑшите податке запиÑа.\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:118 msgid "" " -d, --include-descriptors print record descriptors along with " "the matched\n" " records.\n" " -C, --collapse do not section the result in records " "with newlines.\n" " -S, --sort=FIELD,... sort the output by the specified " "fields.\n" " -G, --group-by=FIELD,... group records by the specified " "fields.\n" " -U, --uniq remove duplicated fields in the output " "records.\n" msgstr "" " -d, --include-descriptors иÑпиÑује опиÑнике запиÑа поред " "поклопљених\n" " запиÑа.\n" " -C, --collapse не дели резултат у запиÑима новим " "редовима.\n" " -S, --sort=ПОЉЕ,... ређа излазе према наведеном пољу.\n" " -G, --group-by=ПОЉЕ,... групише запиÑе према наведеним " "пољима.\n" " -U, --uniq уклања удвоÑтручена поља у излазним " "запиÑима.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recsel.c:130 msgid "" " -s, --password=STR decrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=ÐИЗ дешифрује поверљива поља датом " "лозинком.\n" #: utils/recsel.c:139 msgid "" " -j, --join=FIELD perform an inner join using the " "specified field.\n" msgstr "" " -j, --join=ПОЉЕ обавља унутрашње придруживање " "кориÑтећи наведено поље.\n" #. TRANSLATORS: --help output, recsel output options. #. no-wrap #: utils/recsel.c:146 msgid "" "Output options:\n" " -p, --print=FIELDS comma-separated list of fields to " "print for each\n" " matching record.\n" " -P, --print-values=FIELDS as -p, but print only the values of " "the selected\n" " fields.\n" " -R, --print-row=FIELDS as -P, but separate the values with " "spaces instead\n" " of newlines.\n" " -c, --count print a count of the matching records " "instead of\n" " the records themselves.\n" msgstr "" "Опције излаза:\n" " -p, --print=ПОЉРзарезом раздвојен ÑпиÑак поља за " "иÑпиÑивање за\n" " Ñваки поклопљени запиÑ.\n" " -P, --print-values=ПОЉРкао -p, али иÑпиÑује Ñамо вредноÑÑ‚ " "изабраних\n" " поља.\n" " -R, --print-row=ПОЉРкао -P, али раздваја вредноÑти " "проÑторима умеÑто\n" " новим редовима.\n" " -c, --count иÑпиÑује број поклопљених запиÑа " "умеÑто\n" " Ñамих запиÑа.\n" #. TRANSLATORS: --help output, recsel special options. #. no-wrap #: utils/recsel.c:160 msgid "" "Special options:\n" " --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "ПоÑебне опције:\n" " --print-sexps иÑпиÑује податке у ÑÐµÑ…Ð¿Ñ ÑƒÐ¼ÐµÑто у рек " "формату.\n" #: utils/recsel.c:212 msgid "only one field list can be specified as a sorting criteria.\n" msgstr "Ñамо један ÑпиÑак поља може бити наведен као мерило ређања.\n" #: utils/recsel.c:217 msgid "invalid field names in -S.\n" msgstr "неиÑправни називи поља у „-S“.\n" #: utils/recsel.c:226 msgid "only one field can be specified as join criteria.\n" msgstr "Ñамо једно поље може бити наведено као мерило Ñпајања.\n" #: utils/recsel.c:229 msgid "please specify a correct field name to -j|--join.\n" msgstr "молим наведите иÑправан назив поља за „-j|--join“.\n" #: utils/recsel.c:236 msgid "only one field list can be specified as a grouping criteria.\n" msgstr "Ñамо један ÑпиÑак поља може бити наведен као мерило групиÑања.\n" #: utils/recsel.c:241 msgid "invalid field names in -G.\n" msgstr "неиÑправни називи поља у „-G“.\n" #: utils/recsel.c:255 msgid "cannot specify -[pPR] and also -c.\n" msgstr "не можете да наведете и „-[pPR]“ и „-c“.\n" #: utils/recsel.c:266 #, c-format msgid "invalid list of fields in -%c\n" msgstr "неиÑправан ÑпиÑак поља у „-%c“\n" #: utils/recsel.c:272 msgid "internal error creating the field expression.\n" msgstr "унутрашња грешка Ñтварања израза поља.\n" #: utils/recsel.c:284 #, c-format msgid "invalid aggregate function '%s'\n" msgstr "неиÑправна функција Ñпајања „%s“\n" #: utils/recsel.c:296 msgid "cannot specify -c and also -p.\n" msgstr "не можете да наведете и „-c“ и „-p“.\n" #: utils/recsel.c:309 msgid "joins can only be used when a named record set is selected.\n" msgstr "" "Ñпајања могу бити коришћена Ñамо када је изабран Ñкуп именованог запиÑа.\n" #: utils/recsel.c:363 msgid "several record types found. Please use -t to specify one.\n" msgstr "" "пронашао Ñам неколико врÑта запиÑа. Молим кориÑтите „-t“ да наведете " "једну.\n" #. TRANSLATORS: --help output, recset synopsis. #. no-wrap #: utils/recset.c:99 #, c-format msgid "Usage: recset [OPTION]... [FILE]...\n" msgstr "Употреба: recset [ОПЦИЈÐ]... [ДÐТОТЕКÐ]...\n" #. TRANSLATORS: --help output, recset short description. #. no-wrap #: utils/recset.c:104 msgid "Alter or delete fields in records.\n" msgstr "Измените или обришите поља у запиÑу.\n" #. TRANSLATORS: --help output, recset options. #. no-wrap #: utils/recset.c:110 msgid "" " --no-external don't use external descriptors.\n" " --force alter the records even if violating " "record\n" " restrictions.\n" msgstr "" " --no-external не кориÑти Ñпољне опиÑнике.\n" " --force мења запиÑе чак и ако нарушава\n" " ограничења запиÑа.\n" #. TRANSLATORS: --help output, recset field selection options. #. no-wrap #: utils/recset.c:123 msgid "" "Field selection options:\n" " -f, --fields=FIELDS comma-separated list of field names " "with optional\n" " subscripts.\n" msgstr "" "Опције избора поља:\n" " -f, --fields=ПОЉРзарезом раздвојен ÑпиÑак назива поља\n" " Ñа опционалним подÑкриптама.\n" #. TRANSLATORS: --help output, recset actions. #. no-wrap #: utils/recset.c:131 msgid "" "Actions:\n" " -s, --set=VALUE change the value of the selected " "fields.\n" " -a, --add=VALUE add the selected fields with the given " "value.\n" " -S, --set-add=VALUE change the value of the selected " "fields. If they don't\n" " exist then add a new field with that " "value.\n" " -r, --rename=NAME rename the selected fields to a given " "name. If an entire\n" " record set is selected then the " "field is renamed in the\n" " record descriptor as well.\n" " -d, --delete delete the selected fields.\n" " -c, --comment comment out the selected fields.\n" msgstr "" "Радње:\n" " -s, --set=ВРЕДÐОСТ мења вредноÑÑ‚ изабраних поља.\n" " -a, --add=ВРЕДÐОСТ додаје изабрана поља Ñа датом " "вредношћу.\n" " -S, --set-add=ВРЕДÐОСТ мења вредноÑÑ‚ изабраних поља. Ðко не " "поÑтоје\n" " тада додаје ново поље Ñа том " "вредношћу.\n" " -r, --rename=ÐÐЗИВ преименује изабрана поља на дати " "назив. Ðко је изабран\n" " читав Ñкуп запиÑа тада је поље такође " "применовано\n" " и у опиÑнику.\n" " -d, --delete брише изабрана поља.\n" " -c, --comment Ñтавља у напомену изабрана поља.\n" #: utils/recset.c:154 msgid "please specify some field with -f.\n" msgstr "молим наведите неко поље Ñа „-f“.\n" #: utils/recset.c:159 msgid "please specify just one action.\n" msgstr "молим наведите барем једну радњу.\n" #: utils/recset.c:193 msgid "invalid field expression in -f.\n" msgstr "неиÑправан израз поља у „-f“.\n" #: utils/recset.c:199 msgid "creating the field expression.\n" msgstr "Ñтварам израз поља.\n" #: utils/recset.c:214 msgid "" "the rename operation requires just one field with an optional subscript.\n" msgstr "" "радња преименовања захтева Ñамо једно поље Ñа опционалним подÑкриптом.\n" #: utils/recutl.c:123 #, c-format msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" msgstr "%s матична Ñтраница: <http://www.gnu.org/software/recutils/>\n" #: utils/recutl.c:126 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "Општа помоћ кориÑтећи ГÐУ Ñофтвер: <http://www.gnu.org/gethelp/>\n" #. TRANSLATORS: --help output, common arguments. #. no-wrap #: utils/recutl.c:135 msgid "" " --help print a help message and exit.\n" " --version show version and exit.\n" msgstr "" " --help иÑпиÑује помоћ и излази.\n" " --version приказује издање и излази.\n" #. TRANSLATORS: --help output, record selection arguments #. no-wrap #: utils/recutl.c:146 msgid "" "Record selection options:\n" " -i, --case-insensitive make strings case-insensitive in " "selection\n" " expressions.\n" " -t, --type=TYPE operate on records of the specified " "type only.\n" " -e, --expression=RECORD_EXPR selection expression.\n" " -q, --quick=STR select records with fields containing " "a string.\n" " -n, --number=NUM,... select specific records by position, " "with ranges.\n" " -m, --random=NUM select a given number of random " "records.\n" msgstr "" "Опције избора запиÑа:\n" " -i, --case-insensitive чини ниÑке неоÑетљиве на величину " "Ñлова\n" " у изразима избора.\n" " -t, --type=ВРСТРради Ñамо над запиÑима наведене " "врÑте.\n" " -e, --expression=ИЗРÐЗ_ЗÐПИСРизраз избора.\n" " -q, --quick=ÐИЗ бира запиÑе Ñа пољима која Ñадрже " "ниÑку.\n" " -n, --number=БРОЈ,... бира нарочите запиÑе према положају, " "Ñа опÑезима.\n" " -m, --random=БРОЈ бира дати број наÑумичних запиÑа.\n" #: utils/recutl.c:171 #, c-format msgid "" "Copyright (C) %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "ÐуторÑка права (C) %s Хозе Е. Маркези.\n" "Лиценца ОЈЛв3+: ГÐУ ОЈЛ издање 3 или новије <http://gnu.org/licenses/gpl." "html>.\n" "Ово је Ñлободан Ñофтвер: Ñлободни Ñте да га мењате и раÑподељујете.\n" "Ðе поÑтоји ÐИКÐКВРГÐРÐÐЦИЈÐ, у оквирима дозвољеним законом.\n" #: utils/recutl.c:177 msgid "" "\n" "Written by Jose E. Marchesi." msgstr "" "\n" "ÐапиÑао Хозе Е. Маркези." #: utils/recutl.c:189 utils/recutl.c:209 msgid ": error: " msgstr ": грешка: " #: utils/recutl.c:221 msgid ": warning: " msgstr ": упозорење: " #: utils/recutl.c:246 #, c-format msgid "duplicated record set '%s' from %s.\n" msgstr "удвоÑтручени Ñкуп запиÑа „%s“ из %s.\n" #: utils/recutl.c:401 msgid "cannot create a unique name.\n" msgstr "не могу да Ñтворим јединÑтвени назив.\n" #: utils/recutl.c:421 #, c-format msgid "renaming file %s to %s\n" msgstr "преименујем датотеку „%s“ у „%s“\n" #: utils/recutl.c:463 msgid "operation aborted due to integrity failures.\n" msgstr "радња је прекинута уÑлед неуÑпеха целовитоÑти.\n" #: utils/recutl.c:464 msgid "use --verbose to get a detailed report.\n" msgstr "кориÑтите „--verbose“ да добијете опширан извештај.\n" #: utils/recutl.c:471 msgid "use --force to skip the integrity check.\n" msgstr "кориÑтите „--force“ да преÑкочите проверу целовитоÑти.\n" #: utils/recutl.c:529 msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" msgstr "" "унутрашња грешка: „recutl_index_list_parse“: грешка превођења регуларног " "израза.\n" #: utils/recutl.c:596 msgid "Password: " msgstr "Лозинка: " #: utils/recutl.c:602 msgid "Password again: " msgstr "Поновите лозинку: " #: utils/recutl.c:607 msgid "the provided passwords don't match.\n" msgstr "дате лозинке Ñе не подударају.\n" #: utils/recutl.h:84 utils/recutl.h:131 utils/recutl.h:133 msgid "cannot specify -e and also -n\n" msgstr "не можете да наведете и „-e“ и „-n“\n" #: utils/recutl.h:86 msgid "cannot specify -e and also -q\n" msgstr "не можете да наведете и „-e“ и „-q“\n" #: utils/recutl.h:94 msgid "invalid selection expression\n" msgstr "неиÑправан израз избора\n" #: utils/recutl.h:100 msgid "cannot specify -n and also -e\n" msgstr "не можете да наведете и „-n“ и „-e“\n" #: utils/recutl.h:102 msgid "cannot specify -n and also -q\n" msgstr "не можете да наведете и „-n“ и „-q“\n" #: utils/recutl.h:106 msgid "invalid list of indexes in -n\n" msgstr "неиÑправан ÑпиÑак indeksa у „-n“\n" #: utils/recutl.h:111 msgid "cannot specify -m and also -e\n" msgstr "не можете да наведете и „-m“ и „-e“\n" #: utils/recutl.h:113 msgid "cannot specify -m and also -q\n" msgstr "не можете да наведете и „-m“ и „-q“\n" #: utils/recutl.h:115 msgid "cannot specify -m and also -n\n" msgstr "не можете да наведете и „-m“ и „-n“\n" #~ msgid "_open_osfhandle failed" #~ msgstr "„_open_osfhandle“ није уÑпело" #~ msgid "cannot restore fd %d: dup2 failed" #~ msgstr "не могу да повратим фд %d: „dup2“ није уÑпело" #~ msgid "" #~ "\n" #~ "Report bugs to: %s\n" #~ msgstr "" #~ "\n" #~ "Грешке пријавите на: %s\n" #~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n" #~ msgstr "%s матична Ñтраница: <https://www.gnu.org/software/%s/>\n" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: опција „--%s“ не дозвољава аргумент\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: непозната опција „--%s“\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: опција „-W %s“ не дозвољава аргумент\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: опција „-W %s“ захтева аргумент\n" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/sv.po�������������������������������������������������������������������������������0000644�0000000�0000000�00000172152�14226577415�011537� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Swedish translation of the GNU recuilts package. # Copyright © 2011, 2012, 2013, 2014, 2019, 2020 Free Software Foundation, Inc. # This file is distributed under the same license as the recutils package. # Göran Uddeborg <goeran@uddeborg.se>, 2011, 2012, 2013, 2014, 2019, 2020. # # $Revision: 1.22 $ msgid "" msgstr "" "Project-Id-Version: GNU recutils 1.8\n" "Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" "POT-Creation-Date: 2022-04-16 19:38+0200\n" "PO-Revision-Date: 2020-08-01 12:46+0200\n" "Last-Translator: Göran Uddeborg <goeran@uddeborg.se>\n" "Language-Team: Swedish <tp-sv@listor.tp-sv.se>\n" "Language: sv\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" #: lib/closeout.c:122 msgid "write error" msgstr "skrivfel" #: lib/copy-acl.c:54 lib/copy-file.c:215 #, c-format msgid "preserving permissions for %s" msgstr "bevarar rättigheter för %s" #: lib/copy-file.c:192 #, fuzzy, c-format msgid "error while opening %s for reading" msgstr "kan inte öppna filen %s för läsning.\n" #: lib/copy-file.c:196 #, fuzzy, c-format msgid "cannot open backup file %s for writing" msgstr "kan inte öppna filen %s för läsning.\n" #: lib/copy-file.c:200 #, fuzzy, c-format msgid "error reading %s" msgstr "fel: det gÃ¥r inte läsa filen %s\n" #: lib/copy-file.c:204 #, c-format msgid "error writing %s" msgstr "" #: lib/copy-file.c:208 #, fuzzy, c-format msgid "error after reading %s" msgstr "fel: det gÃ¥r inte läsa filen %s\n" #: lib/error.c:195 msgid "Unknown system error" msgstr "Okänt systemfel" #: lib/execute.c:348 lib/wait-process.c:291 lib/wait-process.c:365 #, c-format msgid "%s subprocess failed" msgstr "%s underprocess misslyckades" #: lib/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: flaggan â€%s%s†är tvetydig\n" #: lib/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: flaggan â€%s%s†är tvetydig; möjligheter:" #: lib/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: okänd flagga â€%s%sâ€\n" #: lib/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: flaggan â€%s%s†tar inget argument\n" #: lib/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: flaggan â€%s%s†kräver ett argument\n" #: lib/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: ogiltig flagga — â€%câ€\n" #: lib/getopt.c:636 lib/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: flaggan kräver ett argument — â€%câ€\n" #: lib/obstack.c:337 lib/obstack.c:339 lib/xalloc-die.c:34 msgid "memory exhausted" msgstr "minnet slut" #: lib/openat-die.c:38 #, c-format msgid "unable to record current working directory" msgstr "" #: lib/openat-die.c:57 #, c-format msgid "failed to return to initial working directory" msgstr "" #: parse-datetime.y:440 parse-datetime.y:540 #, c-format msgid "parsed %s part: " msgstr "tolkade %s-delen: " #: parse-datetime.y:455 #, c-format msgid "year: %04<PRIdMAX>" msgstr "Ã¥r: %04<PRIdMAX>" #: parse-datetime.y:483 #, c-format msgid "%s (day ordinal=%<PRIdMAX> number=%d)" msgstr "%s (Ã¥rsdag=%<PRIdMAX> nummer=%d)" #: parse-datetime.y:514 #, c-format msgid "number of seconds: %<PRIdMAX>" msgstr "antal sekunder: %<PRIdMAX>" #: parse-datetime.y:547 msgid "today/this/now\n" msgstr "idag/dennes/nu\n" #: parse-datetime.y:612 msgid "number of seconds" msgstr "antal sekunder" #: parse-datetime.y:625 msgid "datetime" msgstr "datumtid" #: parse-datetime.y:630 msgid "time" msgstr "tid" #: parse-datetime.y:635 msgid "local_zone" msgstr "lokal zon" #: parse-datetime.y:640 msgid "zone" msgstr "zon" #: parse-datetime.y:645 msgid "date" msgstr "datum" #: parse-datetime.y:650 msgid "day" msgstr "dag" #: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 msgid "relative" msgstr "relativ" #: parse-datetime.y:658 msgid "number" msgstr "nummer" #: parse-datetime.y:662 msgid "hybrid" msgstr "hybrid" #: parse-datetime.y:820 #, c-format msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" msgstr "varning: värdet %<PRIdMAX> har %<PRIdMAX> siffor. Antar Ã…Ã…Ã…Ã…/MM/DD\n" #: parse-datetime.y:832 #, c-format msgid "" "warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" msgstr "" "varning: värdet %<PRIdMAX> har mindre än 4 siffror. Antar MM/DD/Ã…Ã…[Ã…Ã…]\n" #: parse-datetime.y:1279 #, c-format msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" msgstr "varning: justerar Ã¥rsvärdet %<PRIdMAX> till %<PRIdMAX>\n" #: parse-datetime.y:1289 #, c-format msgid "error: out-of-range year %<PRIdMAX>\n" msgstr "fel: Ã¥rtal utanför intervallet %<PRIdMAX>\n" #: parse-datetime.y:1520 #, c-format msgid "error: unknown word '%s'\n" msgstr "fel: okänt ord â€%sâ€\n" #: parse-datetime.y:1669 msgid "error: invalid date/time value:\n" msgstr "fel: ogiltigt datum-/tidvärde:\n" #: parse-datetime.y:1670 #, c-format msgid " user provided time: '%s'\n" msgstr " användargiven tid: â€%sâ€\n" #: parse-datetime.y:1672 #, c-format msgid " normalized time: '%s'\n" msgstr " normaliserad tid: â€%sâ€\n" #: parse-datetime.y:1695 msgid " possible reasons:\n" msgstr " möjliga orsaker:\n" #: parse-datetime.y:1697 msgid " non-existing due to daylight-saving time;\n" msgstr " finns inte pÃ¥ grund av sommartid;\n" #: parse-datetime.y:1699 msgid " invalid day/month combination;\n" msgstr " felaktig dag/mÃ¥nad-kombination;\n" #: parse-datetime.y:1700 msgid " numeric values overflow;\n" msgstr " spill i numeriska värden;\n" #: parse-datetime.y:1701 msgid "incorrect timezone" msgstr "felaktig tidszon" #: parse-datetime.y:1702 msgid "missing timezone" msgstr "saknad tidszon" #: parse-datetime.y:1810 msgid "error: initial year out of range\n" msgstr "fel: ursprungligt Ã¥r utanför giltigt intervall\n" #: parse-datetime.y:1905 msgid "error: parsing failed\n" msgstr "fel: tolkningen misslyckades\n" #: parse-datetime.y:1906 #, c-format msgid "error: parsing failed, stopped at '%s'\n" msgstr "fel: tolkningen misslyckades, avslutades vid â€%sâ€\n" #: parse-datetime.y:1916 msgid "input timezone: " msgstr "inmatad tidszon: " #: parse-datetime.y:1919 #, c-format msgid "'@timespec' - always UTC" msgstr "â€@timespec†— alltid UTC" #: parse-datetime.y:1921 #, c-format msgid "parsed date/time string" msgstr "tolkad datum/tid-sträng" #: parse-datetime.y:1925 #, c-format msgid "TZ=\"%s\" in date string" msgstr "TZ=â€%s†i datumsträng" #: parse-datetime.y:1929 #, c-format msgid "TZ=\"UTC0\" environment value or -u" msgstr "TZ=â€UTC0†miljövärde eller -u" #: parse-datetime.y:1932 #, c-format msgid "TZ=\"%s\" environment value" msgstr "TZ=â€%s†miljövärde" #: parse-datetime.y:1935 #, c-format msgid "system default" msgstr "systemstandard" #: parse-datetime.y:1977 msgid "error: year, month, or day overflow\n" msgstr "fel: Ã¥r, mÃ¥nad eller dag spiller över\n" #: parse-datetime.y:1988 #, c-format msgid "error: invalid hour %<PRIdMAX>%s\n" msgstr "fel: felaktig timma %<PRIdMAX>%s\n" #: parse-datetime.y:1996 #, c-format msgid "using specified time as starting value: '%s'\n" msgstr "använder angiven tid som startvärde: â€%sâ€\n" #: parse-datetime.y:1997 #, c-format msgid "using current time as starting value: '%s'\n" msgstr "använder aktuell tid som startvärde: â€%sâ€\n" #: parse-datetime.y:2051 #, c-format msgid "error: tzalloc (\"%s\") failed\n" msgstr "fel: tzalloc (\"%s\") misslyckades\n" #: parse-datetime.y:2095 #, c-format msgid "" "error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " "date: '%s'\n" msgstr "" "fel: dag â€%s†(Ã¥rsdag=%<PRIdMAX> nummer=%d) resulterade i ett felaktigt " "datum: â€%sâ€\n" #: parse-datetime.y:2106 #, c-format msgid "new start date: '%s' is '%s'\n" msgstr "nytt startdatum: â€%s†är â€%sâ€\n" #: parse-datetime.y:2115 #, c-format msgid "using current date as starting value: '%s'\n" msgstr "använder aktuellt datum som startvärde: â€%sâ€\n" #: parse-datetime.y:2119 #, c-format msgid "warning: day (%s) ignored when explicit dates are given\n" msgstr "varning: dag (%s) ignoreras när explicita datum anges\n" #: parse-datetime.y:2123 #, c-format msgid "starting date/time: '%s'\n" msgstr "startdatum/-tid: â€%sâ€\n" #: parse-datetime.y:2133 msgid "" "warning: when adding relative months/years, it is recommended to specify the " "15th of the months\n" msgstr "" "varning: när relativa mÃ¥nader/Ã¥r läggs till rekommenderas det att ange den " "15:e i mÃ¥naden\n" #: parse-datetime.y:2138 msgid "warning: when adding relative days, it is recommended to specify noon\n" msgstr "" "varning: när relativa dagar läggs till rekommenderas det att ange " "middagstid\n" #: parse-datetime.y:2148 #, c-format msgid "error: %s:%d\n" msgstr "fel: %s:%d\n" #: parse-datetime.y:2163 #, c-format msgid "error: adding relative date resulted in an invalid date: '%s'\n" msgstr "" "fel: att lägga till ett relativt datum resulterade i ett felaktigt datum: " "â€%sâ€\n" #: parse-datetime.y:2172 #, c-format msgid "" "after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " "days),\n" msgstr "" "efter datumjustering (%+<PRIdMAX> Ã¥r, %+<PRIdMAX> mÃ¥nader, %+<PRIdMAX> " "dagar),\n" #: parse-datetime.y:2176 #, c-format msgid " new date/time = '%s'\n" msgstr " nytt datum/tid = â€%sâ€\n" #: parse-datetime.y:2195 msgid "warning: daylight saving time changed after date adjustment\n" msgstr "varning: sommartid ändrades efter datumjusteringen\n" #: parse-datetime.y:2214 msgid "warning: month/year adjustment resulted in shifted dates:\n" msgstr "varning: mÃ¥nads-/Ã¥rsjusteringen resulterade i skiftade datum:\n" #: parse-datetime.y:2217 #, c-format msgid " adjusted Y M D: %s %02d %02d\n" msgstr " justerade Ã… M D: %s %02d %02d\n" #: parse-datetime.y:2219 #, c-format msgid " normalized Y M D: %s %02d %02d\n" msgstr " normaliserade Ã… M D: %s %02d %02d\n" #: parse-datetime.y:2248 #, c-format msgid "error: timezone %d caused time_t overflow\n" msgstr "fel: tidszon %d orsakade spill i time_t\n" #: parse-datetime.y:2258 #, c-format msgid "'%s' = %<PRIdMAX> epoch-seconds\n" msgstr "â€%s†= %<PRIdMAX> epoksekunder\n" #: parse-datetime.y:2286 msgid "error: adding relative time caused an overflow\n" msgstr "fel: att lägga till relativ tid orsakade spill\n" #: parse-datetime.y:2297 #, c-format msgid "" "after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " "seconds, %+d ns),\n" msgstr "" "efter tidsjustering (%+<PRIdMAX> timmar, %+<PRIdMAX> minuter, %+<PRIdMAX> " "sekunder, %+d ns),\n" #: parse-datetime.y:2303 #, c-format msgid " new time = %<PRIdMAX> epoch-seconds\n" msgstr " ny tid = %<PRIdMAX> epoksekunder\n" #: parse-datetime.y:2319 msgid "warning: daylight saving time changed after time adjustment\n" msgstr "varning: sommartid ändrades efter tidsjusteringen\n" #: parse-datetime.y:2329 msgid "timezone: system default\n" msgstr "tidszon: systemstandard\n" #: parse-datetime.y:2331 msgid "timezone: Universal Time\n" msgstr "tidszon: universell tid\n" #: parse-datetime.y:2333 #, c-format msgid "timezone: TZ=\"%s\" environment value\n" msgstr "Tidszon: TZ=\"%s\" miljövärde\n" #: parse-datetime.y:2337 #, c-format msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" msgstr "slutligt: %<PRIdMAX>.%09d (epoksekunder)\n" #: parse-datetime.y:2343 #, c-format msgid "final: %s (UTC)\n" msgstr "slutligt: %s (UTC)\n" #: parse-datetime.y:2358 #, c-format msgid "final: %s (UTC%s)\n" msgstr "slutligt: %s (UTC%s)\n" #: parse-datetime.y:2362 #, c-format msgid "final: %s (unknown time zone offset)\n" msgstr "slutligt: %s (okänd tidszonsavstÃ¥nd)\n" #. TRANSLATORS: #. Get translations for open and closing quotation marks. #. The message catalog should translate "`" to a left #. quotation mark suitable for the locale, and similarly for #. "'". For example, a French Unicode local should translate #. these to U+00AB (LEFT-POINTING DOUBLE ANGLE #. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE #. QUOTATION MARK), respectively. #. #. If the catalog has no translation, we will try to #. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and #. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the #. current locale is not Unicode, locale_quoting_style #. will quote 'like this', and clocale_quoting_style will #. quote "like this". You should always include translations #. for "`" and "'" even if U+2018 and U+2019 are appropriate #. for your locale. #. #. If you don't know what to put here, please see #. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> #. and use glyphs suitable for your language. #: lib/quotearg.c:355 msgid "`" msgstr "â€" #: lib/quotearg.c:356 msgid "'" msgstr "â€" #: lib/regcomp.c:122 msgid "Success" msgstr "Gick bra" #: lib/regcomp.c:125 msgid "No match" msgstr "Ingen matchning" #: lib/regcomp.c:128 msgid "Invalid regular expression" msgstr "Ogiltigt reguljärt uttryck" #: lib/regcomp.c:131 msgid "Invalid collation character" msgstr "Ogiltigt kollationeringstecken" #: lib/regcomp.c:134 msgid "Invalid character class name" msgstr "Ogiltigt teckenklassnamn" #: lib/regcomp.c:137 msgid "Trailing backslash" msgstr "Avslutande omvänt snedstreck" #: lib/regcomp.c:140 msgid "Invalid back reference" msgstr "Ogiltig bakÃ¥treferens" #: lib/regcomp.c:143 msgid "Unmatched [, [^, [:, [., or [=" msgstr "Ensam [, [^, [:, [. eller [=" #: lib/regcomp.c:146 msgid "Unmatched ( or \\(" msgstr "Ensam ( eller \\(" #: lib/regcomp.c:149 msgid "Unmatched \\{" msgstr "Ensam \\{" #: lib/regcomp.c:152 msgid "Invalid content of \\{\\}" msgstr "Ogiltigt innehÃ¥ll i \\{\\}" #: lib/regcomp.c:155 msgid "Invalid range end" msgstr "Ogiltigt intervallslut" #: lib/regcomp.c:158 msgid "Memory exhausted" msgstr "Minnet är slut" #: lib/regcomp.c:161 msgid "Invalid preceding regular expression" msgstr "Felaktigt tidigare reguljärt uttryck" #: lib/regcomp.c:164 msgid "Premature end of regular expression" msgstr "För tidigt slut pÃ¥ reguljärt uttryck" #: lib/regcomp.c:167 msgid "Regular expression too big" msgstr "Reguljärt uttryck är för stort" #: lib/regcomp.c:170 msgid "Unmatched ) or \\)" msgstr "Ensam ) eller \\)" #: lib/regcomp.c:650 msgid "No previous regular expression" msgstr "Inget tidigare reguljärt uttryck" #: lib/set-acl.c:46 #, c-format msgid "setting permissions for %s" msgstr "sätter rättigheter för %s" #: lib/version-etc.c:73 #, c-format msgid "Packaged by %s (%s)\n" msgstr "Paketerat av %s (%s)\n" #: lib/version-etc.c:76 #, c-format msgid "Packaged by %s\n" msgstr "Paketerat av %s\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: lib/version-etc.c:83 msgid "(C)" msgstr "©" #. TRANSLATORS: The %s placeholder is the web address of the GPL license. #: lib/version-etc.c:88 #, fuzzy, c-format msgid "" "License GPLv3+: GNU GPL version 3 or later <%s>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "\n" "Licens GPLv3+: GNU GPL version 3 eller senare <https://gnu.org/licenses/gpl." "html>.\n" "Detta är fri programvara: du har rätt att ändra och vidaredistribuera den.\n" "Det finns INGEN GARANTI, sÃ¥ lÃ¥ngt som lagen tillÃ¥ter.\n" "\n" #. TRANSLATORS: %s denotes an author name. #: lib/version-etc.c:105 #, c-format msgid "Written by %s.\n" msgstr "Skrivet av %s.\n" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:109 #, c-format msgid "Written by %s and %s.\n" msgstr "Skrivet av %s och %s.\n" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:113 #, c-format msgid "Written by %s, %s, and %s.\n" msgstr "Skrivet av %s, %s och %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:120 #, c-format msgid "" "Written by %s, %s, %s,\n" "and %s.\n" msgstr "" "Skrivet av %s, %s, %s\n" "och %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:127 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, and %s.\n" msgstr "" "Skrivet av %s, %s, %s,\n" "%s och %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:134 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, and %s.\n" msgstr "" "Skrivet av %s, %s, %s,\n" "%s, %s och %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:142 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, and %s.\n" msgstr "" "Skrivet av %s, %s, %s,\n" "%s, %s, %s och %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:150 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "and %s.\n" msgstr "" "Skrivet av %s, %s, %s,\n" "%s, %s, %s, %s\n" "och %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:159 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, and %s.\n" msgstr "" "Skrivet av %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s och %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:170 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s, and others.\n" msgstr "" "Skrivet av %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s med flera.\n" #. TRANSLATORS: The placeholder indicates the bug-reporting address #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for translation #. bugs (typically your translation team's web or email address). #. TRANSLATORS: --help output 5+ (reports) #. TRANSLATORS: the placeholder indicates the bug-reporting address #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap #: lib/version-etc.c:249 utils/recutl.c:114 #, c-format msgid "Report bugs to: %s\n" msgstr "" "Rapportera fel till: %s\n" "Rapportera kommentarer pÃ¥ översättningen till <tp-sv@listor.tp-sv.se>.\n" #: lib/version-etc.c:251 utils/recutl.c:117 #, c-format msgid "Report %s bugs to: %s\n" msgstr "Rapportera %s-fel till: %s\n" #: lib/version-etc.c:255 lib/version-etc.c:257 utils/recutl.c:121 #, c-format msgid "%s home page: <%s>\n" msgstr "%s webbsida: <%s>\n" #: lib/version-etc.c:260 #, fuzzy, c-format msgid "General help using GNU software: <%s>\n" msgstr "" "Allmän hjälp med att använda GNU-program: <https://www.gnu.org/gethelp/>\n" #: lib/wait-process.c:232 lib/wait-process.c:264 lib/wait-process.c:326 #, c-format msgid "%s subprocess" msgstr "%s-underprocess" #: lib/wait-process.c:283 lib/wait-process.c:355 #, c-format msgid "%s subprocess got fatal signal %d" msgstr "%s-underprocess fick ödesdiger signal %d" #: src/rec-fex.c:726 #, c-format msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" msgstr "internt fel: REC_FEX_MAX_ELEMS överskreds. Rapportera gärna detta.\n" #: src/rec-int.c:132 src/rec-int.c:186 src/rec-int.c:243 src/rec-int.c:287 #: utils/recutl.c:199 msgid "out of memory\n" msgstr "slut pÃ¥ minne\n" #: src/rec-int.c:147 #, c-format msgid "%s:%s: error: mandatory field '%s' not found in record\n" msgstr "%s:%s: fel: obligatoriskt fält â€%s†hittades inte i posten\n" #: src/rec-int.c:210 #, c-format msgid "%s:%s: error: field '%s' not allowed in this record set\n" msgstr "%s:%s: fel: fältet â€%s†är inte tillÃ¥tet i postmängd\n" #: src/rec-int.c:257 #, c-format msgid "%s:%s: error: field '%s' should be unique in this record\n" msgstr "%s:%s: fel: fält â€%s†skall vara unikt i denna post\n" #: src/rec-int.c:301 #, c-format msgid "%s:%s: error: prohibited field '%s' found in record\n" msgstr "%s:%s: fel: förbjudet fält â€%s†finns i posten\n" #: src/rec-int.c:333 #, c-format msgid "%s:%s: error: %%constraint[%d] violated in record\n" msgstr "%s:%s: fel: %%constraint[%d] brutet i posten\n" #: src/rec-int.c:370 #, c-format msgid "%s:%s: error: confidential field is not encrypted\n" msgstr "%s:%s: fel: konfidentiellt fält är inte krypterat\n" #: src/rec-int.c:422 #, c-format msgid "%s:%s: error: key field '%s' not found in record\n" msgstr "%s:%s: fel: nyckelfältet â€%s†finns inte i posten\n" #: src/rec-int.c:431 #, c-format msgid "%s:%s: error: multiple key fields '%s' in record\n" msgstr "%s:%s: fel: flera nyckelfält â€%s†i posten\n" #: src/rec-int.c:474 #, c-format msgid "%s:%s: error: duplicated key value in field '%s' in record\n" msgstr "%s:%s: fel: duplicerat nyckelvärde i fält â€%s†i posten\n" #: src/rec-int.c:562 #, fuzzy, c-format msgid "%s:%s: error: duplicated value in singular field '%s' in record\n" msgstr "%s:%s: fel: duplicerat nyckelvärde i fält â€%s†i posten\n" #: src/rec-int.c:620 #, c-format msgid "%s:%s: error: missing %%rec field in record descriptor\n" msgstr "%s:%s: fel: saknat %%rec-fält i postidentifierare\n" #: src/rec-int.c:628 #, c-format msgid "%s:%s: error: too many %%rec fields in record descriptor\n" msgstr "%s:%s: fel: för mÃ¥nga %%rec-fält i postidentifierare\n" #: src/rec-int.c:638 #, c-format msgid "%s:%s: error: invalid record type %s\n" msgstr "%s:%s: fel: ogiltig posttyp %s\n" #: src/rec-int.c:649 #, c-format msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" msgstr "%s:%s: fel: endast ett %%key-fält är tillÃ¥tet i en postidentifierare\n" #: src/rec-int.c:659 #, c-format msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" msgstr "" "%s:%s: fel: endast ett %%size-fält är tillÃ¥tet i en postidentifierare\n" #: src/rec-int.c:669 #, c-format msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" msgstr "" "%s:%s: fel: endast ett %%sort-fält är tillÃ¥tet i en postidentifierare\n" #: src/rec-int.c:692 #, c-format msgid "" "%s:%s: error: expected a comma-separated list of fields before the type " "specification\n" msgstr "" "%s:%s: fel: en kommaseparerad lista med fält förväntades före " "typspecifikationen\n" #: src/rec-int.c:718 src/rec-int.c:771 #, c-format msgid "%s:%s: error: the referred type %s does not exist\n" msgstr "%s:%s: fel: den refererade typen %s finns inte\n" #: src/rec-int.c:730 #, c-format msgid "%s:%s: error: invalid type specification\n" msgstr "%s:%s: fel: ogiltig typspecifikation\n" #: src/rec-int.c:745 #, c-format msgid "%s:%s: error: expected a type name before the type specification\n" msgstr "%s:%s: fel: ett typnamn förväntades före typspecifikationen\n" #: src/rec-int.c:783 #, c-format msgid "%s:%s: error: invalid typedef specification\n" msgstr "%s:%s: fel: ogiltig typedef-specifikation\n" #: src/rec-int.c:805 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" msgstr "%s:%s: fel: värdet för %s[%zd] är inte ett giltigt urvalsuttryck\n" #: src/rec-int.c:836 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" msgstr "%s:%s: fel: värdet för %s[%zd] är inte en lista med fältnamn\n" #: src/rec-int.c:849 #, c-format msgid "" "%s:%s: error: value for %s should be a number optionally preceded by >, <, " ">= or <=.\n" msgstr "" "%s:%s: fel: värdet pÃ¥ %s skall vara ett tal eventuellt föregÃ¥tt av >, <, >= " "eller <=.\n" #: src/rec-int.c:865 #, c-format msgid "%s:%s: error: value for %s should be a list of field names.\n" msgstr "%s:%s: fel: värdet för %s skall vara en lista med fältnamn.\n" #: src/rec-int.c:893 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range, uuid " "or date\n" msgstr "" "%s:%s: fel: automatökat fält â€%s†skall vara av typen heltal, intervall, " "uuid eller datum\n" #: src/rec-int.c:895 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range or " "date\n" msgstr "" "%s:%s: fel: automatökat fält â€%s†skall vara av typen heltal, intervall " "eller datum\n" #: src/rec-int.c:978 #, c-format msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" msgstr "%s:%s: fel: kunde inte hämta fjärridentifieraren frÃ¥n url:en %s.\n" #: src/rec-int.c:997 #, c-format msgid "%s:%s: error: could not read external descriptor from file %s.\n" msgstr "%s:%s: vel: kan inte läsa extern identifieraren frÃ¥n filen %s.\n" #: src/rec-int.c:1012 #, c-format msgid "%s:%s: error: %s does not contain valid rec data.\n" msgstr "%s:%s: fel: %s innehÃ¥ller inte nÃ¥gon giltig rec-data.\n" #: src/rec-int.c:1026 #, c-format msgid "%s:%s: error: %s does not contain information for type %s.\n" msgstr "%s:%s: fel: %s innehÃ¥ller inte information för typen %s.\n" #: src/rec-int.c:1150 #, c-format msgid "%s: error: the number of records of type %s should be %zd.\n" msgstr "%s: fel: antalet poster av typ %s skall vara %zd.\n" #: src/rec-int.c:1160 #, c-format msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" msgstr "%s: fel: för mÃ¥nga poster av typ %s. Maximalt tillÃ¥tet är %zd.\n" #: src/rec-int.c:1167 #, c-format msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" msgstr "%s: fel: för fÃ¥ poster av typ %s. Minimalt tillÃ¥tet är %zd.\n" #: src/rec-types.c:304 msgid "invalid integer." msgstr "ogiltigt heltal." #: src/rec-types.c:332 msgid "invalid 'field' value." msgstr "ogiltigt â€fieldâ€-värde." #: src/rec-types.c:353 msgid "invalid 'uuid' value." msgstr "ogiltigt â€uuidâ€-värde." #: src/rec-types.c:369 msgid "invalid 'bool' value." msgstr "ogiltigt â€boolâ€-värde." #: src/rec-types.c:390 msgid "invalid 'range' value." msgstr "ogiltigt â€rangeâ€-värde." #: src/rec-types.c:399 #, c-format msgid "expected an integer between %d and %d." msgstr "ett heltal mellan %d och %d förväntades." #: src/rec-types.c:419 msgid "invalid 'real' value." msgstr "ogiltigt â€realâ€-värde." #: src/rec-types.c:436 #, c-format msgid "value too large. Expected a size <= %zu." msgstr "för stort värde. En storlek ≤ %zu förväntades." #: src/rec-types.c:456 msgid "invalid 'line' value." msgstr "ogiltigt â€lineâ€-värde." #: src/rec-types.c:473 msgid "value does not match the regexp." msgstr "värdet stämmer inte med reguljäruttryck." #: src/rec-types.c:492 msgid "invalid date." msgstr "ogiltigt datum." #: src/rec-types.c:506 msgid "invalid email." msgstr "ogiltig e-post." #: src/rec-types.c:547 msgid "invalid enum value." msgstr "ogiltigt enum-värde." #: src/rec-types.c:898 #, c-format msgid "" "internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " "in rec_type_new().\n" msgstr "" "internt fel: rec-types: fick REC_TYPE_NONE frÃ¥n rec_type_parse_type_kind() i " "rec_type_new().\n" #: src/rec-utils.c:86 #, c-format msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" msgstr "" "internt fel: rec_int_rec_extract_file: fel vid kompilering av " "reguljäruttryck.\n" #: src/rec-utils.c:116 src/rec-utils.c:147 #, c-format msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" msgstr "" "internt fel: rec_int_rec_extract_url: fel vid kompilering av " "reguljäruttryck.\n" #: src/rec-utils.c:290 #, c-format msgid "internal error: rec_match: error compiling regexp.\n" msgstr "internt fel: rec_match: fel vid kompilering av reguljäruttryck.\n" #. TRANSLATORS: --help output, csv2rec synopsis. #. no-wrap #: utils/csv2rec.c:98 #, c-format msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" msgstr "Användning: csv2rec [FLAGGOR] … [CSV_FIL]\n" #. TRANSLATORS: --help output, csv2rec short description. #. no-wrap #: utils/csv2rec.c:103 msgid "Convert csv data into rec data.\n" msgstr "Konvertera CSV-data till rec-data.\n" #. TRANSLATORS: --help output, csv2rec options. #. no-wrap #: utils/csv2rec.c:109 #, fuzzy msgid "" " -t, --type=TYPE type name for the converted records; " "if this\n" " parameter is omitted then no type is " "used.\n" " -s, --strict be strict parsing the csv file.\n" " -e, --omit-empty omit empty fields.\n" msgstr "" " -t, -type=TYP skriv namn för de konverterade " "posterna.\n" " Om denna parameter utelämnas " "används\n" " ingen typ.\n" " -s, -strict var strikt i tolkningen av csv-filen.\n" " -e, -omit-empty uteslut tomma fält.\n" #: utils/csv2rec.c:212 #, c-format msgid "invalid field name '%s' in header\n" msgstr "ogiltigt fältnamn â€%s†i huvudet\n" #: utils/csv2rec.c:221 #, fuzzy msgid "error while parsing CSV file: too many columns in row\n" msgstr "fel vid tolkning av CSV-fil: %s\n" #: utils/csv2rec.c:241 #, c-format msgid "" "%s: %lu: this line contains %lu fields, but %lu header fields were read\n" msgstr "%s: %lu: denna rad innehÃ¥ller %lu fält, men %lu huvudfält lästes\n" #: utils/csv2rec.c:331 utils/recdel.c:233 utils/recset.c:306 utils/recutl.c:317 #, c-format msgid "cannot read file %s\n" msgstr "kan inte läsa filen %s\n" #: utils/csv2rec.c:338 msgid "failed to initialize csv parser\n" msgstr "det gick inte att initiera csv-tolken\n" #: utils/csv2rec.c:355 #, c-format msgid "error while parsing CSV file: %s\n" msgstr "fel vid tolkning av CSV-fil: %s\n" #. TRANSLATORS: --help output, mdb2rec synopsis. #. no-wrap #: utils/mdb2rec.c:97 #, c-format msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" msgstr "Användning: mdb2rec [FLAGGOR] … MDB_FIL [TABELL]\n" #. TRANSLATORS: --help output, mdb2rec short description. #. no-wrap #: utils/mdb2rec.c:102 msgid "Convert an mdb file into a rec file.\n" msgstr "Konvertera en mdb-fil till en rec-fil.\n" #. TRANSLATORS: --help output, mdb2rec options. #. no-wrap #: utils/mdb2rec.c:108 msgid "" " -s, --system-tables include system tables.\n" " -e, --keep-empty-fields don't prune empty fields in the rec\n" " output.\n" " -l, --list-tables dump a list of the table names " "contained\n" " in the mdb file.\n" msgstr "" " -s, --system-tables inkludera systemtabeller.\n" " -e, --keep-empty-fields beskär aldrig tomma fält i rec-" "utdata.\n" " -l, --list-tables skriv ut en lista av tabellnamnen som\n" " Ã¥terfinns i mdb-filen.\n" #: utils/mdb2rec.c:230 utils/mdb2rec.c:288 #, c-format msgid "failed to normalise record type name %s\n" msgstr "misslyckades att normalisera posttypnamnet %s\n" #: utils/mdb2rec.c:236 utils/mdb2rec.c:245 #, c-format msgid "failed to normalise field name %s\n" msgstr "misslyckades att normalisera fältnamnet %s\n" #: utils/mdb2rec.c:307 #, c-format msgid "failed to normalise the field name %s\n" msgstr "misslyckades att normalisera fältnamnet %s\n" #: utils/mdb2rec.c:396 utils/recins.c:191 utils/recset.c:223 #, c-format msgid "invalid field name %s.\n" msgstr "ogiltigt fältnamn %s.\n" #: utils/mdb2rec.c:436 #, c-format msgid "could not open file %s\n" msgstr "det gick inte att öppna filen %s\n" #: utils/mdb2rec.c:441 msgid "file does not appear to be an Access database\n" msgstr "filen verkar inte vara en Access-databas\n" #. TRANSLATORS: --help output, rec2csv synopsis. #. no-wrap #: utils/rec2csv.c:70 #, c-format msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" msgstr "Användning: rec2csv [FLAGGOR] … [CSV_FIL]\n" #. TRANSLATORS: --help output, rec2csv short description. #. no-wrap #: utils/rec2csv.c:75 msgid "Convert rec data into csv data.\n" msgstr "Konvertera rec-data till csv-data.\n" #. TRANSLATORS: --help output, rec2csv options. #. no-wrap #: utils/rec2csv.c:81 msgid "" " -d, --delim=char sets the deliminator (default ',')\n" " -t, --type=TYPE record set to convert to csv; if this " "parameter\n" " is omitted then the default record " "set is used\n" " -S, --sort=FIELDS sort the output by the specified " "fields.\n" msgstr "" " -d, --delim=tecken sätter avgränsaren (standard â€,â€)\n" " -t, --type=TYP postuppsättning att konvertera till " "csv;\n" " om denna parameter utelämnas " "används\n" " standardpostuppsättningen\n" " -S, --sort=FÄLT sortera utdata efter de angivna " "fälten.\n" #: utils/rec2csv.c:121 msgid "only one list of fields can be specified as a sorting criteria.\n" msgstr "endast en lista av fält kan anges som ett sorteringskriterium.\n" #: utils/rec2csv.c:126 msgid "invalid field name list in -S.\n" msgstr "ogiltig fältnamnslista till -S.\n" #: utils/rec2csv.c:130 utils/recsel.c:221 utils/recsel.c:245 msgid "internal error creating fex.\n" msgstr "internt fel när fex skapades.\n" #. TRANSLATORS: --help output, recdel synopsis. #. no-wrap #: utils/recdel.c:78 #, c-format msgid "" "Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [FILE]\n" msgstr "" "Användning: recdel [FLAGGOR] … [-t TYP] [-n NUM | -e POSTUTTR | -q STR | -m " "ANT] [FIL]\n" #. TRANSLATORS: --help output, recdel short description. #. no-wrap #: utils/recdel.c:83 msgid "Remove (or comment out) records from a rec file.\n" msgstr "Ta bort (eller kommentera bort) poster frÃ¥n en rec-fil.\n" #. TRANSLATORS: --help output, recdel arguments. #. no-wrap #: utils/recdel.c:90 msgid "" " -c, --comment comment out the matching records " "instead of\n" " deleting them.\n" " --force delete even in potentially dangerous " "situations,\n" " and if the deletion is violating " "record restrictions.\n" " --no-external don't use external descriptors.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -c, --comment kommentera ut de matchande posterna\n" " istället för att radera dem.\n" " --force radera även i potentiellt farliga\n" " situationer, och om raderingen " "bryter\n" " mot postrestriktionerna.\n" " --no-external använd inte externa identifierare.\n" " --verbose ge en detaljerad rapport om\n" " integritetskontrollen hittar fel.\n" #. TRANSLATORS: --help output, notes on recdel. #. no-wrap #. TRANSLATORS: --help output, notes on recfix. #. no-wrap #. TRANSLATORS: --help output, notes on recins. #. no-wrap #: utils/recdel.c:108 utils/recfix.c:149 utils/recins.c:138 msgid "" "If no FILE is specified then the command acts like a filter, getting\n" "the data from standard input and writing the result to standard output.\n" msgstr "" "Om ingen FIL anges fungerar kommandot som ett filter, som hämtar\n" "data frÃ¥n standard in och skriver resultatet till standard ut.\n" #: utils/recdel.c:123 #, c-format msgid "no records of type %s found.\n" msgstr "inga poster av typ %s hittades.\n" #: utils/recdel.c:196 #, c-format msgid "ignoring a request to delete all records of type %s.\n" msgstr "ignorera en begäran om att ta bort alla poster av typen %s.\n" #: utils/recdel.c:198 msgid "use --force if you really want to proceed, or use either -n or -e.\n" msgstr "" "använd --force om du verkligen vill fortsätta, eller använda antingen -n " "eller -e.\n" #: utils/recdel.c:206 msgid "invalid selection expression.\n" msgstr "ogiltigt urvalsuttryck.\n" #: utils/recdel.c:241 utils/recfix.c:344 utils/recins.c:361 utils/recset.c:312 #, c-format msgid "file %s is not writable.\n" msgstr "filen %s är inte skrivbar.\n" #. TRANSLATORS: --help output, recfix synopsis. #. no-wrap #: utils/recfix.c:99 #, c-format msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" msgstr "Användning: recfix [FLAGGA]… [Ã…TGÄRD] [OP_FLAGGA]… [FIL]\n" #. TRANSLATORS: --help output, recfix short description. #. no-wrap #: utils/recfix.c:104 msgid "Check and fix rec files.\n" msgstr "Kontrollera och Ã¥tgärda rec-filer.\n" #. TRANSLATORS: --help output, recfix global arguments. #. no-wrap #: utils/recfix.c:111 msgid "" " --no-external don't use external descriptors.\n" " --force force the requested operation.\n" msgstr "" " --no-external använd inte externa identifierare\n" " --force tvinga fram den begärda Ã¥tgärden.\n" #. TRANSLATORS: --help output, recfix operations. #. no-wrap #: utils/recfix.c:121 msgid "" "Operations:\n" " --check check integrity of the specified " "file. Default.\n" " --sort sort the records in the specified " "file.\n" " --auto insert auto-generated fields in " "records missing them.\n" msgstr "" "Ã…tgärder:\n" " --check kontrollera integriteten pÃ¥ den " "angivna\n" " filen. Standardfall.\n" " --sort sortera posterna i den angivna filen.\n" " --auto lägg in automatgenererade fält i " "poster\n" " som saknar dem.\n" #. TRANSLATORS: --help output, recfix operations related with encryption. #. no-wrap #: utils/recfix.c:131 msgid "" " --encrypt encrypt confidential fields in the " "specified file.\n" " --decrypt decrypt confidential fields in the " "specified file.\n" msgstr "" " --encrypt kryptera konfidentiella fält i den\n" " angivna filen.\n" " --decrypt dekryptera konfidentiella fält i den\n" " angivna filen.\n" #. TRANSLATORS: --help output, recfix encryption and decryption #. options. #. no-wrap #: utils/recfix.c:140 msgid "" "De/Encryption options:\n" " -s, --password=PASSWORD encrypt/decrypt with this password.\n" msgstr "" "(De)krypteringsflaggor:\n" " -s, --password=LÖSENORD kryptera/dekryptera med detta " "lösenord.\n" #: utils/recfix.c:184 msgid "--password|-s must be used as an operation argument.\n" msgstr "--password|-s mÃ¥ste användas som ett Ã¥tgärdsargument.\n" #: utils/recfix.c:188 msgid "the specified operation does not require a password.\n" msgstr "den angivna Ã¥tgärden behöver inte nÃ¥got lösenord.\n" #: utils/recfix.c:191 msgid "please specify just one password.\n" msgstr "ange bara ett lösenord.\n" #: utils/recfix.c:198 utils/recfix.c:204 utils/recfix.c:210 utils/recfix.c:217 #: utils/recfix.c:223 msgid "please specify just one operation.\n" msgstr "ange bara en Ã¥tgärd.\n" #: utils/recfix.c:304 utils/recfix.c:326 utils/recfix.c:365 utils/recfix.c:435 #, fuzzy, c-format msgid "recfix: error: cannot read file %s\n" msgstr "fel: det gÃ¥r inte läsa filen %s\n" #: utils/recfix.c:399 msgid "the database contains already encrypted fields\n" msgstr "databasen innehÃ¥ller redan krypterade fält\n" #: utils/recfix.c:400 msgid "please use --force or --decrypt\n" msgstr "använd --force eller --decrypt\n" #: utils/recfix.c:499 msgid "unknown operation in recfix: please report this as a bug.\n" msgstr "okänd Ã¥tgärd i recfix: rapportera gärna detta som ett fel.\n" #. TRANSLATORS: --help output, recfmt synopsis. #. no-wrap #: utils/recfmt.c:64 #, c-format msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" msgstr "Användning: recfmt [FLAGGA]… [MALL]\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:69 msgid "Apply a template to records read from standard input.\n" msgstr "Använda en mall för poster lästa frÃ¥n standard in.\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:75 msgid "" " -f, --file=FILENAME read the template to apply from a " "file.\n" msgstr " -f, -file=FILNAMN läs mallen att använda frÃ¥n en fil.\n" #: utils/recfmt.c:107 #, c-format msgid "can't open file %s for reading.\n" msgstr "kan inte öppna filen %s för läsning.\n" #: utils/recfmt.c:120 msgid "don't specify a template in the command line and -f at the same time.\n" msgstr "ange inte en mall pÃ¥ kommandoraden och -f samtidigt.\n" #: utils/recfmt.c:142 msgid "invalid expression in a template slot.\n" msgstr "ogiltigt uttryck pÃ¥ en mallplats.\n" #: utils/recfmt.c:146 msgid "error evaluating expression in a template slot.\n" msgstr "fel vid beräkning av uttryck pÃ¥ en mallplats.\n" #: utils/recfmt.c:178 msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" msgstr "" "recfmt_apply_template: fel vid kompilering av reguljäruttryck. Vänligen " "rapportera det här.\n" #. TRANSLATORS: --help output, recinf synopsis. #. no-wrap #: utils/recinf.c:77 #, c-format msgid "Usage: recinf [OPTION]... [FILE]...\n" msgstr "Användning: recinf [FLAGGA]… [FIL]…\n" #. TRANSLATORS: --help output, recinf short description. #. no-wrap #: utils/recinf.c:82 msgid "Print information about the types of records stored in the input.\n" msgstr "" "Skriv ut information om typerna pÃ¥ poster som finns lagrade i indata.\n" #. TRANSLATORS: --help output, recinf arguments. #. no-wrap #: utils/recinf.c:89 msgid "" " -t, --type=RECORD_TYPE print information on the records having " "the\n" " specified type.\n" " -d, --descriptor include the full record descriptors.\n" " -n, --names-only output just the names of the record files\n" " found in the input.\n" msgstr "" " -t, --type=POST_TYP skriv ut information om de poster som har\n" " angiven typ.\n" " -d, -descriptor inkludera fullständiga postidentifierare.\n" " -n, -names-only skriv bara ut namnen pÃ¥ postfiler som " "fanns\n" " i indata.\n" #. TRANSLATORS: --help output, recinf special options. #. no-wrap #: utils/recinf.c:102 msgid "" "Special options:\n" " -S, --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Specialflaggor:\n" " -S, --print-sexps skriv ut data i sexps- istället för\n" " rec-format.\n" #: utils/recinf.c:234 #, c-format msgid "error: cannot read file %s\n" msgstr "fel: det gÃ¥r inte läsa filen %s\n" #. TRANSLATORS: --help output, recins synopsis. #. no-wrap #: utils/recins.c:100 #, c-format msgid "" "Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" msgstr "" "Användning: recins [FLAGGA]… [-t TYP] [-n NUM | -e POSTUTTR | -q STR | -m " "ANT] [(-f NAMN -v STR) | -r POSTDATA]… [FIL]\n" #. TRANSLATORS: --help output, recins short description. #. no-wrap #: utils/recins.c:105 msgid "Insert new records in a rec database.\n" msgstr "Infoga nya poster i en rec-databas.\n" #. TRANSLATORS: --help output, recins arguments. #. no-wrap #: utils/recins.c:111 msgid "" " -f, --field=STR field name; should be followed by a -" "v.\n" " -v, --value=STR field value; should be preceded by an -" "f.\n" " -r, --record=STR record that will be inserted in the " "file.\n" " --force insert the record even if it is " "violating\n" " record restrictions.\n" " --no-external don't use external descriptors.\n" " --no-auto don't insert auto generated fields.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -f, --field=STR fältnamn; skall följas av ett -v.\n" " -v, --value=STR fältvärde; skall föregÃ¥s av ett -f.\n" " -r, --record=STR post som kommer skjutas in i filen.\n" " --force skjut in posten även om det bryter " "mot\n" " postrestriktionerna.\n" " --no-external använd inte externa identifierare.\n" " --no-auto skjut inte in automatiskt genererade " "fält.\n" " --verbose fÃ¥ en detaljerad rapport om\n" " integritetskontrollen hittar fel.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recins.c:125 msgid "" " -s, --password=STR encrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=STR kryptera konfidentiella fält med det " "angivna lösenordet.\n" #: utils/recins.c:179 msgid "a -f should be followed by a -v\n" msgstr "ett -f skall följas av ett -v\n" #: utils/recins.c:198 msgid "a -v should be preceded by a -f\n" msgstr "ett -v skall föregÃ¥s av ett -f\n" #: utils/recins.c:214 utils/recsel.c:204 msgid "more than one password was specified\n" msgstr "mer än ett lösenord angavs\n" #: utils/recins.c:224 msgid "error while parsing the record provided by -r\n" msgstr "fel vid tolkning av posten som gavs via -r\n" #: utils/recins.c:256 #, c-format msgid "please provide a value for the field %s\n" msgstr "ange ett värde för fältet %s\n" #. TRANSLATORS: --help output, recsel synopsis. #. no-wrap #: utils/recsel.c:107 #, c-format msgid "" "Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " "| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" msgstr "" "Användning: recsel [FLAGGA]… [-t TYP] [-j FÄLT] [-n INDEX |-e POSTUTTR | -q " "STR | -m ANT] [-c | (-p|-P) FÄLTUTTR] [FIL]…\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:112 msgid "Select and print rec data.\n" msgstr "Välj och skriv ut rec-data.\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:118 msgid "" " -d, --include-descriptors print record descriptors along with " "the matched\n" " records.\n" " -C, --collapse do not section the result in records " "with newlines.\n" " -S, --sort=FIELD,... sort the output by the specified " "fields.\n" " -G, --group-by=FIELD,... group records by the specified " "fields.\n" " -U, --uniq remove duplicated fields in the output " "records.\n" msgstr "" "-d, --include-descriptors skriv ut postidentifierare tillsammans " "med\n" " matchade poster.\n" " -C, --collapse dela inte upp resultatet i poster med\n" " nyrader.\n" " -S, --sort=FÄLT sortera utdata efter det angivna " "fältet.\n" " -G, --group-by=FÄLT,… grupper poster efter de angivna " "fälten.\n" " -U, --uniq ta bort dubblerade fält i utposter.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recsel.c:130 msgid "" " -s, --password=STR decrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=STR dekryptera konfidentiella fält med det " "angivna lösenordet.\n" #: utils/recsel.c:139 msgid "" " -j, --join=FIELD perform an inner join using the " "specified field.\n" msgstr "" " -j, --join=FÄLT utför en inre join med det angivna " "fältet.\n" #. TRANSLATORS: --help output, recsel output options. #. no-wrap #: utils/recsel.c:146 msgid "" "Output options:\n" " -p, --print=FIELDS comma-separated list of fields to " "print for each\n" " matching record.\n" " -P, --print-values=FIELDS as -p, but print only the values of " "the selected\n" " fields.\n" " -R, --print-row=FIELDS as -P, but separate the values with " "spaces instead\n" " of newlines.\n" " -c, --count print a count of the matching records " "instead of\n" " the records themselves.\n" msgstr "" "Utskriftsflaggor:\n" " -p, --print=FÄLT kommaseparerad lista av fält att " "skriva\n" " ut för varje matchad post.\n" " -P, --print-values=FÄLT samma som -p, men skriv endast värdena " "i\n" " de valda fälten.\n" " -R, --print-row=FÄLT samma som -P, men dela av värdena med\n" " blanktecken istället för nyrader.\n" " -c, --count skriv antalet matchade poster " "istället\n" " istället för själva posterna.\n" #. TRANSLATORS: --help output, recsel special options. #. no-wrap #: utils/recsel.c:160 msgid "" "Special options:\n" " --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "Specialflaggor:\n" " --print-sexps skriv ut data i sexps- istället för\n" " rec-format.\n" #: utils/recsel.c:212 msgid "only one field list can be specified as a sorting criteria.\n" msgstr "endast en fältlista kan anges som ett sorteringskriterium.\n" #: utils/recsel.c:217 msgid "invalid field names in -S.\n" msgstr "ogiltiga fältnamn till -S.\n" #: utils/recsel.c:226 msgid "only one field can be specified as join criteria.\n" msgstr "endast ett fält kan anges som ett join-kriterium.\n" #: utils/recsel.c:229 msgid "please specify a correct field name to -j|--join.\n" msgstr "ange ett korrekt fältnamn till -j|--join.\n" #: utils/recsel.c:236 msgid "only one field list can be specified as a grouping criteria.\n" msgstr "endast en fältlista kan anges som ett grupperingskriterium.\n" #: utils/recsel.c:241 msgid "invalid field names in -G.\n" msgstr "ogiltiga fältnamn till -G.\n" #: utils/recsel.c:255 msgid "cannot specify -[pPR] and also -c.\n" msgstr "det gÃ¥r inte att ange -[pPR] samtidigt som -c.\n" #: utils/recsel.c:266 #, c-format msgid "invalid list of fields in -%c\n" msgstr "ogiltig fältlista till -%c\n" #: utils/recsel.c:272 msgid "internal error creating the field expression.\n" msgstr "internt fel när fältuttrycket skapades.\n" #: utils/recsel.c:284 #, c-format msgid "invalid aggregate function '%s'\n" msgstr "felaktig aggregatfunktion â€%sâ€\n" #: utils/recsel.c:296 msgid "cannot specify -c and also -p.\n" msgstr "det gÃ¥r inte att ange -c samtidigt som -p.\n" #: utils/recsel.c:309 msgid "joins can only be used when a named record set is selected.\n" msgstr "join kan endast göras när en namngiven postmängd är vald.\n" #: utils/recsel.c:363 msgid "several record types found. Please use -t to specify one.\n" msgstr "flera posttyper hittades. Använd -t för att ange en.\n" #. TRANSLATORS: --help output, recset synopsis. #. no-wrap #: utils/recset.c:99 #, c-format msgid "Usage: recset [OPTION]... [FILE]...\n" msgstr "Användning: recset [FLAGGA]… [FIL]…\n" #. TRANSLATORS: --help output, recset short description. #. no-wrap #: utils/recset.c:104 msgid "Alter or delete fields in records.\n" msgstr "Ändra eller ta bort fält i poster.\n" #. TRANSLATORS: --help output, recset options. #. no-wrap #: utils/recset.c:110 msgid "" " --no-external don't use external descriptors.\n" " --force alter the records even if violating " "record\n" " restrictions.\n" msgstr "" " --no-external använd inte externa identifierare.\n" " --force ändra posterna även om det bryter mot\n" " postbegränsningarna.\n" #. TRANSLATORS: --help output, recset field selection options. #. no-wrap #: utils/recset.c:123 msgid "" "Field selection options:\n" " -f, --fields=FIELDS comma-separated list of field names " "with optional\n" " subscripts.\n" msgstr "" "Flaggor för fältval:\n" " -f, --fields=FÄLT kommaseparerad lista med fältnamn och\n" " eventuella index.\n" #. TRANSLATORS: --help output, recset actions. #. no-wrap #: utils/recset.c:131 msgid "" "Actions:\n" " -s, --set=VALUE change the value of the selected " "fields.\n" " -a, --add=VALUE add the selected fields with the given " "value.\n" " -S, --set-add=VALUE change the value of the selected " "fields. If they don't\n" " exist then add a new field with that " "value.\n" " -r, --rename=NAME rename the selected fields to a given " "name. If an entire\n" " record set is selected then the " "field is renamed in the\n" " record descriptor as well.\n" " -d, --delete delete the selected fields.\n" " -c, --comment comment out the selected fields.\n" msgstr "" "Ã…tgärder:\n" " -s, --set=VÄRDE ändra värdet pÃ¥ de valda fälten.\n" " -a, --add=VÄRDE lägg till de valda fälten med det " "angivna\n" " värdet.\n" " -S, --set-add=VÄRDE ändra värdet pÃ¥ de valda fälten. Om " "de\n" " inte finns, lägg dÃ¥ till ett nytt " "fält\n" " med det värdet.\n" " -r, --rename=NAMN byt namn pÃ¥ de valda fälten till ett\n" " angivet namn. Om en hel postmängd " "är\n" " vald byts namnet även i\n" " postidentifieraren.\n" " -d, --delete radera de valda fälten.\n" " -c, --comment kommentera bort de valda fälten.\n" #: utils/recset.c:154 msgid "please specify some field with -f.\n" msgstr "ange nÃ¥got fält med -f.\n" #: utils/recset.c:159 msgid "please specify just one action.\n" msgstr "ange bara en Ã¥tgärd.\n" #: utils/recset.c:193 msgid "invalid field expression in -f.\n" msgstr "ogiltigt fältuttryck i -f.\n" #: utils/recset.c:199 msgid "creating the field expression.\n" msgstr "när fältuttryck skapades.\n" #: utils/recset.c:214 msgid "" "the rename operation requires just one field with an optional subscript.\n" msgstr "Ã¥tgärden namnbyte tar endast ett fält med ett eventuellt index.\n" #: utils/recutl.c:123 #, c-format msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" msgstr "%s hemsida: <http://www.gnu.org/software/recutils/>\n" #: utils/recutl.c:126 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" "Allmän hjälp med att använda GNU-program: <http://www.gnu.org/gethelp/>\n" #. TRANSLATORS: --help output, common arguments. #. no-wrap #: utils/recutl.c:135 msgid "" " --help print a help message and exit.\n" " --version show version and exit.\n" msgstr "" " --help visa ett hjälpmeddelande och avsluta.\n" " --version visa versionsinformation och avsluta.\n" #. TRANSLATORS: --help output, record selection arguments #. no-wrap #: utils/recutl.c:146 msgid "" "Record selection options:\n" " -i, --case-insensitive make strings case-insensitive in " "selection\n" " expressions.\n" " -t, --type=TYPE operate on records of the specified " "type only.\n" " -e, --expression=RECORD_EXPR selection expression.\n" " -q, --quick=STR select records with fields containing " "a string.\n" " -n, --number=NUM,... select specific records by position, " "with ranges.\n" " -m, --random=NUM select a given number of random " "records.\n" msgstr "" "Flaggor för postval:\n" " -i, --case-insensitive gör strängar skiftlägseokänsliga i\n" " urvalsuttryck.\n" " -t, --type=TYP arbeta enbart pÃ¥ poster med angiven " "typ.\n" " -e, --expression=POSTUTTR urvalsuttryck.\n" " -q, --quick=STR välj poster med fält som innehÃ¥ller " "en\n" " sträng.\n" " -n, --number=NUM,… välj vissa poster efter position, med\n" " intervall.\n" " -R, --random=ANT välj ett angivet antal med " "slumpposter.\n" #: utils/recutl.c:171 #, c-format msgid "" "Copyright (C) %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "Copyright © %s Jose E. Marchesi.\n" "Licens GPLv3+: GNU GPL version 3 eller senare <http://gnu.org/licenses/gpl." "html>.\n" "Detta är fri programvara: du har rätt att ändra och vidaredistribuera den.\n" "Det finns INGEN GARANTI, sÃ¥ lÃ¥ngt som lagen tillÃ¥ter.\n" #: utils/recutl.c:177 msgid "" "\n" "Written by Jose E. Marchesi." msgstr "" "\n" "Skrivet av Jose E. Marchesi." #: utils/recutl.c:189 utils/recutl.c:209 msgid ": error: " msgstr ": fel: " #: utils/recutl.c:221 msgid ": warning: " msgstr ": varning: " #: utils/recutl.c:246 #, c-format msgid "duplicated record set '%s' from %s.\n" msgstr "duplicerad postmängd â€%s†frÃ¥n %s.\n" #: utils/recutl.c:401 msgid "cannot create a unique name.\n" msgstr "det gÃ¥r inte att skapa ett unikt namn.\n" #: utils/recutl.c:421 #, c-format msgid "renaming file %s to %s\n" msgstr "döper om filen %s till %s\n" #: utils/recutl.c:463 msgid "operation aborted due to integrity failures.\n" msgstr "Ã¥tgärden avbruten pÃ¥ grund av integritetsfel.\n" #: utils/recutl.c:464 msgid "use --verbose to get a detailed report.\n" msgstr "använd --verbose för att fÃ¥ en detaljerad rapport.\n" #: utils/recutl.c:471 msgid "use --force to skip the integrity check.\n" msgstr "använd --force för att hoppa över integritetskontrollen.\n" #: utils/recutl.c:529 msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" msgstr "" "internt fel: recutl_index_list_parse: fel vid kompilering av " "reguljäruttryck.\n" #: utils/recutl.c:596 msgid "Password: " msgstr "Lösenord: " #: utils/recutl.c:602 msgid "Password again: " msgstr "Lösenord igen: " #: utils/recutl.c:607 msgid "the provided passwords don't match.\n" msgstr "de givna lösenorden stämmer inte överens.\n" #: utils/recutl.h:84 utils/recutl.h:131 utils/recutl.h:133 msgid "cannot specify -e and also -n\n" msgstr "det gÃ¥r inte att ange -e samtidigt som -n\n" #: utils/recutl.h:86 msgid "cannot specify -e and also -q\n" msgstr "det gÃ¥r inte att ange -e samtidigt som -q\n" #: utils/recutl.h:94 msgid "invalid selection expression\n" msgstr "ogiltigt urvalsuttryck\n" #: utils/recutl.h:100 msgid "cannot specify -n and also -e\n" msgstr "det gÃ¥r inte att ange -n samtidigt som -e\n" #: utils/recutl.h:102 msgid "cannot specify -n and also -q\n" msgstr "det gÃ¥r inte att ange -n samtidigt som -q\n" #: utils/recutl.h:106 msgid "invalid list of indexes in -n\n" msgstr "ogiltig indexlista till -n\n" #: utils/recutl.h:111 msgid "cannot specify -m and also -e\n" msgstr "det gÃ¥r inte att ange -m samtidigt som -e\n" #: utils/recutl.h:113 msgid "cannot specify -m and also -q\n" msgstr "det gÃ¥r inte att ange -m samtidigt som -q\n" #: utils/recutl.h:115 msgid "cannot specify -m and also -n\n" msgstr "det gÃ¥r inte att ange -m samtidigt som -n\n" #~ msgid "_open_osfhandle failed" #~ msgstr "_open_osfhandle misslyckades" #~ msgid "cannot restore fd %d: dup2 failed" #~ msgstr "det gÃ¥r inte att Ã¥terställa fb %d: dup2 misslyckades" #~ msgid "" #~ "\n" #~ "Report bugs to: %s\n" #~ msgstr "" #~ "\n" #~ "Rapportera fel till: %s\n" #~ "Rapportera kommentarer pÃ¥ översättningen till <tp-sv@listor.tp-sv.se>.\n" #~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n" #~ msgstr "%s hemsida: <https://www.gnu.org/software/%s/>\n" ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/sr.gmo������������������������������������������������������������������������������0000644�0000000�0000000�00000150324�14226577416�011675� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•�����0��� ��‘��������D�����L��„������L�����M��&���k��1���’�����Ä�� ���â��²�����‚���¶��Í���9��‹�����"���“�����¶�����Î�����è��"�������)��E��1!��Ó��w"��Ž��K$��N���Ú&��W���)'��[���'��[���Ý'��?��9(��M��y)�����Ç*��6���Û*�� ���+����� +��!���5+��H���W+��;��� +��@���Ü+��A���,�����_,��,���{,�����¨,��.���È,��'���÷,��(���-�����H-��2���h-��;���›-��2���×-��M��� .��S���X.��2���¬.��=���ß.��?���/��;���]/��V���™/��A���ð/��8���20��9���k0��%���¥0��)���Ë0��,���õ0��1���"1��7���T1��7���Œ1��1���Ä1��E���ö1��F���<2��F���ƒ2��4���Ê2��2���ÿ2��9���23��<���l3��U���©3��=���ÿ3��D���=4�����‚4�����„4�����4��5���¡4�� ���×4�� ���á4��ê��í4��#���Ø7��6���ü7�����38��%���M8�� ���s8�� ���”8��ë���µ8��a���¡9��¥���:��?���©:�����é:��&���w;�����ž;�����µ;�����Ò;�����î;��$���<�����+<�����=<�����X<�����i<�����r<�� ��‘<��L��Ÿ=�����ì?�����ü?�����@�� ���"@��#���-@��B���Q@��.��”@�����ÃB��1���ÞB�����C�����'C�����;C��f���WC��f���¾C�����%D�����-D�����GD��!���^D�����€D�����“D�����¨D�����ºD�����ÌD�� ���ëD��'���øD��-��� E��'���NE��X���vE��<���ÏE��%��� F��$���2F��z���WF��ƒ���ÒF��$���VG�����{G��;���’G��3���ÎG��/���H��+���2H��'���^H��#���†H�����ªH�����ÊH�����æH�����öH�� ���øH�� ���I�� ���:I�����[I�����yI��#���ŽI�����²I�����ÒI�����ñI�����J�����/J�����NJ�����mJ�����ŒJ�����«J�����ÃJ�����ãJ�����èJ�����ñJ��F���õJ��$���<K��0���aK��!���’K��.���´K�� ���ãK��>���ñK��/���0L�����`L��!���|L�� ���žL�����¿L��'���ÖL��*���þL�����)M�����GM��$���aM��&���†M�� ���­M��"���ÎM��(���ñM��&���N�����AN��.���[N�����ŠN�����N��%���®N�����ÔN��5���ÛN�����O�����$O�����5O��.���SO��A���‚O��`���ÄO��B���%P��A���hP��3���ªP��A���ÞP����� Q�����6Q�����MQ�����cQ�����zQ�����Q�� ���¦Q�� ���ÇQ�����ÕQ�����äQ��'���øQ�� ��� R�����AR��"���YR�����|R�����œR�����¸R�����ÔR�����åR�����S�����#S�����AS��<���`S�� ���S�����¨S�����¹S��%���ÊS�����ðS�����T�����,T�����3T��2���ET��=���xT��<���¶T��@���óT��-���4U�����bU�����qU�����‚U��(���šU��2���ÃU�� ���öU��#���V��"���;V��#���^V�� ���‚V�����£V��C���ÁV�����W�����W�����&W��;���AW�����}W�����—W��/���¦W��$���ÖW��I���ûW��5���EX�����{X��$���€X�����¥X�����¿X�����ÙX��:���éX��C���$Y��)���hY��(���’Y��+���»Y��+���çY��-���Z�� ���AZ��)���bZ��8���ŒZ��<���ÅZ��<���[��:���?[��F���z[��`���Á[�� ���"\�����.\��/��3\��,���c^��J���^��`���Û^��7���<_��C���t_��ö���¸_��ª���¯`�����Za��³���[b��-���c��"���=c��2���`c��D���“c��5���Øc��±��d��á��Àf��v��¢h��G��k��t���an��‘���Ön��u���ho��q���Þo��¥��Pp��Â��öq��)���¹s��L���ãs�����0t��)���Ft��@���pt��q���±t��U���#u��i���yu��i���ãu��2���Mv��E���€v��0���Æv��F���÷v��<���>w��=���{w��/���¹w��N���éw��M���8x��X���†x��µ���ßx��Ì���•y��M���bz��k���°z��j���{��m���‡{�����õ{��n���†|��g���õ|��p���]}��E���Î}��P���~��c���e~��`���É~��d���*��^�����O���î��q���>€��r���°€��r���#��b���–��F���ù��T���@‚��l���•‚��™���ƒ��_���œƒ��e���üƒ�����b„��#���f„�����Š„��]���„�����ë„�����ü„��×��…��C���ëˆ��g���/‰��H���—‰��O���à‰��K���0Š��K���|Š��›��ÈŠ�����dŒ��ë���õŒ��^���á����@Ž��E���O��8���•��5���Î��,�����(���1��L���Z��*���§��2���Ò��(���‘�����.‘��?���L‘��v��Œ‘�� ��“�����–�� ���-–��!���N–�����p–��9���–��k���»–��ü��'—��3���$š��n���Xš��C���Çš��)��� ›��F���5›��˜���|›��˜���œ�����®œ��3���½œ��(���ñœ��?�����-���Z��.���ˆ��!���·��!���Ù��.���û�����*ž��F���Cž��S���Šž��L���Þž��“���+Ÿ��h���¿Ÿ��:���( ��A���c ��Ô���¥ ��Ñ���z¡��A���L¢�� ���Ž¢��F���¯¢��;���ö¢��7���2£��3���j£��/���ž£��+���Σ��(���ú£��$���#¤�����H¤�����a¤��8���e¤��@���ž¤��O���ߤ��E���/¥��>���u¥��E���´¥��A���ú¥��@���<¦��@���}¦��@���¾¦��@���ÿ¦��@���@§��@���§��@���§��6���¨��$���:¨�� ���_¨�����j¨�����ƒ¨��d���Ѝ��A���ï¨��W���1©��G���‰©��\���Ñ©�����.ª��‡���Cª��q���˪��F���=«��C���„«��Q���È«��1���¬��X���L¬��h���¥¬��7���­��1���F­��Q���x­��<���Ê­��H���®��K���P®��Z���œ®��K���÷®��3���C¯��T���w¯�����̯�����é¯��O���°�� ���T°��[���a°��0���½°��(���î°��=���±��H���U±��€���ž±��˜���²��„���¸²��ƒ���=³��u���Á³��ƒ���7´��1���»´��2���í´��1��� µ��2���Rµ��1���…µ��1���·µ��>���éµ�� ���(¶��&���I¶��7���p¶��F���¨¶��6���ï¶��-���&·��F���T·��E���›·��8���á·��8���¸��!���S¸��8���u¸��6���®¸��-���å¸��.���¹��†���B¹�����ɹ��(���ݹ��.���º��6���5º��;���lº��8���¨º�����áº�����êº��d���»��s���g»��m���Û»��m���I¼��W���·¼��#���½�����3½��7���N½��B���†½��W���ɽ��>���!¾��>���`¾��B���Ÿ¾��=���â¾��C��� ¿��5���d¿��“���š¿�����.À��=���AÀ��3���À��Œ���³À��/���@Á��!���pÁ��J���’Á��8���ÝÁ��„���Â��@���›Â�� ���ÜÂ��M���çÂ��=���5Ã��A���sÃ�����µÃ��z���ÑÃ�����LÄ��b���ÜÄ��Z���?Å��Z���šÅ��Z���õÅ��^���PÆ��S���¯Æ��[���Ç��m���_Ç��‘���ÍÇ��“���_È��†���óÈ�����zÉ��«��� Ê�����¶Ê�����ÐÊ�����Ú���Œ���ý���n���W��������� ���y���œ���•���g���ë�����������€�����½�������ú�����������������F�������(���D��� ���ƒ�����������������/���ä�����������H������a���æ�����������Í���¶�������>������1�����w����������T���Q���ˆ���������������-���ã���†���`���M������������������� ��’�������ù�������Ó���j���þ���Ö���h���<���×����������i��� ����������·�����A���v���ž���Ä��� ��!���“���Ý���Y���å���È���¤���ß���O��������������������ò���G�������e���U����������������������¸���o���»�����������%���J���������Â�����������#���±���,�������������������Ü�������ö������&�������ç���¦���}���è���º������ ��� ��ð���é���������V��� �����������R���K���µ���°�������Ù�������[���Ÿ���|�������î����������Þ�����������É���u�������¿���:�������$�������û������Û������Ï�������\�������Ì���¥���������à���–����������¯����������³�������B���������������”���ü���3��������������x���7���L���*���������Š���Ñ�����~�������+�������‚������ô���_���Å�������k���Ã���´����������m�������â���P���À���¹���C���ó����������������������í���„���^�������ì���f�������l���¢�����������N���8�������¨���'�����¼�������š���]���¾���Ç���ñ���;���Õ���9���=���)���p��������������������� ��‰���©�������Æ������������� �����ª���õ���4���Î����������d���ø�������0���I�������t���Ô�������.���r�������—���?�����������"���§���‡���5���S����������›�������˜����������™���������Ø���Z���c���Ž���á������¡�����‘���¬�������«�����������÷�������‹�������²�����������Á������� ���®���6������ï������������������������2���ÿ����� �������X���Ë���Ð�����������������������Ê���­���b������z���£���ê���{���Ò���@���q�������s���…���E������ÙÊ��¼��Ð��ä��ø����(��D��X��l��€��¤��¸��Ü��ð������,��@��\��p��Œ�� ��´��È��ì�����$��8��áÊ�� ����������ÿÿÿÿëÊ��������� ���ÿÿÿÿË������������ÿÿÿÿË�������������������ÿÿÿÿQË���������0���ÿÿÿÿ‘Ë�������������������ÿÿÿÿ·Ë������������ÿÿÿÿÓË������������ÿÿÿÿìË���������/���ÿÿÿÿ9Ì��������� ������� ������� ���ÿÿÿÿpÌ������������ÿÿÿÿˆÌ��������� ������� ����������ÿÿÿÿËÌ������������ÿÿÿÿëÌ������������ÿÿÿÿ Í������������ÿÿÿÿÍ������������ÿÿÿÿAÍ������������ÿÿÿÿ\Í��&������� �������<���ÿÿÿÿÇÍ��&�������W���ÿÿÿÿDÎ��F�����������������ÿÿÿÿ“Î��0����������ÿÿÿÿÅÎ��+����������ÿÿÿÿôÎ��2�������S���ÿÿÿÿyÏ��0��������������������� ���ÿÿÿÿØÏ�� ����������ÿÿÿÿ�Ð��2������� �����������������ÿÿÿÿkÐ������������ÿÿÿÿ¢Ð���������#���ÿÿÿÿ� Written by Jose E. Marchesi.� invalid day/month combination; � non-existing due to daylight-saving time; � normalized time: '%s' � numeric values overflow; � --encrypt encrypt confidential fields in the specified file. --decrypt decrypt confidential fields in the specified file. � --help print a help message and exit. --version show version and exit. � --no-external don't use external descriptors. --force alter the records even if violating record restrictions. � --no-external don't use external descriptors. --force force the requested operation. � adjusted Y M D: %s %02d %02d � possible reasons: � new date/time = '%s' � user provided time: '%s' � normalized Y M D: %s %02d %02d � -c, --comment comment out the matching records instead of deleting them. --force delete even in potentially dangerous situations, and if the deletion is violating record restrictions. --no-external don't use external descriptors. --verbose give a detailed report if the integrity check fails. � -d, --delim=char sets the deliminator (default ',') -t, --type=TYPE record set to convert to csv; if this parameter is omitted then the default record set is used -S, --sort=FIELDS sort the output by the specified fields. � -d, --include-descriptors print record descriptors along with the matched records. -C, --collapse do not section the result in records with newlines. -S, --sort=FIELD,... sort the output by the specified fields. -G, --group-by=FIELD,... group records by the specified fields. -U, --uniq remove duplicated fields in the output records. � -f, --field=STR field name; should be followed by a -v. -v, --value=STR field value; should be preceded by an -f. -r, --record=STR record that will be inserted in the file. --force insert the record even if it is violating record restrictions. --no-external don't use external descriptors. --no-auto don't insert auto generated fields. --verbose give a detailed report if the integrity check fails. � -f, --file=FILENAME read the template to apply from a file. � -j, --join=FIELD perform an inner join using the specified field. � -s, --password=STR decrypt confidential fields with the given password. � -s, --password=STR encrypt confidential fields with the given password. � -s, --system-tables include system tables. -e, --keep-empty-fields don't prune empty fields in the rec output. -l, --list-tables dump a list of the table names contained in the mdb file. � -t, --type=RECORD_TYPE print information on the records having the specified type. -d, --descriptor include the full record descriptors. -n, --names-only output just the names of the record files found in the input. �%s home page: <%s> �%s home page: <http://www.gnu.org/software/recutils/> �%s subprocess�%s subprocess failed�%s subprocess got fatal signal %d�%s: %lu: this line contains %lu fields, but %lu header fields were read �%s: error: the number of records of type %s should be %zd. �%s: error: too few records of type %s. Minimum allowed are %zd. �%s: error: too many records of type %s. Maximum allowed are %zd. �%s: invalid option -- '%c' �%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: unrecognized option '%s%s' �%s:%s: error: %%constraint[%d] violated in record �%s:%s: error: %s does not contain information for type %s. �%s:%s: error: %s does not contain valid rec data. �%s:%s: error: auto-incremented field %s should be of type int, range or date �%s:%s: error: auto-incremented field %s should be of type int, range, uuid or date �%s:%s: error: confidential field is not encrypted �%s:%s: error: could not fetch remote descriptor from url %s. �%s:%s: error: could not read external descriptor from file %s. �%s:%s: error: duplicated key value in field '%s' in record �%s:%s: error: expected a comma-separated list of fields before the type specification �%s:%s: error: expected a type name before the type specification �%s:%s: error: field '%s' not allowed in this record set �%s:%s: error: field '%s' should be unique in this record �%s:%s: error: invalid record type %s �%s:%s: error: invalid type specification �%s:%s: error: invalid typedef specification �%s:%s: error: key field '%s' not found in record �%s:%s: error: mandatory field '%s' not found in record �%s:%s: error: missing %%rec field in record descriptor �%s:%s: error: multiple key fields '%s' in record �%s:%s: error: only one %%key field is allowed in a record descriptor �%s:%s: error: only one %%size field is allowed in a record descriptor �%s:%s: error: only one %%sort field is allowed in a record descriptor �%s:%s: error: prohibited field '%s' found in record �%s:%s: error: the referred type %s does not exist �%s:%s: error: too many %%rec fields in record descriptor �%s:%s: error: value for %s should be a list of field names. �%s:%s: error: value for %s should be a number optionally preceded by >, <, >= or <=. �%s:%s: error: value for %s[%zd] is not a list of field names �%s:%s: error: value for %s[%zd] is not a valid selection expression �'�'@timespec' - always UTC�(C)�--password|-s must be used as an operation argument. �: error: �: warning: �Actions: -s, --set=VALUE change the value of the selected fields. -a, --add=VALUE add the selected fields with the given value. -S, --set-add=VALUE change the value of the selected fields. If they don't exist then add a new field with that value. -r, --rename=NAME rename the selected fields to a given name. If an entire record set is selected then the field is renamed in the record descriptor as well. -d, --delete delete the selected fields. -c, --comment comment out the selected fields. �Alter or delete fields in records. �Apply a template to records read from standard input. �Check and fix rec files. �Convert an mdb file into a rec file. �Convert csv data into rec data. �Convert rec data into csv data. �Copyright (C) %s Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �De/Encryption options: -s, --password=PASSWORD encrypt/decrypt with this password. �Field selection options: -f, --fields=FIELDS comma-separated list of field names with optional subscripts. �General help using GNU software: <http://www.gnu.org/gethelp/> �If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. �Insert new records in a rec database. �Invalid back reference�Invalid character class name�Invalid collation character�Invalid content of \{\}�Invalid preceding regular expression�Invalid range end�Invalid regular expression�Memory exhausted�No match�No previous regular expression�Operations: --check check integrity of the specified file. Default. --sort sort the records in the specified file. --auto insert auto-generated fields in records missing them. �Output options: -p, --print=FIELDS comma-separated list of fields to print for each matching record. -P, --print-values=FIELDS as -p, but print only the values of the selected fields. -R, --print-row=FIELDS as -P, but separate the values with spaces instead of newlines. -c, --count print a count of the matching records instead of the records themselves. �Packaged by %s �Packaged by %s (%s) �Password again: �Password: �Premature end of regular expression�Print information about the types of records stored in the input. �Record selection options: -i, --case-insensitive make strings case-insensitive in selection expressions. -t, --type=TYPE operate on records of the specified type only. -e, --expression=RECORD_EXPR selection expression. -q, --quick=STR select records with fields containing a string. -n, --number=NUM,... select specific records by position, with ranges. -m, --random=NUM select a given number of random records. �Regular expression too big�Remove (or comment out) records from a rec file. �Report %s bugs to: %s �Report bugs to: %s �Select and print rec data. �Special options: --print-sexps print the data in sexps instead of rec format. �Special options: -S, --print-sexps print the data in sexps instead of rec format. �Success�TZ="%s" environment value�TZ="%s" in date string�TZ="UTC0" environment value or -u�Trailing backslash�Unknown system error�Unmatched ( or \(�Unmatched ) or \)�Unmatched [, [^, [:, [., or [=�Unmatched \{�Usage: csv2rec [OPTIONS]... [CSV_FILE] �Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE] �Usage: rec2csv [OPTIONS]... [REC_FILE] �Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [FILE] �Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE] �Usage: recfmt [OPTION]... [TEMPLATE] �Usage: recinf [OPTION]... [FILE]... �Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE] �Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]... �Usage: recset [OPTION]... [FILE]... �Written by %s and %s. �Written by %s, %s, %s, %s, %s, %s, %s, %s, %s, and others. �Written by %s, %s, %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, and %s. �Written by %s, %s, %s, and %s. �Written by %s, %s, and %s. �Written by %s. �`�a -f should be followed by a -v �a -v should be preceded by a -f �can't open file %s for reading. �cannot create a unique name. �cannot read file %s �cannot specify -[pPR] and also -c. �cannot specify -c and also -p. �cannot specify -e and also -n �cannot specify -e and also -q �cannot specify -m and also -e �cannot specify -m and also -n �cannot specify -m and also -q �cannot specify -n and also -e �cannot specify -n and also -q �could not open file %s �creating the field expression. �date�datetime�day�don't specify a template in the command line and -f at the same time. �duplicated record set '%s' from %s. �error evaluating expression in a template slot. �error while parsing CSV file: %s �error while parsing the record provided by -r �error: %s:%d �error: adding relative date resulted in an invalid date: '%s' �error: adding relative time caused an overflow �error: cannot read file %s �error: initial year out of range �error: invalid date/time value: �error: parsing failed �error: parsing failed, stopped at '%s' �error: timezone %d caused time_t overflow �error: tzalloc ("%s") failed �error: unknown word '%s' �error: year, month, or day overflow �expected an integer between %d and %d.�failed to initialize csv parser �failed to normalise field name %s �failed to normalise record type name %s �failed to normalise the field name %s �file %s is not writable. �file does not appear to be an Access database �final: %s (UTC%s) �final: %s (UTC) �final: %s (unknown time zone offset) �hybrid�ignoring a request to delete all records of type %s. �incorrect timezone�input timezone: �internal error creating fex. �internal error creating the field expression. �internal error: REC_FEX_MAX_ELEMS exceeded. Please report this. �internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() in rec_type_new(). �internal error: rec_int_rec_extract_file: error compiling regexp. �internal error: rec_int_rec_extract_url: error compiling regexp. �internal error: rec_match: error compiling regexp. �internal error: recutl_index_list_parse: error compiling regexp. �invalid 'bool' value.�invalid 'field' value.�invalid 'line' value.�invalid 'range' value.�invalid 'real' value.�invalid 'uuid' value.�invalid aggregate function '%s' �invalid date.�invalid email.�invalid enum value.�invalid expression in a template slot. �invalid field expression in -f. �invalid field name %s. �invalid field name '%s' in header �invalid field name list in -S. �invalid field names in -G. �invalid field names in -S. �invalid integer.�invalid list of fields in -%c �invalid list of indexes in -n �invalid selection expression �invalid selection expression. �joins can only be used when a named record set is selected. �local_zone�memory exhausted�missing timezone�more than one password was specified �new start date: '%s' is '%s' �no records of type %s found. �number�number of seconds�only one field can be specified as join criteria. �only one field list can be specified as a grouping criteria. �only one field list can be specified as a sorting criteria. �only one list of fields can be specified as a sorting criteria. �operation aborted due to integrity failures. �out of memory �parsed %s part: �parsed date/time string�please provide a value for the field %s �please specify a correct field name to -j|--join. �please specify just one action. �please specify just one operation. �please specify just one password. �please specify some field with -f. �please use --force or --decrypt �preserving permissions for %s�recfmt_apply_template: error compiling regexp. Please report this. �relative�renaming file %s to %s �setting permissions for %s�several record types found. Please use -t to specify one. �starting date/time: '%s' �system default�the database contains already encrypted fields �the provided passwords don't match. �the rename operation requires just one field with an optional subscript. �the specified operation does not require a password. �time�timezone: TZ="%s" environment value �timezone: Universal Time �timezone: system default �today/this/now �unknown operation in recfix: please report this as a bug. �use --force if you really want to proceed, or use either -n or -e. �use --force to skip the integrity check. �use --verbose to get a detailed report. �using current date as starting value: '%s' �using current time as starting value: '%s' �using specified time as starting value: '%s' �value does not match the regexp.�value too large. Expected a size <= %zu.�warning: day (%s) ignored when explicit dates are given �warning: daylight saving time changed after date adjustment �warning: daylight saving time changed after time adjustment �warning: month/year adjustment resulted in shifted dates: �warning: when adding relative days, it is recommended to specify noon �warning: when adding relative months/years, it is recommended to specify the 15th of the months �write error�zone�Project-Id-Version: recutils-1.8 Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org POT-Creation-Date: 2022-04-16 19:38+0200 PO-Revision-Date: 2020-11-09 18:00+0200 Last-Translator: МироÑлав Ðиколић <miroslavnikolic@rocketmail.com> Language-Team: Serbian <(nothing)> Language: sr MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Plural-Forms: nplurals=3; plural=(n%10==1 && n%100!=11 ? 0 : n%10>=2 && n%10<=4 && (n%100<10 || n%100>=20) ? 1 : 2); X-Bugs: Report translation errors to the Language-Team address. � ÐапиÑао Хозе Е. Маркези.� неиÑправна комбинација дана/меÑеца; � непоÑтојеће због времена чувања дневног Ñветла; � нормализовано време: „%s“ � прекорачење бројевне вредноÑти; � --encrypt шифрује поверљива поља у наведеној датотеци. --decrypt дешифрује поверљива поља у наведеној датотеци. � --help иÑпиÑује помоћ и излази. --version приказује издање и излази. � --no-external не кориÑти Ñпољне опиÑнике. --force мења запиÑе чак и ако нарушава ограничења запиÑа. � --no-external не кориÑти Ñпољног опиÑника. --force приморава захтевану радњу. � дотерана Г М Д: %s %02d %02d � могући разлози: � нови датум/времена = „%s“ � време које доÑтавља кориÑник: „%s“ � нормализована Г М Д: %s %02d %02d � -c, --comment Ñтавља у напомену подударајуће запиÑе умеÑто да их брише. --force брише чак и у потенцијално опаÑним Ñитуацијама, и ако бриÑање нарушава ограничења запиÑа. --no-external не кориÑти Ñпољне опиÑнике. --verbose даје опширан извештај ако провера целовитоÑти не уÑпе. � -d, --delim=знак подешава раздвајач (оÑновно је ,) -t, --type=ВРСТРÑкуп запиÑа за претварање у цÑв; ако је овај параматар изоÑтављен онда Ñе кориÑти оÑновни Ñкуп запиÑа -S, --sort=ПОЉРређа резултат према наведеном пољу. � -d, --include-descriptors иÑпиÑује опиÑнике запиÑа поред поклопљених запиÑа. -C, --collapse не дели резултат у запиÑима новим редовима. -S, --sort=ПОЉЕ,... ређа излазе према наведеном пољу. -G, --group-by=ПОЉЕ,... групише запиÑе према наведеним пољима. -U, --uniq уклања удвоÑтручена поља у излазним запиÑима. � -f, --field=ÐИЗ назив поља; трба да га Ñледи -v. -v, --value=ÐИЗ вредноÑÑ‚ поља; трба да јој претходи -f. -r, --record=ÐИЗ Ð·Ð°Ð¿Ð¸Ñ ÐºÐ¾Ñ˜Ð¸ ће бити уметнут у датотеку. --force умеће Ð·Ð°Ð¿Ð¸Ñ Ñ‡Ð°Ðº и ако нарушава ограничења запиÑа. --no-external не кориÑти Ñпољне опиÑнике. --no-auto не умеће ÑамоÑтворена поља. --verbose даје опширан извештај ако провера целовитоÑти не уÑпе. � -f, --file=ÐÐЗИВДÐТОТЕКЕ чита шаблон за примену из датотеке. � -j, --join=ПОЉЕ обавља унутрашње придруживање кориÑтећи наведено поље. � -s, --password=ÐИЗ дешифрује поверљива поља датом лозинком. � -s, --password=ÐИЗ шифрује поверљива поља датом лозинком. � -s, --system-tables укључује ÑиÑтемÑке табеле. -e, --keep-empty-fields не избацује празна поља у излазу запиÑа. -l, --list-tables проÑлеђује ÑпиÑак назива табела Ñадржаних у мдб датотеци. � -t, --type=ВРСТÐ_ЗÐПИСРиÑпиÑује податке о запиÑима који имају наведене врÑте. -d, --descriptor укључује пуне опиÑнике запиÑа. -n, --names-only резултира Ñамо називима датотека запиÑа пронађених у уноÑу. �%s матична Ñтраница: <%s> �%s матична Ñтраница: <http://www.gnu.org/software/recutils/> �%s потпроцеÑ�%s Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ð½Ð¸Ñ˜Ðµ уÑпео�%s Ð¿Ð¾Ñ‚Ð¿Ñ€Ð¾Ñ†ÐµÑ Ñ˜Ðµ добио кобни Ñигнал %d�%s: %lu: овај ред Ñадржи %lu поља, али Ñу прочитана %lu поља заглавља �%s: грешка: број запиÑа врÑте „%s“ треба бити %zd. �%s: грешка: премало запиÑа врÑте %s. Ðајмање је дозвољено %zd. �%s: грешка: превише запиÑа врÑте %s. Ðајвише је дозвољено %zd. �%s: неиÑправна опција -- „%c“ �%s: опција „%s%s“ не дозвољава аргумент �%s: опција „%s%s“ је нејаÑна �%s: опција „%s%s“ је нејаÑна; могућноÑти:�%s: опција „%s%s“ захтева аргумент �%s: опција захтева аргумент -- „%c“ �%s: непозната опција „%s%s“ �%s:%s: грешка: %%constraint[%d] је повређено у запиÑу �%s:%s: грешка: %s не Ñадржи податке за врÑту %s. �%s:%s: грешка: %s не Ñадржи иÑправне податке запиÑа. �%s:%s: грешка: Ñамо-повећано поље „%s“ треба бити врÑте „int“ (цео број), „range“ (опÑег) или „date“ (датум) �%s:%s: грешка: Ñамо-повећано поље „%s“ треба бити врÑте „int“ (цео број), „range“ (опÑег), „uuid“ (ујиб) или „date“ (датум) �%s:%s: грешка: поверљиво поље није шифровано �%s:%s: грешка: не могу да довучем удаљени опиÑник Ñа адреÑе %s. �%s:%s: грешка: не могу прочитам Ñпољни опиÑник из датотеке %s. �%s:%s: грешка: удвоÑтрчена вредноÑÑ‚ кључа у пољу „%s“ у запиÑу �%s:%s: грешка: очекиван је зарезом раздвојен ÑпиÑак поља пре Ñпецификације врÑте �%s:%s: грешка: очекиван је назив врÑте пре Ñпецификације врÑте �%s:%s: грешка: поље „%s“ није допуштено у овом Ñкупу запиÑа �%s:%s: грешка: поље „%s“ треба да буде јединÑтвено у овом запиÑу �%s:%s: грешка: неиÑправна врÑта запиÑа %s �%s:%s: грешка: неиÑправна Ñпецификација врÑте �%s:%s: грешка: неиÑправна Ñпецификација одреднице врÑте �%s:%s: грешка: кључно поље „%s“ није пронађено у запиÑу �%s:%s: грешка: обавезно поље „%s“ није пронађено у запиÑу �%s:%s: грешка: недоÑтаје поље „%%rec“ у опиÑнику запиÑа �%s:%s: грешка: више кључних поља „%s“ у запиÑу �%s:%s: грешка: Ñамо једно %%key поље је дозвољено у опиÑнику запиÑа �%s:%s: грешка: Ñамо једно %%size поље је дозвољено у опиÑнику запиÑа �%s:%s: грешка: Ñамо једно %%sort поље је дозвољено у опиÑнику запиÑа �%s:%s: грешка: забрањено поље „%s“ је пронађено у запиÑу �%s:%s: грешка: одноÑна врÑта %s не поÑтоји �%s:%s: грешка: превише %%rec поља у опиÑнику запиÑа �%s:%s: грешка: вредноÑÑ‚ за „%s“ треба бити ÑпиÑак назива поља. �%s:%s: грешка: вредноÑÑ‚ за „%s“ треба бити број коме по могућноÑти претходи >, <, >= или <=. �%s:%s: грешка: вредноÑÑ‚ за %s[%zd] није ÑпиÑак назива поља �%s:%s: грешка: вредноÑÑ‚ за %s[%zd] није иÑправан израз избора �“�„@timespec“ – увек КУВ�©�„--password|-s“ мора бити коришћено као аргумент радње. �: грешка: �: упозорење: �Радње: -s, --set=ВРЕДÐОСТ мења вредноÑÑ‚ изабраних поља. -a, --add=ВРЕДÐОСТ додаје изабрана поља Ñа датом вредношћу. -S, --set-add=ВРЕДÐОСТ мења вредноÑÑ‚ изабраних поља. Ðко не поÑтоје тада додаје ново поље Ñа том вредношћу. -r, --rename=ÐÐЗИВ преименује изабрана поља на дати назив. Ðко је изабран читав Ñкуп запиÑа тада је поље такође применовано и у опиÑнику. -d, --delete брише изабрана поља. -c, --comment Ñтавља у напомену изабрана поља. �Измените или обришите поља у запиÑу. �Примените шаблон на читања запиÑа Ñа Ñтандардног улаза. �Проверите и поправите датотеке запиÑа. �Претворите мдб датотеку у датотеку запиÑа. �Претворите цÑв податке у податке запиÑа. �Претворите податке запиÑа у цÑв податке. �ÐуторÑка права (C) %s Хозе Е. Маркези. Лиценца ОЈЛв3+: ГÐУ ОЈЛ издање 3 или новије <http://gnu.org/licenses/gpl.html>. Ово је Ñлободан Ñофтвер: Ñлободни Ñте да га мењате и раÑподељујете. Ðе поÑтоји ÐИКÐКВРГÐРÐÐЦИЈÐ, у оквирима дозвољеним законом. �Опције де/шифровања: -s, --password=ЛОЗИÐКРшифрује/дешифрује овом лозинком. �Опције избора поља: -f, --fields=ПОЉРзарезом раздвојен ÑпиÑак назива поља Ñа опционалним подÑкриптама. �Општа помоћ кориÑтећи ГÐУ Ñофтвер: <http://www.gnu.org/gethelp/> �Ðко ДÐТОТЕКРније наведена онда наредба делује као пропуÑник, добављајући податке Ñа Ñтандардног улаза и запиÑујући резултат на Ñтандардни излаз. �Уметните нове запиÑе у базу података. �ÐеиÑправна повратна референца�ÐеиÑправан назив клаÑе знака�ÐеиÑправан знак поретка�ÐеиÑправан Ñадржај \{\}�ÐеиÑправан регуларан израз који претходи�ÐеиÑправан крај опÑега�ÐеиÑправан регуларан израз�Меморија је потрошена�Ðема подударања�Ðема претходног регуларног израза�Радње: --check cпроверава целовитоÑÑ‚ наведене датотеке. ОÑновно. --sort ређа запиÑе у наведеној датотеци. --auto умеће ÑамоÑтворена поља у запиÑима који их немају. �Опције излаза: -p, --print=ПОЉРзарезом раздвојен ÑпиÑак поља за иÑпиÑивање за Ñваки поклопљени запиÑ. -P, --print-values=ПОЉРкао -p, али иÑпиÑује Ñамо вредноÑÑ‚ изабраних поља. -R, --print-row=ПОЉРкао -P, али раздваја вредноÑти проÑторима умеÑто новим редовима. -c, --count иÑпиÑује број поклопљених запиÑа умеÑто Ñамих запиÑа. �Запаковао је %s �Запаковао је %s (%s) �Поновите лозинку: �Лозинка: �Прерани крај регуларног израза�ИÑпиÑшите податке о врÑтама запиÑа уÑкладиштених у улазу. �Опције избора запиÑа: -i, --case-insensitive чини ниÑке неоÑетљиве на величину Ñлова у изразима избора. -t, --type=ВРСТРради Ñамо над запиÑима наведене врÑте. -e, --expression=ИЗРÐЗ_ЗÐПИСРизраз избора. -q, --quick=ÐИЗ бира запиÑе Ñа пољима која Ñадрже ниÑку. -n, --number=БРОЈ,... бира нарочите запиÑе према положају, Ñа опÑезима. -m, --random=БРОЈ бира дати број наÑумичних запиÑа. �Регуларни израз је превелик�Уклоните (или Ñтавите у напомену) запиÑе из датотеке запиÑа. �Грешке програма „%s“ пријавите на: %s �Грешке пријавите на: %s �Изаберите и иÑпиÑшите податке запиÑа. �ПоÑебне опције: --print-sexps иÑпиÑује податке у ÑÐµÑ…Ð¿Ñ ÑƒÐ¼ÐµÑто у рек формату. �ПоÑебне опције: -S, --print-sexps иÑпиÑује податке у ÑÐµÑ…Ð¿Ñ ÑƒÐ¼ÐµÑто у рек формату. �УÑпешно�ВЗ=„%s“ променљива окружења�ВЗ=„%s“ у ниÑци датума�ВЗ=„UTC0“ променљива окружења или -u�Пратећа контра коÑа црта�Ðепозната грешка ÑиÑтема�Ðе одговара ( или \(�Ðе одговара ) или \)�Ðе одговара [, [^, [:, [., или [=�Ðе одговара \{�Употреба: csv2rec [ОПЦИЈЕ]... [ЦСВ_ДÐТОТЕКÐ] �Употреба: mdb2rec [ОПЦИЈЕ]... МДБ_ДÐТОТЕКР[ТÐБЕЛÐ] �Употреба: rec2csv [ОПЦИЈЕ]... [ДÐТОТЕКÐ_ЗÐПИСÐ] �Употреба: recdel [ОПЦИЈЕ]... [-t ВРСТÐ] [-n БРОЈ | -e ИЗРÐЗ_ЗÐПИСР| -q ÐИЗ | -m БРОЈ] [ДÐТОТЕКÐ] �Употреба: recfix [ОПЦИЈÐ]... [РÐДЊÐ] [ОПЦИЈÐ_РÐДЊЕ]... [ДÐТОТЕКÐ] �Употреба: recfmt [ОПЦИЈÐ]... [ШÐБЛОÐ] �Употреба: recinf [ОПЦИЈÐ]... [ДÐТОТЕКÐ]... �Употреба: recins [ОПЦИЈÐ]... [-t ВРСТÐ] [-n БРОЈ | -e ИЗРÐЗ_ЗÐПИСР| -q ÐИЗ | -m БРОЈ] [(-f ÐÐЗИВ -v ÐИСКÐ) | -r ПОДÐЦИЗÐПИСÐ]... [ДÐТОТЕКÐ] �Употреба: recsel [ОПЦИЈÐ]... [-t ВРСТÐ] [-j ПОЉЕ] [-n ИÐДЕКСИ | -e ИЗРÐЗ_ЗÐПИСР| -q ÐИСКР| -m БРОЈ] [-c | (-p|-P) ИЗРÐЗ_ПОЉÐ] [ДÐТОТЕКÐ]... �Употреба: recset [ОПЦИЈÐ]... [ДÐТОТЕКÐ]... �ÐапиÑали Ñу %s и %s. �ÐапиÑали Ñу %s, %s, %s %s, %s, %s, %s %s, %s и други. �ÐапиÑали Ñу %s, %s, %s %s, %s, %s, %s %s, и %s. �ÐапиÑали Ñу %s, %s, %s %s, %s, %s, %s и %s. �ÐапиÑали Ñу %s, %s, %s %s, %s, %s и %s. �ÐапиÑали Ñу %s, %s, %s %s, %s и %s. �ÐапиÑали Ñу %s, %s, %s %s и %s. �ÐапиÑали Ñу %s, %s, %s и %s. �ÐапиÑали Ñу %s, %s и %s. �ÐапиÑао је %s. �„�након „-f“ треба да Ñледи „-v“ �иÑпред „-v“ треба да претходи „-f“ �не могу да отворим датотеку „%s“ за читање. �не могу да Ñтворим јединÑтвени назив. �не могу да прочитам датотеку „%s“ �не можете да наведете и „-[pPR]“ и „-c“. �не можете да наведете и „-c“ и „-p“. �не можете да наведете и „-e“ и „-n“ �не можете да наведете и „-e“ и „-q“ �не можете да наведете и „-m“ и „-e“ �не можете да наведете и „-m“ и „-n“ �не можете да наведете и „-m“ и „-q“ �не можете да наведете и „-n“ и „-e“ �не можете да наведете и „-n“ и „-q“ �не могу да отворим датотеку %s �Ñтварам израз поља. �датум�датум и време�дан�не наводи шаблон на линији наредби и „-f“ у иÑто време. �удвоÑтручени Ñкуп запиÑа „%s“ из %s. �грешка процењивања израза у прикључку шаблона. �грешка приликом обраде ЦСВ датотеке: %s �грешка за време обраде запиÑа доÑтављеног „-r“-ом �грешка: %s:%d �грешка: додавање релативног датума резултирало је неиÑправним датумом: %s �грешка: додавање релативног времена је довело до прекорачења �грешка: не могу да читам датотеку „%s“ �грешка: почетна година је ван опÑега �грешка: неиÑправна вредноÑÑ‚ датума/времена: �грешка: обрада није уÑпела �грешка: обрада није уÑпела, зауÑтавих Ñе на „%s“ �грешка: временÑка зона %d је довела до „time_t“ прекорачења �грешка: „tzalloc“ (%s) није уÑпело �грешка: непозната реч „%s“ �грешка: прекорачење године, меÑеца, или дана �очекиван је цео број између %d и %d.�ниÑам уÑпео да покренем цÑв обрађивача �ниÑам уÑпео да нормализујем назив поља %s �ниÑам уÑпео да нормализујем назив врÑте запиÑа %s �ниÑам уÑпео да нормализујем назив поља %s �датотека „%s“ није упиÑива. �датотека не изгледа да је база пдатака ÐкÑеÑа �крајње: %s (КУВ%s) �крајње: %s (КУВ) �крајње: %s (непознат померај временÑке зоне) �хибрид�занемарује захтев за бриÑање Ñвих запиÑа врÑте %s. �неиÑправна временÑка зона�временÑка зона улаза: �унутрашња грешка Ñтварања фекÑа. �унутрашња грешка Ñтварања израза поља. �унутрашња грешка: „REC_FEX_MAX_ELEMS“ је превелико. Молим извеÑтите о овоме. �унутрашња грешка: врÑте-запиÑа: добих „REC_TYPE_NONE“ из „rec_type_parse_type_kind()“ у „rec_type_new()“. �унутрашња грешка: „rec_int_rec_extract_file“: грешка превођења регуларног израза. �унутрашња грешка: „rec_int_rec_extract_url“: грешка превођења регуларног израза. �унутрашња грешка: „rec_match“: грешка превођења регуларног израза. �унутрашња грешка: „recutl_index_list_parse“: грешка превођења регуларног израза. �неиÑправна вредноÑÑ‚ „bool“.�неиÑправна вредноÑÑ‚ „field“.�неиÑправна вредноÑÑ‚ „line“.�неиÑправна вредноÑÑ‚ „range“.�неиÑправна вредноÑÑ‚ „real“.�неиÑправна вредноÑÑ‚ „uuid“.�неиÑправна функција Ñпајања „%s“ �неиÑправан датум.�неиÑправна ел. пошта.�неиÑправна бројевна вредноÑÑ‚.�неиÑправан израз у прикључку шаблона. �неиÑправан израз поља у „-f“. �неиÑправан назив поља %s. �неиÑправан назив поља „%s“ у заглављу �неиÑправан ÑпиÑак назива поља у „-S“. �неиÑправни називи поља у „-G“. �неиÑправни називи поља у „-S“. �неиÑправ цео број.�неиÑправан ÑпиÑак поља у „-%c“ �неиÑправан ÑпиÑак indeksa у „-n“ �неиÑправан израз избора �неиÑправан израз избора. �Ñпајања могу бити коришћена Ñамо када је изабран Ñкуп именованог запиÑа. �меÑна_зона�меморија је потрошена�недоÑтаје временÑка зона�наведено је неколико лозинки �нови датум почетка: „%s“ је „%s“ �ниÑу пронађени запиÑи врÑте %s. �број�број Ñекунди�Ñамо једно поље може бити наведено као мерило Ñпајања. �Ñамо један ÑпиÑак поља може бити наведен као мерило групиÑања. �Ñамо један ÑпиÑак поља може бити наведен као мерило ређања. �Ñамо један ÑпиÑак поља може бити наведен као мерило ређања. �радња је прекинута уÑлед неуÑпеха целовитоÑти. �нема више меморије �обрадих %s део: �обрађена ниÑка датума/времена�молим обезбедите вредноÑÑ‚ за поље %s �молим наведите иÑправан назив поља за „-j|--join“. �молим наведите барем једну радњу. �молим наведите барем једну радњу. �молим наведите барем једну лозинку. �молим наведите неко поље Ñа „-f“. �молим кориÑтите „--force“ или „--decrypt“ �причувавам овлашћења за „%s“�фмтзпÑ_примени_шаблон: грешка превођења регуларног израза. Молим пријавите ово. �релативно�преименујем датотеку „%s“ у „%s“ �поÑтављам овлашћења за „%s“�пронашао Ñам неколико врÑта запиÑа. Молим кориÑтите „-t“ да наведете једну. �почетни датум/време: „%s“ �оÑновноÑÑ‚ ÑиÑтема�база података Ñадржи већ шифрована поља �дате лозинке Ñе не подударају. �радња преименовања захтева Ñамо једно поље Ñа опционалним подÑкриптом. �наведена радња не захтева лозинку. �време�временÑка зона: ВЗ=„%s“ вредноÑÑ‚ окружења �времнÑка зона: Универзално време �временÑка зона: оÑновноÑти ÑиÑтема �данаÑ/ово/Ñада �непозната радња у поправци запиÑа: молим пријавите ово као грешку. �кориÑтите „--force“ ако заиÑта желите да наÑтавите, или кориÑтите „-n“ или „-e“. �кориÑтите „--force“ да преÑкочите проверу целовитоÑти. �кориÑтите „--verbose“ да добијете опширан извештај. �кориÑтим текући датум као почетну вредноÑÑ‚: „%s“ �кориÑтим текуће време као почетну вредноÑÑ‚: „%s“ �кориÑтим наведено време као почетну вредноÑÑ‚: „%s“ �вредноÑÑ‚ Ñе не поклапа Ñа регуларним изразом.�вредноÑÑ‚ је превелика. Очекивана вредноÑÑ‚ је <= %zu.�упозорење: дан (%s) је занемарен када Ñу дати изричити датуми �упозорење: време очувања дневне ÑветлоÑти је измењено након дотеривања датума �упозорење: време очувања дневне ÑветлоÑти је измењено након дотеривања времена �упозорење: дотеривање меÑеца/године је резултирало промењеним датумима: �упозорење: приликом додавања релативних дана, препоручује Ñе навођење поноћи �упозорење: приликом додавања релативног меÑеца/године, препоручује Ñе навођење 15-ог у меÑецу �грешка пиÑања�зона�PRIdMAX�year: %04�%s (day ordinal=% number=%d)�number of seconds: %�warning: value % has % digits. Assuming YYYY/MM/DD �warning: value % has less than 4 digits. Assuming MM/DD/YY[YY] �warning: adjusting year value % to % �error: out-of-range year % �error: invalid hour %%s �error: day '%s' (day ordinal=% number=%d) resulted in an invalid date: '%s' �after date adjustment (%+ years, %+ months, %+ days), �'%s' = % epoch-seconds �after time adjustment (%+ hours, %+ minutes, %+ seconds, %+d ns), � new time = % epoch-seconds �final: %.%09d (epoch-seconds) �година: %04�%s (редни дан=% број=%d)�број Ñекунди: %�упозорење: вредноÑÑ‚ % има % цифре. ПретпоÑтављам ГГГГ/ММ/ДД �упозорење: вредноÑÑ‚ % има мање од 4 цифара. ПретпоÑтављам ММ/ДД/ГГ[ГГ] �упозорење: дотерујем вредноÑÑ‚ године % на % �грешка: година ван опÑега % �грешка: неиÑправан Ñ‡Ð°Ñ %%s �грешка: дан „%s“ (редни дан=% број=%d) је резултирао неиÑправним датумом: %s �након дотеривања датума (%+ године, %+ меÑеца, %+ дана), �„%s“ = % Ñекунде-епохе �након дотеривања времена (%+ чаÑа, %+ минута, %+ Ñекунде, %+d ns), � ново време = % Ñекунде-епохе �крајње: %.%09d (Ñекунде епохе) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/uk.po�������������������������������������������������������������������������������0000644�0000000�0000000�00000231113�14226577415�011517� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Translation of recutils to Ukrainian # Copyright (C) 2011 Free Software Foundation, Inc. # This file is distributed under the same license as the recutils package. # # Yuri Chornoivan <yurchor@ukr.net>, 2011, 2012, 2013, 2014, 2019. msgid "" msgstr "" "Project-Id-Version: GNU recutils 1.8\n" "Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org\n" "POT-Creation-Date: 2022-04-16 19:38+0200\n" "PO-Revision-Date: 2019-01-03 21:45+0200\n" "Last-Translator: Yuri Chornoivan <yurchor@ukr.net>\n" "Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net>\n" "Language: uk\n" "MIME-Version: 1.0\n" "Content-Type: text/plain; charset=UTF-8\n" "Content-Transfer-Encoding: 8bit\n" "X-Bugs: Report translation errors to the Language-Team address.\n" "X-Generator: Lokalize 2.0\n" "Plural-Forms: nplurals=1; plural=0;\n" #: lib/closeout.c:122 msgid "write error" msgstr "помилка запиÑу" #: lib/copy-acl.c:54 lib/copy-file.c:215 #, c-format msgid "preserving permissions for %s" msgstr "зберігаємо права доÑтупу Ð´Ð»Ñ %s" #: lib/copy-file.c:192 #, fuzzy, c-format msgid "error while opening %s for reading" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %s Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ….\n" #: lib/copy-file.c:196 #, fuzzy, c-format msgid "cannot open backup file %s for writing" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %s Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ….\n" #: lib/copy-file.c:200 #, fuzzy, c-format msgid "error reading %s" msgstr "помилка: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… з файла %s\n" #: lib/copy-file.c:204 #, c-format msgid "error writing %s" msgstr "" #: lib/copy-file.c:208 #, fuzzy, c-format msgid "error after reading %s" msgstr "помилка: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… з файла %s\n" #: lib/error.c:195 msgid "Unknown system error" msgstr "Ðевідома ÑиÑтемна помилка" #: lib/execute.c:348 lib/wait-process.c:291 lib/wait-process.c:365 #, c-format msgid "%s subprocess failed" msgstr "Помилка підпроцеÑу %s" #: lib/getopt.c:278 #, c-format msgid "%s: option '%s%s' is ambiguous\n" msgstr "%s: параметр «%s%s» не Ñ” однозначним\n" #: lib/getopt.c:284 #, c-format msgid "%s: option '%s%s' is ambiguous; possibilities:" msgstr "%s: неоднозначний параметр «%s%s»; можливі варіанти:" #: lib/getopt.c:319 #, c-format msgid "%s: unrecognized option '%s%s'\n" msgstr "%s: нерозпізнаний параметр «%s%s»\n" #: lib/getopt.c:345 #, c-format msgid "%s: option '%s%s' doesn't allow an argument\n" msgstr "%s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «%s%s» не передбачено\n" #: lib/getopt.c:360 #, c-format msgid "%s: option '%s%s' requires an argument\n" msgstr "%s: до параметра «%s%s» Ñлід додати аргумент\n" #: lib/getopt.c:621 #, c-format msgid "%s: invalid option -- '%c'\n" msgstr "%s: некоректний параметр — «%c»\n" #: lib/getopt.c:636 lib/getopt.c:682 #, c-format msgid "%s: option requires an argument -- '%c'\n" msgstr "%s: до параметра Ñлід додати аргумент — «%c»\n" #: lib/obstack.c:337 lib/obstack.c:339 lib/xalloc-die.c:34 msgid "memory exhausted" msgstr "пам’Ñть вичерпано" #: lib/openat-die.c:38 #, c-format msgid "unable to record current working directory" msgstr "" #: lib/openat-die.c:57 #, c-format msgid "failed to return to initial working directory" msgstr "" #: parse-datetime.y:440 parse-datetime.y:540 #, c-format msgid "parsed %s part: " msgstr "оброблена чаÑтина %s: " #: parse-datetime.y:455 #, c-format msgid "year: %04<PRIdMAX>" msgstr "рік: %04<PRIdMAX>" #: parse-datetime.y:483 #, c-format msgid "%s (day ordinal=%<PRIdMAX> number=%d)" msgstr "%s (порÑдковий день=%<PRIdMAX> номер=%d)" #: parse-datetime.y:514 #, c-format msgid "number of seconds: %<PRIdMAX>" msgstr "кількіÑть Ñекунд: %<PRIdMAX>" #: parse-datetime.y:547 msgid "today/this/now\n" msgstr "Ñьогодні/цÑ/зараз\n" #: parse-datetime.y:612 msgid "number of seconds" msgstr "кількіÑть Ñекунд" #: parse-datetime.y:625 msgid "datetime" msgstr "дата Ñ– чаÑ" #: parse-datetime.y:630 msgid "time" msgstr "чаÑ" #: parse-datetime.y:635 msgid "local_zone" msgstr "міÑцевий_поÑÑ" #: parse-datetime.y:640 msgid "zone" msgstr "поÑÑ" #: parse-datetime.y:645 msgid "date" msgstr "дата" #: parse-datetime.y:650 msgid "day" msgstr "день" #: parse-datetime.y:654 parse-datetime.y:761 parse-datetime.y:766 msgid "relative" msgstr "відноÑне" #: parse-datetime.y:658 msgid "number" msgstr "чиÑло" #: parse-datetime.y:662 msgid "hybrid" msgstr "гібридна" #: parse-datetime.y:820 #, c-format msgid "warning: value %<PRIdMAX> has %<PRIdMAX> digits. Assuming YYYY/MM/DD\n" msgstr "" "попередженнÑ: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %<PRIdMAX> ÑкладаєтьÑÑ Ð· %<PRIdMAX> цифр. ПрипуÑкаємо " "формат РРРР/ММ/ДД\n" #: parse-datetime.y:832 #, c-format msgid "" "warning: value %<PRIdMAX> has less than 4 digits. Assuming MM/DD/YY[YY]\n" msgstr "" "попередженнÑ: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %<PRIdMAX> міÑтить менше за 4 цифри. ПрипуÑкаємо " "формат ММ/ДД/РР[РР]\n" #: parse-datetime.y:1279 #, c-format msgid "warning: adjusting year value %<PRIdMAX> to %<PRIdMAX>\n" msgstr "попередженнÑ: коригуємо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾ÐºÑƒ %<PRIdMAX> до %<PRIdMAX>\n" #: parse-datetime.y:1289 #, c-format msgid "error: out-of-range year %<PRIdMAX>\n" msgstr "помилка: рік поза межами припуÑтимого діапазону — %<PRIdMAX>\n" #: parse-datetime.y:1520 #, c-format msgid "error: unknown word '%s'\n" msgstr "помилка: невідоме Ñлово «%s»\n" #: parse-datetime.y:1669 msgid "error: invalid date/time value:\n" msgstr "помилка: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð°Ñ‚Ð¸ або чаÑу:\n" #: parse-datetime.y:1670 #, c-format msgid " user provided time: '%s'\n" msgstr " чаÑ, наданий кориÑтувачем: «%s»\n" #: parse-datetime.y:1672 #, c-format msgid " normalized time: '%s'\n" msgstr " нормалізований чаÑ: «%s»\n" #: parse-datetime.y:1695 msgid " possible reasons:\n" msgstr " можливі причини:\n" #: parse-datetime.y:1697 msgid " non-existing due to daylight-saving time;\n" msgstr " не Ñ–Ñнує через викориÑÑ‚Ð°Ð½Ð½Ñ Ð»Ñ–Ñ‚Ð½ÑŒÐ¾Ð³Ð¾ чаÑу;\n" #: parse-datetime.y:1699 msgid " invalid day/month combination;\n" msgstr " некоректна ÐºÐ¾Ð¼Ð±Ñ–Ð½Ð°Ñ†Ñ–Ñ Ð´ÐµÐ½ÑŒ-міÑÑць;\n" #: parse-datetime.y:1700 msgid " numeric values overflow;\n" msgstr " Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ‡Ð¸Ñлових значень;\n" #: parse-datetime.y:1701 msgid "incorrect timezone" msgstr "помилковий чаÑовий поÑÑ" #: parse-datetime.y:1702 msgid "missing timezone" msgstr "не вказано чаÑового поÑÑу" #: parse-datetime.y:1810 msgid "error: initial year out of range\n" msgstr "помилка: початковий рік поза межами припуÑтимого діапазону\n" #: parse-datetime.y:1905 msgid "error: parsing failed\n" msgstr "помилка: не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸\n" #: parse-datetime.y:1906 #, c-format msgid "error: parsing failed, stopped at '%s'\n" msgstr "помилка: не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸, зупинилиÑÑ Ð½Ð° «%s»\n" #: parse-datetime.y:1916 msgid "input timezone: " msgstr "вхідний чаÑовий поÑÑ:" #: parse-datetime.y:1919 #, c-format msgid "'@timespec' - always UTC" msgstr "«@timespec» — завжди вÑеÑвітній Ñ‡Ð°Ñ (UTC)" #: parse-datetime.y:1921 #, c-format msgid "parsed date/time string" msgstr "оброблено Ñ€Ñдок дати Ñ– чаÑу" #: parse-datetime.y:1925 #, c-format msgid "TZ=\"%s\" in date string" msgstr "TZ=\"%s\" у Ñ€Ñдку дати" #: parse-datetime.y:1929 #, c-format msgid "TZ=\"UTC0\" environment value or -u" msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñередовища TZ=\"UTC0\" або -u" #: parse-datetime.y:1932 #, c-format msgid "TZ=\"%s\" environment value" msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñередовища TZ=\"%s\"" #: parse-datetime.y:1935 #, c-format msgid "system default" msgstr "типове Ð´Ð»Ñ ÑиÑтеми" #: parse-datetime.y:1977 msgid "error: year, month, or day overflow\n" msgstr "помилка: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾ÐºÑƒ, міÑÑÑ†Ñ Ð°Ð±Ð¾ днÑ\n" #: parse-datetime.y:1988 #, c-format msgid "error: invalid hour %<PRIdMAX>%s\n" msgstr "помилка: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð³Ð¾Ð´Ð¸Ð½ — %<PRIdMAX>%s\n" #: parse-datetime.y:1996 #, c-format msgid "using specified time as starting value: '%s'\n" msgstr "викориÑтовуємо вказаний Ñ‡Ð°Ñ Ñк початкове значеннÑ: «%s»\n" #: parse-datetime.y:1997 #, c-format msgid "using current time as starting value: '%s'\n" msgstr "викориÑтовуємо поточний Ñ‡Ð°Ñ Ñк початкове значеннÑ: «%s»\n" #: parse-datetime.y:2051 #, c-format msgid "error: tzalloc (\"%s\") failed\n" msgstr "помилка: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ tzalloc (\"%s\")\n" #: parse-datetime.y:2095 #, c-format msgid "" "error: day '%s' (day ordinal=%<PRIdMAX> number=%d) resulted in an invalid " "date: '%s'\n" msgstr "" "помилка: викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ð½Ñ Â«%s» (порÑдковий день=%<PRIdMAX> номер=%d) дало " "некоректну дату: «%s»\n" #: parse-datetime.y:2106 #, c-format msgid "new start date: '%s' is '%s'\n" msgstr "нова початкова дата: «%s» Ñ” «%s»\n" #: parse-datetime.y:2115 #, c-format msgid "using current date as starting value: '%s'\n" msgstr "викориÑтовуємо поточну дату Ñк початкове значеннÑ: «%s»\n" #: parse-datetime.y:2119 #, c-format msgid "warning: day (%s) ignored when explicit dates are given\n" msgstr "попередженнÑ: день (%s) ігноруєтьÑÑ, Ñкщо вказано Ñвні дати\n" #: parse-datetime.y:2123 #, c-format msgid "starting date/time: '%s'\n" msgstr "початкова дата Ñ– чаÑ: «%s»\n" #: parse-datetime.y:2133 msgid "" "warning: when adding relative months/years, it is recommended to specify the " "15th of the months\n" msgstr "" "попередженнÑ: при додаванні відноÑних міÑÑців Ñ– років рекомендовано " "вказувати 15-е чиÑло міÑÑців\n" #: parse-datetime.y:2138 msgid "warning: when adding relative days, it is recommended to specify noon\n" msgstr "" "попередженнÑ: при додаванні відноÑних днів рекомендовано вказувати південь\n" #: parse-datetime.y:2148 #, c-format msgid "error: %s:%d\n" msgstr "помилка: %s:%d\n" #: parse-datetime.y:2163 #, c-format msgid "error: adding relative date resulted in an invalid date: '%s'\n" msgstr "помилка: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñної дати призвело до некоректної дати: «%s»\n" #: parse-datetime.y:2172 #, c-format msgid "" "after date adjustment (%+<PRIdMAX> years, %+<PRIdMAX> months, %+<PRIdMAX> " "days),\n" msgstr "" "піÑÐ»Ñ ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ñ‚Ð¸ (%+<PRIdMAX> років, %+<PRIdMAX> міÑÑців, %+<PRIdMAX> " "днів),\n" #: parse-datetime.y:2176 #, c-format msgid " new date/time = '%s'\n" msgstr " нова дата Ñ– Ñ‡Ð°Ñ = «%s»\n" #: parse-datetime.y:2195 msgid "warning: daylight saving time changed after date adjustment\n" msgstr "попередженнÑ: змінено літній Ñ‡Ð°Ñ Ð¿Ñ–ÑÐ»Ñ ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ñ‚Ð¸\n" #: parse-datetime.y:2214 msgid "warning: month/year adjustment resulted in shifted dates:\n" msgstr "попередженнÑ: ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–ÑÑÑ†Ñ Ñ– року призвело до зÑуву дат:\n" #: parse-datetime.y:2217 #, c-format msgid " adjusted Y M D: %s %02d %02d\n" msgstr " кориговані Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾ÐºÑƒ, міÑÑÑ†Ñ Ñ– днÑ: %s %02d %02d\n" #: parse-datetime.y:2219 #, c-format msgid " normalized Y M D: %s %02d %02d\n" msgstr " нормалізоване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾ÐºÑƒ, міÑÑÑ†Ñ Ñ– днÑ: %s %02d %02d\n" #: parse-datetime.y:2248 #, c-format msgid "error: timezone %d caused time_t overflow\n" msgstr "" "помилка: викориÑÑ‚Ð°Ð½Ð½Ñ Ñ‡Ð°Ñового поÑÑу %d призвело до Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ time_t\n" #: parse-datetime.y:2258 #, c-format msgid "'%s' = %<PRIdMAX> epoch-seconds\n" msgstr "'%s' = %<PRIdMAX> Ñекунд епохи\n" #: parse-datetime.y:2286 msgid "error: adding relative time caused an overflow\n" msgstr "помилка: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñного чаÑу призвело до переповненнÑ\n" #: parse-datetime.y:2297 #, c-format msgid "" "after time adjustment (%+<PRIdMAX> hours, %+<PRIdMAX> minutes, %+<PRIdMAX> " "seconds, %+d ns),\n" msgstr "" "піÑÐ»Ñ ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡Ð°Ñу (%+<PRIdMAX> годин, %+<PRIdMAX> хвилин, %+<PRIdMAX> " "Ñекунд, %+d мкÑ),\n" #: parse-datetime.y:2303 #, c-format msgid " new time = %<PRIdMAX> epoch-seconds\n" msgstr " новий Ñ‡Ð°Ñ = %<PRIdMAX> Ñекунд епохи\n" #: parse-datetime.y:2319 msgid "warning: daylight saving time changed after time adjustment\n" msgstr "попередженнÑ: змінено літній Ñ‡Ð°Ñ Ð¿Ñ–ÑÐ»Ñ ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡Ð°Ñу\n" #: parse-datetime.y:2329 msgid "timezone: system default\n" msgstr "чаÑовий поÑÑ: типовий Ð´Ð»Ñ ÑиÑтеми\n" #: parse-datetime.y:2331 msgid "timezone: Universal Time\n" msgstr "чаÑовий поÑÑ: вÑеÑвітній чаÑ\n" #: parse-datetime.y:2333 #, c-format msgid "timezone: TZ=\"%s\" environment value\n" msgstr "чаÑовий поÑÑ: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñередовища TZ=\"%s\"\n" #: parse-datetime.y:2337 #, c-format msgid "final: %<PRIdMAX>.%09d (epoch-seconds)\n" msgstr "оÑтаточно: %<PRIdMAX>.%09d (Ñекунд епохи)\n" #: parse-datetime.y:2343 #, c-format msgid "final: %s (UTC)\n" msgstr "оÑтаточно: %s (UTC)\n" #: parse-datetime.y:2358 #, c-format msgid "final: %s (UTC%s)\n" msgstr "оÑтаточно: %s (UTC%s)\n" #: parse-datetime.y:2362 #, c-format msgid "final: %s (unknown time zone offset)\n" msgstr "оÑтаточно: %s (невідомий зÑув чаÑового поÑÑу)\n" #. TRANSLATORS: #. Get translations for open and closing quotation marks. #. The message catalog should translate "`" to a left #. quotation mark suitable for the locale, and similarly for #. "'". For example, a French Unicode local should translate #. these to U+00AB (LEFT-POINTING DOUBLE ANGLE #. QUOTATION MARK), and U+00BB (RIGHT-POINTING DOUBLE ANGLE #. QUOTATION MARK), respectively. #. #. If the catalog has no translation, we will try to #. use Unicode U+2018 (LEFT SINGLE QUOTATION MARK) and #. Unicode U+2019 (RIGHT SINGLE QUOTATION MARK). If the #. current locale is not Unicode, locale_quoting_style #. will quote 'like this', and clocale_quoting_style will #. quote "like this". You should always include translations #. for "`" and "'" even if U+2018 and U+2019 are appropriate #. for your locale. #. #. If you don't know what to put here, please see #. <https://en.wikipedia.org/wiki/Quotation_marks_in_other_languages> #. and use glyphs suitable for your language. #: lib/quotearg.c:355 msgid "`" msgstr "«" #: lib/quotearg.c:356 msgid "'" msgstr "»" #: lib/regcomp.c:122 msgid "Success" msgstr "УÑпіх" #: lib/regcomp.c:125 msgid "No match" msgstr "Ðе знайдено" #: lib/regcomp.c:128 msgid "Invalid regular expression" msgstr "Помилка у формальному виразі" #: lib/regcomp.c:131 msgid "Invalid collation character" msgstr "Ðекоректний Ñимвол порівнÑннÑ" #: lib/regcomp.c:134 msgid "Invalid character class name" msgstr "Ðекоректна назва клаÑу Ñимволів" #: lib/regcomp.c:137 msgid "Trailing backslash" msgstr "Кінцевий Ñимвол похилої риÑки" #: lib/regcomp.c:140 msgid "Invalid back reference" msgstr "Ðекоректне зворотне поÑиланнÑ" #: lib/regcomp.c:143 msgid "Unmatched [, [^, [:, [., or [=" msgstr "Ðеврівноважена поÑлідовніÑть [, [^, [:, [., або [=" #: lib/regcomp.c:146 msgid "Unmatched ( or \\(" msgstr "Ðеврівноважена поÑлідовніÑть ( або \\(" #: lib/regcomp.c:149 msgid "Unmatched \\{" msgstr "Ðеврівноважена поÑлідовніÑть \\{" #: lib/regcomp.c:152 msgid "Invalid content of \\{\\}" msgstr "Ðекоректний вміÑÑ‚ \\{\\}" #: lib/regcomp.c:155 msgid "Invalid range end" msgstr "Ðекоректне Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ" #: lib/regcomp.c:158 msgid "Memory exhausted" msgstr "Пам’Ñть вичерпано" #: lib/regcomp.c:161 msgid "Invalid preceding regular expression" msgstr "Помилка у попередньому формальному виразі" #: lib/regcomp.c:164 msgid "Premature end of regular expression" msgstr "Ðеочікуване Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ виразу" #: lib/regcomp.c:167 msgid "Regular expression too big" msgstr "Занадто об’ємний формальний вираз" #: lib/regcomp.c:170 msgid "Unmatched ) or \\)" msgstr "Ðеврівноважена поÑлідовніÑть ) або \\)" #: lib/regcomp.c:650 msgid "No previous regular expression" msgstr "Ðе виÑвлено попереднього формального виразу" #: lib/set-acl.c:46 #, c-format msgid "setting permissions for %s" msgstr "вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð² доÑтупу Ð´Ð»Ñ %s" #: lib/version-etc.c:73 #, c-format msgid "Packaged by %s (%s)\n" msgstr "ÐŸÐ°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾ %s (%s)\n" #: lib/version-etc.c:76 #, c-format msgid "Packaged by %s\n" msgstr "ÐŸÐ°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾ %s\n" #. TRANSLATORS: Translate "(C)" to the copyright symbol #. (C-in-a-circle), if this symbol is available in the user's #. locale. Otherwise, do not translate "(C)"; leave it as-is. #: lib/version-etc.c:83 msgid "(C)" msgstr "©" #. TRANSLATORS: The %s placeholder is the web address of the GPL license. #: lib/version-etc.c:88 #, fuzzy, c-format msgid "" "License GPLv3+: GNU GPL version 3 or later <%s>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "\n" "Умови Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ»Ð°Ð´ÐµÐ½Ð¾ у GPLv3+: GNU GPL верÑÑ–Ñ— 3 або новішій, " "<https://gnu.org/licenses/gpl.html>\n" "Це вільне програмне забезпеченнÑ: ви можете вільно змінювати Ñ– поширювати " "його.\n" "Вам не надаєтьÑÑ Ð–ÐžÐ”ÐИХ ГÐРÐÐТІЙ, окрім гарантій передбачених " "законодавÑтвом.\n" #. TRANSLATORS: %s denotes an author name. #: lib/version-etc.c:105 #, c-format msgid "Written by %s.\n" msgstr "Ðвтор — %s.\n" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:109 #, c-format msgid "Written by %s and %s.\n" msgstr "Ðвтори програми %s та %s.\n" #. TRANSLATORS: Each %s denotes an author name. #: lib/version-etc.c:113 #, c-format msgid "Written by %s, %s, and %s.\n" msgstr "Ðвтори: %s, %s та %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:120 #, c-format msgid "" "Written by %s, %s, %s,\n" "and %s.\n" msgstr "" "Ðвтори: %s, %s, %s\n" "та %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:127 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, and %s.\n" msgstr "" "Ðвтори: %s, %s, %s,\n" "%s та %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:134 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, and %s.\n" msgstr "" "Ðвтори: %s, %s, %s,\n" "%s, %s та %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:142 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, and %s.\n" msgstr "" "Ðвтори: %s, %s, %s,\n" "%s, %s, %s та %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:150 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "and %s.\n" msgstr "" "Ðвтори: %s, %s, %s,\n" "%s, %s, %s, %s\n" "та %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:159 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, and %s.\n" msgstr "" "Ðвтори: %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s та %s.\n" #. TRANSLATORS: Each %s denotes an author name. #. You can use line breaks, estimating that each author name occupies #. ca. 16 screen columns and that a screen line has ca. 80 columns. #: lib/version-etc.c:170 #, c-format msgid "" "Written by %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s, and others.\n" msgstr "" "Ðвтори: %s, %s, %s,\n" "%s, %s, %s, %s,\n" "%s, %s та інші.\n" #. TRANSLATORS: The placeholder indicates the bug-reporting address #. for this package. Please add _another line_ saying #. "Report translation bugs to <...>\n" with the address for translation #. bugs (typically your translation team's web or email address). #. TRANSLATORS: --help output 5+ (reports) #. TRANSLATORS: the placeholder indicates the bug-reporting address #. for this application. Please add _another line_ with the #. address for translation bugs. #. no-wrap #: lib/version-etc.c:249 utils/recutl.c:114 #, c-format msgid "Report bugs to: %s\n" msgstr "ПовідомлÑйте про вади на адреÑу: %s\n" #: lib/version-etc.c:251 utils/recutl.c:117 #, c-format msgid "Report %s bugs to: %s\n" msgstr "Про вади у %s повідомлÑйте на адреÑу %s\n" #: lib/version-etc.c:255 lib/version-etc.c:257 utils/recutl.c:121 #, c-format msgid "%s home page: <%s>\n" msgstr "Ð”Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñторінка %s: <%s>\n" #: lib/version-etc.c:260 #, fuzzy, c-format msgid "General help using GNU software: <%s>\n" msgstr "" "Загальна довідкова Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ñ‰Ð¾Ð´Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ " "GNU: <https://www.gnu.org/gethelp/>\n" #: lib/wait-process.c:232 lib/wait-process.c:264 lib/wait-process.c:326 #, c-format msgid "%s subprocess" msgstr "ÐŸÑ–Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ %s" #: lib/wait-process.c:283 lib/wait-process.c:355 #, c-format msgid "%s subprocess got fatal signal %d" msgstr "ПідпроцеÑом %s отримано Ñигнал щодо аварійного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ %d" #: src/rec-fex.c:726 #, c-format msgid "internal error: REC_FEX_MAX_ELEMS exceeded. Please report this.\n" msgstr "" "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: перевищено Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ REC_FEX_MAX_ELEMS. Будь лаÑка, " "повідомте авторам програми про цю помилку.\n" #: src/rec-int.c:132 src/rec-int.c:186 src/rec-int.c:243 src/rec-int.c:287 #: utils/recutl.c:199 msgid "out of memory\n" msgstr "не виÑтачає пам'Ñті\n" #: src/rec-int.c:147 #, c-format msgid "%s:%s: error: mandatory field '%s' not found in record\n" msgstr "%s:%s: помилка: у запиÑÑ– не виÑвлено обов’Ñзкового Ð¿Ð¾Ð»Ñ Â«%s»\n" #: src/rec-int.c:210 #, c-format msgid "%s:%s: error: field '%s' not allowed in this record set\n" msgstr "" "%s:%s: помилка: у цьому наборі запиÑів не можна викориÑтовувати поле «%s»\n" #: src/rec-int.c:257 #, c-format msgid "%s:%s: error: field '%s' should be unique in this record\n" msgstr "" "%s:%s: помилка: у цьому запиÑÑ– можна викориÑтовувати лише одне поле «%s»\n" #: src/rec-int.c:301 #, c-format msgid "%s:%s: error: prohibited field '%s' found in record\n" msgstr "%s:%s: помилка: у запиÑÑ– виÑвлено заборонене поле «%s»\n" #: src/rec-int.c:333 #, c-format msgid "%s:%s: error: %%constraint[%d] violated in record\n" msgstr "%s:%s: помилка: Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ %%constraint[%d] у запиÑÑ–\n" #: src/rec-int.c:370 #, c-format msgid "%s:%s: error: confidential field is not encrypted\n" msgstr "%s:%s: помилка: вміÑÑ‚ Ð¿Ð¾Ð»Ñ Ð· конфіденційними даними не зашифровано\n" #: src/rec-int.c:422 #, c-format msgid "%s:%s: error: key field '%s' not found in record\n" msgstr "%s:%s: помилка: у запиÑÑ– не виÑвлено Ð¿Ð¾Ð»Ñ ÐºÐ»ÑŽÑ‡Ð° «%s»\n" #: src/rec-int.c:431 #, c-format msgid "%s:%s: error: multiple key fields '%s' in record\n" msgstr "%s:%s: помилка: у запиÑÑ– виÑвлено декілька полів ключів «%s»\n" #: src/rec-int.c:474 #, c-format msgid "%s:%s: error: duplicated key value in field '%s' in record\n" msgstr "" "%s:%s: помилка: у запиÑÑ– виÑвлено Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° у " "полі «%s»\n" #: src/rec-int.c:562 #, fuzzy, c-format msgid "%s:%s: error: duplicated value in singular field '%s' in record\n" msgstr "" "%s:%s: помилка: у запиÑÑ– виÑвлено Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° у " "полі «%s»\n" #: src/rec-int.c:620 #, c-format msgid "%s:%s: error: missing %%rec field in record descriptor\n" msgstr "%s:%s: помилка: у деÑкрипторі запиÑу не виÑтачає Ð¿Ð¾Ð»Ñ %%rec\n" #: src/rec-int.c:628 #, c-format msgid "%s:%s: error: too many %%rec fields in record descriptor\n" msgstr "%s:%s: помилка: у деÑкрипторі запиÑу занадто багато полів %%rec\n" #: src/rec-int.c:638 #, c-format msgid "%s:%s: error: invalid record type %s\n" msgstr "%s:%s: помилка: некоректний тип запиÑу %s\n" #: src/rec-int.c:649 #, c-format msgid "%s:%s: error: only one %%key field is allowed in a record descriptor\n" msgstr "" "%s:%s: помилка: у деÑкрипторі запиÑу можна викориÑтовувати лише одне поле " "%%key\n" #: src/rec-int.c:659 #, c-format msgid "%s:%s: error: only one %%size field is allowed in a record descriptor\n" msgstr "" "%s:%s: помилка: у деÑкрипторі запиÑу можна викориÑтовувати лише одне поле " "%%size\n" #: src/rec-int.c:669 #, c-format msgid "%s:%s: error: only one %%sort field is allowed in a record descriptor\n" msgstr "" "%s:%s: помилка: у деÑкрипторі запиÑу можна викориÑтовувати лише одне поле " "%%sort\n" #: src/rec-int.c:692 #, c-format msgid "" "%s:%s: error: expected a comma-separated list of fields before the type " "specification\n" msgstr "" "%s:%s: помилка: перед Ñпецифікацією типу мало бути вказано ÑпиÑок полів, " "відокремлених комами\n" #: src/rec-int.c:718 src/rec-int.c:771 #, c-format msgid "%s:%s: error: the referred type %s does not exist\n" msgstr "%s:%s: помилка: вказаного типу, %s, не Ñ–Ñнує\n" #: src/rec-int.c:730 #, c-format msgid "%s:%s: error: invalid type specification\n" msgstr "%s:%s: помилка: некоректне Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ\n" #: src/rec-int.c:745 #, c-format msgid "%s:%s: error: expected a type name before the type specification\n" msgstr "" "%s:%s: помилка: перед Ñпецифікацією типу мало бути вказано назву типу\n" #: src/rec-int.c:783 #, c-format msgid "%s:%s: error: invalid typedef specification\n" msgstr "%s:%s: помилка: некоректне Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ\n" #: src/rec-int.c:805 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a valid selection expression\n" msgstr "%s:%s: помилка: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ %s[%zd] не Ñ” коректним виразом вибору\n" #: src/rec-int.c:836 #, c-format msgid "%s:%s: error: value for %s[%zd] is not a list of field names\n" msgstr "%s:%s: помилка: значеннÑм %s[%zd] не Ñ” ÑпиÑок назв полів\n" #: src/rec-int.c:849 #, c-format msgid "" "%s:%s: error: value for %s should be a number optionally preceded by >, <, " ">= or <=.\n" msgstr "" "%s:%s: помилка: значеннÑм %s має бути чиÑло, перед Ñким може бути вказано " "Ñимвол >, <, >= або <=.\n" #: src/rec-int.c:865 #, c-format msgid "%s:%s: error: value for %s should be a list of field names.\n" msgstr "%s:%s: помилка: значеннÑм %s має бути ÑпиÑок назв полів.\n" #: src/rec-int.c:893 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range, uuid " "or date\n" msgstr "" "%s:%s: помилка: поле з автоматичним збільшеннÑм Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s має міÑтити " "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ð¾Ð³Ð¾ типу, діапазон, UUID або дату\n" #: src/rec-int.c:895 #, c-format msgid "" "%s:%s: error: auto-incremented field %s should be of type int, range or " "date\n" msgstr "" "%s:%s: помилка: поле з автоматичним збільшеннÑм Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s має міÑтити " "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ð¾Ð³Ð¾ типу, діапазон або дату\n" #: src/rec-int.c:978 #, c-format msgid "%s:%s: error: could not fetch remote descriptor from url %s.\n" msgstr "" "%s:%s: помилка: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´ÐµÑкриптора за адреÑою url %s.\n" #: src/rec-int.c:997 #, c-format msgid "%s:%s: error: could not read external descriptor from file %s.\n" msgstr "" "%s:%s: помилка: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ зовнішній деÑкриптор з файла %s.\n" #: src/rec-int.c:1012 #, c-format msgid "%s:%s: error: %s does not contain valid rec data.\n" msgstr "%s:%s: помилка: у %s не міÑтитьÑÑ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ… даних rec.\n" #: src/rec-int.c:1026 #, c-format msgid "%s:%s: error: %s does not contain information for type %s.\n" msgstr "%s:%s: помилка: у %s не міÑтитьÑÑ Ð´Ð°Ð½Ð¸Ñ… типу %s.\n" #: src/rec-int.c:1150 #, c-format msgid "%s: error: the number of records of type %s should be %zd.\n" msgstr "%s: помилка: кількіÑть запиÑів типу %s має дорівнювати %zd.\n" #: src/rec-int.c:1160 #, c-format msgid "%s: error: too many records of type %s. Maximum allowed are %zd.\n" msgstr "%s: помилка: забагато запиÑів типу %s. МакÑимальною кількіÑтю Ñ” %zd.\n" #: src/rec-int.c:1167 #, c-format msgid "%s: error: too few records of type %s. Minimum allowed are %zd.\n" msgstr "%s: помилка: замало запиÑів типу %s. Мінімальною кількіÑтю Ñ” %zd.\n" #: src/rec-types.c:304 msgid "invalid integer." msgstr "некоректне ціле чиÑло." #: src/rec-types.c:332 msgid "invalid 'field' value." msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«field»." #: src/rec-types.c:353 msgid "invalid 'uuid' value." msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«uuid»." #: src/rec-types.c:369 msgid "invalid 'bool' value." msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«bool»." #: src/rec-types.c:390 msgid "invalid 'range' value." msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«range»." #: src/rec-types.c:399 #, c-format msgid "expected an integer between %d and %d." msgstr "Ñлід було викориÑтати ціле Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ діапазоні від %d до %d." #: src/rec-types.c:419 msgid "invalid 'real' value." msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«real»." #: src/rec-types.c:436 #, c-format msgid "value too large. Expected a size <= %zu." msgstr "занадто велике значеннÑ. Слід було викориÑтати розмір <= %zu." #: src/rec-types.c:456 msgid "invalid 'line' value." msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«line»." #: src/rec-types.c:473 msgid "value does not match the regexp." msgstr "Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ відповідає формальному виразу." #: src/rec-types.c:492 msgid "invalid date." msgstr "некоректна дата." #: src/rec-types.c:506 msgid "invalid email." msgstr "некоректна адреÑа ел. пошти." #: src/rec-types.c:547 msgid "invalid enum value." msgstr "некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½ÑƒÐ¼ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð°." #: src/rec-types.c:898 #, c-format msgid "" "internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() " "in rec_type_new().\n" msgstr "" "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: типи rec: отримано Ñигнал REC_TYPE_NONE від функції " "rec_type_parse_type_kind() у rec_type_new().\n" #: src/rec-utils.c:86 #, c-format msgid "internal error: rec_int_rec_extract_file: error compiling regexp.\n" msgstr "" "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: rec_int_rec_extract_file: помилка під Ñ‡Ð°Ñ Ñпроби " "компілÑції формального виразу.\n" #: src/rec-utils.c:116 src/rec-utils.c:147 #, c-format msgid "internal error: rec_int_rec_extract_url: error compiling regexp.\n" msgstr "" "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: rec_int_rec_extract_url: помилка під Ñ‡Ð°Ñ Ñпроби " "компілÑції формального виразу.\n" #: src/rec-utils.c:290 #, c-format msgid "internal error: rec_match: error compiling regexp.\n" msgstr "" "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: rec_match: помилка під Ñ‡Ð°Ñ Ñпроби компілÑції формального " "виразу.\n" #. TRANSLATORS: --help output, csv2rec synopsis. #. no-wrap #: utils/csv2rec.c:98 #, c-format msgid "Usage: csv2rec [OPTIONS]... [CSV_FILE]\n" msgstr "ВикориÑтаннÑ: csv2rec [ПÐРÐМЕТРИ]... [ФÐЙЛ_CSV]\n" #. TRANSLATORS: --help output, csv2rec short description. #. no-wrap #: utils/csv2rec.c:103 msgid "Convert csv data into rec data.\n" msgstr "" "ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… csv (ÑпиÑку значень відокремлених роздільниками) у дані " "rec.\n" #. TRANSLATORS: --help output, csv2rec options. #. no-wrap #: utils/csv2rec.c:109 #, fuzzy msgid "" " -t, --type=TYPE type name for the converted records; " "if this\n" " parameter is omitted then no type is " "used.\n" " -s, --strict be strict parsing the csv file.\n" " -e, --omit-empty omit empty fields.\n" msgstr "" " -t, --type=ТИП назва типу Ð´Ð»Ñ Ð¿ÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð¸Ñ… значень " "запиÑів; Ñкщо цей\n" " параметр буде пропущено, не " "викориÑтовуватиметьÑÑ Ð¶Ð¾Ð´Ð½Ð¾Ð³Ð¾ типу.\n" " -s, --strict обробити файл csv зі Ñтрогим " "заÑтоÑуваннÑм правил.\n" " -e, --omit-empty пропуÑтити порожні полÑ.\n" #: utils/csv2rec.c:212 #, c-format msgid "invalid field name '%s' in header\n" msgstr "некоректна назва полÑ, «%s», у заголовку\n" #: utils/csv2rec.c:221 #, fuzzy msgid "error while parsing CSV file: too many columns in row\n" msgstr "помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ файла CSV: %s\n" #: utils/csv2rec.c:241 #, c-format msgid "" "%s: %lu: this line contains %lu fields, but %lu header fields were read\n" msgstr "" "%s: %lu: у цьому Ñ€Ñдку міÑтитьÑÑ %lu полÑ. Це не збігаєтьÑÑ Ð· кількіÑтю " "прочитаних заголовків, %lu.\n" #: utils/csv2rec.c:331 utils/recdel.c:233 utils/recset.c:306 utils/recutl.c:317 #, c-format msgid "cannot read file %s\n" msgstr "не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… з файла %s\n" #: utils/csv2rec.c:338 msgid "failed to initialize csv parser\n" msgstr "не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒÐ²Ð°Ñ‚Ð¸ обробку csv\n" #: utils/csv2rec.c:355 #, c-format msgid "error while parsing CSV file: %s\n" msgstr "помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ файла CSV: %s\n" #. TRANSLATORS: --help output, mdb2rec synopsis. #. no-wrap #: utils/mdb2rec.c:97 #, c-format msgid "Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE]\n" msgstr "ВикориÑтаннÑ: mdb2rec [ПÐРÐМЕТРИ]... ФÐЙЛ_MDB [ТÐБЛИЦЯ]\n" #. TRANSLATORS: --help output, mdb2rec short description. #. no-wrap #: utils/mdb2rec.c:102 msgid "Convert an mdb file into a rec file.\n" msgstr "ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° mdb на файл даних rec.\n" #. TRANSLATORS: --help output, mdb2rec options. #. no-wrap #: utils/mdb2rec.c:108 msgid "" " -s, --system-tables include system tables.\n" " -e, --keep-empty-fields don't prune empty fields in the rec\n" " output.\n" " -l, --list-tables dump a list of the table names " "contained\n" " in the mdb file.\n" msgstr "" " -s, --system-tables включити ÑиÑтемні таблиці.\n" " -e, --keep-empty-fields не вирізати порожні Ð¿Ð¾Ð»Ñ Ð· виведених " "даних\n" " rec.\n" " -l, --list-tables показати ÑпиÑок назв таблиць, що " "міÑÑ‚ÑтьÑÑ\n" " у файлі mdb.\n" #: utils/mdb2rec.c:230 utils/mdb2rec.c:288 #, c-format msgid "failed to normalise record type name %s\n" msgstr "не вдалоÑÑ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ тип запиÑу з назвою %s\n" #: utils/mdb2rec.c:236 utils/mdb2rec.c:245 #, c-format msgid "failed to normalise field name %s\n" msgstr "не вдалоÑÑ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ поле з назвою %s\n" #: utils/mdb2rec.c:307 #, c-format msgid "failed to normalise the field name %s\n" msgstr "не вдалоÑÑ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ поле з назвою %s\n" #: utils/mdb2rec.c:396 utils/recins.c:191 utils/recset.c:223 #, c-format msgid "invalid field name %s.\n" msgstr "некоректна назва Ð¿Ð¾Ð»Ñ %s.\n" #: utils/mdb2rec.c:436 #, c-format msgid "could not open file %s\n" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %s\n" #: utils/mdb2rec.c:441 msgid "file does not appear to be an Access database\n" msgstr "здаєтьÑÑ, файл не Ñ” файлом бази даних Access\n" #. TRANSLATORS: --help output, rec2csv synopsis. #. no-wrap #: utils/rec2csv.c:70 #, c-format msgid "Usage: rec2csv [OPTIONS]... [REC_FILE]\n" msgstr "ВикориÑтаннÑ: rec2csv [ПÐРÐМЕТРИ]... [ФÐЙЛ_REC]\n" #. TRANSLATORS: --help output, rec2csv short description. #. no-wrap #: utils/rec2csv.c:75 msgid "Convert rec data into csv data.\n" msgstr "" "ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… rec у файли csv (ÑпиÑку значень відокремлених " "роздільниками).\n" #. TRANSLATORS: --help output, rec2csv options. #. no-wrap #: utils/rec2csv.c:81 msgid "" " -d, --delim=char sets the deliminator (default ',')\n" " -t, --type=TYPE record set to convert to csv; if this " "parameter\n" " is omitted then the default record " "set is used\n" " -S, --sort=FIELDS sort the output by the specified " "fields.\n" msgstr "" " -d, --delim=Ñимвол вÑтановити Ñимвол-роздільник (типовим " "Ñимволом Ñ” «,»)\n" " -t, --type=ТИП набір запиÑів, Ñкі Ñлід перетворити у " "формат csv; Ñкщо цього параметра\n" " не буде вказано, " "викориÑтовуватиметьÑÑ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ð¹ набір запиÑів\n" " -S, --sort=ПОЛЯ впорÑдкувати виведені дані за вміÑтом " "вказаних полів.\n" #: utils/rec2csv.c:121 msgid "only one list of fields can be specified as a sorting criteria.\n" msgstr "критерієм впорÑÐ´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути лише один ÑпиÑок полів.\n" #: utils/rec2csv.c:126 msgid "invalid field name list in -S.\n" msgstr "некоректний ÑпиÑок назв полів у -S.\n" #: utils/rec2csv.c:130 utils/recsel.c:221 utils/recsel.c:245 msgid "internal error creating fex.\n" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ñпроби Ñтворити fex.\n" #. TRANSLATORS: --help output, recdel synopsis. #. no-wrap #: utils/recdel.c:78 #, c-format msgid "" "Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [FILE]\n" msgstr "" "ВикориÑтаннÑ: recdel [ПÐРÐМЕТРИ]... [-t ТИП] [-n ÐОМЕР | -e ВИРÐЗ | -q РЯДОК " "| -m ÐОМЕР]] [ФÐЙЛ]\n" #. TRANSLATORS: --help output, recdel short description. #. no-wrap #: utils/recdel.c:83 msgid "Remove (or comment out) records from a rec file.\n" msgstr "Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ (або коментуваннÑ) запиÑів у файлі rec.\n" #. TRANSLATORS: --help output, recdel arguments. #. no-wrap #: utils/recdel.c:90 msgid "" " -c, --comment comment out the matching records " "instead of\n" " deleting them.\n" " --force delete even in potentially dangerous " "situations,\n" " and if the deletion is violating " "record restrictions.\n" " --no-external don't use external descriptors.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -c, --comment закоментувати відповідні запиÑи " "заміÑть\n" " їхнього вилученнÑ.\n" " --force вилучати навіть у потенційно " "небезпечних ÑитуаціÑÑ…\n" " Ñ– Ñкщо Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚Ð¸ до " "Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½ÑŒ запиÑу.\n" " --no-external не викориÑтовувати зовнішніх " "деÑкрипторів.\n" " --verbose надати докладний звіт у разі, Ñкщо " "буде виÑвлено помилку\n" " ціліÑноÑті бази даних.\n" #. TRANSLATORS: --help output, notes on recdel. #. no-wrap #. TRANSLATORS: --help output, notes on recfix. #. no-wrap #. TRANSLATORS: --help output, notes on recins. #. no-wrap #: utils/recdel.c:108 utils/recfix.c:149 utils/recins.c:138 msgid "" "If no FILE is specified then the command acts like a filter, getting\n" "the data from standard input and writing the result to standard output.\n" msgstr "" "Якщо не буде вказано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¤ÐЙЛ, програма працюватиме у режимі " "фільтруваннÑ:\n" "отримуватиме дані зі Ñтандартного джерела вхідних даних Ñ– виводитиме ці дані " "до\n" "Ñтандартного виводу даних.\n" #: utils/recdel.c:123 #, c-format msgid "no records of type %s found.\n" msgstr "не виÑвлено жодних запиÑів типу %s.\n" #: utils/recdel.c:196 #, c-format msgid "ignoring a request to delete all records of type %s.\n" msgstr "пропущено запит щодо Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð²ÑÑ–Ñ… запиÑів типу %s.\n" #: utils/recdel.c:198 msgid "use --force if you really want to proceed, or use either -n or -e.\n" msgstr "" "ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --force, Ñкщо вам потрібно продовжити обробку, або " "ÑкориÑтайтеÑÑ Ð¾Ð´Ð½Ð¸Ð¼ з параметрів, -n або -e.\n" #: utils/recdel.c:206 msgid "invalid selection expression.\n" msgstr "некоректний вираз вибору.\n" #: utils/recdel.c:241 utils/recfix.c:344 utils/recins.c:361 utils/recset.c:312 #, c-format msgid "file %s is not writable.\n" msgstr "файл %s Ñ” непридатним до запиÑу.\n" #. TRANSLATORS: --help output, recfix synopsis. #. no-wrap #: utils/recfix.c:99 #, c-format msgid "Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE]\n" msgstr "" "ВикориÑтаннÑ: recfix [ПÐРÐМЕТР]... [ДІЯ] [ПÐРÐМЕТРИ_ДІЇ]... [ФÐЙЛ]...\n" #. TRANSLATORS: --help output, recfix short description. #. no-wrap #: utils/recfix.c:104 msgid "Check and fix rec files.\n" msgstr "Перевірка Ñ– Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² rec.\n" #. TRANSLATORS: --help output, recfix global arguments. #. no-wrap #: utils/recfix.c:111 msgid "" " --no-external don't use external descriptors.\n" " --force force the requested operation.\n" msgstr "" " --no-external не викориÑтовувати зовнішніх " "деÑкрипторів.\n" " --force змінювати запиÑи, навіть Ñкщо у " "результаті буде порушено\n" " обмеженнÑ, накладені на запиÑ.\n" #. TRANSLATORS: --help output, recfix operations. #. no-wrap #: utils/recfix.c:121 msgid "" "Operations:\n" " --check check integrity of the specified " "file. Default.\n" " --sort sort the records in the specified " "file.\n" " --auto insert auto-generated fields in " "records missing them.\n" msgstr "" "Дії:\n" " --check перевірити ціліÑніÑть вказаного файла. " "Типова діÑ.\n" " --sort впорÑдкувати запиÑи у вказаному " "файлі.\n" " --auto вÑтавити автозаповнені Ð¿Ð¾Ð»Ñ Ð´Ð¾ " "запиÑів, у Ñких Ñ—Ñ… не виÑтачає.\n" #. TRANSLATORS: --help output, recfix operations related with encryption. #. no-wrap #: utils/recfix.c:131 msgid "" " --encrypt encrypt confidential fields in the " "specified file.\n" " --decrypt decrypt confidential fields in the " "specified file.\n" msgstr "" " --encrypt зашифрувати вміÑÑ‚ полів з " "конфіденційними даними у вказаному файлі.\n" " --decrypt розшифрувати вміÑÑ‚ полів з " "конфіденційними даними у вказаному файлі.\n" #. TRANSLATORS: --help output, recfix encryption and decryption #. options. #. no-wrap #: utils/recfix.c:140 msgid "" "De/Encryption options:\n" " -s, --password=PASSWORD encrypt/decrypt with this password.\n" msgstr "" "Параметри Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° шифруваннÑ:\n" " -s, --password=ПÐРОЛЬ зашифрувати або розшифрувати на оÑнові " "вказаного паролÑ.\n" #: utils/recfix.c:184 msgid "--password|-s must be used as an operation argument.\n" msgstr "Як аргумент операції має бути викориÑтано --password|-s.\n" #: utils/recfix.c:188 msgid "the specified operation does not require a password.\n" msgstr "Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ñ— дії пароль не потрібен.\n" #: utils/recfix.c:191 msgid "please specify just one password.\n" msgstr "будь лаÑка, вкажіть лише один пароль.\n" #: utils/recfix.c:198 utils/recfix.c:204 utils/recfix.c:210 utils/recfix.c:217 #: utils/recfix.c:223 msgid "please specify just one operation.\n" msgstr "будь лаÑка, вкажіть лише одну дію.\n" #: utils/recfix.c:304 utils/recfix.c:326 utils/recfix.c:365 utils/recfix.c:435 #, fuzzy, c-format msgid "recfix: error: cannot read file %s\n" msgstr "помилка: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… з файла %s\n" #: utils/recfix.c:399 msgid "the database contains already encrypted fields\n" msgstr "у базі даних міÑÑ‚ÑтьÑÑ Ð²Ð¶Ðµ зашифровані полÑ\n" #: utils/recfix.c:400 msgid "please use --force or --decrypt\n" msgstr "будь лаÑка, ÑкориÑтайтеÑÑ --force або --decrypt\n" #: utils/recfix.c:499 msgid "unknown operation in recfix: please report this as a bug.\n" msgstr "невідома Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ñƒ recfix: будь лаÑка, повідомте про цю ваду.\n" #. TRANSLATORS: --help output, recfmt synopsis. #. no-wrap #: utils/recfmt.c:64 #, c-format msgid "Usage: recfmt [OPTION]... [TEMPLATE]\n" msgstr "ВикориÑтаннÑ: recfmt [ПÐРÐМЕТР]... [ШÐБЛОÐ]\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:69 msgid "Apply a template to records read from standard input.\n" msgstr "" "ЗаÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñƒ до запиÑів, прочитаних зі Ñтандартного джерела вхідних " "даних.\n" #. TRANSLATORS: --help output, recfmt arguments. #. no-wrap #: utils/recfmt.c:75 msgid "" " -f, --file=FILENAME read the template to apply from a " "file.\n" msgstr "" " -f, --file=ÐÐЗВÐ_ФÐЙЛРпрочитати дані шаблону, Ñкий Ñлід " "заÑтоÑувати з файла.\n" #: utils/recfmt.c:107 #, c-format msgid "can't open file %s for reading.\n" msgstr "не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %s Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ….\n" #: utils/recfmt.c:120 msgid "don't specify a template in the command line and -f at the same time.\n" msgstr "" "не можна вказувати шаблон у командному Ñ€Ñдку Ñ– одночаÑно викориÑтовувати " "параметр -f.\n" #: utils/recfmt.c:142 msgid "invalid expression in a template slot.\n" msgstr "некоректний вираз у полі замінника шаблону.\n" #: utils/recfmt.c:146 msgid "error evaluating expression in a template slot.\n" msgstr "помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ у полі замінника шаблону.\n" #: utils/recfmt.c:178 msgid "recfmt_apply_template: error compiling regexp. Please report this.\n" msgstr "" "recfmt_apply_template: помилка під Ñ‡Ð°Ñ Ñпроби компілÑції формального виразу. " "Будь лаÑка, повідомте про цю помилку авторам програми.\n" #. TRANSLATORS: --help output, recinf synopsis. #. no-wrap #: utils/recinf.c:77 #, c-format msgid "Usage: recinf [OPTION]... [FILE]...\n" msgstr "ВикориÑтаннÑ: recinf [ПÐРÐМЕТР]... [ФÐЙЛ]...\n" #. TRANSLATORS: --help output, recinf short description. #. no-wrap #: utils/recinf.c:82 msgid "Print information about the types of records stored in the input.\n" msgstr "Показ даних щодо типів запиÑів, що міÑÑ‚ÑтьÑÑ Ñƒ вхідних даних.\n" #. TRANSLATORS: --help output, recinf arguments. #. no-wrap #: utils/recinf.c:89 msgid "" " -t, --type=RECORD_TYPE print information on the records having " "the\n" " specified type.\n" " -d, --descriptor include the full record descriptors.\n" " -n, --names-only output just the names of the record files\n" " found in the input.\n" msgstr "" " -t, --type=ТИП_ЗÐПИСУ показати дані щодо запиÑів, Ñкі міÑÑ‚Ñть\n" " Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ð³Ð¾ типу.\n" " -d, --descriptor включити повні деÑкриптори запиÑів.\n" " -n, --names-only показати лише назви файлів запиÑів,\n" " Ñкі буде виÑвлено у вхідних даних.\n" #. TRANSLATORS: --help output, recinf special options. #. no-wrap #: utils/recinf.c:102 msgid "" "Special options:\n" " -S, --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "ОÑобливі параметри:\n" " -S, --print-sexps показати дані у форматі sexps, а не у " "форматі rec.\n" #: utils/recinf.c:234 #, c-format msgid "error: cannot read file %s\n" msgstr "помилка: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… з файла %s\n" #. TRANSLATORS: --help output, recins synopsis. #. no-wrap #: utils/recins.c:100 #, c-format msgid "" "Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m " "NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE]\n" msgstr "" "ВикориÑтаннÑ: recins [ПÐРÐМЕТР]... [-t ТИП] [-n ÐОМЕР | -e ВИРÐЗ | -q РЯДОК " "| -m ÐОМЕР] [(-f ÐÐЗВР-v РЯДОК) | -r ДÐÐІ_ЗÐПИСУ)]... [ФÐЙЛ]\n" #. TRANSLATORS: --help output, recins short description. #. no-wrap #: utils/recins.c:105 msgid "Insert new records in a rec database.\n" msgstr "Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… запиÑів до бази даних rec.\n" #. TRANSLATORS: --help output, recins arguments. #. no-wrap #: utils/recins.c:111 msgid "" " -f, --field=STR field name; should be followed by a -" "v.\n" " -v, --value=STR field value; should be preceded by an -" "f.\n" " -r, --record=STR record that will be inserted in the " "file.\n" " --force insert the record even if it is " "violating\n" " record restrictions.\n" " --no-external don't use external descriptors.\n" " --no-auto don't insert auto generated fields.\n" " --verbose give a detailed report if the " "integrity check\n" " fails.\n" msgstr "" " -f, --field=РЯДОК назва полÑ; піÑÐ»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ параметра Ñлід " "вказати параметр -v.\n" " -v, --value=РЯДОК Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð»Ñ; перед цим параметром " "Ñлід вказати параметр -f.\n" " -r, --record=РЯДОК запиÑ, Ñкий буде додано до файла.\n" " --force додати запиÑ, навіть Ñкщо його " "Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€ÑƒÑˆÑƒÑ”\n" " обмеженнÑ, накладені на запиÑ.\n" " --no-external не викориÑтовувати зовнішніх " "деÑкрипторів.\n" " --no-auto не вÑтавлÑти автоматично Ñтворених " "полів.\n" " --verbose надати докладний звіт у разі, Ñкщо " "Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸\n" " ціліÑноÑті зазнає невдачі.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recins.c:125 msgid "" " -s, --password=STR encrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=РЯДОК зашифрувати Ð¿Ð¾Ð»Ñ Ð· конфіденційними " "даними за допомогою вказаного паролÑ.\n" #: utils/recins.c:179 msgid "a -f should be followed by a -v\n" msgstr "піÑÐ»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° -f Ñлід вказати параметр -v\n" #: utils/recins.c:198 msgid "a -v should be preceded by a -f\n" msgstr "перед параметром -v Ñлід вказати параметр -f\n" #: utils/recins.c:214 utils/recsel.c:204 msgid "more than one password was specified\n" msgstr "було вказано декілька паролів\n" #: utils/recins.c:224 msgid "error while parsing the record provided by -r\n" msgstr "помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ запиÑу, вказаного за допомогою -r\n" #: utils/recins.c:256 #, c-format msgid "please provide a value for the field %s\n" msgstr "будь лаÑка, вкажіть Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ %s\n" #. TRANSLATORS: --help output, recsel synopsis. #. no-wrap #: utils/recsel.c:107 #, c-format msgid "" "Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR " "| -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]...\n" msgstr "" "ВикориÑтаннÑ: recsel [ПÐРÐМЕТР]... [-t ТИП] [-j ПОЛЕ] [-n ІÐДЕКСИ | -e " "ВИРÐЗ_ЗÐПИСУ | -q РЯДОК | -m ÐОМЕР]] [-c | (-p|-P) ВИРÐЗ_ПОЛЯ] [ФÐЙЛ]...\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:112 msgid "Select and print rec data.\n" msgstr "Вибір Ñ– Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… rec.\n" #. TRANSLATORS: --help output, recsel arguments. #. no-wrap #: utils/recsel.c:118 msgid "" " -d, --include-descriptors print record descriptors along with " "the matched\n" " records.\n" " -C, --collapse do not section the result in records " "with newlines.\n" " -S, --sort=FIELD,... sort the output by the specified " "fields.\n" " -G, --group-by=FIELD,... group records by the specified " "fields.\n" " -U, --uniq remove duplicated fields in the output " "records.\n" msgstr "" " -d, --include-descriptors показувати деÑкриптори запиÑів разом з " "відповідними\n" " запиÑами.\n" " -C, --collapse не поділÑти окремі запиÑи у " "результатах Ñимволами нового Ñ€Ñдка.\n" " -S, --sort=ПОЛЕ впорÑдкувати виведені дані за вміÑтом " "вказаного полÑ.\n" " -G, --group-by=ПОЛЕ,... згрупувати Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° вказаними полÑми.\n" " -U, --uniq вилучити дублікати полів з виведених " "запиÑів.\n" #. TRANSLATORS: --help output, encryption related options. #. no-wrap #: utils/recsel.c:130 msgid "" " -s, --password=STR decrypt confidential fields with the " "given password.\n" msgstr "" " -s, --password=РЯДОК розшифрувати Ð¿Ð¾Ð»Ñ Ð· конфіденційними " "даними за допомогою вказаного паролÑ.\n" #: utils/recsel.c:139 msgid "" " -j, --join=FIELD perform an inner join using the " "specified field.\n" msgstr "" " -j, --join=ПОЛЕ виконати внутрішнє Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð° " "допомогою вказаного полÑ.\n" #. TRANSLATORS: --help output, recsel output options. #. no-wrap #: utils/recsel.c:146 msgid "" "Output options:\n" " -p, --print=FIELDS comma-separated list of fields to " "print for each\n" " matching record.\n" " -P, --print-values=FIELDS as -p, but print only the values of " "the selected\n" " fields.\n" " -R, --print-row=FIELDS as -P, but separate the values with " "spaces instead\n" " of newlines.\n" " -c, --count print a count of the matching records " "instead of\n" " the records themselves.\n" msgstr "" "Параметри Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…:\n" " -p, --print=ПОЛЯ ÑпиÑок полів, відокремлених комами, " "Ñкі\n" " Ñлід показати Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ " "відповідного запиÑу.\n" " -P, --print-values=ПОЛЯ те Ñаме, що Ñ– -p, але показувати лише " "значеннÑ\n" " вибраних полів.\n" " -R, --print-row=ПОЛЯ те Ñаме, що Ñ– -P, але з відокремленнÑм " "значень пробілами\n" " заміÑть Ñимволів нового Ñ€Ñдка.\n" " -c, --count показати кількіÑть відповідних запиÑів " "заміÑть\n" " Ñамих запиÑів.\n" #. TRANSLATORS: --help output, recsel special options. #. no-wrap #: utils/recsel.c:160 msgid "" "Special options:\n" " --print-sexps print the data in sexps instead of rec " "format.\n" msgstr "" "ОÑобливі параметри:\n" " --print-sexps показати дані у форматі sexps, а не у " "форматі rec.\n" #: utils/recsel.c:212 msgid "only one field list can be specified as a sorting criteria.\n" msgstr "критерієм впорÑÐ´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути лише один ÑпиÑок полів.\n" #: utils/recsel.c:217 msgid "invalid field names in -S.\n" msgstr "некоректні назви полів у -S.\n" #: utils/recsel.c:226 msgid "only one field can be specified as join criteria.\n" msgstr "критерієм Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути лише Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ полÑ.\n" #: utils/recsel.c:229 msgid "please specify a correct field name to -j|--join.\n" msgstr "будь лаÑка, вкажіть коректну назву Ð¿Ð¾Ð»Ñ Ñƒ -j|--join.\n" #: utils/recsel.c:236 msgid "only one field list can be specified as a grouping criteria.\n" msgstr "критерієм Ð³Ñ€ÑƒÐ¿ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути лише один ÑпиÑок полів.\n" #: utils/recsel.c:241 msgid "invalid field names in -G.\n" msgstr "некоректні назви полів у -G.\n" #: utils/recsel.c:255 msgid "cannot specify -[pPR] and also -c.\n" msgstr "не можна одночаÑно викориÑтовувати -[pPR] Ñ– -c.\n" #: utils/recsel.c:266 #, c-format msgid "invalid list of fields in -%c\n" msgstr "некоректний ÑпиÑок полів у -%c\n" #: utils/recsel.c:272 msgid "internal error creating the field expression.\n" msgstr "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ полÑ.\n" #: utils/recsel.c:284 #, c-format msgid "invalid aggregate function '%s'\n" msgstr "некоректна Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð°Ð³Ñ€ÐµÐ³ÑƒÐ²Ð°Ð½Ð½Ñ, «%s»\n" #: utils/recsel.c:296 msgid "cannot specify -c and also -p.\n" msgstr "не можна одночаÑно визначати -c Ñ– -p.\n" #: utils/recsel.c:309 msgid "joins can only be used when a named record set is selected.\n" msgstr "" "Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° викориÑтовувати, лише Ñкщо вибрано іменований набір " "запиÑів.\n" #: utils/recsel.c:363 msgid "several record types found. Please use -t to specify one.\n" msgstr "" "знайдено декілька типів запиÑів. Будь лаÑка, ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -t, " "щоб вказати потрібний вам тип.\n" #. TRANSLATORS: --help output, recset synopsis. #. no-wrap #: utils/recset.c:99 #, c-format msgid "Usage: recset [OPTION]... [FILE]...\n" msgstr "ВикориÑтаннÑ: recset [ПÐРÐМЕТР]... [ФÐЙЛ]...\n" #. TRANSLATORS: --help output, recset short description. #. no-wrap #: utils/recset.c:104 msgid "Alter or delete fields in records.\n" msgstr "Зміна або Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð»Ñ–Ð² у запиÑах.\n" #. TRANSLATORS: --help output, recset options. #. no-wrap #: utils/recset.c:110 msgid "" " --no-external don't use external descriptors.\n" " --force alter the records even if violating " "record\n" " restrictions.\n" msgstr "" " --no-external не викориÑтовувати зовнішніх " "деÑкрипторів.\n" " --force змінювати запиÑи, навіть Ñкщо у " "результаті буде порушено\n" " обмеженнÑ, накладені на запиÑ.\n" #. TRANSLATORS: --help output, recset field selection options. #. no-wrap #: utils/recset.c:123 msgid "" "Field selection options:\n" " -f, --fields=FIELDS comma-separated list of field names " "with optional\n" " subscripts.\n" msgstr "" "Параметри вибору полів:\n" " -f, --fields=ПОЛЯ ÑпиÑок назв полів, відокремлених " "комами,\n" " з додатковими індекÑами.\n" #. TRANSLATORS: --help output, recset actions. #. no-wrap #: utils/recset.c:131 msgid "" "Actions:\n" " -s, --set=VALUE change the value of the selected " "fields.\n" " -a, --add=VALUE add the selected fields with the given " "value.\n" " -S, --set-add=VALUE change the value of the selected " "fields. If they don't\n" " exist then add a new field with that " "value.\n" " -r, --rename=NAME rename the selected fields to a given " "name. If an entire\n" " record set is selected then the " "field is renamed in the\n" " record descriptor as well.\n" " -d, --delete delete the selected fields.\n" " -c, --comment comment out the selected fields.\n" msgstr "" "Дії:\n" " -s, --set=ЗÐÐЧЕÐÐЯ змінити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ñ… полів на " "вказане.\n" " -a, --add=ЗÐÐЧЕÐÐЯ додати вибрані Ð¿Ð¾Ð»Ñ Ð· вказаним " "значеннÑм.\n" " -S, --set-add=ЗÐÐЧЕÐÐЯ змінити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ñ… полів. Якщо " "цих полів\n" " не Ñ–Ñнує, додати нове поле з цим " "значеннÑм.\n" " -r, --rename=ÐÐЗВРперейменувати позначені полÑ, надавши " "їм вказаної назви.\n" " Якщо вибрано веÑÑŒ набір запиÑів, " "поле буде\n" " перейменовано Ñ– у деÑкрипторі " "запиÑів.\n" " -d, --delete вилучити вибрані полÑ.\n" " -c, --comment закоментувати вибрані полÑ.\n" #: utils/recset.c:154 msgid "please specify some field with -f.\n" msgstr "будь лаÑка, вкажіть ÑкеÑÑŒ поле за допомогою параметра -f.\n" #: utils/recset.c:159 msgid "please specify just one action.\n" msgstr "будь лаÑка, вкажіть лише одну дію.\n" #: utils/recset.c:193 msgid "invalid field expression in -f.\n" msgstr "некоректний вираз Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ñƒ параметрі -f.\n" #: utils/recset.c:199 msgid "creating the field expression.\n" msgstr "ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ.\n" #: utils/recset.c:214 msgid "" "the rename operation requires just one field with an optional subscript.\n" msgstr "" "Ð´Ð»Ñ Ð´Ñ–Ñ— з Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñлід вказати точно одне поле з додатковим " "параметром індекÑу.\n" #: utils/recutl.c:123 #, c-format msgid "%s home page: <http://www.gnu.org/software/recutils/>\n" msgstr "Ð”Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñторінка %s: <http://www.gnu.org/software/recutils/>\n" #: utils/recutl.c:126 msgid "General help using GNU software: <http://www.gnu.org/gethelp/>\n" msgstr "" "Загальна довідкова Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ñ‰Ð¾Ð´Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ " "GNU: <http://www.gnu.org/gethelp/>\n" #. TRANSLATORS: --help output, common arguments. #. no-wrap #: utils/recutl.c:135 msgid "" " --help print a help message and exit.\n" " --version show version and exit.\n" msgstr "" " --help показати довідкове Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ– " "завершити роботу.\n" " --version показати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ верÑÑ–Ñ— Ñ– " "завершити роботу.\n" #. TRANSLATORS: --help output, record selection arguments #. no-wrap #: utils/recutl.c:146 msgid "" "Record selection options:\n" " -i, --case-insensitive make strings case-insensitive in " "selection\n" " expressions.\n" " -t, --type=TYPE operate on records of the specified " "type only.\n" " -e, --expression=RECORD_EXPR selection expression.\n" " -q, --quick=STR select records with fields containing " "a string.\n" " -n, --number=NUM,... select specific records by position, " "with ranges.\n" " -m, --random=NUM select a given number of random " "records.\n" msgstr "" "Параметри вибору запиÑів:\n" " -i, --case-insensitive не зважати на регіÑтр Ñимволів у " "виразах\n" " вибору.\n" " -t, --type=ТИП оброблÑти лише запиÑи вказаного типу.\n" " -e, --expression=ВИРÐЗ вираз Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ.\n" " -q, --quick=РЯДОК вибрати запиÑи з полÑми, що міÑÑ‚Ñть " "Ñ€Ñдок.\n" " -n, --number=ÐОМЕР вибрати Ð·Ð°Ð¿Ð¸Ñ Ð· вказаним номером.\n" " -m, --random=КІЛЬКІСТЬ вибрати вказану кількіÑть випадкових " "запиÑів.\n" #: utils/recutl.c:171 #, c-format msgid "" "Copyright (C) %s Jose E. Marchesi.\n" "License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl." "html>.\n" "This is free software: you are free to change and redistribute it.\n" "There is NO WARRANTY, to the extent permitted by law.\n" msgstr "" "ÐвторÑькі права належать Jose E. Marchesi, %s.\n" "Умови Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ»Ð°Ð´ÐµÐ½Ð¾ у GPLv3+: GNU GPL верÑÑ–Ñ— 3 або новішій, <http://" "gnu.org/licenses/gpl.html>\n" "Це вільне програмне забезпеченнÑ: ви можете вільно змінювати Ñ– поширювати " "його.\n" "Вам не надаєтьÑÑ Ð–ÐžÐ”ÐИХ ГÐРÐÐТІЙ, окрім гарантій передбачених " "законодавÑтвом.\n" #: utils/recutl.c:177 msgid "" "\n" "Written by Jose E. Marchesi." msgstr "" "\n" "Ðвтор — Jose E. Marchesi." #: utils/recutl.c:189 utils/recutl.c:209 msgid ": error: " msgstr ": помилка: " #: utils/recutl.c:221 msgid ": warning: " msgstr ": попередженнÑ: " #: utils/recutl.c:246 #, c-format msgid "duplicated record set '%s' from %s.\n" msgstr "Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ запиÑів «%s» з %s.\n" #: utils/recutl.c:401 msgid "cannot create a unique name.\n" msgstr "не вдалоÑÑ Ñтворити назви, Ñка б не повторювалаÑÑ.\n" #: utils/recutl.c:421 #, c-format msgid "renaming file %s to %s\n" msgstr "Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° %s на %s\n" #: utils/recutl.c:463 msgid "operation aborted due to integrity failures.\n" msgstr "дію перервано через Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ñ–ÑноÑті бази даних.\n" #: utils/recutl.c:464 msgid "use --verbose to get a detailed report.\n" msgstr "ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --verbose, щоб отримати докладний звіт.\n" #: utils/recutl.c:471 msgid "use --force to skip the integrity check.\n" msgstr "" "ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --force, щоб наказати програмі не виконувати " "перевірки ціліÑноÑті.\n" #: utils/recutl.c:529 msgid "internal error: recutl_index_list_parse: error compiling regexp.\n" msgstr "" "Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилка recutl_index_list_parse під Ñ‡Ð°Ñ Ñпроби компілÑції " "формального виразу.\n" #: utils/recutl.c:596 msgid "Password: " msgstr "Пароль: " #: utils/recutl.c:602 msgid "Password again: " msgstr "Пароль (ще раз): " #: utils/recutl.c:607 msgid "the provided passwords don't match.\n" msgstr "вказані паролі не збігаютьÑÑ.\n" #: utils/recutl.h:84 utils/recutl.h:131 utils/recutl.h:133 msgid "cannot specify -e and also -n\n" msgstr "не можна одночаÑно вказувати -e Ñ– -n\n" #: utils/recutl.h:86 msgid "cannot specify -e and also -q\n" msgstr "не можна одночаÑно вказувати -e Ñ– -q\n" #: utils/recutl.h:94 msgid "invalid selection expression\n" msgstr "некоректний вираз вибору\n" #: utils/recutl.h:100 msgid "cannot specify -n and also -e\n" msgstr "не можна одночаÑно вказувати -n Ñ– -e\n" #: utils/recutl.h:102 msgid "cannot specify -n and also -q\n" msgstr "не можна одночаÑно вказувати -n Ñ– -q\n" #: utils/recutl.h:106 msgid "invalid list of indexes in -n\n" msgstr "некоректний ÑпиÑок індекÑів у -n\n" #: utils/recutl.h:111 msgid "cannot specify -m and also -e\n" msgstr "не можна одночаÑно вказувати -m Ñ– -e\n" #: utils/recutl.h:113 msgid "cannot specify -m and also -q\n" msgstr "не можна одночаÑно вказувати -m Ñ– -q\n" #: utils/recutl.h:115 msgid "cannot specify -m and also -n\n" msgstr "не можна одночаÑно вказувати -m Ñ– -n\n" #~ msgid "_open_osfhandle failed" #~ msgstr "Помилка _open_osfhandle" #~ msgid "cannot restore fd %d: dup2 failed" #~ msgstr "Ðе вдалоÑÑ Ð²Ñ–Ð´Ð½Ð¾Ð²Ð¸Ñ‚Ð¸ fd %d: помилка dup2" #~ msgid "" #~ "\n" #~ "Report bugs to: %s\n" #~ msgstr "" #~ "\n" #~ "Про вади повідомлÑйте за такою адреÑою: %s\n" #~ msgid "%s home page: <https://www.gnu.org/software/%s/>\n" #~ msgstr "Ð”Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñторінка %s: <https://www.gnu.org/software/%s/>\n" #~ msgid "%s: option '--%s' doesn't allow an argument\n" #~ msgstr "%s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «--%s» не передбачено\n" #~ msgid "%s: unrecognized option '--%s'\n" #~ msgstr "%s: невідомий параметр «--%s»\n" #~ msgid "%s: option '-W %s' doesn't allow an argument\n" #~ msgstr "%s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «-W %s» не передбачено\n" #~ msgid "%s: option '-W %s' requires an argument\n" #~ msgstr "%s: до параметра «-W %s» Ñлід додати аргумент\n" �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/boldquot.sed������������������������������������������������������������������������0000644�0000000�0000000�00000000331�13253176007�013051� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g s/“/“/g s/â€/â€/g s/‘/‘/g s/’/’/g �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/POTFILES.in�������������������������������������������������������������������������0000644�0000000�0000000�00000016324�14226577403�012317� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# List of source files which contain translatable strings. # Gnulib source files. lib/access.c lib/acl_entries.c lib/acl-errno-valid.c lib/acl.h lib/acl-internal.c lib/acl-internal.h lib/alignof.h lib/alloca.c lib/alloca.in.h lib/arg-nonnull.h lib/asnprintf.c lib/asprintf.c lib/assure.h lib/at-func.c lib/attribute.h lib/base64.c lib/base64.h lib/basename-lgpl.c lib/basename-lgpl.h lib/binary-io.c lib/binary-io.h lib/bitrotate.c lib/bitrotate.h lib/btowc.c lib/calloc.c lib/canonicalize.c lib/canonicalize.h lib/canonicalize-lgpl.c lib/c-ctype.c lib/c-ctype.h lib/c++defs.h lib/cdefs.h lib/chdir-long.c lib/chdir-long.h lib/cloexec.c lib/cloexec.h lib/close.c lib/closedir.c lib/closeout.c lib/closeout.h lib/close-stream.c lib/close-stream.h lib/concat-filename.c lib/concat-filename.h lib/copy-acl.c lib/copy-file.c lib/copy-file.h lib/copy-file-range.c lib/crc.c lib/crc.h lib/c-strcasecmp.c lib/c-strcaseeq.h lib/c-strcase.h lib/c-strncasecmp.c lib/dirent.in.h lib/dirent-private.h lib/dirfd.c lib/dirname.h lib/dirname-lgpl.c lib/dup2.c lib/dup.c lib/dup-safer.c lib/dup-safer-flag.c lib/dynarray.h lib/eloop-threshold.h lib/errno.in.h lib/error.c lib/error.h lib/euidaccess.c lib/execute.c lib/execute.h lib/exitfail.c lib/exitfail.h lib/explicit_bzero.c lib/fatal-signal.c lib/fatal-signal.h lib/fchdir.c lib/fcntl.c lib/fcntl.in.h lib/fd-hook.c lib/fd-hook.h lib/fdopendir.c lib/fd-safer.c lib/fd-safer-flag.c lib/filenamecat.h lib/filenamecat-lgpl.c lib/filename.h lib/file-set.c lib/file-set.h lib/findprog.h lib/findprog-in.c lib/flexmember.h lib/float.c lib/float+.h lib/float.in.h lib/flock.c lib/floor.c lib/fopen.c lib/fpending.c lib/fpending.h lib/fprintf.c lib/fpucw.h lib/free.c lib/frexp.c lib/frexpl.c lib/fseek.c lib/fseeko.c lib/fseterr.c lib/fseterr.h lib/fstatat.c lib/fstat.c lib/ftell.c lib/ftello.c lib/full-write.c lib/full-write.h lib/fwriting.c lib/fwriting.h lib/getcwd.c lib/getcwd-lgpl.c lib/getdelim.c lib/getdtablesize.c lib/getfilecon.c lib/getgroups.c lib/getline.c lib/getopt1.c lib/getopt.c lib/getopt-cdefs.in.h lib/getopt-core.h lib/getopt-ext.h lib/getopt.in.h lib/getopt_int.h lib/getopt-pfx-core.h lib/getopt-pfx-ext.h lib/getpass.c lib/getpass.h lib/get-permissions.c lib/getprogname.c lib/getprogname.h lib/getrandom.c lib/gettext.h lib/gettime.c lib/gettimeofday.c lib/gl_array_list.c lib/gl_array_list.h lib/gl_list.c lib/gl_list.h lib/group-member.c lib/hard-locale.c lib/hard-locale.h lib/hash.c lib/hash.h lib/hash-pjw.c lib/hash-pjw.h lib/hash-triple.h lib/hash-triple-simple.c lib/ialloc.c lib/ialloc.h lib/idx.h lib/ignore-value.h lib/intprops.h lib/inttypes.in.h lib/isnan.c lib/isnand.c lib/isnand-nolibm.h lib/isnanf.c lib/isnanf-nolibm.h lib/isnanl.c lib/isnanl-nolibm.h lib/itold.c lib/langinfo.in.h lib/lc-charset-dispatch.c lib/lc-charset-dispatch.h lib/libc-config.h lib/limits.in.h lib/localcharset.c lib/localcharset.h lib/localeconv.c lib/locale.in.h lib/lseek.c lib/lstat.c lib/malloca.c lib/malloca.h lib/malloc.c lib/math.c lib/math.in.h lib/mbrlen.c lib/mbrtowc.c lib/mbrtowc-impl.h lib/mbrtowc-impl-utf8.h lib/mbsinit.c lib/mbtowc.c lib/mbtowc-impl.h lib/mbtowc-lock.c lib/mbtowc-lock.h lib/memchr.c lib/mempcpy.c lib/memrchr.c lib/minmax.h lib/mkdir.c lib/mkostemp.c lib/mkstemp.c lib/mktime.c lib/mktime-internal.h lib/msvc-inval.c lib/msvc-inval.h lib/msvc-nothrow.c lib/msvc-nothrow.h lib/nl_langinfo.c lib/nl_langinfo-lock.c lib/_Noreturn.h lib/nstrftime.c lib/obstack.c lib/obstack.h lib/openat.c lib/openat-die.c lib/openat.h lib/openat-priv.h lib/openat-proc.c lib/open.c lib/opendir.c lib/parse-datetime.c lib/parse-datetime-gen.h lib/parse-datetime.h lib/pathmax.h lib/pipe.c lib/pipe-safer.c lib/printf-args.c lib/printf-args.h lib/printf.c lib/printf-frexp.c lib/printf-frexp.h lib/printf-frexpl.c lib/printf-frexpl.h lib/printf-parse.c lib/printf-parse.h lib/progname.c lib/progname.h lib/qcopy-acl.c lib/qset-acl.c lib/quotearg.c lib/quotearg.h lib/quote.h lib/raise.c lib/random_r.c lib/rawmemchr.c lib/read.c lib/readdir.c lib/read-file.c lib/read-file.h lib/readline.c lib/readline.h lib/readlink.c lib/reallocarray.c lib/realloc.c lib/regcomp.c lib/regex.c lib/regexec.c lib/regex.h lib/regex_internal.c lib/regex_internal.h lib/remove.c lib/rename.c lib/rewinddir.c lib/rmdir.c lib/root-uid.h lib/safe-read.c lib/safe-read.h lib/safe-write.c lib/safe-write.h lib/same-inode.h lib/save-cwd.c lib/save-cwd.h lib/sched.in.h lib/scratch_buffer.h lib/se-context.c lib/se-context.in.h lib/secure_getenv.c lib/se-label.c lib/se-label.in.h lib/se-selinux.c lib/se-selinux.in.h lib/set-acl.c lib/setenv.c lib/setlocale-lock.c lib/setlocale_null.c lib/setlocale_null.h lib/set-permissions.c lib/sigaction.c lib/sig-handler.c lib/sig-handler.h lib/signal.in.h lib/signbitd.c lib/signbitf.c lib/signbitl.c lib/sigprocmask.c lib/size_max.h lib/spawnattr_destroy.c lib/spawnattr_init.c lib/spawnattr_setflags.c lib/spawnattr_setsigmask.c lib/spawn.c lib/spawn_faction_addchdir.c lib/spawn_faction_addopen.c lib/spawn_faction_destroy.c lib/spawn_faction_init.c lib/spawni.c lib/spawn.in.h lib/spawn_int.h lib/spawnp.c lib/stat.c lib/stat-macros.h lib/stat-time.c lib/stat-time.h lib/stat-w32.c lib/stat-w32.h lib/stdalign.in.h lib/stdarg.in.h lib/stdbool.in.h lib/stddef.in.h lib/stdint.in.h lib/stdio-impl.h lib/stdio.in.h lib/stdio-read.c lib/stdio-write.c lib/stdlib.in.h lib/stpcpy.c lib/strcasecmp.c lib/strcasestr.c lib/strchrnul.c lib/strdup.c lib/streq.h lib/strerror.c lib/strerror-override.c lib/strerror-override.h lib/strftime.h lib/string.in.h lib/strings.in.h lib/stripslash.c lib/strncasecmp.c lib/strsep.c lib/str-two-way.h lib/strverscmp.c lib/sys_file.in.h lib/sys-limits.h lib/sys_random.in.h lib/sys_stat.in.h lib/sys_time.in.h lib/sys_types.in.h lib/sys_wait.in.h lib/tempname.c lib/tempname.h lib/thread-optim.h lib/timegm.c lib/time.in.h lib/time-internal.h lib/time_r.c lib/time_rz.c lib/timespec.c lib/timespec.h lib/tmpdir.c lib/tmpdir.h lib/tzset.c lib/unistd.c lib/unistd--.h lib/unistd.in.h lib/unistd-safer.h lib/unlink.c lib/unlocked-io.h lib/unsetenv.c lib/utime.c lib/utime.in.h lib/utimens.c lib/utimens.h lib/vasnprintf.c lib/vasnprintf.h lib/vasprintf.c lib/verify.h lib/version-etc.c lib/version-etc-fsf.c lib/version-etc.h lib/vfprintf.c lib/waitpid.c lib/wait-process.c lib/wait-process.h lib/warn-on-use.h lib/wchar.in.h lib/wcrtomb.c lib/wctob.c lib/wctomb.c lib/wctomb-impl.h lib/wctype-h.c lib/wctype.in.h lib/windows-initguard.h lib/windows-mutex.c lib/windows-mutex.h lib/windows-once.c lib/windows-once.h lib/windows-recmutex.c lib/windows-recmutex.h lib/windows-rwlock.c lib/windows-rwlock.h lib/windows-spawn.c lib/windows-spawn.h lib/write.c lib/xalloc-die.c lib/xalloc.h lib/xalloc-oversized.h lib/xmalloc.c lib/xsize.c lib/xsize.h # Package source files. src/rec-aggregate.c src/rec-buf.c src/rec.c src/rec-comment.c src/rec-crypt.c src/rec-crypt-dummy.c src/rec-db.c src/rec-fex.c src/rec-field.c src/rec-field-name.c src/rec.h src/rec-int.c src/rec-mset.c src/rec-parser.c src/rec-record.c src/rec-rset.c src/rec-sex-ast.c src/rec-sex-ast.h src/rec-sex.c src/rec-sex-parser.c src/rec-sex-parser.h src/rec-types.c src/rec-utils.c src/rec-utils.h src/rec-writer.c utils/csv2rec.c utils/mdb2rec.c utils/rec2csv.c utils/recdel.c utils/recfix.c utils/recfmt.c utils/recinf.c utils/recins.c utils/recsel.c utils/recset.c utils/recutl.c utils/recutl.h ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/uk.gmo������������������������������������������������������������������������������0000644�0000000�0000000�00000160024�14226577416�011666� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������Þ•�����0��� ��‘��������D�����L��„������L�����M��&���k��1���’�����Ä�� ���â��²�����‚���¶��Í���9��‹�����"���“�����¶�����Î�����è��"�������)��E��1!��Ó��w"��Ž��K$��N���Ú&��W���)'��[���'��[���Ý'��?��9(��M��y)�����Ç*��6���Û*�� ���+����� +��!���5+��H���W+��;��� +��@���Ü+��A���,�����_,��,���{,�����¨,��.���È,��'���÷,��(���-�����H-��2���h-��;���›-��2���×-��M��� .��S���X.��2���¬.��=���ß.��?���/��;���]/��V���™/��A���ð/��8���20��9���k0��%���¥0��)���Ë0��,���õ0��1���"1��7���T1��7���Œ1��1���Ä1��E���ö1��F���<2��F���ƒ2��4���Ê2��2���ÿ2��9���23��<���l3��U���©3��=���ÿ3��D���=4�����‚4�����„4�����4��5���¡4�� ���×4�� ���á4��ê��í4��#���Ø7��6���ü7�����38��%���M8�� ���s8�� ���”8��ë���µ8��a���¡9��¥���:��?���©:�����é:��&���w;�����ž;�����µ;�����Ò;�����î;��$���<�����+<�����=<�����X<�����i<�����r<�� ��‘<��L��Ÿ=�����ì?�����ü?�����@�� ���"@��#���-@��B���Q@��.��”@�����ÃB��1���ÞB�����C�����'C�����;C��f���WC��f���¾C�����%D�����-D�����GD��!���^D�����€D�����“D�����¨D�����ºD�����ÌD�� ���ëD��'���øD��-��� E��'���NE��X���vE��<���ÏE��%��� F��$���2F��z���WF��ƒ���ÒF��$���VG�����{G��;���’G��3���ÎG��/���H��+���2H��'���^H��#���†H�����ªH�����ÊH�����æH�����öH�� ���øH�� ���I�� ���:I�����[I�����yI��#���ŽI�����²I�����ÒI�����ñI�����J�����/J�����NJ�����mJ�����ŒJ�����«J�����ÃJ�����ãJ�����èJ�����ñJ��F���õJ��$���<K��0���aK��!���’K��.���´K�� ���ãK��>���ñK��/���0L�����`L��!���|L�� ���žL�����¿L��'���ÖL��*���þL�����)M�����GM��$���aM��&���†M�� ���­M��"���ÎM��(���ñM��&���N�����AN��.���[N�����ŠN�����N��%���®N�����ÔN��5���ÛN�����O�����$O�����5O��.���SO��A���‚O��`���ÄO��B���%P��A���hP��3���ªP��A���ÞP����� Q�����6Q�����MQ�����cQ�����zQ�����Q�� ���¦Q�� ���ÇQ�����ÕQ�����äQ��'���øQ�� ��� R�����AR��"���YR�����|R�����œR�����¸R�����ÔR�����åR�����S�����#S�����AS��<���`S�� ���S�����¨S�����¹S��%���ÊS�����ðS�����T�����,T�����3T��2���ET��=���xT��<���¶T��@���óT��-���4U�����bU�����qU�����‚U��(���šU��2���ÃU�� ���öU��#���V��"���;V��#���^V�� ���‚V�����£V��C���ÁV�����W�����W�����&W��;���AW�����}W�����—W��/���¦W��$���ÖW��I���ûW��5���EX�����{X��$���€X�����¥X�����¿X�����ÙX��:���éX��C���$Y��)���hY��(���’Y��+���»Y��+���çY��-���Z�� ���AZ��)���bZ��8���ŒZ��<���ÅZ��<���[��:���?[��F���z[��`���Á[�� ���"\�����.\��ÿ��3\��!���3^��H���U^��V���ž^��3���õ^��A���)_��J��k_����¶`��f��Èa��b��/c��Z���’d��$���íd��)���e��<���<e��^���ye��-��Øe��]��i��×��dk��G��<n��”���„r��—���s��µ���±s��³���gt��ª��u��ò��Æv��)���¹x��L���ãx�����0y��&���Fy��m���my��¨���Ûy��e���„z��o���êz��u���Z{��7���Ð{��i���|��=���r|��Z���°|��L��� }��N���X}��9���§}��K���á}��M���-~��X���{~��Æ���Ô~��Ì���›��v���h€��€���߀��x���`��•���Ù��¨���o‚��{���ƒ��€���”ƒ��~���„��E���”„��J���Ú„��J���%…��X���p…��i���É…��c���3†��h���—†��‰����‡��Š���Ї��Š���ˆ��]��� ˆ��H���þˆ��k���G‰��_���³‰��Ÿ���Š��[���³Š��n���‹�����~‹��@���‹�����‹��]���Å‹�����#Œ�����6Œ��"��SŒ��C���v��š���º��?���U‘��F���•‘�����Ü‘�����j’��ü��ú’��ß���÷”��÷���ו��®���Ï–��Y��~—��K���ؘ��8���$™��;���]™��8���™™��&���Ò™��N���ù™��<���Hš��5���…š��"���»š�����Þš��R���ôš��’��G›��•��Úœ��'���p ��,���˜ �����Å �����â ��O���ñ ��p���A¡��÷��²¡��@���ª¤��W���ë¤��D���C¥��?���ˆ¥��1���È¥�����ú¥�����˜¦�� ���6§��-���A§�����o§��9���ާ��7���ȧ��0����¨��C���1¨��C���u¨��P���¹¨��:��� ©��I���E©��X���©��I���è©��‘���2ª��m���Ī��F���2«��E���y«��Í���¿«��Ô���¬��E���b­��*���¨­��@���Ó­��6���®��2���K®��.���~®��*���­®��&���Ø®��"���ÿ®�����"¯�����A¯�����U¯��M���X¯��O���¦¯��S���ö¯��\���J°��P���§°��P���ø°��@���I±��?���б��?���ʱ��?��� ²��?���J²��?���в��?���ʲ��?��� ³��1���J³��1���|³�����®³�����·³�����ʳ�����Ó³��?���q´��n���±´��?��� µ��h���`µ�����ɵ��}���àµ��p���^¶��`���϶��n���0·��P���Ÿ·��5���ð·��W���&¸��~���~¸��D���ý¸��3���B¹��_���v¹��k���Ö¹��B���Bº��K���…º��V���Ѻ��K���(»��9���t»��K���®»�����ú»�����¼��Q���8¼�����м��_���›¼��,���û¼��'���(½��S���P½��Z���¤½��Â���ÿ½��¡���¾��¡���d¿�� ���À��’���§À��Ÿ���:Á��/���ÚÁ��0��� Â��/���;Â��0���kÂ��/���œÂ��/���ÌÂ��C���üÂ�����@Ã��3���_Ã��;���“Ã��Q���ÏÃ��L���!Ä��-���nÄ��H���œÄ��?���åÄ��2���%Å��2���XÅ��)���‹Å��6���µÅ��;���ìÅ��/���(Æ��0���XÆ�����‰Æ�����Ç��"���4Ç��/���WÇ��8���‡Ç��7���ÀÇ��?���øÇ�� ���8È�����CÈ��j���cÈ��e���ÎÈ��o���4É��o���¤É��b���Ê��$���wÊ��&���œÊ��2���ÃÊ��H���öÊ��W���?Ë��>���—Ë��>���ÖË��D���Ì��g���ZÌ��I���ÂÌ��8��� Í��ß���EÍ�����%Î��3���6Î��:���jÎ��¾���¥Î��.���dÏ��"���“Ï��Q���¶Ï��7���Ð�� ���@Ð��V���áÐ�����8Ñ��G���?Ñ��5���‡Ñ��>���½Ñ��!���üÑ��k���Ò��Ó���ŠÒ��¥���^Ó��p���Ô��f���uÔ��f���ÜÔ��f���CÕ��O���ªÕ��k���úÕ��j���fÖ��h���ÑÖ��h���:×��s���£×�����Ø��²���¥Ø�����XÙ�����tÙ�����Ú���Œ���ý���n���W��������� ���y���œ���•���g���ë�����������€�����½�������ú�����������������F�������(���D��� ���ƒ�����������������/���ä�����������H������a���æ�����������Í���¶�������>������1�����w����������T���Q���ˆ���������������-���ã���†���`���M������������������� ��’�������ù�������Ó���j���þ���Ö���h���<���×����������i��� ����������·�����A���v���ž���Ä��� ��!���“���Ý���Y���å���È���¤���ß���O��������������������ò���G�������e���U����������������������¸���o���»�����������%���J���������Â�����������#���±���,�������������������Ü�������ö������&�������ç���¦���}���è���º������ ��� ��ð���é���������V��� �����������R���K���µ���°�������Ù�������[���Ÿ���|�������î����������Þ�����������É���u�������¿���:�������$�������û������Û������Ï�������\�������Ì���¥���������à���–����������¯����������³�������B���������������”���ü���3��������������x���7���L���*���������Š���Ñ�����~�������+�������‚������ô���_���Å�������k���Ã���´����������m�������â���P���À���¹���C���ó����������������������í���„���^�������ì���f�������l���¢�����������N���8�������¨���'�����¼�������š���]���¾���Ç���ñ���;���Õ���9���=���)���p��������������������� ��‰���©�������Æ������������� �����ª���õ���4���Î����������d���ø�������0���I�������t���Ô�������.���r�������—���?�����������"���§���‡���5���S����������›�������˜����������™���������Ø���Z���c���Ž���á������¡�����‘���¬�������«�����������÷�������‹�������²�����������Á������� ���®���6������ï������������������������2���ÿ����� �������X���Ë���Ð�����������������������Ê���­���b������z���£���ê���{���Ò���@���q�������s���…���E������}Ù��¼��Ð��ä��ø����(��D��X��l��€��¤��¸��Ü��ð������,��@��\��p��Œ�� ��´��È��ì�����$��8��…Ù�� ����������ÿÿÿÿÙ��������� ���ÿÿÿÿ¬Ù������������ÿÿÿÿÁÙ�������������������ÿÿÿÿõÙ���������0���ÿÿÿÿ5Ú�������������������ÿÿÿÿ[Ú������������ÿÿÿÿwÚ������������ÿÿÿÿÚ���������/���ÿÿÿÿÝÚ��������� ������� ������� ���ÿÿÿÿÛ������������ÿÿÿÿ,Û��������� ������� ����������ÿÿÿÿoÛ������������ÿÿÿÿÛ������������ÿÿÿÿ®Û�� ����������ÿÿÿÿºÛ��#����������ÿÿÿÿíÛ��"����������ÿÿÿÿÜ��,��������������C���ÿÿÿÿ›Ü��,�������h���ÿÿÿÿ/Ý��H�����������������ÿÿÿÿ€Ý��^����������ÿÿÿÿàÝ��F����������ÿÿÿÿ*Þ��W�������@���ÿÿÿÿÁÞ��.��������������������� ���ÿÿÿÿß������������ÿÿÿÿ@ß��.������������������������ÿÿÿÿ«ß������������ÿÿÿÿÞß���������!���ÿÿÿÿ� Written by Jose E. Marchesi.� invalid day/month combination; � non-existing due to daylight-saving time; � normalized time: '%s' � numeric values overflow; � --encrypt encrypt confidential fields in the specified file. --decrypt decrypt confidential fields in the specified file. � --help print a help message and exit. --version show version and exit. � --no-external don't use external descriptors. --force alter the records even if violating record restrictions. � --no-external don't use external descriptors. --force force the requested operation. � adjusted Y M D: %s %02d %02d � possible reasons: � new date/time = '%s' � user provided time: '%s' � normalized Y M D: %s %02d %02d � -c, --comment comment out the matching records instead of deleting them. --force delete even in potentially dangerous situations, and if the deletion is violating record restrictions. --no-external don't use external descriptors. --verbose give a detailed report if the integrity check fails. � -d, --delim=char sets the deliminator (default ',') -t, --type=TYPE record set to convert to csv; if this parameter is omitted then the default record set is used -S, --sort=FIELDS sort the output by the specified fields. � -d, --include-descriptors print record descriptors along with the matched records. -C, --collapse do not section the result in records with newlines. -S, --sort=FIELD,... sort the output by the specified fields. -G, --group-by=FIELD,... group records by the specified fields. -U, --uniq remove duplicated fields in the output records. � -f, --field=STR field name; should be followed by a -v. -v, --value=STR field value; should be preceded by an -f. -r, --record=STR record that will be inserted in the file. --force insert the record even if it is violating record restrictions. --no-external don't use external descriptors. --no-auto don't insert auto generated fields. --verbose give a detailed report if the integrity check fails. � -f, --file=FILENAME read the template to apply from a file. � -j, --join=FIELD perform an inner join using the specified field. � -s, --password=STR decrypt confidential fields with the given password. � -s, --password=STR encrypt confidential fields with the given password. � -s, --system-tables include system tables. -e, --keep-empty-fields don't prune empty fields in the rec output. -l, --list-tables dump a list of the table names contained in the mdb file. � -t, --type=RECORD_TYPE print information on the records having the specified type. -d, --descriptor include the full record descriptors. -n, --names-only output just the names of the record files found in the input. �%s home page: <%s> �%s home page: <http://www.gnu.org/software/recutils/> �%s subprocess�%s subprocess failed�%s subprocess got fatal signal %d�%s: %lu: this line contains %lu fields, but %lu header fields were read �%s: error: the number of records of type %s should be %zd. �%s: error: too few records of type %s. Minimum allowed are %zd. �%s: error: too many records of type %s. Maximum allowed are %zd. �%s: invalid option -- '%c' �%s: option '%s%s' doesn't allow an argument �%s: option '%s%s' is ambiguous �%s: option '%s%s' is ambiguous; possibilities:�%s: option '%s%s' requires an argument �%s: option requires an argument -- '%c' �%s: unrecognized option '%s%s' �%s:%s: error: %%constraint[%d] violated in record �%s:%s: error: %s does not contain information for type %s. �%s:%s: error: %s does not contain valid rec data. �%s:%s: error: auto-incremented field %s should be of type int, range or date �%s:%s: error: auto-incremented field %s should be of type int, range, uuid or date �%s:%s: error: confidential field is not encrypted �%s:%s: error: could not fetch remote descriptor from url %s. �%s:%s: error: could not read external descriptor from file %s. �%s:%s: error: duplicated key value in field '%s' in record �%s:%s: error: expected a comma-separated list of fields before the type specification �%s:%s: error: expected a type name before the type specification �%s:%s: error: field '%s' not allowed in this record set �%s:%s: error: field '%s' should be unique in this record �%s:%s: error: invalid record type %s �%s:%s: error: invalid type specification �%s:%s: error: invalid typedef specification �%s:%s: error: key field '%s' not found in record �%s:%s: error: mandatory field '%s' not found in record �%s:%s: error: missing %%rec field in record descriptor �%s:%s: error: multiple key fields '%s' in record �%s:%s: error: only one %%key field is allowed in a record descriptor �%s:%s: error: only one %%size field is allowed in a record descriptor �%s:%s: error: only one %%sort field is allowed in a record descriptor �%s:%s: error: prohibited field '%s' found in record �%s:%s: error: the referred type %s does not exist �%s:%s: error: too many %%rec fields in record descriptor �%s:%s: error: value for %s should be a list of field names. �%s:%s: error: value for %s should be a number optionally preceded by >, <, >= or <=. �%s:%s: error: value for %s[%zd] is not a list of field names �%s:%s: error: value for %s[%zd] is not a valid selection expression �'�'@timespec' - always UTC�(C)�--password|-s must be used as an operation argument. �: error: �: warning: �Actions: -s, --set=VALUE change the value of the selected fields. -a, --add=VALUE add the selected fields with the given value. -S, --set-add=VALUE change the value of the selected fields. If they don't exist then add a new field with that value. -r, --rename=NAME rename the selected fields to a given name. If an entire record set is selected then the field is renamed in the record descriptor as well. -d, --delete delete the selected fields. -c, --comment comment out the selected fields. �Alter or delete fields in records. �Apply a template to records read from standard input. �Check and fix rec files. �Convert an mdb file into a rec file. �Convert csv data into rec data. �Convert rec data into csv data. �Copyright (C) %s Jose E. Marchesi. License GPLv3+: GNU GPL version 3 or later <http://gnu.org/licenses/gpl.html>. This is free software: you are free to change and redistribute it. There is NO WARRANTY, to the extent permitted by law. �De/Encryption options: -s, --password=PASSWORD encrypt/decrypt with this password. �Field selection options: -f, --fields=FIELDS comma-separated list of field names with optional subscripts. �General help using GNU software: <http://www.gnu.org/gethelp/> �If no FILE is specified then the command acts like a filter, getting the data from standard input and writing the result to standard output. �Insert new records in a rec database. �Invalid back reference�Invalid character class name�Invalid collation character�Invalid content of \{\}�Invalid preceding regular expression�Invalid range end�Invalid regular expression�Memory exhausted�No match�No previous regular expression�Operations: --check check integrity of the specified file. Default. --sort sort the records in the specified file. --auto insert auto-generated fields in records missing them. �Output options: -p, --print=FIELDS comma-separated list of fields to print for each matching record. -P, --print-values=FIELDS as -p, but print only the values of the selected fields. -R, --print-row=FIELDS as -P, but separate the values with spaces instead of newlines. -c, --count print a count of the matching records instead of the records themselves. �Packaged by %s �Packaged by %s (%s) �Password again: �Password: �Premature end of regular expression�Print information about the types of records stored in the input. �Record selection options: -i, --case-insensitive make strings case-insensitive in selection expressions. -t, --type=TYPE operate on records of the specified type only. -e, --expression=RECORD_EXPR selection expression. -q, --quick=STR select records with fields containing a string. -n, --number=NUM,... select specific records by position, with ranges. -m, --random=NUM select a given number of random records. �Regular expression too big�Remove (or comment out) records from a rec file. �Report %s bugs to: %s �Report bugs to: %s �Select and print rec data. �Special options: --print-sexps print the data in sexps instead of rec format. �Special options: -S, --print-sexps print the data in sexps instead of rec format. �Success�TZ="%s" environment value�TZ="%s" in date string�TZ="UTC0" environment value or -u�Trailing backslash�Unknown system error�Unmatched ( or \(�Unmatched ) or \)�Unmatched [, [^, [:, [., or [=�Unmatched \{�Usage: csv2rec [OPTIONS]... [CSV_FILE] �Usage: mdb2rec [OPTIONS]... MDB_FILE [TABLE] �Usage: rec2csv [OPTIONS]... [REC_FILE] �Usage: recdel [OPTIONS]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [FILE] �Usage: recfix [OPTION]... [OPERATION] [OP_OPTION]... [FILE] �Usage: recfmt [OPTION]... [TEMPLATE] �Usage: recinf [OPTION]... [FILE]... �Usage: recins [OPTION]... [-t TYPE] [-n NUM | -e RECORD_EXPR | -q STR | -m NUM] [(-f NAME -v STR) | -r RECDATA]... [FILE] �Usage: recsel [OPTION]... [-t TYPE] [-j FIELD] [-n INDEXES | -e RECORD_EXPR | -q STR | -m NUM] [-c | (-p|-P) FIELD_EXPR] [FILE]... �Usage: recset [OPTION]... [FILE]... �Written by %s and %s. �Written by %s, %s, %s, %s, %s, %s, %s, %s, %s, and others. �Written by %s, %s, %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, %s, and %s. �Written by %s, %s, %s, %s, and %s. �Written by %s, %s, %s, and %s. �Written by %s, %s, and %s. �Written by %s. �`�a -f should be followed by a -v �a -v should be preceded by a -f �can't open file %s for reading. �cannot create a unique name. �cannot read file %s �cannot specify -[pPR] and also -c. �cannot specify -c and also -p. �cannot specify -e and also -n �cannot specify -e and also -q �cannot specify -m and also -e �cannot specify -m and also -n �cannot specify -m and also -q �cannot specify -n and also -e �cannot specify -n and also -q �could not open file %s �creating the field expression. �date�datetime�day�don't specify a template in the command line and -f at the same time. �duplicated record set '%s' from %s. �error evaluating expression in a template slot. �error while parsing CSV file: %s �error while parsing the record provided by -r �error: %s:%d �error: adding relative date resulted in an invalid date: '%s' �error: adding relative time caused an overflow �error: cannot read file %s �error: initial year out of range �error: invalid date/time value: �error: parsing failed �error: parsing failed, stopped at '%s' �error: timezone %d caused time_t overflow �error: tzalloc ("%s") failed �error: unknown word '%s' �error: year, month, or day overflow �expected an integer between %d and %d.�failed to initialize csv parser �failed to normalise field name %s �failed to normalise record type name %s �failed to normalise the field name %s �file %s is not writable. �file does not appear to be an Access database �final: %s (UTC%s) �final: %s (UTC) �final: %s (unknown time zone offset) �hybrid�ignoring a request to delete all records of type %s. �incorrect timezone�input timezone: �internal error creating fex. �internal error creating the field expression. �internal error: REC_FEX_MAX_ELEMS exceeded. Please report this. �internal error: rec-types: got REC_TYPE_NONE from rec_type_parse_type_kind() in rec_type_new(). �internal error: rec_int_rec_extract_file: error compiling regexp. �internal error: rec_int_rec_extract_url: error compiling regexp. �internal error: rec_match: error compiling regexp. �internal error: recutl_index_list_parse: error compiling regexp. �invalid 'bool' value.�invalid 'field' value.�invalid 'line' value.�invalid 'range' value.�invalid 'real' value.�invalid 'uuid' value.�invalid aggregate function '%s' �invalid date.�invalid email.�invalid enum value.�invalid expression in a template slot. �invalid field expression in -f. �invalid field name %s. �invalid field name '%s' in header �invalid field name list in -S. �invalid field names in -G. �invalid field names in -S. �invalid integer.�invalid list of fields in -%c �invalid list of indexes in -n �invalid selection expression �invalid selection expression. �joins can only be used when a named record set is selected. �local_zone�memory exhausted�missing timezone�more than one password was specified �new start date: '%s' is '%s' �no records of type %s found. �number�number of seconds�only one field can be specified as join criteria. �only one field list can be specified as a grouping criteria. �only one field list can be specified as a sorting criteria. �only one list of fields can be specified as a sorting criteria. �operation aborted due to integrity failures. �out of memory �parsed %s part: �parsed date/time string�please provide a value for the field %s �please specify a correct field name to -j|--join. �please specify just one action. �please specify just one operation. �please specify just one password. �please specify some field with -f. �please use --force or --decrypt �preserving permissions for %s�recfmt_apply_template: error compiling regexp. Please report this. �relative�renaming file %s to %s �setting permissions for %s�several record types found. Please use -t to specify one. �starting date/time: '%s' �system default�the database contains already encrypted fields �the provided passwords don't match. �the rename operation requires just one field with an optional subscript. �the specified operation does not require a password. �time�timezone: TZ="%s" environment value �timezone: Universal Time �timezone: system default �today/this/now �unknown operation in recfix: please report this as a bug. �use --force if you really want to proceed, or use either -n or -e. �use --force to skip the integrity check. �use --verbose to get a detailed report. �using current date as starting value: '%s' �using current time as starting value: '%s' �using specified time as starting value: '%s' �value does not match the regexp.�value too large. Expected a size <= %zu.�warning: day (%s) ignored when explicit dates are given �warning: daylight saving time changed after date adjustment �warning: daylight saving time changed after time adjustment �warning: month/year adjustment resulted in shifted dates: �warning: when adding relative days, it is recommended to specify noon �warning: when adding relative months/years, it is recommended to specify the 15th of the months �write error�zone�Project-Id-Version: GNU recutils 1.8 Report-Msgid-Bugs-To: bug-gnu-utils@gnu.org POT-Creation-Date: 2022-04-16 19:38+0200 PO-Revision-Date: 2019-01-03 21:45+0200 Last-Translator: Yuri Chornoivan <yurchor@ukr.net> Language-Team: Ukrainian <translation-team-uk@lists.sourceforge.net> Language: uk MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit X-Bugs: Report translation errors to the Language-Team address. X-Generator: Lokalize 2.0 Plural-Forms: nplurals=1; plural=0; � Ðвтор — Jose E. Marchesi.� некоректна ÐºÐ¾Ð¼Ð±Ñ–Ð½Ð°Ñ†Ñ–Ñ Ð´ÐµÐ½ÑŒ-міÑÑць; � не Ñ–Ñнує через викориÑÑ‚Ð°Ð½Ð½Ñ Ð»Ñ–Ñ‚Ð½ÑŒÐ¾Ð³Ð¾ чаÑу; � нормалізований чаÑ: «%s» � Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ñ‡Ð¸Ñлових значень; � --encrypt зашифрувати вміÑÑ‚ полів з конфіденційними даними у вказаному файлі. --decrypt розшифрувати вміÑÑ‚ полів з конфіденційними даними у вказаному файлі. � --help показати довідкове Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ– завершити роботу. --version показати Ð¿Ð¾Ð²Ñ–Ð´Ð¾Ð¼Ð»ÐµÐ½Ð½Ñ Ñ‰Ð¾Ð´Ð¾ верÑÑ–Ñ— Ñ– завершити роботу. � --no-external не викориÑтовувати зовнішніх деÑкрипторів. --force змінювати запиÑи, навіть Ñкщо у результаті буде порушено обмеженнÑ, накладені на запиÑ. � --no-external не викориÑтовувати зовнішніх деÑкрипторів. --force змінювати запиÑи, навіть Ñкщо у результаті буде порушено обмеженнÑ, накладені на запиÑ. � кориговані Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾ÐºÑƒ, міÑÑÑ†Ñ Ñ– днÑ: %s %02d %02d � можливі причини: � нова дата Ñ– Ñ‡Ð°Ñ = «%s» � чаÑ, наданий кориÑтувачем: «%s» � нормалізоване Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾ÐºÑƒ, міÑÑÑ†Ñ Ñ– днÑ: %s %02d %02d � -c, --comment закоментувати відповідні запиÑи заміÑть їхнього вилученнÑ. --force вилучати навіть у потенційно небезпечних ÑитуаціÑÑ… Ñ– Ñкщо Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ñ€Ð¸Ð·Ð²Ð¾Ð´Ð¸Ñ‚Ð¸ до Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½ÑŒ запиÑу. --no-external не викориÑтовувати зовнішніх деÑкрипторів. --verbose надати докладний звіт у разі, Ñкщо буде виÑвлено помилку ціліÑноÑті бази даних. � -d, --delim=Ñимвол вÑтановити Ñимвол-роздільник (типовим Ñимволом Ñ” «,») -t, --type=ТИП набір запиÑів, Ñкі Ñлід перетворити у формат csv; Ñкщо цього параметра не буде вказано, викориÑтовуватиметьÑÑ Ñ‚Ð¸Ð¿Ð¾Ð²Ð¸Ð¹ набір запиÑів -S, --sort=ПОЛЯ впорÑдкувати виведені дані за вміÑтом вказаних полів. � -d, --include-descriptors показувати деÑкриптори запиÑів разом з відповідними запиÑами. -C, --collapse не поділÑти окремі запиÑи у результатах Ñимволами нового Ñ€Ñдка. -S, --sort=ПОЛЕ впорÑдкувати виведені дані за вміÑтом вказаного полÑ. -G, --group-by=ПОЛЕ,... згрупувати Ð·Ð°Ð¿Ð¸Ñ Ð·Ð° вказаними полÑми. -U, --uniq вилучити дублікати полів з виведених запиÑів. � -f, --field=РЯДОК назва полÑ; піÑÐ»Ñ Ñ†ÑŒÐ¾Ð³Ð¾ параметра Ñлід вказати параметр -v. -v, --value=РЯДОК Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð»Ñ; перед цим параметром Ñлід вказати параметр -f. -r, --record=РЯДОК запиÑ, Ñкий буде додано до файла. --force додати запиÑ, навіть Ñкщо його Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð¿Ð¾Ñ€ÑƒÑˆÑƒÑ” обмеженнÑ, накладені на запиÑ. --no-external не викориÑтовувати зовнішніх деÑкрипторів. --no-auto не вÑтавлÑти автоматично Ñтворених полів. --verbose надати докладний звіт у разі, Ñкщо Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð¿ÐµÑ€ÐµÐ²Ñ–Ñ€ÐºÐ¸ ціліÑноÑті зазнає невдачі. � -f, --file=ÐÐЗВÐ_ФÐЙЛРпрочитати дані шаблону, Ñкий Ñлід заÑтоÑувати з файла. � -j, --join=ПОЛЕ виконати внутрішнє Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð·Ð° допомогою вказаного полÑ. � -s, --password=РЯДОК розшифрувати Ð¿Ð¾Ð»Ñ Ð· конфіденційними даними за допомогою вказаного паролÑ. � -s, --password=РЯДОК зашифрувати Ð¿Ð¾Ð»Ñ Ð· конфіденційними даними за допомогою вказаного паролÑ. � -s, --system-tables включити ÑиÑтемні таблиці. -e, --keep-empty-fields не вирізати порожні Ð¿Ð¾Ð»Ñ Ð· виведених даних rec. -l, --list-tables показати ÑпиÑок назв таблиць, що міÑÑ‚ÑтьÑÑ Ñƒ файлі mdb. � -t, --type=ТИП_ЗÐПИСУ показати дані щодо запиÑів, Ñкі міÑÑ‚Ñть Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ð³Ð¾ типу. -d, --descriptor включити повні деÑкриптори запиÑів. -n, --names-only показати лише назви файлів запиÑів, Ñкі буде виÑвлено у вхідних даних. �Ð”Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñторінка %s: <%s> �Ð”Ð¾Ð¼Ð°ÑˆÐ½Ñ Ñторінка %s: <http://www.gnu.org/software/recutils/> �ÐŸÑ–Ð´Ð¿Ñ€Ð¾Ñ†ÐµÑ %s�Помилка підпроцеÑу %s�ПідпроцеÑом %s отримано Ñигнал щодо аварійного Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ %d�%s: %lu: у цьому Ñ€Ñдку міÑтитьÑÑ %lu полÑ. Це не збігаєтьÑÑ Ð· кількіÑтю прочитаних заголовків, %lu. �%s: помилка: кількіÑть запиÑів типу %s має дорівнювати %zd. �%s: помилка: замало запиÑів типу %s. Мінімальною кількіÑтю Ñ” %zd. �%s: помилка: забагато запиÑів типу %s. МакÑимальною кількіÑтю Ñ” %zd. �%s: некоректний параметр — «%c» �%s: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð°Ñ€Ð³ÑƒÐ¼ÐµÐ½Ñ‚Ñ–Ð² до параметра «%s%s» не передбачено �%s: параметр «%s%s» не Ñ” однозначним �%s: неоднозначний параметр «%s%s»; можливі варіанти:�%s: до параметра «%s%s» Ñлід додати аргумент �%s: до параметра Ñлід додати аргумент — «%c» �%s: нерозпізнаний параметр «%s%s» �%s:%s: помилка: Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ %%constraint[%d] у запиÑÑ– �%s:%s: помилка: у %s не міÑтитьÑÑ Ð´Ð°Ð½Ð¸Ñ… типу %s. �%s:%s: помилка: у %s не міÑтитьÑÑ ÐºÐ¾Ñ€ÐµÐºÑ‚Ð½Ð¸Ñ… даних rec. �%s:%s: помилка: поле з автоматичним збільшеннÑм Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s має міÑтити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ð¾Ð³Ð¾ типу, діапазон або дату �%s:%s: помилка: поле з автоматичним збільшеннÑм Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ %s має міÑтити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ð¾Ð³Ð¾ типу, діапазон, UUID або дату �%s:%s: помилка: вміÑÑ‚ Ð¿Ð¾Ð»Ñ Ð· конфіденційними даними не зашифровано �%s:%s: помилка: не вдалоÑÑ Ð¾Ñ‚Ñ€Ð¸Ð¼Ð°Ñ‚Ð¸ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´ÐµÑкриптора за адреÑою url %s. �%s:%s: помилка: не вдалоÑÑ Ð¿Ñ€Ð¾Ñ‡Ð¸Ñ‚Ð°Ñ‚Ð¸ зовнішній деÑкриптор з файла %s. �%s:%s: помилка: у запиÑÑ– виÑвлено Ð´ÑƒÐ±Ð»ÑŽÐ²Ð°Ð½Ð½Ñ Ð²ÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ ÐºÐ»ÑŽÑ‡Ð° у полі «%s» �%s:%s: помилка: перед Ñпецифікацією типу мало бути вказано ÑпиÑок полів, відокремлених комами �%s:%s: помилка: перед Ñпецифікацією типу мало бути вказано назву типу �%s:%s: помилка: у цьому наборі запиÑів не можна викориÑтовувати поле «%s» �%s:%s: помилка: у цьому запиÑÑ– можна викориÑтовувати лише одне поле «%s» �%s:%s: помилка: некоректний тип запиÑу %s �%s:%s: помилка: некоректне Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ �%s:%s: помилка: некоректне Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ‚Ð¸Ð¿Ñƒ �%s:%s: помилка: у запиÑÑ– не виÑвлено Ð¿Ð¾Ð»Ñ ÐºÐ»ÑŽÑ‡Ð° «%s» �%s:%s: помилка: у запиÑÑ– не виÑвлено обов’Ñзкового Ð¿Ð¾Ð»Ñ Â«%s» �%s:%s: помилка: у деÑкрипторі запиÑу не виÑтачає Ð¿Ð¾Ð»Ñ %%rec �%s:%s: помилка: у запиÑÑ– виÑвлено декілька полів ключів «%s» �%s:%s: помилка: у деÑкрипторі запиÑу можна викориÑтовувати лише одне поле %%key �%s:%s: помилка: у деÑкрипторі запиÑу можна викориÑтовувати лише одне поле %%size �%s:%s: помилка: у деÑкрипторі запиÑу можна викориÑтовувати лише одне поле %%sort �%s:%s: помилка: у запиÑÑ– виÑвлено заборонене поле «%s» �%s:%s: помилка: вказаного типу, %s, не Ñ–Ñнує �%s:%s: помилка: у деÑкрипторі запиÑу занадто багато полів %%rec �%s:%s: помилка: значеннÑм %s має бути ÑпиÑок назв полів. �%s:%s: помилка: значеннÑм %s має бути чиÑло, перед Ñким може бути вказано Ñимвол >, <, >= або <=. �%s:%s: помилка: значеннÑм %s[%zd] не Ñ” ÑпиÑок назв полів �%s:%s: помилка: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ %s[%zd] не Ñ” коректним виразом вибору �»�«@timespec» — завжди вÑеÑвітній Ñ‡Ð°Ñ (UTC)�©�Як аргумент операції має бути викориÑтано --password|-s. �: помилка: �: попередженнÑ: �Дії: -s, --set=ЗÐÐЧЕÐÐЯ змінити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ñ… полів на вказане. -a, --add=ЗÐÐЧЕÐÐЯ додати вибрані Ð¿Ð¾Ð»Ñ Ð· вказаним значеннÑм. -S, --set-add=ЗÐÐЧЕÐÐЯ змінити Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ñ… полів. Якщо цих полів не Ñ–Ñнує, додати нове поле з цим значеннÑм. -r, --rename=ÐÐЗВРперейменувати позначені полÑ, надавши їм вказаної назви. Якщо вибрано веÑÑŒ набір запиÑів, поле буде перейменовано Ñ– у деÑкрипторі запиÑів. -d, --delete вилучити вибрані полÑ. -c, --comment закоментувати вибрані полÑ. �Зміна або Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð¿Ð¾Ð»Ñ–Ð² у запиÑах. �ЗаÑтоÑÑƒÐ²Ð°Ð½Ð½Ñ ÑˆÐ°Ð±Ð»Ð¾Ð½Ñƒ до запиÑів, прочитаних зі Ñтандартного джерела вхідних даних. �Перевірка Ñ– Ð²Ð¸Ð¿Ñ€Ð°Ð²Ð»ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ñ–Ð² rec. �ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° mdb на файл даних rec. �ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… csv (ÑпиÑку значень відокремлених роздільниками) у дані rec. �ÐŸÐµÑ€ÐµÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… rec у файли csv (ÑпиÑку значень відокремлених роздільниками). �ÐвторÑькі права належать Jose E. Marchesi, %s. Умови Ð»Ñ–Ñ†ÐµÐ½Ð·ÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ»Ð°Ð´ÐµÐ½Ð¾ у GPLv3+: GNU GPL верÑÑ–Ñ— 3 або новішій, <http://gnu.org/licenses/gpl.html> Це вільне програмне забезпеченнÑ: ви можете вільно змінювати Ñ– поширювати його. Вам не надаєтьÑÑ Ð–ÐžÐ”ÐИХ ГÐРÐÐТІЙ, окрім гарантій передбачених законодавÑтвом. �Параметри Ñ€Ð¾Ð·ÑˆÐ¸Ñ„Ñ€ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‚Ð° шифруваннÑ: -s, --password=ПÐРОЛЬ зашифрувати або розшифрувати на оÑнові вказаного паролÑ. �Параметри вибору полів: -f, --fields=ПОЛЯ ÑпиÑок назв полів, відокремлених комами, з додатковими індекÑами. �Загальна довідкова Ñ–Ð½Ñ„Ð¾Ñ€Ð¼Ð°Ñ†Ñ–Ñ Ñ‰Ð¾Ð´Ð¾ викориÑÑ‚Ð°Ð½Ð½Ñ Ð¿Ñ€Ð¾Ð³Ñ€Ð°Ð¼Ð½Ð¾Ð³Ð¾ Ð·Ð°Ð±ÐµÐ·Ð¿ÐµÑ‡ÐµÐ½Ð½Ñ GNU: <http://www.gnu.org/gethelp/> �Якщо не буде вказано Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¤ÐЙЛ, програма працюватиме у режимі фільтруваннÑ: отримуватиме дані зі Ñтандартного джерела вхідних даних Ñ– виводитиме ці дані до Ñтандартного виводу даних. �Ð”Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð½Ð¾Ð²Ð¸Ñ… запиÑів до бази даних rec. �Ðекоректне зворотне поÑиланнÑ�Ðекоректна назва клаÑу Ñимволів�Ðекоректний Ñимвол порівнÑннÑ�Ðекоректний вміÑÑ‚ \{\}�Помилка у попередньому формальному виразі�Ðекоректне Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ð´Ñ–Ð°Ð¿Ð°Ð·Ð¾Ð½Ñƒ�Помилка у формальному виразі�Пам’Ñть вичерпано�Ðе знайдено�Ðе виÑвлено попереднього формального виразу�Дії: --check перевірити ціліÑніÑть вказаного файла. Типова діÑ. --sort впорÑдкувати запиÑи у вказаному файлі. --auto вÑтавити автозаповнені Ð¿Ð¾Ð»Ñ Ð´Ð¾ запиÑів, у Ñких Ñ—Ñ… не виÑтачає. �Параметри Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…: -p, --print=ПОЛЯ ÑпиÑок полів, відокремлених комами, Ñкі Ñлід показати Ð´Ð»Ñ ÐºÐ¾Ð¶Ð½Ð¾Ð³Ð¾ відповідного запиÑу. -P, --print-values=ПОЛЯ те Ñаме, що Ñ– -p, але показувати лише Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ð±Ñ€Ð°Ð½Ð¸Ñ… полів. -R, --print-row=ПОЛЯ те Ñаме, що Ñ– -P, але з відокремленнÑм значень пробілами заміÑть Ñимволів нового Ñ€Ñдка. -c, --count показати кількіÑть відповідних запиÑів заміÑть Ñамих запиÑів. �ÐŸÐ°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾ %s �ÐŸÐ°ÐºÑƒÐ²Ð°Ð½Ð½Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð¾ %s (%s) �Пароль (ще раз): �Пароль: �Ðеочікуване Ð·Ð°Ð²ÐµÑ€ÑˆÐµÐ½Ð½Ñ Ñ„Ð¾Ñ€Ð¼Ð°Ð»ÑŒÐ½Ð¾Ð³Ð¾ виразу�Показ даних щодо типів запиÑів, що міÑÑ‚ÑтьÑÑ Ñƒ вхідних даних. �Параметри вибору запиÑів: -i, --case-insensitive не зважати на регіÑтр Ñимволів у виразах вибору. -t, --type=ТИП оброблÑти лише запиÑи вказаного типу. -e, --expression=ВИРÐЗ вираз Ð´Ð»Ñ Ð²Ð¸Ð±Ð¾Ñ€Ñƒ. -q, --quick=РЯДОК вибрати запиÑи з полÑми, що міÑÑ‚Ñть Ñ€Ñдок. -n, --number=ÐОМЕР вибрати Ð·Ð°Ð¿Ð¸Ñ Ð· вказаним номером. -m, --random=КІЛЬКІСТЬ вибрати вказану кількіÑть випадкових запиÑів. �Занадто об’ємний формальний вираз�Ð’Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ (або коментуваннÑ) запиÑів у файлі rec. �Про вади у %s повідомлÑйте на адреÑу %s �ПовідомлÑйте про вади на адреÑу: %s �Вибір Ñ– Ð²Ð¸Ð²ÐµÐ´ÐµÐ½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… rec. �ОÑобливі параметри: --print-sexps показати дані у форматі sexps, а не у форматі rec. �ОÑобливі параметри: -S, --print-sexps показати дані у форматі sexps, а не у форматі rec. �УÑпіх�Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñередовища TZ="%s"�TZ="%s" у Ñ€Ñдку дати�Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñередовища TZ="UTC0" або -u�Кінцевий Ñимвол похилої риÑки�Ðевідома ÑиÑтемна помилка�Ðеврівноважена поÑлідовніÑть ( або \(�Ðеврівноважена поÑлідовніÑть ) або \)�Ðеврівноважена поÑлідовніÑть [, [^, [:, [., або [=�Ðеврівноважена поÑлідовніÑть \{�ВикориÑтаннÑ: csv2rec [ПÐРÐМЕТРИ]... [ФÐЙЛ_CSV] �ВикориÑтаннÑ: mdb2rec [ПÐРÐМЕТРИ]... ФÐЙЛ_MDB [ТÐБЛИЦЯ] �ВикориÑтаннÑ: rec2csv [ПÐРÐМЕТРИ]... [ФÐЙЛ_REC] �ВикориÑтаннÑ: recdel [ПÐРÐМЕТРИ]... [-t ТИП] [-n ÐОМЕР | -e ВИРÐЗ | -q РЯДОК | -m ÐОМЕР]] [ФÐЙЛ] �ВикориÑтаннÑ: recfix [ПÐРÐМЕТР]... [ДІЯ] [ПÐРÐМЕТРИ_ДІЇ]... [ФÐЙЛ]... �ВикориÑтаннÑ: recfmt [ПÐРÐМЕТР]... [ШÐБЛОÐ] �ВикориÑтаннÑ: recinf [ПÐРÐМЕТР]... [ФÐЙЛ]... �ВикориÑтаннÑ: recins [ПÐРÐМЕТР]... [-t ТИП] [-n ÐОМЕР | -e ВИРÐЗ | -q РЯДОК | -m ÐОМЕР] [(-f ÐÐЗВР-v РЯДОК) | -r ДÐÐІ_ЗÐПИСУ)]... [ФÐЙЛ] �ВикориÑтаннÑ: recsel [ПÐРÐМЕТР]... [-t ТИП] [-j ПОЛЕ] [-n ІÐДЕКСИ | -e ВИРÐЗ_ЗÐПИСУ | -q РЯДОК | -m ÐОМЕР]] [-c | (-p|-P) ВИРÐЗ_ПОЛЯ] [ФÐЙЛ]... �ВикориÑтаннÑ: recset [ПÐРÐМЕТР]... [ФÐЙЛ]... �Ðвтори програми %s та %s. �Ðвтори: %s, %s, %s, %s, %s, %s, %s, %s, %s та інші. �Ðвтори: %s, %s, %s, %s, %s, %s, %s, %s та %s. �Ðвтори: %s, %s, %s, %s, %s, %s, %s та %s. �Ðвтори: %s, %s, %s, %s, %s, %s та %s. �Ðвтори: %s, %s, %s, %s, %s та %s. �Ðвтори: %s, %s, %s, %s та %s. �Ðвтори: %s, %s, %s та %s. �Ðвтори: %s, %s та %s. �Ðвтор — %s. �«�піÑÐ»Ñ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð° -f Ñлід вказати параметр -v �перед параметром -v Ñлід вказати параметр -f �не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %s Ð´Ð»Ñ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ…. �не вдалоÑÑ Ñтворити назви, Ñка б не повторювалаÑÑ. �не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… з файла %s �не можна одночаÑно викориÑтовувати -[pPR] Ñ– -c. �не можна одночаÑно визначати -c Ñ– -p. �не можна одночаÑно вказувати -e Ñ– -n �не можна одночаÑно вказувати -e Ñ– -q �не можна одночаÑно вказувати -m Ñ– -e �не можна одночаÑно вказувати -m Ñ– -n �не можна одночаÑно вказувати -m Ñ– -q �не можна одночаÑно вказувати -n Ñ– -e �не можна одночаÑно вказувати -n Ñ– -q �не вдалоÑÑ Ð²Ñ–Ð´ÐºÑ€Ð¸Ñ‚Ð¸ файл %s �ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ. �дата�дата Ñ– чаÑ�день�не можна вказувати шаблон у командному Ñ€Ñдку Ñ– одночаÑно викориÑтовувати параметр -f. �Ð¿Ð¾Ð²Ñ‚Ð¾Ñ€ÐµÐ½Ð½Ñ Ð½Ð°Ð±Ð¾Ñ€Ñƒ запиÑів «%s» з %s. �помилка під Ñ‡Ð°Ñ Ð²Ð¸Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ у полі замінника шаблону. �помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ файла CSV: %s �помилка під Ñ‡Ð°Ñ Ð¾Ð±Ñ€Ð¾Ð±ÐºÐ¸ запиÑу, вказаного за допомогою -r �помилка: %s:%d �помилка: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñної дати призвело до некоректної дати: «%s» �помилка: Ð´Ð¾Ð´Ð°Ð²Ð°Ð½Ð½Ñ Ð²Ñ–Ð´Ð½Ð¾Ñного чаÑу призвело до Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ �помилка: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ Ñ‡Ð¸Ñ‚Ð°Ð½Ð½Ñ Ð´Ð°Ð½Ð¸Ñ… з файла %s �помилка: початковий рік поза межами припуÑтимого діапазону �помилка: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð°Ñ‚Ð¸ або чаÑу: �помилка: не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸ �помилка: не вдалоÑÑ Ð¾Ð±Ñ€Ð¾Ð±Ð¸Ñ‚Ð¸, зупинилиÑÑ Ð½Ð° «%s» �помилка: викориÑÑ‚Ð°Ð½Ð½Ñ Ñ‡Ð°Ñового поÑÑу %d призвело до Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ time_t �помилка: не вдалоÑÑ Ð²Ð¸ÐºÐ¾Ð½Ð°Ñ‚Ð¸ tzalloc ("%s") �помилка: невідоме Ñлово «%s» �помилка: Ð¿ÐµÑ€ÐµÐ¿Ð¾Ð²Ð½ÐµÐ½Ð½Ñ Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾ÐºÑƒ, міÑÑÑ†Ñ Ð°Ð±Ð¾ Ð´Ð½Ñ �Ñлід було викориÑтати ціле Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñƒ діапазоні від %d до %d.�не вдалоÑÑ Ð·Ð°Ð¿Ð¾Ñ‡Ð°Ñ‚ÐºÑƒÐ²Ð°Ñ‚Ð¸ обробку csv �не вдалоÑÑ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ поле з назвою %s �не вдалоÑÑ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ тип запиÑу з назвою %s �не вдалоÑÑ Ð½Ð¾Ñ€Ð¼Ð°Ð»Ñ–Ð·ÑƒÐ²Ð°Ñ‚Ð¸ поле з назвою %s �файл %s Ñ” непридатним до запиÑу. �здаєтьÑÑ, файл не Ñ” файлом бази даних Access �оÑтаточно: %s (UTC%s) �оÑтаточно: %s (UTC) �оÑтаточно: %s (невідомий зÑув чаÑового поÑÑу) �гібридна�пропущено запит щодо Ð²Ð¸Ð»ÑƒÑ‡ÐµÐ½Ð½Ñ Ð²ÑÑ–Ñ… запиÑів типу %s. �помилковий чаÑовий поÑÑ�вхідний чаÑовий поÑÑ:�Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ Ñпроби Ñтворити fex. �Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ° під Ñ‡Ð°Ñ ÑÑ‚Ð²Ð¾Ñ€ÐµÐ½Ð½Ñ Ð²Ð¸Ñ€Ð°Ð·Ñƒ полÑ. �Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: перевищено Ð¾Ð±Ð¼ÐµÐ¶ÐµÐ½Ð½Ñ REC_FEX_MAX_ELEMS. Будь лаÑка, повідомте авторам програми про цю помилку. �Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: типи rec: отримано Ñигнал REC_TYPE_NONE від функції rec_type_parse_type_kind() у rec_type_new(). �Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: rec_int_rec_extract_file: помилка під Ñ‡Ð°Ñ Ñпроби компілÑції формального виразу. �Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: rec_int_rec_extract_url: помилка під Ñ‡Ð°Ñ Ñпроби компілÑції формального виразу. �Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: rec_match: помилка під Ñ‡Ð°Ñ Ñпроби компілÑції формального виразу. �Ð²Ð½ÑƒÑ‚Ñ€Ñ–ÑˆÐ½Ñ Ð¿Ð¾Ð¼Ð¸Ð»ÐºÐ°: помилка recutl_index_list_parse під Ñ‡Ð°Ñ Ñпроби компілÑції формального виразу. �некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«bool».�некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«field».�некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«line».�некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«range».�некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«real».�некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Â«uuid».�некоректна Ñ„ÑƒÐ½ÐºÑ†Ñ–Ñ Ð°Ð³Ñ€ÐµÐ³ÑƒÐ²Ð°Ð½Ð½Ñ, «%s» �некоректна дата.�некоректна адреÑа ел. пошти.�некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½ÑƒÐ¼ÐµÑ€Ð°Ñ‚Ð¾Ñ€Ð°.�некоректний вираз у полі замінника шаблону. �некоректний вираз Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ Ñƒ параметрі -f. �некоректна назва Ð¿Ð¾Ð»Ñ %s. �некоректна назва полÑ, «%s», у заголовку �некоректний ÑпиÑок назв полів у -S. �некоректні назви полів у -G. �некоректні назви полів у -S. �некоректне ціле чиÑло.�некоректний ÑпиÑок полів у -%c �некоректний ÑпиÑок індекÑів у -n �некоректний вираз вибору �некоректний вираз вибору. �Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ð½Ð° викориÑтовувати, лише Ñкщо вибрано іменований набір запиÑів. �міÑцевий_поÑÑ�пам’Ñть вичерпано�не вказано чаÑового поÑÑу�було вказано декілька паролів �нова початкова дата: «%s» Ñ” «%s» �не виÑвлено жодних запиÑів типу %s. �чиÑло�кількіÑть Ñекунд�критерієм Ð·â€™Ñ”Ð´Ð½Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути лише Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð¾Ð´Ð½Ð¾Ð³Ð¾ полÑ. �критерієм Ð³Ñ€ÑƒÐ¿ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути лише один ÑпиÑок полів. �критерієм впорÑÐ´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути лише один ÑпиÑок полів. �критерієм впорÑÐ´ÐºÐ¾Ð²ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ð¾Ð¶Ðµ бути лише один ÑпиÑок полів. �дію перервано через Ð¿Ð¾Ñ€ÑƒÑˆÐµÐ½Ð½Ñ Ñ†Ñ–Ð»Ñ–ÑноÑті бази даних. �не виÑтачає пам'Ñті �оброблена чаÑтина %s: �оброблено Ñ€Ñдок дати Ñ– чаÑу�будь лаÑка, вкажіть Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð´Ð»Ñ Ð¿Ð¾Ð»Ñ %s �будь лаÑка, вкажіть коректну назву Ð¿Ð¾Ð»Ñ Ñƒ -j|--join. �будь лаÑка, вкажіть лише одну дію. �будь лаÑка, вкажіть лише одну дію. �будь лаÑка, вкажіть лише один пароль. �будь лаÑка, вкажіть ÑкеÑÑŒ поле за допомогою параметра -f. �будь лаÑка, ÑкориÑтайтеÑÑ --force або --decrypt �зберігаємо права доÑтупу Ð´Ð»Ñ %s�recfmt_apply_template: помилка під Ñ‡Ð°Ñ Ñпроби компілÑції формального виразу. Будь лаÑка, повідомте про цю помилку авторам програми. �відноÑне�Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñ„Ð°Ð¹Ð»Ð° %s на %s �вÑÑ‚Ð°Ð½Ð¾Ð²Ð»ÐµÐ½Ð½Ñ Ð¿Ñ€Ð°Ð² доÑтупу Ð´Ð»Ñ %s�знайдено декілька типів запиÑів. Будь лаÑка, ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ -t, щоб вказати потрібний вам тип. �початкова дата Ñ– чаÑ: «%s» �типове Ð´Ð»Ñ ÑиÑтеми�у базі даних міÑÑ‚ÑтьÑÑ Ð²Ð¶Ðµ зашифровані Ð¿Ð¾Ð»Ñ �вказані паролі не збігаютьÑÑ. �Ð´Ð»Ñ Ð´Ñ–Ñ— з Ð¿ÐµÑ€ÐµÐ¹Ð¼ÐµÐ½ÑƒÐ²Ð°Ð½Ð½Ñ Ñлід вказати точно одне поле з додатковим параметром індекÑу. �Ð´Ð»Ñ Ð²Ð¸ÐºÐ¾Ð½Ð°Ð½Ð½Ñ Ð²ÐºÐ°Ð·Ð°Ð½Ð¾Ñ— дії пароль не потрібен. �чаÑ�чаÑовий поÑÑ: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñередовища TZ="%s" �чаÑовий поÑÑ: вÑеÑвітній Ñ‡Ð°Ñ �чаÑовий поÑÑ: типовий Ð´Ð»Ñ ÑиÑтеми �Ñьогодні/цÑ/зараз �невідома Ð¾Ð¿ÐµÑ€Ð°Ñ†Ñ–Ñ Ñƒ recfix: будь лаÑка, повідомте про цю ваду. �ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --force, Ñкщо вам потрібно продовжити обробку, або ÑкориÑтайтеÑÑ Ð¾Ð´Ð½Ð¸Ð¼ з параметрів, -n або -e. �ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --force, щоб наказати програмі не виконувати перевірки ціліÑноÑті. �ÑкориÑтайтеÑÑ Ð¿Ð°Ñ€Ð°Ð¼ÐµÑ‚Ñ€Ð¾Ð¼ --verbose, щоб отримати докладний звіт. �викориÑтовуємо поточну дату Ñк початкове значеннÑ: «%s» �викориÑтовуємо поточний Ñ‡Ð°Ñ Ñк початкове значеннÑ: «%s» �викориÑтовуємо вказаний Ñ‡Ð°Ñ Ñк початкове значеннÑ: «%s» �Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð½Ðµ відповідає формальному виразу.�занадто велике значеннÑ. Слід було викориÑтати розмір <= %zu.�попередженнÑ: день (%s) ігноруєтьÑÑ, Ñкщо вказано Ñвні дати �попередженнÑ: змінено літній Ñ‡Ð°Ñ Ð¿Ñ–ÑÐ»Ñ ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ñ‚Ð¸ �попередженнÑ: змінено літній Ñ‡Ð°Ñ Ð¿Ñ–ÑÐ»Ñ ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡Ð°Ñу �попередженнÑ: ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð¼Ñ–ÑÑÑ†Ñ Ñ– року призвело до зÑуву дат: �попередженнÑ: при додаванні відноÑних днів рекомендовано вказувати південь �попередженнÑ: при додаванні відноÑних міÑÑців Ñ– років рекомендовано вказувати 15-е чиÑло міÑÑців �помилка запиÑу�поÑÑ�PRIdMAX�year: %04�%s (day ordinal=% number=%d)�number of seconds: %�warning: value % has % digits. Assuming YYYY/MM/DD �warning: value % has less than 4 digits. Assuming MM/DD/YY[YY] �warning: adjusting year value % to % �error: out-of-range year % �error: invalid hour %%s �error: day '%s' (day ordinal=% number=%d) resulted in an invalid date: '%s' �after date adjustment (%+ years, %+ months, %+ days), �'%s' = % epoch-seconds �after time adjustment (%+ hours, %+ minutes, %+ seconds, %+d ns), � new time = % epoch-seconds �final: %.%09d (epoch-seconds) �рік: %04�%s (порÑдковий день=% номер=%d)�кількіÑть Ñекунд: %�попередженнÑ: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ % ÑкладаєтьÑÑ Ð· % цифр. ПрипуÑкаємо формат РРРР/ММ/ДД �попередженнÑ: Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ % міÑтить менше за 4 цифри. ПрипуÑкаємо формат ММ/ДД/РР[РР] �попередженнÑ: коригуємо Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ñ€Ð¾ÐºÑƒ % до % �помилка: рік поза межами припуÑтимого діапазону — % �помилка: некоректне Ð·Ð½Ð°Ñ‡ÐµÐ½Ð½Ñ Ð³Ð¾Ð´Ð¸Ð½ — %%s �помилка: викориÑÑ‚Ð°Ð½Ð½Ñ Ð´Ð½Ñ Â«%s» (порÑдковий день=% номер=%d) дало некоректну дату: «%s» �піÑÐ»Ñ ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ð´Ð°Ñ‚Ð¸ (%+ років, %+ міÑÑців, %+ днів), �'%s' = % Ñекунд епохи �піÑÐ»Ñ ÐºÐ¾Ñ€Ð¸Ð³ÑƒÐ²Ð°Ð½Ð½Ñ Ñ‡Ð°Ñу (%+ годин, %+ хвилин, %+ Ñекунд, %+d мкÑ), � новий Ñ‡Ð°Ñ = % Ñекунд епохи �оÑтаточно: %.%09d (Ñекунд епохи) �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/po/remove-potcdate.sin�����������������������������������������������������������������0000644�0000000�0000000�00000000660�13253176007�014341� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Sed script that remove the POT-Creation-Date line in the header entry # from a POT file. # # The distinction between the first and the following occurrences of the # pattern is achieved by looking at the hold space. /^"POT-Creation-Date: .*"$/{ x # Test if the hold space is empty. s/P/P/ ta # Yes it was empty. First occurrence. Remove the line. g d bb :a # The hold space was nonempty. Following occurrences. Do nothing. x :b } ��������������������������������������������������������������������������������recutils-1.9/po/quot.sed����������������������������������������������������������������������������0000644�0000000�0000000�00000000231�13253176007�012207� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������s/"\([^"]*\)"/“\1â€/g s/`\([^`']*\)'/‘\1’/g s/ '\([^`']*\)' / ‘\1’ /g s/ '\([^`']*\)'$/ ‘\1’/g s/^'\([^`']*\)' /‘\1’ /g s/“â€/""/g �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/bash/����������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577414�011115� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/bash/Makefile.am�����������������������������������������������������������������������0000644�0000000�0000000�00000002502�14226563465�013071� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# bash/Makefile.am # GNU recutils # Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2020, 2022 Jose E. # Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. if BASH_BUILTINS COMMON_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib \ -I$(top_srcdir)/src -DHAVE_CONFIG_H \ -I$(BASH_HEADERS) -I$(BASH_HEADERS)/lib -I$(BASH_HEADERS)/builtins \ -I$(BASH_HEADERS)/include lib_LTLIBRARIES = readrec.la testrec.la AM_CPPFLAGS = $(COMMON_CPPFLAGS) readrec_la_LDFLAGS = -module readrec_la_LIBADD = $(top_builddir)/src/librec.la readrec_la_SOURCES = readrec.c testrec_la_LDFLAGS = -module testrec_la_LIBADD = $(top_builddir)/src/librec.la testrec_la_SOURCES = testrec.c endif # End of Makefile.am ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/bash/testrec.c�������������������������������������������������������������������������0000644�0000000�0000000�00000010031�14226563465�012646� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- Time-stamp: "2019-01-03 09:44:20 jemarch" * * File: testrec.c * Date: Fri Aug 23 21:41:00 2013 * * GNU recutils - testrec bash loadable builtin. * */ /* Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <bash/config.h> #include <unistd.h> #include <stdio.h> #include <rec.h> #include "builtins.h" #include "shell.h" #include "common.h" #include "builtins/bashgetopt.h" /* The function implementing the builtin. It uses internal_getopt to parse options. It is the same as getopt(3), but it takes a pointer to a WORD_LIST. If the builtin takes no options, call no_options(list) before doing anything else. If it returns a non-zero value, your builtin should immediately return EX_USAGE. A builtin command returns EXECUTION_SUCCESS for success and EXECUTION_FAILURE to indicate failure. */ int testrec_builtin (WORD_LIST *list) { int res = EXECUTION_SUCCESS; const char **argv; int argc; SHELL_VAR *var; rec_record_t record; rec_parser_t parser; char *record_str, *sex_str; /* Get arguments and verify them. */ argv = make_builtin_argv (list, &argc); if ((argc != 3) || ((strcmp (argv[0], "[%") == 0) && ((strlen (argv[2]) == 2) && ((argv[2][0] != '%') || (argv[2][1] != ']'))))) { fprintf (stderr, "Usage: [%% SEX %%]\n"); return EXECUTION_FAILURE; } sex_str = argv[1]; /* Get the record to operate on from the REPLY_REC environment variable. */ var = find_variable ("REPLY_REC"); if (!var) return EXECUTION_FAILURE; record_str = get_variable_value (var); parser = rec_parser_new_str (record_str, "REPLY_REC"); if (!parser || !rec_parse_record (parser, &record)) { fprintf (stderr, "testrec: error: invalid record in REPLY_REC\n"); return EXECUTION_FAILURE; } /* Apply the selection expression. */ { bool status = false; rec_sex_t sex = rec_sex_new (false); if (!sex) return EXECUTION_FAILURE; if (!rec_sex_compile (sex, sex_str)) { fprintf (stderr, "testrec: error: wrong selection expression\n"); return EXECUTION_FAILURE; } res = rec_sex_eval (sex, record, &status) ? EXECUTION_SUCCESS : EXECUTION_FAILURE; rec_sex_destroy (sex); } /* Cleanup. */ rec_record_destroy (record); return res; } /* An array of strings forming the `long' documentation for the builtin, which is printed by `help xxx'. It must end with a NULL. By convention, the first line is a short description. */ char *testrec_doc[] = { "Evaluate a selection expression on the record stored in REPLY_REC.", "", "Evaluates a given selection expression on the record stored in the\n\ REPLY_REC variable, if any.\n\ \n\ Exit Status:\n\ The return code is zero if the selection expression evaluates to\n\ true, -1 otherwise.\n", (char *) NULL }; /* The standard structure describing a builtin command. bash keeps an array of these structures. The flags must include BUILTIN_ENABLED so the builtin can be used. */ struct builtin testrec_struct = { "[%", /* builtin name */ testrec_builtin, /* function implementing the builtin */ BUILTIN_ENABLED, /* initial flags for builtin */ testrec_doc, /* array of long documentation strings. */ "testrec", /* usage synopsis; becomes short_doc */ 0 /* reserved for internal use */ }; �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/bash/Makefile.in�����������������������������������������������������������������������0000644�0000000�0000000�00000242631�14226573146�013110� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # bash/Makefile.am # GNU recutils # Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2020, 2022 Jose E. # Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = bash ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 \ $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/calloc.m4 \ $(top_srcdir)/m4/canonicalize.m4 \ $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/clock_time.m4 \ $(top_srcdir)/m4/close.m4 $(top_srcdir)/m4/closedir.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/copy-file-range.m4 \ $(top_srcdir)/m4/copy-file.m4 $(top_srcdir)/m4/d-ino.m4 \ $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup.m4 \ $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eaccess.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ $(top_srcdir)/m4/explicit_bzero.m4 \ $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 \ $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fchdir.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \ $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \ $(top_srcdir)/m4/filenamecat.m4 \ $(top_srcdir)/m4/findprog-in.m4 $(top_srcdir)/m4/flexmember.m4 \ $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/flock.m4 \ $(top_srcdir)/m4/floor.m4 $(top_srcdir)/m4/fopen.m4 \ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ $(top_srcdir)/m4/fseek.m4 $(top_srcdir)/m4/fseeko.m4 \ $(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \ $(top_srcdir)/m4/fstatat.m4 $(top_srcdir)/m4/ftell.m4 \ $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ $(top_srcdir)/m4/getcwd-abort-bug.m4 \ $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \ $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \ $(top_srcdir)/m4/getpass.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/getrandom.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/group-member.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexpl.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrlen.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/minmax.m4 \ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkostemp.m4 \ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \ $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/opendir.m4 \ $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ $(top_srcdir)/m4/posix_spawn_faction_addchdir.m4 \ $(top_srcdir)/m4/printf-frexp.m4 \ $(top_srcdir)/m4/printf-frexpl.m4 \ $(top_srcdir)/m4/printf-posix-rpl.m4 \ $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readdir.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/remove.m4 \ $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rewinddir.m4 \ $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/safe-read.m4 \ $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/save-cwd.m4 \ $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ $(top_srcdir)/m4/selinux-context-h.m4 \ $(top_srcdir)/m4/selinux-label-h.m4 \ $(top_srcdir)/m4/selinux-selinux-h.m4 \ $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/setlocale_null.m4 \ $(top_srcdir)/m4/sh-filename.m4 \ $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ $(top_srcdir)/m4/signal_h.m4 \ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/stdio_h.m4 \ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/stpcpy.m4 \ $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ $(top_srcdir)/m4/sys_random_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink.m4 \ $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utime.m4 \ $(top_srcdir)/m4/utime_h.m4 $(top_srcdir)/m4/utimens.m4 \ $(top_srcdir)/m4/utimes.m4 \ $(top_srcdir)/m4/vasnprintf-posix.m4 \ $(top_srcdir)/m4/vasnprintf.m4 \ $(top_srcdir)/m4/vasprintf-posix.m4 \ $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ $(top_srcdir)/m4/vfprintf-posix.m4 \ $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/write.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/year2038.m4 \ $(top_srcdir)/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" LTLIBRARIES = $(lib_LTLIBRARIES) @BASH_BUILTINS_TRUE@readrec_la_DEPENDENCIES = \ @BASH_BUILTINS_TRUE@ $(top_builddir)/src/librec.la am__readrec_la_SOURCES_DIST = readrec.c @BASH_BUILTINS_TRUE@am_readrec_la_OBJECTS = readrec.lo readrec_la_OBJECTS = $(am_readrec_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = readrec_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(readrec_la_LDFLAGS) $(LDFLAGS) -o $@ @BASH_BUILTINS_TRUE@am_readrec_la_rpath = -rpath $(libdir) @BASH_BUILTINS_TRUE@testrec_la_DEPENDENCIES = \ @BASH_BUILTINS_TRUE@ $(top_builddir)/src/librec.la am__testrec_la_SOURCES_DIST = testrec.c @BASH_BUILTINS_TRUE@am_testrec_la_OBJECTS = testrec.lo testrec_la_OBJECTS = $(am_testrec_la_OBJECTS) testrec_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(testrec_la_LDFLAGS) $(LDFLAGS) -o $@ @BASH_BUILTINS_TRUE@am_testrec_la_rpath = -rpath $(libdir) AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ -I$(top_builddir)/src depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/readrec.Plo ./$(DEPDIR)/testrec.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = SOURCES = $(readrec_la_SOURCES) $(testrec_la_SOURCES) DIST_SOURCES = $(am__readrec_la_SOURCES_DIST) \ $(am__testrec_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in \ $(top_srcdir)/build-aux/depcomp DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_HEADERS = @BASH_HEADERS@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CURLLIBS = @CURLLIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ FLOOR_LIBM = @FLOOR_LIBM@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POSIX_SPAWN = @GL_GNULIB_POSIX_SPAWN@ GL_GNULIB_POSIX_SPAWNATTR_DESTROY = @GL_GNULIB_POSIX_SPAWNATTR_DESTROY@ GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ GL_GNULIB_POSIX_SPAWNATTR_INIT = @GL_GNULIB_POSIX_SPAWNATTR_INIT@ GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ GL_GNULIB_POSIX_SPAWNP = @GL_GNULIB_POSIX_SPAWNP@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIME = @GL_GNULIB_UTIME@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FLOCK = @HAVE_FLOCK@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SPAWN_H = @HAVE_SPAWN_H@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIME = @HAVE_UTIME@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_UTIME_H = @HAVE_UTIME_H@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGCRYPT = @LIBGCRYPT@ LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIB_ACL = @LIB_ACL@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ LIB_EACCESS = @LIB_EACCESS@ LIB_GETRANDOM = @LIB_GETRANDOM@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELINUX = @LIB_SELINUX@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBGCRYPT = @LTLIBGCRYPT@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBREADLINE = @LTLIBREADLINE@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MDBLIBS = @MDBLIBS@ MDB_DATETIME = @MDB_DATETIME@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_UTIME_H = @NEXT_AS_FIRST_DIRECTIVE_UTIME_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_SPAWN_H = @NEXT_SPAWN_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_UTIME_H = @NEXT_UTIME_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PARSE_DATETIME_BISON = @PARSE_DATETIME_BISON@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIME = @REPLACE_UTIME@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ SELINUX_LABEL_H = @SELINUX_LABEL_H@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_ACL = @USE_ACL@ USE_NLS = @USE_NLS@ UUIDLIBS = @UUIDLIBS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ crypt_support = @crypt_support@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ have_uuid = @have_uuid@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ @BASH_BUILTINS_TRUE@COMMON_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib \ @BASH_BUILTINS_TRUE@ -I$(top_srcdir)/src -DHAVE_CONFIG_H \ @BASH_BUILTINS_TRUE@ -I$(BASH_HEADERS) -I$(BASH_HEADERS)/lib -I$(BASH_HEADERS)/builtins \ @BASH_BUILTINS_TRUE@ -I$(BASH_HEADERS)/include @BASH_BUILTINS_TRUE@lib_LTLIBRARIES = readrec.la testrec.la @BASH_BUILTINS_TRUE@AM_CPPFLAGS = $(COMMON_CPPFLAGS) @BASH_BUILTINS_TRUE@readrec_la_LDFLAGS = -module @BASH_BUILTINS_TRUE@readrec_la_LIBADD = $(top_builddir)/src/librec.la @BASH_BUILTINS_TRUE@readrec_la_SOURCES = readrec.c @BASH_BUILTINS_TRUE@testrec_la_LDFLAGS = -module @BASH_BUILTINS_TRUE@testrec_la_LIBADD = $(top_builddir)/src/librec.la @BASH_BUILTINS_TRUE@testrec_la_SOURCES = testrec.c all: all-am .SUFFIXES: .SUFFIXES: .c .lo .o .obj $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu bash/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu bash/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } readrec.la: $(readrec_la_OBJECTS) $(readrec_la_DEPENDENCIES) $(EXTRA_readrec_la_DEPENDENCIES) $(AM_V_CCLD)$(readrec_la_LINK) $(am_readrec_la_rpath) $(readrec_la_OBJECTS) $(readrec_la_LIBADD) $(LIBS) testrec.la: $(testrec_la_OBJECTS) $(testrec_la_DEPENDENCIES) $(EXTRA_testrec_la_DEPENDENCIES) $(AM_V_CCLD)$(testrec_la_LINK) $(am_testrec_la_rpath) $(testrec_la_OBJECTS) $(testrec_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/readrec.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/testrec.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(LTLIBRARIES) installdirs: for dir in "$(DESTDIR)$(libdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/readrec.Plo -rm -f ./$(DEPDIR)/testrec.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/readrec.Plo -rm -f ./$(DEPDIR)/testrec.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-libLTLIBRARIES .MAKE: install-am install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-libtool distclean-tags distdir dvi dvi-am html \ html-am info info-am install install-am install-data \ install-data-am install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-libLTLIBRARIES install-man install-pdf \ install-pdf-am install-ps install-ps-am install-strip \ installcheck installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-libLTLIBRARIES .PRECIOUS: Makefile # End of Makefile.am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������recutils-1.9/bash/readrec.c�������������������������������������������������������������������������0000644�0000000�0000000�00000012062�14226563465�012610� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: readrec.c * Date: Fri Aug 23 18:38:08 2013 * * GNU recutils - readrec bash loadable builtin. * */ /* Copyright (C) 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, 2022 * Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <bash/config.h> #include <unistd.h> #include <stdio.h> #include <rec.h> #include "builtins.h" #include "shell.h" #include "common.h" #include "builtins/bashgetopt.h" /* The function implementing the builtin. It uses internal_getopt to parse options. It is the same as getopt(3), but it takes a pointer to a WORD_LIST. If the builtin takes no options, call no_options(list) before doing anything else. If it returns a non-zero value, your builtin should immediately return EX_USAGE. A builtin command returns EXECUTION_SUCCESS for success and EXECUTION_FAILURE to indicate failure. */ int readrec_builtin (WORD_LIST *list) { SHELL_VAR *var; rec_parser_t parser; rec_record_t record; if (no_options (list) != 0) return EX_USAGE; /* Create a librec parser to operate on the standard input and try to read a record. If there is a parse error then report it and fail. */ parser = rec_parser_new (stdin, "stdin"); if (!parser) return EXECUTION_FAILURE; if (!rec_parse_record (parser, &record)) { return EXECUTION_FAILURE; } { size_t record_str_size = 0; char *record_str = NULL; char *record_str_dequoted = NULL; rec_writer_t writer = rec_writer_new_str (&record_str, &record_str_size); if (!writer || !rec_write_record (writer, record)) return EXIT_FAILURE; rec_writer_destroy (writer); /* Set the REPLY_REC environment variable to the read record. */ record_str_dequoted = dequote_string (record_str); var = bind_variable ("REPLY_REC", record_str_dequoted, 0); VUNSETATTR (var, att_invisible); xfree (record_str_dequoted); /* Set the environment variables for the fields. */ { rec_field_t field = NULL; rec_mset_iterator_t iter = rec_mset_iterator (rec_record_mset (record)); // rec_record_reset_marks (record); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) { char *var_name = rec_field_name (field); size_t num_fields = rec_record_get_num_fields_by_name (record, var_name); // if (rec_record_field_mark (record, field)) // continue; #if defined ARRAY_VARS if (num_fields > 1) { /* In case several fields share the same field name, create an array variable containing all the values. */ size_t i = 0; for (; i < num_fields; i++) { // rec_record_mark_field (record, field, true); field = rec_record_get_field_by_name (record, var_name, i); var = bind_array_variable (var_name, i, rec_field_value (field), 0); VUNSETATTR (var, att_invisible); } } else { /* Bind a normal variable. */ char *var_value = rec_field_value (field); var = bind_variable (var_name, var_value, 0); VUNSETATTR (var, att_invisible); } #endif /* ARRAY_VARS */ } rec_mset_iterator_free (&iter); } } return EXECUTION_SUCCESS; } /* An array of strings forming the `long' documentation for the builtin, which is printed by `help xxx'. It must end with a NULL. By convention, the first line is a short description. */ char *readrec_doc[] = { "Read a recutils record from the standard input.", "", "The read record is stored in the REPLY_REC variable. Additional variables", "are set named after the fields in the record.", "", "Exit Status:", "The return code is zero, unless end-of-file is encountered.", (char *) NULL }; /* The standard structure describing a builtin command. bash keeps an array of these structures. The flags must include BUILTIN_ENABLED so the builtin can be used. */ struct builtin readrec_struct = { "readrec", /* builtin name */ readrec_builtin, /* function implementing the builtin */ BUILTIN_ENABLED, /* initial flags for builtin */ readrec_doc, /* array of long documentation strings. */ "readrec", /* usage synopsis; becomes short_doc */ 0 /* reserved for internal use */ }; ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/etc/�����������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577416�010755� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/etc/Makefile.am������������������������������������������������������������������������0000644�0000000�0000000�00000001505�14226563465�012731� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.am for etc/ # Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, # 2019, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. etcdir=$(pkgdatadir)/etc dist_etc_DATA = FSD.rec # End of Makefile.am �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/etc/Makefile.in������������������������������������������������������������������������0000644�0000000�0000000�00000223037�14226573147�012746� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # Makefile.am for etc/ # Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, # 2019, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ subdir = etc ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 \ $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/calloc.m4 \ $(top_srcdir)/m4/canonicalize.m4 \ $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/clock_time.m4 \ $(top_srcdir)/m4/close.m4 $(top_srcdir)/m4/closedir.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/copy-file-range.m4 \ $(top_srcdir)/m4/copy-file.m4 $(top_srcdir)/m4/d-ino.m4 \ $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup.m4 \ $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eaccess.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ $(top_srcdir)/m4/explicit_bzero.m4 \ $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 \ $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fchdir.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \ $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \ $(top_srcdir)/m4/filenamecat.m4 \ $(top_srcdir)/m4/findprog-in.m4 $(top_srcdir)/m4/flexmember.m4 \ $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/flock.m4 \ $(top_srcdir)/m4/floor.m4 $(top_srcdir)/m4/fopen.m4 \ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ $(top_srcdir)/m4/fseek.m4 $(top_srcdir)/m4/fseeko.m4 \ $(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \ $(top_srcdir)/m4/fstatat.m4 $(top_srcdir)/m4/ftell.m4 \ $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ $(top_srcdir)/m4/getcwd-abort-bug.m4 \ $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \ $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \ $(top_srcdir)/m4/getpass.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/getrandom.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/group-member.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexpl.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrlen.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/minmax.m4 \ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkostemp.m4 \ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \ $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/opendir.m4 \ $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ $(top_srcdir)/m4/posix_spawn_faction_addchdir.m4 \ $(top_srcdir)/m4/printf-frexp.m4 \ $(top_srcdir)/m4/printf-frexpl.m4 \ $(top_srcdir)/m4/printf-posix-rpl.m4 \ $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readdir.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/remove.m4 \ $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rewinddir.m4 \ $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/safe-read.m4 \ $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/save-cwd.m4 \ $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ $(top_srcdir)/m4/selinux-context-h.m4 \ $(top_srcdir)/m4/selinux-label-h.m4 \ $(top_srcdir)/m4/selinux-selinux-h.m4 \ $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/setlocale_null.m4 \ $(top_srcdir)/m4/sh-filename.m4 \ $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ $(top_srcdir)/m4/signal_h.m4 \ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/stdio_h.m4 \ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/stpcpy.m4 \ $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ $(top_srcdir)/m4/sys_random_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink.m4 \ $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utime.m4 \ $(top_srcdir)/m4/utime_h.m4 $(top_srcdir)/m4/utimens.m4 \ $(top_srcdir)/m4/utimes.m4 \ $(top_srcdir)/m4/vasnprintf-posix.m4 \ $(top_srcdir)/m4/vasnprintf.m4 \ $(top_srcdir)/m4/vasprintf-posix.m4 \ $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ $(top_srcdir)/m4/vfprintf-posix.m4 \ $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/write.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/year2038.m4 \ $(top_srcdir)/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(dist_etc_DATA) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = $(top_builddir)/src/config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = SOURCES = DIST_SOURCES = am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(etcdir)" DATA = $(dist_etc_DATA) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) am__DIST_COMMON = $(srcdir)/Makefile.in DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_HEADERS = @BASH_HEADERS@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CURLLIBS = @CURLLIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ FLOOR_LIBM = @FLOOR_LIBM@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POSIX_SPAWN = @GL_GNULIB_POSIX_SPAWN@ GL_GNULIB_POSIX_SPAWNATTR_DESTROY = @GL_GNULIB_POSIX_SPAWNATTR_DESTROY@ GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ GL_GNULIB_POSIX_SPAWNATTR_INIT = @GL_GNULIB_POSIX_SPAWNATTR_INIT@ GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ GL_GNULIB_POSIX_SPAWNP = @GL_GNULIB_POSIX_SPAWNP@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIME = @GL_GNULIB_UTIME@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FLOCK = @HAVE_FLOCK@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SPAWN_H = @HAVE_SPAWN_H@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIME = @HAVE_UTIME@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_UTIME_H = @HAVE_UTIME_H@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGCRYPT = @LIBGCRYPT@ LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIB_ACL = @LIB_ACL@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ LIB_EACCESS = @LIB_EACCESS@ LIB_GETRANDOM = @LIB_GETRANDOM@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELINUX = @LIB_SELINUX@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBGCRYPT = @LTLIBGCRYPT@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBREADLINE = @LTLIBREADLINE@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MDBLIBS = @MDBLIBS@ MDB_DATETIME = @MDB_DATETIME@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_UTIME_H = @NEXT_AS_FIRST_DIRECTIVE_UTIME_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_SPAWN_H = @NEXT_SPAWN_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_UTIME_H = @NEXT_UTIME_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PARSE_DATETIME_BISON = @PARSE_DATETIME_BISON@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIME = @REPLACE_UTIME@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ SELINUX_LABEL_H = @SELINUX_LABEL_H@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_ACL = @USE_ACL@ USE_NLS = @USE_NLS@ UUIDLIBS = @UUIDLIBS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ crypt_support = @crypt_support@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ have_uuid = @have_uuid@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ etcdir = $(pkgdatadir)/etc dist_etc_DATA = FSD.rec all: all-am .SUFFIXES: $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu etc/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu etc/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-dist_etcDATA: $(dist_etc_DATA) @$(NORMAL_INSTALL) @list='$(dist_etc_DATA)'; test -n "$(etcdir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(etcdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(etcdir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_DATA) $$files '$(DESTDIR)$(etcdir)'"; \ $(INSTALL_DATA) $$files "$(DESTDIR)$(etcdir)" || exit $$?; \ done uninstall-dist_etcDATA: @$(NORMAL_UNINSTALL) @list='$(dist_etc_DATA)'; test -n "$(etcdir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(etcdir)'; $(am__uninstall_files_from_dir) tags TAGS: ctags CTAGS: cscope cscopelist: distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: check-am all-am: Makefile $(DATA) installdirs: for dir in "$(DESTDIR)$(etcdir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: install-am install-exec: install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." clean: clean-am clean-am: clean-generic clean-libtool mostlyclean-am distclean: distclean-am -rm -f Makefile distclean-am: clean-am distclean-generic dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-dist_etcDATA install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-generic mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-dist_etcDATA .MAKE: install-am install-strip .PHONY: all all-am check check-am clean clean-generic clean-libtool \ cscopelist-am ctags-am distclean distclean-generic \ distclean-libtool distdir dvi dvi-am html html-am info info-am \ install install-am install-data install-data-am \ install-dist_etcDATA install-dvi install-dvi-am install-exec \ install-exec-am install-html install-html-am install-info \ install-info-am install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-generic \ mostlyclean-libtool pdf pdf-am ps ps-am tags-am uninstall \ uninstall-am uninstall-dist_etcDATA .PRECIOUS: Makefile # End of Makefile.am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/etc/FSD.rec����������������������������������������������������������������������������0000644�0000000�0000000�00000002322�14226563465�012002� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# FSD.rec - Record descriptor for FSD entries # # This file contains the record descriptor for entries in the Free # Software Directory. # # The canonical location of this file is # http://www.jemarch.net/downloads/FSD.rec # Copyright (C) 2010, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. %rec: FSD_Entry %mandatory: Title %type: Title line %type: GNU bool %type: MaturityLevel enum + Undefined Planning PreAlpha Alpha Beta + Production Mature Orphaned %type: License enum + GPLv2 GPLv2PLUS GPLv3 GPLv3PLUS + GFDLv21PLUS %type: InterfaceStyle enum + CommandLine Console Daemon XWindow Web Email # End of FSD.rec ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/GNUmakefile����������������������������������������������������������������������������0000644�0000000�0000000�00000010741�14226564447�012177� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Having a separate GNUmakefile lets me 'include' the dynamically # generated rules created via cfg.mk (package-local configuration) # as well as maint.mk (generic maintainer rules). # This makefile is used only if you run GNU Make. # It is necessary if you want to build targets usually of interest # only to the maintainer. # Copyright (C) 2001, 2003, 2006-2022 Free Software Foundation, Inc. # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # You should have received a copy of the GNU General Public License # along with this program. If not, see <https://www.gnu.org/licenses/>. # If the user runs GNU make but has not yet run ./configure, # give them a diagnostic. _gl-Makefile := $(wildcard [M]akefile) ifneq ($(_gl-Makefile),) # Make tar archive easier to reproduce. export TAR_OPTIONS = --owner=0 --group=0 --numeric-owner # Allow the user to add to this in the Makefile. ALL_RECURSIVE_TARGETS = include Makefile # Some projects override e.g., _autoreconf here. -include $(srcdir)/cfg.mk # Allow cfg.mk to override these. _build-aux ?= build-aux _autoreconf ?= autoreconf -v include $(srcdir)/maint.mk # Ensure that $(VERSION) is up to date for dist-related targets, but not # for others: rerunning autoreconf and recompiling everything isn't cheap. _have-git-version-gen := \ $(shell test -f $(srcdir)/$(_build-aux)/git-version-gen && echo yes) ifeq ($(_have-git-version-gen)0,yes$(MAKELEVEL)) _is-dist-target ?= $(filter-out %clean, \ $(filter maintainer-% dist% alpha beta stable,$(MAKECMDGOALS))) _is-install-target ?= $(filter-out %check, $(filter install%,$(MAKECMDGOALS))) ifneq (,$(_is-dist-target)$(_is-install-target)) _curr-ver := $(shell cd $(srcdir) \ && $(_build-aux)/git-version-gen \ .tarball-version \ $(git-version-gen-tag-sed-script)) ifneq ($(_curr-ver),$(VERSION)) ifeq ($(_curr-ver),UNKNOWN) $(info WARNING: unable to verify if $(VERSION) is the correct version) else ifneq (,$(_is-install-target)) # GNU Coding Standards state that 'make install' should not cause # recompilation after 'make all'. But as long as changing the version # string alters config.h, the cost of having 'make all' always have an # up-to-date version is prohibitive. So, as a compromise, we merely # warn when installing a version string that is out of date; the user # should run 'autoreconf' (or something like 'make distcheck') to # fix the version, 'make all' to propagate it, then 'make install'. $(info WARNING: version string $(VERSION) is out of date;) $(info run '$(MAKE) _version' to fix it) else $(info INFO: running autoreconf for new version string: $(_curr-ver)) GNUmakefile: _version touch GNUmakefile endif endif endif endif endif .PHONY: _version _version: cd $(srcdir) && rm -rf autom4te.cache .version && $(_autoreconf) $(MAKE) $(AM_MAKEFLAGS) Makefile else .DEFAULT_GOAL := abort-due-to-no-makefile srcdir = . # The package can override .DEFAULT_GOAL to run actions like autoreconf. -include ./cfg.mk # Allow cfg.mk to override these. _build-aux ?= build-aux _autoreconf ?= autoreconf -v include ./maint.mk ifeq ($(.DEFAULT_GOAL),abort-due-to-no-makefile) $(MAKECMDGOALS): abort-due-to-no-makefile endif abort-due-to-no-makefile: @echo There seems to be no Makefile in this directory. 1>&2 @echo "You must run ./configure before running '$(MAKE)'." 1>&2 @exit 1 endif # Tell version 3.79 and up of GNU make to not build goals in this # directory in parallel, in case someone tries to build multiple # targets, and one of them can cause a recursive target to be invoked. # Only set this if Automake doesn't provide it. AM_RECURSIVE_TARGETS ?= $(RECURSIVE_TARGETS:-recursive=) \ $(RECURSIVE_CLEAN_TARGETS:-recursive=) \ dist distcheck tags ctags ALL_RECURSIVE_TARGETS += $(AM_RECURSIVE_TARGETS) ifneq ($(word 2, $(MAKECMDGOALS)), ) ifneq ($(filter $(ALL_RECURSIVE_TARGETS), $(MAKECMDGOALS)), ) .NOTPARALLEL: endif endif �������������������������������recutils-1.9/src/�����������������������������������������������������������������������������������0000755�0000000�0000000�00000000000�14226577414�010767� 5����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/Makefile.am������������������������������������������������������������������������0000644�0000000�0000000�00000004621�14226563465�012747� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# src/ Makefile.am # GNU recutils # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, # 2018, 2019, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. lib_LTLIBRARIES = librec.la include_HEADERS = rec.h librec_la_SOURCES = rec.c \ rec-mset.c \ rec-utils.h \ rec-utils.c \ rec-comment.c \ rec-field-name.c \ rec-field.c \ rec-record.c \ rec-rset.c \ rec-db.c \ rec-parser.c \ rec-writer.c \ rec-int.c \ rec-sex-parser.h \ rec-sex-parser.c \ rec-sex-ast.h \ rec-sex-ast.c \ rec-sex-tab.y \ rec-sex-lex.l \ rec-sex.c \ rec-fex.c \ rec-types.c \ rec-buf.c \ rec-aggregate.c if CRYPT librec_la_SOURCES += rec-crypt.c else librec_la_SOURCES += rec-crypt-dummy.c endif BUILT_SOURCES = rec-sex-tab.h AM_YFLAGS = -d AM_LFLAGS = -d AM_CFLAGS = if USE_COVERAGE AM_CFLAGS += -fprofile-arcs -ftest-coverage endif AM_LDFLAGS = -no-undefined AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib \ -DLOCALEDIR=\"$(localedir)\" librec_la_LDFLAGS = -version-info 1:0:0 librec_la_LIBADD = $(top_builddir)/lib/librecutils.la \ $(LIB_CLOCK_GETTIME) if CRYPT librec_la_LIBADD += $(LTLIBGCRYPT) endif if REMOTE_DESCRIPTORS AM_CPPFLAGS += -DREMOTE_DESCRIPTORS librec_la_LIBADD += $(CURLLIBS) endif if UUID_TYPE AM_CPPFLAGS += -DUUID_TYPE librec_la_LIBADD += $(UUIDLIBS) endif check-syntax: all # End of Makefile.am ���������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec.h������������������������������������������������������������������������������0000644�0000000�0000000�00000230522�14226563465�011636� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec.h - recutils header file. */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, * 2018, 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef GNU_REC_H #define GNU_REC_H #include <stdbool.h> #include <stdio.h> #include <fcntl.h> /* * rec format version implemented by this library. */ #define REC_VERSION_MAJOR 1 #define REC_VERSION_MINOR 0 #define REC_VERSION_STRING "1.0" /* * INITIALIZATION of the library */ void rec_init (void); void rec_fini (void); /* * HETEROGENEOUS ORDERED SETS (MULTI-SETS) * * Element types: A, B, C * * type value next_A next_B next_C * +-----+----------+-------+--------+--------+ * | | | | | | * +-----+----------+-------+--------+--------+ * . . . . . . * | | | | | | * +-----+----------+-------+--------+--------+ */ /* Opaque data type representing a multi-set. */ typedef struct rec_mset_s *rec_mset_t; /* Opaque data type representing an element which is stored in the multi-set. */ typedef struct rec_mset_elem_s *rec_mset_elem_t; /* Structure to hold iterators in the stack. Note that the inner structure must have the same structure than the gl_list_iterator_t structure in the internal (and not distributed) gl_list.h. This structure must be keep up to date. */ typedef struct { void *vtable; void *list; size_t count; void *p; void *q; size_t i; size_t j; } rec_mset_list_iter_t; typedef struct { rec_mset_t mset; rec_mset_list_iter_t list_iter; } rec_mset_iterator_t; /* Data types for the callbacks that can be registered in the multi-set and will be triggered to some events. */ typedef void (*rec_mset_disp_fn_t) (void *data); typedef bool (*rec_mset_equal_fn_t) (void *data1, void *data2); typedef void *(*rec_mset_dup_fn_t) (void *data); typedef int (*rec_mset_compare_fn_t) (void *data1, void *data2, int type2); /* Data type representing an element type in a multi-set. This type is assured to be a scalar and thus it is possible to use the comparison operators, but otherwise its contents must be opaque. */ typedef int rec_mset_type_t; #define MSET_ANY 0 /*************** Creating and destroying multi-sets *****************/ /* Create a new empty multi-set and return a reference to it. NULL is returned if there is no enough memory to complete the operation. */ rec_mset_t rec_mset_new (void); /* Destroy a multi-set, freeing all used resources. This disposes all the memory used by the mset internals, but not the data elements stored in the multi-set. */ void rec_mset_destroy (rec_mset_t mset); /* Create a copy of a multi-set and return a reference to it. This operation performs a deep copy using the user-provided callback to duplicate the elements stored in the set. NULL is returned if there is no enough memory to complete the operation. */ rec_mset_t rec_mset_dup (rec_mset_t mset); /*************** Registering Types in a multi-set *****************/ /* Return true if the multi-set has the specified TYPE registered. Return false otherwise. Note that this function always returns true when TYPE is MSET_ANY. */ bool rec_mset_type_p (rec_mset_t mset, rec_mset_type_t type); /* Register a type in a multi-set. NAME must be a NULL-terminated string with a unique name that will identify the type. The provided callbacks will be called when needed. This function returns an integer value that will identify the newly created type. The only assumption user code can make about this number is that it cant equal MSET_ANY. */ rec_mset_type_t rec_mset_register_type (rec_mset_t mset, char *name, rec_mset_disp_fn_t disp_fn, rec_mset_equal_fn_t equal_fn, rec_mset_dup_fn_t dup_fn, rec_mset_compare_fn_t compare_fn); /* Return the number of elements of the given type stored in a multi-set. If TYPE is MSET_ANY then the total number of elements stored in the set is returned, regardless their type. If the specified type does not exist in the multi-set then this function returns 0. */ size_t rec_mset_count (rec_mset_t mset, rec_mset_type_t type); /*************** Getting, inserting and removing elements **********/ /* Get the data stored at a specific position in a mset. The returned data occupies the POSITIONth position in the internal list of elements of the specified type. If there is no element stored at POSITION this function returns NULL. */ void *rec_mset_get_at (rec_mset_t mset, rec_mset_type_t type, size_t position); /* Create a new element at a specific position in a mset, storing a given data. If POSITION is 0 then the element is prepended. If POSITION is equal or bigger than the number of the existing elements with the same type in the mset then the new element is appended. The function returns the newly created element, or NULL if there is not enough memory to perform the operation. */ rec_mset_elem_t rec_mset_insert_at (rec_mset_t mset, rec_mset_type_t type, void *data, size_t position); /* Insert some given data just after another element in a mset. The function returns the newly created element, or NULL if there was no enough memory to perform the operation. */ rec_mset_elem_t rec_mset_insert_after (rec_mset_t mset, rec_mset_type_t type, void *data, rec_mset_elem_t elem); /* Append some given daata to a mset. This is equivalent to call rec_mset_insert_at specifying a position equal or bigger than the number of the existing elements with type TYPE in the mset. The function returns the newly created element, or NULL if there was no enough memory to perform the operation. */ rec_mset_elem_t rec_mset_append (rec_mset_t mset, rec_mset_type_t elem_type, void *data, rec_mset_type_t type); /* Add some given data to a mset. The position where the new element is inserted depends on the sorting criteria implemented by the compare_fn callback for the element type. The function returns the newly created element, or NULL if there was no enough memory to perform the operation. */ rec_mset_elem_t rec_mset_add_sorted (rec_mset_t mset, rec_mset_type_t type, void *data); /* Remove the element occupying the specified position from a record set. This function returns true if the element was removed, and false if there were no element stored at the specified position. */ bool rec_mset_remove_at (rec_mset_t mset, rec_mset_type_t type, size_t position); /* Remove an element from the multi-set. The function returns true if the element was found in the list and removed. */ bool rec_mset_remove_elem (rec_mset_t mset, rec_mset_elem_t elem); /* Search for an element storing the specified data in a mset and return it. NULL is returned in case no element in the record set is storing DATA. */ rec_mset_elem_t rec_mset_search (rec_mset_t mset, void *data); /*************** Iterating on mset elements *************************/ /* Create and return an iterator traversing elements in the multi-set. The mset contents must not be modified while the iterator is in use, except for replacing or removing the last returned element. */ rec_mset_iterator_t rec_mset_iterator (rec_mset_t mset); /* Advance the iterator to the next element of the given type. The data stored by the next element is stored in *DATA if DATA is non-NULL and a reference to the element in *ELEM if ELEM is non-NULL. The function returns true if there is a next element to which iterate to, and false otherwise. */ bool rec_mset_iterator_next (rec_mset_iterator_t *iterator, rec_mset_type_t type, const void **data, rec_mset_elem_t *elem); /* Free an iterator. */ void rec_mset_iterator_free (rec_mset_iterator_t *iterator); /*************** Managing mset elements ******************************/ /* Return the type of the given multi-set element. Since every element must be of some concrete type, the returned value cannot be equal to MSET_ANY. */ rec_mset_type_t rec_mset_elem_type (rec_mset_elem_t elem); /* Set the type of the given multi-set element. This function is useful to transform records into comments. */ void rec_mset_elem_set_type (rec_mset_elem_t elem, rec_mset_type_t type); /* Return a void pointer pointing to the data stored in the given mset element. If no data was stored in the element then this function returns NULL. */ void *rec_mset_elem_data (rec_mset_elem_t elem); /* Set the data stored in a multi-set element. The memory pointed by the previous value of the internal pointer is not freed or altered in any other way by this operation. */ void rec_mset_elem_set_data (rec_mset_elem_t elem, void *data); /* Determine whether the values stored in two multi-set elements are equal. The comparison is performed using the user-provided compare_fn callback. */ bool rec_mset_elem_equal_p (rec_mset_elem_t elem1, rec_mset_elem_t elem2); /* Create a copy of the data stored in a mset element and return a reference to it. This uses the user-provided callback to duplicate the data. NULL is returned if there is no enough memory to complete the operation. */ void *rec_mset_elem_dup_data (rec_mset_elem_t elem); /************** Sorting, grouping and other operations **************/ /* Sort a given multi-set using the compare_fn callbacks provided by the user when defining the types of the elements stored. This is a destructive operation. Returns a copy of the mset argument if the operation suceeded, NULL if there is not enough memory to perform the operation. */ rec_mset_t rec_mset_sort (rec_mset_t mset); /************************* Debugging ********************************/ /* Dump the contents of a multi-set to the terminal. For debugging purposes. */ void rec_mset_dump (rec_mset_t mset); /* * FLEXIBLE BUFFERS * * A flexible buffer (rec_buf_t) is a buffer to which stream-like * operations can be applied. Its size will grow as required. */ typedef struct rec_buf_s *rec_buf_t; rec_buf_t rec_buf_new (char **data, size_t *size); void rec_buf_close (rec_buf_t buffer); /* rec_buf_putc returns the character written as an unsigned char cast to an int, or EOF on error. */ int rec_buf_putc (int c, rec_buf_t buffer); /* rec_buf_puts returns a non-negative number on success (number of characters written), or EOF on error. */ int rec_buf_puts (const char *s, rec_buf_t buffer); void rec_buf_rewind (rec_buf_t buf, int n); /* * COMMENTS * * A comment is a block of text. The printed representation of a * comment includes a sharp (#) character after each newline (\n) * character. */ typedef char *rec_comment_t; /* Create a new comment and return it. NULL is returned if there is not enough memory to perform the operation. */ rec_comment_t rec_comment_new (char *text); /* Destroy a comment, freeing all used resources. */ void rec_comment_destroy (rec_comment_t comment); /* Make a copy of the passed comment and return it. NULL is returned if there is not enough memory to perform the operation. */ rec_comment_t rec_comment_dup (rec_comment_t comment); /* Return a string containing the text in the comment. */ char *rec_comment_text (rec_comment_t comment); /* Set the text of a comment. Any previous text associated with the comment is destroyed and its memory freed. */ void rec_comment_set_text (rec_comment_t *comment, char *text); /* Determine whether the texts stored in two given comments are equal. */ bool rec_comment_equal_p (rec_comment_t comment1, rec_comment_t comment2); /* FIELD NAMES * */ /******************* Regexps for field names *******************/ #define REC_FNAME_RE "[a-zA-Z%][a-zA-Z0-9_]*" #define REC_TYPE_NAME_RE "[a-zA-Z][a-zA-Z0-9_-]*" #define REC_URL_REGEXP "(file|http|ftp|https)://[^ \t]+" #define REC_FILE_REGEXP "(/?[^/ \t\n]+)+" /******************* Field data types **************************/ /* * The following enumeration contains identifiers for the standard * fields used by the library. * * Changes to this enumerated value will require some fixes in * rec-field-name.c. */ enum rec_std_field_e { REC_FIELD_AUTO = 0, REC_FIELD_CONFIDENTIAL, REC_FIELD_KEY, REC_FIELD_MANDATORY, REC_FIELD_PROHIBIT, REC_FIELD_REC, REC_FIELD_SIZE, REC_FIELD_SORT, REC_FIELD_TYPE, REC_FIELD_TYPEDEF, REC_FIELD_UNIQUE, REC_FIELD_CONSTRAINT, REC_FIELD_ALLOWED, REC_FIELD_SINGULAR }; /******************* Field name utilities **********************/ /* Determine whether two given strings contain the same field name. Note that this function does not check wheter the strings actually contain valid field names. */ bool rec_field_name_equal_p (const char *name1, const char *name2); /* Determine whether a given string is a correct field name. */ bool rec_field_name_p (const char *str); /* Normalise a field name. Any non alphanumeric character, including '_', '-' and '%', are transformed into '_'. This function returns NULL if there is not enough memory to perform the operation. */ char *rec_field_name_normalise (const char *str); /* Return the field name corresponding to a standard field, as defined above. */ const char *rec_std_field_name (enum rec_std_field_e std_field); /* * FIELD EXPRESSIONS * * A Field expression is composed by a sequence of "elements". Each * element makes a reference to one or more fields in a record. */ /* Opaque data types for field expressions and the elements stored in them. */ typedef struct rec_fex_s *rec_fex_t; typedef struct rec_fex_elem_s *rec_fex_elem_t; enum rec_fex_kind_e { REC_FEX_SIMPLE, REC_FEX_CSV, REC_FEX_SUBSCRIPTS }; /* Regular expressions matching written fexes. */ #define REC_FNAME_FEX_RE REC_FNAME_RE "(\\." REC_FNAME_RE ")?" #define REC_FNAME_LIST_RE REC_FNAME_RE "([ \n\t]+" REC_FNAME_RE ")*" #define REC_FNAME_LIST_CS_RE REC_FNAME_FEX_RE "(," REC_FNAME_FEX_RE ")*" #define REC_FNAME_SUB_RE REC_FNAME_FEX_RE "(\\[[0-9]+(-[0-9]+)?\\])?" #define REC_FEX_FUNCTION_NAME "[a-zA-Z_][a-zA-Z0-9_]*" #define REC_FEX_CALL REC_FEX_FUNCTION_NAME "\\(" REC_FNAME_FEX_RE "\\)" #define REC_FNAME_LIST_SUB_ELEM_RE "(" REC_FNAME_SUB_RE "|" REC_FEX_CALL ")" "(:" REC_FNAME_FEX_RE ")?" #define REC_FNAME_LIST_SUB_RE REC_FNAME_LIST_SUB_ELEM_RE "(," REC_FNAME_LIST_SUB_ELEM_RE ")*" /*********** Creating and destroying field expressions ************/ /* Parse and create a field expression, and return it. A fex kind shall be specified in KIND. If STR does not contain a valid FEX of the given kind then NULL is returned. If there is not enough memory to perform the operation then NULL is returned. If STR is NULL then an empty fex is returned. */ rec_fex_t rec_fex_new (const char *str, enum rec_fex_kind_e kind); /* Destroy a field expression, freeing any used resource. */ void rec_fex_destroy (rec_fex_t fex); /* Create a copy of a given fex and return a reference to it. If there is not enough memory to perform the operation then NULL is returned. */ rec_fex_t rec_fex_dup (rec_fex_t fex); /********* Getting and setting field expression properties **********/ /* Get the number of elements stored in a field expression. */ size_t rec_fex_size (rec_fex_t fex); /* Check whether a given field (or set of fields) identified by their name and indexes, are contained in a fex. */ bool rec_fex_member_p (rec_fex_t fex, const char *fname, int min, int max); /* Get the element of a field expression occupying the given position. If the position is invalid then NULL is returned. */ rec_fex_elem_t rec_fex_get (rec_fex_t fex, size_t position); /* Append an element at the end of the fex and return it. This function returns NULL if there is not enough memory to perform the operation. */ rec_fex_elem_t rec_fex_append (rec_fex_t fex, const char *fname, int min, int max); /* Determine whether all the elements of the given FEX are function calls. */ bool rec_fex_all_calls_p (rec_fex_t fex); /**************** Accessing field expression elements **************/ /* Return the name of the field(s) referred by a given fex element. */ const char *rec_fex_elem_field_name (rec_fex_elem_t elem); /* Set the name of the field(s) referred by a given fex element. This function returns 'false' if there is not enough memory to perform the operation. */ bool rec_fex_elem_set_field_name (rec_fex_elem_t elem, const char *fname); /* Get the 'min' index associated with the field(s) referred by a given fex element. */ int rec_fex_elem_min (rec_fex_elem_t elem); /* Get the 'max' index associated with the field(s) referred by a given fex element. Note that if the index is unused (the element refers to just one field) then -1 is returned. */ int rec_fex_elem_max (rec_fex_elem_t elem); /* Get the 'rewrite_to' field name associated with the field(s) referred by a given fex element. If no rewrite rule was specified in the fex entry then NULL is returned. */ const char *rec_fex_elem_rewrite_to (rec_fex_elem_t elem); /* Get the function name associated with a given fex element. If the fex entry is not a function call then NULL is returned. */ const char *rec_fex_elem_function_name (rec_fex_elem_t elem); /* Get the pointer to the context data to be used in the function call, if any. */ void **rec_fex_elem_function_data (rec_fex_elem_t elem); /*********** Miscellaneous field expressions functions ************/ /* Check whether a given string STR contains a proper fex description of type KIND. */ bool rec_fex_check (const char *str, enum rec_fex_kind_e kind); /* Sort the elements of a fex using the 'min' index of the elements as the sorting criteria. */ void rec_fex_sort (rec_fex_t fex); /* Get the written form of a field expression. This function returns NULL if there is not enough memory to perform the operation. */ char *rec_fex_str (rec_fex_t fex, enum rec_fex_kind_e kind); /* * FIELD TYPES * */ enum rec_type_kind_e { /* Unrestricted. */ REC_TYPE_NONE = 0, /* An integer number. */ REC_TYPE_INT, /* A Boolean. */ REC_TYPE_BOOL, /* An integer number within a given range. */ REC_TYPE_RANGE, /* A real number. */ REC_TYPE_REAL, /* A string with a limitation on its size. */ REC_TYPE_SIZE, /* A line. */ REC_TYPE_LINE, /* A regexp. */ REC_TYPE_REGEXP, /* A date. */ REC_TYPE_DATE, /* An Enumeration. */ REC_TYPE_ENUM, /* A field name. */ REC_TYPE_FIELD, /* An email. */ REC_TYPE_EMAIL, /* An universally unique identifier (uuid). */ REC_TYPE_UUID, /* A foreign key. */ REC_TYPE_REC }; typedef struct rec_type_s *rec_type_t; /* Create a new type based on the textual description in STR. */ rec_type_t rec_type_new (const char *str); /* Destroy a type. */ void rec_type_destroy (rec_type_t type); /* Determine whether a string contains a valid type description. */ bool rec_type_descr_p (const char *str); /* Get the kind of the type. The _str version returns a string with the name of the type. */ enum rec_type_kind_e rec_type_kind (rec_type_t type); char *rec_type_kind_str (rec_type_t type); /* Get the min and max parametes of a range type. If the type does not define a range then -1 is returned. */ int rec_type_min (rec_type_t type); int rec_type_max (rec_type_t type); /* Get the record set name of a rec type. If the type does not define a rec then NULL is returned. */ const char *rec_type_rec (rec_type_t type); /* Get and set the name of a type. Types are created anonymous by rec_type_new, so the getter will return NULL unless a name is set. */ const char *rec_type_name (rec_type_t type); void rec_type_set_name (rec_type_t type, const char *name); /* Determine whether two types are the same type. * * Two types are equal if, * * - They are of the same kind, and * * - Depending on the kind of types: * * + For sizes * * The maximum size specified in both types is the same. * * + For ranges * * The ranges specified in both types are the same. * * + For enums * * Both enums have the same number of entries, they are identical * and in the same order. * * + For regexps * * They are never equal. */ bool rec_type_equal_p (rec_type_t type1, rec_type_t type2); /* Check the contents of a string against a type. In case some error arises, return it in ERROR_STR if it is not NULL. */ bool rec_type_check (rec_type_t type, const char *str, char **error_str); /* Compare two values of a given type. The comparison criteria will vary depending of the given type: numerical for ints and reals, time comparison for dates, etc. If TYPE is NULL then a lexicographic comparison is performed. Return -1 if VAL1 < VAL2, 0 if VAL1 == VAL2 and 1 if VAL1 > VAL2. */ int rec_type_values_cmp (rec_type_t type, const char *val1, const char *val2); /* * TYPE REGISTRIES. * * Type registries are collections of named types. The following API * provides facilities to maintain type registries. */ typedef struct rec_type_reg_s *rec_type_reg_t; /* Create and return an empty type registry. NULL is returned if there is not enough memory to perform the operation. */ rec_type_reg_t rec_type_reg_new (void); /* Destroy a type registry, freeing resources. */ void rec_type_reg_destroy (rec_type_reg_t reg); /* Insert a new type in the type registry. If a type with the same name already exists in the registry then it gets replaced. */ void rec_type_reg_add (rec_type_reg_t reg, rec_type_t type); /* Insert a new type in the type registry as a synonim of another type. If a type with the same name already exists in the registry then it gets replaced. */ void rec_type_reg_add_synonym (rec_type_reg_t reg, const char *type_name, const char *to_name); /* Get the type named TYPE_NAME stored in REG. If it does not exist NULL is returned. */ rec_type_t rec_type_reg_get (rec_type_reg_t reg, const char *type_name); /* * FIELDS * * A field is an association between a label and a value. */ /* Opaque data type representing a field. */ typedef struct rec_field_s *rec_field_t; /*************** Creating and destroying fields *****************/ /* Create a new field and return a reference to it. NULL is returned if there is no enough memory to perform the operation. */ rec_field_t rec_field_new (const char *name, const char *value); /* Destroy a field freeing all used resources. This disposes all the memory used by the field internals. */ void rec_field_destroy (rec_field_t field); /* Create a copy of a field and return a reference to it. This operation performs a deep copy of the contents of the field. NULL is returned if there is no enough memory to perform the operation. */ rec_field_t rec_field_dup (rec_field_t field); /******************** Comparing fields ****************************/ /* Determine wether two given fields are equal (i.e. they have equal names but possibly different values). */ bool rec_field_equal_p (rec_field_t field1, rec_field_t field2); /************ Getting and Setting field properties *****************/ /* Return a NULL terminated string containing the name of a field. Note that this function can't return the empty string for a properly initialized field. */ const char *rec_field_name (rec_field_t field); /* Set the name of a field. This function returns 'false' if there is not enough memory to perform the operation. */ bool rec_field_set_name (rec_field_t field, const char *name); /* Return a NULL terminated string containing the value of a field, i.e. the string stored in the field. The returned string may be empty if the field has no value, but never NULL. */ const char *rec_field_value (rec_field_t field); /* Set the value of a given field to the given string. This function returns 'false' if there is not enough memory to perform the operation. */ bool rec_field_set_value (rec_field_t field, const char *value); /* Return a string describing the source of the field. The specific meaning of the source depends on the user: it may be a file name, or something else. This function returns NULL for a field for which a source was never set. */ const char *rec_field_source (rec_field_t field); /* Set a string describing the source of the field. Any previous string associated to the field is destroyed and the memory it occupies is freed. This function returns 'false' if there is not enough memory to perform the operation. */ bool rec_field_set_source (rec_field_t field, const char *source); /* Return an integer representing the location of the field within its source. The specific meaning of the location depends on the user: it may be a line number, or something else. This function returns 0 for fields not having a defined source. */ size_t rec_field_location (rec_field_t field); /* Return the textual representation for the location of a field within its source. This function returns NULL for fields not having a defined source. */ const char *rec_field_location_str (rec_field_t field); /* Set a number as the new location for the given field. Any previously stored location is forgotten. This function returns 'false' if there is not enough memory to perform the operation. */ bool rec_field_set_location (rec_field_t field, size_t location); /* Return an integer representing the char location of the field within its source. The specific meaning of the location depends on the user, usually being the offset in bytes since the beginning of a file or memory buffer. This function returns 0 for fields not having a defined source. */ size_t rec_field_char_location (rec_field_t field); /* Return the textual representation for the char location of a field within its source. This function returns NULL for fields not having a defined source. */ const char *rec_field_char_location_str (rec_field_t field); /* Set a number as the new char location for the given field. Any previously stored char location is forgotten. This function returns 'false' if there is not enough memory to perform the operation. */ bool rec_field_set_char_location (rec_field_t field, size_t location); /* Get/set the mark of a given field, which is an integer associated to the field ADT. */ void rec_field_set_mark (rec_field_t field, int mark); int rec_field_mark (rec_field_t field); /********************* Transformations in fields ********************/ /* Get the textual representation of a field and make it a comment variable. This function returns NULL if there is no enough memory to perform the operation. */ rec_comment_t rec_field_to_comment (rec_field_t field); /* * RECORDS * * A record is an ordered set of one or more fields intermixed with * comment blocks. */ /* Opaque data type representing a record. */ typedef struct rec_record_s *rec_record_t; /* Record mset types. Note that the following constants are relying on the fact the multi-sets assign consecutive type ids starting with 1. This is done this way for performance reasons, but it means that this constants must be ajusted in case the order in which the types are registered in rec_record_new changes. */ #define MSET_FIELD 1 #define MSET_COMMENT 2 /*************** Creating and destroying records *****************/ /* Create a new empty record and return a reference to it. NULL is returned if there is no enough memory to perform the operation. */ rec_record_t rec_record_new (void); /* Destroy a record, freeing all used resources. This disposes all the memory used by the record internals, including any stored field or comment. */ void rec_record_destroy (rec_record_t record); /* Create a copy of a record and return a reference to it. This operation performs a deep copy of the contained fields and comments. NULL is returned if there is no enough memory to perform the operation. */ rec_record_t rec_record_dup (rec_record_t record); /******************** Comparing records ***************************/ /* Determine whether a given record is a subset of another record. A record 'A' is a subset of a record 'B' if and only if for every field or comment contained in 'A' there is an equivalent field or comment in 'B'. The order of the elements is not relevant. */ bool rec_record_subset_p (rec_record_t record1, rec_record_t record2); /* Determine whether a given record is equal to another record. A record 'A' is equal to a record 'B' if the 'A' is a subset of 'B' and 'B' is a subset of 'A'. */ bool rec_record_equal_p (rec_record_t record1, rec_record_t record2); /************ Getting and Setting record properties ****************/ /* Return the multi-set containing the elements stored by the given record. */ rec_mset_t rec_record_mset (rec_record_t record); /* Return the number of elements stored in the given record, of any type. */ size_t rec_record_num_elems (rec_record_t record); /* Return the number of fields stored in the given record. */ size_t rec_record_num_fields (rec_record_t record); /* Return the number of comments stored in the given record. */ size_t rec_record_num_comments (rec_record_t record); /* Return a string describing the source of the record. The specific meaning of the source depends on the user: it may be a file name, or something else. This function returns NULL for a record for which a source was never set. */ char *rec_record_source (rec_record_t record); /* Set a string describing the source of the record. Any previous string associated to the record is destroyed and the memory it occupies is freed. */ void rec_record_set_source (rec_record_t record, char *source); /* Return an integer representing the location of the record within its source. The specific meaning of the location depends on the user: it may be a line number, or something else. This function returns 0 for records not having a defined source. */ size_t rec_record_location (rec_record_t record); /* Return the textual representation for the location of a record within its source. This function returns NULL for records not having a defined source. */ char *rec_record_location_str (rec_record_t record); /* Set a number as the new location for the given record. Any previously stored location is forgotten. */ void rec_record_set_location (rec_record_t record, size_t location); /* Return an integer representing the char location of the record within its source. The specific meaning of the location depends on the user, usually being the offset in bytes since the beginning of a file or memory buffer. This function returns 0 for records not having a defined source. */ size_t rec_record_char_location (rec_record_t record); /* Return the textual representation for the char location of a record within its source. This function returns NULL for records not having a defined source. */ char *rec_record_char_location_str (rec_record_t record); /* Set a number as the new char location for the given record. Any previously stored char location is forgotten. */ void rec_record_set_char_location (rec_record_t record, size_t char_location); /* Return the position occupied by the specified field in the specified records, not considering comments. */ size_t rec_record_get_field_index (rec_record_t record, rec_field_t field); /* Return the position occupied by the specified field in the specified record among the fields having the same name. Thus, if the provided field is the first having its name in the record then the function returns 0. If it is the third then the function returns 2. */ size_t rec_record_get_field_index_by_name (rec_record_t record, rec_field_t field); /* Determine whether a record contains some field whose value is STR. The string comparison can be either case-sensitive or case-insensitive. */ bool rec_record_contains_value (rec_record_t record, const char *value, bool case_insensitive); /* Determine whether a record contains a field whose name is FIELD_NAME and value FIELD_VALUE. */ bool rec_record_contains_field (rec_record_t record, const char *field_name, const char *field_value); /* Determine whether a given record contains a field named after a given field name. */ bool rec_record_field_p (rec_record_t record, const char *field_name); /* Return the number of fields name after a given field name stored in a record. */ size_t rec_record_get_num_fields_by_name (rec_record_t record, const char *field_name); /* Return the Nth field named after the given field name in a record. This function returns NULL if there is no such a field. */ rec_field_t rec_record_get_field_by_name (rec_record_t record, const char *field_name, size_t n); /* Remove the Nth field named after the given field name in a record. */ void rec_record_remove_field_by_name (rec_record_t record, const char *field_name, size_t n); /* Return the 'container pointer' of a record. It is a pointer which is used by the user of the record. This function returns NULL if no container pointer has been set in the record. */ void *rec_record_container (rec_record_t record); /* Set the 'container pointer' of a record, replacing any previous value. */ void rec_record_set_container (rec_record_t record, void *container); /********************* Transformations in records *******************/ /* Get the textual representation of a record and make it a comment variable. This function returns NULL if there is no enough memory to perform the operation. */ rec_comment_t rec_record_to_comment (rec_record_t record); /* Remove duplicated fields in a given record. Fields are compared by field name and value. */ void rec_record_uniq (rec_record_t record); /* Append two records. This function adds all the fields in SRC_RECORD to DEST_RECORD. */ void rec_record_append (rec_record_t dest_record, rec_record_t src_record); /********************* Field Marks in records **********************/ /* Reset the marks of all fields in a given records, setting all the marks to 0. */ void rec_record_reset_marks (rec_record_t record); /* Set the mark of a given field. Return true if the field is marked as desired. Return false if the field is not stored in the record. */ bool rec_record_mark_field (rec_record_t record, rec_field_t field, int mark); /* Get the mark associated to a field in a record. If the given field is not found in the record then return 0. */ int rec_record_field_mark (rec_record_t record, rec_field_t field); /* * RECORD SETS * * A record set is an ordered set of zero or more records and comments * maybe preceded by a record descriptor. */ #define REC_RECORD_TYPE_RE REC_FNAME_RE /* Opaque data type representing a record set. */ typedef struct rec_rset_s *rec_rset_t; /* Opaque data type representing a selection expression. This is placed here as a forward declaration. See below in this file for the definition of the selection expressions stuff. */ typedef struct rec_sex_s *rec_sex_t; /* Record set mset types. MSET_COMMENT is defined above. */ #define MSET_RECORD 1 /************ Creating and destroying record sets **************/ /* Create a new empty record set and return a reference to it. NULL is returned if there is no enough memory to perform the operation. */ rec_rset_t rec_rset_new (void); /* Destroy a record set, freeing all user resources. This disposes all the memory used by the record internals, including any stored record or comment. */ void rec_rset_destroy (rec_rset_t rset); /* Create a copy of a record set and return a reference to it. This operation performs a deep copy of the contained records and comments. NULL is returned if there is no enough memory to perform the operation. */ rec_rset_t rec_rset_dup (rec_rset_t rset); /********* Getting and Setting record set properties *************/ /* Return the multi-set containing the elements stored by the given record set. */ rec_mset_t rec_rset_mset (rec_rset_t rset); /* Return the number of elements stored in the given record set, of any type. */ size_t rec_rset_num_elems (rec_rset_t rset); /* Return the number of records stored in the given record set. */ size_t rec_rset_num_records (rec_rset_t rset); /* Return the number of comments stored in the given record set. */ size_t rec_rset_num_comments (rec_rset_t rset); /***************** Record descriptor management ******************/ /* Return the record descriptor of a given record set. NULL is returned if the record set does not feature a record descriptor. */ rec_record_t rec_rset_descriptor (rec_rset_t rset); /* Set a new record descriptor for a given record set. If there was previously a record descriptor in the rset then it is destroyed. This function performs all the requires updates to the semantics associated with record sets, such as the type registry, size constraints, etc. If RECORD is NULL then the record set wont feature a record descriptor. */ void rec_rset_set_descriptor (rec_rset_t rset, rec_record_t record); /* Return the relative position of the descriptor with respect the first element in the record set. For example, if there are two comments before the record descriptor in the record set then this function returns 3. */ size_t rec_rset_descriptor_pos (rec_rset_t rset); /* Set the relative position of the descriptor with respect the first element in the record set. See the documentation for rec_rset_descriptor_pos for details. */ void rec_rset_set_descriptor_pos (rec_rset_t rset, size_t position); /* Return the URL associated with a record set (external descriptor). NULL is returned if the record set does not feature a record descriptor, or if the record set is not featuring an external descriptor. */ char *rec_rset_url (rec_rset_t rset); /* Return the type name of a record set. NULL is returned if the record set does not feature a record descriptor. */ char *rec_rset_type (rec_rset_t rset); /* Set the type name of a record set. If there was not a record descriptor in the rset then it is created with a single %rec field. In case there was an existing descriptor in the rset then it is updated to reflect the new name. */ void rec_rset_set_type (rec_rset_t rset, const char *type); /************ Management of the type registry ***********************/ /* Return the type registry of a record set. Note that the registry will be empty for a newly created rset. */ rec_type_reg_t rec_rset_get_type_reg (rec_rset_t rset); /* Return the declared type for fields named after the provided field name in a record set. NULL is returned if no such a type is found. */ rec_type_t rec_rset_get_field_type (rec_rset_t rset, const char *field_name); /********************** Size constraints ****************************/ /* Return the minimum number of records allowed for a rset in its record descriptor. This is 0 for record sets for which no size constraints have been defined. */ size_t rec_rset_min_records (rec_rset_t rset); /* Return the maximum number of records allowed for a rset in its record descriptor. This is SIZE_MAX for record sets for which no size constraints have been defined. */ size_t rec_rset_max_records (rec_rset_t rset); /********************** Sex constraints *****************************/ /* Return the number of sex constraints defined in a record set. This is 0 for record sets for which no sex constraints have been defined. */ size_t rec_rset_num_sex_constraints (rec_rset_t rset); /* Return a given sex constraint defined in a record sex. The provided index must be between 0 and the value returned by rec_rset_num_sex_constraints - 1. */ rec_sex_t rec_rset_sex_constraint (rec_rset_t rset, size_t index); /********************** Other functionality *************************/ /* Rename a field in a record descriptor. Field names are not modified in the records themselves, but only in the record descriptor. Note that the comparisons of the field names are EQL. */ void rec_rset_rename_field (rec_rset_t rset, const char *field_name, const char *new_field_name); /* Return a fex with the names of all the fields defined as auto-incremented fields in a record set. */ rec_fex_t rec_rset_auto (rec_rset_t rset); /* Return the name of the key field of the record set. If the record set does not have a key defined then return NULL. */ const char *rec_rset_key (rec_rset_t rset); /* Return a fex with the names of all the fields defined as confidential fields in a record set. */ rec_fex_t rec_rset_confidential (rec_rset_t rset); /* Determine whether a given field name corresponds to a confidential field in a record set. */ bool rec_rset_field_confidential_p (rec_rset_t rset, const char *field_name); /* Return a string describing the source of the record set. The specific meaning of the source depends on the user: it may be a file name, or something else. This function returns NULL for a record set for which a source was never set. */ char *rec_rset_source (rec_rset_t rset); /* Set an orderd set of of field names that will be used as the sorting criteria for a record set. The field names will take precedence to any other way to define the sorting criteria, such as the %sort special field in the record descriptor. This function returns 'false' if there is not enough memory to perform the operation. */ bool rec_rset_set_order_by_fields (rec_rset_t rset, rec_fex_t field_names); /* Return the field names that are used to sort a record set. */ rec_fex_t rec_rset_order_by_fields (rec_rset_t rset); /* Sort a record set. The SORT_BY parameter is a fex that, if non NULL, contains the field names which will be used as the sorting criteria. If no SORT_BY fields is specified then whatever sorting criteria specified in the record set is used. If no sorting criteria exists then the function is a no-op. The function returns a copy of RSET or NULL if there is not enough memory to perform the operation. */ rec_rset_t rec_rset_sort (rec_rset_t rset, rec_fex_t sort_by); /* Group the records of a record set by the given fields in GROUP_BY. The given record set must be sorted by GROUP_BY. Note that this function uses the first field with the given names found in a record, ignoring any subsequent field. It is up to the user to provide the right records in order to get the desired results. The function returns a copy of RSET or NULL if there was not enough memory to perform the operation. */ rec_rset_t rec_rset_group (rec_rset_t rset, rec_fex_t group_by); /* Add missing auto fields defined in a record set to a given record. The record could not be stored in the record set used to determine which auto fields to add. This function is a no-operation if the given record set is not defining any auto field, or if the passed record already contains all fields marked as auto in the record set. The function returns a copy of RSET or NULL if there was not enough memory to perform the operation. */ rec_rset_t rec_rset_add_auto_fields (rec_rset_t rset, rec_record_t record); /* * DATABASES * * A database is an ordered set of zero or more record sets. */ /* Opaque type representing a database. */ typedef struct rec_db_s *rec_db_t; /* Opaque data type representing a registry of aggregates. This is placed here as a forward declaration. See below in this file for the description of field functions. */ typedef struct rec_aggregate_reg_s *rec_aggregate_reg_t; /************ Creating and destrying databases *********************/ /* Create a new empty database and return it. This function returns NULL if there is not enough memory to perform the operation. */ rec_db_t rec_db_new (void); /* Destroy a database, freeing any used memory. This means that all the record sets contained in the database are also destroyed. */ void rec_db_destroy (rec_db_t db); /*********** Getting and setting properties of databases **********/ /* Return the number of record sets contained in a given record set. */ size_t rec_db_size (rec_db_t db); /*********** Managing record sets in a database *******************/ /* Return the record set occupying the given position in the database. If no such record set is contained in the database then NULL is returned. */ rec_rset_t rec_db_get_rset (rec_db_t db, size_t position); /* Insert the given record set into the given database at the given position. If POSITION >= rec_rset_size (DB), RSET is appended to the list of fields. If POSITION < 0, RSET is prepended. Otherwise RSET is inserted at the specified position. If the rset is inserted then 'true' is returned. If there is an error then 'false' is returned. */ bool rec_db_insert_rset (rec_db_t db, rec_rset_t rset, size_t position); /* Remove the record set contained in the given position into the given database. If POSITION >= rec_db_size (DB), the last record set is deleted. If POSITION <= 0, the first record set is deleted. Otherwise the record set occupying the specified position is deleted. If a record set has been removed then 'true' is returned. If there is an error or the database has no record sets 'false' is returned. */ bool rec_db_remove_rset (rec_db_t db, size_t position); /* Determine whether an rset named TYPE exists in a database. If TYPE is NULL then it refers to the default record set. */ bool rec_db_type_p (rec_db_t db, const char *type); /* Get the rset with the given type from db. This function returns NULL if there is no a record set having that type. */ rec_rset_t rec_db_get_rset_by_type (rec_db_t db, const char *type); /******************** Miscellaneous database functions ****************/ /* Return the registry of aggregates of the given database. */ rec_aggregate_reg_t rec_db_aggregates (rec_db_t db); /******************** Database High-Level functions *******************/ /* Query for some data in a database. The resulting data is returned in a record set. This function takes the following arguments: DB Database to query. TYPE The type of records to query. This string must identify a record set contained in the database. If TYPE is NULL then the default record set, if any, is queried. JOIN If not NULL, this argument must be a string denoting a field name. This field name must be a foreign key (field of type 'rec') defined in the selected record set. The query operation will do an inner join using T1.Field = T2.Field as join criteria. INDEX If not NULL, this argument is a pointer to a buffer containing pairs of Min,Max indexes, identifying intervals of valid records. The list of ends with the pair REC_Q_NOINDEX,REC_Q_NOINDEX. INDEX is mutually exclusive with any other selection option. SEX Selection expression which is evaluated for every record in the referred record set. If SEX is NULL then all records are selected. This argument is mutually exclusive with any other selection option. FAST_STRING If this argument is not NULL then it is a string which is used as a fixed pattern. Records featuring fields containing FAST_STRING as a substring in their values are selected. This argument is mutually exclusive with any other selection option. RANDOM If not 0, this argument indicates the number of random records to select from the referred record set. This argument is mutually exclusive with any other selection option. FEX Field expression to apply to the matching records to build the records in the result record set. If FEX is NULL then the matching records are unaltered. PASSWORD Password to use to decrypt confidential fields. If the password does not work then the encrypted fields are returned as-is. If PASSWORD is NULL, or if it is the empty string, then no attempt to decrypt encrypted fields will be performed. GROUP_BY If not NULL, group the record set by the given field names. SORT_BY If not NULL, sort the record set by the given field names. FLAGS ORed value of any of the following flags: REC_Q_DESCRIPTOR If set returned record set will feature a record descriptor. If the query is involving a single record set then the descriptor will be a copy of the descriptor of the referred record set, and will feature the same record type name. Otherwise it will be built from the several descriptors of the involved record sets, and the record type name will be formed concatenating the type names of the involved record sets. If this flag is not activated then the returned record set won't feature a record descriptor. REC_Q_ICASE If set the string operations in the selection expression will be case-insensitive. If FALSE any string operation will be case-sensitive. This function returns NULL if there is not enough memory to perform the operation. */ #define REC_F_DESCRIPTOR 1 #define REC_F_ICASE 2 #define REC_F_UNIQ 4 #define REC_Q_NOINDEX ((size_t)-1) rec_rset_t rec_db_query (rec_db_t db, const char *type, const char *join, size_t *index, rec_sex_t sex, const char *fast_string, size_t random, rec_fex_t fex, const char *password, rec_fex_t group_by, rec_fex_t sort_by, int flags); /* Insert a new record into a database, either appending it to some record set or replacing one or more existing records. This function takes the following arguments: DB Database where to insert the record. TYPE Type of the new record. If there is an existing record set holding records of that type then the record is added to it. Otherwise a new record set is appended into the database. INDEX If not NULL, this argument is a pointer to a buffer containing pairs of Min,Max indexes, identifying intervals of records that will be replaced by copies of the provided record. The list of ends with the pair REC_Q_NOINDEX,REC_Q_NOINDEX. INDEX is mutually exclusive with any other selection option. SEX Selection expression which is evaluated for every record in the referred record set. If SEX is NULL then all records are selected. This argument is mutually exclusive with any other selection option. FAST_STRING If this argument is not NULL then it is a string which is used as a fixed pattern. Records featuring fields containing FAST_STRING as a substring in their values are selected. This argument is mutually exclusive with any other selection option. RANDOM If not 0, this argument indicates the number of random records to select from the referred record set. This argument is mutually exclusive with any other selection option. PASSWORD Password to use to crypt confidential fields. If PASSWORD is NULL, or if it is the empty string, then no attempt to crypt confidential fields will be performed. RECORD Record to insert. If more than one record is replaced in the database they will be substitued with copies of this record. FLAGS ORed value of any of the following flags: REC_F_ICASE If set the string operations in the selection expression will be case-insensitive. If FALSE any string operation will be case-sensitive. REC_F_NOAUTO If set then no auto-fields will be added to the newly created records in the database. If no selection option is used then the new record is appended to either an existing record set identified by TYPE or to a newly created record set. If some selection option is used then the matching existing records will be replaced. This function returns 'false' if there is not enough memory to perform the operation. */ #define REC_F_NOAUTO 8 bool rec_db_insert (rec_db_t db, const char *type, size_t *index, rec_sex_t sex, const char *fast_string, size_t random, const char *password, rec_record_t record, int flags); /* Delete records from a database, either physically removing them or commenting them out. This function takes the following arguments: DB Database where to remove records. TYPE Type of the records to remove. INDEX If not NULL, this argument is a pointer to a buffer containing pairs of Min,Max indexes, identifying intervals of records that will be deleted or commented out. The list of ends with the pair REC_Q_NOINDEX,REC_Q_NOINDEX. INDEX is mutually exclusive with any other selection option. SEX Selection expression which is evaluated for every record in the referred record set. If SEX is NULL then all records are selected. This argument is mutually exclusive with any other selection option. FAST_STRING If this argument is not NULL then it is a string which is used as a fixed pattern. Records featuring fields containing FAST_STRING as a substring in their values are selected. This argument is mutually exclusive with any other selection option. RANDOM If not 0, this argument indicates the number of random records to select for deletion in the referred record set. This argument is mutually exclusive with any other selection option. FLAGS ORed value of any of the following flags: REC_F_ICASE If set the string operations in the selection expression will be case-insensitive. If FALSE any string operation will be case-sensitive. REC_F_COMMENT_OUT If set the selected records will be commented out instead of physically removed from the database. This function returns 'false' if there is not enough memory to perform the operation. */ #define REC_F_COMMENT_OUT 16 bool rec_db_delete (rec_db_t db, const char *type, size_t *index, rec_sex_t sex, const char *fast_string, size_t random, int flags); /* Manipulate the fields of the selected records in a database: remove them, set their values or rename them. This function takes the following arguments: DB Database where to set fields. TYPE Type of the records to act in. INDEX If not NULL, this argument is a pointer to a buffer containing pairs of Min,Max indexes, identifying intervals of records that will be deleted or commented out. The list of ends with the pair REC_Q_NOINDEX,REC_Q_NOINDEX. INDEX is mutually exclusive with any other selection option. SEX Selection expression which is evaluated for every record in the referred record set. If SEX is NULL then all records are selected. This argument is mutually exclusive with any other selection option. FAST_STRING If this argument is not NULL then it is a string which is used as a fixed pattern. Records featuring fields containing FAST_STRING as a substring in their values are selected. This argument is mutually exclusive with any other selection option. RANDOM If not 0, this argument indicates the number of random records to select for manipulation in the referred record set. This argument is mutually exclusive with any other selection option. FEX Field expression selecting the fields in the selected records which will be modified. ACTION Action to perform to the selected fields. Valid values for this argument are: REC_SET_ACT_RENAME Rename the matching fields to the string pointed by ACTION_ARG. REC_SET_ACT_SET Set the value of the matching fields to the string pointed by ACTION_ARG. REC_SET_ACT_ADD Add new fields with the names specified in the fex to the selected records. The new fields will have the string pointed by ACTION_ARG as their value. REC_SET_ACT_SETADD Set the selected fields to the value pointed by ACTION_ARG. IF the fields dont exist then create them with that value. REC_SET_ACT_DELETE Delete the selected fields. ACTION_ARG is ignored by this action. REC_SET_ACT_COMMENT Comment out the selected fields. ACTION_ARG is ignored by this action. ACTION_ARG Argument to the selected action. It is ok to pass NULL for actions which dont require an argument. FLAGS ORed value of any of the following flags: REC_F_ICASE If set the string operations in the selection expression will be case-insensitive. If FALSE any string operation will be case-sensitive. This function return s'false' if there is not enough memory to perform the operation. */ #define REC_SET_ACT_NONE 0 #define REC_SET_ACT_RENAME 1 #define REC_SET_ACT_SET 2 #define REC_SET_ACT_ADD 3 #define REC_SET_ACT_SETADD 4 #define REC_SET_ACT_DELETE 5 #define REC_SET_ACT_COMMENT 6 bool rec_db_set (rec_db_t db, const char *type, size_t *index, rec_sex_t sex, const char *fast_string, size_t random, rec_fex_t fex, int action, const char *action_arg, int flags); /* * INTEGRITY. * */ /* Check the integrity of all the record sets stored in a given database. This function returns the number of errors found. Descriptive messages about the errors are appended to ERRORS. */ int rec_int_check_db (rec_db_t db, bool check_descriptors_p, bool remote_descriptors_p, rec_buf_t errors); /* Check the integrity of a given record set. This function returns the number of errors found. Descriptive messages about the errors are appended to ERRORS. */ int rec_int_check_rset (rec_db_t db, rec_rset_t rset, bool check_descriptor_p, bool remote_descriptor_p, rec_buf_t errors); /* Check the integrity of a database provided ORIG_REC is replaced by REC. This function returns the number of errors found. Descriptive messages about the errors are appended to ERRORS. */ int rec_int_check_record (rec_db_t db, rec_rset_t rset, rec_record_t orig_rec, rec_record_t rec, rec_buf_t errors); /* Check the type of a given field. This function returns the number of errors found. Descriptive messages about the errors are appended to ERRORS. */ bool rec_int_check_field_type (rec_db_t db, rec_rset_t rset, rec_field_t field, rec_buf_t errors); /* * PARSER * * The rec parser provides functions to parse field, records and * entire record sets from a file stream or a memory buffer. */ /* Opaque data type representing a parser. */ typedef struct rec_parser_s *rec_parser_t; /**************** Creating and destroying parsers ******************/ /* Create a parser associated with a given file stream that will be used as the source for the tokens. If not enough memory, return NULL. */ rec_parser_t rec_parser_new (FILE *in, const char *source); /* Create a parser associated with a given buffer that will be used as the source for the tokens. The buffer is of specified size and doesn't have to be null-terminated. If not enough memory, return NULL. */ rec_parser_t rec_parser_new_mem (const char *buffer, size_t size, const char *source); /* Create a parser associated with a given null-terminated buffer that will be used as the source for the tokens. If not enough memory, return NULL. */ rec_parser_t rec_parser_new_str (const char *buffer, const char *source); /* Destroy a parser, freeing all used resources. Note that this call is not closing the associated file stream or the associated memory buffer. */ void rec_parser_destroy (rec_parser_t parser); /*********************** Parsing routines **************************/ /* Parse a field name and return it in FNAME. This function returns 'false' and the value in FNAME is undefined if a parse error is found. */ bool rec_parse_field_name (rec_parser_t parser, char **fname); /* Parse a field name from a string and return it. This function returns NULL if a parse error is found. */ char *rec_parse_field_name_str (const char *str); /* Parse a field and return it in FIELD. This function returns 'false' and the value in FIELD is undefined if a parse error is found. */ bool rec_parse_field (rec_parser_t parser, rec_field_t *field); /* Parse a record and return it in RECORD. This function returns 'false' and the value in RECORD is undefined if a parse error is found. */ bool rec_parse_record (rec_parser_t parser, rec_record_t *record); /* Parse a record from a string and return it. This function builds up an ephimeral parser internally in order to do the parsing. This function returns NULL if a parse error is found. */ rec_record_t rec_parse_record_str (const char *str); /* Parse a record set and return it in RSET. This function returns 'false' and the value in RSET is undefined if a parse error is found. */ bool rec_parse_rset (rec_parser_t parser, rec_rset_t *rset); /* Parse a database and return it in DB. This function returns 'false' and the value in DB is undefined if a parse error is found. */ bool rec_parse_db (rec_parser_t parser, rec_db_t *db); /************ Getting and Setting properties of parsers *************/ /* Determine whether a given parser is in an EOF (end of file) state. */ bool rec_parser_eof (rec_parser_t parser); /* Determine whether a given parser is in an error state. If the parser is in an error state then rec_parser_perror can be used to get a string describing the error. */ bool rec_parser_error (rec_parser_t parser); /* Reset the error status and EOF of a parser. */ void rec_parser_reset (rec_parser_t parser); /* Print a message with details on the last parser error. This * function produces a message on the standard error output, * describing the last error encountered while parsing. First, if FMT * is not NULL, it is printed along with any remaining argument. Then * a colon and a space are printed, and finally an error message * describing what went wrong. */ void rec_parser_perror (rec_parser_t parser, const char *fmt, ...); /* Change the position in file of the parser to a given offset from the start of the input. The line number is only used to store it in the parsed records. Return 'false' on error, e.g. when the stream used is not seekable or when the position is outside the buffer. */ bool rec_parser_seek (rec_parser_t parser, size_t line_number, size_t position); /* Return the current position in the file of the parser or -1 on error. */ long rec_parser_tell (rec_parser_t parser); /* * WRITER * * The rec writer provides functions to generate the written form of * rec objects such as fields and records. */ /* Opaque data type representing a rec writer. */ typedef struct rec_writer_s *rec_writer_t; /* Enumerated value identifying the operation modes of the writers. The operation mode defines what kind of output the writer will generate. */ enum rec_writer_mode_e { REC_WRITER_NORMAL, /* Generate output in rec format. */ REC_WRITER_VALUES, /* Generate output in values format. */ REC_WRITER_VALUES_ROW, /* Generate output in row format. */ REC_WRITER_SEXP /* Generate output in sexps. */ }; typedef enum rec_writer_mode_e rec_writer_mode_t; /**************** Creating and destroying writers ******************/ /* Create a writer associated with a given file stream. If not enough memory, return NULL. */ rec_writer_t rec_writer_new (FILE *out); /* Create a writer associated with a given string. If not enough memory, return NULL. */ rec_writer_t rec_writer_new_str (char **str, size_t *str_size); /* Destroy a writer, freeing any used resources. Note that this call is not closing the associated file stream, nor free the associated string. */ void rec_writer_destroy (rec_writer_t writer); /************ Getting and setting writer properties ***************/ /* Set whether the writer must "collapse" the output records when writing record sets. */ void rec_writer_set_collapse (rec_writer_t writer, bool value); /* Set whether the writer must skip comments when outputting record sets and records. */ void rec_writer_set_skip_comments (rec_writer_t writer, bool value); /* Set the operation mode of the writer. See the enumerated type defined above for a list of allowed modes. Note that the mode can be changed at any time. */ void rec_writer_set_mode (rec_writer_t writer, enum rec_writer_mode_e mode); /************** Getting the properties of a writer ****************/ /* Determine whether a given writer is in an EOF (end-of-file) state. */ bool rec_writer_eof (rec_writer_t writer); /********************** Writing routines **************************/ /* Write a string in the given writer. This function returns 'false' if there was an EOF condition. */ bool rec_write_string (rec_writer_t writer, const char *str); /* Write a comment in the given writer. This function returns 'false' if there was an EOF condition. */ bool rec_write_comment (rec_writer_t writer, rec_comment_t comment); /* Write a field name in the given writer. This function returns 'false' if there was an EOF condition. */ bool rec_write_field_name (rec_writer_t writer, const char *field_name); /* Write a field in the given writer. If NAME is not NULL, use it instead of the proper name of the field. This function returns 'false' if there was an EOF condition. */ bool rec_write_field (rec_writer_t writer, rec_field_t field); /* Write a record in the given writer. This function returns 'false' if there was an EOF condition. */ bool rec_write_record (rec_writer_t writer, rec_record_t record); /* Write a record set to the given writer. This function returns 'false' if there was an EOF condition. */ bool rec_write_rset (rec_writer_t writer, rec_rset_t rset); /* Write a database to the given writer. This function returns 'false' if there was an EOF condition. */ bool rec_write_db (rec_writer_t writer, rec_db_t db); /* Create a string with the written representation of a field name and return it. This function returns NULL if there is not enough memory to perform the operation. */ char *rec_write_field_name_str (const char *field_name, rec_writer_mode_t mode); /* Create a string with the written representation of a field and return it. This function returns NULL if there is not enough memory to perform the operation. */ char *rec_write_field_str (rec_field_t field, rec_writer_mode_t mode); /* Create a string with the written representation of a comment and return it. This function returns NULL if there is not enough memory to perform the operation. */ char *rec_write_comment_str (rec_comment_t comment, rec_writer_mode_t mode); /* * SELECTION EXPRESSIONS * * A selection expression is an expression that can be applied to a * record. The result of the evaluation is a boolean value indicating * whether the record matches the expression. * * The abbreviated term to refer to a selection expression is 'a sex'. * The plural form is 'sexes'. */ /* The opaque type rec_sex_t is defined above in this file as a forward declaration. */ /**************** Creating and destroying sexes ******************/ /* Create a new selection expression and return it. If there is not enough memory to create the sex, then return NULL. */ rec_sex_t rec_sex_new (bool case_insensitive); /* Destroy a sex, freeing any used resources. */ void rec_sex_destroy (rec_sex_t sex); /**************** Compiling and applying sexes ******************/ /* Compile a sex. Sexes must be compiled before being used. If there is a parse error return false. */ bool rec_sex_compile (rec_sex_t sex, const char *expr); /* Apply a sex expression to a record, setting STATUS in accordance: 'true' if the record matched the sex, 'false' otherwise. The function returns the same value that is stored in STATUS. */ bool rec_sex_eval (rec_sex_t sex, rec_record_t record, bool *status); /* Apply a sex expression and get the result as an allocated string. */ char *rec_sex_eval_str (rec_sex_t sex, rec_record_t record); /**************** Miscellaneous sexes functions ******************/ /* Print the abstract syntax tree of a compiled sex. This function is intended to be used for debugging purposes. */ void rec_sex_print_ast (rec_sex_t sex); /* * ENCRYPTION * * The following routines encrypt and decrypt fields in rec data. * * If librec was built without encryption support, all of them will do * nothing and return 'false' as if an error occurred. */ /* Prefix used in the encrypted and ASCII encoded field values, which is used to recognize encrypted values. */ #define REC_ENCRYPTED_PREFIX "encrypted-" /**************** Encryption routines *******************************/ /* Encrypt a given buffer and place the encrypted data in an allocated output buffer. This function returns 'false' if there was an error while performing the encryption, such as an incorrect password or an out-of-memory condition. */ bool rec_encrypt (char *in, size_t in_size, const char *password, char **out, size_t *out_size); /* Encrypt and ASCII-encode the value of a field used the provided password. The REC_ENCRYPTED_PREFIX is prepended to the result. This function returns 'false' if there was an error while performing the encryption, such as an incorrect password or an out-of-memory condition. */ bool rec_encrypt_field (rec_field_t field, const char *password); /* Encrypt and ASCII-encode the fields of a record marked as "confidential" in a given record set, using the provided password. The REC_ENCRYPTED_PREFIX is prepended to the result. This function returns 'false' if there was an error while performing the encryption, such as an incorrect password or an out-of-memory condition. */ bool rec_encrypt_record (rec_rset_t rset, rec_record_t record, const char *password); /**************** Decryption routines *******************************/ /* Decrypt a given buffer and place the decrypted data in an allocated output buffer. This function returns 'false' if there was an error while performing the decryption, such as an incorrect password or an out-of-memory condition. */ bool rec_decrypt (char *in, size_t in_size, const char *password, char **out, size_t *out_size); /* Decrypt the value of a field used the provided password. This function returns 'false' if there was an error while perfoming the decryption, such as an incorrect password or an out-of-memory condition. Note that this function uses the REC_ENCRYPTED_PREFIX in order to determine whether a field is already encrypted. */ bool rec_decrypt_field (rec_field_t field, const char *password); /* Decrypt the encrypted fields of a record marked as "confidential" in a given record set, using the provided password. This function returns 'false' if there was an error while performing the decryption, such as an incorrect password or an out-of-memory condition. Note that this function uses the REC_ENCRYPTED_PREFIX in order to determine whether a field is already encrypted. */ bool rec_decrypt_record (rec_rset_t rset, rec_record_t record, const char *password); /* * AGGREGATES * * The following routines and data types provide support for * "aggregate functions". Aggregate functions are applied to sets of * fields and return a single value. */ /* Data type representing an aggregate function. Aggregate functions get a record set, a record, a field name and subscripts which can be -1. The field functions must return a string, which may be empty. If an out-of-memory condition occurs then they return NULL. */ typedef char *(*rec_aggregate_t) (rec_rset_t rset, rec_record_t record, const char *field_name); /* * AGGREGATES REGISTRIES * * The following data types and functions provide support for * maintaining registries with collections of aggregate functions. * The aggregate functions are identified by a constant string that * must be unique in the registry. */ /* See the definition of rec_aggregate_reg_t above. */ /******** Creating and destroying function registries ************/ /* Create a new, empty aggregates registry. If there is not error to perform the operation then NULL is returned. */ rec_aggregate_reg_t rec_aggregate_reg_new (void); /* Destroy a functions registry, freeing any used resources. */ void rec_aggregate_reg_destroy (rec_aggregate_reg_t func_reg); /********* Registering functions and fetching them ***************/ /* Register a field function into a functions register, associating it with a given constant string. If a function associated with the given string already exists in the registry then it is substitued by the provided function. The function true if the operation was successful, and false if there was not enough memory to perform the operation. */ bool rec_aggregate_reg_add (rec_aggregate_reg_t func_reg, const char *name, rec_aggregate_t function); /* Fetch a field function from a functions registry. If no function associated with NAME is found in the registry then NULL is returned. */ rec_aggregate_t rec_aggregate_reg_get (rec_aggregate_reg_t func_get, const char *name); /* Register the standard built-in functions shipped with librec in the given aggregate register. */ void rec_aggregate_reg_add_standard (rec_aggregate_reg_t func_reg); /* Determine whether a given function name is a standard aggregate. The comparison is case-insensitive. */ bool rec_aggregate_std_p (const char *name); #endif /* !GNU_REC_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-sex-ast.c����������������������������������������������������������������������0000644�0000000�0000000�00000017064�14226563465�013217� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-sex-ast.c - SEX Abstract Syntax Trees. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <rec-sex-ast.h> #define REC_SEX_AST_MAX_CHILDREN 3 struct rec_sex_ast_node_s { enum rec_sex_ast_node_type_e type; union { int integer; double real; char *string; char *name[2]; } val; int index; bool fixed; char *fixed_val; rec_sex_ast_node_t children[REC_SEX_AST_MAX_CHILDREN]; size_t num_children; }; struct rec_sex_ast_s { rec_sex_ast_node_t top; }; rec_sex_ast_t rec_sex_ast_new () { rec_sex_ast_t new; new = malloc (sizeof (struct rec_sex_ast_s)); if (new) new->top = NULL; return new; } void rec_sex_ast_destroy (rec_sex_ast_t ast) { if (ast->top) rec_sex_ast_node_destroy (ast->top); free (ast); } rec_sex_ast_node_t rec_sex_ast_node_new (void) { rec_sex_ast_node_t new; new = malloc (sizeof(struct rec_sex_ast_node_s)); if (new) { new->type = REC_SEX_NOVAL; new->num_children = 0; new->index = -1; new->fixed = false; new->fixed_val = NULL; } return new; } void rec_sex_ast_node_destroy (rec_sex_ast_node_t node) { size_t i; /* Destroy children. */ for (i = 0; i < node->num_children; i++) rec_sex_ast_node_destroy (node->children[i]); /* Destroy values. */ if (node->type == REC_SEX_STR) { free (node->val.string); } else if (node->type == REC_SEX_NAME) { free (node->val.name[0]); free (node->val.name[1]); } free (node->fixed_val); free (node); } enum rec_sex_ast_node_type_e rec_sex_ast_node_type (rec_sex_ast_node_t node) { return node->type; } void rec_sex_ast_node_set_type (rec_sex_ast_node_t node, enum rec_sex_ast_node_type_e type) { node->type = type; } int rec_sex_ast_node_int (rec_sex_ast_node_t node) { return node->val.integer; } void rec_sex_ast_node_set_int (rec_sex_ast_node_t node, int num) { node->type = REC_SEX_INT; node->val.integer = num; } double rec_sex_ast_node_real (rec_sex_ast_node_t node) { return node->val.real; } void rec_sex_ast_node_set_real (rec_sex_ast_node_t node, double num) { node->type = REC_SEX_REAL; node->val.real = num; } char * rec_sex_ast_node_str (rec_sex_ast_node_t node) { return node->val.string; } void rec_sex_ast_node_set_str (rec_sex_ast_node_t node, char *str) { if (node->type == REC_SEX_STR) free (node->val.string); node->type = REC_SEX_STR; node->val.string = strdup (str); } const char * rec_sex_ast_node_name (rec_sex_ast_node_t node) { return node->val.name[0]; } const char * rec_sex_ast_node_subname (rec_sex_ast_node_t node) { return node->val.name[1]; } void rec_sex_ast_node_set_name (rec_sex_ast_node_t node, const char *name, const char *subname) { if (node->type == REC_SEX_NAME) { free (node->val.name[0]); free (node->val.name[1]); } node->type = REC_SEX_NAME; node->val.name[0] = strdup (name); node->val.name[1] = NULL; if (subname) node->val.name[1] = strdup (subname); } void rec_sex_ast_node_link (rec_sex_ast_node_t parent, rec_sex_ast_node_t child) { if (parent->num_children < REC_SEX_AST_MAX_CHILDREN) parent->children[parent->num_children++] = child; } rec_sex_ast_node_t rec_sex_ast_top (rec_sex_ast_t ast) { return ast->top; } void rec_sex_ast_set_top (rec_sex_ast_t ast, rec_sex_ast_node_t node) { ast->top = node; } void rec_sex_ast_print_node (rec_sex_ast_node_t node) { int i; for (i = 0; i < node->num_children; i++) rec_sex_ast_print_node (node->children[i]); printf ("------- node\n"); printf ("type: %d\n", node->type); if (node->type == REC_SEX_INT) printf("value: %d\n", node->val.integer); if (node->type == REC_SEX_NAME) printf("value: %s\n", node->val.name[0]); if (node->type == REC_SEX_STR) printf("value: %s\n", node->val.string); printf("\n"); } int rec_sex_ast_node_num_children (rec_sex_ast_node_t node) { return node->num_children; } rec_sex_ast_node_t rec_sex_ast_node_child (rec_sex_ast_node_t node, int n) { rec_sex_ast_node_t res; res = NULL; if (n < node->num_children) res = node->children[n]; return res; } void rec_sex_ast_node_reset (rec_sex_ast_node_t node) { int i; for (i = 0; i < node->num_children; i++) rec_sex_ast_node_reset (node->children[i]); node->index = 0; } void rec_sex_ast_node_fix (rec_sex_ast_node_t node, char *val) { free (node->fixed_val); node->fixed = true; node->fixed_val = strdup (val); } void rec_sex_ast_node_unfix (rec_sex_ast_node_t node) { int i; for (i = 0; i < node->num_children; i++) rec_sex_ast_node_unfix (node->children[i]); node->fixed = false; } bool rec_sex_ast_node_fixed (rec_sex_ast_node_t node) { return node->fixed; } char * rec_sex_ast_node_fixed_val (rec_sex_ast_node_t node) { return node->fixed_val; } int rec_sex_ast_node_index (rec_sex_ast_node_t node) { return node->index; } void rec_sex_ast_node_set_index (rec_sex_ast_node_t node, int index) { node->index = index; } void rec_sex_ast_print (rec_sex_ast_t ast) { rec_sex_ast_print_node (ast->top); } bool rec_sex_ast_name_p_1 (rec_sex_ast_node_t node, const char *name, size_t idx) { size_t i = 0; if (node) { if ((node->type == REC_SEX_NAME) && ((node->index == -1) || (node->index < idx)) && (strcmp (name, node->val.name[0]) == 0)) return true; for (i = 0; i < node->num_children; i++) { if (rec_sex_ast_name_p_1 (node->children[i], name, idx)) return true; } } return false; } bool rec_sex_ast_name_p (rec_sex_ast_t ast, const char *name, size_t idx) { /* Traverse the AST looking for any name node NAME[I] where I < idx. */ return rec_sex_ast_name_p_1 (ast->top, name, idx); } static bool rec_sex_ast_hash_name_p_1 (rec_sex_ast_node_t node, const char *name) { if (node) { size_t i = 0; if ((node->type == REC_SEX_OP_SHA) && (node->num_children == 1) && (node->children[0]->type == REC_SEX_NAME) && (strcmp (name, node->children[0]->val.name[0]) == 0)) return true; for (i = 0; i < node->num_children; i++) if (rec_sex_ast_hash_name_p_1 (node->children[i], name)) return true; } return false; } bool rec_sex_ast_hash_name_p (rec_sex_ast_t ast, const char *name) { /* Traverse the AST looking for any name node NAME whose father is a REC_SEX_OP_SHA. */ return rec_sex_ast_hash_name_p_1 (ast->top, name); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-sex-tab.c����������������������������������������������������������������������0000644�0000000�0000000�00000157655�14226576605�013211� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 3.6.2. */ /* Bison implementation for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* C LALR(1) parser skeleton written by Richard Stallman, by simplifying the original so-called "semantic" parser. */ /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ /* All symbols defined below should begin with yy or YY, to avoid infringing on user name space. This should be done even for local variables, as they might otherwise be expanded by user macros. There are some unavoidable exceptions within include files to define necessary library symbols; they are noted "INFRINGES ON USER NAME SPACE" below. */ /* Identify Bison output. */ #define YYBISON 1 /* Bison version. */ #define YYBISON_VERSION "3.6.2" /* Skeleton name. */ #define YYSKELETON_NAME "yacc.c" /* Pure parsers. */ #define YYPURE 1 /* Push parsers. */ #define YYPUSH 0 /* Pull parsers. */ #define YYPULL 1 /* Substitute the variable and function names. */ #define yyparse sexparse #define yylex sexlex #define yyerror sexerror #define yydebug sexdebug #define yynerrs sexnerrs /* First part of user prologue. */ #line 25 "../../src/rec-sex-tab.y" #include <config.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <regex.h> #include <rec-sex-ast.h> #include <rec-sex-parser.h> #include "rec-sex-tab.h" /* #include "rec-sex-lex.h" */ void sexerror (rec_sex_parser_t context, const char *err) { /* Do nothing. */ } #define scanner (rec_sex_parser_scanner (sex_parser)) #define CREATE_NODE_OP1(TYPE,RES,OP) \ do \ { \ /* Create the node. */ \ (RES) = rec_sex_ast_node_new (); \ rec_sex_ast_node_set_type ((RES), (TYPE)); \ \ /* Set children. */ \ rec_sex_ast_node_link ((RES), (OP)); \ } \ while (0) #define CREATE_NODE_OP2(TYPE, RES, OP1, OP2) \ do \ { \ /* Create the node. */ \ (RES) = rec_sex_ast_node_new (); \ rec_sex_ast_node_set_type ((RES), (TYPE)); \ \ /* Set children. */ \ rec_sex_ast_node_link ((RES), (OP1)); \ rec_sex_ast_node_link ((RES), (OP2)); \ } \ while (0) #define CREATE_NODE_OP3(TYPE, RES, OP1, OP2, OP3) \ do \ { \ /* Create the node. */ \ (RES) = rec_sex_ast_node_new (); \ rec_sex_ast_node_set_type ((RES), (TYPE)); \ \ /* Set children. */ \ rec_sex_ast_node_link ((RES), (OP1)); \ rec_sex_ast_node_link ((RES), (OP2)); \ rec_sex_ast_node_link ((RES), (OP3)); \ } \ while (0) #line 137 "rec-sex-tab.c" # ifndef YY_CAST # ifdef __cplusplus # define YY_CAST(Type, Val) static_cast<Type> (Val) # define YY_REINTERPRET_CAST(Type, Val) reinterpret_cast<Type> (Val) # else # define YY_CAST(Type, Val) ((Type) (Val)) # define YY_REINTERPRET_CAST(Type, Val) ((Type) (Val)) # endif # endif # ifndef YY_NULLPTR # if defined __cplusplus # if 201103L <= __cplusplus # define YY_NULLPTR nullptr # else # define YY_NULLPTR 0 # endif # else # define YY_NULLPTR ((void*)0) # endif # endif /* Use api.header.include to #include this header instead of duplicating it here. */ #ifndef YY_SEX_REC_SEX_TAB_H_INCLUDED # define YY_SEX_REC_SEX_TAB_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int sexdebug; #endif /* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { YYEMPTY = -2, YYEOF = 0, /* "end of file" */ YYerror = 256, /* error */ YYUNDEF = 257, /* "invalid token" */ REC_SEX_TOK_INT = 258, /* REC_SEX_TOK_INT */ REC_SEX_TOK_REAL = 259, /* REC_SEX_TOK_REAL */ REC_SEX_TOK_STR = 260, /* REC_SEX_TOK_STR */ REC_SEX_TOK_NAM = 261, /* REC_SEX_TOK_NAM */ REC_SEX_TOK_COLON = 262, /* REC_SEX_TOK_COLON */ REC_SEX_TOK_QM = 263, /* REC_SEX_TOK_QM */ REC_SEX_TOK_IMPLIES = 264, /* REC_SEX_TOK_IMPLIES */ REC_SEX_TOK_AND = 265, /* REC_SEX_TOK_AND */ REC_SEX_TOK_OR = 266, /* REC_SEX_TOK_OR */ REC_SEX_TOK_EQL = 267, /* REC_SEX_TOK_EQL */ REC_SEX_TOK_NEQ = 268, /* REC_SEX_TOK_NEQ */ REC_SEX_TOK_LT = 269, /* REC_SEX_TOK_LT */ REC_SEX_TOK_GT = 270, /* REC_SEX_TOK_GT */ REC_SEX_TOK_LTE = 271, /* REC_SEX_TOK_LTE */ REC_SEX_TOK_GTE = 272, /* REC_SEX_TOK_GTE */ REC_SEX_TOK_SAMETIME = 273, /* REC_SEX_TOK_SAMETIME */ REC_SEX_TOK_AFTER = 274, /* REC_SEX_TOK_AFTER */ REC_SEX_TOK_BEFORE = 275, /* REC_SEX_TOK_BEFORE */ REC_SEX_TOK_SUB = 276, /* REC_SEX_TOK_SUB */ REC_SEX_TOK_ADD = 277, /* REC_SEX_TOK_ADD */ REC_SEX_TOK_MUL = 278, /* REC_SEX_TOK_MUL */ REC_SEX_TOK_DIV = 279, /* REC_SEX_TOK_DIV */ REC_SEX_TOK_MOD = 280, /* REC_SEX_TOK_MOD */ REC_SEX_TOK_MAT = 281, /* REC_SEX_TOK_MAT */ REC_SEX_TOK_AMP = 282, /* REC_SEX_TOK_AMP */ REC_SEX_TOK_NEG = 283, /* REC_SEX_TOK_NEG */ REC_SEX_TOK_MIN = 284, /* REC_SEX_TOK_MIN */ REC_SEX_TOK_NOT = 285, /* REC_SEX_TOK_NOT */ REC_SEX_TOK_BP = 286, /* REC_SEX_TOK_BP */ REC_SEX_TOK_EP = 287, /* REC_SEX_TOK_EP */ REC_SEX_TOK_ERR = 288, /* REC_SEX_TOK_ERR */ REC_SEX_TOK_SHARP = 289 /* REC_SEX_TOK_SHARP */ }; typedef enum yytokentype yytoken_kind_t; #endif /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { #line 86 "../../src/rec-sex-tab.y" rec_sex_ast_node_t node; rec_sex_ast_t ast; #line 226 "rec-sex-tab.c" }; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif int sexparse (rec_sex_parser_t sex_parser); #endif /* !YY_SEX_REC_SEX_TAB_H_INCLUDED */ /* Symbol kind. */ enum yysymbol_kind_t { YYSYMBOL_YYEMPTY = -2, YYSYMBOL_YYEOF = 0, /* "end of file" */ YYSYMBOL_YYerror = 1, /* error */ YYSYMBOL_YYUNDEF = 2, /* "invalid token" */ YYSYMBOL_REC_SEX_TOK_INT = 3, /* REC_SEX_TOK_INT */ YYSYMBOL_REC_SEX_TOK_REAL = 4, /* REC_SEX_TOK_REAL */ YYSYMBOL_REC_SEX_TOK_STR = 5, /* REC_SEX_TOK_STR */ YYSYMBOL_REC_SEX_TOK_NAM = 6, /* REC_SEX_TOK_NAM */ YYSYMBOL_REC_SEX_TOK_COLON = 7, /* REC_SEX_TOK_COLON */ YYSYMBOL_REC_SEX_TOK_QM = 8, /* REC_SEX_TOK_QM */ YYSYMBOL_REC_SEX_TOK_IMPLIES = 9, /* REC_SEX_TOK_IMPLIES */ YYSYMBOL_REC_SEX_TOK_AND = 10, /* REC_SEX_TOK_AND */ YYSYMBOL_REC_SEX_TOK_OR = 11, /* REC_SEX_TOK_OR */ YYSYMBOL_REC_SEX_TOK_EQL = 12, /* REC_SEX_TOK_EQL */ YYSYMBOL_REC_SEX_TOK_NEQ = 13, /* REC_SEX_TOK_NEQ */ YYSYMBOL_REC_SEX_TOK_LT = 14, /* REC_SEX_TOK_LT */ YYSYMBOL_REC_SEX_TOK_GT = 15, /* REC_SEX_TOK_GT */ YYSYMBOL_REC_SEX_TOK_LTE = 16, /* REC_SEX_TOK_LTE */ YYSYMBOL_REC_SEX_TOK_GTE = 17, /* REC_SEX_TOK_GTE */ YYSYMBOL_REC_SEX_TOK_SAMETIME = 18, /* REC_SEX_TOK_SAMETIME */ YYSYMBOL_REC_SEX_TOK_AFTER = 19, /* REC_SEX_TOK_AFTER */ YYSYMBOL_REC_SEX_TOK_BEFORE = 20, /* REC_SEX_TOK_BEFORE */ YYSYMBOL_REC_SEX_TOK_SUB = 21, /* REC_SEX_TOK_SUB */ YYSYMBOL_REC_SEX_TOK_ADD = 22, /* REC_SEX_TOK_ADD */ YYSYMBOL_REC_SEX_TOK_MUL = 23, /* REC_SEX_TOK_MUL */ YYSYMBOL_REC_SEX_TOK_DIV = 24, /* REC_SEX_TOK_DIV */ YYSYMBOL_REC_SEX_TOK_MOD = 25, /* REC_SEX_TOK_MOD */ YYSYMBOL_REC_SEX_TOK_MAT = 26, /* REC_SEX_TOK_MAT */ YYSYMBOL_REC_SEX_TOK_AMP = 27, /* REC_SEX_TOK_AMP */ YYSYMBOL_REC_SEX_TOK_NEG = 28, /* REC_SEX_TOK_NEG */ YYSYMBOL_REC_SEX_TOK_MIN = 29, /* REC_SEX_TOK_MIN */ YYSYMBOL_REC_SEX_TOK_NOT = 30, /* REC_SEX_TOK_NOT */ YYSYMBOL_REC_SEX_TOK_BP = 31, /* REC_SEX_TOK_BP */ YYSYMBOL_REC_SEX_TOK_EP = 32, /* REC_SEX_TOK_EP */ YYSYMBOL_REC_SEX_TOK_ERR = 33, /* REC_SEX_TOK_ERR */ YYSYMBOL_REC_SEX_TOK_SHARP = 34, /* REC_SEX_TOK_SHARP */ YYSYMBOL_YYACCEPT = 35, /* $accept */ YYSYMBOL_input = 36, /* input */ YYSYMBOL_exp = 37 /* exp */ }; typedef enum yysymbol_kind_t yysymbol_kind_t; #ifdef short # undef short #endif /* On compilers that do not define __PTRDIFF_MAX__ etc., make sure <limits.h> and (if available) <stdint.h> are included so that the code can choose integer types of a good width. */ #ifndef __PTRDIFF_MAX__ # include <limits.h> /* INFRINGES ON USER NAME SPACE */ # if defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include <stdint.h> /* INFRINGES ON USER NAME SPACE */ # define YY_STDINT_H # endif #endif /* Narrow types that promote to a signed type and that can represent a signed or unsigned integer of at least N bits. In tables they can save space and decrease cache pressure. Promoting to a signed type helps avoid bugs in integer arithmetic. */ #ifdef __INT_LEAST8_MAX__ typedef __INT_LEAST8_TYPE__ yytype_int8; #elif defined YY_STDINT_H typedef int_least8_t yytype_int8; #else typedef signed char yytype_int8; #endif #ifdef __INT_LEAST16_MAX__ typedef __INT_LEAST16_TYPE__ yytype_int16; #elif defined YY_STDINT_H typedef int_least16_t yytype_int16; #else typedef short yytype_int16; #endif #if defined __UINT_LEAST8_MAX__ && __UINT_LEAST8_MAX__ <= __INT_MAX__ typedef __UINT_LEAST8_TYPE__ yytype_uint8; #elif (!defined __UINT_LEAST8_MAX__ && defined YY_STDINT_H \ && UINT_LEAST8_MAX <= INT_MAX) typedef uint_least8_t yytype_uint8; #elif !defined __UINT_LEAST8_MAX__ && UCHAR_MAX <= INT_MAX typedef unsigned char yytype_uint8; #else typedef short yytype_uint8; #endif #if defined __UINT_LEAST16_MAX__ && __UINT_LEAST16_MAX__ <= __INT_MAX__ typedef __UINT_LEAST16_TYPE__ yytype_uint16; #elif (!defined __UINT_LEAST16_MAX__ && defined YY_STDINT_H \ && UINT_LEAST16_MAX <= INT_MAX) typedef uint_least16_t yytype_uint16; #elif !defined __UINT_LEAST16_MAX__ && USHRT_MAX <= INT_MAX typedef unsigned short yytype_uint16; #else typedef int yytype_uint16; #endif #ifndef YYPTRDIFF_T # if defined __PTRDIFF_TYPE__ && defined __PTRDIFF_MAX__ # define YYPTRDIFF_T __PTRDIFF_TYPE__ # define YYPTRDIFF_MAXIMUM __PTRDIFF_MAX__ # elif defined PTRDIFF_MAX # ifndef ptrdiff_t # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # endif # define YYPTRDIFF_T ptrdiff_t # define YYPTRDIFF_MAXIMUM PTRDIFF_MAX # else # define YYPTRDIFF_T long # define YYPTRDIFF_MAXIMUM LONG_MAX # endif #endif #ifndef YYSIZE_T # ifdef __SIZE_TYPE__ # define YYSIZE_T __SIZE_TYPE__ # elif defined size_t # define YYSIZE_T size_t # elif defined __STDC_VERSION__ && 199901 <= __STDC_VERSION__ # include <stddef.h> /* INFRINGES ON USER NAME SPACE */ # define YYSIZE_T size_t # else # define YYSIZE_T unsigned # endif #endif #define YYSIZE_MAXIMUM \ YY_CAST (YYPTRDIFF_T, \ (YYPTRDIFF_MAXIMUM < YY_CAST (YYSIZE_T, -1) \ ? YYPTRDIFF_MAXIMUM \ : YY_CAST (YYSIZE_T, -1))) #define YYSIZEOF(X) YY_CAST (YYPTRDIFF_T, sizeof (X)) /* Stored state numbers (used for stacks). */ typedef yytype_int8 yy_state_t; /* State numbers in computations. */ typedef int yy_state_fast_t; #ifndef YY_ # if defined YYENABLE_NLS && YYENABLE_NLS # if ENABLE_NLS # include <libintl.h> /* INFRINGES ON USER NAME SPACE */ # define YY_(Msgid) dgettext ("bison-runtime", Msgid) # endif # endif # ifndef YY_ # define YY_(Msgid) Msgid # endif #endif #ifndef YY_ATTRIBUTE_PURE # if defined __GNUC__ && 2 < __GNUC__ + (96 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_PURE __attribute__ ((__pure__)) # else # define YY_ATTRIBUTE_PURE # endif #endif #ifndef YY_ATTRIBUTE_UNUSED # if defined __GNUC__ && 2 < __GNUC__ + (7 <= __GNUC_MINOR__) # define YY_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) # else # define YY_ATTRIBUTE_UNUSED # endif #endif /* Suppress unused-variable warnings by "using" E. */ #if ! defined lint || defined __GNUC__ # define YYUSE(E) ((void) (E)) #else # define YYUSE(E) /* empty */ #endif #if defined __GNUC__ && ! defined __ICC && 407 <= __GNUC__ * 100 + __GNUC_MINOR__ /* Suppress an incorrect diagnostic about yylval being uninitialized. */ # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuninitialized\"") \ _Pragma ("GCC diagnostic ignored \"-Wmaybe-uninitialized\"") # define YY_IGNORE_MAYBE_UNINITIALIZED_END \ _Pragma ("GCC diagnostic pop") #else # define YY_INITIAL_VALUE(Value) Value #endif #ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN # define YY_IGNORE_MAYBE_UNINITIALIZED_END #endif #ifndef YY_INITIAL_VALUE # define YY_INITIAL_VALUE(Value) /* Nothing. */ #endif #if defined __cplusplus && defined __GNUC__ && ! defined __ICC && 6 <= __GNUC__ # define YY_IGNORE_USELESS_CAST_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wuseless-cast\"") # define YY_IGNORE_USELESS_CAST_END \ _Pragma ("GCC diagnostic pop") #endif #ifndef YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_BEGIN # define YY_IGNORE_USELESS_CAST_END #endif #define YY_ASSERT(E) ((void) (0 && (E))) #if !defined yyoverflow /* The parser invokes alloca or malloc; define the necessary symbols. */ # ifdef YYSTACK_USE_ALLOCA # if YYSTACK_USE_ALLOCA # ifdef __GNUC__ # define YYSTACK_ALLOC __builtin_alloca # elif defined __BUILTIN_VA_ARG_INCR # include <alloca.h> /* INFRINGES ON USER NAME SPACE */ # elif defined _AIX # define YYSTACK_ALLOC __alloca # elif defined _MSC_VER # include <malloc.h> /* INFRINGES ON USER NAME SPACE */ # define alloca _alloca # else # define YYSTACK_ALLOC alloca # if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ /* Use EXIT_SUCCESS as a witness for stdlib.h. */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # endif # endif # endif # ifdef YYSTACK_ALLOC /* Pacify GCC's 'empty if-body' warning. */ # define YYSTACK_FREE(Ptr) do { /* empty */; } while (0) # ifndef YYSTACK_ALLOC_MAXIMUM /* The OS might guarantee only one guard page at the bottom of the stack, and a page size can be as small as 4096 bytes. So we cannot safely invoke alloca (N) if N exceeds 4096. Use a slightly smaller number to allow for a few compiler-allocated temporary stack slots. */ # define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */ # endif # else # define YYSTACK_ALLOC YYMALLOC # define YYSTACK_FREE YYFREE # ifndef YYSTACK_ALLOC_MAXIMUM # define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM # endif # if (defined __cplusplus && ! defined EXIT_SUCCESS \ && ! ((defined YYMALLOC || defined malloc) \ && (defined YYFREE || defined free))) # include <stdlib.h> /* INFRINGES ON USER NAME SPACE */ # ifndef EXIT_SUCCESS # define EXIT_SUCCESS 0 # endif # endif # ifndef YYMALLOC # define YYMALLOC malloc # if ! defined malloc && ! defined EXIT_SUCCESS void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */ # endif # endif # ifndef YYFREE # define YYFREE free # if ! defined free && ! defined EXIT_SUCCESS void free (void *); /* INFRINGES ON USER NAME SPACE */ # endif # endif # endif #endif /* !defined yyoverflow */ #if (! defined yyoverflow \ && (! defined __cplusplus \ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL))) /* A type that is properly aligned for any stack member. */ union yyalloc { yy_state_t yyss_alloc; YYSTYPE yyvs_alloc; }; /* The size of the maximum gap between one aligned stack and the next. */ # define YYSTACK_GAP_MAXIMUM (YYSIZEOF (union yyalloc) - 1) /* The size of an array large to enough to hold all stacks, each with N elements. */ # define YYSTACK_BYTES(N) \ ((N) * (YYSIZEOF (yy_state_t) + YYSIZEOF (YYSTYPE)) \ + YYSTACK_GAP_MAXIMUM) # define YYCOPY_NEEDED 1 /* Relocate STACK from its old location to the new one. The local variables YYSIZE and YYSTACKSIZE give the old and new number of elements in the stack, and YYPTR gives the new location of the stack. Advance YYPTR to a properly aligned location for the next stack. */ # define YYSTACK_RELOCATE(Stack_alloc, Stack) \ do \ { \ YYPTRDIFF_T yynewbytes; \ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \ Stack = &yyptr->Stack_alloc; \ yynewbytes = yystacksize * YYSIZEOF (*Stack) + YYSTACK_GAP_MAXIMUM; \ yyptr += yynewbytes / YYSIZEOF (*yyptr); \ } \ while (0) #endif #if defined YYCOPY_NEEDED && YYCOPY_NEEDED /* Copy COUNT objects from SRC to DST. The source and destination do not overlap. */ # ifndef YYCOPY # if defined __GNUC__ && 1 < __GNUC__ # define YYCOPY(Dst, Src, Count) \ __builtin_memcpy (Dst, Src, YY_CAST (YYSIZE_T, (Count)) * sizeof (*(Src))) # else # define YYCOPY(Dst, Src, Count) \ do \ { \ YYPTRDIFF_T yyi; \ for (yyi = 0; yyi < (Count); yyi++) \ (Dst)[yyi] = (Src)[yyi]; \ } \ while (0) # endif # endif #endif /* !YYCOPY_NEEDED */ /* YYFINAL -- State number of the termination state. */ #define YYFINAL 13 /* YYLAST -- Last index in YYTABLE. */ #define YYLAST 157 /* YYNTOKENS -- Number of terminals. */ #define YYNTOKENS 35 /* YYNNTS -- Number of nonterminals. */ #define YYNNTS 3 /* YYNRULES -- Number of rules. */ #define YYNRULES 29 /* YYNSTATES -- Number of states. */ #define YYNSTATES 57 #define YYMAXUTOK 289 /* YYTRANSLATE(TOKEN-NUM) -- Symbol number corresponding to TOKEN-NUM as returned by yylex, with out-of-bounds checking. */ #define YYTRANSLATE(YYX) \ (0 <= (YYX) && (YYX) <= YYMAXUTOK \ ? YY_CAST (yysymbol_kind_t, yytranslate[YYX]) \ : YYSYMBOL_YYUNDEF) /* YYTRANSLATE[TOKEN-NUM] -- Symbol number corresponding to TOKEN-NUM as returned by yylex. */ static const yytype_int8 yytranslate[] = { 0, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 2, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 34 }; #if YYDEBUG /* YYRLINEYYN -- Source line where rule number YYN was defined. */ static const yytype_uint8 yyrline[] = { 0, 118, 118, 128, 129, 130, 131, 132, 134, 135, 136, 148, 149, 150, 151, 152, 153, 154, 155, 156, 157, 158, 159, 160, 161, 162, 163, 164, 165, 166 }; #endif /** Accessing symbol of state STATE. */ #define YY_ACCESSING_SYMBOL(State) YY_CAST (yysymbol_kind_t, yystos[State]) #if YYDEBUG || 0 /* The user-facing name of the symbol whose (internal) number is YYSYMBOL. No bounds checking. */ static const char *yysymbol_name (yysymbol_kind_t yysymbol) YY_ATTRIBUTE_UNUSED; /* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM. First, the terminals, then, starting at YYNTOKENS, nonterminals. */ static const char *const yytname[] = { "\"end of file\"", "error", "\"invalid token\"", "REC_SEX_TOK_INT", "REC_SEX_TOK_REAL", "REC_SEX_TOK_STR", "REC_SEX_TOK_NAM", "REC_SEX_TOK_COLON", "REC_SEX_TOK_QM", "REC_SEX_TOK_IMPLIES", "REC_SEX_TOK_AND", "REC_SEX_TOK_OR", "REC_SEX_TOK_EQL", "REC_SEX_TOK_NEQ", "REC_SEX_TOK_LT", "REC_SEX_TOK_GT", "REC_SEX_TOK_LTE", "REC_SEX_TOK_GTE", "REC_SEX_TOK_SAMETIME", "REC_SEX_TOK_AFTER", "REC_SEX_TOK_BEFORE", "REC_SEX_TOK_SUB", "REC_SEX_TOK_ADD", "REC_SEX_TOK_MUL", "REC_SEX_TOK_DIV", "REC_SEX_TOK_MOD", "REC_SEX_TOK_MAT", "REC_SEX_TOK_AMP", "REC_SEX_TOK_NEG", "REC_SEX_TOK_MIN", "REC_SEX_TOK_NOT", "REC_SEX_TOK_BP", "REC_SEX_TOK_EP", "REC_SEX_TOK_ERR", "REC_SEX_TOK_SHARP", "$accept", "input", "exp", YY_NULLPTR }; static const char * yysymbol_name (yysymbol_kind_t yysymbol) { return yytname[yysymbol]; } #endif #ifdef YYPRINT /* YYTOKNUM[NUM] -- (External) token number corresponding to the (internal) symbol number NUM (which must be that of a token). */ static const yytype_int16 yytoknum[] = { 0, 256, 257, 258, 259, 260, 261, 262, 263, 264, 265, 266, 267, 268, 269, 270, 271, 272, 273, 274, 275, 276, 277, 278, 279, 280, 281, 282, 283, 284, 285, 286, 287, 288, 289 }; #endif #define YYPACT_NINF (-20) #define yypact_value_is_default(Yyn) \ ((Yyn) == YYPACT_NINF) #define YYTABLE_NINF (-1) #define yytable_value_is_error(Yyn) \ 0 /* YYPACTSTATE-NUM -- Index in YYTABLE of the portion describing STATE-NUM. */ static const yytype_int16 yypact[] = { -1, -20, -20, -20, -20, -1, -1, 0, 7, 89, -20, 43, -20, -20, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -20, 69, 108, 22, 22, 118, 118, 118, 118, 118, 118, 125, 125, 125, 130, 130, -19, -19, -19, -19, -20, -1, 89 }; /* YYDEFACTSTATE-NUM -- Default reduction number in state STATE-NUM. Performed when YYTABLE does not specify something else to do. Zero means the default is an error. */ static const yytype_int8 yydefact[] = { 0, 3, 4, 5, 6, 0, 0, 0, 0, 2, 24, 0, 28, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 29, 0, 23, 25, 26, 8, 9, 17, 16, 19, 18, 22, 20, 21, 12, 11, 13, 14, 15, 10, 27, 0, 7 }; /* YYPGOTONTERM-NUM. */ static const yytype_int8 yypgoto[] = { -20, -20, -5 }; /* YYDEFGOTONTERM-NUM. */ static const yytype_int8 yydefgoto[] = { -1, 8, 9 }; /* YYTABLEYYPACT[STATE-NUM] -- What to do in state STATE-NUM. If positive, shift that token. If negative, reduce the rule whose number is the opposite. If YYTABLE_NINF, syntax error. */ static const yytype_int8 yytable[] = { 10, 11, 1, 2, 3, 4, 12, 13, 33, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, 52, 53, 54, 5, 6, 0, 0, 7, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 56, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 0, 0, 0, 0, 34, 55, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 27, 28, 29, 30, 31, 32, 33, 29, 30, 31, 32, 33 }; static const yytype_int8 yycheck[] = { 5, 6, 3, 4, 5, 6, 6, 0, 27, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 28, 29, 30, 31, 32, 33, 30, 31, -1, -1, 34, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 55, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, -1, -1, -1, -1, 32, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 21, 22, 23, 24, 25, 26, 27, 23, 24, 25, 26, 27 }; /* YYSTOSSTATE-NUM -- The (internal number of the) accessing symbol of state STATE-NUM. */ static const yytype_int8 yystos[] = { 0, 3, 4, 5, 6, 30, 31, 34, 36, 37, 37, 37, 6, 0, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 32, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 7, 37 }; /* YYR1YYN -- Symbol number of symbol that rule YYN derives. */ static const yytype_int8 yyr1[] = { 0, 35, 36, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37, 37 }; /* YYR2YYN -- Number of symbols on the right hand side of rule YYN. */ static const yytype_int8 yyr2[] = { 0, 2, 1, 1, 1, 1, 1, 5, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 2, 3, 3, 3, 2, 3 }; enum { YYENOMEM = -2 }; #define yyerrok (yyerrstatus = 0) #define yyclearin (yychar = YYEMPTY) #define YYACCEPT goto yyacceptlab #define YYABORT goto yyabortlab #define YYERROR goto yyerrorlab #define YYRECOVERING() (!!yyerrstatus) #define YYBACKUP(Token, Value) \ do \ if (yychar == YYEMPTY) \ { \ yychar = (Token); \ yylval = (Value); \ YYPOPSTACK (yylen); \ yystate = *yyssp; \ goto yybackup; \ } \ else \ { \ yyerror (sex_parser, YY_("syntax error: cannot back up")); \ YYERROR; \ } \ while (0) /* Backward compatibility with an undocumented macro. Use YYerror or YYUNDEF. */ #define YYERRCODE YYUNDEF /* Enable debugging if requested. */ #if YYDEBUG # ifndef YYFPRINTF # include <stdio.h> /* INFRINGES ON USER NAME SPACE */ # define YYFPRINTF fprintf # endif # define YYDPRINTF(Args) \ do { \ if (yydebug) \ YYFPRINTF Args; \ } while (0) /* This macro is provided for backward compatibility. */ # ifndef YY_LOCATION_PRINT # define YY_LOCATION_PRINT(File, Loc) ((void) 0) # endif # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) \ do { \ if (yydebug) \ { \ YYFPRINTF (stderr, "%s ", Title); \ yy_symbol_print (stderr, \ Kind, Value, sex_parser); \ YYFPRINTF (stderr, "\n"); \ } \ } while (0) /*-----------------------------------. | Print this symbol's value on YYO. | `-----------------------------------*/ static void yy_symbol_value_print (FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, rec_sex_parser_t sex_parser) { FILE *yyoutput = yyo; YYUSE (yyoutput); YYUSE (sex_parser); if (!yyvaluep) return; # ifdef YYPRINT if (yykind < YYNTOKENS) YYPRINT (yyo, yytoknum[yykind], *yyvaluep); # endif YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*---------------------------. | Print this symbol on YYO. | `---------------------------*/ static void yy_symbol_print (FILE *yyo, yysymbol_kind_t yykind, YYSTYPE const * const yyvaluep, rec_sex_parser_t sex_parser) { YYFPRINTF (yyo, "%s %s (", yykind < YYNTOKENS ? "token" : "nterm", yysymbol_name (yykind)); yy_symbol_value_print (yyo, yykind, yyvaluep, sex_parser); YYFPRINTF (yyo, ")"); } /*------------------------------------------------------------------. | yy_stack_print -- Print the state stack from its BOTTOM up to its | | TOP (included). | `------------------------------------------------------------------*/ static void yy_stack_print (yy_state_t *yybottom, yy_state_t *yytop) { YYFPRINTF (stderr, "Stack now"); for (; yybottom <= yytop; yybottom++) { int yybot = *yybottom; YYFPRINTF (stderr, " %d", yybot); } YYFPRINTF (stderr, "\n"); } # define YY_STACK_PRINT(Bottom, Top) \ do { \ if (yydebug) \ yy_stack_print ((Bottom), (Top)); \ } while (0) /*------------------------------------------------. | Report that the YYRULE is going to be reduced. | `------------------------------------------------*/ static void yy_reduce_print (yy_state_t *yyssp, YYSTYPE *yyvsp, int yyrule, rec_sex_parser_t sex_parser) { int yylno = yyrline[yyrule]; int yynrhs = yyr2[yyrule]; int yyi; YYFPRINTF (stderr, "Reducing stack by rule %d (line %d):\n", yyrule - 1, yylno); /* The symbols being reduced. */ for (yyi = 0; yyi < yynrhs; yyi++) { YYFPRINTF (stderr, " $%d = ", yyi + 1); yy_symbol_print (stderr, YY_ACCESSING_SYMBOL (+yyssp[yyi + 1 - yynrhs]), &yyvsp[(yyi + 1) - (yynrhs)], sex_parser); YYFPRINTF (stderr, "\n"); } } # define YY_REDUCE_PRINT(Rule) \ do { \ if (yydebug) \ yy_reduce_print (yyssp, yyvsp, Rule, sex_parser); \ } while (0) /* Nonzero means print parse trace. It is left uninitialized so that multiple parsers can coexist. */ int yydebug; #else /* !YYDEBUG */ # define YYDPRINTF(Args) ((void) 0) # define YY_SYMBOL_PRINT(Title, Kind, Value, Location) # define YY_STACK_PRINT(Bottom, Top) # define YY_REDUCE_PRINT(Rule) #endif /* !YYDEBUG */ /* YYINITDEPTH -- initial size of the parser's stacks. */ #ifndef YYINITDEPTH # define YYINITDEPTH 200 #endif /* YYMAXDEPTH -- maximum size the stacks can grow to (effective only if the built-in stack extension method is used). Do not make this value too large; the results are undefined if YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH) evaluated with infinite-precision integer arithmetic. */ #ifndef YYMAXDEPTH # define YYMAXDEPTH 10000 #endif /*-----------------------------------------------. | Release the memory associated to this symbol. | `-----------------------------------------------*/ static void yydestruct (const char *yymsg, yysymbol_kind_t yykind, YYSTYPE *yyvaluep, rec_sex_parser_t sex_parser) { YYUSE (yyvaluep); YYUSE (sex_parser); if (!yymsg) yymsg = "Deleting"; YY_SYMBOL_PRINT (yymsg, yykind, yyvaluep, yylocationp); YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN YYUSE (yykind); YY_IGNORE_MAYBE_UNINITIALIZED_END } /*----------. | yyparse. | `----------*/ int yyparse (rec_sex_parser_t sex_parser) { /* The lookahead symbol. */ int yychar; /* The semantic value of the lookahead symbol. */ /* Default value used for initialization, for pacifying older GCCs or non-GCC compilers. */ YY_INITIAL_VALUE (static YYSTYPE yyval_default;) YYSTYPE yylval YY_INITIAL_VALUE (= yyval_default); /* Number of syntax errors so far. */ int yynerrs; yy_state_fast_t yystate; /* Number of tokens to shift before error messages enabled. */ int yyerrstatus; /* The stacks and their tools: 'yyss': related to states. 'yyvs': related to semantic values. Refer to the stacks through separate pointers, to allow yyoverflow to reallocate them elsewhere. */ /* Their size. */ YYPTRDIFF_T yystacksize; /* The state stack. */ yy_state_t yyssa[YYINITDEPTH]; yy_state_t *yyss; yy_state_t *yyssp; /* The semantic value stack. */ YYSTYPE yyvsa[YYINITDEPTH]; YYSTYPE *yyvs; YYSTYPE *yyvsp; int yyn; /* The return value of yyparse. */ int yyresult; /* Lookahead token as an internal (translated) token number. */ yysymbol_kind_t yytoken = YYSYMBOL_YYEMPTY; /* The variables used to return semantic value and location from the action routines. */ YYSTYPE yyval; #define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N)) /* The number of symbols on the RHS of the reduced rule. Keep to zero when no symbol should be popped. */ int yylen = 0; yynerrs = 0; yystate = 0; yyerrstatus = 0; yystacksize = YYINITDEPTH; yyssp = yyss = yyssa; yyvsp = yyvs = yyvsa; YYDPRINTF ((stderr, "Starting parse\n")); yychar = YYEMPTY; /* Cause a token to be read. */ goto yysetstate; /*------------------------------------------------------------. | yynewstate -- push a new state, which is found in yystate. | `------------------------------------------------------------*/ yynewstate: /* In all cases, when you get here, the value and location stacks have just been pushed. So pushing a state here evens the stacks. */ yyssp++; /*--------------------------------------------------------------------. | yysetstate -- set current state (the top of the stack) to yystate. | `--------------------------------------------------------------------*/ yysetstate: YYDPRINTF ((stderr, "Entering state %d\n", yystate)); YY_ASSERT (0 <= yystate && yystate < YYNSTATES); YY_IGNORE_USELESS_CAST_BEGIN *yyssp = YY_CAST (yy_state_t, yystate); YY_IGNORE_USELESS_CAST_END YY_STACK_PRINT (yyss, yyssp); if (yyss + yystacksize - 1 <= yyssp) #if !defined yyoverflow && !defined YYSTACK_RELOCATE goto yyexhaustedlab; #else { /* Get the current used size of the three stacks, in elements. */ YYPTRDIFF_T yysize = yyssp - yyss + 1; # if defined yyoverflow { /* Give user a chance to reallocate the stack. Use copies of these so that the &'s don't force the real ones into memory. */ yy_state_t *yyss1 = yyss; YYSTYPE *yyvs1 = yyvs; /* Each stack pointer address is followed by the size of the data in use in that stack, in bytes. This used to be a conditional around just the two extra args, but that might be undefined if yyoverflow is a macro. */ yyoverflow (YY_("memory exhausted"), &yyss1, yysize * YYSIZEOF (*yyssp), &yyvs1, yysize * YYSIZEOF (*yyvsp), &yystacksize); yyss = yyss1; yyvs = yyvs1; } # else /* defined YYSTACK_RELOCATE */ /* Extend the stack our own way. */ if (YYMAXDEPTH <= yystacksize) goto yyexhaustedlab; yystacksize *= 2; if (YYMAXDEPTH < yystacksize) yystacksize = YYMAXDEPTH; { yy_state_t *yyss1 = yyss; union yyalloc *yyptr = YY_CAST (union yyalloc *, YYSTACK_ALLOC (YY_CAST (YYSIZE_T, YYSTACK_BYTES (yystacksize)))); if (! yyptr) goto yyexhaustedlab; YYSTACK_RELOCATE (yyss_alloc, yyss); YYSTACK_RELOCATE (yyvs_alloc, yyvs); # undef YYSTACK_RELOCATE if (yyss1 != yyssa) YYSTACK_FREE (yyss1); } # endif yyssp = yyss + yysize - 1; yyvsp = yyvs + yysize - 1; YY_IGNORE_USELESS_CAST_BEGIN YYDPRINTF ((stderr, "Stack size increased to %ld\n", YY_CAST (long, yystacksize))); YY_IGNORE_USELESS_CAST_END if (yyss + yystacksize - 1 <= yyssp) YYABORT; } #endif /* !defined yyoverflow && !defined YYSTACK_RELOCATE */ if (yystate == YYFINAL) YYACCEPT; goto yybackup; /*-----------. | yybackup. | `-----------*/ yybackup: /* Do appropriate processing given the current state. Read a lookahead token if we need one and don't already have one. */ /* First try to decide what to do without reference to lookahead token. */ yyn = yypact[yystate]; if (yypact_value_is_default (yyn)) goto yydefault; /* Not known => get a lookahead token if don't already have one. */ /* YYCHAR is either empty, or end-of-input, or a valid lookahead. */ if (yychar == YYEMPTY) { YYDPRINTF ((stderr, "Reading a token\n")); yychar = yylex (&yylval, scanner); } if (yychar <= YYEOF) { yychar = YYEOF; yytoken = YYSYMBOL_YYEOF; YYDPRINTF ((stderr, "Now at end of input.\n")); } else if (yychar == YYerror) { /* The scanner already issued an error message, process directly to error recovery. But do not keep the error token as lookahead, it is too special and may lead us to an endless loop in error recovery. */ yychar = YYUNDEF; yytoken = YYSYMBOL_YYerror; goto yyerrlab1; } else { yytoken = YYTRANSLATE (yychar); YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc); } /* If the proper action on seeing token YYTOKEN is to reduce or to detect an error, take that action. */ yyn += yytoken; if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken) goto yydefault; yyn = yytable[yyn]; if (yyn <= 0) { if (yytable_value_is_error (yyn)) goto yyerrlab; yyn = -yyn; goto yyreduce; } /* Count tokens shifted since error; after three, turn off error status. */ if (yyerrstatus) yyerrstatus--; /* Shift the lookahead token. */ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc); yystate = yyn; YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Discard the shifted token. */ yychar = YYEMPTY; goto yynewstate; /*-----------------------------------------------------------. | yydefault -- do the default action for the current state. | `-----------------------------------------------------------*/ yydefault: yyn = yydefact[yystate]; if (yyn == 0) goto yyerrlab; goto yyreduce; /*-----------------------------. | yyreduce -- do a reduction. | `-----------------------------*/ yyreduce: /* yyn is the number of a rule to reduce with. */ yylen = yyr2[yyn]; /* If YYLEN is nonzero, implement the default value of the action: '$$ = $1'. Otherwise, the following line sets YYVAL to garbage. This behavior is undocumented and Bison users should not rely upon it. Assigning to YYVAL unconditionally makes the parser a bit smaller, and it avoids a GCC warning that YYVAL may be used uninitialized. */ yyval = yyvsp[1-yylen]; YY_REDUCE_PRINT (yyn); switch (yyn) { case 2: #line 119 "../../src/rec-sex-tab.y" { rec_sex_ast_t ast; ast = rec_sex_ast_new (); rec_sex_ast_set_top (ast, (yyvsp[0].node)); rec_sex_parser_set_ast (sex_parser, ast); } #line 1312 "rec-sex-tab.c" break; case 3: #line 128 "../../src/rec-sex-tab.y" { (yyval.node) = (yyvsp[0].node); } #line 1318 "rec-sex-tab.c" break; case 4: #line 129 "../../src/rec-sex-tab.y" { (yyval.node) = (yyvsp[0].node); } #line 1324 "rec-sex-tab.c" break; case 5: #line 130 "../../src/rec-sex-tab.y" { (yyval.node) = (yyvsp[0].node); } #line 1330 "rec-sex-tab.c" break; case 6: #line 131 "../../src/rec-sex-tab.y" { (yyval.node) = (yyvsp[0].node); } #line 1336 "rec-sex-tab.c" break; case 7: #line 133 "../../src/rec-sex-tab.y" { CREATE_NODE_OP3 (REC_SEX_OP_COND, (yyval.node), (yyvsp[-4].node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1342 "rec-sex-tab.c" break; case 8: #line 134 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_EQL, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1348 "rec-sex-tab.c" break; case 9: #line 135 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_NEQ, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1354 "rec-sex-tab.c" break; case 10: #line 137 "../../src/rec-sex-tab.y" { if ((rec_sex_ast_node_type ((yyvsp[-2].node)) == REC_SEX_INT) || (rec_sex_ast_node_type ((yyvsp[0].node)) == REC_SEX_INT)) { rec_sex_ast_node_destroy ((yyvsp[-2].node)); rec_sex_ast_node_destroy ((yyvsp[0].node)); YYABORT; } CREATE_NODE_OP2 (REC_SEX_OP_MAT, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1370 "rec-sex-tab.c" break; case 11: #line 148 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_ADD, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1376 "rec-sex-tab.c" break; case 12: #line 149 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_SUB, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1382 "rec-sex-tab.c" break; case 13: #line 150 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_MUL, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1388 "rec-sex-tab.c" break; case 14: #line 151 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_DIV, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1394 "rec-sex-tab.c" break; case 15: #line 152 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_MOD, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1400 "rec-sex-tab.c" break; case 16: #line 153 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_GT, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1406 "rec-sex-tab.c" break; case 17: #line 154 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_LT, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1412 "rec-sex-tab.c" break; case 18: #line 155 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_GTE, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1418 "rec-sex-tab.c" break; case 19: #line 156 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_LTE, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1424 "rec-sex-tab.c" break; case 20: #line 157 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_AFTER, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1430 "rec-sex-tab.c" break; case 21: #line 158 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_BEFORE, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1436 "rec-sex-tab.c" break; case 22: #line 159 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_SAMETIME, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1442 "rec-sex-tab.c" break; case 23: #line 160 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_IMPLIES, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1448 "rec-sex-tab.c" break; case 24: #line 161 "../../src/rec-sex-tab.y" { CREATE_NODE_OP1 (REC_SEX_OP_NOT, (yyval.node), (yyvsp[0].node)); } #line 1454 "rec-sex-tab.c" break; case 25: #line 162 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_AND, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1460 "rec-sex-tab.c" break; case 26: #line 163 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_OR, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1466 "rec-sex-tab.c" break; case 27: #line 164 "../../src/rec-sex-tab.y" { CREATE_NODE_OP2 (REC_SEX_OP_CONCAT, (yyval.node), (yyvsp[-2].node), (yyvsp[0].node)); } #line 1472 "rec-sex-tab.c" break; case 28: #line 165 "../../src/rec-sex-tab.y" { CREATE_NODE_OP1 (REC_SEX_OP_SHA, (yyval.node), (yyvsp[0].node)); } #line 1478 "rec-sex-tab.c" break; case 29: #line 166 "../../src/rec-sex-tab.y" { (yyval.node) = (yyvsp[-1].node); } #line 1484 "rec-sex-tab.c" break; #line 1488 "rec-sex-tab.c" default: break; } /* User semantic actions sometimes alter yychar, and that requires that yytoken be updated with the new translation. We take the approach of translating immediately before every use of yytoken. One alternative is translating here after every semantic action, but that translation would be missed if the semantic action invokes YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an incorrect destructor might then be invoked immediately. In the case of YYERROR or YYBACKUP, subsequent parser actions might lead to an incorrect destructor call or verbose syntax error message before the lookahead is translated. */ YY_SYMBOL_PRINT ("-> $$ =", YY_CAST (yysymbol_kind_t, yyr1[yyn]), &yyval, &yyloc); YYPOPSTACK (yylen); yylen = 0; *++yyvsp = yyval; /* Now 'shift' the result of the reduction. Determine what state that goes to, based on the state we popped back to and the rule number reduced by. */ { const int yylhs = yyr1[yyn] - YYNTOKENS; const int yyi = yypgoto[yylhs] + *yyssp; yystate = (0 <= yyi && yyi <= YYLAST && yycheck[yyi] == *yyssp ? yytable[yyi] : yydefgoto[yylhs]); } goto yynewstate; /*--------------------------------------. | yyerrlab -- here on detecting error. | `--------------------------------------*/ yyerrlab: /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = yychar == YYEMPTY ? YYSYMBOL_YYEMPTY : YYTRANSLATE (yychar); /* If not already recovering from an error, report this error. */ if (!yyerrstatus) { ++yynerrs; yyerror (sex_parser, YY_("syntax error")); } if (yyerrstatus == 3) { /* If just tried and failed to reuse lookahead token after an error, discard it. */ if (yychar <= YYEOF) { /* Return failure if at end of input. */ if (yychar == YYEOF) YYABORT; } else { yydestruct ("Error: discarding", yytoken, &yylval, sex_parser); yychar = YYEMPTY; } } /* Else will try to reuse lookahead token after shifting the error token. */ goto yyerrlab1; /*---------------------------------------------------. | yyerrorlab -- error raised explicitly by YYERROR. | `---------------------------------------------------*/ yyerrorlab: /* Pacify compilers when the user code never invokes YYERROR and the label yyerrorlab therefore never appears in user code. */ if (0) YYERROR; /* Do not reclaim the symbols of the rule whose action triggered this YYERROR. */ YYPOPSTACK (yylen); yylen = 0; YY_STACK_PRINT (yyss, yyssp); yystate = *yyssp; goto yyerrlab1; /*-------------------------------------------------------------. | yyerrlab1 -- common code for both syntax error and YYERROR. | `-------------------------------------------------------------*/ yyerrlab1: yyerrstatus = 3; /* Each real token shifted decrements this. */ /* Pop stack until we find a state that shifts the error token. */ for (;;) { yyn = yypact[yystate]; if (!yypact_value_is_default (yyn)) { yyn += YYSYMBOL_YYerror; if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYSYMBOL_YYerror) { yyn = yytable[yyn]; if (0 < yyn) break; } } /* Pop the current state because it cannot handle the error token. */ if (yyssp == yyss) YYABORT; yydestruct ("Error: popping", YY_ACCESSING_SYMBOL (yystate), yyvsp, sex_parser); YYPOPSTACK (1); yystate = *yyssp; YY_STACK_PRINT (yyss, yyssp); } YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN *++yyvsp = yylval; YY_IGNORE_MAYBE_UNINITIALIZED_END /* Shift the error token. */ YY_SYMBOL_PRINT ("Shifting", YY_ACCESSING_SYMBOL (yyn), yyvsp, yylsp); yystate = yyn; goto yynewstate; /*-------------------------------------. | yyacceptlab -- YYACCEPT comes here. | `-------------------------------------*/ yyacceptlab: yyresult = 0; goto yyreturn; /*-----------------------------------. | yyabortlab -- YYABORT comes here. | `-----------------------------------*/ yyabortlab: yyresult = 1; goto yyreturn; #if !defined yyoverflow /*-------------------------------------------------. | yyexhaustedlab -- memory exhaustion comes here. | `-------------------------------------------------*/ yyexhaustedlab: yyerror (sex_parser, YY_("memory exhausted")); yyresult = 2; /* Fall through. */ #endif /*-----------------------------------------------------. | yyreturn -- parsing is finished, return the result. | `-----------------------------------------------------*/ yyreturn: if (yychar != YYEMPTY) { /* Make sure we have latest lookahead translation. See comments at user semantic actions for why this is necessary. */ yytoken = YYTRANSLATE (yychar); yydestruct ("Cleanup: discarding lookahead", yytoken, &yylval, sex_parser); } /* Do not reclaim the symbols of the rule whose action triggered this YYABORT or YYACCEPT. */ YYPOPSTACK (yylen); YY_STACK_PRINT (yyss, yyssp); while (yyssp != yyss) { yydestruct ("Cleanup: popping", YY_ACCESSING_SYMBOL (+*yyssp), yyvsp, sex_parser); YYPOPSTACK (1); } #ifndef yyoverflow if (yyss != yyssa) YYSTACK_FREE (yyss); #endif return yyresult; } #line 168 "../../src/rec-sex-tab.y" �����������������������������������������������������������������������������������recutils-1.9/src/rec-sex-parser.c�������������������������������������������������������������������0000644�0000000�0000000�00000005774�14226563465�013731� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-sex-parser.c - Sexy parser. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <rec-sex-parser.h> #include "rec-sex-tab.h" /*#include "rec-sex-lex.h" */ struct rec_sex_parser_s { char *in; /* String to be parsed. */ size_t index; /* Index in in_str. */ void *scanner; /* Flex scanner. */ bool case_insensitive; rec_sex_ast_t ast; }; rec_sex_parser_t rec_sex_parser_new (void) { rec_sex_parser_t new; new = malloc (sizeof (struct rec_sex_parser_s)); if (new) { new->in = NULL; new->index = 0; new->case_insensitive = false; /* Initialize the sexy scanner. */ sexlex_init (&(new->scanner)); sexset_extra (new, new->scanner); } return new; } void * rec_sex_parser_scanner (rec_sex_parser_t parser) { return parser->scanner; } void rec_sex_parser_destroy (rec_sex_parser_t parser) { if (parser->scanner) sexlex_destroy (parser->scanner); free (parser->in); free (parser); } rec_sex_ast_t rec_sex_parser_ast (rec_sex_parser_t parser) { return parser->ast; } void rec_sex_parser_set_ast (rec_sex_parser_t parser, rec_sex_ast_t ast) { parser->ast = ast; } bool rec_sex_parser_case_insensitive (rec_sex_parser_t parser) { return parser->case_insensitive; } void rec_sex_parser_set_case_insensitive (rec_sex_parser_t parser, bool case_insensitive) { parser->case_insensitive = case_insensitive; } void rec_sex_parser_set_in (rec_sex_parser_t parser, const char *str) { if (parser->in) { free (parser->in); parser->in = NULL; } parser->in = strdup (str); parser->index = 0; } int rec_sex_parser_getc (rec_sex_parser_t parser) { int res; res = -1; if ((parser->in) && (parser->index < strlen (parser->in))) res = parser->in[parser->index++]; return res; } bool rec_sex_parser_run (rec_sex_parser_t parser, const char *expr) { int res; rec_sex_parser_set_in (parser, expr); if (!sexparse (parser)) res = true; else /* Parse error. */ res = false; return res; } void rec_sex_parser_print_ast (rec_sex_parser_t parser) { rec_sex_ast_print (parser->ast); } ����recutils-1.9/src/rec-mset.c�������������������������������������������������������������������������0000644�0000000�0000000�00000046745�14226563465�012613� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-mset.c - ordered heterogeneous sets. */ /* Copyright (C) 2010-2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <rec.h> #include <gl_array_list.h> #include <gl_list.h> #define MAX_NTYPES 4 struct rec_mset_elem_s { rec_mset_type_t type; void *data; gl_list_node_t list_node; /* Containing multi-set. */ rec_mset_t mset; }; struct rec_mset_s { int ntypes; /* Properties of the element types. */ char *name[MAX_NTYPES]; rec_mset_disp_fn_t disp_fn[MAX_NTYPES]; rec_mset_equal_fn_t equal_fn[MAX_NTYPES]; rec_mset_dup_fn_t dup_fn[MAX_NTYPES]; rec_mset_compare_fn_t compare_fn[MAX_NTYPES]; /* Statistics. */ size_t count[MAX_NTYPES]; gl_list_t elem_list; }; static void rec_mset_init (rec_mset_t mset) { /* Initialize the mset structure so it can be safely passed to rec_mset_destroy even if its contents are not completely initialized with real values. */ memset (mset, 0 /* NULL */, sizeof (struct rec_mset_s)); } /* Destroy the resources used by a mset element, freeing any used memory. The element reference becomes invalid after executing this function. */ static void rec_mset_elem_destroy (rec_mset_elem_t elem) { if (elem) { /* Dispose the data stored in the element if a disposal callback function was configured by the user. The callback is never invoked if the stored data is NULL. */ if (elem->data && elem->mset->disp_fn[elem->type]) elem->mset->disp_fn[elem->type] (elem->data); free (elem); } } static bool rec_mset_elem_equal_fn (const void *e1, const void *e2) { rec_mset_elem_t elem1; rec_mset_elem_t elem2; elem1 = (rec_mset_elem_t) e1; elem2 = (rec_mset_elem_t) e2; if ((elem1->mset != elem2->mset) || (elem1->type != elem2->type)) return false; return (elem1->mset->equal_fn[elem1->type]) (elem1->data, elem2->data); } static void rec_mset_elem_dispose_fn (const void *e) { rec_mset_elem_t elem; elem = (rec_mset_elem_t) e; rec_mset_elem_destroy (elem); } static int rec_mset_elem_compare_fn (const void *e1, const void *e2) { int result = 0; rec_mset_elem_t elem1; rec_mset_elem_t elem2; elem1 = (rec_mset_elem_t) e1; elem2 = (rec_mset_elem_t) e2; if (elem1->mset->compare_fn) result = (elem1->mset->compare_fn[elem1->type]) (elem1->data, elem2->data, elem2->type); return result; } static rec_mset_list_iter_t rec_mset_iter_gl2mset (gl_list_iterator_t list_iter) { rec_mset_list_iter_t mset_iter; mset_iter.vtable = (void *) list_iter.vtable; mset_iter.list = (void *) list_iter.list; mset_iter.count = list_iter.count; mset_iter.p = list_iter.p; mset_iter.q = list_iter.q; mset_iter.i = list_iter.i; mset_iter.j = list_iter.j; return mset_iter; } static gl_list_iterator_t rec_mset_iter_mset2gl (rec_mset_list_iter_t mset_iter) { gl_list_iterator_t list_iter; list_iter.vtable = (const struct gl_list_implementation *) mset_iter.vtable; list_iter.list = (gl_list_t) mset_iter.list; list_iter.count = mset_iter.count; list_iter.p = mset_iter.p; list_iter.q = mset_iter.q; list_iter.i = mset_iter.i; list_iter.j = mset_iter.j; return list_iter; } /* Create a new element to be stored in a given mset, of the givent type, and return it. NULL is returned if there is no enough memory to perform the operation. */ static rec_mset_elem_t rec_mset_elem_new (rec_mset_t mset, rec_mset_type_t type, void *data) { rec_mset_elem_t new; if (type >= mset->ntypes) return NULL; new = malloc (sizeof (struct rec_mset_elem_s)); if (new) { new->type = type; new->data = data; new->mset = mset; new->list_node = NULL; } return new; } rec_mset_t rec_mset_new (void) { rec_mset_t new; int i; new = malloc (sizeof (struct rec_mset_s)); if (new) { rec_mset_init (new); new->ntypes = 1; for (i = 0; i < MAX_NTYPES; i++) { new->count[i] = 0; new->name[i] = NULL; new->equal_fn[i] = NULL; new->disp_fn[i] = NULL; new->dup_fn[i] = NULL; new->compare_fn[i] = NULL; } new->elem_list = gl_list_nx_create_empty (GL_ARRAY_LIST, rec_mset_elem_equal_fn, NULL, rec_mset_elem_dispose_fn, true); if (new->elem_list == NULL) { /* Out of memory. */ rec_mset_destroy (new); new = NULL; } } return new; } void rec_mset_destroy (rec_mset_t mset) { if (mset) { int i; for (i = 0; i < mset->ntypes; i++) free(mset->name[i]); gl_list_free (mset->elem_list); free (mset); } } rec_mset_t rec_mset_dup (rec_mset_t mset) { rec_mset_t new; rec_mset_elem_t elem; gl_list_iterator_t iter; int i; new = rec_mset_new (); if (new) { /* Register the types. */ new->ntypes = mset->ntypes; for (i = 0; i < new->ntypes; i++) { new->count[i] = 0; if (mset->name[i]) { new->name[i] = strdup (mset->name[i]); if (!new->name[i]) { /* Out of memory. */ rec_mset_destroy (new); return NULL; } } new->disp_fn[i] = mset->disp_fn[i]; new->equal_fn[i] = mset->equal_fn[i]; new->dup_fn[i] = mset->dup_fn[i]; new->compare_fn[i] = mset->compare_fn[i]; } /* Duplicate the elements. */ iter = gl_list_iterator (mset->elem_list); while (gl_list_iterator_next (&iter, (const void **) &elem, NULL)) { void *data = NULL; /* Set the data. */ if (new->dup_fn[elem->type]) { data = (new->dup_fn[elem->type]) (elem->data); if (!data) { /* Out of memory. */ rec_mset_destroy (new); return NULL; } } else data = elem->data; /* Append the new data into a new element. */ rec_mset_append (new, elem->type, data, MSET_ANY); } gl_list_iterator_free (&iter); } return new; } rec_mset_t rec_mset_sort (rec_mset_t mset) { rec_mset_elem_t elem; gl_list_iterator_t iter; gl_list_t list; /* Save a reference to the old gnulib list and create a new, empty one. */ list = mset->elem_list; mset->elem_list = gl_list_nx_create_empty (GL_ARRAY_LIST, rec_mset_elem_equal_fn, NULL, rec_mset_elem_dispose_fn, true); if (!mset->elem_list) /* Out of memory. */ return NULL; /* Iterate on the old list getting the data of the elements and inserting it into the new sorted gl_list. */ iter = gl_list_iterator (list); while (gl_list_iterator_next (&iter, (const void **) &elem, NULL)) { /* Create a new node list with the proper data and insert it into the list using whatever sorting criteria is implemented by compare_fn. */ if (!rec_mset_add_sorted (mset, elem->type, elem->data)) { /* Out of memory. Delete the new list and restore the old one. */ gl_list_free (mset->elem_list); mset->elem_list = list; return NULL; } /* We don't want the memory used by the element to be disposed when the old list gets destroyed. The generic element disposal function always checks if the data is NULL before invoking the corresponding disp_fn callback. */ elem->data = NULL; } gl_list_iterator_free (&iter); /* Destroy the memory used by the old list, but removing the dispose_fn callbacks first for the proper types in order to avoid the disposal of the elements!. */ gl_list_free (list); return mset; } bool rec_mset_type_p (rec_mset_t mset, rec_mset_type_t type) { return type < mset->ntypes; } rec_mset_type_t rec_mset_register_type (rec_mset_t mset, char *name, rec_mset_disp_fn_t disp_fn, rec_mset_equal_fn_t equal_fn, rec_mset_dup_fn_t dup_fn, rec_mset_compare_fn_t compare_fn) { rec_mset_type_t new_type; new_type = mset->ntypes++; mset->count[new_type] = 0; mset->name[new_type] = strdup (name); mset->disp_fn[new_type] = disp_fn; mset->equal_fn[new_type] = equal_fn; mset->dup_fn[new_type] = dup_fn; mset->compare_fn[new_type] = compare_fn; return new_type; } size_t rec_mset_count (rec_mset_t mset, rec_mset_type_t type) { return mset->count[type]; } void * rec_mset_get_at (rec_mset_t mset, rec_mset_type_t type, size_t position) { rec_mset_elem_t elem; if ((position < 0) || (position >= mset->count[type])) /* Invalid position. */ return NULL; if (type == MSET_ANY) { /* An element of any type was requested. Simply call the gnulib list get_at function, that will use the most efficient way to retrieve the element. */ elem = (rec_mset_elem_t) gl_list_get_at (mset->elem_list, position); } else { /* Iterate on the elements in the gnulib list until the POSITIONth element of the specified type is found. */ rec_mset_elem_t cur_elem; gl_list_node_t node; gl_list_iterator_t iter; int count[MAX_NTYPES]; int i = 0; elem = NULL; for (i = 0; i < MAX_NTYPES; i++) count[i] = 0; iter = gl_list_iterator (mset->elem_list); while (gl_list_iterator_next (&iter, (const void **) &cur_elem, &node)) { if ((type == MSET_ANY) || ((type == cur_elem->type) && (count[cur_elem->type] == position))) { elem = cur_elem; break; } else { count[cur_elem->type]++; count[0]++; } } } return (elem ? elem->data : NULL); } bool rec_mset_remove_at (rec_mset_t mset, rec_mset_type_t type, size_t position) { rec_mset_elem_t elem; void *data; bool removed = false; if (mset->count[type] > 0) { if (position < 0) position = 0; if (position >= mset->count[type]) position = mset->count[type] - 1; data = rec_mset_get_at (mset, type, position); elem = rec_mset_search (mset, data); if (rec_mset_remove_elem (mset, elem)) removed = true; } return removed; } rec_mset_elem_t rec_mset_insert_at (rec_mset_t mset, rec_mset_type_t type, void *data, size_t position) { rec_mset_elem_t elem = NULL; gl_list_node_t node; node = NULL; /* Create the mset element to insert in the gl_list, returning NULL if there is no enough memory. */ elem = rec_mset_elem_new (mset, type, data); if (!elem) return NULL; /* Insert the element at the proper place in the list. */ if (position < 0) { node = gl_list_nx_add_first (mset->elem_list, (void *) elem); } else if (position >= mset->count[0]) { node = gl_list_nx_add_last (mset->elem_list, (void *) elem); } else { node = gl_list_nx_add_at (mset->elem_list, position, (void *) elem); } if (node == NULL) { rec_mset_elem_destroy (elem); elem = NULL; } else { elem->list_node = node; mset->count[0]++; if (elem->type != MSET_ANY) mset->count[elem->type]++; } return elem; } rec_mset_elem_t rec_mset_append (rec_mset_t mset, rec_mset_type_t elem_type, void *data, rec_mset_type_t type) { return rec_mset_insert_at (mset, elem_type, data, rec_mset_count (mset, type)); } bool rec_mset_remove_elem (rec_mset_t mset, rec_mset_elem_t elem) { rec_mset_type_t type = elem->type; bool res = gl_list_remove_node (mset->elem_list, elem->list_node); if (res) { /* Update statistics. */ mset->count[type]--; if (type != MSET_ANY) mset->count[MSET_ANY]--; } return res; } rec_mset_elem_t rec_mset_insert_after (rec_mset_t mset, rec_mset_type_t type, void *data, rec_mset_elem_t elem) { rec_mset_elem_t new_elem; gl_list_node_t node; /* Create the mset element to insert in the gl_list, returning NULL if there is no enough memory. */ new_elem = rec_mset_elem_new (mset, type, data); if (!new_elem) return NULL; /* Find the requested place where to insert the new element. If ELEM is not found in the multi-set then the new element is appended to the multi-set. */ node = gl_list_search (mset->elem_list, (void *) elem); if (node) { node = gl_list_nx_add_after (mset->elem_list, node, (void *) new_elem); if (!node) { /* Out of memory. */ rec_mset_elem_destroy (new_elem); return NULL; } new_elem->list_node = node; mset->count[0]++; if (new_elem->type != MSET_ANY) mset->count[new_elem->type]++; } else { node = gl_list_nx_add_last (mset->elem_list, (void *) elem); if (!node) { /* Out of memory. */ rec_mset_elem_destroy (new_elem); return NULL; } new_elem->list_node = node; } return new_elem; } rec_mset_elem_t rec_mset_search (rec_mset_t mset, void *data) { rec_mset_elem_t result = NULL; rec_mset_elem_t elem; gl_list_iterator_t iter; iter = gl_list_iterator (mset->elem_list); while (gl_list_iterator_next (&iter, (const void **) &elem, NULL)) { if (elem->data == data) { result = elem; break; } } gl_list_iterator_free (&iter); return result; } rec_mset_iterator_t rec_mset_iterator (rec_mset_t mset) { gl_list_iterator_t list_iter; rec_mset_iterator_t mset_iter; /* Fill the mset iterator structure. Note that the list_iter field of the mset iterator must have the same size and structure than the gl_list_iterator_t structure. */ mset_iter.mset = mset; list_iter = gl_list_iterator (mset->elem_list); mset_iter.list_iter = rec_mset_iter_gl2mset (list_iter); return mset_iter; } bool rec_mset_iterator_next (rec_mset_iterator_t *iterator, rec_mset_type_t type, const void **data, rec_mset_elem_t *elem) { bool found = true; rec_mset_elem_t mset_elem; gl_list_iterator_t list_iter; gl_list_node_t list_node; /* Extract the list iterator from the multi-set iterator. */ list_iter = rec_mset_iter_mset2gl (iterator->list_iter); /* Advance the list iterator until an element of the proper type is found. */ while ((found = gl_list_iterator_next (&list_iter, (const void**) &mset_elem, &list_node)) && (type != 0) && (mset_elem->type != type)); if (found) { /* Update the multi-set iterator and set both DATA and ELEM. */ iterator->list_iter = rec_mset_iter_gl2mset (list_iter); if (data) *data = mset_elem->data; if (elem) { mset_elem->list_node = list_node; *elem = mset_elem; } } return found; } void rec_mset_iterator_free (rec_mset_iterator_t *iterator) { gl_list_iterator_t list_iter; /* Extract the list iterator, free it and copy it back to the mset iterator. */ list_iter = rec_mset_iter_mset2gl (iterator->list_iter); gl_list_iterator_free (&list_iter); iterator->list_iter = rec_mset_iter_gl2mset (list_iter); } int rec_mset_elem_type (rec_mset_elem_t elem) { return elem->type; } void rec_mset_elem_set_type (rec_mset_elem_t elem, rec_mset_type_t type) { elem->mset->count[elem->type]--; elem->type = type; elem->mset->count[type]++; } void * rec_mset_elem_data (rec_mset_elem_t elem) { return elem->data; } void rec_mset_elem_set_data (rec_mset_elem_t elem, void *data) { elem->data = data; } bool rec_mset_elem_equal_p (rec_mset_elem_t elem1, rec_mset_elem_t elem2) { return rec_mset_elem_equal_fn ((void *) elem1, (void *) elem2); } void * rec_mset_elem_dup_data (rec_mset_elem_t elem) { return elem->mset->dup_fn[elem->type] (elem->data); } void rec_mset_dump (rec_mset_t mset) { gl_list_iterator_t iter; gl_list_node_t node; rec_mset_elem_t elem; int i; printf ("MSET:\n"); printf (" ntypes: %d\n", mset->ntypes); for (i = 0; i < mset->ntypes; i++) { printf(" type %d:\n", i); printf(" count: %zd\n", mset->count[i]); printf(" disp_fn: %p\n", mset->disp_fn[i]); printf(" equal_fn: %p\n", mset->equal_fn[i]); printf(" dup_fn: %p\n", mset->dup_fn[i]); } printf(" nodes:\n"); iter = gl_list_iterator (mset->elem_list); while (gl_list_iterator_next (&iter, (const void **) &elem, &node)) { printf(" node=%p elem=%p elem->type=%d elem->data=%p contained=%p\n", node, elem, elem->type, elem->data, elem->mset); i++; } printf("END MSET\n"); } rec_mset_elem_t rec_mset_add_sorted (rec_mset_t mset, rec_mset_type_t type, void *data) { rec_mset_elem_t elem; gl_list_node_t node; /* Create the mset element to insert in the gl_list, returning NULL if there is no enough memory. */ elem = rec_mset_elem_new (mset, type, data); if (!elem) return NULL; /* Insert the element at the proper place in the list. */ node = gl_sortedlist_nx_add (mset->elem_list, rec_mset_elem_compare_fn, (void *) elem); if (!node) { rec_mset_elem_destroy (elem); return NULL; } elem->list_node = node; mset->count[0]++; if (elem->type != MSET_ANY) mset->count[elem->type]++; return elem; } ���������������������������recutils-1.9/src/rec-utils.h������������������������������������������������������������������������0000644�0000000�0000000�00000005236�14226563465�012776� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-utils.h - Miscellanea utilities. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef REC_UTILS_H #define REC_UTILS_H #include <config.h> #include <rec.h> #include <stdint.h> #include <stdbool.h> enum rec_size_condition_e { SIZE_COND_E, SIZE_COND_L, SIZE_COND_LE, SIZE_COND_G, SIZE_COND_GE }; /* Non public constants used by several modules. */ #define REC_INT_RE "-?((0x[0-9a-fA-F]+)|[0-9]+)" #define REC_INT_SIZE_RE \ "^[ \t\n]*(>|<|>=|<=)?[ \t\n]*" \ REC_INT_RE \ "[ \t\n]*$" /* Parse an integer/real in the NULL-terminated string STR and store it at NUMBER. Return true if the conversion was successful. false otherwise. */ bool rec_atoi (const char *str, int *number); bool rec_atod (const char *str, double *number); /* Extract type and url from a %rec: field value. */ char *rec_extract_url (const char *str); char *rec_extract_file (const char *str); char *rec_extract_type (const char *str); /* Extract size and condition from a %size: field value. */ size_t rec_extract_size (const char *str); enum rec_size_condition_e rec_extract_size_condition (const char *str); /* Matching a string against a regexp. */ bool rec_match (const char *str, const char *regexp); bool rec_match_insensitive (const char *str, const char *regexp); /* Generic parsing routines. */ bool rec_blank_p (char c); bool rec_digit_p (char c); bool rec_letter_p (char c); bool rec_parse_int (const char **str, int *num); void rec_skip_blanks (const char **str); bool rec_parse_regexp (const char **str, const char *re, char **result); /* String utilities. */ char *rec_concat_strings (const char *str1, const char *str2, const char *str3); /* Miscellanea. */ int rec_timespec_subtract (struct timespec *result, struct timespec *x, struct timespec *y); uint32_t rec_endian_swap (uint32_t number); #endif /* ! REC_UTILS_H */ ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/Makefile.in������������������������������������������������������������������������0000644�0000000�0000000�00000261660�14226573150�012760� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# Makefile.in generated by automake 1.16.5 from Makefile.am. # @configure_input@ # Copyright (C) 1994-2021 Free Software Foundation, Inc. # This Makefile.in is free software; the Free Software Foundation # gives unlimited permission to copy and/or distribute it, # with or without modifications, as long as this notice is preserved. # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY, to the extent permitted by law; without # even the implied warranty of MERCHANTABILITY or FITNESS FOR A # PARTICULAR PURPOSE. @SET_MAKE@ # src/ Makefile.am # GNU recutils # Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, # 2018, 2019, 2020, 2022 Jose E. Marchesi # This program is free software: you can redistribute it and/or modify # it under the terms of the GNU General Public License as published by # the Free Software Foundation, either version 3 of the License, or # (at your option) any later version. # # This program is distributed in the hope that it will be useful, # but WITHOUT ANY WARRANTY; without even the implied warranty of # MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the # GNU General Public License for more details. # # You should have received a copy of the GNU General Public License # along with this program. If not, see <http://www.gnu.org/licenses/>. VPATH = @srcdir@ am__is_gnu_make = { \ if test -z '$(MAKELEVEL)'; then \ false; \ elif test -n '$(MAKE_HOST)'; then \ true; \ elif test -n '$(MAKE_VERSION)' && test -n '$(CURDIR)'; then \ true; \ else \ false; \ fi; \ } am__make_running_with_option = \ case $${target_option-} in \ ?) ;; \ *) echo "am__make_running_with_option: internal error: invalid" \ "target option '$${target_option-}' specified" >&2; \ exit 1;; \ esac; \ has_opt=no; \ sane_makeflags=$$MAKEFLAGS; \ if $(am__is_gnu_make); then \ sane_makeflags=$$MFLAGS; \ else \ case $$MAKEFLAGS in \ *\\[\ \ ]*) \ bs=\\; \ sane_makeflags=`printf '%s\n' "$$MAKEFLAGS" \ | sed "s/$$bs$$bs[$$bs $$bs ]*//g"`;; \ esac; \ fi; \ skip_next=no; \ strip_trailopt () \ { \ flg=`printf '%s\n' "$$flg" | sed "s/$$1.*$$//"`; \ }; \ for flg in $$sane_makeflags; do \ test $$skip_next = yes && { skip_next=no; continue; }; \ case $$flg in \ *=*|--*) continue;; \ -*I) strip_trailopt 'I'; skip_next=yes;; \ -*I?*) strip_trailopt 'I';; \ -*O) strip_trailopt 'O'; skip_next=yes;; \ -*O?*) strip_trailopt 'O';; \ -*l) strip_trailopt 'l'; skip_next=yes;; \ -*l?*) strip_trailopt 'l';; \ -[dEDm]) skip_next=yes;; \ -[JT]) skip_next=yes;; \ esac; \ case $$flg in \ *$$target_option*) has_opt=yes; break;; \ esac; \ done; \ test $$has_opt = yes am__make_dryrun = (target_option=n; $(am__make_running_with_option)) am__make_keepgoing = (target_option=k; $(am__make_running_with_option)) pkgdatadir = $(datadir)/@PACKAGE@ pkgincludedir = $(includedir)/@PACKAGE@ pkglibdir = $(libdir)/@PACKAGE@ pkglibexecdir = $(libexecdir)/@PACKAGE@ am__cd = CDPATH="$${ZSH_VERSION+.}$(PATH_SEPARATOR)" && cd install_sh_DATA = $(install_sh) -c -m 644 install_sh_PROGRAM = $(install_sh) -c install_sh_SCRIPT = $(install_sh) -c INSTALL_HEADER = $(INSTALL_DATA) transform = $(program_transform_name) NORMAL_INSTALL = : PRE_INSTALL = : POST_INSTALL = : NORMAL_UNINSTALL = : PRE_UNINSTALL = : POST_UNINSTALL = : build_triplet = @build@ host_triplet = @host@ @CRYPT_TRUE@am__append_1 = rec-crypt.c @CRYPT_FALSE@am__append_2 = rec-crypt-dummy.c @USE_COVERAGE_TRUE@am__append_3 = -fprofile-arcs -ftest-coverage @CRYPT_TRUE@am__append_4 = $(LTLIBGCRYPT) @REMOTE_DESCRIPTORS_TRUE@am__append_5 = -DREMOTE_DESCRIPTORS @REMOTE_DESCRIPTORS_TRUE@am__append_6 = $(CURLLIBS) @UUID_TYPE_TRUE@am__append_7 = -DUUID_TYPE @UUID_TYPE_TRUE@am__append_8 = $(UUIDLIBS) subdir = src ACLOCAL_M4 = $(top_srcdir)/aclocal.m4 am__aclocal_m4_deps = $(top_srcdir)/m4/00gnulib.m4 \ $(top_srcdir)/m4/__inline.m4 \ $(top_srcdir)/m4/absolute-header.m4 $(top_srcdir)/m4/access.m4 \ $(top_srcdir)/m4/acl.m4 $(top_srcdir)/m4/alloca.m4 \ $(top_srcdir)/m4/asm-underscore.m4 \ $(top_srcdir)/m4/autobuild.m4 $(top_srcdir)/m4/base64.m4 \ $(top_srcdir)/m4/bison.m4 $(top_srcdir)/m4/btowc.m4 \ $(top_srcdir)/m4/builtin-expect.m4 $(top_srcdir)/m4/calloc.m4 \ $(top_srcdir)/m4/canonicalize.m4 \ $(top_srcdir)/m4/chdir-long.m4 $(top_srcdir)/m4/clock_time.m4 \ $(top_srcdir)/m4/close.m4 $(top_srcdir)/m4/closedir.m4 \ $(top_srcdir)/m4/codeset.m4 \ $(top_srcdir)/m4/copy-file-range.m4 \ $(top_srcdir)/m4/copy-file.m4 $(top_srcdir)/m4/d-ino.m4 \ $(top_srcdir)/m4/dirent_h.m4 $(top_srcdir)/m4/dirfd.m4 \ $(top_srcdir)/m4/double-slash-root.m4 $(top_srcdir)/m4/dup.m4 \ $(top_srcdir)/m4/dup2.m4 $(top_srcdir)/m4/eaccess.m4 \ $(top_srcdir)/m4/eealloc.m4 $(top_srcdir)/m4/environ.m4 \ $(top_srcdir)/m4/errno_h.m4 $(top_srcdir)/m4/error.m4 \ $(top_srcdir)/m4/euidaccess.m4 $(top_srcdir)/m4/execute.m4 \ $(top_srcdir)/m4/explicit_bzero.m4 \ $(top_srcdir)/m4/exponentd.m4 $(top_srcdir)/m4/exponentf.m4 \ $(top_srcdir)/m4/exponentl.m4 $(top_srcdir)/m4/extensions.m4 \ $(top_srcdir)/m4/extern-inline.m4 \ $(top_srcdir)/m4/fatal-signal.m4 $(top_srcdir)/m4/fchdir.m4 \ $(top_srcdir)/m4/fcntl-o.m4 $(top_srcdir)/m4/fcntl.m4 \ $(top_srcdir)/m4/fcntl_h.m4 $(top_srcdir)/m4/fdopendir.m4 \ $(top_srcdir)/m4/filenamecat.m4 \ $(top_srcdir)/m4/findprog-in.m4 $(top_srcdir)/m4/flexmember.m4 \ $(top_srcdir)/m4/float_h.m4 $(top_srcdir)/m4/flock.m4 \ $(top_srcdir)/m4/floor.m4 $(top_srcdir)/m4/fopen.m4 \ $(top_srcdir)/m4/fpending.m4 $(top_srcdir)/m4/fpieee.m4 \ $(top_srcdir)/m4/fprintf-posix.m4 $(top_srcdir)/m4/free.m4 \ $(top_srcdir)/m4/frexp.m4 $(top_srcdir)/m4/frexpl.m4 \ $(top_srcdir)/m4/fseek.m4 $(top_srcdir)/m4/fseeko.m4 \ $(top_srcdir)/m4/fseterr.m4 $(top_srcdir)/m4/fstat.m4 \ $(top_srcdir)/m4/fstatat.m4 $(top_srcdir)/m4/ftell.m4 \ $(top_srcdir)/m4/ftello.m4 $(top_srcdir)/m4/fwriting.m4 \ $(top_srcdir)/m4/getcwd-abort-bug.m4 \ $(top_srcdir)/m4/getcwd-path-max.m4 $(top_srcdir)/m4/getcwd.m4 \ $(top_srcdir)/m4/getdelim.m4 $(top_srcdir)/m4/getdtablesize.m4 \ $(top_srcdir)/m4/getgroups.m4 $(top_srcdir)/m4/getline.m4 \ $(top_srcdir)/m4/getopt.m4 $(top_srcdir)/m4/getpagesize.m4 \ $(top_srcdir)/m4/getpass.m4 $(top_srcdir)/m4/getprogname.m4 \ $(top_srcdir)/m4/getrandom.m4 $(top_srcdir)/m4/gettext.m4 \ $(top_srcdir)/m4/gettime.m4 $(top_srcdir)/m4/gettimeofday.m4 \ $(top_srcdir)/m4/gnulib-common.m4 \ $(top_srcdir)/m4/gnulib-comp.m4 \ $(top_srcdir)/m4/group-member.m4 \ $(top_srcdir)/m4/host-cpu-c-abi.m4 $(top_srcdir)/m4/iconv.m4 \ $(top_srcdir)/m4/include_next.m4 \ $(top_srcdir)/m4/intlmacosx.m4 $(top_srcdir)/m4/intmax_t.m4 \ $(top_srcdir)/m4/inttypes.m4 $(top_srcdir)/m4/inttypes_h.m4 \ $(top_srcdir)/m4/isnand.m4 $(top_srcdir)/m4/isnanf.m4 \ $(top_srcdir)/m4/isnanl.m4 $(top_srcdir)/m4/langinfo_h.m4 \ $(top_srcdir)/m4/largefile.m4 $(top_srcdir)/m4/ldexpl.m4 \ $(top_srcdir)/m4/lib-ld.m4 $(top_srcdir)/m4/lib-link.m4 \ $(top_srcdir)/m4/lib-prefix.m4 $(top_srcdir)/m4/libtool.m4 \ $(top_srcdir)/m4/limits-h.m4 $(top_srcdir)/m4/localcharset.m4 \ $(top_srcdir)/m4/locale-fr.m4 $(top_srcdir)/m4/locale-ja.m4 \ $(top_srcdir)/m4/locale-zh.m4 $(top_srcdir)/m4/locale_h.m4 \ $(top_srcdir)/m4/localeconv.m4 $(top_srcdir)/m4/lock.m4 \ $(top_srcdir)/m4/lseek.m4 $(top_srcdir)/m4/lstat.m4 \ $(top_srcdir)/m4/ltoptions.m4 $(top_srcdir)/m4/ltsugar.m4 \ $(top_srcdir)/m4/ltversion.m4 $(top_srcdir)/m4/lt~obsolete.m4 \ $(top_srcdir)/m4/malloc.m4 $(top_srcdir)/m4/malloca.m4 \ $(top_srcdir)/m4/math_h.m4 $(top_srcdir)/m4/mbrlen.m4 \ $(top_srcdir)/m4/mbrtowc.m4 $(top_srcdir)/m4/mbsinit.m4 \ $(top_srcdir)/m4/mbstate_t.m4 $(top_srcdir)/m4/mbtowc.m4 \ $(top_srcdir)/m4/memchr.m4 $(top_srcdir)/m4/mempcpy.m4 \ $(top_srcdir)/m4/memrchr.m4 $(top_srcdir)/m4/minmax.m4 \ $(top_srcdir)/m4/mkdir.m4 $(top_srcdir)/m4/mkostemp.m4 \ $(top_srcdir)/m4/mkstemp.m4 $(top_srcdir)/m4/mktime.m4 \ $(top_srcdir)/m4/mmap-anon.m4 $(top_srcdir)/m4/mode_t.m4 \ $(top_srcdir)/m4/msvc-inval.m4 \ $(top_srcdir)/m4/msvc-nothrow.m4 $(top_srcdir)/m4/multiarch.m4 \ $(top_srcdir)/m4/nl_langinfo.m4 $(top_srcdir)/m4/nls.m4 \ $(top_srcdir)/m4/nocrash.m4 $(top_srcdir)/m4/nstrftime.m4 \ $(top_srcdir)/m4/obstack.m4 $(top_srcdir)/m4/off_t.m4 \ $(top_srcdir)/m4/open-cloexec.m4 \ $(top_srcdir)/m4/open-slash.m4 $(top_srcdir)/m4/open.m4 \ $(top_srcdir)/m4/openat.m4 $(top_srcdir)/m4/opendir.m4 \ $(top_srcdir)/m4/parse-datetime.m4 $(top_srcdir)/m4/pathmax.m4 \ $(top_srcdir)/m4/pipe.m4 $(top_srcdir)/m4/pkg.m4 \ $(top_srcdir)/m4/po.m4 $(top_srcdir)/m4/posix_spawn.m4 \ $(top_srcdir)/m4/posix_spawn_faction_addchdir.m4 \ $(top_srcdir)/m4/printf-frexp.m4 \ $(top_srcdir)/m4/printf-frexpl.m4 \ $(top_srcdir)/m4/printf-posix-rpl.m4 \ $(top_srcdir)/m4/printf.m4 $(top_srcdir)/m4/progtest.m4 \ $(top_srcdir)/m4/pthread_rwlock_rdlock.m4 \ $(top_srcdir)/m4/quote.m4 $(top_srcdir)/m4/quotearg.m4 \ $(top_srcdir)/m4/raise.m4 $(top_srcdir)/m4/random_r.m4 \ $(top_srcdir)/m4/rawmemchr.m4 $(top_srcdir)/m4/read-file.m4 \ $(top_srcdir)/m4/read.m4 $(top_srcdir)/m4/readdir.m4 \ $(top_srcdir)/m4/readline.m4 $(top_srcdir)/m4/readlink.m4 \ $(top_srcdir)/m4/realloc.m4 $(top_srcdir)/m4/reallocarray.m4 \ $(top_srcdir)/m4/regex.m4 $(top_srcdir)/m4/remove.m4 \ $(top_srcdir)/m4/rename.m4 $(top_srcdir)/m4/rewinddir.m4 \ $(top_srcdir)/m4/rmdir.m4 $(top_srcdir)/m4/safe-read.m4 \ $(top_srcdir)/m4/safe-write.m4 $(top_srcdir)/m4/save-cwd.m4 \ $(top_srcdir)/m4/sched_h.m4 $(top_srcdir)/m4/secure_getenv.m4 \ $(top_srcdir)/m4/selinux-context-h.m4 \ $(top_srcdir)/m4/selinux-label-h.m4 \ $(top_srcdir)/m4/selinux-selinux-h.m4 \ $(top_srcdir)/m4/setenv.m4 $(top_srcdir)/m4/setlocale_null.m4 \ $(top_srcdir)/m4/sh-filename.m4 \ $(top_srcdir)/m4/sig_atomic_t.m4 $(top_srcdir)/m4/sigaction.m4 \ $(top_srcdir)/m4/signal_h.m4 \ $(top_srcdir)/m4/signalblocking.m4 $(top_srcdir)/m4/signbit.m4 \ $(top_srcdir)/m4/size_max.m4 $(top_srcdir)/m4/spawn_h.m4 \ $(top_srcdir)/m4/ssize_t.m4 $(top_srcdir)/m4/stat-time.m4 \ $(top_srcdir)/m4/stat.m4 $(top_srcdir)/m4/stdalign.m4 \ $(top_srcdir)/m4/stdarg.m4 $(top_srcdir)/m4/stdbool.m4 \ $(top_srcdir)/m4/stddef_h.m4 $(top_srcdir)/m4/stdint.m4 \ $(top_srcdir)/m4/stdint_h.m4 $(top_srcdir)/m4/stdio_h.m4 \ $(top_srcdir)/m4/stdlib_h.m4 $(top_srcdir)/m4/stpcpy.m4 \ $(top_srcdir)/m4/strcase.m4 $(top_srcdir)/m4/strcasestr.m4 \ $(top_srcdir)/m4/strchrnul.m4 $(top_srcdir)/m4/strdup.m4 \ $(top_srcdir)/m4/strerror.m4 $(top_srcdir)/m4/string_h.m4 \ $(top_srcdir)/m4/strings_h.m4 $(top_srcdir)/m4/strsep.m4 \ $(top_srcdir)/m4/strverscmp.m4 $(top_srcdir)/m4/sys_file_h.m4 \ $(top_srcdir)/m4/sys_random_h.m4 \ $(top_srcdir)/m4/sys_socket_h.m4 \ $(top_srcdir)/m4/sys_stat_h.m4 $(top_srcdir)/m4/sys_time_h.m4 \ $(top_srcdir)/m4/sys_types_h.m4 $(top_srcdir)/m4/sys_wait_h.m4 \ $(top_srcdir)/m4/tempname.m4 $(top_srcdir)/m4/threadlib.m4 \ $(top_srcdir)/m4/time_h.m4 $(top_srcdir)/m4/time_r.m4 \ $(top_srcdir)/m4/time_rz.m4 $(top_srcdir)/m4/timegm.m4 \ $(top_srcdir)/m4/timespec.m4 $(top_srcdir)/m4/tm_gmtoff.m4 \ $(top_srcdir)/m4/tmpdir.m4 $(top_srcdir)/m4/tzset.m4 \ $(top_srcdir)/m4/ungetc.m4 $(top_srcdir)/m4/unistd-safer.m4 \ $(top_srcdir)/m4/unistd_h.m4 $(top_srcdir)/m4/unlink.m4 \ $(top_srcdir)/m4/unlocked-io.m4 $(top_srcdir)/m4/utime.m4 \ $(top_srcdir)/m4/utime_h.m4 $(top_srcdir)/m4/utimens.m4 \ $(top_srcdir)/m4/utimes.m4 \ $(top_srcdir)/m4/vasnprintf-posix.m4 \ $(top_srcdir)/m4/vasnprintf.m4 \ $(top_srcdir)/m4/vasprintf-posix.m4 \ $(top_srcdir)/m4/vasprintf.m4 $(top_srcdir)/m4/version-etc.m4 \ $(top_srcdir)/m4/vfprintf-posix.m4 \ $(top_srcdir)/m4/visibility.m4 \ $(top_srcdir)/m4/wait-process.m4 $(top_srcdir)/m4/waitpid.m4 \ $(top_srcdir)/m4/warn-on-use.m4 $(top_srcdir)/m4/wchar_h.m4 \ $(top_srcdir)/m4/wchar_t.m4 $(top_srcdir)/m4/wcrtomb.m4 \ $(top_srcdir)/m4/wctob.m4 $(top_srcdir)/m4/wctomb.m4 \ $(top_srcdir)/m4/wctype_h.m4 $(top_srcdir)/m4/wint_t.m4 \ $(top_srcdir)/m4/write.m4 $(top_srcdir)/m4/xalloc.m4 \ $(top_srcdir)/m4/xsize.m4 $(top_srcdir)/m4/year2038.m4 \ $(top_srcdir)/m4/zzgnulib.m4 $(top_srcdir)/configure.ac am__configure_deps = $(am__aclocal_m4_deps) $(CONFIGURE_DEPENDENCIES) \ $(ACLOCAL_M4) DIST_COMMON = $(srcdir)/Makefile.am $(include_HEADERS) \ $(am__DIST_COMMON) mkinstalldirs = $(install_sh) -d CONFIG_HEADER = config.h CONFIG_CLEAN_FILES = CONFIG_CLEAN_VPATH_FILES = am__vpath_adj_setup = srcdirstrip=`echo "$(srcdir)" | sed 's|.|.|g'`; am__vpath_adj = case $$p in \ $(srcdir)/*) f=`echo "$$p" | sed "s|^$$srcdirstrip/||"`;; \ *) f=$$p;; \ esac; am__strip_dir = f=`echo $$p | sed -e 's|^.*/||'`; am__install_max = 40 am__nobase_strip_setup = \ srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*|]/\\\\&/g'` am__nobase_strip = \ for p in $$list; do echo "$$p"; done | sed -e "s|$$srcdirstrip/||" am__nobase_list = $(am__nobase_strip_setup); \ for p in $$list; do echo "$$p $$p"; done | \ sed "s| $$srcdirstrip/| |;"' / .*\//!s/ .*/ ./; s,\( .*\)/[^/]*$$,\1,' | \ $(AWK) 'BEGIN { files["."] = "" } { files[$$2] = files[$$2] " " $$1; \ if (++n[$$2] == $(am__install_max)) \ { print $$2, files[$$2]; n[$$2] = 0; files[$$2] = "" } } \ END { for (dir in files) print dir, files[dir] }' am__base_list = \ sed '$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;$$!N;s/\n/ /g' | \ sed '$$!N;$$!N;$$!N;$$!N;s/\n/ /g' am__uninstall_files_from_dir = { \ test -z "$$files" \ || { test ! -d "$$dir" && test ! -f "$$dir" && test ! -r "$$dir"; } \ || { echo " ( cd '$$dir' && rm -f" $$files ")"; \ $(am__cd) "$$dir" && rm -f $$files; }; \ } am__installdirs = "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)" LTLIBRARIES = $(lib_LTLIBRARIES) am__DEPENDENCIES_1 = @CRYPT_TRUE@am__DEPENDENCIES_2 = $(am__DEPENDENCIES_1) @REMOTE_DESCRIPTORS_TRUE@am__DEPENDENCIES_3 = $(am__DEPENDENCIES_1) @UUID_TYPE_TRUE@am__DEPENDENCIES_4 = $(am__DEPENDENCIES_1) librec_la_DEPENDENCIES = $(top_builddir)/lib/librecutils.la \ $(am__DEPENDENCIES_1) $(am__DEPENDENCIES_2) \ $(am__DEPENDENCIES_3) $(am__DEPENDENCIES_4) am__librec_la_SOURCES_DIST = rec.c rec-mset.c rec-utils.h rec-utils.c \ rec-comment.c rec-field-name.c rec-field.c rec-record.c \ rec-rset.c rec-db.c rec-parser.c rec-writer.c rec-int.c \ rec-sex-parser.h rec-sex-parser.c rec-sex-ast.h rec-sex-ast.c \ rec-sex-tab.y rec-sex-lex.l rec-sex.c rec-fex.c rec-types.c \ rec-buf.c rec-aggregate.c rec-crypt.c rec-crypt-dummy.c @CRYPT_TRUE@am__objects_1 = rec-crypt.lo @CRYPT_FALSE@am__objects_2 = rec-crypt-dummy.lo am_librec_la_OBJECTS = rec.lo rec-mset.lo rec-utils.lo rec-comment.lo \ rec-field-name.lo rec-field.lo rec-record.lo rec-rset.lo \ rec-db.lo rec-parser.lo rec-writer.lo rec-int.lo \ rec-sex-parser.lo rec-sex-ast.lo rec-sex-tab.lo rec-sex-lex.lo \ rec-sex.lo rec-fex.lo rec-types.lo rec-buf.lo rec-aggregate.lo \ $(am__objects_1) $(am__objects_2) librec_la_OBJECTS = $(am_librec_la_OBJECTS) AM_V_lt = $(am__v_lt_@AM_V@) am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@) am__v_lt_0 = --silent am__v_lt_1 = librec_la_LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(librec_la_LDFLAGS) $(LDFLAGS) -o $@ AM_V_P = $(am__v_P_@AM_V@) am__v_P_ = $(am__v_P_@AM_DEFAULT_V@) am__v_P_0 = false am__v_P_1 = : AM_V_GEN = $(am__v_GEN_@AM_V@) am__v_GEN_ = $(am__v_GEN_@AM_DEFAULT_V@) am__v_GEN_0 = @echo " GEN " $@; am__v_GEN_1 = AM_V_at = $(am__v_at_@AM_V@) am__v_at_ = $(am__v_at_@AM_DEFAULT_V@) am__v_at_0 = @ am__v_at_1 = DEFAULT_INCLUDES = -I.@am__isrc@ depcomp = $(SHELL) $(top_srcdir)/build-aux/depcomp am__maybe_remake_depfiles = depfiles am__depfiles_remade = ./$(DEPDIR)/rec-aggregate.Plo \ ./$(DEPDIR)/rec-buf.Plo ./$(DEPDIR)/rec-comment.Plo \ ./$(DEPDIR)/rec-crypt-dummy.Plo ./$(DEPDIR)/rec-crypt.Plo \ ./$(DEPDIR)/rec-db.Plo ./$(DEPDIR)/rec-fex.Plo \ ./$(DEPDIR)/rec-field-name.Plo ./$(DEPDIR)/rec-field.Plo \ ./$(DEPDIR)/rec-int.Plo ./$(DEPDIR)/rec-mset.Plo \ ./$(DEPDIR)/rec-parser.Plo ./$(DEPDIR)/rec-record.Plo \ ./$(DEPDIR)/rec-rset.Plo ./$(DEPDIR)/rec-sex-ast.Plo \ ./$(DEPDIR)/rec-sex-lex.Plo ./$(DEPDIR)/rec-sex-parser.Plo \ ./$(DEPDIR)/rec-sex-tab.Plo ./$(DEPDIR)/rec-sex.Plo \ ./$(DEPDIR)/rec-types.Plo ./$(DEPDIR)/rec-utils.Plo \ ./$(DEPDIR)/rec-writer.Plo ./$(DEPDIR)/rec.Plo am__mv = mv -f COMPILE = $(CC) $(DEFS) $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) \ $(CPPFLAGS) $(AM_CFLAGS) $(CFLAGS) LTCOMPILE = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(CC) $(DEFS) \ $(DEFAULT_INCLUDES) $(INCLUDES) $(AM_CPPFLAGS) $(CPPFLAGS) \ $(AM_CFLAGS) $(CFLAGS) AM_V_CC = $(am__v_CC_@AM_V@) am__v_CC_ = $(am__v_CC_@AM_DEFAULT_V@) am__v_CC_0 = @echo " CC " $@; am__v_CC_1 = CCLD = $(CC) LINK = $(LIBTOOL) $(AM_V_lt) --tag=CC $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=link $(CCLD) $(AM_CFLAGS) $(CFLAGS) \ $(AM_LDFLAGS) $(LDFLAGS) -o $@ AM_V_CCLD = $(am__v_CCLD_@AM_V@) am__v_CCLD_ = $(am__v_CCLD_@AM_DEFAULT_V@) am__v_CCLD_0 = @echo " CCLD " $@; am__v_CCLD_1 = LEXCOMPILE = $(LEX) $(AM_LFLAGS) $(LFLAGS) LTLEXCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(LEX) $(AM_LFLAGS) $(LFLAGS) AM_V_LEX = $(am__v_LEX_@AM_V@) am__v_LEX_ = $(am__v_LEX_@AM_DEFAULT_V@) am__v_LEX_0 = @echo " LEX " $@; am__v_LEX_1 = YLWRAP = $(top_srcdir)/build-aux/ylwrap am__yacc_c2h = sed -e s/cc$$/hh/ -e s/cpp$$/hpp/ -e s/cxx$$/hxx/ \ -e s/c++$$/h++/ -e s/c$$/h/ YACCCOMPILE = $(YACC) $(AM_YFLAGS) $(YFLAGS) LTYACCCOMPILE = $(LIBTOOL) $(AM_V_lt) $(AM_LIBTOOLFLAGS) \ $(LIBTOOLFLAGS) --mode=compile $(YACC) $(AM_YFLAGS) $(YFLAGS) AM_V_YACC = $(am__v_YACC_@AM_V@) am__v_YACC_ = $(am__v_YACC_@AM_DEFAULT_V@) am__v_YACC_0 = @echo " YACC " $@; am__v_YACC_1 = SOURCES = $(librec_la_SOURCES) DIST_SOURCES = $(am__librec_la_SOURCES_DIST) am__can_run_installinfo = \ case $$AM_UPDATE_INFO_DIR in \ n|no|NO) false;; \ *) (install-info --version) >/dev/null 2>&1;; \ esac HEADERS = $(include_HEADERS) am__tagged_files = $(HEADERS) $(SOURCES) $(TAGS_FILES) $(LISP) \ config.h.in # Read a list of newline-separated strings from the standard input, # and print each of them once, without duplicates. Input order is # *not* preserved. am__uniquify_input = $(AWK) '\ BEGIN { nonempty = 0; } \ { items[$$0] = 1; nonempty = 1; } \ END { if (nonempty) { for (i in items) print i; }; } \ ' # Make sure the list of sources is unique. This is necessary because, # e.g., the same source file might be shared among _SOURCES variables # for different programs/libraries. am__define_uniq_tagged_files = \ list='$(am__tagged_files)'; \ unique=`for i in $$list; do \ if test -f "$$i"; then echo $$i; else echo $(srcdir)/$$i; fi; \ done | $(am__uniquify_input)` am__DIST_COMMON = $(srcdir)/Makefile.in $(srcdir)/config.h.in \ $(top_srcdir)/build-aux/depcomp $(top_srcdir)/build-aux/ylwrap \ rec-sex-lex.c rec-sex-tab.c rec-sex-tab.h DISTFILES = $(DIST_COMMON) $(DIST_SOURCES) $(TEXINFOS) $(EXTRA_DIST) ACLOCAL = @ACLOCAL@ ALLOCA = @ALLOCA@ ALLOCA_H = @ALLOCA_H@ AMTAR = @AMTAR@ AM_DEFAULT_VERBOSITY = @AM_DEFAULT_VERBOSITY@ APPLE_UNIVERSAL_BUILD = @APPLE_UNIVERSAL_BUILD@ AR = @AR@ ARFLAGS = @ARFLAGS@ ASM_SYMBOL_PREFIX = @ASM_SYMBOL_PREFIX@ AUTOCONF = @AUTOCONF@ AUTOHEADER = @AUTOHEADER@ AUTOMAKE = @AUTOMAKE@ AWK = @AWK@ BASH_HEADERS = @BASH_HEADERS@ BITSIZEOF_PTRDIFF_T = @BITSIZEOF_PTRDIFF_T@ BITSIZEOF_SIG_ATOMIC_T = @BITSIZEOF_SIG_ATOMIC_T@ BITSIZEOF_SIZE_T = @BITSIZEOF_SIZE_T@ BITSIZEOF_WCHAR_T = @BITSIZEOF_WCHAR_T@ BITSIZEOF_WINT_T = @BITSIZEOF_WINT_T@ CC = @CC@ CCDEPMODE = @CCDEPMODE@ CFLAGS = @CFLAGS@ CFLAG_VISIBILITY = @CFLAG_VISIBILITY@ CHECK_CFLAGS = @CHECK_CFLAGS@ CHECK_LIBS = @CHECK_LIBS@ CONFIG_INCLUDE = @CONFIG_INCLUDE@ CPP = @CPP@ CPPFLAGS = @CPPFLAGS@ CSCOPE = @CSCOPE@ CTAGS = @CTAGS@ CURLLIBS = @CURLLIBS@ CYGPATH_W = @CYGPATH_W@ DEFS = @DEFS@ DEPDIR = @DEPDIR@ DLLTOOL = @DLLTOOL@ DSYMUTIL = @DSYMUTIL@ DUMPBIN = @DUMPBIN@ ECHO_C = @ECHO_C@ ECHO_N = @ECHO_N@ ECHO_T = @ECHO_T@ EGREP = @EGREP@ EMULTIHOP_HIDDEN = @EMULTIHOP_HIDDEN@ EMULTIHOP_VALUE = @EMULTIHOP_VALUE@ ENOLINK_HIDDEN = @ENOLINK_HIDDEN@ ENOLINK_VALUE = @ENOLINK_VALUE@ EOVERFLOW_HIDDEN = @EOVERFLOW_HIDDEN@ EOVERFLOW_VALUE = @EOVERFLOW_VALUE@ ERRNO_H = @ERRNO_H@ ETAGS = @ETAGS@ EXEEXT = @EXEEXT@ FGREP = @FGREP@ FLOAT_H = @FLOAT_H@ FLOOR_LIBM = @FLOOR_LIBM@ GETOPT_CDEFS_H = @GETOPT_CDEFS_H@ GETOPT_H = @GETOPT_H@ GETTEXT_MACRO_VERSION = @GETTEXT_MACRO_VERSION@ GLIB_CFLAGS = @GLIB_CFLAGS@ GLIB_LIBS = @GLIB_LIBS@ GL_CFLAG_ALLOW_WARNINGS = @GL_CFLAG_ALLOW_WARNINGS@ GL_CFLAG_GNULIB_WARNINGS = @GL_CFLAG_GNULIB_WARNINGS@ GL_GNULIB_ACCESS = @GL_GNULIB_ACCESS@ GL_GNULIB_ACOSF = @GL_GNULIB_ACOSF@ GL_GNULIB_ACOSL = @GL_GNULIB_ACOSL@ GL_GNULIB_ALIGNED_ALLOC = @GL_GNULIB_ALIGNED_ALLOC@ GL_GNULIB_ALPHASORT = @GL_GNULIB_ALPHASORT@ GL_GNULIB_ASINF = @GL_GNULIB_ASINF@ GL_GNULIB_ASINL = @GL_GNULIB_ASINL@ GL_GNULIB_ATAN2F = @GL_GNULIB_ATAN2F@ GL_GNULIB_ATANF = @GL_GNULIB_ATANF@ GL_GNULIB_ATANL = @GL_GNULIB_ATANL@ GL_GNULIB_ATOLL = @GL_GNULIB_ATOLL@ GL_GNULIB_BTOWC = @GL_GNULIB_BTOWC@ GL_GNULIB_CALLOC_GNU = @GL_GNULIB_CALLOC_GNU@ GL_GNULIB_CALLOC_POSIX = @GL_GNULIB_CALLOC_POSIX@ GL_GNULIB_CANONICALIZE_FILE_NAME = @GL_GNULIB_CANONICALIZE_FILE_NAME@ GL_GNULIB_CBRT = @GL_GNULIB_CBRT@ GL_GNULIB_CBRTF = @GL_GNULIB_CBRTF@ GL_GNULIB_CBRTL = @GL_GNULIB_CBRTL@ GL_GNULIB_CEIL = @GL_GNULIB_CEIL@ GL_GNULIB_CEILF = @GL_GNULIB_CEILF@ GL_GNULIB_CEILL = @GL_GNULIB_CEILL@ GL_GNULIB_CHDIR = @GL_GNULIB_CHDIR@ GL_GNULIB_CHOWN = @GL_GNULIB_CHOWN@ GL_GNULIB_CLOSE = @GL_GNULIB_CLOSE@ GL_GNULIB_CLOSEDIR = @GL_GNULIB_CLOSEDIR@ GL_GNULIB_COPYSIGN = @GL_GNULIB_COPYSIGN@ GL_GNULIB_COPYSIGNF = @GL_GNULIB_COPYSIGNF@ GL_GNULIB_COPYSIGNL = @GL_GNULIB_COPYSIGNL@ GL_GNULIB_COPY_FILE_RANGE = @GL_GNULIB_COPY_FILE_RANGE@ GL_GNULIB_COSF = @GL_GNULIB_COSF@ GL_GNULIB_COSHF = @GL_GNULIB_COSHF@ GL_GNULIB_COSL = @GL_GNULIB_COSL@ GL_GNULIB_CREAT = @GL_GNULIB_CREAT@ GL_GNULIB_CTIME = @GL_GNULIB_CTIME@ GL_GNULIB_DIRFD = @GL_GNULIB_DIRFD@ GL_GNULIB_DPRINTF = @GL_GNULIB_DPRINTF@ GL_GNULIB_DUP = @GL_GNULIB_DUP@ GL_GNULIB_DUP2 = @GL_GNULIB_DUP2@ GL_GNULIB_DUP3 = @GL_GNULIB_DUP3@ GL_GNULIB_DUPLOCALE = @GL_GNULIB_DUPLOCALE@ GL_GNULIB_ENVIRON = @GL_GNULIB_ENVIRON@ GL_GNULIB_EUIDACCESS = @GL_GNULIB_EUIDACCESS@ GL_GNULIB_EXECL = @GL_GNULIB_EXECL@ GL_GNULIB_EXECLE = @GL_GNULIB_EXECLE@ GL_GNULIB_EXECLP = @GL_GNULIB_EXECLP@ GL_GNULIB_EXECV = @GL_GNULIB_EXECV@ GL_GNULIB_EXECVE = @GL_GNULIB_EXECVE@ GL_GNULIB_EXECVP = @GL_GNULIB_EXECVP@ GL_GNULIB_EXECVPE = @GL_GNULIB_EXECVPE@ GL_GNULIB_EXP2 = @GL_GNULIB_EXP2@ GL_GNULIB_EXP2F = @GL_GNULIB_EXP2F@ GL_GNULIB_EXP2L = @GL_GNULIB_EXP2L@ GL_GNULIB_EXPF = @GL_GNULIB_EXPF@ GL_GNULIB_EXPL = @GL_GNULIB_EXPL@ GL_GNULIB_EXPLICIT_BZERO = @GL_GNULIB_EXPLICIT_BZERO@ GL_GNULIB_EXPM1 = @GL_GNULIB_EXPM1@ GL_GNULIB_EXPM1F = @GL_GNULIB_EXPM1F@ GL_GNULIB_EXPM1L = @GL_GNULIB_EXPM1L@ GL_GNULIB_FABSF = @GL_GNULIB_FABSF@ GL_GNULIB_FABSL = @GL_GNULIB_FABSL@ GL_GNULIB_FACCESSAT = @GL_GNULIB_FACCESSAT@ GL_GNULIB_FCHDIR = @GL_GNULIB_FCHDIR@ GL_GNULIB_FCHMODAT = @GL_GNULIB_FCHMODAT@ GL_GNULIB_FCHOWNAT = @GL_GNULIB_FCHOWNAT@ GL_GNULIB_FCLOSE = @GL_GNULIB_FCLOSE@ GL_GNULIB_FCNTL = @GL_GNULIB_FCNTL@ GL_GNULIB_FDATASYNC = @GL_GNULIB_FDATASYNC@ GL_GNULIB_FDOPEN = @GL_GNULIB_FDOPEN@ GL_GNULIB_FDOPENDIR = @GL_GNULIB_FDOPENDIR@ GL_GNULIB_FFLUSH = @GL_GNULIB_FFLUSH@ GL_GNULIB_FFS = @GL_GNULIB_FFS@ GL_GNULIB_FFSL = @GL_GNULIB_FFSL@ GL_GNULIB_FFSLL = @GL_GNULIB_FFSLL@ GL_GNULIB_FGETC = @GL_GNULIB_FGETC@ GL_GNULIB_FGETS = @GL_GNULIB_FGETS@ GL_GNULIB_FLOCK = @GL_GNULIB_FLOCK@ GL_GNULIB_FLOOR = @GL_GNULIB_FLOOR@ GL_GNULIB_FLOORF = @GL_GNULIB_FLOORF@ GL_GNULIB_FLOORL = @GL_GNULIB_FLOORL@ GL_GNULIB_FMA = @GL_GNULIB_FMA@ GL_GNULIB_FMAF = @GL_GNULIB_FMAF@ GL_GNULIB_FMAL = @GL_GNULIB_FMAL@ GL_GNULIB_FMOD = @GL_GNULIB_FMOD@ GL_GNULIB_FMODF = @GL_GNULIB_FMODF@ GL_GNULIB_FMODL = @GL_GNULIB_FMODL@ GL_GNULIB_FOPEN = @GL_GNULIB_FOPEN@ GL_GNULIB_FOPEN_GNU = @GL_GNULIB_FOPEN_GNU@ GL_GNULIB_FPRINTF = @GL_GNULIB_FPRINTF@ GL_GNULIB_FPRINTF_POSIX = @GL_GNULIB_FPRINTF_POSIX@ GL_GNULIB_FPURGE = @GL_GNULIB_FPURGE@ GL_GNULIB_FPUTC = @GL_GNULIB_FPUTC@ GL_GNULIB_FPUTS = @GL_GNULIB_FPUTS@ GL_GNULIB_FREAD = @GL_GNULIB_FREAD@ GL_GNULIB_FREE_POSIX = @GL_GNULIB_FREE_POSIX@ GL_GNULIB_FREOPEN = @GL_GNULIB_FREOPEN@ GL_GNULIB_FREXP = @GL_GNULIB_FREXP@ GL_GNULIB_FREXPF = @GL_GNULIB_FREXPF@ GL_GNULIB_FREXPL = @GL_GNULIB_FREXPL@ GL_GNULIB_FSCANF = @GL_GNULIB_FSCANF@ GL_GNULIB_FSEEK = @GL_GNULIB_FSEEK@ GL_GNULIB_FSEEKO = @GL_GNULIB_FSEEKO@ GL_GNULIB_FSTAT = @GL_GNULIB_FSTAT@ GL_GNULIB_FSTATAT = @GL_GNULIB_FSTATAT@ GL_GNULIB_FSYNC = @GL_GNULIB_FSYNC@ GL_GNULIB_FTELL = @GL_GNULIB_FTELL@ GL_GNULIB_FTELLO = @GL_GNULIB_FTELLO@ GL_GNULIB_FTRUNCATE = @GL_GNULIB_FTRUNCATE@ GL_GNULIB_FUTIMENS = @GL_GNULIB_FUTIMENS@ GL_GNULIB_FWRITE = @GL_GNULIB_FWRITE@ GL_GNULIB_GETC = @GL_GNULIB_GETC@ GL_GNULIB_GETCHAR = @GL_GNULIB_GETCHAR@ GL_GNULIB_GETCWD = @GL_GNULIB_GETCWD@ GL_GNULIB_GETDELIM = @GL_GNULIB_GETDELIM@ GL_GNULIB_GETDOMAINNAME = @GL_GNULIB_GETDOMAINNAME@ GL_GNULIB_GETDTABLESIZE = @GL_GNULIB_GETDTABLESIZE@ GL_GNULIB_GETENTROPY = @GL_GNULIB_GETENTROPY@ GL_GNULIB_GETGROUPS = @GL_GNULIB_GETGROUPS@ GL_GNULIB_GETHOSTNAME = @GL_GNULIB_GETHOSTNAME@ GL_GNULIB_GETLINE = @GL_GNULIB_GETLINE@ GL_GNULIB_GETLOADAVG = @GL_GNULIB_GETLOADAVG@ GL_GNULIB_GETLOGIN = @GL_GNULIB_GETLOGIN@ GL_GNULIB_GETLOGIN_R = @GL_GNULIB_GETLOGIN_R@ GL_GNULIB_GETOPT_POSIX = @GL_GNULIB_GETOPT_POSIX@ GL_GNULIB_GETPAGESIZE = @GL_GNULIB_GETPAGESIZE@ GL_GNULIB_GETPASS = @GL_GNULIB_GETPASS@ GL_GNULIB_GETPASS_GNU = @GL_GNULIB_GETPASS_GNU@ GL_GNULIB_GETRANDOM = @GL_GNULIB_GETRANDOM@ GL_GNULIB_GETSUBOPT = @GL_GNULIB_GETSUBOPT@ GL_GNULIB_GETTIMEOFDAY = @GL_GNULIB_GETTIMEOFDAY@ GL_GNULIB_GETUMASK = @GL_GNULIB_GETUMASK@ GL_GNULIB_GETUSERSHELL = @GL_GNULIB_GETUSERSHELL@ GL_GNULIB_GRANTPT = @GL_GNULIB_GRANTPT@ GL_GNULIB_GROUP_MEMBER = @GL_GNULIB_GROUP_MEMBER@ GL_GNULIB_HYPOT = @GL_GNULIB_HYPOT@ GL_GNULIB_HYPOTF = @GL_GNULIB_HYPOTF@ GL_GNULIB_HYPOTL = @GL_GNULIB_HYPOTL@ GL_GNULIB_ILOGB = @GL_GNULIB_ILOGB@ GL_GNULIB_ILOGBF = @GL_GNULIB_ILOGBF@ GL_GNULIB_ILOGBL = @GL_GNULIB_ILOGBL@ GL_GNULIB_IMAXABS = @GL_GNULIB_IMAXABS@ GL_GNULIB_IMAXDIV = @GL_GNULIB_IMAXDIV@ GL_GNULIB_ISATTY = @GL_GNULIB_ISATTY@ GL_GNULIB_ISFINITE = @GL_GNULIB_ISFINITE@ GL_GNULIB_ISINF = @GL_GNULIB_ISINF@ GL_GNULIB_ISNAN = @GL_GNULIB_ISNAN@ GL_GNULIB_ISNAND = @GL_GNULIB_ISNAND@ GL_GNULIB_ISNANF = @GL_GNULIB_ISNANF@ GL_GNULIB_ISNANL = @GL_GNULIB_ISNANL@ GL_GNULIB_ISWBLANK = @GL_GNULIB_ISWBLANK@ GL_GNULIB_ISWCTYPE = @GL_GNULIB_ISWCTYPE@ GL_GNULIB_ISWDIGIT = @GL_GNULIB_ISWDIGIT@ GL_GNULIB_ISWXDIGIT = @GL_GNULIB_ISWXDIGIT@ GL_GNULIB_LCHMOD = @GL_GNULIB_LCHMOD@ GL_GNULIB_LCHOWN = @GL_GNULIB_LCHOWN@ GL_GNULIB_LDEXPF = @GL_GNULIB_LDEXPF@ GL_GNULIB_LDEXPL = @GL_GNULIB_LDEXPL@ GL_GNULIB_LINK = @GL_GNULIB_LINK@ GL_GNULIB_LINKAT = @GL_GNULIB_LINKAT@ GL_GNULIB_LOCALECONV = @GL_GNULIB_LOCALECONV@ GL_GNULIB_LOCALENAME = @GL_GNULIB_LOCALENAME@ GL_GNULIB_LOCALTIME = @GL_GNULIB_LOCALTIME@ GL_GNULIB_LOG = @GL_GNULIB_LOG@ GL_GNULIB_LOG10 = @GL_GNULIB_LOG10@ GL_GNULIB_LOG10F = @GL_GNULIB_LOG10F@ GL_GNULIB_LOG10L = @GL_GNULIB_LOG10L@ GL_GNULIB_LOG1P = @GL_GNULIB_LOG1P@ GL_GNULIB_LOG1PF = @GL_GNULIB_LOG1PF@ GL_GNULIB_LOG1PL = @GL_GNULIB_LOG1PL@ GL_GNULIB_LOG2 = @GL_GNULIB_LOG2@ GL_GNULIB_LOG2F = @GL_GNULIB_LOG2F@ GL_GNULIB_LOG2L = @GL_GNULIB_LOG2L@ GL_GNULIB_LOGB = @GL_GNULIB_LOGB@ GL_GNULIB_LOGBF = @GL_GNULIB_LOGBF@ GL_GNULIB_LOGBL = @GL_GNULIB_LOGBL@ GL_GNULIB_LOGF = @GL_GNULIB_LOGF@ GL_GNULIB_LOGL = @GL_GNULIB_LOGL@ GL_GNULIB_LSEEK = @GL_GNULIB_LSEEK@ GL_GNULIB_LSTAT = @GL_GNULIB_LSTAT@ GL_GNULIB_MALLOC_GNU = @GL_GNULIB_MALLOC_GNU@ GL_GNULIB_MALLOC_POSIX = @GL_GNULIB_MALLOC_POSIX@ GL_GNULIB_MBRLEN = @GL_GNULIB_MBRLEN@ GL_GNULIB_MBRTOWC = @GL_GNULIB_MBRTOWC@ GL_GNULIB_MBSCASECMP = @GL_GNULIB_MBSCASECMP@ GL_GNULIB_MBSCASESTR = @GL_GNULIB_MBSCASESTR@ GL_GNULIB_MBSCHR = @GL_GNULIB_MBSCHR@ GL_GNULIB_MBSCSPN = @GL_GNULIB_MBSCSPN@ GL_GNULIB_MBSINIT = @GL_GNULIB_MBSINIT@ GL_GNULIB_MBSLEN = @GL_GNULIB_MBSLEN@ GL_GNULIB_MBSNCASECMP = @GL_GNULIB_MBSNCASECMP@ GL_GNULIB_MBSNLEN = @GL_GNULIB_MBSNLEN@ GL_GNULIB_MBSNRTOWCS = @GL_GNULIB_MBSNRTOWCS@ GL_GNULIB_MBSPBRK = @GL_GNULIB_MBSPBRK@ GL_GNULIB_MBSPCASECMP = @GL_GNULIB_MBSPCASECMP@ GL_GNULIB_MBSRCHR = @GL_GNULIB_MBSRCHR@ GL_GNULIB_MBSRTOWCS = @GL_GNULIB_MBSRTOWCS@ GL_GNULIB_MBSSEP = @GL_GNULIB_MBSSEP@ GL_GNULIB_MBSSPN = @GL_GNULIB_MBSSPN@ GL_GNULIB_MBSSTR = @GL_GNULIB_MBSSTR@ GL_GNULIB_MBSTOK_R = @GL_GNULIB_MBSTOK_R@ GL_GNULIB_MBTOWC = @GL_GNULIB_MBTOWC@ GL_GNULIB_MDA_ACCESS = @GL_GNULIB_MDA_ACCESS@ GL_GNULIB_MDA_CHDIR = @GL_GNULIB_MDA_CHDIR@ GL_GNULIB_MDA_CHMOD = @GL_GNULIB_MDA_CHMOD@ GL_GNULIB_MDA_CLOSE = @GL_GNULIB_MDA_CLOSE@ GL_GNULIB_MDA_CREAT = @GL_GNULIB_MDA_CREAT@ GL_GNULIB_MDA_DUP = @GL_GNULIB_MDA_DUP@ GL_GNULIB_MDA_DUP2 = @GL_GNULIB_MDA_DUP2@ GL_GNULIB_MDA_ECVT = @GL_GNULIB_MDA_ECVT@ GL_GNULIB_MDA_EXECL = @GL_GNULIB_MDA_EXECL@ GL_GNULIB_MDA_EXECLE = @GL_GNULIB_MDA_EXECLE@ GL_GNULIB_MDA_EXECLP = @GL_GNULIB_MDA_EXECLP@ GL_GNULIB_MDA_EXECV = @GL_GNULIB_MDA_EXECV@ GL_GNULIB_MDA_EXECVE = @GL_GNULIB_MDA_EXECVE@ GL_GNULIB_MDA_EXECVP = @GL_GNULIB_MDA_EXECVP@ GL_GNULIB_MDA_EXECVPE = @GL_GNULIB_MDA_EXECVPE@ GL_GNULIB_MDA_FCLOSEALL = @GL_GNULIB_MDA_FCLOSEALL@ GL_GNULIB_MDA_FCVT = @GL_GNULIB_MDA_FCVT@ GL_GNULIB_MDA_FDOPEN = @GL_GNULIB_MDA_FDOPEN@ GL_GNULIB_MDA_FILENO = @GL_GNULIB_MDA_FILENO@ GL_GNULIB_MDA_GCVT = @GL_GNULIB_MDA_GCVT@ GL_GNULIB_MDA_GETCWD = @GL_GNULIB_MDA_GETCWD@ GL_GNULIB_MDA_GETPID = @GL_GNULIB_MDA_GETPID@ GL_GNULIB_MDA_GETW = @GL_GNULIB_MDA_GETW@ GL_GNULIB_MDA_ISATTY = @GL_GNULIB_MDA_ISATTY@ GL_GNULIB_MDA_J0 = @GL_GNULIB_MDA_J0@ GL_GNULIB_MDA_J1 = @GL_GNULIB_MDA_J1@ GL_GNULIB_MDA_JN = @GL_GNULIB_MDA_JN@ GL_GNULIB_MDA_LSEEK = @GL_GNULIB_MDA_LSEEK@ GL_GNULIB_MDA_MEMCCPY = @GL_GNULIB_MDA_MEMCCPY@ GL_GNULIB_MDA_MKDIR = @GL_GNULIB_MDA_MKDIR@ GL_GNULIB_MDA_MKTEMP = @GL_GNULIB_MDA_MKTEMP@ GL_GNULIB_MDA_OPEN = @GL_GNULIB_MDA_OPEN@ GL_GNULIB_MDA_PUTENV = @GL_GNULIB_MDA_PUTENV@ GL_GNULIB_MDA_PUTW = @GL_GNULIB_MDA_PUTW@ GL_GNULIB_MDA_READ = @GL_GNULIB_MDA_READ@ GL_GNULIB_MDA_RMDIR = @GL_GNULIB_MDA_RMDIR@ GL_GNULIB_MDA_STRDUP = @GL_GNULIB_MDA_STRDUP@ GL_GNULIB_MDA_SWAB = @GL_GNULIB_MDA_SWAB@ GL_GNULIB_MDA_TEMPNAM = @GL_GNULIB_MDA_TEMPNAM@ GL_GNULIB_MDA_TZSET = @GL_GNULIB_MDA_TZSET@ GL_GNULIB_MDA_UMASK = @GL_GNULIB_MDA_UMASK@ GL_GNULIB_MDA_UNLINK = @GL_GNULIB_MDA_UNLINK@ GL_GNULIB_MDA_UTIME = @GL_GNULIB_MDA_UTIME@ GL_GNULIB_MDA_WCSDUP = @GL_GNULIB_MDA_WCSDUP@ GL_GNULIB_MDA_WRITE = @GL_GNULIB_MDA_WRITE@ GL_GNULIB_MDA_Y0 = @GL_GNULIB_MDA_Y0@ GL_GNULIB_MDA_Y1 = @GL_GNULIB_MDA_Y1@ GL_GNULIB_MDA_YN = @GL_GNULIB_MDA_YN@ GL_GNULIB_MEMCHR = @GL_GNULIB_MEMCHR@ GL_GNULIB_MEMMEM = @GL_GNULIB_MEMMEM@ GL_GNULIB_MEMPCPY = @GL_GNULIB_MEMPCPY@ GL_GNULIB_MEMRCHR = @GL_GNULIB_MEMRCHR@ GL_GNULIB_MKDIR = @GL_GNULIB_MKDIR@ GL_GNULIB_MKDIRAT = @GL_GNULIB_MKDIRAT@ GL_GNULIB_MKDTEMP = @GL_GNULIB_MKDTEMP@ GL_GNULIB_MKFIFO = @GL_GNULIB_MKFIFO@ GL_GNULIB_MKFIFOAT = @GL_GNULIB_MKFIFOAT@ GL_GNULIB_MKNOD = @GL_GNULIB_MKNOD@ GL_GNULIB_MKNODAT = @GL_GNULIB_MKNODAT@ GL_GNULIB_MKOSTEMP = @GL_GNULIB_MKOSTEMP@ GL_GNULIB_MKOSTEMPS = @GL_GNULIB_MKOSTEMPS@ GL_GNULIB_MKSTEMP = @GL_GNULIB_MKSTEMP@ GL_GNULIB_MKSTEMPS = @GL_GNULIB_MKSTEMPS@ GL_GNULIB_MKTIME = @GL_GNULIB_MKTIME@ GL_GNULIB_MODF = @GL_GNULIB_MODF@ GL_GNULIB_MODFF = @GL_GNULIB_MODFF@ GL_GNULIB_MODFL = @GL_GNULIB_MODFL@ GL_GNULIB_NANOSLEEP = @GL_GNULIB_NANOSLEEP@ GL_GNULIB_NL_LANGINFO = @GL_GNULIB_NL_LANGINFO@ GL_GNULIB_NONBLOCKING = @GL_GNULIB_NONBLOCKING@ GL_GNULIB_OBSTACK_PRINTF = @GL_GNULIB_OBSTACK_PRINTF@ GL_GNULIB_OBSTACK_PRINTF_POSIX = @GL_GNULIB_OBSTACK_PRINTF_POSIX@ GL_GNULIB_OPEN = @GL_GNULIB_OPEN@ GL_GNULIB_OPENAT = @GL_GNULIB_OPENAT@ GL_GNULIB_OPENDIR = @GL_GNULIB_OPENDIR@ GL_GNULIB_OVERRIDES_STRUCT_STAT = @GL_GNULIB_OVERRIDES_STRUCT_STAT@ GL_GNULIB_PCLOSE = @GL_GNULIB_PCLOSE@ GL_GNULIB_PERROR = @GL_GNULIB_PERROR@ GL_GNULIB_PIPE = @GL_GNULIB_PIPE@ GL_GNULIB_PIPE2 = @GL_GNULIB_PIPE2@ GL_GNULIB_POPEN = @GL_GNULIB_POPEN@ GL_GNULIB_POSIX_MEMALIGN = @GL_GNULIB_POSIX_MEMALIGN@ GL_GNULIB_POSIX_OPENPT = @GL_GNULIB_POSIX_OPENPT@ GL_GNULIB_POSIX_SPAWN = @GL_GNULIB_POSIX_SPAWN@ GL_GNULIB_POSIX_SPAWNATTR_DESTROY = @GL_GNULIB_POSIX_SPAWNATTR_DESTROY@ GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_GETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_GETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_GETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_GETSIGMASK@ GL_GNULIB_POSIX_SPAWNATTR_INIT = @GL_GNULIB_POSIX_SPAWNATTR_INIT@ GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS = @GL_GNULIB_POSIX_SPAWNATTR_SETFLAGS@ GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP = @GL_GNULIB_POSIX_SPAWNATTR_SETPGROUP@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPARAM@ GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY = @GL_GNULIB_POSIX_SPAWNATTR_SETSCHEDPOLICY@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGDEFAULT@ GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK = @GL_GNULIB_POSIX_SPAWNATTR_SETSIGMASK@ GL_GNULIB_POSIX_SPAWNP = @GL_GNULIB_POSIX_SPAWNP@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_DESTROY@ GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT = @GL_GNULIB_POSIX_SPAWN_FILE_ACTIONS_INIT@ GL_GNULIB_POWF = @GL_GNULIB_POWF@ GL_GNULIB_PREAD = @GL_GNULIB_PREAD@ GL_GNULIB_PRINTF = @GL_GNULIB_PRINTF@ GL_GNULIB_PRINTF_POSIX = @GL_GNULIB_PRINTF_POSIX@ GL_GNULIB_PTHREAD_SIGMASK = @GL_GNULIB_PTHREAD_SIGMASK@ GL_GNULIB_PTSNAME = @GL_GNULIB_PTSNAME@ GL_GNULIB_PTSNAME_R = @GL_GNULIB_PTSNAME_R@ GL_GNULIB_PUTC = @GL_GNULIB_PUTC@ GL_GNULIB_PUTCHAR = @GL_GNULIB_PUTCHAR@ GL_GNULIB_PUTENV = @GL_GNULIB_PUTENV@ GL_GNULIB_PUTS = @GL_GNULIB_PUTS@ GL_GNULIB_PWRITE = @GL_GNULIB_PWRITE@ GL_GNULIB_QSORT_R = @GL_GNULIB_QSORT_R@ GL_GNULIB_RAISE = @GL_GNULIB_RAISE@ GL_GNULIB_RANDOM = @GL_GNULIB_RANDOM@ GL_GNULIB_RANDOM_R = @GL_GNULIB_RANDOM_R@ GL_GNULIB_RAWMEMCHR = @GL_GNULIB_RAWMEMCHR@ GL_GNULIB_READ = @GL_GNULIB_READ@ GL_GNULIB_READDIR = @GL_GNULIB_READDIR@ GL_GNULIB_READLINK = @GL_GNULIB_READLINK@ GL_GNULIB_READLINKAT = @GL_GNULIB_READLINKAT@ GL_GNULIB_REALLOCARRAY = @GL_GNULIB_REALLOCARRAY@ GL_GNULIB_REALLOC_GNU = @GL_GNULIB_REALLOC_GNU@ GL_GNULIB_REALLOC_POSIX = @GL_GNULIB_REALLOC_POSIX@ GL_GNULIB_REALPATH = @GL_GNULIB_REALPATH@ GL_GNULIB_REMAINDER = @GL_GNULIB_REMAINDER@ GL_GNULIB_REMAINDERF = @GL_GNULIB_REMAINDERF@ GL_GNULIB_REMAINDERL = @GL_GNULIB_REMAINDERL@ GL_GNULIB_REMOVE = @GL_GNULIB_REMOVE@ GL_GNULIB_RENAME = @GL_GNULIB_RENAME@ GL_GNULIB_RENAMEAT = @GL_GNULIB_RENAMEAT@ GL_GNULIB_REWINDDIR = @GL_GNULIB_REWINDDIR@ GL_GNULIB_RINT = @GL_GNULIB_RINT@ GL_GNULIB_RINTF = @GL_GNULIB_RINTF@ GL_GNULIB_RINTL = @GL_GNULIB_RINTL@ GL_GNULIB_RMDIR = @GL_GNULIB_RMDIR@ GL_GNULIB_ROUND = @GL_GNULIB_ROUND@ GL_GNULIB_ROUNDF = @GL_GNULIB_ROUNDF@ GL_GNULIB_ROUNDL = @GL_GNULIB_ROUNDL@ GL_GNULIB_RPMATCH = @GL_GNULIB_RPMATCH@ GL_GNULIB_SCANDIR = @GL_GNULIB_SCANDIR@ GL_GNULIB_SCANF = @GL_GNULIB_SCANF@ GL_GNULIB_SCHED_YIELD = @GL_GNULIB_SCHED_YIELD@ GL_GNULIB_SECURE_GETENV = @GL_GNULIB_SECURE_GETENV@ GL_GNULIB_SETENV = @GL_GNULIB_SETENV@ GL_GNULIB_SETHOSTNAME = @GL_GNULIB_SETHOSTNAME@ GL_GNULIB_SETLOCALE = @GL_GNULIB_SETLOCALE@ GL_GNULIB_SETLOCALE_NULL = @GL_GNULIB_SETLOCALE_NULL@ GL_GNULIB_SIGABBREV_NP = @GL_GNULIB_SIGABBREV_NP@ GL_GNULIB_SIGACTION = @GL_GNULIB_SIGACTION@ GL_GNULIB_SIGDESCR_NP = @GL_GNULIB_SIGDESCR_NP@ GL_GNULIB_SIGNAL_H_SIGPIPE = @GL_GNULIB_SIGNAL_H_SIGPIPE@ GL_GNULIB_SIGNBIT = @GL_GNULIB_SIGNBIT@ GL_GNULIB_SIGPROCMASK = @GL_GNULIB_SIGPROCMASK@ GL_GNULIB_SINF = @GL_GNULIB_SINF@ GL_GNULIB_SINHF = @GL_GNULIB_SINHF@ GL_GNULIB_SINL = @GL_GNULIB_SINL@ GL_GNULIB_SLEEP = @GL_GNULIB_SLEEP@ GL_GNULIB_SNPRINTF = @GL_GNULIB_SNPRINTF@ GL_GNULIB_SPRINTF_POSIX = @GL_GNULIB_SPRINTF_POSIX@ GL_GNULIB_SQRTF = @GL_GNULIB_SQRTF@ GL_GNULIB_SQRTL = @GL_GNULIB_SQRTL@ GL_GNULIB_STAT = @GL_GNULIB_STAT@ GL_GNULIB_STDIO_H_NONBLOCKING = @GL_GNULIB_STDIO_H_NONBLOCKING@ GL_GNULIB_STDIO_H_SIGPIPE = @GL_GNULIB_STDIO_H_SIGPIPE@ GL_GNULIB_STPCPY = @GL_GNULIB_STPCPY@ GL_GNULIB_STPNCPY = @GL_GNULIB_STPNCPY@ GL_GNULIB_STRCASESTR = @GL_GNULIB_STRCASESTR@ GL_GNULIB_STRCHRNUL = @GL_GNULIB_STRCHRNUL@ GL_GNULIB_STRDUP = @GL_GNULIB_STRDUP@ GL_GNULIB_STRERROR = @GL_GNULIB_STRERROR@ GL_GNULIB_STRERRORNAME_NP = @GL_GNULIB_STRERRORNAME_NP@ GL_GNULIB_STRERROR_R = @GL_GNULIB_STRERROR_R@ GL_GNULIB_STRFTIME = @GL_GNULIB_STRFTIME@ GL_GNULIB_STRNCAT = @GL_GNULIB_STRNCAT@ GL_GNULIB_STRNDUP = @GL_GNULIB_STRNDUP@ GL_GNULIB_STRNLEN = @GL_GNULIB_STRNLEN@ GL_GNULIB_STRPBRK = @GL_GNULIB_STRPBRK@ GL_GNULIB_STRPTIME = @GL_GNULIB_STRPTIME@ GL_GNULIB_STRSEP = @GL_GNULIB_STRSEP@ GL_GNULIB_STRSIGNAL = @GL_GNULIB_STRSIGNAL@ GL_GNULIB_STRSTR = @GL_GNULIB_STRSTR@ GL_GNULIB_STRTOD = @GL_GNULIB_STRTOD@ GL_GNULIB_STRTOIMAX = @GL_GNULIB_STRTOIMAX@ GL_GNULIB_STRTOK_R = @GL_GNULIB_STRTOK_R@ GL_GNULIB_STRTOL = @GL_GNULIB_STRTOL@ GL_GNULIB_STRTOLD = @GL_GNULIB_STRTOLD@ GL_GNULIB_STRTOLL = @GL_GNULIB_STRTOLL@ GL_GNULIB_STRTOUL = @GL_GNULIB_STRTOUL@ GL_GNULIB_STRTOULL = @GL_GNULIB_STRTOULL@ GL_GNULIB_STRTOUMAX = @GL_GNULIB_STRTOUMAX@ GL_GNULIB_STRVERSCMP = @GL_GNULIB_STRVERSCMP@ GL_GNULIB_SYMLINK = @GL_GNULIB_SYMLINK@ GL_GNULIB_SYMLINKAT = @GL_GNULIB_SYMLINKAT@ GL_GNULIB_SYSTEM_POSIX = @GL_GNULIB_SYSTEM_POSIX@ GL_GNULIB_TANF = @GL_GNULIB_TANF@ GL_GNULIB_TANHF = @GL_GNULIB_TANHF@ GL_GNULIB_TANL = @GL_GNULIB_TANL@ GL_GNULIB_TIMEGM = @GL_GNULIB_TIMEGM@ GL_GNULIB_TIMESPEC_GET = @GL_GNULIB_TIMESPEC_GET@ GL_GNULIB_TIMESPEC_GETRES = @GL_GNULIB_TIMESPEC_GETRES@ GL_GNULIB_TIME_R = @GL_GNULIB_TIME_R@ GL_GNULIB_TIME_RZ = @GL_GNULIB_TIME_RZ@ GL_GNULIB_TMPFILE = @GL_GNULIB_TMPFILE@ GL_GNULIB_TOWCTRANS = @GL_GNULIB_TOWCTRANS@ GL_GNULIB_TRUNC = @GL_GNULIB_TRUNC@ GL_GNULIB_TRUNCATE = @GL_GNULIB_TRUNCATE@ GL_GNULIB_TRUNCF = @GL_GNULIB_TRUNCF@ GL_GNULIB_TRUNCL = @GL_GNULIB_TRUNCL@ GL_GNULIB_TTYNAME_R = @GL_GNULIB_TTYNAME_R@ GL_GNULIB_TZSET = @GL_GNULIB_TZSET@ GL_GNULIB_UNISTD_H_GETOPT = @GL_GNULIB_UNISTD_H_GETOPT@ GL_GNULIB_UNISTD_H_NONBLOCKING = @GL_GNULIB_UNISTD_H_NONBLOCKING@ GL_GNULIB_UNISTD_H_SIGPIPE = @GL_GNULIB_UNISTD_H_SIGPIPE@ GL_GNULIB_UNLINK = @GL_GNULIB_UNLINK@ GL_GNULIB_UNLINKAT = @GL_GNULIB_UNLINKAT@ GL_GNULIB_UNLOCKPT = @GL_GNULIB_UNLOCKPT@ GL_GNULIB_UNSETENV = @GL_GNULIB_UNSETENV@ GL_GNULIB_USLEEP = @GL_GNULIB_USLEEP@ GL_GNULIB_UTIME = @GL_GNULIB_UTIME@ GL_GNULIB_UTIMENSAT = @GL_GNULIB_UTIMENSAT@ GL_GNULIB_VASPRINTF = @GL_GNULIB_VASPRINTF@ GL_GNULIB_VDPRINTF = @GL_GNULIB_VDPRINTF@ GL_GNULIB_VFPRINTF = @GL_GNULIB_VFPRINTF@ GL_GNULIB_VFPRINTF_POSIX = @GL_GNULIB_VFPRINTF_POSIX@ GL_GNULIB_VFSCANF = @GL_GNULIB_VFSCANF@ GL_GNULIB_VPRINTF = @GL_GNULIB_VPRINTF@ GL_GNULIB_VPRINTF_POSIX = @GL_GNULIB_VPRINTF_POSIX@ GL_GNULIB_VSCANF = @GL_GNULIB_VSCANF@ GL_GNULIB_VSNPRINTF = @GL_GNULIB_VSNPRINTF@ GL_GNULIB_VSPRINTF_POSIX = @GL_GNULIB_VSPRINTF_POSIX@ GL_GNULIB_WAITPID = @GL_GNULIB_WAITPID@ GL_GNULIB_WCPCPY = @GL_GNULIB_WCPCPY@ GL_GNULIB_WCPNCPY = @GL_GNULIB_WCPNCPY@ GL_GNULIB_WCRTOMB = @GL_GNULIB_WCRTOMB@ GL_GNULIB_WCSCASECMP = @GL_GNULIB_WCSCASECMP@ GL_GNULIB_WCSCAT = @GL_GNULIB_WCSCAT@ GL_GNULIB_WCSCHR = @GL_GNULIB_WCSCHR@ GL_GNULIB_WCSCMP = @GL_GNULIB_WCSCMP@ GL_GNULIB_WCSCOLL = @GL_GNULIB_WCSCOLL@ GL_GNULIB_WCSCPY = @GL_GNULIB_WCSCPY@ GL_GNULIB_WCSCSPN = @GL_GNULIB_WCSCSPN@ GL_GNULIB_WCSDUP = @GL_GNULIB_WCSDUP@ GL_GNULIB_WCSFTIME = @GL_GNULIB_WCSFTIME@ GL_GNULIB_WCSLEN = @GL_GNULIB_WCSLEN@ GL_GNULIB_WCSNCASECMP = @GL_GNULIB_WCSNCASECMP@ GL_GNULIB_WCSNCAT = @GL_GNULIB_WCSNCAT@ GL_GNULIB_WCSNCMP = @GL_GNULIB_WCSNCMP@ GL_GNULIB_WCSNCPY = @GL_GNULIB_WCSNCPY@ GL_GNULIB_WCSNLEN = @GL_GNULIB_WCSNLEN@ GL_GNULIB_WCSNRTOMBS = @GL_GNULIB_WCSNRTOMBS@ GL_GNULIB_WCSPBRK = @GL_GNULIB_WCSPBRK@ GL_GNULIB_WCSRCHR = @GL_GNULIB_WCSRCHR@ GL_GNULIB_WCSRTOMBS = @GL_GNULIB_WCSRTOMBS@ GL_GNULIB_WCSSPN = @GL_GNULIB_WCSSPN@ GL_GNULIB_WCSSTR = @GL_GNULIB_WCSSTR@ GL_GNULIB_WCSTOK = @GL_GNULIB_WCSTOK@ GL_GNULIB_WCSWIDTH = @GL_GNULIB_WCSWIDTH@ GL_GNULIB_WCSXFRM = @GL_GNULIB_WCSXFRM@ GL_GNULIB_WCTOB = @GL_GNULIB_WCTOB@ GL_GNULIB_WCTOMB = @GL_GNULIB_WCTOMB@ GL_GNULIB_WCTRANS = @GL_GNULIB_WCTRANS@ GL_GNULIB_WCTYPE = @GL_GNULIB_WCTYPE@ GL_GNULIB_WCWIDTH = @GL_GNULIB_WCWIDTH@ GL_GNULIB_WMEMCHR = @GL_GNULIB_WMEMCHR@ GL_GNULIB_WMEMCMP = @GL_GNULIB_WMEMCMP@ GL_GNULIB_WMEMCPY = @GL_GNULIB_WMEMCPY@ GL_GNULIB_WMEMMOVE = @GL_GNULIB_WMEMMOVE@ GL_GNULIB_WMEMPCPY = @GL_GNULIB_WMEMPCPY@ GL_GNULIB_WMEMSET = @GL_GNULIB_WMEMSET@ GL_GNULIB_WRITE = @GL_GNULIB_WRITE@ GL_GNULIB__EXIT = @GL_GNULIB__EXIT@ GMSGFMT = @GMSGFMT@ GMSGFMT_015 = @GMSGFMT_015@ GNULIBHEADERS_OVERRIDE_WINT_T = @GNULIBHEADERS_OVERRIDE_WINT_T@ GNULIB_GETTIMEOFDAY = @GNULIB_GETTIMEOFDAY@ GREP = @GREP@ HAVE_ACOSF = @HAVE_ACOSF@ HAVE_ACOSL = @HAVE_ACOSL@ HAVE_ALIGNED_ALLOC = @HAVE_ALIGNED_ALLOC@ HAVE_ALLOCA_H = @HAVE_ALLOCA_H@ HAVE_ALPHASORT = @HAVE_ALPHASORT@ HAVE_ASINF = @HAVE_ASINF@ HAVE_ASINL = @HAVE_ASINL@ HAVE_ATAN2F = @HAVE_ATAN2F@ HAVE_ATANF = @HAVE_ATANF@ HAVE_ATANL = @HAVE_ATANL@ HAVE_ATOLL = @HAVE_ATOLL@ HAVE_BTOWC = @HAVE_BTOWC@ HAVE_C99_STDINT_H = @HAVE_C99_STDINT_H@ HAVE_CANONICALIZE_FILE_NAME = @HAVE_CANONICALIZE_FILE_NAME@ HAVE_CBRT = @HAVE_CBRT@ HAVE_CBRTF = @HAVE_CBRTF@ HAVE_CBRTL = @HAVE_CBRTL@ HAVE_CHOWN = @HAVE_CHOWN@ HAVE_CLOSEDIR = @HAVE_CLOSEDIR@ HAVE_COPYSIGN = @HAVE_COPYSIGN@ HAVE_COPYSIGNL = @HAVE_COPYSIGNL@ HAVE_COPY_FILE_RANGE = @HAVE_COPY_FILE_RANGE@ HAVE_COSF = @HAVE_COSF@ HAVE_COSHF = @HAVE_COSHF@ HAVE_COSL = @HAVE_COSL@ HAVE_CRTDEFS_H = @HAVE_CRTDEFS_H@ HAVE_DECL_ACOSL = @HAVE_DECL_ACOSL@ HAVE_DECL_ASINL = @HAVE_DECL_ASINL@ HAVE_DECL_ATANL = @HAVE_DECL_ATANL@ HAVE_DECL_CBRTF = @HAVE_DECL_CBRTF@ HAVE_DECL_CBRTL = @HAVE_DECL_CBRTL@ HAVE_DECL_CEILF = @HAVE_DECL_CEILF@ HAVE_DECL_CEILL = @HAVE_DECL_CEILL@ HAVE_DECL_COPYSIGNF = @HAVE_DECL_COPYSIGNF@ HAVE_DECL_COSL = @HAVE_DECL_COSL@ HAVE_DECL_DIRFD = @HAVE_DECL_DIRFD@ HAVE_DECL_ECVT = @HAVE_DECL_ECVT@ HAVE_DECL_ENVIRON = @HAVE_DECL_ENVIRON@ HAVE_DECL_EXECVPE = @HAVE_DECL_EXECVPE@ HAVE_DECL_EXP2 = @HAVE_DECL_EXP2@ HAVE_DECL_EXP2F = @HAVE_DECL_EXP2F@ HAVE_DECL_EXP2L = @HAVE_DECL_EXP2L@ HAVE_DECL_EXPL = @HAVE_DECL_EXPL@ HAVE_DECL_EXPM1L = @HAVE_DECL_EXPM1L@ HAVE_DECL_FCHDIR = @HAVE_DECL_FCHDIR@ HAVE_DECL_FCLOSEALL = @HAVE_DECL_FCLOSEALL@ HAVE_DECL_FCVT = @HAVE_DECL_FCVT@ HAVE_DECL_FDATASYNC = @HAVE_DECL_FDATASYNC@ HAVE_DECL_FDOPENDIR = @HAVE_DECL_FDOPENDIR@ HAVE_DECL_FLOORF = @HAVE_DECL_FLOORF@ HAVE_DECL_FLOORL = @HAVE_DECL_FLOORL@ HAVE_DECL_FPURGE = @HAVE_DECL_FPURGE@ HAVE_DECL_FREXPL = @HAVE_DECL_FREXPL@ HAVE_DECL_FSEEKO = @HAVE_DECL_FSEEKO@ HAVE_DECL_FTELLO = @HAVE_DECL_FTELLO@ HAVE_DECL_GCVT = @HAVE_DECL_GCVT@ HAVE_DECL_GETDELIM = @HAVE_DECL_GETDELIM@ HAVE_DECL_GETDOMAINNAME = @HAVE_DECL_GETDOMAINNAME@ HAVE_DECL_GETLINE = @HAVE_DECL_GETLINE@ HAVE_DECL_GETLOADAVG = @HAVE_DECL_GETLOADAVG@ HAVE_DECL_GETLOGIN = @HAVE_DECL_GETLOGIN@ HAVE_DECL_GETLOGIN_R = @HAVE_DECL_GETLOGIN_R@ HAVE_DECL_GETPAGESIZE = @HAVE_DECL_GETPAGESIZE@ HAVE_DECL_GETUSERSHELL = @HAVE_DECL_GETUSERSHELL@ HAVE_DECL_IMAXABS = @HAVE_DECL_IMAXABS@ HAVE_DECL_IMAXDIV = @HAVE_DECL_IMAXDIV@ HAVE_DECL_INITSTATE = @HAVE_DECL_INITSTATE@ HAVE_DECL_LDEXPL = @HAVE_DECL_LDEXPL@ HAVE_DECL_LOCALTIME_R = @HAVE_DECL_LOCALTIME_R@ HAVE_DECL_LOG10L = @HAVE_DECL_LOG10L@ HAVE_DECL_LOG2 = @HAVE_DECL_LOG2@ HAVE_DECL_LOG2F = @HAVE_DECL_LOG2F@ HAVE_DECL_LOG2L = @HAVE_DECL_LOG2L@ HAVE_DECL_LOGB = @HAVE_DECL_LOGB@ HAVE_DECL_LOGL = @HAVE_DECL_LOGL@ HAVE_DECL_MEMMEM = @HAVE_DECL_MEMMEM@ HAVE_DECL_MEMRCHR = @HAVE_DECL_MEMRCHR@ HAVE_DECL_OBSTACK_PRINTF = @HAVE_DECL_OBSTACK_PRINTF@ HAVE_DECL_REMAINDER = @HAVE_DECL_REMAINDER@ HAVE_DECL_REMAINDERL = @HAVE_DECL_REMAINDERL@ HAVE_DECL_RINTF = @HAVE_DECL_RINTF@ HAVE_DECL_ROUND = @HAVE_DECL_ROUND@ HAVE_DECL_ROUNDF = @HAVE_DECL_ROUNDF@ HAVE_DECL_ROUNDL = @HAVE_DECL_ROUNDL@ HAVE_DECL_SETENV = @HAVE_DECL_SETENV@ HAVE_DECL_SETHOSTNAME = @HAVE_DECL_SETHOSTNAME@ HAVE_DECL_SETSTATE = @HAVE_DECL_SETSTATE@ HAVE_DECL_SINL = @HAVE_DECL_SINL@ HAVE_DECL_SNPRINTF = @HAVE_DECL_SNPRINTF@ HAVE_DECL_SQRTL = @HAVE_DECL_SQRTL@ HAVE_DECL_STRDUP = @HAVE_DECL_STRDUP@ HAVE_DECL_STRERROR_R = @HAVE_DECL_STRERROR_R@ HAVE_DECL_STRNCASECMP = @HAVE_DECL_STRNCASECMP@ HAVE_DECL_STRNDUP = @HAVE_DECL_STRNDUP@ HAVE_DECL_STRNLEN = @HAVE_DECL_STRNLEN@ HAVE_DECL_STRSIGNAL = @HAVE_DECL_STRSIGNAL@ HAVE_DECL_STRTOIMAX = @HAVE_DECL_STRTOIMAX@ HAVE_DECL_STRTOK_R = @HAVE_DECL_STRTOK_R@ HAVE_DECL_STRTOUMAX = @HAVE_DECL_STRTOUMAX@ HAVE_DECL_TANL = @HAVE_DECL_TANL@ HAVE_DECL_TRUNC = @HAVE_DECL_TRUNC@ HAVE_DECL_TRUNCATE = @HAVE_DECL_TRUNCATE@ HAVE_DECL_TRUNCF = @HAVE_DECL_TRUNCF@ HAVE_DECL_TRUNCL = @HAVE_DECL_TRUNCL@ HAVE_DECL_TTYNAME_R = @HAVE_DECL_TTYNAME_R@ HAVE_DECL_UNSETENV = @HAVE_DECL_UNSETENV@ HAVE_DECL_VSNPRINTF = @HAVE_DECL_VSNPRINTF@ HAVE_DECL_WCSDUP = @HAVE_DECL_WCSDUP@ HAVE_DECL_WCTOB = @HAVE_DECL_WCTOB@ HAVE_DECL_WCWIDTH = @HAVE_DECL_WCWIDTH@ HAVE_DIRENT_H = @HAVE_DIRENT_H@ HAVE_DPRINTF = @HAVE_DPRINTF@ HAVE_DUP3 = @HAVE_DUP3@ HAVE_DUPLOCALE = @HAVE_DUPLOCALE@ HAVE_EUIDACCESS = @HAVE_EUIDACCESS@ HAVE_EXECVPE = @HAVE_EXECVPE@ HAVE_EXPF = @HAVE_EXPF@ HAVE_EXPL = @HAVE_EXPL@ HAVE_EXPLICIT_BZERO = @HAVE_EXPLICIT_BZERO@ HAVE_EXPM1 = @HAVE_EXPM1@ HAVE_EXPM1F = @HAVE_EXPM1F@ HAVE_FABSF = @HAVE_FABSF@ HAVE_FABSL = @HAVE_FABSL@ HAVE_FACCESSAT = @HAVE_FACCESSAT@ HAVE_FCHDIR = @HAVE_FCHDIR@ HAVE_FCHMODAT = @HAVE_FCHMODAT@ HAVE_FCHOWNAT = @HAVE_FCHOWNAT@ HAVE_FCNTL = @HAVE_FCNTL@ HAVE_FDATASYNC = @HAVE_FDATASYNC@ HAVE_FDOPENDIR = @HAVE_FDOPENDIR@ HAVE_FEATURES_H = @HAVE_FEATURES_H@ HAVE_FFS = @HAVE_FFS@ HAVE_FFSL = @HAVE_FFSL@ HAVE_FFSLL = @HAVE_FFSLL@ HAVE_FLOCK = @HAVE_FLOCK@ HAVE_FMA = @HAVE_FMA@ HAVE_FMAF = @HAVE_FMAF@ HAVE_FMAL = @HAVE_FMAL@ HAVE_FMODF = @HAVE_FMODF@ HAVE_FMODL = @HAVE_FMODL@ HAVE_FREELOCALE = @HAVE_FREELOCALE@ HAVE_FREXPF = @HAVE_FREXPF@ HAVE_FSEEKO = @HAVE_FSEEKO@ HAVE_FSTATAT = @HAVE_FSTATAT@ HAVE_FSYNC = @HAVE_FSYNC@ HAVE_FTELLO = @HAVE_FTELLO@ HAVE_FTRUNCATE = @HAVE_FTRUNCATE@ HAVE_FUTIMENS = @HAVE_FUTIMENS@ HAVE_GETDTABLESIZE = @HAVE_GETDTABLESIZE@ HAVE_GETENTROPY = @HAVE_GETENTROPY@ HAVE_GETGROUPS = @HAVE_GETGROUPS@ HAVE_GETHOSTNAME = @HAVE_GETHOSTNAME@ HAVE_GETLOGIN = @HAVE_GETLOGIN@ HAVE_GETOPT_H = @HAVE_GETOPT_H@ HAVE_GETPAGESIZE = @HAVE_GETPAGESIZE@ HAVE_GETPASS = @HAVE_GETPASS@ HAVE_GETRANDOM = @HAVE_GETRANDOM@ HAVE_GETSUBOPT = @HAVE_GETSUBOPT@ HAVE_GETTIMEOFDAY = @HAVE_GETTIMEOFDAY@ HAVE_GETUMASK = @HAVE_GETUMASK@ HAVE_GRANTPT = @HAVE_GRANTPT@ HAVE_GROUP_MEMBER = @HAVE_GROUP_MEMBER@ HAVE_HYPOTF = @HAVE_HYPOTF@ HAVE_HYPOTL = @HAVE_HYPOTL@ HAVE_ILOGB = @HAVE_ILOGB@ HAVE_ILOGBF = @HAVE_ILOGBF@ HAVE_ILOGBL = @HAVE_ILOGBL@ HAVE_IMAXDIV_T = @HAVE_IMAXDIV_T@ HAVE_INITSTATE = @HAVE_INITSTATE@ HAVE_INTTYPES_H = @HAVE_INTTYPES_H@ HAVE_ISNAND = @HAVE_ISNAND@ HAVE_ISNANF = @HAVE_ISNANF@ HAVE_ISNANL = @HAVE_ISNANL@ HAVE_ISWBLANK = @HAVE_ISWBLANK@ HAVE_ISWCNTRL = @HAVE_ISWCNTRL@ HAVE_LANGINFO_ALTMON = @HAVE_LANGINFO_ALTMON@ HAVE_LANGINFO_CODESET = @HAVE_LANGINFO_CODESET@ HAVE_LANGINFO_ERA = @HAVE_LANGINFO_ERA@ HAVE_LANGINFO_H = @HAVE_LANGINFO_H@ HAVE_LANGINFO_T_FMT_AMPM = @HAVE_LANGINFO_T_FMT_AMPM@ HAVE_LANGINFO_YESEXPR = @HAVE_LANGINFO_YESEXPR@ HAVE_LCHMOD = @HAVE_LCHMOD@ HAVE_LCHOWN = @HAVE_LCHOWN@ HAVE_LDEXPF = @HAVE_LDEXPF@ HAVE_LIBGCRYPT = @HAVE_LIBGCRYPT@ HAVE_LINK = @HAVE_LINK@ HAVE_LINKAT = @HAVE_LINKAT@ HAVE_LOG10F = @HAVE_LOG10F@ HAVE_LOG10L = @HAVE_LOG10L@ HAVE_LOG1P = @HAVE_LOG1P@ HAVE_LOG1PF = @HAVE_LOG1PF@ HAVE_LOG1PL = @HAVE_LOG1PL@ HAVE_LOGBF = @HAVE_LOGBF@ HAVE_LOGBL = @HAVE_LOGBL@ HAVE_LOGF = @HAVE_LOGF@ HAVE_LOGL = @HAVE_LOGL@ HAVE_LSTAT = @HAVE_LSTAT@ HAVE_MAX_ALIGN_T = @HAVE_MAX_ALIGN_T@ HAVE_MBRLEN = @HAVE_MBRLEN@ HAVE_MBRTOWC = @HAVE_MBRTOWC@ HAVE_MBSINIT = @HAVE_MBSINIT@ HAVE_MBSLEN = @HAVE_MBSLEN@ HAVE_MBSNRTOWCS = @HAVE_MBSNRTOWCS@ HAVE_MBSRTOWCS = @HAVE_MBSRTOWCS@ HAVE_MBTOWC = @HAVE_MBTOWC@ HAVE_MEMPCPY = @HAVE_MEMPCPY@ HAVE_MKDIRAT = @HAVE_MKDIRAT@ HAVE_MKDTEMP = @HAVE_MKDTEMP@ HAVE_MKFIFO = @HAVE_MKFIFO@ HAVE_MKFIFOAT = @HAVE_MKFIFOAT@ HAVE_MKNOD = @HAVE_MKNOD@ HAVE_MKNODAT = @HAVE_MKNODAT@ HAVE_MKOSTEMP = @HAVE_MKOSTEMP@ HAVE_MKOSTEMPS = @HAVE_MKOSTEMPS@ HAVE_MKSTEMP = @HAVE_MKSTEMP@ HAVE_MKSTEMPS = @HAVE_MKSTEMPS@ HAVE_MODFF = @HAVE_MODFF@ HAVE_MODFL = @HAVE_MODFL@ HAVE_MSVC_INVALID_PARAMETER_HANDLER = @HAVE_MSVC_INVALID_PARAMETER_HANDLER@ HAVE_NANOSLEEP = @HAVE_NANOSLEEP@ HAVE_NEWLOCALE = @HAVE_NEWLOCALE@ HAVE_NL_LANGINFO = @HAVE_NL_LANGINFO@ HAVE_OPENAT = @HAVE_OPENAT@ HAVE_OPENDIR = @HAVE_OPENDIR@ HAVE_OS_H = @HAVE_OS_H@ HAVE_PCLOSE = @HAVE_PCLOSE@ HAVE_PIPE = @HAVE_PIPE@ HAVE_PIPE2 = @HAVE_PIPE2@ HAVE_POPEN = @HAVE_POPEN@ HAVE_POSIX_MEMALIGN = @HAVE_POSIX_MEMALIGN@ HAVE_POSIX_OPENPT = @HAVE_POSIX_OPENPT@ HAVE_POSIX_SIGNALBLOCKING = @HAVE_POSIX_SIGNALBLOCKING@ HAVE_POSIX_SPAWN = @HAVE_POSIX_SPAWN@ HAVE_POSIX_SPAWNATTR_T = @HAVE_POSIX_SPAWNATTR_T@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ HAVE_POSIX_SPAWN_FILE_ACTIONS_T = @HAVE_POSIX_SPAWN_FILE_ACTIONS_T@ HAVE_POWF = @HAVE_POWF@ HAVE_PREAD = @HAVE_PREAD@ HAVE_PTHREAD_SIGMASK = @HAVE_PTHREAD_SIGMASK@ HAVE_PTSNAME = @HAVE_PTSNAME@ HAVE_PTSNAME_R = @HAVE_PTSNAME_R@ HAVE_PWRITE = @HAVE_PWRITE@ HAVE_QSORT_R = @HAVE_QSORT_R@ HAVE_RAISE = @HAVE_RAISE@ HAVE_RANDOM = @HAVE_RANDOM@ HAVE_RANDOM_H = @HAVE_RANDOM_H@ HAVE_RANDOM_R = @HAVE_RANDOM_R@ HAVE_RAWMEMCHR = @HAVE_RAWMEMCHR@ HAVE_READDIR = @HAVE_READDIR@ HAVE_READLINK = @HAVE_READLINK@ HAVE_READLINKAT = @HAVE_READLINKAT@ HAVE_REALLOCARRAY = @HAVE_REALLOCARRAY@ HAVE_REALPATH = @HAVE_REALPATH@ HAVE_REMAINDER = @HAVE_REMAINDER@ HAVE_REMAINDERF = @HAVE_REMAINDERF@ HAVE_RENAMEAT = @HAVE_RENAMEAT@ HAVE_REWINDDIR = @HAVE_REWINDDIR@ HAVE_RINT = @HAVE_RINT@ HAVE_RINTL = @HAVE_RINTL@ HAVE_RPMATCH = @HAVE_RPMATCH@ HAVE_SAME_LONG_DOUBLE_AS_DOUBLE = @HAVE_SAME_LONG_DOUBLE_AS_DOUBLE@ HAVE_SCANDIR = @HAVE_SCANDIR@ HAVE_SCHED_H = @HAVE_SCHED_H@ HAVE_SCHED_YIELD = @HAVE_SCHED_YIELD@ HAVE_SECURE_GETENV = @HAVE_SECURE_GETENV@ HAVE_SETENV = @HAVE_SETENV@ HAVE_SETHOSTNAME = @HAVE_SETHOSTNAME@ HAVE_SETSTATE = @HAVE_SETSTATE@ HAVE_SIGABBREV_NP = @HAVE_SIGABBREV_NP@ HAVE_SIGACTION = @HAVE_SIGACTION@ HAVE_SIGDESCR_NP = @HAVE_SIGDESCR_NP@ HAVE_SIGHANDLER_T = @HAVE_SIGHANDLER_T@ HAVE_SIGINFO_T = @HAVE_SIGINFO_T@ HAVE_SIGNED_SIG_ATOMIC_T = @HAVE_SIGNED_SIG_ATOMIC_T@ HAVE_SIGNED_WCHAR_T = @HAVE_SIGNED_WCHAR_T@ HAVE_SIGNED_WINT_T = @HAVE_SIGNED_WINT_T@ HAVE_SIGSET_T = @HAVE_SIGSET_T@ HAVE_SINF = @HAVE_SINF@ HAVE_SINHF = @HAVE_SINHF@ HAVE_SINL = @HAVE_SINL@ HAVE_SLEEP = @HAVE_SLEEP@ HAVE_SPAWN_H = @HAVE_SPAWN_H@ HAVE_SQRTF = @HAVE_SQRTF@ HAVE_SQRTL = @HAVE_SQRTL@ HAVE_STDINT_H = @HAVE_STDINT_H@ HAVE_STPCPY = @HAVE_STPCPY@ HAVE_STPNCPY = @HAVE_STPNCPY@ HAVE_STRCASECMP = @HAVE_STRCASECMP@ HAVE_STRCASESTR = @HAVE_STRCASESTR@ HAVE_STRCHRNUL = @HAVE_STRCHRNUL@ HAVE_STRERRORNAME_NP = @HAVE_STRERRORNAME_NP@ HAVE_STRINGS_H = @HAVE_STRINGS_H@ HAVE_STRPBRK = @HAVE_STRPBRK@ HAVE_STRPTIME = @HAVE_STRPTIME@ HAVE_STRSEP = @HAVE_STRSEP@ HAVE_STRTOD = @HAVE_STRTOD@ HAVE_STRTOL = @HAVE_STRTOL@ HAVE_STRTOLD = @HAVE_STRTOLD@ HAVE_STRTOLL = @HAVE_STRTOLL@ HAVE_STRTOUL = @HAVE_STRTOUL@ HAVE_STRTOULL = @HAVE_STRTOULL@ HAVE_STRUCT_RANDOM_DATA = @HAVE_STRUCT_RANDOM_DATA@ HAVE_STRUCT_SCHED_PARAM = @HAVE_STRUCT_SCHED_PARAM@ HAVE_STRUCT_SIGACTION_SA_SIGACTION = @HAVE_STRUCT_SIGACTION_SA_SIGACTION@ HAVE_STRUCT_TIMEVAL = @HAVE_STRUCT_TIMEVAL@ HAVE_STRVERSCMP = @HAVE_STRVERSCMP@ HAVE_SYMLINK = @HAVE_SYMLINK@ HAVE_SYMLINKAT = @HAVE_SYMLINKAT@ HAVE_SYS_BITYPES_H = @HAVE_SYS_BITYPES_H@ HAVE_SYS_CDEFS_H = @HAVE_SYS_CDEFS_H@ HAVE_SYS_FILE_H = @HAVE_SYS_FILE_H@ HAVE_SYS_INTTYPES_H = @HAVE_SYS_INTTYPES_H@ HAVE_SYS_LOADAVG_H = @HAVE_SYS_LOADAVG_H@ HAVE_SYS_PARAM_H = @HAVE_SYS_PARAM_H@ HAVE_SYS_RANDOM_H = @HAVE_SYS_RANDOM_H@ HAVE_SYS_TIME_H = @HAVE_SYS_TIME_H@ HAVE_SYS_TYPES_H = @HAVE_SYS_TYPES_H@ HAVE_TANF = @HAVE_TANF@ HAVE_TANHF = @HAVE_TANHF@ HAVE_TANL = @HAVE_TANL@ HAVE_TIMEGM = @HAVE_TIMEGM@ HAVE_TIMESPEC_GET = @HAVE_TIMESPEC_GET@ HAVE_TIMESPEC_GETRES = @HAVE_TIMESPEC_GETRES@ HAVE_TIMEZONE_T = @HAVE_TIMEZONE_T@ HAVE_TYPE_VOLATILE_SIG_ATOMIC_T = @HAVE_TYPE_VOLATILE_SIG_ATOMIC_T@ HAVE_UNISTD_H = @HAVE_UNISTD_H@ HAVE_UNLINKAT = @HAVE_UNLINKAT@ HAVE_UNLOCKPT = @HAVE_UNLOCKPT@ HAVE_USLEEP = @HAVE_USLEEP@ HAVE_UTIME = @HAVE_UTIME@ HAVE_UTIMENSAT = @HAVE_UTIMENSAT@ HAVE_UTIME_H = @HAVE_UTIME_H@ HAVE_VASPRINTF = @HAVE_VASPRINTF@ HAVE_VDPRINTF = @HAVE_VDPRINTF@ HAVE_VISIBILITY = @HAVE_VISIBILITY@ HAVE_WCHAR_H = @HAVE_WCHAR_H@ HAVE_WCHAR_T = @HAVE_WCHAR_T@ HAVE_WCPCPY = @HAVE_WCPCPY@ HAVE_WCPNCPY = @HAVE_WCPNCPY@ HAVE_WCRTOMB = @HAVE_WCRTOMB@ HAVE_WCSCASECMP = @HAVE_WCSCASECMP@ HAVE_WCSCAT = @HAVE_WCSCAT@ HAVE_WCSCHR = @HAVE_WCSCHR@ HAVE_WCSCMP = @HAVE_WCSCMP@ HAVE_WCSCOLL = @HAVE_WCSCOLL@ HAVE_WCSCPY = @HAVE_WCSCPY@ HAVE_WCSCSPN = @HAVE_WCSCSPN@ HAVE_WCSDUP = @HAVE_WCSDUP@ HAVE_WCSFTIME = @HAVE_WCSFTIME@ HAVE_WCSLEN = @HAVE_WCSLEN@ HAVE_WCSNCASECMP = @HAVE_WCSNCASECMP@ HAVE_WCSNCAT = @HAVE_WCSNCAT@ HAVE_WCSNCMP = @HAVE_WCSNCMP@ HAVE_WCSNCPY = @HAVE_WCSNCPY@ HAVE_WCSNLEN = @HAVE_WCSNLEN@ HAVE_WCSNRTOMBS = @HAVE_WCSNRTOMBS@ HAVE_WCSPBRK = @HAVE_WCSPBRK@ HAVE_WCSRCHR = @HAVE_WCSRCHR@ HAVE_WCSRTOMBS = @HAVE_WCSRTOMBS@ HAVE_WCSSPN = @HAVE_WCSSPN@ HAVE_WCSSTR = @HAVE_WCSSTR@ HAVE_WCSTOK = @HAVE_WCSTOK@ HAVE_WCSWIDTH = @HAVE_WCSWIDTH@ HAVE_WCSXFRM = @HAVE_WCSXFRM@ HAVE_WCTRANS_T = @HAVE_WCTRANS_T@ HAVE_WCTYPE_H = @HAVE_WCTYPE_H@ HAVE_WCTYPE_T = @HAVE_WCTYPE_T@ HAVE_WINSOCK2_H = @HAVE_WINSOCK2_H@ HAVE_WINT_T = @HAVE_WINT_T@ HAVE_WMEMCHR = @HAVE_WMEMCHR@ HAVE_WMEMCMP = @HAVE_WMEMCMP@ HAVE_WMEMCPY = @HAVE_WMEMCPY@ HAVE_WMEMMOVE = @HAVE_WMEMMOVE@ HAVE_WMEMPCPY = @HAVE_WMEMPCPY@ HAVE_WMEMSET = @HAVE_WMEMSET@ HAVE_XLOCALE_H = @HAVE_XLOCALE_H@ HAVE__BOOL = @HAVE__BOOL@ HAVE__EXIT = @HAVE__EXIT@ HELP2MAN = @HELP2MAN@ INCLUDE_NEXT = @INCLUDE_NEXT@ INCLUDE_NEXT_AS_FIRST_DIRECTIVE = @INCLUDE_NEXT_AS_FIRST_DIRECTIVE@ INSTALL = @INSTALL@ INSTALL_DATA = @INSTALL_DATA@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_SCRIPT = @INSTALL_SCRIPT@ INSTALL_STRIP_PROGRAM = @INSTALL_STRIP_PROGRAM@ INT32_MAX_LT_INTMAX_MAX = @INT32_MAX_LT_INTMAX_MAX@ INT64_MAX_EQ_LONG_MAX = @INT64_MAX_EQ_LONG_MAX@ INTLLIBS = @INTLLIBS@ INTL_MACOSX_LIBS = @INTL_MACOSX_LIBS@ LD = @LD@ LDFLAGS = @LDFLAGS@ LEX = @LEX@ LEXLIB = @LEXLIB@ LEX_OUTPUT_ROOT = @LEX_OUTPUT_ROOT@ LIBGCRYPT = @LIBGCRYPT@ LIBGCRYPT_PREFIX = @LIBGCRYPT_PREFIX@ LIBICONV = @LIBICONV@ LIBINTL = @LIBINTL@ LIBMULTITHREAD = @LIBMULTITHREAD@ LIBOBJS = @LIBOBJS@ LIBPMULTITHREAD = @LIBPMULTITHREAD@ LIBPTHREAD = @LIBPTHREAD@ LIBREADLINE = @LIBREADLINE@ LIBS = @LIBS@ LIBSTDTHREAD = @LIBSTDTHREAD@ LIBTHREAD = @LIBTHREAD@ LIBTOOL = @LIBTOOL@ LIB_ACL = @LIB_ACL@ LIB_CLOCK_GETTIME = @LIB_CLOCK_GETTIME@ LIB_EACCESS = @LIB_EACCESS@ LIB_GETRANDOM = @LIB_GETRANDOM@ LIB_HARD_LOCALE = @LIB_HARD_LOCALE@ LIB_MBRTOWC = @LIB_MBRTOWC@ LIB_NL_LANGINFO = @LIB_NL_LANGINFO@ LIB_POSIX_SPAWN = @LIB_POSIX_SPAWN@ LIB_SCHED_YIELD = @LIB_SCHED_YIELD@ LIB_SELINUX = @LIB_SELINUX@ LIB_SETLOCALE_NULL = @LIB_SETLOCALE_NULL@ LIMITS_H = @LIMITS_H@ LIPO = @LIPO@ LN_S = @LN_S@ LOCALCHARSET_TESTS_ENVIRONMENT = @LOCALCHARSET_TESTS_ENVIRONMENT@ LOCALENAME_ENHANCE_LOCALE_FUNCS = @LOCALENAME_ENHANCE_LOCALE_FUNCS@ LOCALE_FR = @LOCALE_FR@ LOCALE_FR_UTF8 = @LOCALE_FR_UTF8@ LOCALE_JA = @LOCALE_JA@ LOCALE_ZH_CN = @LOCALE_ZH_CN@ LTALLOCA = @LTALLOCA@ LTLIBGCRYPT = @LTLIBGCRYPT@ LTLIBICONV = @LTLIBICONV@ LTLIBINTL = @LTLIBINTL@ LTLIBMULTITHREAD = @LTLIBMULTITHREAD@ LTLIBOBJS = @LTLIBOBJS@ LTLIBREADLINE = @LTLIBREADLINE@ LTLIBTHREAD = @LTLIBTHREAD@ LT_SYS_LIBRARY_PATH = @LT_SYS_LIBRARY_PATH@ MAKEINFO = @MAKEINFO@ MANIFEST_TOOL = @MANIFEST_TOOL@ MDBLIBS = @MDBLIBS@ MDB_DATETIME = @MDB_DATETIME@ MKDIR_P = @MKDIR_P@ MSGFMT = @MSGFMT@ MSGFMT_015 = @MSGFMT_015@ MSGMERGE = @MSGMERGE@ NEXT_AS_FIRST_DIRECTIVE_DIRENT_H = @NEXT_AS_FIRST_DIRECTIVE_DIRENT_H@ NEXT_AS_FIRST_DIRECTIVE_ERRNO_H = @NEXT_AS_FIRST_DIRECTIVE_ERRNO_H@ NEXT_AS_FIRST_DIRECTIVE_FCNTL_H = @NEXT_AS_FIRST_DIRECTIVE_FCNTL_H@ NEXT_AS_FIRST_DIRECTIVE_FLOAT_H = @NEXT_AS_FIRST_DIRECTIVE_FLOAT_H@ NEXT_AS_FIRST_DIRECTIVE_GETOPT_H = @NEXT_AS_FIRST_DIRECTIVE_GETOPT_H@ NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H = @NEXT_AS_FIRST_DIRECTIVE_INTTYPES_H@ NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H = @NEXT_AS_FIRST_DIRECTIVE_LANGINFO_H@ NEXT_AS_FIRST_DIRECTIVE_LIMITS_H = @NEXT_AS_FIRST_DIRECTIVE_LIMITS_H@ NEXT_AS_FIRST_DIRECTIVE_LOCALE_H = @NEXT_AS_FIRST_DIRECTIVE_LOCALE_H@ NEXT_AS_FIRST_DIRECTIVE_MATH_H = @NEXT_AS_FIRST_DIRECTIVE_MATH_H@ NEXT_AS_FIRST_DIRECTIVE_SCHED_H = @NEXT_AS_FIRST_DIRECTIVE_SCHED_H@ NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H = @NEXT_AS_FIRST_DIRECTIVE_SELINUX_SELINUX_H@ NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H = @NEXT_AS_FIRST_DIRECTIVE_SIGNAL_H@ NEXT_AS_FIRST_DIRECTIVE_SPAWN_H = @NEXT_AS_FIRST_DIRECTIVE_SPAWN_H@ NEXT_AS_FIRST_DIRECTIVE_STDARG_H = @NEXT_AS_FIRST_DIRECTIVE_STDARG_H@ NEXT_AS_FIRST_DIRECTIVE_STDDEF_H = @NEXT_AS_FIRST_DIRECTIVE_STDDEF_H@ NEXT_AS_FIRST_DIRECTIVE_STDINT_H = @NEXT_AS_FIRST_DIRECTIVE_STDINT_H@ NEXT_AS_FIRST_DIRECTIVE_STDIO_H = @NEXT_AS_FIRST_DIRECTIVE_STDIO_H@ NEXT_AS_FIRST_DIRECTIVE_STDLIB_H = @NEXT_AS_FIRST_DIRECTIVE_STDLIB_H@ NEXT_AS_FIRST_DIRECTIVE_STRINGS_H = @NEXT_AS_FIRST_DIRECTIVE_STRINGS_H@ NEXT_AS_FIRST_DIRECTIVE_STRING_H = @NEXT_AS_FIRST_DIRECTIVE_STRING_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_FILE_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_RANDOM_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_STAT_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_TYPES_H@ NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H = @NEXT_AS_FIRST_DIRECTIVE_SYS_WAIT_H@ NEXT_AS_FIRST_DIRECTIVE_TIME_H = @NEXT_AS_FIRST_DIRECTIVE_TIME_H@ NEXT_AS_FIRST_DIRECTIVE_UNISTD_H = @NEXT_AS_FIRST_DIRECTIVE_UNISTD_H@ NEXT_AS_FIRST_DIRECTIVE_UTIME_H = @NEXT_AS_FIRST_DIRECTIVE_UTIME_H@ NEXT_AS_FIRST_DIRECTIVE_WCHAR_H = @NEXT_AS_FIRST_DIRECTIVE_WCHAR_H@ NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H = @NEXT_AS_FIRST_DIRECTIVE_WCTYPE_H@ NEXT_DIRENT_H = @NEXT_DIRENT_H@ NEXT_ERRNO_H = @NEXT_ERRNO_H@ NEXT_FCNTL_H = @NEXT_FCNTL_H@ NEXT_FLOAT_H = @NEXT_FLOAT_H@ NEXT_GETOPT_H = @NEXT_GETOPT_H@ NEXT_INTTYPES_H = @NEXT_INTTYPES_H@ NEXT_LANGINFO_H = @NEXT_LANGINFO_H@ NEXT_LIMITS_H = @NEXT_LIMITS_H@ NEXT_LOCALE_H = @NEXT_LOCALE_H@ NEXT_MATH_H = @NEXT_MATH_H@ NEXT_SCHED_H = @NEXT_SCHED_H@ NEXT_SELINUX_SELINUX_H = @NEXT_SELINUX_SELINUX_H@ NEXT_SIGNAL_H = @NEXT_SIGNAL_H@ NEXT_SPAWN_H = @NEXT_SPAWN_H@ NEXT_STDARG_H = @NEXT_STDARG_H@ NEXT_STDDEF_H = @NEXT_STDDEF_H@ NEXT_STDINT_H = @NEXT_STDINT_H@ NEXT_STDIO_H = @NEXT_STDIO_H@ NEXT_STDLIB_H = @NEXT_STDLIB_H@ NEXT_STRINGS_H = @NEXT_STRINGS_H@ NEXT_STRING_H = @NEXT_STRING_H@ NEXT_SYS_FILE_H = @NEXT_SYS_FILE_H@ NEXT_SYS_RANDOM_H = @NEXT_SYS_RANDOM_H@ NEXT_SYS_STAT_H = @NEXT_SYS_STAT_H@ NEXT_SYS_TIME_H = @NEXT_SYS_TIME_H@ NEXT_SYS_TYPES_H = @NEXT_SYS_TYPES_H@ NEXT_SYS_WAIT_H = @NEXT_SYS_WAIT_H@ NEXT_TIME_H = @NEXT_TIME_H@ NEXT_UNISTD_H = @NEXT_UNISTD_H@ NEXT_UTIME_H = @NEXT_UTIME_H@ NEXT_WCHAR_H = @NEXT_WCHAR_H@ NEXT_WCTYPE_H = @NEXT_WCTYPE_H@ NM = @NM@ NMEDIT = @NMEDIT@ OBJDUMP = @OBJDUMP@ OBJEXT = @OBJEXT@ OTOOL = @OTOOL@ OTOOL64 = @OTOOL64@ PACKAGE = @PACKAGE@ PACKAGE_BUGREPORT = @PACKAGE_BUGREPORT@ PACKAGE_NAME = @PACKAGE_NAME@ PACKAGE_STRING = @PACKAGE_STRING@ PACKAGE_TARNAME = @PACKAGE_TARNAME@ PACKAGE_URL = @PACKAGE_URL@ PACKAGE_VERSION = @PACKAGE_VERSION@ PARSE_DATETIME_BISON = @PARSE_DATETIME_BISON@ PATH_SEPARATOR = @PATH_SEPARATOR@ PKG_CONFIG = @PKG_CONFIG@ PKG_CONFIG_LIBDIR = @PKG_CONFIG_LIBDIR@ PKG_CONFIG_PATH = @PKG_CONFIG_PATH@ POSUB = @POSUB@ PRAGMA_COLUMNS = @PRAGMA_COLUMNS@ PRAGMA_SYSTEM_HEADER = @PRAGMA_SYSTEM_HEADER@ PRIPTR_PREFIX = @PRIPTR_PREFIX@ PTHREAD_H_DEFINES_STRUCT_TIMESPEC = @PTHREAD_H_DEFINES_STRUCT_TIMESPEC@ PTRDIFF_T_SUFFIX = @PTRDIFF_T_SUFFIX@ RANLIB = @RANLIB@ REPLACE_ACCESS = @REPLACE_ACCESS@ REPLACE_ACOSF = @REPLACE_ACOSF@ REPLACE_ALIGNED_ALLOC = @REPLACE_ALIGNED_ALLOC@ REPLACE_ASINF = @REPLACE_ASINF@ REPLACE_ATAN2F = @REPLACE_ATAN2F@ REPLACE_ATANF = @REPLACE_ATANF@ REPLACE_BTOWC = @REPLACE_BTOWC@ REPLACE_CALLOC_FOR_CALLOC_GNU = @REPLACE_CALLOC_FOR_CALLOC_GNU@ REPLACE_CALLOC_FOR_CALLOC_POSIX = @REPLACE_CALLOC_FOR_CALLOC_POSIX@ REPLACE_CANONICALIZE_FILE_NAME = @REPLACE_CANONICALIZE_FILE_NAME@ REPLACE_CBRTF = @REPLACE_CBRTF@ REPLACE_CBRTL = @REPLACE_CBRTL@ REPLACE_CEIL = @REPLACE_CEIL@ REPLACE_CEILF = @REPLACE_CEILF@ REPLACE_CEILL = @REPLACE_CEILL@ REPLACE_CHOWN = @REPLACE_CHOWN@ REPLACE_CLOSE = @REPLACE_CLOSE@ REPLACE_CLOSEDIR = @REPLACE_CLOSEDIR@ REPLACE_COPY_FILE_RANGE = @REPLACE_COPY_FILE_RANGE@ REPLACE_COSF = @REPLACE_COSF@ REPLACE_COSHF = @REPLACE_COSHF@ REPLACE_CREAT = @REPLACE_CREAT@ REPLACE_CTIME = @REPLACE_CTIME@ REPLACE_DIRFD = @REPLACE_DIRFD@ REPLACE_DPRINTF = @REPLACE_DPRINTF@ REPLACE_DUP = @REPLACE_DUP@ REPLACE_DUP2 = @REPLACE_DUP2@ REPLACE_DUPLOCALE = @REPLACE_DUPLOCALE@ REPLACE_EXECL = @REPLACE_EXECL@ REPLACE_EXECLE = @REPLACE_EXECLE@ REPLACE_EXECLP = @REPLACE_EXECLP@ REPLACE_EXECV = @REPLACE_EXECV@ REPLACE_EXECVE = @REPLACE_EXECVE@ REPLACE_EXECVP = @REPLACE_EXECVP@ REPLACE_EXECVPE = @REPLACE_EXECVPE@ REPLACE_EXP2 = @REPLACE_EXP2@ REPLACE_EXP2L = @REPLACE_EXP2L@ REPLACE_EXPF = @REPLACE_EXPF@ REPLACE_EXPL = @REPLACE_EXPL@ REPLACE_EXPM1 = @REPLACE_EXPM1@ REPLACE_EXPM1F = @REPLACE_EXPM1F@ REPLACE_EXPM1L = @REPLACE_EXPM1L@ REPLACE_FABSL = @REPLACE_FABSL@ REPLACE_FACCESSAT = @REPLACE_FACCESSAT@ REPLACE_FCHMODAT = @REPLACE_FCHMODAT@ REPLACE_FCHOWNAT = @REPLACE_FCHOWNAT@ REPLACE_FCLOSE = @REPLACE_FCLOSE@ REPLACE_FCNTL = @REPLACE_FCNTL@ REPLACE_FDOPEN = @REPLACE_FDOPEN@ REPLACE_FDOPENDIR = @REPLACE_FDOPENDIR@ REPLACE_FFLUSH = @REPLACE_FFLUSH@ REPLACE_FFSLL = @REPLACE_FFSLL@ REPLACE_FLOOR = @REPLACE_FLOOR@ REPLACE_FLOORF = @REPLACE_FLOORF@ REPLACE_FLOORL = @REPLACE_FLOORL@ REPLACE_FMA = @REPLACE_FMA@ REPLACE_FMAF = @REPLACE_FMAF@ REPLACE_FMAL = @REPLACE_FMAL@ REPLACE_FMOD = @REPLACE_FMOD@ REPLACE_FMODF = @REPLACE_FMODF@ REPLACE_FMODL = @REPLACE_FMODL@ REPLACE_FOPEN = @REPLACE_FOPEN@ REPLACE_FOPEN_FOR_FOPEN_GNU = @REPLACE_FOPEN_FOR_FOPEN_GNU@ REPLACE_FPRINTF = @REPLACE_FPRINTF@ REPLACE_FPURGE = @REPLACE_FPURGE@ REPLACE_FREE = @REPLACE_FREE@ REPLACE_FREELOCALE = @REPLACE_FREELOCALE@ REPLACE_FREOPEN = @REPLACE_FREOPEN@ REPLACE_FREXP = @REPLACE_FREXP@ REPLACE_FREXPF = @REPLACE_FREXPF@ REPLACE_FREXPL = @REPLACE_FREXPL@ REPLACE_FSEEK = @REPLACE_FSEEK@ REPLACE_FSEEKO = @REPLACE_FSEEKO@ REPLACE_FSTAT = @REPLACE_FSTAT@ REPLACE_FSTATAT = @REPLACE_FSTATAT@ REPLACE_FTELL = @REPLACE_FTELL@ REPLACE_FTELLO = @REPLACE_FTELLO@ REPLACE_FTRUNCATE = @REPLACE_FTRUNCATE@ REPLACE_FUTIMENS = @REPLACE_FUTIMENS@ REPLACE_GETCWD = @REPLACE_GETCWD@ REPLACE_GETDELIM = @REPLACE_GETDELIM@ REPLACE_GETDOMAINNAME = @REPLACE_GETDOMAINNAME@ REPLACE_GETDTABLESIZE = @REPLACE_GETDTABLESIZE@ REPLACE_GETGROUPS = @REPLACE_GETGROUPS@ REPLACE_GETLINE = @REPLACE_GETLINE@ REPLACE_GETLOGIN_R = @REPLACE_GETLOGIN_R@ REPLACE_GETPAGESIZE = @REPLACE_GETPAGESIZE@ REPLACE_GETPASS = @REPLACE_GETPASS@ REPLACE_GETPASS_FOR_GETPASS_GNU = @REPLACE_GETPASS_FOR_GETPASS_GNU@ REPLACE_GETRANDOM = @REPLACE_GETRANDOM@ REPLACE_GETTIMEOFDAY = @REPLACE_GETTIMEOFDAY@ REPLACE_GMTIME = @REPLACE_GMTIME@ REPLACE_HUGE_VAL = @REPLACE_HUGE_VAL@ REPLACE_HYPOT = @REPLACE_HYPOT@ REPLACE_HYPOTF = @REPLACE_HYPOTF@ REPLACE_HYPOTL = @REPLACE_HYPOTL@ REPLACE_ILOGB = @REPLACE_ILOGB@ REPLACE_ILOGBF = @REPLACE_ILOGBF@ REPLACE_ILOGBL = @REPLACE_ILOGBL@ REPLACE_INITSTATE = @REPLACE_INITSTATE@ REPLACE_ISATTY = @REPLACE_ISATTY@ REPLACE_ISFINITE = @REPLACE_ISFINITE@ REPLACE_ISINF = @REPLACE_ISINF@ REPLACE_ISNAN = @REPLACE_ISNAN@ REPLACE_ISWBLANK = @REPLACE_ISWBLANK@ REPLACE_ISWCNTRL = @REPLACE_ISWCNTRL@ REPLACE_ISWDIGIT = @REPLACE_ISWDIGIT@ REPLACE_ISWXDIGIT = @REPLACE_ISWXDIGIT@ REPLACE_ITOLD = @REPLACE_ITOLD@ REPLACE_LCHOWN = @REPLACE_LCHOWN@ REPLACE_LDEXPL = @REPLACE_LDEXPL@ REPLACE_LINK = @REPLACE_LINK@ REPLACE_LINKAT = @REPLACE_LINKAT@ REPLACE_LOCALECONV = @REPLACE_LOCALECONV@ REPLACE_LOCALTIME = @REPLACE_LOCALTIME@ REPLACE_LOCALTIME_R = @REPLACE_LOCALTIME_R@ REPLACE_LOG = @REPLACE_LOG@ REPLACE_LOG10 = @REPLACE_LOG10@ REPLACE_LOG10F = @REPLACE_LOG10F@ REPLACE_LOG10L = @REPLACE_LOG10L@ REPLACE_LOG1P = @REPLACE_LOG1P@ REPLACE_LOG1PF = @REPLACE_LOG1PF@ REPLACE_LOG1PL = @REPLACE_LOG1PL@ REPLACE_LOG2 = @REPLACE_LOG2@ REPLACE_LOG2F = @REPLACE_LOG2F@ REPLACE_LOG2L = @REPLACE_LOG2L@ REPLACE_LOGB = @REPLACE_LOGB@ REPLACE_LOGBF = @REPLACE_LOGBF@ REPLACE_LOGBL = @REPLACE_LOGBL@ REPLACE_LOGF = @REPLACE_LOGF@ REPLACE_LOGL = @REPLACE_LOGL@ REPLACE_LSEEK = @REPLACE_LSEEK@ REPLACE_LSTAT = @REPLACE_LSTAT@ REPLACE_MALLOC_FOR_MALLOC_GNU = @REPLACE_MALLOC_FOR_MALLOC_GNU@ REPLACE_MALLOC_FOR_MALLOC_POSIX = @REPLACE_MALLOC_FOR_MALLOC_POSIX@ REPLACE_MBRLEN = @REPLACE_MBRLEN@ REPLACE_MBRTOWC = @REPLACE_MBRTOWC@ REPLACE_MBSINIT = @REPLACE_MBSINIT@ REPLACE_MBSNRTOWCS = @REPLACE_MBSNRTOWCS@ REPLACE_MBSRTOWCS = @REPLACE_MBSRTOWCS@ REPLACE_MBSTATE_T = @REPLACE_MBSTATE_T@ REPLACE_MBTOWC = @REPLACE_MBTOWC@ REPLACE_MEMCHR = @REPLACE_MEMCHR@ REPLACE_MEMMEM = @REPLACE_MEMMEM@ REPLACE_MKDIR = @REPLACE_MKDIR@ REPLACE_MKFIFO = @REPLACE_MKFIFO@ REPLACE_MKFIFOAT = @REPLACE_MKFIFOAT@ REPLACE_MKNOD = @REPLACE_MKNOD@ REPLACE_MKNODAT = @REPLACE_MKNODAT@ REPLACE_MKSTEMP = @REPLACE_MKSTEMP@ REPLACE_MKTIME = @REPLACE_MKTIME@ REPLACE_MODF = @REPLACE_MODF@ REPLACE_MODFF = @REPLACE_MODFF@ REPLACE_MODFL = @REPLACE_MODFL@ REPLACE_NAN = @REPLACE_NAN@ REPLACE_NANOSLEEP = @REPLACE_NANOSLEEP@ REPLACE_NEWLOCALE = @REPLACE_NEWLOCALE@ REPLACE_NL_LANGINFO = @REPLACE_NL_LANGINFO@ REPLACE_NULL = @REPLACE_NULL@ REPLACE_OBSTACK_PRINTF = @REPLACE_OBSTACK_PRINTF@ REPLACE_OPEN = @REPLACE_OPEN@ REPLACE_OPENAT = @REPLACE_OPENAT@ REPLACE_OPENDIR = @REPLACE_OPENDIR@ REPLACE_PERROR = @REPLACE_PERROR@ REPLACE_POPEN = @REPLACE_POPEN@ REPLACE_POSIX_MEMALIGN = @REPLACE_POSIX_MEMALIGN@ REPLACE_POSIX_SPAWN = @REPLACE_POSIX_SPAWN@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDCLOSE@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2 = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDDUP2@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDFCHDIR@ REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN = @REPLACE_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN@ REPLACE_PREAD = @REPLACE_PREAD@ REPLACE_PRINTF = @REPLACE_PRINTF@ REPLACE_PTHREAD_SIGMASK = @REPLACE_PTHREAD_SIGMASK@ REPLACE_PTSNAME = @REPLACE_PTSNAME@ REPLACE_PTSNAME_R = @REPLACE_PTSNAME_R@ REPLACE_PUTENV = @REPLACE_PUTENV@ REPLACE_PWRITE = @REPLACE_PWRITE@ REPLACE_QSORT_R = @REPLACE_QSORT_R@ REPLACE_RAISE = @REPLACE_RAISE@ REPLACE_RANDOM = @REPLACE_RANDOM@ REPLACE_RANDOM_R = @REPLACE_RANDOM_R@ REPLACE_READ = @REPLACE_READ@ REPLACE_READLINK = @REPLACE_READLINK@ REPLACE_READLINKAT = @REPLACE_READLINKAT@ REPLACE_REALLOCARRAY = @REPLACE_REALLOCARRAY@ REPLACE_REALLOC_FOR_REALLOC_GNU = @REPLACE_REALLOC_FOR_REALLOC_GNU@ REPLACE_REALLOC_FOR_REALLOC_POSIX = @REPLACE_REALLOC_FOR_REALLOC_POSIX@ REPLACE_REALPATH = @REPLACE_REALPATH@ REPLACE_REMAINDER = @REPLACE_REMAINDER@ REPLACE_REMAINDERF = @REPLACE_REMAINDERF@ REPLACE_REMAINDERL = @REPLACE_REMAINDERL@ REPLACE_REMOVE = @REPLACE_REMOVE@ REPLACE_RENAME = @REPLACE_RENAME@ REPLACE_RENAMEAT = @REPLACE_RENAMEAT@ REPLACE_RINTL = @REPLACE_RINTL@ REPLACE_RMDIR = @REPLACE_RMDIR@ REPLACE_ROUND = @REPLACE_ROUND@ REPLACE_ROUNDF = @REPLACE_ROUNDF@ REPLACE_ROUNDL = @REPLACE_ROUNDL@ REPLACE_SCHED_YIELD = @REPLACE_SCHED_YIELD@ REPLACE_SETENV = @REPLACE_SETENV@ REPLACE_SETLOCALE = @REPLACE_SETLOCALE@ REPLACE_SETSTATE = @REPLACE_SETSTATE@ REPLACE_SIGNBIT = @REPLACE_SIGNBIT@ REPLACE_SIGNBIT_USING_BUILTINS = @REPLACE_SIGNBIT_USING_BUILTINS@ REPLACE_SINF = @REPLACE_SINF@ REPLACE_SINHF = @REPLACE_SINHF@ REPLACE_SLEEP = @REPLACE_SLEEP@ REPLACE_SNPRINTF = @REPLACE_SNPRINTF@ REPLACE_SPRINTF = @REPLACE_SPRINTF@ REPLACE_SQRTF = @REPLACE_SQRTF@ REPLACE_SQRTL = @REPLACE_SQRTL@ REPLACE_STAT = @REPLACE_STAT@ REPLACE_STDIO_READ_FUNCS = @REPLACE_STDIO_READ_FUNCS@ REPLACE_STDIO_WRITE_FUNCS = @REPLACE_STDIO_WRITE_FUNCS@ REPLACE_STPNCPY = @REPLACE_STPNCPY@ REPLACE_STRCASESTR = @REPLACE_STRCASESTR@ REPLACE_STRCHRNUL = @REPLACE_STRCHRNUL@ REPLACE_STRDUP = @REPLACE_STRDUP@ REPLACE_STRERROR = @REPLACE_STRERROR@ REPLACE_STRERRORNAME_NP = @REPLACE_STRERRORNAME_NP@ REPLACE_STRERROR_R = @REPLACE_STRERROR_R@ REPLACE_STRFTIME = @REPLACE_STRFTIME@ REPLACE_STRNCAT = @REPLACE_STRNCAT@ REPLACE_STRNDUP = @REPLACE_STRNDUP@ REPLACE_STRNLEN = @REPLACE_STRNLEN@ REPLACE_STRSIGNAL = @REPLACE_STRSIGNAL@ REPLACE_STRSTR = @REPLACE_STRSTR@ REPLACE_STRTOD = @REPLACE_STRTOD@ REPLACE_STRTOIMAX = @REPLACE_STRTOIMAX@ REPLACE_STRTOK_R = @REPLACE_STRTOK_R@ REPLACE_STRTOL = @REPLACE_STRTOL@ REPLACE_STRTOLD = @REPLACE_STRTOLD@ REPLACE_STRTOLL = @REPLACE_STRTOLL@ REPLACE_STRTOUL = @REPLACE_STRTOUL@ REPLACE_STRTOULL = @REPLACE_STRTOULL@ REPLACE_STRTOUMAX = @REPLACE_STRTOUMAX@ REPLACE_STRUCT_LCONV = @REPLACE_STRUCT_LCONV@ REPLACE_STRUCT_TIMEVAL = @REPLACE_STRUCT_TIMEVAL@ REPLACE_SYMLINK = @REPLACE_SYMLINK@ REPLACE_SYMLINKAT = @REPLACE_SYMLINKAT@ REPLACE_TANF = @REPLACE_TANF@ REPLACE_TANHF = @REPLACE_TANHF@ REPLACE_TIMEGM = @REPLACE_TIMEGM@ REPLACE_TMPFILE = @REPLACE_TMPFILE@ REPLACE_TOWLOWER = @REPLACE_TOWLOWER@ REPLACE_TRUNC = @REPLACE_TRUNC@ REPLACE_TRUNCATE = @REPLACE_TRUNCATE@ REPLACE_TRUNCF = @REPLACE_TRUNCF@ REPLACE_TRUNCL = @REPLACE_TRUNCL@ REPLACE_TTYNAME_R = @REPLACE_TTYNAME_R@ REPLACE_TZSET = @REPLACE_TZSET@ REPLACE_UNLINK = @REPLACE_UNLINK@ REPLACE_UNLINKAT = @REPLACE_UNLINKAT@ REPLACE_UNSETENV = @REPLACE_UNSETENV@ REPLACE_USLEEP = @REPLACE_USLEEP@ REPLACE_UTIME = @REPLACE_UTIME@ REPLACE_UTIMENSAT = @REPLACE_UTIMENSAT@ REPLACE_VASPRINTF = @REPLACE_VASPRINTF@ REPLACE_VDPRINTF = @REPLACE_VDPRINTF@ REPLACE_VFPRINTF = @REPLACE_VFPRINTF@ REPLACE_VPRINTF = @REPLACE_VPRINTF@ REPLACE_VSNPRINTF = @REPLACE_VSNPRINTF@ REPLACE_VSPRINTF = @REPLACE_VSPRINTF@ REPLACE_WCRTOMB = @REPLACE_WCRTOMB@ REPLACE_WCSFTIME = @REPLACE_WCSFTIME@ REPLACE_WCSNRTOMBS = @REPLACE_WCSNRTOMBS@ REPLACE_WCSRTOMBS = @REPLACE_WCSRTOMBS@ REPLACE_WCSTOK = @REPLACE_WCSTOK@ REPLACE_WCSWIDTH = @REPLACE_WCSWIDTH@ REPLACE_WCTOB = @REPLACE_WCTOB@ REPLACE_WCTOMB = @REPLACE_WCTOMB@ REPLACE_WCWIDTH = @REPLACE_WCWIDTH@ REPLACE_WRITE = @REPLACE_WRITE@ SED = @SED@ SELINUX_CONTEXT_H = @SELINUX_CONTEXT_H@ SELINUX_LABEL_H = @SELINUX_LABEL_H@ SET_MAKE = @SET_MAKE@ SHELL = @SHELL@ SIG_ATOMIC_T_SUFFIX = @SIG_ATOMIC_T_SUFFIX@ SIZE_T_SUFFIX = @SIZE_T_SUFFIX@ STDALIGN_H = @STDALIGN_H@ STDARG_H = @STDARG_H@ STDBOOL_H = @STDBOOL_H@ STDDEF_H = @STDDEF_H@ STDINT_H = @STDINT_H@ STRIP = @STRIP@ SYS_TIME_H_DEFINES_STRUCT_TIMESPEC = @SYS_TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_STRUCT_TIMESPEC = @TIME_H_DEFINES_STRUCT_TIMESPEC@ TIME_H_DEFINES_TIME_UTC = @TIME_H_DEFINES_TIME_UTC@ UINT32_MAX_LT_UINTMAX_MAX = @UINT32_MAX_LT_UINTMAX_MAX@ UINT64_MAX_EQ_ULONG_MAX = @UINT64_MAX_EQ_ULONG_MAX@ UNDEFINE_STRTOK_R = @UNDEFINE_STRTOK_R@ UNISTD_H_DEFINES_STRUCT_TIMESPEC = @UNISTD_H_DEFINES_STRUCT_TIMESPEC@ UNISTD_H_HAVE_SYS_RANDOM_H = @UNISTD_H_HAVE_SYS_RANDOM_H@ UNISTD_H_HAVE_WINSOCK2_H = @UNISTD_H_HAVE_WINSOCK2_H@ UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS = @UNISTD_H_HAVE_WINSOCK2_H_AND_USE_SOCKETS@ USE_ACL = @USE_ACL@ USE_NLS = @USE_NLS@ UUIDLIBS = @UUIDLIBS@ VERSION = @VERSION@ WCHAR_T_SUFFIX = @WCHAR_T_SUFFIX@ WINDOWS_64_BIT_OFF_T = @WINDOWS_64_BIT_OFF_T@ WINDOWS_64_BIT_ST_SIZE = @WINDOWS_64_BIT_ST_SIZE@ WINDOWS_STAT_INODES = @WINDOWS_STAT_INODES@ WINDOWS_STAT_TIMESPEC = @WINDOWS_STAT_TIMESPEC@ WINT_T_SUFFIX = @WINT_T_SUFFIX@ XGETTEXT = @XGETTEXT@ XGETTEXT_015 = @XGETTEXT_015@ XGETTEXT_EXTRA_OPTIONS = @XGETTEXT_EXTRA_OPTIONS@ YACC = @YACC@ YFLAGS = @YFLAGS@ abs_builddir = @abs_builddir@ abs_srcdir = @abs_srcdir@ abs_top_builddir = @abs_top_builddir@ abs_top_srcdir = @abs_top_srcdir@ ac_ct_AR = @ac_ct_AR@ ac_ct_CC = @ac_ct_CC@ ac_ct_DUMPBIN = @ac_ct_DUMPBIN@ am__include = @am__include@ am__leading_dot = @am__leading_dot@ am__quote = @am__quote@ am__tar = @am__tar@ am__untar = @am__untar@ bindir = @bindir@ build = @build@ build_alias = @build_alias@ build_cpu = @build_cpu@ build_os = @build_os@ build_vendor = @build_vendor@ builddir = @builddir@ crypt_support = @crypt_support@ datadir = @datadir@ datarootdir = @datarootdir@ docdir = @docdir@ dvidir = @dvidir@ exec_prefix = @exec_prefix@ gl_LIBOBJDEPS = @gl_LIBOBJDEPS@ gl_LIBOBJS = @gl_LIBOBJS@ gl_LTLIBOBJS = @gl_LTLIBOBJS@ gltests_LIBOBJDEPS = @gltests_LIBOBJDEPS@ gltests_LIBOBJS = @gltests_LIBOBJS@ gltests_LTLIBOBJS = @gltests_LTLIBOBJS@ gltests_WITNESS = @gltests_WITNESS@ have_uuid = @have_uuid@ host = @host@ host_alias = @host_alias@ host_cpu = @host_cpu@ host_os = @host_os@ host_vendor = @host_vendor@ htmldir = @htmldir@ includedir = @includedir@ infodir = @infodir@ install_sh = @install_sh@ libdir = @libdir@ libexecdir = @libexecdir@ localedir = @localedir@ localstatedir = @localstatedir@ mandir = @mandir@ mkdir_p = @mkdir_p@ oldincludedir = @oldincludedir@ pdfdir = @pdfdir@ prefix = @prefix@ program_transform_name = @program_transform_name@ psdir = @psdir@ runstatedir = @runstatedir@ sbindir = @sbindir@ sharedstatedir = @sharedstatedir@ srcdir = @srcdir@ sysconfdir = @sysconfdir@ target_alias = @target_alias@ top_build_prefix = @top_build_prefix@ top_builddir = @top_builddir@ top_srcdir = @top_srcdir@ lib_LTLIBRARIES = librec.la include_HEADERS = rec.h librec_la_SOURCES = rec.c rec-mset.c rec-utils.h rec-utils.c \ rec-comment.c rec-field-name.c rec-field.c rec-record.c \ rec-rset.c rec-db.c rec-parser.c rec-writer.c rec-int.c \ rec-sex-parser.h rec-sex-parser.c rec-sex-ast.h rec-sex-ast.c \ rec-sex-tab.y rec-sex-lex.l rec-sex.c rec-fex.c rec-types.c \ rec-buf.c rec-aggregate.c $(am__append_1) $(am__append_2) BUILT_SOURCES = rec-sex-tab.h AM_YFLAGS = -d AM_LFLAGS = -d AM_CFLAGS = $(am__append_3) AM_LDFLAGS = -no-undefined AM_CPPFLAGS = -I$(top_builddir)/lib -I$(top_srcdir)/lib \ -DLOCALEDIR=\"$(localedir)\" $(am__append_5) $(am__append_7) librec_la_LDFLAGS = -version-info 1:0:0 librec_la_LIBADD = $(top_builddir)/lib/librecutils.la \ $(LIB_CLOCK_GETTIME) $(am__append_4) $(am__append_6) \ $(am__append_8) all: $(BUILT_SOURCES) config.h $(MAKE) $(AM_MAKEFLAGS) all-am .SUFFIXES: .SUFFIXES: .c .l .lo .o .obj .y $(srcdir)/Makefile.in: $(srcdir)/Makefile.am $(am__configure_deps) @for dep in $?; do \ case '$(am__configure_deps)' in \ *$$dep*) \ ( cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh ) \ && { if test -f $@; then exit 0; else break; fi; }; \ exit 1;; \ esac; \ done; \ echo ' cd $(top_srcdir) && $(AUTOMAKE) --gnu src/Makefile'; \ $(am__cd) $(top_srcdir) && \ $(AUTOMAKE) --gnu src/Makefile Makefile: $(srcdir)/Makefile.in $(top_builddir)/config.status @case '$?' in \ *config.status*) \ cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh;; \ *) \ echo ' cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles)'; \ cd $(top_builddir) && $(SHELL) ./config.status $(subdir)/$@ $(am__maybe_remake_depfiles);; \ esac; $(top_builddir)/config.status: $(top_srcdir)/configure $(CONFIG_STATUS_DEPENDENCIES) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(top_srcdir)/configure: $(am__configure_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(ACLOCAL_M4): $(am__aclocal_m4_deps) cd $(top_builddir) && $(MAKE) $(AM_MAKEFLAGS) am--refresh $(am__aclocal_m4_deps): config.h: stamp-h1 @test -f $@ || rm -f stamp-h1 @test -f $@ || $(MAKE) $(AM_MAKEFLAGS) stamp-h1 stamp-h1: $(srcdir)/config.h.in $(top_builddir)/config.status @rm -f stamp-h1 cd $(top_builddir) && $(SHELL) ./config.status src/config.h $(srcdir)/config.h.in: $(am__configure_deps) ($(am__cd) $(top_srcdir) && $(AUTOHEADER)) rm -f stamp-h1 touch $@ distclean-hdr: -rm -f config.h stamp-h1 install-libLTLIBRARIES: $(lib_LTLIBRARIES) @$(NORMAL_INSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ list2=; for p in $$list; do \ if test -f $$p; then \ list2="$$list2 $$p"; \ else :; fi; \ done; \ test -z "$$list2" || { \ echo " $(MKDIR_P) '$(DESTDIR)$(libdir)'"; \ $(MKDIR_P) "$(DESTDIR)$(libdir)" || exit 1; \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 '$(DESTDIR)$(libdir)'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=install $(INSTALL) $(INSTALL_STRIP_FLAG) $$list2 "$(DESTDIR)$(libdir)"; \ } uninstall-libLTLIBRARIES: @$(NORMAL_UNINSTALL) @list='$(lib_LTLIBRARIES)'; test -n "$(libdir)" || list=; \ for p in $$list; do \ $(am__strip_dir) \ echo " $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f '$(DESTDIR)$(libdir)/$$f'"; \ $(LIBTOOL) $(AM_LIBTOOLFLAGS) $(LIBTOOLFLAGS) --mode=uninstall rm -f "$(DESTDIR)$(libdir)/$$f"; \ done clean-libLTLIBRARIES: -test -z "$(lib_LTLIBRARIES)" || rm -f $(lib_LTLIBRARIES) @list='$(lib_LTLIBRARIES)'; \ locs=`for p in $$list; do echo $$p; done | \ sed 's|^[^/]*$$|.|; s|/[^/]*$$||; s|$$|/so_locations|' | \ sort -u`; \ test -z "$$locs" || { \ echo rm -f $${locs}; \ rm -f $${locs}; \ } rec-sex-tab.h: rec-sex-tab.c @if test ! -f $@; then rm -f rec-sex-tab.c; else :; fi @if test ! -f $@; then $(MAKE) $(AM_MAKEFLAGS) rec-sex-tab.c; else :; fi librec.la: $(librec_la_OBJECTS) $(librec_la_DEPENDENCIES) $(EXTRA_librec_la_DEPENDENCIES) $(AM_V_CCLD)$(librec_la_LINK) -rpath $(libdir) $(librec_la_OBJECTS) $(librec_la_LIBADD) $(LIBS) mostlyclean-compile: -rm -f *.$(OBJEXT) distclean-compile: -rm -f *.tab.c @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-aggregate.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-buf.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-comment.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-crypt-dummy.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-crypt.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-db.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-fex.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-field-name.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-field.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-int.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-mset.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-parser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-record.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-rset.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-sex-ast.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-sex-lex.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-sex-parser.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-sex-tab.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-sex.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-types.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-utils.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec-writer.Plo@am__quote@ # am--include-marker @AMDEP_TRUE@@am__include@ @am__quote@./$(DEPDIR)/rec.Plo@am__quote@ # am--include-marker $(am__depfiles_remade): @$(MKDIR_P) $(@D) @echo '# dummy' >$@-t && $(am__mv) $@-t $@ am--depfiles: $(am__depfiles_remade) .c.o: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.o$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ $< .c.obj: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.obj$$||'`;\ @am__fastdepCC_TRUE@ $(COMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ `$(CYGPATH_W) '$<'` &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Po @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=no @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(COMPILE) -c -o $@ `$(CYGPATH_W) '$<'` .c.lo: @am__fastdepCC_TRUE@ $(AM_V_CC)depbase=`echo $@ | sed 's|[^/]*$$|$(DEPDIR)/&|;s|\.lo$$||'`;\ @am__fastdepCC_TRUE@ $(LTCOMPILE) -MT $@ -MD -MP -MF $$depbase.Tpo -c -o $@ $< &&\ @am__fastdepCC_TRUE@ $(am__mv) $$depbase.Tpo $$depbase.Plo @AMDEP_TRUE@@am__fastdepCC_FALSE@ $(AM_V_CC)source='$<' object='$@' libtool=yes @AMDEPBACKSLASH@ @AMDEP_TRUE@@am__fastdepCC_FALSE@ DEPDIR=$(DEPDIR) $(CCDEPMODE) $(depcomp) @AMDEPBACKSLASH@ @am__fastdepCC_FALSE@ $(AM_V_CC@am__nodep@)$(LTCOMPILE) -c -o $@ $< .l.c: $(AM_V_LEX)$(am__skiplex) $(SHELL) $(YLWRAP) $< $(LEX_OUTPUT_ROOT).c $@ -- $(LEXCOMPILE) .y.c: $(AM_V_YACC)$(am__skipyacc) $(SHELL) $(YLWRAP) $< y.tab.c $@ y.tab.h `echo $@ | $(am__yacc_c2h)` y.output $*.output -- $(YACCCOMPILE) mostlyclean-libtool: -rm -f *.lo clean-libtool: -rm -rf .libs _libs install-includeHEADERS: $(include_HEADERS) @$(NORMAL_INSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ if test -n "$$list"; then \ echo " $(MKDIR_P) '$(DESTDIR)$(includedir)'"; \ $(MKDIR_P) "$(DESTDIR)$(includedir)" || exit 1; \ fi; \ for p in $$list; do \ if test -f "$$p"; then d=; else d="$(srcdir)/"; fi; \ echo "$$d$$p"; \ done | $(am__base_list) | \ while read files; do \ echo " $(INSTALL_HEADER) $$files '$(DESTDIR)$(includedir)'"; \ $(INSTALL_HEADER) $$files "$(DESTDIR)$(includedir)" || exit $$?; \ done uninstall-includeHEADERS: @$(NORMAL_UNINSTALL) @list='$(include_HEADERS)'; test -n "$(includedir)" || list=; \ files=`for p in $$list; do echo $$p; done | sed -e 's|^.*/||'`; \ dir='$(DESTDIR)$(includedir)'; $(am__uninstall_files_from_dir) ID: $(am__tagged_files) $(am__define_uniq_tagged_files); mkid -fID $$unique tags: tags-am TAGS: tags tags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) set x; \ here=`pwd`; \ $(am__define_uniq_tagged_files); \ shift; \ if test -z "$(ETAGS_ARGS)$$*$$unique"; then :; else \ test -n "$$unique" || unique=$$empty_fix; \ if test $$# -gt 0; then \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ "$$@" $$unique; \ else \ $(ETAGS) $(ETAGSFLAGS) $(AM_ETAGSFLAGS) $(ETAGS_ARGS) \ $$unique; \ fi; \ fi ctags: ctags-am CTAGS: ctags ctags-am: $(TAGS_DEPENDENCIES) $(am__tagged_files) $(am__define_uniq_tagged_files); \ test -z "$(CTAGS_ARGS)$$unique" \ || $(CTAGS) $(CTAGSFLAGS) $(AM_CTAGSFLAGS) $(CTAGS_ARGS) \ $$unique GTAGS: here=`$(am__cd) $(top_builddir) && pwd` \ && $(am__cd) $(top_srcdir) \ && gtags -i $(GTAGS_ARGS) "$$here" cscopelist: cscopelist-am cscopelist-am: $(am__tagged_files) list='$(am__tagged_files)'; \ case "$(srcdir)" in \ [\\/]* | ?:[\\/]*) sdir="$(srcdir)" ;; \ *) sdir=$(subdir)/$(srcdir) ;; \ esac; \ for i in $$list; do \ if test -f "$$i"; then \ echo "$(subdir)/$$i"; \ else \ echo "$$sdir/$$i"; \ fi; \ done >> $(top_builddir)/cscope.files distclean-tags: -rm -f TAGS ID GTAGS GRTAGS GSYMS GPATH tags distdir: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) distdir-am distdir-am: $(DISTFILES) @srcdirstrip=`echo "$(srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ topsrcdirstrip=`echo "$(top_srcdir)" | sed 's/[].[^$$\\*]/\\\\&/g'`; \ list='$(DISTFILES)'; \ dist_files=`for file in $$list; do echo $$file; done | \ sed -e "s|^$$srcdirstrip/||;t" \ -e "s|^$$topsrcdirstrip/|$(top_builddir)/|;t"`; \ case $$dist_files in \ */*) $(MKDIR_P) `echo "$$dist_files" | \ sed '/\//!d;s|^|$(distdir)/|;s,/[^/]*$$,,' | \ sort -u` ;; \ esac; \ for file in $$dist_files; do \ if test -f $$file || test -d $$file; then d=.; else d=$(srcdir); fi; \ if test -d $$d/$$file; then \ dir=`echo "/$$file" | sed -e 's,/[^/]*$$,,'`; \ if test -d "$(distdir)/$$file"; then \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ if test -d $(srcdir)/$$file && test $$d != $(srcdir); then \ cp -fpR $(srcdir)/$$file "$(distdir)$$dir" || exit 1; \ find "$(distdir)/$$file" -type d ! -perm -700 -exec chmod u+rwx {} \;; \ fi; \ cp -fpR $$d/$$file "$(distdir)$$dir" || exit 1; \ else \ test -f "$(distdir)/$$file" \ || cp -p $$d/$$file "$(distdir)/$$file" \ || exit 1; \ fi; \ done check-am: all-am check: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) check-am all-am: Makefile $(LTLIBRARIES) $(HEADERS) config.h installdirs: for dir in "$(DESTDIR)$(libdir)" "$(DESTDIR)$(includedir)"; do \ test -z "$$dir" || $(MKDIR_P) "$$dir"; \ done install: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-am install-exec: $(BUILT_SOURCES) $(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data: install-data-am uninstall: uninstall-am install-am: all-am @$(MAKE) $(AM_MAKEFLAGS) install-exec-am install-data-am installcheck: installcheck-am install-strip: if test -z '$(STRIP)'; then \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ install; \ else \ $(MAKE) $(AM_MAKEFLAGS) INSTALL_PROGRAM="$(INSTALL_STRIP_PROGRAM)" \ install_sh_PROGRAM="$(INSTALL_STRIP_PROGRAM)" INSTALL_STRIP_FLAG=-s \ "INSTALL_PROGRAM_ENV=STRIPPROG='$(STRIP)'" install; \ fi mostlyclean-generic: clean-generic: distclean-generic: -test -z "$(CONFIG_CLEAN_FILES)" || rm -f $(CONFIG_CLEAN_FILES) -test . = "$(srcdir)" || test -z "$(CONFIG_CLEAN_VPATH_FILES)" || rm -f $(CONFIG_CLEAN_VPATH_FILES) maintainer-clean-generic: @echo "This command is intended for maintainers to use" @echo "it deletes files that may require special tools to rebuild." -rm -f rec-sex-lex.c -rm -f rec-sex-tab.c -rm -f rec-sex-tab.h -test -z "$(BUILT_SOURCES)" || rm -f $(BUILT_SOURCES) clean: clean-am clean-am: clean-generic clean-libLTLIBRARIES clean-libtool \ mostlyclean-am distclean: distclean-am -rm -f ./$(DEPDIR)/rec-aggregate.Plo -rm -f ./$(DEPDIR)/rec-buf.Plo -rm -f ./$(DEPDIR)/rec-comment.Plo -rm -f ./$(DEPDIR)/rec-crypt-dummy.Plo -rm -f ./$(DEPDIR)/rec-crypt.Plo -rm -f ./$(DEPDIR)/rec-db.Plo -rm -f ./$(DEPDIR)/rec-fex.Plo -rm -f ./$(DEPDIR)/rec-field-name.Plo -rm -f ./$(DEPDIR)/rec-field.Plo -rm -f ./$(DEPDIR)/rec-int.Plo -rm -f ./$(DEPDIR)/rec-mset.Plo -rm -f ./$(DEPDIR)/rec-parser.Plo -rm -f ./$(DEPDIR)/rec-record.Plo -rm -f ./$(DEPDIR)/rec-rset.Plo -rm -f ./$(DEPDIR)/rec-sex-ast.Plo -rm -f ./$(DEPDIR)/rec-sex-lex.Plo -rm -f ./$(DEPDIR)/rec-sex-parser.Plo -rm -f ./$(DEPDIR)/rec-sex-tab.Plo -rm -f ./$(DEPDIR)/rec-sex.Plo -rm -f ./$(DEPDIR)/rec-types.Plo -rm -f ./$(DEPDIR)/rec-utils.Plo -rm -f ./$(DEPDIR)/rec-writer.Plo -rm -f ./$(DEPDIR)/rec.Plo -rm -f Makefile distclean-am: clean-am distclean-compile distclean-generic \ distclean-hdr distclean-tags dvi: dvi-am dvi-am: html: html-am html-am: info: info-am info-am: install-data-am: install-includeHEADERS install-dvi: install-dvi-am install-dvi-am: install-exec-am: install-libLTLIBRARIES install-html: install-html-am install-html-am: install-info: install-info-am install-info-am: install-man: install-pdf: install-pdf-am install-pdf-am: install-ps: install-ps-am install-ps-am: installcheck-am: maintainer-clean: maintainer-clean-am -rm -f ./$(DEPDIR)/rec-aggregate.Plo -rm -f ./$(DEPDIR)/rec-buf.Plo -rm -f ./$(DEPDIR)/rec-comment.Plo -rm -f ./$(DEPDIR)/rec-crypt-dummy.Plo -rm -f ./$(DEPDIR)/rec-crypt.Plo -rm -f ./$(DEPDIR)/rec-db.Plo -rm -f ./$(DEPDIR)/rec-fex.Plo -rm -f ./$(DEPDIR)/rec-field-name.Plo -rm -f ./$(DEPDIR)/rec-field.Plo -rm -f ./$(DEPDIR)/rec-int.Plo -rm -f ./$(DEPDIR)/rec-mset.Plo -rm -f ./$(DEPDIR)/rec-parser.Plo -rm -f ./$(DEPDIR)/rec-record.Plo -rm -f ./$(DEPDIR)/rec-rset.Plo -rm -f ./$(DEPDIR)/rec-sex-ast.Plo -rm -f ./$(DEPDIR)/rec-sex-lex.Plo -rm -f ./$(DEPDIR)/rec-sex-parser.Plo -rm -f ./$(DEPDIR)/rec-sex-tab.Plo -rm -f ./$(DEPDIR)/rec-sex.Plo -rm -f ./$(DEPDIR)/rec-types.Plo -rm -f ./$(DEPDIR)/rec-utils.Plo -rm -f ./$(DEPDIR)/rec-writer.Plo -rm -f ./$(DEPDIR)/rec.Plo -rm -f Makefile maintainer-clean-am: distclean-am maintainer-clean-generic mostlyclean: mostlyclean-am mostlyclean-am: mostlyclean-compile mostlyclean-generic \ mostlyclean-libtool pdf: pdf-am pdf-am: ps: ps-am ps-am: uninstall-am: uninstall-includeHEADERS uninstall-libLTLIBRARIES .MAKE: all check install install-am install-exec install-strip .PHONY: CTAGS GTAGS TAGS all all-am am--depfiles check check-am clean \ clean-generic clean-libLTLIBRARIES clean-libtool cscopelist-am \ ctags ctags-am distclean distclean-compile distclean-generic \ distclean-hdr distclean-libtool distclean-tags distdir dvi \ dvi-am html html-am info info-am install install-am \ install-data install-data-am install-dvi install-dvi-am \ install-exec install-exec-am install-html install-html-am \ install-includeHEADERS install-info install-info-am \ install-libLTLIBRARIES install-man install-pdf install-pdf-am \ install-ps install-ps-am install-strip installcheck \ installcheck-am installdirs maintainer-clean \ maintainer-clean-generic mostlyclean mostlyclean-compile \ mostlyclean-generic mostlyclean-libtool pdf pdf-am ps ps-am \ tags tags-am uninstall uninstall-am uninstall-includeHEADERS \ uninstall-libLTLIBRARIES .PRECIOUS: Makefile check-syntax: all # End of Makefile.am # Tell versions [3.59,3.63) of GNU make to not export all variables. # Otherwise a system limit (for SysV at least) may be exceeded. .NOEXPORT: ��������������������������������������������������������������������������������recutils-1.9/src/rec-record.c�����������������������������������������������������������������������0000644�0000000�0000000�00000043701�14226563465�013106� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-record.c - Records. */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, * 2018, 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <rec.h> #include <rec-utils.h> struct rec_record_s { /* Container pointer. The semantics of this pointer depends on the user. */ void *container; /* type ids for the elements stored in the mset. */ int field_type; int comment_type; /* Localization. */ char *source; size_t location; char *location_str; size_t char_location; char *char_location_str; /* The internal multi-set storing the data. */ rec_mset_t mset; }; static void rec_record_init (rec_record_t record) { /* Initialize the record structure so it can be safely passed to rec_record_destroy even if its contents are not completely initialized with real values. */ memset (record, 0 /* NULL */, sizeof (struct rec_record_s)); } static void rec_record_field_disp_fn (void *data) { rec_field_destroy ((rec_field_t) data); } static bool rec_record_field_equal_fn (void *data1, void *data2) { return (data1 == data2); /* return rec_field_equal_p ((rec_field_t) data1, (rec_field_t) data2);*/ } static void * rec_record_field_dup_fn (void *data) { rec_field_t copy; copy = rec_field_dup ((rec_field_t) data); return (void *) copy; } static void rec_record_comment_disp_fn (void *data) { rec_comment_destroy ((rec_comment_t) data); } static bool rec_record_comment_equal_fn (void *data1, void *data2) { return (data1 == data2); /* return rec_comment_equal_p ((rec_comment_t) data1, (rec_comment_t) data2);*/ } static void * rec_record_comment_dup_fn (void *data) { rec_comment_t copy; copy = rec_comment_dup ((rec_comment_t) data); return (void *) copy; } rec_record_t rec_record_new (void) { rec_record_t record; record = malloc (sizeof (struct rec_record_s)); if (record) { rec_record_init (record); /* The container pointer is initially NULL, until the client uses it for something else. */ record->container = NULL; /* Localization information is not used until the user explicitly sets it. */ record->source = NULL; record->location = 0; record->location_str = NULL; record->char_location = 0; record->char_location_str = NULL; /* Create the multi-set that will hold the elements of the record. Note that the order in which the types are registered is significative. If you change the order please update the MSET_FIELD and MSET_COMMENT constants in rec.h. */ record->mset = rec_mset_new (); if (record->mset) { record->field_type = rec_mset_register_type (record->mset, "field", rec_record_field_disp_fn, rec_record_field_equal_fn, rec_record_field_dup_fn, NULL); record->comment_type = rec_mset_register_type (record->mset, "comment", rec_record_comment_disp_fn, rec_record_comment_equal_fn, rec_record_comment_dup_fn, NULL); } else { /* Out of memory. */ rec_record_destroy (record); record = NULL; } } return record; } void rec_record_destroy (rec_record_t record) { if (record) { free (record->source); free (record->location_str); free (record->char_location_str); rec_mset_destroy (record->mset); free (record); } } rec_record_t rec_record_dup (rec_record_t record) { rec_record_t new; new = malloc (sizeof (struct rec_record_s)); if (new) { rec_record_init (new); new->field_type = record->field_type; new->comment_type = record->comment_type; new->mset = rec_mset_dup (record->mset); if (!new->mset) { rec_record_destroy (new); return NULL; } new->source = NULL; if (record->source) { new->source = strdup (record->source); if (!new->source) { rec_record_destroy (new); return NULL; } } new->location = record->location; new->char_location = record->char_location; new->location_str = NULL; if (record->location_str) { new->location_str = strdup (record->location_str); if (!new->location_str) { rec_record_destroy (new); return NULL; } } new->char_location_str = NULL; if (record->char_location_str) { new->char_location_str = strdup (record->char_location_str); if (!new->char_location_str) { rec_record_destroy (new); return NULL; } } new->container = record->container; } return new; } bool rec_record_subset_p (rec_record_t record1, rec_record_t record2) { bool result; rec_mset_iterator_t iter1; rec_mset_elem_t elem1; const void *data; result = true; /* Iterate on the elements stored in record1. For each element, verify that an equal element is also stored in record2. */ iter1 = rec_mset_iterator (record1->mset); while (rec_mset_iterator_next (&iter1, MSET_ANY, &data, &elem1)) { bool elem_found = false; rec_mset_elem_t elem2; rec_mset_iterator_t iter2 = rec_mset_iterator (record2->mset); while (rec_mset_iterator_next (&iter2, MSET_ANY, &data, &elem2)) { if (rec_mset_elem_equal_p (elem1, elem2)) { elem_found = true; break; } } if (!elem_found) { result = false; break; } rec_mset_iterator_free (&iter2); } rec_mset_iterator_free (&iter1); return result; } bool rec_record_equal_p (rec_record_t record1, rec_record_t record2) { return ((rec_record_subset_p (record1, record2)) && (rec_record_subset_p (record2, record1))); } rec_mset_t rec_record_mset (rec_record_t record) { return record->mset; } size_t rec_record_num_elems (rec_record_t record) { return rec_mset_count (record->mset, MSET_ANY); } size_t rec_record_num_fields (rec_record_t record) { return rec_mset_count (record->mset, record->field_type); } size_t rec_record_num_comments (rec_record_t record) { return rec_mset_count (record->mset, record->comment_type); } size_t rec_record_get_field_index (rec_record_t record, rec_field_t field) { size_t res = 0; rec_mset_iterator_t iter; rec_field_t list_field; iter = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &list_field, NULL)) { if (field == list_field) break; res++; } rec_mset_iterator_free (&iter); return res; } bool rec_record_field_p (rec_record_t record, const char *field_name) { return (rec_record_get_num_fields_by_name (record, field_name) > 0); } size_t rec_record_get_num_fields_by_name (rec_record_t record, const char *field_name) { rec_mset_iterator_t iter; rec_field_t field; int num_fields = 0; iter = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) { if (rec_field_name_equal_p (rec_field_name (field), field_name)) num_fields++; } rec_mset_iterator_free (&iter); return num_fields; } rec_field_t rec_record_get_field_by_name (rec_record_t record, const char *field_name, size_t n) { size_t num_fields = 0; rec_field_t field = NULL; rec_field_t result = NULL; rec_mset_iterator_t iter; iter = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) { if (rec_field_name_equal_p (rec_field_name (field), field_name)) { if (n == num_fields) { result = field; break; } num_fields++; } } rec_mset_iterator_free (&iter); return result; } void rec_record_remove_field_by_name (rec_record_t record, const char *field_name, size_t n) { rec_field_t field; rec_mset_iterator_t iter; rec_mset_elem_t elem; int num_fields = 0; iter = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &field, &elem)) { if (rec_field_name_equal_p (rec_field_name (field), field_name)) { if ((n == -1) || (n == num_fields)) rec_mset_remove_elem (record->mset, elem); num_fields++; } } rec_mset_iterator_free (&iter); } size_t rec_record_get_field_index_by_name (rec_record_t record, rec_field_t field) { size_t res = 0; rec_mset_iterator_t iter; rec_field_t list_field; iter = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &list_field, NULL)) { if (field == list_field) break; if (rec_field_equal_p (field, list_field)) res++; } rec_mset_iterator_free (&iter); return res; } rec_comment_t rec_record_to_comment (rec_record_t record) { rec_buf_t buf; rec_comment_t res; char *comment_str; size_t comment_str_size; rec_mset_iterator_t iter; rec_mset_elem_t elem; const void *data; buf = rec_buf_new (&comment_str, &comment_str_size); iter = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter, MSET_ANY, &data, &elem)) { if (rec_mset_elem_type (elem) == MSET_FIELD) { rec_buf_puts (rec_write_field_str ((rec_field_t) data, REC_WRITER_NORMAL), buf); rec_buf_putc ('\n', buf); } else { /* Comment. */ rec_buf_puts (rec_write_comment_str (rec_comment_text ((rec_comment_t) data), REC_WRITER_NORMAL), buf); rec_buf_putc ('\n', buf); } } rec_mset_iterator_free (&iter); rec_buf_close (buf); /* Remove a trailing newline. */ if (comment_str[comment_str_size - 1] == '\n') comment_str[comment_str_size - 1] = '\0'; res = rec_comment_new (comment_str); free (comment_str); return res; } char * rec_record_source (rec_record_t record) { if (record->source) return record->source; else return ""; } void rec_record_set_source (rec_record_t record, char *source) { if (record->source) { free (record->source); record->source = NULL; } record->source = strdup (source); } size_t rec_record_location (rec_record_t record) { return record->location; } char * rec_record_location_str (rec_record_t record) { char *res; if (record->location_str) return record->location_str; else return ""; } void rec_record_set_location (rec_record_t record, size_t location) { record->location = location; if (record->location_str) { free (record->location_str); record->location_str = NULL; } asprintf (&(record->location_str), "%zu", record->location); } size_t rec_record_char_location (rec_record_t record) { return record->char_location; } char * rec_record_char_location_str (rec_record_t record) { char *res; if (record->char_location_str) return record->char_location_str; else return ""; } void rec_record_set_char_location (rec_record_t record, size_t location) { record->char_location = location; if (record->char_location_str) { free (record->char_location_str); record->char_location_str = NULL; } asprintf (&(record->char_location_str), "%zu", record->char_location); } bool rec_record_contains_value (rec_record_t record, const char *str, bool case_insensitive) { bool res = false; rec_mset_iterator_t iter; rec_field_t field; const char *field_value; char *occur; iter = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) { field_value = rec_field_value (field); if (case_insensitive) occur = strcasestr (field_value, str); else occur = strstr (field_value, str); res = (occur != NULL); if (res) break; } rec_mset_iterator_free (&iter); return res; } bool rec_record_contains_field (rec_record_t record, const char *field_name, const char *field_value) { bool res = false; rec_mset_iterator_t iter; rec_field_t field; iter = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) { if (rec_field_name_equal_p (field_name, rec_field_name (field)) && (strcmp (field_value, rec_field_value (field)) == 0)) { res = true; break; } } rec_mset_iterator_free (&iter); return res; } void * rec_record_container (rec_record_t record) { return record->container; } void rec_record_set_container (rec_record_t record, void *container) { record->container = container; } void rec_record_uniq (rec_record_t record) { rec_mset_iterator_t iter1, iter2; rec_mset_elem_t elem1; rec_field_t field1, field2; bool *to_remove; size_t num_fields, i, j; /* Create a map of the fields to remove and initialize all the entries to false. */ num_fields = rec_record_num_fields (record); to_remove = malloc (sizeof(bool) * num_fields); memset (to_remove, false, num_fields); /* Iterate on the fields of the record an mark the fields that will be removed in the removal mask. */ i = 0; iter1 = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter1, MSET_FIELD, (const void **) &field1, NULL)) { if (!to_remove[i]) { /* Mark any other occurrence of this field having the same value for removal. */ j = 0; iter2 = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter2, MSET_FIELD, (const void **) &field2, NULL)) { if ((j != i) && rec_field_name_equal_p (rec_field_name (field1), rec_field_name (field2)) && rec_field_name_equal_p (rec_field_value (field1), rec_field_value (field2))) { to_remove[j] = true; } j++; } rec_mset_iterator_free (&iter2); } i++; } rec_mset_iterator_free (&iter1); /* Remove the fields marked for removal. */ i = 0; iter1 = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter1, MSET_FIELD, (const void **) &field1, &elem1)) { if (to_remove[i]) rec_mset_remove_elem (record->mset, elem1); i++; } /* Cleanup. */ free (to_remove); } void rec_record_append (rec_record_t dest_record, rec_record_t src_record) { rec_mset_iterator_t iter; rec_field_t field; iter = rec_mset_iterator (src_record->mset); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) { if (!rec_mset_append (rec_record_mset (dest_record), MSET_FIELD, (void *) rec_field_dup (field), MSET_FIELD)) /* Out of memory. Just return. */ return; } rec_mset_iterator_free (&iter); } void rec_record_reset_marks (rec_record_t record) { rec_mset_iterator_t iter; rec_field_t field; iter = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) rec_field_set_mark (field, 0); rec_mset_iterator_free (&iter); } bool rec_record_mark_field (rec_record_t record, rec_field_t field, int mark) { rec_mset_iterator_t iter; rec_field_t iter_field; iter = rec_mset_iterator (record->mset); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &iter_field, NULL)) { if (field == iter_field) { rec_field_set_mark (field, mark); rec_mset_iterator_free (&iter); return true; } } rec_mset_iterator_free (&iter); return false; } int rec_record_field_mark (rec_record_t record, rec_field_t field) { return rec_field_mark (field); } ���������������������������������������������������������������recutils-1.9/src/rec-field-name.c�������������������������������������������������������������������0000644�0000000�0000000�00000005322�14226563465�013626� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-field-name.c - Field names. */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, * 2018, 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <regex.h> #include <ctype.h> #include <gettext.h> #define _(str) dgettext (PACKAGE, str) #include <rec-utils.h> #include <rec.h> /* The following global variable contains field names which are either standard, such as the special field names, or often used in the library. Note that the array is indexed using the rec_std_field_e enumerated values defined in rec.h, so the order is important. */ static const char *fnames[] = { "%auto", "%confidential", "%key", "%mandatory", "%prohibit", "%rec", "%size", "%sort", "%type", "%typedef", "%unique", "%constraint", "%allowed", "%singular", }; const char * rec_std_field_name (enum rec_std_field_e std_field) { return *(fnames + std_field); } bool rec_field_name_p (const char *str) { return rec_match (str, "^" REC_FNAME_RE "$"); } char * rec_field_name_normalise (const char *str) { char *normalised_name; int i; normalised_name = malloc (strlen (str) + 1); if (normalised_name) { memcpy (normalised_name, str, strlen (str)); normalised_name[strlen(str)] = '\0'; for (i = 0; i < strlen (normalised_name); i++) { if (!((isalnum (normalised_name[i])) || (normalised_name[i] == '_') || (normalised_name[i] == '-') || (normalised_name[i] == '%'))) normalised_name[i] = '_'; } } /* Check that the normalisation produced a proper field name. */ if (normalised_name) { if (!rec_field_name_p (normalised_name)) { free (normalised_name); normalised_name = NULL; } } return normalised_name; } bool rec_field_name_equal_p (const char *name1, const char *name2) { /* TODO: 'foo' and 'foo:' denote the same field name. */ return (strcmp (name1, name2) == 0); } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-buf.c��������������������������������������������������������������������������0000644�0000000�0000000�00000005357�14226563465�012411� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-buf.c - flexible buffers. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <rec.h> #define REC_BUF_STEP 512 struct rec_buf_s { char *data; size_t size; size_t used; /* Pointers to user-provided variables that will be updated at rec_buf_destroy time. */ char **data_pointer; size_t *size_pointer; }; /* * Public functions. */ rec_buf_t rec_buf_new (char **data, size_t *size) { rec_buf_t new; new = malloc (sizeof (struct rec_buf_s)); if (new) { new->data_pointer = data; new->size_pointer = size; new->data = malloc (REC_BUF_STEP); new->size = REC_BUF_STEP; new->used = 0; if (!new->data) { free (new); new = NULL; } } return new; } void rec_buf_close (rec_buf_t buf) { /* Adjust the buffer. */ if (buf->used > 0) buf->data = realloc (buf->data, buf->used + 1); buf->data[buf->used] = '\0'; /* Update the user-provided buffer and size. */ *(buf->data_pointer) = buf->data; *(buf->size_pointer) = buf->used; /* Don't deallocate buf->data */ free (buf); } void rec_buf_rewind (rec_buf_t buf, int n) { if ((buf->used - n) >= 0) buf->used = buf->used - n; } int rec_buf_putc (int c, rec_buf_t buf) { unsigned int ret; if (c == EOF) return EOF; ret = (unsigned int) c; if ((buf->used + 1) > buf->size) { /* Allocate a new block */ buf->size = buf->size + REC_BUF_STEP; buf->data = realloc (buf->data, buf->size); if (!buf->data) /* Not enough memory. REC_BUF_STEP should not be 0. */ ret = EOF; } if (ret != EOF) /* Add the character */ buf->data[buf->used++] = (char) c; return ret; } int rec_buf_puts (const char *str, rec_buf_t buf) { int ret; const char *p; ret = 0; p = str; while (*p != '\0') { if (rec_buf_putc (*p, buf) == EOF) { /* Error. */ ret = -1; break; } ret++; p++; } return ret; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-crypt.c������������������������������������������������������������������������0000644�0000000�0000000�00000026211�14226563465�012766� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-crypt.c - encryption routines. */ /* Copyright (C) 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, * 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <gcrypt.h> #include <crc.h> #include <base64.h> #include <rec.h> #include <rec-utils.h> /* Size of a block in AES128 */ #define AESV2_BLKSIZE 16 #define AESV2_KEYSIZE 16 #define SALT_SIZE 4 static bool rec_field_encrypted_p (rec_field_t field) { return ((strlen (rec_field_value (field)) > strlen (REC_ENCRYPTED_PREFIX)) && (strncmp (rec_field_value (field), REC_ENCRYPTED_PREFIX, strlen (REC_ENCRYPTED_PREFIX)) == 0)); } bool rec_encrypt (char *in, size_t in_size, const char *password, char **out, size_t *out_size) { gcry_cipher_hd_t handler; size_t i; size_t password_size; char key[AESV2_KEYSIZE]; char iv[AESV2_BLKSIZE]; size_t padding; uint32_t crc; char *real_in; size_t real_in_size; /* Append four bytes to the input buffer, containing the CRC of its contents. This will be used as a control token to determine whether the correct key is used in decryption. We store the integer always in little-endian. */ crc = crc32 (in, in_size); #if defined WORDS_BIGENDIAN crc = rec_endian_swap (crc); #endif real_in_size = in_size + 4; real_in = malloc (real_in_size + 4); memcpy (real_in, in, real_in_size); memcpy (real_in + real_in_size - 4, &crc, 4); /* The size of the input buffer must be bigger than AESV2_BLKSIZE, and must contain an entire number of blocks. We assure that by padding the buffer with \0 characters. */ if ((real_in_size % AESV2_BLKSIZE) != 0) padding = AESV2_BLKSIZE - (real_in_size % AESV2_BLKSIZE); else padding = 0; if (padding != 0) { real_in_size = real_in_size + padding; real_in = realloc (real_in, real_in_size); for (i = 0; i < padding; i++) real_in[real_in_size - i - 1] = '\0'; } /* Create the handler. */ if (gcry_cipher_open (&handler, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, 0) != GPG_ERR_NO_ERROR) return false; /* Set the key of the cypher. */ password_size = strlen (password); for (i = 0; i < AESV2_KEYSIZE; i++) key[i] = password[i % password_size]; /* Set both the key and the IV vector. */ if (gcry_cipher_setkey (handler, key, AESV2_KEYSIZE) != GPG_ERR_NO_ERROR) { gcry_cipher_close (handler); return false; } gcry_create_nonce (iv, SALT_SIZE); for (i = SALT_SIZE; i < AESV2_BLKSIZE; i++) iv[i] = i; if (gcry_cipher_setiv (handler, iv, AESV2_BLKSIZE) != GPG_ERR_NO_ERROR) { gcry_cipher_close (handler); return false; } *out_size = real_in_size + SALT_SIZE; *out = malloc (*out_size); /* Append salt at the end of the output. */ memcpy (*out + real_in_size, iv, SALT_SIZE); /* Encrypt the data. */ if (gcry_cipher_encrypt (handler, *out, real_in_size, real_in, real_in_size) != 0) { /* Error. */ gcry_cipher_close (handler); return false; } /* Close the handler. */ gcry_cipher_close (handler); return true; } bool rec_decrypt (char *in, size_t in_size, const char *password, char **out, size_t *out_size) { gcry_cipher_hd_t handler; size_t i; size_t password_size; char key[AESV2_KEYSIZE]; char iv[AESV2_BLKSIZE]; size_t salt_size = 0; if (((in_size - SALT_SIZE) % AESV2_BLKSIZE) == 0) salt_size = SALT_SIZE; else if ((in_size % AESV2_BLKSIZE) != 0) return false; /* Create the handler. */ if (gcry_cipher_open (&handler, GCRY_CIPHER_AES128, GCRY_CIPHER_MODE_CBC, 0) != GPG_ERR_NO_ERROR) return false; /* Set the key of the cypher. */ password_size = strlen (password); for (i = 0; i < AESV2_KEYSIZE; i++) key[i] = password[i % password_size]; /* Set both the key and the IV vector. */ if (gcry_cipher_setkey (handler, key, AESV2_KEYSIZE) != GPG_ERR_NO_ERROR) { printf ("error setting key\n"); gcry_cipher_close (handler); return false; } /* Extract salt at the end of the output. */ memcpy (iv, in + in_size - salt_size, salt_size); for (i = salt_size; i < AESV2_BLKSIZE; i++) iv[i] = i; if (gcry_cipher_setiv (handler, iv, AESV2_BLKSIZE) != GPG_ERR_NO_ERROR) { gcry_cipher_close (handler); return false; } /* Decrypt the data. */ *out_size = in_size - salt_size; *out = malloc (*out_size); if (gcry_cipher_decrypt (handler, *out, *out_size, in, in_size - salt_size) != 0) { /* Error. */ gcry_cipher_close (handler); return false; } /* Make sure the decrypted data is ok by checking the CRC at the end of the sequence. */ if (strlen(*out) > 4) { uint32_t crc = 0; memcpy (&crc, *out + strlen(*out) - 4, 4); #if defined WORDS_BIGENDIAN crc = rec_endian_swap (crc); #endif if (crc32 (*out, strlen(*out) - 4) != crc) { gcry_cipher_close (handler); return false; } (*out)[strlen(*out) - 4] = '\0'; } else { gcry_cipher_close (handler); return false; } /* Close the handler. */ gcry_cipher_close (handler); return true; } bool rec_encrypt_record (rec_rset_t rset, rec_record_t record, const char *password) { rec_field_t field; bool res; const char *field_name; rec_fex_t confidential_fields; size_t i, k, num_fields; res = true; if (rset) { confidential_fields = rec_rset_confidential (rset); for (i = 0; i < rec_fex_size (confidential_fields); i++) { field_name = rec_fex_elem_field_name (rec_fex_get (confidential_fields, i)); num_fields = rec_record_get_num_fields_by_name (record, field_name); for (k = 0; k < num_fields; k++) { field = rec_record_get_field_by_name (record, field_name, k); if (field) { res = rec_encrypt_field (field, password); if (!res) break; } } } } return res; } bool rec_encrypt_field (rec_field_t field, const char *password) { char *field_value; char *field_value_encrypted; char *field_value_base64; size_t out_size, base64_size; char *aux; field_value = strdup (rec_field_value (field)); if (!field_value) return false; /* Make sure the field is not already encrypted. */ if ((strlen (rec_field_value (field)) >= strlen (REC_ENCRYPTED_PREFIX)) && (strncmp (rec_field_value (field), REC_ENCRYPTED_PREFIX, strlen (REC_ENCRYPTED_PREFIX)) == 0)) return true; if (!rec_encrypt (field_value, strlen (field_value), password, &field_value_encrypted, &out_size)) return false; /* Encode the encrypted value into base64. */ base64_size = base64_encode_alloc (field_value_encrypted, out_size, &field_value_base64); base64_encode (field_value_encrypted, out_size, field_value_base64, base64_size); /* Prepennd "encrypted-". */ aux = malloc (strlen (field_value_base64) + strlen (REC_ENCRYPTED_PREFIX) + 1); memcpy (aux, REC_ENCRYPTED_PREFIX, strlen (REC_ENCRYPTED_PREFIX)); memcpy (aux + strlen (REC_ENCRYPTED_PREFIX), field_value_base64, strlen (field_value_base64)); aux[strlen (field_value_base64) + strlen (REC_ENCRYPTED_PREFIX)] = '\0'; free (field_value_base64); field_value_base64 = aux; /* Replace the value of the field. */ rec_field_set_value (field, field_value_base64); /* Free resources. */ free (field_value); free (field_value_encrypted); free (field_value_base64); return true; } bool rec_decrypt_field (rec_field_t field, const char *password) { const char *field_value; char *base64_decoded; size_t base64_decoded_size; char *decrypted_value; size_t decrypted_value_size; /* Make sure the field is encrypted. */ if ((strlen (rec_field_value (field)) < strlen (REC_ENCRYPTED_PREFIX)) || (strncmp (rec_field_value (field), REC_ENCRYPTED_PREFIX, strlen (REC_ENCRYPTED_PREFIX)) != 0)) return true; /* Skip the "encrypted-" prefix. */ field_value = rec_field_value (field) + strlen (REC_ENCRYPTED_PREFIX); /* Decode the Base64. */ if (base64_decode_alloc (field_value, strlen(field_value), &base64_decoded, &base64_decoded_size)) { base64_decode (field_value, strlen(field_value), base64_decoded, &base64_decoded_size); /* Decrypt. */ if (rec_decrypt (base64_decoded, base64_decoded_size, password, &decrypted_value, &decrypted_value_size)) rec_field_set_value (field, decrypted_value); /* Free resources. */ free (base64_decoded); } return true; } bool rec_decrypt_record (rec_rset_t rset, rec_record_t record, const char *password) { bool res = true; size_t i, num_fields, k; rec_field_t field; const char *field_name; rec_fex_t confidential_fields; if (rset) { confidential_fields = rec_rset_confidential (rset); for (i = 0; i < rec_fex_size (confidential_fields); i++) { field_name = rec_fex_elem_field_name (rec_fex_get (confidential_fields, i)); num_fields = rec_record_get_num_fields_by_name (record, field_name); for (k = 0; k < num_fields; k++) { field = rec_record_get_field_by_name (record, field_name, k); if (field) { res = rec_decrypt_field (field, password); if (!res) break; } } } } return res; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-types.c������������������������������������������������������������������������0000644�0000000�0000000�00000077307�14226563465�013005� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-types.c - Field types. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <stdio.h> #include <regex.h> #include <string.h> #include <limits.h> #include <regex.h> #include <parse-datetime.h> #include <gettext.h> #define _(str) dgettext (PACKAGE, str) #if defined UUID_TYPE # include <uuid/uuid.h> #endif #include <rec-utils.h> #include <rec.h> /* Textual name of the types expected in the type description strings. */ #define REC_TYPE_INT_NAME "int" #define REC_TYPE_BOOL_NAME "bool" #define REC_TYPE_RANGE_NAME "range" #define REC_TYPE_REAL_NAME "real" #define REC_TYPE_SIZE_NAME "size" #define REC_TYPE_LINE_NAME "line" #define REC_TYPE_REGEXP_NAME "regexp" #define REC_TYPE_DATE_NAME "date" #define REC_TYPE_ENUM_NAME "enum" #define REC_TYPE_EMAIL_NAME "email" #define REC_TYPE_FIELD_NAME "field" #define REC_TYPE_REC_NAME "rec" #if defined UUID_TYPE # define REC_TYPE_UUID_NAME "uuid" #endif /* Regular expressions. */ #define REC_TYPE_BLANK_RE "[ \t\n]" #define REC_TYPE_NO_BLANK_RE "[^ \t\n]" #define REC_TYPE_BLANKS_RE REC_TYPE_BLANK_RE "+" #define REC_TYPE_NO_BLANKS_RE REC_TYPE_NO_BLANK_RE "+" #define REC_TYPE_ZBLANKS_RE REC_TYPE_BLANK_RE "*" /* Regular expressions denoting values. */ #define REC_TYPE_INT_VALUE_RE \ "^" REC_TYPE_ZBLANKS_RE REC_INT_RE REC_TYPE_ZBLANKS_RE "$" #define REC_TYPE_BOOL_TRUE_VALUES_RE "1|yes|true" #define REC_TYPE_BOOL_FALSE_VALUES_RE "0|no|false" #define REC_TYPE_BOOL_VALUE_RE \ "^" REC_TYPE_ZBLANKS_RE "(" REC_TYPE_BOOL_TRUE_VALUES_RE "|" \ REC_TYPE_BOOL_FALSE_VALUES_RE \ ")" REC_TYPE_ZBLANKS_RE "$" #define REC_TYPE_REAL_VALUE_RE \ "^" REC_TYPE_ZBLANKS_RE "-?([0-9]+)?(\\.[0-9]+)?" REC_TYPE_ZBLANKS_RE "$" #define REC_TYPE_LINE_VALUE_RE \ "^[^\n]*$" #define REC_TYPE_EMAIL_VALUE_RE \ "^[ \n\t]*" \ "[a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\\.[a-zA-Z]{2,4}" \ "[ \n\t]*$" #define REC_TYPE_ENUM_NAME_RE \ "[a-zA-Z0-9][a-zA-Z0-9_-]*" #define REC_TYPE_ENUM_VALUE_RE \ "^" \ REC_TYPE_ZBLANKS_RE \ REC_TYPE_ENUM_NAME_RE \ REC_TYPE_ZBLANKS_RE \ "$" /* REC_FNAME_RE is defined in rec.h */ #define REC_TYPE_FIELD_VALUE_RE \ "^" \ REC_TYPE_ZBLANKS_RE \ REC_FNAME_RE \ REC_TYPE_ZBLANKS_RE \ "$" #define REC_TYPE_REC_VALUE_RE /* Regular expression denoting a type name. */ #if defined UUID_TYPE # define REC_TYPE_CLASS_UUID_RE "|" REC_TYPE_UUID_NAME #else # define REC_TYPE_CLASS_UUID_RE #endif #define REC_TYPE_CLASS_RE \ "(" REC_TYPE_INT_NAME "|" REC_TYPE_RANGE_NAME "|" \ REC_TYPE_REAL_NAME "|" REC_TYPE_SIZE_NAME "|" \ REC_TYPE_LINE_NAME "|" REC_TYPE_REGEXP_NAME "|" \ REC_TYPE_DATE_NAME "|" REC_TYPE_ENUM_NAME "|" \ REC_TYPE_EMAIL_NAME "|" REC_TYPE_BOOL_NAME "|" \ REC_TYPE_FIELD_NAME "|" REC_TYPE_REC_NAME \ REC_TYPE_CLASS_UUID_RE \ ")" /* Regular expressions for the type descriptions. */ /* int */ #define REC_TYPE_INT_DESCR_RE \ REC_TYPE_INT_NAME /* bool */ #define REC_TYPE_BOOL_DESCR_RE \ REC_TYPE_BOOL_NAME /* range MIN MAX */ #define REC_TYPE_RANGE_MINMAX_RE "MIN | MAX" #define REC_TYPE_RANGE_DESCR_RE \ REC_TYPE_RANGE_NAME \ REC_TYPE_BLANKS_RE \ "(" REC_INT_RE "|" REC_TYPE_RANGE_MINMAX_RE ")" \ "(" \ REC_TYPE_ZBLANKS_RE \ "(" REC_INT_RE "|" REC_TYPE_RANGE_MINMAX_RE ")"\ ")?" /* real */ #define REC_TYPE_REAL_DESCR_RE \ REC_TYPE_REAL_NAME /* size NUM */ #define REC_TYPE_SIZE_DESCR_RE \ REC_TYPE_SIZE_NAME \ REC_TYPE_BLANKS_RE \ REC_INT_RE /* line */ #define REC_TYPE_LINE_DESCR_RE \ REC_TYPE_LINE_NAME /* regexp /RE/ */ #define REC_TYPE_REGEXP_DESCR_RE \ REC_TYPE_REGEXP_NAME \ ".+" /* date */ #define REC_TYPE_DATE_DESCR_RE \ REC_TYPE_DATE_NAME /* enum NAME NAME NAME*/ #define REC_TYPE_ENUM_DESCR_RE \ REC_TYPE_ENUM_NAME \ REC_TYPE_BLANKS_RE \ REC_TYPE_ENUM_NAME_RE \ "(" REC_TYPE_BLANKS_RE REC_TYPE_ENUM_NAME_RE ")*" /* field */ #define REC_TYPE_FIELD_DESCR_RE \ REC_TYPE_FIELD_NAME /* rec RECORD_TYPE */ #define REC_TYPE_REC_DESCR_RE \ REC_TYPE_REC_NAME REC_TYPE_BLANKS_RE REC_RECORD_TYPE_RE /* email */ #define REC_TYPE_EMAIL_DESCR_RE \ REC_TYPE_EMAIL_NAME /* Regexp denoting any type description. */ #define REC_TYPE_DESCR_RE \ "^" \ REC_TYPE_ZBLANKS_RE \ REC_FNAME_RE "(," REC_FNAME_RE ")*" \ REC_TYPE_ZBLANKS_RE \ "(" \ "(" REC_TYPE_INT_DESCR_RE ")" \ "|" "(" REC_TYPE_BOOL_DESCR_RE ")" \ "|" "(" REC_TYPE_RANGE_DESCR_RE ")" \ "|" "(" REC_TYPE_REAL_DESCR_RE ")" \ "|" "(" REC_TYPE_SIZE_DESCR_RE ")" \ "|" "(" REC_TYPE_LINE_DESCR_RE ")" \ "|" "(" REC_TYPE_REGEXP_DESCR_RE ")" \ "|" "(" REC_TYPE_DATE_DESCR_RE ")" \ "|" "(" REC_TYPE_EMAIL_DESCR_RE ")" \ "|" "(" REC_TYPE_ENUM_DESCR_RE ")" \ "|" "(" REC_TYPE_FIELD_DESCR_RE ")" \ "|" "(" REC_TYPE_REC_DESCR_RE ")" \ ")" \ REC_TYPE_ZBLANKS_RE \ "$" /* * Data types. */ struct rec_type_s { char *name; /* Name of the type. May be NULL in an anonymous type. */ enum rec_type_kind_e kind; /* Kind of the type. */ char *expr; /* Copy of the type descriptor used to create the type. */ size_t size; /* Used for enumerations: number of names. */ union { size_t max_size; /* Size of string. */ int range[2]; /* Range. */ regex_t regexp; /* Regular expression. */ char *recname; /* Record. */ #define REC_ENUM_ALLOC_NAMES 50 char **names; /* Names in enumeration. */ } data; }; #define REC_TYPE_REG_ALLOC_TYPES 100 struct rec_type_reg_entry_s { char *type_name; rec_type_t type; char *to_type; bool visited_p; }; struct rec_type_reg_s { size_t num_types; struct rec_type_reg_entry_s *types; }; static enum rec_type_kind_e rec_type_parse_type_kind (char *str) { enum rec_type_kind_e res; res = REC_TYPE_NONE; if (strcmp (str, REC_TYPE_INT_NAME) == 0) res = REC_TYPE_INT; if (strcmp (str, REC_TYPE_BOOL_NAME) == 0) res = REC_TYPE_BOOL; if (strcmp (str, REC_TYPE_RANGE_NAME) == 0) res = REC_TYPE_RANGE; if (strcmp (str, REC_TYPE_REAL_NAME) == 0) res = REC_TYPE_REAL; if (strcmp (str, REC_TYPE_SIZE_NAME) == 0) res = REC_TYPE_SIZE; if (strcmp (str, REC_TYPE_LINE_NAME) == 0) res = REC_TYPE_LINE; if (strcmp (str, REC_TYPE_REGEXP_NAME) == 0) res = REC_TYPE_REGEXP; if (strcmp (str, REC_TYPE_DATE_NAME) == 0) res = REC_TYPE_DATE; if (strcmp (str, REC_TYPE_EMAIL_NAME) == 0) res = REC_TYPE_EMAIL; if (strcmp (str, REC_TYPE_ENUM_NAME) == 0) res = REC_TYPE_ENUM; if (strcmp (str, REC_TYPE_FIELD_NAME) == 0) res = REC_TYPE_FIELD; if (strcmp (str, REC_TYPE_REC_NAME) == 0) res = REC_TYPE_REC; #if defined UUID_TYPE if (strcmp (str, REC_TYPE_UUID_NAME) == 0) res = REC_TYPE_UUID; #endif return res; } static bool rec_type_check_int (rec_type_t type, const char *str, rec_buf_t errors) { bool ret; ret = rec_match (str, REC_TYPE_INT_VALUE_RE); if (!ret && errors) rec_buf_puts (_("invalid integer."), errors); return ret; } static bool rec_type_check_rec (rec_type_t type, const char *str, rec_buf_t errors) { /* The values of type 'rec' are of whatever type the primary key of the referred type is. That check is not implemented here, but in rec-types.c. So sorry Mario, but the Princess is kept in another castle... */ return true; } static bool rec_type_check_field (rec_type_t type, const char *str, rec_buf_t errors) { bool ret; ret = rec_match (str, REC_TYPE_FIELD_VALUE_RE); if (!ret && errors) rec_buf_puts (_("invalid 'field' value."), errors); return ret; } #if defined UUID_TYPE static bool rec_type_check_uuid (rec_type_t type, const char *str, rec_buf_t errors) { int ret; uuid_t uu; /* Determine whether the given string is a valid UUID by parsing it using the uuid_parse function provided by the libuuid library. */ ret = uuid_parse (str, uu); if ((ret == -1) && errors) rec_buf_puts (_("invalid 'uuid' value."), errors); return (ret == 0); } #endif /* UUID_TYPE */ static bool rec_type_check_bool (rec_type_t type, const char *str, rec_buf_t errors) { bool ret; ret = rec_match (str, REC_TYPE_BOOL_VALUE_RE); if (!ret && errors) rec_buf_puts (_("invalid 'bool' value."), errors); return ret; } static bool rec_type_check_range (rec_type_t type, const char *str, rec_buf_t errors) { bool ret; const char *p; int num; char *tmp; p = str; rec_skip_blanks (&p); if (!rec_parse_int (&p, &num)) { if (errors) rec_buf_puts (_("invalid 'range' value."), errors); return false; } ret = ((num >= type->data.range[0]) && (num <= type->data.range[1])); if (!ret && errors) { if (asprintf (&tmp, _("expected an integer between %d and %d."), type->data.range[0], type->data.range[1]) != -1) { rec_buf_puts (tmp, errors); free (tmp); } } return ret; } static bool rec_type_check_real (rec_type_t type, const char *str, rec_buf_t errors) { bool ret; ret = rec_match (str, REC_TYPE_REAL_VALUE_RE); if (!ret && errors) rec_buf_puts (_("invalid 'real' value."), errors); return ret; } static bool rec_type_check_size (rec_type_t type, const char *str, rec_buf_t errors) { bool ret; char *tmp; ret = (strlen (str) <= type->data.max_size); if (!ret && errors) { if (asprintf (&tmp, _("value too large. Expected a size <= %zu."), type->data.max_size) != -1) { rec_buf_puts (tmp, errors); free (tmp); } } return (strlen (str) <= type->data.max_size); } static bool rec_type_check_line (rec_type_t type, const char *str, rec_buf_t errors) { bool ret; ret = rec_match (str, REC_TYPE_LINE_VALUE_RE); if (!ret && errors) rec_buf_puts (_("invalid 'line' value."), errors); return ret; } static bool rec_type_check_regexp (rec_type_t type, const char *str, rec_buf_t errors) { bool ret; ret = (regexec (&type->data.regexp, str, 0, NULL, 0) == 0); if (!ret && errors) rec_buf_puts (_("value does not match the regexp."), errors); return ret; } static bool rec_type_check_date (rec_type_t type, const char *str, rec_buf_t errors) { bool ret; struct timespec tm; if (strcmp (str, "") == 0) /* The parse_datetime call accepts the empty string. */ return false; ret = parse_datetime (&tm, str, NULL); if (!ret && errors) rec_buf_puts (_("invalid date."), errors); return ret; } static bool rec_type_check_email (rec_type_t type, const char *str, rec_buf_t errors) { bool ret; ret = rec_match (str, REC_TYPE_EMAIL_VALUE_RE); if (!ret && errors) rec_buf_puts (_("invalid email."), errors); return ret; } static bool rec_type_check_enum (rec_type_t type, const char *str, rec_buf_t errors) { size_t i; const char *p, *b; char name[100]; if (rec_match (str, REC_TYPE_ENUM_VALUE_RE)) { /* Get the name from STR. */ p = str; while (p && rec_blank_p (*p)) p++; b = p; while (p && (rec_letter_p (*p) || rec_letter_p (*p) || rec_digit_p (*p) || (*p == '_') || (*p == '-'))) { name[p - b] = *p; p++; } name[p - b] = '\0'; /* Check for the name in the enum types. */ for (i = 0; i < type->size; i++) if (strcmp (name, type->data.names[i]) == 0) return true; } if (errors) rec_buf_puts (_("invalid enum value."), errors); return false; } static const char * rec_type_parse_size (const char *str, rec_type_t type) { const char *p; int size; p = str; /* Skip blanks. */ rec_skip_blanks (&p); /* Get the size. */ if (rec_parse_int (&p, &size) && (size >= 0)) type->data.max_size = size; else p = NULL; return p; } static const char * rec_type_parse_enum (const char *str, rec_type_t type) { const char *p; size_t i; p = str; type->size = 0; type->data.names = NULL; while (*p) { /* Allocate space in the list of enum names if needed. */ if ((type->size % REC_ENUM_ALLOC_NAMES) == 0) type->data.names = realloc (type->data.names, ((type->size / REC_ENUM_ALLOC_NAMES) + 1) * (sizeof(char *) * REC_ENUM_ALLOC_NAMES)); /* Skip blanks. */ rec_skip_blanks (&p); if (*p == '(') { /* Skip the comment. */ p++; while (*p && (*p != ')') && (*p != '(')) p++; if (*p == ')') p++; else { /* Parse error: unterminated comment. */ p = NULL; break; } } else if (*p) { /* Parse an enum entry. */ if (!rec_parse_regexp (&p, "^" REC_TYPE_ENUM_NAME_RE, &(type->data.names[type->size++]))) { p = NULL; break; } } } if (type->size == 0) /* We require at least one entry in the enum. In this case it is not needed to save memory. */ return NULL; if (!p) { /* Free memory. */ for (i = 0; i < type->size; i++) free (type->data.names[i]); } return p; } static const char * rec_type_parse_regexp_type (const char *str, rec_type_t type) { const char *p; char re[200]; bool end_regexp; size_t i; char delim_char; p = str; /* The regexp type descriptor is like: BLANKS BEGIN_RE CHARS END_RE BLANKS where BEGIN_RE == END_RE and is the first non-blank character found in the string. Escaped apperances of BEGIN_RE in CHARS are un-escaped. */ /* Skip blanks. */ rec_skip_blanks (&p); end_regexp = false; delim_char = *p; p++; i = 0; while (*p) { if (*p == delim_char) { if (*(p + 1) == delim_char) { re[i++] = delim_char; p++; } else { /* End of the regexp. */ p++; end_regexp = true; break; } } else re[i++] = *p; p++; } re[i] = '\0'; if (!end_regexp) /* Error. */ p = NULL; else { /* Compile the regexp. */ if (regcomp (&type->data.regexp, re, REG_EXTENDED) != 0) p = NULL; } return p; } static const char * rec_type_parse_rec (const char *str, rec_type_t type) { const char *p = str; /* Get the record name. */ rec_skip_blanks (&p); if (!rec_parse_regexp (&p, "^" REC_RECORD_TYPE_RE, &(type->data.recname))) return NULL; return p; } static bool rec_type_parse_range_point (const char **str, int *num) { if (rec_match (*str, "^MIN")) { *num = INT_MIN; *str += 3; } else if (rec_match (*str, "^MAX")) { *num = INT_MAX; *str += 3; } else if (!rec_parse_int (str, num)) return false; return true; } static const char * rec_type_parse_range (const char *str, rec_type_t type) { const char *p; p = str; rec_skip_blanks (&p); if (!rec_type_parse_range_point (&p, &(type->data.range[0]))) return NULL; rec_skip_blanks (&p); if (*p == '\0') { /* One of the indexes is ommitted. The range is of the form 0..N. */ type->data.range[1] = type->data.range[0]; type->data.range[0] = 0; } else { if (!rec_type_parse_range_point (&p, &(type->data.range[1]))) return NULL; } return p; } bool rec_type_descr_p (const char *str) { bool ret; rec_type_t aux_type; ret = false; aux_type = rec_type_new (str); if (aux_type) { ret = true; rec_type_destroy (aux_type); } return ret; } char * rec_type_descr_type (char *str) { char *result = NULL; char *name; const char *p; if (rec_type_descr_p (str)) { p = str; /* Skip blank characters. */ rec_skip_blanks (&p); /* Skip the FEX */ if (rec_parse_regexp (&p, "^" REC_FNAME_RE "(," REC_FNAME_RE ")*", &name)) free (name); /* Skip blanks. */ rec_skip_blanks (&p); /* Return the rest of the string. */ result = strdup (p); } return result; } rec_type_t rec_type_new (const char *str) { rec_type_t new; const char *p; char *type_kind_str = NULL; p = str; new = malloc (sizeof (struct rec_type_s)); if (!new) goto exit; new->name = NULL; /* Newly created types are anonyous. */ new->size = 0; rec_skip_blanks (&p); /* Get the type kind. */ if (!rec_parse_regexp (&p, "^" REC_TYPE_CLASS_RE, &type_kind_str)) { free (new); new = NULL; goto exit; } /* Continue parsing depending on the kind of type. */ new->kind = rec_type_parse_type_kind (type_kind_str); switch (new->kind) { case REC_TYPE_SIZE: p = rec_type_parse_size (p, new); if (!p) { free (new); new = NULL; } break; case REC_TYPE_ENUM: p = rec_type_parse_enum (p, new); if (!p) { free (new); new = NULL; } break; case REC_TYPE_REGEXP: p = rec_type_parse_regexp_type (p, new); if (!p) { free (new); new = NULL; } break; case REC_TYPE_RANGE: p = rec_type_parse_range (p, new); if (!p) { free (new); new = NULL; } break; case REC_TYPE_REC: p = rec_type_parse_rec (p, new); if (!p) { free (new); new = NULL; } break; case REC_TYPE_INT: case REC_TYPE_BOOL: case REC_TYPE_REAL: case REC_TYPE_LINE: case REC_TYPE_FIELD: case REC_TYPE_DATE: case REC_TYPE_EMAIL: #if defined UUID_TYPE case REC_TYPE_UUID: #endif /* We are done. */ break; case REC_TYPE_NONE: /* This point should not be reached. */ fprintf (stderr, _("internal error: rec-types: got REC_TYPE_NONE from \ rec_type_parse_type_kind() in rec_type_new().\n")); exit (EXIT_FAILURE); break; } if (new) { /* Check that all characters until the end of the string are blank characters. */ while (*p != '\0') { if (!rec_blank_p (*p)) { rec_type_destroy (new); new = NULL; break; } p++; } } exit: free (type_kind_str); return new; } enum rec_type_kind_e rec_type_kind (rec_type_t type) { return type->kind; } char * rec_type_kind_str (rec_type_t type) { char *res; switch (type->kind) { case REC_TYPE_NONE: res = ""; break; case REC_TYPE_INT: res = REC_TYPE_INT_NAME; break; case REC_TYPE_BOOL: res = REC_TYPE_BOOL_NAME; break; case REC_TYPE_RANGE: res = REC_TYPE_RANGE_NAME; break; case REC_TYPE_REAL: res = REC_TYPE_REAL_NAME; break; case REC_TYPE_SIZE: res = REC_TYPE_SIZE_NAME; break; case REC_TYPE_LINE: res = REC_TYPE_LINE_NAME; break; case REC_TYPE_REGEXP: res = REC_TYPE_REGEXP_NAME; break; case REC_TYPE_DATE: res = REC_TYPE_DATE_NAME; break; case REC_TYPE_EMAIL: res = REC_TYPE_EMAIL_NAME; break; case REC_TYPE_ENUM: res = REC_TYPE_ENUM_NAME; break; case REC_TYPE_FIELD: res = REC_TYPE_FIELD_NAME; break; case REC_TYPE_REC: res = REC_TYPE_REC_NAME; break; #if defined UUID_TYPE case REC_TYPE_UUID: res = REC_TYPE_UUID_NAME; break; #endif default: res = REC_TYPE_NONE; break; } return res; } bool rec_type_check (rec_type_t type, const char *str, char **error_str) { bool res; rec_buf_t errors; char *err_str; size_t errors_size; errors = rec_buf_new (&err_str, &errors_size); res = false; switch (type->kind) { case REC_TYPE_NONE: res = true; break; case REC_TYPE_INT: res = rec_type_check_int (type, str, errors); break; case REC_TYPE_BOOL: res = rec_type_check_bool (type, str, errors); break; case REC_TYPE_RANGE: res = rec_type_check_range (type, str, errors); break; case REC_TYPE_REAL: res = rec_type_check_real (type, str, errors); break; case REC_TYPE_SIZE: res = rec_type_check_size (type, str, errors); break; case REC_TYPE_LINE: res = rec_type_check_line (type, str, errors); break; case REC_TYPE_REGEXP: res = rec_type_check_regexp (type, str, errors); break; case REC_TYPE_DATE: res = rec_type_check_date (type, str, errors); break; case REC_TYPE_EMAIL: res = rec_type_check_email (type, str, errors); break; case REC_TYPE_ENUM: res = rec_type_check_enum (type, str, errors); break; case REC_TYPE_FIELD: res = rec_type_check_field (type, str, errors); break; case REC_TYPE_REC: res = rec_type_check_rec (type, str, errors); break; #if defined UUID_TYPE case REC_TYPE_UUID: res = rec_type_check_uuid (type, str, errors); break; #endif } /* Terminate the 'errors' string. */ rec_buf_close (errors); /* err_str[errors_size] = '\0';*/ if (error_str) *error_str = err_str; else free (err_str); return res; } void rec_type_destroy (rec_type_t type) { int i; if (type) { if (type->kind == REC_TYPE_ENUM) { for (i = 0; i < type->size; i++) free (type->data.names[i]); } else if (type->kind == REC_TYPE_REGEXP) regfree (&type->data.regexp); free (type->name); free (type); } } rec_type_reg_t rec_type_reg_new (void) { rec_type_reg_t new; new = malloc (sizeof (struct rec_type_reg_s)); if (new) { new->num_types = 0; new->types = NULL; } return new; } void rec_type_reg_destroy (rec_type_reg_t reg) { size_t i; for (i = 0; i < reg->num_types; i++) { if (reg->types[i].type) rec_type_destroy (reg->types[i].type); free (reg->types[i].type_name); free (reg->types[i].to_type); } free (reg->types); free (reg); } void rec_type_reg_add (rec_type_reg_t reg, rec_type_t type) { size_t i; const char *type_name = NULL; type_name = rec_type_name (type); if (!type_name) /* The registry only contains named types. */ return; for (i = 0; i < reg->num_types; i++) { if (strcmp (reg->types[i].type_name, type_name) == 0) { /* Replace this entry. */ if (reg->types[i].type) rec_type_destroy (reg->types[i].type); free (reg->types[i].type_name); free (reg->types[i].to_type); break; } } /* If we need to add a new entry then allocate it. */ if (i == reg->num_types) { reg->types = realloc (reg->types, ((i / REC_TYPE_REG_ALLOC_TYPES) + 1) * (sizeof (struct rec_type_reg_entry_s *) * REC_TYPE_REG_ALLOC_TYPES)); reg->num_types++; } reg->types[i].type_name = strdup (rec_type_name (type)); reg->types[i].type = type; reg->types[i].to_type = NULL; reg->types[i].visited_p = false; } void rec_type_reg_add_synonym (rec_type_reg_t reg, const char *type_name, const char *to_type) { size_t i; for (i = 0; i < reg->num_types; i++) { if (strcmp (reg->types[i].type_name, type_name) == 0) { /* Replace this entry. */ if (reg->types[i].type) rec_type_destroy (reg->types[i].type); free (reg->types[i].type_name); free (reg->types[i].to_type); break; } } /* If we need to add a new entry then allocate it. */ if (i == reg->num_types) { reg->types = realloc (reg->types, ((i / REC_TYPE_REG_ALLOC_TYPES) + 1) * (sizeof (struct rec_type_reg_entry_s *) * REC_TYPE_REG_ALLOC_TYPES)); reg->num_types++; } reg->types[i].type_name = strdup (type_name); reg->types[i].to_type = strdup (to_type); reg->types[i].type = NULL; reg->types[i].visited_p = false; } rec_type_t rec_type_reg_get (rec_type_reg_t reg, const char *type_name) { size_t i; rec_type_t type = NULL; for (i = 0; i < reg->num_types; i++) { if (strcmp (reg->types[i].type_name, type_name) == 0) { if (reg->types[i].type) { /* Type found. */ type = reg->types[i].type; break; } else { /* Loop detection. */ if (reg->types[i].visited_p) break; /* Mark this entry as visited and follow the name. */ reg->types[i].visited_p = true; type = rec_type_reg_get (reg, reg->types[i].to_type); } } } /* Reset the visited flags. */ for (i = 0; i < reg->num_types; i++) reg->types[i].visited_p = false; return type; } const char * rec_type_name (rec_type_t type) { return type->name; } void rec_type_set_name (rec_type_t type, const char *name) { type->name = strdup (name); } bool rec_type_equal_p (rec_type_t type1, rec_type_t type2) { bool ret; size_t i; ret = true; if (type1->kind != type2->kind) ret = false; else { if (type1->kind == REC_TYPE_SIZE) ret = (type1->data.max_size == type2->data.max_size); else if (type1->kind == REC_TYPE_RANGE) ret = ((type1->data.range[0] == type2->data.range[0]) && (type1->data.range[1] == type2->data.range[1])); else if (type1->kind == REC_TYPE_ENUM) { for (i = 0; i < type1->size; i++) { ret = ((i < type2->size) && (strcmp (type1->data.names[i], type2->data.names[i]) == 0)); } } else if (type1->kind == REC_TYPE_REGEXP) /* Since there is no way to determine whether two regex_t variables refer to equivalent regexps. */ ret = false; } return ret; } int rec_type_min (rec_type_t type) { int res; if (type->kind != REC_TYPE_RANGE) res = -1; else res = type->data.range[0]; return res; } int rec_type_max (rec_type_t type) { int res; if (type->kind != REC_TYPE_RANGE) res = -1; else res = type->data.range[1]; return res; } const char * rec_type_rec (rec_type_t type) { const char *res = NULL; if (type->kind == REC_TYPE_REC) res = type->data.recname; return res; } int rec_type_values_cmp (rec_type_t type, const char *val1, const char *val2) { int type_comparison; enum rec_type_kind_e kind = REC_TYPE_NONE; if (type) kind = type->kind; switch (kind) { case REC_TYPE_INT: case REC_TYPE_RANGE: { int int1, int2 = 0; if (!rec_atoi (val1, &int1) || !rec_atoi (val2, &int2)) goto lexi; if (int1 < int2) type_comparison = -1; else if (int1 > int2) type_comparison = 1; else type_comparison = 0; break; } case REC_TYPE_REAL: { double real1, real2 = 0; if (!rec_atod (val1, &real1) || !rec_atod (val2, &real2)) goto lexi; if (real1 < real2) type_comparison = -1; else if (real1 > real2) type_comparison = 1; else type_comparison = 0; break; } case REC_TYPE_BOOL: { bool bool1, bool2 = false; /* Boolean fields storing 'false' come first. */ bool1 = rec_match (val1, REC_TYPE_ZBLANKS_RE "(" REC_TYPE_BOOL_TRUE_VALUES_RE ")" REC_TYPE_ZBLANKS_RE); bool2 = rec_match (val2, REC_TYPE_ZBLANKS_RE "(" REC_TYPE_BOOL_TRUE_VALUES_RE ")" REC_TYPE_ZBLANKS_RE); if (!bool1 && bool2) type_comparison = -1; else if (bool1 == bool2) type_comparison = 0; else type_comparison = 1; break; } case REC_TYPE_DATE: { struct timespec op1; struct timespec op2; struct timespec diff; if (parse_datetime (&op1, val1, NULL) && parse_datetime (&op2, val2, NULL)) { if ((op1.tv_sec == op2.tv_sec) && (op1.tv_nsec == op2.tv_nsec)) /* op1 == op2 */ type_comparison = 0; else if (rec_timespec_subtract (&diff, &op1, &op2)) /* op1 < op2 */ type_comparison = -1; else /* op1 > op2 */ type_comparison = 1; } else /* Invalid date => lexicographic order. */ goto lexi; break; } default: lexi: /* Lexicographic order. */ type_comparison = strcmp (val1, val2); break; } return type_comparison; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-comment.c����������������������������������������������������������������������0000644�0000000�0000000�00000002744�14226563465�013274� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-comment.c - handling of comments. */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, * 2018, 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <rec.h> rec_comment_t rec_comment_new (char *text) { if (!text) return NULL; return strdup (text); } void rec_comment_destroy (rec_comment_t comment) { free (comment); } rec_comment_t rec_comment_dup (rec_comment_t comment) { return strdup (comment); } char * rec_comment_text (rec_comment_t comment) { return comment; } void rec_comment_set_text (rec_comment_t *comment, char *text) { free (*comment); *comment = strdup (text); } bool rec_comment_equal_p (rec_comment_t comment1, rec_comment_t comment2) { return (strcmp (comment1, comment2) == 0); } ����������������������������recutils-1.9/src/rec-writer.c�����������������������������������������������������������������������0000644�0000000�0000000�00000035057�14226563465�013151� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-writer.c - Writer. */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, * 2018, 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <rec.h> #include <stdlib.h> #include <string.h> #include <rec.h> #include <rec-utils.h> struct rec_writer_s { FILE *file_out; /* File stream used by the writer. */ rec_buf_t buf_out; /* Growable buffer used by the writer. */ bool eof; int line; /* Current line number. */ /* The following flags and options can be accesssed using the corresponding rec_writer_(get/set)_FLAG function. */ bool collapse_p; /* If true the writer won't introduce separators between records. */ bool skip_comments_p; /* If true the writer won't print out comments. */ enum rec_writer_mode_e mode; /* The mode in which the writer operates. See the definition of the enumerated type in rec.h for a list of allowed modes. */ }; static void rec_writer_new_common (rec_writer_t writer) { writer->file_out = NULL; writer->buf_out = NULL; writer->line = 1; writer->eof = false; writer->collapse_p = false; writer->skip_comments_p = false; writer->mode = REC_WRITER_NORMAL; } static bool rec_writer_putc (rec_writer_t writer, char c) { bool ret; ret = false; if (writer->file_out) ret = (fputc (c, writer->file_out) != EOF); if (writer->buf_out) ret = (rec_buf_putc (c, writer->buf_out) != EOF); return ret; } static bool rec_writer_puts (rec_writer_t writer, const char *s) { bool ret; ret = false; if (writer->file_out) ret = (fputs (s, writer->file_out) != EOF); if (writer->buf_out) ret = (rec_buf_puts (s, writer->buf_out) != EOF); return ret; } rec_writer_t rec_writer_new (FILE *file_out) { rec_writer_t new; new = malloc (sizeof(struct rec_writer_s)); if (new) { rec_writer_new_common (new); new->file_out = file_out; } return new; } rec_writer_t rec_writer_new_str (char **str, size_t *str_size) { rec_writer_t new; new = malloc (sizeof(struct rec_writer_s)); if (new) { rec_writer_new_common (new); new->buf_out = rec_buf_new (str, str_size); } return new; } void rec_writer_destroy (rec_writer_t writer) { if (writer) { if (writer->file_out) fflush (writer->file_out); if (writer->buf_out) rec_buf_close (writer->buf_out); free (writer); } } bool rec_write_comment (rec_writer_t writer, rec_comment_t comment) { char *line; char *str; char *orig_str; size_t i; if (writer->mode == REC_WRITER_SEXP) { if (!rec_writer_puts (writer, "(comment ")) return false; if (!rec_writer_putc (writer, '"')) return false; str = rec_comment_text (comment); for (i = 0; i < strlen (str); i++) { if (str[i] == '\n') { if (!rec_writer_puts (writer, "\\n")) return false; } else { if (!rec_writer_putc (writer, str[i])) return false; } } if (!rec_writer_puts (writer, "\")")) return false; } else { /* Every line in the comment is written preceded by a '#' character. The lines composing the comments are separated by newline characters. */ bool first = true; str = strdup (rec_comment_text (comment)); orig_str = str; /* Save a pointer to str to deallocate it later, since strsep will modify the str variable. */ line = strsep (&str, "\n"); do { if (!first) { if (!rec_writer_putc (writer, '\n')) return false; } if (!rec_writer_putc (writer, '#') || !rec_writer_puts (writer, line)) return false; first = false; } while ((line = strsep (&str, "\n"))); free (orig_str); } return true; } bool rec_write_field (rec_writer_t writer, rec_field_t field) { size_t pos; const char *fname; const char *fvalue; enum rec_writer_mode_e mode = writer->mode; if (mode == REC_WRITER_SEXP) { if (!rec_writer_puts (writer, "(field ")) return false; if (!rec_writer_puts (writer, rec_field_char_location_str (field))) return false; if (!rec_writer_putc (writer, ' ')) return false; } if ((mode != REC_WRITER_VALUES) && (mode != REC_WRITER_VALUES_ROW)) { fname = rec_field_name (field); if (!rec_write_field_name (writer, fname)) return false; } /* Write the field value */ if (mode == REC_WRITER_SEXP) { if (!rec_writer_putc (writer, ' ')) return false; if (!rec_writer_putc (writer, '"')) return false; } fvalue = rec_field_value (field); if ((strlen (fvalue) > 0) && (mode == REC_WRITER_NORMAL)) { if (!rec_writer_putc (writer, ' ')) return false; } for (pos = 0; pos < strlen (fvalue); pos++) { if (fvalue[pos] == '\n') { if (mode == REC_WRITER_SEXP) { if (!rec_writer_puts (writer, "\\n")) return false; } else if (mode == REC_WRITER_NORMAL) { if (!rec_writer_puts (writer, "\n+ ")) return false; } else { if (!rec_writer_putc (writer, '\n')) return false; } } else if (((fvalue[pos] == '"') || (fvalue[pos] == '\\')) && (mode == REC_WRITER_SEXP)) { if ((!rec_writer_putc (writer, '\\')) || (!rec_writer_putc (writer, fvalue[pos]))) return false; } else { if (!rec_writer_putc (writer, fvalue[pos])) /* EOF on output */ return false; } } if (mode == REC_WRITER_SEXP) { if (!rec_writer_putc (writer, '"')) return false; } if (mode == REC_WRITER_SEXP) { if (!rec_writer_puts (writer, ")")) return false; } return true; } bool rec_write_field_name (rec_writer_t writer, const char *field_name) { /* Field names can be written in several formats, according to the * desired mode: * * REC_WRITER_NORMAL * The field name is written in rec format. i.e. NP: * REC_WRITER_SEXP * The field name is a string: "NP" */ enum rec_writer_mode_e mode = writer->mode; if (mode == REC_WRITER_SEXP) { if (!rec_writer_putc (writer, '"')) return false; } if (!rec_writer_puts (writer, field_name)) return false; if (mode == REC_WRITER_SEXP) { if (!rec_writer_putc (writer, '"')) return false; } else { if (!rec_writer_putc (writer, ':')) return false; } return true; } bool rec_write_record (rec_writer_t writer, rec_record_t record) { bool ret; rec_mset_iterator_t iter; rec_mset_elem_t elem; char *data; size_t num_field, num_elem, num_fields, num_elems; enum rec_writer_mode_e mode = writer->mode; ret = true; if (mode == REC_WRITER_SEXP) { if (!rec_writer_puts (writer, "(record ")) return false; if (!rec_writer_puts (writer, rec_record_char_location_str (record))) return false; if (!rec_writer_puts (writer, " (\n")) return false; } num_elems = rec_record_num_elems (record); num_fields = rec_record_num_fields (record); num_field = 0; num_elem = 0; iter = rec_mset_iterator (rec_record_mset (record)); while (rec_mset_iterator_next (&iter, MSET_ANY, (const void **) &data, &elem)) { if (rec_mset_elem_type (elem) == MSET_FIELD) { /* Write a field. */ rec_field_t field = (rec_field_t) data; if (!rec_write_field (writer, field)) { ret = false; break; } /* Include a field separator. */ if ((mode == REC_WRITER_VALUES_ROW) && (num_field != (num_fields - 1))) { if(mode == REC_WRITER_VALUES_ROW) { if (!rec_writer_putc (writer, ' ')) return false; } } else if ((writer->skip_comments_p && (num_field != (num_fields - 1))) || (!writer->skip_comments_p && (num_elem != (num_elems - 1)))) { if (!rec_writer_putc (writer, '\n')) return false; } num_field++; } else if (!writer->skip_comments_p) { /* Write a comment. */ rec_comment_t comment = (rec_comment_t) data; if ((mode != REC_WRITER_VALUES) && (mode != REC_WRITER_VALUES_ROW)) { if (!rec_write_comment (writer, comment)) { ret = false; break; } if (num_elem != (num_elems - 1)) { if (!rec_writer_putc (writer, '\n')) return false; } } } num_elem++; } rec_mset_iterator_free (&iter); if (mode == REC_WRITER_SEXP) { if (!rec_writer_puts (writer, "))")) return false; } return ret; } bool rec_write_rset (rec_writer_t writer, rec_rset_t rset) { bool ret; rec_record_t descriptor; bool wrote_descriptor; size_t position; size_t descriptor_pos; rec_mset_iterator_t iter; rec_mset_elem_t elem; void *data; enum rec_writer_mode_e mode = writer->mode; ret = true; wrote_descriptor = false; position = 0; descriptor_pos = rec_rset_descriptor_pos (rset); descriptor = rec_rset_descriptor (rset); /* Special case: record set containing just the record descriptor. */ if ((rec_rset_num_elems (rset) == 0) && descriptor) { rec_write_record (writer, rec_rset_descriptor (rset)); rec_writer_putc (writer, '\n'); return true; } iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_ANY, (const void **) &data, &elem)) { if (position != 0) { if (!rec_writer_putc (writer, '\n')) ret = false; } if (position == descriptor_pos) { if (descriptor && (!(wrote_descriptor = rec_write_record (writer, rec_rset_descriptor (rset))))) ret = false; else { if (wrote_descriptor) { if (!rec_writer_puts (writer, "\n\n")) ret = false; } } } if (rec_mset_elem_type (elem) == MSET_RECORD) ret = rec_write_record (writer, (rec_record_t) data); else if (!writer->skip_comments_p) ret = rec_write_comment (writer, (rec_comment_t) data); if (!writer->collapse_p || (position == (rec_rset_num_elems (rset) - 1))) { if (!rec_writer_putc (writer, '\n')) ret = false; } if (!ret) break; position++; } rec_mset_iterator_free (&iter); /* Special case: * * # comment 1 * * # comment 2 * ... * %rec: foo */ if (!wrote_descriptor && (descriptor_pos >= rec_rset_num_elems (rset)) && rec_rset_descriptor (rset)) { if (!rec_writer_putc (writer, '\n')) ret = false; if (!rec_write_record (writer, rec_rset_descriptor (rset))) ret = false; if (!rec_writer_putc (writer, '\n')) ret = false; } return ret; } bool rec_write_db (rec_writer_t writer, rec_db_t db) { bool ret; int i; ret = true; for (i = 0; i < rec_db_size (db); i++) { rec_rset_t rset = rec_db_get_rset (db, i); if (i != 0) { if (!rec_writer_putc (writer, '\n')) { ret = false; break; } } if (!rec_write_rset (writer, rset)) { ret = false; break; } } return ret; } char * rec_write_field_str (rec_field_t field, rec_writer_mode_t mode) { rec_writer_t writer; char *result; size_t result_size; result = NULL; writer = rec_writer_new_str (&result, &result_size); if (writer) { rec_writer_set_mode (writer, mode); rec_write_field (writer, field); rec_writer_destroy (writer); } return result; } char * rec_write_field_name_str (const char *field_name, rec_writer_mode_t mode) { rec_writer_t writer; char *result; size_t result_size; result = NULL; writer = rec_writer_new_str (&result, &result_size); if (writer) { rec_writer_set_mode (writer, mode); rec_write_field_name (writer, field_name); rec_writer_destroy (writer); } return result; } char * rec_write_comment_str (rec_comment_t comment, rec_writer_mode_t mode) { rec_writer_t writer; char *result; size_t result_size; result = NULL; writer = rec_writer_new_str (&result, &result_size); if (writer) { rec_writer_set_mode (writer, mode); rec_write_comment (writer, comment); rec_writer_destroy (writer); } return result; } bool rec_write_string (rec_writer_t writer, const char *str) { return rec_writer_puts (writer, str); } void rec_writer_set_collapse (rec_writer_t writer, bool value) { writer->collapse_p = value; } void rec_writer_set_skip_comments (rec_writer_t writer, bool value) { writer->skip_comments_p = value; } void rec_writer_set_mode (rec_writer_t writer, enum rec_writer_mode_e mode) { writer->mode = mode; } ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-crypt-dummy.c������������������������������������������������������������������0000644�0000000�0000000�00000003177�14226563465�014125� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-crypt-dummy.c - dummy replacements for encryption routines. */ /* Copyright (C) 2012-2020 MichaÅ‚ MasÅ‚owski */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <rec.h> bool rec_encrypt (char *in, size_t in_size, const char *password, char **out, size_t *out_size) { return false; } bool rec_decrypt (char *in, size_t in_size, const char *password, char **out, size_t *out_size) { return false; } bool rec_encrypt_record (rec_rset_t rset, rec_record_t record, const char *password) { return false; } bool rec_encrypt_field (rec_field_t field, const char *password) { return false; } bool rec_decrypt_field (rec_field_t field, const char *password) { return false; } bool rec_decrypt_record (rec_rset_t rset, rec_record_t record, const char *password) { return false; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-sex.c��������������������������������������������������������������������������0000644�0000000�0000000�00000075216�14226563465�012435� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-sex.c - Record Selection Expressions. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <regex.h> #include <parse-datetime.h> #include <rec.h> #include <rec-utils.h> #include <rec-sex-ast.h> #include <rec-sex-parser.h> #include <rec-sex-tab.h> struct rec_sex_s { rec_sex_ast_t ast; rec_sex_parser_t parser; }; #define REC_SEX_VAL_INT 0 #define REC_SEX_VAL_REAL 1 #define REC_SEX_VAL_STR 2 struct rec_sex_val_s { int type; int int_val; double real_val; char *str_val; }; #define GET_CHILD_VAL(DEST,NUM) \ do \ { \ (DEST) = rec_sex_eval_node (sex, \ record, \ rec_sex_ast_node_child (node, (NUM)), \ status); \ if (!*status) \ { \ return res; \ } \ } \ while (0) #define ATOI_VAL(DEST, VAL) \ do \ { \ switch ((VAL).type) \ { \ case REC_SEX_VAL_INT: \ { \ (DEST) = (VAL).int_val; \ break; \ } \ case REC_SEX_VAL_STR: \ { \ if (strcmp ((VAL).str_val, "") == 0) \ { \ (DEST) = 0; \ } \ else \ { \ if (!rec_atoi ((VAL).str_val, &(DEST))) \ { \ *status = false; \ return res; \ } \ } \ break; \ } \ } \ } \ while (0) #define ATOD_VAL(DEST, VAL) \ do \ { \ switch ((VAL).type) \ { \ case REC_SEX_VAL_REAL: \ { \ (DEST) = (VAL).real_val; \ break; \ } \ case REC_SEX_VAL_INT: \ { \ (DEST) = (VAL).int_val; \ break; \ } \ case REC_SEX_VAL_STR: \ { \ if (strcmp ((VAL).str_val, "") == 0) \ { \ (DEST) = 0.0; \ } \ else \ { \ if (!rec_atod ((VAL).str_val, &(DEST))) \ { \ *status = false; \ return res; \ } \ } \ break; \ } \ } \ } \ while (0) #define ATOTS_VAL(DEST, VAL) \ do \ { \ switch ((VAL).type) \ { \ case REC_SEX_VAL_REAL: \ { \ *status = false; \ return res; \ break; \ } \ case REC_SEX_VAL_INT: \ { \ *status = false; \ return res; \ break; \ } \ case REC_SEX_VAL_STR: \ { \ if (!parse_datetime (&(DEST), (VAL).str_val, NULL))\ { \ *status = false; \ return res; \ } \ \ break; \ } \ } \ } \ while (0) static bool rec_sex_op_real_p (struct rec_sex_val_s op1, struct rec_sex_val_s op2) { bool ret; int integer; double real; ret = true; if ((op1.type == REC_SEX_VAL_INT) || ((op1.type == REC_SEX_VAL_STR) && rec_atoi (op1.str_val, &integer))) { /* Operand 1 is an integer. */ switch (op2.type) { case REC_SEX_VAL_INT: ret = false; break; case REC_SEX_VAL_REAL: ret = true; break; case REC_SEX_VAL_STR: ret = (rec_atod (op2.str_val, &real) && (!rec_atoi (op2.str_val, &integer))); break; default: ret = false; break; } } if ((op1.type == REC_SEX_VAL_REAL) || ((op1.type == REC_SEX_VAL_STR) && rec_atod (op1.str_val, &real) && (!rec_atoi (op1.str_val, &integer)))) { /* Operand 1 is a real. */ switch (op2.type) { case REC_SEX_VAL_INT: ret = true; break; case REC_SEX_VAL_REAL: ret = true; break; case REC_SEX_VAL_STR: ret = rec_atod (op2.str_val, &real); break; default: ret = false; break; } } return ret; } struct rec_sex_val_s rec_sex_eval_node (rec_sex_t sex, rec_record_t record, rec_sex_ast_node_t node, bool *status) { struct rec_sex_val_s res = {0, 0, 0, NULL}; struct rec_sex_val_s child_val1 = {0, 0, 0, NULL}; struct rec_sex_val_s child_val2 = {0, 0, 0, NULL}; struct rec_sex_val_s child_val3 = {0, 0, 0, NULL}; *status = true; switch (rec_sex_ast_node_type (node)) { case REC_SEX_NOVAL: { fprintf (stderr, "Application bug: REC_SEX_NOVAL node found.\n\ Please report this!\n"); exit (EXIT_FAILURE); break; /* Operations. */ } case REC_SEX_OP_NEG: case REC_SEX_OP_ADD: { int op1; int op2; double op1_real; double op2_real; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); if (rec_sex_op_real_p (child_val1, child_val2)) { /* Real operation. */ ATOD_VAL (op1_real, child_val1); ATOD_VAL (op2_real, child_val2); res.type = REC_SEX_VAL_REAL; res.real_val = op1_real + op2_real; } else { /* Integer operation. */ ATOI_VAL (op1, child_val1); ATOI_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; res.int_val = op1 + op2; } break; } case REC_SEX_OP_SUB: { int op1; int op2; double op1_real; double op2_real; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); if (rec_sex_op_real_p (child_val1, child_val2)) { /* Real operation. */ ATOD_VAL (op1_real, child_val1); ATOD_VAL (op2_real, child_val2); res.type = REC_SEX_VAL_REAL; res.real_val = op1 - op2; } else { /* Integer operation. */ ATOI_VAL (op1, child_val1); ATOI_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; res.int_val = op1 - op2; } break; } case REC_SEX_OP_MUL: { int op1; int op2; double op1_real; double op2_real; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); if (rec_sex_op_real_p (child_val1, child_val2)) { /* Real operation. */ ATOD_VAL (op1_real, child_val1); ATOD_VAL (op2_real, child_val2); res.type = REC_SEX_VAL_REAL; res.real_val = op1_real * op2_real; } else { /* Integer operation. */ ATOI_VAL (op1, child_val1); ATOI_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; res.int_val = op1 * op2; } break; } case REC_SEX_OP_DIV: { int op1; int op2; double op1_real; double op2_real; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); if (rec_sex_op_real_p (child_val1, child_val2)) { /* Real operation. */ ATOD_VAL (op1_real, child_val1); ATOD_VAL (op2_real, child_val2); res.type = REC_SEX_VAL_REAL; res.real_val = op1_real / op2_real; } else { /* Integer operation. */ ATOI_VAL (op1, child_val1); ATOI_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; if (op2 != 0) res.int_val = op1 / op2; else { /* Error: division by zero */ *status = false; return res; } } break; } case REC_SEX_OP_MOD: { int op1; int op2; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); /* Integer operation. */ ATOI_VAL (op1, child_val1); ATOI_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; if (op2 != 0) res.int_val = op1 % op2; else { /* Error: division by zero */ *status = false; return res; } break; } case REC_SEX_OP_EQL: { int op1; int op2; double op1_real; double op2_real; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); if ((child_val1.type == REC_SEX_VAL_STR) && (child_val2.type == REC_SEX_VAL_STR)) { /* String comparison. */ res.type = REC_SEX_VAL_INT; if (rec_sex_parser_case_insensitive (sex->parser)) res.int_val = (strcasecmp (child_val1.str_val, child_val2.str_val) == 0); else res.int_val = (strcmp (child_val1.str_val, child_val2.str_val) == 0); } else { if (rec_sex_op_real_p (child_val1, child_val2)) { /* Real comparison. */ ATOD_VAL (op1_real, child_val1); ATOD_VAL (op2_real, child_val2); res.type = REC_SEX_VAL_INT; res.int_val = op1_real == op2_real; } else { /* Integer comparison. */ ATOI_VAL (op1, child_val1); ATOI_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; res.int_val = op1 == op2; } } break; } case REC_SEX_OP_NEQ: { int op1; int op2; double op1_real; double op2_real; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); if ((child_val1.type == REC_SEX_VAL_STR) && (child_val2.type == REC_SEX_VAL_STR)) { /* String comparison. */ res.type = REC_SEX_VAL_INT; if (rec_sex_parser_case_insensitive (sex->parser)) res.int_val = (strcasecmp (child_val1.str_val, child_val2.str_val) != 0); else res.int_val = (strcmp (child_val1.str_val, child_val2.str_val) != 0); } else { if (rec_sex_op_real_p (child_val1, child_val2)) { /* Real comparison. */ ATOD_VAL (op1_real, child_val1); ATOD_VAL (op2_real, child_val2); res.type = REC_SEX_VAL_INT; res.int_val = op1_real != op2_real; } else { /* Integer comparison. */ ATOI_VAL (op1, child_val1); ATOI_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; res.int_val = op1 != op2; } } break; } case REC_SEX_OP_MAT: { GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); if ((child_val1.type == REC_SEX_VAL_STR) && (child_val2.type == REC_SEX_VAL_STR)) { /* String match. */ res.type = REC_SEX_VAL_INT; if (rec_sex_parser_case_insensitive (sex->parser)) res.int_val = rec_match_insensitive (child_val1.str_val, child_val2.str_val); else res.int_val = rec_match (child_val1.str_val, child_val2.str_val); } else { /* Error. */ *status = false; return res; } break; } case REC_SEX_OP_BEFORE: { struct timespec op1; struct timespec op2; struct timespec diff; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); ATOTS_VAL (op1, child_val1); ATOTS_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; res.int_val = rec_timespec_subtract (&diff, &op1, &op2); break; } case REC_SEX_OP_AFTER: { struct timespec op1; struct timespec op2; struct timespec diff; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); ATOTS_VAL (op1, child_val1); ATOTS_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; res.int_val = (!rec_timespec_subtract (&diff, &op1, &op2) && ((diff.tv_sec != 0) || (diff.tv_nsec != 0))); break; } case REC_SEX_OP_SAMETIME: { struct timespec op1; struct timespec op2; struct timespec diff; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); ATOTS_VAL (op1, child_val1); ATOTS_VAL (op2, child_val2); rec_timespec_subtract (&diff, &op1, &op2); res.type = REC_SEX_VAL_INT; res.int_val = ((diff.tv_sec == 0) && (diff.tv_nsec == 0)); break; } case REC_SEX_OP_IMPLIES: { int op1; int op2; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); ATOI_VAL (op1, child_val1); ATOI_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; res.int_val = !op1 || (op1 && op2); break; } case REC_SEX_OP_LT: case REC_SEX_OP_LTE: { int op1; int op2; double op1_real; double op2_real; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); if (rec_sex_op_real_p (child_val1, child_val2)) { /* Real comparison. */ ATOD_VAL (op1_real, child_val1); ATOD_VAL (op2_real, child_val2); res.type = REC_SEX_VAL_INT; if (rec_sex_ast_node_type (node) == REC_SEX_OP_LT) res.int_val = op1_real < op2_real; else res.int_val = op1_real <= op2_real; } else { /* Integer comparison. */ ATOI_VAL (op1, child_val1); ATOI_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; if (rec_sex_ast_node_type (node) == REC_SEX_OP_LT) res.int_val = op1 < op2; else res.int_val = op1 <= op2; } break; } case REC_SEX_OP_GT: case REC_SEX_OP_GTE: { int op1; int op2; double op1_real; double op2_real; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); if (rec_sex_op_real_p (child_val1, child_val2)) { /* Real comparison. */ ATOD_VAL (op1_real, child_val1); ATOD_VAL (op2_real, child_val2); res.type = REC_SEX_VAL_INT; if (rec_sex_ast_node_type (node) == REC_SEX_OP_GT) res.int_val = op1_real > op2_real; else res.int_val = op1_real >= op2_real; } else { /* Integer comparison. */ ATOI_VAL (op1, child_val1); ATOI_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; if (rec_sex_ast_node_type (node) == REC_SEX_OP_GT) res.int_val = op1 > op2; else res.int_val = op1 >= op2; } break; } case REC_SEX_OP_AND: { int op1; int op2; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); ATOI_VAL (op1, child_val1); ATOI_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; res.int_val = op1 && op2; break; } case REC_SEX_OP_OR: { int op1; int op2; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); ATOI_VAL (op1, child_val1); ATOI_VAL (op2, child_val2); res.type = REC_SEX_VAL_INT; res.int_val = op1 || op2; break; } case REC_SEX_OP_CONCAT: { size_t str1_size; size_t str2_size; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); if ((child_val1.type == REC_SEX_VAL_STR) && (child_val2.type == REC_SEX_VAL_STR)) { str1_size = strlen (child_val1.str_val); str2_size = strlen (child_val2.str_val); res.type = REC_SEX_VAL_STR; res.str_val = malloc (str1_size + str2_size + 1); memcpy (res.str_val, child_val1.str_val, str1_size); memcpy (res.str_val + str1_size, child_val2.str_val, str2_size); res.str_val[str1_size + str2_size] = '\0'; } else { *status = false; return res; } break; } case REC_SEX_OP_NOT: { int op; GET_CHILD_VAL (child_val1, 0); ATOI_VAL (op, child_val1); res.type = REC_SEX_VAL_INT; res.int_val = !op; break; } case REC_SEX_OP_SHA: { int n; const char *field_name = NULL; const char *field_subname = NULL; rec_sex_ast_node_t child; /* The child should be a Name. */ child = rec_sex_ast_node_child (node, 0); if (rec_sex_ast_node_type (rec_sex_ast_node_child(node, 0)) != REC_SEX_NAME) { *status = false; return res; } field_name = rec_sex_ast_node_name (child); field_subname = rec_sex_ast_node_subname (child); if (field_subname) { /* Compound a field name from the name/subname pair in the AST node. */ char *effective_name = rec_concat_strings (field_name, "_", field_subname); n = rec_record_get_num_fields_by_name (record, effective_name); free (effective_name); } else n = rec_record_get_num_fields_by_name (record, field_name); res.type = REC_SEX_VAL_INT; res.int_val = n; break; } case REC_SEX_OP_COND: { int op1; GET_CHILD_VAL (child_val1, 0); GET_CHILD_VAL (child_val2, 1); GET_CHILD_VAL (child_val3, 2); /* Get the boolean value of the first operand. */ ATOI_VAL (op1, child_val1); /* Return the first or the second operand, depending on the value of op1. */ if (op1) res = child_val2; else res = child_val3; break; } /* Values. */ case REC_SEX_INT: { res.type = REC_SEX_VAL_INT; res.int_val = rec_sex_ast_node_int (node); break; } case REC_SEX_REAL: { res.type = REC_SEX_VAL_REAL; res.real_val = rec_sex_ast_node_real (node); break; } case REC_SEX_STR: { res.type = REC_SEX_VAL_STR; res.str_val = rec_sex_ast_node_str (node); break; } case REC_SEX_NAME: { rec_field_t field; const char *field_name; const char *field_subname; int index; bool tofix; if (rec_sex_ast_node_fixed (node)) { res.type = REC_SEX_VAL_STR; res.str_val = rec_sex_ast_node_fixed_val (node); } else { field_name = rec_sex_ast_node_name (node); field_subname = rec_sex_ast_node_subname (node); index = rec_sex_ast_node_index (node); tofix = (index != -1); if (index == -1) index = 0; /* If there is a subname then the effective field name is the concatenation of the name and the subname separated by a '_' character. Otherwise it is just the name. */ { if (field_subname) { char *effective_field_name = malloc (sizeof (char) * (strlen (field_name) + strlen (field_subname) + 2)); memcpy (effective_field_name, field_name, strlen(field_name)); effective_field_name[strlen(field_name)] = '_'; memcpy (effective_field_name + strlen(field_name) + 1, field_subname, strlen(field_subname) + 1); field = rec_record_get_field_by_name (record, effective_field_name, index); } else field = rec_record_get_field_by_name (record, field_name, index); } res.type = REC_SEX_VAL_STR; if (field) res.str_val = strdup (rec_field_value (field)); else /* No field => "" */ res.str_val = ""; if (tofix) /* Make this node fixed. */ rec_sex_ast_node_fix (node, res.str_val); } break; } } return res; } rec_sex_t rec_sex_new (bool case_insensitive) { rec_sex_t new; new = malloc (sizeof (struct rec_sex_s)); if (new) { /* Initialize a new parser. */ new->parser = rec_sex_parser_new (); rec_sex_parser_set_case_insensitive (new->parser, case_insensitive); /* Initialize a new AST. */ new->ast = NULL; } return new; } void rec_sex_destroy (rec_sex_t sex) { if (sex) { if (sex->parser) rec_sex_parser_destroy (sex->parser); if (sex->ast) rec_sex_ast_destroy (sex->ast); free (sex); /* yeah! :D */ } } bool rec_sex_compile (rec_sex_t sex, const char *expr) { bool res; res = rec_sex_parser_run (sex->parser, expr); if (res) sex->ast = rec_sex_parser_ast (sex->parser); return res; } #define EXEC_AST(RECORD) \ do \ { \ val = rec_sex_eval_node (sex, \ (RECORD), \ rec_sex_ast_top (sex->ast), \ status); \ \ switch (val.type) \ { \ case REC_SEX_VAL_INT: \ { \ res = (val.int_val != 0); \ break; \ } \ case REC_SEX_VAL_REAL: \ case REC_SEX_VAL_STR: \ { \ res = false; \ break; \ } \ } \ } \ while (0) char * rec_sex_eval_str (rec_sex_t sex, rec_record_t record) { char *res; struct rec_sex_val_s val; bool status; rec_sex_ast_node_unfix (rec_sex_ast_top (sex->ast)); val = rec_sex_eval_node (sex, record, rec_sex_ast_top (sex->ast), &status); if (!status) /* Error evaluating the expression. */ return NULL; res = NULL; switch (val.type) { case REC_SEX_VAL_INT: asprintf (&res, "%d", val.int_val); break; case REC_SEX_VAL_REAL: asprintf (&res, "%f", val.real_val); break; case REC_SEX_VAL_STR: res = strdup (val.str_val); break; } return res; } bool rec_sex_eval (rec_sex_t sex, rec_record_t record, bool *status) { bool res; rec_field_t field; rec_field_t wfield; rec_record_t wrec; rec_mset_iterator_t iter; int j, nf; struct rec_sex_val_s val; res = false; wrec = NULL; rec_sex_ast_node_unfix (rec_sex_ast_top (sex->ast)); EXEC_AST (record); if (res) goto exit; rec_record_reset_marks (record); iter = rec_mset_iterator (rec_record_mset (record)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &field, NULL)) { nf = rec_record_get_num_fields_by_name (record, rec_field_name (field)); if ((nf > 1) && (rec_record_field_mark (record, field) == 0) && (rec_sex_ast_name_p (sex->ast, rec_field_name (field), nf)) && (!rec_sex_ast_hash_name_p (sex->ast, rec_field_name (field)))) { for (j = 0; j < nf; j++) { wfield = rec_record_get_field_by_name (record, rec_field_name (field), j); if (wrec) rec_record_destroy (wrec); rec_record_mark_field (record, wfield, 1); wrec = rec_record_dup (record); rec_record_remove_field_by_name (wrec, rec_field_name (field), -1); /* Delete all. */ rec_mset_append (rec_record_mset (wrec), MSET_FIELD, (void *) rec_field_dup (wfield), MSET_ANY); EXEC_AST(wrec); if (res) { rec_record_destroy (wrec); goto exit; } } } } rec_mset_iterator_free (&iter); exit: if (!*status) res = false; return res; } void rec_sex_print_ast (rec_sex_t sex) { rec_sex_parser_print_ast (sex->parser); } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-int.c��������������������������������������������������������������������������0000644�0000000�0000000�00000126127�14226563465�012426� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-int.c - Data integrity. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdio.h> #include <string.h> #include <stdlib.h> #include <regex.h> #include <gettext.h> #define _(str) dgettext (PACKAGE, str) #include <tempname.h> #if defined REMOTE_DESCRIPTORS # include <curl/curl.h> #endif #include <rec.h> #include <rec-utils.h> /* The following macros are used by some functions in this file to reduce verbosity. */ #define FNAME(id) rec_std_field_name ((id)) #define ADD_ERROR(buf,str,...) \ do \ { \ char *tmp = NULL; \ if (asprintf (&tmp, (str), __VA_ARGS__) != -1) \ { \ rec_buf_puts (tmp, (buf)); \ free (tmp); \ } \ } \ while (0) static rec_fex_t rec_int_collect_field_list (rec_record_t record, const char *fname) { size_t i, j = 0; size_t num_fields = rec_record_get_num_fields_by_name (record, fname); rec_fex_t res = rec_fex_new (NULL, REC_FEX_SIMPLE); if (!res) return NULL; /* Out of memory. */ for (i = 0; i < num_fields; i++) { rec_field_t field = rec_record_get_field_by_name (record, fname, i); rec_fex_t fex = rec_fex_new (rec_field_value (field), REC_FEX_SIMPLE); if (!fex) /* Invalid value in the field. Ignore it. */ continue; for (j = 0; j < rec_fex_size (fex); j++) { rec_fex_elem_t elem = rec_fex_get (fex, j); char *field_name = strdup (rec_fex_elem_field_name (elem)); if (!field_name || !rec_fex_append (res, field_name, rec_fex_elem_min (elem), rec_fex_elem_max (elem))) /* Not enough memory: panic and retreat! */ return NULL; } rec_fex_destroy (fex); } return res; } static int rec_int_check_record_types (rec_db_t db, rec_rset_t rset, rec_record_t record, rec_buf_t errors) { int res; rec_field_t field; rec_mset_iterator_t iter; res = 0; iter = rec_mset_iterator (rec_record_mset (record)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) { /* Check for the type. */ if (!rec_int_check_field_type (db, rset, field, errors)) res++; } rec_mset_iterator_free (&iter); return res; } static int rec_int_check_record_mandatory (rec_rset_t rset, rec_record_t record, rec_buf_t errors) { rec_fex_t fex_mandatory = NULL; int res = 0; size_t i; rec_record_t descriptor = rec_rset_descriptor (rset); if (descriptor) { fex_mandatory = rec_int_collect_field_list (descriptor, FNAME(REC_FIELD_MANDATORY)); if (!fex_mandatory) { ADD_ERROR (errors, _("out of memory\n"), ""); res = 1; goto cleanup; } /* Make sure that all fields in the mandatory fields list are in this record. */ for (i = 0; i < rec_fex_size (fex_mandatory); i++) { const char *fname = rec_fex_elem_field_name (rec_fex_get (fex_mandatory, i)); if (rec_record_get_num_fields_by_name (record, fname) == 0) { ADD_ERROR (errors, _("%s:%s: error: mandatory field '%s' not found in record\n"), rec_record_source (record), rec_record_location_str (record), fname); res++; } } } cleanup: rec_fex_destroy (fex_mandatory); return res; } static int rec_int_check_record_allowed (rec_rset_t rset, rec_record_t record, rec_buf_t errors) { /* If %allowed is specified then fields with names not in the union of %allowed + %mandatory + %key are not allowed in records, and thus that situation is an integrity error. */ rec_fex_t fex_allowed = NULL; rec_fex_t fex_mandatory = NULL; rec_fex_t fex_key = NULL; int res = 0; rec_record_t descriptor = rec_rset_descriptor (rset); if (descriptor) { fex_allowed = rec_int_collect_field_list (descriptor, FNAME(REC_FIELD_ALLOWED)); fex_mandatory = rec_int_collect_field_list (descriptor, FNAME(REC_FIELD_MANDATORY)); fex_key = rec_int_collect_field_list (descriptor, FNAME(REC_FIELD_KEY)); if (!fex_allowed || !fex_mandatory || !fex_key) { ADD_ERROR (errors, _("out of memory\n"), ""); res = 1; goto cleanup; } if (rec_fex_size (fex_allowed) == 0) /* Nothing to do. */ goto cleanup; /* Make sure that all the fields in RECORD are in either %allowed, %mandatory or %key. */ rec_field_t field = NULL; rec_mset_iterator_t iter = rec_mset_iterator (rec_record_mset (record)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) { const char *field_name = rec_field_name (field); if (!(rec_fex_member_p (fex_allowed, field_name, -1, -1) || rec_fex_member_p (fex_mandatory, field_name, -1, -1) || rec_fex_member_p (fex_key, field_name, -1, -1))) { /* This field is not allowed. */ ADD_ERROR (errors, _("%s:%s: error: field '%s' not allowed in this record set\n"), rec_record_source (record), rec_record_location_str (record), field_name); res++; } } rec_mset_iterator_free (&iter); } cleanup: rec_fex_destroy (fex_allowed); rec_fex_destroy (fex_mandatory); rec_fex_destroy (fex_key); return res; } static int rec_int_check_record_unique (rec_rset_t rset, rec_record_t record, rec_buf_t errors) { rec_fex_t fex_unique = NULL; int res = 0; size_t i; rec_record_t descriptor = rec_rset_descriptor (rset); if (descriptor) { fex_unique = rec_int_collect_field_list (descriptor, FNAME(REC_FIELD_UNIQUE)); if (!fex_unique) { ADD_ERROR (errors, _("out of memory\n"), ""); res = 1; goto cleanup; } /* Make sure that all fields in the unique fields list are unique in this record. */ for (i = 0; i < rec_fex_size (fex_unique); i++) { const char *fname = rec_fex_elem_field_name (rec_fex_get (fex_unique, i)); if (rec_record_get_num_fields_by_name (record, fname) > 1) { ADD_ERROR (errors, _("%s:%s: error: field '%s' should be unique in this record\n"), rec_record_source (record), rec_record_location_str (record), fname); res++; } } } cleanup: rec_fex_destroy (fex_unique); return res; } static int rec_int_check_record_prohibit (rec_rset_t rset, rec_record_t record, rec_buf_t errors) { rec_fex_t fex_prohibit = NULL; int res = 0; size_t i; rec_record_t descriptor = rec_rset_descriptor (rset); if (descriptor) { fex_prohibit = rec_int_collect_field_list (descriptor, FNAME(REC_FIELD_PROHIBIT)); if (!fex_prohibit) { ADD_ERROR (errors, _("out of memory\n"), ""); res = 1; goto cleanup; } /* Make sure that no field in the prohibit fields list is present in the record. */ for (i = 0; i < rec_fex_size (fex_prohibit); i++) { const char *fname = rec_fex_elem_field_name (rec_fex_get (fex_prohibit, i)); if (rec_record_get_num_fields_by_name (record, fname) > 0) { ADD_ERROR (errors, _("%s:%s: error: prohibited field '%s' found in record\n"), rec_record_source (record), rec_record_location_str (record), fname); res++; } } } cleanup: rec_fex_destroy (fex_prohibit); return res; } static int rec_int_check_record_sex_constraints (rec_rset_t rset, rec_record_t record, rec_buf_t errors) { int res = 0; size_t i = 0; size_t num_constraints = rec_rset_num_sex_constraints (rset); for (i = 0; i < num_constraints; i++) { bool status = false; rec_sex_t sex = rec_rset_sex_constraint (rset, i); if (!rec_sex_eval (sex, record, &status)) { ADD_ERROR (errors, _("%s:%s: error: %%constraint[%d] violated in record\n"), rec_record_source (record), rec_record_location_str (record), i); res++; } } return res; } #if defined REC_CRYPT_SUPPORT static int rec_int_check_record_secrets (rec_rset_t rset, rec_record_t record, rec_buf_t errors) { int res; rec_field_t field; rec_mset_iterator_t iter; res = 0; iter = rec_mset_iterator (rec_record_mset (record)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &field, NULL)) { /* If the field is confidential it must be encrypted. Encrypted field values can be recognized by the "encrypted-" prefix. */ #define REC_ENCRYPTED_PREFIX "encrypted-" if (rec_rset_field_confidential_p (rset, rec_field_name (field)) && (strncmp (rec_field_value (field), REC_ENCRYPTED_PREFIX, strlen (REC_ENCRYPTED_PREFIX)) != 0)) { ADD_ERROR (errors, _("%s:%s: error: confidential field is not encrypted\n"), rec_record_source (record), rec_record_location_str (record)); res++; } } rec_mset_iterator_free (&iter); return res; } #endif /* REC_CRYPT_SUPPORT */ static int rec_int_check_record_key (rec_rset_t rset, rec_record_t orig_record, rec_record_t record, rec_buf_t errors) { int res; rec_record_t descriptor; rec_record_t other_record; rec_mset_iterator_t iter; char *key_field_name; rec_field_t field; rec_field_t key; rec_field_t other_key; bool duplicated_key; size_t i; size_t num_fields; res = 0; descriptor = rec_rset_descriptor (rset); if (descriptor) { for (i = 0; i < rec_record_get_num_fields_by_name (descriptor, FNAME(REC_FIELD_KEY)); i++) { field = rec_record_get_field_by_name (descriptor, FNAME(REC_FIELD_KEY), i); /* Parse the field name from the value of %key: */ key_field_name = rec_parse_field_name_str (rec_field_value (field)); if (key_field_name) { num_fields = rec_record_get_num_fields_by_name (record, key_field_name); if (num_fields == 0) { ADD_ERROR (errors, _("%s:%s: error: key field '%s' not found in record\n"), rec_record_source (record), rec_record_location_str (record), rec_field_value (field)); res++; } else if (num_fields > 1) { ADD_ERROR (errors, _("%s:%s: error: multiple key fields '%s' in record\n"), rec_record_source (record), rec_record_location_str (record), rec_field_value (field)); res++; } else /* num_fields == 1 */ { /* Check that the value specified as the key is unique in the whole record set. */ key = rec_record_get_field_by_name (record, key_field_name, 0); duplicated_key = false; iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void**) &other_record, NULL)) { if (other_record != orig_record) { /* XXX: Only the first key field is considered. */ other_key = rec_record_get_field_by_name (other_record, key_field_name, 0); if (other_key) { if (strcmp (rec_field_value (other_key), rec_field_value (key)) == 0) { /* Found a key field with the same value in other record. */ duplicated_key = true; break; } } } } rec_mset_iterator_free (&iter); if (duplicated_key) { ADD_ERROR (errors, _("%s:%s: error: duplicated key value in field '%s' in record\n"), rec_record_source (orig_record), rec_record_location_str (orig_record), rec_field_name (key)); res++; break; } } free (key_field_name); } } } return res; } static int rec_int_check_record_singular (rec_rset_t rset, rec_record_t orig_record, rec_record_t record, rec_buf_t errors) { int res = 0; rec_record_t descriptor; size_t i; descriptor = rec_rset_descriptor (rset); if (!descriptor) return 0; for (i = 0; i < rec_record_get_num_fields_by_name (descriptor, FNAME (REC_FIELD_SINGULAR)); ++i) { size_t j; bool duplicated_singular = false; rec_field_t field = rec_record_get_field_by_name (descriptor, FNAME (REC_FIELD_SINGULAR), i); char *singular_field_name = rec_parse_field_name_str (rec_field_value (field)); /* Ignore invalid %singular entries. */ if (!singular_field_name) continue; /* Iterate over all the fields in the record having this name. */ for (j = 0; j < rec_record_get_num_fields_by_name (record, singular_field_name); ++j) { /* Check that the value in this field is singular in the whole record set. */ rec_mset_iterator_t iter; rec_record_t other_record; rec_field_t orig_field = rec_record_get_field_by_name (record, singular_field_name, j); iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void**) &other_record, NULL)) { size_t k; for (k = 0; k < rec_record_get_num_fields_by_name (other_record, singular_field_name); ++k) { rec_field_t f = rec_record_get_field_by_name (other_record, singular_field_name, k); if (other_record != orig_record && strcmp (rec_field_value (f), rec_field_value (orig_field)) == 0) { duplicated_singular = true; break; } } } rec_mset_iterator_free (&iter); } if (duplicated_singular) { ADD_ERROR (errors, _("%s:%s: error: duplicated value in singular field '%s' in record\n"), rec_record_source (orig_record), rec_record_location_str (orig_record), singular_field_name); res++; break; } } return res; } static bool rec_int_rec_type_p (const char *str) { return rec_match (str, "^[ \t]*" REC_RECORD_TYPE_RE "[ \n\t]*" "(" "(" REC_URL_REGEXP ")" "|" "(" REC_FILE_REGEXP ")" "[ \t]*)?" "$"); } static int rec_int_check_descriptor (rec_rset_t rset, rec_buf_t errors) { int res; rec_record_t descriptor; rec_mset_iterator_t iter; rec_field_t field; const char *field_name; const char *field_value; rec_fex_t fex; const char *auto_field_name; size_t i; rec_type_t type; char *type_name = NULL; const char *p, *q = NULL; res = 0; descriptor = rec_rset_descriptor (rset); if (descriptor) { /* Check the type of the record set: 1. There should be one (and only one) %rec: field in the record. 2. The value of the %rec: field shall be well-formed. */ if (rec_record_get_num_fields_by_name (descriptor, FNAME(REC_FIELD_REC)) == 0) { ADD_ERROR (errors, _("%s:%s: error: missing %%rec field in record descriptor\n"), rec_record_source (descriptor), rec_record_location_str (descriptor)); res++; } else if (rec_record_get_num_fields_by_name (descriptor, FNAME(REC_FIELD_REC)) > 1) { ADD_ERROR (errors, _("%s:%s: error: too many %%rec fields in record descriptor\n"), rec_record_source (descriptor), rec_record_location_str (descriptor)); res++; } field = rec_record_get_field_by_name (descriptor, FNAME(REC_FIELD_REC), 0); if (!rec_int_rec_type_p (rec_field_value (field))) { ADD_ERROR (errors, _("%s:%s: error: invalid record type %s\n"), rec_field_source (field), rec_field_location_str (field), rec_field_value (field)); res++; } /* Only one 'key:' entry is allowed, if any. */ if (rec_record_get_num_fields_by_name (descriptor, FNAME(REC_FIELD_KEY)) > 1) { ADD_ERROR (errors, _("%s:%s: error: only one %%key field is allowed in a record descriptor\n"), rec_record_source (descriptor), rec_record_location_str (descriptor)); res++; } /* Only one 'size:' entry is allowed, if any. */ if (rec_record_get_num_fields_by_name (descriptor, FNAME(REC_FIELD_SIZE)) > 1) { ADD_ERROR (errors, _("%s:%s: error: only one %%size field is allowed in a record descriptor\n"), rec_record_source (descriptor), rec_record_location_str (descriptor)); res++; } /* Only one 'sort:' entry is allowed, if any. */ if (rec_record_get_num_fields_by_name (descriptor, FNAME(REC_FIELD_SORT)) > 1) { ADD_ERROR (errors, _("%s:%s: error: only one %%sort field is allowed in a record descriptor\n"), rec_record_source (descriptor), rec_record_location_str (descriptor)); res++; } /* Iterate on fields. */ iter = rec_mset_iterator (rec_record_mset (descriptor)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &field, NULL)) { field_name = rec_field_name (field); field_value = rec_field_value (field); if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_TYPE))) { /* Check for the list of fields. */ p = field_value; rec_skip_blanks (&p); if (!rec_parse_regexp (&p, "^" REC_FNAME_RE "(," REC_FNAME_RE ")*", NULL)) { ADD_ERROR (errors, _("%s:%s: error: expected a comma-separated list of fields \ before the type specification\n"), rec_field_source (field), rec_field_location_str (field)); res++; } /* Check the type descriptor. Note that it can be either a type specification or a type name. */ rec_skip_blanks (&p); if (!rec_type_descr_p (p)) { q = p; if (rec_parse_regexp (&q, "^" REC_TYPE_NAME_RE "[ \t\n]*$", NULL)) { /* The named type shall exist in the record set type registry. XXX: but this is probably a warning rather than an error. */ rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE, &type_name); if (!rec_type_reg_get (rec_rset_get_type_reg (rset), type_name)) { ADD_ERROR (errors, _("%s:%s: error: the referred type %s \ does not exist\n"), rec_field_source (field), rec_field_location_str (field), type_name); res++; } } else { /* XXX: make rec_type_descr_p to report more details. */ ADD_ERROR (errors, _("%s:%s: error: invalid type specification\n"), rec_field_source (field), rec_field_location_str (field)); res++; } } } else if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_TYPEDEF))) { /* Check for the type name. */ p = field_value; rec_skip_blanks (&p); if (!rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE, NULL)) { ADD_ERROR (errors, _("%s:%s: error: expected a type name before the type \ specification\n"), rec_field_source (field), rec_field_location_str (field)); res++; } /* Check the type descriptor. Note that it can be either a type specification or a type name. */ rec_skip_blanks (&p); if (!rec_type_descr_p (p)) { q = p; if (rec_parse_regexp (&q, "^" REC_TYPE_NAME_RE "[ \t\n]*$", NULL)) { /* The named type shall exist in the record set type registry. XXX: but this is probably a warning rather than an error. */ rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE, &type_name); if (!rec_type_reg_get (rec_rset_get_type_reg (rset), type_name)) { ADD_ERROR (errors, _("%s:%s: error: the referred type %s \ does not exist\n"), rec_field_source (field), rec_field_location_str (field), type_name); res++; } } else { /* XXX: make rec_type_descr_p to report more details. */ ADD_ERROR (errors, _("%s:%s: error: invalid typedef specification\n"), rec_field_source (field), rec_field_location_str (field)); res++; } } } else if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_CONSTRAINT))) { /* Check that the value of this field is a valid selection expression. */ rec_sex_t sex = rec_sex_new (false); if (sex) { if (rec_sex_compile (sex, field_value)) { rec_sex_destroy (sex); } else { ADD_ERROR (errors, _("%s:%s: error: value for %s[%zd] is not a valid selection expression\n"), rec_record_source (descriptor), rec_record_location_str (descriptor), rec_field_name (field), rec_record_get_field_index_by_name (descriptor, field)); res++; } } else { /* Out of memory. */ res++; } } else if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_MANDATORY)) || rec_field_name_equal_p (field_name, FNAME(REC_FIELD_UNIQUE)) || rec_field_name_equal_p (field_name, FNAME(REC_FIELD_PROHIBIT)) || rec_field_name_equal_p (field_name, FNAME(REC_FIELD_AUTO)) || rec_field_name_equal_p (field_name, FNAME(REC_FIELD_SORT)) || rec_field_name_equal_p (field_name, FNAME(REC_FIELD_ALLOWED))) { /* Check that the value of this field is a parseable list of field names. */ fex = rec_fex_new (field_value, REC_FEX_SIMPLE); if (fex) { rec_fex_destroy (fex); } else { ADD_ERROR (errors, _("%s:%s: error: value for %s[%zd] is not a list of field names\n"), rec_record_source (descriptor), rec_record_location_str (descriptor), rec_field_name (field), rec_record_get_field_index_by_name (descriptor, field)); res++; } } else if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_SIZE))) { if (!rec_match (field_value, REC_INT_SIZE_RE)) { ADD_ERROR (errors, _("%s:%s: error: value for %s should be a number optionally preceded by >, <, >= or <=.\n"), rec_field_source (field), rec_field_location_str (field), field_name); res++; } } #if defined REC_CRYPT_SUPPORT else if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_CONFIDENTIAL))) { if (!rec_match (field_value, "^" "[ \n\t]*" REC_FNAME_RE "([ \n\t]+" REC_FNAME_RE ")*" "[ \n\t]*$")) { ADD_ERROR (errors, _("%s:%s: error: value for %s should be a list of field names.\n"), rec_field_source (field), rec_field_location_str (field), field_name); res++; } } #endif /* REC_CRYPT_SUPPORT */ if ((rec_field_name_equal_p (field_name, FNAME(REC_FIELD_AUTO))) && (fex = rec_fex_new (field_value, REC_FEX_SIMPLE))) { /* Check that the auto incremented fields have not been declared with a type other than 'int'. */ for (i = 0; i < rec_fex_size (fex); i++) { auto_field_name = rec_fex_elem_field_name (rec_fex_get (fex, i)); type = rec_rset_get_field_type (rset, auto_field_name); if ((!type) || ! ((rec_type_kind (type) == REC_TYPE_INT) || (rec_type_kind (type) == REC_TYPE_RANGE) #if defined UUID_TYPE || (rec_type_kind (type) == REC_TYPE_UUID) #endif || (rec_type_kind (type) == REC_TYPE_DATE))) { ADD_ERROR (errors, #if defined UUID_TYPE _("%s:%s: error: auto-incremented field %s should be of type int, range, uuid or date\n"), #else _("%s:%s: error: auto-incremented field %s should be of type int, range or date\n"), #endif rec_record_source (descriptor), rec_record_location_str (descriptor), auto_field_name); res++; } } } } rec_mset_iterator_free (&iter); } return res; } int rec_int_merge_remote (rec_rset_t rset, rec_buf_t errors) { int res; rec_parser_t parser; rec_record_t descriptor; rec_db_t remote_db; rec_rset_t remote_rset; rec_field_t remote_field; rec_mset_iterator_t iter; rec_record_t remote_descriptor; rec_field_t rec_field; char *rec_type; char *rec_url = NULL; char *rec_file = NULL; char *rec_source = NULL; FILE *external_file; char tmpfile_name[14]; res = 0; tmpfile_name[0] = '\0'; /* If a remote descriptor is defined in the record descriptor of RSET, fetch it and merge it with the local descriptor. */ descriptor = rec_rset_descriptor (rset); if (descriptor) { /* Check if there is an URL in the %rec: field. */ rec_field = rec_record_get_field_by_name (descriptor, FNAME(REC_FIELD_REC), 0); if (!rec_int_rec_type_p (rec_field_value (rec_field))) { return 0; } rec_type = rec_extract_type (rec_field_value (rec_field)); rec_file = rec_extract_file (rec_field_value (rec_field)); rec_url = rec_extract_url (rec_field_value (rec_field)); if (rec_file || rec_url) { if (rec_url) { #if defined REMOTE_DESCRIPTORS CURL *curl; int tmpfile_des; /* Fetch the remote descriptor. */ curl = curl_easy_init (); /* Create a temporary file. */ memcpy (tmpfile_name, "recint-XXXXXX", 13); tmpfile_name[13] = '\0'; tmpfile_des = gen_tempname (tmpfile_name, 0, 0, GT_FILE); external_file = fdopen (tmpfile_des, "r+"); /* Fetch the remote file. */ curl_easy_setopt (curl, CURLOPT_URL, rec_url); curl_easy_setopt (curl, CURLOPT_WRITEDATA, external_file); curl_easy_setopt (curl, CURLOPT_FAILONERROR, 1); if (curl_easy_perform (curl) != 0) { ADD_ERROR (errors, _("%s:%s: error: could not fetch remote descriptor from url %s.\n"), rec_field_source (rec_field), rec_field_location_str (rec_field), rec_url); res++; goto exit; } curl_easy_cleanup (curl); rec_source = rec_url; #else goto exit; #endif /* REMOTE_DESCRIPTORS */ } else { /* Try to open the file. */ external_file = fopen (rec_file, "r"); if (!external_file) { ADD_ERROR (errors, _("%s:%s: error: could not read external descriptor from file %s.\n"), rec_field_source (rec_field), rec_field_location_str (rec_field), rec_file); res++; goto exit; } rec_source = rec_file; } /* Parse the contents of the external file. */ fseek (external_file, 0, SEEK_SET); parser = rec_parser_new (external_file, rec_source); if (!rec_parse_db (parser, &remote_db)) { ADD_ERROR (errors, _("%s:%s: error: %s does not contain valid rec data.\n"), rec_field_source (rec_field), rec_field_location_str (rec_field), rec_source); res++; goto exit; } rec_parser_destroy (parser); /* Get the proper external descriptor and merge it with the local one. */ remote_rset = rec_db_get_rset_by_type (remote_db, rec_type); if (!remote_rset) { ADD_ERROR (errors, _("%s:%s: error: %s does not contain information for type %s.\n"), rec_field_source (rec_field), rec_field_location_str (rec_field), rec_source, rec_type); res++; goto exit; } remote_descriptor = rec_rset_descriptor (remote_rset); if (!remote_descriptor) /* Do nothing. */ goto exit; iter = rec_mset_iterator (rec_record_mset (remote_descriptor)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &remote_field, NULL)) { /* Merge the descriptors, but take care to not add a new %rec: field. */ if (!rec_field_name_equal_p (rec_field_name (remote_field), FNAME(REC_FIELD_REC))) rec_mset_append (rec_record_mset (descriptor), MSET_FIELD, (void *) rec_field_dup (remote_field), MSET_ANY); } rec_mset_iterator_free (&iter); /* Update the record descriptor (triggering the creation of a new type registry). */ rec_rset_set_descriptor (rset, rec_record_dup (descriptor)); rec_db_destroy (remote_db); fclose (external_file); } } exit: if (rec_url && (tmpfile_name[0] != '\0')) { remove (tmpfile_name); } free (rec_url); free (rec_file); return res; } int rec_int_check_db (rec_db_t db, bool check_descriptors_p, bool remote_descriptors_p, rec_buf_t errors) { int ret; size_t db_size; size_t n_rset; rec_rset_t rset; ret = 0; db_size = rec_db_size (db); for (n_rset = 0; n_rset < db_size; n_rset++) { rset = rec_db_get_rset (db, n_rset); ret = ret + rec_int_check_rset (db, rset, check_descriptors_p, remote_descriptors_p, errors); } return ret; } int rec_int_check_rset (rec_db_t db, rec_rset_t rset, bool check_descriptor_p, bool remote_descriptor_p, rec_buf_t errors) { int res; rec_mset_iterator_t iter; rec_record_t record; rec_record_t descriptor; size_t num_records, min_records, max_records; res = 0; if (remote_descriptor_p && (descriptor = rec_rset_descriptor (rset))) { /* Make a backup of the record descriptor to restore it later. */ descriptor = rec_record_dup (descriptor); /* Fetch the remote descriptor, if any, and merge it with the local descriptor. If there is any error, stop and report it. */ res = rec_int_merge_remote (rset, errors); if (res > 0) return res; } if (check_descriptor_p) res += rec_int_check_descriptor (rset, errors); if (res > 0) /* Stop here, since a lot of errors in the records will be generated due to errors in the record descriptor. */ return res; /* Verify rset size restrictions. */ num_records = rec_rset_num_records (rset); min_records = rec_rset_min_records (rset); max_records = rec_rset_max_records (rset); if (min_records == max_records) { if (num_records != min_records) { ADD_ERROR (errors, _("%s: error: the number of records of type %s should be %zd.\n"), rec_rset_source (rset), rec_rset_type (rset), min_records); res++; } } else { if (num_records > rec_rset_max_records (rset)) { ADD_ERROR (errors, _("%s: error: too many records of type %s. Maximum allowed are %zd.\n"), rec_rset_source (rset), rec_rset_type (rset), rec_rset_max_records (rset)); res++; } if (num_records < rec_rset_min_records (rset)) { ADD_ERROR (errors, _("%s: error: too few records of type %s. Minimum allowed are %zd.\n"), rec_rset_source (rset), rec_rset_type (rset), rec_rset_min_records (rset)); res++; } } iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &record, NULL)) { res += rec_int_check_record (db, rset, record, record, errors); } rec_mset_iterator_free (&iter); if (remote_descriptor_p) /* Restore the original descriptor in the record set. */ rec_rset_set_descriptor (rset, descriptor); return res; } int rec_int_check_record (rec_db_t db, rec_rset_t rset, rec_record_t orig_record, rec_record_t record, rec_buf_t errors) { int res; res = rec_int_check_record_key (rset, orig_record, record, errors) + rec_int_check_record_types (db, rset, record, errors) + rec_int_check_record_mandatory (rset, record, errors) + rec_int_check_record_unique (rset, record, errors) #if defined REC_CRYPT_SUPPORT + rec_int_check_record_secrets (rset, record, errors) #endif + rec_int_check_record_prohibit (rset, record, errors) + rec_int_check_record_sex_constraints (rset, record, errors) + rec_int_check_record_allowed (rset, record, errors) + rec_int_check_record_singular (rset, orig_record, record, errors); return res; } bool rec_int_check_field_type (rec_db_t db, rec_rset_t rset, rec_field_t field, rec_buf_t errors) { bool res = true; rec_type_t type; char *errors_str; res = true; /* Get the proper type to check 'field' with, checking with the type from the type registry of 'rset', if any. */ type = rec_rset_get_field_type (rset, rec_field_name (field)); /* Check the field with the type. This is done by simply invoking rec_type_check on the field value. An exception to this is the 'rec' type. The 'rec' type is used to implement foreign keys, and its effect on the type integrity system is that the value of the field must be considered to be of whatever type the primary key of the referred record set is. */ if (type) { if (rec_type_kind (type) == REC_TYPE_REC) { /* Get the name of the referred record set. Check the type if and only if: - The referred rset exists in DB and - The referred rset has a primary key. - The primary key of the referred rset has a type. */ const char *rset_type = rec_type_rec (type); rec_rset_t rset = rec_db_get_rset_by_type (db, rset_type); if (rset) { const char *key = rec_rset_key (rset); rec_type_t key_type = rec_rset_get_field_type (rset, key); if (key_type) { if (!rec_type_check (key_type, rec_field_value (field), &errors_str)) { if (errors) ADD_ERROR (errors, "%s:%s: error: %s\n", rec_field_source (field), rec_field_location_str (field), errors_str); free (errors_str); res = false; } } } } else { if (!rec_type_check (type, rec_field_value (field), &errors_str)) { if (errors) ADD_ERROR (errors, "%s:%s: error: %s\n", rec_field_source (field), rec_field_location_str (field), errors_str); free (errors_str); res = false; } } } return res; } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-fex.c��������������������������������������������������������������������������0000644�0000000�0000000�00000043777�14226563465�012427� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-fex.c - Field Expressions. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <gettext.h> #define _(str) dgettext (PACKAGE, str) #include <rec-utils.h> #include <rec.h> struct rec_fex_elem_s { char *str; char *field_name; char *rewrite_to; int max; int min; char *function_name; void *function_data; }; #define REC_FEX_MAX_ELEMS 256 struct rec_fex_s { int num_elems; char *str; rec_fex_elem_t elems[REC_FEX_MAX_ELEMS]; }; static void rec_fex_init (rec_fex_t fex) { /* Initialize the field expression structure so it can be safely passed to rec_fex_destroy even if its contents are not completely initialized with real values. */ memset (fex, 0 /* NULL */, sizeof (struct rec_fex_s)); } static bool rec_fex_parse_str_simple (rec_fex_t new, const char *str, const char *sep) { bool res; rec_fex_elem_t elem; char *fex_str, *fex_str_orig; char *elem_str; size_t i; if (!str) return false; fex_str = strdup (str); if (!fex_str) return false; fex_str_orig = fex_str; res = true; elem_str = strsep (&fex_str, sep); do { if (strlen (elem_str) > 0) { if ((elem = malloc (sizeof (struct rec_fex_elem_s)))) { const char *p = elem_str; /* Get the field name. */ if (!rec_parse_regexp (&p, "^" REC_FNAME_RE, &(elem->field_name))) { /* Parse error. */ free (elem); res = false; break; } /* Get the subname, if any, and modify the name accordingly. */ if (*p == '.') { char *subname = NULL; p++; if (!rec_parse_regexp (&p, "^" REC_FNAME_RE, &subname)) { /* Parse error. */ free (elem->field_name); free (elem); res = false; break; } /* Concatenate the field name and the subname. */ elem->field_name = rec_concat_strings (elem->field_name, "_", subname); } /* Check that there are no extra stuff at the end of the string. */ if (*p != '\0') { free (elem->field_name); free (elem); res = false; break; } /* Initialize other attributes of the fex entry. */ elem->function_name = NULL; elem->function_data = NULL; elem->rewrite_to = NULL; elem->str = strdup (elem_str); elem->min = -1; elem->max = -1; new->elems[new->num_elems++] = elem; } else { res = false; break; } } } while ((elem_str = strsep (&fex_str, sep))); if (new->num_elems == 0) /* No elements were recognized. */ res = false; if (res) new->str = strdup (str); else { /* Destroy parsed elements. */ for (i = 0; i < new->num_elems; i++) { free (new->elems[i]->rewrite_to); free (new->elems[i]->field_name); free (new->elems[i]->str); free (new->elems[i]); } } free (fex_str_orig); return res; } static bool rec_fex_parse_elem (rec_fex_elem_t elem, const char *str) { bool ret; const char *p; ret = true; p = str; /* 'Empty' part. */ elem->field_name = NULL; elem->function_name = NULL; elem->function_data = NULL; elem->str = NULL; elem->rewrite_to = NULL; elem->min = -1; elem->max = -1; /* The 'str' field keeps a copy of the textual entry. */ elem->str = strdup (str); /* Each FEX element can be either a function call or a field name with an optional subscript. */ if (rec_match (p, "^" REC_FEX_CALL)) { /* Get the function name and the field argument and store them in the FEX element. */ if (!rec_parse_regexp (&p, "^" REC_FEX_FUNCTION_NAME, &(elem->function_name))) { /* Parse error. */ free (elem->str); return false; } p++; /* Skip the ( */ } /* Get the field name. */ if (!rec_parse_regexp (&p, "^" REC_FNAME_RE, &(elem->field_name))) { /* Parse error. */ free (elem->str); return false; } /* Get the subname and modify the name accordingly, if it exists. */ if (*p == '.') { char *subname = NULL; p++; if (!rec_parse_regexp (&p, "^" REC_FNAME_RE, &subname)) { /* Parse error. */ free (elem->str); return false; } /* Concatenate the field_name and the subname. */ elem->field_name = rec_concat_strings (elem->field_name, "_", subname); } /* Get the subscripts if they are present. */ if (*p == '[') { p++; /* First subscript in range. */ if (!rec_parse_int (&p, &(elem->min))) { /* Parse error. */ free (elem->str); free (elem->field_name); return false; } if (*p == '-') { p++; /* Second subscript in range. */ if (!rec_parse_int (&p, &(elem->max))) { /* Parse error. */ free (elem->str); free (elem->field_name); return false; } } if (*p != ']') { /* Parse error. */ free (elem->str); free (elem->field_name); return false; } p++; /* Skip the ] */ } if (elem->function_name) { p++; /* Skip the ) */ } /* Get the rewrite rule if it is present. */ if (*p == ':') { p++; if (!rec_parse_regexp (&p, "^" REC_FNAME_RE, &(elem->rewrite_to))) { /* Parse error. */ free (elem->str); free (elem->field_name); return false; } } if (*p != '\0') { free (elem->str); free (elem->field_name); free (elem->rewrite_to); return false; } return ret; } static bool rec_fex_parse_str_subscripts (rec_fex_t new, const char *str) { bool res; char *elem_str; char *fex_str, *fex_str_orig; rec_fex_elem_t elem; int i; res = true; fex_str = strdup (str); if (!fex_str) return false; fex_str_orig = fex_str; elem_str = strsep (&fex_str, ","); do { elem = malloc (sizeof (struct rec_fex_elem_s)); if (!elem) { /* Out of memory. */ res = false; break; } if (!rec_fex_parse_elem (elem, elem_str)) { /* Parse error. */ for (i = 0; i < new->num_elems; i++) { free (new->elems[i]->field_name); free (new->elems[i]->str); free (new->elems[i]); } free (elem); res = false; break; } /* Add the elem to the FEX. */ new->elems[new->num_elems++] = elem; } while ((elem_str = strsep (&fex_str, ","))); if (res) new->str = strdup (str); free (fex_str_orig); return res; } rec_fex_t rec_fex_new (const char *str, enum rec_fex_kind_e kind) { rec_fex_t new; int i; new = malloc (sizeof (struct rec_fex_s)); if (new) { rec_fex_init (new); new->num_elems = 0; new->str = NULL; for (i = 0; i < REC_FEX_MAX_ELEMS; i++) new->elems[i] = 0; if (str != NULL) { /* Parse the string, using the proper parsing routine depending on the kind of field expression requested by the user. */ if (kind == REC_FEX_SUBSCRIPTS) { if (!rec_fex_parse_str_subscripts (new, str)) { /* Out of memory or parse error. */ free (new); return NULL; } } else if (kind == REC_FEX_SIMPLE) { if (!rec_fex_parse_str_simple (new, str, " \t\n")) { /* Out of memory or parse error. */ free (new); return NULL; } } else /* REC_FEX_CSV */ { if (!rec_fex_parse_str_simple (new, str, ",")) { /* Out of memory or parse error. */ free (new); return NULL; } } } } return new; } void rec_fex_destroy (rec_fex_t fex) { int i; if (fex) { for (i = 0; i < fex->num_elems; i++) { free (fex->elems[i]->rewrite_to); free (fex->elems[i]->field_name); free (fex->elems[i]->str); free (fex->elems[i]); } free (fex->str); free (fex); } } rec_fex_t rec_fex_dup (rec_fex_t fex) { rec_fex_t copy = NULL; size_t i = 0; copy = malloc (sizeof (struct rec_fex_s)); if (copy) { rec_fex_init (copy); copy->num_elems = fex->num_elems; copy->str = strdup (fex->str); if (!copy->str) { /* Out of memory. */ rec_fex_destroy (copy); return NULL; } for (i = 0; i < fex->num_elems; i++) { if (fex->elems[i] == NULL) { copy->elems[i] = NULL; continue; } copy->elems[i] = malloc (sizeof (struct rec_fex_elem_s)); if (!copy->elems[i]) { /* Out of memory. */ rec_fex_destroy (copy); return NULL; } copy->elems[i]->max = fex->elems[i]->max; copy->elems[i]->min = fex->elems[i]->min; #define REC_COPY_STR_MAYBE_RETURN(FNAME) \ do \ { \ if (!fex->elems[i]->FNAME) \ { \ copy->elems[i]->FNAME = NULL; \ } \ else \ { \ copy->elems[i]->FNAME = strdup (fex->elems[i]->FNAME); \ if (!copy->elems[i]->FNAME) \ { \ /* Out of memory. */ \ rec_fex_destroy (copy); \ return NULL; \ } \ } \ } while (0) REC_COPY_STR_MAYBE_RETURN (str); REC_COPY_STR_MAYBE_RETURN (field_name); REC_COPY_STR_MAYBE_RETURN (rewrite_to); REC_COPY_STR_MAYBE_RETURN (function_name); #undef REC_COPY_STR_MAYBE_RETURN } } return copy; } bool rec_fex_check (const char *str, enum rec_fex_kind_e kind) { char *regexp_str; switch (kind) { case REC_FEX_SIMPLE: regexp_str = "^" REC_FNAME_LIST_RE "$"; break; case REC_FEX_CSV: regexp_str = "^" REC_FNAME_LIST_CS_RE "$"; break; case REC_FEX_SUBSCRIPTS: regexp_str = "^" REC_FNAME_LIST_SUB_RE "$"; break; default: regexp_str = NULL; break; } return rec_match (str, regexp_str); } size_t rec_fex_size (rec_fex_t fex) { return fex->num_elems; } rec_fex_elem_t rec_fex_get (rec_fex_t fex, size_t position) { if ((position < 0) || (position >= fex->num_elems)) return NULL; return fex->elems[position]; } const char * rec_fex_elem_field_name (rec_fex_elem_t elem) { return elem->field_name; } bool rec_fex_elem_set_field_name (rec_fex_elem_t elem, const char *fname) { free (elem->field_name); elem->field_name = strdup (fname); return (elem->field_name != NULL); } int rec_fex_elem_min (rec_fex_elem_t elem) { return elem->min; } int rec_fex_elem_max (rec_fex_elem_t elem) { return elem->max; } const char * rec_fex_elem_rewrite_to (rec_fex_elem_t elem) { return elem->rewrite_to; } void rec_fex_sort (rec_fex_t fex) { bool done; rec_fex_elem_t aux; int i, j; /* XXX: this code only works when 'max' is not specified. */ for (i = 1; i < fex->num_elems; i++) { aux = fex->elems[i]; j = i - 1; done = false; while (!done) { /* If elems[j] > aux */ if ((fex->elems[j]->min == -1) || (fex->elems[j]->min > aux->min)) { fex->elems[j + 1] = fex->elems[j]; j = j - 1; if (j < 0) done = true; } else done = true; } fex->elems[j + 1] = aux; } } char * rec_fex_str (rec_fex_t fex, enum rec_fex_kind_e kind) { char *result; size_t result_size; rec_buf_t buf; size_t i; char *tmp; result = NULL; buf = rec_buf_new (&result, &result_size); if (buf) { char *field_str = NULL; for (i = 0; i < fex->num_elems; i++) { if (i != 0) { if (kind == REC_FEX_SIMPLE) rec_buf_putc (' ', buf); else rec_buf_putc (',', buf); } field_str = strdup (fex->elems[i]->field_name); if (!field_str) { rec_buf_close (buf); free (result); return NULL; } rec_buf_puts (field_str, buf); free (field_str); if (kind == REC_FEX_SUBSCRIPTS) { if ((fex->elems[i]->min != -1) || (fex->elems[i]->max != -1)) { rec_buf_putc ('[', buf); if (fex->elems[i]->min != -1) { if (asprintf (&tmp, "%d", fex->elems[i]->min) != -1) { rec_buf_puts (tmp, buf); free (tmp); } } if (fex->elems[i]->max != -1) { if (asprintf (&tmp, "-%d", fex->elems[i]->max) != -1) { rec_buf_puts (tmp, buf); free (tmp); } } rec_buf_putc (']', buf); } } } } rec_buf_close (buf); return result; } bool rec_fex_member_p (rec_fex_t fex, const char *fname, int min, int max) { bool res = false; int i; for (i = 0; i < fex->num_elems; i++) { if (rec_field_name_equal_p (fname, fex->elems[i]->field_name) && ((min == -1) || (fex->elems[i]->min == min)) && ((max == -1) || (fex->elems[i]->max == max))) { res = true; break; } } return res; } rec_fex_elem_t rec_fex_append (rec_fex_t fex, const char *fname, int min, int max) { rec_fex_elem_t new_elem; if (fex->num_elems >= REC_FEX_MAX_ELEMS) { fprintf (stderr, _("internal error: REC_FEX_MAX_ELEMS exceeded. \ Please report this.\n")); return NULL; } new_elem = malloc (sizeof (struct rec_fex_elem_s)); if (new_elem) { memset (new_elem, 0, sizeof (*new_elem)); new_elem->field_name = strdup (fname); if (!new_elem->field_name) { /* Out of memory. */ free (new_elem); return NULL; } new_elem->str = strdup (fname); if (!new_elem->str) { /* Out of memory. */ free (new_elem->field_name); free (new_elem); return NULL; } new_elem->min = min; new_elem->max = max; fex->elems[fex->num_elems++] = new_elem; } return new_elem; } const char * rec_fex_elem_function_name (rec_fex_elem_t elem) { return elem->function_name; } void ** rec_fex_elem_function_data (rec_fex_elem_t elem) { return elem->function_data; } bool rec_fex_all_calls_p (rec_fex_t fex) { bool result = true; size_t i = 0; for (i = 0; i < fex->num_elems; i++) { if (fex->elems[i]->function_name == NULL) { result = false; break; } } return result; } �recutils-1.9/src/rec-parser.c�����������������������������������������������������������������������0000644�0000000�0000000�00000061221�14226563465�013121� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-parser.c - Parsing routines. */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, * 2018, 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <stdarg.h> #include <gettext.h> #define _(str) dgettext (PACKAGE, str) #define N_(str) gettext_noop (str) #include <rec.h> #include <rec-utils.h> /* * Parser Data Structure */ enum rec_parser_error_e { REC_PARSER_NOERROR, REC_PARSER_ERROR, REC_PARSER_EUNGETC, REC_PARSER_EFNAME, REC_PARSER_ENOMEM, REC_PARSER_ETOOMUCHNAMEPARTS, REC_PARSER_ECOMMENT, REC_PARSER_EFIELD, REC_PARSER_ERECORD }; struct rec_parser_s { FILE *in_file; /* File stream used by the parser. */ const char *in_buffer; /* Buffer used by the parser. */ size_t in_size; /* Length of in_buffer. */ const char *p; /* Pointer to the next unreaded character in in_buffer */ char *source; rec_record_t prev_descriptor; bool eof; enum rec_parser_error_e error; size_t line; /* Current line number. */ size_t character; /* Current offset from the beginning of the file, in characters. */ }; const char *rec_parser_error_strings[] = { "no error (unused)", "unknown error", "unreading a character", "expected a field name", "out of memory", "too much parts in field name", "expected a comment", "expected a field", "expected a record", NULL /* Sentinel */ }; /* The following macro is used by some functions to reduce verbosity. */ #define FNAME(id) rec_std_field_name ((id)) static int rec_parser_getc (rec_parser_t parser) { int ci; /* Get the input character depending on the backend used (memory or file). */ if (parser->in_file) ci = getc (parser->in_file); else if (parser->in_buffer) { if (parser->p == parser->in_buffer + parser->in_size) ci = EOF; else { ci = *(parser->p); parser->p++; } } else { /* This point should not be reached! */ fprintf (stderr, "rec_parser_getc: no backend in parser. This is a bug.\ Please report it."); return EOF; } /* Manage EOF and update statistics. */ if (ci == EOF) parser->eof = true; else { parser->character++; if (((char) ci) == '\n') parser->line++; } return ci; } int rec_parser_ungetc (rec_parser_t parser, int ci) { int res; /* Update statistics. */ parser->character--; if (((char) ci) == '\n') parser->line--; /* Unread the character, depending on the backend used (memory or file). */ if (parser->in_file) { res = ungetc (ci, parser->in_file); if (res != ci) parser->error = REC_PARSER_EUNGETC; } else if (parser->in_buffer) { if (parser->p > parser->in_buffer) { res = ci; /* Emulate ungetc. */ parser->p--; } else { res = EOF; parser->error = REC_PARSER_EUNGETC; } } else { /* This point should not be reached! */ fprintf (stderr, "rec_parser_ungetc: no backend in parser. This is a bug.\ Please report it."); return EOF; } return res; } static bool rec_parser_digit_p (char c) { return ((c >= '0') && (c <= '9')); } static bool rec_parser_letter_p (char c) { return (((c >= 'A') && (c <= 'Z')) || ((c >= 'a') && (c <= 'z'))); } static bool rec_expect (rec_parser_t parser, const char *str) { size_t str_size; size_t counter; bool found; int ci; char c; found = true; str_size = strlen (str); for (counter = 0; counter < str_size; counter++) { ci = rec_parser_getc (parser); if (ci == EOF) { /* EOF */ found = false; parser->eof = true; break; } else { c = (char) ci; if (c != str[counter]) { /* Not match */ rec_parser_ungetc (parser, ci); found = false; break; } } } return found; } static bool rec_parse_field_value (rec_parser_t parser, char **str) { bool ret; int ci, ci2; char c, c2; size_t str_size; bool prev_newline; rec_buf_t buf; /* Sanity check */ if (rec_parser_eof (parser) || rec_parser_error (parser)) return false; c = '\0'; prev_newline = false; ret = true; buf = rec_buf_new (str, &str_size); if (!buf) { /* Out of memory */ parser->error = REC_PARSER_ENOMEM; return false; } /* A field value is a sequence of zero or more ascii codes finished * with a newline character. * * \$ is translated to nothing. * $+ ? is translated to $. */ while ((ci = rec_parser_getc (parser)) != EOF) { c = (char) ci; if ((prev_newline) && (c != '+')) { /* End of value */ rec_parser_ungetc (parser, ci); rec_buf_rewind (buf, 1); break; } if (c == '\\') { ci2 = rec_parser_getc (parser); if (ci2 == EOF) { parser->eof = true; ret = false; break; } else { c2 = (char) ci2; if (c2 == '\n') { /* Consume both $\n chars not adding them to str => do nothing here. */ } else { /* Add \ and put back c2 */ if (rec_buf_putc (c, buf) == EOF) { /* Out of memory */ parser->error = REC_PARSER_ENOMEM; return false; } if (parser->error > 0) { break; } if (rec_parser_ungetc (parser, ci2) != ci2) { ret = false; break; } } } prev_newline = false; } else if (c == '+') { if (prev_newline) { /* Reduce \n+ ? to \n by ignoring the + ? */ ci2 = rec_parser_getc (parser); if (ci2 == EOF) { parser->eof = true; ret = false; break; } else { c2 = (char) ci2; /* If the look ahead character is a blank, skip it. Otherwise put it back in the stream so it will be processed in the next iteration. */ if (c2 != ' ') { if (rec_parser_ungetc (parser, ci2) != ci2) { ret = false; break; } } } } else { if (rec_buf_putc (c, buf) == EOF) { /* Out of memory */ parser->error = REC_PARSER_ENOMEM; return false; } if (parser->error > 0) break; } prev_newline = false; } else if (c == '\n') { if (rec_buf_putc (c, buf) == EOF) { /* Out of memory */ parser->error = REC_PARSER_ENOMEM; return false; } if (parser->error > 0) break; prev_newline = true; } else { if (rec_buf_putc (c, buf) == EOF) { /* Out of memory */ parser->error = REC_PARSER_ENOMEM; return false; } if (parser->error > 0) break; prev_newline = false; } } if (ret) { if (rec_parser_eof (parser) && (c == '\n')) /* Special case: field just before EOF */ rec_buf_rewind (buf, 1); } rec_buf_close (buf); if (!ret) free (*str); return ret; } static bool rec_parse_comment (rec_parser_t parser, rec_comment_t *comment) { bool ret; rec_buf_t buf; char *str; size_t str_size; int ci; char c; ret = false; buf = rec_buf_new (&str, &str_size); /* Comments start at the beginning of line and span until the first * \n character not followed by a #, or EOF. */ if (rec_expect (parser, "#")) { while ((ci = rec_parser_getc (parser)) != EOF) { c = (char) ci; if (c == '\n') { if ((ci = rec_parser_getc (parser)) == EOF) break; c = (char) ci; if (c != '#') { rec_parser_ungetc (parser, ci); break; } else c = '\n'; } if (rec_buf_putc (ci, buf) == EOF) { /* Out of memory */ parser->error = REC_PARSER_ENOMEM; return false; } } ret = true; } rec_buf_close (buf); if (ret) *comment = rec_comment_new (str); else *comment = NULL; free (str); return ret; } static bool rec_parser_init_common (rec_parser_t parser, const char *source) { if (source) { parser->source = strdup (source); if (!parser->source) return false; } else parser->source = NULL; parser->eof = false; parser->error = REC_PARSER_NOERROR; parser->line = 1; parser->character = 0; parser->prev_descriptor = NULL; parser->p = parser->in_buffer; return true; } rec_parser_t rec_parser_new (FILE *in, const char *source) { rec_parser_t parser; parser = malloc (sizeof (struct rec_parser_s)); if (parser != NULL) { parser->in_file = in; parser->in_buffer = NULL; parser->in_size = 0; if (!rec_parser_init_common (parser, source)) { free (parser); parser = NULL; } } return parser; } rec_parser_t rec_parser_new_str (const char *buffer, const char *source) { return rec_parser_new_mem (buffer, strlen (buffer), source); } rec_parser_t rec_parser_new_mem (const char *buffer, size_t size, const char *source) { rec_parser_t parser; parser = malloc (sizeof (struct rec_parser_s)); if (parser != NULL) { parser->in_buffer = buffer; parser->in_size = size; parser->in_file = NULL; if (!rec_parser_init_common (parser, source)) { free (parser); parser = NULL; } } return parser; } void rec_parser_destroy (rec_parser_t parser) { if (parser) { free (parser->source); free (parser); } } bool rec_parser_eof (rec_parser_t parser) { return parser->eof; } bool rec_parser_error (rec_parser_t parser) { return (parser->error != REC_PARSER_NOERROR); } void rec_parser_perror (rec_parser_t parser, const char *fmt, ...) { va_list ap; char *number_str; va_start (ap, fmt); vfprintf (stderr, fmt, ap); fputs (": ", stderr); number_str = NULL; /* asprintf does the allocation */ if (asprintf (&number_str, "%zu", parser->line) != -1) { fputs (number_str, stderr); free (number_str); } fputs (": error: ", stderr); fputs (gettext (rec_parser_error_strings[parser->error]), stderr); fputc ('\n', stderr); va_end (ap); } bool rec_parse_field_name (rec_parser_t parser, char **fname) { bool ret = true; int ci; size_t str_size; char c; rec_buf_t buf; /* Sanity check */ if (rec_parser_eof (parser) || rec_parser_error (parser)) return false; buf = rec_buf_new (fname, &str_size); if (!buf) { /* Out of memory */ parser->error = REC_PARSER_ENOMEM; return false; } /* The syntax of a field name is described by the following regexp: * * [a-zA-Z%][a-zA-Z0-9_]*: */ /* [a-zA-Z%] */ ci = rec_parser_getc (parser); if (ci == EOF) ret = false; else { c = (char) ci; if ((rec_parser_letter_p (c)) || (c == '%')) { if (rec_buf_putc (c, buf) == EOF) { /* Out of memory */ parser->error = REC_PARSER_ENOMEM; return false; } } else { /* Parse error */ parser->error = REC_PARSER_EFNAME; ret = false; } } /* [a-zA-Z0-9_]* */ if (ret) { while ((ci = rec_parser_getc (parser)) != EOF) { c = (char) ci; if (rec_parser_letter_p (c) || rec_parser_digit_p (c) || (c == '_')) { if (rec_buf_putc (c, buf) == EOF) { /* Out of memory */ parser->error = REC_PARSER_ENOMEM; return false; } if (parser->error > 0) break; } else if (c == ':') /* End of token. Consume the ':' and report success */ break; else { /* Parse error */ parser->error = REC_PARSER_EFNAME; ret = false; break; } } if (parser->eof) { parser->error = REC_PARSER_EFNAME; ret = false; } } rec_buf_close (buf); if (!ret) free (*fname); else { /* Field names ends with: * * - A blank character or * - A tab or * - A newline or * - The end of the file * * Note that if the field name ends with a newline it is * pushed back to the input stream, since (unlike a blank * character) it will be part of the field value. */ ci = rec_parser_getc (parser); if (ci != EOF) { c = (char) ci; if ((c == ' ') || (c == '\t')) parser->error = REC_PARSER_NOERROR; else if (c == '\n') { parser->error = REC_PARSER_NOERROR; rec_parser_ungetc (parser, c); } else rec_parser_ungetc (parser, c); } } return ret; } void rec_parser_reset (rec_parser_t parser) { parser->eof = false; parser->error = REC_PARSER_NOERROR; parser->p = parser->in_buffer; } bool rec_parse_field (rec_parser_t parser, rec_field_t *field) { bool ret; rec_field_t new; char *field_name; char *field_value; size_t location; size_t char_location; /* Sanity check */ if (rec_parser_eof (parser) || rec_parser_error (parser)) return false; location = parser->line; char_location = parser->character; if (char_location != 0) char_location++; ret = rec_parse_field_name (parser, &field_name); if (ret) { ret = rec_parse_field_value (parser, &field_value); if (ret) { new = rec_field_new (field_name, field_value); if (new == NULL) return false; rec_field_set_source (new, parser->source); rec_field_set_location (new, location); rec_field_set_char_location (new, char_location); *field = new; free (field_value); } free (field_name); } return ret; } bool rec_parse_record (rec_parser_t parser, rec_record_t *record) { rec_record_t new; rec_field_t field; bool ret; int ci; char c; rec_comment_t comment; size_t char_location; /* Sanity check */ if (rec_parser_eof (parser) || rec_parser_error (parser)) return false; new = rec_record_new (); if (!new) { parser->error = REC_PARSER_ENOMEM; return false; } /* Localize the potential record. */ rec_record_set_source (new, parser->source); rec_record_set_location (new, parser->line); char_location = parser->character; if (char_location != 0) char_location++; rec_record_set_char_location (new, char_location); /* A record is a list of mixed fields and comments, containing at * least one field starting it: * * FIELD (FIELD|COMMENT)* */ if (rec_parse_field (parser, &field)) /* Add the field to the record */ rec_mset_append (rec_record_mset (new), MSET_FIELD, (void *) field, MSET_ANY); else { /* Expected a field. */ parser->error = REC_PARSER_EFIELD; rec_record_destroy (new); *record = NULL; return false; } ret = true; while ((ci = rec_parser_getc (parser)) != EOF) { c = (char) ci; if (c == '#') { rec_parser_ungetc (parser, ci); if (rec_parse_comment (parser, &comment)) /* Add the comment to the record. */ rec_mset_append (rec_record_mset (new), MSET_COMMENT, (void *) comment, MSET_ANY); } else if ((c == ' ') || (c == '\t')) { /* A line composed just by blanks acts like an end of record separator. */ while ((ci != EOF) && ((c == ' ') || (c == '\t'))) { ci = rec_parser_getc (parser); c = (char) ci; } if ((ci == EOF) || (c == '\n')) /* End of record */ break; else { /* Parse error: field expected */ parser->error = REC_PARSER_EFIELD; ret = false; break; } } else if (c == '\n') /* End of record */ break; else { /* Try to parse a field */ rec_parser_ungetc (parser, ci); if (rec_parse_field (parser, &field)) /* Add the field to the record */ rec_mset_append (rec_record_mset (new), MSET_FIELD, (void *) field, MSET_ANY); else { /* Parse error: field expected */ parser->error = REC_PARSER_EFIELD; ret = false; break; } } } if (ret) *record = new; else { rec_record_destroy (new); *record = NULL; } return ret; } bool rec_parse_rset (rec_parser_t parser, rec_rset_t *rset) { bool ret; int ci; char c; rec_rset_t new; rec_record_t record; rec_comment_t comment; size_t comments_added = 0; ret = false; if ((new = rec_rset_new ()) == NULL) { /* Out of memory */ parser->error = REC_PARSER_ENOMEM; return false; } /* Set the descriptor for this record set. */ rec_rset_set_descriptor (new, parser->prev_descriptor); parser->prev_descriptor = NULL; while ((ci = rec_parser_getc (parser)) != EOF) { c = (char) ci; /* Skip newline characters and blanks. */ if ((c == '\n') || (c == ' ') || (c == '\t')) continue; /* Skip comments */ else if (c == '#') { rec_parser_ungetc (parser, c); rec_parse_comment (parser, &comment); /* Add the comment to the record set. */ rec_mset_append (rec_rset_mset (new), MSET_COMMENT, (void *) comment, MSET_ANY); comments_added++; } else { /* Try to parse a record */ rec_parser_ungetc (parser, c); if (rec_parse_record (parser, &record)) { /* Check if the parsed record is a descriptor. In that case, set it as the previous descriptor in the parser state and stop parsing. In the special case where the previous descriptor is NULL (we did not find a descriptor yet) then record the position of the descriptor as well. Otherwise, add the record to the current record set. */ if (rec_record_field_p (record, FNAME(REC_FIELD_REC))) { if ((rec_rset_num_records (new) == 0) && (!rec_rset_descriptor (new))) { /* Special case: the first record found in the input stream is a descriptor. */ rec_rset_set_descriptor (new, record); rec_rset_set_descriptor_pos (new, comments_added); } else { parser->prev_descriptor = record; ret = true; break; } } else { rec_record_set_container (record, new); rec_mset_append (rec_rset_mset (new), MSET_RECORD, (void *) record, MSET_ANY); } } else { /* Parse error */ parser->error = REC_PARSER_ERECORD; break; } } } if ((parser->error == REC_PARSER_NOERROR) && (rec_rset_descriptor (new) || (rec_rset_num_records (new) > 0))) ret = true; if (ret) *rset = new; else { rec_rset_destroy (new); *rset = NULL; } return ret; } bool rec_parse_db (rec_parser_t parser, rec_db_t *db) { bool ret; rec_rset_t rset; rec_db_t new; ret = true; new = rec_db_new (); if (!new) /* Out of memory. */ return false; while (rec_parse_rset (parser, &rset)) { /* Add the rset into the database. */ if (!rec_db_insert_rset (new, rset, rec_db_size (new))) { /* Parse error: out of memory. */ parser->error = REC_PARSER_ENOMEM; ret = false; break; } } if (parser->error != REC_PARSER_NOERROR) ret = false; if (ret) *db = new; return ret; } char * rec_parse_field_name_str (const char *str) { rec_parser_t parser; char *field_name = NULL; char *str2; size_t str_size; /* Make sure the input string ends with a colon character. */ str_size = strlen (str); str2 = malloc (str_size + 2); if (!str2) /* Out of memory. */ return NULL; memcpy (str2, str, str_size); if (str_size > 0 && str2[str_size - 1] == ':') str2[str_size] = '\0'; else { str2[str_size] = ':'; str2[str_size + 1] = '\0'; } parser = rec_parser_new_str (str2, "dummy"); if (!rec_parse_field_name (parser, &field_name)) field_name = NULL; if (!rec_parser_eof (parser)) { /* There is additional stuff after the field name. */ free (field_name); field_name = NULL; } rec_parser_destroy (parser); free (str2); return field_name; } rec_record_t rec_parse_record_str (const char *str) { rec_parser_t parser; rec_record_t record; record = NULL; parser = rec_parser_new_str (str, "dummy"); if (parser) { if (!rec_parse_record (parser, &record)) record = NULL; rec_parser_destroy (parser); } return record; } bool rec_parser_seek (rec_parser_t parser, size_t line_number, size_t position) { if (parser->in_file) { if (fseek (parser->in_file, position, SEEK_SET)) return false; } else if (parser->in_buffer) { if (position > parser->in_size) return false; parser->p = parser->in_buffer + position; } else { /* This point should not be reached! */ fprintf (stderr, "rec_parser_seek: no backend in parser. This is a bug.\ Please report it."); return false; } parser->line = line_number; parser->character = position; return true; } long rec_parser_tell (rec_parser_t parser) { if (parser->in_file) return ftell (parser->in_file); else if (parser->in_buffer) return parser->p - parser->in_buffer; else { /* This point should not be reached! */ fprintf (stderr, "rec_parser_seek: no backend in parser. This is a bug.\ Please report it."); return -1; } } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-sex-lex.l����������������������������������������������������������������������0000644�0000000�0000000�00000013570�14226563465�013227� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-sex-lex.l - Selection Expressions lexer. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* Automake needs this. */ %option outfile="lex.yy.c" %option prefix="sex" %option pointer %option noyywrap %option reentrant %option bison-bridge %option extra-type="void *" %option header-file="rec-sex-lex.h" %option nounput %option noinput %top { /* This code goes at the "top" of the generated file. */ #include <config.h> } %{ #include <rec-utils.h> #include <rec-sex-ast.h> #include <rec-sex-parser.h> #include <rec-sex-tab.h> #define YY_INPUT(buf,result,max_size) \ { \ int ci; \ if ((ci = rec_sex_parser_getc ((rec_sex_parser_t) yyextra)) == -1) \ result = YY_NULL; \ else \ { \ buf[0] = (char) ci; \ result = 1; \ } \ } /* Forward prototypes for functions defined below. */ char *rec_sex_lex_extract_name (char *str); char *rec_sex_lex_extract_subname (char *str); bool rec_sex_lex_extract_index (char *str, int *num); %} NEWLINE \n BLANK [ \t\n] DIGIT [0-9] LETTER [a-zA-Z] FIELD_NAME {LETTER}[a-zA-Z0-9_]* STRING '([^']|\\(.|\n))*'|\"([^"]|\\(.|\n))*\" /* Please do not touch this comment' */ %% {BLANK} { /* Ignore whitespace */ } "-"?{DIGIT}*\.{DIGIT}+ { /* * Create a real node. */ double real_value; yylval->node = rec_sex_ast_node_new (); rec_atod (yytext, &real_value); rec_sex_ast_node_set_real (yylval->node, real_value); return REC_SEX_TOK_REAL; } "-"?((0x[0-9a-fA-F]+)|{DIGIT}+) { /* * Create an integer node. */ int integer_value; yylval->node = rec_sex_ast_node_new (); rec_atoi (yytext, &integer_value); rec_sex_ast_node_set_int (yylval->node, integer_value); return REC_SEX_TOK_INT; } "+" { return REC_SEX_TOK_ADD; } "-" { return REC_SEX_TOK_SUB; } "/" { return REC_SEX_TOK_DIV; } "%" { return REC_SEX_TOK_MOD; } ">>" { return REC_SEX_TOK_AFTER; } "<<" { return REC_SEX_TOK_BEFORE; } "<=" { return REC_SEX_TOK_LTE; } ">=" { return REC_SEX_TOK_GTE; } "==" { return REC_SEX_TOK_SAMETIME; } "=>" { return REC_SEX_TOK_IMPLIES; } "*" { return REC_SEX_TOK_MUL; } "=" { return REC_SEX_TOK_EQL; } "!=" { return REC_SEX_TOK_NEQ; } "!" { return REC_SEX_TOK_NOT; } "~" { return REC_SEX_TOK_MAT; } ">" { return REC_SEX_TOK_GT; } "<" { return REC_SEX_TOK_LT; } "(" { return REC_SEX_TOK_BP; } ")" { return REC_SEX_TOK_EP; } "&&" { return REC_SEX_TOK_AND; } "||" { return REC_SEX_TOK_OR; } "#" { return REC_SEX_TOK_SHARP; } "?" { return REC_SEX_TOK_QM; } ":" { return REC_SEX_TOK_COLON; } "&" { return REC_SEX_TOK_AMP; } {FIELD_NAME}(\.{FIELD_NAME})?(\[[0-9]+\])? { int res; char *match; char *name, *subname; int index = -1; match = strdup (yytext); rec_sex_lex_extract_index (match, &index); name = rec_sex_lex_extract_name (match); subname = rec_sex_lex_extract_subname (match); /* Create a name node. */ yylval->node = rec_sex_ast_node_new (); rec_sex_ast_node_set_name (yylval->node, name, subname); rec_sex_ast_node_set_index (yylval->node, index); res = REC_SEX_TOK_NAM; free (name); free (match); return res; } {STRING} { /* * Create a string node. */ /* Strip the quoting characters */ yytext[strlen(yytext) - 1] = 0; yylval->node = rec_sex_ast_node_new (); rec_sex_ast_node_set_str (yylval->node, yytext + 1); return REC_SEX_TOK_STR; } . { return REC_SEX_TOK_ERR; } %% char * rec_sex_lex_extract_name (char *str) { size_t size; char *res; char *p; p = str; while ((*p != '[') && (*p != '.') && (*p != 0)) p++; size = p - str; res = malloc (size + 1); memcpy (res, str, size); res[size] = 0; return res; } char * rec_sex_lex_extract_subname (char *str) { char *p; /* If there is not a subname denoted in STR then this function returns NULL. */ p = str; while ((*p != '.') && (*p != '\0')) p++; if (*p == '\0') /* There is not a second name. */ return NULL; p++; /* Skip the dot separator. */ return rec_sex_lex_extract_name (p); } bool rec_sex_lex_extract_index (char *str, int *num) { bool res; char *p; char aux[100]; int aux_size; /* Note that this function assumes syntax correctness in STR if a '[' is found. */ aux_size = 0; p = str; while ((*p != 0) && (*p != '[')) p++; if (*p == 0) res = false; else { p++; /* Pass the [. */ while (*p != ']') { aux[aux_size++] = *p; p++; } aux[aux_size] = 0; if (!rec_atoi (aux, num)) res = false; res = true; } return res; } ����������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/config.h.in������������������������������������������������������������������������0000644�0000000�0000000�00000272316�14226573143�012740� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* src/config.h.in. Generated from configure.ac by autoheader. */ /* Define if building universal (internal helper macro) */ #undef AC_APPLE_UNIVERSAL_BUILD /* Define to the number of bits in type 'ptrdiff_t'. */ #undef BITSIZEOF_PTRDIFF_T /* Define to the number of bits in type 'sig_atomic_t'. */ #undef BITSIZEOF_SIG_ATOMIC_T /* Define to the number of bits in type 'size_t'. */ #undef BITSIZEOF_SIZE_T /* Define to the number of bits in type 'wchar_t'. */ #undef BITSIZEOF_WCHAR_T /* Define to the number of bits in type 'wint_t'. */ #undef BITSIZEOF_WINT_T /* Define if you wish *printf() functions that have a safe handling of non-IEEE-754 'long double' values. */ #undef CHECK_PRINTF_SAFE /* Define to 1 if using 'alloca.c'. */ #undef C_ALLOCA /* Define as the bit index in the word where to find bit 0 of the exponent of 'double'. */ #undef DBL_EXPBIT0_BIT /* Define as the word index where to find the exponent of 'double'. */ #undef DBL_EXPBIT0_WORD /* Define as the bit index in the word where to find the sign of 'double'. */ #undef DBL_SIGNBIT_BIT /* Define as the word index where to find the sign of 'double'. */ #undef DBL_SIGNBIT_WORD /* the name of the file descriptor member of DIR */ #undef DIR_FD_MEMBER_NAME #ifdef DIR_FD_MEMBER_NAME # define DIR_TO_FD(Dir_p) ((Dir_p)->DIR_FD_MEMBER_NAME) #else # define DIR_TO_FD(Dir_p) -1 #endif /* Define to 1 if // is a file system root distinct from /. */ #undef DOUBLE_SLASH_IS_DISTINCT_ROOT /* Define if struct dirent has a member d_ino that actually works. */ #undef D_INO_IN_DIRENT /* Define to 1 if translation of program messages to the user's native language is requested. */ #undef ENABLE_NLS /* Define this to 1 if F_DUPFD behavior does not match POSIX */ #undef FCNTL_DUPFD_BUGGY /* Define to nothing if C supports flexible array members, and to 1 if it does not. That way, with a declaration like 'struct s { int n; short d[FLEXIBLE_ARRAY_MEMBER]; };', the struct hack can be used with pre-C99 compilers. Use 'FLEXSIZEOF (struct s, d, N * sizeof (short))' to calculate the size in bytes of such a struct containing an N-element array. */ #undef FLEXIBLE_ARRAY_MEMBER /* Define as the bit index in the word where to find bit 0 of the exponent of 'float'. */ #undef FLT_EXPBIT0_BIT /* Define as the word index where to find the exponent of 'float'. */ #undef FLT_EXPBIT0_WORD /* Define as the bit index in the word where to find the sign of 'float'. */ #undef FLT_SIGNBIT_BIT /* Define as the word index where to find the sign of 'float'. */ #undef FLT_SIGNBIT_WORD /* Define to 1 if fopen() fails to recognize a trailing slash. */ #undef FOPEN_TRAILING_SLASH_BUG /* Define to 1 if the system's ftello function has the Solaris bug. */ #undef FTELLO_BROKEN_AFTER_SWITCHING_FROM_READ_TO_WRITE /* Define to 1 if the system's ftello function has the macOS bug. */ #undef FTELLO_BROKEN_AFTER_UNGETC /* Define to 1 if mkdir mistakenly creates a directory given with a trailing dot component. */ #undef FUNC_MKDIR_DOT_BUG /* Define to 1 if nl_langinfo (YESEXPR) returns a non-empty string. */ #undef FUNC_NL_LANGINFO_YESEXPR_WORKS /* Define to 1 if realpath() can malloc memory, always gives an absolute path, and handles a trailing slash correctly. */ #undef FUNC_REALPATH_NEARLY_WORKS /* Define to 1 if realpath() can malloc memory, always gives an absolute path, and handles leading slashes and a trailing slash correctly. */ #undef FUNC_REALPATH_WORKS /* Define to 1 if ungetc is broken when used on arbitrary bytes. */ #undef FUNC_UNGETC_BROKEN /* Define to 1 if futimesat mishandles a NULL file name. */ #undef FUTIMESAT_NULL_BUG /* Define to the type of elements in the array set by `getgroups'. Usually this is either `int' or `gid_t'. */ #undef GETGROUPS_T /* Define this to 1 if getgroups(0,NULL) does not return the number of groups. */ #undef GETGROUPS_ZERO_BUG /* Define this to 'void' or 'struct timezone' to match the system's declaration of the second argument to gettimeofday. */ #undef GETTIMEOFDAY_TIMEZONE /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module canonicalize shall be considered present. */ #undef GNULIB_CANONICALIZE /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module canonicalize-lgpl shall be considered present. */ #undef GNULIB_CANONICALIZE_LGPL /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module close-stream shall be considered present. */ #undef GNULIB_CLOSE_STREAM /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module fdopendir shall be considered present. */ #undef GNULIB_FDOPENDIR /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module fd-safer-flag shall be considered present. */ #undef GNULIB_FD_SAFER_FLAG /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module fopen-gnu shall be considered present. */ #undef GNULIB_FOPEN_GNU /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module fscanf shall be considered present. */ #undef GNULIB_FSCANF /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module getcwd shall be considered present. */ #undef GNULIB_GETCWD /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module lock shall be considered present. */ #undef GNULIB_LOCK /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module mkostemp shall be considered present. */ #undef GNULIB_MKOSTEMP /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module msvc-nothrow shall be considered present. */ #undef GNULIB_MSVC_NOTHROW /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module openat shall be considered present. */ #undef GNULIB_OPENAT /* Define to 1 if printf and friends should be labeled with attribute "__gnu_printf__" instead of "__printf__" */ #undef GNULIB_PRINTF_ATTRIBUTE_FLAVOR_GNU /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module reallocarray shall be considered present. */ #undef GNULIB_REALLOCARRAY /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module scanf shall be considered present. */ #undef GNULIB_SCANF /* Define to 1 if you want the FILE stream functions getc, putc, etc. to use unlocked I/O if available, throughout the package. Unlocked I/O can improve performance, sometimes dramatically. But unlocked I/O is safe only in single-threaded programs, as well as in multithreaded programs for which you can guarantee that every FILE stream, including stdin, stdout, stderr, is used only in a single thread. */ #undef GNULIB_STDIO_SINGLE_THREAD /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module strerror shall be considered present. */ #undef GNULIB_STRERROR /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module tempname shall be considered present. */ #undef GNULIB_TEMPNAME /* Define to 1 when the gnulib module access should be tested. */ #undef GNULIB_TEST_ACCESS /* Define to 1 when the gnulib module btowc should be tested. */ #undef GNULIB_TEST_BTOWC /* Define to 1 when the gnulib module calloc-gnu should be tested. */ #undef GNULIB_TEST_CALLOC_GNU /* Define to 1 when the gnulib module calloc-posix should be tested. */ #undef GNULIB_TEST_CALLOC_POSIX /* Define to 1 when the gnulib module canonicalize should be tested. */ #undef GNULIB_TEST_CANONICALIZE /* Define to 1 when the gnulib module canonicalize_file_name should be tested. */ #undef GNULIB_TEST_CANONICALIZE_FILE_NAME /* Define to 1 when the gnulib module chdir should be tested. */ #undef GNULIB_TEST_CHDIR /* Define to 1 when the gnulib module cloexec should be tested. */ #undef GNULIB_TEST_CLOEXEC /* Define to 1 when the gnulib module close should be tested. */ #undef GNULIB_TEST_CLOSE /* Define to 1 when the gnulib module closedir should be tested. */ #undef GNULIB_TEST_CLOSEDIR /* Define to 1 when the gnulib module copy-file-range should be tested. */ #undef GNULIB_TEST_COPY_FILE_RANGE /* Define to 1 when the gnulib module dirfd should be tested. */ #undef GNULIB_TEST_DIRFD /* Define to 1 when the gnulib module dup should be tested. */ #undef GNULIB_TEST_DUP /* Define to 1 when the gnulib module dup2 should be tested. */ #undef GNULIB_TEST_DUP2 /* Define to 1 when the gnulib module environ should be tested. */ #undef GNULIB_TEST_ENVIRON /* Define to 1 when the gnulib module euidaccess should be tested. */ #undef GNULIB_TEST_EUIDACCESS /* Define to 1 when the gnulib module explicit_bzero should be tested. */ #undef GNULIB_TEST_EXPLICIT_BZERO /* Define to 1 when the gnulib module fchdir should be tested. */ #undef GNULIB_TEST_FCHDIR /* Define to 1 when the gnulib module fcntl should be tested. */ #undef GNULIB_TEST_FCNTL /* Define to 1 when the gnulib module fdopendir should be tested. */ #undef GNULIB_TEST_FDOPENDIR /* Define to 1 when the gnulib module fgetc should be tested. */ #undef GNULIB_TEST_FGETC /* Define to 1 when the gnulib module fgets should be tested. */ #undef GNULIB_TEST_FGETS /* Define to 1 when the gnulib module floor should be tested. */ #undef GNULIB_TEST_FLOOR /* Define to 1 when the gnulib module fopen should be tested. */ #undef GNULIB_TEST_FOPEN /* Define to 1 when the gnulib module fprintf should be tested. */ #undef GNULIB_TEST_FPRINTF /* Define to 1 when the gnulib module fprintf-posix should be tested. */ #undef GNULIB_TEST_FPRINTF_POSIX /* Define to 1 when the gnulib module fputc should be tested. */ #undef GNULIB_TEST_FPUTC /* Define to 1 when the gnulib module fputs should be tested. */ #undef GNULIB_TEST_FPUTS /* Define to 1 when the gnulib module fread should be tested. */ #undef GNULIB_TEST_FREAD /* Define to 1 when the gnulib module free-posix should be tested. */ #undef GNULIB_TEST_FREE_POSIX /* Define to 1 when the gnulib module frexp should be tested. */ #undef GNULIB_TEST_FREXP /* Define to 1 when the gnulib module frexpl should be tested. */ #undef GNULIB_TEST_FREXPL /* Define to 1 when the gnulib module fscanf should be tested. */ #undef GNULIB_TEST_FSCANF /* Define to 1 when the gnulib module fseek should be tested. */ #undef GNULIB_TEST_FSEEK /* Define to 1 when the gnulib module fseeko should be tested. */ #undef GNULIB_TEST_FSEEKO /* Define to 1 when the gnulib module fstat should be tested. */ #undef GNULIB_TEST_FSTAT /* Define to 1 when the gnulib module fstatat should be tested. */ #undef GNULIB_TEST_FSTATAT /* Define to 1 when the gnulib module ftell should be tested. */ #undef GNULIB_TEST_FTELL /* Define to 1 when the gnulib module ftello should be tested. */ #undef GNULIB_TEST_FTELLO /* Define to 1 when the gnulib module fwrite should be tested. */ #undef GNULIB_TEST_FWRITE /* Define to 1 when the gnulib module getc should be tested. */ #undef GNULIB_TEST_GETC /* Define to 1 when the gnulib module getchar should be tested. */ #undef GNULIB_TEST_GETCHAR /* Define to 1 when the gnulib module getcwd should be tested. */ #undef GNULIB_TEST_GETCWD /* Define to 1 when the gnulib module getdelim should be tested. */ #undef GNULIB_TEST_GETDELIM /* Define to 1 when the gnulib module getdtablesize should be tested. */ #undef GNULIB_TEST_GETDTABLESIZE /* Define to 1 when the gnulib module getgroups should be tested. */ #undef GNULIB_TEST_GETGROUPS /* Define to 1 when the gnulib module getline should be tested. */ #undef GNULIB_TEST_GETLINE /* Define to 1 when the gnulib module getopt-posix should be tested. */ #undef GNULIB_TEST_GETOPT_POSIX /* Define to 1 when the gnulib module getpass should be tested. */ #undef GNULIB_TEST_GETPASS /* Define to 1 when the gnulib module getpass-gnu should be tested. */ #undef GNULIB_TEST_GETPASS_GNU /* Define to 1 when the gnulib module getrandom should be tested. */ #undef GNULIB_TEST_GETRANDOM /* Define to 1 when the gnulib module gettimeofday should be tested. */ #undef GNULIB_TEST_GETTIMEOFDAY /* Define to 1 when the gnulib module group-member should be tested. */ #undef GNULIB_TEST_GROUP_MEMBER /* Define to 1 when the gnulib module localeconv should be tested. */ #undef GNULIB_TEST_LOCALECONV /* Define to 1 when the gnulib module lseek should be tested. */ #undef GNULIB_TEST_LSEEK /* Define to 1 when the gnulib module lstat should be tested. */ #undef GNULIB_TEST_LSTAT /* Define to 1 when the gnulib module malloc-gnu should be tested. */ #undef GNULIB_TEST_MALLOC_GNU /* Define to 1 when the gnulib module malloc-posix should be tested. */ #undef GNULIB_TEST_MALLOC_POSIX /* Define to 1 when the gnulib module mbrlen should be tested. */ #undef GNULIB_TEST_MBRLEN /* Define to 1 when the gnulib module mbrtowc should be tested. */ #undef GNULIB_TEST_MBRTOWC /* Define to 1 when the gnulib module mbsinit should be tested. */ #undef GNULIB_TEST_MBSINIT /* Define to 1 when the gnulib module mbtowc should be tested. */ #undef GNULIB_TEST_MBTOWC /* Define to 1 when the gnulib module memchr should be tested. */ #undef GNULIB_TEST_MEMCHR /* Define to 1 when the gnulib module mempcpy should be tested. */ #undef GNULIB_TEST_MEMPCPY /* Define to 1 when the gnulib module memrchr should be tested. */ #undef GNULIB_TEST_MEMRCHR /* Define to 1 when the gnulib module mkdir should be tested. */ #undef GNULIB_TEST_MKDIR /* Define to 1 when the gnulib module mkostemp should be tested. */ #undef GNULIB_TEST_MKOSTEMP /* Define to 1 when the gnulib module mkstemp should be tested. */ #undef GNULIB_TEST_MKSTEMP /* Define to 1 when the gnulib module mktime should be tested. */ #undef GNULIB_TEST_MKTIME /* Define to 1 when the gnulib module nl_langinfo should be tested. */ #undef GNULIB_TEST_NL_LANGINFO /* Define to 1 when the gnulib module open should be tested. */ #undef GNULIB_TEST_OPEN /* Define to 1 when the gnulib module openat should be tested. */ #undef GNULIB_TEST_OPENAT /* Define to 1 when the gnulib module opendir should be tested. */ #undef GNULIB_TEST_OPENDIR /* Define to 1 when the gnulib module pipe should be tested. */ #undef GNULIB_TEST_PIPE /* Define to 1 when the gnulib module posix_spawn should be tested. */ #undef GNULIB_TEST_POSIX_SPAWN /* Define to 1 when the gnulib module posix_spawnattr_destroy should be tested. */ #undef GNULIB_TEST_POSIX_SPAWNATTR_DESTROY /* Define to 1 when the gnulib module posix_spawnattr_init should be tested. */ #undef GNULIB_TEST_POSIX_SPAWNATTR_INIT /* Define to 1 when the gnulib module posix_spawnattr_setflags should be tested. */ #undef GNULIB_TEST_POSIX_SPAWNATTR_SETFLAGS /* Define to 1 when the gnulib module posix_spawnattr_setsigmask should be tested. */ #undef GNULIB_TEST_POSIX_SPAWNATTR_SETSIGMASK /* Define to 1 when the gnulib module posix_spawnp should be tested. */ #undef GNULIB_TEST_POSIX_SPAWNP /* Define to 1 when the gnulib module posix_spawn_file_actions_addchdir should be tested. */ #undef GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR /* Define to 1 when the gnulib module posix_spawn_file_actions_addopen should be tested. */ #undef GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_ADDOPEN /* Define to 1 when the gnulib module posix_spawn_file_actions_destroy should be tested. */ #undef GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_DESTROY /* Define to 1 when the gnulib module posix_spawn_file_actions_init should be tested. */ #undef GNULIB_TEST_POSIX_SPAWN_FILE_ACTIONS_INIT /* Define to 1 when the gnulib module printf should be tested. */ #undef GNULIB_TEST_PRINTF /* Define to 1 when the gnulib module printf-posix should be tested. */ #undef GNULIB_TEST_PRINTF_POSIX /* Define to 1 when the gnulib module putc should be tested. */ #undef GNULIB_TEST_PUTC /* Define to 1 when the gnulib module putchar should be tested. */ #undef GNULIB_TEST_PUTCHAR /* Define to 1 when the gnulib module puts should be tested. */ #undef GNULIB_TEST_PUTS /* Define to 1 when the gnulib module raise should be tested. */ #undef GNULIB_TEST_RAISE /* Define to 1 when the gnulib module random_r should be tested. */ #undef GNULIB_TEST_RANDOM_R /* Define to 1 when the gnulib module rawmemchr should be tested. */ #undef GNULIB_TEST_RAWMEMCHR /* Define to 1 when the gnulib module read should be tested. */ #undef GNULIB_TEST_READ /* Define to 1 when the gnulib module readdir should be tested. */ #undef GNULIB_TEST_READDIR /* Define to 1 when the gnulib module readlink should be tested. */ #undef GNULIB_TEST_READLINK /* Define to 1 when the gnulib module reallocarray should be tested. */ #undef GNULIB_TEST_REALLOCARRAY /* Define to 1 when the gnulib module realloc-gnu should be tested. */ #undef GNULIB_TEST_REALLOC_GNU /* Define to 1 when the gnulib module realloc-posix should be tested. */ #undef GNULIB_TEST_REALLOC_POSIX /* Define to 1 when the gnulib module realpath should be tested. */ #undef GNULIB_TEST_REALPATH /* Define to 1 when the gnulib module remove should be tested. */ #undef GNULIB_TEST_REMOVE /* Define to 1 when the gnulib module rename should be tested. */ #undef GNULIB_TEST_RENAME /* Define to 1 when the gnulib module rewinddir should be tested. */ #undef GNULIB_TEST_REWINDDIR /* Define to 1 when the gnulib module rmdir should be tested. */ #undef GNULIB_TEST_RMDIR /* Define to 1 when the gnulib module scanf should be tested. */ #undef GNULIB_TEST_SCANF /* Define to 1 when the gnulib module secure_getenv should be tested. */ #undef GNULIB_TEST_SECURE_GETENV /* Define to 1 when the gnulib module setenv should be tested. */ #undef GNULIB_TEST_SETENV /* Define to 1 when the gnulib module setlocale_null should be tested. */ #undef GNULIB_TEST_SETLOCALE_NULL /* Define to 1 when the gnulib module sigaction should be tested. */ #undef GNULIB_TEST_SIGACTION /* Define to 1 when the gnulib module signbit should be tested. */ #undef GNULIB_TEST_SIGNBIT /* Define to 1 when the gnulib module sigprocmask should be tested. */ #undef GNULIB_TEST_SIGPROCMASK /* Define to 1 when the gnulib module stat should be tested. */ #undef GNULIB_TEST_STAT /* Define to 1 when the gnulib module stpcpy should be tested. */ #undef GNULIB_TEST_STPCPY /* Define to 1 when the gnulib module strcasestr should be tested. */ #undef GNULIB_TEST_STRCASESTR /* Define to 1 when the gnulib module strchrnul should be tested. */ #undef GNULIB_TEST_STRCHRNUL /* Define to 1 when the gnulib module strdup should be tested. */ #undef GNULIB_TEST_STRDUP /* Define to 1 when the gnulib module strerror should be tested. */ #undef GNULIB_TEST_STRERROR /* Define to 1 when the gnulib module strsep should be tested. */ #undef GNULIB_TEST_STRSEP /* Define to 1 when the gnulib module strverscmp should be tested. */ #undef GNULIB_TEST_STRVERSCMP /* Define to 1 when the gnulib module timegm should be tested. */ #undef GNULIB_TEST_TIMEGM /* Define to 1 when the gnulib module time_r should be tested. */ #undef GNULIB_TEST_TIME_R /* Define to 1 when the gnulib module time_rz should be tested. */ #undef GNULIB_TEST_TIME_RZ /* Define to 1 when the gnulib module tzset should be tested. */ #undef GNULIB_TEST_TZSET /* Define to 1 when the gnulib module unlink should be tested. */ #undef GNULIB_TEST_UNLINK /* Define to 1 when the gnulib module unsetenv should be tested. */ #undef GNULIB_TEST_UNSETENV /* Define to 1 when the gnulib module utime should be tested. */ #undef GNULIB_TEST_UTIME /* Define to 1 when the gnulib module vasprintf should be tested. */ #undef GNULIB_TEST_VASPRINTF /* Define to 1 when the gnulib module vfprintf should be tested. */ #undef GNULIB_TEST_VFPRINTF /* Define to 1 when the gnulib module vfprintf-posix should be tested. */ #undef GNULIB_TEST_VFPRINTF_POSIX /* Define to 1 when the gnulib module vprintf should be tested. */ #undef GNULIB_TEST_VPRINTF /* Define to 1 when the gnulib module waitpid should be tested. */ #undef GNULIB_TEST_WAITPID /* Define to 1 when the gnulib module wcrtomb should be tested. */ #undef GNULIB_TEST_WCRTOMB /* Define to 1 when the gnulib module wctob should be tested. */ #undef GNULIB_TEST_WCTOB /* Define to 1 when the gnulib module wctomb should be tested. */ #undef GNULIB_TEST_WCTOMB /* Define to 1 when the gnulib module write should be tested. */ #undef GNULIB_TEST_WRITE /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module vfprintf-posix shall be considered present. */ #undef GNULIB_VFPRINTF_POSIX /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module xalloc shall be considered present. */ #undef GNULIB_XALLOC /* Define to a C preprocessor expression that evaluates to 1 or 0, depending whether the gnulib module xalloc-die shall be considered present. */ #undef GNULIB_XALLOC_DIE /* Define to 1 if you have the `aclsort' function. */ #undef HAVE_ACLSORT /* Define to 1 if you have the <aclv.h> header file. */ #undef HAVE_ACLV_H /* Define to 1 if you have the `aclx_get' function. */ #undef HAVE_ACLX_GET /* Define to 1 if you have the `acl_copy_ext_native' function. */ #undef HAVE_ACL_COPY_EXT_NATIVE /* Define to 1 if you have the `acl_create_entry_np' function. */ #undef HAVE_ACL_CREATE_ENTRY_NP /* Define to 1 if you have the `acl_delete_def_file' function. */ #undef HAVE_ACL_DELETE_DEF_FILE /* Define to 1 if you have the `acl_delete_fd_np' function. */ #undef HAVE_ACL_DELETE_FD_NP /* Define to 1 if you have the `acl_delete_file_np' function. */ #undef HAVE_ACL_DELETE_FILE_NP /* Define to 1 if you have the `acl_entries' function. */ #undef HAVE_ACL_ENTRIES /* Define to 1 if you have the `acl_extended_file' function. */ #undef HAVE_ACL_EXTENDED_FILE /* Define to 1 if the constant ACL_FIRST_ENTRY exists. */ #undef HAVE_ACL_FIRST_ENTRY /* Define to 1 if you have the `acl_free' function. */ #undef HAVE_ACL_FREE /* Define to 1 if you have the `acl_free_text' function. */ #undef HAVE_ACL_FREE_TEXT /* Define to 1 if you have the `acl_from_mode' function. */ #undef HAVE_ACL_FROM_MODE /* Define to 1 if you have the `acl_from_text' function. */ #undef HAVE_ACL_FROM_TEXT /* Define to 1 if you have the `acl_get_fd' function. */ #undef HAVE_ACL_GET_FD /* Define to 1 if you have the `acl_get_file' function. */ #undef HAVE_ACL_GET_FILE /* Define to 1 if you have the <acl/libacl.h> header file. */ #undef HAVE_ACL_LIBACL_H /* Define to 1 if you have the `acl_set_fd' function. */ #undef HAVE_ACL_SET_FD /* Define to 1 if you have the `acl_set_file' function. */ #undef HAVE_ACL_SET_FILE /* Define to 1 if you have the `acl_to_short_text' function. */ #undef HAVE_ACL_TO_SHORT_TEXT /* Define to 1 if you have the `acl_trivial' function. */ #undef HAVE_ACL_TRIVIAL /* Define to 1 if the ACL type ACL_TYPE_EXTENDED exists. */ #undef HAVE_ACL_TYPE_EXTENDED /* Define to 1 if you have 'alloca' after including <alloca.h>, a header that may be supplied by this distribution. */ #undef HAVE_ALLOCA /* Define to 1 if <alloca.h> works. */ #undef HAVE_ALLOCA_H /* Define to 1 if you have the <bcrypt.h> header file. */ #undef HAVE_BCRYPT_H /* Define to 1 if you have the <bp-sym.h> header file. */ #undef HAVE_BP_SYM_H /* Define to 1 if you have the `btowc' function. */ #undef HAVE_BTOWC /* Define to 1 if you have the `canonicalize_file_name' function. */ #undef HAVE_CANONICALIZE_FILE_NAME /* Define to 1 if you have the Mac OS X function CFLocaleCopyCurrent in the CoreFoundation framework. */ #undef HAVE_CFLOCALECOPYCURRENT /* Define to 1 if you have the Mac OS X function CFPreferencesCopyAppValue in the CoreFoundation framework. */ #undef HAVE_CFPREFERENCESCOPYAPPVALUE /* Define to 1 if you have the `chown' function. */ #undef HAVE_CHOWN /* Define to 1 if you have the `clock_getres' function. */ #undef HAVE_CLOCK_GETRES /* Define to 1 if you have the `clock_gettime' function. */ #undef HAVE_CLOCK_GETTIME /* Define to 1 if you have the `clock_settime' function. */ #undef HAVE_CLOCK_SETTIME /* Define to 1 if you have the `closedir' function. */ #undef HAVE_CLOSEDIR /* Define if you have compound literals. */ #undef HAVE_COMPOUND_LITERALS /* Define to 1 if you have the `confstr' function. */ #undef HAVE_CONFSTR /* Define if the copysignf function is declared in <math.h> and available in libc. */ #undef HAVE_COPYSIGNF_IN_LIBC /* Define if the copysignl function is declared in <math.h> and available in libc. */ #undef HAVE_COPYSIGNL_IN_LIBC /* Define if the copysign function is declared in <math.h> and available in libc. */ #undef HAVE_COPYSIGN_IN_LIBC /* Define to 1 if the function copy_file_range exists. */ #undef HAVE_COPY_FILE_RANGE /* Define to 1 if you have the <crtdefs.h> header file. */ #undef HAVE_CRTDEFS_H /* Define to 1 if C supports variable-length arrays. */ #undef HAVE_C_VARARRAYS /* Define if the GNU dcgettext() function is already present or preinstalled. */ #undef HAVE_DCGETTEXT /* Define to 1 if you have the declaration of `alarm', and to 0 if you don't. */ #undef HAVE_DECL_ALARM /* Define to 1 if you have the declaration of `clearerr_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_CLEARERR_UNLOCKED /* Define to 1 if you have the declaration of `copysign', and to 0 if you don't. */ #undef HAVE_DECL_COPYSIGN /* Define to 1 if you have the declaration of `copysignf', and to 0 if you don't. */ #undef HAVE_DECL_COPYSIGNF /* Define to 1 if you have the declaration of `copysignl', and to 0 if you don't. */ #undef HAVE_DECL_COPYSIGNL /* Define to 1 if you have the declaration of `dirfd', and to 0 if you don't. */ #undef HAVE_DECL_DIRFD /* Define to 1 if you have the declaration of `ecvt', and to 0 if you don't. */ #undef HAVE_DECL_ECVT /* Define to 1 if you have the declaration of `execvpe', and to 0 if you don't. */ #undef HAVE_DECL_EXECVPE /* Define to 1 if you have the declaration of `fchdir', and to 0 if you don't. */ #undef HAVE_DECL_FCHDIR /* Define to 1 if you have the declaration of `fcloseall', and to 0 if you don't. */ #undef HAVE_DECL_FCLOSEALL /* Define to 1 if you have the declaration of `fcvt', and to 0 if you don't. */ #undef HAVE_DECL_FCVT /* Define to 1 if you have the declaration of `fdopendir', and to 0 if you don't. */ #undef HAVE_DECL_FDOPENDIR /* Define to 1 if you have the declaration of `feof_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FEOF_UNLOCKED /* Define to 1 if you have the declaration of `ferror_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FERROR_UNLOCKED /* Define to 1 if you have the declaration of `fflush_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FFLUSH_UNLOCKED /* Define to 1 if you have the declaration of `fgets_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FGETS_UNLOCKED /* Define to 1 if you have the declaration of `flockfile', and to 0 if you don't. */ #undef HAVE_DECL_FLOCKFILE /* Define to 1 if you have the declaration of `fputc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FPUTC_UNLOCKED /* Define to 1 if you have the declaration of `fputs_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FPUTS_UNLOCKED /* Define to 1 if you have the declaration of `fread_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FREAD_UNLOCKED /* Define to 1 if you have the declaration of `fseeko', and to 0 if you don't. */ #undef HAVE_DECL_FSEEKO /* Define to 1 if you have the declaration of `ftello', and to 0 if you don't. */ #undef HAVE_DECL_FTELLO /* Define to 1 if you have the declaration of `funlockfile', and to 0 if you don't. */ #undef HAVE_DECL_FUNLOCKFILE /* Define to 1 if you have the declaration of `fwrite_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_FWRITE_UNLOCKED /* Define to 1 if you have the declaration of `gcvt', and to 0 if you don't. */ #undef HAVE_DECL_GCVT /* Define to 1 if you have the declaration of `getchar_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETCHAR_UNLOCKED /* Define to 1 if you have the declaration of `getcwd', and to 0 if you don't. */ #undef HAVE_DECL_GETCWD /* Define to 1 if you have the declaration of `getc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_GETC_UNLOCKED /* Define to 1 if you have the declaration of `getdelim', and to 0 if you don't. */ #undef HAVE_DECL_GETDELIM /* Define to 1 if you have the declaration of `getdtablesize', and to 0 if you don't. */ #undef HAVE_DECL_GETDTABLESIZE /* Define to 1 if you have the declaration of `getline', and to 0 if you don't. */ #undef HAVE_DECL_GETLINE /* Define to 1 if you have the declaration of `isblank', and to 0 if you don't. */ #undef HAVE_DECL_ISBLANK /* Define to 1 if you have the declaration of `localtime_r', and to 0 if you don't. */ #undef HAVE_DECL_LOCALTIME_R /* Define to 1 if you have the declaration of `mbrlen', and to 0 if you don't. */ #undef HAVE_DECL_MBRLEN /* Define to 1 if you have the declaration of `mbrtowc', and to 0 if you don't. */ #undef HAVE_DECL_MBRTOWC /* Define to 1 if you have the declaration of `mbsinit', and to 0 if you don't. */ #undef HAVE_DECL_MBSINIT /* Define to 1 if you have the declaration of `memrchr', and to 0 if you don't. */ #undef HAVE_DECL_MEMRCHR /* Define to 1 if you have the declaration of `posix_spawn', and to 0 if you don't. */ #undef HAVE_DECL_POSIX_SPAWN /* Define to 1 if you have the declaration of `program_invocation_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_NAME /* Define to 1 if you have the declaration of `program_invocation_short_name', and to 0 if you don't. */ #undef HAVE_DECL_PROGRAM_INVOCATION_SHORT_NAME /* Define to 1 if you have the declaration of `putchar_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_PUTCHAR_UNLOCKED /* Define to 1 if you have the declaration of `putc_unlocked', and to 0 if you don't. */ #undef HAVE_DECL_PUTC_UNLOCKED /* Define to 1 if you have the declaration of `setenv', and to 0 if you don't. */ #undef HAVE_DECL_SETENV /* Define to 1 if you have the declaration of `strdup', and to 0 if you don't. */ #undef HAVE_DECL_STRDUP /* Define to 1 if you have the declaration of `strerror_r', and to 0 if you don't. */ #undef HAVE_DECL_STRERROR_R /* Define to 1 if you have the declaration of `strncasecmp', and to 0 if you don't. */ #undef HAVE_DECL_STRNCASECMP /* Define to 1 if you have the declaration of `towlower', and to 0 if you don't. */ #undef HAVE_DECL_TOWLOWER /* Define to 1 if you have the declaration of `tzname', and to 0 if you don't. */ #undef HAVE_DECL_TZNAME /* Define to 1 if you have the declaration of `unsetenv', and to 0 if you don't. */ #undef HAVE_DECL_UNSETENV /* Define to 1 if you have the declaration of `wcrtomb', and to 0 if you don't. */ #undef HAVE_DECL_WCRTOMB /* Define to 1 if you have the declaration of `wcsdup', and to 0 if you don't. */ #undef HAVE_DECL_WCSDUP /* Define to 1 if you have the declaration of `wctob', and to 0 if you don't. */ #undef HAVE_DECL_WCTOB /* Define to 1 if you have the declaration of `_fseeki64', and to 0 if you don't. */ #undef HAVE_DECL__FSEEKI64 /* Define to 1 if you have the declaration of `_snprintf', and to 0 if you don't. */ #undef HAVE_DECL__SNPRINTF /* Define to 1 if you have the declaration of `__argv', and to 0 if you don't. */ #undef HAVE_DECL___ARGV /* Define to 1 if you have the declaration of `__fpending', and to 0 if you don't. */ #undef HAVE_DECL___FPENDING /* Define to 1 if you have the declaration of `__fsetlocking', and to 0 if you don't. */ #undef HAVE_DECL___FSETLOCKING /* Define to 1 if you have the <dirent.h> header file. */ #undef HAVE_DIRENT_H /* Define to 1 if you have the `dirfd' function. */ #undef HAVE_DIRFD /* Define to 1 if you have the <dlfcn.h> header file. */ #undef HAVE_DLFCN_H /* Define to 1 if you have the `eaccess' function. */ #undef HAVE_EACCESS /* Define if you have the declaration of environ. */ #undef HAVE_ENVIRON_DECL /* Define to 1 if you have the `euidaccess' function. */ #undef HAVE_EUIDACCESS /* Define to 1 if you have the `explicit_bzero' function. */ #undef HAVE_EXPLICIT_BZERO /* Define to 1 if you have the `explicit_memset' function. */ #undef HAVE_EXPLICIT_MEMSET /* Define to 1 if you have the `faccessat' function. */ #undef HAVE_FACCESSAT /* Define to 1 if you have the `facl' function. */ #undef HAVE_FACL /* Define to 1 if you have the `fchdir' function. */ #undef HAVE_FCHDIR /* Define to 1 if you have the `fchmod' function. */ #undef HAVE_FCHMOD /* Define to 1 if you have the `fcntl' function. */ #undef HAVE_FCNTL /* Define to 1 if you have the `fdopendir' function. */ #undef HAVE_FDOPENDIR /* Define to 1 if you have the <features.h> header file. */ #undef HAVE_FEATURES_H /* Define to 1 if you have the `flock' function. */ #undef HAVE_FLOCK /* Define to 1 if you have the `flockfile' function. */ #undef HAVE_FLOCKFILE /* Define if the 'free' function is guaranteed to preserve errno. */ #undef HAVE_FREE_POSIX /* Define if the frexpl function is available in libc. */ #undef HAVE_FREXPL_IN_LIBC /* Define if the frexp function is available in libc. */ #undef HAVE_FREXP_IN_LIBC /* Define to 1 if fseeko (and presumably ftello) exists and is declared. */ #undef HAVE_FSEEKO /* Define to 1 if you have the `fstatat' function. */ #undef HAVE_FSTATAT /* Define to 1 if you have the `funlockfile' function. */ #undef HAVE_FUNLOCKFILE /* Define to 1 if you have the `futimens' function. */ #undef HAVE_FUTIMENS /* Define to 1 if you have the `futimes' function. */ #undef HAVE_FUTIMES /* Define to 1 if you have the `futimesat' function. */ #undef HAVE_FUTIMESAT /* Define to 1 if you have the `getacl' function. */ #undef HAVE_GETACL /* Define to 1 if you have the `getcwd' function. */ #undef HAVE_GETCWD /* Define to 1 if getcwd works, but with shorter paths than is generally tested with the replacement. */ #undef HAVE_GETCWD_SHORTER /* Define to 1 if you have the `getdelim' function. */ #undef HAVE_GETDELIM /* Define to 1 if you have the `getdtablesize' function. */ #undef HAVE_GETDTABLESIZE /* Define to 1 if you have the `getegid' function. */ #undef HAVE_GETEGID /* Define to 1 if you have the `geteuid' function. */ #undef HAVE_GETEUID /* Define to 1 if you have the `getexecname' function. */ #undef HAVE_GETEXECNAME /* Define to 1 if you have the `getgid' function. */ #undef HAVE_GETGID /* Define to 1 if your system has a working `getgroups' function. */ #undef HAVE_GETGROUPS /* Define to 1 if you have the <getopt.h> header file. */ #undef HAVE_GETOPT_H /* Define to 1 if you have the `getopt_long_only' function. */ #undef HAVE_GETOPT_LONG_ONLY /* Define to 1 if the system has the 'getpagesize' function. */ #undef HAVE_GETPAGESIZE /* Define to 1 if you have the `getpass' function. */ #undef HAVE_GETPASS /* Define to 1 if you have the `getprogname' function. */ #undef HAVE_GETPROGNAME /* Define to 1 if you have the `getrandom' function. */ #undef HAVE_GETRANDOM /* Define if the GNU gettext() function is already present or preinstalled. */ #undef HAVE_GETTEXT /* Define to 1 if you have the `gettimeofday' function. */ #undef HAVE_GETTIMEOFDAY /* Define to 1 if you have the `getuid' function. */ #undef HAVE_GETUID /* Define if you have the iconv() function and it works. */ #undef HAVE_ICONV /* Define if you have the 'intmax_t' type in <stdint.h> or <inttypes.h>. */ #undef HAVE_INTMAX_T /* Define to 1 if you have the <inttypes.h> header file. */ #undef HAVE_INTTYPES_H /* Define if <inttypes.h> exists, doesn't clash with <sys/types.h>, and declares uintmax_t. */ #undef HAVE_INTTYPES_H_WITH_UINTMAX /* Define to 1 if you have the `isblank' function. */ #undef HAVE_ISBLANK /* Define if the isnan(double) function is available in libc. */ #undef HAVE_ISNAND_IN_LIBC /* Define if the isnan(float) function is available in libc. */ #undef HAVE_ISNANF_IN_LIBC /* Define if the isnan(long double) function is available in libc. */ #undef HAVE_ISNANL_IN_LIBC /* Define to 1 if you have the `issetugid' function. */ #undef HAVE_ISSETUGID /* Define to 1 if you have the `iswcntrl' function. */ #undef HAVE_ISWCNTRL /* Define to 1 if you have the `iswctype' function. */ #undef HAVE_ISWCTYPE /* Define if you have <langinfo.h> and nl_langinfo(CODESET). */ #undef HAVE_LANGINFO_CODESET /* Define to 1 if you have the <langinfo.h> header file. */ #undef HAVE_LANGINFO_H /* Define if the ldexpl function is available in libc. */ #undef HAVE_LDEXPL_IN_LIBC /* Define if the ldexp function is available in libc. */ #undef HAVE_LDEXP_IN_LIBC /* Define if you have the libgcrypt library. */ #undef HAVE_LIBGCRYPT /* Define to 1 if you have the <libgen.h> header file. */ #undef HAVE_LIBGEN_H /* Define to 1 if you have the <libintl.h> header file. */ #undef HAVE_LIBINTL_H /* Define to 1 if the bcrypt library is guaranteed to be present. */ #undef HAVE_LIB_BCRYPT /* Define to 1 if you have the <limits.h> header file. */ #undef HAVE_LIMITS_H /* Define to 1 if you have the `link' function. */ #undef HAVE_LINK /* Define if localtime-like functions can loop forever on extreme arguments. */ #undef HAVE_LOCALTIME_INFLOOP_BUG /* Define to 1 if you have the `localtime_r' function. */ #undef HAVE_LOCALTIME_R /* Define to 1 if the system has the type 'long long int'. */ #undef HAVE_LONG_LONG_INT /* Define to 1 if you have the `lstat' function. */ #undef HAVE_LSTAT /* Define to 1 if you have the `lutimes' function. */ #undef HAVE_LUTIMES /* Define to 1 if you have the <malloc.h> header file. */ #undef HAVE_MALLOC_H /* Define if malloc, realloc, and calloc set errno on allocation failure. */ #undef HAVE_MALLOC_POSIX /* Define to 1 if mmap()'s MAP_ANONYMOUS flag is available after including config.h and <sys/mman.h>. */ #undef HAVE_MAP_ANONYMOUS /* Define to 1 if you have the <math.h> header file. */ #undef HAVE_MATH_H /* Define to 1 if you have the `mbrlen' function. */ #undef HAVE_MBRLEN /* Define to 1 if you have the `mbrtowc' function. */ #undef HAVE_MBRTOWC /* Define to 1 if you have the `mbsinit' function. */ #undef HAVE_MBSINIT /* Define to 1 if <wchar.h> declares mbstate_t. */ #undef HAVE_MBSTATE_T /* Define to 1 if you have the `mbtowc' function. */ #undef HAVE_MBTOWC /* Define to 1 if you have the `mempcpy' function. */ #undef HAVE_MEMPCPY /* Define to 1 if you have the `memrchr' function. */ #undef HAVE_MEMRCHR /* Define to 1 if you have the `memset_s' function. */ #undef HAVE_MEMSET_S /* Define to 1 if getcwd minimally works, that is, its result can be trusted when it succeeds. */ #undef HAVE_MINIMALLY_WORKING_GETCWD /* Define to 1 if you have the <minix/config.h> header file. */ #undef HAVE_MINIX_CONFIG_H /* Define to 1 if <limits.h> defines the MIN and MAX macros. */ #undef HAVE_MINMAX_IN_LIMITS_H /* Define to 1 if <sys/param.h> defines the MIN and MAX macros. */ #undef HAVE_MINMAX_IN_SYS_PARAM_H /* Define to 1 if you have the `mkostemp' function. */ #undef HAVE_MKOSTEMP /* Define to 1 if you have the `mkstemp' function. */ #undef HAVE_MKSTEMP /* Define to 1 if you have the `mprotect' function. */ #undef HAVE_MPROTECT /* Define to 1 on MSVC platforms that have the "invalid parameter handler" concept. */ #undef HAVE_MSVC_INVALID_PARAMETER_HANDLER /* Define to 1 if you have the `nl_langinfo' function. */ #undef HAVE_NL_LANGINFO /* Define to 1 if the system has obstacks that work with any size object. */ #undef HAVE_OBSTACK /* Define to 1 if you have the `openat' function. */ #undef HAVE_OPENAT /* Define to 1 if you have the `opendir' function. */ #undef HAVE_OPENDIR /* Define to 1 if getcwd works, except it sometimes fails when it shouldn't, setting errno to ERANGE, ENAMETOOLONG, or ENOENT. */ #undef HAVE_PARTLY_WORKING_GETCWD /* Define to 1 if you have the <paths.h> header file. */ #undef HAVE_PATHS_H /* Define to 1 if you have the `pipe' function. */ #undef HAVE_PIPE /* Define to 1 if you have the `posix_spawn' function. */ #undef HAVE_POSIX_SPAWN /* Define to 1 if the system has the type `posix_spawnattr_t'. */ #undef HAVE_POSIX_SPAWNATTR_T /* Define to 1 if you have the `posix_spawn_file_actions_addchdir' function. */ #undef HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR /* Define to 1 if you have the `posix_spawn_file_actions_addchdir_np' function. */ #undef HAVE_POSIX_SPAWN_FILE_ACTIONS_ADDCHDIR_NP /* Define to 1 if the system has the type `posix_spawn_file_actions_t'. */ #undef HAVE_POSIX_SPAWN_FILE_ACTIONS_T /* Define if you have the <pthread.h> header and the POSIX threads API. */ #undef HAVE_PTHREAD_API /* Define if the <pthread.h> defines PTHREAD_MUTEX_RECURSIVE. */ #undef HAVE_PTHREAD_MUTEX_RECURSIVE /* Define if the POSIX multithreading library has read/write locks. */ #undef HAVE_PTHREAD_RWLOCK /* Define if the 'pthread_rwlock_rdlock' function prefers a writer to a reader. */ #undef HAVE_PTHREAD_RWLOCK_RDLOCK_PREFER_WRITER /* Define to 1 if you have the `raise' function. */ #undef HAVE_RAISE /* Define to 1 if you have the <random.h> header file. */ #undef HAVE_RANDOM_H /* Define to 1 if you have the `random_r' function. */ #undef HAVE_RANDOM_R /* Define to 1 if you have the `rawmemchr' function. */ #undef HAVE_RAWMEMCHR /* Define to 1 if you have the `readdir' function. */ #undef HAVE_READDIR /* Define if you have the readline library. */ #undef HAVE_READLINE /* Define to 1 if you have the <readline/history.h> header file. */ #undef HAVE_READLINE_HISTORY_H /* Define to 1 if you have the <readline/readline.h> header file. */ #undef HAVE_READLINE_READLINE_H /* Define to 1 if you have the `readlink' function. */ #undef HAVE_READLINK /* Define to 1 if you have the `reallocarray' function. */ #undef HAVE_REALLOCARRAY /* Define to 1 if you have the `realpath' function. */ #undef HAVE_REALPATH /* Define to 1 if you have the `rewinddir' function. */ #undef HAVE_REWINDDIR /* Define to 1 if 'long double' and 'double' have the same representation. */ #undef HAVE_SAME_LONG_DOUBLE_AS_DOUBLE /* Define to 1 if you have the <sched.h> header file. */ #undef HAVE_SCHED_H /* Define to 1 if you have the `sched_setparam' function. */ #undef HAVE_SCHED_SETPARAM /* Define to 1 if you have the `sched_setscheduler' function. */ #undef HAVE_SCHED_SETSCHEDULER /* Define to 1 if you have the <sdkddkver.h> header file. */ #undef HAVE_SDKDDKVER_H /* Define to 1 if you have the <search.h> header file. */ #undef HAVE_SEARCH_H /* Define to 1 if you have the `secure_getenv' function. */ #undef HAVE_SECURE_GETENV /* Define to 1 if you have the <selinux/context.h> header file. */ #undef HAVE_SELINUX_CONTEXT_H /* Define to 1 if you have the <selinux/label.h> header file. */ #undef HAVE_SELINUX_LABEL_H /* Define to 1 if you have the <selinux/selinux.h> header file. */ #undef HAVE_SELINUX_SELINUX_H /* Define to 1 if you have the `setdtablesize' function. */ #undef HAVE_SETDTABLESIZE /* Define to 1 if you have the `setegid' function. */ #undef HAVE_SETEGID /* Define to 1 if you have the `setenv' function. */ #undef HAVE_SETENV /* Define to 1 if you have the `seteuid' function. */ #undef HAVE_SETEUID /* Define to 1 if you have the `sigaction' function. */ #undef HAVE_SIGACTION /* Define to 1 if you have the `sigaltstack' function. */ #undef HAVE_SIGALTSTACK /* Define to 1 if the system has the type `siginfo_t'. */ #undef HAVE_SIGINFO_T /* Define to 1 if you have the `siginterrupt' function. */ #undef HAVE_SIGINTERRUPT /* Define to 1 if 'sig_atomic_t' is a signed integer type. */ #undef HAVE_SIGNED_SIG_ATOMIC_T /* Define to 1 if 'wchar_t' is a signed integer type. */ #undef HAVE_SIGNED_WCHAR_T /* Define to 1 if 'wint_t' is a signed integer type. */ #undef HAVE_SIGNED_WINT_T /* Define to 1 if the system has the type `sigset_t'. */ #undef HAVE_SIGSET_T /* Define to 1 if the system has the type `sig_atomic_t'. */ #undef HAVE_SIG_ATOMIC_T /* Define to 1 if you have the `snprintf' function. */ #undef HAVE_SNPRINTF /* Define if the return value of the snprintf function is the number of of bytes (excluding the terminating NUL) that would have been produced if the buffer had been large enough. */ #undef HAVE_SNPRINTF_RETVAL_C99 /* Define if the string produced by the snprintf function is always NUL terminated. */ #undef HAVE_SNPRINTF_TRUNCATION_C99 /* Define to 1 if you have the <spawn.h> header file. */ #undef HAVE_SPAWN_H /* Define to 1 if you have the `statacl' function. */ #undef HAVE_STATACL /* Define to 1 if you have the <stdint.h> header file. */ #undef HAVE_STDINT_H /* Define if <stdint.h> exists, doesn't clash with <sys/types.h>, and declares uintmax_t. */ #undef HAVE_STDINT_H_WITH_UINTMAX /* Define to 1 if you have the <stdio_ext.h> header file. */ #undef HAVE_STDIO_EXT_H /* Define to 1 if you have the <stdio.h> header file. */ #undef HAVE_STDIO_H /* Define to 1 if you have the <stdlib.h> header file. */ #undef HAVE_STDLIB_H /* Define to 1 if you have the `stpcpy' function. */ #undef HAVE_STPCPY /* Define to 1 if you have the `strcasecmp' function. */ #undef HAVE_STRCASECMP /* Define to 1 if you have the `strcasestr' function. */ #undef HAVE_STRCASESTR /* Define to 1 if you have the `strchrnul' function. */ #undef HAVE_STRCHRNUL /* Define if you have `strerror_r'. */ #undef HAVE_STRERROR_R /* Define to 1 if you have the <strings.h> header file. */ #undef HAVE_STRINGS_H /* Define to 1 if you have the <string.h> header file. */ #undef HAVE_STRING_H /* Define to 1 if you have the `strncasecmp' function. */ #undef HAVE_STRNCASECMP /* Define to 1 if you have the `strnlen' function. */ #undef HAVE_STRNLEN /* Define to 1 if you have the `strsep' function. */ #undef HAVE_STRSEP /* Define to 1 if `l_type' is a member of `struct flock'. */ #undef HAVE_STRUCT_FLOCK_L_TYPE /* Define to 1 if `decimal_point' is a member of `struct lconv'. */ #undef HAVE_STRUCT_LCONV_DECIMAL_POINT /* Define to 1 if the system has the type `struct random_data'. */ #undef HAVE_STRUCT_RANDOM_DATA /* Define to 1 if `sa_sigaction' is a member of `struct sigaction'. */ #undef HAVE_STRUCT_SIGACTION_SA_SIGACTION /* Define to 1 if `st_atimensec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIMENSEC /* Define to 1 if `st_atimespec.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIMESPEC_TV_NSEC /* Define to 1 if `st_atim.st__tim.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIM_ST__TIM_TV_NSEC /* Define to 1 if `st_atim.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_ATIM_TV_NSEC /* Define to 1 if `st_birthtimensec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIMENSEC /* Define to 1 if `st_birthtimespec.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIMESPEC_TV_NSEC /* Define to 1 if `st_birthtim.tv_nsec' is a member of `struct stat'. */ #undef HAVE_STRUCT_STAT_ST_BIRTHTIM_TV_NSEC /* Define to 1 if `tm_zone' is a member of `struct tm'. */ #undef HAVE_STRUCT_TM_TM_ZONE /* Define to 1 if you have the `strverscmp' function. */ #undef HAVE_STRVERSCMP /* Define to 1 if you have the `symlink' function. */ #undef HAVE_SYMLINK /* Define to 1 if you have the <sys/acl.h> header file. */ #undef HAVE_SYS_ACL_H /* Define to 1 if you have the <sys/bitypes.h> header file. */ #undef HAVE_SYS_BITYPES_H /* Define to 1 if you have the <sys/cdefs.h> header file. */ #undef HAVE_SYS_CDEFS_H /* Define to 1 if you have the <sys/file.h> header file. */ #undef HAVE_SYS_FILE_H /* Define to 1 if you have the <sys/inttypes.h> header file. */ #undef HAVE_SYS_INTTYPES_H /* Define to 1 if you have the <sys/mman.h> header file. */ #undef HAVE_SYS_MMAN_H /* Define to 1 if you have the <sys/param.h> header file. */ #undef HAVE_SYS_PARAM_H /* Define to 1 if you have the <sys/random.h> header file. */ #undef HAVE_SYS_RANDOM_H /* Define to 1 if you have the <sys/single_threaded.h> header file. */ #undef HAVE_SYS_SINGLE_THREADED_H /* Define to 1 if you have the <sys/socket.h> header file. */ #undef HAVE_SYS_SOCKET_H /* Define to 1 if you have the <sys/stat.h> header file. */ #undef HAVE_SYS_STAT_H /* Define to 1 if you have the <sys/time.h> header file. */ #undef HAVE_SYS_TIME_H /* Define to 1 if you have the <sys/types.h> header file. */ #undef HAVE_SYS_TYPES_H /* Define to 1 if you have the <sys/wait.h> header file. */ #undef HAVE_SYS_WAIT_H /* Define to 1 if the system has the 'tcgetattr' function. */ #undef HAVE_TCGETATTR /* Define to 1 if the system has the 'tcsetattr' function. */ #undef HAVE_TCSETATTR /* Define to 1 if you have the <termios.h> header file. */ #undef HAVE_TERMIOS_H /* Define to 1 if you have the `thrd_create' function. */ #undef HAVE_THRD_CREATE /* Define to 1 if you have the <threads.h> header file. */ #undef HAVE_THREADS_H /* Define to 1 if you have the `timegm' function. */ #undef HAVE_TIMEGM /* Define to 1 if you have the `timespec_get' function. */ #undef HAVE_TIMESPEC_GET /* Define to 1 if the system has the type `timezone_t'. */ #undef HAVE_TIMEZONE_T /* Define if struct tm has the tm_gmtoff member. */ #undef HAVE_TM_GMTOFF /* Define to 1 if your `struct tm' has `tm_zone'. Deprecated, use `HAVE_STRUCT_TM_TM_ZONE' instead. */ #undef HAVE_TM_ZONE /* Define to 1 if you have the `towlower' function. */ #undef HAVE_TOWLOWER /* Define to 1 if you have the `tsearch' function. */ #undef HAVE_TSEARCH /* Define to 1 if you don't have `tm_zone' but do have the external array `tzname'. */ #undef HAVE_TZNAME /* Define to 1 if you have the <unistd.h> header file. */ #undef HAVE_UNISTD_H /* Define to 1 if you have the `unsetenv' function. */ #undef HAVE_UNSETENV /* Define to 1 if the system has the type 'unsigned long long int'. */ #undef HAVE_UNSIGNED_LONG_LONG_INT /* Define to 1 if you have the `utime' function. */ #undef HAVE_UTIME /* Define to 1 if you have the `utimensat' function. */ #undef HAVE_UTIMENSAT /* Define to 1 if you have the <utime.h> header file. */ #undef HAVE_UTIME_H /* Define if you have a global __progname variable */ #undef HAVE_VAR___PROGNAME /* Define to 1 if you have the `vasnprintf' function. */ #undef HAVE_VASNPRINTF /* Define to 1 if you have the `vasprintf' function. */ #undef HAVE_VASPRINTF /* Define to 1 if you have the `vfork' function. */ #undef HAVE_VFORK /* Define to 1 or 0, depending whether the compiler supports simple visibility declarations. */ #undef HAVE_VISIBILITY /* Define to 1 if you have the `waitid' function. */ #undef HAVE_WAITID /* Define to 1 if you have the <wchar.h> header file. */ #undef HAVE_WCHAR_H /* Define if you have the 'wchar_t' type. */ #undef HAVE_WCHAR_T /* Define to 1 if you have the `wcrtomb' function. */ #undef HAVE_WCRTOMB /* Define to 1 if you have the `wcslen' function. */ #undef HAVE_WCSLEN /* Define to 1 if you have the `wcsnlen' function. */ #undef HAVE_WCSNLEN /* Define to 1 if you have the `wctob' function. */ #undef HAVE_WCTOB /* Define to 1 if you have the <wctype.h> header file. */ #undef HAVE_WCTYPE_H /* Define to 1 if the compiler and linker support weak declarations of symbols. */ #undef HAVE_WEAK_SYMBOLS /* Define to 1 if you have the <winsock2.h> header file. */ #undef HAVE_WINSOCK2_H /* Define if you have the 'wint_t' type. */ #undef HAVE_WINT_T /* Define to 1 if fstatat (..., 0) works. For example, it does not work in AIX 7.1. */ #undef HAVE_WORKING_FSTATAT_ZERO_FLAG /* Define to 1 if O_NOATIME works. */ #undef HAVE_WORKING_O_NOATIME /* Define to 1 if O_NOFOLLOW works. */ #undef HAVE_WORKING_O_NOFOLLOW /* Define if utimes works properly. */ #undef HAVE_WORKING_UTIMES /* Define to 1 if you have the <xlocale.h> header file. */ #undef HAVE_XLOCALE_H /* Define to 1 if the system has the type `_Bool'. */ #undef HAVE__BOOL /* Define to 1 if you have the `_fseeki64' function. */ #undef HAVE__FSEEKI64 /* Define to 1 if you have the `_ftelli64' function. */ #undef HAVE__FTELLI64 /* Define to 1 if you have the `_set_invalid_parameter_handler' function. */ #undef HAVE__SET_INVALID_PARAMETER_HANDLER /* Define to 1 if the compiler supports __builtin_expect, and to 2 if <builtins.h> does. */ #undef HAVE___BUILTIN_EXPECT #ifndef HAVE___BUILTIN_EXPECT # define __builtin_expect(e, c) (e) #elif HAVE___BUILTIN_EXPECT == 2 # include <builtins.h> #endif /* Define to 1 if you have the `__fseterr' function. */ #undef HAVE___FSETERR /* Define to 1 if you have the `__fsetlocking' function. */ #undef HAVE___FSETLOCKING /* Define to 1 if you have the `__fwriting' function. */ #undef HAVE___FWRITING /* Define to 1 if ctype.h defines __header_inline. */ #undef HAVE___HEADER_INLINE /* Please see the Gnulib manual for how to use these macros. Suppress extern inline with HP-UX cc, as it appears to be broken; see <https://lists.gnu.org/r/bug-texinfo/2013-02/msg00030.html>. Suppress extern inline with Sun C in standards-conformance mode, as it mishandles inline functions that call each other. E.g., for 'inline void f (void) { } inline void g (void) { f (); }', c99 incorrectly complains 'reference to static identifier "f" in extern inline function'. This bug was observed with Oracle Developer Studio 12.6 (Sun C 5.15 SunOS_sparc 2017/05/30). Suppress extern inline (with or without __attribute__ ((__gnu_inline__))) on configurations that mistakenly use 'static inline' to implement functions or macros in standard C headers like <ctype.h>. For example, if isdigit is mistakenly implemented via a static inline function, a program containing an extern inline function that calls isdigit may not work since the C standard prohibits extern inline functions from calling static functions (ISO C 99 section 6.7.4.(3). This bug is known to occur on: OS X 10.8 and earlier; see: https://lists.gnu.org/r/bug-gnulib/2012-12/msg00023.html DragonFly; see http://muscles.dragonflybsd.org/bulk/clang-master-potential/20141111_102002/logs/ah-tty-0.3.12.log FreeBSD; see: https://lists.gnu.org/r/bug-gnulib/2014-07/msg00104.html OS X 10.9 has a macro __header_inline indicating the bug is fixed for C and for clang but remains for g++; see <https://trac.macports.org/ticket/41033>. Assume DragonFly and FreeBSD will be similar. GCC 4.3 and above with -std=c99 or -std=gnu99 implements ISO C99 inline semantics, unless -fgnu89-inline is used. It defines a macro __GNUC_STDC_INLINE__ to indicate this situation or a macro __GNUC_GNU_INLINE__ to indicate the opposite situation. GCC 4.2 with -std=c99 or -std=gnu99 implements the GNU C inline semantics but warns, unless -fgnu89-inline is used: warning: C99 inline functions are not supported; using GNU89 warning: to disable this warning use -fgnu89-inline or the gnu_inline function attribute It defines a macro __GNUC_GNU_INLINE__ to indicate this situation. */ #if (((defined __APPLE__ && defined __MACH__) \ || defined __DragonFly__ || defined __FreeBSD__) \ && (defined HAVE___HEADER_INLINE \ ? (defined __cplusplus && defined __GNUC_STDC_INLINE__ \ && ! defined __clang__) \ : ((! defined _DONT_USE_CTYPE_INLINE_ \ && (defined __GNUC__ || defined __cplusplus)) \ || (defined _FORTIFY_SOURCE && 0 < _FORTIFY_SOURCE \ && defined __GNUC__ && ! defined __cplusplus)))) # define _GL_EXTERN_INLINE_STDHEADER_BUG #endif #if ((__GNUC__ \ ? defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ \ : (199901L <= __STDC_VERSION__ \ && !defined __HP_cc \ && !defined __PGI \ && !(defined __SUNPRO_C && __STDC__))) \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # define _GL_INLINE inline # define _GL_EXTERN_INLINE extern inline # define _GL_EXTERN_INLINE_IN_USE #elif (2 < __GNUC__ + (7 <= __GNUC_MINOR__) && !defined __STRICT_ANSI__ \ && !defined _GL_EXTERN_INLINE_STDHEADER_BUG) # if defined __GNUC_GNU_INLINE__ && __GNUC_GNU_INLINE__ /* __gnu_inline__ suppresses a GCC 4.2 diagnostic. */ # define _GL_INLINE extern inline __attribute__ ((__gnu_inline__)) # else # define _GL_INLINE extern inline # endif # define _GL_EXTERN_INLINE extern # define _GL_EXTERN_INLINE_IN_USE #else # define _GL_INLINE _GL_UNUSED static # define _GL_EXTERN_INLINE _GL_UNUSED static #endif /* In GCC 4.6 (inclusive) to 5.1 (exclusive), suppress bogus "no previous prototype for 'FOO'" and "no previous declaration for 'FOO'" diagnostics, when FOO is an inline function in the header; see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=54113> and <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=63877>. */ #if __GNUC__ == 4 && 6 <= __GNUC_MINOR__ # if defined __GNUC_STDC_INLINE__ && __GNUC_STDC_INLINE__ # define _GL_INLINE_HEADER_CONST_PRAGMA # else # define _GL_INLINE_HEADER_CONST_PRAGMA \ _Pragma ("GCC diagnostic ignored \"-Wsuggest-attribute=const\"") # endif # define _GL_INLINE_HEADER_BEGIN \ _Pragma ("GCC diagnostic push") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-prototypes\"") \ _Pragma ("GCC diagnostic ignored \"-Wmissing-declarations\"") \ _GL_INLINE_HEADER_CONST_PRAGMA # define _GL_INLINE_HEADER_END \ _Pragma ("GCC diagnostic pop") #else # define _GL_INLINE_HEADER_BEGIN # define _GL_INLINE_HEADER_END #endif /* Define to 1 if the compiler supports the keyword '__inline'. */ #undef HAVE___INLINE /* Define to 1 if you have the `__secure_getenv' function. */ #undef HAVE___SECURE_GETENV /* Define as the bit index in the word where to find bit 0 of the exponent of 'long double'. */ #undef LDBL_EXPBIT0_BIT /* Define as the word index where to find the exponent of 'long double'. */ #undef LDBL_EXPBIT0_WORD /* Define as the bit index in the word where to find the sign of 'long double'. */ #undef LDBL_SIGNBIT_BIT /* Define as the word index where to find the sign of 'long double'. */ #undef LDBL_SIGNBIT_WORD /* Define to 1 if lseek does not detect pipes. */ #undef LSEEK_PIPE_BROKEN /* Define to 1 if 'lstat' dereferences a symlink specified with a trailing slash. */ #undef LSTAT_FOLLOWS_SLASHED_SYMLINK /* Define to the sub-directory where libtool stores uninstalled libraries. */ #undef LT_OBJDIR /* If malloc(0) is != NULL, define this to 1. Otherwise define this to 0. */ #undef MALLOC_0_IS_NONNULL /* Define to a substitute value for mmap()'s MAP_ANONYMOUS flag. */ #undef MAP_ANONYMOUS /* Define if the mbrtowc function does not return (size_t) -2 for empty input. */ #undef MBRTOWC_EMPTY_INPUT_BUG /* Define if the mbrtowc function may signal encoding errors in the C locale. */ #undef MBRTOWC_IN_C_LOCALE_MAYBE_EILSEQ /* Define if the mbrtowc function has the NULL pwc argument bug. */ #undef MBRTOWC_NULL_ARG1_BUG /* Define if the mbrtowc function has the NULL string argument bug. */ #undef MBRTOWC_NULL_ARG2_BUG /* Define if the mbrtowc function does not return 0 for a NUL character. */ #undef MBRTOWC_NUL_RETVAL_BUG /* Define if the mbrtowc function returns a wrong return value. */ #undef MBRTOWC_RETVAL_BUG /* Define if the mbrtowc function stores a wide character when reporting incomplete input. */ #undef MBRTOWC_STORES_INCOMPLETE_BUG /* Use GNU style printf and scanf. */ #ifndef __USE_MINGW_ANSI_STDIO # undef __USE_MINGW_ANSI_STDIO #endif /* Define if the compilation of mktime.c should define 'mktime_internal'. */ #undef NEED_MKTIME_INTERNAL /* Define if the compilation of mktime.c should define 'mktime' with the native Windows TZ workaround. */ #undef NEED_MKTIME_WINDOWS /* Define if the compilation of mktime.c should define 'mktime' with the algorithmic workarounds. */ #undef NEED_MKTIME_WORKING /* Define if the vasnprintf implementation needs special code for the 'a' and 'A' directives. */ #undef NEED_PRINTF_DIRECTIVE_A /* Define if the vasnprintf implementation needs special code for the 'F' directive. */ #undef NEED_PRINTF_DIRECTIVE_F /* Define if the vasnprintf implementation needs special code for the 'ls' directive. */ #undef NEED_PRINTF_DIRECTIVE_LS /* Define if the vasnprintf implementation needs special code for 'double' arguments. */ #undef NEED_PRINTF_DOUBLE /* Define if the vasnprintf implementation needs special code for surviving out-of-memory conditions. */ #undef NEED_PRINTF_ENOMEM /* Define if the vasnprintf implementation needs special code for the ' flag. */ #undef NEED_PRINTF_FLAG_GROUPING /* Define if the vasnprintf implementation needs special code for the '-' flag. */ #undef NEED_PRINTF_FLAG_LEFTADJUST /* Define if the vasnprintf implementation needs special code for the 0 flag. */ #undef NEED_PRINTF_FLAG_ZERO /* Define if the vasnprintf implementation needs special code for infinite 'double' arguments. */ #undef NEED_PRINTF_INFINITE_DOUBLE /* Define if the vasnprintf implementation needs special code for infinite 'long double' arguments. */ #undef NEED_PRINTF_INFINITE_LONG_DOUBLE /* Define if the vasnprintf implementation needs special code for 'long double' arguments. */ #undef NEED_PRINTF_LONG_DOUBLE /* Define if the vasnprintf implementation needs special code for supporting large precisions without arbitrary bounds. */ #undef NEED_PRINTF_UNBOUNDED_PRECISION /* Define to 1 if nl_langinfo is multithread-safe. */ #undef NL_LANGINFO_MTSAFE /* Define to 1 if open() fails to recognize a trailing slash. */ #undef OPEN_TRAILING_SLASH_BUG /* Name of package */ #undef PACKAGE /* Define to the address where bug reports for this package should be sent. */ #undef PACKAGE_BUGREPORT /* Define to the full name of this package. */ #undef PACKAGE_NAME /* String identifying the packager of this software */ #undef PACKAGE_PACKAGER /* Packager info for bug reports (URL/e-mail/...) */ #undef PACKAGE_PACKAGER_BUG_REPORTS /* Packager-specific version information */ #undef PACKAGE_PACKAGER_VERSION /* Define to the full name and version of this package. */ #undef PACKAGE_STRING /* Define to the one symbol short name of this package. */ #undef PACKAGE_TARNAME /* Define to the home page for this package. */ #undef PACKAGE_URL /* Define to the version of this package. */ #undef PACKAGE_VERSION /* Define to the type that is the result of default argument promotions of type mode_t. */ #undef PROMOTED_MODE_T /* Define if the pthread_in_use() detection is hard. */ #undef PTHREAD_IN_USE_DETECTION_HARD /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'ptrdiff_t'. */ #undef PTRDIFF_T_SUFFIX /* Define to 1 if readlink fails to recognize a trailing slash. */ #undef READLINK_TRAILING_SLASH_BUG /* Define to 1 if readlink sets errno instead of truncating a too-long link. */ #undef READLINK_TRUNCATE_BUG /* Compile encryption support */ #undef REC_CRYPT_SUPPORT /* Define if rename does not work when the destination file exists, as on Cygwin 1.5 or Windows. */ #undef RENAME_DEST_EXISTS_BUG /* Define if rename fails to leave hard links alone, as on NetBSD 1.6 or Cygwin 1.5. */ #undef RENAME_HARD_LINK_BUG /* Define if rename does not correctly handle slashes on the destination argument, such as on Solaris 11 or NetBSD 1.6. */ #undef RENAME_TRAILING_SLASH_DEST_BUG /* Define if rename does not correctly handle slashes on the source argument, such as on Solaris 9 or cygwin 1.5. */ #undef RENAME_TRAILING_SLASH_SOURCE_BUG /* Define to 1 if gnulib's dirfd() replacement is used. */ #undef REPLACE_DIRFD /* Define to 1 if gnulib's fchdir() replacement is used. */ #undef REPLACE_FCHDIR /* Define if fprintf is overridden by a POSIX compliant gnulib implementation. */ #undef REPLACE_FPRINTF_POSIX /* Define to 1 if stat needs help when passed a file name with a trailing slash */ #undef REPLACE_FUNC_STAT_FILE /* Define to 1 if utime needs help when passed a file name with a trailing slash */ #undef REPLACE_FUNC_UTIME_FILE /* Define if nl_langinfo exists but is overridden by gnulib. */ #undef REPLACE_NL_LANGINFO /* Define to 1 if open() should work around the inability to open a directory. */ #undef REPLACE_OPEN_DIRECTORY /* Define if gnulib uses its own posix_spawn and posix_spawnp functions. */ #undef REPLACE_POSIX_SPAWN /* Define if printf is overridden by a POSIX compliant gnulib implementation. */ #undef REPLACE_PRINTF_POSIX /* Define to 1 if strerror(0) does not return a message implying success. */ #undef REPLACE_STRERROR_0 /* Define if vasnprintf exists but is overridden by gnulib. */ #undef REPLACE_VASNPRINTF /* Define if vfprintf is overridden by a POSIX compliant gnulib implementation. */ #undef REPLACE_VFPRINTF_POSIX /* Define to 1 if setlocale (LC_ALL, NULL) is multithread-safe. */ #undef SETLOCALE_NULL_ALL_MTSAFE /* Define to 1 if setlocale (category, NULL) is multithread-safe. */ #undef SETLOCALE_NULL_ONE_MTSAFE /* File name of the Bourne shell. */ #if (defined _WIN32 && !defined __CYGWIN__) || defined __CYGWIN__ || defined __ANDROID__ /* Omit the directory part because - For native Windows programs in a Cygwin environment, the Cygwin mounts are not visible. - For 32-bit Cygwin programs in a 64-bit Cygwin environment, the Cygwin mounts are not visible. - On Android, /bin/sh does not exist. It's /system/bin/sh instead. */ # define BOURNE_SHELL "sh" #else # define BOURNE_SHELL "/bin/sh" #endif /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'sig_atomic_t'. */ #undef SIG_ATOMIC_T_SUFFIX /* Define as the maximum value of type 'size_t', if the system doesn't define it. */ #ifndef SIZE_MAX # undef SIZE_MAX #endif /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'size_t'. */ #undef SIZE_T_SUFFIX /* If using the C implementation of alloca, define if you know the direction of stack growth for your system; otherwise it will be automatically deduced at runtime. STACK_DIRECTION > 0 => grows toward higher addresses STACK_DIRECTION < 0 => grows toward lower addresses STACK_DIRECTION = 0 => direction of growth unknown */ #undef STACK_DIRECTION /* Define to 1 if the `S_IS*' macros in <sys/stat.h> do not work properly. */ #undef STAT_MACROS_BROKEN /* Define to 1 if all of the C90 standard headers exist (not just the ones required in a freestanding environment). This macro is provided for backward compatibility; new code need not use it. */ #undef STDC_HEADERS /* Define to 1 if strerror_r returns char *. */ #undef STRERROR_R_CHAR_P /* Define to 1 if time_t is signed. */ #undef TIME_T_IS_SIGNED /* Define to 1 if your <sys/time.h> declares `struct tm'. */ #undef TM_IN_SYS_TIME /* Define to 1 if the type of the st_atim member of a struct stat is struct timespec. */ #undef TYPEOF_STRUCT_STAT_ST_ATIM_IS_STRUCT_TIMESPEC /* Define to 1 if unlink() on a parent directory may succeed */ #undef UNLINK_PARENT_BUG /* Define to the prefix of C symbols at the assembler and linker level, either an underscore or empty. */ #undef USER_LABEL_PREFIX /* Define to nonzero if you want access control list support. */ #undef USE_ACL /* Define if the combination of the ISO C and POSIX multithreading APIs can be used. */ #undef USE_ISOC_AND_POSIX_THREADS /* Define if the ISO C multithreading library can be used. */ #undef USE_ISOC_THREADS /* Define if the POSIX multithreading library can be used. */ #undef USE_POSIX_THREADS /* Define if references to the POSIX multithreading library are satisfied by libc. */ #undef USE_POSIX_THREADS_FROM_LIBC /* Define if references to the POSIX multithreading library should be made weak. */ #undef USE_POSIX_THREADS_WEAK /* Enable extensions on AIX 3, Interix. */ #ifndef _ALL_SOURCE # undef _ALL_SOURCE #endif /* Enable general extensions on macOS. */ #ifndef _DARWIN_C_SOURCE # undef _DARWIN_C_SOURCE #endif /* Enable general extensions on Solaris. */ #ifndef __EXTENSIONS__ # undef __EXTENSIONS__ #endif /* Enable GNU extensions on systems that have them. */ #ifndef _GNU_SOURCE # undef _GNU_SOURCE #endif /* Enable X/Open compliant socket functions that do not require linking with -lxnet on HP-UX 11.11. */ #ifndef _HPUX_ALT_XOPEN_SOCKET_API # undef _HPUX_ALT_XOPEN_SOCKET_API #endif /* Identify the host operating system as Minix. This macro does not affect the system headers' behavior. A future release of Autoconf may stop defining this macro. */ #ifndef _MINIX # undef _MINIX #endif /* Enable general extensions on NetBSD. Enable NetBSD compatibility extensions on Minix. */ #ifndef _NETBSD_SOURCE # undef _NETBSD_SOURCE #endif /* Enable OpenBSD compatibility extensions on NetBSD. Oddly enough, this does nothing on OpenBSD. */ #ifndef _OPENBSD_SOURCE # undef _OPENBSD_SOURCE #endif /* Define to 1 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_SOURCE # undef _POSIX_SOURCE #endif /* Define to 2 if needed for POSIX-compatible behavior. */ #ifndef _POSIX_1_SOURCE # undef _POSIX_1_SOURCE #endif /* Enable POSIX-compatible threading on Solaris. */ #ifndef _POSIX_PTHREAD_SEMANTICS # undef _POSIX_PTHREAD_SEMANTICS #endif /* Enable extensions specified by ISO/IEC TS 18661-5:2014. */ #ifndef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ # undef __STDC_WANT_IEC_60559_ATTRIBS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-1:2014. */ #ifndef __STDC_WANT_IEC_60559_BFP_EXT__ # undef __STDC_WANT_IEC_60559_BFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-2:2015. */ #ifndef __STDC_WANT_IEC_60559_DFP_EXT__ # undef __STDC_WANT_IEC_60559_DFP_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-4:2015. */ #ifndef __STDC_WANT_IEC_60559_FUNCS_EXT__ # undef __STDC_WANT_IEC_60559_FUNCS_EXT__ #endif /* Enable extensions specified by ISO/IEC TS 18661-3:2015. */ #ifndef __STDC_WANT_IEC_60559_TYPES_EXT__ # undef __STDC_WANT_IEC_60559_TYPES_EXT__ #endif /* Enable extensions specified by ISO/IEC TR 24731-2:2010. */ #ifndef __STDC_WANT_LIB_EXT2__ # undef __STDC_WANT_LIB_EXT2__ #endif /* Enable extensions specified by ISO/IEC 24747:2009. */ #ifndef __STDC_WANT_MATH_SPEC_FUNCS__ # undef __STDC_WANT_MATH_SPEC_FUNCS__ #endif /* Enable extensions on HP NonStop. */ #ifndef _TANDEM_SOURCE # undef _TANDEM_SOURCE #endif /* Enable X/Open extensions. Define to 500 only if necessary to make mbstate_t available. */ #ifndef _XOPEN_SOURCE # undef _XOPEN_SOURCE #endif /* An alias of GNULIB_STDIO_SINGLE_THREAD. */ #undef USE_UNLOCKED_IO /* Define if the native Windows multithreading API can be used. */ #undef USE_WINDOWS_THREADS /* Version number of package */ #undef VERSION /* Define to 1 if unsetenv returns void instead of int. */ #undef VOID_UNSETENV /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wchar_t'. */ #undef WCHAR_T_SUFFIX /* Define if the wcrtomb function does not work in the C locale. */ #undef WCRTOMB_C_LOCALE_BUG /* Define if the wcrtomb function has an incorrect return value. */ #undef WCRTOMB_RETVAL_BUG /* Define to l, ll, u, ul, ull, etc., as suitable for constants of type 'wint_t'. */ #undef WINT_T_SUFFIX /* Define WORDS_BIGENDIAN to 1 if your processor stores words with the most significant byte first (like Motorola and SPARC, unlike Intel). */ #if defined AC_APPLE_UNIVERSAL_BUILD # if defined __BIG_ENDIAN__ # define WORDS_BIGENDIAN 1 # endif #else # ifndef WORDS_BIGENDIAN # undef WORDS_BIGENDIAN # endif #endif /* Number of bits in a file offset, on hosts where this is settable. */ #undef _FILE_OFFSET_BITS /* True if the compiler says it groks GNU C version MAJOR.MINOR. */ #if defined __GNUC__ && defined __GNUC_MINOR__ # define _GL_GNUC_PREREQ(major, minor) \ ((major) < __GNUC__ + ((minor) <= __GNUC_MINOR__)) #else # define _GL_GNUC_PREREQ(major, minor) 0 #endif /* Define to enable the declarations of ISO C 11 types and functions. */ #undef _ISOC11_SOURCE /* Define to 1 to make fseeko visible on some hosts (e.g. glibc 2.2). */ #undef _LARGEFILE_SOURCE /* Define for large files, on AIX-style hosts. */ #undef _LARGE_FILES /* Define to 1 on Solaris. */ #undef _LCONV_C99 /* The _Noreturn keyword of C11. */ #ifndef _Noreturn # if (defined __cplusplus \ && ((201103 <= __cplusplus && !(__GNUC__ == 4 && __GNUC_MINOR__ == 7)) \ || (defined _MSC_VER && 1900 <= _MSC_VER)) \ && 0) /* [[noreturn]] is not practically usable, because with it the syntax extern _Noreturn void func (...); would not be valid; such a declaration would only be valid with 'extern' and '_Noreturn' swapped, or without the 'extern' keyword. However, some AIX system header files and several gnulib header files use precisely this syntax with 'extern'. */ # define _Noreturn [[noreturn]] # elif ((!defined __cplusplus || defined __clang__) \ && (201112 <= (defined __STDC_VERSION__ ? __STDC_VERSION__ : 0) \ || (!defined __STRICT_ANSI__ \ && (_GL_GNUC_PREREQ (4, 7) \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))))) /* _Noreturn works as-is. */ # elif _GL_GNUC_PREREQ (2, 8) || defined __clang__ || 0x5110 <= __SUNPRO_C # define _Noreturn __attribute__ ((__noreturn__)) # elif 1200 <= (defined _MSC_VER ? _MSC_VER : 0) # define _Noreturn __declspec (noreturn) # else # define _Noreturn # endif #endif /* Define if you want <regex.h> to include <limits.h>, so that it consistently overrides <limits.h>'s RE_DUP_MAX. */ #undef _REGEX_INCLUDE_LIMITS_H /* Define if you want regoff_t to be at least as wide POSIX requires. */ #undef _REGEX_LARGE_OFFSETS /* Number of bits in a timestamp, on hosts where this is settable. */ #undef _TIME_BITS /* For standard stat data types on VMS. */ #undef _USE_STD_STAT /* Define to rpl_ if the getopt replacement functions and variables should be used. */ #undef __GETOPT_PREFIX /* For 64-bit time_t on 32-bit mingw. */ #undef __MINGW_USE_VC2005_COMPAT /* Define to 1 if the system <stdint.h> predates C++11. */ #undef __STDC_CONSTANT_MACROS /* Define to 1 if the system <stdint.h> predates C++11. */ #undef __STDC_LIMIT_MACROS /* Define to 1 if C does not support variable-length arrays, and if the compiler does not already define this. */ #undef __STDC_NO_VLA__ /* The _GL_ASYNC_SAFE marker should be attached to functions that are signal handlers (for signals other than SIGABRT, SIGPIPE) or can be invoked from such signal handlers. Such functions have some restrictions: * All functions that it calls should be marked _GL_ASYNC_SAFE as well, or should be listed as async-signal-safe in POSIX <https://pubs.opengroup.org/onlinepubs/9699919799/functions/V2_chap02.html#tag_15_04> section 2.4.3. Note that malloc(), sprintf(), and fwrite(), in particular, are NOT async-signal-safe. * All memory locations (variables and struct fields) that these functions access must be marked 'volatile'. This holds for both read and write accesses. Otherwise the compiler might optimize away stores to and reads from such locations that occur in the program, depending on its data flow analysis. For example, when the program contains a loop that is intended to inspect a variable set from within a signal handler while (!signal_occurred) ; the compiler is allowed to transform this into an endless loop if the variable 'signal_occurred' is not declared 'volatile'. Additionally, recall that: * A signal handler should not modify errno (except if it is a handler for a fatal signal and ends by raising the same signal again, thus provoking the termination of the process). If it invokes a function that may clobber errno, it needs to save and restore the value of errno. */ #define _GL_ASYNC_SAFE /* Attributes. */ #if (defined __has_attribute \ && (!defined __clang_minor__ \ || (defined __apple_build_version__ \ ? 6000000 <= __apple_build_version__ \ : 3 < __clang_major__ + (5 <= __clang_minor__)))) # define _GL_HAS_ATTRIBUTE(attr) __has_attribute (__##attr##__) #else # define _GL_HAS_ATTRIBUTE(attr) _GL_ATTR_##attr # define _GL_ATTR_alloc_size _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_always_inline _GL_GNUC_PREREQ (3, 2) # define _GL_ATTR_artificial _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_cold _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_const _GL_GNUC_PREREQ (2, 95) # define _GL_ATTR_deprecated _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_diagnose_if 0 # define _GL_ATTR_error _GL_GNUC_PREREQ (4, 3) # define _GL_ATTR_externally_visible _GL_GNUC_PREREQ (4, 1) # define _GL_ATTR_fallthrough _GL_GNUC_PREREQ (7, 0) # define _GL_ATTR_format _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_leaf _GL_GNUC_PREREQ (4, 6) # define _GL_ATTR_malloc _GL_GNUC_PREREQ (3, 0) # ifdef _ICC # define _GL_ATTR_may_alias 0 # else # define _GL_ATTR_may_alias _GL_GNUC_PREREQ (3, 3) # endif # define _GL_ATTR_noinline _GL_GNUC_PREREQ (3, 1) # define _GL_ATTR_nonnull _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_nonstring _GL_GNUC_PREREQ (8, 0) # define _GL_ATTR_nothrow _GL_GNUC_PREREQ (3, 3) # define _GL_ATTR_packed _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_pure _GL_GNUC_PREREQ (2, 96) # define _GL_ATTR_returns_nonnull _GL_GNUC_PREREQ (4, 9) # define _GL_ATTR_sentinel _GL_GNUC_PREREQ (4, 0) # define _GL_ATTR_unused _GL_GNUC_PREREQ (2, 7) # define _GL_ATTR_warn_unused_result _GL_GNUC_PREREQ (3, 4) #endif #ifdef __has_c_attribute # define _GL_HAS_C_ATTRIBUTE(attr) __has_c_attribute (__##attr##__) #else # define _GL_HAS_C_ATTRIBUTE(attr) 0 #endif /* _GL_ATTRIBUTE_ALLOC_SIZE ((N)) declares that the Nth argument of the function is the size of the returned memory block. _GL_ATTRIBUTE_ALLOC_SIZE ((M, N)) declares that the Mth argument multiplied by the Nth argument of the function is the size of the returned memory block. */ /* Applies to: function, pointer to function, function types. */ #if _GL_HAS_ATTRIBUTE (alloc_size) # define _GL_ATTRIBUTE_ALLOC_SIZE(args) __attribute__ ((__alloc_size__ args)) #else # define _GL_ATTRIBUTE_ALLOC_SIZE(args) #endif /* _GL_ATTRIBUTE_ALWAYS_INLINE tells that the compiler should always inline the function and report an error if it cannot do so. */ /* Applies to: function. */ #if _GL_HAS_ATTRIBUTE (always_inline) # define _GL_ATTRIBUTE_ALWAYS_INLINE __attribute__ ((__always_inline__)) #else # define _GL_ATTRIBUTE_ALWAYS_INLINE #endif /* _GL_ATTRIBUTE_ARTIFICIAL declares that the function is not important to show in stack traces when debugging. The compiler should omit the function from stack traces. */ /* Applies to: function. */ #if _GL_HAS_ATTRIBUTE (artificial) # define _GL_ATTRIBUTE_ARTIFICIAL __attribute__ ((__artificial__)) #else # define _GL_ATTRIBUTE_ARTIFICIAL #endif /* _GL_ATTRIBUTE_COLD declares that the function is rarely executed. */ /* Applies to: functions. */ /* Avoid __attribute__ ((cold)) on MinGW; see thread starting at <https://lists.gnu.org/r/emacs-devel/2019-04/msg01152.html>. Also, Oracle Studio 12.6 requires 'cold' not '__cold__'. */ #if _GL_HAS_ATTRIBUTE (cold) && !defined __MINGW32__ # ifndef __SUNPRO_C # define _GL_ATTRIBUTE_COLD __attribute__ ((__cold__)) # else # define _GL_ATTRIBUTE_COLD __attribute__ ((cold)) # endif #else # define _GL_ATTRIBUTE_COLD #endif /* _GL_ATTRIBUTE_CONST declares that it is OK for a compiler to omit duplicate calls to the function with the same arguments. This attribute is safe for a function that neither depends on nor affects observable state, and always returns exactly once - e.g., does not loop forever, and does not call longjmp. (This attribute is stricter than _GL_ATTRIBUTE_PURE.) */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (const) # define _GL_ATTRIBUTE_CONST __attribute__ ((__const__)) #else # define _GL_ATTRIBUTE_CONST #endif /* _GL_ATTRIBUTE_DEALLOC (F, I) declares that the function returns pointers that can be freed by passing them as the Ith argument to the function F. _GL_ATTRIBUTE_DEALLOC_FREE declares that the function returns pointers that can be freed via 'free'; it can be used only after declaring 'free'. */ /* Applies to: functions. Cannot be used on inline functions. */ #if _GL_GNUC_PREREQ (11, 0) # define _GL_ATTRIBUTE_DEALLOC(f, i) __attribute__ ((__malloc__ (f, i))) #else # define _GL_ATTRIBUTE_DEALLOC(f, i) #endif /* If gnulib's <string.h> or <wchar.h> has already defined this macro, continue to use this earlier definition, since <stdlib.h> may not have been included yet. */ #ifndef _GL_ATTRIBUTE_DEALLOC_FREE # define _GL_ATTRIBUTE_DEALLOC_FREE _GL_ATTRIBUTE_DEALLOC (free, 1) #endif /* _GL_ATTRIBUTE_DEPRECATED: Declares that an entity is deprecated. The compiler may warn if the entity is used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: namespace, class, template specialization. */ #if _GL_HAS_C_ATTRIBUTE (deprecated) # define _GL_ATTRIBUTE_DEPRECATED [[__deprecated__]] #elif _GL_HAS_ATTRIBUTE (deprecated) # define _GL_ATTRIBUTE_DEPRECATED __attribute__ ((__deprecated__)) #else # define _GL_ATTRIBUTE_DEPRECATED #endif /* _GL_ATTRIBUTE_ERROR(msg) requests an error if a function is called and the function call is not optimized away. _GL_ATTRIBUTE_WARNING(msg) requests a warning if a function is called and the function call is not optimized away. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (error) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__error__ (msg))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__warning__ (msg))) #elif _GL_HAS_ATTRIBUTE (diagnose_if) # define _GL_ATTRIBUTE_ERROR(msg) __attribute__ ((__diagnose_if__ (1, msg, "error"))) # define _GL_ATTRIBUTE_WARNING(msg) __attribute__ ((__diagnose_if__ (1, msg, "warning"))) #else # define _GL_ATTRIBUTE_ERROR(msg) # define _GL_ATTRIBUTE_WARNING(msg) #endif /* _GL_ATTRIBUTE_EXTERNALLY_VISIBLE declares that the entity should remain visible to debuggers etc., even with '-fwhole-program'. */ /* Applies to: functions, variables. */ #if _GL_HAS_ATTRIBUTE (externally_visible) # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE __attribute__ ((externally_visible)) #else # define _GL_ATTRIBUTE_EXTERNALLY_VISIBLE #endif /* _GL_ATTRIBUTE_FALLTHROUGH declares that it is not a programming mistake if the control flow falls through to the immediately following 'case' or 'default' label. The compiler should not warn in this case. */ /* Applies to: Empty statement (;), inside a 'switch' statement. */ /* Always expands to something. */ #if _GL_HAS_C_ATTRIBUTE (fallthrough) # define _GL_ATTRIBUTE_FALLTHROUGH [[__fallthrough__]] #elif _GL_HAS_ATTRIBUTE (fallthrough) # define _GL_ATTRIBUTE_FALLTHROUGH __attribute__ ((__fallthrough__)) #else # define _GL_ATTRIBUTE_FALLTHROUGH ((void) 0) #endif /* _GL_ATTRIBUTE_FORMAT ((ARCHETYPE, STRING-INDEX, FIRST-TO-CHECK)) declares that the STRING-INDEXth function argument is a format string of style ARCHETYPE, which is one of: printf, gnu_printf scanf, gnu_scanf, strftime, gnu_strftime, strfmon, or the same thing prefixed and suffixed with '__'. If FIRST-TO-CHECK is not 0, arguments starting at FIRST-TO_CHECK are suitable for the format string. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (format) # define _GL_ATTRIBUTE_FORMAT(spec) __attribute__ ((__format__ spec)) #else # define _GL_ATTRIBUTE_FORMAT(spec) #endif /* _GL_ATTRIBUTE_LEAF declares that if the function is called from some other compilation unit, it executes code from that unit only by return or by exception handling. This declaration lets the compiler optimize that unit more aggressively. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (leaf) # define _GL_ATTRIBUTE_LEAF __attribute__ ((__leaf__)) #else # define _GL_ATTRIBUTE_LEAF #endif /* _GL_ATTRIBUTE_MALLOC declares that the function returns a pointer to freshly allocated memory. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (malloc) # define _GL_ATTRIBUTE_MALLOC __attribute__ ((__malloc__)) #else # define _GL_ATTRIBUTE_MALLOC #endif /* _GL_ATTRIBUTE_MAY_ALIAS declares that pointers to the type may point to the same storage as pointers to other types. Thus this declaration disables strict aliasing optimization. */ /* Applies to: types. */ /* Oracle Studio 12.6 mishandles may_alias despite __has_attribute OK. */ #if _GL_HAS_ATTRIBUTE (may_alias) && !defined __SUNPRO_C # define _GL_ATTRIBUTE_MAY_ALIAS __attribute__ ((__may_alias__)) #else # define _GL_ATTRIBUTE_MAY_ALIAS #endif /* _GL_ATTRIBUTE_MAYBE_UNUSED declares that it is not a programming mistake if the entity is not used. The compiler should not warn if the entity is not used. */ /* Applies to: - function, variable, - struct, union, struct/union member, - enumeration, enumeration item, - typedef, in C++ also: class. */ /* In C++ and C2x, this is spelled [[__maybe_unused__]]. GCC's syntax is __attribute__ ((__unused__)). clang supports both syntaxes. */ #if _GL_HAS_C_ATTRIBUTE (maybe_unused) # define _GL_ATTRIBUTE_MAYBE_UNUSED [[__maybe_unused__]] #else # define _GL_ATTRIBUTE_MAYBE_UNUSED _GL_ATTRIBUTE_UNUSED #endif /* Alternative spelling of this macro, for convenience. */ #define _GL_UNUSED _GL_ATTRIBUTE_MAYBE_UNUSED /* Earlier spellings of this macro. */ #define _UNUSED_PARAMETER_ _GL_ATTRIBUTE_MAYBE_UNUSED /* _GL_ATTRIBUTE_NODISCARD declares that the caller of the function should not discard the return value. The compiler may warn if the caller does not use the return value, unless the caller uses something like ignore_value. */ /* Applies to: function, enumeration, class. */ #if _GL_HAS_C_ATTRIBUTE (nodiscard) # define _GL_ATTRIBUTE_NODISCARD [[__nodiscard__]] #elif _GL_HAS_ATTRIBUTE (warn_unused_result) # define _GL_ATTRIBUTE_NODISCARD __attribute__ ((__warn_unused_result__)) #else # define _GL_ATTRIBUTE_NODISCARD #endif /* _GL_ATTRIBUTE_NOINLINE tells that the compiler should not inline the function. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (noinline) # define _GL_ATTRIBUTE_NOINLINE __attribute__ ((__noinline__)) #else # define _GL_ATTRIBUTE_NOINLINE #endif /* _GL_ATTRIBUTE_NONNULL ((N1, N2,...)) declares that the arguments N1, N2,... must not be NULL. _GL_ATTRIBUTE_NONNULL () declares that all pointer arguments must not be null. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (nonnull) # define _GL_ATTRIBUTE_NONNULL(args) __attribute__ ((__nonnull__ args)) #else # define _GL_ATTRIBUTE_NONNULL(args) #endif /* _GL_ATTRIBUTE_NONSTRING declares that the contents of a character array is not meant to be NUL-terminated. */ /* Applies to: struct/union members and variables that are arrays of element type '[[un]signed] char'. */ #if _GL_HAS_ATTRIBUTE (nonstring) # define _GL_ATTRIBUTE_NONSTRING __attribute__ ((__nonstring__)) #else # define _GL_ATTRIBUTE_NONSTRING #endif /* There is no _GL_ATTRIBUTE_NORETURN; use _Noreturn instead. */ /* _GL_ATTRIBUTE_NOTHROW declares that the function does not throw exceptions. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (nothrow) && !defined __cplusplus # define _GL_ATTRIBUTE_NOTHROW __attribute__ ((__nothrow__)) #else # define _GL_ATTRIBUTE_NOTHROW #endif /* _GL_ATTRIBUTE_PACKED declares: For struct members: The member has the smallest possible alignment. For struct, union, class: All members have the smallest possible alignment, minimizing the memory required. */ /* Applies to: struct members, struct, union, in C++ also: class. */ #if _GL_HAS_ATTRIBUTE (packed) # define _GL_ATTRIBUTE_PACKED __attribute__ ((__packed__)) #else # define _GL_ATTRIBUTE_PACKED #endif /* _GL_ATTRIBUTE_PURE declares that It is OK for a compiler to omit duplicate calls to the function with the same arguments if observable state is not changed between calls. This attribute is safe for a function that does not affect observable state, and always returns exactly once. (This attribute is looser than _GL_ATTRIBUTE_CONST.) */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (pure) # define _GL_ATTRIBUTE_PURE __attribute__ ((__pure__)) #else # define _GL_ATTRIBUTE_PURE #endif /* _GL_ATTRIBUTE_RETURNS_NONNULL declares that the function's return value is a non-NULL pointer. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (returns_nonnull) # define _GL_ATTRIBUTE_RETURNS_NONNULL __attribute__ ((__returns_nonnull__)) #else # define _GL_ATTRIBUTE_RETURNS_NONNULL #endif /* _GL_ATTRIBUTE_SENTINEL(pos) declares that the variadic function expects a trailing NULL argument. _GL_ATTRIBUTE_SENTINEL () - The last argument is NULL (requires C99). _GL_ATTRIBUTE_SENTINEL ((N)) - The (N+1)st argument from the end is NULL. */ /* Applies to: functions. */ #if _GL_HAS_ATTRIBUTE (sentinel) # define _GL_ATTRIBUTE_SENTINEL(pos) __attribute__ ((__sentinel__ pos)) #else # define _GL_ATTRIBUTE_SENTINEL(pos) #endif /* A helper macro. Don't use it directly. */ #if _GL_HAS_ATTRIBUTE (unused) # define _GL_ATTRIBUTE_UNUSED __attribute__ ((__unused__)) #else # define _GL_ATTRIBUTE_UNUSED #endif /* _GL_UNUSED_LABEL; declares that it is not a programming mistake if the immediately preceding label is not used. The compiler should not warn if the label is not used. */ /* Applies to: label (both in C and C++). */ /* Note that g++ < 4.5 does not support the '__attribute__ ((__unused__)) ;' syntax. But clang does. */ #if !(defined __cplusplus && !_GL_GNUC_PREREQ (4, 5)) || defined __clang__ # define _GL_UNUSED_LABEL _GL_ATTRIBUTE_UNUSED #else # define _GL_UNUSED_LABEL #endif /* Define as 'access' if you don't have the eaccess() function. */ #undef eaccess /* Always use our fgetfilecon wrapper. */ #undef fgetfilecon /* Always use our getfilecon wrapper. */ #undef getfilecon /* Define to `int' if <sys/types.h> doesn't define. */ #undef gid_t /* A replacement for va_copy, if needed. */ #define gl_va_copy(a,b) ((a) = (b)) /* Define to `__inline__' or `__inline' if that's what the C compiler calls it, or to nothing if 'inline' is not supported under any name. */ #ifndef __cplusplus #undef inline #endif /* Define to long or long long if <stdint.h> and <inttypes.h> don't define. */ #undef intmax_t /* Work around a bug in Apple GCC 4.0.1 build 5465: In C99 mode, it supports the ISO C 99 semantics of 'extern inline' (unlike the GNU C semantics of earlier versions), but does not display it by setting __GNUC_STDC_INLINE__. __APPLE__ && __MACH__ test for Mac OS X. __APPLE_CC__ tests for the Apple compiler and its version. __STDC_VERSION__ tests for the C99 mode. */ #if defined __APPLE__ && defined __MACH__ && __APPLE_CC__ >= 5465 && !defined __cplusplus && __STDC_VERSION__ >= 199901L && !defined __GNUC_STDC_INLINE__ # define __GNUC_STDC_INLINE__ 1 #endif /* Always use our lgetfilecon wrapper. */ #undef lgetfilecon /* Define to a type if <wchar.h> does not define. */ #undef mbstate_t /* _GL_CMP (n1, n2) performs a three-valued comparison on n1 vs. n2, where n1 and n2 are expressions without side effects, that evaluate to real numbers (excluding NaN). It returns 1 if n1 > n2 0 if n1 == n2 -1 if n1 < n2 The naïve code (n1 > n2 ? 1 : n1 < n2 ? -1 : 0) produces a conditional jump with nearly all GCC versions up to GCC 10. This variant (n1 < n2 ? -1 : n1 > n2) produces a conditional with many GCC versions up to GCC 9. The better code (n1 > n2) - (n1 < n2) from Hacker's Delight § 2-9 avoids conditional jumps in all GCC versions >= 3.4. */ #define _GL_CMP(n1, n2) (((n1) > (n2)) - ((n1) < (n2))) /* Define to the real name of the mktime_internal function. */ #undef mktime_internal /* Define to `int' if <sys/types.h> does not define. */ #undef mode_t /* Define to the name of the strftime replacement function. */ #undef my_strftime /* Define to the type of st_nlink in struct stat, or a supertype. */ #undef nlink_t /* Define to `long' if <sys/types.h> does not define. */ #undef off_t /* Define as a signed integer type capable of holding a process identifier. */ #undef pid_t /* Define as the type of the result of subtracting two pointers, if the system doesn't define it. */ #undef ptrdiff_t /* Define to rpl_re_comp if the replacement should be used. */ #undef re_comp /* Define to rpl_re_compile_fastmap if the replacement should be used. */ #undef re_compile_fastmap /* Define to rpl_re_compile_pattern if the replacement should be used. */ #undef re_compile_pattern /* Define to rpl_re_exec if the replacement should be used. */ #undef re_exec /* Define to rpl_re_match if the replacement should be used. */ #undef re_match /* Define to rpl_re_match_2 if the replacement should be used. */ #undef re_match_2 /* Define to rpl_re_search if the replacement should be used. */ #undef re_search /* Define to rpl_re_search_2 if the replacement should be used. */ #undef re_search_2 /* Define to rpl_re_set_registers if the replacement should be used. */ #undef re_set_registers /* Define to rpl_re_set_syntax if the replacement should be used. */ #undef re_set_syntax /* Define to rpl_re_syntax_options if the replacement should be used. */ #undef re_syntax_options /* Define to rpl_regcomp if the replacement should be used. */ #undef regcomp /* Define to rpl_regerror if the replacement should be used. */ #undef regerror /* Define to rpl_regexec if the replacement should be used. */ #undef regexec /* Define to rpl_regfree if the replacement should be used. */ #undef regfree /* Define to the equivalent of the C99 'restrict' keyword, or to nothing if this is not supported. Do not define if restrict is supported only directly. */ #undef restrict /* Work around a bug in older versions of Sun C++, which did not #define __restrict__ or support _Restrict or __restrict__ even though the corresponding Sun C compiler ended up with "#define restrict _Restrict" or "#define restrict __restrict__" in the previous line. This workaround can be removed once we assume Oracle Developer Studio 12.5 (2016) or later. */ #if defined __SUNPRO_CC && !defined __RESTRICT && !defined __restrict__ # define _Restrict # define __restrict__ #endif /* Define as an integer type suitable for memory locations that can be accessed atomically even in the presence of asynchronous signals. */ #undef sig_atomic_t /* Define to `unsigned' if <sys/types.h> does not define. */ #undef size_t /* Define as a signed type of the same size as size_t. */ #undef ssize_t /* Define to `int' if <sys/types.h> doesn't define. */ #undef uid_t /* Define as a macro for copying va_list variables. */ #undef va_copy ������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-utils.c������������������������������������������������������������������������0000644�0000000�0000000�00000021242�14226563465�012764� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-utils.c - Miscellanea utilities. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <regex.h> #include <stdlib.h> #include <gettext.h> #define _(str) dgettext (PACKAGE, str) #include <string.h> #include <locale.h> #include <rec-utils.h> bool rec_atoi (const char *str, int *number) { bool res; long int li; char *end; int base = 0; res = false; li = strtol (str, &end, base); if ((*str != '\0') && (*end == '\0')) { /* The entire string is valid. */ res = true; *number = (int) li; } return res; } bool rec_atod (const char *str, double *number) { bool res; char *end; res = false; setlocale (LC_NUMERIC, "C"); /* We want the dot to always be the decimal separator. */ *number = strtod (str, &end); setlocale (LC_NUMERIC, ""); /* Restore the locale from the environment. */ if ((*str != '\0') && (*end == '\0')) /* The entire string is valid. */ res = true; return res; } char * rec_extract_file (const char *str) { regex_t regexp; regmatch_t matches; char *rec_file = NULL; size_t rec_file_length = 0; if (regcomp (®exp, "[ \n\t]" REC_FILE_REGEXP, REG_EXTENDED) != 0) { fprintf (stderr, _("internal error: rec_int_rec_extract_file:\ error compiling regexp.\n")); return NULL; } if ((regexec (®exp, str, 1, &matches, 0) == 0) && (matches.rm_so != -1)) { /* Get the match. */ rec_file_length = matches.rm_eo - matches.rm_so; rec_file = malloc (rec_file_length + 1); memcpy (rec_file, str + matches.rm_so + 1, rec_file_length - 1); rec_file[rec_file_length - 1] = '\0'; } regfree (®exp); return rec_file; } char * rec_extract_url (const char *str) { regex_t regexp; regmatch_t matches; char *rec_url = NULL; size_t rec_url_length = 0; if (regcomp (®exp, REC_URL_REGEXP, REG_EXTENDED) != 0) { fprintf (stderr, _("internal error:\ rec_int_rec_extract_url: error compiling regexp.\n")); return NULL; } if ((regexec (®exp, str, 1, &matches, 0) == 0) && (matches.rm_so != -1)) { /* Get the match. */ rec_url_length = matches.rm_eo - matches.rm_so; rec_url = malloc (rec_url_length + 1); memcpy (rec_url, str + matches.rm_so, rec_url_length); rec_url[rec_url_length] = '\0'; } regfree (®exp); return rec_url; } char * rec_extract_type (const char *str) { regex_t regexp; regmatch_t matches; char *rec_type = NULL; size_t rec_type_length = 0; /* TODO: use a REC_TYPE_NAME_RE */ if (regcomp (®exp, REC_FNAME_RE, REG_EXTENDED) != 0) { fprintf (stderr, _("internal error:\ rec_int_rec_extract_url: error compiling regexp.\n")); return NULL; } if ((regexec (®exp, str, 1, &matches, 0) == 0) && (matches.rm_so != -1)) { /* Get the match. */ rec_type_length = matches.rm_eo - matches.rm_so; rec_type = malloc (rec_type_length + 1); memcpy (rec_type, str + matches.rm_so, rec_type_length); rec_type[rec_type_length] = '\0'; } regfree (®exp); return rec_type; } bool rec_parse_int (const char **str, int *num) { bool ret; const char *p, *b; char number[30]; ret = true; p = *str; b = p; while (rec_digit_p (*p) || ((p == b) && (*p == '-')) || ((*p >= 'a') && (*p <= 'f')) || ((*p >= 'A') && (*p <= 'F')) || (*p == 'x') || (*p == 'X')) { number[p - b] = *p; p++; } number[p - b] = '\0'; if (!rec_atoi (number, num)) ret = false; if (ret) *str = p; return ret; } bool rec_parse_regexp (const char **str, const char *re, char **result) { bool ret; const char *p; regex_t regexp; regmatch_t pm; ret = true; p = *str; /* Compile the regexp. */ if (regcomp (®exp, re, REG_EXTENDED) != 0) ret = false; if (ret) { /* Try to match the regexp. */ if (regexec (®exp, p, 1, &pm, 0) == 0) { if (result) { /* Get the match into 'result'. Note that since the pattern starts with a ^ rm_so shall be 0 and we can use rm_eo relative to *p. */ *result = malloc (pm.rm_eo + 1); memcpy (*result, p, pm.rm_eo); (*result)[pm.rm_eo] = '\0'; } /* Advance 'p'. */ p = p + pm.rm_eo; } else { ret = false; if (result) *result = NULL; } regfree (®exp); } if (ret) *str = p; return ret; } void rec_skip_blanks (const char **str) { const char *p; p = *str; while (rec_blank_p (*p)) p++; *str = p; } bool rec_blank_p (char c) { return ((c == ' ') || (c == '\n') || (c == '\t')); } bool rec_digit_p (char c) { return ((c >= '0') && (c <= '9')); } bool rec_letter_p (char c) { return (((c >= 'a') && (c <= 'z')) || ((c >= 'A') && (c <= 'Z'))); } static bool rec_match_int (const char *str, const char *reg, int flags) { bool ret; regex_t regexp; if (regcomp (®exp, reg, flags) != 0) { fprintf (stderr, _("internal error: rec_match: error compiling regexp.\n")); return false; } ret = (regexec (®exp, str, 0, NULL, 0) == 0); regfree (®exp); return ret; } bool rec_match (const char *str, const char *reg) { return rec_match_int (str, reg, REG_EXTENDED); } bool rec_match_insensitive (const char *str, const char *reg) { return rec_match_int (str, reg, REG_EXTENDED | REG_ICASE); } size_t rec_extract_size (const char *str) { const char *p; char *condition_str; int res; if (!rec_match (str, REC_INT_SIZE_RE)) return 0; p = str; rec_skip_blanks (&p); rec_parse_regexp (&p, "^[><]=?", &condition_str); rec_skip_blanks (&p); rec_parse_int (&p, &res); return (size_t) res; } enum rec_size_condition_e rec_extract_size_condition (const char *str) { const char *p; char *condition_str = NULL; enum rec_size_condition_e condition; if (!rec_match (str, REC_INT_SIZE_RE)) return SIZE_COND_E; p = str; rec_skip_blanks (&p); rec_parse_regexp (&p, "^[><]=?", &condition_str); if (condition_str) { if (strcmp (condition_str, ">") == 0) condition = SIZE_COND_G; else if (strcmp (condition_str, ">=") == 0) condition = SIZE_COND_GE; else if (strcmp (condition_str, "<") == 0) condition = SIZE_COND_L; else if (strcmp (condition_str, "<=") == 0) condition = SIZE_COND_LE; else { fprintf (stderr, "internal error: rec_extract_size_condition: invalid condition.\n"); return SIZE_COND_E; } free (condition_str); } else condition = SIZE_COND_E; return condition; } int rec_timespec_subtract (struct timespec *result, struct timespec *x, struct timespec *y) { result->tv_sec = x->tv_sec - y->tv_sec; result->tv_nsec = x->tv_nsec - y->tv_nsec; if (result->tv_nsec < 0) { /* Overflow. Subtract one second. */ result->tv_sec--; result->tv_nsec += 1000000000; } /* Return whether there is an overflow in the 'tv_sec' field. */ return (result->tv_sec < 0); } uint32_t rec_endian_swap (uint32_t number) { uint32_t res; res = (number >> 24) | ((number << 8) & 0x00FF0000) | ((number >> 8) & 0x0000FF00) | (number << 24); return res; } char * rec_concat_strings (const char *str1, const char *str2, const char *str3) { char *res = malloc (strlen (str1) + strlen (str2) + strlen (str3) + 1); if (res) { memcpy (res, str1, strlen (str1)); memcpy (res + strlen (str1), str2, strlen (str2)); memcpy (res + strlen (str1) + strlen (str2), str3, strlen (str3) + 1); } return res; } ��������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-sex-tab.h����������������������������������������������������������������������0000644�0000000�0000000�00000010620�14226576605�013172� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* A Bison parser, made by GNU Bison 3.6.2. */ /* Bison interface for Yacc-like parsers in C Copyright (C) 1984, 1989-1990, 2000-2015, 2018-2020 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for more details. You should have received a copy of the GNU General Public License along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* As a special exception, you may create a larger work that contains part or all of the Bison parser skeleton and distribute that work under terms of your choice, so long as that work isn't itself a parser generator using the skeleton or a modified version thereof as a parser skeleton. Alternatively, if you modify or redistribute the parser skeleton itself, you may (at your option) remove this special exception, which will cause the skeleton and the resulting Bison output files to be licensed under the GNU General Public License without this special exception. This special exception was added by the Free Software Foundation in version 2.2 of Bison. */ /* DO NOT RELY ON FEATURES THAT ARE NOT DOCUMENTED in the manual, especially those whose name start with YY_ or yy_. They are private implementation details that can be changed or removed. */ #ifndef YY_SEX_REC_SEX_TAB_H_INCLUDED # define YY_SEX_REC_SEX_TAB_H_INCLUDED /* Debug traces. */ #ifndef YYDEBUG # define YYDEBUG 0 #endif #if YYDEBUG extern int sexdebug; #endif /* Token kinds. */ #ifndef YYTOKENTYPE # define YYTOKENTYPE enum yytokentype { YYEMPTY = -2, YYEOF = 0, /* "end of file" */ YYerror = 256, /* error */ YYUNDEF = 257, /* "invalid token" */ REC_SEX_TOK_INT = 258, /* REC_SEX_TOK_INT */ REC_SEX_TOK_REAL = 259, /* REC_SEX_TOK_REAL */ REC_SEX_TOK_STR = 260, /* REC_SEX_TOK_STR */ REC_SEX_TOK_NAM = 261, /* REC_SEX_TOK_NAM */ REC_SEX_TOK_COLON = 262, /* REC_SEX_TOK_COLON */ REC_SEX_TOK_QM = 263, /* REC_SEX_TOK_QM */ REC_SEX_TOK_IMPLIES = 264, /* REC_SEX_TOK_IMPLIES */ REC_SEX_TOK_AND = 265, /* REC_SEX_TOK_AND */ REC_SEX_TOK_OR = 266, /* REC_SEX_TOK_OR */ REC_SEX_TOK_EQL = 267, /* REC_SEX_TOK_EQL */ REC_SEX_TOK_NEQ = 268, /* REC_SEX_TOK_NEQ */ REC_SEX_TOK_LT = 269, /* REC_SEX_TOK_LT */ REC_SEX_TOK_GT = 270, /* REC_SEX_TOK_GT */ REC_SEX_TOK_LTE = 271, /* REC_SEX_TOK_LTE */ REC_SEX_TOK_GTE = 272, /* REC_SEX_TOK_GTE */ REC_SEX_TOK_SAMETIME = 273, /* REC_SEX_TOK_SAMETIME */ REC_SEX_TOK_AFTER = 274, /* REC_SEX_TOK_AFTER */ REC_SEX_TOK_BEFORE = 275, /* REC_SEX_TOK_BEFORE */ REC_SEX_TOK_SUB = 276, /* REC_SEX_TOK_SUB */ REC_SEX_TOK_ADD = 277, /* REC_SEX_TOK_ADD */ REC_SEX_TOK_MUL = 278, /* REC_SEX_TOK_MUL */ REC_SEX_TOK_DIV = 279, /* REC_SEX_TOK_DIV */ REC_SEX_TOK_MOD = 280, /* REC_SEX_TOK_MOD */ REC_SEX_TOK_MAT = 281, /* REC_SEX_TOK_MAT */ REC_SEX_TOK_AMP = 282, /* REC_SEX_TOK_AMP */ REC_SEX_TOK_NEG = 283, /* REC_SEX_TOK_NEG */ REC_SEX_TOK_MIN = 284, /* REC_SEX_TOK_MIN */ REC_SEX_TOK_NOT = 285, /* REC_SEX_TOK_NOT */ REC_SEX_TOK_BP = 286, /* REC_SEX_TOK_BP */ REC_SEX_TOK_EP = 287, /* REC_SEX_TOK_EP */ REC_SEX_TOK_ERR = 288, /* REC_SEX_TOK_ERR */ REC_SEX_TOK_SHARP = 289 /* REC_SEX_TOK_SHARP */ }; typedef enum yytokentype yytoken_kind_t; #endif /* Value type. */ #if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED union YYSTYPE { #line 86 "../../src/rec-sex-tab.y" rec_sex_ast_node_t node; rec_sex_ast_t ast; #line 103 "rec-sex-tab.h" }; typedef union YYSTYPE YYSTYPE; # define YYSTYPE_IS_TRIVIAL 1 # define YYSTYPE_IS_DECLARED 1 #endif int sexparse (rec_sex_parser_t sex_parser); #endif /* !YY_SEX_REC_SEX_TAB_H_INCLUDED */ ����������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-sex-ast.h����������������������������������������������������������������������0000644�0000000�0000000�00000010261�14226563465�013214� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-sex-ast.h - SEX Abstract Syntax Trees. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef REC_SEX_AST_H #define REC_SEX_AST_H #include <config.h> #include <stdbool.h> enum rec_sex_ast_node_type_e { REC_SEX_NOVAL, /* Operations. */ REC_SEX_OP_NEG, REC_SEX_OP_ADD, REC_SEX_OP_SUB, REC_SEX_OP_MUL, REC_SEX_OP_DIV, REC_SEX_OP_MOD, REC_SEX_OP_EQL, REC_SEX_OP_NEQ, REC_SEX_OP_MAT, REC_SEX_OP_LT, REC_SEX_OP_GT, REC_SEX_OP_LTE, REC_SEX_OP_GTE, REC_SEX_OP_AND, REC_SEX_OP_OR, REC_SEX_OP_NOT, REC_SEX_OP_SHA, REC_SEX_OP_SAMETIME, REC_SEX_OP_IMPLIES, REC_SEX_OP_BEFORE, REC_SEX_OP_AFTER, REC_SEX_OP_COND, REC_SEX_OP_CONCAT, /* Values. */ REC_SEX_INT, REC_SEX_REAL, REC_SEX_STR, REC_SEX_NAME }; typedef struct rec_sex_ast_node_s *rec_sex_ast_node_t; typedef struct rec_sex_ast_s *rec_sex_ast_t; /* * Public functions. */ /* Creation and destruction of ASTs. */ rec_sex_ast_t rec_sex_ast_new (); void rec_sex_ast_destroy (rec_sex_ast_t ast); /* Running the AST. */ /* Not here but in rec-sex.c int rec_sex_ast_run (rec_sex_ast_t ast, rec_record_t record); */ rec_sex_ast_node_t rec_sex_ast_top (rec_sex_ast_t ast); void rec_sex_ast_set_top (rec_sex_ast_t ast, rec_sex_ast_node_t node); /* Nodes management. */ rec_sex_ast_node_t rec_sex_ast_node_new (void); void rec_sex_ast_node_destroy (rec_sex_ast_node_t node); enum rec_sex_ast_node_type_e rec_sex_ast_node_type (rec_sex_ast_node_t node); void rec_sex_ast_node_set_type (rec_sex_ast_node_t node, enum rec_sex_ast_node_type_e type); int rec_sex_ast_node_int (rec_sex_ast_node_t node); void rec_sex_ast_node_set_int (rec_sex_ast_node_t node, int num); double rec_sex_ast_node_real (rec_sex_ast_node_t node); void rec_sex_ast_node_set_real (rec_sex_ast_node_t node, double num); char *rec_sex_ast_node_str (rec_sex_ast_node_t node); void rec_sex_ast_node_set_str (rec_sex_ast_node_t node, char *str); const char *rec_sex_ast_node_name (rec_sex_ast_node_t node); const char *rec_sex_ast_node_subname (rec_sex_ast_node_t node); void rec_sex_ast_node_set_name (rec_sex_ast_node_t node, const char *name, const char *subname); int rec_sex_ast_node_num_children (rec_sex_ast_node_t node); rec_sex_ast_node_t rec_sex_ast_node_child (rec_sex_ast_node_t node, int n); void rec_sex_ast_node_link (rec_sex_ast_node_t parent, rec_sex_ast_node_t child); void rec_sex_ast_node_reset (rec_sex_ast_node_t node); int rec_sex_ast_node_index (rec_sex_ast_node_t node); void rec_sex_ast_node_set_index (rec_sex_ast_node_t node, int index); void rec_sex_ast_print (rec_sex_ast_t ast); void rec_sex_ast_node_fix (rec_sex_ast_node_t node, char *val); void rec_sex_ast_node_unfix (rec_sex_ast_node_t node); bool rec_sex_ast_node_fixed (rec_sex_ast_node_t node); char *rec_sex_ast_node_fixed_val (rec_sex_ast_node_t node); /* This function returns 'true' if there is a node on AST of type REC_SEX_NAME where NAME.name == NAME and NAME.idx <= IDX. */ bool rec_sex_ast_name_p (rec_sex_ast_t ast, const char *name, size_t idx); /* This function returns 'true' if there is a node on AST of type REC_SEX_NAME where NAME.name == NAME and the parent of the node is of type REC_SEX_OP_SHA, i.e. it recognizes #NAME in the source. */ bool rec_sex_ast_hash_name_p (rec_sex_ast_t ast, const char *name); #endif /* ! REC_SEX_AST_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-field.c������������������������������������������������������������������������0000644�0000000�0000000�00000014064�14226563465�012713� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-field.c - Fields. */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, * 2018, 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <stdio.h> #include <rec.h> /* Field Data Structure. * * A field is an association between a label and a value. */ struct rec_field_s { /* The name and the value of a field are UTF-8 encoded strings. Thus, we use NULL-terminated strings to store them. */ char *name; char *value; /* Localization. */ char *source; size_t location; char *location_str; size_t char_location; char *char_location_str; /* Field marks. */ int mark; }; static void rec_field_init (rec_field_t field) { /* Initialize the field structure so it can be safely passed to rec_field_destroy even if its contents are not completely initialized with real values. */ memset (field, 0 /* NULL */, sizeof (struct rec_field_s)); } const char * rec_field_name (rec_field_t field) { return field->name; } bool rec_field_set_name (rec_field_t field, const char *name) { free (field->name); field->name = strdup (name); return (field->name != NULL); } const char * rec_field_value (rec_field_t field) { return field->value; } bool rec_field_set_value (rec_field_t field, const char *value) { free (field->value); field->value = strdup (value); return (field->value != NULL); } rec_field_t rec_field_new (const char *name, const char *value) { rec_field_t field; field = malloc (sizeof (struct rec_field_s)); if (field != NULL) { rec_field_init (field); if (!rec_field_set_name (field, name)) { /* Out of memory. */ rec_field_destroy (field); return NULL; } if (!rec_field_set_value (field, value)) { /* Out of memory. */ rec_field_destroy (field); return NULL; } } return field; } rec_field_t rec_field_dup (rec_field_t field) { rec_field_t new_field; new_field = rec_field_new (rec_field_name (field), rec_field_value (field)); if (new_field) { new_field->location = field->location; new_field->char_location = field->char_location; new_field->mark = field->mark; if (field->source) { new_field->source = strdup (field->source); if (!new_field->source) { /* Out of memory. */ rec_field_destroy (new_field); return NULL; } } if (field->location_str) { new_field->location_str = strdup (field->location_str); if (!new_field->location_str) { /* Out of memory. */ rec_field_destroy (new_field); return NULL; } } if (field->char_location_str) { new_field->char_location_str = strdup (field->char_location_str); if (!new_field->char_location_str) { /* Out of memory. */ rec_field_destroy (new_field); return NULL; } } } return new_field; } bool rec_field_equal_p (rec_field_t field1, rec_field_t field2) { return (strcmp (field1->name, field2->name) == 0); } void rec_field_destroy (rec_field_t field) { if (field) { free (field->name); free (field->value); free (field->source); free (field->location_str); free (field->char_location_str); free (field); } } rec_comment_t rec_field_to_comment (rec_field_t field) { rec_comment_t res; char *comment_str; comment_str = rec_write_field_str (field, REC_WRITER_NORMAL); if (!comment_str) return NULL; /* If the last character of the comment string is a newline, remove it. */ if (comment_str[strlen (comment_str) - 1] == '\n') comment_str[strlen (comment_str) - 1] = '\0'; res = rec_comment_new (comment_str); free (comment_str); return res; } const char * rec_field_source (rec_field_t field) { return field->source; } bool rec_field_set_source (rec_field_t field, const char *source) { free (field->source); field->source = strdup (source); return (field->source != NULL); } size_t rec_field_location (rec_field_t field) { return field->location; } bool rec_field_set_location (rec_field_t field, size_t location) { field->location = location; free (field->location_str); return (asprintf (&(field->location_str), "%zu", field->location) != -1); } const char * rec_field_location_str (rec_field_t field) { if (field->location_str) return field->location_str; else return ""; } size_t rec_field_char_location (rec_field_t field) { return field->char_location; } bool rec_field_set_char_location (rec_field_t field, size_t location) { field->char_location = location; free (field->char_location_str); return (asprintf (&(field->char_location_str), "%zu", field->char_location) != -1); } const char * rec_field_char_location_str (rec_field_t field) { char *res; if (field->char_location_str) return field->char_location_str; else return ""; } void rec_field_set_mark (rec_field_t field, int mark) { field->mark = mark; } int rec_field_mark (rec_field_t field) { return field->mark; } ����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-sex-tab.y����������������������������������������������������������������������0000644�0000000�0000000�00000015147�14226563465�013224� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-sex-tab.y - Selection Expressions parser. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ %pure-parser %name-prefix "sex" %parse-param {rec_sex_parser_t sex_parser} %lex-param { void *scanner } %{ #include <config.h> #include <stdlib.h> #include <stdio.h> #include <string.h> #include <regex.h> #include <rec-sex-ast.h> #include <rec-sex-parser.h> #include "rec-sex-tab.h" /* #include "rec-sex-lex.h" */ void sexerror (rec_sex_parser_t context, const char *err) { /* Do nothing. */ } #define scanner (rec_sex_parser_scanner (sex_parser)) #define CREATE_NODE_OP1(TYPE,RES,OP) \ do \ { \ /* Create the node. */ \ (RES) = rec_sex_ast_node_new (); \ rec_sex_ast_node_set_type ((RES), (TYPE)); \ \ /* Set children. */ \ rec_sex_ast_node_link ((RES), (OP)); \ } \ while (0) #define CREATE_NODE_OP2(TYPE, RES, OP1, OP2) \ do \ { \ /* Create the node. */ \ (RES) = rec_sex_ast_node_new (); \ rec_sex_ast_node_set_type ((RES), (TYPE)); \ \ /* Set children. */ \ rec_sex_ast_node_link ((RES), (OP1)); \ rec_sex_ast_node_link ((RES), (OP2)); \ } \ while (0) #define CREATE_NODE_OP3(TYPE, RES, OP1, OP2, OP3) \ do \ { \ /* Create the node. */ \ (RES) = rec_sex_ast_node_new (); \ rec_sex_ast_node_set_type ((RES), (TYPE)); \ \ /* Set children. */ \ rec_sex_ast_node_link ((RES), (OP1)); \ rec_sex_ast_node_link ((RES), (OP2)); \ rec_sex_ast_node_link ((RES), (OP3)); \ } \ while (0) %} %union { rec_sex_ast_node_t node; rec_sex_ast_t ast; }; /* Bison declarations. */ %token <node> REC_SEX_TOK_INT %token <node> REC_SEX_TOK_REAL %token <node> REC_SEX_TOK_STR %token <node> REC_SEX_TOK_NAM %token <node> REC_SEX_TOK_COLON %left <node> REC_SEX_TOK_QM %right <node> REC_SEX_TOK_IMPLIES %left <node> REC_SEX_TOK_AND REC_SEX_TOK_OR %left <node> REC_SEX_TOK_EQL REC_SEX_TOK_NEQ REC_SEX_TOK_LT REC_SEX_TOK_GT REC_SEX_TOK_LTE REC_SEX_TOK_GTE %left <node> REC_SEX_TOK_SAMETIME REC_SEX_TOK_AFTER REC_SEX_TOK_BEFORE %left <node> REC_SEX_TOK_SUB REC_SEX_TOK_ADD %left <node> REC_SEX_TOK_MUL REC_SEX_TOK_DIV REC_SEX_TOK_MOD REC_SEX_TOK_MAT %left <node> REC_SEX_TOK_AMP %left <node> REC_SEX_TOK_NEG REC_SEX_TOK_MIN /* negation--unary minus */ %right <node> REC_SEX_TOK_NOT %token <node> REC_SEX_TOK_BP REC_SEX_TOK_EP %token <node> REC_SEX_TOK_ERR %token <node> REC_SEX_TOK_SHARP %type <ast> input %type <node> exp %% /* The grammar follows. */ input: exp { rec_sex_ast_t ast; ast = rec_sex_ast_new (); rec_sex_ast_set_top (ast, $1); rec_sex_parser_set_ast (sex_parser, ast); } ; exp : REC_SEX_TOK_INT { $$ = $1; } | REC_SEX_TOK_REAL { $$ = $1; } | REC_SEX_TOK_STR { $$ = $1; } | REC_SEX_TOK_NAM { $$ = $1; } | exp REC_SEX_TOK_QM exp REC_SEX_TOK_COLON exp { CREATE_NODE_OP3 (REC_SEX_OP_COND, $$, $1, $3, $5); } | exp REC_SEX_TOK_EQL exp { CREATE_NODE_OP2 (REC_SEX_OP_EQL, $$, $1, $3); } | exp REC_SEX_TOK_NEQ exp { CREATE_NODE_OP2 (REC_SEX_OP_NEQ, $$, $1, $3); } | exp REC_SEX_TOK_MAT exp { if ((rec_sex_ast_node_type ($1) == REC_SEX_INT) || (rec_sex_ast_node_type ($3) == REC_SEX_INT)) { rec_sex_ast_node_destroy ($1); rec_sex_ast_node_destroy ($3); YYABORT; } CREATE_NODE_OP2 (REC_SEX_OP_MAT, $$, $1, $3); } | exp REC_SEX_TOK_ADD exp { CREATE_NODE_OP2 (REC_SEX_OP_ADD, $$, $1, $3); } | exp REC_SEX_TOK_SUB exp { CREATE_NODE_OP2 (REC_SEX_OP_SUB, $$, $1, $3); } | exp REC_SEX_TOK_MUL exp { CREATE_NODE_OP2 (REC_SEX_OP_MUL, $$, $1, $3); } | exp REC_SEX_TOK_DIV exp { CREATE_NODE_OP2 (REC_SEX_OP_DIV, $$, $1, $3); } | exp REC_SEX_TOK_MOD exp { CREATE_NODE_OP2 (REC_SEX_OP_MOD, $$, $1, $3); } | exp REC_SEX_TOK_GT exp { CREATE_NODE_OP2 (REC_SEX_OP_GT, $$, $1, $3); } | exp REC_SEX_TOK_LT exp { CREATE_NODE_OP2 (REC_SEX_OP_LT, $$, $1, $3); } | exp REC_SEX_TOK_GTE exp { CREATE_NODE_OP2 (REC_SEX_OP_GTE, $$, $1, $3); } | exp REC_SEX_TOK_LTE exp { CREATE_NODE_OP2 (REC_SEX_OP_LTE, $$, $1, $3); } | exp REC_SEX_TOK_AFTER exp { CREATE_NODE_OP2 (REC_SEX_OP_AFTER, $$, $1, $3); } | exp REC_SEX_TOK_BEFORE exp { CREATE_NODE_OP2 (REC_SEX_OP_BEFORE, $$, $1, $3); } | exp REC_SEX_TOK_SAMETIME exp { CREATE_NODE_OP2 (REC_SEX_OP_SAMETIME, $$, $1, $3); } | exp REC_SEX_TOK_IMPLIES exp { CREATE_NODE_OP2 (REC_SEX_OP_IMPLIES, $$, $1, $3); } | REC_SEX_TOK_NOT exp { CREATE_NODE_OP1 (REC_SEX_OP_NOT, $$, $2); } | exp REC_SEX_TOK_AND exp { CREATE_NODE_OP2 (REC_SEX_OP_AND, $$, $1, $3); } | exp REC_SEX_TOK_OR exp { CREATE_NODE_OP2 (REC_SEX_OP_OR, $$, $1, $3); } | exp REC_SEX_TOK_AMP exp { CREATE_NODE_OP2 (REC_SEX_OP_CONCAT, $$, $1, $3); } | REC_SEX_TOK_SHARP REC_SEX_TOK_NAM { CREATE_NODE_OP1 (REC_SEX_OP_SHA, $$, $2); } | REC_SEX_TOK_BP exp REC_SEX_TOK_EP { $$ = $2; } %% �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-sex-lex.c����������������������������������������������������������������������0000644�0000000�0000000�00000217622�14226576615�013223� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������#line 1 "rec-sex-lex.c" /* This code goes at the "top" of the generated file. */ #include <config.h> #line 5 "rec-sex-lex.c" #define YY_INT_ALIGNED short int /* A lexical scanner generated by flex */ /* %not-for-header */ /* %if-c-only */ /* %if-not-reentrant */ /* %endif */ /* %endif */ /* %ok-for-header */ #define FLEX_SCANNER #define YY_FLEX_MAJOR_VERSION 2 #define YY_FLEX_MINOR_VERSION 6 #define YY_FLEX_SUBMINOR_VERSION 4 #if YY_FLEX_SUBMINOR_VERSION > 0 #define FLEX_BETA #endif /* %if-c++-only */ /* %endif */ /* %if-c-only */ #ifdef yy_create_buffer #define sex_create_buffer_ALREADY_DEFINED #else #define yy_create_buffer sex_create_buffer #endif #ifdef yy_delete_buffer #define sex_delete_buffer_ALREADY_DEFINED #else #define yy_delete_buffer sex_delete_buffer #endif #ifdef yy_scan_buffer #define sex_scan_buffer_ALREADY_DEFINED #else #define yy_scan_buffer sex_scan_buffer #endif #ifdef yy_scan_string #define sex_scan_string_ALREADY_DEFINED #else #define yy_scan_string sex_scan_string #endif #ifdef yy_scan_bytes #define sex_scan_bytes_ALREADY_DEFINED #else #define yy_scan_bytes sex_scan_bytes #endif #ifdef yy_init_buffer #define sex_init_buffer_ALREADY_DEFINED #else #define yy_init_buffer sex_init_buffer #endif #ifdef yy_flush_buffer #define sex_flush_buffer_ALREADY_DEFINED #else #define yy_flush_buffer sex_flush_buffer #endif #ifdef yy_load_buffer_state #define sex_load_buffer_state_ALREADY_DEFINED #else #define yy_load_buffer_state sex_load_buffer_state #endif #ifdef yy_switch_to_buffer #define sex_switch_to_buffer_ALREADY_DEFINED #else #define yy_switch_to_buffer sex_switch_to_buffer #endif #ifdef yypush_buffer_state #define sexpush_buffer_state_ALREADY_DEFINED #else #define yypush_buffer_state sexpush_buffer_state #endif #ifdef yypop_buffer_state #define sexpop_buffer_state_ALREADY_DEFINED #else #define yypop_buffer_state sexpop_buffer_state #endif #ifdef yyensure_buffer_stack #define sexensure_buffer_stack_ALREADY_DEFINED #else #define yyensure_buffer_stack sexensure_buffer_stack #endif #ifdef yylex #define sexlex_ALREADY_DEFINED #else #define yylex sexlex #endif #ifdef yyrestart #define sexrestart_ALREADY_DEFINED #else #define yyrestart sexrestart #endif #ifdef yylex_init #define sexlex_init_ALREADY_DEFINED #else #define yylex_init sexlex_init #endif #ifdef yylex_init_extra #define sexlex_init_extra_ALREADY_DEFINED #else #define yylex_init_extra sexlex_init_extra #endif #ifdef yylex_destroy #define sexlex_destroy_ALREADY_DEFINED #else #define yylex_destroy sexlex_destroy #endif #ifdef yyget_debug #define sexget_debug_ALREADY_DEFINED #else #define yyget_debug sexget_debug #endif #ifdef yyset_debug #define sexset_debug_ALREADY_DEFINED #else #define yyset_debug sexset_debug #endif #ifdef yyget_extra #define sexget_extra_ALREADY_DEFINED #else #define yyget_extra sexget_extra #endif #ifdef yyset_extra #define sexset_extra_ALREADY_DEFINED #else #define yyset_extra sexset_extra #endif #ifdef yyget_in #define sexget_in_ALREADY_DEFINED #else #define yyget_in sexget_in #endif #ifdef yyset_in #define sexset_in_ALREADY_DEFINED #else #define yyset_in sexset_in #endif #ifdef yyget_out #define sexget_out_ALREADY_DEFINED #else #define yyget_out sexget_out #endif #ifdef yyset_out #define sexset_out_ALREADY_DEFINED #else #define yyset_out sexset_out #endif #ifdef yyget_leng #define sexget_leng_ALREADY_DEFINED #else #define yyget_leng sexget_leng #endif #ifdef yyget_text #define sexget_text_ALREADY_DEFINED #else #define yyget_text sexget_text #endif #ifdef yyget_lineno #define sexget_lineno_ALREADY_DEFINED #else #define yyget_lineno sexget_lineno #endif #ifdef yyset_lineno #define sexset_lineno_ALREADY_DEFINED #else #define yyset_lineno sexset_lineno #endif #ifdef yyget_column #define sexget_column_ALREADY_DEFINED #else #define yyget_column sexget_column #endif #ifdef yyset_column #define sexset_column_ALREADY_DEFINED #else #define yyset_column sexset_column #endif #ifdef yywrap #define sexwrap_ALREADY_DEFINED #else #define yywrap sexwrap #endif /* %endif */ #ifdef yyget_lval #define sexget_lval_ALREADY_DEFINED #else #define yyget_lval sexget_lval #endif #ifdef yyset_lval #define sexset_lval_ALREADY_DEFINED #else #define yyset_lval sexset_lval #endif #ifdef yyalloc #define sexalloc_ALREADY_DEFINED #else #define yyalloc sexalloc #endif #ifdef yyrealloc #define sexrealloc_ALREADY_DEFINED #else #define yyrealloc sexrealloc #endif #ifdef yyfree #define sexfree_ALREADY_DEFINED #else #define yyfree sexfree #endif /* %if-c-only */ /* %endif */ /* First, we deal with platform-specific or compiler-specific issues. */ /* begin standard C headers. */ /* %if-c-only */ #include <stdio.h> #include <string.h> #include <errno.h> #include <stdlib.h> /* %endif */ /* %if-tables-serialization */ /* %endif */ /* end standard C headers. */ /* %if-c-or-c++ */ /* flex integer type definitions */ #ifndef FLEXINT_H #define FLEXINT_H /* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */ #if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L /* C99 says to define __STDC_LIMIT_MACROS before including stdint.h, * if you want the limit (max/min) macros for int types. */ #ifndef __STDC_LIMIT_MACROS #define __STDC_LIMIT_MACROS 1 #endif #include <inttypes.h> typedef int8_t flex_int8_t; typedef uint8_t flex_uint8_t; typedef int16_t flex_int16_t; typedef uint16_t flex_uint16_t; typedef int32_t flex_int32_t; typedef uint32_t flex_uint32_t; #else typedef signed char flex_int8_t; typedef short int flex_int16_t; typedef int flex_int32_t; typedef unsigned char flex_uint8_t; typedef unsigned short int flex_uint16_t; typedef unsigned int flex_uint32_t; /* Limits of integral types. */ #ifndef INT8_MIN #define INT8_MIN (-128) #endif #ifndef INT16_MIN #define INT16_MIN (-32767-1) #endif #ifndef INT32_MIN #define INT32_MIN (-2147483647-1) #endif #ifndef INT8_MAX #define INT8_MAX (127) #endif #ifndef INT16_MAX #define INT16_MAX (32767) #endif #ifndef INT32_MAX #define INT32_MAX (2147483647) #endif #ifndef UINT8_MAX #define UINT8_MAX (255U) #endif #ifndef UINT16_MAX #define UINT16_MAX (65535U) #endif #ifndef UINT32_MAX #define UINT32_MAX (4294967295U) #endif #ifndef SIZE_MAX #define SIZE_MAX (~(size_t)0) #endif #endif /* ! C99 */ #endif /* ! FLEXINT_H */ /* %endif */ /* begin standard C++ headers. */ /* %if-c++-only */ /* %endif */ /* TODO: this is always defined, so inline it */ #define yyconst const #if defined(__GNUC__) && __GNUC__ >= 3 #define yynoreturn __attribute__((__noreturn__)) #else #define yynoreturn #endif /* %not-for-header */ /* Returned upon end-of-file. */ #define YY_NULL 0 /* %ok-for-header */ /* %not-for-header */ /* Promotes a possibly negative, possibly signed char to an * integer in range [0..255] for use as an array index. */ #define YY_SC_TO_UI(c) ((YY_CHAR) (c)) /* %ok-for-header */ /* %if-reentrant */ /* An opaque pointer. */ #ifndef YY_TYPEDEF_YY_SCANNER_T #define YY_TYPEDEF_YY_SCANNER_T typedef void* yyscan_t; #endif /* For convenience, these vars (plus the bison vars far below) are macros in the reentrant scanner. */ #define yyin yyg->yyin_r #define yyout yyg->yyout_r #define yyextra yyg->yyextra_r #define yyleng yyg->yyleng_r #define yytext yyg->yytext_r #define yylineno (YY_CURRENT_BUFFER_LVALUE->yy_bs_lineno) #define yycolumn (YY_CURRENT_BUFFER_LVALUE->yy_bs_column) #define yy_flex_debug yyg->yy_flex_debug_r /* %endif */ /* %if-not-reentrant */ /* %endif */ /* Enter a start condition. This macro really ought to take a parameter, * but we do it the disgusting crufty way forced on us by the ()-less * definition of BEGIN. */ #define BEGIN yyg->yy_start = 1 + 2 * /* Translate the current start state into a value that can be later handed * to BEGIN to return to the state. The YYSTATE alias is for lex * compatibility. */ #define YY_START ((yyg->yy_start - 1) / 2) #define YYSTATE YY_START /* Action number for EOF rule of a given start state. */ #define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1) /* Special action meaning "start processing a new file". */ #define YY_NEW_FILE yyrestart( yyin , yyscanner ) #define YY_END_OF_BUFFER_CHAR 0 /* Size of default input buffer. */ #ifndef YY_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k. * Moreover, YY_BUF_SIZE is 2*YY_READ_BUF_SIZE in the general case. * Ditto for the __ia64__ case accordingly. */ #define YY_BUF_SIZE 32768 #else #define YY_BUF_SIZE 16384 #endif /* __ia64__ */ #endif /* The state buf must be large enough to hold one state per character in the main buffer. */ #define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type)) #ifndef YY_TYPEDEF_YY_BUFFER_STATE #define YY_TYPEDEF_YY_BUFFER_STATE typedef struct yy_buffer_state *YY_BUFFER_STATE; #endif #ifndef YY_TYPEDEF_YY_SIZE_T #define YY_TYPEDEF_YY_SIZE_T typedef size_t yy_size_t; #endif /* %if-not-reentrant */ /* %endif */ /* %if-c-only */ /* %if-not-reentrant */ /* %endif */ /* %endif */ #define EOB_ACT_CONTINUE_SCAN 0 #define EOB_ACT_END_OF_FILE 1 #define EOB_ACT_LAST_MATCH 2 #define YY_LESS_LINENO(n) #define YY_LINENO_REWIND_TO(ptr) /* Return all but the first "n" matched characters back to the input stream. */ #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ *yy_cp = yyg->yy_hold_char; \ YY_RESTORE_YY_MORE_OFFSET \ yyg->yy_c_buf_p = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \ YY_DO_BEFORE_ACTION; /* set up yytext again */ \ } \ while ( 0 ) #define unput(c) yyunput( c, yyg->yytext_ptr , yyscanner ) #ifndef YY_STRUCT_YY_BUFFER_STATE #define YY_STRUCT_YY_BUFFER_STATE struct yy_buffer_state { /* %if-c-only */ FILE *yy_input_file; /* %endif */ /* %if-c++-only */ /* %endif */ char *yy_ch_buf; /* input buffer */ char *yy_buf_pos; /* current position in input buffer */ /* Size of input buffer in bytes, not including room for EOB * characters. */ int yy_buf_size; /* Number of characters read into yy_ch_buf, not including EOB * characters. */ int yy_n_chars; /* Whether we "own" the buffer - i.e., we know we created it, * and can realloc() it to grow it, and should free() it to * delete it. */ int yy_is_our_buffer; /* Whether this is an "interactive" input source; if so, and * if we're using stdio for input, then we want to use getc() * instead of fread(), to make sure we stop fetching input after * each newline. */ int yy_is_interactive; /* Whether we're considered to be at the beginning of a line. * If so, '^' rules will be active on the next match, otherwise * not. */ int yy_at_bol; int yy_bs_lineno; /**< The line count. */ int yy_bs_column; /**< The column count. */ /* Whether to try to fill the input buffer when we reach the * end of it. */ int yy_fill_buffer; int yy_buffer_status; #define YY_BUFFER_NEW 0 #define YY_BUFFER_NORMAL 1 /* When an EOF's been seen but there's still some text to process * then we mark the buffer as YY_EOF_PENDING, to indicate that we * shouldn't try reading from the input source any more. We might * still have a bunch of tokens to match, though, because of * possible backing-up. * * When we actually see the EOF, we change the status to "new" * (via yyrestart()), so that the user can continue scanning by * just pointing yyin at a new input file. */ #define YY_BUFFER_EOF_PENDING 2 }; #endif /* !YY_STRUCT_YY_BUFFER_STATE */ /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ /* %if-not-reentrant */ /* %endif */ /* %ok-for-header */ /* %endif */ /* We provide macros for accessing buffer states in case in the * future we want to put the buffer states in a more general * "scanner state". * * Returns the top of the stack, or NULL. */ #define YY_CURRENT_BUFFER ( yyg->yy_buffer_stack \ ? yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] \ : NULL) /* Same as previous macro, but useful when we know that the buffer stack is not * NULL or when we need an lvalue. For internal use only. */ #define YY_CURRENT_BUFFER_LVALUE yyg->yy_buffer_stack[yyg->yy_buffer_stack_top] /* %if-c-only Standard (non-C++) definition */ /* %if-not-reentrant */ /* %not-for-header */ /* %ok-for-header */ /* %endif */ void yyrestart ( FILE *input_file , yyscan_t yyscanner ); void yy_switch_to_buffer ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); YY_BUFFER_STATE yy_create_buffer ( FILE *file, int size , yyscan_t yyscanner ); void yy_delete_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); void yy_flush_buffer ( YY_BUFFER_STATE b , yyscan_t yyscanner ); void yypush_buffer_state ( YY_BUFFER_STATE new_buffer , yyscan_t yyscanner ); void yypop_buffer_state ( yyscan_t yyscanner ); static void yyensure_buffer_stack ( yyscan_t yyscanner ); static void yy_load_buffer_state ( yyscan_t yyscanner ); static void yy_init_buffer ( YY_BUFFER_STATE b, FILE *file , yyscan_t yyscanner ); #define YY_FLUSH_BUFFER yy_flush_buffer( YY_CURRENT_BUFFER , yyscanner) YY_BUFFER_STATE yy_scan_buffer ( char *base, yy_size_t size , yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_string ( const char *yy_str , yyscan_t yyscanner ); YY_BUFFER_STATE yy_scan_bytes ( const char *bytes, int len , yyscan_t yyscanner ); /* %endif */ void *yyalloc ( yy_size_t , yyscan_t yyscanner ); void *yyrealloc ( void *, yy_size_t , yyscan_t yyscanner ); void yyfree ( void * , yyscan_t yyscanner ); #define yy_new_buffer yy_create_buffer #define yy_set_interactive(is_interactive) \ { \ if ( ! YY_CURRENT_BUFFER ){ \ yyensure_buffer_stack (yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \ } #define yy_set_bol(at_bol) \ { \ if ( ! YY_CURRENT_BUFFER ){\ yyensure_buffer_stack (yyscanner); \ YY_CURRENT_BUFFER_LVALUE = \ yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); \ } \ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \ } #define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol) /* %% [1.0] yytext/yyin/yyout/yy_state_type/yylineno etc. def's & init go here */ /* Begin user sect3 */ #define sexwrap(yyscanner) (/*CONSTCOND*/1) #define YY_SKIP_YYWRAP #define FLEX_DEBUG typedef flex_uint8_t YY_CHAR; typedef int yy_state_type; #define yytext_ptr yytext_r /* %% [1.5] DFA */ /* %if-c-only Standard (non-C++) definition */ static yy_state_type yy_get_previous_state ( yyscan_t yyscanner ); static yy_state_type yy_try_NUL_trans ( yy_state_type current_state , yyscan_t yyscanner); static int yy_get_next_buffer ( yyscan_t yyscanner ); static void yynoreturn yy_fatal_error ( const char* msg , yyscan_t yyscanner ); /* %endif */ /* Done after the current pattern has been matched and before the * corresponding action - sets up yytext. */ #define YY_DO_BEFORE_ACTION \ yyg->yytext_ptr = yy_bp; \ /* %% [2.0] code to fiddle yytext and yyleng for yymore() goes here \ */\ yyleng = (int) (yy_cp - yy_bp); \ yyg->yy_hold_char = *yy_cp; \ *yy_cp = '\0'; \ /* %% [3.0] code to copy yytext_ptr to yytext[] goes here, if %array \ */\ yyg->yy_c_buf_p = yy_cp; /* %% [4.0] data tables for the DFA and the user's section 1 definitions go here */ #define YY_NUM_RULES 32 #define YY_END_OF_BUFFER 33 /* This struct is not used in this scanner, but its presence is necessary. */ struct yy_trans_info { flex_int32_t yy_verify; flex_int32_t yy_nxt; }; static const flex_int16_t yy_accept[64] = { 0, 0, 0, 33, 31, 1, 1, 17, 31, 25, 7, 28, 31, 21, 22, 14, 4, 5, 31, 6, 3, 3, 27, 20, 15, 19, 26, 29, 31, 18, 16, 0, 30, 0, 23, 0, 0, 0, 3, 3, 2, 0, 9, 10, 12, 13, 11, 8, 0, 29, 0, 24, 0, 30, 0, 0, 30, 0, 3, 29, 0, 29, 29, 0 } ; static const YY_CHAR yy_ec[256] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 2, 3, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 4, 5, 6, 1, 7, 8, 9, 10, 11, 12, 13, 1, 14, 15, 16, 17, 18, 18, 18, 18, 18, 18, 18, 18, 18, 19, 1, 20, 21, 22, 23, 1, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 26, 27, 28, 1, 29, 1, 24, 24, 24, 24, 24, 24, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 25, 30, 25, 25, 1, 31, 1, 32, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1 } ; static const YY_CHAR yy_meta[33] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 2, 1, 3, 3, 1, 1, 1, 1, 1, 3, 3, 3, 1, 1, 3, 3, 1, 1 } ; static const flex_int16_t yy_base[70] = { 0, 0, 0, 105, 127, 127, 127, 83, 28, 127, 127, 94, 25, 127, 127, 127, 127, 20, 22, 127, 26, 30, 127, 29, 32, 36, 127, 36, 69, 127, 127, 37, 127, 41, 127, 50, 51, 48, 52, 56, 58, 62, 127, 127, 127, 127, 127, 127, 59, 46, 70, 127, 58, 76, 85, 82, 83, 84, 77, 73, 79, 72, 127, 127, 112, 115, 117, 120, 123, 33 } ; static const flex_int16_t yy_def[70] = { 0, 63, 1, 63, 63, 63, 63, 63, 64, 63, 63, 63, 65, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 63, 63, 63, 64, 63, 67, 63, 65, 68, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 66, 63, 63, 64, 64, 67, 65, 65, 68, 63, 69, 63, 69, 63, 0, 63, 63, 63, 63, 63, 63 } ; static const flex_int16_t yy_nxt[160] = { 0, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, 26, 27, 27, 4, 4, 4, 4, 27, 28, 29, 32, 32, 37, 61, 38, 39, 40, 40, 37, 32, 39, 39, 37, 53, 39, 39, 42, 43, 48, 36, 44, 45, 33, 41, 46, 47, 32, 56, 48, 50, 32, 33, 40, 40, 37, 54, 39, 39, 37, 50, 39, 39, 40, 40, 36, 57, 58, 58, 32, 41, 59, 59, 33, 58, 60, 60, 59, 53, 32, 32, 56, 58, 58, 60, 60, 50, 50, 51, 58, 34, 33, 30, 63, 63, 62, 63, 36, 36, 57, 54, 31, 31, 31, 35, 35, 35, 49, 49, 52, 52, 52, 55, 55, 55, 3, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 } ; static const flex_int16_t yy_chk[160] = { 0, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 1, 8, 12, 17, 69, 17, 17, 18, 18, 20, 31, 20, 20, 21, 33, 21, 21, 23, 23, 27, 12, 24, 24, 8, 20, 25, 25, 35, 36, 49, 27, 52, 31, 37, 37, 38, 33, 38, 38, 39, 49, 39, 39, 40, 40, 35, 36, 41, 41, 53, 38, 48, 48, 52, 41, 50, 50, 48, 54, 55, 56, 57, 58, 58, 60, 60, 61, 59, 28, 58, 11, 53, 7, 3, 0, 60, 0, 55, 56, 57, 54, 64, 64, 64, 65, 65, 65, 66, 66, 67, 67, 67, 68, 68, 68, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63, 63 } ; static const flex_int16_t yy_rule_linenum[32] = { 0, 74, 76, 89, 102, 103, 104, 105, 106, 107, 108, 109, 110, 111, 112, 113, 114, 115, 116, 117, 118, 119, 120, 121, 122, 123, 124, 125, 126, 128, 151, 165 } ; /* The intent behind this definition is that it'll catch * any uses of REJECT which flex missed. */ #define REJECT reject_used_but_not_detected #define yymore() yymore_used_but_not_detected #define YY_MORE_ADJ 0 #define YY_RESTORE_YY_MORE_OFFSET #line 1 "../../src/rec-sex-lex.l" /* rec-sex-lex.l - Selection Expressions lexer. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ /* Automake needs this. */ #define YY_NO_INPUT 1 #line 38 "../../src/rec-sex-lex.l" #include <rec-utils.h> #include <rec-sex-ast.h> #include <rec-sex-parser.h> #include <rec-sex-tab.h> #define YY_INPUT(buf,result,max_size) \ { \ int ci; \ if ((ci = rec_sex_parser_getc ((rec_sex_parser_t) yyextra)) == -1) \ result = YY_NULL; \ else \ { \ buf[0] = (char) ci; \ result = 1; \ } \ } /* Forward prototypes for functions defined below. */ char *rec_sex_lex_extract_name (char *str); char *rec_sex_lex_extract_subname (char *str); bool rec_sex_lex_extract_index (char *str, int *num); #line 829 "rec-sex-lex.c" /* Please do not touch this comment' */ #line 831 "rec-sex-lex.c" #define INITIAL 0 #ifndef YY_NO_UNISTD_H /* Special case for "unistd.h", since it is non-ANSI. We include it way * down here because we want the user's section 1 to have been scanned first. * The user has a chance to override it with an option. */ /* %if-c-only */ #include <unistd.h> /* %endif */ /* %if-c++-only */ /* %endif */ #endif #define YY_EXTRA_TYPE void * /* %if-c-only Reentrant structure and macros (non-C++). */ /* %if-reentrant */ /* Holds the entire state of the reentrant scanner. */ struct yyguts_t { /* User-defined. Not touched by flex. */ YY_EXTRA_TYPE yyextra_r; /* The rest are the same as the globals declared in the non-reentrant scanner. */ FILE *yyin_r, *yyout_r; size_t yy_buffer_stack_top; /**< index of top of stack. */ size_t yy_buffer_stack_max; /**< capacity of stack. */ YY_BUFFER_STATE * yy_buffer_stack; /**< Stack as an array. */ char yy_hold_char; int yy_n_chars; int yyleng_r; char *yy_c_buf_p; int yy_init; int yy_start; int yy_did_buffer_switch_on_eof; int yy_start_stack_ptr; int yy_start_stack_depth; int *yy_start_stack; yy_state_type yy_last_accepting_state; char* yy_last_accepting_cpos; int yylineno_r; int yy_flex_debug_r; char *yytext_r; int yy_more_flag; int yy_more_len; YYSTYPE * yylval_r; }; /* end struct yyguts_t */ /* %if-c-only */ static int yy_init_globals ( yyscan_t yyscanner ); /* %endif */ /* %if-reentrant */ /* This must go here because YYSTYPE and YYLTYPE are included * from bison output in section 1.*/ # define yylval yyg->yylval_r int yylex_init (yyscan_t* scanner); int yylex_init_extra ( YY_EXTRA_TYPE user_defined, yyscan_t* scanner); /* %endif */ /* %endif End reentrant structures and macros. */ /* Accessor methods to globals. These are made visible to non-reentrant scanners for convenience. */ int yylex_destroy ( yyscan_t yyscanner ); int yyget_debug ( yyscan_t yyscanner ); void yyset_debug ( int debug_flag , yyscan_t yyscanner ); YY_EXTRA_TYPE yyget_extra ( yyscan_t yyscanner ); void yyset_extra ( YY_EXTRA_TYPE user_defined , yyscan_t yyscanner ); FILE *yyget_in ( yyscan_t yyscanner ); void yyset_in ( FILE * _in_str , yyscan_t yyscanner ); FILE *yyget_out ( yyscan_t yyscanner ); void yyset_out ( FILE * _out_str , yyscan_t yyscanner ); int yyget_leng ( yyscan_t yyscanner ); char *yyget_text ( yyscan_t yyscanner ); int yyget_lineno ( yyscan_t yyscanner ); void yyset_lineno ( int _line_number , yyscan_t yyscanner ); int yyget_column ( yyscan_t yyscanner ); void yyset_column ( int _column_no , yyscan_t yyscanner ); /* %if-bison-bridge */ YYSTYPE * yyget_lval ( yyscan_t yyscanner ); void yyset_lval ( YYSTYPE * yylval_param , yyscan_t yyscanner ); /* %endif */ /* Macros after this point can all be overridden by user definitions in * section 1. */ #ifndef YY_SKIP_YYWRAP #ifdef __cplusplus extern "C" int yywrap ( yyscan_t yyscanner ); #else extern int yywrap ( yyscan_t yyscanner ); #endif #endif /* %not-for-header */ #ifndef YY_NO_UNPUT #endif /* %ok-for-header */ /* %endif */ #ifndef yytext_ptr static void yy_flex_strncpy ( char *, const char *, int , yyscan_t yyscanner); #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen ( const char * , yyscan_t yyscanner); #endif #ifndef YY_NO_INPUT /* %if-c-only Standard (non-C++) definition */ /* %not-for-header */ #ifdef __cplusplus static int yyinput ( yyscan_t yyscanner ); #else static int input ( yyscan_t yyscanner ); #endif /* %ok-for-header */ /* %endif */ #endif /* %if-c-only */ /* %endif */ /* Amount of stuff to slurp up with each read. */ #ifndef YY_READ_BUF_SIZE #ifdef __ia64__ /* On IA-64, the buffer size is 16k, not 8k */ #define YY_READ_BUF_SIZE 16384 #else #define YY_READ_BUF_SIZE 8192 #endif /* __ia64__ */ #endif /* Copy whatever the last rule matched to the standard output. */ #ifndef ECHO /* %if-c-only Standard (non-C++) definition */ /* This used to be an fputs(), but since the string might contain NUL's, * we now use fwrite(). */ #define ECHO do { if (fwrite( yytext, (size_t) yyleng, 1, yyout )) {} } while (0) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* Gets input and stuffs it into "buf". number of characters read, or YY_NULL, * is returned in "result". */ #ifndef YY_INPUT #define YY_INPUT(buf,result,max_size) \ /* %% [5.0] fread()/read() definition of YY_INPUT goes here unless we're doing C++ \ */\ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \ { \ int c = '*'; \ int n; \ for ( n = 0; n < max_size && \ (c = getc( yyin )) != EOF && c != '\n'; ++n ) \ buf[n] = (char) c; \ if ( c == '\n' ) \ buf[n++] = (char) c; \ if ( c == EOF && ferror( yyin ) ) \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ result = n; \ } \ else \ { \ errno=0; \ while ( (result = (int) fread(buf, 1, (yy_size_t) max_size, yyin)) == 0 && ferror(yyin)) \ { \ if( errno != EINTR) \ { \ YY_FATAL_ERROR( "input in flex scanner failed" ); \ break; \ } \ errno=0; \ clearerr(yyin); \ } \ }\ \ /* %if-c++-only C++ definition \ */\ /* %endif */ #endif /* No semi-colon after return; correct usage is to write "yyterminate();" - * we don't want an extra ';' after the "return" because that will cause * some compilers to complain about unreachable statements. */ #ifndef yyterminate #define yyterminate() return YY_NULL #endif /* Number of entries by which start-condition stack grows. */ #ifndef YY_START_STACK_INCR #define YY_START_STACK_INCR 25 #endif /* Report a fatal error. */ #ifndef YY_FATAL_ERROR /* %if-c-only */ #define YY_FATAL_ERROR(msg) yy_fatal_error( msg , yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ #endif /* %if-tables-serialization structures and prototypes */ /* %not-for-header */ /* %ok-for-header */ /* %not-for-header */ /* %tables-yydmap generated elements */ /* %endif */ /* end tables serialization structures and prototypes */ /* %ok-for-header */ /* Default declaration of generated scanner - a define so the user can * easily add parameters. */ #ifndef YY_DECL #define YY_DECL_IS_OURS 1 /* %if-c-only Standard (non-C++) definition */ extern int yylex \ (YYSTYPE * yylval_param , yyscan_t yyscanner); #define YY_DECL int yylex \ (YYSTYPE * yylval_param , yyscan_t yyscanner) /* %endif */ /* %if-c++-only C++ definition */ /* %endif */ #endif /* !YY_DECL */ /* Code executed at the beginning of each rule, after yytext and yyleng * have been set up. */ #ifndef YY_USER_ACTION #define YY_USER_ACTION #endif /* Code executed at the end of each rule. */ #ifndef YY_BREAK #define YY_BREAK /*LINTED*/break; #endif /* %% [6.0] YY_RULE_SETUP definition goes here */ #define YY_RULE_SETUP \ YY_USER_ACTION /* %not-for-header */ /** The main scanner function which does all the work. */ YY_DECL { yy_state_type yy_current_state; char *yy_cp, *yy_bp; int yy_act; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yylval = yylval_param; if ( !yyg->yy_init ) { yyg->yy_init = 1; #ifdef YY_USER_INIT YY_USER_INIT; #endif if ( ! yyg->yy_start ) yyg->yy_start = 1; /* first start state */ if ( ! yyin ) /* %if-c-only */ yyin = stdin; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! yyout ) /* %if-c-only */ yyout = stdout; /* %endif */ /* %if-c++-only */ /* %endif */ if ( ! YY_CURRENT_BUFFER ) { yyensure_buffer_stack (yyscanner); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); } yy_load_buffer_state( yyscanner ); } { /* %% [7.0] user's declarations go here */ #line 72 "../../src/rec-sex-lex.l" #line 1172 "rec-sex-lex.c" while ( /*CONSTCOND*/1 ) /* loops until end-of-file is reached */ { /* %% [8.0] yymore()-related code goes here */ yy_cp = yyg->yy_c_buf_p; /* Support of yytext. */ *yy_cp = yyg->yy_hold_char; /* yy_bp points to the position in yy_ch_buf of the start of * the current run. */ yy_bp = yy_cp; /* %% [9.0] code to set up and find next match goes here */ yy_current_state = yyg->yy_start; yy_match: do { YY_CHAR yy_c = yy_ec[YY_SC_TO_UI(*yy_cp)] ; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 64 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; ++yy_cp; } while ( yy_base[yy_current_state] != 127 ); yy_find_action: /* %% [10.0] code to find the action number goes here */ yy_act = yy_accept[yy_current_state]; if ( yy_act == 0 ) { /* have to back up */ yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; yy_act = yy_accept[yy_current_state]; } YY_DO_BEFORE_ACTION; /* %% [11.0] code for yylineno update goes here */ do_action: /* This label is used only to access EOF actions. */ /* %% [12.0] debug code goes here */ if ( yy_flex_debug ) { if ( yy_act == 0 ) fprintf( stderr, "--scanner backing up\n" ); else if ( yy_act < 32 ) fprintf( stderr, "--accepting rule at line %ld (\"%s\")\n", (long)yy_rule_linenum[yy_act], yytext ); else if ( yy_act == 32 ) fprintf( stderr, "--accepting default rule (\"%s\")\n", yytext ); else if ( yy_act == 33 ) fprintf( stderr, "--(end of buffer or a NUL)\n" ); else fprintf( stderr, "--EOF (start condition %d)\n", YY_START ); } switch ( yy_act ) { /* beginning of action switch */ /* %% [13.0] actions go here */ case 0: /* must back up */ /* undo the effects of YY_DO_BEFORE_ACTION */ *yy_cp = yyg->yy_hold_char; yy_cp = yyg->yy_last_accepting_cpos; yy_current_state = yyg->yy_last_accepting_state; goto yy_find_action; case 1: /* rule 1 can match eol */ YY_RULE_SETUP #line 74 "../../src/rec-sex-lex.l" { /* Ignore whitespace */ } YY_BREAK case 2: YY_RULE_SETUP #line 76 "../../src/rec-sex-lex.l" { /* * Create a real node. */ double real_value; yylval->node = rec_sex_ast_node_new (); rec_atod (yytext, &real_value); rec_sex_ast_node_set_real (yylval->node, real_value); return REC_SEX_TOK_REAL; } YY_BREAK case 3: YY_RULE_SETUP #line 89 "../../src/rec-sex-lex.l" { /* * Create an integer node. */ int integer_value; yylval->node = rec_sex_ast_node_new (); rec_atoi (yytext, &integer_value); rec_sex_ast_node_set_int (yylval->node, integer_value); return REC_SEX_TOK_INT; } YY_BREAK case 4: YY_RULE_SETUP #line 102 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_ADD; } YY_BREAK case 5: YY_RULE_SETUP #line 103 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_SUB; } YY_BREAK case 6: YY_RULE_SETUP #line 104 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_DIV; } YY_BREAK case 7: YY_RULE_SETUP #line 105 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_MOD; } YY_BREAK case 8: YY_RULE_SETUP #line 106 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_AFTER; } YY_BREAK case 9: YY_RULE_SETUP #line 107 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_BEFORE; } YY_BREAK case 10: YY_RULE_SETUP #line 108 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_LTE; } YY_BREAK case 11: YY_RULE_SETUP #line 109 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_GTE; } YY_BREAK case 12: YY_RULE_SETUP #line 110 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_SAMETIME; } YY_BREAK case 13: YY_RULE_SETUP #line 111 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_IMPLIES; } YY_BREAK case 14: YY_RULE_SETUP #line 112 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_MUL; } YY_BREAK case 15: YY_RULE_SETUP #line 113 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_EQL; } YY_BREAK case 16: YY_RULE_SETUP #line 114 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_NEQ; } YY_BREAK case 17: YY_RULE_SETUP #line 115 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_NOT; } YY_BREAK case 18: YY_RULE_SETUP #line 116 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_MAT; } YY_BREAK case 19: YY_RULE_SETUP #line 117 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_GT; } YY_BREAK case 20: YY_RULE_SETUP #line 118 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_LT; } YY_BREAK case 21: YY_RULE_SETUP #line 119 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_BP; } YY_BREAK case 22: YY_RULE_SETUP #line 120 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_EP; } YY_BREAK case 23: YY_RULE_SETUP #line 121 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_AND; } YY_BREAK case 24: YY_RULE_SETUP #line 122 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_OR; } YY_BREAK case 25: YY_RULE_SETUP #line 123 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_SHARP; } YY_BREAK case 26: YY_RULE_SETUP #line 124 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_QM; } YY_BREAK case 27: YY_RULE_SETUP #line 125 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_COLON; } YY_BREAK case 28: YY_RULE_SETUP #line 126 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_AMP; } YY_BREAK case 29: YY_RULE_SETUP #line 128 "../../src/rec-sex-lex.l" { int res; char *match; char *name, *subname; int index = -1; match = strdup (yytext); rec_sex_lex_extract_index (match, &index); name = rec_sex_lex_extract_name (match); subname = rec_sex_lex_extract_subname (match); /* Create a name node. */ yylval->node = rec_sex_ast_node_new (); rec_sex_ast_node_set_name (yylval->node, name, subname); rec_sex_ast_node_set_index (yylval->node, index); res = REC_SEX_TOK_NAM; free (name); free (match); return res; } YY_BREAK case 30: /* rule 30 can match eol */ YY_RULE_SETUP #line 151 "../../src/rec-sex-lex.l" { /* * Create a string node. */ /* Strip the quoting characters */ yytext[strlen(yytext) - 1] = 0; yylval->node = rec_sex_ast_node_new (); rec_sex_ast_node_set_str (yylval->node, yytext + 1); return REC_SEX_TOK_STR; } YY_BREAK case 31: YY_RULE_SETUP #line 165 "../../src/rec-sex-lex.l" { return REC_SEX_TOK_ERR; } YY_BREAK case 32: YY_RULE_SETUP #line 167 "../../src/rec-sex-lex.l" ECHO; YY_BREAK #line 1469 "rec-sex-lex.c" case YY_STATE_EOF(INITIAL): yyterminate(); case YY_END_OF_BUFFER: { /* Amount of text matched not including the EOB char. */ int yy_amount_of_matched_text = (int) (yy_cp - yyg->yytext_ptr) - 1; /* Undo the effects of YY_DO_BEFORE_ACTION. */ *yy_cp = yyg->yy_hold_char; YY_RESTORE_YY_MORE_OFFSET if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW ) { /* We're scanning a new file or input source. It's * possible that this happened because the user * just pointed yyin at a new source and called * yylex(). If so, then we have to assure * consistency between YY_CURRENT_BUFFER and our * globals. Here is the right place to do so, because * this is the first action (other than possibly a * back-up) that will match for the new input source. */ yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; /* %if-c-only */ YY_CURRENT_BUFFER_LVALUE->yy_input_file = yyin; /* %endif */ /* %if-c++-only */ /* %endif */ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL; } /* Note that here we test for yy_c_buf_p "<=" to the position * of the first EOB in the buffer, since yy_c_buf_p will * already have been incremented past the NUL character * (since all states make transitions on EOB to the * end-of-buffer state). Contrast this with the test * in input(). */ if ( yyg->yy_c_buf_p <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) { /* This was really a NUL. */ yy_state_type yy_next_state; yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( yyscanner ); /* Okay, we're now positioned to make the NUL * transition. We couldn't have * yy_get_previous_state() go ahead and do it * for us because it doesn't know how to deal * with the possibility of jamming (and we don't * want to build jamming into it because then it * will run more slowly). */ yy_next_state = yy_try_NUL_trans( yy_current_state , yyscanner); yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; if ( yy_next_state ) { /* Consume the NUL. */ yy_cp = ++yyg->yy_c_buf_p; yy_current_state = yy_next_state; goto yy_match; } else { /* %% [14.0] code to do back-up for compressed tables and set up yy_cp goes here */ yy_cp = yyg->yy_c_buf_p; goto yy_find_action; } } else switch ( yy_get_next_buffer( yyscanner ) ) { case EOB_ACT_END_OF_FILE: { yyg->yy_did_buffer_switch_on_eof = 0; if ( yywrap( yyscanner ) ) { /* Note: because we've taken care in * yy_get_next_buffer() to have set up * yytext, we can now set up * yy_c_buf_p so that if some total * hoser (like flex itself) wants to * call the scanner after we return the * YY_NULL, it'll still work - another * YY_NULL will get returned. */ yyg->yy_c_buf_p = yyg->yytext_ptr + YY_MORE_ADJ; yy_act = YY_STATE_EOF(YY_START); goto do_action; } else { if ( ! yyg->yy_did_buffer_switch_on_eof ) YY_NEW_FILE; } break; } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + yy_amount_of_matched_text; yy_current_state = yy_get_previous_state( yyscanner ); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_match; case EOB_ACT_LAST_MATCH: yyg->yy_c_buf_p = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars]; yy_current_state = yy_get_previous_state( yyscanner ); yy_cp = yyg->yy_c_buf_p; yy_bp = yyg->yytext_ptr + YY_MORE_ADJ; goto yy_find_action; } break; } default: YY_FATAL_ERROR( "fatal flex scanner internal error--no action found" ); } /* end of action switch */ } /* end of scanning one token */ } /* end of user's declarations */ } /* end of yylex */ /* %ok-for-header */ /* %if-c++-only */ /* %not-for-header */ /* %ok-for-header */ /* %endif */ /* yy_get_next_buffer - try to read in a new buffer * * Returns a code representing an action: * EOB_ACT_LAST_MATCH - * EOB_ACT_CONTINUE_SCAN - continue scanning from current position * EOB_ACT_END_OF_FILE - end of file */ /* %if-c-only */ static int yy_get_next_buffer (yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf; char *source = yyg->yytext_ptr; int number_to_move, i; int ret_val; if ( yyg->yy_c_buf_p > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] ) YY_FATAL_ERROR( "fatal flex scanner internal error--end of buffer missed" ); if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 ) { /* Don't try to fill the buffer, so this is an EOF. */ if ( yyg->yy_c_buf_p - yyg->yytext_ptr - YY_MORE_ADJ == 1 ) { /* We matched a single character, the EOB, so * treat this as a final EOF. */ return EOB_ACT_END_OF_FILE; } else { /* We matched some text prior to the EOB, first * process it. */ return EOB_ACT_LAST_MATCH; } } /* Try to read more data. */ /* First move last chars to start of buffer. */ number_to_move = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr - 1); for ( i = 0; i < number_to_move; ++i ) *(dest++) = *(source++); if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING ) /* don't do the read, it's not guaranteed to return an EOF, * just force an EOF */ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars = 0; else { int num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; while ( num_to_read <= 0 ) { /* Not enough room in the buffer - grow it. */ /* just a shorter name for the current buffer */ YY_BUFFER_STATE b = YY_CURRENT_BUFFER_LVALUE; int yy_c_buf_p_offset = (int) (yyg->yy_c_buf_p - b->yy_ch_buf); if ( b->yy_is_our_buffer ) { int new_size = b->yy_buf_size * 2; if ( new_size <= 0 ) b->yy_buf_size += b->yy_buf_size / 8; else b->yy_buf_size *= 2; b->yy_ch_buf = (char *) /* Include room in for 2 EOB chars. */ yyrealloc( (void *) b->yy_ch_buf, (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); } else /* Can't grow it, we don't own it. */ b->yy_ch_buf = NULL; if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "fatal error - scanner input buffer overflow" ); yyg->yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset]; num_to_read = YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1; } if ( num_to_read > YY_READ_BUF_SIZE ) num_to_read = YY_READ_BUF_SIZE; /* Read in more data. */ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]), yyg->yy_n_chars, num_to_read ); YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } if ( yyg->yy_n_chars == 0 ) { if ( number_to_move == YY_MORE_ADJ ) { ret_val = EOB_ACT_END_OF_FILE; yyrestart( yyin , yyscanner); } else { ret_val = EOB_ACT_LAST_MATCH; YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_EOF_PENDING; } } else ret_val = EOB_ACT_CONTINUE_SCAN; if ((yyg->yy_n_chars + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) { /* Extend the array by 50%, plus the number we really need. */ int new_size = yyg->yy_n_chars + number_to_move + (yyg->yy_n_chars >> 1); YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) yyrealloc( (void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf, (yy_size_t) new_size , yyscanner ); if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" ); /* "- 2" to take care of EOB's */ YY_CURRENT_BUFFER_LVALUE->yy_buf_size = (int) (new_size - 2); } yyg->yy_n_chars += number_to_move; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] = YY_END_OF_BUFFER_CHAR; YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR; yyg->yytext_ptr = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0]; return ret_val; } /* yy_get_previous_state - get the state just before the EOB char was reached */ /* %if-c-only */ /* %not-for-header */ static yy_state_type yy_get_previous_state (yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { yy_state_type yy_current_state; char *yy_cp; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* %% [15.0] code to get the start state into yy_current_state goes here */ yy_current_state = yyg->yy_start; for ( yy_cp = yyg->yytext_ptr + YY_MORE_ADJ; yy_cp < yyg->yy_c_buf_p; ++yy_cp ) { /* %% [16.0] code to find the next state goes here */ YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1); if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 64 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; } return yy_current_state; } /* yy_try_NUL_trans - try to make a transition on the NUL character * * synopsis * next_state = yy_try_NUL_trans( current_state ); */ /* %if-c-only */ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state , yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { int yy_is_jam; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* This var may be unused depending upon options. */ /* %% [17.0] code to find the next state, and perhaps do backing up, goes here */ char *yy_cp = yyg->yy_c_buf_p; YY_CHAR yy_c = 1; if ( yy_accept[yy_current_state] ) { yyg->yy_last_accepting_state = yy_current_state; yyg->yy_last_accepting_cpos = yy_cp; } while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state ) { yy_current_state = (int) yy_def[yy_current_state]; if ( yy_current_state >= 64 ) yy_c = yy_meta[yy_c]; } yy_current_state = yy_nxt[yy_base[yy_current_state] + yy_c]; yy_is_jam = (yy_current_state == 63); (void)yyg; return yy_is_jam ? 0 : yy_current_state; } #ifndef YY_NO_UNPUT /* %if-c-only */ /* %endif */ #endif /* %if-c-only */ #ifndef YY_NO_INPUT #ifdef __cplusplus static int yyinput (yyscan_t yyscanner) #else static int input (yyscan_t yyscanner) #endif /* %endif */ /* %if-c++-only */ /* %endif */ { int c; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; *yyg->yy_c_buf_p = yyg->yy_hold_char; if ( *yyg->yy_c_buf_p == YY_END_OF_BUFFER_CHAR ) { /* yy_c_buf_p now points to the character we want to return. * If this occurs *before* the EOB characters, then it's a * valid NUL; if not, then we've hit the end of the buffer. */ if ( yyg->yy_c_buf_p < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[yyg->yy_n_chars] ) /* This was really a NUL. */ *yyg->yy_c_buf_p = '\0'; else { /* need more input */ int offset = (int) (yyg->yy_c_buf_p - yyg->yytext_ptr); ++yyg->yy_c_buf_p; switch ( yy_get_next_buffer( yyscanner ) ) { case EOB_ACT_LAST_MATCH: /* This happens because yy_g_n_b() * sees that we've accumulated a * token and flags that we need to * try matching the token before * proceeding. But for input(), * there's no matching to consider. * So convert the EOB_ACT_LAST_MATCH * to EOB_ACT_END_OF_FILE. */ /* Reset buffer status. */ yyrestart( yyin , yyscanner); /*FALLTHROUGH*/ case EOB_ACT_END_OF_FILE: { if ( yywrap( yyscanner ) ) return 0; if ( ! yyg->yy_did_buffer_switch_on_eof ) YY_NEW_FILE; #ifdef __cplusplus return yyinput(yyscanner); #else return input(yyscanner); #endif } case EOB_ACT_CONTINUE_SCAN: yyg->yy_c_buf_p = yyg->yytext_ptr + offset; break; } } } c = *(unsigned char *) yyg->yy_c_buf_p; /* cast for 8-bit char's */ *yyg->yy_c_buf_p = '\0'; /* preserve yytext */ yyg->yy_hold_char = *++yyg->yy_c_buf_p; /* %% [19.0] update BOL and yylineno */ return c; } /* %if-c-only */ #endif /* ifndef YY_NO_INPUT */ /* %endif */ /** Immediately switch to a different input stream. * @param input_file A readable stream. * @param yyscanner The scanner object. * @note This function does not reset the start condition to @c INITIAL . */ /* %if-c-only */ void yyrestart (FILE * input_file , yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( ! YY_CURRENT_BUFFER ){ yyensure_buffer_stack (yyscanner); YY_CURRENT_BUFFER_LVALUE = yy_create_buffer( yyin, YY_BUF_SIZE , yyscanner); } yy_init_buffer( YY_CURRENT_BUFFER, input_file , yyscanner); yy_load_buffer_state( yyscanner ); } /* %if-c++-only */ /* %endif */ /** Switch to a different input buffer. * @param new_buffer The new input buffer. * @param yyscanner The scanner object. */ /* %if-c-only */ void yy_switch_to_buffer (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* TODO. We should be able to replace this entire function body * with * yypop_buffer_state(); * yypush_buffer_state(new_buffer); */ yyensure_buffer_stack (yyscanner); if ( YY_CURRENT_BUFFER == new_buffer ) return; if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } YY_CURRENT_BUFFER_LVALUE = new_buffer; yy_load_buffer_state( yyscanner ); /* We don't actually know whether we did this switch during * EOF (yywrap()) processing, but the only time this flag * is looked at is after yywrap() is called, so it's safe * to go ahead and always set it. */ yyg->yy_did_buffer_switch_on_eof = 1; } /* %if-c-only */ static void yy_load_buffer_state (yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyg->yy_n_chars = YY_CURRENT_BUFFER_LVALUE->yy_n_chars; yyg->yytext_ptr = yyg->yy_c_buf_p = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos; /* %if-c-only */ yyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file; /* %endif */ /* %if-c++-only */ /* %endif */ yyg->yy_hold_char = *yyg->yy_c_buf_p; } /** Allocate and initialize an input buffer state. * @param file A readable stream. * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE. * @param yyscanner The scanner object. * @return the allocated buffer state. */ /* %if-c-only */ YY_BUFFER_STATE yy_create_buffer (FILE * file, int size , yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { YY_BUFFER_STATE b; b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_buf_size = size; /* yy_ch_buf has to be 2 characters longer than the size given because * we need to put in 2 end-of-buffer characters. */ b->yy_ch_buf = (char *) yyalloc( (yy_size_t) (b->yy_buf_size + 2) , yyscanner ); if ( ! b->yy_ch_buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" ); b->yy_is_our_buffer = 1; yy_init_buffer( b, file , yyscanner); return b; } /* %if-c++-only */ /* %endif */ /** Destroy the buffer. * @param b a buffer created with yy_create_buffer() * @param yyscanner The scanner object. */ /* %if-c-only */ void yy_delete_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( ! b ) return; if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0; if ( b->yy_is_our_buffer ) yyfree( (void *) b->yy_ch_buf , yyscanner ); yyfree( (void *) b , yyscanner ); } /* Initializes or reinitializes a buffer. * This function is sometimes called more than once on the same buffer, * such as during a yyrestart() or at EOF. */ /* %if-c-only */ static void yy_init_buffer (YY_BUFFER_STATE b, FILE * file , yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { int oerrno = errno; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_flush_buffer( b , yyscanner); /* %if-c-only */ b->yy_input_file = file; /* %endif */ /* %if-c++-only */ /* %endif */ b->yy_fill_buffer = 1; /* If b is the current buffer, then yy_init_buffer was _probably_ * called from yyrestart() or through yy_get_next_buffer. * In that case, we don't want to reset the lineno or column. */ if (b != YY_CURRENT_BUFFER){ b->yy_bs_lineno = 1; b->yy_bs_column = 0; } /* %if-c-only */ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0; /* %endif */ /* %if-c++-only */ /* %endif */ errno = oerrno; } /** Discard all buffered characters. On the next scan, YY_INPUT will be called. * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER. * @param yyscanner The scanner object. */ /* %if-c-only */ void yy_flush_buffer (YY_BUFFER_STATE b , yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if ( ! b ) return; b->yy_n_chars = 0; /* We always need two end-of-buffer characters. The first causes * a transition to the end-of-buffer state. The second causes * a jam in that state. */ b->yy_ch_buf[0] = YY_END_OF_BUFFER_CHAR; b->yy_ch_buf[1] = YY_END_OF_BUFFER_CHAR; b->yy_buf_pos = &b->yy_ch_buf[0]; b->yy_at_bol = 1; b->yy_buffer_status = YY_BUFFER_NEW; if ( b == YY_CURRENT_BUFFER ) yy_load_buffer_state( yyscanner ); } /* %if-c-or-c++ */ /** Pushes the new state onto the stack. The new state becomes * the current state. This function will allocate the stack * if necessary. * @param new_buffer The new state. * @param yyscanner The scanner object. */ /* %if-c-only */ void yypush_buffer_state (YY_BUFFER_STATE new_buffer , yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (new_buffer == NULL) return; yyensure_buffer_stack(yyscanner); /* This block is copied from yy_switch_to_buffer. */ if ( YY_CURRENT_BUFFER ) { /* Flush out information for old buffer. */ *yyg->yy_c_buf_p = yyg->yy_hold_char; YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = yyg->yy_c_buf_p; YY_CURRENT_BUFFER_LVALUE->yy_n_chars = yyg->yy_n_chars; } /* Only push if top exists. Otherwise, replace top. */ if (YY_CURRENT_BUFFER) yyg->yy_buffer_stack_top++; YY_CURRENT_BUFFER_LVALUE = new_buffer; /* copied from yy_switch_to_buffer. */ yy_load_buffer_state( yyscanner ); yyg->yy_did_buffer_switch_on_eof = 1; } /* %endif */ /* %if-c-or-c++ */ /** Removes and deletes the top of the stack, if present. * The next element becomes the new top. * @param yyscanner The scanner object. */ /* %if-c-only */ void yypop_buffer_state (yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (!YY_CURRENT_BUFFER) return; yy_delete_buffer(YY_CURRENT_BUFFER , yyscanner); YY_CURRENT_BUFFER_LVALUE = NULL; if (yyg->yy_buffer_stack_top > 0) --yyg->yy_buffer_stack_top; if (YY_CURRENT_BUFFER) { yy_load_buffer_state( yyscanner ); yyg->yy_did_buffer_switch_on_eof = 1; } } /* %endif */ /* %if-c-or-c++ */ /* Allocates the stack if it does not exist. * Guarantees space for at least one push. */ /* %if-c-only */ static void yyensure_buffer_stack (yyscan_t yyscanner) /* %endif */ /* %if-c++-only */ /* %endif */ { yy_size_t num_to_alloc; struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (!yyg->yy_buffer_stack) { /* First allocation is just for 2 elements, since we don't know if this * scanner will even need a stack. We use 2 instead of 1 to avoid an * immediate realloc on the next call. */ num_to_alloc = 1; /* After all that talk, this was set to 1 anyways... */ yyg->yy_buffer_stack = (struct yy_buffer_state**)yyalloc (num_to_alloc * sizeof(struct yy_buffer_state*) , yyscanner); if ( ! yyg->yy_buffer_stack ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); memset(yyg->yy_buffer_stack, 0, num_to_alloc * sizeof(struct yy_buffer_state*)); yyg->yy_buffer_stack_max = num_to_alloc; yyg->yy_buffer_stack_top = 0; return; } if (yyg->yy_buffer_stack_top >= (yyg->yy_buffer_stack_max) - 1){ /* Increase the buffer to prepare for a possible push. */ yy_size_t grow_size = 8 /* arbitrary grow size */; num_to_alloc = yyg->yy_buffer_stack_max + grow_size; yyg->yy_buffer_stack = (struct yy_buffer_state**)yyrealloc (yyg->yy_buffer_stack, num_to_alloc * sizeof(struct yy_buffer_state*) , yyscanner); if ( ! yyg->yy_buffer_stack ) YY_FATAL_ERROR( "out of dynamic memory in yyensure_buffer_stack()" ); /* zero only the new slots.*/ memset(yyg->yy_buffer_stack + yyg->yy_buffer_stack_max, 0, grow_size * sizeof(struct yy_buffer_state*)); yyg->yy_buffer_stack_max = num_to_alloc; } } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan directly from a user-specified character buffer. * @param base the character buffer * @param size the size in bytes of the character buffer * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_buffer (char * base, yy_size_t size , yyscan_t yyscanner) { YY_BUFFER_STATE b; if ( size < 2 || base[size-2] != YY_END_OF_BUFFER_CHAR || base[size-1] != YY_END_OF_BUFFER_CHAR ) /* They forgot to leave room for the EOB's. */ return NULL; b = (YY_BUFFER_STATE) yyalloc( sizeof( struct yy_buffer_state ) , yyscanner ); if ( ! b ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" ); b->yy_buf_size = (int) (size - 2); /* "- 2" to take care of EOB's */ b->yy_buf_pos = b->yy_ch_buf = base; b->yy_is_our_buffer = 0; b->yy_input_file = NULL; b->yy_n_chars = b->yy_buf_size; b->yy_is_interactive = 0; b->yy_at_bol = 1; b->yy_fill_buffer = 0; b->yy_buffer_status = YY_BUFFER_NEW; yy_switch_to_buffer( b , yyscanner ); return b; } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan a string. The next call to yylex() will * scan from a @e copy of @a str. * @param yystr a NUL-terminated string to scan * @param yyscanner The scanner object. * @return the newly allocated buffer state object. * @note If you want to scan bytes that may contain NUL values, then use * yy_scan_bytes() instead. */ YY_BUFFER_STATE yy_scan_string (const char * yystr , yyscan_t yyscanner) { return yy_scan_bytes( yystr, (int) strlen(yystr) , yyscanner); } /* %endif */ /* %if-c-only */ /** Setup the input buffer state to scan the given bytes. The next call to yylex() will * scan from a @e copy of @a bytes. * @param yybytes the byte buffer to scan * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes. * @param yyscanner The scanner object. * @return the newly allocated buffer state object. */ YY_BUFFER_STATE yy_scan_bytes (const char * yybytes, int _yybytes_len , yyscan_t yyscanner) { YY_BUFFER_STATE b; char *buf; yy_size_t n; int i; /* Get memory for full buffer, including space for trailing EOB's. */ n = (yy_size_t) (_yybytes_len + 2); buf = (char *) yyalloc( n , yyscanner ); if ( ! buf ) YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" ); for ( i = 0; i < _yybytes_len; ++i ) buf[i] = yybytes[i]; buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR; b = yy_scan_buffer( buf, n , yyscanner); if ( ! b ) YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" ); /* It's okay to grow etc. this buffer, and we should throw it * away when we're done. */ b->yy_is_our_buffer = 1; return b; } /* %endif */ #ifndef YY_EXIT_FAILURE #define YY_EXIT_FAILURE 2 #endif /* %if-c-only */ static void yynoreturn yy_fatal_error (const char* msg , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; (void)yyg; fprintf( stderr, "%s\n", msg ); exit( YY_EXIT_FAILURE ); } /* %endif */ /* %if-c++-only */ /* %endif */ /* Redefine yyless() so it works in section 3 code. */ #undef yyless #define yyless(n) \ do \ { \ /* Undo effects of setting up yytext. */ \ int yyless_macro_arg = (n); \ YY_LESS_LINENO(yyless_macro_arg);\ yytext[yyleng] = yyg->yy_hold_char; \ yyg->yy_c_buf_p = yytext + yyless_macro_arg; \ yyg->yy_hold_char = *yyg->yy_c_buf_p; \ *yyg->yy_c_buf_p = '\0'; \ yyleng = yyless_macro_arg; \ } \ while ( 0 ) /* Accessor methods (get/set functions) to struct members. */ /* %if-c-only */ /* %if-reentrant */ /** Get the user-defined data for this scanner. * @param yyscanner The scanner object. */ YY_EXTRA_TYPE yyget_extra (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyextra; } /* %endif */ /** Get the current line number. * @param yyscanner The scanner object. */ int yyget_lineno (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (! YY_CURRENT_BUFFER) return 0; return yylineno; } /** Get the current column number. * @param yyscanner The scanner object. */ int yyget_column (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; if (! YY_CURRENT_BUFFER) return 0; return yycolumn; } /** Get the input stream. * @param yyscanner The scanner object. */ FILE *yyget_in (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyin; } /** Get the output stream. * @param yyscanner The scanner object. */ FILE *yyget_out (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyout; } /** Get the length of the current token. * @param yyscanner The scanner object. */ int yyget_leng (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yyleng; } /** Get the current token. * @param yyscanner The scanner object. */ char *yyget_text (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yytext; } /* %if-reentrant */ /** Set the user-defined data. This data is never touched by the scanner. * @param user_defined The data to be associated with this scanner. * @param yyscanner The scanner object. */ void yyset_extra (YY_EXTRA_TYPE user_defined , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyextra = user_defined ; } /* %endif */ /** Set the current line number. * @param _line_number line number * @param yyscanner The scanner object. */ void yyset_lineno (int _line_number , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* lineno is only valid if an input buffer exists. */ if (! YY_CURRENT_BUFFER ) YY_FATAL_ERROR( "yyset_lineno called with no buffer" ); yylineno = _line_number; } /** Set the current column. * @param _column_no column number * @param yyscanner The scanner object. */ void yyset_column (int _column_no , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* column is only valid if an input buffer exists. */ if (! YY_CURRENT_BUFFER ) YY_FATAL_ERROR( "yyset_column called with no buffer" ); yycolumn = _column_no; } /** Set the input stream. This does not discard the current * input buffer. * @param _in_str A readable stream. * @param yyscanner The scanner object. * @see yy_switch_to_buffer */ void yyset_in (FILE * _in_str , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyin = _in_str ; } void yyset_out (FILE * _out_str , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yyout = _out_str ; } int yyget_debug (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yy_flex_debug; } void yyset_debug (int _bdebug , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yy_flex_debug = _bdebug ; } /* %endif */ /* %if-reentrant */ /* Accessor methods for yylval and yylloc */ /* %if-bison-bridge */ YYSTYPE * yyget_lval (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; return yylval; } void yyset_lval (YYSTYPE * yylval_param , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; yylval = yylval_param; } /* %endif */ /* User-visible API */ /* yylex_init is special because it creates the scanner itself, so it is * the ONLY reentrant function that doesn't take the scanner as the last argument. * That's why we explicitly handle the declaration, instead of using our macros. */ int yylex_init(yyscan_t* ptr_yy_globals) { if (ptr_yy_globals == NULL){ errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), NULL ); if (*ptr_yy_globals == NULL){ errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); return yy_init_globals ( *ptr_yy_globals ); } /* yylex_init_extra has the same functionality as yylex_init, but follows the * convention of taking the scanner as the last argument. Note however, that * this is a *pointer* to a scanner, as it will be allocated by this call (and * is the reason, too, why this function also must handle its own declaration). * The user defined value in the first argument will be available to yyalloc in * the yyextra field. */ int yylex_init_extra( YY_EXTRA_TYPE yy_user_defined, yyscan_t* ptr_yy_globals ) { struct yyguts_t dummy_yyguts; yyset_extra (yy_user_defined, &dummy_yyguts); if (ptr_yy_globals == NULL){ errno = EINVAL; return 1; } *ptr_yy_globals = (yyscan_t) yyalloc ( sizeof( struct yyguts_t ), &dummy_yyguts ); if (*ptr_yy_globals == NULL){ errno = ENOMEM; return 1; } /* By setting to 0xAA, we expose bugs in yy_init_globals. Leave at 0x00 for releases. */ memset(*ptr_yy_globals,0x00,sizeof(struct yyguts_t)); yyset_extra (yy_user_defined, *ptr_yy_globals); return yy_init_globals ( *ptr_yy_globals ); } /* %endif if-c-only */ /* %if-c-only */ static int yy_init_globals (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* Initialization is the same as for the non-reentrant scanner. * This function is called from yylex_destroy(), so don't allocate here. */ yyg->yy_buffer_stack = NULL; yyg->yy_buffer_stack_top = 0; yyg->yy_buffer_stack_max = 0; yyg->yy_c_buf_p = NULL; yyg->yy_init = 0; yyg->yy_start = 0; yyg->yy_start_stack_ptr = 0; yyg->yy_start_stack_depth = 0; yyg->yy_start_stack = NULL; /* Defined in main.c */ #ifdef YY_STDINIT yyin = stdin; yyout = stdout; #else yyin = NULL; yyout = NULL; #endif /* For future reference: Set errno on error, since we are called by * yylex_init() */ return 0; } /* %endif */ /* %if-c-only SNIP! this currently causes conflicts with the c++ scanner */ /* yylex_destroy is for both reentrant and non-reentrant scanners. */ int yylex_destroy (yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; /* Pop the buffer stack, destroying each element. */ while(YY_CURRENT_BUFFER){ yy_delete_buffer( YY_CURRENT_BUFFER , yyscanner ); YY_CURRENT_BUFFER_LVALUE = NULL; yypop_buffer_state(yyscanner); } /* Destroy the stack itself. */ yyfree(yyg->yy_buffer_stack , yyscanner); yyg->yy_buffer_stack = NULL; /* Destroy the start condition stack. */ yyfree( yyg->yy_start_stack , yyscanner ); yyg->yy_start_stack = NULL; /* Reset the globals. This is important in a non-reentrant scanner so the next time * yylex() is called, initialization will occur. */ yy_init_globals( yyscanner); /* %if-reentrant */ /* Destroy the main struct (reentrant only). */ yyfree ( yyscanner , yyscanner ); yyscanner = NULL; /* %endif */ return 0; } /* %endif */ /* * Internal utility routines. */ #ifndef yytext_ptr static void yy_flex_strncpy (char* s1, const char * s2, int n , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; (void)yyg; int i; for ( i = 0; i < n; ++i ) s1[i] = s2[i]; } #endif #ifdef YY_NEED_STRLEN static int yy_flex_strlen (const char * s , yyscan_t yyscanner) { int n; for ( n = 0; s[n]; ++n ) ; return n; } #endif void *yyalloc (yy_size_t size , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; (void)yyg; return malloc(size); } void *yyrealloc (void * ptr, yy_size_t size , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; (void)yyg; /* The cast to (char *) in the following accommodates both * implementations that use char* generic pointers, and those * that use void* generic pointers. It works with the latter * because both ANSI C and C++ allow castless assignment from * any pointer type to void*, and deal with argument conversions * as though doing an assignment. */ return realloc(ptr, size); } void yyfree (void * ptr , yyscan_t yyscanner) { struct yyguts_t * yyg = (struct yyguts_t*)yyscanner; (void)yyg; free( (char *) ptr ); /* see yyrealloc() for (char *) cast */ } /* %if-tables-serialization definitions */ /* %define-yytables The name for this specific scanner's tables. */ #define YYTABLES_NAME "yytables" /* %endif */ /* %ok-for-header */ #line 167 "../../src/rec-sex-lex.l" char * rec_sex_lex_extract_name (char *str) { size_t size; char *res; char *p; p = str; while ((*p != '[') && (*p != '.') && (*p != 0)) p++; size = p - str; res = malloc (size + 1); memcpy (res, str, size); res[size] = 0; return res; } char * rec_sex_lex_extract_subname (char *str) { char *p; /* If there is not a subname denoted in STR then this function returns NULL. */ p = str; while ((*p != '.') && (*p != '\0')) p++; if (*p == '\0') /* There is not a second name. */ return NULL; p++; /* Skip the dot separator. */ return rec_sex_lex_extract_name (p); } bool rec_sex_lex_extract_index (char *str, int *num) { bool res; char *p; char aux[100]; int aux_size; /* Note that this function assumes syntax correctness in STR if a '[' is found. */ aux_size = 0; p = str; while ((*p != 0) && (*p != '[')) p++; if (*p == 0) res = false; else { p++; /* Pass the [. */ while (*p != ']') { aux[aux_size++] = *p; p++; } aux[aux_size] = 0; if (!rec_atoi (aux, num)) res = false; res = true; } return res; } ��������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-rset.c�������������������������������������������������������������������������0000644�0000000�0000000�00000131361�14226563465�012605� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-rset.c - Record Sets. */ /* Copyright (C) 2009, 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, * 2018, 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <stdint.h> #include <errno.h> #include <locale.h> #include <string.h> #include <parse-datetime.h> #if defined UUID_TYPE # include <uuid/uuid.h> #endif #include <rec.h> #include <rec-utils.h> /* Record Set Data Structures. * * A record set is a set of zero or more non-special records * intermixed with comments, maybe preceded by a record descriptor. */ /* The fprops structure contains useful properties associated with fields. Those properties are usually extracted from the record descriptor of the rset. */ struct rec_rset_fprops_s { char *fname; bool key_p; /* Primary key */ bool auto_p; /* Auto-field. */ #if defined REC_CRYPT_SUPPORT bool confidential_p; /* Confidential field. */ #endif rec_type_t type; /* The field has an anonymous type. */ char *type_name; /* The field has a type in the types registry. */ struct rec_rset_fprops_s *next; }; typedef struct rec_rset_fprops_s *rec_rset_fprops_t; /* The rec_rset_s structure contains the data associated with a record set. */ struct rec_rset_s { rec_record_t descriptor; size_t descriptor_pos; /* Position of the descriptor into the record set. Some comments can appear before the record descriptor in the rec file, so we need to track it in order to write back the record properly. */ /* Field properties. */ rec_rset_fprops_t field_props; /* Type registry. */ rec_type_reg_t type_reg; /* Simple fex containing the fields to use for ordering the records of this record descriptor. */ rec_fex_t order_by_fields; /* Size constraints. */ size_t min_size; size_t max_size; /* Sex-driven constraints. */ rec_sex_t *constraints; size_t num_constraints; /* Storage for records and comments. */ int record_type; int comment_type; rec_mset_t mset; }; /* The following macro is used by some functions to reduce verbosity. */ #define FNAME(id) rec_std_field_name ((id)) static void rec_rset_init (rec_rset_t rset) { /* Initialize the rset structure so it can be safely passed to rec_rset_destroy even if its contents are not completely initialized with real values. */ memset (rset, 0 /* NULL */, sizeof (struct rec_rset_s)); } static void rec_rset_record_disp_fn (void *data) { rec_record_t record = (rec_record_t) data; rec_record_destroy (record); } static bool rec_rset_record_equal_fn (void *data1, void *data2) { return (data1 == data2); /* return rec_record_equal_p ((rec_record_t) data1, (rec_record_t) data2); */ } static void * rec_rset_record_dup_fn (void *data) { rec_record_t record = (rec_record_t) data; rec_record_t new = rec_record_dup (record); return (void *) new; } static int rec_rset_compare_typed_records (rec_rset_t rset, rec_record_t record1, rec_record_t record2, rec_fex_t fields) { int result = 0; size_t i = 0; size_t num_fields = rec_fex_size (fields); for (i = 0; i < num_fields; i++) { rec_fex_elem_t elem = rec_fex_get (fields, i); const char *field_name = rec_fex_elem_field_name (elem); rec_field_t field1 = rec_record_get_field_by_name (record1, field_name, 0); rec_field_t field2 = rec_record_get_field_by_name (record2, field_name, 0); /* If any of the fields is not present in some of the records then that record is considered to be smaller than the record featuring the other one. */ if (field1 && !field2) { result = 1; /* field1 > field2 */ break; } else if (!field1 && field2) { result = -1; /* field1 < field2 */ break; } else if (!field1 && !field2) { result = -1; /* field1 < field2 */ break; } /* A field with such a name exists in both records. Compare the field typed values. */ result = rec_type_values_cmp (rec_rset_get_field_type (rset, field_name), rec_field_value (field1), rec_field_value (field2)); if (result != 0) /* Either (a1, a2, ...) < (b1, b2, ...) or (a1, a2, ...) > (b1, b2, ...) */ break; } return result; } static int rec_rset_record_compare_fn (void *data1, void *data2, int type2) { /* data1 is a record. data2 can be either a record or a comment. order_by_field can't be NULL, because this callback is invoked only if rec_mset_add_sorted is used to add an element to the list. The following rules apply here: 1. If the fields in order_by_fields are not in both record1 and record2, then data1 < data2. 2. Else, perform a lexicographic comparison, i.e. (a1, a2, ...) < (b1, b2, ...) IFF a1 < b1 OR (a1 = b2 AND a2 < b2) OR ... Note that record1 will always be a regular record. Never a descriptor. */ rec_rset_t rset = NULL; rec_record_t record1 = NULL; rec_record_t record2 = NULL; int type_comparison = 0; /* If elem2 is a comment then elem1 > elem2. */ if (type2 == MSET_COMMENT) return 1; /* Get the records and the containing rset. */ record1 = (rec_record_t) data1; record2 = (rec_record_t) data2; rset = (rec_rset_t) rec_record_container (record1); /* Perform a lexicographic comparison of the order_by_fields in both registers. */ type_comparison = rec_rset_compare_typed_records (rset, record1, record2, rset->order_by_fields); /* If both records are equal, return -1 instead of 0 in order to maintain the relative ordering between equal records. */ if (type_comparison == 0) type_comparison = -1; return type_comparison; } static void rec_rset_comment_disp_fn (void *data) { rec_comment_t comment = (rec_comment_t) data; rec_comment_destroy (comment); } static bool rec_rset_comment_equal_fn (void *data1, void *data2) { return (data1 == data2); /* return rec_comment_equal_p ((rec_comment_t) data1, (rec_comment_t) data2);*/ } static void * rec_rset_comment_dup_fn (void *data) { rec_comment_t comment = (rec_comment_t) data; rec_comment_t new = rec_comment_dup (comment); return (void *) new; } static int rec_rset_comment_compare_fn (void *data1, void *data2, int type2) { /* data1 is a comment, and data2 can be either a comment or a record. In any case, data1 < data2. */ return -1; } static void rec_rset_update_sex_constraints (rec_rset_t rset) { /* Reset the existing constraints. */ { size_t i = 0; for (i = 0; i < rset->num_constraints; i++) rec_sex_destroy (rset->constraints[i]); rset->num_constraints = 0; } /* If there is not a record descriptor in the record set then simply return. */ if (!rset->descriptor) return; /* Allocate memory for the constraints memory. In case of not-enough-memory simply return. */ { size_t num_constraints = rec_record_get_num_fields_by_name (rset->descriptor, FNAME(REC_FIELD_CONSTRAINT)); rset->constraints = malloc (num_constraints * sizeof(rec_sex_t)); if (!rset->constraints) return; } /* Scan the record descriptor for %constraint: directives, and build the constraints. Not well formed constraint entries, i.e. entries not containing valid sexes, are simply ignored. */ { rec_field_t field = NULL; rec_mset_iterator_t iter; iter = rec_mset_iterator (rec_record_mset (rset->descriptor)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **)&field, NULL)) { const char *field_name = rec_field_name (field); const char *field_value = rec_field_value (field); if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_CONSTRAINT))) { rec_sex_t sex = rec_sex_new (false); if (!sex) return; if (rec_sex_compile (sex, field_value)) rset->constraints[rset->num_constraints++] = sex; else rec_sex_destroy (sex); } } rec_mset_iterator_free (&iter); } } static void rec_rset_update_size_constraints (rec_rset_t rset) { rec_field_t field; enum rec_size_condition_e condition; size_t size = 0; /* Reset the constraints. */ rset->min_size = 0; rset->max_size = SIZE_MAX; /* Scan the record descriptor for %size: directives, and build the new list. */ if (rset->descriptor) { field = rec_record_get_field_by_name (rset->descriptor, FNAME(REC_FIELD_SIZE), 0); if (field && rec_match (rec_field_value (field), REC_INT_SIZE_RE)) { /* Extract 'min' and 'max' and update the constraints in the rset. */ condition = rec_extract_size_condition (rec_field_value (field)); size = rec_extract_size (rec_field_value (field)); /* Set min_size and max_size depending on the condition. */ switch (condition) { case SIZE_COND_E: rset->min_size = size; rset->max_size = size; break; case SIZE_COND_L: rset->max_size = size - 1; break; case SIZE_COND_LE: rset->max_size = size; break; case SIZE_COND_G: rset->min_size = size + 1; break; case SIZE_COND_GE: rset->min_size = size; break; } } } } static bool rec_rset_type_field_p (const char *str) { const char *p = str; /* Check the fex */ rec_skip_blanks (&p); if (!rec_parse_regexp (&p, "^" REC_FNAME_LIST_CS_RE, NULL)) return false; rec_skip_blanks (&p); /* Check the type description, or the name of a type. */ return (rec_type_descr_p (p) || rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE "[ \t\n]*$", NULL)); } static rec_fex_t rec_rset_type_field_fex (const char *str) { rec_fex_t fex = NULL; const char *p; char *name; p = str; rec_skip_blanks (&p); if (rec_parse_regexp (&p, "^" REC_FNAME_LIST_CS_RE, &name)) { fex = rec_fex_new (name, REC_FEX_CSV); free (name); } return fex; } static char* rec_rset_type_field_type (const char *str) { char *result = NULL; const char *p; if (rec_rset_type_field_p (str)) { p = str; rec_skip_blanks (&p); rec_parse_regexp (&p, "^" REC_FNAME_LIST_CS_RE, NULL); rec_skip_blanks (&p); /* Return the rest of the string. */ result = strdup (p); } return result; } static rec_rset_fprops_t rec_rset_get_props (rec_rset_t rset, const char *fname, bool create_p) { rec_rset_fprops_t props = NULL; props = rset->field_props; while (props) { if (rec_field_name_equal_p (fname, props->fname)) break; props = props->next; } if (!props && create_p) { /* Create a new properties structure for this field name and initialize it. */ props = malloc (sizeof (struct rec_rset_fprops_s)); if (props) { props->fname = strdup (fname); props->auto_p = false; props->key_p = false; #if defined REC_CRYPT_SUPPORT props->confidential_p = false; #endif props->type = NULL; props->type_name = NULL; /* Prepend it to the field properties list. */ props->next = rset->field_props; rset->field_props = props; } } return props; } static void rec_rset_update_field_props (rec_rset_t rset) { rec_rset_fprops_t props = NULL; #if defined REC_CRYPT_SUPPORT const char *confidential_field_name; #endif char *type_name = NULL; /* Reset the field properties. */ props = rset->field_props; while (props) { props->key_p = false; props->auto_p = false; if (props->type) { rec_type_destroy (props->type); props->type = NULL; } props = props->next; } if (rset->descriptor) { /* Pass 1: scan the record descriptor for % directives, and update the fields properties accordingly. */ rec_field_t field; rec_mset_iterator_t iter; iter = rec_mset_iterator (rec_record_mset (rset->descriptor)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &field, NULL)) { const char *field_name = rec_field_name (field); const char *field_value = rec_field_value (field); /* Update field types. Only valid %type: descriptors are considered. Invalid descriptors are ignored. */ if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_TYPE)) && rec_rset_type_field_p (field_value)) { size_t i; rec_fex_t fex = rec_rset_type_field_fex (field_value); for (i = 0; i < rec_fex_size (fex); i++) { char *field_type = rec_rset_type_field_type (field_value); rec_type_t type = rec_type_new (field_type); if (!type) { /* Set field_type as a field property. Note that if the field is already associated with an anonymous type, or a type name, they are replaced. */ const char *p = field_type; rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE, &type_name); props = rec_rset_get_props (rset, rec_fex_elem_field_name (rec_fex_get (fex, i)), true); if (props->type) { rec_type_destroy (props->type); props->type = NULL; } free (props->type_name); props->type_name = type_name; } else { /* Set the type as a field property. Note that if the field is already associated with an anonymous type, or a type name, they are replaced. */ props = rec_rset_get_props (rset, rec_fex_elem_field_name (rec_fex_get (fex, i)), true); if (props->type) { rec_type_destroy (props->type); } free (props->type_name); props->type_name = NULL; props->type = type; } free (field_type); } rec_fex_destroy (fex); } /* Update the key field. */ if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_KEY))) { /* %key: fields containing incorrect data are ignored. */ const char *field_value = rec_field_value (field); char *type_name = NULL; rec_skip_blanks (&field_value); rec_parse_regexp (&field_value, "^" REC_RECORD_TYPE_RE, &type_name); props = rec_rset_get_props (rset, type_name, true); props->key_p = true; free (type_name); } /* Update auto fields. */ if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_AUTO))) { /* %auto: fields containing incorrect data are ignored. */ rec_fex_t fex = rec_fex_new (rec_field_value (field), REC_FEX_SIMPLE); if (fex) { size_t i; for (i = 0; i < rec_fex_size (fex); i++) { const char *auto_field_name = rec_fex_elem_field_name (rec_fex_get (fex, i)); props = rec_rset_get_props (rset, auto_field_name, true); props->auto_p = true; } } } /* Update sort fields. The last field takes precedence. */ if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_SORT))) { /* Parse the simple fex in the field value. Invalid entries are just ignored. */ const char *field_value = rec_field_value (field); rec_fex_t fex = rec_fex_new (field_value, REC_FEX_SIMPLE); if (fex) { rec_fex_destroy (rset->order_by_fields); rset->order_by_fields = fex; } } #if defined REC_CRYPT_SUPPORT /* Update confidential fields. */ if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_CONFIDENTIAL))) { /* Parse the field names in the field value. Ignore invalid entries. */ rec_fex_t fex = rec_fex_new (rec_field_value (field), REC_FEX_SIMPLE); if (fex) { size_t i; for (i = 0; i < rec_fex_size (fex); i++) { confidential_field_name = rec_fex_elem_field_name (rec_fex_get (fex, i)); props = rec_rset_get_props (rset, confidential_field_name, true); props->confidential_p = true; } } } #endif /* REC_CRYPT_SUPPORT */ } rec_mset_iterator_free (&iter); } /* Pass 2: scan the fields having properties on the record set. */ props = rset->field_props; while (props) { /* Auto fields not having an explicit type are implicitly typed as integers. */ if (props->auto_p && !props->type && !props->type_name) props->type = rec_type_new ("int"); props = props->next; } } static void rec_rset_update_types (rec_rset_t rset) { rec_field_t field; rec_mset_iterator_t iter; const char *p, *q = NULL; rec_type_t type; char *type_name, *to_type = NULL; /* Scan the record descriptor for %typedef directives and update the types registry accordingly. */ if (rset->descriptor) { /* Purge the registry. */ rec_type_reg_destroy (rset->type_reg); rset->type_reg = rec_type_reg_new (); /* Iterate on the fields of the descriptor. */ iter = rec_mset_iterator (rec_record_mset (rset->descriptor)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) { const char *field_name = rec_field_name (field); const char *field_value = rec_field_value (field); if (rec_field_name_equal_p (field_name, FNAME(REC_FIELD_TYPEDEF))) { p = field_value; rec_skip_blanks (&p); /* Get the name of the type. */ if (rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE, &type_name)) { /* Get the type. */ type = rec_type_new (p); if (type) { /* Set the name of the type. */ rec_type_set_name (type, type_name); /* Create and insert the type in the type registry. */ rec_type_reg_add (rset->type_reg, type); } else { /* This could be a synonym. Try to parse a type name and, if the operation succeeds, insert the synonym in the registry. */ rec_skip_blanks (&p); q = p; if (rec_parse_regexp (&q, "^" REC_TYPE_NAME_RE "[ \t\n]*", NULL)) { rec_parse_regexp (&p, "^" REC_TYPE_NAME_RE, &to_type); rec_type_reg_add_synonym (rset->type_reg, type_name, to_type); } } free (type_name); } } } rec_mset_iterator_free (&iter); } } static bool rec_rset_add_auto_field_int (rec_rset_t rset, const char *field_name, rec_record_t record) { rec_mset_iterator_t iter; rec_record_t rec; rec_field_t field; size_t num_fields, i; int auto_value, field_value; char *end; char *auto_value_str; /* Find the auto value. */ auto_value = 0; iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &rec, NULL)) { num_fields = rec_record_get_num_fields_by_name (rec, field_name); for (i = 0; i < num_fields; i++) { field = rec_record_get_field_by_name (rec, field_name, i); /* Ignore fields that can't be converted to integer values. */ errno = 0; field_value = strtol (rec_field_value (field), &end, 10); if ((errno == 0) && (*end == '\0')) { if (auto_value <= field_value) auto_value = field_value + 1; } } } rec_mset_iterator_free (&iter); /* Create and insert the auto field. */ if (asprintf (&auto_value_str, "%d", auto_value) != -1) { field = rec_field_new (field_name, auto_value_str); if (!field) { /* Out of memory. */ free (auto_value_str); return false; } if (!rec_mset_insert_at (rec_record_mset (record), MSET_FIELD, (void *) field, 0)) { /* Out of memory. */ free (auto_value_str); return false; } free (auto_value_str); } return true; } static bool rec_rset_add_auto_field_date (rec_rset_t rset, const char *field_name, rec_record_t record) { rec_field_t auto_field; time_t t; char outstr[200]; struct tm *tmp; t = time (NULL); tmp = localtime (&t); setlocale (LC_TIME, "C"); /* We want english dates that can be parsed with parse_datetime */ strftime (outstr, sizeof(outstr), "%a, %d %b %Y %T %z", tmp); setlocale (LC_TIME, ""); /* And restore the locale from the environment. */ auto_field = rec_field_new (field_name, outstr); if (!auto_field) /* Out of memory. */ return false; if (!rec_mset_insert_at (rec_record_mset (record), MSET_FIELD, (void *) auto_field, 0)) /* Out of memory. */ return false; return true; } #if defined UUID_TYPE static bool rec_rset_add_auto_field_uuid (rec_rset_t rset, const char *field_name, rec_record_t record) { rec_field_t auto_field; uuid_t uu; char uu_str[40]; /* Enough to hold any standard UUID. */ /* Generate a new time-based UUID using the libuuid library and use it for the value of the new auto field. */ uuid_generate_time (uu); uuid_unparse (uu, uu_str); auto_field = rec_field_new (field_name, uu_str); if (!auto_field) /* Out of memory. */ return false; if (!rec_mset_insert_at (rec_record_mset (record), MSET_FIELD, (void *) auto_field, 0)) /* Out of memory. */ return false; return true; } #endif /* UUID_TYPE */ static rec_record_t rec_rset_merge_records (rec_record_t to_record, rec_record_t from_record, rec_fex_t group_by_fields) { rec_mset_elem_t elem; void *data; rec_mset_iterator_t iter; iter = rec_mset_iterator (rec_record_mset (from_record)); while (rec_mset_iterator_next (&iter, MSET_ANY, (const void**) &data, &elem)) { if (rec_mset_elem_type (elem) == MSET_FIELD) { rec_field_t field = (rec_field_t) data; /* Don't add the field if it is in the list of group-by fields. */ if (rec_fex_member_p (group_by_fields, rec_field_name (field), -1, -1)) continue; /* Don't allow duplicated fields in the resulting record generated as a result of this operation. This is commented out because it fucks up the usage of aggregated functions in grouped-by record sets. */ /* if (rec_record_contains_field (to_record, rec_field_name (field), rec_field_value (field))) { continue; } */ /* Ok, add this field. */ if (!rec_mset_append (rec_record_mset (to_record), MSET_FIELD, (void *) rec_field_dup (field), MSET_ANY)) /* Out of memory. */ return NULL; } else { rec_comment_t comment = (rec_comment_t) data; rec_mset_append (rec_record_mset (to_record), MSET_COMMENT, (void *) rec_comment_dup (comment), MSET_ANY); } } rec_mset_iterator_free (&iter); return to_record; } rec_rset_t rec_rset_new (void) { rec_rset_t rset; rset = malloc (sizeof (struct rec_rset_s)); if (rset) { rec_rset_init (rset); /* Create the mset. */ rset->mset = rec_mset_new (); if (rset->mset) { /* No descriptor, initially. */ rset->descriptor = NULL; rset->descriptor_pos = 0; rset->min_size = 0; rset->max_size = SIZE_MAX; rset->constraints = NULL; rset->num_constraints = 0; /* Create an empty type registry. */ rset->type_reg = rec_type_reg_new (); if (!rset->type_reg) { /* Out of memory. */ rec_rset_destroy (rset); return NULL; } /* No field properties, initially. */ rset->field_props = NULL; /* No order by field, initially. */ rset->order_by_fields = NULL; /* register the types. See rec.h for the definition of MSET_COMMENT and MSET_RECORD. */ rset->record_type = rec_mset_register_type (rset->mset, "record", rec_rset_record_disp_fn, rec_rset_record_equal_fn, rec_rset_record_dup_fn, rec_rset_record_compare_fn); rset->comment_type = rec_mset_register_type (rset->mset, "comment", rec_rset_comment_disp_fn, rec_rset_comment_equal_fn, rec_rset_comment_dup_fn, rec_rset_comment_compare_fn); } else { /* Out of memory. */ rec_rset_destroy (rset); rset = NULL; } } return rset; } void rec_rset_destroy (rec_rset_t rset) { rec_rset_fprops_t props, aux = NULL; size_t i = 0; if (rset) { rec_record_destroy (rset->descriptor); rec_type_reg_destroy (rset->type_reg); for (i = 0; i < rset->num_constraints; i++) rec_sex_destroy (rset->constraints[i]); free (rset->constraints); props = rset->field_props; while (props) { aux = props; if (aux->type) rec_type_destroy (aux->type); free (aux->fname); free (aux->type_name); props = props->next; free (aux); } rec_fex_destroy (rset->order_by_fields); rec_mset_destroy (rset->mset); free (rset); } } rec_rset_t rec_rset_dup (rec_rset_t rset) { rec_rset_t new = NULL; new = malloc (sizeof (struct rec_rset_s)); if (new) { rec_rset_init (new); new->record_type = rset->record_type; new->comment_type = rset->comment_type; new->mset = NULL; new->min_size = rset->min_size; new->max_size = rset->max_size; /* XXX: make copies of the following structures. */ new->type_reg = NULL; new->field_props = NULL; new->constraints = NULL; new->num_constraints = 0; if (rset->order_by_fields) { new->order_by_fields = rec_fex_dup (rset->order_by_fields); if (!new->order_by_fields) { /* Out of memory. */ rec_rset_destroy (new); return NULL; } } } new->mset = rec_mset_dup (rset->mset); if (!new->mset) { /* Out of memory. */ rec_rset_destroy (new); return NULL; } return new; } rec_mset_t rec_rset_mset (rec_rset_t rset) { return rset->mset; } size_t rec_rset_num_elems (rec_rset_t rset) { return rec_mset_count (rset->mset, MSET_ANY); } size_t rec_rset_num_records (rec_rset_t rset) { return rec_mset_count (rset->mset, rset->record_type); } size_t rec_rset_num_comments (rec_rset_t rset) { return rec_mset_count (rset->mset, rset->comment_type); } rec_record_t rec_rset_descriptor (rec_rset_t rset) { return rset->descriptor; } void rec_rset_set_descriptor (rec_rset_t rset, rec_record_t record) { if (rset->descriptor) { rec_record_destroy (rset->descriptor); rset->descriptor = NULL; } rset->descriptor = record; /* Update the types registry and the auto fields. */ rec_rset_update_types (rset); rec_rset_update_field_props (rset); rec_rset_update_size_constraints (rset); rec_rset_update_sex_constraints (rset); } size_t rec_rset_descriptor_pos (rec_rset_t rset) { return rset->descriptor_pos; } void rec_rset_set_descriptor_pos (rec_rset_t rset, size_t position) { rset->descriptor_pos = position; } void rec_rset_set_type (rec_rset_t rset, const char *type) { rec_field_t rec_field; if (!type) /* This is a no-op for the default record set. */ return; if (!rset->descriptor) /* Create a record descriptor. */ rset->descriptor = rec_record_new (); rec_field = rec_record_get_field_by_name (rset->descriptor, FNAME(REC_FIELD_REC), 0); if (rec_field) rec_field_set_value (rec_field, type); else { rec_field = rec_field_new (FNAME(REC_FIELD_REC), type); rec_mset_append (rec_record_mset (rset->descriptor), MSET_FIELD, (void *) rec_field, MSET_FIELD); } } char * rec_rset_type (rec_rset_t rset) { char *res; rec_field_t field; res = NULL; if (rset->descriptor) { field = rec_record_get_field_by_name (rset->descriptor, FNAME(REC_FIELD_REC), 0); if (field) res = rec_extract_type (rec_field_value (field)); } return res; } char * rec_rset_url (rec_rset_t rset) { char *res; rec_field_t field; res = NULL; if (rset->descriptor) { field = rec_record_get_field_by_name (rset->descriptor, FNAME(REC_FIELD_REC), 0); if (field) res = rec_extract_url (rec_field_value (field)); } return res; } rec_type_reg_t rec_rset_get_type_reg (rec_rset_t rset) { return rset->type_reg; } void rec_rset_rename_field (rec_rset_t rset, const char *field_name, const char *new_field_name) { size_t j; rec_record_t descriptor; rec_fex_t fex; char *fex_str; char *type_str; rec_buf_t buf; char *result; size_t result_size; rec_fex_elem_t fex_elem; const char *fex_fname; descriptor = rec_rset_descriptor (rset); if (descriptor) { rec_mset_t descriptor_mset = rec_record_mset (descriptor); rec_mset_iterator_t iter = rec_mset_iterator (descriptor_mset); rec_field_t field; while (rec_mset_iterator_next (&iter, MSET_FIELD, (void *) &field, NULL)) { if (rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_TYPE))) { /* Process a %type entry. Invalid entries are skipped. */ if (!rec_rset_type_field_p (rec_field_value (field))) continue; fex = rec_rset_type_field_fex (rec_field_value (field)); if (fex) { for (j = 0; j < rec_fex_size (fex); j++) { fex_elem = rec_fex_get (fex, j); fex_fname = rec_fex_elem_field_name (fex_elem); if (rec_field_name_equal_p (field_name, fex_fname)) /* Replace it with new_field_name. */ rec_fex_elem_set_field_name (fex_elem, new_field_name); } fex_str = rec_fex_str (fex, REC_FEX_CSV); type_str = rec_rset_type_field_type (rec_field_value (field)); buf = rec_buf_new (&result, &result_size); rec_buf_puts (fex_str, buf); rec_buf_putc (' ', buf); rec_buf_puts (type_str, buf); rec_buf_close (buf); rec_field_set_value (field, result); free (fex_str); free (type_str); rec_fex_destroy (fex); } } else if (rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_KEY)) || rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_MANDATORY)) || rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_UNIQUE)) || rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_PROHIBIT)) #if defined REC_CRYPT_SUPPORT || rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_CONFIDENTIAL)) #endif || rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_SORT)) || rec_field_name_equal_p (rec_field_name (field), FNAME(REC_FIELD_SINGULAR))) { /* Rename the field in the fex expression that is the value of the field. Skip invalid entries. */ fex = rec_fex_new (rec_field_value (field), REC_FEX_SIMPLE); if (fex) { for (j = 0; j < rec_fex_size (fex); j++) { fex_elem = rec_fex_get (fex, j); fex_fname = rec_fex_elem_field_name (fex_elem); if (rec_field_name_equal_p (field_name, fex_fname)) /* Replace it with new_field_name. */ rec_fex_elem_set_field_name (fex_elem, new_field_name); } fex_str = rec_fex_str (fex, REC_FEX_SIMPLE); rec_field_set_value (field, fex_str); free (fex_str); } } } rec_mset_iterator_free (&iter); } /* Update the types registry. */ rec_rset_update_field_props (rset); } const char * rec_rset_key (rec_rset_t rset) { const char *key = NULL; rec_rset_fprops_t props = rset->field_props; while (props) { if (props->key_p) { /* There must be only one field marked as key. */ key = props->fname; break; } props = props->next; } return key; } rec_fex_t rec_rset_auto (rec_rset_t rset) { rec_fex_t fex; rec_rset_fprops_t props; fex = rec_fex_new (NULL, REC_FEX_SIMPLE); props = rset->field_props; while (props) { if (props->auto_p) { rec_fex_append (fex, props->fname, -1, -1); } props = props->next; } return fex; } #if defined REC_CRYPT_SUPPORT bool rec_rset_field_confidential_p (rec_rset_t rset, const char *field_name) { rec_fex_t fex; size_t fex_size; size_t i; bool result = false; const char *fex_field_name; fex = rec_rset_confidential (rset); fex_size = rec_fex_size (fex); for (i = 0; i < fex_size; i++) { fex_field_name = rec_fex_elem_field_name (rec_fex_get (fex, i)); if (rec_field_name_equal_p (field_name, fex_field_name)) { result = true; break; } } return result; } rec_fex_t rec_rset_confidential (rec_rset_t rset) { rec_fex_t fex; rec_rset_fprops_t props; fex = rec_fex_new (NULL, REC_FEX_SIMPLE); props = rset->field_props; while (props) { if (props->confidential_p) rec_fex_append (fex, props->fname, -1, -1); props = props->next; } return fex; } #endif /* REC_CRYPT_SUPPORT */ rec_type_t rec_rset_get_field_type (rec_rset_t rset, const char *field_name) { rec_type_t type = NULL; rec_rset_fprops_t props = NULL; props = rec_rset_get_props (rset, field_name, false); if (props) { type = props->type; if (!type && props->type_name) type = rec_type_reg_get (rset->type_reg, props->type_name); } return type; } size_t rec_rset_min_records (rec_rset_t rset) { return rset->min_size; } size_t rec_rset_max_records (rec_rset_t rset) { return rset->max_size; } char * rec_rset_source (rec_rset_t rset) { rec_record_t record; /* The source of the record set is considered to be the source of its first record: either the descriptor or some other record. */ record = rec_rset_descriptor (rset); if (!record) record = (rec_record_t) rec_mset_get_at (rset->mset, MSET_RECORD, 0); return rec_record_source (record); } bool rec_rset_set_order_by_fields (rec_rset_t rset, rec_fex_t field_names) { rec_fex_destroy (rset->order_by_fields); rset->order_by_fields = rec_fex_dup (field_names); return (rset->order_by_fields != NULL); } rec_fex_t rec_rset_order_by_fields (rec_rset_t rset) { return rset->order_by_fields; } rec_rset_t rec_rset_sort (rec_rset_t rset, rec_fex_t sort_by) { if (sort_by) rec_rset_set_order_by_fields (rset, sort_by); if (rset->order_by_fields) { /* Duplicate the multi-set indicating that the elements must be sorted. */ if (!rec_mset_sort (rset->mset)) /* Out of memory. */ return NULL; /* Update field properties, in case order_by_fields was changed above. */ rec_rset_update_field_props (rset); } return rset; } rec_rset_t rec_rset_group (rec_rset_t rset, rec_fex_t group_by) { rec_mset_iterator_t iter; rec_record_t record; rec_mset_elem_t elem; size_t map_size; bool *deletion_map; size_t num_record; /* Create and initialize the deletion map. */ map_size = sizeof(bool) * rec_rset_num_records (rset); deletion_map = malloc (map_size); if (!deletion_map) /* Out of memory. */ return NULL; memset (deletion_map, false, map_size); /* Iterate on the records of RSET, grouping records and marking the grouped records for deletion. */ num_record = 0; iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **)&record, NULL)) { if (!deletion_map[num_record]) { size_t num_record_2 = num_record; rec_mset_iterator_t iter2 = iter; rec_record_t record2; while (rec_mset_iterator_next (&iter2, MSET_RECORD, (const void**)&record2, NULL)) { num_record_2++; if (rec_rset_compare_typed_records (rset, record, record2, group_by) != 0) break; else { /* Insert all the elements of record2 into record, but not the group-by fields. Also, remove any duplicated field created in record2 as the result of the operation. */ if (!rec_rset_merge_records (record, record2, group_by)) /* Out of memory. */ return NULL; /* Mark record2 for removal. */ deletion_map[num_record_2] = true; } } } num_record++; } rec_mset_iterator_free (&iter); /* Delete the records marked for deletion. */ num_record = 0; iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &record, &elem)) { if (deletion_map[num_record]) rec_mset_remove_elem (rec_rset_mset (rset), elem); num_record++; } rec_mset_iterator_free (&iter); free (deletion_map); return rset; } rec_rset_t rec_rset_add_auto_fields (rec_rset_t rset, rec_record_t record) { rec_fex_t auto_fields; rec_type_t type; size_t i; if ((auto_fields = rec_rset_auto (rset))) { size_t num_auto_fields = rec_fex_size (auto_fields); for (i = 0; i < num_auto_fields; i++) { const char *auto_field_name = rec_fex_elem_field_name (rec_fex_get (auto_fields, i)); if (!rec_record_field_p (record, auto_field_name)) { /* The auto field is not already present in record, so add one automatically. Depending on its type the value is calculated differently. If the record does not have a type, or the type is incorrect, ignore it. */ type = rec_rset_get_field_type (rset, auto_field_name); if (type) { switch (rec_type_kind (type)) { case REC_TYPE_INT: case REC_TYPE_RANGE: if (!rec_rset_add_auto_field_int (rset, auto_field_name, record)) /* Out of memory. */ return NULL; break; case REC_TYPE_DATE: if (!rec_rset_add_auto_field_date (rset, auto_field_name, record)) /* Out of memory. */ return NULL; break; #if defined UUID_TYPE case REC_TYPE_UUID: if (!rec_rset_add_auto_field_uuid (rset, auto_field_name, record)) /* Out of memory. */ return NULL; break; #endif /* UUID_TYPE */ default: /* Do nothing for other types. */ break; } } } } } return rset; } size_t rec_rset_num_sex_constraints (rec_rset_t rset) { return rset->num_constraints; } rec_sex_t rec_rset_sex_constraint (rec_rset_t rset, size_t index) { return rset->constraints[index]; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-aggregate.c��������������������������������������������������������������������0000644�0000000�0000000�00000027711�14226563465�013561� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* -*- mode: C -*- * * File: rec-aggregate.c * Date: Mon Apr 23 11:05:57 2012 * * GNU recutils - Support for aggregate functions * */ /* Copyright (C) 2012, 2013, 2014, 2015, 2016, 2017, 2018, 2019, 2020, * 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <stdlib.h> #include <string.h> #include <float.h> #include <math.h> #include <minmax.h> #include <rec-utils.h> #include <rec.h> /* * Data structures. */ #define MAX_FUNCTIONS 40 struct rec_aggregate_reg_elem_s { char *name; rec_aggregate_t function; }; struct rec_aggregate_reg_s { struct rec_aggregate_reg_elem_s functions[MAX_FUNCTIONS]; size_t num_functions; }; /* Static functions defined in this file. */ static char *rec_aggregate_std_count (rec_rset_t rset, rec_record_t record, const char *field_name); static char *rec_aggregate_std_avg (rec_rset_t rset, rec_record_t record, const char *field_name); static double rec_aggregate_std_avg_record (rec_record_t record, const char *field_name); static char *rec_aggregate_std_sum (rec_rset_t rset, rec_record_t record, const char *field_name); static double rec_aggregate_std_sum_record (rec_record_t record, const char *field_name); static char *rec_aggregate_std_min (rec_rset_t rset, rec_record_t record, const char *field_name); static double rec_aggregate_std_min_record (rec_record_t record, const char *field_name); static char *rec_aggregate_std_max (rec_rset_t rset, rec_record_t record, const char *field_name); static double rec_aggregate_std_max_record (rec_record_t record, const char *field_name); /* * Static structure containing the descriptors of the standard * aggregates. * * The aggregate names must be in lower-case, even if the matching is * case-insensitive. */ struct rec_aggregate_descriptor_s { const char *name; rec_aggregate_t func; }; #define NUM_STD_AGGREGATES 5 static struct rec_aggregate_descriptor_s std_aggregates[] = {{"count", &rec_aggregate_std_count}, {"avg", &rec_aggregate_std_avg}, {"sum", &rec_aggregate_std_sum}, {"min", &rec_aggregate_std_min}, {"max", &rec_aggregate_std_max}}; /* * Public functions. */ rec_aggregate_reg_t rec_aggregate_reg_new (void) { rec_aggregate_reg_t new; new = malloc (sizeof (struct rec_aggregate_reg_s)); if (new) new->num_functions = 0; return new; } void rec_aggregate_reg_destroy (rec_aggregate_reg_t func_reg) { if (func_reg) { size_t i = 0; for (i = 0; i < func_reg->num_functions; i++) free (func_reg->functions[i].name); free (func_reg); } } bool rec_aggregate_reg_add (rec_aggregate_reg_t func_reg, const char *name, rec_aggregate_t function) { bool function_replaced = false; size_t i = 0; for (i = 0; i < func_reg->num_functions; i++) if (strcmp (name, func_reg->functions[i].name) == 0) { /* Replace the existing function. */ func_reg->functions[i].function = function; function_replaced = true; break; } if (!function_replaced) { /* Insert the function into a new entry in the registry. */ if (func_reg->num_functions == MAX_FUNCTIONS) /* FIXME: this is crappy as hell. */ return false; func_reg->functions[func_reg->num_functions].name = strdup (name); func_reg->functions[func_reg->num_functions].function = function; func_reg->num_functions++; } return true; } rec_aggregate_t rec_aggregate_reg_get (rec_aggregate_reg_t func_reg, const char *name) { size_t i = 0; rec_aggregate_t res = NULL; for (i = 0; i < func_reg->num_functions; i++) if (strcasecmp (func_reg->functions[i].name, name) == 0) { res = func_reg->functions[i].function; break; } return res; } void rec_aggregate_reg_add_standard (rec_aggregate_reg_t func_reg) { size_t i = 0; for (i = 0; i < NUM_STD_AGGREGATES; i++) rec_aggregate_reg_add (func_reg, std_aggregates[i].name, std_aggregates[i].func); } bool rec_aggregate_std_p (const char *name) { bool found = false; size_t i = 0; for (i = 0; i < NUM_STD_AGGREGATES; i++) if (strcasecmp (name, std_aggregates[i].name) == 0) { found = true; break; } return found; } /* * Private functions. */ static char * rec_aggregate_std_count (rec_rset_t rset, rec_record_t record, const char *field_name) { char *result = NULL; size_t count = 0; if (record) count = rec_record_get_num_fields_by_name (record, field_name); else if (rset) { rec_record_t rec = NULL; rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (void *) &rec, NULL)) count = count + rec_record_get_num_fields_by_name (rec, field_name); rec_mset_iterator_free (&iter); } /* Return the count as a string. Note that if NULL is returned it will be returned by this function below to signal the end-of-memory condition. */ asprintf (&result, "%zu", count); return result; } static char * rec_aggregate_std_avg (rec_rset_t rset, rec_record_t record, const char *field_name) { char *result = NULL; double avg = 0; if (record) avg = rec_aggregate_std_avg_record (record, field_name); else if (rset) { size_t num_records = 0; rec_record_t rec = NULL; rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (void *) &rec, NULL)) { avg = avg + rec_aggregate_std_avg_record (rec, field_name); num_records++; } rec_mset_iterator_free (&iter); if (num_records != 0) avg = avg / num_records; } /* Return the average as a string. Note that if NULL is returned it will be returned by this function below to signal the end-of-memory condition. */ asprintf (&result, "%g", avg); return result; } static double rec_aggregate_std_avg_record (rec_record_t record, const char *field_name) { double avg = 0; rec_field_t field; size_t num_fields = 0; rec_mset_iterator_t iter = rec_mset_iterator (rec_record_mset (record)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (void *) &field, NULL)) { double field_value_double = 0; const char *field_value = rec_field_value (field); if (rec_field_name_equal_p (rec_field_name (field), field_name) && rec_atod (field_value, &field_value_double)) { avg = avg + field_value_double; num_fields++; } } rec_mset_iterator_free (&iter); if (num_fields != 0) avg = avg / num_fields; return avg; } #define REC_AGGREGATE_ACCUM_FUNC(NAME, OP, INIT_VAL) \ static char * \ rec_aggregate_std_##NAME (rec_rset_t rset, \ rec_record_t record, \ const char *field_name) \ { \ char *result = NULL; \ double val = INIT_VAL; \ \ if (record) \ val = rec_aggregate_std_##NAME##_record (record, field_name); \ else if (rset) \ { \ rec_record_t rec = NULL; \ rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); \ while (rec_mset_iterator_next (&iter, MSET_RECORD, (void *) &rec, NULL)) \ val = OP (val, rec_aggregate_std_##NAME##_record (rec, field_name)); \ rec_mset_iterator_free (&iter); \ } \ \ /* Return the val as a string. Note that if NULL is returned it */ \ /* will be returned by this function below to signal the */ \ /* end-of-memory condition. */ \ asprintf (&result, "%g", val); \ \ return result; \ } \ \ static double \ rec_aggregate_std_##NAME##_record (rec_record_t record, \ const char *field_name) \ { \ /* Calculate the val of the fields in a given record. Fields */ \ /* not representing a real value are ignored. */ \ \ double val = INIT_VAL; \ rec_field_t field; \ rec_mset_iterator_t iter = rec_mset_iterator (rec_record_mset (record)); \ \ while (rec_mset_iterator_next (&iter, MSET_FIELD, (void *) &field, NULL)) \ { \ const char *field_value = rec_field_value (field); \ double field_value_double = 0; \ \ if (rec_field_name_equal_p (rec_field_name (field), field_name) \ && rec_atod (field_value, &field_value_double)) \ val = OP (val, field_value_double); \ } \ rec_mset_iterator_free (&iter); \ \ return val; \ } /* * Aggregate: Sum(Field) */ static inline double op_sum (double op1, double op2) { return op1 + op2; } REC_AGGREGATE_ACCUM_FUNC(sum, op_sum, 0); /* * Aggregate: Min(Field) * Aggregate: Max(Field) */ REC_AGGREGATE_ACCUM_FUNC(min, MIN, DBL_MAX); REC_AGGREGATE_ACCUM_FUNC(max, MAX, DBL_MIN); /* End of rec-aggregate.c */ �������������������������������������������������������recutils-1.9/src/rec-sex-parser.h�������������������������������������������������������������������0000644�0000000�0000000�00000003355�14226563465�013727� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-sex-parser.h - Sexy parser. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #ifndef REC_SEX_PARSER_H #define REC_SEX_PARSER_H #include <config.h> #include <stdbool.h> #include <rec-sex-ast.h> typedef struct rec_sex_parser_s *rec_sex_parser_t; rec_sex_parser_t rec_sex_parser_new (void); void rec_sex_parser_destroy (rec_sex_parser_t parser); bool rec_sex_parser_case_insensitive (rec_sex_parser_t parser); void rec_sex_parser_set_case_insensitive (rec_sex_parser_t parser, bool case_insensitive); void rec_sex_parser_set_in (rec_sex_parser_t parser, const char *str); int rec_sex_parser_getc (rec_sex_parser_t parser); rec_sex_ast_t rec_sex_parser_ast (rec_sex_parser_t parser); void rec_sex_parser_set_ast (rec_sex_parser_t parser, rec_sex_ast_t ast); bool rec_sex_parser_run (rec_sex_parser_t parser, const char *expr); void *rec_sex_parser_scanner (rec_sex_parser_t parser); void rec_sex_parser_print_ast (rec_sex_parser_t parser); #endif /* ! REC_SEX_PARSER_H */ �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec.c������������������������������������������������������������������������������0000644�0000000�0000000�00000002231�14226563465�011623� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec.c - initialization and finalization routines. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #if defined REMOTE_DESCRIPTORS # include <curl/curl.h> #endif #include <gettext.h> #include <rec.h> void rec_init (void) { bindtextdomain (PACKAGE, LOCALEDIR); #if defined REMOTE_DESCRIPTORS curl_global_init (CURL_GLOBAL_ALL); #endif } void rec_fini (void) { #if defined REMOTE_DESCRIPTORS curl_global_cleanup (); #endif } �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/src/rec-db.c���������������������������������������������������������������������������0000644�0000000�0000000�00000131133�14226563465�012212� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������/* rec-db.c - databases. */ /* Copyright (C) 2010, 2011, 2012, 2013, 2014, 2015, 2016, 2017, 2018, * 2019, 2020, 2022 Jose E. Marchesi */ /* This program is free software: you can redistribute it and/or modify * it under the terms of the GNU General Public License as published by * the Free Software Foundation, either version 3 of the License, or * (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY; without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU General Public License for more details. * * You should have received a copy of the GNU General Public License * along with this program. If not, see <http://www.gnu.org/licenses/>. */ #include <config.h> #include <string.h> #include <stdlib.h> #include <time.h> #include <gl_array_list.h> #include <gl_list.h> #include <rec-utils.h> #include <rec.h> struct rec_db_s { size_t size; /* Number of record sets contained in this database. */ gl_list_t rset_list; /* List of record sets. */ rec_aggregate_reg_t aggregates; /* Registry with the aggregates. */ }; static rec_record_t rec_db_merge_records (rec_record_t record1, rec_record_t record2, const char *prefix) { rec_mset_iterator_t iter; rec_field_t field; rec_record_t merge = NULL; merge = rec_record_dup (record1); if (!merge) return NULL; /* Add all the fields from record2 to record1, prepending PREFIX_ to the field name. It is the responsability of the user to provide a PREFIX whose application results in a unique field. */ iter = rec_mset_iterator (rec_record_mset (record2)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void **) &field, NULL)) { rec_field_t new_field = rec_field_dup (field); if (!new_field) /* Out of memory. */ return NULL; /* Apply the prefix. */ { const char *field_name = rec_field_name (new_field); char *new_name = malloc (strlen (field_name) + strlen(prefix) + 2); if (!new_name) /* Out of memory. */ return NULL; memcpy (new_name, prefix, strlen (prefix)); new_name[strlen (prefix)] = '_'; memcpy (new_name + strlen (prefix) + 1, field_name, strlen (field_name) + 1); if (!rec_field_set_name (new_field, new_name)) /* Out of memory. */ return NULL; free (new_name); } if (!rec_mset_append (rec_record_mset (merge), MSET_FIELD, (void *) new_field, MSET_ANY)) /* Out of memory. */ return NULL; } rec_mset_iterator_free (&iter); return merge; } static rec_rset_t rec_db_join (rec_db_t db, const char *type1, const char *field, const char *type2) { /* Note that this function is inefficient like hell. */ /* Perform the join of the specified record sets, using TYPE1.Field = TYPE2.Key as the join criteria. If some of the specified record sets don't exist as named rset in the specified database then return NULL. */ const char *key = NULL; rec_rset_t join = NULL; rec_rset_t rset1 = rec_db_get_rset_by_type (db, type1); rec_rset_t rset2 = rec_db_get_rset_by_type (db, type2); if (!rset1 || !rset2) return NULL; /* Determine the key field of the second record set. */ key = rec_rset_key (rset2); if (!key) return NULL; /* Do the join. */ join = rec_rset_new (); if (!join) { /* Out of memory. */ return NULL; } else { rec_record_t record1 = NULL; rec_mset_iterator_t iter1 = rec_mset_iterator (rec_rset_mset (rset1)); while (rec_mset_iterator_next (&iter1, MSET_RECORD, (const void **) &record1, NULL)) { /* For each field record1.key in this record we scan the second record set for record1.field == record2.key instances. */ size_t num_foreign_keys = rec_record_get_num_fields_by_name (record1, field); size_t num_foreign_key = 0; for (num_foreign_key = 0; num_foreign_key < num_foreign_keys; num_foreign_key++) { rec_record_t record2 = NULL; rec_mset_iterator_t iter2 = rec_mset_iterator (rec_rset_mset (rset2)); while (rec_mset_iterator_next (&iter2, MSET_RECORD, (const void **) &record2, NULL)) { /* Continue only if there is a field in record1 such as: record1.field == record2.key. */ bool found = false; size_t i = 0; rec_field_t key_field = rec_record_get_field_by_name (record2, key, num_foreign_key); if (!key_field) /* A record without a key is an integrity error, but none of our business, so just skip it. */ break; found = false; for (i = 0; i < rec_record_get_num_fields_by_name (record1, field); i++) { if (strcmp (rec_field_value (key_field), rec_field_value (rec_record_get_field_by_name (record1, field, i))) == 0) { found = true; break; } } if (!found) /* Skip this combination record. */ continue; /* Merge record1 and record2 into a new record. */ rec_record_t record = rec_db_merge_records (record1, record2, field); if (!record) /* Out of memory. */ return NULL; /* Remove all the occurrences of the 'field' from record1, which were substituted in the merge. */ while (rec_record_get_num_fields_by_name (record, field) > 0) rec_record_remove_field_by_name (record, field, 0); /* Add it into the join result. */ rec_record_set_container (record, join); if (!rec_mset_append (rec_rset_mset (join), MSET_RECORD, (void *) record, MSET_ANY)) /* Out of memory. */ return NULL; } rec_mset_iterator_free (&iter2); } } rec_mset_iterator_free (&iter1); } /* The descriptor of the new record set will define records of type TYPE_FIELD, where FIELD is the name specified to trigger the operation. The contents of the descriptor will be just the %rec entry. */ { rec_record_t new_descriptor = rec_record_new (); if (!new_descriptor) /* Out of memory. */ return NULL; /* Set the type of the joined record set. */ { rec_field_t new_field = NULL; char *new_rset_type = rec_concat_strings (type1, "_", field); if (!new_rset_type) /* Out of memory. */ return NULL; new_field = rec_field_new (rec_std_field_name (REC_FIELD_REC), new_rset_type); if (!rec_mset_append (rec_record_mset (new_descriptor), MSET_FIELD, (void *) new_field, MSET_ANY)) /* Out of memory. */ return NULL; } rec_rset_set_descriptor (join, new_descriptor); } return join; } static bool rec_db_set_act_rename (rec_rset_t rset, rec_record_t record, rec_fex_t fex, bool rename_descriptor, const char *arg) { size_t j, min, max, renamed; size_t num_fields; rec_fex_elem_t fex_elem; rec_field_t field; const char *field_name; /* Rename the selected fields. The size of the FEX is guaranteed to be 1 at this point. */ fex_elem = rec_fex_get (fex, 0); field_name = rec_fex_elem_field_name (fex_elem); min = rec_fex_elem_min (fex_elem); max = rec_fex_elem_max (fex_elem); num_fields = rec_record_get_num_fields_by_name (record, field_name); if (min == -1) { /* Process all the fields with the given name. */ min = 0; max = num_fields - 1; } if (max == -1) max = min; renamed = 0; for (j = 0; j < num_fields; j++) { if ((j >= min) && (j <= max)) { /* Set the name of the Jth field named FIELD_NAME, if it exists.*/ field = rec_record_get_field_by_name (record, field_name, j - renamed); if (field) { rec_field_set_name (field, arg); renamed++; } if (rename_descriptor) rec_rset_rename_field (rset, field_name, arg); } } return true; } static bool rec_db_set_act_set (rec_rset_t rset, rec_record_t record, rec_fex_t fex, bool add_p, const char *arg) { size_t i, j, min, max; size_t num_fields; rec_fex_elem_t fex_elem; rec_field_t field; const char *field_name; for (i = 0; i < rec_fex_size (fex); i++) { fex_elem = rec_fex_get (fex, i); field_name = rec_fex_elem_field_name (fex_elem); min = rec_fex_elem_min (fex_elem); max = rec_fex_elem_max (fex_elem); num_fields = rec_record_get_num_fields_by_name (record, field_name); if (min == -1) { /* Process all the fields with the given name. */ min = 0; max = num_fields - 1; } if (max == -1) max = min; for (j = 0; j < num_fields; j++) { if ((j >= min) && (j <= max)) { /* Set the value of the Jth field named FIELD_NAME, if it exists.*/ field = rec_record_get_field_by_name (record, field_name, j); if (field) rec_field_set_value (field, arg); } } if (add_p && (num_fields == 0)) { /* Add a field with this name and value. */ field = rec_field_new (field_name, arg); if (!rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY)) /* Out of memory. */ return false; } } return true; } static bool rec_db_set_act_add (rec_rset_t rset, rec_record_t record, rec_fex_t fex, const char *arg) { size_t i; /* Create new fields from the FEX and add them to the record. */ for (i = 0; i < rec_fex_size (fex); i++) { rec_fex_elem_t fex_elem = rec_fex_get (fex, i); const char *field_name = rec_fex_elem_field_name (fex_elem); rec_field_t field = rec_field_new (field_name, arg); if (!field) /* Out of memory. */ return false; if (!rec_mset_append (rec_record_mset (record), MSET_FIELD, (void *) field, MSET_ANY)) /* Out of memory. */ return false; } return true; } static bool rec_db_set_act_delete (rec_rset_t rset, rec_record_t record, rec_fex_t fex, bool comment_out) { size_t i, j; size_t num_fields; bool *deletion_mask; rec_field_t field; rec_mset_iterator_t iter; rec_mset_elem_t elem; /* Initialize the deletion mask. */ deletion_mask = malloc (sizeof (bool) * rec_record_num_fields (record)); if (!deletion_mask) /* Out of memory. */ return false; for (i = 0; i < rec_record_num_fields (record); i++) deletion_mask[i] = false; /* Mark fields that will be deleted from the record. */ for (i = 0; i < rec_fex_size (fex); i++) { rec_fex_elem_t fex_elem = rec_fex_get (fex, i); const char *field_name = rec_fex_elem_field_name (fex_elem); size_t min = rec_fex_elem_min (fex_elem); size_t max = rec_fex_elem_max (fex_elem); num_fields = rec_record_get_num_fields_by_name (record, field_name); if (min == -1) { /* Delete all the fields with the given name. */ min = 0; max = num_fields - 1; } if (max == -1) max = min; for (j = 0; j < num_fields; j++) { if ((j >= min) && (j <= max)) { /* Mark this field for deletion. */ field = rec_record_get_field_by_name (record, rec_fex_elem_field_name (fex_elem), j); deletion_mask[rec_record_get_field_index (record, field)] = true; } } } /* Delete the marked fields. */ i = 0; iter = rec_mset_iterator (rec_record_mset (record)); while (rec_mset_iterator_next (&iter, MSET_FIELD, (const void**) &field, &elem)) { if (deletion_mask[i]) { if (comment_out) { /* Turn the field into a comment. */ rec_comment_t comment = rec_field_to_comment (field); if (!comment) { /* Out of memory. */ return false; } rec_field_destroy (field); rec_mset_elem_set_data (elem, (void *) comment); rec_mset_elem_set_type (elem, MSET_COMMENT); } else /* Remove the field from the list and dispose it. */ rec_mset_remove_elem (rec_record_mset (record), elem); } i++; } rec_mset_iterator_free (&iter); return true; } static bool rec_db_index_p (size_t *index, size_t num) { while ((index[0] != REC_Q_NOINDEX) || (index[1] != REC_Q_NOINDEX)) { bool found = false; size_t min = index[0]; size_t max = index[1]; if (max == REC_Q_NOINDEX) found = (num == min); else found = ((num >= min) && (num <= max)); if (found) return true; index = index + 2; } return false; } static void rec_db_add_random_indexes (size_t **index, size_t num, size_t limit) { /* Create NUM different random numbers in the [0..limit-1] range, without repetition, and store them in a buffer pointed by INDEX. */ size_t i; char random_state[128]; struct random_data random_data; *index = malloc (sizeof(size_t) * ((num + 1) * 2)); if (*index == NULL) /* Out of memory. */ return; for (i = 0; i < ((num + 1) * 2); i++) (*index)[i] = REC_Q_NOINDEX; /* Insert the random indexes. */ memset (&random_data, 0, sizeof (random_data)); initstate_r (time(NULL), (char *) &random_state, 128, &random_data); for (i = 0; i < (num * 2); i = i + 2) { size_t random_value = 0; random_r (&random_data, (int32_t *) &random_value); /* Can't fail. */ random_value = random_value % limit; /* Avoid having repeated random indexes. */ if (rec_db_index_p (*index, random_value)) { /* Pick the first available number. */ size_t i; for (i = 0; i < limit; i++) { if (!rec_db_index_p (*index, i)) { random_value = i; break; } } } (*index)[i] = random_value; /* Min. */ (*index)[i+1] = REC_Q_NOINDEX; /* Max. */ } } static bool rec_db_record_selected_p (size_t num_record, rec_record_t record, size_t *index, rec_sex_t sex, const char *fast_string, bool case_insensitive_p) { /* Note that the logic in this function assumes that SEX and FAST_STRING are mutually exclusive. If they are not then FAST_STRING takes precedence. */ /* The record is searched for instances of the "fast string", which can appear as a substring. */ if (fast_string) return rec_record_contains_value (record, fast_string, case_insensitive_p); /* The selected expression is evaluated in the record. If there is an error evaluating the expression, or if the expression does not evaluate to 'true', then 'false' is returned. */ if (sex) { bool eval_status; return rec_sex_eval (sex, record, &eval_status); } /* The memory pointed by INDEX contains pairs of indexes Min,Max. The final pair is always REC_Q_NOINDEX,REC_Q_NOINDEX. Select the current record only if its position is into some of the defined intervals. */ if (index) return rec_db_index_p (index, num_record); return true; } static rec_record_t rec_db_process_fex (rec_db_t db, rec_rset_t rset, rec_record_t record, rec_fex_t fex) { rec_record_t res = NULL; size_t fex_size, i, j = 0; /* If fex is NULL then just return a copy of RECORD. Otherwise create an empty result record. */ if (!fex) return rec_record_dup (record); res = rec_record_new (); if (!res) /* Out of memory. */ return NULL; /* Iterate on the elements of the FEX, picking and transforming the fields of RECORD that must be copied and inserted into RES. If a function call is found in the fex then invoke the corresponding function and add the fields returned by that function into the record. */ fex_size = rec_fex_size (fex); for (i = 0; i < fex_size; i++) { rec_fex_elem_t elem = rec_fex_get (fex, i); const char *field_name = rec_fex_elem_field_name (elem); const char *alias = rec_fex_elem_rewrite_to (elem); const char *function_name = rec_fex_elem_function_name (elem); size_t min = rec_fex_elem_min (elem); size_t max = rec_fex_elem_max (elem); if (function_name) { /* Get a handler for the aggregate function and invoke it on the rset or record, passing the field_name argument and the indexes. The value returned by the funciton is then appended into the current record in a new field, named after the name of the aggregate and the name of the argument field. Non-existing aggregates are simply ignored. */ rec_aggregate_t func = rec_aggregate_reg_get (rec_db_aggregates (db), function_name); if (func) { char *func_res = (func) (rset, record, field_name); if (func_res) { /* Add a new field with the result of the aggregate as its value. */ rec_field_t agg_field = NULL; char *agg_field_name = NULL; char *agg_field_value = func_res; /* The name of the new field is a composition of the name of the invoked function and the name of the field to which the function is applied. Unless an alias is used, of course. */ if (alias) { agg_field_name = strdup (alias); if (!agg_field_name) /* Out of memory. */ return NULL; } else { agg_field_name = malloc (strlen(function_name) + 1 /* _ */ + strlen (field_name) + 1); if (!agg_field_name) /* Out of memory. */ return NULL; memcpy (agg_field_name, function_name, strlen (function_name) + 1); strcat (agg_field_name, "_"); strcat (agg_field_name, field_name); } agg_field = rec_field_new (agg_field_name, agg_field_value); if (!agg_field) /* Out of memory. */ return NULL; if (!rec_mset_append (rec_record_mset (res), MSET_FIELD, (void *) agg_field, MSET_FIELD)) /* Out of memory. */ return NULL; free (agg_field_name); free (func_res); } } } else { if ((min == -1) && (max == -1)) { /* Add all the fields with that name. */ min = 0; max = rec_record_get_num_fields_by_name (record, field_name); } else if (max == -1) { /* Add just one field: Field[min]. */ max = min + 1; } else /* Add the interval min..max, max inclusive. */ max++; /* Add the selected fields to the result record. */ for (j = min; j < max; j++) { rec_field_t res_field = NULL; rec_field_t field = rec_record_get_field_by_name (record, field_name, j); if (!field) continue; /* Duplicate the field and append it into 'res'. If there is a rewrite rule defined in this fex entry then use it instead of the original name of the field. */ res_field = rec_field_dup (field); if (alias) { if (!rec_field_set_name (res_field, alias)) /* Out of memory. */ return NULL; } if (!rec_mset_append (rec_record_mset (res), MSET_FIELD, (void *) res_field, MSET_FIELD)) /* Out of memory. */ return NULL; } } } /* At this point RES is a record containing all the selected fields of the original record, but we must also copy the location information. */ if (record) { rec_record_set_location (res, rec_record_location (record)); rec_record_set_char_location (res, rec_record_char_location (record)); } return res; } static bool rec_db_rset_equals_fn (const void *elt1, const void *elt2) { return false; } static void rec_db_rset_dispose_fn (const void *elt) { rec_rset_t rset; rset = (rec_rset_t) elt; rec_rset_destroy (rset); } rec_db_t rec_db_new (void) { rec_db_t new; new = malloc (sizeof (struct rec_db_s)); if (new) { new->size = 0; new->rset_list = gl_list_nx_create_empty (GL_ARRAY_LIST, rec_db_rset_equals_fn, NULL, rec_db_rset_dispose_fn, true); if (new->rset_list == NULL) { /* Out of memory. */ free (new); new = NULL; } /* Add the standard field functions to the registry in the database. */ new->aggregates = rec_aggregate_reg_new (); if (!new->aggregates) { /* Out of memory. */ free (new); return NULL; } rec_aggregate_reg_add_standard (new->aggregates); } return new; } void rec_db_destroy (rec_db_t db) { if (db) { rec_aggregate_reg_destroy (db->aggregates); gl_list_free (db->rset_list); free (db); } } size_t rec_db_size (rec_db_t db) { return db->size; } rec_rset_t rec_db_get_rset (rec_db_t db, size_t position) { rec_rset_t rset; rset = NULL; if (db->size > 0) { if (position >= db->size) position = db->size - 1; rset = (rec_rset_t) gl_list_get_at (db->rset_list, position); } return rset; } bool rec_db_insert_rset (rec_db_t db, rec_rset_t rset, size_t position) { gl_list_node_t node; node = NULL; if (position == 0) { node = gl_list_nx_add_first (db->rset_list, (void *) rset); } else if (position >= db->size) { node = gl_list_nx_add_last (db->rset_list, (void *) rset); } else { node = gl_list_nx_add_at (db->rset_list, position, (void *) rset); } if (node != NULL) { db->size++; return true; } return false; } bool rec_db_remove_rset (rec_db_t db, size_t position) { bool removed; removed = false; if (db->size > 0) { if (position >= db->size) position = db->size - 1; if (gl_list_remove_at (db->rset_list, position)) { db->size--; removed = true; } } return removed; } bool rec_db_type_p (rec_db_t db, const char *type) { return (rec_db_get_rset_by_type (db, type) != NULL); } rec_rset_t rec_db_get_rset_by_type (rec_db_t db, const char *type) { int i; rec_rset_t rset; bool found; char *rtype; found = false; for (i = 0; i < rec_db_size (db); i++) { rset = rec_db_get_rset (db, i); rtype = rec_rset_type (rset); if (rtype == NULL) { if (type == NULL) { /* Return the default rset. */ found = true; break; } } else { if ((type != NULL) && (strcmp (rtype, type) == 0)) { found = true; break; } } } if (!found) rset = NULL; return rset; } rec_rset_t rec_db_query (rec_db_t db, const char *type, const char *join, size_t *index, rec_sex_t sex, const char *fast_string, size_t random, rec_fex_t fex, const char *password, rec_fex_t group_by, rec_fex_t sort_by, int flags) { rec_rset_t res = NULL; rec_rset_t rset = NULL; /* Create a new, empty, record set, that will contain the contents of the selection. */ res = rec_rset_new (); if (!res) /* Out of memory. */ return NULL; /* Search for the rset containing records of the requested type. If type equals to NULL then the default record set is used. If JOIN is not NULL then the record set must be the join of the involved record sets. */ rset = rec_db_get_rset_by_type (db, type); if (!rset) { /* If the default record set was selected, it was not found, and the database contains only one record set, then it is selected. */ if (!type && (rec_db_size (db) == 1)) rset = rec_db_get_rset (db, 0); else /* Type not found, so return an empty record set. */ return res; } else { if (join) { /* A join was requested. The steps to proceed are: - Make sure that the requested field join is declared of type 'rec' in the record set. - Retrieve the referred record set from the database. - Calculate the join and store it in 'rset'. */ rec_type_t ref_type = rec_rset_get_field_type (rset, join); if (ref_type && (rec_type_kind (ref_type) == REC_TYPE_REC)) { const char *referred_type = rec_type_rec (ref_type); if (rec_db_get_rset_by_type (db, referred_type)) { rset = rec_db_join (db, type, join, referred_type); if (!rset) /* Out of memory. */ return NULL; } } } } /* If a descriptor is requested then get a copy of the descriptor of the referred record set, which exists only if it is not the default. */ if (flags & REC_F_DESCRIPTOR) { rec_record_t descriptor = rec_rset_descriptor (rset); if (descriptor) { descriptor = rec_record_dup (descriptor); if (!descriptor) { /* Out of memory. */ free (res); return NULL; } } rec_rset_set_descriptor (res, descriptor); } /* Generate a list of random indexes here if requested. The generated random indexes are added to the indexes list, which must be NULL if random > 0 (mutually exclusive arguments). */ if (random > 0) { rec_db_add_random_indexes (&index, random, rec_rset_num_records (rset)); if (!index) /* Out of memory. */ return NULL; } if (fex && !group_by && rec_fex_all_calls_p (fex)) { /* This query is a request for the value of several aggregates, with no grouping. This means that the resulting rset will contain one record containing the evaluation of the aggregates. This is peformed by invoking rec_db_process_fex with a NULL record. */ rec_record_t record = rec_db_process_fex (db, rset, NULL, fex); if (record) { rec_record_set_container (record, res); if (!rec_mset_append (rec_rset_mset (res), MSET_RECORD, (void *) record, MSET_RECORD)) /* Out of memory. */ return NULL; } } else { /* Process this record set. This means that every record of this record set which is selected by some of the selection arguments (a sex, an index, a random selection or a "fast string") will be duplicated and added to the 'res' record set. */ rec_record_t record = NULL; size_t num_rec = -1; if (group_by) { if (!rec_rset_sort (rset, group_by)) /* Out of memory. */ return NULL; if (!rec_rset_group (rset, group_by)) /* Out of memory. */ return NULL; } if (!rec_rset_sort (rset, sort_by)) /* Out of memory. */ return NULL; rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &record, NULL)) { rec_record_t res_record; num_rec++; /* Determine whether we must skip this record. */ if (!rec_db_record_selected_p (num_rec, record, index, sex, fast_string, flags & REC_F_ICASE)) continue; /* Process this record. */ /* Transform the record through the field expression and add it to the result record set. */ res_record = rec_db_process_fex (db, rset, record, fex); if (!res_record) /* Out of memory. */ return NULL; /* Do not add empty records to the result record set. */ if (rec_record_num_elems (res_record) == 0) continue; #if defined REC_CRYPT_SUPPORT /* Decrypt the confidential fields in the record if some of the fields are declared as "confidential", but only do that if the user provided a password. Note that we use 'rset' instead of 'res' to cover cases where (flags & REC_F_DESCRIPTOR) == 0. */ if (password) { if (!rec_decrypt_record (rset, res_record, password)) { /* Out of memory. */ return NULL; } } #endif /* Remove duplicated fields if requested by the user. */ if (flags & REC_F_UNIQ) rec_record_uniq (res_record); /* Append. */ rec_record_set_container (res_record, res); if (!rec_mset_append (rec_rset_mset (res), MSET_RECORD, (void *) res_record, MSET_RECORD)) /* Out of memory. */ return NULL; } rec_mset_iterator_free (&iter); } return res; } bool rec_db_insert (rec_db_t db, const char *type, size_t *index, rec_sex_t sex, const char *fast_string, size_t random, const char *password, rec_record_t record, int flags) { /* Discard NULL or empty records. */ if (!record || (rec_record_num_fields (record) == 0)) return true; /* Insert the record in the database. */ if (index || sex || fast_string || (random > 0)) { /* Replace matching records with copies of RECORD. */ rec_rset_t rset = rec_db_get_rset_by_type (db, type); if (rset) { size_t num_rec = -1; /* If the user requested to replace random records, calculate them now for this record set. */ if (random > 0) { rec_db_add_random_indexes (&index, random, rec_rset_num_records (rset)); if (!index) /* Out of memory. */ return false; } /* Add auto generated fields unless the user disabled it. */ if (!(flags & REC_F_NOAUTO)) { if (!rec_rset_add_auto_fields (rset, record)) /* Out of memory. */ return false; } #if defined REC_CRYPT_SUPPORT /* Encrypt confidential fields if a password was provided by the user. */ if (password) { if (!rec_encrypt_record (rset, record, password)) /* Out of memory. */ return false; } #endif /* Iterate on the record set, replacing matching records with copies of the provided record. */ { rec_record_t rset_record = NULL; rec_mset_elem_t elem; rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &rset_record, &elem)) { num_rec++; /* Shall we skip this record? */ if (!rec_db_record_selected_p (num_rec, rset_record, index, sex, fast_string, flags & REC_F_ICASE)) continue; /* Replace the record. */ rec_record_set_container (record, rset); rec_mset_elem_set_data (elem, (void *) rec_record_dup (record)); } rec_mset_iterator_free (&iter); } } } else { /* Append the record in the proper record set. */ rec_rset_t rset = rec_db_get_rset_by_type (db, type); if (rset) { rec_record_set_container (record, rset); /* Add auto-set fields required by this record set, unless the addition of auto-fields is disabled by the user. */ if (!(flags & REC_F_NOAUTO)) { if (!rec_rset_add_auto_fields (rset, record)) /* Out of memory. */ return false; } #if defined REC_CRYPT_SUPPORT /* Encrypt confidential fields if a password was provided. */ if (password) { if (!rec_encrypt_record (rset, record, password)) /* Out of memory. */ return false; } #endif if (rec_rset_num_records (rset) == 0) { /* The rset is empty => Insert the new record just after the relative position of the record descriptor. */ rec_mset_insert_at (rec_rset_mset (rset), MSET_RECORD, (void *) record, rec_rset_descriptor_pos (rset)); } else { /* Insert the new record after the last record in the set. */ rec_mset_t mset = rec_rset_mset (rset); rec_record_t last_record = (rec_record_t) rec_mset_get_at (mset, MSET_RECORD, rec_rset_num_records (rset) - 1); if (!rec_mset_insert_after (mset, MSET_RECORD, (void *) record, rec_mset_search (mset, (void *) last_record))) /* Out of memory. */ return NULL; } } else { /* Create a new type and insert the record there. */ rset = rec_rset_new (); if (!rset) /* Out of memory. */ return false; rec_rset_set_type (rset, type); rec_record_set_container (record, rset); if (!rec_mset_append (rec_rset_mset (rset), MSET_RECORD, (void *) record, MSET_ANY)) /* Out of memory. */ return false; if (type) rec_db_insert_rset (db, rset, rec_db_size (db)); else /* The default rset should always be placed in the beginning of the db. */ rec_db_insert_rset (db, rset, 0); } } return true; } bool rec_db_delete (rec_db_t db, const char *type, size_t *index, rec_sex_t sex, const char *fast_string, size_t random, int flags) { /* Get the selected record set. If the user did not specify a type, the default record set does not exist, and the database contains only one record set, then select it. */ rec_rset_t rset = rec_db_get_rset_by_type (db, type); if (!type && !rset && (rec_db_size (db) == 1)) rset = rec_db_get_rset (db, 0); /* Don't process empty record sets. */ if (rec_rset_num_records (rset) == 0) return true; /* If the user requested to delete random records then calculate them now for this record set. */ if (random > 0) { rec_db_add_random_indexes (&index, random, rec_rset_num_records (rset)); if (!index) /* Out of memory. */ return false; } /* Iterate on the records, deleting or commenting out the selected ones. */ { rec_record_t record = NULL; rec_mset_elem_t elem; size_t num_rec = -1; rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &record, &elem)) { num_rec++; if (!rec_db_record_selected_p (num_rec, record, index, sex, fast_string, flags & REC_F_ICASE)) continue; if (flags & REC_F_COMMENT_OUT) { /* Replace the record with a comment in the current element. */ rec_comment_t comment = rec_record_to_comment (record); if (!comment) /* Out of memory. */ return false; rec_record_destroy (record); rec_mset_elem_set_data (elem, (void *) comment); rec_mset_elem_set_type (elem, MSET_COMMENT); } else /* Remove the physical record from the record set and dispose it. */ rec_mset_remove_elem (rec_rset_mset (rset), elem); } rec_mset_iterator_free (&iter); } return true; } bool rec_db_set (rec_db_t db, const char *type, size_t *index, rec_sex_t sex, const char *fast_string, size_t random, rec_fex_t fex, int action, const char *action_arg, int flags) { /* Get the selected record set. If the user did not specify a type, the default record set does not exist, and the database contains only one record set, then select it. */ rec_rset_t rset = rec_db_get_rset_by_type (db, type); if (!type && !rset && (rec_db_size (db) == 1)) rset = rec_db_get_rset (db, 0); /* Don't process empty record sets. */ if (rec_rset_num_records (rset) == 0) return true; /* If the user requested to manipulate random records then calculate them now for this record set. */ if (random > 0) { rec_db_add_random_indexes (&index, random, rec_rset_num_records (rset)); if (!index) /* Out of memory. */ return false; } /* Iterate on the records, operating on the selected ones. */ { rec_record_t record = NULL; size_t num_rec = -1; rec_mset_iterator_t iter = rec_mset_iterator (rec_rset_mset (rset)); bool descriptor_renamed = false; while (rec_mset_iterator_next (&iter, MSET_RECORD, (const void **) &record, NULL)) { num_rec++; if (!rec_db_record_selected_p (num_rec, record, index, sex, fast_string, flags & REC_F_ICASE)) continue; switch (action) { case REC_SET_ACT_RENAME: { /* If the operation is applied to all records of a given type (or default) then change the record descriptor as well. But make sure to do it just once! */ bool rename_descriptor = false; if (!descriptor_renamed && (sex == NULL) && (index == NULL) && (random == 0) && (fast_string == NULL)) { rename_descriptor = true; descriptor_renamed = true; } if (!rec_db_set_act_rename (rset, record, fex, rename_descriptor, action_arg)) /* Out of memory. */ return false; break; } case REC_SET_ACT_SET: { if (!rec_db_set_act_set (rset, record, fex, false, action_arg)) /* Out of memory. */ return false; break; } case REC_SET_ACT_ADD: { if (!rec_db_set_act_add (rset, record, fex, action_arg)) /* Out of memory. */ return false; break; } case REC_SET_ACT_SETADD: { if (!rec_db_set_act_set (rset, record, fex, true, action_arg)) /* Out of memory. */ return false; break; } case REC_SET_ACT_DELETE: { if (!rec_db_set_act_delete (rset, record, fex, false)) /* Out of memory. */ return false; break; } case REC_SET_ACT_COMMENT: { if (!rec_db_set_act_delete (rset, record, fex, true)) /* Out of memory. */ return false; break; } default: /* Ignore an invalid action. */ return true; } } rec_mset_iterator_free (&iter); } return true; } rec_aggregate_reg_t rec_db_aggregates (rec_db_t db) { return db->aggregates; } �������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������recutils-1.9/maint.mk�������������������������������������������������������������������������������0000644�0000000�0000000�00000203760�14226564453�011570� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������# -*-Makefile-*- # This Makefile fragment tries to be general-purpose enough to be # used by many projects via the gnulib maintainer-makefile module. ## Copyright (C) 2001-2022 Free Software Foundation, Inc. ## ## This program is free software: you can redistribute it and/or modify ## it under the terms of the GNU General Public License as published by ## the Free Software Foundation, either version 3 of the License, or ## (at your option) any later version. ## ## This program is distributed in the hope that it will be useful, ## but WITHOUT ANY WARRANTY; without even the implied warranty of ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ## GNU General Public License for more details. ## ## You should have received a copy of the GNU General Public License ## along with this program. If not, see <https://www.gnu.org/licenses/>. # This is reported not to work with make-3.79.1 # ME := $(word $(words $(MAKEFILE_LIST)),$(MAKEFILE_LIST)) ME := maint.mk # These variables ought to be defined through the configure.ac section # of the module description. But some packages import this file directly, # ignoring the module description. AWK ?= awk GREP ?= grep SED ?= sed # Helper variables. _empty = _sp = $(_empty) $(_empty) # _equal,S1,S2 # ------------ # If S1 == S2, return S1, otherwise the empty string. _equal = $(and $(findstring $(1),$(2)),$(findstring $(2),$(1))) # member-check,VARIABLE,VALID-VALUES # ---------------------------------- # Check that $(VARIABLE) is in the space-separated list of VALID-VALUES, and # return it. Die otherwise. member-check = \ $(strip \ $(if $($(1)), \ $(if $(findstring $(_sp),$($(1))), \ $(error invalid $(1): '$($(1))', expected $(2)), \ $(or $(findstring $(_sp)$($(1))$(_sp),$(_sp)$(2)$(_sp)), \ $(error invalid $(1): '$($(1))', expected $(2)))), \ $(error $(1) undefined))) # Do not save the original name or timestamp in the .tar.gz file. # Use --rsyncable if available. gzip_rsyncable := \ $(shell gzip --help 2>/dev/null|$(GREP) rsyncable >/dev/null \ && printf %s --rsyncable) GZIP_ENV = '--no-name --best $(gzip_rsyncable)' GIT = git VC = $(GIT) VC_LIST = $(srcdir)/$(_build-aux)/vc-list-files -C $(srcdir) # You can override this variable in cfg.mk if your gnulib submodule lives # in a different location. gnulib_dir ?= $(shell if test -f $(srcdir)/gnulib/gnulib-tool; then \ echo $(srcdir)/gnulib; \ else \ echo ${GNULIB_SRCDIR}; \ fi) # You can override this variable in cfg.mk to set your own regexp # matching files to ignore. VC_LIST_ALWAYS_EXCLUDE_REGEX ?= ^$$ # This is to preprocess robustly the output of $(VC_LIST), so that even # when $(srcdir) is a pathological name like "....", the leading sed command # removes only the intended prefix. _dot_escaped_srcdir = $(subst .,\.,$(srcdir)) # Post-process $(VC_LIST) output, prepending $(srcdir)/, but only # when $(srcdir) is not ".". ifeq ($(srcdir),.) _prepend_srcdir_prefix = else _prepend_srcdir_prefix = | $(SED) 's|^|$(srcdir)/|' endif # In order to be able to consistently filter "."-relative names, # (i.e., with no $(srcdir) prefix), this definition is careful to # remove any $(srcdir) prefix, and to restore what it removes. _sc_excl = \ $(or $(exclude_file_name_regexp--$@),^$$) VC_LIST_EXCEPT = \ $(VC_LIST) | $(SED) 's|^$(_dot_escaped_srcdir)/||' \ | if test -f $(srcdir)/.x-$@; then $(GREP) -vEf $(srcdir)/.x-$@; \ else $(GREP) -Ev -e "$${VC_LIST_EXCEPT_DEFAULT-ChangeLog}"; fi \ | $(GREP) -Ev -e '($(VC_LIST_ALWAYS_EXCLUDE_REGEX)|$(_sc_excl))' \ $(_prepend_srcdir_prefix) ifeq ($(origin prev_version_file), undefined) prev_version_file = $(srcdir)/.prev-version endif PREV_VERSION := $(shell cat $(prev_version_file) 2>/dev/null) VERSION_REGEXP = $(subst .,\.,$(VERSION)) PREV_VERSION_REGEXP = $(subst .,\.,$(PREV_VERSION)) ifeq ($(VC),$(GIT)) this-vc-tag = v$(VERSION) this-vc-tag-regexp = v$(VERSION_REGEXP) else tag-package = $(shell echo "$(PACKAGE)" | tr '[:lower:]' '[:upper:]') tag-this-version = $(subst .,_,$(VERSION)) this-vc-tag = $(tag-package)-$(tag-this-version) this-vc-tag-regexp = $(this-vc-tag) endif my_distdir = $(PACKAGE)-$(VERSION) # Old releases are stored here. release_archive_dir ?= ../release # If RELEASE_TYPE is undefined, but RELEASE is, use its second word. # But overwrite VERSION. ifdef RELEASE VERSION := $(word 1, $(RELEASE)) RELEASE_TYPE ?= $(word 2, $(RELEASE)) endif # Validate and return $(RELEASE_TYPE), or die. RELEASE_TYPES = alpha beta stable release-type = $(call member-check,RELEASE_TYPE,$(RELEASE_TYPES)) # Override gnu_rel_host and url_dir_list in cfg.mk if these are not right. # Use alpha.gnu.org for alpha and beta releases. # Use ftp.gnu.org for stable releases. gnu_ftp_host-alpha = alpha.gnu.org gnu_ftp_host-beta = alpha.gnu.org gnu_ftp_host-stable = ftp.gnu.org gnu_rel_host ?= $(gnu_ftp_host-$(release-type)) url_dir_list ?= $(if $(call _equal,$(gnu_rel_host),ftp.gnu.org), \ https://ftpmirror.gnu.org/$(PACKAGE), \ https://$(gnu_rel_host)/gnu/$(PACKAGE)) # Override this in cfg.mk if you are using a different format in your # NEWS file. today = $(shell date +%Y-%m-%d) # Select which lines of NEWS are searched for $(news-check-regexp). # This is a sed line number spec. The default says that we search # lines 1..10 of NEWS for $(news-check-regexp). # If you want to search only line 3 or only lines 20-22, use "3" or "20,22". news-check-lines-spec ?= 1,10 news-check-regexp ?= '^\*.* $(VERSION_REGEXP) \($(today)\)' # Prevent programs like 'sort' from considering distinct strings to be equal. # Doing it here saves us from having to set LC_ALL elsewhere in this file. export LC_ALL = C ## --------------- ## ## Sanity checks. ## ## --------------- ## ifneq ($(_gl-Makefile),) _cfg_mk := $(wildcard $(srcdir)/cfg.mk) # Collect the names of rules starting with 'sc_'. syntax-check-rules := $(sort $(shell env LC_ALL=C $(SED) -n \ 's/^\(sc_[a-zA-Z0-9_-]*\):.*/\1/p' $(srcdir)/$(ME) $(_cfg_mk))) .PHONY: $(syntax-check-rules) ifeq ($(shell $(VC_LIST) >/dev/null 2>&1; echo $$?),0) local-checks-available += $(syntax-check-rules) else local-checks-available += no-vc-detected no-vc-detected: @echo "No version control files detected; skipping syntax check" endif .PHONY: $(local-checks-available) # Arrange to print the name of each syntax-checking rule just before running it. $(syntax-check-rules): %: %.m sc_m_rules_ = $(patsubst %, %.m, $(syntax-check-rules)) .PHONY: $(sc_m_rules_) $(sc_m_rules_): @echo $(patsubst sc_%.m, %, $@) @date +%s.%N > .sc-start-$(basename $@) # Compute and print the elapsed time for each syntax-check rule. sc_z_rules_ = $(patsubst %, %.z, $(syntax-check-rules)) .PHONY: $(sc_z_rules_) $(sc_z_rules_): %.z: % @end=$$(date +%s.%N); \ start=$$(cat .sc-start-$*); \ rm -f .sc-start-$*; \ $(AWK) -v s=$$start -v e=$$end \ 'END {printf "%.2f $(patsubst sc_%,%,$*)\n", e - s}' < /dev/null # The patsubst here is to replace each sc_% rule with its sc_%.z wrapper # that computes and prints elapsed time. local-check := \ $(patsubst sc_%, sc_%.z, \ $(filter-out $(local-checks-to-skip), $(local-checks-available))) syntax-check: $(local-check) endif # _sc_search_regexp # # This macro searches for a given construct in the selected files and # then takes some action. # # Parameters (shell variables): # # prohibit | require # # Regular expression (ERE) denoting either a forbidden construct # or a required construct. Those arguments are exclusive. # # exclude # # Regular expression (ERE) denoting lines to ignore that matched # a prohibit construct. For example, this can be used to exclude # comments that mention why the nearby code uses an alternative # construct instead of the simpler prohibited construct. # # in_vc_files | in_files # # grep-E-style regexp selecting the files to check. For in_vc_files, # the regexp is used to select matching files from the list of all # version-controlled files; for in_files, it's from the names printed # by "find $(srcdir)". When neither is specified, use all files that # are under version control. # # containing | non_containing # # Select the files (non) containing strings matching this regexp. # If both arguments are specified then CONTAINING takes # precedence. # # with_grep_options # # Extra options for grep. # # ignore_case # # Ignore case. # # halt # # Message to display before to halting execution. # # Finally, you may exempt files based on an ERE matching file names. # For example, to exempt from the sc_space_tab check all files with the # .diff suffix, set this Make variable: # # exclude_file_name_regexp--sc_space_tab = \.diff$ # # Note that while this functionality is mostly inherited via VC_LIST_EXCEPT, # when filtering by name via in_files, we explicitly filter out matching # names here as well. # Initialize each, so that envvar settings cannot interfere. export require = export prohibit = export exclude = export in_vc_files = export in_files = export containing = export non_containing = export halt = export with_grep_options = # By default, _sc_search_regexp does not ignore case. export ignore_case = _ignore_case = $$(test -n "$$ignore_case" && printf %s -i || :) define _sc_say_and_exit dummy=; : so we do not need a semicolon before each use; \ { printf '%s\n' "$(ME): $$msg" 1>&2; exit 1; }; endef define _sc_search_regexp dummy=; : so we do not need a semicolon before each use; \ \ : Check arguments; \ test -n "$$prohibit" && test -n "$$require" \ && { msg='Cannot specify both prohibit and require' \ $(_sc_say_and_exit) } || :; \ test -z "$$prohibit" && test -z "$$require" \ && { msg='Should specify either prohibit or require' \ $(_sc_say_and_exit) } || :; \ test -z "$$prohibit" && test -n "$$exclude" \ && { msg='Use of exclude requires a prohibit pattern' \ $(_sc_say_and_exit) } || :; \ test -n "$$in_vc_files" && test -n "$$in_files" \ && { msg='Cannot specify both in_vc_files and in_files' \ $(_sc_say_and_exit) } || :; \ test "x$$halt" != x \ || { msg='halt not defined' $(_sc_say_and_exit) }; \ \ : Filter by file name; \ if test -n "$$in_files"; then \ files=$$(find $(srcdir) | $(GREP) -E "$$in_files" \ | $(GREP) -Ev '$(_sc_excl)'); \ else \ files=$$($(VC_LIST_EXCEPT)); \ if test -n "$$in_vc_files"; then \ files=$$(echo "$$files" | $(GREP) -E "$$in_vc_files"); \ fi; \ fi; \ \ : Filter by content; \ test -n "$$files" \ && test -n "$$containing" \ && { files=$$(echo "$$files" | xargs $(GREP) -l "$$containing"); } \ || :; \ test -n "$$files" \ && test -n "$$non_containing" \ && { files=$$(echo "$$files" | xargs $(GREP) -vl "$$non_containing"); } \ || :; \ \ : Check for the construct; \ if test -n "$$files"; then \ if test -n "$$prohibit"; then \ echo "$$files" \ | xargs $(GREP) $$with_grep_options $(_ignore_case) -nE \ "$$prohibit" /dev/null \ | $(GREP) -vE "$${exclude:-^$$}" \ && { msg="$$halt" $(_sc_say_and_exit) } \ || :; \ else \ echo "$$files" \ | xargs \ $(GREP) $$with_grep_options $(_ignore_case) -LE "$$require" \ | $(GREP) . \ && { msg="$$halt" $(_sc_say_and_exit) } \ || :; \ fi \ else :; \ fi || :; endef sc_avoid_if_before_free: @$(VC_LIST_EXCEPT) \ | $(GREP) -v useless-if-before-free \ | xargs \ $(srcdir)/$(_build-aux)/useless-if-before-free \ $(useless_free_options) \ && { printf '$(ME): found useless "if"' \ ' before "free" above\n' 1>&2; \ exit 1; } \ || : sc_cast_of_argument_to_free: @prohibit='\<free *\( *\(' halt="don't cast free argument" \ $(_sc_search_regexp) sc_cast_of_x_alloc_return_value: @prohibit='\*\) *x(m|c|re)alloc\>' \ halt="don't cast x*alloc return value" \ $(_sc_search_regexp) sc_cast_of_alloca_return_value: @prohibit='\*\) *alloca\>' \ halt="don't cast alloca return value" \ $(_sc_search_regexp) sc_space_tab: @prohibit='[ ] ' \ halt='found SPACE-TAB sequence; remove the SPACE' \ $(_sc_search_regexp) # Don't use *scanf or the old ato* functions in "real" code. # They provide no error checking mechanism. # Instead, use strto* functions. sc_prohibit_atoi_atof: @prohibit='\<([fs]?scanf|ato([filq]|ll)) *\(' \ halt='do not use *scan''f, ato''f, ato''i, ato''l, ato''ll or ato''q' \ $(_sc_search_regexp) # Use STREQ rather than comparing strcmp == 0, or != 0. sp_ = strcmp *\(.+\) sc_prohibit_strcmp: @prohibit='! *strcmp *\(|\<$(sp_) *[!=]=|[!=]= *$(sp_)' \ exclude='# *define STRN?EQ\(' \ halt='replace strcmp calls above with STREQ/STRNEQ' \ $(_sc_search_regexp) # Really. You don't want to use this function. # It may fail to NUL-terminate the destination, # and always NUL-pads out to the specified length. sc_prohibit_strncpy: @prohibit='\<strncpy *\(' \ halt='do not use strncpy, period' \ $(_sc_search_regexp) # Pass EXIT_*, not number, to usage, exit, and error (when exiting) # Convert all uses automatically, via these two commands: # git grep -l '\<exit *(1)' \ # | grep -vEf .x-sc_prohibit_magic_number_exit \ # | xargs --no-run-if-empty \ # perl -pi -e 's/(^|[^.])\b(exit ?)\(1\)/$1$2(EXIT_FAILURE)/' # git grep -l '\<exit *(0)' \ # | grep -vEf .x-sc_prohibit_magic_number_exit \ # | xargs --no-run-if-empty \ # perl -pi -e 's/(^|[^.])\b(exit ?)\(0\)/$1$2(EXIT_SUCCESS)/' sc_prohibit_magic_number_exit: @prohibit='(^|[^.])\<(usage|exit|error) ?\(-?[0-9]+[,)]' \ exclude='exit \(77\)|error ?\(((0|77),|[^,]*)' \ halt='use EXIT_* values rather than magic number' \ $(_sc_search_regexp) # Check that we don't use $< in non-implicit Makefile rules. # # To find the Makefiles, trace AC_CONFIG_FILES. Using VC_LIST would # miss the Makefiles that are not under VC control (e.g., symlinks # installed for gettext). "Parsing" (recursive) uses of SUBDIRS seems # too delicate. # # Use GNU Make's --print-data-base to normalize the rules into some # easy to parse format: they are separated by two \n. Look for the # "section" about non-pattern rules (marked with "# Files") inside # which there are still the POSIX Make like implicit rules (".c.o"). sc_prohibit_gnu_make_extensions_awk_ = \ BEGIN { \ RS = "\n\n"; \ in_rules = 0; \ } \ /^\# Files/ { \ in_rules = 1; \ } \ /\$$</ && in_rules && $$0 !~ /^(.*\n)*\.\w+(\.\w+)?:/ { \ print "Error: " file ": $$< in a non implicit rule\n" $$0; \ status = 1; \ } \ END { \ exit status; \ } sc_prohibit_gnu_make_extensions: @if $(AWK) --version | grep GNU >/dev/null 2>&1; then \ (cd $(srcdir) && autoconf --trace AC_CONFIG_FILES:'$$1') | \ tr ' ' '\n' | \ $(SED) -ne '/Makefile/{s/\.in$$//;p;}' | \ while read m; do \ $(MAKE) -qp -f $$m .DUMMY-TARGET 2>/dev/null | \ $(AWK) -v file=$$m -e '$($@_awk_)' || exit 1; \ done; \ fi # Using EXIT_SUCCESS as the first argument to error is misleading, # since when that parameter is 0, error does not exit. Use '0' instead. sc_error_exit_success: @prohibit='error *\(EXIT_SUCCESS,' \ in_vc_files='\.[chly]$$' \ halt='found error (EXIT_SUCCESS' \ $(_sc_search_regexp) # "FATAL:" should be fully upper-cased in error messages # "WARNING:" should be fully upper-cased, or fully lower-cased sc_error_message_warn_fatal: @$(VC_LIST_EXCEPT) \ | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \ | $(GREP) -E '"Warning|"Fatal|"fatal' \ && { echo '$(ME): use FATAL, WARNING or warning' 1>&2; \ exit 1; } \ || : # Error messages should not start with a capital letter sc_error_message_uppercase: @$(VC_LIST_EXCEPT) \ | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \ | $(GREP) -E '"[A-Z]' \ | $(GREP) -vE '"FATAL|"WARNING|"Java|"C#|"PRI' \ && { echo '$(ME): found capitalized error message' 1>&2; \ exit 1; } \ || : # Error messages should not end with a period sc_error_message_period: @$(VC_LIST_EXCEPT) \ | xargs $(GREP) -nEA2 '[^rp]error *\(' /dev/null \ | $(GREP) -E '[^."]\."' \ && { echo '$(ME): found error message ending in period' 1>&2; \ exit 1; } \ || : sc_file_system: @prohibit=file''system \ exclude='/proc/filesystems' \ ignore_case=1 \ halt='found use of "file''system"; spell it "file system"' \ $(_sc_search_regexp) # Don't use cpp tests of this symbol. All code assumes config.h is included. sc_prohibit_have_config_h: @prohibit='^# *if.*HAVE''_CONFIG_H' \ halt='found use of HAVE''_CONFIG_H; remove' \ $(_sc_search_regexp) # Nearly all .c files must include <config.h>. However, we also permit this # via inclusion of a package-specific header, if cfg.mk specified one. # config_h_header must be suitable for grep -E. config_h_header ?= <config\.h> sc_require_config_h: @require='^# *include $(config_h_header)' \ in_vc_files='\.c$$' \ halt='the above files do not include <config.h>' \ $(_sc_search_regexp) # Print each file name for which the first #include does not match # $(config_h_header). Like grep -m 1, this only looks at the first match. perl_config_h_first_ = \ -e 'BEGIN {$$ret = 0}' \ -e 'if (/^\# *include\b/) {' \ -e ' if (not m{^\# *include $(config_h_header)}) {' \ -e ' print "$$ARGV\n";' \ -e ' $$ret = 1;' \ -e ' }' \ -e ' \# Move on to next file after first include' \ -e ' close ARGV;' \ -e '}' \ -e 'END {exit $$ret}' # You must include <config.h> before including any other header file. # This can possibly be via a package-specific header, if given by cfg.mk. sc_require_config_h_first: @if $(VC_LIST_EXCEPT) | $(GREP) '\.c$$' > /dev/null; then \ files=$$($(VC_LIST_EXCEPT) | $(GREP) '\.c$$') && \ perl -n $(perl_config_h_first_) $$files || \ { echo '$(ME): the above files include some other header' \ 'before <config.h>' 1>&2; exit 1; } || :; \ else :; \ fi sc_prohibit_HAVE_MBRTOWC: @prohibit='\bHAVE_MBRTOWC\b' \ halt="do not use $$prohibit; it is always defined" \ $(_sc_search_regexp) # To use this "command" macro, you must first define two shell variables: # h: the header name, with no enclosing <> or "" # re: a regular expression that matches IFF something provided by $h is used. define _sc_header_without_use dummy=; : so we do not need a semicolon before each use; \ h_esc=`echo '[<"]'"$$h"'[">]'|$(SED) 's/\./\\\\./g'`; \ if $(VC_LIST_EXCEPT) | $(GREP) '\.c$$' > /dev/null; then \ files=$$($(GREP) -l '^# *include '"$$h_esc" \ $$($(VC_LIST_EXCEPT) | $(GREP) '\.c$$')) && \ $(GREP) -LE "$$re" $$files | $(GREP) . && \ { echo "$(ME): the above files include $$h but don't use it" \ 1>&2; exit 1; } || :; \ else :; \ fi endef # Prohibit the inclusion of assert.h without an actual use of assert. sc_prohibit_assert_without_use: @h='assert.h' re='\<assert *\(' $(_sc_header_without_use) # Prohibit the inclusion of close-stream.h without an actual use. sc_prohibit_close_stream_without_use: @h='close-stream.h' re='\<close_stream *\(' $(_sc_header_without_use) # Prohibit the inclusion of getopt.h without an actual use. sc_prohibit_getopt_without_use: @h='getopt.h' re='\<getopt(_long)? *\(' $(_sc_header_without_use) # Don't include quotearg.h unless you use one of its functions. sc_prohibit_quotearg_without_use: @h='quotearg.h' re='\<quotearg(_[^ ]+)? *\(' $(_sc_header_without_use) # Don't include quote.h unless you use one of its functions. sc_prohibit_quote_without_use: @h='quote.h' re='\<quote((_n)? *\(|_quoting_options\>)' \ $(_sc_header_without_use) # Don't include this header unless you use one of its functions. sc_prohibit_long_options_without_use: @h='long-options.h' re='\<parse_(long_options|gnu_standard_options_only) *\(' \ $(_sc_header_without_use) # Don't include this header unless you use one of its functions. sc_prohibit_inttostr_without_use: @h='inttostr.h' re='\<(off|[iu]max|uint)tostr *\(' \ $(_sc_header_without_use) # Don't include this header unless you use one of its functions. sc_prohibit_ignore_value_without_use: @h='ignore-value.h' re='\<ignore_(value|ptr) *\(' \ $(_sc_header_without_use) # Don't include this header unless you use one of its functions. sc_prohibit_error_without_use: @h='error.h' \ re='\<error(_at_line|_print_progname|_one_per_line|_message_count)? *\('\ $(_sc_header_without_use) # Don't include xalloc.h unless you use one of its functions. # Consider these symbols: # perl -lne '/^# *define (\w+)\(/ and print $1' lib/xalloc.h|grep -v '^__'; # perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/xalloc.h # Divide into two sets on case, and filter each through this: # | sort | perl -MRegexp::Assemble -le \ # 'print Regexp::Assemble->new(file => "/dev/stdin")->as_string'|sed 's/\?://g' # Note this was produced by the above: # _xa1 = \ #x(((2n?)?re|c(har)?|n(re|m)|z)alloc|alloc_(oversized|die)|m(alloc|emdup)|strdup) # But we can do better, in at least two ways: # 1) take advantage of two "dup"-suffixed strings: # x(((2n?)?re|c(har)?|n(re|m)|[mz])alloc|alloc_(oversized|die)|(mem|str)dup) # 2) notice that "c(har)?|[mz]" is equivalent to the shorter and more readable # "char|[cmz]" # x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup) _xa1 = x(((2n?)?re|char|n(re|m)|[cmz])alloc|alloc_(oversized|die)|(mem|str)dup) _xa2 = X([CZ]|N?M)ALLOC sc_prohibit_xalloc_without_use: @h='xalloc.h' \ re='\<($(_xa1)|$(_xa2)) *\('\ $(_sc_header_without_use) # Extract function names: # perl -lne '/^(?:extern )?(?:void|char) \*?(\w+) *\(/ and print $1' lib/hash.h _hash_re = \ clear|delete|free|get_(first|next)|insert|lookup|print_statistics|reset_tuning _hash_fn = \<($(_hash_re)) *\( _hash_struct = (struct )?\<[Hh]ash_(table|tuning)\> sc_prohibit_hash_without_use: @h='hash.h' \ re='$(_hash_fn)|$(_hash_struct)'\ $(_sc_header_without_use) sc_prohibit_cloexec_without_use: @h='cloexec.h' re='\<(set_cloexec_flag|dup_cloexec) *\(' \ $(_sc_header_without_use) sc_prohibit_posixver_without_use: @h='posixver.h' re='\<posix2_version *\(' $(_sc_header_without_use) sc_prohibit_same_without_use: @h='same.h' re='\<same_name(at)? *\(' $(_sc_header_without_use) sc_prohibit_hash_pjw_without_use: @h='hash-pjw.h' \ re='\<hash_pjw\>' \ $(_sc_header_without_use) sc_prohibit_safe_read_without_use: @h='safe-read.h' re='(\<SAFE_READ_ERROR\>|\<safe_read *\()' \ $(_sc_header_without_use) sc_prohibit_argmatch_without_use: @h='argmatch.h' \ re='(\<(ARGMATCH_DEFINE_GROUP|ARRAY_CARDINALITY|X?ARGMATCH(|_TO_ARGUMENT|_VERIFY))\>|\<(invalid_arg|argmatch(_exit_fn|_(in)?valid)?) *\()' \ $(_sc_header_without_use) sc_prohibit_canonicalize_without_use: @h='canonicalize.h' \ re='CAN_(EXISTING|ALL_BUT_LAST|MISSING)|canonicalize_(mode_t|filename_mode|file_name)' \ $(_sc_header_without_use) sc_prohibit_root_dev_ino_without_use: @h='root-dev-ino.h' \ re='(\<ROOT_DEV_INO_(CHECK|WARN)\>|\<get_root_dev_ino *\()' \ $(_sc_header_without_use) sc_prohibit_openat_without_use: @h='openat.h' \ re='\<(openat_(permissive|needs_fchdir|(save|restore)_fail)|l?(stat|ch(own|mod))at|(euid)?accessat|(FCHMOD|FCHOWN|STAT)AT_INLINE)\>' \ $(_sc_header_without_use) # Prohibit the inclusion of c-ctype.h without an actual use. ctype_re = isalnum|isalpha|isascii|isblank|iscntrl|isdigit|isgraph|islower\ |isprint|ispunct|isspace|isupper|isxdigit|tolower|toupper sc_prohibit_c_ctype_without_use: @h='c-ctype.h' re='\<c_($(ctype_re)) *\(' \ $(_sc_header_without_use) # The following list was generated by running: # man signal.h|col -b|perl -ne '/bsd_signal.*;/.../sigwaitinfo.*;/ and print' \ # | perl -lne '/^\s+(?:int|void).*?(\w+).*/ and print $1' | fmt _sig_functions = \ bsd_signal kill killpg pthread_kill pthread_sigmask raise sigaction \ sigaddset sigaltstack sigdelset sigemptyset sigfillset sighold sigignore \ siginterrupt sigismember signal sigpause sigpending sigprocmask sigqueue \ sigrelse sigset sigsuspend sigtimedwait sigwait sigwaitinfo _sig_function_re = $(subst $(_sp),|,$(strip $(_sig_functions))) # The following were extracted from "man signal.h" manually. _sig_types_and_consts = \ MINSIGSTKSZ SA_NOCLDSTOP SA_NOCLDWAIT SA_NODEFER SA_ONSTACK \ SA_RESETHAND SA_RESTART SA_SIGINFO SIGEV_NONE SIGEV_SIGNAL \ SIGEV_THREAD SIGSTKSZ SIG_BLOCK SIG_SETMASK SIG_UNBLOCK SS_DISABLE \ SS_ONSTACK mcontext_t pid_t sig_atomic_t sigevent siginfo_t sigset_t \ sigstack sigval stack_t ucontext_t # generated via this: # perl -lne '/^#ifdef (SIG\w+)/ and print $1' lib/sig2str.c|sort -u|fmt -70 _sig_names = \ SIGABRT SIGALRM SIGALRM1 SIGBUS SIGCANCEL SIGCHLD SIGCLD SIGCONT \ SIGDANGER SIGDIL SIGEMT SIGFPE SIGFREEZE SIGGRANT SIGHUP SIGILL \ SIGINFO SIGINT SIGIO SIGIOT SIGKAP SIGKILL SIGKILLTHR SIGLOST SIGLWP \ SIGMIGRATE SIGMSG SIGPHONE SIGPIPE SIGPOLL SIGPRE SIGPROF SIGPWR \ SIGQUIT SIGRETRACT SIGSAK SIGSEGV SIGSOUND SIGSTKFLT SIGSTOP SIGSYS \ SIGTERM SIGTHAW SIGTRAP SIGTSTP SIGTTIN SIGTTOU SIGURG SIGUSR1 \ SIGUSR2 SIGVIRT SIGVTALRM SIGWAITING SIGWINCH SIGWIND SIGWINDOW \ SIGXCPU SIGXFSZ _sig_syms_re = $(subst $(_sp),|,$(strip $(_sig_names) $(_sig_types_and_consts))) # Prohibit the inclusion of signal.h without an actual use. sc_prohibit_signal_without_use: @h='signal.h' \ re='\<($(_sig_function_re)) *\(|\<($(_sig_syms_re))\>' \ $(_sc_header_without_use) # Don't include stdio--.h unless you use one of its functions. sc_prohibit_stdio--_without_use: @h='stdio--.h' re='\<((f(re)?|p)open|tmpfile) *\(' \ $(_sc_header_without_use) # Don't include stdio-safer.h unless you use one of its functions. sc_prohibit_stdio-safer_without_use: @h='stdio-safer.h' re='\<((f(re)?|p)open|tmpfile)_safer *\(' \ $(_sc_header_without_use) # Prohibit the inclusion of strings.h without a sensible use. # Using the likes of bcmp, bcopy, bzero, index or rindex is not sensible. sc_prohibit_strings_without_use: @h='strings.h' \ re='\<(strn?casecmp|ffs(ll)?)\>' \ $(_sc_header_without_use) # Extract the raw list of symbol names with this: gl_extract_define_simple = \ /^\# *define ([A-Z]\w+)\(/ and print $$1 # Filter out duplicates and convert to a space-separated list: _intprops_names = \ $(shell f=$(gnulib_dir)/lib/intprops.h; \ perl -lne '$(gl_extract_define_simple)' $$f | sort -u | tr '\n' ' ') # Remove trailing space and convert to a regular expression: _intprops_syms_re = $(subst $(_sp),|,$(strip $(_intprops_names))) # Prohibit the inclusion of intprops.h without an actual use. sc_prohibit_intprops_without_use: @h='intprops.h' \ re='\<($(_intprops_syms_re)) *\(' \ $(_sc_header_without_use) _stddef_syms_re = NULL|offsetof|ptrdiff_t|size_t|wchar_t # Prohibit the inclusion of stddef.h without an actual use. sc_prohibit_stddef_without_use: @h='stddef.h' \ re='\<($(_stddef_syms_re))\>' \ $(_sc_header_without_use) _de1 = dirfd|(close|(fd)?open|read|rewind|seek|tell)dir(64)?(_r)? _de2 = (versionsort|struct dirent|getdirentries|alphasort|scandir(at)?)(64)? _de3 = MAXNAMLEN|DIR|ino_t|d_ino|d_fileno|d_namlen _dirent_syms_re = $(_de1)|$(_de2)|$(_de3) # Prohibit the inclusion of dirent.h without an actual use. sc_prohibit_dirent_without_use: @h='dirent.h' \ re='\<($(_dirent_syms_re))\>' \ $(_sc_header_without_use) # Prohibit the inclusion of verify.h without an actual use. sc_prohibit_verify_without_use: @h='verify.h' \ re='\<(verify(true|expr)?|assume|static_assert) *\(' \ $(_sc_header_without_use) # Don't include xfreopen.h unless you use one of its functions. sc_prohibit_xfreopen_without_use: @h='xfreopen.h' re='\<xfreopen *\(' $(_sc_header_without_use) sc_obsolete_symbols: @prohibit='\<(HAVE''_FCNTL_H|O''_NDELAY)\>' \ halt='do not use HAVE''_FCNTL_H or O'_NDELAY \ $(_sc_search_regexp) # FIXME: warn about definitions of EXIT_FAILURE, EXIT_SUCCESS, STREQ # Each nonempty ChangeLog line must start with a year number, or a TAB. sc_changelog: @prohibit='^[^12 ]' \ in_vc_files='^ChangeLog$$' \ halt='found unexpected prefix in a ChangeLog' \ $(_sc_search_regexp) # Ensure that each .c file containing a "main" function also # calls bindtextdomain. sc_bindtextdomain: @require='bindtextdomain *\(' \ in_vc_files='\.c$$' \ containing='\<main *(' \ halt='the above files do not call bindtextdomain' \ $(_sc_search_regexp) # Require that the final line of each test-lib.sh-using test be this one: # Exit $fail # Note: this test requires GNU grep's --label= option. Exit_witness_file ?= tests/test-lib.sh Exit_base := $(notdir $(Exit_witness_file)) sc_require_test_exit_idiom: @if test -f $(srcdir)/$(Exit_witness_file); then \ die=0; \ for i in $$($(GREP) -l -F 'srcdir/$(Exit_base)' \ $$($(VC_LIST) tests)); do \ tail -n1 $$i | $(GREP) '^Exit .' > /dev/null \ && : || { die=1; echo $$i; } \ done; \ test $$die = 1 && \ { echo 1>&2 '$(ME): the final line in each of the above is not:'; \ echo 1>&2 'Exit something'; \ exit 1; } || :; \ fi sc_trailing_blank: @prohibit='[ ]$$' \ halt='found trailing blank(s)' \ exclude='^Binary file .* matches$$' \ $(_sc_search_regexp) # Match lines like the following, but where there is only one space # between the options and the description: # -D, --all-repeated[=delimit-method] print all duplicate lines\n longopt_re = --[a-z][0-9A-Za-z-]*(\[?=[0-9A-Za-z-]*\]?)? sc_two_space_separator_in_usage: @prohibit='^ *(-[A-Za-z],)? $(longopt_re) [^ ].*\\$$' \ halt='help2man requires at least two spaces between an option and its description'\ $(_sc_search_regexp) # A regexp matching function names like "error" that may be used # to emit translatable messages. _gl_translatable_diag_func_re ?= error # Look for diagnostics that aren't marked for translation. # This won't find any for which error's format string is on a separate line. sc_unmarked_diagnostics: @prohibit='\<$(_gl_translatable_diag_func_re) *\([^"]*"[^"]*[a-z]{3}' \ exclude='(_|ngettext ?)\(' \ halt='found unmarked diagnostic(s)' \ $(_sc_search_regexp) # Avoid useless parentheses like those in this example: # #if defined (SYMBOL) || defined (SYM2) sc_useless_cpp_parens: @prohibit='^# *if .*defined *\(' \ halt='found useless parentheses in cpp directive' \ $(_sc_search_regexp) # List headers for which HAVE_HEADER_H is always true, assuming you are # using the appropriate gnulib module. CAUTION: for each "unnecessary" # #if HAVE_HEADER_H that you remove, be sure that your project explicitly # requires the gnulib module that guarantees the usability of that header. gl_assured_headers_ = \ cd $(gnulib_dir)/lib && echo *.in.h|$(SED) 's/\.in\.h//g' # Convert the list of names to upper case, and replace each space with "|". az_ = abcdefghijklmnopqrstuvwxyz AZ_ = ABCDEFGHIJKLMNOPQRSTUVWXYZ gl_header_upper_case_or_ = \ $$($(gl_assured_headers_) \ | tr $(az_)/.- $(AZ_)___ \ | tr -s ' ' '|' \ ) sc_prohibit_always_true_header_tests: @or=$(gl_header_upper_case_or_); \ re="HAVE_($$or)_H"; \ prohibit='\<'"$$re"'\>' \ halt=$$(printf '%s\n' \ 'do not test the above HAVE_<header>_H symbol(s);' \ ' with the corresponding gnulib module, they are always true') \ $(_sc_search_regexp) sc_prohibit_defined_have_decl_tests: @prohibit='(#[ ]*ifn?def|\<defined)\>[ (]+HAVE_DECL_' \ halt='HAVE_DECL macros are always defined' \ $(_sc_search_regexp) # ================================================================== gl_other_headers_ ?= \ intprops.h \ openat.h \ stat-macros.h # Perl -lne code to extract "significant" cpp-defined symbols from a # gnulib header file, eliminating a few common false-positives. # The exempted names below are defined only conditionally in gnulib, # and hence sometimes must/may be defined in application code. gl_extract_significant_defines_ = \ /^\# *define ([^_ (][^ (]*)(\s*\(|\s+\w+)/\ && $$2 !~ /(?:rpl_|_used_without_)/\ && $$1 !~ /^(?:NSIG|ENODATA)$$/\ && $$1 !~ /^(?:SA_RESETHAND|SA_RESTART)$$/\ and print $$1 # Create a list of regular expressions matching the names # of macros that are guaranteed to be defined by parts of gnulib. define def_sym_regex gen_h=$(gl_generated_headers_); \ (cd $(gnulib_dir)/lib; \ for f in *.in.h $(gl_other_headers_); do \ test -f $$f \ && perl -lne '$(gl_extract_significant_defines_)' $$f; \ done; \ ) | sort -u \ | $(SED) 's/^/^ *# *(define|undef) */;s/$$/\\>/' endef # Don't define macros that we already get from gnulib header files. sc_prohibit_always-defined_macros: @if test -d $(gnulib_dir); then \ case $$(echo all: | $(GREP) -l -f - Makefile) in Makefile);; *) \ echo '$(ME): skipping $@: you lack GNU grep' 1>&2; exit 0;; \ esac; \ regex=$$($(def_sym_regex)); export regex; \ $(VC_LIST_EXCEPT) \ | xargs sh -c 'echo $$regex | $(GREP) -E -f - "$$@"' \ dummy /dev/null \ && { printf '$(ME): define the above' \ ' via some gnulib .h file\n' 1>&2; \ exit 1; } \ || :; \ fi # ================================================================== # Prohibit checked in backup files. sc_prohibit_backup_files: @$(VC_LIST) | $(GREP) '~$$' && \ { echo '$(ME): found version controlled backup file' 1>&2; \ exit 1; } || : # Require the latest GPL. sc_GPL_version: @prohibit='either ''version [^3]' \ halt='GPL vN, N!=3' \ $(_sc_search_regexp) # Require the latest GFDL. Two regexp, since some .texi files end up # line wrapping between 'Free Documentation License,' and 'Version'. _GFDL_regexp = (Free ''Documentation.*Version 1\.[^3]|Version 1\.[^3] or any) sc_GFDL_version: @prohibit='$(_GFDL_regexp)' \ halt='GFDL vN, N!=3' \ $(_sc_search_regexp) # Don't use Texinfo's @acronym{}. # https://lists.gnu.org/r/bug-gnulib/2010-03/msg00321.html texinfo_suffix_re_ ?= \.(txi|texi(nfo)?)$$ sc_texinfo_acronym: @prohibit='@acronym\{' \ in_vc_files='$(texinfo_suffix_re_)' \ halt='found use of Texinfo @acronym{}' \ $(_sc_search_regexp) cvs_keywords = \ Author|Date|Header|Id|Name|Locker|Log|RCSfile|Revision|Source|State sc_prohibit_cvs_keyword: @prohibit='\$$($(cvs_keywords))\$$' \ halt='do not use CVS keyword expansion' \ $(_sc_search_regexp) # This Perl code is slightly obfuscated. Not only is each "$" doubled # because it's in a Makefile, but the $$c's are comments; we cannot # use "#" due to the way the script ends up concatenated onto one line. # It would be much more concise, and would produce better output (including # counts) if written as: # perl -ln -0777 -e '/\n(\n+)$/ and print "$ARGV: ".length $1' ... # but that would be far less efficient, reading the entire contents # of each file, rather than just the last two bytes of each. # In addition, while the code below detects both blank lines and a missing # newline at EOF, the above detects only the former. # # This is a perl script that is expected to be the single-quoted argument # to a command-line "-le". The remaining arguments are file names. # Print the name of each file that does not end in exactly one newline byte. # I.e., warn if there are blank lines (2 or more newlines), or if the # last byte is not a newline. However, currently we don't complain # about any file that contains exactly one byte. # Exit nonzero if at least one such file is found, otherwise, exit 0. # Warn about, but otherwise ignore open failure. Ignore seek/read failure. # # Use this if you want to remove trailing empty lines from selected files: # perl -pi -0777 -e 's/\n\n+$/\n/' files... # require_exactly_one_NL_at_EOF_ = \ foreach my $$f (@ARGV) \ { \ open F, "<", $$f or (warn "failed to open $$f: $$!\n"), next; \ my $$p = sysseek (F, -2, 2); \ my $$c = "seek failure probably means file has < 2 bytes; ignore"; \ my $$last_two_bytes; \ defined $$p and $$p = sysread F, $$last_two_bytes, 2; \ close F; \ $$c = "ignore read failure"; \ $$p && ($$last_two_bytes eq "\n\n" \ || substr ($$last_two_bytes,1) ne "\n") \ and (print $$f), $$fail=1; \ } \ END { exit defined $$fail } sc_prohibit_empty_lines_at_EOF: @$(VC_LIST_EXCEPT) \ | xargs perl -le '$(require_exactly_one_NL_at_EOF_)' \ || { echo '$(ME): empty line(s) or no newline at EOF' 1>&2; \ exit 1; } \ || : # Make sure we don't use st_blocks. Use ST_NBLOCKS instead. # This is a bit of a kludge, since it prevents use of the string # even in comments, but for now it does the job with no false positives. sc_prohibit_stat_st_blocks: @prohibit='[.>]st_blocks' \ halt='do not use st_blocks; use ST_NBLOCKS' \ $(_sc_search_regexp) # Make sure we don't define any S_IS* macros in src/*.c files. # They're already defined via gnulib's sys/stat.h replacement. sc_prohibit_S_IS_definition: @prohibit='^ *# *define *S_IS' \ halt='do not define S_IS* macros; include <sys/stat.h>' \ $(_sc_search_regexp) # Perl block to convert a match to FILE_NAME:LINENO:TEST, # that is shared by two definitions below. perl_filename_lineno_text_ = \ -e ' {' \ -e ' $$n = ($$` =~ tr/\n/\n/ + 1);' \ -e ' ($$v = $$&) =~ s/\n/\\n/g;' \ -e ' print "$$ARGV:$$n:$$v\n";' \ -e ' }' prohibit_doubled_words_ = \ the then in an on if is it but for or at and do to can # expand the regex before running the check to avoid using expensive captures prohibit_doubled_word_expanded_ = \ $(join $(prohibit_doubled_words_),$(addprefix \s+,$(prohibit_doubled_words_))) prohibit_doubled_word_RE_ ?= \ /\b(?:$(subst $(_sp),|,$(prohibit_doubled_word_expanded_)))\b/gims prohibit_doubled_word_ = \ -e 'while ($(prohibit_doubled_word_RE_))' \ $(perl_filename_lineno_text_) # Define this to a regular expression that matches # any filename:dd:match lines you want to ignore. # The default is to ignore no matches. ignore_doubled_word_match_RE_ ?= ^$$ sc_prohibit_doubled_word: @$(VC_LIST_EXCEPT) \ | xargs perl -n -0777 $(prohibit_doubled_word_) \ | $(GREP) -vE '$(ignore_doubled_word_match_RE_)' \ | $(GREP) . \ && { echo '$(ME): doubled words' 1>&2; exit 1; } \ || : # A regular expression matching undesirable combinations of words like # "can not"; this matches them even when the two words appear on different # lines, but not when there is an intervening delimiter like "#" or "*". # Similarly undesirable, "See @xref{...}", since an @xref should start # a sentence. Explicitly prohibit any prefix of "see" or "also". # Also prohibit a prefix matching "\w+ +". # @pxref gets the same see/also treatment and should be parenthesized; # presume it must *not* start a sentence. # POSIX spells it "timestamp" rather than "time\s+stamp", so we do, too. bad_xref_re_ ?= (?:[\w,:;] +|(?:see|also)\s+)\@xref\{ bad_pxref_re_ ?= (?:[.!?]|(?:see|also))\s+\@pxref\{ prohibit_undesirable_word_seq_RE_ ?= \ /(?:\bcan\s+not\b|\btime\s+stamps?\b|$(bad_xref_re_)|$(bad_pxref_re_))/gims prohibit_undesirable_word_seq_ = \ -e 'while ($(prohibit_undesirable_word_seq_RE_))' \ $(perl_filename_lineno_text_) # Define this to a regular expression that matches # any filename:dd:match lines you want to ignore. # The default is to ignore no matches. ignore_undesirable_word_sequence_RE_ ?= ^$$ sc_prohibit_undesirable_word_seq: @$(VC_LIST_EXCEPT) \ | xargs perl -n -0777 $(prohibit_undesirable_word_seq_) \ | $(GREP) -vE '$(ignore_undesirable_word_sequence_RE_)' \ | $(GREP) . \ && { echo '$(ME): undesirable word sequence' >&2; exit 1; } \ || : # Except for shell files and for loops, double semicolon is probably a mistake sc_prohibit_double_semicolon: @prohibit='; *;[ {} \]*(/[/*]|$$)' \ in_vc_files='\.[chly]$$' \ exclude='\bfor *\(.*\)' \ halt="Double semicolon detected" \ $(_sc_search_regexp) _ptm1 = use "test C1 && test C2", not "test C1 -''a C2" _ptm2 = use "test C1 || test C2", not "test C1 -''o C2" # Using test's -a and -o operators is not portable. # We prefer test over [, since the latter is spelled [[ in configure.ac. sc_prohibit_test_minus_ao: @prohibit='(\<test| \[+) .+ -[ao] ' \ halt='$(_ptm1); $(_ptm2)' \ $(_sc_search_regexp) # Avoid a test bashism. sc_prohibit_test_double_equal: @prohibit='(\<test| \[+) .+ == ' \ containing='#! */bin/[a-z]*sh' \ halt='use "test x = x", not "test x =''= x"' \ $(_sc_search_regexp) # Each program that uses proper_name_utf8 must link with one of the # ICONV libraries. Otherwise, some ICONV library must appear in LDADD. # The perl -0777 invocation below extracts the possibly-multi-line # definition of LDADD from the appropriate Makefile.am and exits 0 # when it contains "ICONV". sc_proper_name_utf8_requires_ICONV: @progs=$$($(VC_LIST_EXCEPT) \ | xargs $(GREP) -l 'proper_name_utf8 ''("'); \ if test "x$$progs" != x; then \ fail=0; \ for p in $$progs; do \ dir=$$(dirname "$$p"); \ perl -0777 \ -ne 'exit !(/^LDADD =(.+?[^\\]\n)/ms && $$1 =~ /ICONV/)' \ $$dir/Makefile.am && continue; \ base=$$(basename "$$p" .c); \ $(GREP) "$${base}_LDADD.*ICONV)" $$dir/Makefile.am > /dev/null \ || { fail=1; echo 1>&2 "$(ME): $$p uses proper_name_utf8"; }; \ done; \ test $$fail = 1 && \ { echo 1>&2 '$(ME): the above do not link with any ICONV library'; \ exit 1; } || :; \ fi # Warn about "c0nst struct Foo const foo[]", # but not about "char const *const foo" or "#define const const". sc_redundant_const: @prohibit='\bconst\b[[:space:][:alnum:]]{2,}\bconst\b' \ halt='redundant "const" in declarations' \ $(_sc_search_regexp) sc_const_long_option: @prohibit='^ *static.*struct option ' \ exclude='const struct option|struct option const' \ halt='add "const" to the above declarations' \ $(_sc_search_regexp) NEWS_hash = \ $$($(SED) -n '/^\*.* $(PREV_VERSION_REGEXP) ([0-9-]*)/,$$p' \ $(srcdir)/NEWS \ | perl -0777 -pe \ 's/^Copyright.+?Free\sSoftware\sFoundation,\sInc\.\n//ms' \ | md5sum - \ | $(SED) 's/ .*//') # Ensure that we don't accidentally insert an entry into an old NEWS block. sc_immutable_NEWS: @if test -f $(srcdir)/NEWS; then \ test "$(NEWS_hash)" = '$(old_NEWS_hash)' && : || \ { echo '$(ME): you have modified old NEWS' 1>&2; exit 1; }; \ fi # Update the hash stored above. Do this after each release and # for any corrections to old entries. update-NEWS-hash: NEWS perl -pi -e 's/^(old_NEWS_hash[ \t]+:?=[ \t]+).*/$${1}'"$(NEWS_hash)/" \ $(srcdir)/cfg.mk # Ensure that we use only the standard $(VAR) notation, # not @...@ in Makefile.am, now that we can rely on automake # to emit a definition for each substituted variable. # However, there is still one case in which @VAR@ use is not just # legitimate, but actually required: when augmenting an automake-defined # variable with a prefix. For example, gettext uses this: # MAKEINFO = env LANG= LC_MESSAGES= LC_ALL= LANGUAGE= @MAKEINFO@ # otherwise, makeinfo would put German or French (current locale) # navigation hints in the otherwise-English documentation. # # Allow the package to add exceptions via a hook in cfg.mk; # for example, @PRAGMA_SYSTEM_HEADER@ can be permitted by # setting this to ' && !/PRAGMA_SYSTEM_HEADER/'. _makefile_at_at_check_exceptions ?= sc_makefile_at_at_check: @perl -ne '/\@\w+\@/' \ -e ' && !/(\w+)\s+=.*\@\1\@$$/' \ -e ''$(_makefile_at_at_check_exceptions) \ -e 'and (print "$$ARGV:$$.: $$_"), $$m=1; END {exit !$$m}' \ $$($(VC_LIST_EXCEPT) | $(GREP) -E '(^|/)(Makefile\.am|[^/]+\.mk)$$') \ && { echo '$(ME): use $$(...), not @...@' 1>&2; exit 1; } || : news-check: NEWS $(AM_V_GEN)if $(SED) -n $(news-check-lines-spec)p $< \ | $(GREP) -E $(news-check-regexp) >/dev/null; then \ :; \ else \ echo 'NEWS: $$(news-check-regexp) failed to match' 1>&2; \ exit 1; \ fi sc_makefile_TAB_only_indentation: @prohibit='^ [ ]{8}' \ in_vc_files='akefile|\.mk$$' \ halt='found TAB-8-space indentation' \ $(_sc_search_regexp) sc_m4_quote_check: @prohibit='(AC_DEFINE(_UNQUOTED)?|AC_DEFUN)\([^[]' \ in_vc_files='(^configure\.ac|\.m4)$$' \ halt='quote the first arg to AC_DEF*' \ $(_sc_search_regexp) fix_po_file_diag = \ 'you have changed the set of files with translatable diagnostics;\n\ apply the above patch\n' # Generate a list of files in which to search for translatable strings. perl_translatable_files_list_ = \ -e 'foreach $$file (@ARGV) {' \ -e ' \# Consider only file extensions with one or two letters' \ -e ' $$file =~ /\...?$$/ or next;' \ -e ' \# Ignore m4 and mk files' \ -e ' $$file =~ /\.m[4k]$$/ and next;' \ -e ' \# Ignore a .c or .h file with a corresponding .l or .y file' \ -e ' $$file =~ /(.+)\.[ch]$$/ && (-e "$${1}.l" || -e "$${1}.y")' \ -e ' and next;' \ -e ' \# Skip unreadable files' \ -e ' -r $$file or next;' \ -e ' print "$$file ";' \ -e '}' # Verify that all source files using _() (more specifically, files that # match $(_gl_translatable_string_re)) are listed in po/POTFILES.in. po_file ?= $(srcdir)/po/POTFILES.in generated_files ?= $(srcdir)/lib/*.[ch] _gl_translatable_string_re ?= \b(N?_|gettext *)\([^)"]*("|$$) sc_po_check: @if test -f $(po_file); then \ $(GREP) -E -v '^(#|$$)' $(po_file) \ | $(GREP) -v '^src/false\.c$$' | sort > $@-1; \ { $(VC_LIST_EXCEPT); echo $(generated_files); } \ | xargs perl $(perl_translatable_files_list_) \ | xargs $(GREP) -E -l '$(_gl_translatable_string_re)' \ | $(SED) 's|^$(_dot_escaped_srcdir)/||' \ | sort -u > $@-2; \ diff -u -L $(po_file) -L $(po_file) $@-1 $@-2 \ || { printf '$(ME): '$(fix_po_file_diag) 1>&2; exit 1; }; \ rm -f $@-1 $@-2; \ fi # Sometimes it is useful to change the PATH environment variable # in Makefiles. When doing so, it's better not to use the Unix-centric # path separator of ':', but rather the automake-provided '$(PATH_SEPARATOR)'. msg = 'Do not use ":" above; use $$(PATH_SEPARATOR) instead' sc_makefile_path_separator_check: @prohibit='PATH[=].*:' \ in_vc_files='akefile|\.mk$$' \ halt=$(msg) \ $(_sc_search_regexp) # Check that 'make alpha' will not fail at the end of the process, # i.e., when pkg-M.N.tar.xz already exists (either in "." or in ../release) # and is read-only. writable-files: $(AM_V_GEN)if test -d $(release_archive_dir); then \ for file in $(DIST_ARCHIVES); do \ for p in ./ $(release_archive_dir)/; do \ test -e $$p$$file || continue; \ test -w $$p$$file \ || { echo ERROR: $$p$$file is not writable; fail=1; }; \ done; \ done; \ test "$$fail" && exit 1 || : ; \ else :; \ fi v_etc_file = $(gnulib_dir)/lib/version-etc.c sample-test = tests/sample-test texi = doc/$(PACKAGE).texi # Make sure that the copyright date in $(v_etc_file) is up to date. # Do the same for the $(sample-test) and the main doc/.texi file. sc_copyright_check: @require='enum { COPYRIGHT_YEAR = '$$(date +%Y)' };' \ in_files=$(v_etc_file) \ halt='out of date copyright in $(v_etc_file); update it' \ $(_sc_search_regexp) @require='# Copyright \(C\) '$$(date +%Y)' Free' \ in_vc_files=$(sample-test) \ halt='out of date copyright in $(sample-test); update it' \ $(_sc_search_regexp) @require='Copyright @copyright\{\} .*'$$(date +%Y) \ in_vc_files=$(texi) \ halt='out of date copyright in $(texi); update it' \ $(_sc_search_regexp) # If tests/help-version exists and seems to be new enough, assume that its # use of init.sh and path_prepend_ is correct, and ensure that every other # use of init.sh is identical. # This is useful because help-version cross-checks prog --version # with $(VERSION), which verifies that its path_prepend_ invocation # sets PATH correctly. This is an inexpensive way to ensure that # the other init.sh-using tests also get it right. _hv_file ?= $(srcdir)/tests/help-version _hv_regex_weak ?= ^ *\. .*/init\.sh" # Fix syntax-highlighters " _hv_regex_strong ?= ^ *\. "\$${srcdir=\.}/init\.sh" sc_cross_check_PATH_usage_in_tests: @if test -f $(_hv_file); then \ $(GREP) -l 'VERSION mismatch' $(_hv_file) >/dev/null \ || { echo "$@: skipped: no such file: $(_hv_file)" 1>&2; \ exit 0; }; \ $(GREP) -lE '$(_hv_regex_strong)' $(_hv_file) >/dev/null \ || { echo "$@: $(_hv_file) lacks conforming use of init.sh" 1>&2; \ exit 1; }; \ good=$$($(GREP) -E '$(_hv_regex_strong)' $(_hv_file)); \ $(VC_LIST_EXCEPT) \ | xargs $(GREP) -lE '$(_hv_regex_weak)' \ | xargs $(GREP) -LFx "$$good" \ | $(GREP) . \ && { printf "$(ME): the above files use" \ " path_prepend_ inconsistently\n" 1>&2; \ exit 1; } \ || :; \ fi # BRE regex of file contents to identify a test script. _test_script_regex ?= \<init\.sh\> # In tests, use "compare expected actual", not the reverse. sc_prohibit_reversed_compare_failure: @prohibit='\<compare [^ ]+ ([^ ]*exp|/dev/null)' \ containing='$(_test_script_regex)' \ halt='reversed compare arguments' \ $(_sc_search_regexp) # #if HAVE_... will evaluate to false for any non numeric string. # That would be flagged by using -Wundef, however gnulib currently # tests many undefined macros, and so we can't enable that option. # So at least preclude common boolean strings as macro values. sc_Wundef_boolean: @prohibit='^#define.*(yes|no|true|false)$$' \ in_files='$(CONFIG_INCLUDE)' \ halt='Use 0 or 1 for macro values' \ $(_sc_search_regexp) # Even if you use pathmax.h to guarantee that PATH_MAX is defined, it might # not be constant, or might overflow a stack. In general, use PATH_MAX as # a limit, not an array or alloca size. sc_prohibit_path_max_allocation: @prohibit='(\balloca *\([^)]*|\[[^]]*)\bPATH_MAX' \ halt='Avoid stack allocations of size PATH_MAX' \ $(_sc_search_regexp) sc_vulnerable_makefile_CVE-2009-4029: @prohibit='perm -777 -exec chmod a\+rwx|chmod 777 \$$\(distdir\)' \ in_files='(^|/)Makefile\.in$$' \ halt=$$(printf '%s\n' \ 'the above files are vulnerable; beware of running' \ ' "make dist*" rules, and upgrade to fixed automake' \ ' see https://bugzilla.redhat.com/show_bug.cgi?id=542609 for details') \ $(_sc_search_regexp) sc_vulnerable_makefile_CVE-2012-3386: @prohibit='chmod a\+w \$$\(distdir\)' \ in_files='(^|/)Makefile\.in$$' \ halt=$$(printf '%s\n' \ 'the above files are vulnerable; beware of running' \ ' "make distcheck", and upgrade to fixed automake' \ ' see https://bugzilla.redhat.com/show_bug.cgi?id=CVE-2012-3386 for details') \ $(_sc_search_regexp) vc-diff-check: $(AM_V_GEN)(unset CDPATH; cd $(srcdir) && $(VC) diff) > vc-diffs || : $(AM_V_at)if test -s vc-diffs; then \ cat vc-diffs; \ echo "Some files are locally modified:" 1>&2; \ exit 1; \ else \ rm vc-diffs; \ fi rel-files = $(DIST_ARCHIVES) gnulib-version = $$(cd $(gnulib_dir) \ && { git describe || git rev-parse --short=10 HEAD; } ) bootstrap-tools ?= autoconf,automake,gnulib gpgv = $$(gpgv2 --version >/dev/null && echo gpgv2 || echo gpgv) # If it's not already specified, derive the GPG key ID from # the signed tag we've just applied to mark this release. gpg_key_ID ?= \ $$(cd $(srcdir) \ && git cat-file tag v$(VERSION) \ | $(gpgv) --status-fd 1 --keyring /dev/null - - 2>/dev/null \ | $(AWK) '/^\[GNUPG:\] ERRSIG / {print $$3; exit}') gpg_key_email ?= \ $$(gpg --list-key --with-colons $(gpg_key_ID) 2>/dev/null \ | $(AWK) -F: '/^uid/ {print $$10; exit}' \ | $(SED) -n 's/.*<\(.*\)>/\1/p') gpg_keyring_url ?= https://savannah.gnu.org/project/release-gpgkeys.php?group=$(PACKAGE)&download=1 translation_project_ ?= coordinator@translationproject.org # Make info-gnu the default only for a stable release. announcement_Cc_stable = $(translation_project_), $(PACKAGE_BUGREPORT) announcement_mail_headers_stable = \ To: info-gnu@gnu.org \ Cc: $(announcement_Cc_) \ Mail-Followup-To: $(PACKAGE_BUGREPORT) announcement_Cc_alpha = $(translation_project_) announcement_mail_headers_alpha = \ To: $(PACKAGE_BUGREPORT) \ Cc: $(announcement_Cc_) announcement_mail_Cc_beta = $(announcement_mail_Cc_alpha) announcement_mail_headers_beta = $(announcement_mail_headers_alpha) announcement_Cc_ ?= $(announcement_Cc_$(release-type)) announcement_mail_headers_ ?= $(announcement_mail_headers_$(release-type)) announcement: NEWS ChangeLog $(rel-files) # Not $(AM_V_GEN) since the output of this command serves as # announcement message: it would start with " GEN announcement". $(AM_V_at)$(srcdir)/$(_build-aux)/announce-gen \ --mail-headers='$(announcement_mail_headers_)' \ --release-type=$(release-type) \ --package=$(PACKAGE) \ --prev=$(PREV_VERSION) \ --curr=$(VERSION) \ --gpg-key-id=$(gpg_key_ID) \ $$(test -n "$(gpg_key_email)" && \ echo --gpg-key-email="$(gpg_key_email)") \ $$(test -n "$(gpg_keyring_url)" && \ echo --gpg-keyring-url="$(gpg_keyring_url)") \ --srcdir=$(srcdir) \ --news=$(srcdir)/NEWS \ --bootstrap-tools=$(bootstrap-tools) \ $$(case ,$(bootstrap-tools), in (*,gnulib,*) \ echo --gnulib-version=$(gnulib-version);; esac) \ $(addprefix --url-dir=, $(url_dir_list)) .PHONY: release-commit release-commit: $(AM_V_GEN)cd $(srcdir) \ && $(_build-aux)/do-release-commit-and-tag \ -C $(abs_builddir) $(RELEASE) ## ---------------- ## ## Updating files. ## ## ---------------- ## ftp-gnu = https://ftp.gnu.org/gnu www-gnu = https://www.gnu.org upload_dest_dir_ ?= $(PACKAGE) upload_command = \ $(srcdir)/$(_build-aux)/gnupload $(GNUPLOADFLAGS) \ --to $(gnu_rel_host):$(upload_dest_dir_) \ $(rel-files) emit_upload_commands: @echo ===================================== @echo ===================================== @echo '$(upload_command)' @echo '# send the ~/announce-$(my_distdir) e-mail' @echo ===================================== @echo ===================================== .PHONY: upload upload: $(AM_V_GEN)$(upload_command) define emit-commit-log printf '%s\n' 'maint: post-release administrivia' '' \ '* NEWS: Add header line for next release.' \ '* .prev-version: Record previous version.' \ '* cfg.mk (old_NEWS_hash): Auto-update.' endef .PHONY: no-submodule-changes no-submodule-changes: $(AM_V_GEN)if test -d $(srcdir)/.git \ && git --version >/dev/null 2>&1; then \ diff=$$(cd $(srcdir) && git submodule -q foreach \ git diff-index --name-only HEAD) \ || exit 1; \ case $$diff in '') ;; \ *) echo '$(ME): submodule files are locally modified:'; \ echo "$$diff"; exit 1;; esac; \ else \ : ; \ fi submodule-checks ?= no-submodule-changes public-submodule-commit # Ensure that each sub-module commit we're using is public. # Without this, it is too easy to tag and release code that # cannot be built from a fresh clone. .PHONY: public-submodule-commit public-submodule-commit: $(AM_V_GEN)if test -d $(srcdir)/.git \ && git --version >/dev/null 2>&1; then \ cd $(srcdir) && \ git submodule --quiet foreach \ 'test "$$(git rev-parse "$$sha1")" \ = "$$(git merge-base origin "$$sha1")"' \ || { echo '$(ME): found non-public submodule commit' >&2; \ exit 1; }; \ else \ : ; \ fi # This rule has a high enough utility/cost ratio that it should be a # dependent of "check" by default. However, some of us do occasionally # commit a temporary change that deliberately points to a non-public # submodule commit, and want to be able to use rules like "make check". # In that case, run e.g., "make check gl_public_submodule_commit=" # to disable this test. gl_public_submodule_commit ?= public-submodule-commit check: $(gl_public_submodule_commit) .PHONY: alpha beta stable release ALL_RECURSIVE_TARGETS += alpha beta stable alpha beta stable: $(local-check) writable-files $(submodule-checks) $(AM_V_GEN)test $@ = stable \ && { echo $(VERSION) | $(GREP) -E '^[0-9]+(\.[0-9]+)+$$' \ || { echo "invalid version string: $(VERSION)" 1>&2; exit 1;};}\ || : $(AM_V_at)$(MAKE) vc-diff-check $(AM_V_at)$(MAKE) news-check $(AM_V_at)$(MAKE) distcheck $(AM_V_at)$(MAKE) dist $(AM_V_at)$(MAKE) $(release-prep-hook) RELEASE_TYPE=$@ $(AM_V_at)$(MAKE) -s emit_upload_commands RELEASE_TYPE=$@ release: $(AM_V_GEN)$(MAKE) _version $(AM_V_at)$(MAKE) $(release-type) # Override this in cfg.mk if you follow different procedures. release-prep-hook ?= release-prep gl_noteworthy_news_ = * Noteworthy changes in release ?.? (????-??-??) [?] .PHONY: release-prep release-prep: $(AM_V_GEN)$(MAKE) --no-print-directory -s announcement \ > ~/announce-$(my_distdir) $(AM_V_at)if test -d $(release_archive_dir); then \ ln $(rel-files) $(release_archive_dir); \ chmod a-w $(rel-files); \ fi $(AM_V_at)echo $(VERSION) > $(prev_version_file) $(AM_V_at)$(MAKE) update-NEWS-hash $(AM_V_at)perl -pi \ -e '$$. == 3 and print "$(gl_noteworthy_news_)\n\n\n"' \ $(srcdir)/NEWS $(AM_V_at)msg=$$($(emit-commit-log)) || exit 1; \ cd $(srcdir) && $(VC) commit -m "$$msg" -a # Override this with e.g., -s $(srcdir)/some_other_name.texi # if the default $(PACKAGE)-derived name doesn't apply. gendocs_options_ ?= .PHONY: web-manual web-manual: $(AM_V_GEN)test -z "$(manual_title)" \ && { echo define manual_title in cfg.mk 1>&2; exit 1; } || : $(AM_V_at)cd '$(srcdir)/doc'; \ $(SHELL) ../$(_build-aux)/gendocs.sh $(gendocs_options_) \ -o '$(abs_builddir)/doc/manual' \ --email $(PACKAGE_BUGREPORT) $(PACKAGE) \ "$(PACKAGE_NAME) - $(manual_title)" $(AM_V_at)echo " *** Upload the doc/manual directory to web-cvs." .PHONY: web-manual-update web-manual-update: $(AM_V_GEN)cd $(srcdir) \ && $(_build-aux)/gnu-web-doc-update -C $(abs_builddir) # Code Coverage init-coverage: $(MAKE) $(AM_MAKEFLAGS) clean lcov --directory . --zerocounters COVERAGE_CCOPTS ?= "-g --coverage" COVERAGE_OUT ?= doc/coverage build-coverage: $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) $(MAKE) $(AM_MAKEFLAGS) CFLAGS=$(COVERAGE_CCOPTS) CXXFLAGS=$(COVERAGE_CCOPTS) check mkdir -p $(COVERAGE_OUT) lcov --directory . --output-file $(COVERAGE_OUT)/$(PACKAGE).info \ --capture gen-coverage: genhtml --output-directory $(COVERAGE_OUT) \ $(COVERAGE_OUT)/$(PACKAGE).info \ --highlight --frames --legend \ --title "$(PACKAGE_NAME)" coverage: $(MAKE) init-coverage $(MAKE) build-coverage $(MAKE) gen-coverage # Some projects carry local adjustments for gnulib modules via patches in # a gnulib patch directory whose default name is gl/ (defined in bootstrap # via local_gl_dir=gl). Those patches become stale as the originals evolve # in gnulib. Use this rule to refresh any stale patches. It applies each # patch to the original in $(gnulib_dir) and uses the temporary result to # generate a fuzz-free .diff file. If you customize the name of your local # gnulib patch directory via bootstrap.conf, this rule detects that name. # Run this from a non-VPATH (i.e., srcdir) build directory. .PHONY: refresh-gnulib-patches refresh-gnulib-patches: gl=gl; \ if test -f bootstrap.conf; then \ t=$$(perl -lne '/^\s*local_gl_dir=(\S+)/ and $$d=$$1;' \ -e 'END{defined $$d and print $$d}' bootstrap.conf); \ test -n "$$t" && gl=$$t; \ fi; \ for diff in $$(cd $$gl; git ls-files | $(GREP) '\.diff$$'); do \ b=$$(printf %s "$$diff"|$(SED) 's/\.diff$$//'); \ VERSION_CONTROL=none \ patch "$(gnulib_dir)/$$b" "$$gl/$$diff" || exit 1; \ ( cd $(gnulib_dir) || exit 1; \ git diff "$$b" > "../$$gl/$$diff"; \ git checkout $$b ) || exit 1; \ done # Update gettext files. PACKAGE ?= $(shell basename $(PWD)) PO_DOMAIN ?= $(PACKAGE) POURL = https://translationproject.org/latest/$(PO_DOMAIN)/ PODIR ?= po refresh-po: rm -f $(PODIR)/*.po && \ echo "$(ME): getting translations into po (please ignore the robots.txt ERROR 404)..." && \ wget --no-verbose --directory-prefix $(PODIR) --no-directories --recursive --level 1 --accept .po --accept .po.1 $(POURL) && \ echo 'en@boldquot' > $(PODIR)/LINGUAS && \ echo 'en@quot' >> $(PODIR)/LINGUAS && \ ls $(PODIR)/*.po | $(SED) 's/\.po//;s,$(PODIR)/,,' | \ sort >> $(PODIR)/LINGUAS # Indentation indent_args ?= -ppi 1 C_SOURCES ?= $$($(VC_LIST_EXCEPT) | grep '\.[ch]\(.in\)\?$$') INDENT_SOURCES ?= $(C_SOURCES) exclude_file_name_regexp--indent ?= $(exclude_file_name_regexp--sc_indent) .PHONY: indent indent: # Running indent once is not idempotent, but running it twice is. $(AM_V_GEN)indent $(indent_args) $(INDENT_SOURCES) && \ indent $(indent_args) $(INDENT_SOURCES) sc_indent: @if ! command -v indent > /dev/null; then \ echo 1>&2 '$(ME): sc_indent: indent is missing'; \ else \ fail=0; files="$(INDENT_SOURCES)"; \ for f in $$files; do \ indent $(indent_args) -st $$f \ | indent $(indent_args) -st - \ | diff -u $$f - || fail=1; \ done; \ test $$fail = 1 && \ { echo 1>&2 '$(ME): code format error, try "make indent"'; \ exit 1; } || :; \ fi # If you want to set UPDATE_COPYRIGHT_* environment variables, # put the assignments in this variable. update-copyright-env ?= # Run this rule once per year (usually early in January) # to update all FSF copyright year lists in your project. # If you have an additional project-specific rule, # add it in cfg.mk along with a line 'update-copyright: prereq'. # By default, exclude all variants of COPYING; you can also # add exemptions (such as ChangeLog..* for rotated change logs) # in the file .x-update-copyright. .PHONY: update-copyright update-copyright: $(AM_V_GEN)$(GREP) -l -w Copyright \ $$(export VC_LIST_EXCEPT_DEFAULT=COPYING && $(VC_LIST_EXCEPT)) \ | $(update-copyright-env) xargs $(srcdir)/$(_build-aux)/$@ # This tight_scope test is skipped with a warning if $(_gl_TS_headers) is not # overridden and $(_gl_TS_dir)/Makefile.am does not mention noinst_HEADERS. # NOTE: to override any _gl_TS_* default value, you must # define the variable(s) using "export" in cfg.mk. _gl_TS_dir ?= src ALL_RECURSIVE_TARGETS += sc_tight_scope sc_tight_scope: tight-scope.mk @fail=0; \ if ! $(GREP) '^ *export _gl_TS_headers *=' $(srcdir)/cfg.mk \ > /dev/null \ && ! $(GREP) -w noinst_HEADERS $(srcdir)/$(_gl_TS_dir)/Makefile.am \ > /dev/null 2>&1; then \ echo '$(ME): skipping $@'; \ else \ $(MAKE) -s -C $(_gl_TS_dir) \ -f Makefile \ -f $(abs_top_srcdir)/cfg.mk \ -f $(abs_top_builddir)/$< \ _gl_tight_scope \ || fail=1; \ fi; \ rm -f $<; \ exit $$fail tight-scope.mk: $(ME) @perl -ne '/^# TS-start/.../^# TS-end/ and print' $(srcdir)/$(ME) > $@-t @mv $@-t $@ ifeq (a,b) # TS-start # Most functions should have static scope. # Any that don't must be marked with 'extern', but 'main' # and 'usage' are exceptions: they're always extern, but # do not need to be marked. Symbols matching '__.*' are # reserved by the compiler, so are automatically excluded below. _gl_TS_unmarked_extern_functions ?= main usage _gl_TS_function_match ?= /^(?:$(_gl_TS_extern)) +.*?(\w+) *\(/ # If your project uses a macro like "XTERN", then put # the following in cfg.mk to override this default: # export _gl_TS_extern = extern|XTERN _gl_TS_extern ?= extern # The second nm|grep checks for file-scope variables with 'extern' scope. # Without gnulib's progname module, you might put program_name here. # Symbols matching '__.*' are reserved by the compiler, # so are automatically excluded below. _gl_TS_unmarked_extern_vars ?= # NOTE: the _match variables are perl expressions -- not mere regular # expressions -- so that you can extend them to match other patterns # and easily extract matched variable names. # For example, if your project declares some global variables via # a macro like this: GLOBAL(type, var_name, initializer), then you # can override this definition to automatically extract those names: # export _gl_TS_var_match = \ # /^(?:$(_gl_TS_extern)) .*?\**(\w+)(\[.*?\])?;/ || /\bGLOBAL\(.*?,\s*(.*?),/ _gl_TS_var_match ?= /^(?:$(_gl_TS_extern)) .*?(\w+)(\[.*?\])?;/ # The names of object files in (or relative to) $(_gl_TS_dir). _gl_TS_obj_files ?= *.$(OBJEXT) # Files in which to search for the one-line style extern declarations. # $(_gl_TS_dir)-relative. _gl_TS_headers ?= $(noinst_HEADERS) _gl_TS_other_headers ?= *.h .PHONY: _gl_tight_scope _gl_tight_scope: $(bin_PROGRAMS) sed_wrap='s/^/^_?/;s/$$/$$/'; \ t=exceptions-$$$$; \ trap 's=$$?; rm -f $$t; exit $$s' 0; \ for sig in 1 2 3 13 15; do \ eval "trap 'v=`expr $$sig + 128`; (exit $$v); exit $$v' $$sig"; \ done; \ src=`for f in $(SOURCES); do \ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ hdr=`for f in $(_gl_TS_headers); do \ test -f $$f && d= || d=$(srcdir)/; echo $$d$$f; done`; \ ( printf '%s\n' '__.*' $(_gl_TS_unmarked_extern_functions); \ $(GREP) -h -A1 '^extern .*[^;]$$' $$src \ | $(GREP) -vE '^(extern |--|#)' | $(SED) 's/ .*//; /^$$/d'; \ perl -lne \ '$(_gl_TS_function_match) and print $$1' $$hdr; \ ) | sort -u | $(SED) "$$sed_wrap" > $$t; \ nm -g $(_gl_TS_obj_files)|$(SED) -n 's/.* T //p'|$(GREP) -Ev -f $$t \ && { echo the above functions should have static scope >&2; \ exit 1; } || : ; \ ( printf '%s\n' '__.*' main $(_gl_TS_unmarked_extern_vars); \ perl -lne '$(_gl_TS_var_match) and print $$1' \ $$hdr $(_gl_TS_other_headers) \ ) | sort -u | $(SED) "$$sed_wrap" > $$t; \ nm -g $(_gl_TS_obj_files) | $(SED) -n 's/.* [BCDGRS] //p' \ | sort -u | $(GREP) -Ev -f $$t \ && { echo the above variables should have static scope >&2; \ exit 1; } || : # TS-end endif ����������������recutils-1.9/NEWS�����������������������������������������������������������������������������������0000644�0000000�0000000�00000020433�14226572643�010620� �����������������������������������������������������������������������������������������������������������������������������������������������������������������������������0000000�0000000������������������������������������������������������������������������������������������������������������������������������������������������������������������������This NEWS file records noteworthy changes, very tersely. See the manual for detailed information. Copyright 2010-2022 Jose E. Marchesi. Copying and distribution of this file, with or without modification, are permitted in any medium without royalty provided the copyright notice and this notice are preserved. Version 1.9 (16 April 2022) * Utilities: . Fix bug preventing recins and recset to work when /tmp is in a different mount point. . Fix a segfault that occured when csv2rec was presented with invalid data. . Fix long option name for -j/--join. * Format: . New special field %singular to mark fields whose contents must be unique in the containing record set. * librec: . Fix a segmentation fault when there are blank characters before the list of fields in %type fields. * Documentation: . New manual chapter discussing the ob-rec.el major mode. . Do not claim that recins creates non-existent files. * Other fixes: . CVE-2021-46019 . CVE-2021-46022 . CVE-2021-46022 . gnulib updated. Version 1.8 (3 January 2019) * Utilities: . Fix the build of readrec with recent bash headers. * librec: . Fix evaluation of sexes containing #NAME expressions. . Make numeric results from aggregated functions signed. * readred: . readrec --help now shows the help message and returns, instead of waiting for input. * Emacs mode: . rec-mode.el now supports case-insensitive searches. . rec-mode.el now defines it's own faces. . ob-rec.el was switched to lexical binding to satisfy later org-mode versions. * It is now possible to run the testsuite in parallel. * Other fixes: . gnulib updated. . GNU/Hurd build fixed. . Aggregate functions now work properly in Aarch64 and powerpc. Version 1.7 (25 March 2014) * Utilities: . rec2csv now supports a -d option to change the delimiter character in CSV files. . It is now possible to specify several recfiles in the command line containing anonymous records. * Format: . Support for restricting the fields that can appear in records with the new %allowed special field. . If a tab separates a field name and a field value is now ignored and not considered part of the field value. * librec: . The current version of the library is now 1. * Emacs mode: . It now possible to jump several records while navigating using a prefix argument to the next/previous commands. * Documentation: . The examples in the manual have been improved, and well as many other aspects: formatting, English, etc. Special thanks to Karl Berry for pointing out the problems and suggesting solutions. * Internal cleanup and code factorization. * Many, many, many bug fixes :D Version 1.6 (03 November 2013) * Utilities: . Support for joins and foreign keys. . Grouping records by one or more fields. . Sorting recors by several fields. . Specifying rewrite rules in field expressions. . Writing field values in rows. . Dot-notation in selection expressions. . Support for the >= and <= operators in selection expressions. . Aggregated functions: sum, min, max, avg. . New bash loadable builtin `readrec'. * Format: . New UUID field type. . User provided arbitrary constraints with %constraint. . Pre-defined constants MIN and MAX can now be used in ranges. * librec: . New high-level API: rec_db_query, rec_db_insert, rec_db_delete and rec_db_set. . Documentation in the rec.h header file extended and improved. * Emacs mode: . Texinfo manual describing the usage of rec-mode. . Support for a mode hook. . Comments are now supported in records. . add-change-log-entry in a recfile now does the right thing. . Commands for copying/killing fields and records. . Support for undo in navigation mode. . Field folding. . Editing methods for the several field types. . Statistics. * Documentation: . The user manual has been restructured and expanded. * Internal cleanup and code factorization. * Many, many, many bug fixes :D Version 1.5 (13 January 2012) * The utilities will now ask interactively for a password if it was not provided with the -s command line option. This avoids security problems related to shell history files. * Support for octal and hexadecimal numbers has been added. They can be used in both the records and selection expressions. * It is now possible to select a given number of random records in many of the utilities using the -m command line option. * The -n option now accepts a list of indexes, supporting ranges. * The new -U (uniq) option for recsel removes duplicated fields in the output records. * The new -q (quick) option allows to quickly search for the desired record without having to provide a complete selection expression. * Auto generated fields are now considered integers by default. This avoids repetitive patterns in record descriptors involving %auto and %type. * Tab characters are now allowed in blank lines betwwen records. * The API in rec.h is now better documented with comments, and improved. * recfix now exits with an error status if there is a parse error in some input file. * The usage of the internal data structures has been _vastly_ improved, resulting in a much faster operation. * Internal cleanup and code factorization. * Many, many, many bug fixes :D Version 1.4 (03 November 2011) * Support for encryption with the new %confidential special field. * Support for named types with the new %typedef special field. * Support for sorting with the new %sort special field. * Recutils support for org-babel is now included in the distribution as ob-rec.el. It allows to read rec data into org documents in both raw and table formats. * It is now possible to use double quotes for delimiting string literals in selection expressions, as well as single quotes. Unescapted newline characters are also supported. * The manual has been vastly improved. * recfix now supports several operations: check, sort, encrypt and decrypt. * recins now generates parseable locale independent dates when generating time-stamps in auto-fields. * Lots of bug fixes. Version 1.3 (11 February 2011) * A quite bad (and embarrassing) bug introduced in 1.2 has been fixed. The bug was causing recins, recdel and recset to report random integrity failures, due to a uninitialized variable. * New special field %size, that allows to define constraints in the size of record sets. * Several fixes in the user manual. * Little portability issue that prevented one of the tests to compile in macos x has been fixed. * Translations updates. Version 1.2 (4 February 2011) * New utility rec2csv, to export rec data to csv files. * Support for auto-incremented fields and timestamps with the new %auto field in record descriptors. * Support for comments in enum type descriptions. * recset now supports a new "set or add field" operation, implementing the common case of setting the value of a field in case it exists, or else add it to the record. * The flavor of regular expressions accepted in both selection expressions and type descriptions is now documented in the user manual. * Translations for German, Finnish, Swedish and Dutch. * recdel now performs an integrity check before to complete the deletion. * The utilities no longer "expand" the contents of remote descriptors in the local ones. * recset and recins no longer destroy the permissions of the rec file that is being modified. * Many fixes in the documentation. * Lots of bug fixes. Version 1.1 (24 December 2010) * New utility recfmt, to format records based on templates. * Improvements in selection expressions: . Support ranges in field subscripts. . New date operators: before (<<), after (>>) and sametime (==). . New ternary conditional operator (?:). . New string concatenation operator (&). * libcsv is now embedded in the source distribution, so it is no longer required to have it installed to build csv2rec. * Portability problems fixed. The programs have been tested in the following systems: . GNU/Linux . FreeBSD 6.4 . MacOS X . mingw32 . Solaris 8 . AIX 5.1 . HP-UX 11.00 . IRIX 6.5 . Tru64 (OSF/1 5.1) . Cygwin 1.7 * Lots of bug fixes. Version 1.0 (3 December 2010) * Initial release. . User manual. . Library (librec). . Utilities: recinf, recsel, recins, recdel, recset, recfix, csv2rec, mdb2rec. . Experimental Emacs mode (rec-mode.el). ���������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������������